guava-3.6/0000755017361200001450000000000011027430357012344 5ustar tabbottcrontabguava-3.6/src/0000755017361200001450000000000011027425556013140 5ustar tabbottcrontabguava-3.6/src/Makefile0000755017361200001450000000042011027426356014576 0ustar tabbottcrontab# This is the Makefile for Guava binaries # Set this to the location for Guava binaries BINDIR = /usr/local/gap/pkg/guava/bin CC = gcc CFLAGS = -O2 FILES = leonconv all : $(FILES) install : mkdir -p $(BINDIR) cp $(FILES) $(BINDIR) clean : rm -f $(FILES) rm -f *.oguava-3.6/src/defs.h0000644017361200001450000000022311026723452014222 0ustar tabbottcrontab/* some defines needed on SunOS 4.1.3 */ extern int printf(); extern int fprintf(); extern int close(); extern int fclose(); extern int fscanf(); guava-3.6/src/ctjhai/0000755017361200001450000000000011026723452014375 5ustar tabbottcrontabguava-3.6/src/ctjhai/README0000644017361200001450000000405011026723452015254 0ustar tabbottcrontab****************************************************************** 1. The author is not liable for any damage on your side caused as a result of using this program. Use it at your own risk. 2. This code is provided as is. Bugs may be reported to the author (ctjhai@plymouth.ac.uk), but bear in mind that the author has no duty to remedy for the deficiencies of the program. 3. Contributions towards this program are greatly appreciated, especially in making this code faster (optimisation). When you have changed the program, or implemented the program for other OS or environment, it would be grateful if you could specify the part you have changed. ****************************************************************** This directory contains the source code for computing the minimum Hamming weight of linear codes over GF(2) and GF(3). The executable minimum-weight is called within GUAVA by the MinimumWeight function. This code is known to run in the following platforms: o X11 under Mac OS X (PowerPC) - 32 bit machine o Windows XP running Cygwin - 32 bit machine o Linux 2.6 - 32 bit machine o Linux 2.6 - 64 bit machine You can also use this executable without having to launch GUAVA. This code expects a generator matrix as an input and the format of the matrix may be easily explained with this example. 6 12 3 1 0 2 1 2 2 0 0 0 0 0 1 0 1 0 2 1 2 2 0 0 0 0 1 0 0 1 0 2 1 2 2 0 0 0 1 0 0 0 1 0 2 1 2 2 0 0 1 0 0 0 0 1 0 2 1 2 2 0 1 0 0 0 0 0 1 0 2 1 2 2 1 The above example is the generator matrix of a code of length 12 and dimension 6 over GF(3). To compute the minimum Hamming weight of the code above, you can use the following command: minimum-weight GeneratorMatrix.File where GeneratorMatrix.File contains the generator matrix described above. For further information on the other parameters, run minimum-weight --help To produce the executable, refer to the Makefile in GUAVA's main directory. CJ, Tjhai email: ctjhai@plymouth.ac.uk Homepage: www.plymouth.ac.uk/staff/ctjhai 18 March 2008 guava-3.6/src/ctjhai/minimum-weight-gf3.c0000644017361200001450000006612511026723452020170 0ustar tabbottcrontab/* * minimum-weight-gf3.c * * Minimum Hamming weight computation for codes over GF(3) * The core of computation is in this src file * * NOTES: * The GF(3) vectors are represented as two packed long * integers, i.e. GF3_VEC structure in minimum-weight-gf3.h. * Each of the long integer is either 32-bit or 64-bit, * depending on the machine architecture, see config.h * * This packing of GF(3) vectors and their vector manipulations * follow the description given in the paper by * * K. Harrison, D. Page and N. P. Smart, "Software implementation * of finite fields of characteristic three, for use in * pairing-based cryptosystems", London Mathematical Society * Journal of Computation and Mathematics, vol. 5, pp.181--193, * 2002 * * To efficiently generate combination patterns, revolving door * algorithm is used here. This algorithm has the property that * in going to the next combination pattern, there is only one * position that is exchanged, i.e. one 'In' and one 'Out'. The * implementation here follows the third algorithm in the paper * by * * Clement W.H. Lam and Leonard H. Soicher, "Three new combination * algorithms with minimal change property", Communications * of the ACM, vol. 25, no. 8, August 1982 * * In the current version of the code, the generation of combination * patterns does not fully exploit the the revolving door property * yet--further (speed) optimisation is possible. * * To generate all n-tupple of non zero elements of GF(3), Bitner's * algorithm is used. See Algorithm L (Loopless Gray binary * generation) in Knuth's book. * * The code here is not yet optmised, your contributions in this * respect are greatly appreciated. * * Version Log: * 0.1 18 March 2008 (first released to public -- GUAVA 3.3) * * CJ, Tjhai * email: ctjhai@plymouth.ac.uk * Homepage: www.plymouth.ac.uk/staff/ctjhai * */ #include #include #include #include #include "minimum-weight-gf3.h" #include "popcount.h" #include "config.h" #include "types.h" /*--------- Some useful macros for updating upper-bound ---------*/ #define ROUND_0_MOD_3(d) (((int)ceil((double)d/3.0))*3) /* for self-orthogonal ternary code */ /*-------------------- Function prototypes ----------------------*/ void init_gf3(GF3 *gf); void clear_gf3(GF3 *gf); GF3_VEC **to_packed_integer_gf3(MATRIX *G, int nBlocks); int gf3_gauss_jordan(GF3 *gf, MATRIX *M, int start); void mat_packed_print_gf3(GF3_VEC **M, int nBlocks, int dim, int length); void update_info_gf3(PACKED_MATRIX_GF3 *G, INFO *info); void cyclic_update_info_gf3(PACKED_MATRIX_GF3 *G, INFO *info); void __mindist_gf3(PACKED_MATRIX_GF3 *G, INFO *info); void __cyclic_mindist_gf3(PACKED_MATRIX_GF3 *G, INFO *info); /*---------------------------------------------------------------*/ /* Return the minimum weight of a general ternary linear code */ int mindist_gf3(MATRIX G, mod_t m_mod, int lower_bound) { int i, j, l, rank, pos; double steps; unsigned int sum=0; PACKED_MATRIX_GF3 packedG; INFO info; GF3 gf; /* Initialise GF(3) */ init_gf3(&gf); /* * Knowing G, now build an array of generator matrices with * disjoint information sets. These matrices are stored in * packed integer format * */ j = (G.cols - G.rows) + 1; /* maximum possible number of matrices */ packedG.mat = (GF3_VEC ***)malloc(j * sizeof(GF3_VEC **)); packedG.rank= (unsigned short *)malloc(j * sizeof(unsigned short)); packedG.dimension = G.rows; packedG.block_length = G.cols; packedG.nMatrices = packedG.nFullRankMatrices = 0; packedG.nBlocks = (!(G.cols % BITSIZE)) ? (G.cols / BITSIZE) : (G.cols / BITSIZE)+1; for (i=0,pos=0;;i++) { if (pos >= G.cols) break; rank = gf3_gauss_jordan(&gf, &G, pos); /* what is the rank at column 'pos'? */ if (!rank) { fprintf(stderr, "ERROR: rank is 0\n\n"); return -1; } /* Convert the reduced echelon matrix into packed integer format */ packedG.mat[i] = to_packed_integer_gf3(&G, packedG.nBlocks); packedG.rank[i] = rank; pos += rank; packedG.nMatrices++; if (rank == G.rows) packedG.nFullRankMatrices++; } /*---------------------- core computation starts here -------------------------*/ printf("[%d,%d] linear code over GF(3) - minimum weight evaluation\n", G.cols, G.rows); printf("Known lower-bound: %d\n", lower_bound); printf("There are %d generator matrices, ranks : ", packedG.nMatrices); for (i=0; i0) info.lower_bound += j; } /* Information weight 1 */ printf("Enumerating codewords with information weight 1 (w=1)\n"); fflush(stdout); steps = 0; info.upper_bound = G.cols; i = packedG.nMatrices; do { --i; j = packedG.dimension; do { --j; steps++; sum = 0; l = packedG.nBlocks; do { --l; sum += (popcount(packedG.mat[i][j][l].v1) + popcount(packedG.mat[i][j][l].v2)); } while (l); if (sum < info.upper_bound) { info.upper_bound = sum; printf(" Found new minimum weight %d\n", info.upper_bound); fflush(stdout); if (info.upper_bound <= info.known_lower_bound) break; } } while (j); if (sum <= info.known_lower_bound) { printf("The known lower-bound is met, enumeration completed.\n"); info.upper_bound = sum; goto completed; } } while(i); /* Update progress information */ info.info_weight_completed = 1; update_info_gf3(&packedG, &info); printf("Number of matrices required for codeword enumeration %d\n", info.matrices_req); printf("Completed w= 1, %.0lf codewords enumerated, lower-bound %d, upper-bound %d\n", steps, info.displayed_lower_bound, info.upper_bound); fflush(stdout); if (info.displayed_lower_bound >= info.upper_bound) goto completed; printf("Termination expected with information weight %d at matrix %d\n", info.max_info_weight_req, info.ith_matrix); printf("-----------------------------------------------------------------------------\n"); /* The following function is executed for higher minimum weight */ __mindist_gf3(&packedG, &info); /*------------------------ end of core computation ----------------------------*/ completed: /* Deallocating memory */ for (i=0; i= info.upper_bound) goto completed; printf("Termination expected with information weight %d\n", info.max_info_weight_req); printf("-----------------------------------------------------------------------------\n"); /* The following function is executed for higher minimum weight */ __cyclic_mindist_gf3(&packedG, &info); /*------------------------ end of core computation ----------------------------*/ completed: /* Deallocating memory */ for (j=0; j= 2 */ void __mindist_gf3(PACKED_MATRIX_GF3 *G, INFO *info) { #define EVALUATE_MINIMUM_WEIGHT_GF3 {\ memset(a, 0, m * sizeof(short));\ f[m] = m; j = m; do { --j; f[j] = j; } while (j);\ while (1) {\ l=info->matrices_req; do { --l;\ steps++;\ i = G->nBlocks; w = 0;\ do { --i;\ /* FIXME: (optimisation) */\ /* There must a clever (faster) way of doing this */\ /* by exploiting the revolving door property */\ c[l][i] = G2[0][l][v[1]][i];\ j = m; do { --j;\ add_gf3_vec(c[l][i], G2[a[j]][l][v[j+2]][i], c[l][i]);\ } while (j);\ w += (popcount(c[l][i].v1) + popcount(c[l][i].v2));\ } while (i);\ if (w < info->upper_bound) {\ info->upper_bound = w;\ printf(" Found new minimum weight %d\n", w); fflush(stdout);\ if (w <= info->known_lower_bound) goto lower_bound_met;\ }\ } while (l);\ j = f[0]; f[0] = 0;\ if (!(j-m)) break;\ else { f[j] = f[j+1]; f[j+1] = j+1; }\ a[j] = 1 - a[j];\ }\ } double steps; short m, iw, top, nMat; register short i, j, l, w; register GF3_VEC **c; short *v, *s, *a, *f; packed_t t1, t2; /* G2 contains a set of generator matrices of G->nFullRankMatrices disjoint */ /* information sets. For each information set, G2 contains (q-1) matrices, */ /* where the identity element of each is non zeros of GF(q) */ GF3_VEC ****G2; nMat = info->matrices_req; G2 = (GF3_VEC ****) malloc(2 * sizeof(GF3_VEC ***)); G2[0] = G->mat; /* the first one (identity = 1) points to 'G->mat' */ G2[1] = (GF3_VEC ***) malloc(nMat * sizeof(GF3_VEC **)); for (i=0; idimension * sizeof(GF3_VEC *)); for (j=0; jdimension; j++) { G2[1][i][j] = (GF3_VEC *) malloc(G->nBlocks * sizeof(GF3_VEC)); for (l=0; lnBlocks; l++) { G2[1][i][j][l].v1 = G2[0][i][j][l].v2; G2[1][i][j][l].v2 = G2[0][i][j][l].v1; } } } w = top = 0; c = (GF3_VEC **)malloc(nMat * sizeof(GF3_VEC*)); l = nMat; do { --l; c[l] = (GF3_VEC *)malloc(G->nBlocks * sizeof(GF3_VEC)); } while (l); for (iw=2;;iw++) { /* starting from information weight 2 */ if (iw == info->max_info_weight_req) info->matrices_req = info->ith_matrix; printf("Enumerating codewords with information weight %d (w=%d) using %d matrices\n", iw, iw, info->matrices_req); fflush(stdout); steps = 0; m = iw - 1; v = (short *) malloc((iw+2)*sizeof(short)); s = (short *) malloc((iw+2)*sizeof(short)); a = (short *) malloc(iw *sizeof(short)); f = (short *) malloc((iw+1)*sizeof(short)); if ( !(iw & 1) ) { v[iw + 1] = G->dimension; v[iw] = iw - 1; if (iw < G->dimension) top = iw; } else { v[iw] = G->dimension - 1; if (iw < G->dimension) top = iw - 1; } v[1] = s[iw] = 0; for (i=2; i top - 1) { top = top - 1; v[top] = top - 1; } else { v[top-1] = top - 2; i = top; top = s[top]; s[i] = i + 1; } } else { v[top-1] = v[top]; ++v[top]; if (v[top] == v[top+1] - 1) { s[top-1] = s[top]; s[top] = top + 1; } top -= 2; } EVALUATE_MINIMUM_WEIGHT_GF3; } } /* Update progress information */ info->info_weight_completed = iw; update_info_gf3(G, info); printf("Completed w=%2d, %.0lf codewords enumerated, lower-bound %d, upper-bound %d\n", iw, steps, info->displayed_lower_bound, info->upper_bound); fflush(stdout); lower_bound_met: free(a); free(f); free(v); free(s); if (w <= info->known_lower_bound) { printf("The known lower-bound is met, enumeration completed.\n"); printf("-----------------------------------------------------------------------------\n"); info->upper_bound = w; for (l=0; ldimension; i++) free(G2[1][l][i]); free(G2[1][l]); free(c[l]); } free(G2[1]); free(G2); return; } if (info->displayed_lower_bound >= info->upper_bound) break; printf("Termination expected with information weight %d at matrix %d\n", info->max_info_weight_req, info->ith_matrix); printf("-----------------------------------------------------------------------------\n"); } printf("-----------------------------------------------------------------------------\n"); for (l=0; ldimension; i++) free(G2[1][l][i]); free(c[l]); free(G2[1][l]); } free(G2[1]); free(G2); free(c); } /* Cyclic code: minimum weight enumeration function for information weight >= 2 */ void __cyclic_mindist_gf3(PACKED_MATRIX_GF3 *G, INFO *info) { #define EVALUATE_CYCLIC_MINIMUM_WEIGHT_GF3 {\ memset(a, 0, m * sizeof(short));\ f[m] = m; j = m; do { --j; f[j] = j; } while (j);\ while (1) {\ steps++;\ i = G->nBlocks; w = 0;\ do { --i;\ /* FIXME: (optimisation) */\ /* There must a clever (faster) way of doing this */\ /* by exploiting the revolving door property */\ c[i] = G2[0][0][v[1]][i];\ j = m; do { --j; add_gf3_vec(c[i], G2[a[j]][0][v[j+2]][i], c[i]); } while (j);\ w += (popcount(c[i].v1) + popcount(c[i].v2));\ } while (i);\ if (w < info->upper_bound) {\ info->upper_bound = w;\ printf(" Found new minimum weight %d\n", w); fflush(stdout);\ if (w <= info->known_lower_bound) goto lower_bound_met;\ }\ j = f[0]; f[0] = 0;\ if (!(j-m)) break;\ else { f[j] = f[j+1]; f[j+1] = j+1; }\ a[j] = 1 - a[j];\ }\ } double steps; short m, iw, top; register short i, j, l, w; register GF3_VEC *c; packed_t t1, t2; short *v, *s, *a, *f; /* G2 contains a set of generator matrices of G->nFullRankMatrices disjoint */ /* information sets. For each information set, G2 contains (q-1) matrices, */ /* where the identity element of each is non zeros of GF(q) */ GF3_VEC ****G2; G2 = (GF3_VEC ****) malloc(2 * sizeof(GF3_VEC ***)); G2[0] = G->mat; /* the first one (identity = 1) points to 'G->mat' */ G2[1] = (GF3_VEC ***) malloc(1 * sizeof(GF3_VEC **)); G2[1][0] = (GF3_VEC **) malloc(G->dimension * sizeof(GF3_VEC *)); for (j=0; jdimension; j++) { G2[1][0][j] = (GF3_VEC *) malloc(G->nBlocks * sizeof(GF3_VEC)); for (l=0; lnBlocks; l++) { G2[1][0][j][l].v1 = G2[0][0][j][l].v2; G2[1][0][j][l].v2 = G2[0][0][j][l].v1; } } w = top = 0; c = (GF3_VEC *)malloc(G->nBlocks * sizeof(GF3_VEC)); for (iw=2;;iw++) { /* starting from information weight 2 */ printf("Enumerating codewords with information weight %d (w=%d) using 1 matrix\n", iw, iw); fflush(stdout); steps = 0; m = iw - 1; v = (short *) malloc((iw+2)*sizeof(short)); s = (short *) malloc((iw+2)*sizeof(short)); a = (short *) malloc(iw *sizeof(short)); f = (short *) malloc((iw+1)*sizeof(short)); if ( !(iw & 1) ) { v[iw + 1] = G->dimension; v[iw] = iw - 1; if (iw < G->dimension) top = iw; } else { v[iw] = G->dimension - 1; if (iw < G->dimension) top = iw - 1; } v[1] = s[iw] = 0; for (i=2; i top - 1) { top = top - 1; v[top] = top - 1; } else { v[top-1] = top - 2; i = top; top = s[top]; s[i] = i + 1; } } else { v[top-1] = v[top]; ++v[top]; if (v[top] == v[top+1] - 1) { s[top-1] = s[top]; s[top] = top + 1; } top -= 2; } EVALUATE_CYCLIC_MINIMUM_WEIGHT_GF3; } } /* Update progress information */ info->info_weight_completed = iw; cyclic_update_info_gf3(G, info); printf("Completed w=%2d, %.0lf codewords enumerated, lower-bound %d, upper-bound %d\n", iw, steps, info->displayed_lower_bound, info->upper_bound); fflush(stdout); lower_bound_met: free(v); free(s); free(a); free(f); if (w <= info->known_lower_bound) { printf("The known lower-bound is met, enumeration completed.\n"); printf("-----------------------------------------------------------------------------\n"); info->upper_bound = w; free(c); for (i=0; idimension; i++) free(G2[1][0][i]); free(G2[1][0]); free(G2[1]); free(G2); return; } if (info->displayed_lower_bound >= info->upper_bound) break; printf("Termination expected with information weight %d\n", info->max_info_weight_req); printf("-----------------------------------------------------------------------------\n"); } printf("-----------------------------------------------------------------------------\n"); free(c); for (i=0; idimension; i++) free(G2[1][0][i]); free(G2[1][0]); free(G2[1]); free(G2); } /* Update INFO structure, which contains various information on the */ /* current progress of enumeration. */ void update_info_gf3(PACKED_MATRIX_GF3 *G, INFO *info) { bool end; short i, j, l, d, w; /* Estimate the number of matrices required to complete enumeration */ info->matrices_req = 0; for (w=0,i=1;;i++) { w = (i+1) * G->nFullRankMatrices; info->matrices_req = G->nFullRankMatrices; for (j=G->nFullRankMatrices; jnMatrices; j++) { l = i - (G->dimension - G->rank[j]) + 1; if (l > 0) { w += l; info->matrices_req++; } } end = false; switch (info->weight_constraint) { case C_0MOD3: if (ROUND_0_MOD_3(w) >= info->upper_bound) end = true; break; default: if (w >= info->upper_bound) end = true; } if (end) break; } /* Estimate the minimum distance lower bound after current enumeration */ if (info->info_weight_completed == 1) /* required for safety */ info->max_info_weight_req = G->dimension; if (info->info_weight_completed < info->max_info_weight_req) { info->lower_bound = (info->info_weight_completed + 1) * G->nFullRankMatrices; for (j=G->nFullRankMatrices; jnMatrices; j++) { l = info->info_weight_completed - (G->dimension - G->rank[j]) + 1; if (l > 0) info->lower_bound += l; } } else { /* last information weight in enumeration */ for (j=0; jith_matrix; j++) { if (j < G->nFullRankMatrices) info->lower_bound++; else { l = i - (G->dimension - G->rank[j]) + 1; if (l > 0) info->lower_bound++; } } } /* lower-bound information to display, this value could be different */ /* from the actual lower-bound if the code satisfies some weight */ /* constraint, i.e. 0 mod 3 (self-orthogonal ternay code). */ switch (info->weight_constraint) { case C_0MOD3: info->displayed_lower_bound = ROUND_0_MOD_3(info->lower_bound); break; default: info->displayed_lower_bound = info->lower_bound; } /* Estimate the maximum information weight required */ d = 0; w = info->lower_bound; for (i=info->info_weight_completed+1;;i++) { for (j=0; jnMatrices; j++) { if (j < G->nFullRankMatrices) l = 1; /* this is a trick to reduce the number of lines of codes */ else l = i - (G->dimension - G->rank[j]) + 1; if (l > 0) { w++; switch (info->weight_constraint) { case C_0MOD3: d = ROUND_0_MOD_3(w); break; default: d = w; } if (d >= info->upper_bound) { info->ith_matrix = j + 1; break; } } } if (d >= info->upper_bound) { info->max_info_weight_req = i; break; } } } /* Update INFO structure, which contains various information on the */ /* current progress of enumeration. */ void cyclic_update_info_gf3(PACKED_MATRIX_GF3 *G, INFO *info) { short i, d, w; /* Estimate the minimum distance lower bound after current enumeration */ info->lower_bound = (info->info_weight_completed + 1) * G->nFullRankMatrices; info->lower_bound = (unsigned int) ceil(((double)G->block_length/(double)G->dimension)*((double)info->info_weight_completed+1.0)); /* lower-bound information to display, this value could be different */ /* from the actual lower-bound if the code satisfies some weight */ /* constraint, i.e. 0 mod 3 (self-orthogonal ternary code). */ switch (info->weight_constraint) { case C_0MOD3: info->displayed_lower_bound = ROUND_0_MOD_3(info->lower_bound); break; default: info->displayed_lower_bound = info->lower_bound; } /* Estimate the maximum information weight required */ d = 0; for (i=info->info_weight_completed+1;;i++) { w = (unsigned int) ceil(((double)G->block_length/(double)G->dimension)*((double)i+1.0)); switch (info->weight_constraint) { case C_0MOD3: d = ROUND_0_MOD_3(w); break; default: d = w; } if (d >= info->upper_bound) { info->max_info_weight_req = i; break; } } } /* Initialise GF subtraction and division tables */ void init_gf3(GF3 *gf) { int i; gf->sub = (short **)malloc(3 * sizeof(short *)); for (i=0; i<3; i++) gf->sub[i] = (short *)malloc(3*sizeof(short)); gf->sub[0][0] = 0; gf->sub[0][1] = 2; gf->sub[0][2] = 1; gf->sub[1][0] = 1; gf->sub[1][1] = 0; gf->sub[1][2] = 2; gf->sub[2][0] = 2; gf->sub[2][1] = 1; gf->sub[2][2] = 0; gf->div = (short **)malloc(3 * sizeof(short int *)); for (i=0; i<3; i++) gf->div[i] = (short *)malloc(3*sizeof(short)); gf->div[0][0] = 3; gf->div[0][1] = 0; gf->div[0][2] = 0; gf->div[1][0] = 3; gf->div[1][1] = 1; gf->div[1][2] = 2; gf->div[2][0] = 3; gf->div[2][1] = 2; gf->div[2][2] = 1; } /* Deallocation */ void clear_gf3(GF3 *gf) { int i; for (i=0; i<3; i++) { free(gf->sub[i]); free(gf->div[i]); } free(gf->sub); free(gf->div); } /* Convert a ternary matrix into packed integer format */ GF3_VEC **to_packed_integer_gf3(MATRIX *G, int nBlocks) { int i, j; GF3_VEC **M; M = (GF3_VEC **)malloc(G->rows * sizeof(GF3_VEC *)); for (i=0; irows; i++) { M[i] = (GF3_VEC *)malloc(nBlocks * sizeof(GF3_VEC)); memset(M[i], 0, nBlocks * sizeof(GF3_VEC)); for (j=0; jcols; j++) { switch (G->m[i][j]) { case 1 : M[i][j >> LOG2].v2 |= (ONE << (j & MOD)); break; case 2 : M[i][j >> LOG2].v1 |= (ONE << (j & MOD)); break; default: break; } } } return M; } /* Print out a packed GF3 matrix in unpacked format */ void mat_packed_print_gf3(GF3_VEC **M, int nBlocks, int dim, int length) { unsigned int r, i, j; packed_t u1, u2; for (r=0; rrows; ++c) { /* diagonalise the element from col=1 to rows */ if (c+start >= M->cols) return c; if (!M->m[c][c+start]) { /* pivot is zero, do row swapping */ for (found=false,r=c+1; rrows; ++r) { if (M->m[r][c+start]) { found=true; break; } } if (found) { for (i=0; icols; ++i) { swap=M->m[r][i]; M->m[r][i]=M->m[c][i]; M->m[c][i]=swap; } } else { /* row swapping failed, do column swapping */ for (found=false,i=start+c+1; icols; ++i) { for (r=c; rrows; ++r) { if (M->m[r][i]) { found=true; break; } } if (found) break; } if (!found) return c; for (pivot=i,i=0; icols; ++i) { swap=M->m[r][i]; M->m[r][i]=M->m[c][i]; M->m[c][i]=swap; } for (r=0; rrows; ++r) { swap=M->m[r][pivot]; M->m[r][pivot]=M->m[r][c+start]; M->m[r][c+start]=swap; } } } if (M->m[c][c+start]>1) { /* ensure the diagonal element is 1 */ for (pivot=M->m[c][c+start],i=0; icols; ++i) M->m[c][i] = divide_gf3(gf, M->m[c][i], pivot); } for (r=0; rrows; ++r) { /* zero the whole rows at column c, except at row c (diagonalisation) */ if (r==c) continue; if (M->m[r][c+start]) { pivot = M->m[r][c+start]; for (i=0; icols; ++i) M->m[r][i] = subtract_gf3(gf, divide_gf3(gf, M->m[r][i], pivot), M->m[c][i]); } } } /* ensure that the diagonal element is 1 */ for (c=0; crows; ++c) { if (M->m[c][c+start]>1) { for (pivot=M->m[c][c+start],i=0; icols; ++i) M->m[c][i] = divide_gf3(gf, M->m[c][i], pivot); } } return c; } guava-3.6/src/ctjhai/popcount.c0000644017361200001450000000410611026723452016411 0ustar tabbottcrontab/* * popcount.c * * This file contains functions related to population count * * Note that the popcount() implementation for POPCOUNT_STD is taken from * Joerg's useful and ugly FFT page (http://www.jjj.de/fft/fftpage.html) * * Version Log: * 0.1 18 March 2008 (first released to public -- GUAVA 3.3) * * CJ, Tjhai * email: ctjhai@plymouth.ac.uk * Homepage: www.plymouth.ac.uk/staff/ctjhai * */ #include #include "popcount.h" #if defined(POPCOUNT_LUT8) || defined(POPCOUNT_LUT16) unsigned short *__popcnt_LUT; #endif /* Initialisation for population count */ void init_popcount() { #if defined(POPCOUNT_LUT8) || defined(POPCOUNT_LUT16) __init_popcount_LUT(); #endif } /* Deallocate memory used population count */ void clear_popcount() { #if defined(POPCOUNT_LUT8) || defined(POPCOUNT_LUT16) __clear_popcount_LUT(); #endif } #if defined(POPCOUNT_LUT8) || defined(POPCOUNT_LUT16) /* Initialise the look-up table for population count */ void __init_popcount_LUT() { #ifdef POPCOUNT_LUT8 #define LUT_SIZE 8 /* 8 bit LUT */ #else #define LUT_SIZE 16 /* 16 bit LUT */ #endif int i, j, n; __popcnt_LUT = (unsigned short *)malloc((0x1U<>1) & 0x55555555UL; x = ((x>>2) & 0x33333333UL) + (x & 0x33333333UL); x = ((x>>4) + x) & 0x0f0f0f0fUL; x *= 0x01010101UL; return x>>24; #else /* BITS_PER_LONG is 64 */ x -= (x>>1) & 0x5555555555555555UL; x = ((x>>2) & 0x3333333333333333UL) + (x & 0x3333333333333333UL); x = ((x>>4) + x) & 0x0f0f0f0f0f0f0f0fUL; x *= 0x0101010101010101UL; return x>>56; #endif /* BITS_PER_LONG */ } #endif /* POPCOUNT_STD */ guava-3.6/src/ctjhai/minimum-weight-gf2.h0000644017361200001450000000135511026723452020166 0ustar tabbottcrontab/* * minimum-weight-gf2.h * * Minimum Hamming weight computation for codes over GF(2) * * Version Log: * 0.1 18 March 2008 (first released to public -- GUAVA 3.3) * * CJ, Tjhai * email: ctjhai@plymouth.ac.uk * Homepage: www.plymouth.ac.uk/staff/ctjhai * */ #ifndef _MINIMUM_WEIGHT_GF2_H #define _MINIMUM_WEIGHT_GF2_H #include "types.h" /*------------- Data structure specified for GF(2) --------------*/ typedef struct { unsigned short dimension, block_length; unsigned short nBlocks; unsigned short nMatrices, nFullRankMatrices; unsigned short *rank; packed_t ***mat; } PACKED_MATRIX_GF2; int mindist_gf2(MATRIX G, mod_t m_mod, int lower_bound); int cyclic_mindist_gf2(MATRIX G, mod_t m_mod, int lower_bound); #endif guava-3.6/src/ctjhai/minimum-weight-gf3.h0000644017361200001450000000301111026723452020156 0ustar tabbottcrontab/* * minimum-weight-gf3.h * * Minimum Hamming weight computation for codes over GF(3) * * Version Log: * 0.1 18 March 2008 (first released to public -- GUAVA 3.3) * * CJ, Tjhai * email: ctjhai@plymouth.ac.uk * Homepage: www.plymouth.ac.uk/staff/ctjhai * */ #ifndef _MINIMUM_WEIGHT_GF3_H #define _MINIMUM_WEIGHT_GF3_H #include "types.h" #define subtract_gf3(gf,a,b) gf->sub[a][b] #define divide_gf3(gf,a,b) gf->div[a][b] /* * c = a + b * add_gf3_vec requires a declaration of "packed_t t1, t2" * */ #define add_gf3_vec(a, b, c) { t1 = (a.v1 | b.v2)^(a.v2 | b.v1);\ t2 = (a.v2 | b.v2) ^ t1;\ c.v2 = (a.v1 | b.v1) ^ t1;\ c.v1 = t2;\ } /* * c = a - b * = a + -b * = a + 2b * sub_gf3_vec requires a declaration of "packed_t t1, t2" * */ #define sub_gf3_vec(a, b, c) { t1 = (a.v1 | b.v1)^(a.v2 | b.v2);\ t2 = (a.v2 | b.v1) ^ t1;\ c.v2 = (a.v1 | b.v2) ^ t1;\ c.v1 = t2;\ } /*------------- Data structure specified for GF(3) --------------*/ typedef struct { short **sub, **div; } GF3; typedef struct { packed_t v1, v2; } GF3_VEC; typedef struct { unsigned short dimension, block_length; unsigned short nBlocks; unsigned short nMatrices, nFullRankMatrices; unsigned short *rank; GF3_VEC ***mat; } PACKED_MATRIX_GF3; /*-------------------- Function prototypes ----------------------*/ int mindist_gf3(MATRIX G, mod_t m_mod, int lower_bound); int cyclic_mindist_gf3(MATRIX G, mod_t m_mod, int lower_bound); #endif guava-3.6/src/ctjhai/minimum-weight-gf2.c0000644017361200001450000006120711026723452020163 0ustar tabbottcrontab/* * minimum-weight-gf2.c * * Minimum Hamming weight computation for codes over GF(2) * The core of computation is in this src file * * NOTES: * The GF(2) vectors are represented in packed long integer * format. This long integer is either 32-bit or 64-bit, * depending on the machine architecture, see config.h * * To efficiently generate combination patterns, revolving door * algorithm is used here. This algorithm has the property that * in going to the next combination pattern, there is only one * position that is exchanged, i.e. one 'In' and one 'Out'. The * implementation here follows the third algorithm in the paper * by * * Clement W.H. Lam and Leonard H. Soicher, "Three new combination * algorithms with minimal change property", Communications * of the ACM, vol. 25, no. 8, August 1982 * * The code here is not yet optmised, your contributions in this * respect are greatly appreciated. * * Version Log: * 0.1 18 March 2008 (first released to public -- GUAVA 3.3) * * CJ, Tjhai * email: ctjhai@plymouth.ac.uk * Homepage: www.plymouth.ac.uk/staff/ctjhai * */ #include #include #include #include #include "minimum-weight-gf2.h" #include "popcount.h" #include "config.h" #include "types.h" /*--------- Some useful macros for updating upper-bound ---------*/ #define ROUND_0_MOD_2(d) (((int)ceil((double)d/2.0))*2) /* (singly) even code */ #define ROUND_1_MOD_2(d) ((d & 0x1) ? d : d+1) #define ROUND_0_MOD_4(d) (((int)ceil((double)d/4.0))*4) /* doubly-even code */ #define ROUND_3_MOD_4(d) ((d & 0x11) ? ROUND_0_MOD_4(d+1) : ROUND_0_MOD_4(d)) /*-------------------- Function prototypes ----------------------*/ packed_t **to_packed_integer_gf2(MATRIX *G, int nBlocks); int gf2_gauss_jordan(MATRIX *M, int start); void mat_packed_print_gf2(packed_t **M, int nBlocks, int dim, int length); void update_info_gf2(PACKED_MATRIX_GF2 *G, INFO *info); void cyclic_update_info_gf2(PACKED_MATRIX_GF2 *G, INFO *info); void __mindist_gf2(PACKED_MATRIX_GF2 *G, INFO *info); void __cyclic_mindist_gf2(PACKED_MATRIX_GF2 *G, INFO *info); /*---------------------------------------------------------------*/ /* Return the minimum weight of a general binary linear code */ int mindist_gf2(MATRIX G, mod_t m_mod, int lower_bound) { int i, j, l, rank, pos; double steps; unsigned int sum=0; PACKED_MATRIX_GF2 packedG; INFO info; /* * Knowing G, now build an array of generator matrices with * disjoint information sets. These matrices are stored in * packed integer format * */ j = (G.cols - G.rows) + 1; /* maximum possible number of matrices */ packedG.mat = (packed_t ***)malloc(j * sizeof(packed_t **)); packedG.rank= (unsigned short *)malloc(j * sizeof(unsigned short)); packedG.dimension = G.rows; packedG.block_length = G.cols; packedG.nMatrices = packedG.nFullRankMatrices = 0; packedG.nBlocks = (!(G.cols % BITSIZE)) ? (G.cols / BITSIZE) : (G.cols / BITSIZE)+1; for (i=0,pos=0;;i++) { if (pos >= G.cols) break; rank = gf2_gauss_jordan(&G, pos); /* what is the rank at column 'pos'? */ if (!rank) { fprintf(stderr, "ERROR: rank is 0\n\n"); return -1; } /* Convert the reduced echelon matrix into packed integer format */ packedG.mat[i] = to_packed_integer_gf2(&G, packedG.nBlocks); packedG.rank[i] = rank; pos += rank; packedG.nMatrices++; if (rank == G.rows) packedG.nFullRankMatrices++; } /*---------------------- core computation starts here -------------------------*/ printf("[%d,%d] linear code over GF(2) - minimum weight evaluation\n", G.cols, G.rows); printf("Known lower-bound: %d\n", lower_bound); printf("There are %d generator matrices, ranks : ", packedG.nMatrices); for (i=0; i0) info.lower_bound += j; } /* Information weight 1 */ printf("Enumerating codewords with information weight 1 (w=1)\n"); fflush(stdout); steps = 0; info.upper_bound = G.cols; i = packedG.nMatrices; do { --i; j = packedG.dimension; do { --j; steps++; sum = 0; l = packedG.nBlocks; do { --l; sum += popcount(packedG.mat[i][j][l]); } while (l); if (sum < info.upper_bound) { info.upper_bound = sum; printf(" Found new minimum weight %d\n", info.upper_bound); fflush(stdout); if (info.upper_bound <= info.known_lower_bound) break; } } while (j); if (sum <= info.known_lower_bound) { printf("The known lower-bound is met, enumeration completed.\n"); info.upper_bound = sum; goto completed; } } while(i); /* Update progress information */ info.info_weight_completed = 1; update_info_gf2(&packedG, &info); printf("Number of matrices required for codeword enumeration %d\n", info.matrices_req); printf("Completed w= 1, %.0lf codewords enumerated, lower-bound %d, upper-bound %d\n", steps, info.displayed_lower_bound, info.upper_bound); fflush(stdout); if (info.displayed_lower_bound >= info.upper_bound) goto completed; printf("Termination expected with information weight %d at matrix %d\n", info.max_info_weight_req, info.ith_matrix); printf("-----------------------------------------------------------------------------\n"); /* The following function is executed for higher minimum weight */ __mindist_gf2(&packedG, &info); /*------------------------ end of core computation ----------------------------*/ completed: /* Deallocating memory */ for (i=0; i= info.upper_bound) goto completed; printf("Termination expected with information weight %d\n", info.max_info_weight_req); printf("-----------------------------------------------------------------------------\n"); /* The following function is executed for higher minimum weight */ __cyclic_mindist_gf2(&packedG, &info); /*------------------------ end of core computation ----------------------------*/ completed: /* Deallocating memory */ for (j=0; j= 2 */ void __mindist_gf2(PACKED_MATRIX_GF2 *G, INFO *info) { #define EVALUATE_MINIMUM_WEIGHT1 {\ l=info->matrices_req; do { --l;\ steps++;\ i = G->nBlocks; w = 0;\ do { --i;\ c[l][i] = G->mat[l][v[1]][i];\ j = m; do { --j; c[l][i] ^= G->mat[l][v[j+2]][i]; } while (j);\ w += popcount(c[l][i]);\ } while (i);\ if (w < info->upper_bound) {\ info->upper_bound = w;\ printf(" Found new minimum weight %d\n", w); fflush(stdout);\ if (w <= info->known_lower_bound) goto lower_bound_met;\ }\ } while (l);\ } #define EVALUATE_MINIMUM_WEIGHT {\ l=info->matrices_req; do { --l;\ steps++;\ i = G->nBlocks; w = 0;\ do { --i;\ /* Property of revolving door algorithm: */\ /* In two consecutive combination pattern, */\ /* exactly one element In and one element Out. */\ c[l][i] ^= (G->mat[l][ Out ][i] ^ G->mat[l][ In ][i]);\ w += popcount(c[l][i]);\ } while (i);\ if (w < info->upper_bound) {\ info->upper_bound = w;\ printf(" Found new minimum weight %d\n", w); fflush(stdout);\ if (w <= info->known_lower_bound) goto lower_bound_met;\ }\ } while (l);\ } double steps; short m, iw, top, In, Out, nMat; register short i, j, l, w; register packed_t **c; short *v, *s; w = top = 0; nMat = info->matrices_req; c = (packed_t **)malloc(nMat * sizeof(packed_t*)); l = nMat; do { --l; c[l] = (packed_t *)malloc(G->nBlocks * sizeof(packed_t)); } while (l); for (iw=2;;iw++) { /* starting from information weight 2 */ if (iw == info->max_info_weight_req) info->matrices_req = info->ith_matrix; printf("Enumerating codewords with information weight %d (w=%d) using %d matrices\n", iw, iw, info->matrices_req); fflush(stdout); steps = 0; m = iw - 1; v = (short *) malloc((iw+2)*sizeof(short)); s = (short *) malloc((iw+2)*sizeof(short)); if ( !(iw & 1) ) { v[iw + 1] = G->dimension; v[iw] = iw - 1; if (iw < G->dimension) top = iw; } else { v[iw] = G->dimension - 1; if (iw < G->dimension) top = iw - 1; } v[1] = s[iw] = 0; for (i=2; i top - 1) { top = top - 1; v[top] = top - 1; In = v[top]; } else { v[top-1] = top - 2; i = top; In = v[top-1]; top = s[top]; s[i] = i + 1; } } else { Out = v[top-1]; v[top-1] = v[top]; ++v[top]; In = v[top]; if (v[top] == v[top+1] - 1) { s[top-1] = s[top]; s[top] = top + 1; } top -= 2; } EVALUATE_MINIMUM_WEIGHT; } } /* Update progress information */ info->info_weight_completed = iw; update_info_gf2(G, info); printf("Completed w=%2d, %.0lf codewords enumerated, lower-bound %d, upper-bound %d\n", iw, steps, info->displayed_lower_bound, info->upper_bound); fflush(stdout); lower_bound_met: free(v); free(s); if (w <= info->known_lower_bound) { printf("The known lower-bound is met, enumeration completed.\n"); printf("-----------------------------------------------------------------------------\n"); info->upper_bound = w; for (l=0; ldisplayed_lower_bound >= info->upper_bound) break; printf("Termination expected with information weight %d at matrix %d\n", info->max_info_weight_req, info->ith_matrix); printf("-----------------------------------------------------------------------------\n"); } printf("-----------------------------------------------------------------------------\n"); for (l=0; l= 2 */ void __cyclic_mindist_gf2(PACKED_MATRIX_GF2 *G, INFO *info) { #define EVALUATE_CYCLIC_MINIMUM_WEIGHT1 {\ steps++;\ i = G->nBlocks; w = 0;\ do { --i;\ c[i] = G->mat[0][v[1]][i];\ j = m; do { --j; c[i] ^= G->mat[0][v[j+2]][i]; } while (j);\ w += popcount(c[i]);\ } while (i);\ if (w < info->upper_bound) {\ info->upper_bound = w;\ printf(" Found new minimum weight %d\n", w); fflush(stdout);\ if (w <= info->known_lower_bound) goto lower_bound_met;\ }\ } #define EVALUATE_CYCLIC_MINIMUM_WEIGHT {\ steps++;\ i = G->nBlocks; w = 0;\ do { --i;\ /* Property of revolving door algorithm: */\ /* In two consecutive combination pattern, */\ /* exactly one element In and one element Out. */\ c[i] ^= (G->mat[0][ Out ][i] ^ G->mat[0][ In ][i]);\ w += popcount(c[i]);\ } while (i);\ if (w < info->upper_bound) {\ info->upper_bound = w;\ printf(" Found new minimum weight %d\n", w); fflush(stdout);\ if (w <= info->known_lower_bound) goto lower_bound_met;\ }\ } double steps; short m, iw, top, In, Out; register short i, j, w; register packed_t *c; short *v, *s; w = top = 0; c = (packed_t *)malloc(G->nBlocks * sizeof(packed_t)); for (iw=2;;iw++) { /* starting from information weight 2 */ printf("Enumerating codewords with information weight %d (w=%d) using 1 matrix\n", iw, iw); fflush(stdout); steps = 0; m = iw - 1; v = (short *) malloc((iw+2)*sizeof(short)); s = (short *) malloc((iw+2)*sizeof(short)); if ( !(iw & 1) ) { v[iw + 1] = G->dimension; v[iw] = iw - 1; if (iw < G->dimension) top = iw; } else { v[iw] = G->dimension - 1; if (iw < G->dimension) top = iw - 1; } v[1] = s[iw] = 0; for (i=2; i top - 1) { top = top - 1; v[top] = top - 1; In = v[top]; } else { v[top-1] = top - 2; i = top; In = v[top-1]; top = s[top]; s[i] = i + 1; } } else { Out = v[top-1]; v[top-1] = v[top]; ++v[top]; In = v[top]; if (v[top] == v[top+1] - 1) { s[top-1] = s[top]; s[top] = top + 1; } top -= 2; } EVALUATE_CYCLIC_MINIMUM_WEIGHT; } } /* Update progress information */ info->info_weight_completed = iw; cyclic_update_info_gf2(G, info); printf("Completed w=%2d, %.0lf codewords enumerated, lower-bound %d, upper-bound %d\n", iw, steps, info->displayed_lower_bound, info->upper_bound); fflush(stdout); lower_bound_met: free(v); free(s); if (w <= info->known_lower_bound) { printf("The known lower-bound is met, enumeration completed.\n"); printf("-----------------------------------------------------------------------------\n"); info->upper_bound = w; free(c); return; } if (info->displayed_lower_bound >= info->upper_bound) break; printf("Termination expected with information weight %d\n", info->max_info_weight_req); printf("-----------------------------------------------------------------------------\n"); } printf("-----------------------------------------------------------------------------\n"); free(c); } /* Update INFO structure, which contains various information on the */ /* current progress of enumeration. */ void update_info_gf2(PACKED_MATRIX_GF2 *G, INFO *info) { bool end; short i, j, l, d, w; /* Estimate the number of matrices required to complete enumeration */ info->matrices_req = 0; for (w=0,i=1;;i++) { w = (i+1) * G->nFullRankMatrices; info->matrices_req = G->nFullRankMatrices; for (j=G->nFullRankMatrices; jnMatrices; j++) { l = i - (G->dimension - G->rank[j]) + 1; if (l > 0) { w += l; info->matrices_req++; } } end = false; switch (info->weight_constraint) { case C_0MOD2: if (ROUND_0_MOD_2(w) >= info->upper_bound) end = true; break; case C_1MOD2: if (ROUND_1_MOD_2(w) >= info->upper_bound) end = true; break; case C_3MOD4: if (ROUND_3_MOD_4(w) >= info->upper_bound) end = true; break; case C_0MOD4: if (ROUND_0_MOD_4(w) >= info->upper_bound) end = true; break; default: if (w >= info->upper_bound) end = true; } if (end) break; } /* Estimate the minimum distance lower bound after current enumeration */ if (info->info_weight_completed == 1) /* required for safety */ info->max_info_weight_req = G->dimension; if (info->info_weight_completed < info->max_info_weight_req) { info->lower_bound = (info->info_weight_completed + 1) * G->nFullRankMatrices; for (j=G->nFullRankMatrices; jnMatrices; j++) { l = info->info_weight_completed - (G->dimension - G->rank[j]) + 1; if (l > 0) info->lower_bound += l; } } else { /* last information weight in enumeration */ for (j=0; jith_matrix; j++) { if (j < G->nFullRankMatrices) info->lower_bound++; else { l = i - (G->dimension - G->rank[j]) + 1; if (l > 0) info->lower_bound++; } } } /* lower-bound information to display, this value could be different */ /* from the actual lower-bound if the code satisfies some weight */ /* constraint such as 0 mod 2, 1 mod 2, 3 mod 4 or 0 mod 4. */ switch (info->weight_constraint) { case C_0MOD2: info->displayed_lower_bound = ROUND_0_MOD_2(info->lower_bound); break; case C_1MOD2: info->displayed_lower_bound = ROUND_1_MOD_2(info->lower_bound); break; case C_3MOD4: info->displayed_lower_bound = ROUND_3_MOD_4(info->lower_bound); break; case C_0MOD4: info->displayed_lower_bound = ROUND_0_MOD_4(info->lower_bound); break; default: info->displayed_lower_bound = info->lower_bound; } /* Estimate the maximum information weight required */ d = 0; w = info->lower_bound; for (i=info->info_weight_completed+1;;i++) { for (j=0; jnMatrices; j++) { if (j < G->nFullRankMatrices) l = 1; /* this is a trick to reduce the number of lines of codes */ else l = i - (G->dimension - G->rank[j]) + 1; if (l > 0) { w++; switch (info->weight_constraint) { case C_0MOD2: d = ROUND_0_MOD_2(w); break; case C_1MOD2: d = ROUND_1_MOD_2(w); break; case C_3MOD4: d = ROUND_3_MOD_4(w); break; case C_0MOD4: d = ROUND_0_MOD_4(w); break; default: d = w; } if (d >= info->upper_bound) { info->ith_matrix = j + 1; break; } } } if (d >= info->upper_bound) { info->max_info_weight_req = i; break; } } } /* Update INFO structure, which contains various information on the */ /* current progress of enumeration. */ void cyclic_update_info_gf2(PACKED_MATRIX_GF2 *G, INFO *info) { short i, d, w; /* Estimate the minimum distance lower bound after current enumeration */ info->lower_bound = (info->info_weight_completed + 1) * G->nFullRankMatrices; info->lower_bound = (unsigned int) ceil(((double)G->block_length/(double)G->dimension)*((double)info->info_weight_completed+1.0)); /* lower-bound information to display, this value could be different */ /* from the actual lower-bound if the code satisfies some weight */ /* constraint such as 0 mod 2, 1 mod 2, 3 mod 4, 0 mod 4. */ switch (info->weight_constraint) { case C_0MOD2: info->displayed_lower_bound = ROUND_0_MOD_2(info->lower_bound); break; case C_1MOD2: info->displayed_lower_bound = ROUND_1_MOD_2(info->lower_bound); break; case C_3MOD4: info->displayed_lower_bound = ROUND_3_MOD_4(info->lower_bound); break; case C_0MOD4: info->displayed_lower_bound = ROUND_0_MOD_4(info->lower_bound); break; default: info->displayed_lower_bound = info->lower_bound; } /* Estimate the maximum information weight required */ d = 0; for (i=info->info_weight_completed+1;;i++) { w = (unsigned int) ceil(((double)G->block_length/(double)G->dimension)*((double)i+1.0)); switch (info->weight_constraint) { case C_0MOD2: d = ROUND_0_MOD_2(w); break; case C_1MOD2: d = ROUND_1_MOD_2(w); break; case C_3MOD4: d = ROUND_3_MOD_4(w); break; case C_0MOD4: d = ROUND_0_MOD_4(w); break; default: d = w; } if (d >= info->upper_bound) { info->max_info_weight_req = i; break; } } } /* Convert a binary matrix into packed integer format */ packed_t **to_packed_integer_gf2(MATRIX *G, int nBlocks) { int i, j; packed_t **M; M = (packed_t **)malloc(G->rows * sizeof(packed_t *)); for (i=0; irows; i++) { M[i] = (packed_t *)malloc(nBlocks * sizeof(packed_t)); memset(M[i], 0, nBlocks * sizeof(packed_t)); for (j=0; jcols; j++) { if (G->m[i][j]) M[i][j >> LOG2] |= (ONE << (j & MOD)); } } return M; } /* Print out a packed GF2 matrix in unpacked format */ void mat_packed_print_gf2(packed_t **M, int nBlocks, int dim, int length) { unsigned int r, i, j; for (r=0; rrows; ++c) { /* diagonalise the element from col=1 to rows */ if (c+start >= M->cols) return c; if (!M->m[c][c+start]) { /* pivot is zero, do row swapping */ for (found=false,r=c+1; rrows; ++r) { if (M->m[r][c+start]) { found=true; break; } } if (found) { for (i=0; icols; ++i) { swap=M->m[r][i]; M->m[r][i]=M->m[c][i]; M->m[c][i]=swap; } } else { /* row swapping failed, do column swapping */ for (found=false,i=start+c+1; icols; ++i) { for (r=c; rrows; ++r) { if (M->m[r][i]) { found=true; break; } } if (found) break; } if (!found) return c; for (pivot=i,i=0; icols; ++i) { swap=M->m[r][i]; M->m[r][i]=M->m[c][i]; M->m[c][i]=swap; } for (r=0; rrows; ++r) { swap=M->m[r][pivot]; M->m[r][pivot]=M->m[r][c+start]; M->m[r][c+start]=swap; } } } for (r=0; rrows; ++r) { /* zero the whole rows at column c, except at row c (diagonalisation) */ if (r==c) continue; if (M->m[r][c+start]) { pivot = M->m[r][c+start]; for (i=0; icols; ++i) M->m[r][i] = (M->m[r][i] - M->m[c][i]) & 0x1; } } } return c; } guava-3.6/src/ctjhai/types.h0000644017361200001450000000177011026723452015717 0ustar tabbottcrontab/* * types.h * * This header file contains data structure for the minimum Hamming * weight computation program * * Version Log: * 0.1 18 March 2008 (first released to public -- GUAVA 3.3) * * CJ, Tjhai * email: ctjhai@plymouth.ac.uk * Homepage: www.plymouth.ac.uk/staff/ctjhai * */ #ifndef _TYPES_H #define _TYPES_H /*---------------------- Data Structure ---------------------------*/ typedef unsigned long packed_t; typedef struct { unsigned int q, rows, cols; unsigned int **m; } MATRIX; typedef enum { false = 0, true = 1 } bool; typedef enum { C_0MOD2 = 1, C_1MOD2, C_3MOD4, C_0MOD4, C_0MOD3 } mod_t; typedef struct { mod_t weight_constraint; unsigned short known_lower_bound; unsigned short lower_bound, upper_bound; unsigned short displayed_lower_bound; unsigned short info_weight_completed; unsigned short max_info_weight_req; unsigned short ith_matrix; unsigned short matrices_req; } INFO; /*-----------------------------------------------------------------*/ #endif guava-3.6/src/ctjhai/minimum-weight.c0000644017361200001450000001271611026723452017510 0ustar tabbottcrontab/* * minimum-weight.c * * Minimum Hamming weight computation for linear codes over * finite field. * * Note that: * q=2, if the code is doubly-even then the weights of the * code satisfy 0 mod 4 * if the code is singly-even then the weights of the * code satisfy 0 mod 2 * provision for code with codewords of minimum weight * satisfies 1 mod 2 (odd) and 3 mod 4 constraints * are also taken into account * q=3, if the code is self-orthogonal (or self-dual) then * the weights of the code satisfy 0 mod 3. * In order to take these constraints into account, a parameter * 'm' or 'mod' is used as an argument to this program. * * Version Log: * 0.1 18 March 2008 (first released to public -- GUAVA 3.3) * * CJ, Tjhai * email: ctjhai@plymouth.ac.uk * Homepage: www.plymouth.ac.uk/staff/ctjhai * */ #include #include #include #include #include "minimum-weight-gf2.h" #include "minimum-weight-gf3.h" #include "popcount.h" #include "config.h" #include "types.h" /*--------------------- Function prototypes -----------------------*/ int generator_matrix(char *fname, MATRIX *M); void print_usage(FILE *stream, int exitcode, char *str); int mindist(MATRIX G, int m_mod, int lower_bound); int cyclic_mindist(MATRIX G, int m_mod, int lower_bound); /*-----------------------------------------------------------------*/ /* Main entry point */ int main(int argc, char *argv[]) { MATRIX G; FILE *fptr; int opt, dmin; int cyclic_code, m_mod, lower_bound; char *output_file; const char* const short_options = "hcmlo:"; /* Valid short option characters */ const struct option long_options[] = { /* Valid long options strings */ { "help", 0, NULL, 'h' }, { "cyclic", 0, NULL, 'c' }, { "mod", 1, NULL, 'm' }, { "lower-bound", 1, NULL, 'l' }, { "out", 1, NULL, 'o' }, { NULL, 0, NULL, 0 } /* Required at end of array */ }; if (argc < 2) print_usage(stderr, -1, argv[0]); cyclic_code = 0; m_mod = 0; lower_bound = 1; output_file = NULL; /* default values */ do { opt = getopt_long(argc, argv, short_options, long_options, NULL); switch (opt) { case 'h': /* -h or --help */ print_usage(stdout, 1, argv[0]); case 'c': /* -c or --cyclic */ cyclic_code = 1; break; case 'm': /* -m or --mod */ m_mod = atoi(optarg); break; case 'l': /* -l or --lower-bound (argument follows) */ lower_bound = atoi(optarg); break; case 'o': /* -o or --out (argument follows) */ output_file = optarg; break; case '?': /* invalid option */ print_usage(stderr, -1, argv[0]); case -1: /* done */ break; default: /* something else unexpected */ abort(); } } while (opt != -1); /* Initialisation */ init_popcount(); /* Read generator matrix from file */ generator_matrix(argv[optind], &G); if (cyclic_code) dmin = cyclic_mindist(G, m_mod, lower_bound); else dmin = mindist(G, m_mod, lower_bound); if (dmin) { printf("Minimum weight: %d\n", dmin); fflush(stdout); if (output_file) { fptr = fopen(output_file, "w"); if (!fptr) { fprintf(stderr, "Unable to open %s\n", output_file); return -1; } fprintf(fptr, "GUAVA_TEMP_VAR := %d;\n", dmin); fclose(fptr); } } /* Deallocate memory */ clear_popcount(); return 0; } /* Display options to use this program */ void print_usage(FILE *stream, int exitcode, char *str) { fprintf(stream, "Usage: %s options [generator matrix file]\n", str); fprintf(stream, " -h --help Display this help screen\n"); fprintf(stream, " -c --cyclic Indicate that the code is cyclic\n"); fprintf(stream, " -l --lower-bound [x] Known lower-bound on the minimum distance\n"); fprintf(stream, " -m --mod [x] Constraint on minimum weight codeword\n"); fprintf(stream, " 1 : 0 mod 2\n"); fprintf(stream, " 2 : 1 mod 2\n"); fprintf(stream, " 3 : 3 mod 4\n"); fprintf(stream, " 4 : 0 mod 4\n"); fprintf(stream, " 5 : 0 mod 3\n"); fprintf(stream, "\n"); exit(exitcode); } /* Read generator matrix from file */ int generator_matrix(char *fname, MATRIX *M) { int i, j; FILE *fptr; fptr = fopen(fname, "r"); if (!fptr) { fprintf(stderr, "Error opening %s\n", fname); return -1; } fscanf(fptr, "%d %d %d\n", &M->rows, &M->cols, &M->q); M->m = (unsigned int **)malloc(M->rows * sizeof(unsigned int *)); for (i=0; irows; i++) M->m[i] = (unsigned int *)malloc(M->cols * sizeof(unsigned int)); for (i=0; irows; i++) { for (j=0; jcols; j++) fscanf(fptr, "%d ", &M->m[i][j]); } return 0; } /* Minimum weight for cyclic code */ int cyclic_mindist(MATRIX G, int m_mod, int lower_bound) { if (G.q == 2) /* binary field */ return cyclic_mindist_gf2(G, m_mod, lower_bound); else if (G.q == 3) /* ternary field */ return cyclic_mindist_gf3(G, m_mod, lower_bound); else { fprintf(stderr, "Minimum weight computation over this field is not implemented yet\n"); return -2; } } /* Minimum weight for general linear code */ int mindist(MATRIX G, int m_mod, int lower_bound) { if (G.q == 2) /* binary field */ return mindist_gf2(G, m_mod, lower_bound); else if (G.q == 3) /* ternary field */ return mindist_gf3(G, m_mod, lower_bound); else { fprintf(stderr, "Minimum weight computation over this field is not implemented yet\n"); return -2; } } guava-3.6/src/ctjhai/config.h0000644017361200001450000000204011026723452016007 0ustar tabbottcrontab/* * config.h * * This file contains various configuration needed for compilation * * The minimum Hamming weight computation uses different types of * population count (bit count) methods, see popcount.h/c: * POPCOUNT_STD * POPCOUNT_LUT8 * POPCOUNT_LUT16 * * Version Log: * 0.1 18 March 2008 (first released to public -- GUAVA 3.3) * * CJ, Tjhai * email: ctjhai@plymouth.ac.uk * Homepage: www.plymouth.ac.uk/staff/ctjhai * */ #ifndef _CONFIG_H #define _CONFIG_H #include #undef BITS_PER_LONG #if ULONG_MAX == 0xffffffffUL # define BITS_PER_LONG 32 #elif ULONG_MAX == 0xffffffffffffffffUL # define BITS_PER_LONG 64 #else # error Unknown architecture, report to ctjhai@plymouth.ac.uk #endif #if BITS_PER_LONG == 64 /* 64-bit */ # define ZERO 0x0UL # define ONE 0x1UL # define MOD 0x3F # define LOG2 6 #else /* 32-bit */ # define ZERO 0x0UL # define ONE 0x1UL # define MOD 0x1F # define LOG2 5 #endif /* BITS_PER_LONG */ #define BITSIZE BITS_PER_LONG #define POPCOUNT_LUT16 1 #endif guava-3.6/src/ctjhai/popcount.h0000644017361200001450000000361711026723452016424 0ustar tabbottcrontab/* * popcount.h * * This header file contains various declaration for population count * * Version Log: * 0.1 18 March 2008 (first released to public -- GUAVA 3.3) * * CJ, Tjhai * email: ctjhai@plymouth.ac.uk * Homepage: www.plymouth.ac.uk/staff/ctjhai * */ #ifndef _POPCOUNT_H #define _POPCOUNT_H #include "config.h" /* Global variable -- only used for LUT-based popcount */ #if defined(POPCOUNT_LUT8) || defined(POPCOUNT_LUT16) extern unsigned short *__popcnt_LUT; #endif /* Function prototypes */ void init_popcount(); void __init_popcount_LUT(); void clear_popcount(); void __clear_popcount_LUT(); /* The following contains the macros that actually do the population count */ #if defined(POPCOUNT_LUT8) /* 8-bit LUT */ # if BITS_PER_LONG == 64 /* 64-bit machine */ # define popcount(__v) (__popcnt_LUT[__v & 0xFFUL] + __popcnt_LUT[(__v>>8) & 0xFFUL] + \ __popcnt_LUT[(__v>>16) & 0xFFUL] + __popcnt_LUT[(__v>>24) & 0xFFUL] + \ __popcnt_LUT[(__v>>32) & 0xFFUL] + __popcnt_LUT[(__v>>40) & 0xFFUL] + \ __popcnt_LUT[(__v>>48) & 0xFFUL] + __popcnt_LUT[(__v>>56) & 0xFFUL]) # else /* 32-bit machine */ # define popcount(__v) (__popcnt_LUT[__v & 0xFFU] + __popcnt_LUT[(__v>>8) & 0xFFU] + \ __popcnt_LUT[(__v>>16) & 0xFFU] + __popcnt_LUT[(__v>>24) & 0xFFU]) # endif #elif defined(POPCOUNT_LUT16) /* 16-bit LUT */ # if BITS_PER_LONG == 64 /* 64-bit machine */ # define popcount(__v) (__popcnt_LUT[__v & 0xFFFFUL] + __popcnt_LUT[(__v>>16) & 0xFFFFUL] + \ __popcnt_LUT[(__v>>32) & 0xFFFFUL] + __popcnt_LUT[(__v>>48) & 0xFFFFUL]) # else /* 32-bit machine */ # define popcount(__v) (__popcnt_LUT[__v & 0xFFFFU] + __popcnt_LUT[(__v>>16) & 0xFFFFU]) # endif #elif defined(POPCOUNT_STD) unsigned int popcount(unsigned long x); #endif #endif /* _POPCOUNT_H */ guava-3.6/src/leonconv.c0000644017361200001450000000772211026723452015132 0ustar tabbottcrontab#include #if !defined(__APPLE__) #include #endif FILE *in, *out; void AutoMorphToGuave(char *inputfile, char *outputfile); void ConstWeightToGuave(char *inputfile, char *outputfile); void EquivalentToGuave(char *inputfile, char *outputfile); void WeightToGuave(char *inputfile, char *outputfile); main(int argc, char *argv[]) { char *sw, *inputfile, *outputfile; if (!(argc-1 == 3)) { fprintf(stderr, "Error, usage: leonconv \n"); exit(1); } sw = argv[1]; inputfile = argv[2]; outputfile = argv[3]; switch ((int) sw[1]) { case 97 : AutoMorphToGuave(inputfile, outputfile); break; case 99 : ConstWeightToGuave(inputfile, outputfile); break; case 101: EquivalentToGuave(inputfile, outputfile); break; case 119: WeightToGuave(inputfile, outputfile); break; default : fprintf(stderr, "Possible switches: -a, -c, -e, -w\n"); exit(1); } return 0; } int ReadUntil(FILE *fl, char Sc, int Cnt) { char bit; int res, i; res = fscanf(fl, "%c", &bit); i = 0; if (bit == Sc) i++; while ((i < Cnt) && (res != EOF)) { res = fscanf(fl, "%c", &bit); if (bit == Sc) i++; } return res; } int OpenFiles(char *inputfile, char *outputfile) { if ((in = fopen(inputfile, "r")) == NULL) { fprintf(stderr, "Cannot open input file.\n"); return 1; } if ((out = fopen(outputfile, "w")) == NULL) { fprintf(stderr, "Cannot open output file.\n"); return 1; } return 0; } void AutoMorphToGuave(char *inputfile, char *outputfile) { char bit; int res; OpenFiles(inputfile, outputfile); res = ReadUntil(in, '\n', 6); fprintf(out, "GUAVA_TEMP_VAR := Group(\n"); res = fscanf(in, "%c", &bit); if (bit == 'F') fprintf(out, "()"); else while ((bit != ']') && (res != EOF)) { fprintf(out, "%c", bit); res = fscanf(in, "%c", &bit); } fprintf(out, ");\n"); close(in); in = fopen(inputfile, "r"); res = ReadUntil(in, '\n', 3); res = ReadUntil(in, ':', 1); fprintf(out, "SetSize(GUAVA_TEMP_VAR, "); res = fscanf(in, "%c", &bit); while ((bit != ';') && (res != EOF)) { fprintf(out, "%c", bit); res = fscanf(in, "%c", &bit); } fprintf(out, ");\n"); close(in); close(out); } void ConstWeightToGuave(char *inputfile, char *outputfile) { char bit; int i, j, M, n, res, el; OpenFiles(inputfile, outputfile); res = ReadUntil(in, '\n', 2); res = ReadUntil(in, ',', 1); res = fscanf(in, "%i,%i", &M, &n); res = ReadUntil(in, '\n', 1); fprintf(out, "GUAVA_TEMP_VAR := [\n"); for (i = 0; i < M; i++) { fprintf(out, "["); for (j = 0; j < n; j++) { res = fscanf(in, "%i%c", &el, &bit); if (j == 0) fprintf(out, "%i", el); else fprintf(out, ",%i", el); } if (i < M-1) fprintf(out, "],\n"); else fprintf(out, "]"); } fprintf(out, "];\n"); close(in); close(out); } void EquivalentToGuave(char *inputfile, char *outputfile) { char bit; int res, noteq; noteq = ((in = fopen(inputfile, "r")) == NULL); if ((out = fopen(outputfile, "w")) == NULL) { fprintf(stderr, "Cannot open output file.\n"); exit(1); } fprintf(out, "GUAVA_TEMP_VAR := "); if (noteq) { fprintf(out, "false;"); } else { res = ReadUntil(in, '=', 1); res = fscanf(in, "%c", &bit); while ((bit != 'F') && (res != EOF)) { fprintf(out, "%c", bit); res = fscanf(in, "%c", &bit); } } fprintf(out, "\n"); if (!noteq) close(in); close(out); } void WeightToGuave(char *inputfile, char *outputfile) { int i, Wt, Fr, CurWt, res; OpenFiles(inputfile,outputfile); res = ReadUntil(in, '\n', 6); fprintf(out, "GUAVA_TEMP_VAR := ["); CurWt = 0; res = fscanf(in, "%i ", &Wt); while (res != EOF) { if (CurWt > 0) fprintf(out, ", "); res = fscanf(in, "%i", &Fr); for (i = CurWt; i < Wt; i++) fprintf(out, "0, "); fprintf(out, "%i", Fr); CurWt = Wt+1; res = ReadUntil(in, '\n', 1); res = fscanf(in, "%i", &Wt); } fprintf(out, "];\n"); fclose(in); fclose(out); } guava-3.6/src/leon/0000755017361200001450000000000011027425517014072 5ustar tabbottcrontabguava-3.6/src/leon/src/0000755017361200001450000000000011026725005014653 5ustar tabbottcrontabguava-3.6/src/leon/src/token.h0000644017361200001450000000060711026723452016153 0ustar tabbottcrontab#ifndef TOKEN #define TOKEN extern char *lowerCase( char *s) ; extern void setInputFile( FILE *newFile) ; extern void setInputString( const char *const newString) ; extern Token readToken( void) ; extern Token nkReadToken(void) ; extern Token sReadToken( void) ; extern void unreadToken( Token tokenToUnread) ; extern void sUnreadToken( Token tokenToUnread) ; #endif guava-3.6/src/leon/src/chbase.sh0000755017361200001450000000003711026723452016443 0ustar tabbottcrontab#!/bin/sh orblist -chbase $* guava-3.6/src/leon/src/fndinvol.h0000644017361200001450000000004311026723452016644 0ustar tabbottcrontab#ifndef FNDINVOL #define FNDINVOL guava-3.6/src/leon/src/ccent.c0000644017361200001450000011563611026723452016133 0ustar tabbottcrontab/* File ccent.c. Contains functions centralizer and conjugatingElement, that may be used to compute centralizer and conjugacy of elements in permutation groups. */ #include #include #include #include "group.h" #include "compcrep.h" #include "compsg.h" #include "cparstab.h" #include "errmesg.h" #include "inform.h" #include "new.h" #include "orbrefn.h" #include "permut.h" #include "randgrp.h" #include "storage.h" CHECK( ccent) extern GroupOptions options; /* Forward declarations of functions. */ static RefinementMapping centRefine; static ReducChkFn isCentReducible; static void initializeCentRefine( Permutation *e); static Partition *cycleLengthPartn( const Permutation *const e, UnsignedS *const cycleLen, UnsignedS *const cycleStructure); static Partition *multipleCycleLengthPartn( const Permutation *const ex[]); /* The following functions are used to check the centralizer or conjugacy property. Pointers to them are passed to computeSubgroup or computeCosetRep. */ static const Permutation *ee, *ff; static const PermGroup *EE; static BOOLEAN longCycleFlag; static UnsignedS *cycleLen, *cycleStructure; static BOOLEAN centralizesE( const Permutation *const s) { return checkConjugacy( ee, ee, s); } static BOOLEAN conjugatesEToF( const Permutation *const s) { return checkConjugacy( ee, ff, s); } static BOOLEAN centralizesGroupE( const Permutation *const s) { Permutation *gen; for ( gen = EE->generator ; gen ; gen = gen->next ) if ( !checkConjugacy( gen, gen, s) ) return FALSE; return TRUE; } extern UnsignedS (*chooseNextBasePoint)( const PermGroup *const G, const PartitionStack *const UpsilonStack); static UnsignedS nextBasePointEltCent( const PermGroup *const G, const PartitionStack *const UpsilonStack) { const Unsigned degree = UpsilonStack->degree; const UnsignedS *const cellNumber = UpsilonStack->cellNumber, *const cellSize = UpsilonStack->cellSize; Unsigned alpha, pt, cSize, shortPriority; unsigned long priority, minPriority; alpha = 0; for ( pt = 1 ; pt <= degree ; ++pt ) if ( (cSize = cellSize[cellNumber[pt]]) > 1 ) { if ( longCycleFlag ) priority = 2000000000ul - (unsigned long) MIN(cycleLen[pt],1000) << 20 + cSize; else if ( cycleLen[pt] == 1 ) priority = cSize; else { shortPriority = 2; cSize >>= 1; while ( (cSize >>= 2) > 0 ) shortPriority <<= 1; shortPriority /= (cycleLen[pt] - 1); priority = (unsigned long) shortPriority + 1; } if ( alpha == 0 || priority < minPriority ) { alpha = pt; minPriority = priority; } } return alpha; } /*-------------------------- centralizer ----------------------------------*/ /* Function centralizer. Returns a new permutation group representing the centralizer in a permutation group G of an element e. The algorithm is based on Figure 9 in the paper "Permutation group algorithms based on partitions" by the author. */ #define familyParm familyParm_L PermGroup *centralizer( PermGroup *const G, /* The containing permutation group. */ const Permutation *const e, /* The point set to be stabilized. */ PermGroup *const L, /* A (possibly trivial) known subgroup of the stabilizer in G of Lambda. (A null pointer designates a trivial group.) */ const BOOLEAN noPartn, /* If true, suppresses use of ordered partition based on cycle size. */ const BOOLEAN longCycleOption, /* Always choose next base point in longest cycle; however, at present, all cycles of length 5 or greater are treated as having the same length. */ const BOOLEAN stdRBaseOption) /* Use std base selection algorithm, ignoring cycle lengths. */ { RefinementFamily OOO_G, CCC_e, SSS_eCycle; RefinementFamily *refnFamList[4]; ReducChkFn *reducChkList[4]; SpecialRefinementDescriptor *specialRefinement[4]; ExtraDomain *extra[1]; Partition *eCyclePartn = NULL; Unsigned refnCount = 0; PermGroup *G_return; /* Orbit refinement (unless G is symmetric). */ if ( ! IS_SYMMETRIC(G) ) { OOO_G.refine = orbRefine; OOO_G.familyParm[0].ptrParm = G; refnFamList[refnCount] = &OOO_G; reducChkList[refnCount] = isOrbReducible; specialRefinement[refnCount] = malloc( sizeof(SpecialRefinementDescriptor) ); specialRefinement[refnCount]->refnType = 'O'; specialRefinement[refnCount]->leftGroup = G; specialRefinement[refnCount]->rightGroup = G; initializeOrbRefine( G); ++refnCount; } /* Centralizer refinement. */ CCC_e.refine = centRefine; CCC_e.familyParm[0].ptrParm = e; refnFamList[refnCount] = &CCC_e; reducChkList[refnCount] = isCentReducible; specialRefinement[refnCount] = NULL; initializeCentRefine( e); ee = e; ++refnCount; /* Cycle length partition refinement. */ cycleLen = allocIntArrayDegree(); cycleStructure = allocIntArrayDegree(); eCyclePartn = cycleLengthPartn( e, cycleLen, cycleStructure); if ( !noPartn && eCyclePartn ) { SSS_eCycle.refine = partnStabRefine; SSS_eCycle.familyParm[0].ptrParm = (void *) eCyclePartn; refnFamList[refnCount] = &SSS_eCycle; reducChkList[refnCount] = isPartnStabReducible; specialRefinement[refnCount] = NULL; initializePartnStabRefn(); ++refnCount; } /* Terminators. */ refnFamList[refnCount] = NULL; reducChkList[refnCount] = NULL; specialRefinement[refnCount] = NULL; extra[0] = NULL; chooseNextBasePoint = ( stdRBaseOption ) ? NULL : nextBasePointEltCent; longCycleFlag = longCycleOption; G_return = computeSubgroup( G, centralizesE, refnFamList, reducChkList, specialRefinement, extra, L); if ( ! IS_SYMMETRIC(G) ) { if ( !noPartn && eCyclePartn ) free(specialRefinement[refnCount - 3]); else free(specialRefinement[refnCount - 2]); } freePartition( eCyclePartn ); // will this break anything? return G_return; } #undef familyParm /*-------------------------- conjugatingElement ---------------------------*/ /* Function conjugatingElement. Returns a permutation in a given group G mapping a given permutation e (not necessarily in G) to another given permutation f, or returns NULL if e and f are not conjugate in G. The algorithm is based on Figure 9 in the paper "Permutation group algorithms based on partitions" by the author. */ Permutation *conjugatingElement( PermGroup *const G, /* The containing permutation group. */ const Permutation *const e, /* One of the elements. */ const Permutation *const f, /* The other element. */ PermGroup *const L_L, /* A (possibly trivial) known subgroup of the centralizer in G of e. (A null pointer designates a trivial group.) */ PermGroup *const L_R, /* A (possibly trivial) known subgroup of the centralizer in G of f. (A null pointer designates a trivial group.) */ const BOOLEAN noPartn, /* If true, suppresses use of ordered partition based on cycle size. */ const BOOLEAN longCycleOption, /* Always choose next base point in longest cycle; however, at present, all cycles of length 5 or greater are treated as having the same length. */ const BOOLEAN stdRBaseOption) /* Use std base selection algorithm, ignoring cycle lengths. */ { RefinementFamily OOO_G, CCC_ef, SSS_efCycle; RefinementFamily *refnFamList[4]; ReducChkFn *reducChkList[4]; SpecialRefinementDescriptor *specialRefinement[4]; ExtraDomain *extra[1]; Partition *eCyclePartn = NULL, *fCyclePartn = NULL; Unsigned refnCount = 0, i; UnsignedS *cycleLen1, *cycleStructure1; Permutation *y; /* Handle symmetric group using trivial algorithm. Note this does not necessarily produce the lexicographically first conjugating permutation. */ if ( IS_SYMMETRIC(G) ) { cycleLen = allocIntArrayDegree(); cycleStructure = allocIntArrayDegree(); cycleLen1 = allocIntArrayDegree(); cycleStructure1 = allocIntArrayDegree(); eCyclePartn = cycleLengthPartn( e, cycleLen, cycleStructure); fCyclePartn = cycleLengthPartn( f, cycleLen1, cycleStructure1); y = newUndefinedPerm( G->degree); for ( i = 1 ; i <= G->degree && y ; ++i ) if ( cycleLen[cycleStructure[i]] == cycleLen1[cycleStructure1[i]] ) y->image[cycleStructure[i]] = cycleStructure1[i]; else y = NULL; freeIntArrayDegree( cycleLen); freeIntArrayDegree( cycleStructure); freeIntArrayDegree( cycleLen1); freeIntArrayDegree( cycleStructure1); if ( eCyclePartn ) deletePartition( eCyclePartn); if ( fCyclePartn ) deletePartition( fCyclePartn); if ( y ) adjoinInvImage( y); if ( options.inform ) informCosetRep( y); return y; } /* Orbit refinement. */ OOO_G.refine = orbRefine; OOO_G.familyParm_L[0].ptrParm = G; OOO_G.familyParm_R[0].ptrParm = G; refnFamList[refnCount] = &OOO_G; reducChkList[refnCount] = isOrbReducible; specialRefinement[refnCount] = malloc( sizeof(SpecialRefinementDescriptor) ); specialRefinement[refnCount]->refnType = 'O'; specialRefinement[refnCount]->leftGroup = G; specialRefinement[refnCount]->rightGroup = G; initializeOrbRefine( G); ++refnCount; /* Centralizer refinement. */ CCC_ef.refine = centRefine; CCC_ef.familyParm_L[0].ptrParm = e; CCC_ef.familyParm_R[0].ptrParm = f; refnFamList[refnCount] = &CCC_ef; reducChkList[refnCount] = isCentReducible; specialRefinement[refnCount] = NULL; initializeCentRefine( e); ee = e; ff = f; ++refnCount; /* Cycle length partition refinement. */ cycleLen = allocIntArrayDegree(); cycleStructure = allocIntArrayDegree(); cycleLen1 = allocIntArrayDegree(); cycleStructure1 = allocIntArrayDegree(); eCyclePartn = cycleLengthPartn( e, cycleLen, cycleStructure); fCyclePartn = cycleLengthPartn( f, cycleLen1, cycleStructure1); /* If cycle structure is not the same, elements are not conjugate, so return immediately. */ for ( i = 1 ; i <= G->degree ; ++i ) if ( cycleLen[cycleStructure[i]] != cycleLen1[cycleStructure1[i]] ) { freeIntArrayDegree( cycleLen); freeIntArrayDegree( cycleStructure); freeIntArrayDegree( cycleLen1); freeIntArrayDegree( cycleStructure1); if ( eCyclePartn ) deletePartition( eCyclePartn); if ( fCyclePartn ) deletePartition( fCyclePartn); if ( options.inform ) informCosetRep( NULL); return NULL; } /* Continue with cycle length partition refinement. */ if ( !noPartn && eCyclePartn ) { SSS_efCycle.refine = partnStabRefine; SSS_efCycle.familyParm_L[0].ptrParm = (void *) eCyclePartn; SSS_efCycle.familyParm_R[0].ptrParm = (void *) fCyclePartn; refnFamList[refnCount] = &SSS_efCycle; reducChkList[refnCount] = isPartnStabReducible; specialRefinement[refnCount] = NULL; initializePartnStabRefn(); ++refnCount; } /* Terminators. */ refnFamList[refnCount] = NULL; reducChkList[refnCount] = NULL; specialRefinement[refnCount] = NULL; extra[0] = NULL; chooseNextBasePoint = ( stdRBaseOption ) ? NULL : nextBasePointEltCent; longCycleFlag = longCycleOption; return computeCosetRep( G, conjugatesEToF, refnFamList, reducChkList, specialRefinement, extra, L_L, L_R); } /*-------------------------- groupCentralizer -----------------------------*/ /* Function groupCentralizer. Returns a new permutation group representing the centralizer in a permutation group G of another permutation group E. The algorithm is based on Figure 9 in the paper "Permutation group algorithms based on partitions" by the author. */ #define familyParm familyParm_L PermGroup *groupCentralizer( PermGroup *const G, /* The containing permutation group. */ const PermGroup *const E, /* The point set to be stabilized. */ PermGroup *const L, /* A (possibly trivial) known subgroup of the stabilizer in G of Lambda. (A null pointer designates a trivial group.) */ const Unsigned centPartnCount, const Unsigned centGenCount) { RefinementFamily OOO_G, CCC_e[17], SSS_eCycle; RefinementFamily *refnFamList[20]; ReducChkFn *reducChkList[20]; SpecialRefinementDescriptor *specialRefinement[20]; ExtraDomain *extra[1]; Partition *eCyclePartn = NULL; Unsigned i; unsigned long seed = 47; Permutation *e, *ex[20]; Unsigned refnCount = 0; /* Orbit refinement (unless G is symmetric). */ if ( ! IS_SYMMETRIC(G) ) { OOO_G.refine = orbRefine; OOO_G.familyParm[0].ptrParm = G; refnFamList[refnCount] = &OOO_G; reducChkList[refnCount] = isOrbReducible; specialRefinement[refnCount] = malloc( sizeof(SpecialRefinementDescriptor) ); specialRefinement[refnCount]->refnType = 'O'; specialRefinement[refnCount]->leftGroup = G; specialRefinement[refnCount]->rightGroup = G; initializeOrbRefine( G); ++refnCount; } initializeSeed( seed); for ( i = 1 ; i <= MAX(centGenCount,centPartnCount) ; ++i ) { e = randGroupPerm( E, 1); if ( i <= centGenCount ) { CCC_e[refnCount].refine = centRefine; CCC_e[refnCount].familyParm[0].ptrParm = e; refnFamList[refnCount] = &CCC_e[refnCount]; reducChkList[refnCount] = isCentReducible; specialRefinement[refnCount] = NULL; initializeCentRefine( e); ++refnCount; } if ( i <= centPartnCount ) ex[i] = e; } eCyclePartn = NULL; if ( centPartnCount > 0 ) { ex[centPartnCount+1] = NULL; eCyclePartn = multipleCycleLengthPartn( ex); } else eCyclePartn = NULL; if ( eCyclePartn ) { SSS_eCycle.refine = partnStabRefine; SSS_eCycle.familyParm[0].ptrParm = (void *) eCyclePartn; refnFamList[refnCount] = &SSS_eCycle; reducChkList[refnCount] = isPartnStabReducible; specialRefinement[refnCount] = NULL; initializePartnStabRefn(); ++refnCount; } /* Terminators. */ refnFamList[refnCount] = NULL; reducChkList[refnCount] = NULL; specialRefinement[refnCount] = NULL; extra[0] = NULL; EE = E; return computeSubgroup( G, centralizesGroupE, refnFamList, reducChkList, specialRefinement, extra, L); } #undef familyParm /*------------------------------------------------------------------------*/ #define HASH( i, j) ( (7L * i + j) % hashTableSize ) typedef struct RefnListEntry { Unsigned i; /* Cell number in UpsilonTop to split. */ Unsigned j; /* Orbit number of G^(level) in split. */ Unsigned newCellSize; /* Size of new cell created by split. */ struct RefnListEntry *hashLink; /* List of refns with same hash value. */ struct RefnListEntry *next; /* Next refn on list of all refinements. */ struct RefnListEntry *last; /* Last refn on list of all refinements. */ } RefnListEntry; static struct { Unsigned elementCount; Permutation *element[17]; RefnListEntry **hashTable[17]; RefnListEntry *refnList[17]; RefnListEntry *freeListHeader[17]; RefnListEntry *inUseListHeader[17]; } refnData = {0}; static Unsigned trueElementCount, hashTableSize; static RefnListEntry **hashTable, *freeListHeader, *inUseListHeader; static UnsignedS *pt = NULL, *freq = NULL; /*-------------------------- initializeCentRefine -------------------------*/ static void initializeCentRefine( Permutation *e) { int i; /* Compute hash table size. */ if ( refnData.elementCount == 0 ) { hashTableSize = e->degree; while ( hashTableSize > 11 && (hashTableSize % 2 == 0 || hashTableSize % 3 == 0 || hashTableSize % 5 == 0 || hashTableSize % 7 == 0) ) --hashTableSize; } if ( refnData.elementCount < 9) { refnData.element[refnData.elementCount] = e; refnData.hashTable[refnData.elementCount] = allocPtrArrayDegree(); refnData.refnList[refnData.elementCount] = malloc( e->degree * (sizeof(RefnListEntry)+2) ); if ( !refnData.refnList[refnData.elementCount] ) ERROR( "initializeCentRefine", "Memory allocation error.") ++refnData.elementCount; trueElementCount = refnData.elementCount; } else ERROR( "initializeCentRefine", "Centralizer refinement limited to ten elements.") /* Alloc (outer level) freq and pt, and nitialize array freq. */ pt = allocIntArrayDegree(); freq = allocIntArrayDegree(); for ( i = 1 ; i <= e->degree ; ++i ) freq[i] = 0; } /*-------------------------- centRefine -----------------------------------*/ /* This function implements the refinement family CCC_e. This family consists of the elementary refinements ccC_{e,i,j}, where e fixed. (It is the element to be stabilized) and where 1 <= i, j <= degree. Application of ccC_sSS_{e,i,j} to UpsilonStack splits off from UpsilonTop the intersection of the i'th cell of UpsilonTop and the j'th cell of UpsilonTop^e and pushes the resulting partition onto UpsilonStack, unless sSS_{e,i,j} acts trivially on UpsilonTop, in which case UpsilonStack remains unchanged. The family parameter is: familyParm[0].ptrParm: e The refinement parameters are: refnParm[0].intParm: i refnParm[1].intParm: j. */ static SplitSize centRefine( const RefinementParm familyParm[], /* Family parm: e. */ const RefinementParm refnParm[], /* Refinement parms: i, j. */ PartitionStack *const UpsilonStack) /* The partition stack to refine. */ { const Permutation *const e = familyParm[0].ptrParm; const Unsigned cellToSplit = refnParm[0].intParm, otherCell = refnParm[1].intParm; Unsigned m, last, i, j, temp, startNewCell, inNewCellCount = 0, outNewCellCount = 0; UnsignedS *const pointList = UpsilonStack->pointList, *const invPointList = UpsilonStack->invPointList, *const cellNumber = UpsilonStack->cellNumber, *const parent = UpsilonStack->parent, *const startCell = UpsilonStack->startCell, *const cellSize = UpsilonStack->cellSize; SplitSize split; /* First check if the refinement acts nontrivially on UpsilonTop. If not return immediately. */ for ( m = startCell[cellToSplit] , last = m + cellSize[cellToSplit] ; m < last && (inNewCellCount == 0 || outNewCellCount == 0) ; ++m ) if ( cellNumber[e->invImage[pointList[m]]] == otherCell ) ++inNewCellCount; else ++outNewCellCount; if ( inNewCellCount == 0 || outNewCellCount == 0 ) { split.oldCellSize = cellSize[cellToSplit]; split.newCellSize = 0; return split; } /* Now split cell cellToSplit of UpsilonTop. A variation of the splitting algorithm used in quicksort is applied. */ if ( cellSize[cellToSplit] <= cellSize[otherCell] ) { i = startCell[cellToSplit]-1; j = last; while ( i < j ) { while ( cellNumber[e->invImage[pointList[++i]]] != otherCell ) ; while ( cellNumber[e->invImage[pointList[--j]]] == otherCell ) ; if ( i < j ) { EXCHANGE( pointList[i], pointList[j], temp) EXCHANGE( invPointList[pointList[i]], invPointList[pointList[j]], temp) } } startNewCell = i; } else { startNewCell = startCell[cellToSplit] + cellSize[cellToSplit]; for ( i = startCell[otherCell] , last = i + cellSize[otherCell] ; i < last ; ++i ) if ( cellNumber[e->image[pointList[i]]] == cellToSplit ) { --startNewCell; m = invPointList[e->image[pointList[i]]]; EXCHANGE( pointList[m], pointList[startNewCell], temp); EXCHANGE( invPointList[pointList[m]], invPointList[pointList[startNewCell]], temp); } } ++UpsilonStack->height; for ( m = startNewCell , last = startCell[cellToSplit] + cellSize[cellToSplit] ; m < last ; ++m ) cellNumber[pointList[m]] = UpsilonStack->height; startCell[UpsilonStack->height] = startNewCell; parent[UpsilonStack->height] = cellToSplit; cellSize[UpsilonStack->height] = last - startNewCell; cellSize[cellToSplit] -= (last - startNewCell); split.oldCellSize = cellSize[cellToSplit]; split.newCellSize = cellSize[UpsilonStack->height]; return split; } /*-------------------------- deleteRefnListEntry --------------------------*/ static void deleteRefnListEntry( RefnListEntry *entryToDelete, Unsigned hashPosition, /* hashTableSize+1 indicates unknown */ RefnListEntry *prevHashListEntry) { if ( hashPosition > hashTableSize ) { hashPosition = HASH( entryToDelete->i, entryToDelete->j); if ( hashTable[hashPosition] == entryToDelete ) prevHashListEntry = NULL; else { prevHashListEntry = hashTable[hashPosition]; while ( prevHashListEntry->hashLink != entryToDelete ) prevHashListEntry = prevHashListEntry->hashLink; } } if ( prevHashListEntry ) prevHashListEntry->hashLink = entryToDelete->hashLink; else hashTable[hashPosition] = entryToDelete->hashLink; if ( entryToDelete->last ) entryToDelete->last->next = entryToDelete->next; else inUseListHeader = entryToDelete->next; if ( entryToDelete->next ) entryToDelete->next->last = entryToDelete->last; entryToDelete->next = freeListHeader; freeListHeader = entryToDelete; } /*-------------------------- isCentReducible ------------------------------*/ static RefinementPriorityPair isCentReducible( const RefinementFamily *family, /* The refinement family mapping must be centRefine; family parm[0] is the centralizing element. */ const PartitionStack *const UpsilonStack) { BOOLEAN cellWillSplit; Unsigned i, j, m, elementNumber, hashPosition, newCellNumber, oldCellNumber, count, splittingCell, cSize, temp, previousJ; unsigned long minPriority, thisPriority; UnsignedS *const pointList = UpsilonStack->pointList, *const cellNumber = UpsilonStack->cellNumber, *const startCell = UpsilonStack->startCell, *const cellSize = UpsilonStack->cellSize; Permutation *e = family->familyParm_L[0].ptrParm; RefinementPriorityPair reducingRefn; RefnListEntry *refnList; RefnListEntry *p, *oldP, *position, *minPosition; /* Check that the refinement mapping really is centRefine, as required, and that the element is one for which initializeCentRefine has been called. */ if ( family->refine != centRefine ) ERROR( "isCentReducible", "Error: incorrect refinement mapping"); for ( elementNumber = 0 ; elementNumber < refnData.elementCount && refnData.element[elementNumber] != e ; ++elementNumber ) ; if ( elementNumber >= refnData.elementCount ) ERROR( "isCentReducible", "Routine not initialized for element.") hashTable = refnData.hashTable[elementNumber]; refnList = refnData.refnList[elementNumber]; /* If this is the first call (UpsilonStack has height 1), we create a new empty refinement list. */ if ( UpsilonStack->height == 1) { for ( i = 0 ; i < hashTableSize ; ++i ) hashTable[i] = NULL; freeListHeader = &refnList[0]; inUseListHeader = NULL; for ( i = 0 ; i < e->degree ; ++i) refnList[i].next = &refnList[i+1]; refnList[e->degree].next = NULL; } /* If this is not a new level, we merely fix up the old list. The entries for the new cell must be created and those for its parent must be adjusted. */ else { freeListHeader = refnData.freeListHeader[elementNumber]; inUseListHeader = refnData.inUseListHeader[elementNumber]; newCellNumber = UpsilonStack->height; oldCellNumber = UpsilonStack->parent[UpsilonStack->height]; /* First we make adjustments corresponding to splitting the new partition using the old. */ for ( m = startCell[newCellNumber] , cellWillSplit = FALSE , previousJ = 0 ; m < startCell[newCellNumber] + cellSize[newCellNumber] ; ++m ) { j = cellNumber[e->invImage[pointList[m]]]; if ( j == newCellNumber ) j = oldCellNumber; if ( previousJ != 0 && previousJ != j ) cellWillSplit = TRUE; previousJ = j; hashPosition = HASH( oldCellNumber, j); p = hashTable[hashPosition]; oldP = NULL; while ( p && (p->i != oldCellNumber || p->j != j) ) { oldP = p; p = p->hashLink; } if ( p ) { --p->newCellSize; if ( p->newCellSize == 0 ) deleteRefnListEntry( p, hashPosition, oldP); } } if ( cellWillSplit ) for ( m = startCell[newCellNumber] ; m < startCell[newCellNumber] + cellSize[newCellNumber] ; ++m ) { j = cellNumber[e->invImage[pointList[m]]]; if ( j == newCellNumber ) j = oldCellNumber; hashPosition = HASH( newCellNumber, j); p = hashTable[hashPosition]; while ( p && (p->i != newCellNumber || p->j != j) ) p = p->hashLink; if ( p ) ++p->newCellSize; else { if ( !freeListHeader ) ERROR( "isCentReducible", "Refinement list exceeded bound (should not occur).") p = freeListHeader; freeListHeader = freeListHeader->next; p->next = inUseListHeader; if ( inUseListHeader ) inUseListHeader->last = p; p->last = NULL; inUseListHeader = p; p->hashLink = hashTable[hashPosition]; hashTable[hashPosition] = p; p->i = newCellNumber; p->j = j; p->newCellSize = 1; } } /* Now we make adjustments corresponding to changing the second partition from the old to the new. */ cSize = 0; for ( m = startCell[newCellNumber] ; m < startCell[newCellNumber] + cellSize[newCellNumber] ; ++m ) { pt[++cSize] = temp = e->image[pointList[m]]; ++freq[cellNumber[temp]]; /* MUST BE ZERO INITIALLY. */ } for ( m = 1 ; m <= cSize ; ++m ) { splittingCell = cellNumber[pt[m]]; if ( freq[splittingCell] > 0 && freq[splittingCell] < cellSize[splittingCell] ) { /* i.e, cell splits */ /* Add entry that cell newCellNumber splits cell splittingCell. */ hashPosition = HASH( splittingCell, newCellNumber); p = hashTable[hashPosition]; oldP = NULL; while ( p && (p->i != splittingCell || p->j != newCellNumber) ) { oldP = p; p = p->hashLink; } if ( !freeListHeader ) ERROR( "isCentReducible", "Refinement list exceeded bound (should not occur).") p = freeListHeader; freeListHeader = freeListHeader->next; p->next = inUseListHeader; if ( inUseListHeader ) inUseListHeader->last = p; p->last = NULL; inUseListHeader = p; p->hashLink = hashTable[hashPosition]; hashTable[hashPosition] = p; p->i = splittingCell; p->j = newCellNumber; p->newCellSize = freq[splittingCell]; /* Check if cell oldCellNumber split cell splittingCell. If so, adjust its count, and eliminate its entry if count reaches 0. If not, then it now must, so add it. */ hashPosition = HASH( splittingCell, oldCellNumber); p = hashTable[hashPosition]; oldP = NULL; while ( p && (p->i != splittingCell || p->j != oldCellNumber) ) { oldP = p; p = p->hashLink; } if ( p ) { p->newCellSize -= freq[splittingCell]; if ( p->newCellSize == 0 ) deleteRefnListEntry( p, hashPosition, oldP); } else { if ( !freeListHeader ) ERROR( "isCentReducible", "Refinement list exceeded bound (should not occur).") p = freeListHeader; freeListHeader = freeListHeader->next; p->next = inUseListHeader; if ( inUseListHeader ) inUseListHeader->last = p; p->last = NULL; inUseListHeader = p; p->hashLink = hashTable[hashPosition]; hashTable[hashPosition] = p; p->i = splittingCell; p->j = oldCellNumber; p->newCellSize = cellSize[splittingCell] - freq[splittingCell]; } } freq[splittingCell] = 0; } } /* Now we return a refinement of minimal priority. While searching the list, we also check for refinements invalidated by previous splittings. */ minPosition = inUseListHeader; minPriority = ULONG_MAX; count = 1; for ( position = inUseListHeader ; position && count < 100 ; position = position->next , ++count ) { while ( position && position->newCellSize == cellSize[position->i] ) { p = position; position = position->next; deleteRefnListEntry( p, hashTableSize+1, NULL); } if ( !position ) break; if ( (thisPriority = (unsigned long) position->newCellSize + MIN( cellSize[position->i], cellSize[position->j] )) < minPriority ) { minPriority = thisPriority; minPosition = position; } } if ( minPriority == ULONG_MAX ) reducingRefn.priority = IRREDUCIBLE; else { reducingRefn.refn.family = family; reducingRefn.refn.refnParm[0].intParm = minPosition->i; reducingRefn.refn.refnParm[1].intParm = minPosition->j; reducingRefn.priority = thisPriority; } /* If this is the last call to isOrbReducible for this element (UpsilonStack has height degree-1), free memory and reinitialize. */ if ( UpsilonStack->height == e->degree - 1 ) { freePtrArrayDegree( refnData.hashTable[elementNumber]); free( refnData.refnList[elementNumber]); refnData.element[elementNumber] = NULL; --trueElementCount; if ( trueElementCount == 0 ) refnData.elementCount = 0; } refnData.freeListHeader[elementNumber] = freeListHeader; refnData.inUseListHeader[elementNumber] =inUseListHeader; return reducingRefn; } /*-------------------------- cycleLengthPartn -----------------------------*/ /* This function returns a new partition in which each cell represents the points lying in cycles of a fixed size of a permutation e. However, if the partition would have just one cell, no partition is created, and a null pointer is returned instead. It also fills in an array cycleLen so as to make cycleLen[pt] the length of the cycle containing point, as well as an array cycleStructure which consists of the list of points sorted by cycle length, such that all points a fixed cycle appear together, in order that they appear in a cycle. At the end, pointList is such that the points appear in increasing cycle length. */ Partition *cycleLengthPartn( const Permutation *const e, UnsignedS *const cycleLen, UnsignedS *const cycleStructure) { Unsigned i, j, pt, img, len, cellCount; const Unsigned degree = e->degree; UnsignedS *const sortedCycleLen = allocIntArrayDegree(); UnsignedS *const freq = allocIntArrayDegree(); UnsignedS *const pointList = allocIntArrayDegree(); Partition *cPartn; char *found; /* For each point pt, set cycleLen[pt] to the length of the e-cycle containing pt. */ for ( pt = 1 ; pt <= degree ; ++pt) cycleLen[pt] = 0; for ( pt = 1 ; pt <= degree ; ++pt ) if ( cycleLen[pt] == 0 ) { for ( len = 1 , img = e->image[pt] ; img != pt ; img = e->image[img] , ++len ) ; for ( img = e->image[pt] ; img != pt ; img = e->image[img] ) cycleLen[img] = len; cycleLen[pt] = len; } /* Now set pointList to a list of points sorted by cycle length. */ for ( i = 0 ; i <= degree ; ++i ) freq[i] = 0; for ( pt = 1 ; pt <= degree ; ++pt ) ++freq[cycleLen[pt]]; freq[0] = 0; for ( i = 1 ; i <= degree ; ++i ) freq[i] += freq[i-1]; for ( i = 1 ; i <= degree ; ++i ) { pointList[++freq[cycleLen[i]-1]] = i; sortedCycleLen[freq[cycleLen[i]-1]] = cycleLen[i]; } /* Now construct cycleStructure. */ found = allocBooleanArrayDegree(); for ( pt = 1 ; pt <= degree ; ++pt) found[pt] = FALSE; j = 0; for ( i = 1 ; i <= degree ; ++i ) if ( !found[ pt=pointList[i] ] ) { img = pt; do { found[img] = TRUE; cycleStructure[++j] = img; img = e->image[img]; } while ( img != pt ); } freeBooleanArrayDegree( found); /* If there is only one cycle, free heap storage and return NULL> */ if ( cycleLen[pointList[1]] == cycleLen[pointList[degree]] ) { freeIntArrayDegree( sortedCycleLen); freeIntArrayDegree( freq); freeIntArrayDegree( pointList); return NULL; } /* Otherwise construct the partition and return it. */ else { cellCount = 0; cPartn = allocPartition(); cPartn->degree = degree; cPartn->pointList = pointList; cPartn->invPointList = freq; /* Just to reuse storage. */ cPartn->cellNumber = cycleLen; /* Just to reuse storage. */ cPartn->startCell = allocIntArrayDegree(); for ( i = 1 ; i <= degree ; ++i ) { cPartn->invPointList[cPartn->pointList[i]] = i; if ( i == 1 || sortedCycleLen[i] != sortedCycleLen[i-1] ) cPartn->startCell[++cellCount] = i; cPartn->cellNumber[cPartn->pointList[i]] = cellCount; } cPartn->startCell[cellCount+1] = degree+1; freeIntArrayDegree( sortedCycleLen); return cPartn; } } /*-------------------------- multipleCycleLengthPartn ----------------------*/ /* This function returns a new partition in which each cell represents the points lying in cycles of a fixed size of each partition ex[1], ex[2], ... (list null-terminated). However, if the partition would have just one cell, no partition is created, and a null pointer is returned instead. */ Partition *multipleCycleLengthPartn( const Permutation *const ex[]) { Unsigned i, pt, img, len, cellCount, permNumber, OldNumberPreviousCell; const Unsigned degree = ex[1]->degree; UnsignedS *const cycleLen = allocIntArrayDegree(); UnsignedS *const freq = allocIntArrayDegree(); UnsignedS *pointList = allocIntArrayDegree(); UnsignedS *newPointList = allocIntArrayDegree(); UnsignedS *const cellNumber = allocIntArrayDegree(); UnsignedS *temp; Partition *cPartn; for ( i = 1 ; i <= degree ; ++i ) { pointList[i] = i; cellNumber[i] = 1; } for ( permNumber = 1 ; ex[permNumber] ; ++permNumber ) { /* For each point pt, set cycleLen[pt] to the length of the ex[i]-cycle containing pt. */ for ( pt = 1 ; pt <= degree ; ++pt) cycleLen[pt] = 0; for ( pt = 1 ; pt <= degree ; ++pt ) if ( cycleLen[pt] == 0 ) { for ( len = 1 , img = ex[permNumber]->image[pt] ; img != pt ; img = ex[permNumber]->image[img] , ++len ) ; for ( img = ex[permNumber]->image[pt] ; img != pt ; img = ex[permNumber]->image[img] ) cycleLen[img] = len; cycleLen[pt] = len; } /* Now we sort the points by cycle length, using a stable sort. */ for ( i = 0 ; i <= degree ; ++i ) freq[i] = 0; for ( pt = 1 ; pt <= degree ; ++pt ) ++freq[cycleLen[pt]]; freq[0] = 0; for ( i = 1 ; i <= degree ; ++i ) freq[i] += freq[i-1]; for ( i = 1 ; i <= degree ; ++i ) newPointList[++freq[cycleLen[pointList[i]]-1]] = pointList[i]; EXCHANGE( pointList, newPointList, temp); /* Now compute cellNumber for the new partition. */ OldNumberPreviousCell = cellNumber[pointList[1]]; cellNumber[pointList[1]] = 1; for ( i = 2 ; i <= degree ; ++i ) { if ( cellNumber[pointList[i]] != OldNumberPreviousCell || cycleLen[pointList[i]] != cycleLen[pointList[i-1]] ) { OldNumberPreviousCell = cellNumber[pointList[i]]; cellNumber[pointList[i]] = 1 + cellNumber[pointList[i-1]]; } else { OldNumberPreviousCell = cellNumber[pointList[i]]; cellNumber[pointList[i]] = cellNumber[pointList[i-1]]; } } } /* If there is only one cycle, free heap storage and return NULL> */ if ( cellNumber[pointList[degree]] == 1 ) { freeIntArrayDegree( cycleLen); freeIntArrayDegree( freq); freeIntArrayDegree( pointList); freeIntArrayDegree( newPointList); freeIntArrayDegree( cellNumber); return NULL; } /* Otherwise construct the partition and return it. */ else { cellCount = 0; cPartn = allocPartition(); cPartn->degree = degree; cPartn->pointList = pointList; cPartn->cellNumber = cellNumber; cPartn->invPointList = freq; /* Just to reuse storage. */ cPartn->startCell = newPointList; /* Just to reuse space. */ for ( i = 1 ; i <= degree ; ++i ) { cPartn->invPointList[cPartn->pointList[i]] = i; if ( i == 1 || cellNumber[pointList[i]] != cellNumber[pointList[i-1]] ) cPartn->startCell[++cellCount] = i; } cPartn->startCell[cellCount+1] = degree+1; freeIntArrayDegree( cycleLen); return cPartn; } } guava-3.6/src/leon/src/cuprstab.h0000644017361200001450000000276111026723452016661 0ustar tabbottcrontab#ifndef CUPRSTAB #define CUPRSTAB extern PermGroup *uPartnStabilizer( PermGroup *const G, /* The containing permutation group. */ const Partition *const Lambda, /* The point set to be stabilized. */ PermGroup *const L) /* A (possibly trivial) known subgroup of the stabilizer in G of Lambda. (A null pointer designates a trivial group.) */ ; extern Permutation *uPartnImage( PermGroup *const G, /* The containing permutation group. */ const Partition *const Lambda, /* One of the partitions. */ const Partition *const Xi, /* The other partition. */ PermGroup *const L_L, /* A (possibly trivial) known subgroup of the stabilizer in G of Lambda. (A null pointer designates a trivial group.) */ PermGroup *const L_R) /* A (possibly trivial) known subgroup of the stabilizer in G of Xi. (A null pointer designates a trivial group.) */ ; extern void initializeUPartnStabRefine( PermGroup *G) ; extern RefinementPriorityPair isOrbReducible( const RefinementFamily *family, /* The refinement family mapping must be orbRefine; family parm[0] is the group. */ const PartitionStack *const UpsilonStack) ; #endif guava-3.6/src/leon/src/extname.h0000644017361200001450000002620311026723452016474 0ustar tabbottcrontab#define addOccurencesForRelator AddOfR #define addRelatorSortedFromWord AddRSW #define addStrongGenerator AddSGn #define adjoinGenInverses AdjGIv #define adjoinInvImage AdjIIm #define adjoinInverseGen AdjIGn #define allocBooleanArrayBaseSize AlcBAB #define allocBooleanArrayDegree AlcBAG #define allocFactoredInt AlcFI #define allocField AlcFld #define allocIntArrayBaseSize AlcIAB #define allocIntArrayDegree AlcIAD #define allocLongArrayBaseSize AlcLAB #define allocOccurenceOfGen AlcOoG #define allocPartition AlcPar #define allocPartitionStack AlcPaS #define allocPermGroup AlcPG #define allocPermutation AlcPer #define allocPointSet AlcPS #define allocPtrArrayBaseSize AlcPAB #define allocPtrArrayDegree AlcPAD #define allocPtrArrayWordSize AlcPAW #define allocRBase AlcRB #define allocRelator AlcRel #define allocRPriorityQueue AlcRPQ #define allocRefinementArrayDegree AlcRAD #define allocWord AlcWor #define augmentedMatrix AugMat #define assignGenName AsnGN #define bitSetAt BitStA #define bitSetBelow BitStB #define buildField BldFld #define cellNumberAtDepth CelNAD #define centralizer centrl #define changeBase ChaBas #define checkCompileOptions CkCpOp #define checkConjugacy ChkCjg #define checkConjugacyInGroup ChkCGp #define chooseNextBasePoint CNxBPt #define codeContainsVector CodCVe #define commutatorGroup ComGrp #define compressAtLevel CmprAL #define compressGroup CmprGp #define computeCosetRep CpCRep #define computeSchreierGen CpShGn #define computeSubgroup CpSG #define conjugateGroupByPerm CjGrpP #define conjugatePermByGroup CjPerG #define conjugatePermByPerm CjPerP #define conjugatingElement CnjElt #define constructAllOrbitInfo CstAOI #define constructBasicOrbit CstBO #define constructOrbitPartition CstOP #define constructRBase CstRB #define copyEssential CopEss #define copyOfPermGroup CopOPG #define copyOfPermutation CopOP #define copyPermutation CopPer #define currentExtraCosets CuExCs #define deletePartition DelPar #define deletePartitionStack DelPS #define deletePermGroup DelPG #define deletePermutation DelPer #define deleteRBase DelRB #define deleteRPriorityQueue DelRPQ #define depthGreaterThan DepGt #define designAutoGroup DesAGp #define designIsomorphism DesIso #define equivCoset EqvCos #define errorMessage ErrMes #define errorMessage1i ErrM1i #define errorMessage1s ErrM1s #define essentialAboveLevel EssAbL #define essentialAtLevel EssAtL #define essentialBelowLevel EssBeL #define expandGenerators ExpGen #define expandSGS ExpSGS #define extendBasicOrbit ExtBO #define extraCosetsAtLevel ExCsLv #define factDivide FacDiv #define factEqual FacEql #define factMultiply FacMul #define factorize Factiz #define findConsequences FnCnsq #define fixesBasicOrbit FixBO #define forceCollapse FCalps #define freeBooleanArrayBaseSize FreBAB #define freeBooleanArrayDegree FreBAD #define freeCosHeader FreCsH #define freeFactoredInt FreFI #define freeField FreFld #define freeIntArrayBaseSize FreIAB #define freeIntArrayDegree FreIAD #define freeLongArrayBaseSize FreLAB #define freeOccurenceOfGen FreOoG #define freePartition FrePar #define freePartitionStack FrePaS #define freePermGroup FrePG #define freePermutation FrePer #define freePointSet FrePS #define freePtrArrayBaseSize FrePAB #define freePtrArrayDegree FrePAD #define freePtrArrayWordSize FrePAW #define freeRBase FreRB #define freeRelator FreRel #define freeRPriorityQueue FreRPQ #define freeRefinementArrayDegree FreRAD #define freeWord FreWrd #define genCount GenCnt #define genExpandingBasicOrbit GenEBO #define groupCentralizer GpCent #define informCosetRep InfCR #define informGroup InfGrp #define informNewGenerator InfNG #define informNewRelator InfNR #define informOptions InfOpt #define informRBase InfRB #define informSTCSSummary InfSTC #define informStatistics InfStt #define informSubgroup InfSG #define informTime IntTim #define initFromPartnStack IniPaS #define initializeBase IniBas #define initializePartnStabRefn IniPSR #define initializeOrbRefine IniOR #define initializeSeed IniSed #define initializeSetStabRefn IniSSR #define initializeStorageManager IniSM #define initializeUPartnStabRefine IniUPS #define insertBasePoint InsBP #define intersection Inters #define isBaseImage IsBImg #define isCentralizedBy IsCenB #define isCodeIsomorphism IsCIso #define isDoublyTransitive IsDbTr #define isElementOf IsEltO #define isFixedPointOf IsFxP #define isIdentity IsIden #define isIdentityElt IsIElt #define isInvolution IsInvo #define isInvolutoryElt IsIvEl #define isMatrix01Isomorphism IsMIso #define isNontrivialGroup IsNtGp #define isNormalizedBy IsNorB #define isOrbReducible IsOrRd #define isPartnStabReducible IsPaRd #define isPointStabReducible IsPSRd #define isSetStabReducible IsSSRd #define isSubgroupOf IsSGrp #define isValidName IsValN #define isValidPermutation IsValP #define is_sSSPointReducible IsSPRd #define is_sSSReducible IsSRd #define leftMultiply LftMul #define levelIn LevIn #define linkEssentialGens LnkEG #define linkEssentialGensAtLevel LnkEGL #define linkGensAtLevel LnkGAL #define lowerCase LwrCas #define makeDefinition MakDef #define makeEmpty MakEmp #define makeEssentialAtLevel MEsAtL #define makeNotEssentialAll MEsAll #define makeNotEssentialAtAboveLevel MEsAAL #define makeNotEssentialAtLevel MNEAtL #define makeUnknownEssential MUnkEs #define matrixAutoGroup MatAut #define matrixIsomorphism MatIso #define meanCosetRepLen MenCRL #define minimalPointOfOrbit MinPOO #define newCellPartitionStack NewCPS #define newIdentityPerm NewIP #define newPartitionStack NewPaS #define newRBase NewRB #define newRelatorFromWord NewRfW #define newRPriorityQueue NewRPQ #define newTrivialPermGroup NewTPG #define newTrivialWord NewTW #define newUndefinedPerm NewUP #define newZeroMatrix NewZMa #define nkReadToken NkRedT #define normalClosure NorCls #define numberOfCells NoOCel #define onFreeList OnFreL #define orbRefine OrbRef #define parseLibraryName ParsLN #define partnStabilizer ParStb #define partnStabRefine PaStbR #define partnImage ParImg #define permMapping PerMap #define permOrder PerOrd #define pointMovedBy PtMovB #define pointStabRefine PtStbR #define popToHeight PopTHt #define primeList PrmLst #define processCoincidence PrCoin #define prodOrderBounded PrOrdB #define ptStabFamily PtStFm #define raisePermToPower RasPTP #define randGroupPerm RandGP #define randGroupWord RandGW #define randInteger RandIn #define randomSchreier RandSh #define read01Matrix Red01M #define readCode RedCod #define readCyclePerm RedCyP #define readDesign RedDes #define readFactoredInt RedFI #define readImagePerm RedIP #define readPartition RedPar #define readPerm RedPm #define readPermGroup RedPG #define readPermutation RedPer #define readPointList RedPL #define readPointSet RedPS #define readToken RedTok #define reconstructBasicOrbit RecBO #define reduceBasis RedBas #define reduceWrtGroup RedWGp #define relatorLevel RelLev #define relatorSelection RelSel #define removeIdentityGens RmvIGn #define removeMin RmvMin #define removeRedunSGens RmvRSG #define replaceByPower RepPwr #define resetTable ResetT #define restrictBasePoints ResBPt #define rightMultiply RgtMul #define rightMultiplyInv RgtMIv #define schreierToddCoxeterSims SchTCS #define shiftPriority SftPri #define shiftSelection SftSel #define sReadToken SRdTok #define sSSPoint SSSPnt #define sSS_Partn SSSPar #define sUnreadToken SUrTok #define setImage SetImg #define setInputFile SetInF #define setInputString SetInS #define setOutputFile SetOtF #define setStabilizer SetStb #define showLimits ShoLim #define symmetricLength SymLen #define symmetricWordLength SymWLn #define traceNewRelator TrNRel #define unreadToken URdTok #define uPartnImage UPrImg #define uPartnStabilizer UprStb #define verifyCosetList VerCLs #define write01Matrix Wrt01M #define writeCode WrtCod #define writeCyclePerm WrtCyP #define writeDesign WrtDes #define writeFactoredInt WrtFI #define writeImagePerm WrtIP #define writeImageMonomialPerm WrtIMP #define writePartition WrtPar #define writePermGroup WrtPG #define writePermGroupRestricted WrtPGR #define writePermutation WrtPer #define writePermutationRestricted WrtPRs #define writePointSet WrtPS #define xComputeSchreierGen XCpShG #define xFindConsequences XFndCs #define xPopToLevel XPopLv #define xTraceNewRelator XTrNRl guava-3.6/src/leon/src/stcs.c0000644017361200001450000011602311026723452016002 0ustar tabbottcrontab/* File stcs.c. */ #include #include #include #include #include "group.h" #include "groupio.h" #include "enum.h" #include "repimg.h" #include "addsgen.h" #include "cstborb.h" #include "errmesg.h" #include "essentia.h" #include "factor.h" #include "new.h" #include "oldcopy.h" #include "permgrp.h" #include "permut.h" #include "randschr.h" #include "relator.h" #include "storage.h" #include "token.h" CHECK( stcs) extern Unsigned primeList[]; static BOOLEAN checkStabilizer( PermGroup *const G, const UnsignedS *const knownBase, /* Null-terminated list, or null. */ const Unsigned level, Unsigned *jPtr, Permutation **hPtr, Word **wPtr); static BOOLEAN xCheckStabilizer( PermGroup *const G, const UnsignedS *const knownBase, /* Null-terminated list, or null. */ const Unsigned level, Unsigned *jPtr, Permutation **hPtr, Word **wPtr); static void addStrongGeneratorNR( PermGroup *G, /* Group to which strong gen is adjoined. */ Permutation *newGen); /* The new strong generator. It must move */ WordImagePair computeSchreierGen( const PermGroup *const G, const Unsigned level, const Unsigned point, const Permutation *const gen); BOOLEAN reduce( const PermGroup *const G, const Unsigned level, Unsigned *const jPtr, WordImagePair *const whPtr); void informNewRelator( const Relator *const newRel, Unsigned numberAdded); void informSTCSSummary( const PermGroup *const G, const unsigned long numberOfRelators, const unsigned long totalRelatorLength, const Unsigned maxRelatorLength, const unsigned long numberSelected, const unsigned long totalSelectedLength); void expandGenerators( PermGroup *const G, Unsigned maxExtraCosets); unsigned long prodOrderBounded( const Permutation *const perm1, const Permutation *const perm2, const Unsigned bound); extern GroupOptions options; extern STCSOptions sOptions; extern Unsigned relatorSelection[5]; Unsigned *nextCos, *prevCos, *ff, *bb, *equivCoset; Unsigned freeCosHeader, firstCos; Unsigned extraCosetsAtLevel; Unsigned currentExtraCosets; static unsigned long tableEntriesFilled; static unsigned long totalTableEntries; static unsigned long numberOfRelators = 0, totalRelatorLength = 0, numberSelected = 0, totalSelectedLength = 0; static Unsigned maxRelatorLength = 0; /*-------------------------- schreierToddCoxeterSims ----------------------*/ /* Main function for the Schreier-Todd-Coxeter-Sim function for constructing a base, strong generating set, and strong presentation for a permutation group. Note: If G has relators initially, they will be assumed to be correct, and will be used. However, in this case, it should already have inverse permutations. */ void schreierToddCoxeterSims( PermGroup *const G, const UnsignedS *const knownBase) /* Null-terminated list, or null. */ { Unsigned level, i, j, k, pOrder, numberAdded; Unsigned degree = G->degree; Permutation *gen, *gen1; Permutation *h; Relator *r, *rel; char *svecOK = allocBooleanArrayBaseSize(); Word *w; Relator *newRel; Word tempWord; /* If initialization is requested, perform initializations. */ if ( sOptions.initialize ) { /* Allocate fields within G. */ if ( G->base || G->basicOrbLen || G->basicOrbit || G->schreierVec ) ERROR( "schreierToddCoxeterSims", "A group field that must be null initially was nonnull.") G->base = allocIntArrayBaseSize(); G->basicOrbLen = allocIntArrayBaseSize(); G->basicOrbit = (UnsignedS **) allocPtrArrayBaseSize(); G->schreierVec = (Permutation ***) allocPtrArrayBaseSize(); /* Allocate G->order and set G->order to 1. */ if ( !G->order ) { G->order = allocFactoredInt(); G->order->noOfFactors = 0; } /* Delete identity generators from G if present. Return immediately if G is the identity group. */ removeIdentityGens( G); if ( !G->generator ) { /* Should we allocate G->base, etc??? */ G->baseSize = 0; return; } /* Adjoin an inverse image array to each permutation if absent. */ adjoinGenInverses( G); /* Choose an initial segment of the base so that each generator moves some base point. */ initializeBase( G); /* Fill in the level of each generator, and make each generator essential at its level and above. */ for ( gen = G->generator ; gen ; gen = gen->next ) { gen->level = levelIn( G, gen); MAKE_NOT_ESSENTIAL_ALL( gen); for ( level = 1 ; level <= gen->level ; ++level ) MAKE_ESSENTIAL_AT_LEVEL( gen, level); } /* Allocate the orbit length, basic orbit, and Schreier vector arrays. Set G->order (previously allocated) to the product of the basic orbit lengths. */ G->order->noOfFactors = 0; for ( level = 1 ; level <= G->baseSize ; ++level ) { G->basicOrbLen[level] = 1; G->basicOrbit[level] = allocIntArrayDegree(); G->schreierVec[level] = allocPtrArrayDegree(); } } /* Expand the generator arrays if extra cosets are specified. */ if ( sOptions.maxExtraCosets > 0 ) expandGenerators( G, sOptions.maxExtraCosets); /* Adjoin inverse permutations, and construct (or reconstruct) the Schreier vectors, using all generators at each level. */ for ( gen = G->generator ; gen ; gen = gen->next ) if ( !gen->invPermutation ) adjoinInverseGen( G, gen); for ( level = 1 ; level <= G->baseSize ; ++level ) { constructBasicOrbit( G, level, "AllGensAtLevel" ); svecOK[level] = TRUE; } /* Find max size for deduction queue, if not specified. */ if ( sOptions.maxDeducQueueSize == UNKNOWN ) sOptions.maxDeducQueueSize = 2 * degree + options.maxBaseSize + sOptions.maxExtraCosets; /* Add generator order and product order relators to relator list. */ tempWord.position = allocPtrArrayWordSize(); for ( gen = G->generator ; gen ; gen = gen->next ) if ( gen->name[0] != '*' ) { pOrder = permOrder( gen); if ( pOrder > 2 && pOrder <= sOptions.genOrderLimit ) { tempWord.length = pOrder; for ( j = 1 ; j <= pOrder ; ++j ) tempWord.position[j] = gen; newRel = addRelatorSortedFromWord( G, &tempWord, TRUE, TRUE); ++numberOfRelators; totalRelatorLength += newRel->length; ++numberSelected; totalSelectedLength += newRel->length; maxRelatorLength = MAX ( maxRelatorLength, newRel->length); } } if ( sOptions.prodOrderLimit >= 2 ) for ( gen = G->generator ; gen ; gen = gen->next ) if ( gen->name[0] != '*' ) for ( gen1 = gen->next ; gen1 ; gen1 = gen1->next ) if ( (pOrder = prodOrderBounded( gen, gen1, sOptions.prodOrderLimit)) > 0 ) { tempWord.length = 2 * pOrder; for ( j = 1 ; j <= pOrder ; ++j ) { tempWord.position[2*j-1] = gen; tempWord.position[2*j] = gen1; } newRel = addRelatorSortedFromWord( G, &tempWord, TRUE, TRUE); ++numberOfRelators; totalRelatorLength += newRel->length; ++numberSelected; totalSelectedLength += newRel->length; maxRelatorLength = MAX ( maxRelatorLength, newRel->length); } freePtrArrayDegree( tempWord.position); /* If G has any relators, construct the appropriate occurencesOfGen lists. */ for ( rel = G->relator ; rel ; rel = rel->next ) { numberAdded = addOccurencesForRelator( rel, MAX_INT); informNewRelator( rel, numberAdded); } /* If extra cosets are specified, construct the data structures required for extra cosets. */ if ( sOptions.maxExtraCosets ) { nextCos = (Unsigned *) malloc( sizeof(Unsigned) * (sOptions.maxExtraCosets+2) ); if ( !nextCos ) ERROR( "schreierToddCoxeterSims", "Out of memory.") nextCos -= degree; prevCos = (Unsigned *) malloc( sizeof(Unsigned) * (sOptions.maxExtraCosets+2) ); if ( !prevCos ) ERROR( "schreierToddCoxeterSims", "Out of memory.") prevCos -= degree; ff = (Unsigned *) malloc( sizeof(Unsigned) * (sOptions.maxExtraCosets+2) ); if ( !ff ) ERROR( "schreierToddCoxeterSims", "Out of memory.") ff -= degree; bb = (Unsigned *) malloc( sizeof(Unsigned) * (sOptions.maxExtraCosets+2) ); if ( !bb ) ERROR( "schreierToddCoxeterSims", "Out of memory.") bb -= degree; equivCoset = (Unsigned *) malloc( sizeof(Unsigned) * (degree+sOptions.maxExtraCosets+2) ); if ( !equivCoset ) ERROR( "schreierToddCoxeterSims", "Out of memory.") } /* Now we repeatedly check whether G^(level)_{alpha_level} = G(level+1) (*) holds for level = G->baseSize,...,2,1. However, (*) fails, we add a new strong generator, possibly a new base point, and adjust level. Note the procedure checkStabilizer returns TRUE if and only if (*) holds. If (*) fails, it sets j, h, and w as follows: L denotes level, s is a Schreier generator of H^(L+1), h = s u_{L+1}(d_{L+1})^-1 u_{j-1}(d_{j-1})^-1 fixes a_1,...,a_{j-1}, If j <= G->baseSize, a_j^h not in Delta_j. If j = G->baseSize+1, h != identity. w is h in word form. */ level = G->baseSize; while ( level > 0 ) { if ( !svecOK[level] || sOptions.alwaysRebuildSvec ) { constructBasicOrbit( G, level, "AllGensAtLevel" ); svecOK[level] = TRUE; } if ( (sOptions.maxExtraCosets == 0 && checkStabilizer( G, knownBase, level, &j, &h, &w)) || (sOptions.maxExtraCosets > 0 && xCheckStabilizer( G, knownBase, level, &j, &h, &w)) ) --level; else { if ( j == G->baseSize+1 ) { G->base[++G->baseSize] = pointMovedBy( h); G->basicOrbLen[G->baseSize] = 1; G->basicOrbit[G->baseSize] = allocIntArrayDegree(); G->schreierVec[G->baseSize] = allocPtrArrayDegree(); } assignGenName( G, h); addStrongGeneratorNR( G, h); adjoinInverseGen( G, h); w->position[++w->length] = h->invPermutation; newRel = addRelatorSortedFromWord( G, w, TRUE, TRUE); ++numberOfRelators; totalRelatorLength += newRel->length; ++numberSelected; totalSelectedLength += newRel->length; maxRelatorLength = MAX ( maxRelatorLength, newRel->length); numberAdded = addOccurencesForRelator( newRel, MAX_INT); informNewRelator( newRel, numberAdded); for ( k = level + 1 ; k <= j; ++k ) svecOK[k] = FALSE; level = j; } } informSTCSSummary( G, numberOfRelators, totalRelatorLength, maxRelatorLength, numberSelected, totalSelectedLength); /* Free pseudo-stack storage. */ freeBooleanArrayBaseSize( svecOK); } /*-------------------------- checkStabilizer ------------------------------*/ /* This function checkStabilizer( G, knownBase, level, j, h, w) checks whether G^(level)_{alpha_level} = G(level+1). (*) It returns true if (*) holds and false otherwise. If (*) fails, it also sets j and returns a new permutation h and a new word w as follows. L denotes level, s is a Schreier generator of H^(L+1), h = s u_{L+1}(d_{L+1})^-1 u_{j-1}(d_{j-1})^-1 fixes a_1,...,a_{j-1}, If j <= G->baseSize, a_j^h not in Delta_j. If j = G->baseSize+1, h != identity. w is h in word form. NOTE: INVERSE PERMUTATIONS MUST EXIST. */ static BOOLEAN checkStabilizer( PermGroup *const G, const UnsignedS *const knownBase, /* Null-terminated list, or null. */ const Unsigned level, Unsigned *jPtr, Permutation **hPtr, Word **wPtr) { Unsigned i, j, pt, prevPt, curPointIndex, curPoint, img, numberAdded; Permutation *genHeader, *gen, *curGen; Unsigned basicOrbLen = G->basicOrbLen[level]; UnsignedS *basicOrbit = G->basicOrbit[level]; Permutation **schreierVec = G->schreierVec[level]; static DeductionQueue *deductionQueue = NULL; WordImagePair wh; Deduction newDeduc, deduc; Relator *newRel; Unsigned selectionPriority = relatorSelection[2], relatorPriority; /* First time, allocate the deduction queue. */ if ( !deductionQueue ) { deductionQueue = (DeductionQueue *) malloc( sizeof(DeductionQueue) ); if ( !deductionQueue ) ERROR( "checkStabilizer", "Out of memory.") deductionQueue->deduc = (Deduction *) malloc( sOptions.maxDeducQueueSize * sizeof(Deduction)); if ( !deductionQueue->deduc ) ERROR( "checkStabilizer", "Out of memory.") } totalTableEntries = tableEntriesFilled = 0; wh.image = allocIntArrayDegree(); /* Link the generators at specified level, using xNext. */ genHeader = linkGensAtLevel( G, level); /* Flag all table entries at this level. Also empty the deduction queue. */ MAKE_EMPTY( deductionQueue); for ( gen = genHeader ; gen ; gen = gen->xNext ) for ( i = 1 ; i <= basicOrbLen ; ++i ) { pt = basicOrbit[i]; gen->image[pt] |= HB; ++totalTableEntries; } /* Now put the subgroup generator entries for H^(level+1) in the table, and enqueue them. */ for ( gen = genHeader ; gen ; gen = gen->xNext ) if ( gen->level > level ) { gen->image[basicOrbit[1]] = basicOrbit[1]; ++tableEntriesFilled; newDeduc.pnt = newDeduc.img = basicOrbit[1]; newDeduc.gn = gen; ATTEMPT_ENQUEUE( deductionQueue, newDeduc) } /* Now make those definitions corresponding to the Schreier vector. */ for ( i = 2 ; i <= basicOrbLen ; ++i ) { pt = basicOrbit[i]; gen = schreierVec[pt]; prevPt = gen->invImage[pt] & NHB; gen->image[prevPt] = pt; ++tableEntriesFilled; newDeduc.pnt = prevPt; newDeduc.img = pt; newDeduc.gn = gen; ATTEMPT_ENQUEUE( deductionQueue, newDeduc); if ( gen->invImage[pt] & HB ) { gen->invImage[pt] = prevPt; ++tableEntriesFilled; newDeduc.pnt = pt; newDeduc.img = prevPt; newDeduc.gn = gen->invPermutation; ATTEMPT_ENQUEUE( deductionQueue, newDeduc); } } /* Perform initial enumerations till deduction queue is empty. */ while ( NOT_EMPTY(deductionQueue) ) { DEQUEUE( deductionQueue , deduc); findConsequences( deductionQueue, level, &deduc); } /* Now traverse the table, looking for negative entries. */ curPointIndex = 1; curGen = genHeader; for ( curPointIndex = 1 ; curPointIndex <= basicOrbLen && tableEntriesFilled < totalTableEntries ; ++curPointIndex ) { curPoint = basicOrbit[curPointIndex]; for ( curGen = G->generator ; curGen && tableEntriesFilled < totalTableEntries; curGen = curGen->xNext ) if ( curGen->image[curPoint] & HB ) { curGen->image[curPoint] &= NHB; ++tableEntriesFilled; img = curGen->image[curPoint]; wh = computeSchreierGen( G, level, curPoint, curGen); if ( !reduce( G, level, &j, &wh) ) { *jPtr = j; *hPtr = allocPermutation(); (*hPtr)->degree = G->degree; (*hPtr)->image = wh.image; adjoinInvImage( *hPtr); *wPtr = allocWord(); **wPtr = wh.word; resetTable( genHeader, basicOrbLen, basicOrbit); return FALSE; } freeIntArrayDegree( wh.image); newDeduc.pnt = curPoint; newDeduc.img = img; newDeduc.gn = curGen; ATTEMPT_ENQUEUE( deductionQueue, newDeduc) if ( curGen->invPermutation != curGen || img != curPoint ) { curGen->invImage[img] &= NHB; ++tableEntriesFilled; newDeduc.pnt = img; newDeduc.img = curPoint; newDeduc.gn = curGen->invPermutation; ATTEMPT_ENQUEUE( deductionQueue, newDeduc); } relatorPriority = relatorSelection[0] - relatorSelection[1] * (wh.word.length + symmetricWordLength(&wh.word)); if ( relatorPriority > selectionPriority ) { newRel = addRelatorSortedFromWord( G, &wh.word, TRUE, TRUE); selectionPriority += relatorSelection[4]; ++numberSelected; totalSelectedLength += newRel->length; numberAdded = addOccurencesForRelator( newRel, relatorPriority - selectionPriority); informNewRelator( newRel, numberAdded); traceNewRelator( G, level, deductionQueue, newRel); } else selectionPriority -= relatorSelection[5]; ++numberOfRelators; totalRelatorLength += wh.word.length; maxRelatorLength = MAX ( maxRelatorLength, wh.word.length); freePtrArrayWordSize( wh.word.position); while ( NOT_EMPTY(deductionQueue) ) { DEQUEUE( deductionQueue , deduc); findConsequences( deductionQueue, level, &deduc); } } } freeIntArrayDegree( wh.image); return TRUE; } /*-------------------------- xCheckStabilizer ------------------------------*/ /* This function xCheckStabilizer( G, knownBase, level, j, h, w) checks whether G^(level)_{alpha_level} = G(level+1). (*) It returns true if (*) holds and false otherwise. If (*) fails, it also sets j and returns a new permutation h and a new word w as follows. L denotes level, s is a Schreier generator of H^(L+1), h = s u_{L+1}(d_{L+1})^-1 u_{j-1}(d_{j-1})^-1 fixes a_1,...,a_{j-1}, If j <= G->baseSize, a_j^h not in Delta_j. If j = G->baseSize+1, h != identity. w is h in word form. NOTE: INVERSE PERMUTATIONS MUST EXIST. */ static BOOLEAN xCheckStabilizer( PermGroup *const G, const UnsignedS *const knownBase, /* Null-terminated list, or null. */ const Unsigned level, Unsigned *jPtr, Permutation **hPtr, Word **wPtr) { Unsigned i, j, pt, prevPt, curPointIndex, curPoint, img, numberAdded, newTableEntries; Unsigned degree = G->degree; Permutation *genHeader, *gen, *curGen; Unsigned basicOrbLen = G->basicOrbLen[level]; UnsignedS *basicOrbit = G->basicOrbit[level]; Permutation **schreierVec = G->schreierVec[level]; static DeductionQueue *deductionQueue = NULL; static DefinitionList *defnList = NULL; Deduction newDeduc, deduc; Relator *newRel; Unsigned selectionPriority = relatorSelection[2], relatorPriority; /* First time, allocate the deduction queue and definition list. */ if ( !deductionQueue ) { deductionQueue = (DeductionQueue *) malloc( sizeof(DeductionQueue) ); if ( !deductionQueue ) ERROR( "xCheckStabilizer", "Out of memory.") deductionQueue->deduc = (Deduction *) malloc( sOptions.maxDeducQueueSize * sizeof(Deduction)); if ( !deductionQueue->deduc ) ERROR( "checkStabilizer", "Out of memory.") defnList = (DefinitionList *) malloc( sizeof(DefinitionList) ); if ( !defnList ) ERROR( "xCheckStabilizer", "Out of memory.") defnList->coset = (Unsigned *) malloc( sOptions.maxExtraCosets * sizeof(Unsigned) ); if ( !defnList->coset ) ERROR( "xCheckStabilizer", "Out of memory.") defnList->image = (Unsigned *) malloc( sOptions.maxExtraCosets * sizeof(Unsigned) ); if ( !defnList->image ) ERROR( "xCheckStabilizer", "Out of memory.") defnList->gen = (Permutation **) malloc( sOptions.maxExtraCosets * sizeof(Permutation *) ); if ( !defnList->gen ) ERROR( "xCheckStabilizer", "Out of memory.") } totalTableEntries = tableEntriesFilled = 0; /* Compute number of extra cosets at this level. */ extraCosetsAtLevel = (Unsigned) MIN( (unsigned long) sOptions.maxExtraCosets, sOptions.percentExtraCosets * ((unsigned long) basicOrbLen + 99) / 100 ); currentExtraCosets = 0; /* Link the generators at specified level, using xNext. */ genHeader = linkGensAtLevel( G, level); /* Initialize data structures for extra cosets. */ firstCos = 0; freeCosHeader = degree + 1; for ( i = 1 ; i <= degree ; ++i ) equivCoset[i] = i; for ( i = degree + 1 ; i < degree + extraCosetsAtLevel ; ++i ) nextCos[i] = i + 1; nextCos[degree+extraCosetsAtLevel] = 0; for ( i = degree + 1 ; i <= degree + extraCosetsAtLevel ; ++i ) bb[i] = i; for ( gen = genHeader ; gen ; gen = gen->xNext ) for ( i = degree + 1 ; i <= degree + extraCosetsAtLevel ; ++i ) gen->image[i] = HB; defnList->head = defnList->tail = defnList->size = 0; /* Flag all table entries at this level. Also empty the deduction queue. */ MAKE_EMPTY( deductionQueue); for ( gen = genHeader ; gen ; gen = gen->xNext ) for ( i = 1 ; i <= basicOrbLen ; ++i ) { pt = basicOrbit[i]; gen->image[pt] |= HB; ++totalTableEntries; } /* Now put the subgroup generator entries for H^(level+1) in the table, and enqueue them. */ for ( gen = genHeader ; gen ; gen = gen->xNext ) if ( gen->level > level ) { gen->image[basicOrbit[1]] = basicOrbit[1]; ++tableEntriesFilled; newDeduc.pnt = newDeduc.img = basicOrbit[1]; newDeduc.gn = gen; ATTEMPT_ENQUEUE( deductionQueue, newDeduc) } /* Now make those definitions corresponding to the Schreier vector. */ for ( i = 2 ; i <= basicOrbLen ; ++i ) { pt = basicOrbit[i]; gen = schreierVec[pt]; prevPt = gen->invImage[pt] & NHB; gen->image[prevPt] = pt; ++tableEntriesFilled; newDeduc.pnt = prevPt; newDeduc.img = pt; newDeduc.gn = gen; ATTEMPT_ENQUEUE( deductionQueue, newDeduc); if ( gen->invImage[pt] & HB ) { gen->invImage[pt] = prevPt; ++tableEntriesFilled; newDeduc.pnt = pt; newDeduc.img = prevPt; newDeduc.gn = gen->invPermutation; ATTEMPT_ENQUEUE( deductionQueue, newDeduc); } } /* Perform initial enumerations till deduction queue is empty. */ while ( NOT_EMPTY(deductionQueue) ) { DEQUEUE( deductionQueue , deduc); xFindConsequences( G, deductionQueue, level, &deduc, genHeader); } /* Now traverse the table, looking for entries with high bit set. */ curPointIndex = 1; curGen = genHeader; for ( curPointIndex = 1 ; curPointIndex <= basicOrbLen && tableEntriesFilled < totalTableEntries ; ++curPointIndex ) { curPoint = basicOrbit[curPointIndex]; for ( curGen = G->generator ; curGen && tableEntriesFilled < totalTableEntries; curGen = curGen->xNext ) if ( curGen->image[curPoint] & HB ) { if ( currentExtraCosets >= extraCosetsAtLevel ) { newTableEntries = forceCollapse( G, level, genHeader, deductionQueue, defnList, jPtr, hPtr, wPtr); if ( newTableEntries == UNKNOWN ) return FALSE; tableEntriesFilled += newTableEntries; relatorPriority = relatorSelection[0] - relatorSelection[1] * ((*wPtr)->length + symmetricWordLength(*wPtr)); if ( relatorPriority > selectionPriority ) { newRel = addRelatorSortedFromWord( G, *wPtr, TRUE, TRUE); selectionPriority += relatorSelection[4]; ++numberSelected; totalSelectedLength += newRel->length; numberAdded = addOccurencesForRelator( newRel, relatorPriority - selectionPriority); informNewRelator( newRel, numberAdded); traceNewRelator( G, level, deductionQueue, newRel); } else selectionPriority -= relatorSelection[5]; ++numberOfRelators; totalRelatorLength += (*wPtr)->length; maxRelatorLength = MAX ( maxRelatorLength, (*wPtr)->length); freePtrArrayWordSize( (*wPtr)->position); while ( NOT_EMPTY(deductionQueue) ) { DEQUEUE( deductionQueue , deduc); xFindConsequences( G, deductionQueue, level, &deduc, genHeader); } } if ( !(curGen->image[curPoint] & HB) ) continue; makeDefinition( curPoint, curGen, deductionQueue, defnList, genHeader); ++tableEntriesFilled; while ( NOT_EMPTY(deductionQueue) ) { DEQUEUE( deductionQueue , deduc); xFindConsequences( G, deductionQueue, level, &deduc, genHeader); } } } /* DEBUGGING -- REQUIRES FIXING, SINCE THERE SHOULD BE NO EXTRA COSETS HERE. */ for ( j = firstCos ; j ; j = nextCos[j] ) for ( gen = genHeader ; gen ; gen = gen->xNext ) if ( gen->image[j] < degree ) gen->invImage[gen->image[j]] = equivCoset[j]; return TRUE; } /*-------------------------- computeSchreierGen ---------------------------*/ /* The function computeSchreierGen( G, level, point, gen) computes the Schreier generator u_level(point) * gen * bar(u_level(point^gen))^-1 for G^(level+1). Here point must lie in Delta_level and gen must be a generator in G^(level). The function returns a word (with newly allocated position field), representing the Schreier generator, and a new image array, representing the image of 1,2,...,n under the word. NOTE this function takes account of the fact that generating permutations may have the leftmost bit set as a flag. */ WordImagePair computeSchreierGen( const PermGroup *const G, const Unsigned level, const Unsigned point, const Permutation *const gen) { WordImagePair sGen; Permutation **schreierVec = G->schreierVec[level]; Unsigned basePt = G->base[level]; Unsigned degree = G->degree; Unsigned i, j, pt; Unsigned *image; Permutation *temp; sGen.image = allocIntArrayDegree(); sGen.word.position = allocPtrArrayWordSize(); sGen.word.length = 0; for ( pt = point ; pt != basePt ; pt = schreierVec[pt]->invImage[pt] & NHB) sGen.word.position[++sGen.word.length] = schreierVec[pt]; for ( i = 1 , j = sGen.word.length ; i < j ; ++i , --j ) EXCHANGE( sGen.word.position[i], sGen.word.position[j] , temp); sGen.word.position[++sGen.word.length] = gen; for ( pt = gen->image[point] & NHB ; pt != basePt ; pt = schreierVec[pt]->invImage[pt] & NHB ) sGen.word.position[++sGen.word.length] = schreierVec[pt]->invPermutation; if ( sGen.word.length == 0 ) for ( pt = 1 ; pt <= degree ; ++pt ) sGen.image[pt] = pt; else { for ( pt = 1 ; pt <= degree ; ++pt ) sGen.image[pt] = sGen.word.position[1]->image[pt] & NHB; /* SUBSTITUTE A MODIFIED VERSION OF REPLACE_BY-IMAGE HERE. */ for ( i = 2 ; i <= sGen.word.length ; ++i ) { image = sGen.word.position[i]->image; for ( pt = 1 ; pt <= degree ; ++pt ) sGen.image[pt] = image[sGen.image[pt]] & NHB; } } return sGen; } /*-------------------------- xComputeSchreierGen --------------------------*/ /* The function xComputeSchreierGen( G, level, point, gen) is identical to computeSchreierGen( G, level, point, gen) except that it takes account of the possibility of temporary cosets ( > degree) in the table. */ WordImagePair xComputeSchreierGen( const PermGroup *const G, const Unsigned level, const Unsigned point, const Permutation *const gen) { WordImagePair sGen; Permutation **schreierVec = G->schreierVec[level]; Unsigned basePt = G->base[level]; Unsigned degree = G->degree; Unsigned i, j, pt; Unsigned *image; Permutation *temp; sGen.image = allocIntArrayDegree(); sGen.word.position = allocPtrArrayWordSize(); sGen.word.length = 0; for ( pt = point ; pt != basePt ; pt = equivCoset[schreierVec[pt]->invImage[pt] & NHB] ) sGen.word.position[++sGen.word.length] = schreierVec[pt]; for ( i = 1 , j = sGen.word.length ; i < j ; ++i , --j ) EXCHANGE( sGen.word.position[i], sGen.word.position[j] , temp); sGen.word.position[++sGen.word.length] = gen; for ( pt = equivCoset[gen->image[point] & NHB] ; pt != basePt ; pt = equivCoset[schreierVec[pt]->invImage[pt] & NHB] ) sGen.word.position[++sGen.word.length] = schreierVec[pt]->invPermutation; if ( sGen.word.length == 0 ) for ( pt = 1 ; pt <= degree ; ++pt ) sGen.image[pt] = pt; else { for ( pt = 1 ; pt <= degree ; ++pt ) sGen.image[pt] = equivCoset[sGen.word.position[1]->image[pt] & NHB]; /* SUBSTITUTE A MODIFIED VERSION OF REPLACE_BY-IMAGE HERE. */ for ( i = 2 ; i <= sGen.word.length ; ++i ) { image = sGen.word.position[i]->image; for ( pt = 1 ; pt <= degree ; ++pt ) sGen.image[pt] = equivCoset[image[sGen.image[pt]] & NHB]; } } return sGen; } /*-------------------------- reduce ---------------------------------------*/ /* The function reduce( G, level, j, wh) takes a word-image pair representing an element of G^(level) and it modifies it by right-multiplying by u_{level+1}^-1(d_{level+1} ... u_{j-1}^-1(d_{level+1}) so that it fixes a_{level+1},...,a_{j-1} and either i) j <= G->baseSize, and a_j^wh not in Delta_j. ii) j == G->baseSize+1, and wh != 1. iii) j == G->baseSize+1, and wh == 1. It returns false in cases (i) and (ii) and true in case (iii). */ BOOLEAN reduce( const PermGroup *const G, const Unsigned level, Unsigned *const jPtr, WordImagePair *const whPtr) { Unsigned i, j, pt; register Unsigned *temp1, *temp2; Unsigned *temp3, *temp4, *image; for ( j = level+1 ; j <= G->baseSize ; ++j ) { pt = whPtr->image[G->base[j]]; if ( !G->schreierVec[j][pt] ) { *jPtr = j; return FALSE; } for ( ; pt != G->base[j] ; pt = G->schreierVec[j][pt]->invImage[pt] & NHB) { whPtr->word.position[++whPtr->word.length] = G->schreierVec[j][pt]->invPermutation; image = whPtr->word.position[whPtr->word.length]->image; for ( i = 1 ; i <= G->degree ; ++i ) whPtr->image[i] = image[whPtr->image[i]] & NHB; } } *jPtr = G->baseSize + 1; for ( pt = 1 ; pt <= G->degree ; ++pt ) if ( whPtr->image[pt] != pt ) return FALSE; return TRUE; } /*-------------------------- xReduce --------------------------------------*/ /* The function xReduce( G, level, j, wh) is identical to Reduce( G, level, j, wh) except that it takes account of the possibility of temporary cosets ( > degree) in the table. */ BOOLEAN xReduce( const PermGroup *const G, const Unsigned level, Unsigned *const jPtr, WordImagePair *const whPtr) { Unsigned i, j, pt; Unsigned *image; for ( j = level+1 ; j <= G->baseSize ; ++j ) { pt = whPtr->image[G->base[j]]; if ( !G->schreierVec[j][pt] ) { *jPtr = j; return FALSE; } for ( ; pt != G->base[j] ; pt = equivCoset[G->schreierVec[j][pt]->invImage[pt] & NHB] ) { whPtr->word.position[++whPtr->word.length] = G->schreierVec[j][pt]->invPermutation; image = whPtr->word.position[whPtr->word.length]->image; for ( i = 1 ; i <= G->degree ; ++i ) whPtr->image[i] = equivCoset[image[whPtr->image[i]] & NHB]; } } *jPtr = G->baseSize + 1; for ( pt = 1 ; pt <= G->degree ; ++pt ) if ( whPtr->image[pt] != pt ) return FALSE; return TRUE; } /*-------------------------- addStrongGeneratorNR -------------------------*/ /* This function may be used to adjoin a new strong generator to a permutation group WITHOUT reconstructing basic orbits. Also, the essential fields are not modified in any way. */ void addStrongGeneratorNR( PermGroup *G, /* Group to which strong gen is adjoined. */ Permutation *newGen) /* The new strong generator. It must move a base point (not checked). */ { Unsigned i; /* Append inverse image of new strong generator, if absent. */ if ( !newGen->invImage ) adjoinInvImage( newGen); /* Find level of new strong generator. */ newGen->level = levelIn( G, newGen); /* Add the generator. */ if ( G->generator ) G->generator->last = newGen; newGen->last = NULL; newGen->next = G->generator; G->generator = newGen; } /*-------------------------- expandGenerators -----------------------------*/ void expandGenerators( PermGroup *const G, Unsigned extraCosets) { Unsigned i; Unsigned *oldImage, *oldInvImage; Permutation *gen; for ( gen = G->generator ; gen ; gen = gen->next ) gen->image[0] = gen->invImage[0] = 0; for ( gen = G->generator ; gen ; gen = gen->next ) { if ( gen->image[0] == 0 ) { oldImage = gen->image; gen->image = malloc( (G->degree+extraCosets+2) * sizeof(Unsigned)); if ( !gen->image ) ERROR( "expandGenerators", "Out of memory.") for ( i = 1 ; i <= G->degree ; ++i ) gen->image[i] = oldImage[i]; gen->image[0] = 1; if ( gen->invPermutation ) gen->invPermutation->invImage = gen->image; freeIntArrayDegree( oldImage); oldInvImage = gen->invImage; if ( oldImage == oldInvImage ) gen->invImage = gen->image; else { gen->invImage = malloc( (G->degree+extraCosets+2) * sizeof(Unsigned) ); if ( !gen->invImage ) ERROR( "expandGenerators", "Out of memory.") for ( i = 1 ; i <= G->degree ; ++i ) gen->invImage[i] = oldInvImage[i]; gen->invImage[0] = 1; freeIntArrayDegree( oldInvImage); } if ( gen->invPermutation ) gen->invPermutation->image = gen->invImage; } } } /*-------------------------- prodOrderBounded -----------------------------*/ /* The function prodOrderBounded( perm1, perm2, bound) returns the order of the product of permutations perm1 and perm2, provided this order is less than or equal to bound, and returns 0 otherwise. */ unsigned long prodOrderBounded( const Permutation *const perm1, const Permutation *const perm2, const Unsigned bound) { unsigned long orbLen, multiplier, order; Unsigned pt, basePt, imagePt; char *found = allocBooleanArrayDegree(); for (pt = 1; pt <= perm1->degree; ++pt) found[pt] = FALSE; for ( basePt = 1, order = 1; basePt <= perm1->degree; ++basePt ) if ( ! found[basePt] ) { orbLen = 0; imagePt = basePt; do { ++orbLen; imagePt = perm2->image[perm1->image[imagePt]]; found[imagePt] = TRUE; } while ( imagePt != basePt ); if (order % orbLen != 0) if ( order <= ULONG_MAX / (multiplier = orbLen / gcd(order,orbLen)) ) { order *= multiplier; if ( order > bound ) { freeBooleanArrayDegree( found); return 0; } } else { freeBooleanArrayDegree( found); return 0; } } freeBooleanArrayDegree( found); return order; } /*-------------------------- informNewRelator -----------------------------*/ void informNewRelator( const Relator *const newRel, Unsigned numberAdded) { Unsigned i, symLength; static BOOLEAN firstCall = TRUE; if ( firstCall ) { printf("\n"); firstCall = FALSE; } printf( "New relator (level %u) (%u): ", newRel->level, numberAdded); symLength = symmetricLength( newRel); if ( symLength == 1 ) if ( newRel->rel[1]->name[0] == '*' ) printf( "%s^%u", newRel->rel[1]->invPermutation->name, newRel->length); else printf( "%s^%u", newRel->rel[1]->name, newRel->length); else { if ( symLength < newRel->length ) printf( "(" ); for ( i = 1 ; i <= symLength ; ++i ) { if ( newRel->rel[i]->name[0] != '*' ) printf( "%s", newRel->rel[i]->name); else printf( "%s%s", newRel->rel[i]->invPermutation->name, "^-1"); if ( i < symLength ) printf( "*"); } if ( symLength < newRel->length ) printf( ")^%u", newRel->length/symLength ); } printf( "\n"); } /*-------------------------- informSTCSSummary -----------------------------*/ void informSTCSSummary( const PermGroup *const G, const unsigned long numberOfRelators, const unsigned long totalRelatorLength, const Unsigned maxRelatorLength, const unsigned long numberSelected, const unsigned long totalSelectedLength) { Unsigned i, intQuotient, decQuotient, numberOfGens, involGenCount; /* Print the group order. */ printf( "\n\nSchreier-Todd-Coxeter-Sims procedure complete."); printf( "\nGroup %s has order ", G->name); if ( G->order->noOfFactors == 0 ) printf( "%d", 1); else for ( i = 0 ; i < G->order->noOfFactors ; ++i ) { if ( i > 0 ) printf( " * "); printf( "%u", G->order->prime[i]); if ( G->order->exponent[i] > 1 ) printf( "^%u", G->order->exponent[i]); } printf( "\n"); /* Print the number of generators. */ numberOfGens = genCount( G, &involGenCount); printf( "\nNumber of generators: %u\n", numberOfGens); printf( "Number involutory: %u\n", involGenCount); /* Print the number of relators and total, maximum, and average relator length. */ printf( "\nNumber of relators: %lu\n", numberOfRelators); printf( "Total relator length: %lu\n", totalRelatorLength); printf( "Max relator length: %u\n", maxRelatorLength); intQuotient = (Unsigned)(totalRelatorLength / numberOfRelators); decQuotient = 10 * (totalRelatorLength - intQuotient * numberOfRelators); printf( "Mean relator length: %u.%1u\n", intQuotient, (unsigned)(decQuotient / numberOfRelators) ); printf( "\nNumber selected: %lu\n", numberSelected); printf( "Total select length: %lu\n", totalSelectedLength); intQuotient = (Unsigned)(totalSelectedLength / numberSelected); decQuotient = 10 * (totalSelectedLength - intQuotient * numberSelected); printf( "Mean select length: %u.%1u\n", intQuotient, (unsigned)(decQuotient / numberSelected) ); } guava-3.6/src/leon/src/factor.h0000644017361200001450000000063611026723452016313 0ustar tabbottcrontab#ifndef FACTOR #define FACTOR extern unsigned long gcd( unsigned long a, unsigned long b) ; extern void factMultiply( FactoredInt *const a, FactoredInt *const b) /* a = a * b */ ; extern void factDivide( FactoredInt *const a, FactoredInt *const b) /* a = a / b */ ; extern FactoredInt factorize( Unsigned n) ; extern BOOLEAN factEqual( FactoredInt *a, FactoredInt *b) ; #endif guava-3.6/src/leon/src/storage.c0000644017361200001450000003136411026723452016476 0ustar tabbottcrontab/* File storage.c. Contains functions to allocate and free memory. For certain commonly used sizes, memory is never actually freed; rather a linked list of allocated but currently unused segments of those sizes are maintained, and new allocations are taken from these linked lists when possible. Prior to any allocations, the procedure InitializeStorageManager must be invoked; this merely informs the routines of the degree of the group. The memory allocation functions are as follows; for each, there is a corresponding function to free memory. All allocation functions return a pointer to the memory allocated; an allocation failure terminates the program. Function Struct size or Array size array component size allocIntArrayBaseSize sizeof(Int) options.maxBaseSize allocIntArrayDegree sizeof(Int) degree+2 allocBooleanArrayDegree sizeof(char) degree+2 allocPtrArrayWordSize sizeof(Permutation *) options.maxWordLength allocPtrArrayBaseSize sizeof(Permutation *) options.maxBaseSize allocPtrArrayDegree sizeof(Permutation *) degree+2 allocPermutation sizeof(Permutation) allocPermGroup sizeof(PermGroup) allocPartitionStack sizeof(PartitionStack) allocPointSet sizeof(PointSet) allocWord sizeof(Word) */ #include #include #include "group.h" #include "errmesg.h" extern GroupOptions options; CHECK( storag) static Unsigned degree; /*-------------------------- initializeStorageManager ---------------------*/ void initializeStorageManager( Unsigned degreeOfGroup) { degree = degreeOfGroup; } /*-------------------------- allocIntArrayDegree --------------------------*/ UnsignedS *allocIntArrayDegree( void) { UnsignedS *address; #ifdef HIGH_MEM_OPTION address = (UnsignedS *) highMemMalloc( (degree+2) * sizeof(UnsignedS) ); #else address = (UnsignedS *) malloc( (degree+2) * sizeof(UnsignedS) ); #endif if ( address == NULL ) ERROR( "allocIntArrayDegree", "Out of memory"); return address; } /*-------------------------- freeIntArrayDegree ---------------------------*/ void freeIntArrayDegree( UnsignedS *address) { free(address); } /*-------------------------- allocBooleanArrayDegree ----------------------*/ char *allocBooleanArrayDegree( void) { char *address; address = (char *) malloc( (degree+2) * sizeof(char) ); if ( address == NULL ) ERROR( "allocBooleanArrayDegree", "Out of memory"); return address; } /*-------------------------- freeBooleanArrayDegree -----------------------*/ void freeBooleanArrayDegree( char *address) { free(address); } /*-------------------------- allocBooleanArrayBaseSize ----------------------*/ char *allocBooleanArrayBaseSize( void) { char *address; address = (char *) malloc( (options.maxBaseSize+2) * sizeof(char) ); if ( address == NULL ) ERROR( "allocBooleanArrayBaseSize", "Out of memory"); return address; } /*-------------------------- freeBooleanArrayBaseSize -----------------------*/ void freeBooleanArrayBaseSize( char *address) { free(address); } /*-------------------------- allocPtrArrayDegree --------------------------*/ void *allocPtrArrayDegree( void) { void *address; #ifdef HIGH_MEM_OPTION address = highMemMalloc( (degree+2) * sizeof (void *) ); #else address = malloc( (degree+2) * sizeof (void *) ); #endif if ( address == NULL ) ERROR( "allocPtrArrayDegree", "Out of memory"); return address; } /*-------------------------- freePtrArrayDegree ---------------------------*/ void freePtrArrayDegree( void *address) { free(address); } /*-------------------------- allocPtrArrayWordSize ------------------------*/ void *allocPtrArrayWordSize( void) { void *address; address = malloc( (options.maxWordLength+2) * sizeof (void *) ); if ( address == NULL ) ERROR( "allocPtrArrayWordSize", "Out of memory"); return address; } /*-------------------------- freePtrArrayWordSize -------------------------*/ void freePtrArrayWordSize( void *address) { free(address); } /*-------------------------- allocPtrArrayBaseSize ------------------------*/ void *allocPtrArrayBaseSize( void) { void *address; address = malloc( (options.maxBaseSize+2) * sizeof (void *) ); if ( address == NULL ) ERROR( "allocPtrArrayBaseSize", "Out of memory"); return address; } /*-------------------------- freePtrArrayBaseSize -------------------------*/ void freePtrArrayBaseSize( void *address) { free(address); } /*-------------------------- allocIntArrayBaseSize ------------------------*/ UnsignedS *allocIntArrayBaseSize( void) { UnsignedS *address; address = (UnsignedS *) malloc( (options.maxBaseSize+2) * sizeof(UnsignedS) ); if ( address == NULL ) ERROR( "allocIntArrayBaseSize", "Out of memory"); return address; } /*-------------------------- freeIntArrayBaseSize -------------------------*/ void freeIntArrayBaseSize( UnsignedS *address) { free(address); } /*-------------------------- allocLongArrayBaseSize ------------------------*/ unsigned long *allocLongArrayBaseSize( void) { unsigned long *address; address = (unsigned long *) malloc( (options.maxBaseSize+2) * sizeof(unsigned long) ); if ( address == NULL ) ERROR( "allocLongArrayBaseSize", "Out of memory"); return address; } /*-------------------------- freeLongArrayBaseSize -------------------------*/ void freeLongArrayBaseSize( unsigned long *address) { free(address); } /*-------------------------- allocPermutation -----------------------------*/ Permutation *allocPermutation( void) { Permutation *address; Unsigned essentialArraySize; address = (Permutation *) malloc( sizeof(Permutation) ); if ( address == NULL ) ERROR( "allocPermutation", "Out of memory"); address->name[0] = '\0'; address->image = NULL; address->invImage = NULL; address->invPermutation = NULL; address->word = NULL; address->occurHeader = NULL; essentialArraySize = (options.maxBaseSize+1) / 32 + 1; address->essential = (unsigned long *) malloc( essentialArraySize * sizeof(unsigned long) ); if ( address->essential == NULL ) ERROR( "allocPermutation", "Out of memory"); return address; } /*-------------------------- freePermutation ------------------------------*/ void freePermutation( Permutation *address) { free(address->essential); free(address); } /*-------------------------- allocPermGroup -------------------------------*/ PermGroup *allocPermGroup( void) { PermGroup *address; address = (PermGroup *) malloc( sizeof(PermGroup) ); if ( address == NULL ) ERROR( "allocPermGroup", "Out of memory"); address->order = NULL; address->base = NULL; address->basicOrbLen = NULL; address->basicOrbit = NULL; address->completeOrbit = NULL; address->orbNumberOfPt = NULL; address->startOfOrbitNo = NULL; address->schreierVec = NULL; address->generator = NULL; address->omega = NULL; address->invOmega = NULL; address->relator = NULL; return address; } /*-------------------------- freePermGroup --------------------------------*/ void freePermGroup( PermGroup *address) { Permutation *current; if (address->order) free(address->order); while ( address->generator ) { current = address->generator; address->generator = current->next; freePermutation(current); } freeIntArrayBaseSize(address->base); freeIntArrayBaseSize(address->basicOrbLen); if (address->basicOrbit) freePtrArrayBaseSize(address->basicOrbit); if (address->schreierVec) freePtrArrayBaseSize(address->schreierVec); free(address); } /*-------------------------- allocPartition -------------------------------*/ Partition *allocPartition( void) { Partition *address; address = (Partition *) malloc( sizeof(Partition) ); if ( address == NULL ) ERROR( "allocPartition", "Out of memory"); return address; } /*-------------------------- freePartition ---------------------------*/ void freePartition( Partition *address) { free(address); } /*-------------------------- allocPartitionStack --------------------------*/ PartitionStack *allocPartitionStack( void) { PartitionStack *address; address = (PartitionStack *) malloc( sizeof(PartitionStack) ); if ( address == NULL ) ERROR( "allocPartitionStack", "Out of memory"); return address; } /*-------------------------- freePartitionStack ---------------------------*/ void freePartitionStack( PartitionStack *address) { free(address); } /*-------------------------- allocRBase -----------------------------------*/ RBase *allocRBase( void) { RBase *address; address = (RBase *) malloc( sizeof(RBase) ); if ( address == NULL ) ERROR( "allocRBase", "Out of memory"); return address; } /*-------------------------- freeRBase ------------------------------------*/ void freeRBase( RBase *address) { free(address); } /*-------------------------- allocRPriorityQueue --------------------------*/ RPriorityQueue *allocRPriorityQueue( void) { RPriorityQueue *address; address = (RPriorityQueue *) malloc( sizeof(RPriorityQueue) ); if ( address == NULL ) ERROR( "allocRPriorityQueue", "Out of memory"); return address; } /*-------------------------- freeRPriorityQueue ---------------------------*/ void freeRPriorityQueue( RPriorityQueue *address) { free(address); } /*-------------------------- allocPointSet --------------------------------*/ PointSet *allocPointSet( void) { PointSet *address; address = (PointSet *) malloc( sizeof(PointSet) ); if ( address == NULL ) ERROR( "allocPointSet", "Out of memory"); return address; } /*-------------------------- freePointSet ---------------------------------*/ void freePointSet( PointSet *address) { free(address); } /*-------------------------- allocFactoredInt -----------------------------*/ FactoredInt *allocFactoredInt( void) { FactoredInt *address; address = (FactoredInt *) malloc( sizeof(FactoredInt) ); if ( address == NULL ) ERROR( "allocFactoredInt", "Out of memory"); return address; } /*-------------------------- freeFactoredInt ------------------------------*/ void freeFactoredInt( FactoredInt *address) { free(address); } /*-------------------------- allocWord ------------------------------------*/ Word *allocWord( void) { Word *address; address = (Word *) malloc( sizeof(Word) ); if ( address == NULL ) ERROR( "allocWord", "Out of memory"); return address; } /*-------------------------- freeWord -------------------------------------*/ void freeWord( Word *address) { free(address); } /*-------------------------- allocRefinementArrayDegree -------------------*/ Refinement *allocRefinementArrayDegree( void) { Refinement *address; address = (Refinement *) malloc( (degree+2) * sizeof(Refinement) ); if ( address == NULL ) ERROR( "allocRefinementArrayDegree", "Out of memory"); return address; } /*-------------------------- freeRefinementArrayDegree --------------------*/ void freeRefinementArrayDegree( Refinement *address) { free(address); } /*-------------------------- allocRelator ---------------------------------*/ Relator *allocRelator( void) { Relator *address; address = (Relator *) malloc( sizeof(Relator) ); if ( address == NULL ) ERROR( "allocRelator", "Out of memory"); address->length = 0; address->rel = NULL; address->fRel = NULL; address->bRel = NULL; return address; } /*-------------------------- freeRelator ----------------------------------*/ void freeRelator( Relator *address) { free(address); } /*-------------------------- allocOccurenceOfGen --------------------------*/ OccurenceOfGen *allocOccurenceOfGen( void) { OccurenceOfGen *address; address = (OccurenceOfGen *) malloc( sizeof(OccurenceOfGen) ); if ( address == NULL ) ERROR( "allocOccurenceOfGen", "Out of memory"); return address; } /*-------------------------- freeOccurenceOfGen ---------------------------*/ void freeOccurenceOfGen( OccurenceOfGen *address) { free(address); } /*-------------------------- allocField -------------------------------*/ Field *allocField( void) { Field *address; address = (Field *) malloc( sizeof(Field) ); if ( address == NULL ) ERROR( "allocField", "Out of memory"); address->sum = NULL; address->dif = NULL; address->prod = NULL; address->inv = NULL; return address; } /*-------------------------- freeField ---------------------------*/ void freeField( Field *address) { free(address); } guava-3.6/src/leon/src/readper.h0000644017361200001450000000102111026723452016444 0ustar tabbottcrontab#ifndef READPER #define READPER extern Permutation *readPermutation( char *libFileName, char *libName, const Unsigned requiredDegree, const BOOLEAN inverseFlag) /* If true, adjoin inverse. */ ; extern void writePermutation( char *libFileName, char *libName, Permutation *perm, char *format, char *comment) ; extern void writePermutationRestricted( char *libFileName, char *libName, Permutation *perm, char *format, char *comment, Unsigned restrictedDegree) ; #endif guava-3.6/src/leon/src/bitmanp.h0000644017361200001450000000005011026723452016455 0ustar tabbottcrontab#ifndef BITMANP #define BITMANP #endif guava-3.6/src/leon/src/commut.h0000644017361200001450000000012211026723452016327 0ustar tabbottcrontab#ifndef COMMUT #define COMMUT extern int main( int argc, char *argv[]) ; #endif guava-3.6/src/leon/src/code.h0000644017361200001450000000040411026723452015740 0ustar tabbottcrontab#ifndef CODE #define CODE extern void reduceBasis( Code *const C) ; extern BOOLEAN codeContainsVector( Code *const C, char *const v) ; extern BOOLEAN isCodeIsomorphism( Code *const C1, Code *const C2, const Permutation *const s) ; #endif guava-3.6/src/leon/src/new.h0000644017361200001450000000307711026723452015630 0ustar tabbottcrontab#ifndef NEW #define NEW extern void deletePartition( Partition *partn) ; extern PartitionStack *newPartitionStack( const Unsigned degree) /* The degree for the partition stack. */ ; extern void deletePartitionStack( PartitionStack *partnStack) ; extern CellPartitionStack *newCellPartitionStack( Partition *basePartn) /* The base partition. */ ; extern Permutation *newIdentityPerm( Unsigned degree) /* The degree for the new permutation. */ ; extern Permutation *newUndefinedPerm( const Unsigned degree) /* The degree for the new permutation. */ ; extern void deletePermutation( Permutation *oldPerm) /* The permutation to be deleted. */ ; extern PermGroup *newTrivialPermGroup( Unsigned degree) /* The degree for the new group. */ ; extern void deletePermGroup( PermGroup *G) /* The permutation group to delete. */ ; extern RBase *newRBase( const Unsigned degree) ; extern void deleteRBase( RBase *oldBase) ; extern RPriorityQueue *newRPriorityQueue( const Unsigned degree, const Unsigned maxSize) ; extern void deleteRPriorityQueue( RPriorityQueue *oldRPriorityQueue) ; extern Word *newTrivialWord( void) ; extern Matrix_01 *newZeroMatrix( const Unsigned setSize, const Unsigned numberOfRows, const Unsigned numberOfCols) ; extern void deleteMatrix( Matrix_01 *matrix, const Unsigned numberOfRows) ; extern Relator *newRelatorFromWord( Word *const w, const Unsigned fbRelFlag, const Unsigned doubleFlag) ; #endif guava-3.6/src/leon/src/rprique.h0000644017361200001450000000117011026723452016516 0ustar tabbottcrontab#ifndef RPRIQUE #define RPRIQUE extern void initFromPartnStack( RPriorityQueue *rpq, /* R-priority queue to initialize. */ PartitionStack *PiStack, /* The partition stack. */ Unsigned cellNumber, /* The R-priority queue is initialized to cell cellNumber of top partition on bfPiStack */ const RBase *const AAA) /* Only omega and invOmega are needed. */ ; extern Unsigned removeMin( RPriorityQueue *rpq) /* R-priority queue for remove operation. */ ; extern void makeEmpty( RPriorityQueue *rpq) /* The priority queue to make empty. */ ; #endif guava-3.6/src/leon/src/Makefile0000755017361200001450000005044011026723452016325 0ustar tabbottcrontab# Make file for partition backtrack programs, Sun/3 or Sun/4 Unix. # COMPILE = gcc DEFINES = -DINT_SIZE=32 COMPOPT = -c -O2 INCLUDES = LINKOPT = -v LINKNAME = -o OBJ = o #CPUTIME = cputime.o BOUNDS = # # Special CPU time function for Unix, Sun/3 or Sun/4 #cputime.o : cputime.c # $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) cputime.c # # # all: setstab cent inter desauto generate commut cjrndper orblist fndelt compgrp orbdes randobj wtdist # # Invoke linker -- setstab setstab: setstab.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) csetstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) cuprstab.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(COMPILE) $(LINKNAME) setstab $(LINKOPT) setstab.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) csetstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) cuprstab.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(BOUNDS) # # Invoke linker -- cent cent: cent.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) ccent.$(OBJ) chbase.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(COMPILE) $(LINKNAME) cent $(LINKOPT) cent.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) ccent.$(OBJ) chbase.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(BOUNDS) # # Invoke linker -- inter inter: inter.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) cinter.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(COMPILE) $(LINKNAME) inter $(LINKOPT) inter.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) cinter.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(BOUNDS) # # Invoke linker -- desauto desauto: desauto.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) cdesauto.$(OBJ) chbase.$(OBJ) cmatauto.$(OBJ) code.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) inform.$(OBJ) matrix.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(COMPILE) $(LINKNAME) desauto $(LINKOPT) desauto.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) cdesauto.$(OBJ) chbase.$(OBJ) cmatauto.$(OBJ) code.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) inform.$(OBJ) matrix.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(BOUNDS) # # Invoke linker -- generate generate: generate.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) relator.$(OBJ) stcs.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(COMPILE) $(LINKNAME) generate $(LINKOPT) generate.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) relator.$(OBJ) stcs.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(BOUNDS) # # Invoke linker -- commut commut: commut.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) ccommut.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(COMPILE) $(LINKNAME) commut $(LINKOPT) commut.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) ccommut.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS) # # Invoke linker -- cjrndper cjrndper: cjrndper.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) code.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) matrix.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(COMPILE) $(LINKNAME) cjrndper $(LINKOPT) cjrndper.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) code.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) matrix.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS) # # Invoke linker -- orblist orblist: orblist.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(COMPILE) $(LINKNAME) orblist $(LINKOPT) orblist.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS) # # Invoke linker -- fndelt fndelt: fndelt.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(COMPILE) $(LINKNAME) fndelt $(LINKOPT) fndelt.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS) # # Invoke linker -- compgrp compgrp: compgrp.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(COMPILE) $(LINKNAME) compgrp $(LINKOPT) compgrp.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS) # # Invoke linker -- orbdes orbdes: orbdes.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) code.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(COMPILE) $(LINKNAME) orbdes $(LINKOPT) orbdes.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) code.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS) # # Invoke linker -- randobj randobj: randobj.$(OBJ) bitmanp.$(OBJ) copy.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) readpar.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(COMPILE) $(LINKNAME) randobj $(LINKOPT) randobj.$(OBJ) bitmanp.$(OBJ) copy.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) readpar.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(BOUNDS) # # Invoke linker -- wtdist wtdist: wtdist.$(OBJ) bitmanp.$(OBJ) code.$(OBJ) copy.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) new.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) readdes.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(COMPILE) $(LINKNAME) wtdist $(LINKOPT) wtdist.$(OBJ) bitmanp.$(OBJ) code.$(OBJ) copy.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) new.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) readdes.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(BOUNDS) # # # Invoke compiler addsgen.$(OBJ) : group.h extname.h essentia.h permgrp.h permut.h cstborb.h addsgen.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) addsgen.c bitmanp.$(OBJ) : group.h extname.h bitmanp.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) bitmanp.c ccent.$(OBJ) : group.h extname.h compcrep.h compsg.h cparstab.h errmesg.h inform.h new.h orbrefn.h permut.h randgrp.h storage.h ccent.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) ccent.c ccommut.$(OBJ) : group.h extname.h addsgen.h copy.h chbase.h new.h permgrp.h permut.h storage.h ccommut.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) ccommut.c cdesauto.$(OBJ) : group.h extname.h code.h compcrep.h compsg.h errmesg.h matrix.h storage.h cdesauto.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) cdesauto.c cent.$(OBJ) : group.h extname.h groupio.h ccent.h errmesg.h permgrp.h readgrp.h readper.h storage.h token.h util.h cent.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) cent.c chbase.$(OBJ) : group.h extname.h addsgen.h cstborb.h errmesg.h essentia.h factor.h new.h permgrp.h permut.h randgrp.h storage.h repinimg.h settoinv.h chbase.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) chbase.c cinter.$(OBJ) : group.h extname.h compcrep.h compsg.h errmesg.h orbrefn.h cinter.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) cinter.c cjrndper.$(OBJ) : group.h extname.h groupio.h code.h copy.h errmesg.h matrix.h new.h permut.h readdes.h randgrp.h readgrp.h readpar.h readper.h readpts.h storage.h token.h util.h cjrndper.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) cjrndper.c cmatauto.$(OBJ) : group.h extname.h code.h compcrep.h compsg.h errmesg.h matrix.h storage.h cmatauto.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) cmatauto.c code.$(OBJ) : group.h extname.h errmesg.h storage.h code.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) code.c commut.$(OBJ) : group.h extname.h groupio.h ccommut.h errmesg.h factor.h permgrp.h readgrp.h readper.h storage.h token.h util.h commut.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) commut.c compcrep.$(OBJ) : group.h extname.h cputime.h chbase.h cstrbas.h errmesg.h inform.h new.h optsvec.h orbit.h orbrefn.h partn.h permgrp.h permut.h rprique.h storage.h compcrep.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) compcrep.c compgrp.$(OBJ) : group.h extname.h groupio.h errmesg.h permgrp.h permut.h readgrp.h util.h compgrp.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) compgrp.c compsg.$(OBJ) : group.h extname.h cputime.h addsgen.h chbase.h copy.h cstrbas.h errmesg.h inform.h new.h optsvec.h orbit.h orbrefn.h partn.h permgrp.h permut.h ptstbref.h rprique.h storage.h compsg.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) compsg.c copy.$(OBJ) : group.h extname.h essentia.h storage.h copy.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) copy.c cparstab.$(OBJ) : group.h extname.h compcrep.h compsg.h errmesg.h orbrefn.h cparstab.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) cparstab.c csetstab.$(OBJ) : group.h extname.h compcrep.h compsg.h errmesg.h orbrefn.h csetstab.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) csetstab.c cstborb.$(OBJ) : group.h extname.h errmesg.h essentia.h factor.h storage.h cstborb.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) cstborb.c cstrbas.$(OBJ) : group.h extname.h chbase.h cstborb.h inform.h new.h orbrefn.h permgrp.h ptstbref.h optsvec.h storage.h cstrbas.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) cstrbas.c cuprstab.$(OBJ) : group.h extname.h compcrep.h compsg.h errmesg.h orbrefn.h cuprstab.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) cuprstab.c desauto.$(OBJ) : group.h extname.h groupio.h cdesauto.h errmesg.h permgrp.h readdes.h readgrp.h readper.h storage.h token.h util.h desauto.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) desauto.c errmesg.$(OBJ) : group.h extname.h errmesg.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) errmesg.c essentia.$(OBJ) : group.h extname.h essentia.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) essentia.c factor.$(OBJ) : group.h extname.h errmesg.h factor.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) factor.c field.$(OBJ) : group.h extname.h errmesg.h new.h storage.h field.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) field.c fndelt.$(OBJ) : group.h extname.h groupio.h errmesg.h new.h oldcopy.h permut.h readgrp.h readper.h randgrp.h util.h fndelt.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) fndelt.c generate.$(OBJ) : group.h extname.h groupio.h enum.h storage.h cputime.h errmesg.h new.h readgrp.h randschr.h stcs.h util.h generate.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) generate.c inform.$(OBJ) : group.h extname.h groupio.h cputime.h readgrp.h inform.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) inform.c inter.$(OBJ) : group.h extname.h groupio.h cinter.h errmesg.h permgrp.h readgrp.h readper.h token.h util.h inter.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) inter.c matrix.$(OBJ) : group.h extname.h errmesg.h storage.h matrix.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) matrix.c new.$(OBJ) : group.h extname.h errmesg.h partn.h storage.h new.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) new.c oldcopy.$(OBJ) : group.h extname.h storage.h oldcopy.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) oldcopy.c optsvec.$(OBJ) : group.h extname.h cstborb.h essentia.h new.h permut.h permgrp.h storage.h optsvec.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) optsvec.c orbdes.$(OBJ) : group.h extname.h groupio.h chbase.h errmesg.h new.h oldcopy.h permut.h readdes.h readgrp.h storage.h util.h orbdes.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) orbdes.c orbit.$(OBJ) : group.h extname.h cstborb.h orbit.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) orbit.c orblist.$(OBJ) : group.h extname.h groupio.h addsgen.h chbase.h cstborb.h errmesg.h factor.h new.h randgrp.h readgrp.h readpar.h readpts.h storage.h util.h orblist.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) orblist.c orbrefn.$(OBJ) : group.h extname.h errmesg.h partn.h storage.h orbrefn.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) orbrefn.c partn.$(OBJ) : group.h extname.h storage.h permgrp.h partn.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) partn.c permgrp.$(OBJ) : group.h extname.h copy.h errmesg.h essentia.h new.h permut.h storage.h permgrp.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) permgrp.c permut.$(OBJ) : group.h extname.h factor.h errmesg.h new.h storage.h repimg.h repinimg.h settoinv.h enum.h permut.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) permut.c primes.$(OBJ) : group.h extname.h primes.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) primes.c ptstbref.$(OBJ) : group.h extname.h partn.h cstrbas.h errmesg.h ptstbref.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) ptstbref.c randgrp.$(OBJ) : group.h extname.h new.h permut.h randgrp.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) randgrp.c randobj.$(OBJ) : group.h extname.h groupio.h errmesg.h randgrp.h readpar.h readpts.h storage.h token.h util.h randobj.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) randobj.c randschr.$(OBJ) : group.h extname.h groupio.h addsgen.h cstborb.h errmesg.h essentia.h factor.h new.h oldcopy.h permgrp.h permut.h randgrp.h storage.h token.h randschr.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) randschr.c readdes.$(OBJ) : group.h extname.h groupio.h code.h errmesg.h new.h token.h readdes.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) readdes.c readgrp.$(OBJ) : group.h extname.h groupio.h chbase.h cstborb.h errmesg.h essentia.h factor.h permut.h permgrp.h randschr.h storage.h token.h readgrp.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) readgrp.c readpar.$(OBJ) : group.h extname.h groupio.h storage.h token.h errmesg.h readpar.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) readpar.c readper.$(OBJ) : group.h extname.h groupio.h errmesg.h essentia.h readgrp.h storage.h token.h readper.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) readper.c readpts.$(OBJ) : group.h extname.h groupio.h storage.h token.h errmesg.h readpts.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) readpts.c relator.$(OBJ) : group.h extname.h enum.h errmesg.h new.h permut.h stcs.h storage.h relator.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) relator.c rprique.$(OBJ) : group.h extname.h storage.h rprique.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) rprique.c setstab.$(OBJ) : group.h extname.h groupio.h cparstab.h csetstab.h cuprstab.h errmesg.h permgrp.h readgrp.h readpar.h readper.h readpts.h token.h util.h setstab.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) setstab.c stcs.$(OBJ) : group.h extname.h groupio.h enum.h repimg.h addsgen.h cstborb.h errmesg.h essentia.h factor.h new.h oldcopy.h permgrp.h permut.h randschr.h relator.h storage.h token.h stcs.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) stcs.c storage.$(OBJ) : group.h extname.h errmesg.h storage.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) storage.c token.$(OBJ) : group.h extname.h groupio.h errmesg.h token.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) token.c util.$(OBJ) : group.h extname.h util.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) util.c wtdist.$(OBJ) : group.h extname.h groupio.h errmesg.h field.h readdes.h storage.h token.h util.h wt.h swt.h wtdist.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(DEFINES) wtdist.c guava-3.6/src/leon/src/randpts.h0000644017361200001450000000013211026723452016477 0ustar tabbottcrontab#ifndef RANDPTS #define RANDPTS extern int main( int argc, char *argv[]) ; #endif guava-3.6/src/leon/src/compsg.h0000644017361200001450000000240211026723452016316 0ustar tabbottcrontab#ifndef COMPSG #define COMPSG extern PermGroup *computeSubgroup( PermGroup *const G, /* The permutation group, as above. A base/sgs must be known (unless name is "symmetric"). */ Property *const pP, /* The subgroup-type property, as above. A value of NULL may be used to suppress checking pP.*/ RefinementFamily /* (Ptr to) null-terminated list of refinement */ *const RRR[], /* family pointers (List starts rrR[1].) */ ReducChkFn *const /* (Ptr to) null-terminated list of pointers */ isReducible[], /* to functions checking rRR-reducibility. */ SpecialRefinementDescriptor *const specialRefinement[], /* (Ptr to) list of permutation ptrs, some */ /* possibly null. For nonnull pointers, */ /* computeSubgroup will keep track of perm t. */ ExtraDomain *extra[], /* extra[1], extra[2], ... are extra domains. pointer terminates list. */ PermGroup *const L) /* A known (possibly trivial) subgroup of G_pP. (Null pointer signifies a trivial group.) */ ; #endif guava-3.6/src/leon/src/desauto.c0000644017361200001450000011142411026723452016472 0ustar tabbottcrontab/* File desauto.c. */ /* Copyright (C) 1992 by Jeffrey S. Leon. This software may be used freely for educational and research purposes. Any other use requires permission from the author. */ /* Main program for design/matrix automorphism group and isomorphism programs. The formats for the commands are: desauto desauto -iso where the meaning of the parameters is as follows: : The design whose automorphism group is to be computed. : Set to the automorphism group of . Depending on options, will be set to a permutation group on the set of a file type of GRP is appended. : The first of the two designs to be checked for isomorphism. : The second of the two designs to be checked for isomorphism. : Set to a permutation mapping to , if one exists. Not created otherwise. Depending on the options, this will be set to a permutation on points only or on points The name of the file in which the set stabilizer G_Lambda and blocks. The options are as follows: -code: Finds the automorphism group of code c, assuming that it is included in the group of the design. -codes:, Checks isomorphism of codes and , assuming iso is in effect, and assuming any isomorphism must map to . -a If the output file exists, it will be appended to rather than overwritten. (A Cayley library is always appended to rather than overwritten.) -b: Base change in the subgroup being computed will be performed at levels fm, fm+1,...,fm+-1 only, where fm is the level of the first base point (of the subgroup) moved by the current permutation. Values below 1 will be raised to 1; those above the base size will be reduced to the base size. -c Compress the group G after an R-base has been constructed. This saves a moderate amount of memory at the cost of relatively little CPU time, but the group (in memory) is effectively destroyed. -crl: The definition of the group G and point set Lambda should be read from Cayley library in library file . -cwl: The definition for the group G_Lambda should be written to Cayley library library file . -g: The maximum number of strong generators for the containing group G. If, after construction of a base and strong generating set for G, the number of strong generators is less than this number, additional strong generators will be added, chosen to reduce the length of the coset representatives (as words). A larger value may increase speed of computation slightly at the cost of extra space. If, after construction of the base and strong generating set, the number of strong generators exceeds this number, at present strong generators are not removed. -gn: (Set stabilizer only). The generators for the newly-created group created are given names 01, 02, ... . If omitted, the new generators are unnamed. -i The generators of are to be written in image format. -n: The name for the set stabilizer or coset rep being computed. (Default: the file name -- file type omitted) -pb Produces permutations on points and blocks. Otherwise the automorphism group or isomorphism are given on points only. -cv Applicable to codes only. Causes the automorphism group or isomorphism to be written as a permutation group on coordinates and invariant vectors, rather than coordinates only. -q As the computation proceeds, writing of information about the current state to standard output is suppressed. -s: A known subgroup of the set stabilizer being computed. (Default: no subgroup known) -r: During base change, if insertion of a new base point expands the size of the strong generating set above gens (not counting inverses), redundant strong generators are trimmed from the strong generating set. (Default 25). -t Upon conclusion, statistics regarding the number of nodes of the backtrack search tree traversed is written to the standard output. -v Verify that all files were compiled with the same compile- time parameters and stop. -w: For set or partition image computations in which the sets or partitions turn out to be equivalent, a permutation mapping one to the other is written to the standard output, as well as a disk file, provided the degree is at most . (The option is ignored if -q is in effect.) Default: 100 -x: The ideal size for basic cells is set to . -z Subject to the restrictions imposed by the -b option above, check Prop. 8.3 in "Permutation group algorithms based on partitions". -m Read design in incidence matrix format: rows = point, cols = blocks. -mt Read design in transpose incidence matrix format: rows = blocks, cols = points. The return code for the design group algorithm is as follows: 0: computation successful, 15: computation terminated due to error. The return code for the design isomorphism algorithm is as follows: 0: computation successful; designs isomorphic, 1: computation successful; designs not isomorphic, 15: computation terminated due to error. */ #include #include #include #include #include #define MAIN #include "group.h" #include "groupio.h" #include "cdesauto.h" #include "cmatauto.h" #include "errmesg.h" #include "field.h" #include "matrix.h" #include "permgrp.h" #include "readdes.h" #include "readgrp.h" #include "readper.h" #include "storage.h" #include "token.h" #include "util.h" GroupOptions options; UnsignedS (*chooseNextBasePoint)( const PermGroup *const G, const PartitionStack *const UpsilonStack) = NULL; static void verifyOptions(void); int main( int argc, char *argv[]) { char matrixFileName[MAX_FILE_NAME_LENGTH] = "", outputFileName[MAX_FILE_NAME_LENGTH] = "", *matrix_L_FileName = matrixFileName, matrix_R_FileName[MAX_FILE_NAME_LENGTH] = "", knownSubgroupSpecifier[MAX_FILE_NAME_LENGTH] = "", *knownSubgroup_L_Specifier = knownSubgroupSpecifier, knownSubgroup_R_Specifier[MAX_FILE_NAME_LENGTH] = "", knownSubgroupFileName[MAX_FILE_NAME_LENGTH] = "", *knownSubgroup_L_FileName = knownSubgroupFileName, knownSubgroup_R_FileName[MAX_FILE_NAME_LENGTH] = "", codeFileName[MAX_FILE_NAME_LENGTH] = "", *code_L_FileName = codeFileName, code_R_FileName[MAX_FILE_NAME_LENGTH] = ""; Unsigned i, j, optionCountPlus1, startOptions, degree; char matrixLibraryName[MAX_NAME_LENGTH+1] = "", outputLibraryName[MAX_NAME_LENGTH+1] = "", *matrix_L_LibraryName = matrixLibraryName, matrix_R_LibraryName[MAX_NAME_LENGTH+1] = "", knownSubgroupLibraryName[MAX_NAME_LENGTH+1] = "", *knownSubgroup_L_LibraryName = knownSubgroupLibraryName, knownSubgroup_R_LibraryName[MAX_NAME_LENGTH+1] = "", codeLibraryName[MAX_NAME_LENGTH+1] = "", *code_L_LibraryName = codeLibraryName, code_R_LibraryName[MAX_NAME_LENGTH+1] = "", prefix[MAX_FILE_NAME_LENGTH], suffix[MAX_NAME_LENGTH], outputObjectName[MAX_NAME_LENGTH+1] = ""; Matrix_01 *matrix, *matrix_L, *matrix_R, *originalMatrix, *originalMatrix_L, *originalMatrix_R; PermGroup *A, *L = NULL, *L_L = NULL, *L_R = NULL; Code *C = NULL, *C_L = NULL, *C_R = NULL; Permutation *y; BOOLEAN imageFlag = FALSE, imageFormatFlag = FALSE, codeFlag = FALSE, transposeFlag = FALSE, pbFlag = FALSE, monomialFlag = FALSE; char tempArg[8]; enum { DESIGN_AUTO, DESIGN_ISO, MATRIX_AUTO, MATRIX_ISO, CODE_AUTO, CODE_ISO} computationType = DESIGN_AUTO; char comment[100]; /* Check whether the first parameters are iso, code, or matrix. Set the computation type. */ j = 0; for ( i = 1 ; i <= 2 && i < argc ; ++i ) { strncpy( tempArg, argv[i], 8); tempArg[7] = '\0'; lowerCase( tempArg); if ( strcmp( tempArg, "-iso") == 0 ) j |= 4; else if ( strcmp( tempArg, "-matrix") == 0 ) j |= 1; else if ( strcmp( tempArg, "-code") == 0 ) j |= 2; else break; } switch( j ) { case 0: computationType = DESIGN_AUTO; break; case 1: computationType = MATRIX_AUTO; pbFlag = TRUE; break; case 2: computationType = CODE_AUTO; codeFlag = TRUE; break; case 4: computationType = DESIGN_ISO; imageFlag = TRUE; break; case 5: computationType = MATRIX_ISO; imageFlag = TRUE; pbFlag = TRUE; break; case 6: computationType = CODE_ISO; imageFlag = TRUE; codeFlag = TRUE; break; default: ERROR( "main (desauto)", "Invalid options"); break; } startOptions = i; /* Provide help if no arguments are specified. Note i and j must be as described above. */ if ( startOptions == argc ) { switch( computationType ) { case DESIGN_AUTO: printf( "\nUsage: desauto [options] design autoGroup\n"); break; case MATRIX_AUTO: printf( "\nUsage: matauto [options] matrix autoGroup\n"); break; case CODE_AUTO: printf( "\nUsage: codeauto [options] code invarVectorss autoGroup\n"); break; case DESIGN_ISO: printf( "\nUsage: desiso [options] design1 design2 isoPerm\n"); break; case MATRIX_ISO: printf( "\nUsage: matiso [options] matrix1 matrix2 isoPerm\n"); break; case CODE_ISO: printf( "\nUsage: codeiso [options] code1 code2 invarVectors1 invarVectors2 \n"); break; } return 0; } /* Check for limits option. If present in position startOptions give limits and return. */ if ( startOptions < argc && (strcmp( argv[startOptions], "-l") == 0 || strcmp( argv[startOptions], "-L") == 0) ) { showLimits(); return 0; } /* Check for verify option. If present in position startOptions, perform verify. (Note verifyOptions terminates program). */ if ( startOptions < argc && (strcmp( argv[startOptions], "-v") == 0 || strcmp( argv[startOptions], "-V") == 0) ) verifyOptions(); /* Check for exactly 2 (design or matrix group), 3 (code group or design or matrix iso), or 4 (code iso ) parameters following options. */ for ( optionCountPlus1 = startOptions ; optionCountPlus1 < argc && argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 ) ; if ( argc - optionCountPlus1 != 2 + imageFlag + codeFlag + (imageFlag && codeFlag) ) { ERROR1i( "main (design group)", "Exactly ", 2+imageFlag+codeFlag + (imageFlag && codeFlag), " non-option parameters are required."); exit(ERROR_RETURN_CODE); } /* Process options. */ prefix[0] = '\0'; suffix[0] = '\0'; options.maxBaseSize = DEFAULT_MAX_BASE_SIZE; options.statistics = FALSE; options.inform = TRUE; options.compress = TRUE; options.maxBaseChangeLevel = UNKNOWN; options.maxStrongGens = 70; options.idealBasicCellSize = 4; options.trimSGenSetToSize = 35; options.strongMinDCosetCheck = FALSE; options.writeConjPerm = MAX_COSET_REP_PRINT; options.restrictedDegree = 0; options.alphaHat1 = 0; parseLibraryName( argv[optionCountPlus1+1], "", "", outputFileName, outputLibraryName); strncpy( options.genNamePrefix, outputLibraryName, 4); options.genNamePrefix[4] = '\0'; strcpy( options.outputFileMode, "w"); /* Translate options to lower case. */ for ( i = startOptions ; i < optionCountPlus1 ; ++i ) { for ( j = 1 ; argv[i][j] != ':' && argv[i][j] != '\0' ; ++j ) #ifdef EBCDIC argv[i][j] = ( argv[i][j] >= 'A' && argv[i][j] <= 'I' || argv[i][j] >= 'J' && argv[i][j] <= 'R' || argv[i][j] >= 'S' && argv[i][j] <= 'Z' ) ? (argv[i][j] + 'a' - 'A') : argv[i][j]; #else argv[i][j] = (argv[i][j] >= 'A' && argv[i][j] <= 'Z') ? (argv[i][j] + 'a' - 'A') : argv[i][j]; #endif errno = 0; if ( strncmp( argv[i], "-a1:", 4) == 0 && (options.alphaHat1 = (Unsigned) strtol(argv[i]+4,NULL,0) , errno != ERANGE) ) ; else if ( strcmp( argv[i], "-a") == 0 ) strcpy( options.outputFileMode, "a"); else if ( strncmp( argv[i], "-b:", 3) == 0 && (options.maxBaseChangeLevel = (Unsigned) strtol(argv[i]+3,NULL,0) , errno != ERANGE) ) ; else if ( strncmp( argv[i], "-p:", 3) == 0 ) { strcpy( prefix, argv[i]+3); } else if ( strncmp( argv[i], "-t:", 3) == 0 ) { strcpy( suffix, argv[i]+3); } else if ( strncmp( argv[i], "-g:", 3) == 0 && (options.maxStrongGens = (Unsigned) strtol(argv[i]+3,NULL,0) , errno != ERANGE) ) ; else if ( strncmp( argv[i], "-gn:", 4) == 0 ) if ( strlen( argv[i]+4) <= 8 ) strcpy( options.genNamePrefix, argv[i]+4); else ERROR( "main (design group)", "Invalid value for -gn option") else if ( strcmp( argv[i], "-i") == 0 ) imageFormatFlag = TRUE; else if ( strncmp( argv[i], "-mb:", 4) == 0 ) { errno = 0; options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (cent)", "Invalid syntax for -mb option") } else if ( strncmp( argv[i], "-mw:", 4) == 0 ) { errno = 0; options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (cent)", "Invalid syntax for -mw option") } else if ( strcmp( argv[i], "-mm") == 0 ) monomialFlag = TRUE; else if ( strcmp( argv[i], "-pb") == 0 || strcmp( argv[i], "-cv") == 0 ) pbFlag = TRUE; else if ( strcmp( argv[i], "-ro") == 0 ) pbFlag = FALSE; else if ( strcmp( argv[i], "-tr") == 0 ) transposeFlag = TRUE; else if ( strncmp( argv[i], "-n:", 3) == 0 ) if ( isValidName( argv[i]+3) ) strcpy( outputObjectName, argv[i]+3); else ERROR1s( "main (design group)", "Invalid name ", outputObjectName, " for stabilizer group or coset rep.") else if ( strcmp( argv[i], "-q") == 0 ) options.inform = FALSE; else if ( strcmp( argv[i], "-overwrite") == 0 ) strcpy( options.outputFileMode, "w"); else if ( strncmp( argv[i], "-r:", 3) == 0 && (options.trimSGenSetToSize = (Unsigned) strtol(argv[i]+3,NULL,0) , errno != ERANGE) ) ; else if ( !imageFlag && strncmp( argv[i], "-k:", 3) == 0 ) strcpy( knownSubgroupSpecifier, argv[i]+3); else if ( imageFlag && strncmp( argv[i], "-kl:", 4) == 0 ) strcpy( knownSubgroup_L_Specifier, argv[i]+4); else if ( imageFlag && strncmp( argv[i], "-kr:", 4) == 0 ) strcpy( knownSubgroup_R_Specifier, argv[i]+4); else if ( strcmp( argv[i], "-s") == 0 ) options.statistics = TRUE; else if ( strncmp( argv[i], "-w:", 3) == 0 && (options.writeConjPerm = (Unsigned) strtol(argv[i]+3,NULL,0) , errno != ERANGE) ) ; else if ( strncmp( argv[i], "-x:", 3) == 0 && (options.idealBasicCellSize = (Unsigned) strtol(argv[i]+3,NULL,0) , errno != ERANGE) ) ; else if ( strcmp( argv[i], "-z") == 0 ) options.strongMinDCosetCheck = TRUE; else ERROR1s( "main (compute subgroup)", "Invalid option ", argv[i], ".") } /* Compute maximum degree and word length. */ options.maxWordLength = 200 + 5 * options.maxBaseSize; options.maxDegree = MAX_INT - 2 - options.maxBaseSize; /* Compute file and library names. */ switch( computationType) { case CODE_AUTO: parseLibraryName( argv[optionCountPlus1], prefix, suffix, codeFileName, codeLibraryName); /* Deliberate fall through to next case. */ case DESIGN_AUTO: case MATRIX_AUTO: parseLibraryName( argv[optionCountPlus1+codeFlag], prefix, suffix, matrixFileName, matrixLibraryName); parseLibraryName( argv[optionCountPlus1+1+codeFlag], "", "", outputFileName, outputLibraryName); if ( outputObjectName[0] == '\0' ) strncpy( outputObjectName, outputLibraryName, MAX_NAME_LENGTH+1); if ( knownSubgroupSpecifier[0] != '\0' ) parseLibraryName( knownSubgroupSpecifier, prefix, suffix, knownSubgroupFileName, knownSubgroupLibraryName); break; case CODE_ISO: parseLibraryName( argv[optionCountPlus1], prefix, suffix, code_L_FileName, code_L_LibraryName); parseLibraryName( argv[optionCountPlus1+1], prefix, suffix, code_R_FileName, code_R_LibraryName); /* Deliberate fall through to next case. */ case DESIGN_ISO: case MATRIX_ISO: parseLibraryName( argv[optionCountPlus1+2*codeFlag], prefix, suffix, matrix_L_FileName, matrix_L_LibraryName); parseLibraryName( argv[optionCountPlus1+1+2*codeFlag], prefix, suffix, matrix_R_FileName, matrix_R_LibraryName); parseLibraryName( argv[optionCountPlus1+2+2*codeFlag], "", "", outputFileName, outputLibraryName); if ( outputObjectName[0] == '\0' ) strncpy( outputObjectName, outputLibraryName, MAX_NAME_LENGTH+1); if ( knownSubgroup_L_Specifier[0] != '\0' ) parseLibraryName( knownSubgroup_L_Specifier, prefix, suffix, knownSubgroup_L_FileName, knownSubgroup_L_LibraryName); if ( knownSubgroup_R_Specifier[0] ) parseLibraryName( knownSubgroup_R_Specifier, prefix, suffix, knownSubgroup_R_FileName, knownSubgroup_R_LibraryName); break; } /* Read in the design(s), matrices, or codes, and compute the degree. */ switch ( computationType ) { case DESIGN_AUTO: matrix = readDesign( matrixFileName, matrixLibraryName, 0, 0); degree = matrix->numberOfRows + matrix->numberOfCols; if ( !pbFlag ) options.restrictedDegree = matrix->numberOfRows; break; case MATRIX_AUTO: if ( transposeFlag ) matrix = read01Matrix( matrixFileName, matrixLibraryName, TRUE, monomialFlag, 0, 0, 0); else matrix = read01Matrix( matrixFileName, matrixLibraryName, FALSE, monomialFlag, 0, 0, 0); if ( monomialFlag ) { matrix->field = buildField( matrix->setSize); originalMatrix = matrix; matrix = augmentedMatrix( originalMatrix); } degree = matrix->numberOfRows + matrix->numberOfCols; if ( !pbFlag ) options.restrictedDegree = matrix->numberOfRows; else if ( monomialFlag ) options.restrictedDegree = matrix->numberOfCols; break; case CODE_AUTO: C = readCode( codeFileName, codeLibraryName, TRUE, 0, 0, 0); monomialFlag = (C->fieldSize > 2); matrix = read01Matrix( matrixFileName, matrixLibraryName, TRUE, C->fieldSize > 2, C->fieldSize, C->length, 0); if ( monomialFlag ) { matrix->field = C->field; originalMatrix = matrix; matrix = augmentedMatrix( originalMatrix); } degree = matrix->numberOfRows + matrix->numberOfCols; if ( !pbFlag ) options.restrictedDegree = matrix->numberOfRows; else if ( monomialFlag ) options.restrictedDegree = matrix->numberOfCols; break; case DESIGN_ISO: matrix_L = readDesign( matrix_L_FileName, matrix_L_LibraryName, 0, 0); matrix_R = readDesign( matrix_R_FileName, matrix_R_LibraryName, 0, 0); if ( matrix_L->numberOfRows != matrix_R->numberOfRows ) ERROR( "main (design group)", "Designs have different numbers of points.") if ( matrix_L->numberOfCols != matrix_R->numberOfCols ) { if ( options.inform ) { printf( "\n\n%s and %s are not isomorphic. "); printf( "They have %u and %u blocks, respectively.\n\n", matrix_L->numberOfCols, matrix_R->numberOfCols); } return 1; } degree = matrix_L->numberOfRows + matrix_L->numberOfCols; if ( !pbFlag ) options.restrictedDegree = matrix_L->numberOfRows; break; case MATRIX_ISO: if ( transposeFlag ) { matrix_L = read01Matrix( matrix_L_FileName, matrix_L_LibraryName, TRUE, monomialFlag, 0, 0, 0); matrix_R = read01Matrix( matrix_R_FileName, matrix_R_LibraryName, TRUE, monomialFlag, matrix_L->setSize, matrix_L->numberOfRows, matrix_L->numberOfCols - monomialFlag * matrix_L->numberOfRows); } else { matrix_L = read01Matrix( matrix_L_FileName, matrix_L_LibraryName, FALSE, monomialFlag, 0, 0, 0); matrix_R = read01Matrix( matrix_R_FileName, matrix_R_LibraryName, FALSE, monomialFlag, matrix_L->setSize, matrix_L->numberOfRows, matrix_L->numberOfCols - monomialFlag * matrix_L->numberOfRows); } if ( monomialFlag ) { matrix_L->field = matrix_R->field = buildField( matrix_L->setSize); originalMatrix_L = matrix_L; originalMatrix_R = matrix_R; matrix_L = augmentedMatrix( originalMatrix_L); matrix_R = augmentedMatrix( originalMatrix_R); } degree = matrix_L->numberOfRows + matrix_L->numberOfCols; if ( !pbFlag ) options.restrictedDegree = matrix_L->numberOfRows; else if ( monomialFlag ) options.restrictedDegree = matrix_L->numberOfCols; break; case CODE_ISO: C_L = readCode( code_L_FileName, code_L_LibraryName, TRUE, 0, 0, 0); C_R = readCode( code_R_FileName, code_R_LibraryName, TRUE, C_L->fieldSize, 0, C_L->length); monomialFlag = (C_L->fieldSize > 2); matrix_L = read01Matrix( matrix_L_FileName, matrix_L_LibraryName, TRUE, C_L->fieldSize > 2, C_L->fieldSize, C_L->length, 0); matrix_R = read01Matrix( matrix_R_FileName, matrix_R_LibraryName, TRUE, C_L->fieldSize > 2, C_L->fieldSize, C_L->length, 0); if ( C_L->dimension != C_R->dimension ) { if ( options.inform ) { printf( "\n\n%s and %s are not isomorphic. "); printf( "They have dimension %u and %u, respectively.\n\n", C_L->dimension, C_R->dimension); } return 1; } if ( matrix_L->numberOfCols != matrix_R->numberOfCols ) { if ( options.inform ) { printf( "\n\n%s and %s are not isomorphic. "); printf( "The invariant vector sets have different sizes.\n"); } return 1; } if ( monomialFlag ) { matrix_L->field = matrix_R->field = C_L->field; originalMatrix_L = matrix_L; originalMatrix_R = matrix_R; matrix_L = augmentedMatrix( originalMatrix_L); matrix_R = augmentedMatrix( originalMatrix_R); } degree = matrix_L->numberOfRows + matrix_L->numberOfCols; if ( !pbFlag ) options.restrictedDegree = matrix_L->numberOfRows; else if ( monomialFlag ) options.restrictedDegree = matrix_L->numberOfCols; break; } /* Initialize storage manager. */ initializeStorageManager( degree); /* Read in the known subgroups, if present, and the codes, if present. */ switch ( computationType ) { case DESIGN_AUTO: case MATRIX_AUTO: case CODE_AUTO: if ( knownSubgroupSpecifier[0] ) L = readPermGroup( knownSubgroupFileName, knownSubgroupLibraryName, degree, "Generate"); break; case DESIGN_ISO: case MATRIX_ISO: case CODE_ISO: if ( knownSubgroup_L_Specifier[0] ) L_L = readPermGroup( knownSubgroup_L_FileName, knownSubgroup_L_LibraryName, degree, "Generate"); if ( knownSubgroup_R_Specifier[0] ) L_R = readPermGroup( knownSubgroup_R_FileName, knownSubgroup_R_LibraryName, degree, "Generate"); break; } /* Compute maximum base change level if not specified as option ??????. */ if ( options.maxBaseChangeLevel == UNKNOWN ) options.maxBaseChangeLevel = 0; /* Compute the automorphism group or check isomorphism, and write out the group or isomorphism permutation. */ switch ( computationType ) { case DESIGN_AUTO: case MATRIX_AUTO: case CODE_AUTO: if ( options.inform ) { switch ( computationType ) { case DESIGN_AUTO: printf( "\n\n Design Automorphism Group Program: " "Design %s\n\n", matrix->name); sprintf( comment, "The automorphism group of design %s.", matrix->name); options.groupOrderMessage = "Design automorphism group"; break; case MATRIX_AUTO: if ( monomialFlag ) { printf( "\n\n Matrix Monomial Group Program: " "Matrix %s\n\n", matrix->name); sprintf( comment, "The monomial group of matrix %s.", matrix->name); options.groupOrderMessage = "Matrix monomial automorphism group"; } else { printf( "\n\n Matrix Automorphism Group Program: " "Matrix %s\n\n", matrix->name); sprintf( comment, "The automorphism group of matrix %s.", matrix->name); options.groupOrderMessage = "Matrix automorphism group"; } break; case CODE_AUTO: printf( "\n\n Code Automorphism Group Program: " "Code %s, Invariant set %s\n\n", C->name, matrix->name); sprintf( comment, "The automorphism group of code %s.", C->name); options.groupOrderMessage = "Code automorphism group"; break; } if ( L ) printf( "\nKnown Subgroup: %s\n", L->name); printf( "\n"); } if ( (computationType == MATRIX_AUTO && matrix->setSize > 2) || (computationType == CODE_AUTO && C->fieldSize > 2) ) A = matrixAutoGroup( matrix, L, C, monomialFlag); else A = designAutoGroup( matrix, L, C); strcpy( A->name, outputObjectName); A->printFormat = (imageFormatFlag ? imageFormat : cycleFormat); if ( pbFlag ) if ( monomialFlag ) writePermGroupRestricted( outputFileName, outputLibraryName, A, comment, matrix->numberOfCols); else writePermGroup( outputFileName, outputLibraryName, A, comment); else writePermGroupRestricted( outputFileName, outputLibraryName, A, comment, matrix->numberOfRows); break; case DESIGN_ISO: case MATRIX_ISO: case CODE_ISO: if ( options.inform ) { switch ( computationType ) { case DESIGN_ISO: printf( "\n\n Design Isomorphism Program: " "Designs %s and %s\n\n", matrix_L->name, matrix_R->name); sprintf( comment, "An isomorphism from design %s to design %s.", matrix_L->name, matrix_R->name); options.cosetRepMessage = "The designs are isomorphic. An isomorphism is:"; options.noCosetRepMessage = "The designs are not isomorphic."; break; case MATRIX_ISO: if ( monomialFlag ) { printf( "\n\n Matrix Monomial Isomorphism Program: " "Matrices %s and %s\n\n", matrix_L->name, matrix_R->name); sprintf( comment, "An monomial isomorphism from matrix %s to matrix %s.", matrix_L->name, matrix_R->name); options.cosetRepMessage = "The matrices are monomially isomorphic. An isomorphism is:"; options.noCosetRepMessage = "The designs are not monomially isomorphic."; } else { printf( "\n\n Matrix Isomorphism Program: " "Matrices %s and %s\n\n", matrix_L->name, matrix_R->name); sprintf( comment, "An isomorphism from matrix %s to matrix %s.", matrix_L->name, matrix_R->name); options.cosetRepMessage = "The matrices are isomorphic. An isomorphism is:"; options.noCosetRepMessage = "The matrices are not isomorphic."; } break; case CODE_ISO: printf( "\n\n Code Isomorphism Program: " "Codes %s and %s, Invariant sets %s and %s\n\n", C_L->name, C_R->name, matrix_L->name, matrix_R->name); sprintf( comment, "An isomorphism from code %s to code %s.", C_L->name, C_R->name); options.cosetRepMessage = "The codes are isomorphic. An isomorphism is:"; options.noCosetRepMessage = "The codes are not isomorphic."; break; } if ( L_L ) printf( "\nKnown Subgroup (left): %s", L_L->name); if ( L_R ) printf( "\nKnown Subgroup (right): %s", L_R->name); if ( L_L || L_R ) printf( "\n"); } if ( (computationType == MATRIX_ISO && matrix_L->setSize > 2) || (computationType == CODE_ISO && C_L->fieldSize > 2) ) y = matrixIsomorphism( matrix_L, matrix_R, L_L, L_R, C_L, C_R, monomialFlag, pbFlag); else y = designIsomorphism( matrix_L, matrix_R, L_L, L_R, C_L, C_R, pbFlag); if ( y ) { strcpy( y->name, outputObjectName); if ( pbFlag ) if ( monomialFlag ) if ( imageFormatFlag ) writePermutationRestricted( outputFileName, outputLibraryName, y, "image", comment, matrix_L->numberOfCols); else writePermutationRestricted( outputFileName, outputLibraryName, y, "", comment, matrix_L->numberOfCols); else if ( imageFormatFlag ) writePermutation( outputFileName, outputLibraryName, y, "image", comment); else writePermutation( outputFileName, outputLibraryName, y, "", comment); else if ( imageFormatFlag ) writePermutationRestricted( outputFileName, outputLibraryName, y, "image", comment, matrix_L->numberOfRows); else writePermutationRestricted( outputFileName, outputLibraryName, y, "", comment, matrix_L->numberOfRows); } break; } /* Return to caller. */ if ( !imageFlag || y ) return 0; else return 1; } /*-------------------------- verifyOptions -------------------------------*/ static void verifyOptions(void) { CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH, MAX_PRIME_FACTORS, MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS, MAX_EXTRA, XLARGE, SGND, NFLT}; extern void xaddsge( CompileOptions *cOpts); extern void xbitman( CompileOptions *cOpts); extern void xcdesau( CompileOptions *cOpts); extern void xchbase( CompileOptions *cOpts); extern void xcmatau( CompileOptions *cOpts); extern void xcompcr( CompileOptions *cOpts); extern void xcompsg( CompileOptions *cOpts); extern void xcopy ( CompileOptions *cOpts); extern void xcstbor( CompileOptions *cOpts); extern void xcstrba( CompileOptions *cOpts); extern void xerrmes( CompileOptions *cOpts); extern void xessent( CompileOptions *cOpts); extern void xfactor( CompileOptions *cOpts); extern void xfield ( CompileOptions *cOpts); extern void xinform( CompileOptions *cOpts); extern void xmatrix( CompileOptions *cOpts); extern void xnew ( CompileOptions *cOpts); extern void xoldcop( CompileOptions *cOpts); extern void xoptsve( CompileOptions *cOpts); extern void xorbit ( CompileOptions *cOpts); extern void xorbref( CompileOptions *cOpts); extern void xpartn ( CompileOptions *cOpts); extern void xpermgr( CompileOptions *cOpts); extern void xpermut( CompileOptions *cOpts); extern void xprimes( CompileOptions *cOpts); extern void xptstbr( CompileOptions *cOpts); extern void xrandgr( CompileOptions *cOpts); extern void xrandsc( CompileOptions *cOpts); extern void xreadde( CompileOptions *cOpts); extern void xreadgr( CompileOptions *cOpts); extern void xreadpe( CompileOptions *cOpts); extern void xrpriqu( CompileOptions *cOpts); extern void xstorag( CompileOptions *cOpts); extern void xtoken ( CompileOptions *cOpts); extern void xutil ( CompileOptions *cOpts); xaddsge( &mainOpts); xbitman( &mainOpts); xcdesau( &mainOpts); xchbase( &mainOpts); xcmatau( &mainOpts); xcompcr( &mainOpts); xcompsg( &mainOpts); xcopy ( &mainOpts); xcstbor( &mainOpts); xcstrba( &mainOpts); xerrmes( &mainOpts); xessent( &mainOpts); xfactor( &mainOpts); xfield ( &mainOpts); xinform( &mainOpts); xmatrix( &mainOpts); xnew ( &mainOpts); xoldcop( &mainOpts); xoptsve( &mainOpts); xorbit ( &mainOpts); xorbref( &mainOpts); xpartn ( &mainOpts); xpermgr( &mainOpts); xpermut( &mainOpts); xprimes( &mainOpts); xptstbr( &mainOpts); xrandgr( &mainOpts); xrandsc( &mainOpts); xreadde( &mainOpts); xreadgr( &mainOpts); xreadpe( &mainOpts); xrpriqu( &mainOpts); xstorag( &mainOpts); xtoken ( &mainOpts); xutil ( &mainOpts); } guava-3.6/src/leon/src/setstab.h0000644017361200001450000000012411026723452016472 0ustar tabbottcrontab#ifndef SETSTAB #define SETSTAB extern int main( int argc, char *argv[]) ; #endif guava-3.6/src/leon/src/permut.h0000644017361200001450000000263411026723452016351 0ustar tabbottcrontab#ifndef PERMUT #define PERMUT extern BOOLEAN isIdentity( const Permutation *const s) ; extern BOOLEAN isInvolution( const Permutation *const s) ; extern Unsigned pointMovedBy( const Permutation *const perm) ; extern void adjoinInvImage( Permutation *s) /* The permutation group (base and sgs known). */ ; extern void leftMultiply( Permutation *const s, const Permutation *const t) ; extern void rightMultiply( Permutation *const s, const Permutation *const t) ; extern void rightMultiplyInv( Permutation *s, Permutation *t) ; extern unsigned long permOrder( const Permutation *const perm ) ; extern void raisePermToPower( Permutation *const perm, /* The permutation to be replaced. */ const long power) /* Upon return, perm has been replaced by perm^power. */ ; extern Permutation *permMapping( const Unsigned degree, /* The degree of the new permutation.*/ const UnsignedS seq1[], /* The first sequence (must have len = degree). */ const UnsignedS seq2[]) /* The second sequence (must have len = degree. */ ; extern BOOLEAN checkConjugacy( const Permutation *const e, const Permutation *const f, const Permutation *const conjPerm) ; extern BOOLEAN isValidPermutation( const Permutation *const perm, const Unsigned degree, const Unsigned xCos, const Unsigned *const equivPt) ; #endif guava-3.6/src/leon/src/primes.h0000644017361200001450000000012611026723452016326 0ustar tabbottcrontab#ifndef PRIMES #define PRIMES extern BOOLEAN isPrime( const Unsigned n) ; #endif guava-3.6/src/leon/src/wt.h0000644017361200001450000000520111026723452015460 0ustar tabbottcrontab#undef WEIGHT #undef ADD #if MAXLEN == 32 #define WEIGHT onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] #define ADD(i) cw1 ^= basis1[i]; #elif MAXLEN == 48 #define WEIGHT onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] + \ onesCount[cw2 & 0x0000ffff] #define ADD(i) cw1 ^= basis1[i]; cw2 ^= basis2[i]; #elif MAXLEN == 64 #define WEIGHT onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] + \ onesCount[cw2 & 0x0000ffff] + onesCount[cw2 >> 16] #define ADD(i) cw1 ^= basis1[i]; cw2 ^= basis2[i]; #elif MAXLEN == 80 #define WEIGHT onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] + \ onesCount[cw2 & 0x0000ffff] + onesCount[cw2 >> 16] + \ onesCount[cw3 & 0x0000ffff] #define ADD(i) cw1 ^= basis1[i]; cw2 ^= basis2[i]; cw3 ^= basis3[i]; #elif MAXLEN == 96 #define WEIGHT onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] + \ onesCount[cw2 & 0x0000ffff] + onesCount[cw2 >> 16] + \ onesCount[cw3 & 0x0000ffff] + onesCount[cw3 >> 16] #define ADD(i) cw1 ^= basis1[i]; cw2 ^= basis2[i]; cw3 ^= basis3[i]; #elif MAXLEN == 112 #define WEIGHT onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] + \ onesCount[cw2 & 0x0000ffff] + onesCount[cw2 >> 16] + \ onesCount[cw3 & 0x0000ffff] + onesCount[cw3 >> 16] + \ onesCount[cw4 & 0x0000ffff] #define ADD(i) cw1 ^= basis1[i]; cw2 ^= basis2[i]; cw3 ^= basis3[i]; \ cw4 ^= basis4[i]; #elif MAXLEN == 128 #define WEIGHT onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] + \ onesCount[cw2 & 0x0000ffff] + onesCount[cw2 >> 16] + \ onesCount[cw3 & 0x0000ffff] + onesCount[cw3 >> 16] + \ onesCount[cw4 & 0x0000ffff] + onesCount[cw4 >> 16] #define ADD(i) cw1 ^= basis1[i]; cw2 ^= basis2[i]; cw3 ^= basis3[i]; \ cw4 ^= basis4[i]; #endif for ( loopIndex = 0 ; loopIndex <= lastPass ; ++loopIndex ) { ++freq[WEIGHT]; ADD(0) ++freq[WEIGHT]; ADD(1) ++freq[WEIGHT]; ADD(0) ++freq[WEIGHT]; ADD(2) ++freq[WEIGHT]; ADD(0) ++freq[WEIGHT]; ADD(1) ++freq[WEIGHT]; ADD(0) ++freq[WEIGHT]; temp = loopIndex + 1; m = 3; while ( (temp & 1) == 0 ) { ++m; temp >>= 1; } ADD(m) } #undef MAXLEN guava-3.6/src/leon/src/cstrbas.h0000644017361200001450000000043111026723452016467 0ustar tabbottcrontab#ifndef CSTRBAS #define CSTRBAS extern RBase *constructRBase( PermGroup *const G, RefinementFamily *const RRR[], ReducChkFn *const isReducible[], SpecialRefinementDescriptor *const specialRefinement[], UnsignedS basicCellSize[], ExtraDomain *extra[] ) ; #endif guava-3.6/src/leon/src/orblist.h0000644017361200001450000000012411026723452016503 0ustar tabbottcrontab#ifndef ORBLIST #define ORBLIST extern int main( int argc, char *argv[]) ; #endif guava-3.6/src/leon/src/readpar.c0000644017361200001450000001321211026723452016440 0ustar tabbottcrontab/* File readPar. Contains routines to read in and write out partitions. The files must already be open. */ #include #include #include #include "group.h" #include "groupio.h" #include "storage.h" #include "token.h" #include "errmesg.h" CHECK( readpa) extern GroupOptions options; /*-------------------------- readPartition --------------------------------*/ Partition *readPartition( char *libFileName, char *libName, Unsigned degree) { Unsigned pt, currentCellNumber, pointsFound; Partition *partn = allocPartition(); Token token, saveToken; char inputBuffer[81]; FILE *libFile; /* Open input file. */ libFile = fopen( libFileName, "r"); if ( libFile == NULL ) ERROR1s( "readPartition", "File ", libFileName, " could not be opened for input.") /* Initialize input routines to correct file. */ setInputFile( libFile); lowerCase( libName); /* Initialize storage manager. */ initializeStorageManager( degree); /* Search for the correct library. Terminate with error message if not found. */ rewind( libFile); for (;;) { fgets( inputBuffer, 80, libFile); if ( feof(libFile) ) ERROR1s( "readPartition", "Library block ", libName, " not found in specified library.") if ( inputBuffer[0] == 'l' || inputBuffer[0] == 'L' ) { setInputString( inputBuffer); if ( ( (token = sReadToken()) , token.type == identifier && strcmp(lowerCase(token.value.identValue),"library") == 0 ) && ( (token = sReadToken()) , token.type == identifier && strcmp(lowerCase(token.value.identValue),libName) == 0 ) ) break; } } /* Set the degree of the partition (must be specified). */ partn->degree = degree; /* Read the partition name. */ if ( (token = nkReadToken() , saveToken = token , token.type == identifier) && (token = nkReadToken() , token.type == equal) ) strcpy( partn->name, saveToken.value.identValue); if ( (token = readToken() , token.type != identifier) || strcmp( token.value.identValue, "seq") != 0 || (token = readToken() , token.type != leftParen) ) ERROR( "readPartition", "Invalid syntax in partition library.") /* Allocate fields for partition structure. */ partn->pointList = allocIntArrayDegree(); partn->invPointList = allocIntArrayDegree(); partn->cellNumber = allocIntArrayDegree(); partn->startCell = allocIntArrayDegree(); /* Read the partition. */ for ( pt = 1 ; pt <= degree ; ++pt ) partn->cellNumber[pt] = 0; currentCellNumber = 0; pointsFound = 0; do { if ( token = readToken() , token.type == leftBracket ) ++currentCellNumber; else ERROR( "readPartition", "Invalid symbol in point list.") partn->startCell[currentCellNumber] = pointsFound + 1; while (token = readToken() , token.type == integer || token.type == comma ) if ( token.type == integer && (pt = token.value.intValue) > 0 && pt <= partn->degree ) if ( partn->cellNumber[pt] == 0 ) { partn->pointList[++pointsFound] = pt; partn->invPointList[pt] = pointsFound; partn->cellNumber[pt] = currentCellNumber; } else ERROR1i( "readPartition", "Point ", pt, " occurs more than once in point list.") else if ( token.type == integer ) ERROR1i( "readPartition", "Invalid point ", pt, ".") if ( token.type != rightBracket || (token = readToken() , token.type != comma && token.type != rightParen) ) ERROR( "readPartition", "Invalid symbol in point list.") } while ( token.type != rightParen ); partn->startCell[currentCellNumber+1] = degree + 1; if ( token = readToken() , token.type != semicolon ) ERROR( "readPartition", "Missing semicolon terminating partition.") /* Close the input file and return. */ fclose( libFile); return partn; } /*-------------------------- writePartition ------------------------------*/ void writePartition( char *libFileName, char *libName, char *comment, Partition *partn) { Unsigned i, column, cellNo; FILE *libFile; /* Open output file. */ libFile = fopen( libFileName, options.outputFileMode); if ( libFile == NULL ) ERROR1s( "writePartition", "File ", libFileName, " could not be opened for output.") /* Write the library name. */ fprintf( libFile, "LIBRARY %s;\n", libName); /* Write the comment. */ if ( comment ) fprintf( libFile, "& %s &\n", comment); /* Write the partition set name. */ if ( !partn->name[0] ) strcpy( partn->name, "Pi"); column = fprintf( libFile, " %s = seq(", partn->name); /* Write the cells. */ for ( cellNo = 1 ; partn->startCell[cellNo] <= partn->degree ; ++cellNo ) { column += fprintf( libFile, "["); for ( i = partn->startCell[cellNo] ; i < partn->startCell[cellNo+1] ; ++i ) { if ( column > 73 ) { fprintf( libFile, "\n "); column = 9; } column += fprintf( libFile, "%u", partn->pointList[i]) + 1; if ( i < partn->startCell[cellNo+1] - 1 ) column += fprintf( libFile, ","); } column += fprintf( libFile, "]"); if ( partn->startCell[cellNo+1] <= partn->degree ) column += fprintf( libFile, ","); } /* Write terminators. */ fprintf( libFile, ");\nFINISH;\n"); /* Close output file. */ fclose( libFile); } guava-3.6/src/leon/src/cdesauto.h0000644017361200001450000000234511026723452016643 0ustar tabbottcrontab#ifndef CDESAUTO #define CDESAUTO extern PermGroup *designAutoGroup( Matrix_01 *const D, /* The matrix whose group is to be found. */ PermGroup *const L, /* A (possibly trivial) known subgroup of the automorphism group of D. (A null pointer designates a trivial group.) */ Code *const C) /* If nonnull, the auto grp of the code C is computed, assuming its group is contained in that of the design. */ ; extern Permutation *designIsomorphism( Matrix_01 *const D_L, /* The first design. */ Matrix_01 *const D_R, /* The second design. */ PermGroup *const L_L, /* A known subgroup of Aut(D_L), or NULL. */ PermGroup *const L_R, /* A known subgroup of Aut(D_R), or NULL. */ Code *const C_L, /* If nonnull, C_R must also be nonull, and */ Code *const C_R, /* any isomorphism of C_L to C_R must map */ /* D_L to D_R. A code isomorphism is */ /* computed. */ const BOOLEAN colInformFlag) ; #endif guava-3.6/src/leon/src/fndelt.h0000644017361200001450000000012211026723452016277 0ustar tabbottcrontab#ifndef FNDELT #define FNDELT extern int main( int argc, char *argv[]) ; #endif guava-3.6/src/leon/src/randgrp.h0000644017361200001450000000073311026723452016470 0ustar tabbottcrontab#ifndef RANDGRP #define RANDGRP extern void initializeSeed( unsigned long newSeed) /* The new value for the seed. */ ; extern Unsigned randInteger( Unsigned lowerBound, /* Lower bound for range of random integer. */ Unsigned upperBound) /* Upper bound for range of random integer. */ ; extern Word *randGroupWord( PermGroup *G, Unsigned atLevel) ; extern Permutation *randGroupPerm( PermGroup *G, Unsigned atLevel) ; #endif guava-3.6/src/leon/src/oldcopy.h0000644017361200001450000000021411026723452016476 0ustar tabbottcrontab#ifndef OLDCOPY #define OLDCOPY extern void copyPermutation( const Permutation *const fromPerm, Permutation *const toPerm) ; #endif guava-3.6/src/leon/src/cstrbas.c0000644017361200001450000002130511026723452016465 0ustar tabbottcrontab/* File cstrbas.c. Contains function constructRBase, which may be used to construct an RRR-base. Also contains function getOptimInfo, which may invoked during RRR-base construction by functions that check RRR-reducbility. */ #include #include #include #include "group.h" /* Bug fix for Waterloo C (IBM 370). */ #if defined(IBMCMSWC) && !defined(SIGNED) && !defined(EXTRA_LARGE) #define FIXUP1 short #else #define FIXUP1 Unsigned #endif #include "chbase.h" #include "cstborb.h" #include "inform.h" #include "new.h" #include "orbrefn.h" #include "permgrp.h" #include "ptstbref.h" #include "optsvec.h" #include "storage.h" CHECK( cstrba) extern GroupOptions options; extern RefinementFamily ptStabFamily; /*-------------------------- constructRBase -------------------------------*/ /* This function allocates and constructs an RRR-base for a permutation group, and it returns a pointer to the R-base that is constructed. The parameters are as follows: G: The permutation group (pointer) for which the RRR-base is to be constructed. A base and strong generating set must be known. Note that the base and strong generating set for G will be changed to that in the RRR-base. RRR: A null terminated list of refinement family pointers (zero based). These describe the refinement families that compose the superfamily RRR. isReducible: A null terminated list of functions that check reducibility (zero-based). Specifically, for each i the function *isReducible[i] checks RRR[i]-reducibility. L: A known subgroup (pointer)of the group G_pP that is to be constructed. A base and strong generating set must be known. Optionally, if L = 1, the argument may be NULL. Note that L the base and strong generating set for L will be changed to that the base is AlphaHat (in the RRR-base). The line numbers referred to below are those in Figure 10 of "Permutation group algorithms based on Partitions" by J. Leon. */ RBase *constructRBase( PermGroup *const G, RefinementFamily *const RRR[], ReducChkFn *const isReducible[], SpecialRefinementDescriptor *const specialRefinement[], UnsignedS basicCellSize[], ExtraDomain *extra[] ) { Unsigned f, h, i, m, pt, sGenCount; unsigned long minPriority; UnsignedS k[10]; SplitSize split; RefinementPriorityPair refPriPair; Refinement bestRefinement; RBase *AAA = newRBase( G->degree); UnsignedS *const startCell = AAA->PsiStack->startCell, *const pointList = AAA->PsiStack->pointList, *const omega = AAA->omega; Permutation *gen; THatWordType tHatWord; /* Set tHatWord to a trivial word. */ tHatWord.invWord = malloc( 8 * sizeof(UnsignedS *) ); tHatWord.revWord = malloc( 8 * sizeof(UnsignedS *) ); tHatWord.invWord[0] = tHatWord.revWord[0] = NULL; /* Here we trim unnecessary strong generators if so requested. */ for ( sGenCount = 0 , gen = G->generator ; gen ; gen = gen->next ) ++sGenCount; if ( sGenCount > options.trimSGenSetToSize ) removeRedunSGens( G, 1); /* Here we construct the complete orbit structure at the top level. */ for ( m = 0 ; specialRefinement[m] ; ++m ) constructAllOrbitInfo( specialRefinement[m]->leftGroup, 1); /* Figure 10, lines 3-5. Note newRBase above already initialized AAA->PsiStack. */ for ( i = 0 ; specialRefinement[i] ; ++i ) k[i] = 0; AAA->ell = 0; f = 0; AAA->n_[0] = 0; /* Array f_ not needed. AAA->f_[0] = 0; AAA->f_[1] = 0; */ for ( m = 0 ; extra[m] ; ++m ) { extra[m]->cstExtraRBase( 0); } /* Figure 10, line 6. */ for ( h = 1 ; h <= G->degree-1 ; ++ h ) { /* Figure 10, line 7. */ for ( i = 0 , minPriority = IRREDUCIBLE ; isReducible[i] != NULL; ++i ) { if ( RRR[i]->refine == orbRefine ) { RRR[i]->familyParm_L[1].intParm = k[i] + 1; RRR[i]->familyParm_L[2].ptrParm = &tHatWord; } refPriPair = (isReducible[i])( RRR[i], AAA->PsiStack); if ( refPriPair.priority != IRREDUCIBLE && ( refPriPair.priority < minPriority || minPriority == IRREDUCIBLE ) ) { minPriority = refPriPair.priority; bestRefinement = refPriPair.refn; } } if ( minPriority != IRREDUCIBLE ) /* Figure 10, lines 8-9. */ AAA->aAA[h] = bestRefinement; /* Figure 10, line 10. */ else { /* Figure 10, lines 12-14. Line 11 is omitted since an explicit representation of Pi is not maintained; note Pi_i = Psi_{n_{i+1}}.*/ ++AAA->ell; AAA->n_[AAA->ell] = h; /* Figure 10, lines 15-17. CAUTION: Note that the second and third lines below depend on the numbering of the refinement parameters in function pointStabRefine. */ refPriPair = isPointStabReducible( &ptStabFamily, AAA->PsiStack, G, AAA, k[0]+1); AAA->alphaHat[AAA->ell] = refPriPair.refn.refnParm[0].intParm; AAA->p_[AAA->ell] = refPriPair.refn.refnParm[1].intParm; AAA->aAA[h] = refPriPair.refn; basicCellSize[AAA->ell] = AAA->PsiStack->cellSize[ refPriPair.refn.refnParm[1].intParm ]; } /* Figure 10, line 19. */ if ( AAA->aAA[h].family->refine == orbRefine ) { for ( i = 0 ; specialRefinement[i]->leftGroup != AAA->aAA[h].family->familyParm_L[0].ptrParm ; ++i ) ; AAA->aAA[h].family->familyParm_L[1].intParm = k[i] + 1; AAA->aAA[h].family->familyParm_L[2].ptrParm = &tHatWord; } split = AAA->aAA[h].family->refine( AAA->aAA[h].family->familyParm_L, AAA->aAA[h].refnParm, AAA->PsiStack); /* Figure 10, lines 20-21. */ AAA->a_[h] = split.newCellSize; AAA->b_[h] = AAA->PsiStack->parent[h+1]; /* Figure 10, lines 22-27. */ if ( split.newCellSize == 1 ) { omega[++f] = pointList[startCell[h+1]]; for ( m = 0 ; specialRefinement[m] ; ++m ) if ( !isFixedPointOf( specialRefinement[m]->leftGroup, k[m]+1, omega[f]) ) { ++k[m]; insertBasePoint( specialRefinement[m]->leftGroup, k[m], omega[f] ); for ( sGenCount = 0 , gen = G->generator ; gen ; gen = gen->next ) ++sGenCount; if ( sGenCount > options.trimSGenSetToSize ) removeRedunSGens( G, 1); constructAllOrbitInfo( specialRefinement[m]->leftGroup, k[m] + 1); if ( options.compress ) compressAtLevel( specialRefinement[m]->leftGroup, k[m]); } } if ( split.oldCellSize == 1 ) { omega[++f] = pointList[startCell[AAA->b_[h]]]; for ( m = 0 ; specialRefinement[m] ; ++m ) if ( !isFixedPointOf( specialRefinement[m]->leftGroup, k[m]+1, omega[f]) ) { ++k[m]; insertBasePoint( specialRefinement[m]->leftGroup, k[m], omega[f] ); for ( sGenCount = 0 , gen = G->generator ; gen ; gen = gen->next ) ++sGenCount; if ( sGenCount > options.trimSGenSetToSize ) removeRedunSGens( G, 1); constructAllOrbitInfo( specialRefinement[m]->leftGroup, k[m] + 1); if ( options.compress ) compressAtLevel( specialRefinement[m]->leftGroup, k[m]); } } for ( m = 0 ; extra[m] ; ++m ) { extra[m]->cstExtraRBase( h); } /* Figure 10, line 28. */ /* Array f_ not needed. AAA->f_[h+1] = f; */ } /* Figure 10, line 30. */ AAA->n_[AAA->ell+1] = G->degree; AAA->k = k[0]; /* Create the inverse point list invOmega. */ AAA->invOmega = allocIntArrayDegree(); for ( pt = 1 ; pt <= G->degree ; ++pt ) AAA->invOmega[omega[pt]] = pt; /* Add null terminator to alphaHat. */ AAA->alphaHat[AAA->ell+1] = 0; /* Print summary information about R-Base if requested. */ if ( options.inform ) informRBase( G, AAA, basicCellSize); free(tHatWord.invWord); free(tHatWord.revWord); /* Return RRR-Base to caller. */ return AAA; } guava-3.6/src/leon/src/csetstab.h0000644017361200001450000000216511026723452016644 0ustar tabbottcrontab#ifndef CSETSTAB #define CSETSTAB extern PermGroup *setStabilizer( PermGroup *const G, /* The containing permutation group. */ const PointSet *const Lambda, /* The point set to be stabilized. */ PermGroup *const L) /* A (possibly trivial) known subgroup of the stabilizer in G of Lambda. (A null pointer designates a trivial group.) */ ; extern Permutation *setImage( PermGroup *const G, /* The containing permutation group. */ const PointSet *const Lambda, /* One of the point sets. */ const PointSet *const Xi, /* The other point set. */ PermGroup *const L_L, /* A (possibly trivial) known subgroup of the stabilizer in G of Lambda. (A null pointer designates a trivial group.) */ PermGroup *const L_R) /* A (possibly trivial) known subgroup of the stabilizer in G of Xi. (A null pointer designates a trivial group.) */ ; #endif guava-3.6/src/leon/src/orbit.c0000644017361200001450000000322411026723452016143 0ustar tabbottcrontab/* File orbit.c. Contains miscellaneous functions for orbit computations. */ #include "group.h" #include "cstborb.h" CHECK( orbit) /* Bug fix for Waterloo C (IBM 370). */ #if defined(IBM_CMS_WATERLOOC) && !defined(SIGNED) && !defined(EXTRA_LARGE) #define FIXUP1 short #define FIXUP2 (short) #else #define FIXUP1 Unsigned #define FIXUP2 #endif FIXUP1 minimalPointOfOrbit( PermGroup *G, Unsigned level, Unsigned point, UnsignedS *minPointOfOrbit, UnsignedS *minPointKnown, UnsignedS *minPointKnownCount, UnsignedS *invOmega) { Unsigned i, found, processed, pt, img, smallestSoFar; Permutation *gen, *firstGen; if ( minPointOfOrbit[point] != 0 ) return FIXUP2 minPointOfOrbit[point]; else { /* Construct the orbit of point. */ firstGen = linkEssentialGensAtLevel( G, level); found = processed = *minPointKnownCount; minPointKnown[++found] = point; minPointOfOrbit[point] = UNKNOWN; smallestSoFar = point; while ( processed < found ) { pt = minPointKnown[++processed]; for ( gen = firstGen ; gen ; gen = gen->xNext ) { img = gen->image[pt]; if ( !minPointOfOrbit[img] ) { minPointOfOrbit[img] = UNKNOWN; minPointKnown[++found] = img; if ( invOmega[img] < invOmega[smallestSoFar] ) smallestSoFar = img; } } } /* Mark minimum for each element in orbit of point. */ for ( i = *minPointKnownCount+1 ; i <= found ; ++i ) minPointOfOrbit[minPointKnown[i]] = smallestSoFar; *minPointKnownCount = found; return FIXUP2 smallestSoFar; } } guava-3.6/src/leon/src/factor.c0000644017361200001450000001140611026723452016303 0ustar tabbottcrontab/* File factor.c. */ #include "group.h" #include "errmesg.h" CHECK( factor) extern Unsigned primeList[]; /*-------------------------- gcd ------------------------------------------*/ /* The function gcd( a, b) returns the greatest common divisor of log integers a and b. */ unsigned long gcd( unsigned long a, unsigned long b) { unsigned long temp_a; if (a < b) {temp_a = a; a = b; b = temp_a;} while (b != 0) { temp_a = a; a = b; b = temp_a % b; } return a; } /*-------------------------- factMultiply ---------------------------------*/ /* The function factMultiply multiplies two factored integers. Specifically, fmultiply( a, b) replaces a by the product a*b. (b remains unchanged.) */ void factMultiply( FactoredInt *const a, FactoredInt *const b) /* a = a * b */ { Unsigned aIndex = 0, bIndex = 0, i; a->prime[a->noOfFactors] = b->prime[b->noOfFactors] = MAX_INT; while ( a->prime[aIndex] < MAX_INT || b->prime[bIndex] < MAX_INT ) if ( a->prime[aIndex] < b->prime[bIndex] ) ++aIndex; else if ( a->prime[aIndex] == b->prime[bIndex] ) a->exponent[aIndex++] += b->exponent[bIndex++]; else if ( a->noOfFactors < MAX_PRIME_FACTORS ) { for ( i = ++a->noOfFactors ; i > aIndex ; --i ) { a->prime[i] = a->prime[i-1]; a->exponent[i] = a->exponent[i-1]; } a->prime[aIndex] = b->prime[bIndex]; a->exponent[aIndex++] = b->exponent[bIndex++]; } else ERROR1i( "fMultiply", "Number of prime factored exceeded bound " "of ", MAX_PRIME_FACTORS, ".") } /*-------------------------- factDivide -----------------------------------*/ /* The function factDivide divides two factored integers. Specifically, fmultiply( a, b) replaces a by the quotient a/b. (b remains unchanged.) If b does not divide a, an error occurs. */ void factDivide( FactoredInt *const a, FactoredInt *const b) /* a = a / b */ { Unsigned aIndex = 0, bIndex = 0, i; a->prime[a->noOfFactors] = b->prime[b->noOfFactors] = MAX_INT; while ( a->prime[aIndex] < MAX_INT && b->prime[bIndex] < MAX_INT ) if ( a->prime[aIndex] < b->prime[bIndex] ) ++aIndex; else if ( a->prime[aIndex] == b->prime[bIndex] ) if ( a->exponent[aIndex] > b->exponent[bIndex] ) a->exponent[aIndex++] -= b->exponent[bIndex++]; else if ( a->exponent[aIndex] == b->exponent[bIndex] ) { --a->noOfFactors; for ( i = aIndex ; i <= a->noOfFactors ; ++i ) { a->prime[i] = a->prime[i+1]; a->exponent[i] = a->exponent[i+1]; } ++bIndex; } else ERROR( "factDivide", "Divisor does not divide dividend in factored " "integer division.") else ERROR( "factDivide", "Divisor does not divide dividend in factored " "integer division.") } /*-------------------------- factorize ------------------------------------*/ FactoredInt factorize( Unsigned n) { FactoredInt nFactored; Unsigned i = 0, lastPrime = 0; nFactored.noOfFactors = 0; while ( primeList[i] * primeList[i] <= n && primeList[i] ) if ( n % primeList[i] == 0 ) { if ( primeList[i] == lastPrime ) ++nFactored.exponent[nFactored.noOfFactors-1]; else if ( nFactored.noOfFactors < MAX_PRIME_FACTORS ) { nFactored.prime[nFactored.noOfFactors] = primeList[i]; nFactored.exponent[nFactored.noOfFactors++] = 1; lastPrime = primeList[i]; } else ERROR1i( "factorize", "Number of prime factors exceeded " "maximum of ", MAX_PRIME_FACTORS, ".") n /= primeList[i]; } else ++i; if ( primeList[i] == 0 ) ERROR( "factorize", "Prime number list overflow.") else if ( n > 1) if ( n == lastPrime ) ++nFactored.exponent[nFactored.noOfFactors-1]; else if ( nFactored.noOfFactors < MAX_PRIME_FACTORS ) { nFactored.prime[nFactored.noOfFactors] = n; nFactored.exponent[nFactored.noOfFactors++] = 1; } else ERROR1i( "factorize", "Number of prime factors exceeded " "maximum of ", MAX_PRIME_FACTORS, ".") return nFactored; } /*-------------------------- factEqual ------------------------------------*/ BOOLEAN factEqual( FactoredInt *a, FactoredInt *b) { Unsigned i; if ( a->noOfFactors != b->noOfFactors ) return FALSE; for ( i = 0 ; i < a->noOfFactors ; ++i ) if ( a->prime[i] != b->prime[i] || a->exponent[i] != b->exponent[i] ) return FALSE; return TRUE; } guava-3.6/src/leon/src/cent.c0000644017361200001450000006342311026723452015764 0ustar tabbottcrontab/* File cent.c. */ /* Copyright (C) 1992 by Jeffrey S. Leon. This software may be used freely for educational and research purposes. Any other use requires permission from the author. */ /* Main program for element centralizer and conjugacy commands. The formats for the commands are: cent cent -conj cent -group where the meaning of the parameters is as follows: : The name of the file containing the permutation group G, or the Cayley library name in which the permutation group G is defined. Except in the case of a Cayley library, a file type of GRP is appended. : The name of the file containing the point set Lambda, or the Cayley library name in which the point set Lambda is defined. Except in the case of a Cayley library, a file type of PTS is appended. : The name of the file in which the set stabilizer G_Lambda is written, or the Cayley library name to which the definition of G_Lambda is written. Except in the case of a Cayley library, a file type of PTS is appended. The options are as follows: -a If the output file exists, it will be appended to rather than overwritten. (A Cayley library is always appended to rather than overwritten.) -b: Base change in the subgroup being computed will be performed at levels fm, fm+1,...,fm+-1 only, where fm is the level of the first base point (of the subgroup) moved by the current permutation. Values below 1 will be raised to 1; those above the base size will be reduced to the base size. -c Compress the group G after an R-base has been constructed. This saves a moderate amount of memory at the cost of relatively little CPU time, but the group (in memory) is effectively destroyed. -crl: The definition of the group G and point set Lambda should be read from Cayley library in library file . -cwl: The definition for the group G_Lambda should be written to Cayley library library file . -g: The maximum number of strong generators for the containing group G. If, after construction of a base and strong generating set for G, the number of strong generators is less than this number, additional strong generators will be added, chosen to reduce the length of the coset representatives (as words). A larger value may increase speed of computation slightly at the cost of extra space. If, after construction of the base and strong generating set, the number of strong generators exceeds this number, at present strong generators are not removed. -gn: (Set stabilizer only). The generators for the newly-created group created are given names 01, 02, ... . If omitted, the new generators are unnamed. -i The generators of are to be written in image format. -n: The name for the set stabilizer or coset rep being computed. (Default: the file name -- file type omitted) -q As the computation proceeds, writing of information about the current state to standard output is suppressed. -s: A known subgroup of the set stabilizer being computed. (Default: no subgroup known) -r: During base change, if insertion of a new base point expands the size of the strong generating set above gens (not counting inverses), redundant strong generators are trimmed from the strong generating set. (Default 25). -t Upon conclusion, statistics regarding the number of nodes of the backtrack search tree traversed is written to the standard output. -v Verify that all files were compiled with the same compile- time parameters and stop. -w: For set or partition image computations in which the sets or partitions turn out to be equivalent, a permutation mapping one to the other is written to the standard output, as well as a disk file, provided the degree is at most . (The option is ignored if -q is in effect.) Default: 100 -x: The ideal size for basic cells is set to . -z Subject to the restrictions imposed by the -b option above, check Prop. 8.3 in "Permutation group algorithms based on partitions". If a base for is not available, one will be computed. In any the base and strong generating set for will be changed during the computation. The return code for set or partition stabilizer computations is as follows: 0: computation successful, 2: computation terminated due to error. The return code for set or partition image computations is as follows: 0: computation successful; sets or partitions are equivalent, 1: computation successful; sets or partitions are not equivalent, 255: computation terminated due to error. */ #include #include #include #include #include #define MAIN #include "group.h" #include "groupio.h" #include "ccent.h" #include "errmesg.h" #include "permgrp.h" #include "readgrp.h" #include "readper.h" #include "storage.h" #include "token.h" #include "util.h" GroupOptions options; UnsignedS (*chooseNextBasePoint)( const PermGroup *const G, const PartitionStack *const UpsilonStack); static void verifyOptions(void); int main( int argc, char *argv[]) { char permGroupFileName[MAX_FILE_NAME_LENGTH] = "", eltOrGrpFileName[MAX_FILE_NAME_LENGTH] = "", *element_L_FileName = eltOrGrpFileName, element_R_FileName[MAX_FILE_NAME_LENGTH] = "", knownSubgroupSpecifier[MAX_FILE_NAME_LENGTH] = "", *knownSubgroup_L_Specifier = knownSubgroupSpecifier, knownSubgroup_R_Specifier[MAX_FILE_NAME_LENGTH] = "", knownSubgroupFileName[MAX_FILE_NAME_LENGTH] = "", *knownSubgroup_L_FileName = knownSubgroupFileName, knownSubgroup_R_FileName[MAX_FILE_NAME_LENGTH] = "", outputFileName[MAX_FILE_NAME_LENGTH] = ""; Unsigned i, j, optionCountPlus1, centPartnCount, centGenCount, startOptions; char outputObjectName[MAX_NAME_LENGTH+1] = "", outputLibraryName[MAX_NAME_LENGTH+1] = "", permGroupLibraryName[MAX_NAME_LENGTH+1] = "", eltOrGrpLibraryName[MAX_NAME_LENGTH+1] = "", knownSubgroupLibraryName[MAX_NAME_LENGTH+1] = "", *element_L_LibraryName = eltOrGrpLibraryName, element_R_LibraryName[MAX_NAME_LENGTH+1] = "", *knownSubgroup_L_LibraryName = knownSubgroupLibraryName, knownSubgroup_R_LibraryName[MAX_NAME_LENGTH+1] = "", prefix[MAX_FILE_NAME_LENGTH], suffix[MAX_NAME_LENGTH]; PermGroup *G, *G_pP, *L = NULL, *L_L = NULL, *L_R = NULL, *E; Permutation *y; Permutation *e, *f; BOOLEAN imageFlag = FALSE, imageFormatFlag = FALSE, noPartn = FALSE, longCycleOption, stdRBaseOption; Unsigned symmetricDegree = 0; char tempArg[8], *nextChar; enum { ELT_CENTRALIZER, ELT_CONJUGATE, GROUP_CENTRALIZER} computationType = ELT_CENTRALIZER; char comment[100]; /* Check whether the first parameter is conj or group. If so, a conjugacy (rather than centralizer) or group centralizer computation will be performed, and the valid remaining parameters will be different. */ if ( argc > 1 ) { strncpy( tempArg, argv[1], 8); tempArg[7] = '\0'; lowerCase( tempArg); if ( strcmp( tempArg, "-conj") == 0 ) { computationType = ELT_CONJUGATE; imageFlag = TRUE; startOptions = 2; } else if ( strcmp( tempArg, "-group") == 0 ) { computationType = GROUP_CENTRALIZER; imageFlag = FALSE; startOptions = 2; } else { computationType = ELT_CENTRALIZER; imageFlag = FALSE; startOptions = 1; } } else startOptions = 1; /* Provide help if no arguments are specified. Note i and j must be as described above. */ if ( startOptions == argc ) { switch( computationType ) { case ELT_CENTRALIZER: printf( "\nUsage: cent [options] permGroup permutation centralizerSubgroup\n"); break; case GROUP_CENTRALIZER: printf( "\nUsage: gcent [options] permGroup1 permGroup2 centralizerSubgroup\n"); break; case ELT_CONJUGATE: printf( "\nUsage: conj [options] permGroup permutation1 permutation2 conjugatingElement\n"); break; } return 0; } /* Check for limits option. If present in position i (i as above) give limits and return. */ if ( startOptions < argc && (strcmp(argv[startOptions], "-l") == 0 || strcmp(argv[startOptions], "-L") == 0) ) { showLimits(); return 0; } /* Check for verify option. If present in position i (i as above) perform verify (Note verifyOptions terminates program). */ if ( startOptions < argc && (strcmp(argv[startOptions], "-v") == 0 || strcmp(argv[startOptions], "-V") == 0) ) verifyOptions(); if ( argc < 4 ) ERROR( "main (cent)", "Too few parameters.") /* Check for exactly 3 (centralizer) or 4 (conjugate) parameters following options. Note i must be as above. */ for ( optionCountPlus1 = startOptions ; optionCountPlus1 < argc && argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 ) ; if ( argc - optionCountPlus1 != 3 + imageFlag ) { ERROR1i( "Centralizer", "Exactly ", 3+imageFlag, " non-option parameters are required."); exit(ERROR_RETURN_CODE); } /* Process options. */ prefix[0] = '\0'; suffix[0] = '\0'; options.maxBaseSize = DEFAULT_MAX_BASE_SIZE; options.statistics = FALSE; options.inform = TRUE; options.compress = TRUE; options.maxBaseChangeLevel = UNKNOWN; options.maxStrongGens = 70; options.idealBasicCellSize = 4; options.trimSGenSetToSize = 35; options.strongMinDCosetCheck = FALSE; options.writeConjPerm = MAX_COSET_REP_PRINT; options.restrictedDegree = 0; options.alphaHat1 = 0; parseLibraryName( argv[optionCountPlus1+2], "", "", outputFileName, outputLibraryName); strncpy( options.genNamePrefix, outputLibraryName, 4); options.genNamePrefix[4] = '\0'; strcpy( options.outputFileMode, "w"); centPartnCount = 10; centGenCount = 3; longCycleOption = FALSE; stdRBaseOption = FALSE; /* Note i must still be as above. */ for ( i = startOptions ; i < optionCountPlus1 ; ++i ) { for ( j = 1 ; argv[i][j] != ':' && argv[i][j] != '\0' ; ++j ) #ifdef EBCDIC argv[i][j] = ( argv[i][j] >= 'A' && argv[i][j] <= 'I' || argv[i][j] >= 'J' && argv[i][j] <= 'R' || argv[i][j] >= 'S' && argv[i][j] <= 'Z' ) ? (argv[i][j] + 'a' - 'A') : argv[i][j]; #else argv[i][j] = (argv[i][j] >= 'A' && argv[i][j] <= 'Z') ? (argv[i][j] + 'a' - 'A') : argv[i][j]; #endif errno = 0; if ( strcmp( argv[i], "-a") == 0 ) strcpy( options.outputFileMode, "a"); else if ( strncmp( argv[i], "-a1:", 4) == 0 && (options.alphaHat1 = (Unsigned) strtol(argv[i]+4,NULL,0) , errno != ERANGE) ) ; else if ( strncmp( argv[i], "-b:", 3) == 0 && (options.maxBaseChangeLevel = (Unsigned) strtol(argv[i]+3,NULL,0) , errno != ERANGE) ) ; else if ( strncmp( argv[i], "-p:", 3) == 0 ) { strcpy( prefix, argv[i]+3); } else if ( strncmp( argv[i], "-t:", 3) == 0 ) { strcpy( suffix, argv[i]+3); } else if ( strncmp( argv[i], "-g:", 3) == 0 && (options.maxStrongGens = (Unsigned) strtol(argv[i]+3,NULL,0) , errno != ERANGE) ) ; else if ( strncmp( argv[i], "-gn:", 4) == 0 ) if ( strlen( argv[i]+4) <= 8 ) strcpy( options.genNamePrefix, argv[i]+4); else ERROR( "main (setstab)", "Invalid value for -gn option") else if ( strcmp( argv[i], "-i") == 0 ) imageFormatFlag = TRUE; else if ( strncmp( argv[i], "-mb:", 4) == 0 ) { errno = 0; options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (cent)", "Invalid syntax for -mb option") } else if ( strncmp( argv[i], "-mw:", 4) == 0 ) { errno = 0; options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (cent)", "Invalid syntax for -mw option") } else if ( strncmp( argv[i], "-n:", 3) == 0 ) if ( isValidName( argv[i]+3) ) strcpy( outputObjectName, argv[i]+3); else ERROR1s( "main (setstab)", "Invalid name ", outputObjectName, " for stabilizer group or coset rep.") else if ( strcmp( argv[i], "-np") == 0 ) noPartn = TRUE; else if ( strcmp( argv[i], "-q") == 0 ) options.inform = FALSE; else if ( strcmp( argv[i], "-overwrite") == 0 ) strcpy( options.outputFileMode, "w"); else if ( strncmp( argv[i], "-r:", 3) == 0 && (options.trimSGenSetToSize = (Unsigned) strtol(argv[i]+3,NULL,0) , errno != ERANGE) ) ; else if ( !imageFlag && strncmp( argv[i], "-k:", 3) == 0 ) strcpy( knownSubgroupSpecifier, argv[i]+3); else if ( imageFlag && strncmp( argv[i], "-kl:", 4) == 0 ) strcpy( knownSubgroup_L_Specifier, argv[i]+4); else if ( imageFlag && strncmp( argv[i], "-kr:", 4) == 0 ) strcpy( knownSubgroup_R_Specifier, argv[i]+4); else if ( strcmp( argv[i], "-s") == 0 ) options.statistics = TRUE; else if ( strncmp( argv[i], "-w:", 3) == 0 && (options.writeConjPerm = (Unsigned) strtol(argv[i]+3,NULL,0) , errno != ERANGE) ) ; else if ( strncmp( argv[i], "-x:", 3) == 0 && (options.idealBasicCellSize = (Unsigned) strtol(argv[i]+3,NULL,0) , errno != ERANGE) ) ; else if ( strcmp( argv[i], "-z") == 0 ) options.strongMinDCosetCheck = TRUE; else if ( strncmp( argv[i], "-cp:", 4) == 0 && (centPartnCount = (Unsigned) strtol(argv[i]+4,NULL,0) , errno != ERANGE) ) ; else if ( strncmp( argv[i], "-cg:", 4) == 0 && (centGenCount = (Unsigned) strtol(argv[i]+4,NULL,0) , errno != ERANGE) ) ; else if ( strcmp( argv[i], "-lc" ) == 0 ) longCycleOption = TRUE; else if ( strcmp( argv[i], "-srb" ) == 0 ) stdRBaseOption = TRUE; else ERROR1s( "main (compute subgroup)", "Invalid option ", argv[i], ".") } /* Compute maximum degree and word length. */ options.maxWordLength = 200 + 5 * options.maxBaseSize; options.maxDegree = MAX_INT - 2 - options.maxBaseSize; /* Compute names for files and name for set stabilizer or coset rep. */ if ( argv[optionCountPlus1][0] == SYMMETRIC_GROUP_CHAR ) { errno = 0; symmetricDegree = (Unsigned) strtol(argv[i]+1,&nextChar,0); if ( errno != 0 || symmetricDegree < 1 || symmetricDegree > options.maxDegree || (*nextChar != ' ' && *nextChar != '\0') ) ERROR( "main (compute subgroup)", "Invalid symmetric group") } else parseLibraryName( argv[optionCountPlus1], prefix, suffix, permGroupFileName, permGroupLibraryName); switch( computationType) { case ELT_CENTRALIZER: case GROUP_CENTRALIZER: parseLibraryName( argv[optionCountPlus1+1], prefix, suffix, eltOrGrpFileName, eltOrGrpLibraryName); parseLibraryName( argv[optionCountPlus1+2], "", "", outputFileName, outputLibraryName); if ( outputObjectName[0] == '\0' ) strncpy( outputObjectName, outputLibraryName, MAX_NAME_LENGTH+1); if ( knownSubgroupSpecifier[0] != '\0' ) parseLibraryName( knownSubgroupSpecifier, prefix, suffix, knownSubgroupFileName, knownSubgroupLibraryName); break; case ELT_CONJUGATE: parseLibraryName( argv[optionCountPlus1+1], prefix, suffix, element_L_FileName, element_L_LibraryName); parseLibraryName( argv[optionCountPlus1+2], prefix, suffix, element_R_FileName, element_R_LibraryName); parseLibraryName( argv[optionCountPlus1+3], "", "", outputFileName, outputLibraryName); if ( outputObjectName[0] == '\0' ) strncpy( outputObjectName, outputLibraryName, MAX_NAME_LENGTH+1); if ( knownSubgroup_L_Specifier[0] != '\0' ) parseLibraryName( knownSubgroup_L_Specifier, prefix, suffix, knownSubgroup_L_FileName, knownSubgroup_L_LibraryName); if ( knownSubgroup_R_Specifier[0] ) parseLibraryName( knownSubgroup_R_Specifier, prefix, suffix, knownSubgroup_R_FileName, knownSubgroup_R_LibraryName); } /* Read in the containing group G. */ if ( symmetricDegree == 0 ) G = readPermGroup( permGroupFileName, permGroupLibraryName, 0, "Generate"); else { G = allocPermGroup(); sprintf( G->name, "%c%d", SYMMETRIC_GROUP_CHAR, symmetricDegree); G->degree = symmetricDegree; G->baseSize = 0; } /* Read in the known subgroups, if present. */ switch ( computationType ) { case ELT_CENTRALIZER: case GROUP_CENTRALIZER: if ( knownSubgroupSpecifier[0] ) L = readPermGroup( knownSubgroupFileName, knownSubgroupLibraryName, G->degree, "Generate"); break; case ELT_CONJUGATE: if ( knownSubgroup_L_Specifier[0] ) L_L = readPermGroup( knownSubgroup_L_FileName, knownSubgroup_L_LibraryName, G->degree, "Generate"); if ( knownSubgroup_R_Specifier[0] ) L_R = readPermGroup( knownSubgroup_R_FileName, knownSubgroup_R_LibraryName, G->degree, "Generate"); break; } /* Read in the element to be centralized, the group to be centralized, or the elements for which to check conjugacy. */ switch ( computationType ) { case ELT_CENTRALIZER: e = readPermutation( eltOrGrpFileName, eltOrGrpLibraryName, G->degree, TRUE); break; case GROUP_CENTRALIZER: E = readPermGroup( eltOrGrpFileName, eltOrGrpLibraryName, G->degree, "Generate"); break; case ELT_CONJUGATE: e = readPermutation( element_L_FileName, element_L_LibraryName, G->degree, TRUE); f = readPermutation( element_R_FileName, element_R_LibraryName, G->degree, TRUE); break; } /* Compute maximum base change level if not specified as option. */ if ( options.maxBaseChangeLevel == UNKNOWN ) options.maxBaseChangeLevel = isDoublyTransitive(G) ? ( 1 + options.maxBaseSize * depthGreaterThan(G,4) ) : ( depthGreaterThan(G,5) + options.maxBaseSize * depthGreaterThan(G,6)); /* Compute the centralizer or conjugating element and write it out. */ switch ( computationType ) { case ELT_CENTRALIZER: if ( options.inform ) { printf( "\n\n Element Centralizer Program: " "Group %s, Element %s\n\n", G->name, e->name); if ( L ) printf( "\nKnown Subgroup: %s\n", L->name); } options.groupOrderMessage = "Centralizer"; G_pP = centralizer( G, e, L, noPartn, longCycleOption, stdRBaseOption); strcpy( G_pP->name, outputObjectName); G_pP->printFormat = (imageFormatFlag ? imageFormat : cycleFormat); sprintf( comment, "The centralizer in permutation group %s of permutation %s.", G->name, e->name); writePermGroup( outputFileName, outputLibraryName, G_pP, comment); break; case GROUP_CENTRALIZER: if ( options.inform ) { printf( "\n\n Group Centralizer Program: " "Centralizer in %s of %s\n\n", G->name, E->name); if ( L ) printf( "\nKnown Subgroup: %s\n", L->name); } options.groupOrderMessage = "Group centralizer"; G_pP = groupCentralizer( G, E, L, centPartnCount, centGenCount); strcpy( G_pP->name, outputObjectName); G_pP->printFormat = (imageFormatFlag ? imageFormat : cycleFormat); sprintf( comment, "The centralizer in permutation group %s of permutation group %s.", G->name, E->name); writePermGroup( outputFileName, outputLibraryName, G_pP, comment); break; case ELT_CONJUGATE: if ( options.inform ) { printf( "\n\n\n Element Conjugacy Program: " "Group %s, Elements %s and %s\n\n", G->name, e->name, f->name); if ( L_L ) printf( "\nKnown Subgroup (left): %s", L_L->name); if ( L_R ) printf( "\nKnown Subgroup (right): %s", L_R->name); if ( L_L || L_R ) printf( "\n"); } options.cosetRepMessage = "The first permutation is conjugated to the second by group element:"; options.noCosetRepMessage = "The two permutations are not conjugate under the group."; y = conjugatingElement( G, e, f, L_L, L_R, noPartn, longCycleOption, stdRBaseOption); if ( y ) { strcpy( y->name, outputObjectName); sprintf( comment, "A permutation in group %s mapping permutation %s to permutation %s.", G->name, e->name, f->name); if ( imageFormatFlag ) writePermutation( outputFileName, outputLibraryName, y, "image", comment); else writePermutation( outputFileName, outputLibraryName, y, "", comment); } break; } freePermGroup(G); /* Return to caller. */ if ( !imageFlag || y ) return 0; else return 1; } /*-------------------------- verifyOptions -------------------------------*/ static void verifyOptions(void) { CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH, MAX_PRIME_FACTORS, MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS, MAX_EXTRA, XLARGE, SGND, NFLT}; extern void xaddsge( CompileOptions *cOpts); extern void xbitman( CompileOptions *cOpts); extern void xccent ( CompileOptions *cOpts); extern void xchbase( CompileOptions *cOpts); extern void xcompcr( CompileOptions *cOpts); extern void xcompsg( CompileOptions *cOpts); extern void xcopy ( CompileOptions *cOpts); extern void xcstbor( CompileOptions *cOpts); extern void xcstrba( CompileOptions *cOpts); extern void xerrmes( CompileOptions *cOpts); extern void xessent( CompileOptions *cOpts); extern void xfactor( CompileOptions *cOpts); extern void xinform( CompileOptions *cOpts); extern void xnew ( CompileOptions *cOpts); extern void xoldcop( CompileOptions *cOpts); extern void xoptsve( CompileOptions *cOpts); extern void xorbit ( CompileOptions *cOpts); extern void xorbref( CompileOptions *cOpts); extern void xpartn ( CompileOptions *cOpts); extern void xpermgr( CompileOptions *cOpts); extern void xpermut( CompileOptions *cOpts); extern void xprimes( CompileOptions *cOpts); extern void xptstbr( CompileOptions *cOpts); extern void xrandgr( CompileOptions *cOpts); extern void xrandsc( CompileOptions *cOpts); extern void xreadgr( CompileOptions *cOpts); extern void xreadpe( CompileOptions *cOpts); extern void xrpriqu( CompileOptions *cOpts); extern void xstorag( CompileOptions *cOpts); extern void xtoken ( CompileOptions *cOpts); extern void xutil ( CompileOptions *cOpts); xaddsge( &mainOpts); xbitman( &mainOpts); xccent ( &mainOpts); xchbase( &mainOpts); xcompcr( &mainOpts); xcompsg( &mainOpts); xcopy ( &mainOpts); xcstbor( &mainOpts); xcstrba( &mainOpts); xerrmes( &mainOpts); xessent( &mainOpts); xfactor( &mainOpts); xinform( &mainOpts); xnew ( &mainOpts); xoldcop( &mainOpts); xoptsve( &mainOpts); xorbit ( &mainOpts); xorbref( &mainOpts); xpartn ( &mainOpts); xpermgr( &mainOpts); xpermut( &mainOpts); xprimes( &mainOpts); xptstbr( &mainOpts); xrandgr( &mainOpts); xrandsc( &mainOpts); xreadgr( &mainOpts); xreadpe( &mainOpts); xrpriqu( &mainOpts); xstorag( &mainOpts); xtoken ( &mainOpts); xutil ( &mainOpts); } guava-3.6/src/leon/src/orbrefn.h0000644017361200001450000000104011026723452016460 0ustar tabbottcrontab#ifndef ORBREFN #define ORBREFN extern void initializeOrbRefine( PermGroup *G) ; extern SplitSize orbRefine( const RefinementParm familyParm[], const RefinementParm refnParm[], PartitionStack *const UpsilonStack) ; extern RefinementPriorityPair isOrbReducible( const RefinementFamily *family, /* The refinement family mapping must be orbRefine; family parm[0] is the group. */ const PartitionStack *const UpsilonStack) ; #endif guava-3.6/src/leon/src/group.h0000644017361200001450000004170111026723452016167 0ustar tabbottcrontab#ifndef GROUP #define GROUP /* File group.h. File to be included with all permutation group theoretic functions. Defines constants and types relating to permutation groups. Also defines some convenient macros. Certain preprocessor symbols must, or may, be defined on the compilation command line. Of the symbols below, INT_SIZE is always required; the others are sometime required, or desirable: INT_SIZE d -- Here d is the number of bits in type int (usually 16 or 32). EBCDIC -- Must be defined if the system uses EBCDIC (rather than ASCII) to represent characters. PERIOD_TO_BLANK -- If defined, periods in a file name are translated to blanks. This option is present primarily for use with CMS. It allows, for example, a file named PSP82 GROUP A1 to be entered in the form PSP82.GROUP.A1. LONG_EXTERNAL_NAMES -- Should be defined if the compiler and linker support external names (31 characters). EXTRA_LARGE -- If defined, the compiler represents points using type int rather than type short or unsigned short. This permits permutation groups of high degree but increases memory requirements considerably. This option is intended for C compilers in which sizeof(int) = 4. SIGNED -- Assuming EXTRA_LARGE is not defined, defining signed causes points to be represented using type short rather than type unsigned short. This reduces the maximum degree for permutations groups but speeds up the algorithm significantly on some machines (e.g., IBM 3090). NOFLOAT -- Causes generation of code performing no floating point operations. Useful primarily in cases where the C compiler generates code requiring a coprocessor when floating point arithmetic is used. TICK -- A value of CLK_TCK to be used in place of the value defined in the header file time.h. This is needed in the NOFLOAT option is chosen and if CLK_TCK is given as a floating point quantity (e.g., 18.2 in Turbo C for the IBM PC). It is also needed if an alternate CPU time function is specified. CPU_TIME timeFunc -- If defined, timeFunc must be the name of a user- supplied function for measuring CPU time. If not defined, the C function clock() is used. (This function is required on the SUN/3 since the clock function wraps around after less than an hour.) DEFAULT_MAX_BASE_SIZE b -- Here b is a default bound on the size of the base for permutation groups. It is 62 by default. Larger values of b increase memory requirements slightly and may increase execution time very slightly. This default value may be overridden by means of the -mb option. MAX_NAME_LENGTH n -- Here n is the number of characters allowed in the name of a group, permutation, set, or partition. Default is 16. Large values may cause problems with output. MAX_FILE_ NAME_LENGTH m -- Here m is the number of characters allowed in any file name (including path information. The default is 60. For some compilers, it may be necessary to insert code unique to that compiler. In this case, a special symbol identifying the machine and compiler (e.g., IBM_CMS_WATERLOOC for Waterloo C on the IBM 370) should be defined, and the special code should be in the body of an #if directive specifying that special symbol. */ #include #include "leon_config.h" #define INT_SIZE SIZEOF_INT<<3 #ifdef CPU_TIME #define ALT_TIME_HEADER #else #define CPU_TIME clock #endif #ifndef LONG_EXTERNAL_NAMES #include "extname.h" #endif #define Unsigned unsigned #define UnsignedS unsigned #define MAX_INT UINT_MAX #define SCANF_Int_FORMAT "%u" #ifndef MAX_NAME_LENGTH #define MAX_NAME_LENGTH 64 #endif #ifndef MAX_FILE_NAME_LENGTH #define MAX_FILE_NAME_LENGTH 60 #endif #ifndef DEFAULT_MAX_BASE_SIZE #define DEFAULT_MAX_BASE_SIZE 62 #endif #ifndef MAX_CODE_LENGTH #define MAX_CODE_LENGTH 128 #endif #define MAX_REFINEMENT_PARMS 3 #define MAX_FAMILY_PARMS 6 #define MAX_PRIME_FACTORS 30 #define MAX_EXTRA 10 #define SYMMETRIC_GROUP_CHAR '#' #define IS_SYMMETRIC(g) ((g)->name[0] == SYMMETRIC_GROUP_CHAR) #define ERROR_RETURN_CODE 15 #define MAX_COSET_REP_PRINT 300 #define TRUE 1 #define FALSE 0 #define BOOLEAN Unsigned #define IRREDUCIBLE MAX_INT #define UNKNOWN MAX_INT #define MIN(x,y) ( ((x) < (y)) ? (x) : (y) ) #define MAX(x,y) ( ((x) > (y)) ? (x) : (y) ) #define ABS(x) ( ((x) < 0) ? (-(x)) : (x) ) #define FIRST_IN_ORBIT ((Permutation *) 1) #define EXCHANGE(x,y,temp) {temp = x; x = y; y = temp;} #define ERROR(function,message) \ errorMessage( __FILE__, __LINE__, function, message); #define ERROR1i(function,message1,intParm,message2) \ errorMessage1i( __FILE__, __LINE__, function, message1, intParm, message2); #define ERROR1s(function,message1,strParm,message2) \ errorMessage1s( __FILE__, __LINE__, function, message1, strParm, message2); #define ESSENTIAL_AT_LEVEL(perm,level) essentialAtLevel( perm, level) #define ESSENTIAL_BELOW_LEVEL(perm,level) essentialBelowLevel( perm, level) #define ESSENTIAL_ABOVE_LEVEL(perm,level) essentialAboveLevel( perm, level) #define MAKE_ESSENTIAL_AT_LEVEL(perm,level) makeEssentialAtLevel( perm, level) #define MAKE_NOT_ESSENTIAL_AT_LEVEL(perm,level) \ makeNotEssentialAtLevel( perm, level) #define MAKE_NOT_ESSENTIAL_ATABOV_LEVEL(perm,level) \ makeNotEssentialAtAboveLevel( perm, level) #define MAKE_NOT_ESSENTIAL_ALL(perm) makeNotEssentialAll( perm) #define MAKE_UNKNOWN_ESSENTIAL(perm) makeUnknownEssential( perm) #define COPY_ESSENTIAL(newPerm,oldPerm) copyEssential( newPerm, oldPerm) #define RPQ_SIZE( rpq) rpq->size #define RPQ_CLEAR( rpq) rpq->size = 0; #ifdef EXTRA_LARGE #define XLARGE TRUE #endif #ifndef EXTRA_LARGE #define XLARGE FALSE #endif #ifdef SIGNED #define SGND TRUE #endif #ifndef SIGNED #define SGND FALSE #endif #ifdef NOFLOAT #define NFLT TRUE #endif #ifndef NOFLOAT #define NFLT FALSE #endif #ifndef CLK_TCK #define CLK_TCK CLOCKS_PER_SEC #endif typedef struct { int mbs, mnl, mpf, mrp, mfp, me, xl, sg, nf; } CompileOptions; #ifndef MAIN void checkCompileOptions( char *localFileName, CompileOptions *mainOpts, CompileOptions *localOpts); #endif #define CHECK(fileName) \ void x##fileName( CompileOptions *mainOptsPtr) \ { CompileOptions localOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH, \ MAX_PRIME_FACTORS, \ MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS, \ MAX_EXTRA, XLARGE, SGND, NFLT}; \ checkCompileOptions( __FILE__, mainOptsPtr, &localOpts); \ } extern unsigned long bitSetAt[32]; extern unsigned long bitSetBelow[33]; typedef enum { PERM_GROUP, PERMUTATION, POINT_SET, PARTITION, DESIGN, MATRIX_01, BINARY_CODE, INVALID_OBJECT } ObjectType; typedef struct { Unsigned noOfFactors; UnsignedS prime[MAX_PRIME_FACTORS+1]; UnsignedS exponent[MAX_PRIME_FACTORS+1]; } FactoredInt; struct Word; struct OccurenceOfGen; typedef struct Permutation { char name[MAX_NAME_LENGTH+1]; UnsignedS degree; UnsignedS *image; /* Alloc (degree+2)*sizeof(UnsignedS). */ UnsignedS *invImage; /* Alloc (degree+2)*sizeof(UnsignedS). */ Unsigned level; unsigned long *essential; struct Permutation *invPermutation; struct Permutation *next, *last; struct Permutation *xNext, *xLast; struct Word *word; /* Alloc (MWLENGTH+2)*sizeof(Word *). */ struct OccurenceOfGen *occurHeader; } Permutation; typedef struct Word { Unsigned length; Permutation **position; } Word; typedef struct Relator { Unsigned length; Unsigned level; Permutation **rel; Unsigned **fRel; Unsigned **bRel; struct Relator *next; struct Relator *last; } Relator; typedef struct OccurenceOfGen { Relator *r; Unsigned relLength; Unsigned level; Unsigned **fRelStart; Unsigned **bRelFinish; struct OccurenceOfGen *next; } OccurenceOfGen; typedef struct SplitSize { Unsigned oldCellSize; Unsigned newCellSize; } SplitSize; typedef enum { cycleFormat, imageFormat, binaryFormat, cayleyLibraryFormat, cayleyReadFormat } PermFormat; typedef /* Note below MBS denotes */ struct PermGroup { /* MAX_BASE_SIZE. */ char name[MAX_NAME_LENGTH+1]; Unsigned degree; Unsigned baseSize; FactoredInt *order; /* Alloc sizeof(FactoredInt). */ UnsignedS *base; /* Alloc (MBS+2)*sizeof(UnsignedS). */ UnsignedS *basicOrbLen; /* Alloc (MBS+2)*sizeof(UnsignedS). */ UnsignedS **basicOrbit; /* Alloc (MBS+2)*sizeof(UnsignedS **). */ Permutation ***schreierVec; /* Alloc (MBS+2)*sizeof(Permutation***).*/ UnsignedS **completeOrbit; /* Alloc (MBS+2)*sizeof(UnsignedS **). */ UnsignedS **orbNumberOfPt; /* Alloc (MBS+2)*sizeof(UnsignedS **). */ UnsignedS **startOfOrbitNo; /* Alloc (MBS+2)*sizeof(UnsignedS **). */ Permutation *generator; UnsignedS *omega; /* Alloc (degree+2)*sizeof(UnsignedS). */ UnsignedS *invOmega; /* Alloc (degree+2)*sizeof(UnsignedS). */ PermFormat printFormat; Relator *relator; } PermGroup; typedef struct Partition { char name[MAX_NAME_LENGTH+1]; Unsigned degree; UnsignedS *pointList; /* Alloc (degree+2)*sizeof(UnsignedS). */ UnsignedS *invPointList; /* Alloc (degree+2)*sizeof(UnsignedS). */ UnsignedS *cellNumber; /* Alloc (degree+2)*sizeof(UnsignedS). */ UnsignedS *startCell; /* Alloc (degree+2)*sizeof(UnsignedS). */ } Partition; typedef struct PartitionStack { Unsigned height; Unsigned degree; UnsignedS *pointList; /* Allocate (degree+2)*sizeof(UnsignedS). */ UnsignedS *invPointList; /* Allocate (degree+2)*sizeof(UnsignedS). */ UnsignedS *cellNumber; /* Allocate (degree+2)*sizeof(UnsignedS). */ UnsignedS *parent; /* Allocate (degree+2)*sizeof(UnsignedS). */ UnsignedS *startCell; /* Allocate (degree+2)*sizeof(UnsignedS). */ UnsignedS *cellSize; /* Allocate (degree+2)*sizeof(UnsignedS). */ } PartitionStack; typedef struct CellPartitionStack { Partition *basePartn; Unsigned height; Unsigned cellCount; UnsignedS *cellList; /* Alloc (cellCount+2)*sizeof(UnsignedS). */ UnsignedS *invCellList; /* Alloc (cellCount+2)*sizeof(UnsignedS). */ UnsignedS *cellGroupNumber; /* Alloc (cellCount+2)*sizeof(UnsignedS). */ UnsignedS *parentGroup; /* Alloc (cellCount+2)*sizeof(UnsignedS). */ UnsignedS *startCellGroup; /* Alloc (cellCount+2)*sizeof(UnsignedS). */ UnsignedS *cellGroupSize; /* Alloc (cellCount+2)*sizeof(UnsignedS). */ UnsignedS *totalGroupSize; /* Alloc (cellCount+2)*sizeof(UnsignedS). */ } CellPartitionStack; typedef union { Unsigned intParm; void *ptrParm; } RefinementParm; typedef SplitSize RefinementMapping( const RefinementParm familyParm[], const RefinementParm refnParm[], PartitionStack *const UpsilonStack); typedef struct { RefinementMapping *refine; RefinementParm familyParm_L[MAX_FAMILY_PARMS]; RefinementParm familyParm_R[MAX_FAMILY_PARMS]; } RefinementFamily; typedef struct { RefinementFamily *family; RefinementParm refnParm[MAX_REFINEMENT_PARMS]; } Refinement; typedef struct { Refinement refn; long priority; } RefinementPriorityPair; typedef RefinementPriorityPair ReducChkFn( const RefinementFamily *family, const PartitionStack *const UpsilonStack); /* R-base notation is as in "Perm Grp Algs...". Note fields omega, invOmega, alpha are not included here, but are set in the structure for the containing group. */ typedef /* Note below MBS denotes */ struct { /* MAX_BASE_SIZE. */ Unsigned ell; Unsigned k; Unsigned degree; Refinement *aAA; /* Alloc (degree+2) * sizeof(Refinement).*/ PartitionStack *PsiStack; /* Alloc sizeof(PartitionStack). */ UnsignedS *n_; /* Alloc (MBS+2)*sizeof(UnsignedS). */ UnsignedS *p_; /* Alloc (MBS+2)*sizeof(UnsignedS). */ UnsignedS *alphaHat; /* Alloc (MBS+2)*sizeof(UnsignedS). */ UnsignedS *a_; /* Alloc (degree+2)*sizeof(UnsignedS). */ UnsignedS *b_; /* Alloc (degree+2)*sizeof(UnsignedS). */ UnsignedS *omega; /* Alloc (degree+2)*sizeof(UnsignedS). */ UnsignedS *invOmega; /* Alloc (degree+2)*sizeof(UnsignedS). */ } RBase; typedef struct PointSet { char name[MAX_NAME_LENGTH+1]; Unsigned size; Unsigned degree; UnsignedS *pointList; /* Alloc (degree+2)*sizeof(UnsignedS). */ char *inSet; /* Alloc (degree+2)*sizeof(char) */ } PointSet; typedef struct { Unsigned size; Unsigned degree; Unsigned maxSize; UnsignedS *pointList; /* Alloc (maxSize+2)*sizeof(UnsignedS). */ } RPriorityQueue; typedef BOOLEAN Property( const Permutation *const); typedef struct { Unsigned maxBaseSize; Unsigned maxDegree; Unsigned maxWordLength; BOOLEAN statistics; BOOLEAN inform; BOOLEAN strongMinDCosetCheck; BOOLEAN compress; Unsigned maxStrongGens; Unsigned maxBaseChangeLevel; Unsigned idealBasicCellSize; Unsigned trimSGenSetToSize; Unsigned writeConjPerm; Unsigned restrictedDegree; /* For informCosetRep only. */ void (*altInformCosetRep)( Permutation *y); Unsigned alphaHat1; char genNamePrefix[8]; char outputFileMode[3]; char *groupOrderMessage; char *cosetRepMessage; char *noCosetRepMessage; } GroupOptions; typedef struct { unsigned long initialSeed; Unsigned minWordLengthIncrement; Unsigned maxWordLengthIncrement; Unsigned stopAfter; BOOLEAN reduceGenOrder; Unsigned rejectNonInvols; Unsigned rejectHighOrder; BOOLEAN onlyEssentialInitGens; BOOLEAN onlyEssentialAddedGens; } RandomSchreierOptions; typedef struct { char refnType; PermGroup *leftGroup; PermGroup *rightGroup; } SpecialRefinementDescriptor; typedef struct { UnsignedS **revWord; UnsignedS **invWord; UnsignedS *lengthAtLevel; /* alloc (MAX_BASE_SIZE+2) * sizeof(UnsignedS) */ } THatWordType; typedef char FieldElement; typedef struct { char name[MAX_NAME_LENGTH+1]; Unsigned size; Unsigned characteristic; Unsigned exponent; char **sum; char **dif; char **prod; char *inv; } Field; typedef struct { char name[MAX_NAME_LENGTH+1]; Unsigned setSize; Field *field; Unsigned numberOfRows; Unsigned numberOfCols; char **entry; Unsigned *unused; } Matrix_01; typedef struct { char name[MAX_NAME_LENGTH+1]; Unsigned fieldSize; Field *field; Unsigned dimension; Unsigned length; char **basis; Unsigned *infoSet; } Code; typedef struct { Unsigned cellCount; CellPartitionStack *xPsiStack; CellPartitionStack *xUpsilonStack; Refinement *xRRR; void (*cstExtraRBase)(Unsigned level); UnsignedS *applyAfter; UnsignedS *xA_; UnsignedS *xB_; } ExtraDomain; #endif guava-3.6/src/leon/src/groupio.h0000644017361200001450000000076211026723452016521 0ustar tabbottcrontab#ifndef GROUPIO #define GROUPIO #define MAX_TOKEN_LENGTH 32 typedef enum { keyword, identifier, integer, floatingPt, leftParen, rightParen, leftBracket, rightBracket, leftAngle, rightAngle, semicolon, equal, asterisk, caret, comma, slash, period, colon, other, eof } TokenType; typedef struct { TokenType type; union { char keyValue[MAX_TOKEN_LENGTH+1]; char identValue[MAX_TOKEN_LENGTH+1]; Unsigned intValue; char charValue; } value; } Token; #endif guava-3.6/src/leon/src/codeauto.sh0000755017361200001450000000003411026723452017016 0ustar tabbottcrontab#!/bin/sh desauto -code $* guava-3.6/src/leon/src/ptstbref.h0000644017361200001450000000157311026723452016667 0ustar tabbottcrontab#ifndef PTSTBREF #define PTSTBREF extern SplitSize pointStabRefine( const RefinementParm familyParm[], /* No family parms. */ const RefinementParm refnParm[], /* parm[0] = alpha, parm[1] = i. */ PartitionStack *const UpsilonStack) /* The partition stack, as above. */ ; extern RefinementPriorityPair isPointStabReducible( const RefinementFamily *family, /* The refinement family (mapping must be pointStabRefn; there are no genuine parms. */ const PartitionStack *const UpsilonStack, /* The partition stack above. */ PermGroup *G, /* For optimization. */ RBase *AAA, /* For optimization. */ Unsigned level) /* For optimization. */ ; #endif guava-3.6/src/leon/src/randschr.h0000644017361200001450000000105311026723452016633 0ustar tabbottcrontab#ifndef RANDSCHR #define RANDSCHR extern void removeIdentityGens( PermGroup *const G) /* The group G mentioned above. */ ; extern void adjoinGenInverses( PermGroup *const G) /* The group mentioned above. */ ; extern void initializeBase( PermGroup *const G) /* The group G mentioned above. */ ; extern void replaceByPower( const PermGroup *const G, const Unsigned level, Permutation *const h) ; extern BOOLEAN randomSchreier( PermGroup *const G, RandomSchreierOptions rOptions) ; #endif guava-3.6/src/leon/src/addsgen.c0000644017361200001450000000376511026723452016443 0ustar tabbottcrontab/* File addsgen.c. Contains function addStrongGenerator, which may be used to adjoin a new strong generator to a permutation group. */ #include #include "group.h" #include "essentia.h" #include "permgrp.h" #include "permut.h" #include "cstborb.h" CHECK( addsge) /*-------------------------- addStrongGenerator ---------------------------*/ /* This function may be used to adjoin a new strong generator to a permutation group. The new strong generator must move a base point (This is not checked.), and it should extend the basic orbit at its level (If not, no error occurs, but the new generator is always marked as essential at its level.). The inverse image of the new generator, if absent, will be appended. Schreier vectors are reconstructed as necessary. */ void addStrongGenerator( PermGroup *G, /* Group to which strong gen is adjoined. */ Permutation *newGen, /* The new strong generator. It must move a base point (not checked). */ BOOLEAN essentialAtOne) /* Should the new generator be marked as essential at level 1. */ { Unsigned i; /* Append inverse image of new strong generator, if absent. */ if ( !newGen->invImage ) adjoinInvImage( newGen); /* Find level of new strong generator, and mark it essential at this level. */ newGen->level = levelIn( G, newGen); MAKE_NOT_ESSENTIAL_ALL( newGen); MAKE_ESSENTIAL_AT_LEVEL( newGen, newGen->level); /* Add the generator. */ if ( G->generator ) G->generator->last = newGen; newGen->last = NULL; newGen->next = G->generator; G->generator = newGen; /* Rebuild the Schreier vectors and basic orbits. */ constructBasicOrbit( G, newGen->level, "KnownEssential"); for ( i = newGen->level - 1 ; i >= (essentialAtOne ? 1 : 2) ; --i ) { MAKE_ESSENTIAL_AT_LEVEL(newGen,i); if ( !fixesBasicOrbit( G, i, newGen) ) constructBasicOrbit( G, i, "FindEssential"); } } guava-3.6/src/leon/src/enum.h0000644017361200001450000000262411026723452016000 0ustar tabbottcrontab #define HB 0x8000 #define NHB 0x7fff typedef struct { Word word; Unsigned *image; } WordImagePair; typedef struct { Unsigned pnt; Unsigned img; Permutation *gn; } Deduction; typedef struct { Unsigned curSize; Unsigned head; Unsigned tail; Deduction *deduc; } DeductionQueue; typedef struct { Unsigned size; Unsigned head; Unsigned tail; Unsigned *coset; Unsigned *image; Permutation **gen; } DefinitionList; typedef struct { BOOLEAN initialize; Unsigned maxDeducQueueSize; Unsigned genOrderLimit; Unsigned prodOrderLimit; BOOLEAN alwaysRebuildSvec; Unsigned maxExtraCosets; Unsigned percentExtraCosets; } STCSOptions; #define MAKE_EMPTY( queue) {queue->head = queue->tail = queue->curSize = 0;} #define ATTEMPT_ENQUEUE( queue, newDeduc) \ {if ( queue->curSize < sOptions.maxDeducQueueSize ) { \ queue->deduc[queue->tail++] = newDeduc; \ if ( queue->tail == sOptions.maxDeducQueueSize ) \ queue->tail = 0; \ ++queue->curSize; \ }} #define DEQUEUE( queue, deduc) \ {deduc = queue->deduc[queue->head++]; \ if ( queue->head == sOptions.maxDeducQueueSize ) \ queue->head = 0; \ --queue->curSize;} #define NOT_EMPTY( queue) (queue->curSize != 0) guava-3.6/src/leon/src/cjper.sh0000755017361200001450000000003511026723452016317 0ustar tabbottcrontab#!/bin/sh cjrndper -perm $* guava-3.6/src/leon/src/optsvec.c0000644017361200001450000002433211026723452016512 0ustar tabbottcrontab/* File optsvec.c. */ #include #include #include #include "group.h" #include "cstborb.h" #include "essentia.h" #include "new.h" #include "permut.h" #include "permgrp.h" #include "storage.h" CHECK( optsve) extern GroupOptions options; /* Bug fix for Waterloo C (IBM 370). */ #if defined(IBM_CMS_WATERLOOC) && !defined(SIGNED) && !defined(EXTRA_LARGE) #define FIXUP1 short #define FIXUP2 (short) #else #define FIXUP1 Unsigned #define FIXUP2 #endif /*-------------------------- meanCosetRepLen ------------------------------*/ void meanCosetRepLen( const PermGroup *const G) { Unsigned level, pt, i, totalCount, involCount; unsigned long totalLen; UnsignedS *cosetRepLen = allocIntArrayDegree(); #ifdef NOFLOAT unsigned long intQuot, decQuot; #endif /* Do nothing for symmetric group. */ if ( IS_SYMMETRIC(G) ) return; totalCount = genCount( G, &involCount); printf( "%u generators (%u involutory).\n", totalCount, involCount), printf( "Mean node depth Schreier tree:"); for ( level = 1 ; level <= G->baseSize ; ++level ) { for ( i = 1 ; i <= G->basicOrbLen[level] ; ++i ) cosetRepLen[G->basicOrbit[level][i]] = 0; totalLen = 0; for ( i = 2 ; i <= G->basicOrbLen[level] ; ++i ) { pt = G->basicOrbit[level][i]; cosetRepLen[pt] = 1 + cosetRepLen[ G->schreierVec[level][pt]->invImage[pt] ]; totalLen += cosetRepLen[pt]; } #ifndef NOFLOAT printf( " %4.2lf", (double) totalLen / G->basicOrbLen[level] ); #endif #ifdef NOFLOAT intQuot = (unsigned long) totalLen / G->basicOrbLen[level]; decQuot = (totalLen - G->basicOrbLen[level] * intQuot) * 100; decQuot /= G->basicOrbLen[level]; printf( " %2lu.%02lu", intQuot, decQuot ); #endif } printf( "\n"); freeIntArrayDegree( cosetRepLen); } /*-------------------------- reconstructBasicOrbit ------------------------*/ FIXUP1 reconstructBasicOrbit( /* Returns word length of longest coset rep. */ PermGroup *const G, const Unsigned level) { Unsigned found = 1, processed = 0, pt, img, i, maxCosetRepLen = 0; Permutation *gen, *firstGenAtLevel; Permutation **svec = G->schreierVec[level]; UnsignedS *basicOrbit = G->basicOrbit[level]; for ( i = 2 ; i <= G->basicOrbLen[level] ; ++i ) svec[basicOrbit[i]] = NULL; firstGenAtLevel = linkGensAtLevel( G, level); while ( found < G->basicOrbLen[level] ) { pt = basicOrbit[++processed]; for ( gen = firstGenAtLevel ; gen ; gen = gen->xNext ) { img = gen->image[pt]; if ( !svec[img] ) { basicOrbit[++found] = img; svec[img] = gen; } } } for ( gen = G->generator ; gen ; gen = gen->next ) for ( i = gen->level ; i >= 1 ; --i ) MAKE_ESSENTIAL_AT_LEVEL( gen, i); for ( pt = basicOrbit[G->basicOrbLen[level]] ; pt != basicOrbit[1] ; pt = svec[pt]->invImage[pt] ) ++maxCosetRepLen; return FIXUP2 maxCosetRepLen; } /*-------------------------- expandSGS -----------------------------------*/ /* This function adds new strong generators to a strong generating set in order to reduce the maximum length of the coset representatives. */ void expandSGS( PermGroup *G, UnsignedS longRepLen[], UnsignedS basicCellSize[], Unsigned ell) { Unsigned r, i, pt, orbLen, involCount, m1, m2, m3, passes, easy, numberOfGens = genCount(G, &involCount); unsigned long basicCellSizeSum = 0; UnsignedS *goal = allocIntArrayBaseSize(); Permutation *newGen; for ( i = 2 ; i <= ell ; ++i ) basicCellSizeSum += basicCellSize[i]; easy = (options.maxBaseChangeLevel == 0 ) && G->degree < 10000 && !depthGreaterThan( G, 4) && ell <= 7 && basicCellSizeSum <= G->degree / 10; m1 = (options.maxBaseChangeLevel > 1 ) ? 4 : (options.maxBaseChangeLevel > 0 ) ? 3 : 2; passes = (options.maxBaseChangeLevel > 0 ) ? 2 : 1; if ( numberOfGens + 20 >= options.maxStrongGens ) ++passes; for ( r = 1 ; r <= G->baseSize ; ++r ) { m2 = ( r == 1 ) ? 4 : ( r == 2 ) ? 8 : ( r == 3 ) ? 4 : ( r == 4 ) ? 2 : 1 ; orbLen = G->basicOrbLen[r]; goal[r] = 2 + (orbLen > 8 * m1 * m2) + (orbLen > 512 * m1 * m2) + (orbLen > 16383 * m1 ); } for ( m3 = passes ; m3 >= 1 ; --m3 ) { for ( r = G->baseSize ; r >= 1 ; --r ) while ( (longRepLen[r] > 0 ? longRepLen[r] : (longRepLen[r] = reconstructBasicOrbit(G,r))) > goal[r]+m3-1+easy ) { if ( numberOfGens >= options.maxStrongGens ) break; pt = G->basicOrbit[r][G->basicOrbLen[r]]; newGen = newIdentityPerm( G->degree); while ( G->schreierVec[r][pt] != FIRST_IN_ORBIT ) { leftMultiply( newGen, G->schreierVec[r][pt] ); pt = G->schreierVec[r][pt]->invImage[pt]; } newGen->level = r; MAKE_NOT_ESSENTIAL_ALL( newGen); for ( i = 1 ; i <= r ; ++i ) { MAKE_ESSENTIAL_AT_LEVEL(newGen,i); longRepLen[i] = 0; } newGen->next = G->generator; G->generator = newGen; adjoinInverseGen( G, newGen); ++numberOfGens; } if ( numberOfGens >= options.maxStrongGens ) break; } freeIntArrayBaseSize( goal); } /*-------------------------- compressGroup --------------------------------*/ /* This function compresses a permutation group for which the complete orbit structure. After compression, the group must remain essentially constant, and it may not be freed with deletePermGroup. During compression, 1) G->startOfOrbitNo[i] is reduced to its exact size, whenever its exact size is <= half the degree. 2) G->basicOrbit[i] is made to point to a location in completeOrbit[i], and the contents of G->basicOrbit[i] is transferred to the appropriate locations in completeOrbit[i]. */ void compressGroup( PermGroup *const G) /* The group to be compressed. */ { Unsigned d, i, orbitCountPlus1; UnsignedS *oldStartOfOrbit, *oldBasicOrbit; /* Can't compress symmetric group. */ if ( IS_SYMMETRIC(G) ) return; /* Here we compress the startOfOrbitNo fields. */ for ( d = 1 ; d <= G->baseSize ; ++d ) { oldStartOfOrbit = G->startOfOrbitNo[d]; for ( orbitCountPlus1 = 1 ; oldStartOfOrbit[orbitCountPlus1] <= G->degree ; ++orbitCountPlus1 ) ; G->startOfOrbitNo[d] = (UnsignedS *) malloc( (orbitCountPlus1+1) * sizeof(UnsignedS) ); for ( i = 1 ; i <= orbitCountPlus1 ; ++i ) G->startOfOrbitNo[d][i] = oldStartOfOrbit[i]; } /* Here we compress the basic orbit fields. */ for ( d = 1 ; d <= G->baseSize ; ++d ) { oldBasicOrbit = G->basicOrbit[d]; G->basicOrbit[d] = G->completeOrbit[d] + G->startOfOrbitNo[d][ G->orbNumberOfPt[d][G->base[d]] ] - 1; for ( i = 1 ; i <= G->basicOrbLen[d] ; ++i ) G->basicOrbit[d][i] = oldBasicOrbit[i]; freeIntArrayDegree( oldBasicOrbit); } } /*-------------------------- compressAtLevel ------------------------------*/ /* This function acts like compressGroup, except that compression occurs only at one specified level). */ void compressAtLevel( PermGroup *const G, /* The group to be compressed. */ const Unsigned level) /* The level at which compression occurs. */ { Unsigned i, orbitCountPlus1; UnsignedS *oldStartOfOrbit, *oldBasicOrbit; /* Here we compress the startOfOrbitNo fields. */ oldStartOfOrbit = G->startOfOrbitNo[level]; for ( orbitCountPlus1 = 1 ; oldStartOfOrbit[orbitCountPlus1] <= G->degree ; ++orbitCountPlus1 ) ; G->startOfOrbitNo[level] = (UnsignedS *) malloc( (orbitCountPlus1+1) * sizeof(UnsignedS) ); for ( i = 1 ; i <= orbitCountPlus1 ; ++i ) G->startOfOrbitNo[level][i] = oldStartOfOrbit[i]; /* Here we compress the basic orbit fields. */ oldBasicOrbit = G->basicOrbit[level]; G->basicOrbit[level] = G->completeOrbit[level] + G->startOfOrbitNo[level][ G->orbNumberOfPt[level][G->base[level]] ] - 1; for ( i = 1 ; i <= G->basicOrbLen[level] ; ++i ) G->basicOrbit[level][i] = oldBasicOrbit[i]; freeIntArrayDegree( oldBasicOrbit); } #ifdef XXX /*-------------------------- sortGensByLevel ------------------------------*/ /* This function sorts the strong generators for a group in descending order according to the "level" field. Within a fixed level, involutory generators are placed before noninvolutory ones. */ void sortGensByLevel( PermGroup *const G) { Unsigned i; Permutation gen, previousGen, *involGen[MAX_BASE_SIZE+2] = {NULL}, *nonInvolGen[MAX_BASE_SIZE+2] = {NULL}; /* Here the generators are placed on separate forward-linked lists, two for each level (one for involutions, the other for non-involutions. */ for ( gen = G->generator ; gen ; gen = gen->next ) if ( isInvolutoryElt(gen) ) { gen->next = involGen[gen->level]; involGen[gen->level] = gen; } else { gen->next = nonInvolGen[gen->level]; nonInvolGen[gen->level] = gen; } G->generator = NULL; /* Now we reform a singly-linked list of the generators in sorted order. */ for ( i = 1 ; i <= G->baseSize ; ++i ) { if ( nonInvolGen[i] ) { oldListHeader = G->generator; G->generator = involGen[i]; for ( gen = G->generator ; gen->next ; gen = gen->next ) ; gen->next = oldListHeader; } if ( involGen[i] ) { oldListHeader = G->generator; G->generator = involGen[i]; for ( gen = G->generator ; gen->next ; gen = gen->next ) ; gen->next = oldListHeader; } } /* Finally we reconstruct the backward links. */ previousGen = NULL; for ( gen = G->generator ; gen ; gen = gen->next ) { gen->last = previousGen; previousGen = gen; } } #endif guava-3.6/src/leon/src/ptstbref.c0000644017361200001450000002112311026723452016653 0ustar tabbottcrontab/* File ptstbref.c. Contains functions relating to refinements based on the point stabilizer property (the refinements SSS_{alpha,i} in the reference), as follows: pointStabRefine: A refinement family based on the point stabilizer property. isPointStabReducible: A function to checks whether the top partition on a partition stack is SSS-reducible and returns a refinement acting nontrivially on the top partition if so. */ #include "group.h" #include "partn.h" #include "cstrbas.h" #include "errmesg.h" CHECK( ptstbr) extern GroupOptions options; extern UnsignedS (*chooseNextBasePoint)( const PermGroup *const G, const PartitionStack *const UpsilonStack); /*-------------------------- pointStabRefine ------------------------------*/ /* The function implements the refinement family pointStabRefine (denoted SSS_alpha in the reference). This family consists of the elementary refinements ssS_{alpha,i}, where alpha is in Omega and where 1 <= i <= degree. Application of sSS_{alpha,i} to UpsilonStack splits off point alpha from cell i of the top partition of UpsilonStack and pushes the resulting partition onto UpsilonStack, unless sSS_{alpha,i} acts trivially on the top partition, in which case UpsilonStack remains unchanged. The refinement parameters are as follows: refnParm[0].intParm: alpha, refnParm[1].intParm: i. There are no refinement family parameters. */ SplitSize pointStabRefine( const RefinementParm familyParm[], /* No family parms. */ const RefinementParm refnParm[], /* parm[0] = alpha, parm[1] = i. */ PartitionStack *const UpsilonStack) /* The partition stack, as above. */ { const Unsigned alpha = refnParm[0].intParm, cellToSplit = refnParm[1].intParm; Unsigned oldAlphaPosition, newAlphaPosition, temp; Unsigned height = UpsilonStack->height; UnsignedS *const pointList = UpsilonStack->pointList, *const invPointList = UpsilonStack->invPointList, *const cellNumber = UpsilonStack->cellNumber, *const parent = UpsilonStack->parent, *const startCell = UpsilonStack->startCell, *const cellSize = UpsilonStack->cellSize; SplitSize split; /* First check if the refinement acts nontrivially on UpsilonTop. If not return immediately. */ if ( cellNumber[alpha] != cellToSplit || cellSize[cellToSplit] == 1 ) { split.oldCellSize = cellSize[cellToSplit]; split.newCellSize = 0; return split; } /* Now split cell cellToSplit of UpsilonTop. */ oldAlphaPosition = invPointList[alpha]; newAlphaPosition = startCell[cellToSplit] + cellSize[cellToSplit] - 1; EXCHANGE( pointList[oldAlphaPosition], pointList[newAlphaPosition], temp) EXCHANGE( invPointList[pointList[oldAlphaPosition]], invPointList[pointList[newAlphaPosition]], temp) ++height; ++UpsilonStack->height; cellNumber[alpha] = height; startCell[height] = newAlphaPosition; parent[height] = cellToSplit; cellSize[height] = 1; --cellSize[cellToSplit]; /* Set the return value and return to caller. */ split.oldCellSize = cellSize[cellToSplit]; split.newCellSize = 1; return split; } /*-------------------------- isPointStabReducible -------------------------*/ /* The function isPointStabReducible checks whether the top partition UpsilonTop on given partition stack UpsilonStack is SSS_alpha-reducible. (In applications, it will be.) Assuming so, it returns a refinement-priority pair consisting of a refinement acting nontrivially on UpsilonTop and a priority. The priority (included for consistency, but not normally used) will be very high. The refinement will be sSS_{alpha,i}, where i is such that cell i of UpsilonTop containing alpha, and where alpha is chosen to minimize the expression (size of cell in UpsilonTop of alpha) / (orbit length in G^(level) of alpha) ^ 3 / 1.2 ^ (number of i < level with alpha in same cell of Pi_{i-1} as base[i]), subject to alpha lying in a cell of size at least 2 in UpsilonTop. If UpsilonTop is SSS-irreducible, the priority in the return value is set to IRREDUCIBLE, and the refinement is undefined. This function must be called only from function constructRBase during R-base construction. */ RefinementPriorityPair isPointStabReducible( const RefinementFamily *family, /* The refinement family (mapping must be pointStabRefn; there are no genuine parms. */ const PartitionStack *const UpsilonStack, /* The partition stack above. */ PermGroup *G, /* For optimization. */ RBase *AAA, /* For optimization. */ Unsigned level) /* For optimization. */ { Unsigned pt, orbitNo, i, alpha; #ifndef NOFLOAT float priority, minPriority, orbitLen; #endif #ifdef NOFLOAT unsigned long priority, minPriority, orbitLen, cubeRoot; #endif RefinementPriorityPair reducingRefn; const Unsigned degree = UpsilonStack->degree; const UnsignedS *const cellNumber = UpsilonStack->cellNumber, *const cellSize = UpsilonStack->cellSize; /* Check that the refinement mapping really is pointStabRefn, as required. */ if ( family->refine != pointStabRefine ) ERROR( "isPointStabReducible", "Error: incorrect refinement mapping"); /* Here we compute an internal priority for each possible value of alpha and find which alpha minimizes the priority. Note the internal priority is not the priority in the return value. */ alpha = 0; if ( options.alphaHat1 >= 1 && options.alphaHat1 <= degree && cellSize[cellNumber[options.alphaHat1]] > 1 ) alpha = options.alphaHat1; else if ( chooseNextBasePoint ) alpha = chooseNextBasePoint( G, UpsilonStack); else if ( !IS_SYMMETRIC(G) ) for ( pt = 1 ; pt <= degree ; ++pt ) { if ( cellSize[cellNumber[pt]] > 1 ) { #ifndef NOFLOAT priority = ( cellSize[cellNumber[pt]] >= options.idealBasicCellSize ) ? (float) cellSize[cellNumber[pt]] : (float) (2 * options.idealBasicCellSize - cellSize[cellNumber[pt]]); orbitNo = G->orbNumberOfPt[level][pt]; orbitLen = (float) (G->startOfOrbitNo[level][orbitNo+1] - G->startOfOrbitNo[level][orbitNo]); priority *= priority * priority; priority /= orbitLen; for ( i = 1 ; i < level ; ++i) if ( cellNumberAtDepth( AAA->PsiStack, i, pt) == AAA->p_[i] ) priority /= 1.2; #endif #ifdef NOFLOAT priority = ( cellSize[cellNumber[pt]] >= options.idealBasicCellSize ) ? (unsigned long) cellSize[cellNumber[pt]] : (unsigned long) (2 * options.idealBasicCellSize - cellSize[cellNumber[pt]]); orbitNo = G->orbNumberOfPt[level][pt]; orbitLen = G->startOfOrbitNo[level][orbitNo+1] - G->startOfOrbitNo[level][orbitNo]; for ( cubeRoot = 1 ; cubeRoot * cubeRoot * cubeRoot <= orbitLen ; ++cubeRoot ) ; priority /= cubeRoot - 1; for ( i = 1 ; i < level ; ++i) if ( cellNumberAtDepth( AAA->PsiStack, i, pt) == AAA->p_[i] ) { priority *= 11; priority /= 12; } #endif if ( alpha == 0 || priority < minPriority ) { minPriority = priority; alpha = pt; } } } else for ( pt = 1 ; pt <= degree ; ++pt ) if ( cellSize[cellNumber[pt]] > 1 ) { priority = cellSize[cellNumber[pt]]; if ( alpha == 0 || priority < minPriority ) { minPriority = priority; alpha = pt; } } /* Set return value and return to caller. */ if ( alpha == 0 ) reducingRefn.priority = IRREDUCIBLE; else { reducingRefn.refn.family = (RefinementFamily *) family; reducingRefn.refn.refnParm[0].intParm = alpha; reducingRefn.refn.refnParm[1].intParm = cellNumber[alpha]; reducingRefn.priority = 30000; } return reducingRefn; } guava-3.6/src/leon/src/wtdist.c0000644017361200001450000010574611026723452016356 0ustar tabbottcrontab/* File wtdist.c. */ /* Copyright (C) 1992 by Jeffrey S. Leon. This software may be used freely for educational and research purposes. Any other use requires permission from the author. */ /* Highly optimized main program to compute weight distribution of a linear code The command format is wtdist or wtdist where in the second case all vectors of weight (except scalar multiples) are saved as a matrix whose rows are the vectors. If the -1 option is coded, only one vector of this weight is saved. If there are no vectors of the given weight, the matrix is not created. For most binary codes, bit string operations on vectors are used. For nonbinary codes (and for binary codes whose parameters fail to meet certain constraints), several columns of each codeword are packed into a single integer in order to make computations much faster, for large codes, than would otherwise be possible. The number of columns packed into a single integer is referred to as the "packing factor". It may be specified explicitly by the -pf option (within limits) or allowed to default. Optimal choice of the packing factor can improve performance considerably. Let the code be an (n,k) code over GF(q), where q = p^e. Let F(x) = a[0] + a[1]*x + ... + a[e]*x^e be the irreducible polynomial over GF(p) used to construct GF(q). The elements of GF(q) are represented as integers in the range 0..q-1, where field element g[0] + g[1]*x + ... + g[e-1]*x^(e-1) is represented by the integer g[0] + g[1] * q + ... + g[e-1] * q^(e-1). Let P denote the packing factor. In order to save space and time, up to P components of a vector over GF(q) are represented as a single integer in the range 0..(q^P-1). Specifically, the sequence of components b[i],b[i+1],...,b[i+P-1] is represented by the integer b[i] + b[i+1] * q + ... + b[i+P-1] * q^(P-1). The integer representing a sequence of field elements (components) is referred to as a "packed field sequence". The number of packed field sequences required to represent one codeword is called the "packed length" of the code; it equals ceil(n/P). The set of columns of the code corresponding to a packed field sequence is referred to as a "packed column". The packing factor P must satisfy the constraints i) P <= MaxPackingFactor, ii) FieldSize ^ P - 1 <= MaxPackedInteger, iii) ceil(n/P) <= MaxPackedLength, where MaxPackingFactor, MaxPackedInteger, and MaxPackedLength are symbolic constant (see above). In general, a large packing factor will increase memory requirements and will increase the time required to initialize various tables, but it will decrease the time required to compute the weight distribution, once initialization has been completed. The largest single data structure contains e * k * q^P * MaxPackedLength * r bytes, where r is the number of bytes used to represent type 0..MaxPackedInteger. In general, a relatively small packing factor (say 8 for binary codes) is indicated for codes of moderate size. For large codes, a larger packing factor (say 12 for binary codes) leads to lower execution times, at the cost of a higher memory requirement. The user may specify the value of the packing factor in the input, subject to the limits specified above. An input value of 0 will cause the program to choose a default value, which may not give as good performance as a user-specified value. */ /* Note: BINARY_CUTOFF_DIMENSION must be at least 3. */ #define BINARY_CUTOFF_DIMENSION 12 #define DEFAULT_INIT_ALLOC_SIZE 10000 #include #include #include #include #include #ifdef HUGE #include #endif #define MAIN #include "group.h" #include "groupio.h" #include "errmesg.h" #include "field.h" #include "new.h" #include "readdes.h" #include "storage.h" #include "token.h" #include "util.h" GroupOptions options; static void verifyOptions(void); static void binaryWeightDist( const Code *const C, const Unsigned saveWeight, const BOOLEAN oneCodeWordOnly, Unsigned *const allocatedSize, unsigned long *const freq, Matrix_01 *const matrix); static void generalWeightDist( const Code *const C, Unsigned saveWeight, const BOOLEAN oneCodeWordOnly, const Unsigned packingFactor, const Unsigned largestPackedInteger, const Unsigned packedLength, Unsigned *const allocatedSize, unsigned long *const freq, Matrix_01 *matrix); static void binaryCosetWeightDist( const Code *const C, const Unsigned maxCosetWeight, const BOOLEAN oneCodeWordOnly, const Unsigned passes, Unsigned *const allocatedSize, unsigned long *const freq, Matrix_01 *const matrix); int main( int argc, char *argv[]) { char codeFileName[MAX_FILE_NAME_LENGTH] = "", matrixFileName[MAX_FILE_NAME_LENGTH] = ""; Unsigned i, j, temp, optionCountPlus1, packingFactor, packedLength, largestPackedInteger, saveWeight, allocatedSize, maxCosetWeight, passes; char matrixObjectName[MAX_NAME_LENGTH+1] = "", codeLibraryName[MAX_NAME_LENGTH+1] = "", matrixLibraryName[MAX_NAME_LENGTH+1] = "", prefix[MAX_FILE_NAME_LENGTH], suffix[MAX_NAME_LENGTH]; Code *C; Matrix_01 *matrix; BOOLEAN saveCodeWords, oneCodeWordOnly, defaultForBinaryProcedure, useBinaryProcedure = FALSE, cWtDistFlag; char comment[100]; unsigned long *freq = malloc( (MAX_CODE_LENGTH+2) * sizeof(unsigned long)); /* Provide help if no arguments are specified. */ if ( argc == 1 ) { printf( "\nUsage: wtdist [options] code [saveWeight matrix]\n"); return 0; } /* Check for limits option. If present in position 1, give limits and return. */ if ( strcmp(argv[1], "-l") == 0 || strcmp(argv[1], "-L") == 0 ) { showLimits(); return 0; } /* Check for verify option. If present in position 1, perform verify (Note verifyOptions terminates program). */ if ( strcmp(argv[1], "-v") == 0 || strcmp(argv[1], "-V") == 0 ) verifyOptions(); /* Check for exactly 1 or 3 parameters following options. */ for ( optionCountPlus1 = 1 ; optionCountPlus1 < argc && argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 ) ; if ( argc - optionCountPlus1 < 1 && argc - optionCountPlus1 > 3 ) { ERROR( "main (wtdist)", "1, 2 or 3 non-option parameters are required."); exit(ERROR_RETURN_CODE); } saveCodeWords = (argc - optionCountPlus1 == 3); /* Process options. */ prefix[0] = '\0'; suffix[0] = '\0'; options.inform = TRUE; packingFactor = 0; cWtDistFlag = FALSE; oneCodeWordOnly = FALSE; defaultForBinaryProcedure = TRUE; allocatedSize = 0; parseLibraryName( argv[optionCountPlus1+2], "", "", matrixFileName, matrixLibraryName); strncpy( options.genNamePrefix, matrixLibraryName, 4); options.genNamePrefix[4] = '\0'; strcpy( options.outputFileMode, "w"); /* Retrieve command-line options. */ for ( i = 1 ; i < optionCountPlus1 ; ++i ) { for ( j = 1 ; argv[i][j] != ':' && argv[i][j] != '\0' ; ++j ) #ifdef EBCDIC argv[i][j] = ( argv[i][j] >= 'A' && argv[i][j] <= 'I' || argv[i][j] >= 'J' && argv[i][j] <= 'R' || argv[i][j] >= 'S' && argv[i][j] <= 'Z' ) ? (argv[i][j] + 'a' - 'A') : argv[i][j]; #else argv[i][j] = (argv[i][j] >= 'A' && argv[i][j] <= 'Z') ? (argv[i][j] + 'a' - 'A') : argv[i][j]; #endif errno = 0; if ( strcmp( argv[i], "-a") == 0 ) strcpy( options.outputFileMode, "a"); else if ( strcmp( argv[i], "-cwtdist") == 0 ) { cWtDistFlag = TRUE; } else if ( strncmp( argv[i], "-p:", 3) == 0 ) { strcpy( prefix, argv[i]+3); } else if ( strncmp( argv[i], "-t:", 3) == 0 ) { strcpy( suffix, argv[i]+3); } else if ( strncmp( argv[i], "-n:", 3) == 0 ) if ( isValidName( argv[i]+3) ) strcpy( matrixObjectName, argv[i]+3); else ERROR1s( "main (wtdist)", "Invalid name ", matrixObjectName, " for codewords to be saved.") else if ( strcmp( argv[i], "-q") == 0 ) options.inform = FALSE; else if ( strcmp( argv[i], "-overwrite") == 0 ) strcpy( options.outputFileMode, "w"); else if ( strcmp( argv[i], "-b") == 0 ) { defaultForBinaryProcedure = FALSE; useBinaryProcedure = TRUE; } else if ( strcmp( argv[i], "-g") == 0 ) { defaultForBinaryProcedure = FALSE; useBinaryProcedure = FALSE; } else if ( strncmp( argv[i], "-pf:", 4) == 0 ) { errno = 0; packingFactor = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (wtdist)", "Invalid syntax for -pf option") } else if ( strncmp( argv[i], "-s:", 3) == 0 ) { errno = 0; allocatedSize = (Unsigned) strtol(argv[i]+3,NULL,0); if ( errno ) ERROR( "main (wtdist)", "Invalid syntax for -s option") } else if ( strcmp( argv[i], "-1") == 0 ) oneCodeWordOnly = TRUE; else ERROR1s( "main (compute subgroup)", "Invalid option ", argv[i], ".") } options.maxBaseSize = DEFAULT_MAX_BASE_SIZE; options.maxWordLength = 200 + 5 * options.maxBaseSize; options.maxDegree = MAX_INT - 2 - options.maxBaseSize; if ( cWtDistFlag ) maxCosetWeight = saveWeight; /* Compute names for files and name for matrix of codewords saved. Also determine weight of codewords to save. */ parseLibraryName( argv[optionCountPlus1], prefix, suffix, codeFileName, codeLibraryName); if ( saveCodeWords ) { errno = 0; saveWeight = (Unsigned) strtol(argv[optionCountPlus1+1], NULL, 0); if ( errno ) ERROR( "main (wtdist)", "Invalid syntax weight to save.") parseLibraryName( argv[optionCountPlus1+2], prefix, suffix, matrixFileName, matrixLibraryName); if ( matrixObjectName[0] == '\0' ) strncpy( matrixObjectName, matrixLibraryName, MAX_NAME_LENGTH+1); } else saveWeight = UNKNOWN; /* Read in the code. */ C = readCode( codeFileName, codeLibraryName, TRUE, 0, 0, 0); /* Partially allocate matrix for saving codewords. Compute initial allocatedSize, unless specified as input. */ if ( saveCodeWords ) { if ( allocatedSize == 0 ) allocatedSize = DEFAULT_INIT_ALLOC_SIZE; matrix = (Matrix_01 *) malloc( sizeof(Matrix_01) ); if ( !matrix ) ERROR( "main (wtdist)", "Out of memory.") matrix->unused = NULL; matrix->field = NULL; matrix->entry = (FieldElement **) malloc( sizeof(FieldElement *) * (allocatedSize+2) ); if ( !matrix->entry ) ERROR( "main (wtdist)", "Out of memory.") matrix->setSize = C->fieldSize; matrix->numberOfRows = 0; matrix->numberOfCols = C->length; } #ifdef xxxxxx /* If a coset weight distribution is requested, check the size limits, call cosetWeightDist if ok, and return. */ if ( cWtDistFlag ) { if ( C->fieldSize != 2 || C->length > 128 || C->length - C->dimension > 32 ) ERROR( "main (wtdist)", "Coset weight dist requires binary code, length <= 128, codimension <= 32.") binaryCosetWeightDist( C, maxCosetWeight, oneCodeWordOnly, passes, &allocatedSize, matrix); return 0; } #endif /* Decide whether to use binary or general procedure. The general procedure is used on binary codes of small dimension. */ if ( defaultForBinaryProcedure ) useBinaryProcedure &= (C->fieldSize == 2 && C->length <= 128 && C->dimension > BINARY_CUTOFF_DIMENSION); else if ( useBinaryProcedure && (C->fieldSize != 2 || C->length > 128 || C->dimension <= 3) ) { useBinaryProcedure = FALSE; if ( options.inform ) printf( "\n\n Special binary procedure cannot be used.\n"); } /* If the general procedure is to be used, determine the packing factor if one was not specified. Determine the packed length and the largest packed integer. */ if ( !useBinaryProcedure ) { if ( packingFactor == 0 ) { packingFactor = 1; largestPackedInteger = C->fieldSize; while ( (largestPackedInteger <= 0x7fff / C->fieldSize) && (packingFactor <= C->dimension / 2) ) { ++packingFactor; largestPackedInteger *= C->fieldSize; } --largestPackedInteger; } else { temp = 1; largestPackedInteger = C->fieldSize; while ( (largestPackedInteger <= 0x7fff / C->fieldSize) && (temp < packingFactor) ) { ++temp; largestPackedInteger *= C->fieldSize; } packingFactor = temp; --largestPackedInteger; } packedLength = (C->length + packingFactor - 1) / packingFactor; } /* Compute the weight distribution. */ if ( useBinaryProcedure ) binaryWeightDist( C, saveWeight, oneCodeWordOnly, &allocatedSize, freq, matrix); else generalWeightDist( C, saveWeight, oneCodeWordOnly, packingFactor, largestPackedInteger, packedLength, &allocatedSize, freq, matrix); /* Write out the weight distribution. */ if ( options.inform ) { printf( "\n\n Weight Distribution of code %s", C->name); printf( "\n\n Weight Frequency"); printf( "\n ------ ---------"); for ( i = 0 ; i <= C->length ; ++i ) if ( freq[i] != 0 ) printf( "\n %3u %10lu", i, freq[i]); printf( "\n"); } /* Write out the codewords of weight saveWeight. */ if ( saveCodeWords && matrix->numberOfRows > 0 ) { if ( oneCodeWordOnly ) sprintf( comment, "One codeword of weight %u in code %s.", saveWeight, C->name); else if ( C->fieldSize == 2 ) sprintf( comment, "The %u codewords of weight %u in code %s.", matrix->numberOfRows, saveWeight, C->name); else sprintf( comment, "%u of %u codewords of weight %u in code %s" " (scalar multiples excluded).", matrix->numberOfRows, matrix->numberOfRows * (C->fieldSize-1), saveWeight, C->name); strcpy( matrix->name, matrixObjectName); write01Matrix( matrixFileName, matrixLibraryName, matrix, FALSE, comment); } if ( saveCodeWords ) { deleteMatrix(matrix, matrix->numberOfRows);//free(matrix->entry); //free(matrix); } free(freq); free(C->infoSet); deleteMatrix((Matrix_01 *)C, C->dimension); return 0; } /*-------------------------- packBinaryCodeWord ---------------------------*/ void packBinaryCodeWord( const Unsigned length, const FieldElement *const codeWordToPack, unsigned long *const packedWord1, unsigned long *const packedWord2, unsigned long *const packedWord3, unsigned long *const packedWord4) { Unsigned col; *packedWord1 = *packedWord2 = *packedWord3 = *packedWord4 = 0; for ( col = 1 ; col <= length ; ++col ) if ( col <= 32 ) *packedWord1 |= codeWordToPack[col] << (col-1); else if (col <= 64 ) *packedWord2 |= codeWordToPack[col] << (col-33); else if (col <= 96 ) *packedWord3 |= codeWordToPack[col] << (col-65); else if (col <= 128 ) *packedWord4 |= codeWordToPack[col] << (col-97); } /*-------------------------- buildOnesCount -------------------------------*/ /* This function allocates and constructs an array of size 2^16 in which entry i contains the number of ones in the binary representation of i, 0 <= i < 2^16. It returns (a pointer to) the array. It is assumed that type short has length 16 bits. */ #ifdef HUGE char huge *buildOnesCount(void) #else char *buildOnesCount(void) #endif { long i, j; #ifdef HUGE char huge *onesCount = (char huge *) farmalloc( 65536L * sizeof(char) ); #else char *onesCount = (char *) malloc( 65536L * sizeof(char) ); #endif if ( !onesCount ) ERROR( "buildOnesCount", "Not enough memory to run program. Program terminated.") for ( i = 0 ; i <= 65535L ; ++i ) { onesCount[i] = 0; for ( j = 0 ; j <= 15 ; ++j ) onesCount[i] += ( i & (1 << j)) != 0; } return onesCount; } /*-------------------------- binaryWeightDist ----------------------------*/ /* Assumes length <= 128. */ #define SAVE if ( curWt == saveWeight ) { \ if ( ++matrix->numberOfRows > *allocatedSize ) { \ *allocatedSize *= 2; \ matrix->entry = (FieldElement **) realloc( matrix->entry, \ *allocatedSize); \ } \ if ( !matrix->entry ) \ ERROR( "binaryWeightDist", "Out of memory.") \ vec = matrix->entry[matrix->numberOfRows] = (FieldElement *) \ malloc( (C->length+1) * sizeof(FieldElement) ); \ if ( !vec ) \ ERROR( "binaryWeightDist", "Out of memory.") \ for ( j = 0 ; j < length ; ++j ) \ if ( j < 32 ) \ vec[j+1] = ((cw1 >> j) & 1); \ else if ( j < 64 ) \ vec[j+1] = ((cw2 >> j-32) & 1); \ else if ( j < 96 ) \ vec[j+1] = ((cw3 >> j-64) & 1); \ else if ( j < 128 ) \ vec[j+1] = ((cw4 >> j-96) & 1); \ if ( oneCodeWordOnly ) \ saveWeight = UNKNOWN; \ } void binaryWeightDist( const Code *const C, Unsigned saveWeight, const BOOLEAN oneCodeWordOnly, Unsigned *const allocatedSize, unsigned long *const freq, Matrix_01 *const matrix) { Unsigned length = C->length, dimension = C->dimension, i, j, curWt; FieldElement *vec; unsigned long m; #ifdef HUGE char huge *onesCount = buildOnesCount(); #else char *onesCount = buildOnesCount(); #endif unsigned long basis1[35], basis2[35], basis3[35], basis4[35]; unsigned long cw1, cw2, cw3, cw4; unsigned long loopIndex, lastPass, temp; /* Initializations. */ for ( i = 0 ; i <=C->length ; ++i ) freq[i] = 0; cw1 = cw2 = cw3 = cw4 = 0; /* Pack the code words. */ for ( i = 1 ; i <= C->dimension ; ++i ) packBinaryCodeWord( C->length, C->basis[i], &basis1[i-1], &basis2[i-1], &basis3[i-1], &basis4[i-1]); /* Enumerate the codewords. */ lastPass = (1L << (dimension-3)) - 1; if ( saveWeight == UNKNOWN ) { if ( length <= 32 ) #define MAXLEN 32 #include "wt.h" else if ( length <= 48 ) #define MAXLEN 48 #include "wt.h" else if ( length <= 64 ) #define MAXLEN 64 #include "wt.h" else if ( length <= 80 ) #define MAXLEN 80 #include "wt.h" else if ( length <= 96 ) #define MAXLEN 96 #include "wt.h" else if ( length <= 112 ) #define MAXLEN 112 #include "wt.h" else if ( length <= 128 ) #define MAXLEN 128 #include "wt.h" } else if ( length <= 32 ) #define MAXLEN 32 #include "swt.h" else if ( length <= 48 ) #define MAXLEN 48 #include "swt.h" else if ( length <= 64 ) #define MAXLEN 64 #include "swt.h" else if ( length <= 80 ) #define MAXLEN 80 #include "swt.h" else if ( length <= 96 ) #define MAXLEN 96 #include "swt.h" else if ( length <= 112 ) #define MAXLEN 112 #include "swt.h" else if ( length <= 128 ) #define MAXLEN 128 #include "swt.h" } /*-------------------------- buildWeightArray -------------------------------------*/ /* The procedure BuildWeightArray constructs the array Weight of size 0..LargestPackedInteger. For t = 0,1,...,HighPackedInteger, Weight[t] is set to the number of nonzero field elements in the sequence of PackingFactor field elements represented by integer t. */ char *buildWeightArray( const Unsigned fieldSize, /* Size of the field. */ const Unsigned packingFactor, /* No of cols packed into integer. */ const Unsigned largestPackedInteger) { Unsigned i, v; char *weight; weight = (char *) malloc( sizeof(char) * (largestPackedInteger+1) ); if ( !weight ) ERROR( "buildWeightArray", "Out of memory."); for ( i = 0 ; i <= largestPackedInteger ; ++i ) { weight[i] = 0; v = i; while ( v > 0 ) { if ( v % fieldSize ) ++weight[i]; v /= fieldSize; } } return weight; } /*-------------------------- packNonBinaryCodeWord --------------------------------*/ /* This procedure packs a codeword over a field of size greater than 2. (If the field size is 2, it works, but it returns an array of type unsigned short, whereas type unsigned would be preferable.) It returns a new packed code word which is obtained by packing the code word supplied as a parameter. If p denotes the PackingFactor, then p columns of the input codeword (Word) are packed into each integer of the output packed codeword (PackedWord). If q denotes the field size and if c(1),...,c(n) denotes the input codeword, then the output packed word will have components c(1)+c(2)*q+...+c(p)*q**(p-1), c(p+1)+c(p+2)*q+...+c(2*p)*q**(p-1), etc. */ unsigned short *packNonBinaryCodeWord( const Unsigned fieldSize, /* Field size for codeword. */ const Unsigned length, /* Length of codeword to pack. */ const Unsigned packingFactor, /* No of cols packed into integer. */ const FieldElement *codeWord) /* The codeword to pack. */ { Unsigned index = 0, offset = 0, col, powerOfFieldSize = 1; const Unsigned colsPerArrayElt = (length+packingFactor) / packingFactor; unsigned short *packedCodeWord; packedCodeWord = (unsigned short *) malloc( colsPerArrayElt * sizeof(unsigned short *)); if ( !packedCodeWord ) ERROR( "packNonBinaryCodeWord", "Out of memory."); packedCodeWord[0] = 0; for ( col = 1 ; col <= length ; ++col ) { if ( offset >= packingFactor ) { packedCodeWord[++index] = 0; offset = 0; powerOfFieldSize = 1; } packedCodeWord[index] += codeWord[col] * powerOfFieldSize; ++offset; powerOfFieldSize *= fieldSize; } return packedCodeWord; } /*-------------------------- unpackNonBinaryCodeWord --------------------------------*/ /* This procedure unpacks a codeword over a field of size greater than 2. It performs the reverse of the packNonBinaryCodeword procedure above. */ void unpackNonBinaryCodeWord( const Unsigned fieldSize, /* Field size for codeword. */ const Unsigned length, /* Length of codeword to unpack. */ const Unsigned packingFactor, /* No of cols packed into integer. */ const unsigned short *packedCodeWord, /* The codeword to unpack pack. */ FieldElement *const codeWord) /* Set to unpacked code word. */ { Unsigned index = 0, offset = 0, col, temp; temp = packedCodeWord[0]; for ( col = 1 ; col <= length ; ++col ) { if ( offset >= packingFactor ) { temp = packedCodeWord[++index]; offset = 0; } codeWord[col] = temp % fieldSize; ++offset; temp /= fieldSize; } } /*-------------------------- buildAddBasisElement -----------------------------------*/ /* This procedure constructs a data structure AddBasisElement which specifies how to add a a prime-basis element to an arbitrary codeword. addBasisElement[i][p][j] gives the sum of packed column j of the i'th prime basis vector and packed field sequence k, for 1 <= i <= C->dimension * C->field->exponent, 0 <= j < packedLength, 0 <= p <= largestPackedInteger. */ unsigned short ***buildAddBasisElement( const Code *const C, const Unsigned packingFactor, const Unsigned packedLength, const Unsigned largestPackedInteger) { unsigned short ***addBasisElement; Unsigned a, h, i, j, k, m, z, primeRow; FieldElement s; FieldElement *x, *y; Unsigned *primeBasisVector; const Unsigned fieldExponent = (C->fieldSize == 2) ? 1 : C->field->exponent; const primeDimension = C->dimension * fieldExponent; primeBasisVector = (Unsigned *) malloc( (C->length+1) * sizeof(Unsigned)); if ( !primeBasisVector ) ERROR( "buildAddBasisElement", "Out of memory."); addBasisElement = (unsigned short ***) malloc( (primeDimension+1) * sizeof(unsigned short **)); if ( !addBasisElement ) ERROR( "buildAddBasisElement", "Out of memory."); x = (FieldElement *) malloc( (C->length+2) * sizeof(FieldElement)); if ( !x ) ERROR( "buildAddBasisElement", "Out of memory."); y = (FieldElement *) malloc( (C->length+2) * sizeof(FieldElement)); if ( !y ) ERROR( "buildAddBasisElement", "Out of memory."); for ( i = 1 , primeRow = 0 ; i <= C->dimension ; ++i ) for ( m = 0 ; m < fieldExponent ; ++m ) { /* This part works only for prime fields or GF(4). */ s = (m == 0) ? 1 : 2; ++primeRow; if ( m > 0 && C->fieldSize != 4 ) ERROR( "buildAddBasisElement", "Field whose order is not prime or 4.") if ( C->fieldSize == 2 ) for ( k = 1 ; k <= C->length ; ++k ) primeBasisVector[k] = C->basis[i][k]; else for ( k = 1 ; k <= C->length ; ++k ) primeBasisVector[k] = C->field->prod[C->basis[i][k]][s]; addBasisElement[primeRow] = (unsigned short **) malloc( (largestPackedInteger+1) * sizeof(unsigned short **)); if ( !addBasisElement[primeRow] ) ERROR( "buildAddBasisElement", "Out of memory.") for ( h = 1 ; h <= C->length ; ++h ) x[h] = 0; for ( z = 0 ; z <= largestPackedInteger ; ++z ) { if ( C->fieldSize == 2 ) for ( j = 1 ; j <= C->length ; ++j ) y[j] = primeBasisVector[j] ^ x[j]; else for ( j = 1 ; j <= C->length ; ++j ) y[j] = C->field->sum[primeBasisVector[j]][x[j]]; addBasisElement[primeRow][z] = packNonBinaryCodeWord( C->fieldSize, C->length, packingFactor, y); a = 1; while ( (a <= C->length) && (x[a] == C->fieldSize - 1 ) ) ++a; ++x[a]; for ( h = 1; h < a ; ++h) x[h] = 0; for ( h = packingFactor+1 ; h <= C->length ; ++h ) x[h] = x[h-packingFactor]; } } free(primeBasisVector); free(x); free(y); return addBasisElement; } /*-------------------------- destroyAddBasisElement -----------------------------------*/ /* This procedure destructs a data structure AddBasisElement */ void destroyAddBasisElement(unsigned short ***addBasisElement, int primeDimension, int largestPackedInteger) { int i, j; for (i = 1; i <= primeDimension; i++) { for (j = 0; j <= largestPackedInteger; j++) { free(addBasisElement[i][j]); } free(addBasisElement[i]); } free(addBasisElement); } /*-------------------------- generalWeightDist ----------------------------*/ void generalWeightDist( const Code *const C, Unsigned saveWeight, const BOOLEAN oneCodeWordOnly, const Unsigned packingFactor, const Unsigned largestPackedInteger, const Unsigned packedLength, Unsigned *const allocatedSize, unsigned long *const freq, Matrix_01 *matrix) { const Unsigned fieldExponent = (C->fieldSize == 2) ? 1 : C->field->exponent; const Unsigned fieldCharacteristic = (C->fieldSize == 2) ? 2 : C->field->characteristic; const Unsigned primeDimension = C->dimension * fieldExponent; Unsigned currentWeight, h, m, primeRow, packedCol, wt; char *weight; unsigned short ***addBasisElement; unsigned short *currentWord; /* Array of size packedLength+1 */ Unsigned *x; /* Array of size primeDimension+1 */ FieldElement *vec; /* Allocate the arrays x and currentWord. */ x = (Unsigned *) malloc( (primeDimension+1) * sizeof(Unsigned *)); if ( !x ) ERROR( "generalWeightDist", "Out of memory") currentWord = (unsigned short *) malloc( (packedLength+1) * sizeof(Unsigned *)); if ( !currentWord ) ERROR( "generalWeightDist", "Out of memory") /* Construct the weight array. */ weight = buildWeightArray( C->fieldSize, packingFactor, largestPackedInteger); /* Construct structure AddBasisElement, used to add a prime basis codeword to an arbitrary codeword. */ addBasisElement = buildAddBasisElement( C, packingFactor, packedLength, largestPackedInteger); /* Initialize freq and saveCount. Upon termination, freq will hold the weight distribution. */ for ( wt = 1 ; wt <= C->length ; ++wt ) freq[wt] = 0; freq[0] = 1; /* Traverse the code. */ for ( h = C->dimension ; h >= 1 ; --h ) { /* Traverse codewords of form 0*basis[1] +...+ 0*basis[h-1] + 1*basis[h] + (anything) * basis[h+1] +...+ (anything) * basis[k]), where k is the dimension. */ for ( primeRow = 0 ; primeRow <= primeDimension ; ++primeRow ) x[primeRow] = 0; for ( packedCol = 0 ; packedCol < packedLength ; ++packedCol ) currentWord[packedCol] = 0; m = (h - 1) * fieldExponent + 1; do { /* Add prime basis codeword m to current word and find weight of result. */ currentWeight = 0; for ( packedCol = 0 ; packedCol < packedLength ; ++packedCol ) { currentWord[packedCol] = addBasisElement[m][currentWord[packedCol]][packedCol]; currentWeight += weight[currentWord[packedCol]]; } /* Record weight. */ freq[currentWeight] += (C->fieldSize - 1); /* Save the codeword, if appropriate. */ if ( currentWeight == saveWeight ) { ++matrix->numberOfRows; if ( matrix->numberOfRows > *allocatedSize ) { *allocatedSize *= 2; matrix->entry = (FieldElement **) realloc( matrix->entry, *allocatedSize); if ( !matrix->entry ) ERROR( "binaryWeightDist", "Out of memory.") } vec = matrix->entry[matrix->numberOfRows] = malloc( (C->length+1) * sizeof(FieldElement) ); if ( !vec ) ERROR( "binaryWeightDist", "Out of memory.") unpackNonBinaryCodeWord( C->fieldSize, C->length, packingFactor, currentWord, vec); if ( oneCodeWordOnly ) saveWeight = UNKNOWN+1; } /* Find m such that prime basis codeword number X[m] is the basis codeword to add next. */ m = primeDimension; while ( x[m] == fieldCharacteristic - 1 ) --m; /* Adjust array X, which determines which basis codeword to add next. */ ++x[m]; for ( primeRow = m+1 ; primeRow <= primeDimension ; ++primeRow ) x[primeRow] = 0; } while ( m > h * fieldExponent ); } free(currentWord); free(x); free(weight); destroyAddBasisElement(addBasisElement, primeDimension, largestPackedInteger); } #ifdef xxxxxx /*-------------------------- binaryCosetWeightDist -----------------------*/ void binaryCosetWeightDist( const Code *const C, const Unsigned maxCosetWeight, const BOOLEAN oneCodeWordOnly, const Unsigned passes, Unsigned *const allocatedSize, unsigned long *const freq, Matrix_01 *const matrix) { unsigned long sum; const unsigned coDimension = C->length - C->dimension; const unsigned long numberOfCosetsLess1 = (2L << coDimension) - 1; const unsigned long maxCosetsPerPass = numberOfCosetsLess1 / passes + 1; /* Initializations. */ for ( i = 0 ; i <=C->length ; ++i ) freq[i] = 0; cw1 = cw2 = cw3 = cw4 = 0; for ( wt = 1 ; wt <= maxCosetWeight && cosetsFound <= goal ; ++wt ) { for ( i = 1 ; i <= wt ; ++i ) /* Write out the coset weight distribution. */ sumLess1 = 0; if ( options.inform ) { printf( "\n\n Coset Weight Distribution of code %s", C->name); printf( "\n\n Coset Min Wt Number Of Cosets"); printf( "\n ------------ ----------------"); for ( i = 0 ; i <= maxCosetWeight ; ++i ) if ( freq[i] != 0 ) if ( i != 0 ) sumLess1 += freq[i]; printf( "\n %2u %10lu", i, freq[i]); if ( sumLess1 < numberOfCosetsLess1 ) printf( "\n at least %2u %10lu", maxCosetWeight+1, numberOfCosetsLess1 - sumLess1); printf( "\n"); } #endif /*-------------------------- verifyOptions -------------------------------*/ static void verifyOptions(void) { CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH, MAX_PRIME_FACTORS, MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS, MAX_EXTRA, XLARGE, SGND, NFLT}; extern void xbitman( CompileOptions *cOpts); extern void xcode ( CompileOptions *cOpts); extern void xcopy ( CompileOptions *cOpts); extern void xerrmes( CompileOptions *cOpts); extern void xessent( CompileOptions *cOpts); extern void xfactor( CompileOptions *cOpts); extern void xfield ( CompileOptions *cOpts); extern void xnew ( CompileOptions *cOpts); extern void xpartn ( CompileOptions *cOpts); extern void xpermut( CompileOptions *cOpts); extern void xpermgr( CompileOptions *cOpts); extern void xprimes( CompileOptions *cOpts); extern void xreadde( CompileOptions *cOpts); extern void xstorag( CompileOptions *cOpts); extern void xtoken ( CompileOptions *cOpts); extern void xutil ( CompileOptions *cOpts); xbitman( &mainOpts); xcode ( &mainOpts); xcopy ( &mainOpts); xerrmes( &mainOpts); xessent( &mainOpts); xfactor( &mainOpts); xfield ( &mainOpts); xnew ( &mainOpts); xpartn ( &mainOpts); xpermut( &mainOpts); xpermgr( &mainOpts); xprimes( &mainOpts); xreadde( &mainOpts); xstorag( &mainOpts); xtoken ( &mainOpts); xutil ( &mainOpts); } guava-3.6/src/leon/src/settoinv.h0000644017361200001450000000213311026723452016702 0ustar tabbottcrontab/* Optimized macro to set one point list to the inverse of another. Two temporary variable of type Unsigned*, followed by three of type Unsigned, are required. The first three of the five temporary variables are good candidates for register variables. */ #define SET_TO_INVERSE( pointList, invPointList, listSize, \ ptr, invPtr, index, bound, pBound) \ ptr = pointList; \ invPtr = invPointList; \ index = 1; \ bound = listSize; \ pBound = (bound > 9 ) ? (bound - 9) : 0; \ while( index <= pBound ) { \ invPtr[ptr[index]] = index; ++index; \ invPtr[ptr[index]] = index; ++index; \ invPtr[ptr[index]] = index; ++index; \ invPtr[ptr[index]] = index; ++index; \ invPtr[ptr[index]] = index; ++index; \ invPtr[ptr[index]] = index; ++index; \ invPtr[ptr[index]] = index; ++index; \ invPtr[ptr[index]] = index; ++index; \ invPtr[ptr[index]] = index; ++index; \ invPtr[ptr[index]] = index; ++index; \ } \ while ( index <= bound ) { \ invPtr[ptr[index]] = index; ++index; \ } guava-3.6/src/leon/src/code.c0000644017361200001450000001112611026723452015736 0ustar tabbottcrontab/* File code.c. Contains miscellaneous functions for computations with binary codes. */ #include #include "group.h" #include "errmesg.h" #include "storage.h" CHECK( code) /*-------------------------- reduceBasis ----------------------------------*/ /* The function reduceBasis allocates an infoSet for a code (unless one is already allocated -- if so, it must have the right size) and then performs elementary row operations on the generator matrix in order to make entry infoSet[j],i equal to delta(i,j). */ void reduceBasis( Code *const C) { Unsigned row, col, i, j, mu; if ( !C->infoSet ) C->infoSet = malloc( (C->dimension+2) * sizeof(Unsigned) ); for ( row = 1 ; row <= C->dimension ; ++row ) { for ( col = 1 ; col <= C->length && C->basis[row][col] == 0; ++col ) ; if ( col > C->length ) ERROR( "reduceBasis", "Basis vectors not independent.") C->infoSet[row] = col; if ( C->fieldSize == 2 ) for ( i = 1 ; i <= C->dimension ; ++i ) if ( i != row && C->basis[i][col] != 0 ) for ( j = 1 ; j <= C->length ; ++j ) C->basis[i][j] ^= C->basis[row][j]; else ; else { mu = C->field->inv[C->basis[row][col]]; for ( j = 1 ; j <= C->length ; ++j ) C->basis[row][j] = C->field->prod[mu][C->basis[row][j]]; for ( i = 1 ; i <= C->dimension ; ++i ) if ( i != row && C->basis[i][col] != 0 ) { mu = C->basis[i][col]; for ( j = 1 ; j <= C->length ; ++j ) C->basis[i][j] = C->field->dif[C->basis[i][j]] [C->field->prod[mu][C->basis[row][j]]]; } } } } /*-------------------------- codeContainsVector ----------------------------*/ /* The function codeContainsVector( C, v) returns true is the vector v is contained in the code C and false otherwise. The vector v is destroyed. Here a vector is simply an array of characters. If C does not have a canonical basis, one is constructed. */ BOOLEAN codeContainsVector( Code *const C, char *const v) { Unsigned i, j, col, mu; /* If a canonical basis is not available for C, construct one. */ if ( !C->infoSet ) reduceBasis( C); /* Try to reduce v. */ for ( i = 1 ; i <= C->dimension ; ++i ) { col = C->infoSet[i]; if ( C->fieldSize == 2 ) { if ( v[col] != 0 ) for ( j = 1 ; j <= C->length ; ++j ) v[j] ^= C->basis[i][j]; } else if ( v[col] != 0 ) { mu = C->basis[i][col]; for ( j = 1 ; j <= C->length ; ++j ) v[j] = C->field->dif[v[j]][C->field->prod[mu][C->basis[i][j]]]; } } /* Check if reduction gave the zero vector. */ for ( j = 1 ; j <= C->length ; ++j ) if ( v[j] != 0 ) return FALSE; return TRUE; } /*-------------------------- isCodeIsomorphism ----------------------------*/ /* The function isCodeIsomorphism( C1, C2, s) returns TRUE if permutation s is an isomorphism of code C1 to code C2 and returns false otherwise. */ BOOLEAN isCodeIsomorphism( Code *const C1, Code *const C2, const Permutation *const s) { char *tempVec = allocBooleanArrayDegree(); Unsigned i, j, temp, mu, lambda; Unsigned collapsedDegree; if ( C1->length != C2->length || C1->dimension != C2->dimension || C1->length > s->degree ) ERROR( "isCodeIsomorphism", "Lengths or degrees not compatible.") /* If the field size exceeds 2, check that s satisfies monomial property. */ if ( C1->fieldSize > 2 ) { collapsedDegree = C1->length / (C1->fieldSize-1); for ( i = 1 ; i <= collapsedDegree ; ++i ) { /* Find mu,j such that s(1*i) = mu*j. */ temp = s->image[(C1->fieldSize-1)*(i-1)+1]; j = (temp-1) / (C1->fieldSize-1) + 1; mu = (temp-1) % (C1->fieldSize-1) + 1; for ( lambda = 2 ; lambda < C1->fieldSize ; ++lambda ) if ( s->image[(C1->fieldSize-1)*(i-1)+lambda] != (C1->fieldSize-1)*(j-1) + C1->field->prod[lambda][mu] ) { freeBooleanArrayDegree( tempVec); return FALSE; } } } /* Now check that each basis vector of C1 lies in C2. */ for ( i = 1 ; i <= C1->dimension ; ++i ) { for ( j = 1 ; j <= C1->length ; ++j ) tempVec[s->image[j]] = C1->basis[i][j]; if ( !codeContainsVector(C2,tempVec) ) { freeBooleanArrayDegree( tempVec); return FALSE; } } freeBooleanArrayDegree( tempVec); return TRUE; } guava-3.6/src/leon/src/compsg.c0000644017361200001450000005607711026723452016332 0ustar tabbottcrontab/* File compsg.c. */ /* Copyright (C) 1992 by Jeffrey S. Leon. This software may be used freely for educational and research purposes. Any other use requires permission from the author. */ /* Contains function computeSubgroup, which may be used to compute the subgroup G_pP a specified group G (with known base and strong generating set) consisting of those elements satisfying a specified subgroup-type property pP. One or more families RRR of pP-refinement processes must be supplied as input. One of these families should be the family OOO_G based on the orbit structure of G (unless G is the symmetric group of a very large subgroup of it). If a known subgroup L of G_pP is known in advance, the algorithm takes advantage of it. The function returns a newly-created group equal to G_pP. */ /* Since refinements are symmetric here, we define the following. */ #define familyParm familyParm_L #include #include #include #include #include #include "group.h" /* Bug fix for Waterloo C (IBM 370). */ #if defined(IBMCMSWC) && !defined(SIGNED) && !defined(EXTRA_LARGE) #define FIXUP (unsigned short) #define FIXUP1 short #else #define FIXUP #define FIXUP1 Unsigned #endif #ifdef ALT_TIME_HEADER #include "cputime.h" #endif #include "addsgen.h" #include "chbase.h" #include "copy.h" #include "cstrbas.h" #include "errmesg.h" #include "inform.h" #include "new.h" #include "optsvec.h" #include "orbit.h" #include "orbrefn.h" #include "partn.h" #include "permgrp.h" #include "permut.h" #include "ptstbref.h" #include "rprique.h" #include "storage.h" CHECK( compsg) extern GroupOptions options; RefinementFamily ptStabFamily = {pointStabRefine}; #define BACKTRACK \ {if ( options.statistics ) \ ++nodesPruned[d]; \ while ( d > 0 && RPQ_SIZE(Gamma[d]) < K->basicOrbLen[d] ) { \ if ( options.statistics ) { \ nodesVisited[d] += RPQ_SIZE(Gamma[d]); \ nodesPruned[d] += RPQ_SIZE(Gamma[d]); \ } \ --d; \ } \ h = AAA->n_[d]; \ if ( d > 0 ) { \ popToHeight( UpsilonStack, AAA->n_[d]); \ for ( m = 0 ; extra[m] ; ++m ) \ xPopToLevel( extra[m]->xUpsilonStack, \ extra[m]->applyAfter, AAA->n_[d]); \ f = AAA->invOmega[AAA->alphaHat[d]] - 1; \ for ( m = 0 ; m < orbRefnCount ; ++m ) { \ e[m] = q_[m][d] - 1; \ tHatWord[m].invWord[tHatWord[m].lengthAtLevel[d-1]] = NULL; \ tHatWord[m].revWord = initialRevWord[m] - \ tHatWord[m].lengthAtLevel[d-1]; \ } \ } \ continue;} static void buildDeltaList( PermGroup *G, /* The perm group (base/sgs known). */ UnsignedS *DeltaList[]); /* Set to the list that is constructed. */ /*-------------------------- Compute Subgroup -----------------------------*/ /* Given a permutation group G and a property pP such that G_pP (the subset of G consisting of those elements satisfying pP) is a subgroup of G, this function computes and returns a new permutation group equal to G_pP. In addition to G and pP, a family RRR of pP-refinement processes must be supplied as input to the function. This is supplied in the form of three array parameters: rRR, isReducible, and orbRefnGroup. Here *rRR[1],*rRR[2],... are families of pP-refinement processes. (See file group.h for representation of a refinement family.), and *isReducible[1],*isReducible[2],... are functions taking a partition stack UpsilonStack and a refinement family (with fixed refinement mapping) as parameters such that isReducible[i] a refinement-priority pair: If the top partition UpsilonTop on UpsilonStack is RRR-irreducible, a priority of IRREDUCIBLE is returned; otherwise a refinement acting nontrivially on UpsilonTop and a priority indicated the relative desirability of this refinement are returned. For most refinement families, orbRefnGroup will be NULL; when orbRefnGroup[i] is nonnull, computeSubgroup will pass extra information to the refinement rRR[i] and reducibility-check functions isReducible[i]. */ PermGroup *computeSubgroup( PermGroup *const G, /* The permutation group, as above. A base/sgs must be known (unless name is "symmetric"). */ Property *const pP, /* The subgroup-type property, as above. A value of NULL may be used to suppress checking pP.*/ RefinementFamily /* (Ptr to) null-terminated list of refinement */ *const RRR[], /* family pointers (List starts rrR[1].) */ ReducChkFn *const /* (Ptr to) null-terminated list of pointers */ isReducible[], /* to functions checking rRR-reducibility. */ SpecialRefinementDescriptor *const specialRefinement[], /* (Ptr to) list of permutation ptrs, some */ /* possibly null. For nonnull pointers, */ /* computeSubgroup will keep track of perm t. */ ExtraDomain *extra[], /* extra[1], extra[2], ... are extra domains. pointer terminates list. */ PermGroup *const L) /* A known (possibly trivial) subgroup of G_pP. (Null pointer signifies a trivial group.) */ { PermGroup *K, *altK; RBase *AAA; PartitionStack *UpsilonStack; THatWordType tHatWord[4]; UnsignedS **initialRevWord[4], **beginRevWord[4]; UnsignedS *betaHat = allocIntArrayBaseSize(); RPriorityQueue **Gamma = (RPriorityQueue **) allocPtrArrayBaseSize(); UnsignedS **DeltaList = /* DeltaList[d][1..] is a null- */ allocPtrArrayBaseSize(); /* terminated list of points i with */ /* alphahat[d] in Delta[i](K) */ Unsigned d, f, h, i, j, m, pt, delta, oldF, firstMoved; UnsignedS e[4]; UnsignedS *eta = allocIntArrayDegree(); UnsignedS* q_[4]; /* alloc (mbs+2)*sizeof(UnsignedS) each */ BOOLEAN backtrackFlag; UnsignedS *pp; UnsignedS **p; Unsigned maxBaseChangeLevel; SplitSize split, xSplit; UnsignedS **minPointOfOrbit = (UnsignedS **) allocPtrArrayBaseSize(); UnsignedS **minPointKnown = (UnsignedS **) allocPtrArrayBaseSize(); UnsignedS *minPointKnownCount = allocIntArrayBaseSize(); unsigned long *nodesVisited = allocLongArrayBaseSize(); unsigned long *nodesPruned = allocLongArrayBaseSize(); unsigned long *nodesEssential = allocLongArrayBaseSize(); UnsignedS *lastGeneratorBaseImage = allocIntArrayBaseSize(); Permutation *gen, *newPerm; clock_t RBaseTime, optGroupTime, backtrackTime, startTime; Unsigned orbRefnCount; UnsignedS *longRepLen = allocIntArrayBaseSize(); Unsigned newGenCount = 0; UnsignedS *basicCellSize = allocIntArrayBaseSize(); ExtraDomain *ex; /* Allocate q_. */ for ( i = 0 ; i <= 3 ; ++i ) q_[i] = allocIntArrayDegree(); /* Initialize nodesVisited and nodesPruned. */ for ( i = 0 ; i <= options.maxBaseSize+1 ; ++i ) nodesVisited[i] = nodesPruned[i] = 0; nodesVisited[0] = 1; /* Set orbRefnCount. */ for ( i = 0 ; specialRefinement[i] && specialRefinement[i]->refnType == 'O' ; ++i ) ; orbRefnCount = i; if ( options.inform ) { informOptions(); informGroup( G); } /* Figure 9, lines 3-4. These lines construct an rRR-base AAA for G. (The base and strong generating sets for G itself are changed. The base for L is not changed to alphaHat. A null terminator is added to base of the containing groups. */ startTime = CPU_TIME(); AAA = constructRBase( G, RRR, isReducible, specialRefinement, basicCellSize, extra); for ( m = 0 ; specialRefinement[m] ; ++m ) specialRefinement[m]->leftGroup->base [specialRefinement[m]->leftGroup->baseSize+1] = 0; deletePartitionStack( AAA->PsiStack); AAA->PsiStack = NULL; RBaseTime = CPU_TIME(); /* Now compression is done by level in constructRBase. if ( options.compress ) compressGroup( G); */ for ( gen = G->generator ; gen ; gen = gen->next ) adjoinInverseGen( G, gen); for ( i = 1 ; i <= G->baseSize ; ++i ) longRepLen[i] = reconstructBasicOrbit( G, i); if ( options.inform ) meanCosetRepLen( G); expandSGS( G, longRepLen, basicCellSize, AAA->ell); if ( options.inform ) meanCosetRepLen( G); optGroupTime = CPU_TIME(); /* Here we adjust each generator of G such that it maps 0 to 0 and degree+1 to degree+1. This is necessary for the procedure orbRefine. */ for ( gen = G->generator ; gen ; gen = gen->next ) { gen->image[0] = gen->invImage[0] = 0; gen->image[G->degree+1] = gen->invImage[G->degree+1] = G->degree+1; } maxBaseChangeLevel = MAX( 0, MIN( options.maxBaseChangeLevel, AAA->ell) ); firstMoved = AAA->ell + 1; if ( options.statistics ) for ( i = 0 ; i <= AAA->ell ; ++i ) { nodesEssential[i] = 1; lastGeneratorBaseImage[i] = AAA->alphaHat[i]; } /* Here we build an array q_[0][1],...,q_[orbRefnCount-1][AAA->ell] such that alphaHat[d] = specialRefinement[m]->leftGroup->base[q_[d]]. Here the array e is used as a temporary variable. */ for ( m = 0 ; m < orbRefnCount ; ++m ) { j = 1; for ( i = 1 ; i <= specialRefinement[m]->leftGroup->baseSize ; ++i ) if ( specialRefinement[m]->leftGroup->base[i] == AAA->alphaHat[j] ) q_[m][j++] = i; } if ( L ) changeBase( L, AAA->alphaHat ); /* Create the group K and initialize it to L (with base alphaHat). Also, if K is nontrivial, build its initial Delta-List. */ if ( L ) K = L; else { K = newTrivialPermGroup( G->degree); changeBase( K, AAA->alphaHat); } for ( i = 1 ; i <= AAA->ell+1 ; ++i ) DeltaList[i] = allocIntArrayBaseSize(); if ( isNontrivialGroup(K) ) buildDeltaList( K, DeltaList); /* Allocate the R-Priority queues Gamma[1],...,Gamma[ell] and the permutations tHatWord[i], 0 <= i < orbRefnCount, and initialized to the identity below. */ for ( i = 1 ; i <= AAA->ell ; ++i ) Gamma[i] = newRPriorityQueue( G->degree, basicCellSize[i]); for ( m = 0 ; m < orbRefnCount ; ++m ) { beginRevWord[m] = (UnsignedS **) malloc( (options.maxWordLength+7) * sizeof(UnsignedS**)); tHatWord[m].lengthAtLevel = (UnsignedS *) malloc( (options.maxBaseSize+2) * sizeof(Unsigned *) ); tHatWord[m].revWord = initialRevWord[m] = beginRevWord[m] + options.maxWordLength-1; tHatWord[m].invWord = (UnsignedS **) malloc((options.maxWordLength+2) * sizeof(UnsignedS**)); if ( ! tHatWord[m].lengthAtLevel || !beginRevWord[m] || !tHatWord[m].invWord ) ERROR( "computeSubgroup", "Out of memory.") tHatWord[m].revWord[0] = NULL; tHatWord[m].invWord[0] = NULL; for ( i = 0 ; i <= AAA->ell ; ++i ) tHatWord[m].lengthAtLevel[i] = 0; } /* Allocate and initialize the arrays used to keep track of which points are minimal in their K_betaHat[1..d-1] orbits. In general, minPointOfOrbit[i][..] will keep track of the orbits of K'^(i+firstMoved), 0 <= i <= maxBaseChangeLevel, where the ' indicates the alternate base betaHat[1..]. */ for ( i = 0 ; i <= maxBaseChangeLevel ; ++i ) { minPointOfOrbit[i] = allocIntArrayDegree(); for ( pt = 1 ; pt <= G->degree ; ++pt ) minPointOfOrbit[i][pt] = 0; minPointKnownCount[i] = 0; minPointKnown[i] = allocIntArrayDegree(); } /* Figure 9, lines 5-12. The following lines perform initializations corresponding to starting at the root of the tree. */ if ( maxBaseChangeLevel > 0 ) altK = copyOfPermGroup( K); else altK = K; UpsilonStack = newPartitionStack( G->degree); h = 1; f = 0; for ( i = 0 ; specialRefinement[i] ; ++i ) e[i] = 0; if ( AAA->n_[1] == 1 ) { d = 1; initFromPartnStack( Gamma[1], UpsilonStack, 1, AAA); } else d = 0; backtrackFlag = FALSE; for ( m = 0 ; extra[m] ; ++m ) { ex = extra[m]; while ( ex->applyAfter[i = ex->xUpsilonStack->height] == 0 ) { /* xSplit = (ex->xRRR[i].family->refine)( ex->xRRR[i].family->familyParm, ex->xRRR[i].refnParm, ex->xUpsilonStack); */ if ( xSplit.newCellSize != ex->xA_[i] ) { backtrackFlag = TRUE; break; } } if ( backtrackFlag ) break; } if ( backtrackFlag ) h = 0; /* Figure 9, line 13. The main loop begins here. On each pass, the elementary P-refinement aAA[h] is applied to the top partition on UpsilonStack. */ while ( h > 0 ) { /* Figure 9, lines 14-21. The code which follows is executed whenever a node is entered, either by descending from its parent or after backtracking from a descendant of a sibling. */ if ( h == AAA->n_[d] ) { if ( options.statistics ) ++nodesVisited[d]; betaHat[d] = removeMin( Gamma[d] ); if ( d < firstMoved && betaHat[d] != AAA->alphaHat[d] ) { firstMoved = d; for ( i = (L ? 0 : 1) ; i <= maxBaseChangeLevel ; ++i ) { for ( j = 1 ; j <= minPointKnownCount[i] ; ++j ) minPointOfOrbit[i][minPointKnown[i][j]] = 0; minPointKnownCount[i] = 0; } } /* In the following, should we check K^(firstMoved) in place of K? */ if ( K->order->noOfFactors > 0 ) { backtrackFlag = FALSE ; for ( pp = DeltaList[d]+1 ; *pp ; ++pp ) /* In the following line, the second condition is always true if L is trivial. Otherwise ???. */ if ( *pp <= firstMoved + maxBaseChangeLevel && *pp >= firstMoved ) if ( AAA->invOmega[betaHat[*pp]] > AAA->invOmega[ FIXUP minimalPointOfOrbit( altK, *pp , betaHat[d], minPointOfOrbit[*pp-firstMoved], minPointKnown[*pp-firstMoved], &minPointKnownCount[*pp-firstMoved], AAA->invOmega) ] ) { backtrackFlag = TRUE; break; } else ; else if (AAA->invOmega[betaHat[*pp]] > AAA->invOmega[betaHat[d]]) { backtrackFlag = TRUE; break; } if ( backtrackFlag ) BACKTRACK } } /* Figure 9, line 22. Now aAA[h] is applied to the top partition on UpsilonStack, and the result is pushed onto UpsilonStack. */ if ( h == AAA->n_[d] ) AAA->aAA[h].refnParm[0].intParm = betaHat[d]; else if ( AAA->aAA[h].family->refine == orbRefine ) { for ( m = 0 ; AAA->aAA[h].family->familyParm[0].ptrParm != specialRefinement[m]->rightGroup ; ++m ) ; AAA->aAA[h].family->familyParm[1].intParm = e[m] + 1; AAA->aAA[h].family->familyParm[2].ptrParm = &tHatWord[m]; } split = (AAA->aAA[h].family->refine)( AAA->aAA[h].family->familyParm, AAA->aAA[h].refnParm, UpsilonStack ); /* Figure 9, lines 23-32. The following lines attempt to prune the current node using Prop. 7(c). */ if ( split.newCellSize != AAA->a_[h] ) BACKTRACK else ++h; oldF = f; if ( split.newCellSize == 1 ) eta[++f] = UpsilonStack->pointList[UpsilonStack->startCell[h]]; if ( split.oldCellSize == 1 ) eta[++f] = UpsilonStack->pointList[UpsilonStack->startCell[AAA->b_[h-1]]]; for ( i = oldF+1 , backtrackFlag = FALSE ; i <= f ; ++i ) { for ( m = 0 ; m < orbRefnCount ; ++m ) { if ( AAA->omega[i] == specialRefinement[m]->leftGroup->base[e[m]+1] ) { ++e[m]; delta = eta[i]; for ( p = tHatWord[m].invWord ; *p ; ++p ) delta = (*p)[delta]; if (specialRefinement[m]->leftGroup->schreierVec[e[m]][delta]) while ( (gen = specialRefinement[m]->leftGroup-> schreierVec[e[m]][delta]) != FIRST_IN_ORBIT ) { *p = gen->invImage; *(--tHatWord[m].revWord) = gen->image; delta = (*p++)[delta]; *p = NULL; } else { backtrackFlag = TRUE; break; } } else { delta = eta[i]; for ( p = tHatWord[m].invWord ; *p ; ++p ) delta = (*p)[delta]; if ( delta != AAA->omega[i] ) { backtrackFlag = TRUE; break; } } if ( backtrackFlag ) break; } if ( backtrackFlag ) break; } if ( backtrackFlag) BACKTRACK for ( m = 0 ; extra[m] ; ++m ) { ex = extra[m]; while ( ex->applyAfter[i = ex->xUpsilonStack->height] == h-1 ) { /* xSplit = (ex->xRRR[i].family->refine)( ex->xRRR[i].family->familyParm, ex->xRRR[i].refnParm, ex->xUpsilonStack); */ if ( xSplit.newCellSize != ex->xA_[i] ) { backtrackFlag = TRUE; break; } } if ( backtrackFlag ) break; } if ( h == G->degree ) { /* Figure 9, lines 34-40. The following lines add a new strong generator, if appropriate. */ newPerm = permMapping( G->degree, AAA->omega, eta); if ( (!pP || pP( newPerm)) && !isIdentityElt( G, newPerm) ) { if ( options.genNamePrefix[0] != '\0' ) { strcpy( newPerm->name, options.genNamePrefix); sprintf( newPerm->name + strlen(newPerm->name), "%02u", ++newGenCount); } addStrongGenerator( K, newPerm, TRUE ); if ( options.inform ) informNewGenerator( K, firstMoved ); if ( maxBaseChangeLevel > 0 ) { deletePermGroup( altK); altK = copyOfPermGroup( K); betaHat[AAA->ell+1] = 0; conjugateGroupByPerm( altK, newPerm); } /* Can the following be done only for i = 0? */ for ( i = 0 ; i <= maxBaseChangeLevel ; ++i ) { for ( j = 1 ; j <= minPointKnownCount[i] ; ++j ) minPointOfOrbit[i][minPointKnown[i][j]] = 0; minPointKnownCount[i] = 0; } buildDeltaList( K, DeltaList); for ( i = firstMoved + 1 ; i <= AAA->ell ; ++i ) makeEmpty( Gamma[i] ); if ( options.statistics ) { --nodesPruned[AAA->ell]; for ( i = 1 ; i <= AAA->ell && newPerm->image[AAA->alphaHat[i]] == lastGeneratorBaseImage[i] ; ++i ) ; for ( j = i ; j <= AAA->ell ; ++j ) { lastGeneratorBaseImage[i] = newPerm->image[AAA->alphaHat[i]]; ++nodesEssential[j]; } } } else deletePermutation( newPerm); BACKTRACK } else if ( h == AAA->n_[d+1] ) { /* The following lines compute the set Gamma[d+1] of values of betaHat[d+1] corresponding to possible children of the current node, and then descend to the leftmost child. */ if ( d >= firstMoved && d < firstMoved+maxBaseChangeLevel ) { insertBasePoint( altK, d, betaHat[d] ); for ( i = d+1-firstMoved ; i <= maxBaseChangeLevel ; ++i ) { for ( j = 1 ; j <= minPointKnownCount[i] ; ++j ) minPointOfOrbit[i][minPointKnown[i][j]] = 0; minPointKnownCount[i] = 0; } } for ( m = 0 ; m < orbRefnCount ; ++m ) { if ( d > 0 ) tHatWord[m].lengthAtLevel[d] = tHatWord[m].lengthAtLevel[d-1]; else tHatWord[m].lengthAtLevel[0] = 0; while ( tHatWord[m].invWord[tHatWord[m].lengthAtLevel[d]] ) ++tHatWord[m].lengthAtLevel[d]; } ++d; initFromPartnStack( Gamma[d], UpsilonStack, AAA->p_[d], AAA); } } /* Free temporary storage. */ if ( maxBaseChangeLevel > 0 ) deletePermGroup( altK); for ( m = 0 ; m < orbRefnCount ; ++m ) { /*DEBUG -- Following code temporarily commented out because it corrupts the heap. free( tHatWord[m].invWord); free( beginRevWord[m]); END DEBUG*/ } for ( i = 1 ; i <= AAA->ell ; ++i) deleteRPriorityQueue( Gamma[i]); /* Write summary information for subgroup computed, if requested. */ backtrackTime = CPU_TIME(); if ( options.inform ) { informSubgroup( K); informTime( startTime, RBaseTime, optGroupTime, backtrackTime); } /* Write statistics to standard output, if requested. */ if ( options.statistics ) { --nodesPruned[AAA->ell]; /* identity node not counted as pruned. */ informStatistics( AAA->ell, nodesVisited, nodesPruned, nodesEssential); } /* Free pseudo-stack storage. */ freeIntArrayBaseSize( betaHat); freePtrArrayBaseSize( Gamma); freePtrArrayBaseSize( DeltaList); freeIntArrayDegree( eta); freePtrArrayBaseSize( minPointOfOrbit); freePtrArrayBaseSize( minPointKnown); freeIntArrayBaseSize( minPointKnownCount); freeLongArrayBaseSize( nodesVisited); freeLongArrayBaseSize( nodesPruned); freeLongArrayBaseSize( nodesEssential); freeIntArrayBaseSize( lastGeneratorBaseImage); freeIntArrayBaseSize( longRepLen); freeIntArrayBaseSize( basicCellSize); for ( i = 0 ; i <= 3 ; ++i ) freeIntArrayDegree( q_[i]); /* Return to caller. */ return K; } /*-------------------------- buildDeltaList -------------------------------*/ /* The function buildDeltaList may be used to construct a two-dimensional array DeltaList, such that DeltaList[d][1..] is the null-terminated list of those integers i with i <= d such that the d'th base point of the group G lies in the i'th basic orbit. */ static void buildDeltaList( PermGroup *G, /* The perm group (base/sgs known). */ UnsignedS *DeltaList[]) /* Set to the list that is constructed. */ { Unsigned d, i, listLen, basePt; for ( d = 1 ; d <= G->baseSize ; ++d) { listLen = 0; basePt = G->base[d]; for ( i = 1 ; i <= d ; ++i ) if ( G->schreierVec[i][basePt] ) DeltaList[d][++listLen] = i; DeltaList[d][++listLen] = 0; } } guava-3.6/src/leon/src/orblist.c0000644017361200001450000005740011026723452016507 0ustar tabbottcrontab/* File orblist.c. Main program for orblist command, which may be used to list the orbits of a permutation group of a set. The orbits are written to the standard output. The format of the command is: orblist where the meaning of the parameters is as follows: : the permutation group whose orbits are to be computed, The options are as follows: -t: Only the orbit lengths are listed. -r The orbits are listed in randomized order. Ignored if -l option is present. -gn: (Set stabilizer only). The generators for the newly-created group created are given names 01, 02, ... . If omitted, the new generators are named xxxx01, xxxx02, etc., where xxxx are the first four characters of the group name. -wp: Write out the ordered partition formed by the orbits. -wg: Write out the group, following base change. This allows orblist to be used to change the base of a permutation group, or merely to construct a base and strong generating set (using random schreier method). -ws: Like -wg, except when a point list is specified, only the subgroup stabilizing that point list is written. Note -wg and -ws options are mutually exclusive. -i Used with -wg, causes generators to be written in image format. -f: Here ptlist is a comma-separated list of points. The orbits of the (pointwise) stabilizer of these points is found. -q quite mode. Orbit information not printed. -z Remove redundant Schreier generators before group is written out. -s: Seed for random number generator used in conjunction with -r option. */ #include #include #include #include #include #define MAIN #include "group.h" #include "groupio.h" #include "addsgen.h" #include "chbase.h" #include "cstborb.h" #include "errmesg.h" #include "factor.h" #include "new.h" #include "randgrp.h" #include "readgrp.h" #include "readpar.h" #include "readpts.h" #include "storage.h" #include "util.h" static void nameGenerators( PermGroup *const H, char genNamePrefix[]); static void verifyOptions(void); GroupOptions options; int main( int argc, char *argv[]) { char libFileName[MAX_FILE_NAME_LENGTH], partnFileName[MAX_FILE_NAME_LENGTH], altGroupFileName[MAX_FILE_NAME_LENGTH], pointSetFileName[MAX_FILE_NAME_LENGTH]; char libName[MAX_NAME_LENGTH+1], partnLibName[MAX_NAME_LENGTH+1], altGroupLibName[MAX_NAME_LENGTH+1], pointSetLibName[MAX_NAME_LENGTH+1]; char prefix[MAX_FILE_NAME_LENGTH] = ""; Unsigned i, j, optionCountPlus1, found, processed, pt, img, orbitCount, orbRep, column, temp, cumLen, len, numOrbitsToWrite; BOOLEAN lengthOnlyOption, randomOption, writePartn, writeGroup, writePtStab, writeOrbit, writeMultipleOrbits, pointListOption, quietOption, imageFormatFlag, printOrbits, trimStrGenSet, writePS, changeBaseOnly, ptStabOnly, lengthRepOption; unsigned long seed; PermGroup *G; Permutation *gen, *nextGen; Partition *Theta; PointSet *Lambda; UnsignedS *completeOrbit, *startOfOrbitNo, *orbNumberOfPt, *orbOrder; char comment[128], tempStr[12]; UnsignedS *pointList = allocIntArrayBaseSize(); UnsignedS *orbitRepList = allocIntArrayBaseSize(); char *nextPos, *currentPos; UnsignedS stabLevel = 0; FactoredInt factoredOrbLen; /* Provide usage information if no arguments (except possibly -chbase or -ptstab) are given. */ if ( argc == 1 ) { printf( "\nUsage: orblist [options] permGroup\n"); return 0; } else if ( argc == 2 && strcmp(argv[1], "-chbase") == 0 ) { printf( "\nUsage: chbase permGroup p1,p2,...,pk newGroup\n"); return 0; } else if ( argc == 2 && strcmp(argv[1], "-ptstab") == 0 ) { printf( "\nUsage: ptstab permGroup p1,p2,...,pk stabilizerSubgroup\n"); return 0; } /* Check for limits option. If present in position 1 give limits and return. */ if ( argc > 1 && (strcmp(argv[1], "-l") == 0 || strcmp(argv[1], "-L") == 0) ) { showLimits(); return 0; } /* Check for verify option. If present, perform verify (Note verify Options terminates program). */ if ( argc > 1 && (strcmp(argv[1], "-v") == 0 || strcmp(argv[1], "-V") == 0) ) verifyOptions(); /* Check for 1 to 3 parameters following options. */ for ( optionCountPlus1 = 1 ; optionCountPlus1 <= argc-1 && argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 ) ; if ( argc - optionCountPlus1 > 3 ) { printf( "\n\nError: At most 3 non-option parameters are allowed.\n"); exit(ERROR_RETURN_CODE); } /* Process options. */ options.maxBaseSize = DEFAULT_MAX_BASE_SIZE; lengthOnlyOption = FALSE; lengthRepOption = FALSE; randomOption = FALSE; writePartn = FALSE; writeGroup = FALSE; writePtStab = FALSE; writePS = FALSE; writeOrbit = FALSE; writeMultipleOrbits = FALSE; changeBaseOnly = FALSE; ptStabOnly = FALSE; pointListOption = FALSE; quietOption = FALSE; imageFormatFlag = FALSE; options.genNamePrefix[0] = '\0'; seed = 47; trimStrGenSet = FALSE; strcpy( options.outputFileMode, "w"); for ( i = 1 ; i < optionCountPlus1 ; ++i ) { for ( j = 1 ; argv[i][j] != ':' && argv[i][j] != '\0' ; ++j ) #ifdef EBCDIC argv[i][j] = ( argv[i][j] >= 'A' && argv[i][j] <= 'I' || argv[i][j] >= 'J' && argv[i][j] <= 'R' || argv[i][j] >= 'S' && argv[i][j] <= 'Z' ) ? (argv[i][j] + 'a' - 'A') : argv[i][j]; #else argv[i][j] = (argv[i][j] >= 'A' && argv[i][j] <= 'Z') ? (argv[i][j] + 'a' - 'A') : argv[i][j]; #endif /* -a option */ if ( strcmp( argv[i], "-a") == 0 ) strcpy( options.outputFileMode, "a"); /* -chbase option */ else if ( strcmp(argv[i],"-chbase") == 0 ) changeBaseOnly = TRUE; /* -gn option (not useful at present) */ else if ( strncmp( argv[i], "-gn:", 4) == 0 ) if ( strlen( argv[i]+4) <= 8 ) strcpy( options.genNamePrefix, argv[i]+4); else ERROR( "main (orblist)", "Invalid value for -gn option") /* -i option */ else if ( strcmp( argv[i], "-i") == 0 ) imageFormatFlag = TRUE; /* -mb option */ else if ( strncmp( argv[i], "-mb:", 4) == 0 ) { errno = 0; options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (cent)", "Invalid syntax for -mb option") } /* -mv option */ else if ( strncmp( argv[i], "-mw:", 4) == 0 ) { errno = 0; options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (cent)", "Invalid syntax for -mw option") } /* -overwrite option */ else if ( strcmp( argv[i], "-overwrite") == 0 ) strcpy( options.outputFileMode, "w"); /* -p option */ else if ( strncmp( argv[i], "-p:", 3) == 0 ) { strcpy( prefix, argv[i]+3); } /* -ps option */ else if ( strncmp( argv[i], "-ps:", 4) == 0 ) { parseLibraryName( argv[i]+4, "", "", pointSetFileName, pointSetLibName); writePS = TRUE; } /* -ptstab option */ else if ( strcmp(argv[i],"-ptstab") == 0 ) ptStabOnly = TRUE; /* -q option */ else if ( strcmp( argv[i], "-q") == 0 ) quietOption = TRUE; /* -r option */ else if ( strcmp( argv[i], "-r") == 0 ) randomOption = TRUE; /* -s option */ else if ( strncmp(argv[i],"-s:",3) == 0 ) { errno = 0; seed = (unsigned long) strtol( argv[i]+3, NULL, 0); if ( errno ) ERROR1s( "main (orblist command)", "Invalid option ", argv[i], ".") } /* -len option */ else if ( strcmp( argv[i], "-len") == 0 ) lengthOnlyOption = TRUE; /* -lr option */ else if ( strcmp( argv[i], "-lr") == 0 ) lengthRepOption = TRUE; /* -wno option */ else if ( strncmp( argv[i], "-wno:", 5) == 0 ) { writeMultipleOrbits = TRUE; if ( writeOrbit ) ERROR( "main (orblist command)", "-wo and -wno are incompatible.") errno = 0; numOrbitsToWrite = (Unsigned) strtol( argv[i]+5, NULL, 0); if ( errno ) ERROR1s( "main (orblist command)", "Invalid option ", argv[i], ".") } /* -wo option */ else if ( strncmp( argv[i], "-wo:", 4) == 0 ) { writeOrbit = TRUE; if ( writeMultipleOrbits ) ERROR( "main (orblist command)", "-wo and -wno are incompatible.") errno = 0; j = 0; currentPos = argv[i]+4; do { orbitRepList[++j] = strtol( currentPos, &nextPos, 0); if ( errno ) ERROR( "main (orblist command)", "Invalid syntax in -wo option.") currentPos = nextPos+1; } while ( *nextPos == ',' && j < options.maxBaseSize ); orbitRepList[j+1] = 0; if ( *nextPos != '\0' ) ERROR( "main (orblist command)", "orbitRepList invalid or too long.") } /* -wp option */ else if ( strncmp( argv[i], "-wp:", 4) == 0 ) { writePartn = TRUE; if ( writeGroup ) ERROR( "main (orblist command)", "-wg and -ws are incompatible.") parseLibraryName( argv[i]+4, "", "", partnFileName, partnLibName); } else if ( strcmp( argv[i], "-z") == 0 ) trimStrGenSet = TRUE; else ERROR1s( "main (orblist command)", "Invalid option ", argv[i], ".") } /* Compute maximum degree and word length. */ options.maxWordLength = 200 + 5 * options.maxBaseSize; options.maxDegree = MAX_INT - 2 - options.maxBaseSize; /* -ps option requires -wo and -wno, and conversely. Check this. */ if ( writePS ^ (writeOrbit | writeMultipleOrbits) ) ERROR( "main (orblist command)", "-ps option requires -wo or -wno, and conversely") /* If -chbase or -ptstab options has been specified, check for 3 command line arguments. */ if ( (changeBaseOnly || ptStabOnly) && (argc - optionCountPlus1 != 3) ) ERROR( "main (orblist command)", "3 non-option parameters are needed for chbase or ptstab"); /* Compute name for group file. */ parseLibraryName( argv[optionCountPlus1], prefix, "", libFileName, libName); /* Process the point list, if present. */ if ( argc - optionCountPlus1 >= 2 ) { pointListOption = TRUE; errno = 0; j = 0; currentPos = argv[optionCountPlus1+1]; do { pointList[++j] = strtol( currentPos, &nextPos, 0); if ( errno ) ERROR( "main (orblist command)", "Invalid point in -f option.") currentPos = nextPos+1; } while ( *nextPos == ',' && j < options.maxBaseSize ); pointList[j+1] = 0; if ( *nextPos != '\0' ) ERROR( "main (orblist command)", "Pointlist invalid or too long.") } /* Process name of the point stabilizer to save, or the name under which to save the group with its new base. */ if ( argc - optionCountPlus1 == 3 ) { if ( changeBaseOnly ) writeGroup = TRUE; else writePtStab = TRUE; parseLibraryName( argv[optionCountPlus1+2], "", "", altGroupFileName, altGroupLibName); } /* Read in group. */ if ( pointListOption || writeGroup || writePtStab ) G = readPermGroup( libFileName, libName, 0, "Generate"); else G = readPermGroup( libFileName, libName, 0, ""); /* Change base if requested, and find level in new base of stabilizer of pointList. */ if ( pointListOption ) { changeBase( G, pointList); if ( trimStrGenSet ) removeRedunSGens( G, 1); if ( !quietOption ) { printf( "\n New base: "); for ( j = 1 ; j <= G->baseSize ; ++j) printf( " %u", G->base[j]); printf( "\n"); } if ( changeBaseOnly ) { strcpy( G->name, altGroupLibName); G->printFormat = (imageFormatFlag ? imageFormat : cycleFormat); nameGenerators( G, options.genNamePrefix); writePermGroup( altGroupFileName, altGroupLibName, G, NULL); return 0; } for ( stabLevel = 1 ; stabLevel <= G->baseSize ; ++stabLevel ) { for ( j = 1 ; pointList[j] != 0 && pointList[j] != G->base[stabLevel] ; ++j ) ; if ( pointList[j] == 0 ) break; } } else if ( !writeGroup && !writePtStab ) for ( gen = G->generator ; gen ; gen = gen->next ) gen->level = 0; /* Allocate arrays completeOrbit, startOfOrbitNo, orbNumberOfPt, and orbOrder. */ completeOrbit = allocIntArrayDegree(); startOfOrbitNo = allocIntArrayDegree(); orbNumberOfPt = allocIntArrayDegree(); orbOrder = allocIntArrayDegree(); if ( writePartn ) { Theta = allocPartition(); Theta->degree = 0; /* To be adjusted */ strcpy( Theta->name, partnLibName); Theta->pointList = allocIntArrayDegree(); Theta->invPointList = allocIntArrayDegree(); Theta->cellNumber = allocIntArrayDegree(); Theta->startCell = allocIntArrayDegree(); } if ( writePS ) { Lambda = allocPointSet(); strcpy( Lambda->name, pointSetLibName); Lambda->degree = 0; Lambda->size = 0; Lambda->pointList = allocIntArrayDegree(); Lambda->inSet = allocBooleanArrayDegree(); for ( j = 1 ; j <= G->degree ; ++j ) Lambda->inSet[j] = FALSE; } /* Construct the orbits, one by one in order. */ found = processed = orbitCount = 0; for ( i = 1 ; i <= G->degree ; ++i ) orbNumberOfPt[i] = 0; for ( orbRep = 1 ; orbRep <= G->degree ; ++orbRep ) if ( !orbNumberOfPt[orbRep] ) { completeOrbit[++found] = orbRep; startOfOrbitNo[++orbitCount] = found; orbNumberOfPt[orbRep] = orbitCount; while ( processed < found ) { pt = completeOrbit[++processed]; for ( gen = G->generator ; gen ; gen = gen->next ) if ( gen->level >= stabLevel ) { img = gen->image[pt]; if ( !orbNumberOfPt[img] ) { completeOrbit[++found] = img; orbNumberOfPt[img] = orbitCount; } } } } startOfOrbitNo[orbitCount+1] = G->degree+1; /* Write out the orbits. */ if ( !quietOption && (lengthOnlyOption || lengthRepOption) ) { column = printf( "\n Orbit lengths for group %s", G->name); if ( pointListOption ) { column += printf( " (Stabilizer of"); for ( j = 1 ; pointList[j] != 0 ; ++j ) { column += printf( " "); column += printf( "%d", pointList[j]); } column += printf( ")"); } column += printf( ": "); for ( i = 1 ; i <= orbitCount ; ++i ) { if ( column > 66 ) { printf( "\n "); column = 4; } if ( lengthRepOption ) column += printf( "%u:", completeOrbit[startOfOrbitNo[i]]); column += printf( "%u ", startOfOrbitNo[i+1] - startOfOrbitNo[i]); } printf( "\n"); } printOrbits = !quietOption && !lengthOnlyOption && !lengthRepOption; if ( printOrbits || writePartn || writeMultipleOrbits ) { if ( printOrbits ) printf( "\n Orbits for group %s.", G->name); if ( printOrbits && pointListOption ) { printf( " (Stabilizer of"); for ( j = 1 ; pointList[j] != 0 ; ++j ) { printf( " "); printf( "%d", pointList[j]); } printf( ")"); } if ( printOrbits ) printf( "\n\n Repr Length CumLen Points\n"); for ( i = 1 ; i <= orbitCount ; ++i ) orbOrder[i] = i; if ( randomOption ) { initializeSeed (seed); for ( i = 1 ; i <= orbitCount-1 ; ++i ) { j = randInteger( i, orbitCount); EXCHANGE( orbOrder[i], orbOrder[j], temp); } } cumLen = 0; for ( i = 1 ; i <= orbitCount ; ++i ) { len = startOfOrbitNo[orbOrder[i]+1] - startOfOrbitNo[orbOrder[i]]; cumLen += len; if ( printOrbits ) printf( "\n %6d %6d %6d ", completeOrbit[startOfOrbitNo[orbOrder[i]]], len, cumLen); column = 28; for ( j = startOfOrbitNo[orbOrder[i]] ; j < startOfOrbitNo[orbOrder[i]+1] ; ++j ) { if ( printOrbits && column > 71 ) { printf( "\n "); column = 28; } if ( printOrbits ) column = column + printf( "%d ", completeOrbit[j]); if ( writePartn ) { Theta->pointList[++Theta->degree] = completeOrbit[j]; Theta->invPointList[completeOrbit[j]] = Theta->degree; Theta->cellNumber[completeOrbit[j]] = i; if ( j == startOfOrbitNo[orbOrder[i]] ) Theta->startCell[i] = Theta->degree; } if ( writeMultipleOrbits && i <= numOrbitsToWrite ) { Lambda->pointList[++Lambda->size] = completeOrbit[j]; Lambda->inSet[completeOrbit[j]] = TRUE; } } } } if ( printOrbits ) printf( "\n"); if ( writePartn ) { strcpy( comment, "Orbit partition of group "); strcat( comment, G->name); if ( pointListOption ) { strcat( comment, ", stabilizer of"); for ( j = 1 ; pointList[j] != 0 ; ++j ) { sprintf( tempStr, " %u", pointList[j]);; strcat( comment, tempStr); } } strcpy( Theta->name, partnLibName); Theta->startCell[orbitCount+1] = Theta->degree + 1; writePartition( partnFileName, partnLibName, comment, Theta); } if ( writeMultipleOrbits ) { strcpy( comment, "First "); sprintf( tempStr, "%u", numOrbitsToWrite); strcat( comment, tempStr); strcat( comment, " orbits of group "); strcat( comment, G->name); if ( pointListOption ) { strcat( comment, "(stabilizer of"); for ( j = 1 ; pointList[j] != 0 ; ++j ) { sprintf( tempStr, " %u", pointList[j]);; strcat( comment, tempStr); strcat( comment, ")"); } } writePointSet( pointSetFileName, pointSetLibName, comment, Lambda); } if ( writeOrbit ) { strcpy( comment, "Orbit(s) in group "); strcat( comment, G->name); if ( pointListOption ) { strcat( comment, "(stabilizer of"); for ( j = 1 ; pointList[j] != 0 ; ++j ) { sprintf( tempStr, " %u", pointList[j]);; strcat( comment, tempStr); strcat( comment, ")"); } } strcat( comment, " of point(s)"); for ( j = 1 ; orbitRepList[j] != 0 ; ++j ) { sprintf( tempStr, " %u", orbitRepList[j]);; strcat( comment, tempStr); } for ( i = 1 ; orbitRepList[i] != 0 ; ++i ) if ( !Lambda->inSet[orbitRepList[i]] ) for ( j = startOfOrbitNo[orbNumberOfPt[orbitRepList[i]]] ; j < startOfOrbitNo[orbNumberOfPt[orbitRepList[i]]+1] ; ++j ) Lambda->pointList[++Lambda->size] = completeOrbit[j]; for ( j = 1 ; j < Lambda->size ; ++j ) Lambda->inSet[Lambda->pointList[j]] = TRUE; writePointSet( pointSetFileName, pointSetLibName, comment, Lambda); } if ( writeGroup ) { strcpy( G->name, altGroupLibName); G->printFormat = (imageFormatFlag ? imageFormat : cycleFormat); nameGenerators( G, options.genNamePrefix); writePermGroup( altGroupFileName, altGroupLibName, G, NULL); } if ( writePtStab ) { if ( trimStrGenSet ) removeRedunSGens( G, 1); /* First remove generators from G having level less than stabLevel, and adjust the order. Note, after here, the group table is not valid, but it is adequate for writing out (writePermGroup). */ for ( gen = G->generator ; gen ; gen = nextGen ) { nextGen = gen->next; if ( gen->level < stabLevel ) { if ( gen->last ) gen->last->next = nextGen; else G->generator = nextGen; if ( nextGen ) nextGen->last = gen->last; deletePermutation( gen); } } for ( i = 1 ; i < stabLevel ; ++i ) { factoredOrbLen = factorize( G->basicOrbLen[i]); factDivide( G->order, &factoredOrbLen); G->basicOrbLen[i] = 1; } /* Now write out the modified G. */ strcpy( comment, "Pointwise stabilizer in %s of "); for ( j = 1 ; pointList[j] != 0 ; ++j ) { sprintf( tempStr, " %d", pointList[j]); strcat( comment, tempStr); } strcpy( G->name, altGroupLibName); G->printFormat = (imageFormatFlag ? imageFormat : cycleFormat); nameGenerators( G, options.genNamePrefix); writePermGroup( altGroupFileName, altGroupLibName, G, NULL); } /* Free pseudo-stack storage. */ freeIntArrayBaseSize( pointList); freeIntArrayBaseSize( orbitRepList); /* Terminate. */ return 0; } /*-------------------------- nameGenerators ------------------------------*/ static void nameGenerators( PermGroup *const H, char genNamePrefix[]) { Unsigned i; Permutation *gen; if ( genNamePrefix[0] == '\0' ) { strncpy( genNamePrefix, H->name, 4); genNamePrefix[4] = '\0'; } for ( gen = H->generator , i = 1 ; gen ; gen = gen->next , ++i ) { strcpy( gen->name, genNamePrefix); sprintf( gen->name + strlen(gen->name), "%02d", i); } } /*-------------------------- verifyOptions -------------------------------*/ static void verifyOptions(void) { CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH, MAX_PRIME_FACTORS, MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS, MAX_EXTRA, XLARGE, SGND, NFLT}; extern void xaddsge( CompileOptions *cOpts); extern void xbitman( CompileOptions *cOpts); extern void xcopy ( CompileOptions *cOpts); extern void xcstbor( CompileOptions *cOpts); extern void xerrmes( CompileOptions *cOpts); extern void xessent( CompileOptions *cOpts); extern void xfactor( CompileOptions *cOpts); extern void xnew ( CompileOptions *cOpts); extern void xoldcop( CompileOptions *cOpts); extern void xpermgr( CompileOptions *cOpts); extern void xpermut( CompileOptions *cOpts); extern void xprimes( CompileOptions *cOpts); extern void xrandgr( CompileOptions *cOpts); extern void xrandsc( CompileOptions *cOpts); extern void xreadgr( CompileOptions *cOpts); extern void xreadpa( CompileOptions *cOpts); extern void xreadpt( CompileOptions *cOpts); extern void xstorag( CompileOptions *cOpts); extern void xtoken ( CompileOptions *cOpts); extern void xutil ( CompileOptions *cOpts); xaddsge( &mainOpts); xbitman( &mainOpts); xcopy ( &mainOpts); xcstbor( &mainOpts); xerrmes( &mainOpts); xessent( &mainOpts); xfactor( &mainOpts); xnew ( &mainOpts); xoldcop( &mainOpts); xpermgr( &mainOpts); xpermut( &mainOpts); xprimes( &mainOpts); xrandgr( &mainOpts); xrandsc( &mainOpts); xreadgr( &mainOpts); xreadpa( &mainOpts); xreadpt( &mainOpts); xstorag( &mainOpts); xtoken ( &mainOpts); xutil ( &mainOpts); } guava-3.6/src/leon/src/cuprstab.c0000644017361200001450000006622411026723452016660 0ustar tabbottcrontab/* File cuprstab.c. Contains function uPartnStabilizer, the main function for a program that may be used to compute the stabilizer in a permutation group of an unordered partition. Also contains functions as follows: uParStabRefnInitialize: Initialize set stabilizer refinement functions. setStabRefine: A refinement family based on the set stabilizer property. isSetStabReducible: A function to check SSS-reducibility. */ #include #include #include "group.h" #include "compcrep.h" #include "compsg.h" #include "errmesg.h" #include "orbrefn.h" CHECK( cuprst) extern GroupOptions options; static RefinementMapping uPartnStabRefine; static ReducChkFn isUPartnStabReducible; static void initializeUPartnStabRefn( Unsigned xDegree); static Partition *knownIrreducible[10] /* Null terminated 0-base list of */ = {NULL}; /* point sets Lambda for which top */ /* partition on UpsilonStack is */ /* known to be SSS_Lambda irred. */ /* COPIED FROM ORBREFN */ #define HASH( i, j) ( (7L * i + j) % hashTableSize ) typedef struct RefnListEntry { Unsigned i; /* Cell number in UpsilonTop to split. */ Unsigned j; /* Orbit number of G^(level) in split. */ Unsigned newCellSize; /* Size of new cell created by split. */ struct RefnListEntry *hashLink; /* List of refns with same hash value. */ struct RefnListEntry *next; /* Next refn on list of all refinements. */ struct RefnListEntry *last; /* Last refn on list of all refinements. */ } RefnListEntry; static struct { Unsigned groupCount; PermGroup *group[10]; RefnListEntry **hashTable[10]; RefnListEntry *refnList[10]; Unsigned oldLevel[10]; RefnListEntry *freeListHeader[10]; RefnListEntry *inUseListHeader[10]; } refnData = {0}; static Unsigned trueGroupCount, hashTableSize; static RefnListEntry **hashTable, *freeListHeader, *inUseListHeader; /* END COPIED CODE. */ static Unsigned currentZDepth[10]; static Unsigned *totalSize; /*-------------------------- uPartnStabilizer ------------------------------*/ /* Function uPartnStabilizer. Returns a new permutation group representing the stabilizer in a permutation group G of an unordered partition Lambda of the point set Omega. The algorithm is based on Figure 9 in the paper "Permutation group algorithms based on partitions" by the author. */ #define familyParm familyParm_L PermGroup *uPartnStabilizer( PermGroup *const G, /* The containing permutation group. */ const Partition *const Lambda, /* The point set to be stabilized. */ PermGroup *const L) /* A (possibly trivial) known subgroup of the stabilizer in G of Lambda. (A null pointer designates a trivial group.) */ { #ifdef xxxx RefinementFamily OOO_G, SSS_Lambda; RefinementFamily *refnFamList[3]; ReducChkFn *reducChkList[3]; SpecialRefinementDescriptor *specialRefinement[3]; ExtraDomain* extra[2]; OOO_G.refine = orbRefine; OOO_G.familyParm[0].ptrParm = G; SSS_Lambda.refine = uPartnStabRefine; SSS_Lambda.familyParm[0].ptrParm = (void *) Lambda; refnFamList[0] = &OOO_G; refnFamList[1] = &SSS_Lambda; refnFamList[2] = NULL; reducChkList[0] = isOrbReducible; reducChkList[1] = isUPartnStabReducible; reducChkList[2] = NULL; specialRefinement[0] = malloc( sizeof(SpecialRefinementDescriptor) ); specialRefinement[0]->refnType = 'O'; specialRefinement[0]->leftGroup = G; specialRefinement[0]->rightGroup = G; specialRefinement[1] = NULL; specialRefinement[2] = NULL; initializeOrbRefine( G); initializeUPartnStabRefn(); ex = extra[0] = allocExtraDomain(); xDegree = extra->xDegree[0] = numberOfCells( Lambda); ex->xPsiStack = newCellPartitionStack( xDegree); ex->xUpsilonStack = newCellPartitionStack( xDegree); ex->xRRR = (Refinement *) malloc( (xDegree+2) * sizeof(Refinement) ); ex->applyAfter = (UnsignedS *) malloc( (xDegree+2) * sizeof(UnsignedS) ); ex->xA_ = (UnsignedS *) malloc( (xDegree+2) * sizeof(UnsignedS) ); ex->xB_ = (UnsignedS *) malloc( (xDegree+2) * sizeof(UnsignedS) ); extra[1] = NULL; return computeSubgroup( G, NULL, refnFamList, reducChkList, specialRefinement, extra, L); #endif } #undef familyParm /*-------------------------- uPartnImage -----------------------------------*/ /* Function uPartnImage. Returns a new permutation in a specified group G mapping a specified unordered partition Lambda to a specified unordered partition Xi. The algorithm is based on Figure 9 in the paper "Permutation group algorithms based on partitions" by the author. */ Permutation *uPartnImage( PermGroup *const G, /* The containing permutation group. */ const Partition *const Lambda, /* One of the partitions. */ const Partition *const Xi, /* The other partition. */ PermGroup *const L_L, /* A (possibly trivial) known subgroup of the stabilizer in G of Lambda. (A null pointer designates a trivial group.) */ PermGroup *const L_R) /* A (possibly trivial) known subgroup of the stabilizer in G of Xi. (A null pointer designates a trivial group.) */ { #ifdef XXXXXX RefinementFamily OOO_G, SSS_Lambda_Xi; RefinementFamily *refnFamList[3]; ReducChkFn *reducChkList[3]; SpecialRefinementDescriptor *specialRefinement[3]; OOO_G.refine = orbRefine; OOO_G.familyParm_L[0].ptrParm = G; OOO_G.familyParm_R[0].ptrParm = G; SSS_Lambda_Xi.refine = uPartnStabRefine; SSS_Lambda_Xi.familyParm_L[0].ptrParm = (void *) Lambda; SSS_Lambda_Xi.familyParm_R[0].ptrParm = (void *) Xi; refnFamList[0] = &OOO_G; refnFamList[1] = &SSS_Lambda_Xi; refnFamList[2] = NULL; reducChkList[0] = isOrbReducible; reducChkList[1] = isUPartnStabReducible; reducChkList[2] = NULL; specialRefinement[0] = malloc( sizeof(SpecialRefinementDescriptor) ); specialRefinement[0]->refnType = 'O'; specialRefinement[0]->leftGroup = G; specialRefinement[0]->rightGroup = G; specialRefinement[1] = NULL; specialRefinement[2] = NULL; initializeOrbRefine( G); initializeUPartnStabRefn(); return computeCosetRep( G, NULL, refnFamList, reducChkList, specialRefinement, L_L, L_R); #endif } /*-------------------------- initializePartnStabRefn ----------------------*/ static void initializePartnStabRefn( Unsigned xDegree) { knownIrreducible[0] = NULL; currentZDepth[0] = 0; totalSize = (UnsignedS *) malloc( xDegree * sizeof(UnsignedS) ); totalSize[1] = xDegree; } /*-------------------------- uPartnStabRefine ------------------------------*/ /* The function implements the refinement family uPartnStabRefine. Here ssS_{Lambda,i,j,p} acting on Pi (the top partition of UpsilonStack) splits from cell i of Pi those points lying in the union of the j'th cell group of Pi^(p) (the top partition on extra[p]->xUpsilonStack) on Omega^(p). Note Lambda is the base partition for extra[p]->xUpsilonStack The family parameter is: familyParm[0].ptrParm: extra[p]->xUpsilonStack The refinement parameters are: refnParm[0].intParm: i, refnParm[1].intParm: j. */ static SplitSize uPartnStabRefine( const RefinementParm familyParm[], const RefinementParm refnParm[], PartitionStack *const UpsilonStack) /* The partition stack to refine. */ { #ifdef xxxx CellPartitionStack *xUpsilonStack = familyParm[0].ptrParm; Partition *Lambda = xUpsilonStack->basePartn; Unsigned i = refnParm[0].intParm, j = refnParm[1].intParm; Unsigned m, k, r, last, left, right, temp, startNewCell, pt, t; UnsignedS *const pointList = UpsilonStack->pointList, *const invPointList = UpsilonStack->invPointList, *const parent = UpsilonStack->parent, *const startCell = UpsilonStack->startCell, *const cellNumber = UpsilonStack->cellNumber, *const cellSize = UpsilonStack->cellSize, *const xCellList = xUpsilonStack->cellList, *const xCellGroupNumber = xUpsilonStack->cellGroupNumber, *const xStartCellGroup = xUpsilonStack->startCellGroup, *const xCellGroupSize = xUpsilonStack->cellGroupSize, *const LambdaCellNumber = Lambda->cellNumber; SplitSize split; BOOLEAN cellSplits; /* First check if the refinement acts nontrivially on UpsilonTop. If not return immediately. */ cellSplits = FALSE; for ( m = startCell[cellToSplit]+1 , last = m -1 + cellSize[cellToSplit] ; m < last ; ++m ) if ( (xCellGroupNumber[LambdaCellNumber[pointList[m]]] == j) != (xCellGroupNumber[LambdaCelllNumber[pointList[m-1]]] == j) ) { cellSplits = TRUE; break; } if ( !cellSplits ) { split.oldCellSize = cellSize[cellToSplit]; split.newCellSize = 0; return split; } /* Now split cell cellToSplit of UpsilonTop. A variation of the splitting algorithm used in quicksort is applied. */ if ( cellSize[i] <= xUpsilonStack->totalGroupSize[j] ) { left = startCell[i] - 1; right = startCell[i] + cellSize[i]; while ( left < right ) { while ( xCellGroupNumber[LambdaCellNumber[pointList[++left]]] != j ) ; while ( xCellGroupNumber[LambdaCellNumber[pointList[--right]]] == j ) ; if ( left < right ) { EXCHANGE( pointList[left], pointList[right], temp) EXCHANGE( invPointList[pointList[left]], invPointList[pointList[right]], temp) } } startNewCell = left; } else { startNewCell = startCell[i] + cellSize[i]; for ( k = xStartCellGroup[j] ; k < xStartCellGroup[j] + xCellGroupSize[j] ; ++k ) { t = xCellList[k]; for ( r = Lambda->startCell[t] ; LambdaCellNumber[Lambda->pointList[r]] == t ; ++r) { pt = Lambda->pointList[r]; if ( cellNumber[pt] == i ) { --startNewCell; m = invPointList[pt]; EXCHANGE( pointList[m], pointList[startNewCell], temp); EXCHANGE( invPointList[pointList[m]], invPointList[pointList[startNewCell]], temp); } } } } ++UpsilonStack->height; for ( m = startNewCell ; m < last ; ++m ) cellNumber[pointList[m]] = UpsilonStack->height; startCell[UpsilonStack->height] = startNewCell; parent[UpsilonStack->height] = i; cellSize[UpsilonStack->height] = last - startNewCell; cellSize[cellToSplit] -= cellSize[UpsilonStack->height]; split.oldCellSize = cellSize[i]; split.newCellSize = cellSize[UpsilonStack->height]; return split; #endif } /*-------------------------- initializeUPartnStabRefine --------------------------*/ void initializeUPartnStabRefine( PermGroup *G) { #ifdef xxxx /* Compute hash table size. */ if ( refnData.groupCount == 0 ) { hashTableSize = G->degree; while ( hashTableSize > 11 && (hashTableSize % 2 == 0 || hashTableSize % 3 == 0 || hashTableSize % 5 == 0 || hashTableSize % 7 == 0) ) --hashTableSize; } if ( refnData.groupCount < 9) { refnData.group[refnData.groupCount] = G; refnData.hashTable[refnData.groupCount] = allocPtrArrayDegree(); refnData.refnList[refnData.groupCount] = malloc( G->degree * (sizeof(RefnListEntry)+2) ); if ( !refnData.refnList[refnData.groupCount] ) ERROR( "initializeOrbRefine", "Memory allocation error.") refnData.oldLevel[refnData.groupCount] = UNKNOWN; ++refnData.groupCount; trueGroupCount = refnData.groupCount; } else ERROR( "initializeOrbRefine", "Orbit refinement limited to ten groups.") #endif } /*-------------------------- xPartnStabRefine ------------------------------*/ #define RESTORE_ZERO for ( r = 1 ; r <= nonZeroCount ; ++r ) \ zeroArray[nonZeroPosition[r]] = 0; \ nonZeroCount = 0; /* The function implements the refinement family xPartnStabRefine. Here xssS_{Pi,i,j,m,p} acting on Pi^(p) (the top partition of PiStack^(p)) splits from cell group i of Pi^(p) those cells intersecting cell j of Pi in exactly m points. / The family parameter is: familyParm[0].ptrParm: extra[p]->xUpsilonStack The refinement parameters are: refnParm[0].intParm: i, refnParm[1].intParm: j. refnParm[2].intParm: m. */ static SplitSize partnStabRefine( const RefinementParm familyParm[], const RefinementParm refnParm[], PartitionStack *const UpsilonStack) /* The partition stack to refine. */ { #ifdef xxxx static Unsigned zeroArrayDegree = 0; static Unsigned nonZeroCount; static UnsignedS *zeroArray = NULL; static UnsignedS *nonZeroPosition = NULL; PartitionStack *xUpsilonStack = familyParm[1].ptrParm; Partition *Lambda = xUpsilonStack->basePartn; Unsigned i = refnParm[0].intParm, j = refnParm[1].intParm, m = refnParm[2].intParm; Unsigned t, last, k, r, temp, left, right, xStartNewCellGroup; UnsignedS *const pointList = UpsilonStack->pointList, *const invPointList = UpsilonStack->invPointList, *const parent = UpsilonStack->parent, *const startCell = UpsilonStack->startCell, *const cellNumber = UpsilonStack->cellNumber, *const cellSize = UpsilonStack->cellSize, *const xCellList = xUpsilonStack->cellList, *const xCellGroupNumber = xUpsilonStack->cellGroupNumber, *const xStartCellGroup = xUpsilonStack->startCellGroup, *const xCellGroupSize = xUpsilonStack->cellGroupSize, *const LambdaCellNumber = Lambda->cellNumber; SplitSize split; BOOLEAN splitFlag, noSplitFlag; if ( zeroArrayDegree != Lambda->cellCount ) { if ( zeroArrayDegree != 0 ) { free( zeroArray ); free( nonZeroPosition); } zeroArrayDegree = Lambda->cellCount; zeroArray = malloc( (zeroArrayDegree+2)*sizeof(UnsignedS) ); for ( r = 1 ; r <= zeroArrayDegree ; ++r ) zeroArrayDegree[r] = 0; nonZeroPositionCount = 0; nonZeroPosition = malloc( (zeroArrayDegree+2)*sizeof(UnsignedS) ); } /* Here we set zeroArray[j] to the cardinality of (cell j of UpsilonTop) intersect (cell k of Lambda) for each k in cell group i of xUpsilonTop. */ if ( xUpsilonStack->totalGroupSize[i] <= cellSize[j] ) for ( k = xStartCellGroup[i] ; k < xStartCellGroup[i] + xCellGroupSize[i] ; ++k ) { for ( r = Lambda->startCell[k] ; r <= Lambda->startCell[k] + Lambda->cellSize[k] ; ++ r ) { if ( cellNumber[Lambda->pointList[r]] == j ) { if ( zeroArray[k] == 0 ) nonZeroPosition[++nonZeroCount] = k; ++zeroArray[k]; } } else for ( r = startCell[j] ; r < startCell[j]+cellSize[j] ; ++j ) { t = LambdaCellNumber[pointList[r]] ); if ( xCellGroupNumber[t] == i ) { if ( zeroArray[t] == 0 ) nonZeroPosition[++nonZeroCount] = t; ++zeroArray[t]; } } /* Now reset zeroArray and return immediately if the cell group does not split. */ splitFlag = nonSplitFlag = FALSE; if ( xUpsilonStack->cellCount > nonZeroCount ) if ( m == 0 ) splitFlag = TRUE; else nonSplitFlag = TRUE; for ( r = 1 ; r <= nonZeroCount && !splitFlag ; ++r ) if ( zeroArray[nonZeroPosition[r]] == m ) splitFlag = TRUE; for ( r = 1 ; r <= nonZeroCount && !nonSplitFlag ; ++r ) if ( zeroArray[nonZeroPosition[r]] != m ) nonSplitFlag = TRUE; if ( !splitFlag || !nonSplitFlag ) { RESTORE_ZERO split.oldCellSize = cellSize[cellToSplit]; split.newCellSize = 0; return split; } /* Now split cell group i of xUpsilonTop. A variation of the splitting algorithm used in quicksort is applied. */ last = xStartCellGroup[i] + xCellGroupSize[i]; if ( xUpsilonStack->cellGroupSize[i] <= cellSize[j] ) { left = xStartCellGroup[i] - 1; right = xStartCellGroup[i] + xCellGroupSize[i]; while ( left < right ) { while ( zeroArray[++left]) != m ) ; while ( zeroArray[--right]) == m ) ; if ( left < right ) { EXCHANGE( xCellList[left], xCellList[right], temp) EXCHANGE( xInvCellList[xCellList[left]], xInvCellList[xCellList[right]], temp) } xStartNewCellGroup = left; } } else { xStartNewCellGroup = last; for ( r = startCell[j] ; r < startCell[j] + cellSize[j] ; ++r ) { t = LambdaCellNumber[pointList[r]]; if ( zeroArray[t] == m ) { zeroArray[t] = UNDEFINED; --xStartNewCellGroup; EXCHANGE( xCellList[t], xCellList[xStartNewCellGroup], temp) EXCHANGE( xInvCellList[xCellList[t]], xInvCellList[xCellList[xStartNewCellGroup]], temp) } } } ++xUpsilonStack->height; xUpsilonStack->totalGroupSize[xUpsilonStack->height] = 0; for ( r = xStartNewCellGroup ; r < last ; ++m ) { xCellGroupNumber[xCellList[r]] = xUpsilonStack->height; xUpsilonStack->totalGroupSize[xUpsilonStack->height] += Lambda->cellSize[xCellList[r]]; xStartCellGroup[xUpsilonStack->height] = xStartNewCellGroup; xUpsilonStack->parent[xUpsilonStack->height] = i; xCellGroupSize[xUpsilonStack->height] = last - xStartNewCellGroup; xCellGroupSize[i] -= (last - xStartNewCellGroup); xUpsilonStack->totalGroupSize[i] -= xUpsilonStack->totalGroupSize[xUpsilonStack->height] RESTORE_ZERO; split.oldCellSize = cellSize[cellToSplit]; split.newCellSize = cellSize[UpsilonStack->height]; return split; #endif } #ifdef xxxxxx /*-------------------------- deleteRefnListEntry --------------------------*/ static void deleteRefnListEntry( RefnListEntry *entryToDelete, Unsigned hashPosition, /* hashTableSize+1 indicates unknown */ RefnListEntry *prevHashListEntry) { if ( hashPosition > hashTableSize ) { hashPosition = HASH( entryToDelete->i, entryToDelete->j); if ( hashTable[hashPosition] == entryToDelete ) prevHashListEntry = NULL; else { prevHashListEntry = hashTable[hashPosition]; while ( prevHashListEntry->hashLink != entryToDelete ) prevHashListEntry = prevHashListEntry->hashLink; } } if ( prevHashListEntry ) prevHashListEntry->hashLink = entryToDelete->hashLink; else hashTable[hashPosition] = entryToDelete->hashLink; if ( entryToDelete->last ) entryToDelete->last->next = entryToDelete->next; else inUseListHeader = entryToDelete->next; if ( entryToDelete->next ) entryToDelete->next->last = entryToDelete->last; entryToDelete->next = freeListHeader; freeListHeader = entryToDelete; } /*-------------------------- isUPartnStabReducible ------------------------*/ RefinementPriorityPair isOrbReducible( const RefinementFamily *family, /* The refinement family mapping must be orbRefine; family parm[0] is the group. */ const PartitionStack *const UpsilonStack) { BOOLEAN cellWillSplit; Unsigned i, j, m, groupNumber, hashPosition, newCellNumber, oldCellNumber, count; unsigned long minPriority, thisPriority; UnsignedS *oldLevelAddr; UnsignedS *const pointList = UpsilonStack->pointList, *const startCell = UpsilonStack->startCell, *const cellSize = UpsilonStack->cellSize; PermGroup *G = family->familyParm_L[0].ptrParm; Unsigned level = family->familyParm_L[1].intParm; UnsignedS *orbNumberOfPt = G->orbNumberOfPt[level]; UnsignedS *const startOfOrbitNo = G->startOfOrbitNo[level]; RefinementPriorityPair reducingRefn; RefnListEntry *refnList; RefnListEntry *p, *oldP, *position, *minPosition; /* Check that the refinement mapping really is pointStabRefn, as required, and that the group is one for which initializeOrbRefine has been called. */ if ( family->refine != orbRefine ) ERROR( "isOrbReducible", "Error: incorrect refinement mapping"); for ( groupNumber = 0 ; groupNumber < refnData.groupCount && refnData.group[groupNumber] != G ; ++groupNumber ) ; if ( groupNumber >= refnData.groupCount ) ERROR( "isOrbReducible", "Routine not initialized for group.") hashTable = refnData.hashTable[groupNumber]; refnList = refnData.refnList[groupNumber]; oldLevelAddr = &refnData.oldLevel[groupNumber]; /* If this is a new level, we reconstruct the list of potential refinements from scratch. */ if ( level != *oldLevelAddr ) { /* Initialize data structures. */ *oldLevelAddr = level; for ( i = 0 ; i < hashTableSize ; ++i ) hashTable[i] = NULL; freeListHeader = &refnList[0]; inUseListHeader = NULL; for ( i = 0 ; i < G->degree ; ++i) refnList[i].next = &refnList[i+1]; refnList[G->degree].next = NULL; /* Process the i'th cell of the top partition for i = 1,2,...., finding all possible refinements. */ for ( i = 1 ; i <= UpsilonStack->height ; ++i ) { /* First check if the i'th cell will split. If not, proceed directly to the next cell. */ for ( m = startCell[i]+1 , cellWillSplit = FALSE ; m < startCell[i] + cellSize[i] && !cellWillSplit ; ++m ) if ( orbNumberOfPt[ pointList[m] ] != orbNumberOfPt[ pointList[m-1] ] ) cellWillSplit = TRUE; if ( !cellWillSplit ) continue; /* Now find all splittings of the i'th cell and insert them into the list in sorted order. */ for ( m = startCell[i] ; m < startCell[i]+cellSize[i] ; ++m ) { j = orbNumberOfPt[pointList[m]]; hashPosition = HASH( i, j); p = hashTable[hashPosition]; while ( p && (p->i != i || p->j != j) ) p = p->hashLink; if ( p ) ++p->newCellSize; else { if ( !freeListHeader ) ERROR( "isOrbReducible", "Refinement list exceeded bound (should not occur).") p = freeListHeader; freeListHeader = freeListHeader->next; p->next = inUseListHeader; if ( inUseListHeader ) inUseListHeader->last = p; p->last = NULL; inUseListHeader = p; p->hashLink = hashTable[hashPosition]; hashTable[hashPosition] = p; p->i = i; p->j = j; p->newCellSize = 1; } } } } /* If this is not a new level, we merely fix up the old list. The entries for the new cell must be created and those for its parent must be adjusted. */ else { freeListHeader = refnData.freeListHeader[groupNumber]; inUseListHeader = refnData.inUseListHeader[groupNumber]; newCellNumber = UpsilonStack->height; oldCellNumber = UpsilonStack->parent[UpsilonStack->height]; for ( m = startCell[newCellNumber] , cellWillSplit = FALSE ; m < startCell[newCellNumber] + cellSize[newCellNumber] ; ++m ) { if ( m > startCell[newCellNumber] && orbNumberOfPt[pointList[m]] != orbNumberOfPt[pointList[m-1]] ) cellWillSplit = TRUE; j = orbNumberOfPt[pointList[m]]; hashPosition = HASH( oldCellNumber, j); p = hashTable[hashPosition]; oldP = NULL; while ( p && (p->i != oldCellNumber || p->j != j) ) { oldP = p; p = p->hashLink; } if ( p ) { --p->newCellSize; if ( p->newCellSize == 0 ) deleteRefnListEntry( p, hashPosition, oldP); } } if ( cellWillSplit ) for ( m = startCell[newCellNumber] , cellWillSplit = FALSE ; m < startCell[newCellNumber] + cellSize[newCellNumber] ; ++m ) { hashPosition = HASH( newCellNumber, j); p = hashTable[hashPosition]; while ( p && (p->i != newCellNumber || p->j != j) ) p = p->hashLink; if ( p ) ++p->newCellSize; else { if ( !freeListHeader ) ERROR( "isOrbReducible", "Refinement list exceeded bound (should not occur).") p = freeListHeader; freeListHeader = freeListHeader->next; p->next = inUseListHeader; if ( inUseListHeader ) inUseListHeader->last = p; p->last = NULL; inUseListHeader = p; p->hashLink = hashTable[hashPosition]; hashTable[hashPosition] = p; p->i = newCellNumber; p->j = j; p->newCellSize = 1; } } } /* Now we return a refinement of minimal priority. While searching the list, we also check for refinements invalidated by previous splittings. */ minPosition = inUseListHeader; minPriority = ULONG_MAX; count = 1; for ( position = inUseListHeader ; position && count < 100 ; position = position->next , ++count ) { while ( position && position->newCellSize == cellSize[position->i] ) { p = position; position = position->next; deleteRefnListEntry( p, hashTableSize+1, NULL); } if ( !position ) break; if ( (thisPriority = (unsigned long) position->newCellSize + MIN( cellSize[position->i], SIZE_OF_ORBIT(position->j) )) < minPriority ) { minPriority = thisPriority; minPosition = position; } } if ( minPriority == ULONG_MAX ) reducingRefn.priority = IRREDUCIBLE; else { reducingRefn.refn.family = family; reducingRefn.refn.refnParm[0].intParm = minPosition->i; reducingRefn.refn.refnParm[1].intParm = minPosition->j; reducingRefn.priority = thisPriority; } /* If this is the last call to isOrbReducible for this group (UpsilonStack has height degree-1), free memory and reinitialize. */ if ( UpsilonStack->height == G->degree - 1 ) { freePtrArrayDegree( refnData.hashTable[groupNumber]); free( refnData.refnList[groupNumber]); refnData.group[groupNumber] = NULL; --trueGroupCount; if ( trueGroupCount == 0 ) refnData.groupCount = 0; } refnData.freeListHeader[groupNumber] = freeListHeader; refnData.inUseListHeader[groupNumber] =inUseListHeader; return reducingRefn; } cstExtraRBase() #endif guava-3.6/src/leon/src/essentia.c0000644017361200001450000000450311026723452016640 0ustar tabbottcrontab/* File essentia.c. Contains functions for testing and setting the essential[] field of permutations. */ #include #include "group.h" extern GroupOptions options; CHECK( essent) BOOLEAN essentialAtLevel( const Permutation *const perm, const Unsigned level) { if ( level <= 31 ) return (perm->essential[0] & bitSetAt[level]) != 0ul; else return (perm->essential[level>>5] & bitSetAt[level&31]) != 0ul; } BOOLEAN essentialBelowLevel( const Permutation *const perm, const Unsigned level) { Unsigned i; unsigned long t; if ( level <= 31 ) return (perm->essential[0] & bitSetBelow[level] & 0xFFFFFFFE) != 0; else { t = perm->essential[0] & 0xFFFFFFFE; for ( i = 1 ; i < level>>5 ; ++i ) t |= perm->essential[i]; t |= perm->essential[level>>5] & bitSetBelow[level&31]; return t != 0; } } BOOLEAN essentialAboveLevel( const Permutation *const perm, const Unsigned level) { Unsigned i; unsigned long t; t = perm->essential[level>>5] & ~(bitSetAt[level&31] | bitSetBelow[level&31]); for ( i = (level>>5)+1 ; i <= (options.maxBaseSize+1)/32 ; ++i ) t |= perm->essential[i]; return t != 0; } void makeEssentialAtLevel( Permutation *const perm, const Unsigned level) { perm->essential[level>>5] |= bitSetAt[level&31]; } void makeNotEssentialAtLevel( Permutation *const perm, const Unsigned level) { perm->essential[level>>5] &= ~bitSetAt[level&31]; } void makeNotEssentialAtAboveLevel( Permutation *const perm, const Unsigned level) { Unsigned i; perm->essential[level>>5] &= bitSetBelow[level&31]; for ( i = (level>>5)+1 ; i <= (options.maxBaseSize+1)/32 ; ++i ) perm->essential[i] = 0; } void makeNotEssentialAll( Permutation *const perm) { Unsigned i; for ( i = 0 ; i <= (options.maxBaseSize+1)/32 ; ++i ) perm->essential[i] = 0; } void makeUnknownEssential( Permutation *const perm) { Unsigned i; perm->essential[0] = 0xFFFFFFFE; for ( i = 1 ; i <= (options.maxBaseSize+1)/32 ; ++i ) perm->essential[i] = 0xFFFFFFFF; } void copyEssential( Permutation *const newPerm, const Permutation *const oldPerm) { Unsigned i; for ( i = 0 ; i <= (options.maxBaseSize+1)/32 ; ++i ) newPerm->essential[i] = oldPerm->essential[i]; } guava-3.6/src/leon/src/inter.h0000644017361200001450000000012011026723452016142 0ustar tabbottcrontab#ifndef INTER #define INTER extern int main( int argc, char *argv[]) ; #endif guava-3.6/src/leon/src/permgrp.c0000644017361200001450000005504411026723452016507 0ustar tabbottcrontab/* File permgrp.c. Contains miscellaneous short functions for computing with permutation groups, as follows: isNontrivialGroup: Returns true if a permutation group has order at least 2. A base/sgs are not needed. levelIn: Returns the level of a permutation relative to the base of a given permutation group. isIdentityElt: Returns true is an element of a group with known base is an involution (fast test). isInvolutoryElt: Returns true is an element of a group with known base is an involution (fast test). */ #include #include #include #include "group.h" #include "copy.h" #include "errmesg.h" #include "essentia.h" #include "new.h" #include "permut.h" #include "storage.h" extern GroupOptions options; CHECK( permgr) /*-------------------------- genCount -------------------------------------*/ /* This function may be used to determine the total number of generators, and the number of known involutory generators, in a permutation group. The function returns the total number of generators and sets the second parameter to the number of involutory generators. Note the function assumes inverse generators are present as permutations on the linked list of generators, unless involCount == NULL. */ Unsigned genCount( const PermGroup *const G, /* The permutation group. */ Unsigned *involCount) /* If nonnull, set to number of involutory generators. */ { Unsigned totalCount = 0, tempInvolCount = 0; Permutation *gen; for ( gen = G->generator ; gen ; gen = gen->next ) { ++totalCount; if ( isInvolution( gen) ) ++tempInvolCount; } if ( involCount ) *involCount = tempInvolCount; return tempInvolCount + (totalCount - tempInvolCount) / 2; } /*-------------------------- isFixedPointOf -------------------------------*/ /* The function isFixedPointOf( G, level, point) returns true if the point point is a fixed point of G^(level), and it returns false otherwise. */ BOOLEAN isFixedPointOf( const PermGroup *const G, /* A group with known base and sgs. */ const Unsigned level, /* The level mentioned above. */ const Unsigned point) /* Check if this point is a fixed point. */ { Permutation *gen; for ( gen = G->generator ; gen ; gen = gen->next ) if ( gen->level >= level && gen->image[point] != point ) return FALSE; return TRUE; } /*-------------------------- isNontrivialGroup ----------------------------*/ /* This function returns true if a permutation group has order at least 2 and false if it has order 1. A base/sgs are not needed. */ BOOLEAN isNontrivialGroup( PermGroup *G) /* The permutation group to test. */ { Permutation *gen; for ( gen = G->generator ; gen ; gen = gen->next ) if ( !isIdentity( gen) ) return TRUE; return FALSE; } /*-------------------------- levelIn --------------------------------------*/ /* This function returns the level of a permutation relative to the sequence of points in the array base of a permutation group. (The array need not actually be a base.) If the permutation fixes the "base", the value returned is 1+baseSize. */ Unsigned levelIn( PermGroup *G, /* The perm group (base and baseSize filled in). */ Permutation *perm) /* The permutation whose level is returned. */ { Unsigned level; for ( level = 1 ; level <= G->baseSize && perm->image[G->base[level]] == G->base[level] ; ++level ) ; return level; } /*-------------------------- isIdentityElt --------------------------------*/ /* This function returns true if a given permutation known to lie in a group with known base is the identity, and false otherwise. The function is fast, as the permutation need be applied only to the base. */ BOOLEAN isIdentityElt( PermGroup *G, /* The permutation group (base known). */ Permutation *perm) /* The permutation known to lie in G. */ { Unsigned i; if ( !IS_SYMMETRIC(G) ) { for ( i = 1 ; i <= G->baseSize && perm->image[G->base[i]] == G->base[i] ; ++i ) ; return i > G->baseSize; } else { for ( i = 1 ; i <= G->degree && perm->image[i] == i ; ++i ) ; return i > G->degree; } } /*-------------------------- isInvolutoryElt ------------------------------*/ /* This function returns true if a given permutation known to lie in a group with known base is an involution, and false otherwise. The function is fast, as the permutation need be applied only to the base. */ BOOLEAN isInvolutoryElt( PermGroup *G, /* The permutation group (base known). */ Permutation *perm) /* The permutation known to lie in G. */ { Unsigned i; for ( i = 1 ; i <= G->baseSize && perm->image[perm->image[G->base[i]]] == G->base[i] ; ++i ) ; return i > G->baseSize; } /*-------------------------- fixesBasicOrbit ------------------------------*/ /* The function fixesBasicOrbit( G, level, perm) returns true if permutation perm fixes (setwise) the level'th basic orbit or permutation group G and returns false otherwise. Note: The basic orbit need not be correct. */ BOOLEAN fixesBasicOrbit( const PermGroup *const G, const Unsigned level, const Permutation *const perm) { Unsigned i; UnsignedS *basicOrbit = G->basicOrbit[level]; Permutation **svec = G->schreierVec[level]; for ( i = 1 ; i <= G->basicOrbLen[level] ; ++i ) if ( ! svec[ perm->image[basicOrbit[i]] ] ) return FALSE; return TRUE; } /*-------------------------- linkEssentialGens ----------------------------*/ /* This function constructs a singly linked list of all the generators of a permutation group essential at a specified level, using the xNext field of the generating permutations. It returns a pointer to the head permutation on the list. The field essential of each generator must be filled in. */ Permutation *linkEssentialGens( PermGroup *G, /* The permutation group. */ Unsigned level) /* Generators essential at this level are linked. */ { Permutation *listHeader = NULL, *previousGen = NULL, *gen; for ( gen = G->generator ; gen ; gen = gen->next ) if ( ESSENTIAL_AT_LEVEL(gen,level) ) { if ( previousGen ) previousGen->xNext = gen; else listHeader = gen; gen->xNext = NULL; previousGen = gen; } return listHeader; } /*-------------------------- assignGenName -------------------------------*/ /* This function assigns a name to a generator for a permutation group. The name chosen is zz, where zz is the 2-digit ASCII representation of the smallest positive integer not currently in use for a generator name. However, if is *, then the name will be a single letter, the first not currently in use, or two identical letters, if all single letters are in use. The function terminates with an error message if all possible names are already in use. */ void assignGenName( PermGroup *const G, Permutation *const gen) { char inUse[256]; char *letter = "abcdefghijklmnopqrstuvwxyz"; Unsigned i, prefixLen; char let1, let2; Permutation *oldGen; if ( strcmp(options.genNamePrefix,"*") == 0 ) { for ( i = 0 ; i < 26 ; ++i ) { inUse[letter[i]] = FALSE; inUse[letter[i]-64] = FALSE; /* OK for ASCII and EBCDIC. */ } for ( oldGen = G->generator ; oldGen ; oldGen = oldGen->next ) { let1 = tolower( oldGen->name[0]); let2 = tolower( oldGen->name[1]); if ( strlen(oldGen->name) == 1 ) inUse[let1] = TRUE; else if ( strlen(oldGen->name) == 2 && let1 == let2 & let1 >= 64 ) inUse[let1-64] = TRUE; } for ( i = 0 ; i < 26 ; ++i ) if ( !inUse[letter[i]] ) { gen->name[0] = letter[i]; gen->name[1] = '\0'; return ; } for ( i = 0 ; i < 26 ; ++i ) if ( !inUse[letter[i]-64] ) { gen->name[0] = letter[i]; gen->name[1] = letter[i]; gen->name[2] = '\0'; return ; } ERROR( "assignGenName", "No more generator names are available.") } else{ for ( i = 1 ; i <= 99 ; ++i ) inUse[i] = 0; prefixLen = strlen( options.genNamePrefix); for ( oldGen = G->generator ; oldGen ; oldGen = oldGen->next ) if ( strncmp( oldGen->name, options.genNamePrefix, prefixLen) == 0 && oldGen->name[prefixLen] == i / 10 + '0' && oldGen->name[prefixLen+1] == i % 10 + '0' ) inUse[i] = TRUE; for ( i = 1 ; i <= 99 ; ++i ) if ( !inUse[i] ) { strcpy( gen->name, options.genNamePrefix); gen->name[prefixLen] = i / 10 + '0'; gen->name[prefixLen+1] = i % 10 + '0'; gen->name[prefixLen+2] = '\0'; return; } ERROR( "assignGenName", "No more generator names are available.") } } /*-------------------------- adjoinInverseGen ----------------------------*/ void adjoinInverseGen( PermGroup *const G, Permutation *gen) /* Must be a generator of G, and must have invImage. */ { Permutation *invGen; if ( !gen->invPermutation ) if ( gen->image == gen->invImage ) gen->invPermutation = gen; else { invGen = allocPermutation(); gen->invPermutation = invGen; invGen->invPermutation = gen; strcpy( invGen->name, "*"); invGen->degree = gen->degree; invGen->level = gen->level; MAKE_NOT_ESSENTIAL_ALL( invGen); invGen->image = gen->invImage; invGen->invImage = gen->image; invGen->last = NULL; invGen->next = G->generator; G->generator->last = invGen; G->generator = invGen; } } /*-------------------------- depthGreaterThan ----------------------------*/ /* This function tests rather the "depth" of a group G exceeds a specified integral value comparisonDepth. Here the depth of G is defined to be log(|G|) / log(degree(G)). The function returns true if the depth of G exceeds comparisonDepth and false otherwise. Overflow should occur only if (degree(G))^comparisonDepth is out of bounds. If the NOFLOAT option is given, the computation is approximate. */ BOOLEAN depthGreaterThan( const PermGroup *const G, const Unsigned comparisonDepth) { int i, j; #ifndef NOFLOAT double ratio = 1.0; /* Handle symmetric group. (Always return true -- tecnically wrong.) */ if ( IS_SYMMETRIC(G) ) return TRUE; for ( i = 1 ; i <= comparisonDepth ; ++i ) ratio /= (double) G->degree; for ( i = 0 ; i < G->order->noOfFactors ; ++i ) for ( j = 1 ; j <= G->order->exponent[i] ; ++j ) { ratio *= (double) G->order->prime[i]; if ( ratio > 1.0 ) return TRUE; } #endif #ifdef NOFLOAT int cDepth = comparisonDepth; unsigned long product = 1; /* Handle symmetric group. (Always return true -- tecnically wrong.) */ if ( IS_SYMMETRIC(G) ) return TRUE; for ( i = 0 ; i < G->order->noOfFactors ; ++i ) for ( j = 1 ; j <= G->order->exponent[i] ; ++j ) { product *= G->order->prime[i]; if ( product >= G->degree ) { product = (product + G->degree / 2) / G->degree; --cDepth; if ( cDepth <= 0 ) return TRUE; } } #endif return FALSE; } /*-------------------------- isDoublyTransitive --------------------------*/ /* This function tests whether a group G is doubly transitive. A base and strong generating set for G must be available (not checked). */ BOOLEAN isDoublyTransitive( const PermGroup *const G) { return G->baseSize >= 2 && G->basicOrbLen[2] == G->degree - 1; } /*-------------------------- conjugatePermByPerm -------------------------*/ /* This function may be used to conjugate one permutation by another. The permutation perm is replaced by conjPerm^-1 * perm * conjPerm. It is assumed that both permutations have the same degree. */ void conjugatePermByPerm( Permutation *const perm, const Permutation *const conjPerm) { Unsigned pt; Unsigned *tempPerm = allocIntArrayDegree(); for ( pt = 1 ; pt <= perm->degree ; ++pt ) tempPerm[pt] = perm->image[pt]; for ( pt = 1 ; pt <= perm->degree ; ++pt ) perm->image[conjPerm->image[pt]] = conjPerm->image[tempPerm[pt]]; if ( perm->invImage ) for ( pt = 1 ; pt <= perm->degree ; ++pt ) perm->invImage[perm->image[pt]] = pt; freeIntArrayDegree( tempPerm); } /*-------------------------- conjugateGroupByPerm ------------------------*/ /* This function may be used to conjugate a permutation group by a permutation. The permutation group G is replaced by conjPerm^-1 * G * conjPerm. It is assumed that the group and the permutation have the same degree. The complete The completeOrbit, orbNumberOfPt, and startOfOrbitNo fields are not currently handled, nor are omega and invOmega. */ void conjugateGroupByPerm( PermGroup *const G, const Permutation *const conjPerm) { Unsigned level, i, pt; Permutation *gen; Permutation **tempSVec, **temp; /* Conjugate the base, basic orbits, and Schreier vectors. */ if ( G->base ) { tempSVec = (Permutation **) allocPtrArrayDegree(); for ( level = 1 ; level <= G->baseSize ; ++level ) { G->base[level] = conjPerm->image[G->base[level]]; for ( i = 1 ; i <= G->basicOrbLen[level] ; ++i ) G->basicOrbit[level][i] = conjPerm->image[G->basicOrbit[level][i]]; for ( pt = 1 ; pt <= G->degree ; ++pt ) tempSVec[conjPerm->image[pt]] = G->schreierVec[level][pt]; EXCHANGE( G->schreierVec[level], tempSVec, temp); } freePtrArrayDegree( tempSVec); } /* Conjugate generators. */ for ( gen = G->generator ; gen ; gen = gen->next ) conjugatePermByPerm( gen, conjPerm); } /*-------------------------- checkConjugacyInGroup ------------------------------*/ /* The function checkConjugacyInGroup( G, e, f, conjPerm) returns true if permutation conjPerm in G conjugates permutation e in group G to permutation f in G, that is, if e ^ conjPerm = f, or equivalently, e * conjPerm = conjPerm * f. It is assumed G has a base and strong generating set. */ BOOLEAN checkConjugacyInGroup( const PermGroup *const G, const Permutation *const e, const Permutation *const f, const Permutation *const conjPerm) { int i; for ( i = 1 ; i <= G->baseSize ; ++i ) if ( conjPerm->image[e->image[G->base[i]]] != f->image[conjPerm->image[G->base[i]]] ) return FALSE; return TRUE; } /*-------------------------- isElementOf -----------------------------------------*/ /* The function isElementOf( perm, group) returns true is the permutation perm lies in the group G and false otherwise. The group must already have a base and strong generating set. This procedure is not particularly efficient: It does a great deal of unnecessary multiplications if containment turns out not to hold. */ BOOLEAN isElementOf( const Permutation *const perm, const PermGroup *const group) { Permutation *gen, *perm1; Unsigned level, gamma; BOOLEAN returnValue; /* Check that the group has a base. If not, give error message. */ if ( group->base == NULL) ERROR1s( "isElementOf", "Group ", group->name, " must have a base.") /* Make a copy of permutation perm. */ perm1 = copyOfPermutation( perm); /* Now attempt to factor perm1. If process breaks down because the appropriate point is not in the required basic orbit, return false immediately. */ for ( level = 1 ; level <= group->baseSize ; ++level) { gamma = perm1->image[group->base[level]]; while ( (gen = group->schreierVec[level][gamma]) != NULL && gen != FIRST_IN_ORBIT ) { rightMultiplyInv( perm1, gen); gamma = gen->invImage[gamma]; } if ( gen == NULL ) { deletePermutation( perm1); return FALSE; } } /* If all the appropriate points lie in the correct basic orbits, return true if and only if the remaining permutation is the identity. */ returnValue = isIdentity( perm1); deletePermutation( perm1); return returnValue; } /*-------------------------- isSubgroupOf ----------------------------------------*/ /* The function isSubgroupOf( subGroup, group) returns true if subGroup is a subgroup of group and returns false otherwise. The degrees of the groups must be equal. It is not too efficient because it checks all (possibly strong) generators of subGroup. Note group must have a base and strong generating set, but subGroup need not. */ BOOLEAN isSubgroupOf( const PermGroup *const subGroup, const PermGroup *const group) { Permutation *gen; /* Check that the group has a base. If not, give error message. */ if ( group->base == NULL) ERROR1s( "isElementOf", "Group ", group->name, " must have a base.") /* Now check each generator of subGroup for containment in group. */ for ( gen = subGroup->generator ; gen ; gen = gen->next ) if ( !isElementOf(gen,group) ) return FALSE; return TRUE; } /*-------------------------- isNormalizedBy --------------------------------------*/ /* The function isNormalizedBy( group, nGroup) returns true if group is normalized by nGroup and returns false otherwise. The degrees of the groups must be equal. It is inefficient because it checks all (possibly strong) generators of group conjugated by all (possibly strong) generators of nGroup and, more importantly, it does NOT take advantage of any prior knowledge that group is a subgroup of nGroup. Note group must have a base and strong generating set, but nGroup need not. */ BOOLEAN isNormalizedBy( const PermGroup *const group, const PermGroup *const nGroup) { Permutation *gen, *nGen, *perm = newIdentityPerm( group->degree); BOOLEAN involFlag; Unsigned pt; /* Check that the group has a base. If not, give error message. */ if ( group->base == NULL) ERROR1s( "isElementOf", "Group ", group->name, " must have a base.") /* Now check each conjugage of each generator of group for containment in nGroup. */ for ( gen = group->generator ; gen ; gen = gen->next ) { involFlag = isInvolution( gen); if ( involFlag && perm->invImage != perm->image ) { freeIntArrayDegree( perm->invImage); perm->invImage = perm->image; } else if ( !involFlag && perm->invImage == perm->image ) perm->invImage = allocIntArrayDegree(); for ( nGen = nGroup->generator ; nGen ; nGen = nGen->next ) { for ( pt = 1 ; pt <= group->degree ; ++pt ) perm->image[nGen->image[pt]] = nGen->image[gen->image[pt]]; if ( !involFlag ) for ( pt = 1 ; pt <= group->degree ; ++pt ) perm->invImage[perm->image[pt]] = pt; if ( !isElementOf(perm,group) ) { freePermutation( perm); return FALSE; } } } freePermutation( perm); return TRUE; } /*-------------------------- isCentralizedBy --------------------------------*/ /* The function isCentralizedBy( group, cGroup) returns true if group is centralized by cGroup and returns false otherwise. The degrees of the groups must be equal. It is inefficient because it checks all pairs of (possibly strong) generators from the two groups and, more importantly, it does NOT take advantage of any prior knowledge of the bases of the two groups (as would be possible when one is contained in the other). */ BOOLEAN isCentralizedBy( const PermGroup *const group, const PermGroup *const cGroup) { Permutation *gen, *cGen; Unsigned pt; /* Check equality of degrees. */ if ( group->degree != cGroup->degree ) ERROR( "isCentralizedBy", "Groups do not have same degree.") /* Check each generator of group commutes with each generator of cGroup. */ for ( gen = group->generator ; gen ; gen = gen->next ) for ( cGen = cGroup->generator ; cGen ; cGen = cGen->next ) for ( pt = 1 ; pt <= group->degree ; ++pt ) if ( cGen->image[gen->image[pt]] != gen->image[cGen->image[pt]] ) return FALSE; return TRUE; } /*-------------------------- isBaseImage -----------------------------------------*/ /* The function isBaseImage( G, image), where G is a permutation group having a base and strong generating set and where image is an array of points of length G->baseSize, returns true if there exists a permutation in G mapping the base to the sequence image, and returns false otherwise. */ BOOLEAN isBaseImage( const PermGroup *const G, const Unsigned image[]) { Unsigned level, i, t; UnsignedS *img = allocIntArrayBaseSize(); for ( level = 1 ; level <= G->baseSize ; ++level ) img[level] = image[level]; for ( level = 1 ; level <= G->baseSize ; ++level ) { if ( G->schreierVec[level][img[level]] == NULL ) { freeIntArrayBaseSize( img); return FALSE; } while ( img[level] != G->base[level] ) { t = img[level]; for ( i = level ; i <= G->baseSize ; ++i ) img[i] = G->schreierVec[level][t]->invImage[img[i]]; } } freeIntArrayBaseSize( img); return TRUE; } /*-------------------------- reduceWrtGroup --------------------------------*/ /* The function reduceWrtGroup( G, h, reductionLevel), where G is a permutation group with base and strong generating set and where h is a permutation (with inverse image) replaces h by h u_1[d_1]^-1 u_2[d_2]^-1 u_j-1[d_j-1]^-1, where the new h fixes the first j-1 base points of G, and where the new h maps the j'th base point outside the j'th basic orbit, or where j = G->baseSize+1. Unless reductionLevel = NULL, it sets *reductionLevel to j. */ void reduceWrtGroup( const PermGroup *const G, Permutation *const h, Unsigned *reductionLevel) { int level; for ( level = 1 ; level <= G->baseSize && G->schreierVec[level][h->image[G->base[level]]] != NULL ; ++level ) while ( h->image[G->base[level]] != G->base[level] ) rightMultiplyInv( h, G->schreierVec[level][h->image[G->base[level]]]); if ( reductionLevel ) *reductionLevel = level; } guava-3.6/src/leon/src/cstborb.h0000644017361200001450000000254511026723452016474 0ustar tabbottcrontab#ifndef CSTBORB #define CSTBORB extern Permutation *linkGensAtLevel( PermGroup *G, /* The permutation group. */ Unsigned level) /* Permutations at or above this level will be included. */ ; extern Permutation *linkEssentialGensAtLevel( PermGroup *G, /* The permutation group. */ Unsigned level) /* Permutations at or above this level will be included if they are essential at this level. */ ; extern Permutation *genExpandingBasicOrbit( Permutation **firstGen, const Unsigned orbitLen, UnsignedS *orbit, Permutation **svec) ; extern void constructBasicOrbit( PermGroup *const G, /* The permutation group. */ const Unsigned level, /* The level of the basic orbit to build. */ char *option) /* One of the three options above. */ ; extern Unsigned extendBasicOrbit( PermGroup *G, /* The permutation group. */ Unsigned level, /* The level of the basic orbit to extend. */ Permutation *newGen) /* The new generator not previously included the Schreier vector. */ ; extern void constructAllOrbitInfo( PermGroup *const G, const Unsigned level) ; #endif guava-3.6/src/leon/src/orbdes.h0000644017361200001450000000012211026723452016301 0ustar tabbottcrontab#ifndef ORBDES #define ORBDES extern int main( int argc, char *argv[]) ; #endif guava-3.6/src/leon/src/swt.h0000644017361200001450000000544111026723452015651 0ustar tabbottcrontab#undef WEIGHT #undef ADD #if MAXLEN == 32 #define WEIGHT onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] #define ADD(i) cw1 ^= basis1[i]; #elif MAXLEN == 48 #define WEIGHT onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] + \ onesCount[cw2 & 0x0000ffff] #define ADD(i) cw1 ^= basis1[i]; cw2 ^= basis2[i]; #elif MAXLEN == 64 #define WEIGHT onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] + \ onesCount[cw2 & 0x0000ffff] + onesCount[cw2 >> 16] #define ADD(i) cw1 ^= basis1[i]; cw2 ^= basis2[i]; #elif MAXLEN == 80 #define WEIGHT onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] + \ onesCount[cw2 & 0x0000ffff] + onesCount[cw2 >> 16] + \ onesCount[cw3 & 0x0000ffff] #define ADD(i) cw1 ^= basis1[i]; cw2 ^= basis2[i]; cw3 ^= basis3[i]; #elif MAXLEN == 96 #define WEIGHT onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] + \ onesCount[cw2 & 0x0000ffff] + onesCount[cw2 >> 16] + \ onesCount[cw3 & 0x0000ffff] + onesCount[cw3 >> 16] #define ADD(i) cw1 ^= basis1[i]; cw2 ^= basis2[i]; cw3 ^= basis3[i]; #elif MAXLEN == 112 #define WEIGHT onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] + \ onesCount[cw2 & 0x0000ffff] + onesCount[cw2 >> 16] + \ onesCount[cw3 & 0x0000ffff] + onesCount[cw3 >> 16] + \ onesCount[cw4 & 0x0000ffff] #define ADD(i) cw1 ^= basis1[i]; cw2 ^= basis2[i]; cw3 ^= basis3[i]; \ cw4 ^= basis4[i]; #elif MAXLEN == 128 #define WEIGHT onesCount[cw1 & 0x0000ffff] + onesCount[cw1 >> 16] + \ onesCount[cw2 & 0x0000ffff] + onesCount[cw2 >> 16] + \ onesCount[cw3 & 0x0000ffff] + onesCount[cw3 >> 16] + \ onesCount[cw4 & 0x0000ffff] + onesCount[cw4 >> 16] #define ADD(i) cw1 ^= basis1[i]; cw2 ^= basis2[i]; cw3 ^= basis3[i]; \ cw4 ^= basis4[i]; #endif for ( loopIndex = 0 ; loopIndex <= lastPass ; ++loopIndex ) { ++freq[curWt=WEIGHT]; SAVE ADD(0) ++freq[curWt=WEIGHT]; SAVE ADD(1) ++freq[curWt=WEIGHT]; SAVE ADD(0) ++freq[curWt=WEIGHT]; SAVE ADD(2) ++freq[curWt=WEIGHT]; SAVE ADD(0) ++freq[curWt=WEIGHT]; SAVE ADD(1) ++freq[curWt=WEIGHT]; SAVE ADD(0) ++freq[curWt=WEIGHT]; SAVE temp = loopIndex + 1; m = 3; while ( (temp & 1) == 0 ) { ++m; temp >>= 1; } ADD(m) } #undef MAXLEN guava-3.6/src/leon/src/setimage.sh0000755017361200001450000000003511026723452017012 0ustar tabbottcrontab#!/bin/sh setstab -image $* guava-3.6/src/leon/src/ccommut.h0000644017361200001450000000034611026723452016502 0ustar tabbottcrontab#ifndef CCOMMUT #define CCOMMUT extern PermGroup *commutatorGroup( const PermGroup *const G, const PermGroup *const H) ; extern PermGroup *normalClosure( const PermGroup *const G, const PermGroup *const H) ; #endif guava-3.6/src/leon/src/compper.sh0000755017361200001450000000004211026723452016657 0ustar tabbottcrontab#!/bin/sh compgrp -perm:$1 $2 $3 guava-3.6/src/leon/src/randgrp.c0000644017361200001450000000750111026723452016463 0ustar tabbottcrontab/* File randgrp.c. Contains functions generating random numbers and random group elements, as follows: initializeSeed: Initializes the seed for the random number generator. randInteger: Returns a pseudo-random integer in a specified range. randGroupWord: Returns a pseudo-random group element, represented as a word, in a group with known base and strong generating set. randGroupPerm: Returns a pseudo-random group element, represented as a permutation, in a group with known base and strong generating set. */ #include #include "group.h" #include "new.h" #include "permut.h" CHECK( randgr) static unsigned long seed = 47; static const unsigned long multiplier = 65539; /* 2^16 + 3 */ /*-------------------------- initializeSeed -------------------------------*/ /* The function initializeSeed may be used to set the seed for the random integer generator to a specific value. From then on, the sequence of random integers will be determined by the seed. The seed should be an odd positive integer, since the modulus is a power of 2. */ void initializeSeed( unsigned long newSeed) /* The new value for the seed. */ { seed = newSeed; } /*-------------------------- randInteger ----------------------------------*/ /* The function randInteger returns a pseudo-random integer in a given range. The technique is adapted from the book "Assembler Language for Fortran, Cobol, and PL/1 Programmers" by Shan S. Kuo, pages 106-107. It is designed for speed of computation rather than degree of randomness. It assumes type long is 32 bits and that, in multiplying unsigned long integers, excess bits on the left are discarded. */ Unsigned randInteger( Unsigned lowerBound, /* Lower bound for range of random integer. */ Unsigned upperBound) /* Upper bound for range of random integer. */ { seed = (seed * multiplier) & 0x7fffffff; return lowerBound + (seed >> 7) % (upperBound - lowerBound + 1); } /*-------------------------- randGroupWord ---------------------------------*/ /* The function randGroupWord returns newly allocated word in the strong generators of a group, representing a pseudo-random element of the stabilizer in the group of a designated number of base points. */ Word *randGroupWord( PermGroup *G, Unsigned atLevel) { Word *w = newTrivialWord(); Unsigned level, pt; Permutation **svec; for ( level = atLevel ; level <= G->baseSize ; ++level ) { pt = G->basicOrbit[level][ randInteger(1,G->basicOrbLen[level]) ]; svec = G->schreierVec[level]; while ( svec[pt] != FIRST_IN_ORBIT ) { w->position[++w->length] = svec[pt]; pt = svec[pt]->invImage[pt]; } } w->position[++w->length] = NULL; return w; } /*-------------------------- randGroupPerm ---------------------------------*/ /* The function randGroupPerm returns a newly allocated pseudo-random permutation in the stabilizer of an initial segment of the base in a permutation group. The inverse image field of the permutation is filled in. */ Permutation *randGroupPerm( PermGroup *G, Unsigned atLevel) { Permutation *randPerm = newIdentityPerm( G->degree); Unsigned level, pt, i; Permutation **svec; for ( level = atLevel ; level <= G->baseSize ; ++level ) { pt = G->basicOrbit[level][ randInteger(1,G->basicOrbLen[level]) ]; svec = G->schreierVec[level]; while ( svec[pt] != FIRST_IN_ORBIT ) { for ( i = 1 ; i <= G->degree ; ++i ) randPerm->image[i] = svec[pt]->invImage[ randPerm->image[i] ]; pt = svec[pt]->invImage[pt]; } } randPerm->invImage = NULL; adjoinInvImage( randPerm); return randPerm; } guava-3.6/src/leon/src/copy.h0000644017361200001450000000036611026723452016007 0ustar tabbottcrontab#ifndef COPY #define COPY extern Permutation *copyOfPermutation( Permutation *oldPerm) /* The permutation to be copied. */ ; extern PermGroup *copyOfPermGroup( PermGroup *oldGroup) /* The group being copied. */ ; #endif guava-3.6/src/leon/src/matrix.h0000644017361200001450000000055611026723452016342 0ustar tabbottcrontab#ifndef MATRIX #define MATRIX extern BOOLEAN isMatrix01Isomorphism( const Matrix_01 *const M1, const Matrix_01 *const M2, const Permutation *const s, const Unsigned monomialFlag) /* If TRUE, check that iso */ /* is monomial. */ ; extern Matrix_01 *augmentedMatrix( const Matrix_01 *const M) ; #endif guava-3.6/src/leon/src/cstborb.c0000644017361200001450000003317311026723452016470 0ustar tabbottcrontab/* File cstborb.c. Contains functions to construct and extend basic orbits in permutation groups, as follows: constructBasicOrbit: Constructs the basic orbit and (incomplete) Schreier vector at a given level in a permutation group. extendBasicOrbit: Extends the basic orbit and Schreier vector at a given level corresponding to inclusion of a new generator. ????? inverse constructAllOrbitInfo: Constructs complete orbit lists and Schreier vectors at a designated level. */ #include #include #include "group.h" #include "errmesg.h" #include "essentia.h" #include "factor.h" #include "storage.h" extern GroupOptions options; CHECK( cstbor) /*-------------------------- linkGensAtLevel ------------------------------*/ /* This function creates a (forward) linked list of the generators of a permutation group having level equal to or greater than a given value. The xNext field of each permutation is used for the links. The function returns a pointer to the first permutation in the list. The level fields of the generating permutations must be filled at before the function is invoked. */ Permutation *linkGensAtLevel( PermGroup *G, /* The permutation group. */ Unsigned level) /* Permutations at or above this level will be included. */ { Permutation *gen, *listHeader = NULL, *currentListEntry; for ( gen = G->generator ; gen ; gen = gen->next ) if ( gen->level >= level ) { if ( !listHeader ) listHeader = gen; else currentListEntry->xNext = gen; currentListEntry = gen; } if ( listHeader ) currentListEntry->xNext = NULL; return listHeader; } /*-------------------------- linkEssentialGensAtLevel ---------------------*/ /* This function creates a (forward) linked list of the generators of a permutation group having level equal to or greater than a given value and which are flagged as essential at that value. The xNext field of each permutation is used for the links. The function returns a pointer to the first permutation in the list. The level fields of the generating permutations must be filled at before the function is invoked. */ Permutation *linkEssentialGensAtLevel( PermGroup *G, /* The permutation group. */ Unsigned level) /* Permutations at or above this level will be included if they are essential at this level. */ { Permutation *gen, *listHeader = NULL, *currentListEntry; for ( gen = G->generator ; gen ; gen = gen->next ) if ( gen->level >= level && ESSENTIAL_AT_LEVEL(gen,level) ) { if ( !listHeader ) listHeader = gen; else currentListEntry->xNext = gen; currentListEntry = gen; } if ( listHeader ) currentListEntry->xNext = NULL; return listHeader; } /*-------------------------- genExpandingBasicOrbit -----------------------*/ /* This function returns the first generator on the list *firstGen (xNext linked) that fails to fix orbit[1..orbitLen] setwise, or NULL if no such permutation exists. Note svec is the Schreier vector for the orbit. The function also delinks the permutation returned from the (xNext-linked) list *firstGen. */ Permutation *genExpandingBasicOrbit( Permutation **firstGen, const Unsigned orbitLen, UnsignedS *orbit, Permutation **svec) { Permutation *gen, *lastGen = NULL; Unsigned i; for ( gen = *firstGen ; gen ; gen = gen->xNext ) { for ( i = 1 ; i <= orbitLen ; ++i ) if ( !svec[gen->image[orbit[i]]] ) { if ( lastGen ) lastGen->xNext = gen->xNext; else *firstGen = gen->xNext; return gen; } lastGen = gen; } return NULL; } /*-------------------------- constructBasicOrbit --------------------------*/ /* This function constructs the basic orbit vector and Schreier vector at a specified level in a permutation group. Storage for the basic orbit and Schreier vector must have been allocated prior to invocation of this function, and the level field in each generating permutation for the group must be filled in. Inverses of generators will be used only if there is a separate structure (type Permutation) for the inverse. There are three options, which determine which generators are used in constructing the Schreier vectors: "AllGensAtLevel": All generators at or above the specified level are used in constructing the Schreier vector, and all are flagged as essential at this level. "KnownEssential": Only generators previously flagged as essential at this level are used, and the essential flags are not modified. (CAUTION: The essential flags MUST be correct.) "FindEssential": An attempt is made to use as few generators as possible in the Schreier vector construction, and all generators at or above the level are marked as essential or not essential at this level, depending on whether or not they are used in the Schreier vector. */ void constructBasicOrbit( PermGroup *const G, /* The permutation group. */ const Unsigned level, /* The level of the basic orbit to build. */ char *option) /* One of the three options above. */ { typedef enum{ all, known, find} Option; Option svecOption; FactoredInt factoredOrbLen; Permutation **svec = G->schreierVec[level]; Unsigned i; UnsignedS *orbit = G->basicOrbit[level]; Unsigned found = 1, processed = 0, pt, img; Permutation *gen, *firstGen, *gensUsed, *newEssentialGen; /* Find option. Terminate if invalid. */ if ( strcmp( option, "AllGensAtLevel") == 0 ) svecOption = all; else if ( strcmp( option, "KnownEssential") == 0 ) svecOption = known; else if ( strcmp( option, "FindEssential") == 0 ) svecOption = find; else ERROR1s( "constructBasicOrbit", "Invalid option ", option, "."); /* Using xNext, form linked list of generators (or essential generators at level, if KnownEssential option is specified) at or above specified level. */ switch( svecOption) { case all: firstGen = linkGensAtLevel( G, level); for ( gen = firstGen ; gen ; gen = gen->xNext ) MAKE_ESSENTIAL_AT_LEVEL(gen,level); break; case known: firstGen = linkEssentialGensAtLevel( G, level); break; case find: firstGen = linkGensAtLevel( G, level); break; } for ( pt = 1 ; pt <= G->degree ; ++pt ) svec[pt] = NULL; orbit[1] = G->base[level]; svec[orbit[1]] = FIRST_IN_ORBIT; switch( svecOption) { case all: case known: while ( processed < found ) { pt = orbit[++processed]; for ( gen = firstGen ; gen ; gen = gen->xNext ) { img = gen->image[pt]; if ( !svec[img] ) { svec[img] = gen; orbit[++found] = img; } } } break; case find: gensUsed = NULL; while ( newEssentialGen = genExpandingBasicOrbit( &firstGen, found, orbit, svec) ) { newEssentialGen->xNext = gensUsed; gensUsed = newEssentialGen; for ( i = 1 ; i <= found ; ++i ) { img = newEssentialGen->image[orbit[i]]; if ( !svec[img] ) { orbit[++found] = img; svec[img] = newEssentialGen; } } while ( processed < found ) { pt = orbit[++processed]; for ( gen = gensUsed ; gen ; gen = gen->xNext ) { img = gen->image[pt]; if ( !svec[img] ) { svec[img] = gen; orbit[++found] = img; } } } } for ( gen = gensUsed ; gen ; gen = gen->xNext ) MAKE_ESSENTIAL_AT_LEVEL(gen,level); for ( gen = firstGen ; gen ; gen = gen->xNext ) MAKE_NOT_ESSENTIAL_AT_LEVEL(gen,level); break; } factoredOrbLen = factorize( found); factMultiply( G->order, &factoredOrbLen); factoredOrbLen = factorize( G->basicOrbLen[level]); factDivide( G->order, &factoredOrbLen); G->basicOrbLen[level] = found; } /*-------------------------- extendBasicOrbit -----------------------------*/ /* This function may be used to extend a basic orbit and Schreier vector at a given level, corresponding to inclusion of a new generator (assumed to be) at a given level. It returns the number of additional points in the basic orbit. First the new generator is applied to all points in the basic orbit. Then, if any new points are found, the construction of the Schreier vector continues in the usual manner. */ Unsigned extendBasicOrbit( PermGroup *G, /* The permutation group. */ Unsigned level, /* The level of the basic orbit to extend. */ Permutation *newGen) /* The new generator not previously included the Schreier vector. */ { Permutation **svec = G->schreierVec[level]; UnsignedS *orbit = G->basicOrbit[level]; Unsigned found = G->basicOrbLen[level], processed = found, pt, img, oldLength, i; Permutation *gen, *firstGen; for ( i = 1 ; i <= G->basicOrbLen[level] ; ++i ) { img = newGen->image[orbit[i]]; if ( !svec[img] ) { svec[img] = newGen; orbit[++found] = img; } } if ( found > G->basicOrbLen[level] ) { firstGen = linkGensAtLevel( G, level); while ( processed < found ) { pt = orbit[++processed]; for ( gen = firstGen ; gen ; gen = gen->xNext ) { img = gen->image[pt]; if ( !svec[img] ) { svec[img] = gen; orbit[++found] = img; } } } } oldLength = G->basicOrbLen[level]; G->basicOrbLen[level] = found; return found - oldLength; } /*-------------------------- constructAllOrbitInfo ------------------------*/ /* This function constructs complete orbit information for a group at a given level. Specifically, it fills in the completeOrbit, orbNumberOfPt, and startOfOrbitNo fields. (Note fields schreierVec and basicOrbit are not modified; in particular, this routine will normally be used in addition to, rather that as an alternative to, routine cstborb. Note startOfOrbitNo[orbitCount+1] is set to degree+1, in order to facilitate computation of orbit lengths. */ void constructAllOrbitInfo( PermGroup *const G, const Unsigned level) { UnsignedS *completeOrbit, *orbNumberOfPt, *startOfOrbitNo; Unsigned found = 0, processed = 0, orbitCount = 0, pt, img, orbRep, i; Permutation *gen, *firstGen; /* Here we allocate completeOrbit, orbNumberOfPt and startOfOrbitNo, if absent. */ if ( !G->completeOrbit ) { G->completeOrbit = allocPtrArrayBaseSize(); for ( pt = 1 ; pt <= options.maxBaseSize+1 ; ++pt ) G->completeOrbit[pt] = NULL; } if ( !G->orbNumberOfPt ) { G->orbNumberOfPt = allocPtrArrayBaseSize(); for ( pt = 1 ; pt <= options.maxBaseSize+1 ; ++pt ) G->orbNumberOfPt[pt] = NULL; } if ( !G->startOfOrbitNo ) { G->startOfOrbitNo = allocPtrArrayBaseSize(); for ( pt = 1 ; pt <= options.maxBaseSize+1 ; ++pt ) G->startOfOrbitNo[pt] = NULL; } if ( !G->completeOrbit[level] ) G->completeOrbit[level] = allocIntArrayDegree(); if ( !G->orbNumberOfPt[level] ) G->orbNumberOfPt[level] = allocIntArrayDegree(); if ( !G->startOfOrbitNo[level] ) G->startOfOrbitNo[level] = allocIntArrayDegree(); /* Abbreviations. */ completeOrbit = G->completeOrbit[level]; orbNumberOfPt = G->orbNumberOfPt[level]; startOfOrbitNo = G->startOfOrbitNo[level]; /* The trivial case level>baseSize is handled here. */ if ( level > G->baseSize ) { for ( pt = i = 1 ; pt <= G->degree ; ++pt , ++i ) { orbNumberOfPt[pt] = i; startOfOrbitNo[i] = i; completeOrbit[i] = pt; } startOfOrbitNo[G->degree+1] = G->degree+1; return; } /* Initially all points are flagged as not found. */ for ( pt = 1 ; pt <= G->degree ; ++pt) orbNumberOfPt[pt] = 0; /* Construct a linked list of the generators at the appropriate level. Should only essential generators be used? */ firstGen = linkGensAtLevel( G, level); /* Construct the orbits, one by one in order. */ for ( orbRep = 1 ; orbRep <= G->degree ; ++orbRep ) if ( !orbNumberOfPt[orbRep] ) { completeOrbit[++found] = orbRep; startOfOrbitNo[++orbitCount] = found; orbNumberOfPt[orbRep] = orbitCount; while ( processed < found ) { pt = completeOrbit[++processed]; for ( gen = firstGen ; gen ; gen = gen->xNext ) { img = gen->image[pt]; if ( !orbNumberOfPt[img] ) { completeOrbit[++found] = img; orbNumberOfPt[img] = orbitCount; } } } } startOfOrbitNo[orbitCount+1] = G->degree+1; } guava-3.6/src/leon/src/copy.c0000644017361200001450000001267511026723452016010 0ustar tabbottcrontab/* File copy.c. Contains functions to create copies of objects. Each function allocates storage for a new object, which is totally disjoint from the object being copies (i.e., the existing object and the new copy do not contain direct or indirect pointers to common objects, and it returns a pointer to the new object. The functions are: copyOfPermGroup: create a new copy of a permutation group. */ #include #include #include "group.h" #include "essentia.h" #include "storage.h" CHECK( copy) /*-------------------------- copyOfPermutation ----------------------------*/ /* This function creates a new copy of an existing permutation, and it returns a pointer to the new permutation. The link fields of the new permutation are not copied, or otherwise initialized, and currently the word field is not supported. */ Permutation *copyOfPermutation( Permutation *oldPerm) /* The permutation to be copied. */ { Unsigned pt; Permutation *newPerm = allocPermutation(); strcpy( newPerm->name, oldPerm->name); newPerm->degree = oldPerm->degree; if ( oldPerm->image ) { newPerm->image = allocIntArrayDegree(); for ( pt = 1 ; pt <= oldPerm->degree+1 ; ++pt ) newPerm->image[pt] = oldPerm->image[pt]; } else newPerm->image = NULL; if ( oldPerm->invImage ) { if ( oldPerm->invImage == oldPerm->image ) newPerm->invImage = newPerm->image; else { newPerm->invImage = allocIntArrayDegree(); for ( pt = 1 ; pt <= oldPerm->degree+1 ; ++pt ) newPerm->invImage[pt] = oldPerm->invImage[pt]; } } newPerm->level = oldPerm->level; COPY_ESSENTIAL( newPerm, oldPerm); return newPerm; } /*-------------------------- copyOfPermGroup ------------------------------*/ /* This function creates a new copy of an existing permutation group, and it returns a pointer to the new group. Note the word field of the generating permutations is not currently supported. The xNext field of the generators of the old group is modified. */ PermGroup *copyOfPermGroup( PermGroup *oldGroup) /* The group being copied. */ { Unsigned i, level, pt; Permutation *oldGen, *newGen, *previousGen, *temp; PermGroup *newGroup = allocPermGroup(); /* Copy name, degree, base size, base, and basic orbit lengths. */ strcpy( newGroup->name, oldGroup->name); newGroup->degree = oldGroup->degree; /* Copy the base size, base, and basic orbit lengths, if present in the old group. */ if ( oldGroup->base ) { newGroup->baseSize = oldGroup->baseSize; newGroup->base = allocIntArrayBaseSize(); for ( i = 1 ; i <= oldGroup->baseSize+1 ; ++i ) newGroup->base[i] = oldGroup->base[i]; newGroup->basicOrbLen = allocIntArrayBaseSize(); for ( i = 1 ; i <= oldGroup->baseSize ; ++i ) newGroup->basicOrbLen[i] = oldGroup->basicOrbLen[i]; } /* Copy the order, if present. */ if ( oldGroup->order ) { newGroup->order = allocFactoredInt(); newGroup->order->noOfFactors = oldGroup->order->noOfFactors; for ( i = 0 ; i < oldGroup->order->noOfFactors ; ++i ) { newGroup->order->prime[i] = oldGroup->order->prime[i]; newGroup->order->exponent[i] = oldGroup->order->exponent[i]; } } /* Copy basic orbits. */ if ( oldGroup->base && oldGroup->basicOrbit ) { newGroup->basicOrbit = (UnsignedS **) allocPtrArrayBaseSize(); for ( level = 1 ; level <= oldGroup->baseSize ; ++level ) { newGroup->basicOrbit[level] = allocIntArrayDegree(); for ( i = 1 ; i <= oldGroup->basicOrbLen[level]+1 ; ++i ) newGroup->basicOrbit[level][i] = oldGroup->basicOrbit[level][i]; } } /* Copy generators. The xNext field of each old generator is set to point to the corresponding new generator (for use in Schreier vector construction. */ newGroup->generator = previousGen = NULL; for ( oldGen = oldGroup->generator ; oldGen ; oldGen = oldGen->next ) { newGen = copyOfPermutation( oldGen); if ( previousGen ) { previousGen->next = newGen; newGen->last = previousGen; } else { newGroup->generator = newGen; newGen->last = NULL; } newGen->next = NULL; oldGen->xNext = newGen; previousGen = newGen; } /* Copy the Schreier vectors. */ if ( oldGroup->base && oldGroup->schreierVec ) { newGroup->schreierVec = (Permutation ***) allocPtrArrayBaseSize(); for ( level = 1 ; level <= oldGroup->baseSize ; ++level ) { newGroup->schreierVec[level] = (Permutation **) allocPtrArrayDegree(); for ( i = 1 ; i <= oldGroup->degree ; ++i ) if ( (temp = oldGroup->schreierVec[level][i]) == NULL || temp == FIRST_IN_ORBIT ) newGroup->schreierVec[level][i] = temp; else newGroup->schreierVec[level][i] =temp->xNext; } } /* Copy the list of points. */ if ( oldGroup->omega ) { newGroup->omega = allocIntArrayDegree(); for ( pt =1 ; pt <= oldGroup->degree ; ++pt ) newGroup->omega[pt] = oldGroup->omega[pt]; } else newGroup->omega = NULL; if ( oldGroup->invOmega ) { newGroup->invOmega = allocIntArrayDegree(); for ( pt =1 ; pt <= oldGroup->degree ; ++pt ) newGroup->invOmega[pt] = oldGroup->invOmega[pt]; } else newGroup->invOmega = NULL; return newGroup; } guava-3.6/src/leon/src/readgrp.c0000644017361200001450000006331211026723452016454 0ustar tabbottcrontab/* File readGrp. */ #include #include #include #include #include "group.h" #include "groupio.h" #include "chbase.h" #include "cstborb.h" #include "errmesg.h" #include "essentia.h" #include "factor.h" #include "permut.h" #include "permgrp.h" #include "randschr.h" #include "storage.h" #include "token.h" CHECK( readgr) extern GroupOptions options; static FILE *outFile; /* File to which group tables are output. */ static Unsigned permNumber; /*-------------------------- readFactoredInt -----------------------------*/ FactoredInt readFactoredInt(void) { FactoredInt fInt; Token token, token2; fInt.noOfFactors = 0; token = readToken(); if ( token.type != integer ) ERROR( "readFactoredInt", "Invalid symbol in factored integer.") else if ( token.value.intValue == 1 ) return fInt; else { unreadToken( token); do { token = readToken(); if ( token.type != integer ) ERROR( "readFactoredInt", "Invalid symbol in factored integer."); fInt.prime[fInt.noOfFactors] = token.value.intValue; if ( token = readToken() , token.type == caret ) if ( token2 = readToken() , (token2.type == integer && token2.value.intValue > 0) ) fInt.exponent[fInt.noOfFactors] = token2.value.intValue; else ERROR( "readFactoredInt", "Invalid exponent in factored " "integer") else { fInt.exponent[fInt.noOfFactors] = 1; unreadToken( token); } ++fInt.noOfFactors; } while ( token = readToken() , token.type == asterisk ); unreadToken( token); } return fInt; } /*-------------------------- writeFactoredInt ----------------------------*/ void writeFactoredInt( FactoredInt *fInt) { Unsigned i; if ( fInt->noOfFactors == 0 ) { fprintf( outFile, "%d", 1); return; } for ( i = 0 ; i < fInt->noOfFactors ; ++i ) { if ( i > 0 ) fprintf( outFile, " * "); fprintf( outFile, "%u", fInt->prime[i]); if ( fInt->exponent[i] > 1 ) fprintf( outFile, "^%u", fInt->exponent[i]); } return; } /*-------------------------- readCyclePerm -------------------------------*/ TokenType readCyclePerm( Permutation *perm) { Unsigned pt, previousPt, firstPtOfCycle, parenLevel = 0; Unsigned degree = perm->degree; Token token; BOOLEAN newCycle; /* Read the cycles and fill in the image array. */ while ( token = readToken() , (parenLevel > 0 || token.type != comma) && token.type != semicolon && token.type != eof && token.type != rightBracket ) switch( token.type ) { case comma: break; case leftParen: if ( parenLevel == 0 ) { parenLevel = 1 ; newCycle = TRUE; } else ERROR1s( "readCyclePerm", "Parenthesis error in permutation ", perm->name, ".") break; case rightParen: if ( parenLevel == 1 && !newCycle ) { parenLevel = 0 ; perm->image[previousPt] = firstPtOfCycle; } else ERROR1s( "readCyclePerm", "Parenthesis error in permutation ", perm->name, ".") break; case integer: pt = token.value.intValue; if ( parenLevel == 1 && pt >= 1 && pt <= degree && perm->image[pt] == 0 ) if ( newCycle ) { firstPtOfCycle = pt; newCycle = FALSE; previousPt = pt; } else { perm->image[previousPt] = pt; previousPt = pt; } else ERROR1s( "readCyclePerm", "Invalid or repeated point in " "permutation ", perm->name, ".") break; default: ERROR1s( "readCyclePerm", "Invalid character in permutation ", perm->name, ".") } /* For any points not occuring in cycles, mark the image as the point itself. */ for ( pt = 1 ; pt <= degree ; ++pt) if ( perm->image[pt] == 0 ) perm->image[pt] = pt; /* Return to caller. */ return token.type; } /*-------------------------- readImagePerm --------------------------------*/ TokenType readImagePerm( Permutation *perm) { Unsigned pt; Unsigned degree = perm->degree; Token token; char *found = allocBooleanArrayDegree();; /* First flag all points as not occuring as images. */ for ( pt = 1 ; pt <= degree ; ++pt ) found[pt] = FALSE; /* Clear slash and then read in images of points. */ token = readToken(); if ( token.type != slash ) { ERROR1s( "readImagePerm", "Invalid syntax in image form " "permutation ", perm->name, ".") } pt = 0; while ( token = readToken() , token.type != slash) if ( token.type == comma ) ; else if( token.type == integer && token.value.intValue > 0 && token.value.intValue <= degree && found[token.value.intValue] == FALSE ) { perm->image[++pt] = token.value.intValue; found[token.value.intValue] = TRUE; } else { ERROR1s( "readImagePerm", "Invalid syntax in image form " "permutation ", perm->name, ".") } /* Check that enough images were read. */ if ( pt != degree ) { ERROR1s( "readImagePerm", "Invalid syntax in image form " "permutation ", perm->name, ".") } if ( token = readToken() , token.type != comma && token.type != semicolon && token.type != eof && token.type != rightBracket ) { ERROR1s( "readImagePerm", "Invalid syntax in image form " "permutation ", perm->name, ".") } /* Add trailing 0 to image array. */ perm->image[degree+1] = 0; /* Return to caller. */ freeBooleanArrayDegree( found); return token.type; } /*-------------------------- readPerm -------------------------------------*/ Permutation *readPerm( const Unsigned degree, /* Degree of permutation to be read. */ PermFormat *const format, /* Set to cycleFormat or imageFormat. */ TokenType *const terminator) /* Set to type of token (comma, semicolon, or eof, or right square bracket) that terminated the permutation. */ { Unsigned pt; Token token, token2; Permutation *perm; /* Allocate the permutation. */ perm = allocPermutation(); /* Mark essential field as unknown. */ MAKE_UNKNOWN_ESSENTIAL( perm); /* Process permutation name if present. */ if ( token = readToken() , token.type == identifier ) if ( token2 = readToken() , token2.type == equal ) { strncpy( perm->name, token.value.identValue, MAX_NAME_LENGTH+1); perm->name[MAX_NAME_LENGTH] = '\0'; } else ERROR1s( "readPerm", "Missing equal sign after name in permutation ", token.value.identValue, ".") else { sprintf( perm->name, "%c%u", '_', permNumber++); unreadToken( token); } /* Fill in the degree. */ perm->degree = degree; /* Allocate the image array, and initially mark all point images as unknown. Also add trailing 0 to array. */ perm->image = allocIntArrayDegree(); for ( pt = 1 ; pt <= degree+1 ; ++pt ) perm->image[pt] = 0; /* Check whether permutation is in cycle or image format, and call appropriate function to finish read. */ switch ( token = readToken() , token.type ) { case leftParen: unreadToken( token); *terminator = readCyclePerm( perm); *format = cycleFormat; break; case slash: unreadToken( token); *terminator = readImagePerm( perm); *format = imageFormat; break; default: unreadToken( token); ERROR( "readPerm", "Invalid symbol at start of cycle/image field."); } /* Return to caller. */ return perm; } /*-------------------------- readPermGroup --------------------------------*/ PermGroup *readPermGroup( char *libFileName, /* The library file containing the group. */ char *libName, /* The library defining the group. */ const Unsigned requiredDegree, /* The degree that the group must have, or zero if group may have any degree. */ const char *rpgOptions) /* Options: Generate: generate base/sgs if absent, CompleteOrbits: construct complete orbit structure. */ { FILE *libFile; Unsigned level; Permutation *perm, *oldPerm; PermGroup *G = allocPermGroup(); BOOLEAN generateFlag = FALSE, completeOrbitFlag = FALSE; BOOLEAN genSetFlag = FALSE, strGenSetFlag = FALSE; PermFormat format; Token token; TokenType terminator; char attribute[MAX_NAME_LENGTH+1]; char inputBuffer[81]; RandomSchreierOptions rOptions = {0,UNKNOWN,UNKNOWN,UNKNOWN,UNKNOWN, UNKNOWN,UNKNOWN,UNKNOWN,UNKNOWN}; /* Attempt to open library file. */ libFile = fopen( libFileName, "r"); if ( libFile == NULL ) ERROR1s( "readgrp", "File ", libFileName, " could not be opened for input.") /* Process options. */ setInputString( rpgOptions); while ( token = sReadToken() , token.type != eof ) if ( token.type == identifier && strcmp( token.value.identValue, "Generate") == 0 ) generateFlag = TRUE; else if ( token.type == identifier && strcmp( token.value.identValue, "CompleteOrbits") == 0 ) completeOrbitFlag = TRUE; else ERROR( "readPermGroup", "Invalid options.") /* Initialize input routines to correct file. */ setInputFile( libFile); lowerCase(libName); permNumber = 1; /* Search for the correct library. Terminate with error message if not found. */ rewind( libFile); for (;;) { fgets( inputBuffer, 80, libFile); if ( feof(libFile) ) ERROR1s( "readPermGroup", "Library block ", libName, " not found in specified library.") if ( inputBuffer[0] == 'l' || inputBuffer[0] == 'L' ) { setInputString( inputBuffer); if ( ( (token = sReadToken()) , token.type == identifier && strcmp(lowerCase(token.value.identValue),"library") == 0 ) && ( (token = sReadToken()) , token.type == identifier && strcmp(lowerCase(token.value.identValue),libName) == 0 ) ) break; } } /* Read the group name. */ token = nkReadToken(); if ( token.type != identifier ) ERROR1s( "readPermGroup", "Invalid syntax at start of Cayley library block ", libName, ".") strcpy( G->name, token.value.identValue); if ( (token = nkReadToken() , token.type != colon) || (token = nkReadToken() , token.type != identifier || strcmp(token.value.identValue,"permutation") != 0) || (token = nkReadToken() , token.type != identifier || strcmp(token.value.identValue,"group") != 0) || (token = nkReadToken() , token.type != leftParen) || (token = nkReadToken() , token.type != integer || (G->degree = token.value.intValue) < 1 || G->degree > options.maxDegree ) || (token = nkReadToken() , token.type != rightParen) || (token = nkReadToken() , token.type != semicolon) ) ERROR( "readPermGroup", "Invalid syntax in group declaration.") /* Check that group has the required degree, if specified. */ if ( requiredDegree > 0 && G->degree != requiredDegree) ERROR1s( "readPermGroup", "Group ", G->name, " has incorrect degree.") /* Initialize the storage manager. */ initializeStorageManager( G->degree); /* Read the attributes (forder, generators, base, strong generators). */ for (;;) { token = nkReadToken(); if ( token.type == identifier && strcmp( token.value.identValue, "finish") == 0 ) break; if ( strcmp( token.value.identValue, G->name) != 0 || (token = nkReadToken() , token.type != period) || (token = nkReadToken() , token.type != identifier) ) ERROR( "readPermGroup", "Invalid syntax in group attribute.") strcpy( attribute, token.value.identValue); /* Read factored order. */ if ( strcmp(attribute,"forder") == 0 && (token = nkReadToken() , token.type == colon) ) { G->order = allocFactoredInt(); *(G->order) = readFactoredInt(); if ( token = nkReadToken() , token.type != semicolon ) ERROR( "readPermGroup", "Invalid syntax in group attribute.") } /* Read the base. */ else if ( strcmp(attribute,"base") == 0 && (token = nkReadToken() , token.type == colon) && (token = nkReadToken() , token.type == identifier) && strcmp( token.value.identValue, "seq") == 0 && (token = nkReadToken() , token.type == leftParen) ) { G->baseSize = 0; G->base = allocIntArrayBaseSize(); G->basicOrbLen = allocIntArrayBaseSize(); G->basicOrbit = allocPtrArrayBaseSize(); G->schreierVec = (Permutation ***) allocPtrArrayBaseSize(); while ( token = nkReadToken() , token.type != rightParen ) if ( token.type == integer && token.value.intValue >= 1 && token.value.intValue <= G->degree && G->baseSize < options.maxBaseSize ) G->base[++G->baseSize] = token.value.intValue; else if ( token.type == comma ) ; else ERROR( "readPermGroup", "Invalid base point.") if ( token = nkReadToken() , token.type != semicolon ) ERROR( "readPermGroup", "Invalid syntax in base.") } /* Read the generators. */ else if ( strcmp(attribute,"generators") == 0 && (token = nkReadToken() , token.type == colon) ) { if ( strGenSetFlag ) ERROR( "readPermGroup", "Both generators and strong generators were specified."); genSetFlag = TRUE; do { perm = readPerm( G->degree, &format, &terminator); if ( !G->generator ) { G->generator = perm; G->printFormat = format; perm->last = NULL; } else { oldPerm->next = perm; perm->last = oldPerm; } perm->next = NULL; oldPerm = perm; } while ( terminator == comma ); if ( terminator != semicolon ) ERROR( "readPermGroup", "Invalid syntax in group attribute.") } /* Read the strong generators. */ else if ( strcmp(attribute,"strong") == 0 && (token = nkReadToken() , token.type == identifier) && strcmp( token.value.identValue, "generators") == 0 && (token = nkReadToken() , token.type == colon ) && (token = nkReadToken() , token.type == leftBracket) ) { if ( genSetFlag ) ERROR( "readPermGroup", "Both generators and strong generators were specified."); strGenSetFlag = TRUE; token = nkReadToken(); if ( token.type != rightBracket ) { unreadToken( token); do { perm = readPerm( G->degree, &format, &terminator); if ( !G->generator ) { G->generator = perm; G->printFormat = format; perm->last = NULL; } else { oldPerm->next = perm; perm->last = oldPerm; } perm->next = NULL; oldPerm = perm; } while ( terminator == comma ); } else terminator = rightBracket; if ( terminator != rightBracket || (token = nkReadToken() , token.type != semicolon) ) ERROR( "readPermGroup", "Invalid syntax in group attribute.") } /* Handle invalid attribute. */ else ERROR( "readPermGroup", "Invalid syntax in group attribute.") } /* Mark point list fields as null. */ G->invOmega = G->omega = NULL; /* Adjoin generator inverses. */ adjoinGenInverses( G); /* If a base is known, construct either the Schreier vectors/ basic orbits or the complete orbit structure, depending on whether the input option CompleteOrbits is present. */ if ( G->base ) { G->order->noOfFactors = 0; for ( perm = G->generator ; perm ; perm = perm->next ) perm->level = levelIn( G, perm); for ( level = 1 ; level <= G->baseSize ; ++level ) { G->basicOrbLen[level] = 1; G->basicOrbit[level] = allocIntArrayDegree(); G->schreierVec[level] = allocPtrArrayDegree(); if ( completeOrbitFlag ) { G->orbNumberOfPt = (UnsignedS **) allocIntArrayBaseSize(); G->startOfOrbitNo = (UnsignedS **) allocIntArrayBaseSize(); constructAllOrbitInfo( G, level); } else constructBasicOrbit( G, level, "AllGensAtLevel"); /*??????*/ } } /* If a base is not known, construct one if generate option is given. */ else if ( generateFlag ) randomSchreier( G, rOptions); /*????????????*/ /* Close the input file. */ fclose( libFile); /* Return the permutation group read in. */ return G; } /*-------------------------- setOutputFile -------------------------------*/ void setOutputFile( FILE *grpFile) { outFile = grpFile; } /*-------------------------- writeCyclePerm ------------------------------*/ #define CHECK_NEW_LINE if ( column >= endCol-4 ) { \ fprintf( outFile, "\n"); \ for ( j = 1 ; j < startCol2 ; ++j ) \ fprintf( outFile, " "); \ column = startCol2; \ } void writeCyclePerm( Permutation *s, /* The permutation to write. */ Unsigned startCol1, /* First line starts in this column. */ Unsigned startCol2, /* Remaining lines start in this column. */ Unsigned endCol) /* Lines end by this column. */ { Unsigned j, pt, img; Unsigned column = startCol1; char *found = allocBooleanArrayDegree(); for ( pt = 1 ; pt <= s->degree ; ++pt ) found[pt] = FALSE; if ( isIdentity(s) ) { fprintf( outFile, "1"); freeBooleanArrayDegree( found); return; } for ( pt = 1 ; pt <= s->degree ; ++pt ) if ( !found[pt] && s->image[pt] != pt ) { found[pt] = TRUE; CHECK_NEW_LINE column += fprintf (outFile, "(%u,", pt); for ( img = s->image[pt] ; img != pt ; img = s->image[img] ) { CHECK_NEW_LINE if ( s->image[img] == pt ) column += fprintf( outFile, "%u)", img); else column += fprintf( outFile, "%u,", img); found[img] = TRUE; } } freeBooleanArrayDegree( found); return; } /*-------------------------- writeImagePerm -------------------------------*/ void writeImagePerm( Permutation *s, /* The permutation to write. */ Unsigned startCol1, /* First line starts in this column. */ Unsigned startCol2, /* Remaining lines start in this column. */ Unsigned endCol) /* Lines end by this column. */ { Unsigned i, j; Unsigned column = startCol1; fprintf( outFile, "/"); for ( i = 1 ; i <= s->degree-1 ; ++i ) { CHECK_NEW_LINE fprintf( outFile, "%u,", s->image[i] ); column += 2 + (s->image[i] > 9) + (s->image[i] > 99) + (s->image[i] > 999) + (s->image[i] > 9999); } CHECK_NEW_LINE fprintf( outFile, "%u/", s->image[s->degree] ); } #undef CHECK_NEW_LINE /*-------------------------- writeImageMonomialPerm -----------------------*/ void writeImageMonomialPerm( Permutation *s, /* The permutation to write. */ Unsigned fieldSize, Unsigned startCol2) /* Remaining lines start in this column. */ { Unsigned i, j, count; const Unsigned fSize = fieldSize - 1; fprintf( outFile, "/"); for ( i = 1 , count = 0; i <= s->degree-fSize ; i += fSize ) { fprintf( outFile, "[%u]%u,", (s->image[i] - 1) % fSize + 1, (s->image[i] - 1) / fSize + 1); if ( ++count == 10 ) { count = 0; fprintf( outFile, "\n"); for ( j = 1 ; j < startCol2 ; ++j ) fprintf( outFile, " "); } } fprintf( outFile, "[%u]%u/", (s->image[i] - 1) % fSize + 1, (s->image[i] - 1) / fSize + 1); } /*-------------------------- writePermGroup ------------------------------*/ static BOOLEAN restrictLevel = FALSE; /* Shared with writePermGroupRestricted */ /* Must be reset after each call. */ void writePermGroup( char *libFileName, char *libName, PermGroup *G, char *comment) { Unsigned i, column; Permutation *gen; FILE *libFile; /* Open output file. */ libFile = fopen( libFileName, options.outputFileMode); if ( libFile == NULL ) ERROR1s( "writePermGroup", "File ", libFileName, " could not be opened for append.") /* Set correct output File. */ setOutputFile( libFile); /* Write library name. */ fprintf( outFile, "LIBRARY %s;", libName); /* Write the comment. */ if ( comment ) fprintf( outFile, "\n& %s &", comment); /* Write declaration for group. */ fprintf( outFile, "\n%s: Permutation group (%u);", G->name, G->degree); /* Write the order. */ if ( G->order ) { fprintf( outFile, "\n%s.forder: ", G->name); writeFactoredInt( G->order); fprintf( outFile, ";"); } /* Write the base. */ if ( G->base ) { fprintf( outFile, "\n%s.base: seq(", G->name); for ( i = 1 ; i < G->baseSize ; ++i ) fprintf( outFile, "%u,", G->base[i]); if ( G->baseSize > 0 ) fprintf( outFile, "%u", G->base[G->baseSize]); fprintf( outFile, ");"); } /* Write out the strong generators, or generators if the base is not known. */ if ( G->base ) fprintf( outFile, "\n%s.strong generators: [", G->name); else fprintf( outFile, "\n%s.generators:", G->name); for ( gen = G->generator ; gen ; gen = gen->next ) if ( gen->name[0] != '*' && (!restrictLevel || gen->level <= G->baseSize) ) { fprintf( outFile, "\n "); column = 3; if ( !G->base && gen->name[0] != '\0' ) { fprintf( outFile, "%s = ", gen->name); column += 3 + strlen( gen->name); } if ( G->printFormat == cycleFormat ) writeCyclePerm( gen, column, 7, 75); else writeImagePerm( gen, column, 7, 75); if ( gen->next ) fprintf( outFile, "%c", ','); else if ( G->base ) fprintf( outFile, "%s", "];"); else fprintf( outFile, "%s", ";"); } if ( !G->generator ) fprintf( outFile, "%s", "];"); /* Write "finish". */ fprintf( outFile, "\nFINISH;\n"); /* Reset restrictLevel. */ restrictLevel = FALSE; /* Close group file and return to caller. */ fprintf( outFile, "%c", '\n'); fclose( libFile); return; } /*-------------------------- writePermGroupRestricted --------------------*/ /* This function is identical to writePermGroup except that the group G is assumed to stabilize {1,...,restrictedDegree}, and it is written out as a permutation group of degree restrictedDegree. (Note this may reduce the group order.) Also, the group must have the order and base fields filled in, as well as the level field of each generator. */ void writePermGroupRestricted( char *libFileName, char *libName, PermGroup *G, char *comment, Unsigned restrictedDegree) { Unsigned i, restrictedBaseSize; Unsigned *acceptablePoint = allocIntArrayDegree(); PermGroup *GRestricted = allocPermGroup(); FactoredInt orbitLen; Permutation *gen; for ( i = 1 ; i <= restrictedDegree ; ++i ) acceptablePoint[i] = i; acceptablePoint[restrictedDegree+1] = 0; restrictedBaseSize = restrictBasePoints( G, acceptablePoint); strcpy( GRestricted->name, G->name); GRestricted->degree = restrictedDegree; GRestricted->baseSize = restrictedBaseSize; GRestricted->base = G->base; GRestricted->order = allocFactoredInt(); *(GRestricted->order) = *(G->order); for ( i = restrictedBaseSize+1 ; i <= G->baseSize ; ++i ) { orbitLen = factorize( G->basicOrbLen[i]); factDivide( GRestricted->order, &orbitLen); } GRestricted->generator = G->generator; for ( gen = G->generator ; gen ; gen = gen->next ) gen->degree = restrictedDegree; GRestricted->printFormat = G->printFormat; restrictLevel = TRUE; writePermGroup( libFileName, libName, GRestricted, comment); for ( gen = G->generator ; gen ; gen = gen->next ) gen->degree = G->degree; restrictLevel = FALSE; /* For safety. */ freeFactoredInt( GRestricted->order); GRestricted->order = 0; freePermGroup( GRestricted); freeIntArrayDegree( acceptablePoint); } guava-3.6/src/leon/src/util.h0000644017361200001450000000056211026723452016010 0ustar tabbottcrontab#ifndef UTIL #define UTIL extern void parseLibraryName( const char *const inputString, const char *const prefix, const char *const suffix, char *const libraryFileName, char *const libraryName) ; extern void showLimits(void) ; extern void checkCompileOptions( char *localFileName, CompileOptions *mainOpts, CompileOptions *localOpts) ; #endif guava-3.6/src/leon/src/cjrndper.h0000644017361200001450000000013411026723452016635 0ustar tabbottcrontab#ifndef CJRNDPER #define CJRNDPER extern int main( int argc, char *argv[]) ; #endif guava-3.6/src/leon/src/compgrp.h0000644017361200001450000000012411026723452016474 0ustar tabbottcrontab#ifndef COMPGRP #define COMPGRP extern int main( int argc, char *argv[]) ; #endif guava-3.6/src/leon/src/util.c0000644017361200001450000000703311026723452016003 0ustar tabbottcrontab/* File util.h. Utility routines for use with partition backtrack algorithms. */ #include #include #include #include #include "group.h" CHECK( util) extern GroupOptions options; /*-------------------------- parseLibraryName ----------------------------*/ void parseLibraryName( const char *const inputString, const char *const prefix, const char *const suffix, char *const libraryFileName, char *const libraryName) { int i; for ( i = 0 ; i < strlen(inputString) ; ++i ) if ( inputString[i] == ':' && inputString[i+1] == ':' ) break; strcpy( libraryFileName, prefix); strncat( libraryFileName, inputString, i); strcat( libraryFileName, suffix); #ifdef PERIOD_TO_BLANK for ( i = 0 ; i < strlen(libraryFileName) ; ++i ) if ( libraryFileName[i] == '.' ) libraryFileName[i] = ' '; #endif i = (i < strlen(inputString)) ? (i + 2) : 0; strcpy( libraryName, inputString+i); } /*-------------------------- showLimits ----------------------------------*/ void showLimits(void) { printf( "\n Default maximum base size: %2d", DEFAULT_MAX_BASE_SIZE); printf( "\n Default maximum word length: 200 + 5 * maxBaseSize"); printf( "\n Maximum degree: %u - maxBaseSize", MAX_INT-2); printf( "\n Maximum name length: %2d", MAX_NAME_LENGTH); printf( "\n Maximum file name length: %2d", MAX_FILE_NAME_LENGTH); printf( "\n Maximum prime factors: %2d\n", MAX_PRIME_FACTORS); } /*-------------------------- checkCompileOptions -------------------------*/ void checkCompileOptions( char *localFileName, CompileOptions *mainOpts, CompileOptions *localOpts) { if ( localOpts->mbs != mainOpts->mbs ) { printf( "\n\nError: DEFAULT_MAX_BASE_SIZE is %d in main and %d in %s\n", mainOpts->mbs, localOpts->mbs, localFileName); exit(ERROR_RETURN_CODE); } if ( localOpts->mnl != mainOpts->mnl ) { printf( "\n\nError: MAX_NAME_LENGTH is %d in main and %d in %s\n", mainOpts->mnl, localOpts->mnl, localFileName); exit(ERROR_RETURN_CODE); } if ( localOpts->mpf != mainOpts->mpf ) { printf( "\n\nError: MAX_PRIME_FACTORS is %d in main and %d in %s\n", mainOpts->mpf, localOpts->mpf, localFileName); exit(ERROR_RETURN_CODE); } if ( localOpts->mrp != mainOpts->mrp ) { printf( "\n\nError: MAX_REFINEMENT_PARMS is %d in main and %d in %s\n", mainOpts->mrp, localOpts->mrp, localFileName); exit(ERROR_RETURN_CODE); } if ( localOpts->mfp != mainOpts->mfp ) { printf( "\n\nError: MAX_FAMILY_PARMS is %d in main and %d in %s\n", mainOpts->mfp, localOpts->mfp, localFileName); exit(ERROR_RETURN_CODE); } if ( localOpts->me != mainOpts->me ) { printf( "\n\nError: MAX_EXTRA is %d in main and %d in %s\n", mainOpts->me, localOpts->me, localFileName); exit(ERROR_RETURN_CODE); } if ( localOpts->xl != mainOpts->xl ) { printf( "\n\nError: EXTRA_LARGE is inconsistent in main and %s\n", localFileName); exit(ERROR_RETURN_CODE); } if ( localOpts->sg != mainOpts->sg ) { printf( "\n\nError: SIGNED is inconsistent in main and %s\n", localFileName); exit(ERROR_RETURN_CODE); } if ( localOpts->nf != mainOpts->nf ) { printf( "\n\nError: NOFLOAT is inconsistent in main and %s\n", localFileName); exit(ERROR_RETURN_CODE); } printf( "\nCompile options are consistent.\n"); exit(0); } guava-3.6/src/leon/src/cputime.c0000644017361200001450000000127211026723452016473 0ustar tabbottcrontab/* File cputime.c. Contain Unix function cpuTime returning the CPU time in milliseconds (user+system) used by the current program. Works at least on Sun/3 and Sun/4. */ #include #include #include #ifndef TICK #error TICK must be defined. #endif #if TICK != 1000 #error TICK must have value 1000 #endif #undef CLK_TCK #define CLK_TCK 1000 clock_t cpuTime(void) { struct rusage usage; getrusage( RUSAGE_SELF, &usage); return (clock_t) ( usage.ru_utime.tv_usec / 1000 + usage.ru_utime.tv_sec * 1000 + usage.ru_stime.tv_usec / 1000 + usage.ru_stime.tv_sec * 1000 ); } guava-3.6/src/leon/src/conj.sh0000755017361200001450000000003111026723452016141 0ustar tabbottcrontab#!/bin/sh cent -conj $* guava-3.6/src/leon/src/ptstab.sh0000755017361200001450000000003711026723452016513 0ustar tabbottcrontab#!/bin/sh orblist -ptstab $* guava-3.6/src/leon/src/ncl.sh0000755017361200001450000000003211026723452015765 0ustar tabbottcrontab#!/bin/sh commut -ncl $* guava-3.6/src/leon/src/cmatauto.h0000644017361200001450000000242411026723452016647 0ustar tabbottcrontab#ifndef CMATAUTO #define CMATAUTO extern PermGroup *matrixAutoGroup( Matrix_01 *const M, /* The matrix whose group is to be found. */ PermGroup *const L, /* A (possibly trivial) known subgroup of the automorphism group of D. (A null pointer designates a trivial group.) */ Code *const C, /* If nonnull, the auto grp of the code C is */ const BOOLEAN monomialFlag) /* computed, assuming its group is contained in that of the design. */ ; extern Permutation *matrixIsomorphism( Matrix_01 *const M_L, /* The first design. */ Matrix_01 *const M_R, /* The second design. */ PermGroup *const L_L, /* A known subgroup of Aut(M_L), or NULL. */ PermGroup *const L_R, /* A known subgroup of Aut(M_R), or NULL. */ Code *const C_L, /* If nonnull, C_R must also be nonull, and */ Code *const C_R, /* any isomorphism of C_L to C_R must map */ const BOOLEAN monomialFlag, /* M_L to M_R. A code isomorphism is */ /* computed. */ const BOOLEAN colInformFlag) /* Print iso on columns to std output. */ ; #endif guava-3.6/src/leon/src/parimage.sh0000755017361200001450000000004411026723452017001 0ustar tabbottcrontab#!/bin/sh setstab -image -partn $* guava-3.6/src/leon/src/randobj.h0000644017361200001450000000032111026723452016443 0ustar tabbottcrontab#ifndef RANDOBJ #define RANDOBJ extern int main( int argc, char *argv[]) ; extern void checkCompileOptions( char *localFileName, CompileOptions *mainOpts, CompileOptions *localOpts) ; #endif guava-3.6/src/leon/src/cent.h0000644017361200001450000000011611026723452015757 0ustar tabbottcrontab#ifndef CENT #define CENT extern int main( int argc, char *argv[]) ; #endif guava-3.6/src/leon/src/readdes.c0000644017361200001450000004367211026723452016446 0ustar tabbottcrontab/* File readdes.c. Contains routines to read and write block designs. */ #include #include #include #include #include "group.h" #include "groupio.h" #include "code.h" #include "field.h" #include "errmesg.h" #include "new.h" #include "token.h" CHECK( readde) extern GroupOptions options; static Matrix_01 *xRead01Matrix( FILE *libFile, char *name, BOOLEAN transposeFlag, Unsigned requiredSetSize, Unsigned requiredNumberOfRows, Unsigned requiredNumberOfCols); /*-------------------------- readDesign -----------------------------------*/ /* This function reads in a block design and returns an (0,1)-matrix which is the incidence matrix of the design. Rows correspond to points and columns to blocks. Row and column numbering starts at 1. NOTE THAT THE STORAGE MANAGER IS NOT INITIALIZED. */ Matrix_01 *readDesign( char *libFileName, char *libName, Unsigned requiredPointCount, /* 0 = any */ Unsigned requiredBlockCount) /* 0 = any */ { Unsigned pt, nRows, nCols; Matrix_01 *matrix; Token token, saveToken; char inputBuffer[81]; FILE *libFile; Unsigned j; char matrixName[MAX_NAME_LENGTH+1]; /* Open input file. */ libFile = fopen( libFileName, "r"); if ( libFile == NULL ) ERROR1s( "readDesign", "File ", libFileName, " could not be opened for input.") /* Initialize input routines to correct file. */ setInputFile( libFile); lowerCase( libName); /* Search for the correct library. Terminate with error message if not found. */ rewind( libFile); for (;;) { fgets( inputBuffer, 80, libFile); if ( feof(libFile) ) ERROR1s( "readDesign", "Library block ", libName, " not found in specified library.") if ( inputBuffer[0] == 'l' || inputBuffer[0] == 'L' ) { setInputString( inputBuffer); if ( ( (token = sReadToken()) , token.type == identifier && strcmp(lowerCase(token.value.identValue),"library") == 0 ) && ( (token = sReadToken()) , token.type == identifier && strcmp(lowerCase(token.value.identValue),libName) == 0 ) ) break; } } /* Read the design name. */ if ( (token = nkReadToken() , saveToken = token , token.type == identifier) && (token = nkReadToken() , token.type == equal) ) strcpy( matrixName, saveToken.value.identValue); if ( (token = readToken() , token.type != identifier) || strcmp( token.value.identValue, "seq") != 0 || (token = readToken() , token.type != leftParen) ) ERROR( "readDesign", "Invalid syntax in design library.") /* Read the number of points and number of blocks. */ if ( (token = readToken() , token.type != integer) || (nRows = token.value.intValue) < 2 || ( requiredPointCount != 0 && nRows != requiredPointCount ) || (token = readToken() , token.type != comma) || (token = readToken() , token.type != integer) || (nCols= token.value.intValue) < 2 || ( requiredBlockCount != 0 && nCols != requiredBlockCount ) || (token = readToken() , token.type != comma) ) ERROR( "readDesign", "Invalid syntax in design library.") if ( nRows + nCols > options.maxDegree ) ERROR( "readDesign", "Too many rows+columns.") /* Allocate the (0,1) incidence matrix, and zero it. */ matrix = newZeroMatrix( 2, nRows, nCols); strcpy( matrix->name, matrixName); /* Read the blocks. */ for ( j = 1 ; j <= nCols ; ++j ) { if ( token = readToken() , token.type != leftBracket ) ERROR( "readDesign", "Invalid symbol in point list.") while (token = readToken() , token.type == integer || token.type == comma ) if ( token.type == integer && (pt = token.value.intValue) > 0 && pt <= nRows ) matrix->entry[pt][j] = 1; else if ( token.type == integer ) ERROR1i( "readDesign", "Invalid point ", pt, ".") if ( token.type != rightBracket || (token = readToken() , (j < nCols ? token.type != comma : token.type != rightParen)) ) ERROR( "readDesign", "Invalid symbol in point list.") } /* Close the input file and return. */ fclose( libFile); return matrix; } /*-------------------------- writeDesign ----------------------------------*/ /* This function writes out an (0,1) matrix as a block design. Rows correspond to points and columns to blocks. Row and column numbering starts at 1. */ void writeDesign( char *libFileName, char *libName, Matrix_01 *matrix, char *comment) { Unsigned i, j, column, leadChar; FILE *libFile; /* Open output file. */ libFile = fopen( libFileName, options.outputFileMode); if ( libFile == NULL ) ERROR1s( "writeDesign", "File ", libFileName, " could not be opened for output.") /* Write the library name. */ fprintf( libFile, "LIBRARY %s;\n", libName); /* Write the comment. */ if ( comment ) fprintf( libFile, "& %s &\n", comment); /* Write the matrix name. */ if ( !matrix->name[0] ) strcpy( matrix->name, "D"); fprintf( libFile, " %s = seq(", matrix->name); /* Write the numbers of points and blocks. */ fprintf( libFile, " %d, %d,", matrix->numberOfRows, matrix ->numberOfCols); /* For j = 1,2,.., write the j'th block. */ for ( j = 1 ; j <= matrix->numberOfCols ; ++j) { fprintf( libFile, "\n "); column = 5; leadChar = '['; for ( i = 1 ; i <= matrix->numberOfRows ; ++i ) if ( matrix->entry[i][j] != 0 ) { column += fprintf( libFile, "%c", leadChar); if (column > 73 ) { fprintf( libFile, "\n "); column = 7; } column += fprintf( libFile, "%d", i); leadChar = ','; } fprintf( libFile, "]"); if ( j < matrix->numberOfCols ) fprintf( libFile, ","); } /* Write terminators. */ fprintf( libFile, ");\nFINISH;\n"); /* Close output file. */ fclose( libFile); } /*-------------------------- read01Matrix ---------------------------------*/ /* This function reads in an (0,1)-matrix and returns a new matrix equal to that read in. NOTE THAT THE STORAGE MANAGER IS NOT INITIALIZED. */ Matrix_01 *read01Matrix( char *libFileName, char *libName, BOOLEAN transposeFlag, /* If true, matrix is transposed. */ BOOLEAN adjoinIdentity, /* If true, form (A|I), A = matrix read. */ Unsigned requiredSetSize, /* 0 = any */ Unsigned requiredNumberOfRows, /* 0 = any */ Unsigned requiredNumberOfCols) /* 0 = any */ { Unsigned nRows, nCols, setSize; Matrix_01 *matrix; Token token, saveToken; char inputBuffer[81]; FILE *libFile; Unsigned i, j, temp; char matrixName[MAX_NAME_LENGTH+1], str[100]; BOOLEAN firstIdent; /* Open input file. */ libFile = fopen( libFileName, "r"); if ( libFile == NULL ) ERROR1s( "read01Matrix", "File ", libFileName, " could not be opened for input.") /* Initialize input routines to correct file. */ setInputFile( libFile); lowerCase( libName); /* Search for the correct library. Terminate with error message if not found. */ rewind( libFile); firstIdent = TRUE; for (;;) { fgets( inputBuffer, 80, libFile); if ( feof(libFile) ) ERROR1s( "read01Matrix", "Library block ", libName, " not found in specified library.") if ( firstIdent && sscanf( inputBuffer, "%s", str) == 1 && (firstIdent = FALSE , strcmp( lowerCase(str), "library") != 0) ) return xRead01Matrix( libFile, str, transposeFlag, requiredSetSize, requiredNumberOfRows, requiredNumberOfCols); if ( inputBuffer[0] == 'l' || inputBuffer[0] == 'L' ) { setInputString( inputBuffer); if ( ( (token = sReadToken()) , token.type == identifier && strcmp(lowerCase(token.value.identValue),"library") == 0 ) && ( (token = sReadToken()) , token.type == identifier && strcmp(lowerCase(token.value.identValue),libName) == 0 ) ) break; } } /* Read the matrix name. */ if ( (token = nkReadToken() , saveToken = token , token.type == identifier) && (token = nkReadToken() , token.type == equal) ) strcpy( matrixName, saveToken.value.identValue); if ( (token = readToken() , token.type != identifier) || strcmp( token.value.identValue, "seq") != 0 || (token = readToken() , token.type != leftParen) ) ERROR( "read01Matrix", "Invalid syntax in matrix library.") /* Read the field or set size, the number of rows, and number of columns, and exchange numbers if matrix is to be transposed. */ if ( (token = readToken() , token.type != integer) || (setSize = token.value.intValue) < 1 || (token = readToken() , token.type != comma) || (token = readToken() , token.type != integer) || (nRows = token.value.intValue) < 1 || (token = readToken() , token.type != comma) || (token = readToken() , token.type != integer) || (nCols= token.value.intValue) < 1 || (token = readToken() , token.type != comma) ) ERROR( "read01Matrix", "Invalid syntax in matrix library.") if ( transposeFlag ) EXCHANGE( nRows, nCols, temp) if ( nRows + nCols + adjoinIdentity * nRows> options.maxDegree ) ERROR( "read01Matrix", "Too many rows+columns.") if ( requiredSetSize != 0 && setSize != requiredSetSize ) ERROR1s( "read01Matrix", "Matrix ", matrixName, " has the wrong set/field size.") if ( requiredNumberOfRows != 0 && nRows != requiredNumberOfRows ) ERROR1s( "read01Matrix", "Matrix ", matrixName, " has the wrong number of rows.") if ( requiredNumberOfCols != 0 && nCols != requiredNumberOfCols ) ERROR1s( "read01Matrix", "Matrix ", matrixName, " has the wrong number of columns.") /* Allocate the (0,1) incidence matrix, and zero it. */ matrix = newZeroMatrix( setSize, nRows, nCols + adjoinIdentity * nRows); strcpy( matrix->name, matrixName); if ( adjoinIdentity ) for ( i = 1 ; i <= nRows ; ++i ) matrix->entry[i][nCols+i] = 1; /* Read the entries of the matrix in row-major order. */ if ( (token = readToken() , token.type != identifier) || strcmp( token.value.identValue, "seq") != 0 || (token = readToken() , token.type != leftParen) ) ERROR( "read01Matrix", "Invalid syntax at start of matrix entries.") if ( !transposeFlag ) for ( i = 1 ; i <= nRows ; ++i ) for ( j = 1 ; j <= nCols ; ++j ) { while ( token = readToken() , token.type == comma ) ; if ( token.type != integer || token.value.intValue < 0 || token.value.intValue >= matrix->setSize ) ERROR( "read01Matrix", "Invalid syntax in matrix entries.") matrix->entry[i][j] = token.value.intValue; } else for ( i = 1 ; i <= nCols ; ++i ) for ( j = 1 ; j <= nRows ; ++j ) { while ( token = readToken() , token.type == comma ) ; if ( token.type != integer || token.value.intValue < 0 || token.value.intValue >= matrix->setSize ) ERROR( "read01Matrix", "Invalid syntax in matrix entries.") matrix->entry[j][i] = token.value.intValue; } /* Check for proper closing. */ if ( (token = readToken() , token.type != rightParen) || (token = readToken() , token.type != rightParen) || (token = readToken() , token.type != semicolon) ) ERROR( "read01Matrix", "Invalid syntax at end of matrix entries.") /* Close the input file and return. */ fclose( libFile); return matrix; } /*-------------------------- xRead01Matrix --------------------------------*/ /* This function reads in an (0,1)-matrix in the alternate format and returns a new matrix equal to that read in. It is called only by read01Matrix. NOTE THAT THE STORAGE MANAGER IS NOT INITIALIZED. */ static Matrix_01 *xRead01Matrix( FILE *libFile, char *name, BOOLEAN transposeFlag, /* If true, matrix is transposed. */ Unsigned requiredSetSize, /* 0 = any */ Unsigned requiredNumberOfRows, /* 0 = any */ Unsigned requiredNumberOfCols) /* 0 = any */ { Unsigned nRows, nCols, setSize; Matrix_01 *matrix; Unsigned i, j, temp; int symbol, maxSymbol; /* Read the field or set size, the number of rows, and number of columns, and exchange numbers if matrix is to be transposed. */ if ( fscanf( libFile, "%d %d %d", &setSize, &nRows, &nCols) != 3 ) ERROR( "xRead01Matrix", "Invalid syntax set size, rows count, or col count") if ( (requiredSetSize != 0 && setSize != requiredSetSize) || nRows < 1 || (requiredNumberOfRows != 0 && nRows != requiredNumberOfRows) || nCols < 1 || (requiredNumberOfCols != 0 && nCols != requiredNumberOfCols) ) ERROR( "xRead01Matrix", "Invalid syntax in matrix library.") if ( nRows + nCols > options.maxDegree ) ERROR( "xRead01Matrix", "Too many rows+columns.") if ( transposeFlag ) EXCHANGE( nRows, nCols, temp) /* Allocate the (0,1) incidence matrix, and zero it. */ matrix = newZeroMatrix( setSize, nRows, nCols); if ( strlen(name) > MAX_NAME_LENGTH ) ERROR1i( "xRead01Matrix", "Name for code exceeds maximum of ", MAX_NAME_LENGTH, " characters.") strcpy( matrix->name, name); /* Read the entries of the matrix in row-major order. */ maxSymbol = '0' + setSize - 1; if ( !transposeFlag ) for ( i = 1 ; i <= nRows ; ++i ) for ( j = 1 ; j <= nCols ; ++j ) { while ( (symbol = getc(libFile)) == ' ' || symbol == ',' || symbol == '\n' ) ; if ( symbol < '0' && symbol > maxSymbol ) if ( symbol == EOF ) ERROR( "xRead01Matrix", "Premature end of file.") else ERROR( "xRead01Matrix", "Invalid symbol in matrix entries.") matrix->entry[i][j] = symbol - '0'; } else for ( i = 1 ; i <= nCols ; ++i ) for ( j = 1 ; j <= nRows ; ++j ) { while ( (symbol = getc(libFile)) == ' ' || symbol == ',' || symbol == '\n' ) ; if ( symbol < '0' && symbol > maxSymbol ) if ( symbol == EOF ) ERROR( "xRead01Matrix", "Premature end of file.") else ERROR( "xRead01Matrix", "Invalid symbol in matrix entries.") matrix->entry[j][i] = symbol - '0'; } /* Close the input file and return. */ fclose( libFile); return matrix; } /*-------------------------- write01Matrix --------------------------------*/ /* This function writes out an (0,1) matrix. The entries are written in row-major order. */ void write01Matrix( char *libFileName, char *libName, Matrix_01 *matrix, BOOLEAN transposeFlag, char *comment) { Unsigned i, j, column, outputRows = (transposeFlag) ? matrix->numberOfCols : matrix->numberOfRows, outputCols = (transposeFlag) ? matrix->numberOfRows : matrix->numberOfCols; FILE *libFile; /* Open output file. */ libFile = fopen( libFileName, options.outputFileMode); if ( libFile == NULL ) ERROR1s( "write01Matrix", "File ", libFileName, " could not be opened for output.") /* Write the library name. */ fprintf( libFile, "LIBRARY %s;\n", libName); /* Write the comment. */ if ( comment ) fprintf( libFile, "\" %s \"\n", comment); /* Write the matrix name. */ if ( !matrix->name[0] ) strcpy( matrix->name, "M"); fprintf( libFile, " %s = seq(", matrix->name); /* Write the set size and numbers of rows and columns and "seq(". */ fprintf( libFile, " %d, %d, %d, seq(", matrix->setSize, outputRows, outputCols); /* For i = 1,2,..,nRows write the i'th block. */ for ( i = 1 ; i <= outputRows ; ++i) { fprintf( libFile, "\n "); column = 5; for ( j = 1 ; j <= outputCols ; ++j ) { if ( column > 75 ) { fprintf( libFile, "\n "); column = 6; } column += transposeFlag ? fprintf( libFile, "%d", matrix->entry[j][i]) : fprintf( libFile, "%d", matrix->entry[i][j]); if ( i < outputRows || j < outputCols ) column += fprintf( libFile, ","); } } /* Write terminators. */ fprintf( libFile, "));\nFINISH;\n"); /* Close output file. */ fclose( libFile); } /*-------------------------- readCode -------------------------------------*/ /* This function reads in a binary code and returns a new code equal to that read in. NOTE THAT THE STORAGE MANAGER IS NOT INITIALIZED. */ Code *readCode( char *libFileName, char *libName, BOOLEAN reduceFlag, /* If true, gen matrix is reduced. */ Unsigned requiredSetSize, /* 0 = any */ Unsigned requiredDimension, /* 0 = any */ Unsigned requiredLength) /* 0 = any */ { Code *C; Matrix_01 *M; M = read01Matrix( libFileName, libName, FALSE, FALSE, requiredSetSize, requiredDimension, requiredLength); C = (Code *) M; C->infoSet = NULL; if ( C->fieldSize > 2 ) C->field = buildField( C->fieldSize); if ( reduceFlag ) reduceBasis( C); return C; } /*-------------------------- writeCode ------------------------------------*/ /* This function writes out a code. The information set is not written. */ void writeCode( char *libFileName, char *libName, Code *C, char *comment) { write01Matrix( libFileName, libName, (Matrix_01 *) C, FALSE, comment); } guava-3.6/src/leon/src/fndelt.c0000644017361200001450000002776411026723452016317 0ustar tabbottcrontab/* File fndelt.c. Main program for fndelt command, which may be used to find semirandom elements of specified order (default 2) in a permutation group and to find the orders of all products of these elements or their number of fixed points. Selected elements can be appended to a Cayley library, either in permutation or permutation group format. The format of the command is: > fndelt ... where the meaning of the parameters is as follows: : the permutation group from which involutions are to be located. : the number of involutions to be located. > : (optional) First involution to be printed. The options are as follows: -o:n Order of elements to find. -po Find orders of all products of involutions. -f Compute number of fixed points -i Write permutations in image format -crl: Name of the Cayley library from which to read the group -s: Seed for random number generator. -wg: Name of a Cayley library. The group generated by the selected permutations will be written to this Cayley library. -wp: Name of a Cayley library. The first element will be be written to this Cayley library. */ #include #include #include #include #include #define MAIN #include "group.h" #include "groupio.h" #include "errmesg.h" #include "new.h" #include "oldcopy.h" #include "permut.h" #include "readgrp.h" #include "readper.h" #include "randgrp.h" #include "util.h" static void verifyOptions(void); GroupOptions options; int main( int argc, char *argv[]) { char permGroupFileName[MAX_FILE_NAME_LENGTH+1] = "", permOutputFileName[MAX_FILE_NAME_LENGTH+1] = "", groupOutputFileName[MAX_FILE_NAME_LENGTH+1] = "", permGroupLibraryName[MAX_NAME_LENGTH+1] = "", permOutputLibraryName[MAX_NAME_LENGTH+1] = "", groupOutputLibraryName[MAX_NAME_LENGTH+1] = "", permOutputName[MAX_FILE_NAME_LENGTH+1] = "", groupOutputName[MAX_FILE_NAME_LENGTH+1] = "", outputObjectName[MAX_NAME_LENGTH+1] = "", prefix[MAX_FILE_NAME_LENGTH+1] = "", suffix[MAX_NAME_LENGTH+1] = ""; char comment[60]; Unsigned f, i, j, optionCountPlus1, successCount, numberOfInvolsToFind, orderToFind = 2, attemptCount, maxAttemptCount; BOOLEAN orderOption; unsigned long seed; unsigned long order; PermGroup *G, *involSubgroup; Permutation *newPerm, *prodPerm, *invol[100]; BOOLEAN fixedPointsOption = FALSE, imageFormatFlag = FALSE; /* If there are no options, provide usage information and exit. */ if ( argc == 1 ) { printf( "\nUsage: fndelt [options] permGroup numberOfElts [saveElt]...\n"); return 0; } /* Check for limits option. If present in position i (i as above) give limits and return. */ if ( strcmp(argv[1], "-l") == 0 || strcmp(argv[1], "-L") == 0 ) { showLimits(); return 0; } /* Check for verify option. If present in position i (i as above) perform verify (Note verifyOptions terminates program). */ if ( strcmp(argv[1], "-v") == 0 || strcmp(argv[1], "-V") == 0 ) verifyOptions(); /* Check for at least two parameters following options. */ for ( optionCountPlus1 = 1 ; optionCountPlus1 <= argc-1 && argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 ) ; if ( argc - optionCountPlus1 < 2 ) { printf( "\n\nError: At least 2 non-option parameters are required.\n"); exit(ERROR_RETURN_CODE); } /* Process options. */ options.maxBaseSize = DEFAULT_MAX_BASE_SIZE; orderOption = FALSE; seed = 47; maxAttemptCount = 200; strcpy( options.outputFileMode, "w"); for ( i = 1 ; i < optionCountPlus1 ; ++i ) if ( strcmp( argv[i], "-a") == 0 ) strcpy( options.outputFileMode, "a"); else if ( strcmp( argv[i], "-f") == 0 ) fixedPointsOption = TRUE; else if ( strcmp( argv[i], "-po") == 0 ) orderOption = TRUE; else if ( strcmp( argv[i], "-i") == 0 ) imageFormatFlag = TRUE; else if ( strncmp( argv[i], "-mb:", 4) == 0 ) { errno = 0; options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (cent)", "Invalid syntax for -mb option") } else if ( strncmp( argv[i], "-mw:", 4) == 0 ) { errno = 0; options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (cent)", "Invalid syntax for -mw option") } else if ( strncmp(argv[i],"-m:",3) == 0 ) { errno = 0; maxAttemptCount = (unsigned long) strtol( argv[i]+3, NULL, 0); if ( errno ) ERROR1s( "main (fndelt command)", "Invalid option ", argv[i], ".") } else if ( strncmp(argv[i],"-n:",3) == 0 ) strcpy( outputObjectName, argv[i]+3); else if ( strncmp(argv[i],"-o:",3) == 0 ) { errno = 0; orderToFind = (unsigned long) strtol( argv[i]+3, NULL, 0); if ( errno ) ERROR1s( "main (fndelt command)", "Invalid option ", argv[i], ".") } else if ( strncmp( argv[i], "-p:", 3) == 0 ) { strcpy( prefix, argv[i]+3); } else if ( strncmp( argv[i], "-t:", 3) == 0 ) { strcpy( suffix, argv[i]+3); } else if ( strncmp(argv[i],"-s:",3) == 0 ) { errno = 0; seed = (unsigned long) strtol( argv[i]+3, NULL, 0); if ( errno ) ERROR1s( "main (fndelt command)", "Invalid option ", argv[i], ".") } else if ( strncmp(argv[i],"-wp:",4) == 0 ) strcpy( permOutputName, argv[i]+4); else if ( strncmp(argv[i],"-wg:",4) == 0 ) strcpy( groupOutputName, argv[i]+4); else ERROR1s( "main (fndelt command)", "Invalid option ", argv[i], ".") /* Compute maximum degree and word length. */ options.maxWordLength = 200 + 5 * options.maxBaseSize; options.maxDegree = MAX_INT - 2 - options.maxBaseSize; /* Obtain number of involutions to find. */ errno = 0; numberOfInvolsToFind = strtol( argv[optionCountPlus1+1], NULL, 0); if ( errno || numberOfInvolsToFind > 99 ) ERROR1s( "main (fndinvol command)", "Invalid count ", argv[optionCountPlus1+1], "."); /* Compute file and library names. */ parseLibraryName( argv[optionCountPlus1], prefix, suffix, permGroupFileName, permGroupLibraryName); if ( permOutputName ) parseLibraryName( permOutputName, "", "", permOutputFileName, permOutputLibraryName); if ( groupOutputName ) parseLibraryName( groupOutputName, "", "", groupOutputFileName, groupOutputLibraryName); /* Read in group. */ G = readPermGroup( permGroupFileName, permGroupLibraryName, 0, "Generate"); /* Repeatedly generate random group elements. When possible, take power to give desired order. */ successCount = 0; attemptCount = 0; initializeSeed( seed); while ( successCount < numberOfInvolsToFind && ++attemptCount <= maxAttemptCount) { newPerm = randGroupPerm( G, 1); order = permOrder( newPerm); if ( (order = permOrder(newPerm)) % orderToFind == 0 ) { raisePermToPower( newPerm, order / orderToFind); newPerm->name[0] = 'x'; invol[++successCount] = newPerm; sprintf( newPerm->name+1, "%d", successCount); } } /* Find the number of fixed points, if desired. */ if ( fixedPointsOption ) { printf( "\n\n Number of fixed points.\n\n"); for ( i = 1 ; i <= successCount ; ++i ) { f = 0; for ( j = 1 ; j <= G->degree ; ++j ) f += (invol[i]->image[j] == j); printf( " %-5s %5d\n", invol[i]->name, f); } } /* Find orders of products, if desired. */ if ( orderOption ) { printf( "\n\n Orders of products.\n"); prodPerm = newUndefinedPerm( G->degree); for ( i = 1 ; i < successCount ; ++i ) for ( j = i+1 ; j <= successCount ; ++j ) { copyPermutation( invol[i], prodPerm); rightMultiply( prodPerm, invol[j]); printf( "\n %-5s %-5s %8ld", invol[i]->name, invol[j]->name, permOrder( prodPerm) ); } } /* Print involutions if requested, and write out group. */ if ( groupOutputName[0] ) { involSubgroup = newTrivialPermGroup( G->degree); if ( outputObjectName[0] ) strcpy( involSubgroup->name, outputObjectName); else strcpy( involSubgroup->name, groupOutputLibraryName); involSubgroup->base = NULL; involSubgroup->order = NULL; involSubgroup->printFormat = (imageFormatFlag ? imageFormat : cycleFormat); sprintf( comment, "Constructed by fndElt. Generators have order %d.", orderToFind); for ( j = optionCountPlus1+2 ; j < argc ; ++j ) { i = strtol(argv[j], NULL, 0); if ( i > successCount ) { printf( "\nFewer than %u permutations were found.\n", i); continue; } strcpy( invol[i]->name, "x"); sprintf( invol[i]->name+1, "%d", i); invol[i]->next = NULL; if ( involSubgroup->generator ) invol[i]->next = involSubgroup->generator; involSubgroup->generator = invol[i]; } writePermGroup( groupOutputFileName, groupOutputLibraryName, involSubgroup, comment); } if ( permOutputName[0] && optionCountPlus1+2 < argc ) { i = strtol(argv[optionCountPlus1+2], NULL, 0); if ( i < successCount ) { sprintf( comment, "Constructed by fndElt. Seed %lu, permutation %d.", seed, i); if ( outputObjectName[0] ) strcpy( invol[i]->name, outputObjectName); else strcpy( invol[i]->name, permOutputLibraryName); writePermutation( permOutputFileName, permOutputLibraryName, invol[i], (imageFormatFlag ? "image" : "cycle"), comment); } else printf( "\nFewer than %u permutations were found.\n", i); } /* Terminate. */ return 0; } /*-------------------------- verifyOptions -------------------------------*/ static void verifyOptions(void) { CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH, MAX_PRIME_FACTORS, MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS, MAX_EXTRA, XLARGE, SGND, NFLT}; extern void xaddsge( CompileOptions *cOpts); extern void xbitman( CompileOptions *cOpts); extern void xcopy ( CompileOptions *cOpts); extern void xcstbor( CompileOptions *cOpts); extern void xerrmes( CompileOptions *cOpts); extern void xessent( CompileOptions *cOpts); extern void xfactor( CompileOptions *cOpts); extern void xnew ( CompileOptions *cOpts); extern void xoldcop( CompileOptions *cOpts); extern void xpermgr( CompileOptions *cOpts); extern void xpermut( CompileOptions *cOpts); extern void xprimes( CompileOptions *cOpts); extern void xrandgr( CompileOptions *cOpts); extern void xrandsc( CompileOptions *cOpts); extern void xreadgr( CompileOptions *cOpts); extern void xreadpe( CompileOptions *cOpts); extern void xstorag( CompileOptions *cOpts); extern void xtoken ( CompileOptions *cOpts); extern void xutil ( CompileOptions *cOpts); xaddsge( &mainOpts); xbitman( &mainOpts); xcopy ( &mainOpts); xcstbor( &mainOpts); xerrmes( &mainOpts); xessent( &mainOpts); xfactor( &mainOpts); xnew ( &mainOpts); xoldcop( &mainOpts); xpermgr( &mainOpts); xpermut( &mainOpts); xprimes( &mainOpts); xrandgr( &mainOpts); xrandsc( &mainOpts); xreadgr( &mainOpts); xreadpe( &mainOpts); xstorag( &mainOpts); xtoken ( &mainOpts); xutil ( &mainOpts); } guava-3.6/src/leon/src/cmatauto.c0000644017361200001450000007475411026723452016661 0ustar tabbottcrontab/* File cmatauto.c. Contains functions matrixAutoGroup and matrixIsomorphism, the main functions for computing automorphism groups of general and monomial matrices. */ #include #include #include #include "group.h" #include "groupio.h" #include "code.h" #include "compcrep.h" #include "compsg.h" #include "cparstab.h" #include "errmesg.h" #include "matrix.h" #include "new.h" #include "randgrp.h" #include "readgrp.h" #include "storage.h" CHECK( cmatau) extern GroupOptions options; static RefinementMapping setStabRefine; static ReducChkFn isSetStabReducible; static void initializeSetStabRefn(void); static RefinementMapping gRowVsColRefine; static ReducChkFn isGRowVsColReducible; static PointSet *knownIrreducible[10] /* Null terminated 0-base list of */ = {NULL}; /* point sets Lambda for which top */ /* partition on UpsilonStack is */ /* known to be SSS_Lambda irred. */ static Matrix_01 *MM, *MM_L, *MM_R; static Code *CC, *CC_L, *CC_R; static BOOLEAN checkMonomialProperty; /* Also needed by isGRowVsColReducible. */ static BOOLEAN informCols; static BOOLEAN matrix01AutoProperty( Permutation *s ) { return isMatrix01Isomorphism( MM, MM, s, checkMonomialProperty); } static BOOLEAN matrix01IsoProperty( Permutation *s ) { return isMatrix01Isomorphism( MM_L, MM_R, s, checkMonomialProperty); } static BOOLEAN codeAutoProperty( Permutation *s ) { return isCodeIsomorphism( CC, CC, s); } static BOOLEAN codeIsoProperty( Permutation *s ) { return isCodeIsomorphism( CC_L, CC_R, s); } static void informMatrixIso( Permutation *perm); static void informMatrixMonIso( Permutation *perm); static void informCodeMonIso( Permutation *perm); /*-------------------------- matrixAutoGroup ------------------------------*/ /* Function matrixAutoGroup. Returns a new permutation group representing the automorphism group of the matrix M. If M is an (0,1)-matrix, the function designAutoGroup should be invoked instead. The algorithm is based on Figure 9 in the paper "Permutation group algorithms based on partitions" by the author. */ #define familyParm familyParm_L PermGroup *matrixAutoGroup( Matrix_01 *const M, /* The matrix whose group is to be found. */ PermGroup *const L, /* A (possibly trivial) known subgroup of the automorphism group of D. (A null pointer designates a trivial group.) */ Code *const C, /* If nonnull, the auto grp of the code C is */ const BOOLEAN monomialFlag) /* computed, assuming its group is contained in that of the design. */ { RefinementFamily SSS_Lambda, IIIg_M; RefinementFamily *refnFamList[3]; ReducChkFn *reducChkList[3]; SpecialRefinementDescriptor *specialRefinement[3]; ExtraDomain *extra[1]; PointSet *Lambda; /* Set of rows. */ Partition *Pi; /* Rows, cols, identity cols. */ PermGroup *G; Unsigned degree = M->numberOfRows + M->numberOfCols; Unsigned i; Property *pp; /* Construct the symmetric group G of degree rows+cols. */ G = allocPermGroup(); sprintf( G->name, "%c%d", SYMMETRIC_GROUP_CHAR, degree); G->degree = degree; G->baseSize = 0; /* Construct the set Lambda of points, ie. Lambda = {1,...,numberOfRows} or the partition Pi. */ if ( monomialFlag ) { Pi = allocPartition(); Pi->degree = degree; Pi->pointList = allocIntArrayDegree(); Pi->invPointList = allocIntArrayDegree(); Pi->cellNumber = allocIntArrayDegree(); Pi->startCell = allocIntArrayDegree(); for ( i = 1 ; i <= degree ; ++i ) { Pi->pointList[i] = Pi->invPointList[i] = i; Pi->cellNumber[i] = ( i <= M->numberOfRows) ? 1 : ( i <= degree - M->numberOfRows ) ? 2 : 3; } Pi->startCell[1] = 1; Pi->startCell[2] = M->numberOfRows + 1; Pi->startCell[3] = degree - M->numberOfRows + 1; Pi->startCell[4] = degree + 1;; SSS_Lambda.refine = partnStabRefine; SSS_Lambda.familyParm[0].ptrParm = (void *) Pi; } else { Lambda = allocPointSet(); Lambda->degree = degree; Lambda->size = M->numberOfRows; Lambda->pointList = allocIntArrayDegree(); for ( i = 1 ; i <= M->numberOfRows ; ++i ) Lambda->pointList[i] = i; Lambda->pointList[M->numberOfRows+1] = 0; Lambda->inSet = allocBooleanArrayDegree(); for ( i = 1 ; i <= degree ; ++i ) Lambda->inSet[i] = ( i <= M->numberOfRows); SSS_Lambda.refine = setStabRefine; SSS_Lambda.familyParm[0].ptrParm = (void *) Lambda; } IIIg_M.refine = gRowVsColRefine; IIIg_M.familyParm[0].ptrParm = (void *) M; refnFamList[0] = &SSS_Lambda; refnFamList[1] = &IIIg_M; refnFamList[2] = NULL; reducChkList[0] = (monomialFlag) ? isPartnStabReducible : isSetStabReducible; reducChkList[1] = isGRowVsColReducible; reducChkList[2] = NULL; specialRefinement[0] = NULL; specialRefinement[1] = NULL; specialRefinement[2] = NULL; extra[0] = NULL; if ( monomialFlag ) initializePartnStabRefn(); else initializeSetStabRefn(); if ( C ) { CC = C; checkMonomialProperty = (C->fieldSize > 2); pp = codeAutoProperty; } else { MM = M; checkMonomialProperty = monomialFlag; pp = matrix01AutoProperty; } return computeSubgroup( G, pp, refnFamList, reducChkList, specialRefinement, extra, L); } #undef familyParm /*-------------------------- matrixIsomorphism ----------------------------*/ /* Function matrixIsomorphism. Returns a permutation mapping one specified matrix M_L to another matrix M_R. The two matrices must have the same number of rows and the same number of columns. The algorithm is based on Figure 9 in the paper "Permutation group algorithms based on partitions" by the author. */ Permutation *matrixIsomorphism( Matrix_01 *const M_L, /* The first design. */ Matrix_01 *const M_R, /* The second design. */ PermGroup *const L_L, /* A known subgroup of Aut(M_L), or NULL. */ PermGroup *const L_R, /* A known subgroup of Aut(M_R), or NULL. */ Code *const C_L, /* If nonnull, C_R must also be nonull, and */ Code *const C_R, /* any isomorphism of C_L to C_R must map */ const BOOLEAN monomialFlag, /* M_L to M_R. A code isomorphism is */ /* computed. */ const BOOLEAN colInformFlag) /* Print iso on columns to std output. */ { RefinementFamily SSS_Lambda_Lambda, IIIg_ML_MR; RefinementFamily *refnFamList[3]; ReducChkFn *reducChkList[3]; SpecialRefinementDescriptor *specialRefinement[3]; ExtraDomain *extra[1]; PointSet *Lambda; /* Set of rows. */ Partition *Pi; /* Rows, cols, identity cols. */ PermGroup *G; Unsigned degree = M_L->numberOfRows + M_L->numberOfCols; Unsigned i; Property *pp; /* Construct the symmetric group G of degree rows+cols. */ G = allocPermGroup(); sprintf( G->name, "%c%d", SYMMETRIC_GROUP_CHAR, degree); G->degree = degree; G->baseSize = 0; /* Construct the set Lambda of points, ie. Lambda = {1,...,numberOfRows} or the partition Pi. */ if ( monomialFlag ) { Pi = allocPartition(); Pi->degree = degree; Pi->pointList = allocIntArrayDegree(); Pi->invPointList = allocIntArrayDegree(); Pi->cellNumber = allocIntArrayDegree(); Pi->startCell = allocIntArrayDegree(); for ( i = 1 ; i <= degree ; ++i ) { Pi->pointList[i] = Pi->invPointList[i] = i; Pi->cellNumber[i] = ( i <= M_L->numberOfRows) ? 1 : ( i <= degree - M_L->numberOfRows ) ? 2 : 3; } Pi->startCell[1] = 1; Pi->startCell[2] = M_L->numberOfRows + 1; Pi->startCell[3] = degree - M_L->numberOfRows + 1; Pi->startCell[4] = degree + 1;; SSS_Lambda_Lambda.refine = partnStabRefine; SSS_Lambda_Lambda.familyParm_L[0].ptrParm = (void *) Pi; SSS_Lambda_Lambda.familyParm_R[0].ptrParm = (void *) Pi; } else { Lambda = allocPointSet(); Lambda->degree = degree; Lambda->size = M_L->numberOfRows; Lambda->pointList = allocIntArrayDegree(); for ( i = 1 ; i <= M_L->numberOfRows ; ++i ) Lambda->pointList[i] = i; Lambda->pointList[M_L->numberOfRows+1] = 0; Lambda->inSet = allocBooleanArrayDegree(); for ( i = 1 ; i <= degree ; ++i ) Lambda->inSet[i] = ( i <= M_L->numberOfRows); SSS_Lambda_Lambda.refine = setStabRefine; SSS_Lambda_Lambda.familyParm_L[0].ptrParm = (void *) Lambda; SSS_Lambda_Lambda.familyParm_R[0].ptrParm = (void *) Lambda; } IIIg_ML_MR.refine = gRowVsColRefine; IIIg_ML_MR.familyParm_L[0].ptrParm = (void *) M_L; IIIg_ML_MR.familyParm_R[0].ptrParm = (void *) M_R; refnFamList[0] = &SSS_Lambda_Lambda; refnFamList[1] = &IIIg_ML_MR; refnFamList[2] = NULL; reducChkList[0] = (monomialFlag) ? isPartnStabReducible : isSetStabReducible; reducChkList[1] = isGRowVsColReducible; reducChkList[2] = NULL; specialRefinement[0] = NULL; specialRefinement[1] = NULL; specialRefinement[2] = NULL; extra[0] = NULL; if ( monomialFlag ) initializePartnStabRefn(); else initializeSetStabRefn(); if ( C_L ) { CC_L = C_L; CC_R = C_R; checkMonomialProperty = (C_L->fieldSize > 2); pp = codeIsoProperty; options.altInformCosetRep = (monomialFlag ? &informCodeMonIso : NULL); } else { MM_L = M_L; MM_R = M_R; checkMonomialProperty = monomialFlag; pp = matrix01IsoProperty; options.altInformCosetRep = (monomialFlag ? &informMatrixMonIso : &informMatrixIso); } informCols = colInformFlag; return computeCosetRep( G, pp, refnFamList, reducChkList, specialRefinement, extra, L_L, L_R); } /*-------------------------- initializeSetStabRefn ------------------------*/ static void initializeSetStabRefn( void) { knownIrreducible[0] = NULL; } /*-------------------------- setStabRefine --------------------------------*/ /* The function implements the refinement family setStabRefine (denoted SSS_Lambda in the reference). This family consists of the elementary refinements ssS_{Lambda,i}, where Lambda fixed. (It is the set to be stabilized) and where 1 <= i <= degree. Application of sSS_{Lambda,i} to UpsilonStack splits off from UpsilonTop the intersection of Lambda and the i'th cell of UpsilonTop from cell i of the top partition of UpsilonStack and pushes the resulting partition onto UpsilonStack, unless sSS_{Lambda,i} acts trivially on UpsilonTop, in which case UpsilonStack remains unchanged. The family parameter is: familyParm[0].ptrParm: Lambda The refinement parameters are: refnParm[0].intParm: i. In the expectation that this refinement will be applied only a small number of times, no attempt has been made to optimize this procedure. */ static SplitSize setStabRefine( const RefinementParm familyParm[], /* Family parm: Lambda. */ const RefinementParm refnParm[], /* Refinement parm: i. */ PartitionStack *const UpsilonStack) /* The partition stack to refine. */ { PointSet *Lambda = familyParm[0].ptrParm; Unsigned cellToSplit = refnParm[0].intParm; Unsigned m, last, i, j, temp, inLambdaCount = 0, outLambdaCount = 0; UnsignedS *const pointList = UpsilonStack->pointList, *const invPointList = UpsilonStack->invPointList, *const cellNumber = UpsilonStack->cellNumber, *const parent = UpsilonStack->parent, *const startCell = UpsilonStack->startCell, *const cellSize = UpsilonStack->cellSize; char *inSet = Lambda->inSet; SplitSize split; /* First check if the refinement acts nontrivially on UpsilonTop. If not return immediately. */ for ( m = startCell[cellToSplit] , last = m + cellSize[cellToSplit] ; m < last && (inLambdaCount == 0 || outLambdaCount == 0) ; ++m ) if ( inSet[pointList[m]] ) ++inLambdaCount; else ++outLambdaCount; if ( inLambdaCount == 0 || outLambdaCount == 0 ) { split.oldCellSize = cellSize[cellToSplit]; split.newCellSize = 0; return split; } /* Now split cell cellToSplit of UpsilonTop. A variation of the splitting algorithm used in quicksort is applied. */ i = startCell[cellToSplit]-1; j = last; while ( i < j ) { while ( !inSet[pointList[++i]] ); while ( inSet[pointList[--j]] ); if ( i < j ) { EXCHANGE( pointList[i], pointList[j], temp) EXCHANGE( invPointList[pointList[i]], invPointList[pointList[j]], temp) } } ++UpsilonStack->height; for ( m = i ; m < last ; ++m ) cellNumber[pointList[m]] = UpsilonStack->height; startCell[UpsilonStack->height] = i; parent[UpsilonStack->height] = cellToSplit; cellSize[UpsilonStack->height] = last - i; cellSize[cellToSplit] -= (last - i); split.oldCellSize = cellSize[cellToSplit]; split.newCellSize = cellSize[UpsilonStack->height]; return split; } /*-------------------------- isSetStabReducible ---------------------------*/ /* The function isSetStabReducible checks whether the top partition on a given partition stack is SSS_Lambda-reducible, where Lambda is a fixed set. If so, it returns a pair consisting of a refinement acting nontrivially on the top partition and a priority. Otherwise it returns a structure of type RefinementPriorityPair in which the priority field is IRREDUCIBLE. Assuming that a reducing refinement is found, the (reverse) priority is set very low (1). Note that, once this function returns negative in the priority field once, it will do so on all subsequent calls. (The static variable knownIrreducible is set to true in this situation.) Again, no attempt at efficiency has been made. */ static RefinementPriorityPair isSetStabReducible( const RefinementFamily *family, const PartitionStack *const UpsilonStack) { PointSet *Lambda = family->familyParm_L[0].ptrParm; Unsigned i, cellNo, position; BOOLEAN ptsInLambda, ptsNotInLambda; RefinementPriorityPair reducingRefn; UnsignedS *const pointList = UpsilonStack->pointList, *const startCell = UpsilonStack->startCell, *const cellSize = UpsilonStack->cellSize; char *inSet = Lambda->inSet; /* Check that the refinement mapping really is setStabRefn, as required. */ if ( family->refine != setStabRefine ) ERROR( "isSetStabReducible", "Error: incorrect refinement mapping"); /* If the top partition has previously been found to be SSS-irreducible, we return immediately. */ for ( i = 0 ; knownIrreducible[i] && knownIrreducible[i] != Lambda ; ++i ) ; if ( knownIrreducible[i] ) { reducingRefn.priority = IRREDUCIBLE; return reducingRefn; } /* If we reach here, the top partition has not been previously found to be SSS-irreducible. We check each cell in turn to see if it intersects both Lambda and Omega - Lambda. If such a cell is found, we return immediately. */ for ( cellNo = 1 ; cellNo <= UpsilonStack->height ; ++cellNo ) { ptsInLambda = ptsNotInLambda = FALSE; for ( position = startCell[cellNo] ; position < startCell[cellNo] + cellSize[cellNo] ; ++position ) { if ( inSet[pointList[position]] ) ptsInLambda = TRUE; else ptsNotInLambda = TRUE; if ( ptsInLambda && ptsNotInLambda ) { reducingRefn.refn.family = family; reducingRefn.refn.refnParm[0].intParm = cellNo; reducingRefn.priority = 1; return reducingRefn; } } } /* If we reach here, we have found the top partition to be SSS_Lambda irreducible, so we add Lambda to the list knownIrreducible and return. */ for ( i = 0 ; knownIrreducible[i] ; ++i ) ; if ( i < 9 ) { knownIrreducible[i] = Lambda; knownIrreducible[i+1] = NULL; } else ERROR( "isSetStabReducible", "Number of point sets exceeded max of 9.") reducingRefn.priority = IRREDUCIBLE; return reducingRefn; } /*--------------------------------------------------------------------------*/ /* Static variables shared by gRowVsColRefine and isGRowVsColReducible. Note they are modified only by gRowVsColRefine. */ static Unsigned *header = NULL; static Unsigned *nonZeroPosition; static Unsigned nonZeroCount; typedef struct { Unsigned rowOrCol; Unsigned link; } Node; static Node *node; static BOOLEAN skipFlag = FALSE; static Unsigned randBits; static unsigned long twoExpRandBits; static Unsigned randBitsFlag = 0; static Unsigned *randArray = NULL; /*-------------------------- gRowVsColRefine --------------------------------*/ /* The function implements the refinement families III_RC and III_CR. Here III_RC consists of the elementary refinements IIi_RC_{D,i,j,m}, where IIi_RC_{D,i,j,m} splits from row cell i those rows that have m ones in column cell j, and IIi_CR_{D,i,j,m} splits from column cell i those columns that have m ones in row cell j. Note that from i and j the routine can tell whether III_RC or III_CR should be applied. The family parameter is: familyParm[0].ptrParm: D (the matrix) The refinement parameters are: refnParm[0].intParm: i. refnParm[1].intParm: j. refnParm[2].intParm: m. As a special convention, j = 0 signifies the same i and j as before, with the sums across row or column cells already computed. */ static SplitSize gRowVsColRefine( const RefinementParm familyParm[], /* Family parm: D. */ const RefinementParm refnParm[], /* Refinement parm: i,j,m. */ PartitionStack *const UpsilonStack) /* The partition stack to refine. */ { Matrix_01 *M = familyParm[0].ptrParm; Unsigned i = refnParm[0].intParm, j = refnParm[1].intParm, m = refnParm[2].intParm; Unsigned nRows = M->numberOfRows; Unsigned degree = UpsilonStack->degree; Unsigned k, p, r, t, cnt, last, last1, rowOrCol, rowOrColSum; UnsignedS *const pointList = UpsilonStack->pointList, *const invPointList = UpsilonStack->invPointList, *const cellNumber = UpsilonStack->cellNumber, *const parent = UpsilonStack->parent, *const startCell = UpsilonStack->startCell, *const cellSize = UpsilonStack->cellSize; SplitSize split; enum {RC, CR} familySelector; static Unsigned numberOfSubcells; /* Allocate header, etc, if not already done. */ if ( !header ) { header = (Unsigned *) malloc( twoExpRandBits * sizeof(Unsigned)); for ( k = 0 ; k < twoExpRandBits ; ++k ) /* Note degree+1 needed */ header[k] = 0; nonZeroPosition = allocIntArrayDegree(); nonZeroCount = 0; node = (Node *) malloc( (degree+2) * sizeof(Node) ); } /* First we check whether we need to compute row/col sums across cells, or whether this was already done on a previous call. If so, we first clear the array header. */ if ( j != 0 && !skipFlag ) { for ( k = 1 ; k <= nonZeroCount ; ++k ) header[nonZeroPosition[k]] = 0; nonZeroCount = 0; familySelector = (pointList[startCell[i]] <= nRows ) ? RC : CR; for ( k = startCell[i] , last = k + cellSize[i] , cnt = 1; k < last ; ++k , ++cnt ) { rowOrCol = pointList[k]; rowOrColSum = 0; switch( familySelector ) { case RC: for ( t = startCell[j] , last1 = t + cellSize[j] ; t < last1 ; ++t ) rowOrColSum += randArray[M->entry[rowOrCol][pointList[t]-nRows]]; break; case CR: for ( t = startCell[j] , last1 = t + cellSize[j] ; t < last1 ; ++t ) rowOrColSum += randArray[M->entry[pointList[t]][rowOrCol-nRows]]; break; } rowOrColSum &= randBitsFlag; node[cnt].rowOrCol = rowOrCol; node[cnt].link = header[rowOrColSum]; if ( header[rowOrColSum] == 0 ) nonZeroPosition[++nonZeroCount] = rowOrColSum; header[rowOrColSum] = cnt; } numberOfSubcells = nonZeroCount; } skipFlag = FALSE; /* If cell i does not split, return at once. */ if ( m == UNKNOWN || header[m] == 0 || numberOfSubcells == 1 ) { split.oldCellSize = cellSize[i]; split.newCellSize = 0; return split; } /* Now split cell i. */ last = startCell[i] + cellSize[i]; for ( k = last-1 , p = header[m] ; p != 0 ; --k , p = node[p].link ) { t = node[p].rowOrCol; r = invPointList[t]; pointList[r] = pointList[k]; pointList[k] = t; invPointList[t] = k; invPointList[pointList[r]] = r; } ++k; ++UpsilonStack->height; for ( r = k ; r < last ; ++r ) cellNumber[pointList[r]] = UpsilonStack->height; startCell[UpsilonStack->height] = k; parent[UpsilonStack->height] = i; cellSize[UpsilonStack->height] = last - k; cellSize[i] -= (last - k); split.oldCellSize = cellSize[i]; split.newCellSize = cellSize[UpsilonStack->height]; --numberOfSubcells; return split; } /*-------------------------- isGRowVsColReducible ---------------------------*/ #define familyParm familyParm_L #define CELL_TYPE(k) (pointList[startCell[k]] <= M_L->numberOfRows ? ROW : COL) static RefinementPriorityPair isGRowVsColReducible( const RefinementFamily *family, const PartitionStack *const UpsilonStack) { typedef enum{ ROW, COL} CellType; Matrix_01 *M_L = family->familyParm_L[0].ptrParm; RefinementPriorityPair reducingRefn; static Unsigned processingCell = 0, opposingCell = 0; static Unsigned listSize = 0; static UnsignedS *list = NULL; static UnsignedS *freq = NULL; Unsigned i, k, p, maxPos; static Unsigned firstRowCell = 0, firstColCell = 0, lastRowCell = 0, lastColCell = 0; static UnsignedS *nextCellSameType = NULL; UnsignedS *const pointList = UpsilonStack->pointList, *const startCell = UpsilonStack->startCell; unsigned long initialSeed = 47; SplitSize dummySplit; /* Allocate and construct randArray the first time. */ if ( !randArray ) { initializeSeed( initialSeed); randBits = 6; twoExpRandBits = 64; while ( randBits < INT_SIZE && twoExpRandBits < (unsigned long) UpsilonStack->degree + M_L->setSize ) { ++randBits; twoExpRandBits <<=1; } for ( i = 0 ; i < randBits ; ++ i) randBitsFlag |= (1u << i); randArray = (Unsigned *) malloc( sizeof(Unsigned *) * M_L->setSize); for ( i = 0 ; i < M_L->setSize ; ++i ) randArray[i] = 2 * randInteger( 1, twoExpRandBits>>1) - 1; } /* Allocate list, freq, and nextCellSameType the first time. */ if ( !list ) list = allocIntArrayDegree(); if ( !freq ) freq = allocIntArrayDegree(); if ( !nextCellSameType ) { nextCellSameType = allocIntArrayDegree(); nextCellSameType[0] = 0; } /* Check that the refinement mapping really is rowVsColRefine, as required. */ if ( family->refine != gRowVsColRefine ) ERROR( "isGRowVsColReducible", "Error: incorrect refinement mapping"); /* If the height is 1 (row/col split not yet performed), for regular matrices, or 1 or 2, for monomial matrices, return irreducible. */ if ( UpsilonStack->height <= 1 + checkMonomialProperty ) { reducingRefn.priority = IRREDUCIBLE; return reducingRefn; } /* When the stack height reaches 2 (1 row cell, 1 col cell), for normal matrices, or 3 (1 row cell, 2 col cells), for monomial matrices, perform initializations for nextCellSameType, etc. */ if ( UpsilonStack->height == 2 + checkMonomialProperty ) { firstRowCell = (CELL_TYPE(1) == ROW) ? 1 : 2; firstColCell = 3 - firstRowCell; lastRowCell = firstRowCell; lastColCell = firstColCell; nextCellSameType[1] = nextCellSameType[2] = 0; } /* If we can split the same cell as before using a different weighted sum, do so immediately (priority 1). */ if ( listSize > 0 ) { reducingRefn.refn.family = family; reducingRefn.refn.refnParm[0].intParm = opposingCell; reducingRefn.refn.refnParm[1].intParm = 0; reducingRefn.refn.refnParm[2].intParm = list[listSize--]; reducingRefn.priority = 1; skipFlag = TRUE; return reducingRefn; } /* Consider the next opposing cell for the cell being processed, or the next cell to be processed if there are no more opposing cells. First we update nextCellSameType (Note this must be done only here). */ for (;;) { if ( nextCellSameType[opposingCell] != 0 ) opposingCell = nextCellSameType[opposingCell]; else if ( processingCell < UpsilonStack->height ) { ++processingCell; for ( i = MAX(lastRowCell,lastColCell)+1 ; i <= UpsilonStack->height ; ++i ) switch( CELL_TYPE(i) ) { case ROW: nextCellSameType[lastRowCell] = i; lastRowCell = i; nextCellSameType[i] = 0; break; case COL: nextCellSameType[lastColCell] = i; lastColCell = i; nextCellSameType[i] = 0; break; } opposingCell = ( CELL_TYPE(processingCell) == ROW) ? firstColCell: firstRowCell; } else { reducingRefn.priority = IRREDUCIBLE; return reducingRefn; } /* Now we try to split opposingCell using processingCell, and an intersectionCount that guarantees failure. (This forces rowVsColRefine to compute the header, etc). */ reducingRefn.refn.refnParm[0].intParm = opposingCell; reducingRefn.refn.refnParm[1].intParm = processingCell; reducingRefn.refn.refnParm[2].intParm = UNKNOWN; dummySplit = gRowVsColRefine( family->familyParm, reducingRefn.refn.refnParm, UpsilonStack); /* If no splitting occured of opposing cell via processing cell is possible, nonZeroCount will be 1. If this occurs, skip to the next pair (processingCell,opposingCell). */ if ( nonZeroCount == 1 ) continue; /* Now we consider all the possible splittings of opposingCell, reject that giving the largest new cell, and put the others on the list. */ for ( k = 1 ; k <= nonZeroCount ; ++k) { freq[k] = 1; p = header[nonZeroPosition[k]]; while ( node[p].link != 0 ) { ++freq[k]; p = node[p].link; } } maxPos = 1; for ( k = 2 ; k <= nonZeroCount ; ++k ) if ( freq[k] > freq[maxPos] ) maxPos = k; listSize = 0; for ( k = 1 ; k <= nonZeroCount ; ++k ) if ( k != maxPos ) list[++listSize] = nonZeroPosition[k]; /* Finally return the first entry on the list. */ reducingRefn.refn.family = family; reducingRefn.refn.refnParm[0].intParm = opposingCell; reducingRefn.refn.refnParm[1].intParm = processingCell; reducingRefn.refn.refnParm[2].intParm = list[listSize--]; reducingRefn.priority = 1; skipFlag = TRUE; return reducingRefn; } } #undef familyParm /*-------------------------- informMatrixIso -----------------------------*/ static void informMatrixIso( Permutation *perm) { Unsigned trueDegree = perm->degree, i; Permutation *shiftPerm; if ( MM_L->numberOfRows + informCols * MM_L->numberOfCols > options.writeConjPerm ) { printf( " "); return; } perm->degree = MM_L->numberOfRows; printf( " rows: "); writeCyclePerm( perm, 10, 10, 72); perm->degree = trueDegree; if ( informCols ) { shiftPerm = newUndefinedPerm( perm->degree); shiftPerm->degree = MM_L->numberOfCols; for ( i = 1 ; i <= MM_L->numberOfCols ; ++i ) shiftPerm->image[i] = perm->image[i+MM_L->numberOfRows] - MM_L->numberOfRows; printf( "\n\n cols: "); writeCyclePerm( shiftPerm, 10, 10, 72); shiftPerm->degree = trueDegree; deletePermutation( shiftPerm); } } /*-------------------------- informMatrixMonIso --------------------------*/ static void informMatrixMonIso( Permutation *perm) { Unsigned trueDegree = perm->degree, i; Permutation *shiftPerm; if ( (MM_L->numberOfRows+informCols*MM_L->numberOfCols) / (MM_L->setSize-1) > options.writeConjPerm ) { printf( " "); return; } perm->degree = MM_L->numberOfRows; printf( " rows: "); writeImageMonomialPerm( perm, MM_L->setSize, 10); perm->degree = trueDegree; if ( informCols ) { shiftPerm = newUndefinedPerm( perm->degree); shiftPerm->degree = MM_L->numberOfCols - MM_L->numberOfRows; for ( i = 1 ; i <= shiftPerm->degree ; ++i ) shiftPerm->image[i] = perm->image[i+MM_L->numberOfRows] - MM_L->numberOfRows; printf( "\n\n cols: "); writeImageMonomialPerm( shiftPerm, MM_L->setSize, 10); shiftPerm->degree = trueDegree; deletePermutation( shiftPerm); } } /*-------------------------- informCodeMonIso ----------------------------*/ static void informCodeMonIso( Permutation *perm) { Unsigned trueDegree = perm->degree; if ( CC_L->length > options.writeConjPerm ) { printf( " "); return; } perm->degree = CC_L->length * (CC_L->fieldSize-1) ; printf( " "); writeImageMonomialPerm( perm, CC_L->fieldSize, 5); perm->degree = trueDegree; } guava-3.6/src/leon/src/install0000644017361200001450000000057011026723452016252 0ustar tabbottcrontabfor file in setstab cent inter desauto cjrndper commut compgrp fndelt generate orbdes orblist randobj wtdist; do if [ -f $file ] then mv $file $1/$file fi done for file in setimage parstab parimage conj gcent desiso matauto matiso codeauto codeiso cjper compper compset ncl chbase ptstab; do if [ ! -f $1/$file ] then cp $file.sh $1/$file fi done guava-3.6/src/leon/src/cdesauto.c0000644017361200001450000006213611026723452016642 0ustar tabbottcrontab/* File cdesauto.c. Contains functions designAutoGroup and designIsomorphism, the main function the design automorphism group and design isomorphism programs. */ #include #include #include #include "group.h" #include "groupio.h" #include "code.h" #include "compcrep.h" #include "compsg.h" #include "errmesg.h" #include "matrix.h" #include "new.h" #include "readgrp.h" #include "storage.h" CHECK( cdesau) extern GroupOptions options; static RefinementMapping setStabRefine; static ReducChkFn isSetStabReducible; static void initializeSetStabRefn(void); static RefinementMapping rowVsColRefine; static ReducChkFn isRowVsColReducible; static PointSet *knownIrreducible[10] /* Null terminated 0-base list of */ = {NULL}; /* point sets Lambda for which top */ /* partition on UpsilonStack is */ /* known to be SSS_Lambda irred. */ static Matrix_01 *DD, *DD_L, *DD_R; static Code *CC, *CC_L, *CC_R; static BOOLEAN informCols; static BOOLEAN matrix01AutoProperty( Permutation *s ) { return isMatrix01Isomorphism( DD, DD, s, FALSE); } static BOOLEAN matrix01IsoProperty( Permutation *s ) { return isMatrix01Isomorphism( DD_L, DD_R, s, FALSE); } static BOOLEAN codeAutoProperty( Permutation *s ) { return isCodeIsomorphism( CC, CC, s); } static BOOLEAN codeIsoProperty( Permutation *s ) { return isCodeIsomorphism( CC_L, CC_R, s); } static void informDesignIsoPtBlk( Permutation *perm); /*-------------------------- designAutoGroup ------------------------------*/ /* Function designAutoGroup. Returns a new permutation group representing the automorphism group of the matrix/design D. The algorithm is based on Figure 9 in the paper "Permutation group algorithms based on partitions" by the author. */ #define familyParm familyParm_L PermGroup *designAutoGroup( Matrix_01 *const D, /* The matrix whose group is to be found. */ PermGroup *const L, /* A (possibly trivial) known subgroup of the automorphism group of D. (A null pointer designates a trivial group.) */ Code *const C) /* If nonnull, the auto grp of the code C is computed, assuming its group is contained in that of the design. */ { RefinementFamily SSS_Lambda, III_D; RefinementFamily *refnFamList[3]; ReducChkFn *reducChkList[3]; SpecialRefinementDescriptor *specialRefinement[3]; ExtraDomain *extra[1]; PointSet *Lambda = allocPointSet(); /* Set of rows. */ PermGroup *G; Unsigned degree = D->numberOfRows + D->numberOfCols; Unsigned i; Property *pp; /* Construct the symmetric group G of degree rows+cols. */ G = allocPermGroup(); sprintf( G->name, "%c%d", SYMMETRIC_GROUP_CHAR, degree); G->degree = degree; G->baseSize = 0; /* Construct the set Lambda of points, ie. Lambda = {1,...,numberOfRows}. */ Lambda->degree = degree; Lambda->size = D->numberOfRows; Lambda->pointList = allocIntArrayDegree(); for ( i = 1 ; i <= D->numberOfRows ; ++i ) Lambda->pointList[i] = i; Lambda->pointList[D->numberOfRows+1] = 0; Lambda->inSet = allocBooleanArrayDegree(); for ( i = 1 ; i <= degree ; ++i ) Lambda->inSet[i] = ( i <= D->numberOfRows); SSS_Lambda.refine = setStabRefine; SSS_Lambda.familyParm[0].ptrParm = (void *) Lambda; III_D.refine = rowVsColRefine; III_D.familyParm[0].ptrParm = (void *) D; refnFamList[0] = &SSS_Lambda; refnFamList[1] = &III_D; refnFamList[2] = NULL; reducChkList[0] = isSetStabReducible; reducChkList[1] = isRowVsColReducible; reducChkList[2] = NULL; specialRefinement[0] = NULL; specialRefinement[1] = NULL; specialRefinement[2] = NULL; extra[0] = NULL; initializeSetStabRefn(); if ( C ) { CC = C; pp = codeAutoProperty; } else { DD = D; pp = matrix01AutoProperty; } return computeSubgroup( G, pp, refnFamList, reducChkList, specialRefinement, extra, L); } #undef familyParm /*-------------------------- designIsomorphism ----------------------------*/ /* Function designIsomorphism. Returns a permutation mapping one specified matrix/design D_L to another matrix/design D_R. The two matrices must have the same number of rows and the same number of columns. The algorithm is based on Figure 9 in the paper "Permutation group algorithms based on partitions" by the author. */ Permutation *designIsomorphism( Matrix_01 *const D_L, /* The first design. */ Matrix_01 *const D_R, /* The second design. */ PermGroup *const L_L, /* A known subgroup of Aut(D_L), or NULL. */ PermGroup *const L_R, /* A known subgroup of Aut(D_R), or NULL. */ Code *const C_L, /* If nonnull, C_R must also be nonull, and */ Code *const C_R, /* any isomorphism of C_L to C_R must map */ /* D_L to D_R. A code isomorphism is */ /* computed. */ const BOOLEAN colInformFlag) { RefinementFamily SSS_Lambda_Lambda, III_DL_DR; RefinementFamily *refnFamList[3]; ReducChkFn *reducChkList[3]; SpecialRefinementDescriptor *specialRefinement[3]; ExtraDomain *extra[1]; PointSet *Lambda = allocPointSet(); /* Set of rows. */ PermGroup *G; Unsigned degree = D_L->numberOfRows + D_L->numberOfCols; Unsigned i; Property *pp; /* Construct the symmetric group G of degree rows+cols. */ G = allocPermGroup(); sprintf( G->name, "%c%d", SYMMETRIC_GROUP_CHAR, degree); G->degree = degree; G->baseSize = 0; /* Construct the set Lambda of points, ie. Lambda = {1,...,numberOfRows}. */ Lambda->degree = degree; Lambda->size = D_L->numberOfRows; Lambda->pointList = allocIntArrayDegree(); for ( i = 1 ; i <= D_L->numberOfRows ; ++i ) Lambda->pointList[i] = i; Lambda->pointList[D_L->numberOfRows+1] = 0; Lambda->inSet = allocBooleanArrayDegree(); for ( i = 1 ; i <= degree ; ++i ) Lambda->inSet[i] = ( i <= D_L->numberOfRows); SSS_Lambda_Lambda.refine = setStabRefine; SSS_Lambda_Lambda.familyParm_L[0].ptrParm = (void *) Lambda; SSS_Lambda_Lambda.familyParm_R[0].ptrParm = (void *) Lambda; III_DL_DR.refine = rowVsColRefine; III_DL_DR.familyParm_L[0].ptrParm = (void *) D_L; III_DL_DR.familyParm_R[0].ptrParm = (void *) D_R; refnFamList[0] = &SSS_Lambda_Lambda; refnFamList[1] = &III_DL_DR; refnFamList[2] = NULL; reducChkList[0] = isSetStabReducible; reducChkList[1] = isRowVsColReducible; reducChkList[2] = NULL; specialRefinement[0] = NULL; specialRefinement[1] = NULL; specialRefinement[2] = NULL; extra[0] = NULL; initializeSetStabRefn(); if ( C_L ) { CC_L = C_L; CC_R = C_R; pp = codeIsoProperty; } else { DD_L = D_L; DD_R = D_R; pp = matrix01IsoProperty; options.altInformCosetRep = (colInformFlag ? &informDesignIsoPtBlk : NULL); } informCols = colInformFlag; return computeCosetRep( G, pp, refnFamList, reducChkList, specialRefinement, extra, L_L, L_R); } /*-------------------------- initializeSetStabRefn ------------------------*/ static void initializeSetStabRefn( void) { knownIrreducible[0] = NULL; } /*-------------------------- setStabRefine --------------------------------*/ /* The function implements the refinement family setStabRefine (denoted SSS_Lambda in the reference). This family consists of the elementary refinements ssS_{Lambda,i}, where Lambda fixed. (It is the set to be stabilized) and where 1 <= i <= degree. Application of sSS_{Lambda,i} to UpsilonStack splits off from UpsilonTop the intersection of Lambda and the i'th cell of UpsilonTop from cell i of the top partition of UpsilonStack and pushes the resulting partition onto UpsilonStack, unless sSS_{Lambda,i} acts trivially on UpsilonTop, in which case UpsilonStack remains unchanged. The family parameter is: familyParm[0].ptrParm: Lambda The refinement parameters are: refnParm[0].intParm: i. In the expectation that this refinement will be applied only a small number of times, no attempt has been made to optimize this procedure. */ static SplitSize setStabRefine( const RefinementParm familyParm[], /* Family parm: Lambda. */ const RefinementParm refnParm[], /* Refinement parm: i. */ PartitionStack *const UpsilonStack) /* The partition stack to refine. */ { PointSet *Lambda = familyParm[0].ptrParm; Unsigned cellToSplit = refnParm[0].intParm; Unsigned m, last, i, j, temp, inLambdaCount = 0, outLambdaCount = 0; UnsignedS *const pointList = UpsilonStack->pointList, *const invPointList = UpsilonStack->invPointList, *const cellNumber = UpsilonStack->cellNumber, *const parent = UpsilonStack->parent, *const startCell = UpsilonStack->startCell, *const cellSize = UpsilonStack->cellSize; char *inSet = Lambda->inSet; SplitSize split; /* First check if the refinement acts nontrivially on UpsilonTop. If not return immediately. */ for ( m = startCell[cellToSplit] , last = m + cellSize[cellToSplit] ; m < last && (inLambdaCount == 0 || outLambdaCount == 0) ; ++m ) if ( inSet[pointList[m]] ) ++inLambdaCount; else ++outLambdaCount; if ( inLambdaCount == 0 || outLambdaCount == 0 ) { split.oldCellSize = cellSize[cellToSplit]; split.newCellSize = 0; return split; } /* Now split cell cellToSplit of UpsilonTop. A variation of the splitting algorithm used in quicksort is applied. */ i = startCell[cellToSplit]-1; j = last; while ( i < j ) { while ( !inSet[pointList[++i]] ); while ( inSet[pointList[--j]] ); if ( i < j ) { EXCHANGE( pointList[i], pointList[j], temp) EXCHANGE( invPointList[pointList[i]], invPointList[pointList[j]], temp) } } ++UpsilonStack->height; for ( m = i ; m < last ; ++m ) cellNumber[pointList[m]] = UpsilonStack->height; startCell[UpsilonStack->height] = i; parent[UpsilonStack->height] = cellToSplit; cellSize[UpsilonStack->height] = last - i; cellSize[cellToSplit] -= (last - i); split.oldCellSize = cellSize[cellToSplit]; split.newCellSize = cellSize[UpsilonStack->height]; return split; } /*-------------------------- isSetStabReducible ---------------------------*/ /* The function isSetStabReducible checks whether the top partition on a given partition stack is SSS_Lambda-reducible, where Lambda is a fixed set. If so, it returns a pair consisting of a refinement acting nontrivially on the top partition and a priority. Otherwise it returns a structure of type RefinementPriorityPair in which the priority field is IRREDUCIBLE. Assuming that a reducing refinement is found, the (reverse) priority is set very low (1). Note that, once this function returns negative in the priority field once, it will do so on all subsequent calls. (The static variable knownIrreducible is set to true in this situation.) Again, no attempt at efficiency has been made. */ static RefinementPriorityPair isSetStabReducible( const RefinementFamily *family, const PartitionStack *const UpsilonStack) { PointSet *Lambda = family->familyParm_L[0].ptrParm; Unsigned i, cellNo, position; BOOLEAN ptsInLambda, ptsNotInLambda; RefinementPriorityPair reducingRefn; UnsignedS *const pointList = UpsilonStack->pointList, *const startCell = UpsilonStack->startCell, *const cellSize = UpsilonStack->cellSize; char *inSet = Lambda->inSet; /* Check that the refinement mapping really is setStabRefn, as required. */ if ( family->refine != setStabRefine ) ERROR( "isSetStabReducible", "Error: incorrect refinement mapping"); /* If the top partition has previously been found to be SSS-irreducible, we return immediately. */ for ( i = 0 ; knownIrreducible[i] && knownIrreducible[i] != Lambda ; ++i ) ; if ( knownIrreducible[i] ) { reducingRefn.priority = IRREDUCIBLE; return reducingRefn; } /* If we reach here, the top partition has not been previously found to be SSS-irreducible. We check each cell in turn to see if it intersects both Lambda and Omega - Lambda. If such a cell is found, we return immediately. */ for ( cellNo = 1 ; cellNo <= UpsilonStack->height ; ++cellNo ) { ptsInLambda = ptsNotInLambda = FALSE; for ( position = startCell[cellNo] ; position < startCell[cellNo] + cellSize[cellNo] ; ++position ) { if ( inSet[pointList[position]] ) ptsInLambda = TRUE; else ptsNotInLambda = TRUE; if ( ptsInLambda && ptsNotInLambda ) { reducingRefn.refn.family = family; reducingRefn.refn.refnParm[0].intParm = cellNo; reducingRefn.priority = 1; return reducingRefn; } } } /* If we reach here, we have found the top partition to be SSS_Lambda irreducible, so we add Lambda to the list knownIrreducible and return. */ for ( i = 0 ; knownIrreducible[i] ; ++i ) ; if ( i < 9 ) { knownIrreducible[i] = Lambda; knownIrreducible[i+1] = NULL; } else ERROR( "isSetStabReducible", "Number of point sets exceeded max of 9.") reducingRefn.priority = IRREDUCIBLE; return reducingRefn; } /*--------------------------------------------------------------------------*/ /* Static variables shared by rowVsColRefine and isRowVsColReducible. Note they are modified only by rowVsColRefine. */ static Unsigned *header = NULL; static Unsigned *nonZeroPosition; static Unsigned nonZeroCount; typedef struct { Unsigned rowOrCol; Unsigned link; } Node; static Node *node; static BOOLEAN skipFlag = FALSE; /*-------------------------- rowVsColRefine --------------------------------*/ /* The function implements the refinement families III_RC and III_CR. Here III_RC consists of the elementary refinements IIi_RC_{D,i,j,m}, where IIi_RC_{D,i,j,m} splits from row cell i those rows that have m ones in column cell j, and IIi_CR_{D,i,j,m} splits from column cell i those columns that have m ones in row cell j. Note that from i and j the routine can tell whether III_RC or III_CR should be applied. The family parameter is: familyParm[0].ptrParm: D (the matrix) The refinement parameters are: refnParm[0].intParm: i. refnParm[1].intParm: j. refnParm[2].intParm: m. As a special convention, j = 0 signifies the same i and j as before, with the sums across row or column cells already computed. */ static SplitSize rowVsColRefine( const RefinementParm familyParm[], /* Family parm: D. */ const RefinementParm refnParm[], /* Refinement parm: i,j,m. */ PartitionStack *const UpsilonStack) /* The partition stack to refine. */ { Matrix_01 *D = familyParm[0].ptrParm; Unsigned i = refnParm[0].intParm, j = refnParm[1].intParm, m = refnParm[2].intParm; Unsigned nRows = D->numberOfRows; Unsigned degree = UpsilonStack->degree; Unsigned lastRow, lastCol, k, p, r, t, cnt, last, last1, rowOrCol, rowOrColSum; UnsignedS *const pointList = UpsilonStack->pointList, *const invPointList = UpsilonStack->invPointList, *const cellNumber = UpsilonStack->cellNumber, *const parent = UpsilonStack->parent, *const startCell = UpsilonStack->startCell, *const cellSize = UpsilonStack->cellSize; SplitSize split; enum {RC, CR} familySelector; static Unsigned numberOfSubcells; /* Allocate header, etc, if not already done. */ if ( !header ) { header = allocIntArrayDegree(); for ( k = 0 ; k <= degree+1 ; ++k ) /* Note degree+1 needed */ header[k] = 0; nonZeroPosition = allocIntArrayDegree(); nonZeroCount = 0; node = (Node *) malloc( (degree+2) * sizeof(Node) ); } /* First we check whether we need to compute row/col sums across cells, or whether this was already done on a previous call. If so, we first clear the array header. */ if ( j != 0 && !skipFlag ) { for ( k = 1 ; k <= nonZeroCount ; ++k ) header[nonZeroPosition[k]] = 0; nonZeroCount = 0; familySelector = (pointList[startCell[i]] <= nRows ) ? RC : CR; for ( k = startCell[i] , last = k + cellSize[i] , cnt = 1; k < last ; ++k , ++cnt ) { rowOrCol = pointList[k]; rowOrColSum = 0; switch( familySelector ) { case RC: for ( t = startCell[j] , last1 = t + cellSize[j] ; t < last1 ; ++t ) rowOrColSum += D->entry[rowOrCol][pointList[t]-nRows]; break; case CR: for ( t = startCell[j] , last1 = t + cellSize[j] ; t < last1 ; ++t ) rowOrColSum += D->entry[pointList[t]][rowOrCol-nRows]; break; } node[cnt].rowOrCol = rowOrCol; node[cnt].link = header[rowOrColSum]; if ( header[rowOrColSum] == 0 ) nonZeroPosition[++nonZeroCount] = rowOrColSum; header[rowOrColSum] = cnt; } numberOfSubcells = nonZeroCount; } skipFlag = FALSE; /* If cell i does not split, return at once. */ if ( header[m] == 0 || numberOfSubcells == 1 ) { split.oldCellSize = cellSize[i]; split.newCellSize = 0; return split; } /* Now split cell i. */ last = startCell[i] + cellSize[i]; for ( k = last-1 , p = header[m] ; p != 0 ; --k , p = node[p].link ) { t = node[p].rowOrCol; r = invPointList[t]; pointList[r] = pointList[k]; pointList[k] = t; invPointList[t] = k; invPointList[pointList[r]] = r; } ++k; ++UpsilonStack->height; for ( r = k ; r < last ; ++r ) cellNumber[pointList[r]] = UpsilonStack->height; startCell[UpsilonStack->height] = k; parent[UpsilonStack->height] = i; cellSize[UpsilonStack->height] = last - k; cellSize[i] -= (last - k); split.oldCellSize = cellSize[i]; split.newCellSize = cellSize[UpsilonStack->height]; --numberOfSubcells; return split; } /*-------------------------- isRowVsColReducible ---------------------------*/ #define familyParm familyParm_L #define CELL_TYPE(k) (pointList[startCell[k]] <= D_L->numberOfRows ? ROW : COL) static RefinementPriorityPair isRowVsColReducible( const RefinementFamily *family, const PartitionStack *const UpsilonStack) { typedef enum{ ROW, COL} CellType; Matrix_01 *D_L = family->familyParm_L[0].ptrParm; RefinementPriorityPair reducingRefn; static Unsigned processingCell = 0, opposingCell = 0; static Unsigned listSize = 0; static UnsignedS *list = NULL; static UnsignedS *freq = NULL; Unsigned i, k, p, maxPos; static Unsigned firstRowCell = 0, firstColCell = 0, lastRowCell = 0, lastColCell = 0; static UnsignedS *nextCellSameType = NULL; UnsignedS *const pointList = UpsilonStack->pointList, *const startCell = UpsilonStack->startCell; /* Allocate list, freq, and nextCellSameType the first time. */ if ( !list ) list = allocIntArrayDegree(); if ( !freq ) freq = allocIntArrayDegree(); if ( !nextCellSameType ) { nextCellSameType = allocIntArrayDegree(); nextCellSameType[0] = 0; } /* Check that the refinement mapping really is rowVsColRefine, as required. */ if ( family->refine != rowVsColRefine ) ERROR( "isRowVsColReducible", "Error: incorrect refinement mapping"); /* If the height is 1 (row/col split not yet performed), return irreducible. */ if ( UpsilonStack->height == 1 ) { reducingRefn.priority = IRREDUCIBLE; return reducingRefn; } /* When the stack height reaches 2 (1 row cell, 1 col cell), perform initializations for nextCellSameType, etc. */ if ( UpsilonStack->height == 2 ) { firstRowCell = (CELL_TYPE(1) == ROW) ? 1 : 2; firstColCell = 3 - firstRowCell; lastRowCell = firstRowCell; lastColCell = firstColCell; nextCellSameType[1] = nextCellSameType[2] = 0; } /* If we can split the same cell as before using a different intersection count, do so immediately (priority 1). */ if ( listSize > 0 ) { reducingRefn.refn.family = family; reducingRefn.refn.refnParm[0].intParm = opposingCell; reducingRefn.refn.refnParm[1].intParm = 0; reducingRefn.refn.refnParm[2].intParm = list[listSize--]; reducingRefn.priority = 1; skipFlag = TRUE; return reducingRefn; } /* Consider the next opposing cell for the cell being processed, or the next cell to be processed if there are no more opposing cells. First we update nextCellSameType (Note this must be done only here). */ for (;;) { if ( nextCellSameType[opposingCell] != 0 ) opposingCell = nextCellSameType[opposingCell]; else if ( processingCell < UpsilonStack->height ) { ++processingCell; for ( i = MAX(lastRowCell,lastColCell)+1 ; i <= UpsilonStack->height ; ++i ) switch( CELL_TYPE(i) ) { case ROW: nextCellSameType[lastRowCell] = i; lastRowCell = i; nextCellSameType[i] = 0; break; case COL: nextCellSameType[lastColCell] = i; lastColCell = i; nextCellSameType[i] = 0; break; } opposingCell = ( CELL_TYPE(processingCell) == ROW) ? firstColCell: firstRowCell; } else { reducingRefn.priority = IRREDUCIBLE; return reducingRefn; } /* Now we try to split opposingCell using processingCell, and an intersectionCount that guarantees failure. (This forces rowVsColRefine to compute the header, etc). */ reducingRefn.refn.refnParm[0].intParm = opposingCell; reducingRefn.refn.refnParm[1].intParm = processingCell; reducingRefn.refn.refnParm[2].intParm = UpsilonStack->degree + 1; rowVsColRefine( family->familyParm, reducingRefn.refn.refnParm, UpsilonStack); /* If no splitting occured of opposing cell via processing cell is possible, nonZeroCount will be 1. If this occurs, skip to the next pair (processingCell,opposingCell). */ if ( nonZeroCount == 1 ) continue; /* Now we consider all the possible splittings of opposingCell, reject that giving the largest new cell, and put the others on the list. */ for ( k = 1 ; k <= nonZeroCount ; ++k) { freq[k] = 1; p = header[nonZeroPosition[k]]; while ( node[p].link != 0 ) { ++freq[k]; p = node[p].link; } } maxPos = 1; for ( k = 2 ; k <= nonZeroCount ; ++k ) if ( freq[k] > freq[maxPos] ) maxPos = k; listSize = 0; for ( k = 1 ; k <= nonZeroCount ; ++k ) if ( k != maxPos ) list[++listSize] = nonZeroPosition[k]; /* Finally return the first entry on the list. */ reducingRefn.refn.family = family; reducingRefn.refn.refnParm[0].intParm = opposingCell; reducingRefn.refn.refnParm[1].intParm = processingCell; reducingRefn.refn.refnParm[2].intParm = list[listSize--]; reducingRefn.priority = 1; skipFlag = TRUE; return reducingRefn; } } #undef familyParm /*-------------------------- informDesignIsoPtBlk ------------------------*/ static void informDesignIsoPtBlk( Permutation *perm) { Unsigned trueDegree = perm->degree, i; Permutation *shiftPerm; if ( DD_L->numberOfRows + informCols * DD_L->numberOfCols > options.writeConjPerm ) { printf( " "); return; } perm->degree = DD_L->numberOfRows; printf( " points: "); writeCyclePerm( perm, 12, 12, 72); perm->degree = trueDegree; if ( informCols ) { shiftPerm = newUndefinedPerm( perm->degree); shiftPerm->degree = DD_L->numberOfCols; for ( i = 1 ; i <= DD_L->numberOfCols ; ++i ) shiftPerm->image[i] = perm->image[i+DD_L->numberOfRows] - DD_L->numberOfRows; printf( "\n\n blocks: "); writeCyclePerm( shiftPerm, 12, 12, 72); shiftPerm->degree = trueDegree; deletePermutation( shiftPerm); } } guava-3.6/src/leon/src/readpts.h0000644017361200001450000000035611026723452016476 0ustar tabbottcrontab#ifndef READPTS #define READPTS extern PointSet *readPointSet( char *libFileName, char *libName, Unsigned degree) ; extern void writePointSet( char *libFileName, char *libName, char *comment, PointSet *P) ; #endif guava-3.6/src/leon/src/desiso.sh0000755017361200001450000000003711026723452016504 0ustar tabbottcrontab#!/bin/sh desauto -iso $* guava-3.6/src/leon/src/partn.c0000644017361200001450000001366211026723452016157 0ustar tabbottcrontab/* File partn.h. Contains miscellaneous short functions for computing with partitions associated with permutation groups: constructOrbitPartition: This function constructs the partition of the set of points corresponding to the orbits of the stabilizer of an initial segment of the base in a permutation group. popToHeight: This function pops partitions from a partition stack until the stack height reaches a designated value. cellNumberAtDepth For a given point alpha, his functions returns the number of the cell of the partition at a given depth that contains alpha. (Note that, for the top partition, it is not necessary to invoke this function. */ #include "group.h" #include "storage.h" #include "permgrp.h" CHECK( partn) /*-------------------------- popToHeight -----------------------------------*/ /* This function pops partitions from a partition stack until the height reaches a specified value. */ void popToHeight( PartitionStack *piStack, /* The partition stack to pop. */ Unsigned newHeight) /* The new height for the stack. */ { Unsigned ht, parent, i, lastPlus1; while ( (ht = piStack->height) > newHeight ) { --piStack->height; parent = piStack->parent[ht]; for ( i = piStack->startCell[ht] , lastPlus1 = i + piStack->cellSize[ht] ; i < lastPlus1 ; ++i ) piStack->cellNumber[piStack->pointList[i]] = parent; piStack->cellSize[parent] += piStack->cellSize[ht]; } } /*-------------------------- xPopToLevel -----------------------------------*/ /* This function pops cell partitions from a cell partition stack until the application level reaches a specified value. */ void xPopToLevel( CellPartitionStack *xPiStack, /* The cell partition stack to pop. */ UnsignedS *applyAfterLevel, Unsigned newHeight) /* The new height for the stack. */ { Unsigned ht, parentGroup, i, lastPlus1; while ( applyAfterLevel[ht = xPiStack->height] > newHeight ) { --xPiStack->height; parentGroup = xPiStack->parentGroup[ht]; for ( i = xPiStack->startCellGroup[ht] , lastPlus1 = i + xPiStack->cellGroupSize[ht] ; i < lastPlus1 ; ++i ) xPiStack->cellGroupNumber[xPiStack->cellList[i]] = parentGroup; xPiStack->cellGroupSize[parentGroup] += xPiStack->cellGroupSize[ht]; xPiStack->totalGroupSize[parentGroup] += xPiStack->totalGroupSize[ht]; } } /*-------------------------- constructOrbitPartition ----------------------*/ /* This function fills in two arrays (which must be allocated prior to the function call: orbitNumberOf and sizeOfOrbit. The array orbitNumberOf is set such that orbitNumberOf[pt] = i exactly when pt lies in the i'th orbit of the stabilizer of a given initial segment of the base in a given permutation group, and the array sizeOfOrbit is set so that sizeOfOrbit[j] is the length of the j'th orbit. Note orbit i is taken to preceed orbit j when the first point of orbit i is less than the first point of orbit j. A base for the group must be known, and the field essential of each generator must be filled in. (There is no harm beyond loss of efficienct in marking all generators essential.) */ void *constructOrbitPartition( PermGroup *G, /* The permutation group. */ Unsigned level, /* The orbits of G^(level) will be found. */ UnsignedS *orbitNumberOf, /* Set so that orbitNumberOf[pt] is the number of the orbit containing pt. */ UnsignedS *sizeOfOrbit) /* Set so that sizeOfOrbit[i] is the size of the i'th orbit. */ { Unsigned orbitCount = 0, found = 0, processed = 0, oldFound = 0, orbitRep, pt, img; UnsignedS *queue = allocIntArrayDegree(); Permutation *genHeader, *gen; for ( pt = 1 ; pt <= G->degree ; ++pt ) orbitNumberOf[pt] = 0; genHeader = linkEssentialGens( G, level); for ( orbitRep = 1 ; found <= G->degree ; ++orbitRep ) if ( orbitNumberOf[orbitRep] == 0 ) { ++orbitCount; queue[++found] = orbitRep; while ( processed <= found ) { pt = queue[++processed]; for ( gen = genHeader ; gen ; gen = gen->next ) if ( orbitNumberOf[ img = gen->image[pt] ] == 0 ) { queue[++found] = img; orbitNumberOf[img] = orbitCount; } } sizeOfOrbit[orbitCount] = found - oldFound; oldFound = found; } freeIntArrayDegree( queue); return orbitNumberOf; } /*-------------------------- cellNumberAtDepth ----------------------------*/ /* Given a point alpha, a partition stack UpsilonStack, and a depth (depth), this function returns an integer i such that alpha lies in the i'th cell of the partition at depth depth in UpsilonStack. It is assumed that depth does not exceed the height of UpsilonStack. */ Unsigned cellNumberAtDepth( const PartitionStack *const UpsilonStack, const Unsigned depth, const Unsigned alpha) { Unsigned m; for ( m = UpsilonStack->cellNumber[alpha] ; m > depth ; m = UpsilonStack->parent[m] ) ; return m; } /*-------------------------- numberOfCells --------------------------------*/ /* This function returns the number of cells is a partition. It works by scanning cellNumber (inefficient, but doesn't require other fields to be filled in). */ Unsigned numberOfCells( const Partition *const Pi) { UnsignedS i, maxCellNumber = 1; for ( i = 1 ; i <= Pi->degree ; ++i ) if ( Pi->cellNumber[i] > maxCellNumber ) maxCellNumber = Pi->cellNumber[i]; return maxCellNumber; } guava-3.6/src/leon/src/generate.h0000644017361200001450000000012611026723452016621 0ustar tabbottcrontab#ifndef GENERATE #define GENERATE extern int main( int argc, char *argv[]) ; #endif guava-3.6/src/leon/src/addsgen.h0000644017361200001450000000063711026723452016443 0ustar tabbottcrontab#ifndef ADDSGEN #define ADDSGEN extern void addStrongGenerator( PermGroup *G, /* Group to which strong gen is adjoined. */ Permutation *newGen, /* The new strong generator. It must move a base point (not checked). */ BOOLEAN essentialAtOne) /* Should the new generator be marked as essential at level 1. */ ; #endif guava-3.6/src/leon/src/matrix.c0000644017361200001450000000615611026723452016337 0ustar tabbottcrontab/* File matrix.c. Contains miscellaneous functions for computations with (0,1) matrices. */ #include #include #include "group.h" #include "errmesg.h" #include "new.h" #include "storage.h" CHECK( matrix) /*-------------------------- isMatrix01Isomorphism ------------------------*/ /* The function isMatrix01Isomorphism( M1, M2, s) returns TRUE if permutation s is an isomorphism of the (0,1) matrix M1 to the (0,1) matrix M2 and returns returns true otherwise. */ BOOLEAN isMatrix01Isomorphism( const Matrix_01 *const M1, const Matrix_01 *const M2, const Permutation *const s, const Unsigned monomialFlag) /* If TRUE, check that iso */ /* is monomial. */ { Unsigned i, j, temp, mu, lambda, nRows = M1->numberOfRows; UnsignedS *image = s->image; Unsigned collapsedDegree; if ( M1->numberOfRows != M2->numberOfRows || M1->numberOfCols != M2->numberOfCols || M1->numberOfRows+M1->numberOfCols != s->degree ) ERROR( "isMatrix01Isomorphism", "Sizes or degrees not compatible.") /* If requested, check that s satisfies the monomial property. */ if ( monomialFlag ) { collapsedDegree = (M1->numberOfRows+M1->numberOfCols) / (M1->setSize-1); for ( i = 1 ; i <= collapsedDegree ; ++i ) { /* Find mu,j such that s(1*i) = mu*j. */ temp = s->image[(M1->setSize-1)*(i-1)+1]; j = (temp-1) / (M1->setSize-1) + 1; mu = (temp-1) % (M1->setSize-1) + 1; for ( lambda = 2 ; lambda < M1->setSize ; ++lambda ) if ( s->image[(M1->setSize-1)*(i-1)+lambda] != (M1->setSize-1)*(j-1) + M1->field->prod[lambda][mu] ) return FALSE; } } /* Now check that each M1^s = M2. */ for ( i = 1 ; i <= M1->numberOfRows ; ++i ) for ( j = 1 ; j <= M1->numberOfCols ; ++j ) if ( M1->entry[i][j] != M2->entry[image[i]][image[j+nRows]-nRows] ) return FALSE; return TRUE; } /*-------------------------- augmentedMatrix ------------------------------*/ Matrix_01 *augmentedMatrix( const Matrix_01 *const M) { const Unsigned setSize = M->setSize; const Unsigned nRows = M->numberOfRows; const Unsigned nCols = M->numberOfCols; FieldElement **prod = M->field->prod; FieldElement *inv = M->field->inv; Unsigned i, j; char lambda, mu; Matrix_01 *MM; MM = newZeroMatrix( M->setSize, (setSize-1)*nRows, (setSize-1)*nCols); MM->field = M->field; strcpy( MM->name, M->name); for ( i = 1 ; i <= nRows ; ++i ) for ( j = 1 ; j <= nCols ; ++j ) for ( lambda = 1 ; lambda < setSize ; ++lambda ) for ( mu = 1 ; mu < setSize ; ++mu ) /* Test: change matrix elts to inverses. MM->entry[(setSize-1)*(i-1)+lambda][(setSize-1)*(j-1)+mu] = prod[prod[lambda][mu]][M->entry[i][j]]; */ MM->entry[(setSize-1)*(i-1)+lambda][(setSize-1)*(j-1)+mu] = prod[inv[prod[lambda][mu]]][M->entry[i][j]]; return MM; } guava-3.6/src/leon/src/rprique.c0000644017361200001450000001440311026723452016514 0ustar tabbottcrontab/* File rprique.c Contains functions to manipulate an R-priority queue. An R-priority queue is a priority queue that, after initialization, permits only removal operations. The functions provided are: initFromPartnStack: Initialize an R-priority queue to contain the points in a specified cell of the top partition on a specified partition stack. removeMin: Removes the minimum point from an R-priority queue. Returns the point removed. makeEmpty: Purges all points from an R-priority queue. Note that the header file group.h defines the type RPriorityQueue and provides a macro RPQ_SIZE returning the size of an R-priority queue and a macro RPQ_CLEAR making an R-priority queue empty. Internally, the points of the R-priority queue are sorted in descending order. */ #include #include "group.h" #include "storage.h" CHECK( rpriqu) #define qSortCutOff 10 #define RPQ_PUSH(a,b) \ {qSortStack[qSortTop][0] = a; qSortStack[qSortTop++][1] = b;} #define RPQ_POP(a,b) \ {a = qSortStack[--qSortTop][0]; b = qSortStack[qSortTop][1];} /*-------------------------- initFromPartnStack ---------------------------*/ /* The function initFromPartnStack initializes an existing R-priority queue to the points in a given cell of the top partition on a given partition stack. */ void initFromPartnStack( RPriorityQueue *rpq, /* R-priority queue to initialize. */ PartitionStack *PiStack, /* The partition stack. */ Unsigned cellNumber, /* The R-priority queue is initialized to cell cellNumber of top partition on bfPiStack */ const RBase *const AAA) /* Only omega and invOmega are needed. */ { Unsigned i, j, p, a, b, k, m, t, left, right, mid, splitKey, bound, tRank, splitKeyRank, final; UnsignedS qSortStack[20][2]; Unsigned qSortTop = 0; UnsignedS *const omega = AAA->omega, *const invOmega = AAA->invOmega; char *temp; /* Check that r-priority queue has required size (for debugging). */ /* assert( PiStack->cellSize[cellNumber] == rpq->maxSize); */ /* Copy the appropriate cell of the partition stack to the R-priority queue. */ i = 0; for ( j = PiStack->startCell[cellNumber] , bound = j + PiStack->cellSize[cellNumber] ; j < bound ; ++j ) rpq->pointList[++i] = PiStack->pointList[j]; rpq->size = i; /* Sort the R-priority queue in descending order. The following strategy is used: If the size is <= 10, straight insertion sort is used. Otherwise, if the size is >= degree/10, an array of flags is used. Otherwise, quicksort is used, with sublists of size <= 10 being handled by straight insertion sort. */ /* If the size is <= 10, sort directly by straight insertion sort and return. */ if ( rpq->size <= 10 ) { rpq->pointList[0] = 0; invOmega[0] = rpq->degree+1; for ( m = 2 ; m <= rpq->size ; ++m) { t = rpq->pointList[m]; tRank = invOmega[t]; k = m - 1; while ( invOmega[rpq->pointList[k]] < tRank ) { rpq->pointList[k+1] = rpq->pointList[k]; --k; } rpq->pointList[k+1] = t; } return; } /* Otherwise, if the size is at least 1/10 the degree, we sort using an index into a Boolean array. */ if ( rpq->size >= rpq->degree / 10 ) { temp = allocBooleanArrayDegree(); for ( m = 1 ; m <= rpq->degree ; ++m ) temp[m] = FALSE; for ( m = 1 ; m <= rpq->size ; ++m ) temp[invOmega[rpq->pointList[m]]] = TRUE; p = 1; for ( m = rpq->degree ; m >= 1 ; --m ) if ( temp[m] ) rpq->pointList[p++] = omega[m]; freeBooleanArrayDegree( temp); return; } /* In the remaining case, we partially sort using quicksort. Sublists of size <= qSortCutOff are left unsorted. A final pass with straight insertion sort completes the sort. */ rpq->pointList[0] = 0; invOmega[0] = rpq->degree+1; if ( rpq->size > qSortCutOff ) { rpq->pointList[rpq->size+1] = rpq->degree + 1; invOmega[rpq->degree+1] = 0; RPQ_PUSH( 1, rpq->size); } while ( qSortTop >= 1 ) { RPQ_POP( a, b); while ( b - a >= qSortCutOff ) { left = a; right = b + 1; mid = (a + b) / 2; splitKey = rpq->pointList[mid]; splitKeyRank = invOmega[splitKey]; EXCHANGE( rpq->pointList[left], rpq->pointList[mid], t) do { while ( invOmega[rpq->pointList[++left]] > splitKeyRank ) ; while ( invOmega[rpq->pointList[--right]] < splitKeyRank ) ; if ( left < right ) EXCHANGE( rpq->pointList[left], rpq->pointList[right], t) } while ( left < right ); final = right; EXCHANGE( rpq->pointList[a], rpq->pointList[final], t) if ( final - a >= b - final ) if ( b - final >= qSortCutOff ) { RPQ_PUSH( a, final-1); a = final + 1; } else b = final - 1; else if ( final - a >= qSortCutOff ) { RPQ_PUSH( final+1, b); b = final - 1; } else a = final + 1; } } /* Now finish with straight insertion sort. */ for ( m = 2 ; m <= rpq->size ; ++m) { t = rpq->pointList[m]; tRank = invOmega[t]; k = m - 1; while ( invOmega[rpq->pointList[k]] < tRank ) { rpq->pointList[k+1] = rpq->pointList[k]; --k; } rpq->pointList[k+1] = t; } } /*-------------------------- removeMin ------------------------------------*/ /* The function removeMin removes the minimum point from a given R-priority queue. The function value returned is the point removed. */ Unsigned removeMin( RPriorityQueue *rpq) /* R-priority queue for remove operation. */ { return rpq->pointList[ rpq->size-- ]; } /*-------------------------- makeEmpty-------------------------------------*/ /* This function removes all points from an R-priority queue. */ void makeEmpty( RPriorityQueue *rpq) /* The priority queue to make empty. */ { rpq->size = 0; } guava-3.6/src/leon/src/compgrp.c0000644017361200001450000004137411026723452016503 0ustar tabbottcrontab/* File compgrp.c. Contains main program for command compgrp, which can be used to compare two groups. The command format is compgrp where and are the permutation groups to be compared. The command prints one of the following messages: i) and are equal. ii) is properly contained in . iii) is properly contained in . iv) Neither of or is contained in the other. The return value is 0, 1, 2, or 3 depending on whether (i), (ii), (iii), or (iv) above hold, respectively. If an error occurs, the return code is 4. The only options are -c and -n (and the special options -l and -v, which have their standard meaning). If -c is specified, the program checks whether the two groups centralize each other. If -n is specified, it checks whether either group normalizes the other. */ #include #include #include #include #include #define MAIN #include "group.h" #include "groupio.h" #include "errmesg.h" #include "permgrp.h" #include "permut.h" #include "readgrp.h" #include "readpar.h" #include "readper.h" #include "readpts.h" #include "util.h" /* Nonstandard error return code. */ #undef ERROR_RETURN_CODE #define ERROR_RETURN_CODE 4 static int comparePerm( const Permutation *const perm1, const Permutation *const perm2); static int comparePointSet( const PointSet *const set1, const PointSet *const set2); static int comparePartition( const Partition *const partn1, const Partition *const partn2); static void verifyOptions(void); GroupOptions options; int main( int argc, char *argv[]) { char group1FileName[MAX_FILE_NAME_LENGTH] = "", group2FileName[MAX_FILE_NAME_LENGTH] = "", group1LibraryName[MAX_NAME_LENGTH] = "", group2LibraryName[MAX_NAME_LENGTH] = "", prefix[MAX_FILE_NAME_LENGTH] = "", suffix[MAX_NAME_LENGTH] = ""; PermGroup *group1, *group2 = NULL; Permutation *perm1, *perm2 = NULL; Partition *partn1, *partn2 = NULL; PointSet *set1, *set2 = NULL; Unsigned optionCountPlus1, i, j; Unsigned normalizeFlag = FALSE, centralizeFlag = FALSE, skipNormalize = FALSE, returnCode, degree; BOOLEAN comparePermFlag = FALSE, comparePointSetFlag = FALSE, comparePartitionFlag = FALSE; /* If there are no options, provide usage information and exit. */ if ( argc == 1 ) { printf( "\nUsage: compgrp [-n] [-c] permGroup1 [permGroup2]\n"); return 0; } if ( argc == 2 && strncmp( argv[1], "-perm:", 6) == 0 ) { printf( "\nUsage: compper degree permutation1 [permutation2]\n"); return 0; } if ( argc == 2 && strncmp( argv[1], "-set:", 5) == 0 ) { printf( "\nUsage: compset degree set1 [set2]\n"); return 0; } if ( argc == 2 && strncmp( argv[1], "-partition:", 11 ) == 0 ) { printf( "\nUsage: comppar degree partition1 [partition2]\n"); return 0; } /* Count the number of options. */ for ( optionCountPlus1 = 1 ; optionCountPlus1 <= argc-1 && argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 ) ; /* Translate options to lower case. */ for ( i = 1 ; i < optionCountPlus1 ; ++i ) { for ( j = 1 ; argv[i][j] != ':' && argv[i][j] != '\0' ; ++j ) #ifdef EBCDIC argv[i][j] = ( argv[i][j] >= 'A' && argv[i][j] <= 'I' || argv[i][j] >= 'J' && argv[i][j] <= 'R' || argv[i][j] >= 'S' && argv[i][j] <= 'Z' ) ? (argv[i][j] + 'a' - 'A') : argv[i][j]; #else argv[i][j] = (argv[i][j] >= 'A' && argv[i][j] <= 'Z') ? (argv[i][j] + 'a' - 'A') : argv[i][j]; #endif } /* Check for limits option. If present in position 1, give limits and return. */ if ( strcmp( argv[1], "-l") == 0 || strcmp( argv[1], "-L") == 0 ) { showLimits(); return 0; } /* Check for verify option. If present in position i (i as above) perform verify (Note verifyOptions terminates program). */ if ( strcmp( argv[1], "-v") == 0 || strcmp( argv[1], "-V") == 0 ) verifyOptions(); /* Check for at most 2 parameters following options. */ if ( argc - optionCountPlus1 > 2 ) ERROR( "Compgrp", "Exactly 2 non-option parameters are required.") /* Process options. */ options.maxBaseSize = DEFAULT_MAX_BASE_SIZE; options.inform = TRUE; for ( i = 1 ; i < optionCountPlus1 ; ++i ) if ( strcmp(argv[i],"-c") == 0 ) centralizeFlag = TRUE; else if ( strcmp(argv[i],"-n") == 0 ) normalizeFlag = TRUE; else if ( strncmp( argv[i], "-mb:", 4) == 0 ) { errno = 0; options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (cent)", "Invalid syntax for -mb option") } else if ( strncmp( argv[i], "-mw:", 4) == 0 ) { errno = 0; options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (cent)", "Invalid syntax for -mw option") } else if ( strncmp( argv[i], "-p:", 3) == 0 ) { strcpy( prefix, argv[i]+3); } else if ( strcmp( argv[i], "-q") == 0 ) options.inform = FALSE; else if ( strncmp( argv[i], "-t:", 3) == 0 ) { strcpy( suffix, argv[i]+3); } else if ( strncmp( argv[i], "-perm:", 6) == 0 ) { errno = 0; degree = (Unsigned) strtol(argv[i]+6,NULL,0); comparePermFlag = TRUE; if ( errno ) ERROR( "main (compgrp)", "Invalid syntax for -perm option") } else if ( strncmp( argv[i], "-set:", 5) == 0 ) { errno = 0; degree = (Unsigned) strtol(argv[i]+5,NULL,0); comparePointSetFlag = TRUE; if ( errno ) ERROR( "main (compgrp)", "Invalid syntax for -set option") } else if ( strncmp( argv[i], "-partition:", 11) == 0 ) { errno = 0; degree = (Unsigned) strtol(argv[i]+11,NULL,0); comparePartitionFlag = TRUE; if ( errno ) ERROR( "main (compgrp)", "Invalid syntax for -partition option") } else ERROR1s( "main (compgrp command)", "Invalid option ", argv[i], ".") /* Compute maximum degree and word length. */ options.maxWordLength = 200 + 5 * options.maxBaseSize; options.maxDegree = MAX_INT - 2 - options.maxBaseSize; /* Compute file and library names. */ parseLibraryName( argv[optionCountPlus1], prefix, suffix, group1FileName, group1LibraryName); parseLibraryName( argv[optionCountPlus1+1], prefix, suffix, group2FileName, group2LibraryName); /* Read in groups. For types other than permutation groups, call special function to perform comparison. */ if ( comparePermFlag ) { perm1 = readPermutation( group1FileName, group1LibraryName, degree, FALSE); if ( argc > optionCountPlus1+1 ) perm2 = readPermutation( group2FileName, group2LibraryName, degree, FALSE); return comparePerm( perm1, perm2); } else if ( comparePointSetFlag ) { set1 = readPointSet( group1FileName, group1LibraryName, degree); if ( argc > optionCountPlus1+1 ) set2 = readPointSet( group2FileName, group2LibraryName, degree); return comparePointSet( set1, set2); } else if ( comparePartitionFlag) { partn1 = readPartition( group1FileName, group1LibraryName, degree); if ( argc > optionCountPlus1+1 ) partn2 = readPartition( group2FileName, group2LibraryName, degree); return comparePartition( partn1, partn2); } else { group1 = readPermGroup( group1FileName, group1LibraryName, 0, "Generate"); if ( argc > optionCountPlus1+1 ) group2 = readPermGroup( group2FileName, group2LibraryName, group1->degree, "Generate"); } /* If second group is omitted, check if first group is the identity. */ if ( !group2 ) if ( group1->order->noOfFactors == 0 ) { if ( options.inform ) printf( "\n %s is the identity.\n", group1->name); return 0; } else { if ( options.inform ) printf( "\n %s is not the identity.\n", group1->name); return 1; } /* Check containment. */ if ( isSubgroupOf(group1,group2) ) if ( isSubgroupOf(group2,group1) ) { if ( options.inform ) printf( "\n %s and %s are equal.\n", group1->name, group2->name); if ( centralizeFlag ) if ( isCentralizedBy(group1,group2) ) { printf( " %s and %s centralize each other.\n", group1->name, group2->name); skipNormalize = TRUE; } else printf( " %s and %s do not centralize each other.\n", group1->name, group2->name); returnCode = 0; } else { if ( options.inform ) printf( "\n %s is properly contained in %s.\n", group1->name, group2->name); if ( centralizeFlag ) if ( isCentralizedBy(group1,group2) ) { printf( " %s and %s centralize each other.\n", group1->name, group2->name); skipNormalize = TRUE; } else printf( " %s and %s do not centralize each other.\n", group1->name, group2->name); if ( normalizeFlag && !skipNormalize ) if ( isNormalizedBy(group1,group2) ) printf( " %s is normal in %s.\n", group1->name, group2->name); else printf( " %s is not normal in %s.\n", group1->name, group2->name); returnCode = 1; } else if ( isSubgroupOf(group2,group1) ) { if ( options.inform ) printf( "\n %s is properly contained in %s.\n", group2->name, group1->name); if ( centralizeFlag ) if ( isCentralizedBy(group1,group2) ) { printf( " %s and %s centralize each other.\n", group1->name, group2->name); skipNormalize = TRUE; } else printf( " %s and %s do not centralize each other.\n", group1->name, group2->name); if ( normalizeFlag && !skipNormalize ) if ( isNormalizedBy( group2, group1) ) printf( " %s is normal in %s.\n", group2->name, group1->name); else printf( " %s is not normal in %s.\n", group2->name, group1->name); returnCode = 2; } else { if ( options.inform ) printf( "\n Neither of %s or %s is contained in the other.\n", group1->name, group2->name); if ( centralizeFlag ) if ( isCentralizedBy(group1,group2) ) { printf( " %s and %s centralize each other.\n", group1->name, group2->name); skipNormalize = TRUE; } else printf( " %s and %s do not centralize each other.\n", group1->name, group2->name); if ( normalizeFlag && !skipNormalize ) { if ( isNormalizedBy( group1, group2) ) printf( " %s is normalized by %s.\n", group1->name, group2->name); else printf( " %s is not normalized by %s.\n", group1->name, group2->name); if ( isNormalizedBy( group2, group1) ) printf( " %s is normalized by %s.\n", group2->name, group1->name); else printf( " %s is not normalized by %s.\n", group2->name, group1->name); } returnCode = 3; } return returnCode; } /*-------------------------- comparePerm ---------------------------------*/ static int comparePerm( const Permutation *const perm1, const Permutation *const perm2) { Unsigned pt; if ( perm2 ) { for ( pt = 1 ; pt <= perm1->degree ; ++pt ) if ( perm1->image[pt] != perm2->image[pt] ) { if ( options.inform ) printf( "\n %s and %s are not equal.\n", perm1->name, perm2->name); return 1; } if ( options.inform ) printf( "\n %s and %s are equal.\n", perm1->name, perm2->name); return 0; } else { for ( pt = 1 ; pt <= perm1->degree ; ++pt ) if ( perm1->image[pt] != pt ) { if ( options.inform ) printf( "\n %s is not the identity.\n", perm1->name); return 1; } if ( options.inform ) printf( "\n %s is the identity.\n", perm1->name); return 0; } } /*-------------------------- comparePointSet -------------------------------*/ static int comparePointSet( const PointSet *const set1, const PointSet *const set2) { Unsigned i; BOOLEAN set1InSet2 = TRUE, set2InSet1 = TRUE; if ( set2 ) { for ( i = 1 ; i <= set1->size ; ++i ) if ( !set2->inSet[set1->pointList[i]] ) { set1InSet2 = FALSE; break; } for ( i = 1 ; i <= set2->size ; ++i ) if ( !set1->inSet[set2->pointList[i]] ) { set2InSet1 = FALSE; break; } if ( set1InSet2 && set2InSet1 ) { if ( options.inform ) printf( "\n Sets %s and %s are equal.\n", set1->name, set2->name); return 0; } else if ( set1InSet2 ) { if ( options.inform ) printf( "\n Set %s is properly contained in set %s.\n", set1->name, set2->name); return 1; } else if ( set2InSet1 ) { if ( options.inform ) printf( "\n Set %s is properly contained in set %s.\n", set2->name, set1->name); return 2; } else { if ( options.inform ) printf( "\n Neither set %s or set %s is contained in the other.\n", set1->name, set2->name); return 3; } } else { if ( set1->size == 0 ) { if ( options.inform ) printf( "\n %s is empty.\n", set1->name); return 0; } else { if ( options.inform ) printf( "\n %s is not empty.\n", set1->name); return 1; } } } /*-------------------------- comparePartition ----------------------------*/ static int comparePartition( const Partition *const partn1, const Partition *const partn2) { ERROR( "comparePartition", "Comparison of partitions not yet implemented") } /*-------------------------- verifyOptions -------------------------------*/ static void verifyOptions(void) { CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH, MAX_PRIME_FACTORS, MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS, MAX_EXTRA, XLARGE, SGND, NFLT}; extern void xaddsge( CompileOptions *cOpts); extern void xbitman( CompileOptions *cOpts); extern void xcopy ( CompileOptions *cOpts); extern void xcstbor( CompileOptions *cOpts); extern void xerrmes( CompileOptions *cOpts); extern void xessent( CompileOptions *cOpts); extern void xfactor( CompileOptions *cOpts); extern void xnew ( CompileOptions *cOpts); extern void xoldcop( CompileOptions *cOpts); extern void xpermgr( CompileOptions *cOpts); extern void xpermut( CompileOptions *cOpts); extern void xprimes( CompileOptions *cOpts); extern void xrandgr( CompileOptions *cOpts); extern void xrandsc( CompileOptions *cOpts); extern void xreadgr( CompileOptions *cOpts); extern void xreadpe( CompileOptions *cOpts); extern void xstorag( CompileOptions *cOpts); extern void xtoken ( CompileOptions *cOpts); extern void xutil ( CompileOptions *cOpts); xaddsge( &mainOpts); xbitman( &mainOpts); xcopy ( &mainOpts); xcstbor( &mainOpts); xerrmes( &mainOpts); xessent( &mainOpts); xfactor( &mainOpts); xnew ( &mainOpts); xoldcop( &mainOpts); xpermgr( &mainOpts); xpermut( &mainOpts); xprimes( &mainOpts); xrandgr( &mainOpts); xrandsc( &mainOpts); xreadgr( &mainOpts); xreadpe( &mainOpts); xstorag( &mainOpts); xtoken ( &mainOpts); xutil ( &mainOpts); } guava-3.6/src/leon/src/orbrefn.c0000644017361200001450000007203611026723452016470 0ustar tabbottcrontab/* File orbrefn.c. Contains functions to apply refinements OOO_G (orbit refinements) and to check OOO_G-reducibility, as follows: orbRefine: A refinement family based on orbit structure (OOO). isOrbReducible: A function to check OOO-reducibility. */ #include #include #include #include "group.h" #include "errmesg.h" #include "partn.h" #include "storage.h" CHECK( orbref) #define SIZE_OF_ORBIT( j) ( startOfOrbitNo[j+1] - startOfOrbitNo[j] ) #define HASH( i, j) ( (7L * i + j) % hashTableSize ) typedef struct RefnListEntry { Unsigned i; /* Cell number in UpsilonTop to split. */ Unsigned j; /* Orbit number of G^(level) in split. */ Unsigned newCellSize; /* Size of new cell created by split. */ struct RefnListEntry *hashLink; /* List of refns with same hash value. */ struct RefnListEntry *next; /* Next refn on list of all refinements. */ struct RefnListEntry *last; /* Last refn on list of all refinements. */ } RefnListEntry; static struct { Unsigned groupCount; PermGroup *group[10]; RefnListEntry **hashTable[10]; RefnListEntry *refnList[10]; Unsigned oldLevel[10]; RefnListEntry *freeListHeader[10]; RefnListEntry *inUseListHeader[10]; } refnData = {0}; static Unsigned trueGroupCount, hashTableSize; static RefnListEntry **hashTable, *freeListHeader, *inUseListHeader; /*-------------------------- initializeOrbRefine --------------------------*/ void initializeOrbRefine( PermGroup *G) { /* Compute hash table size. */ if ( refnData.groupCount == 0 ) { hashTableSize = G->degree; while ( hashTableSize > 11 && (hashTableSize % 2 == 0 || hashTableSize % 3 == 0 || hashTableSize % 5 == 0 || hashTableSize % 7 == 0) ) --hashTableSize; } if ( refnData.groupCount < 9) { refnData.group[refnData.groupCount] = G; refnData.hashTable[refnData.groupCount] = allocPtrArrayDegree(); refnData.refnList[refnData.groupCount] = malloc( G->degree * (sizeof(RefnListEntry)+2) ); if ( !refnData.refnList[refnData.groupCount] ) ERROR( "initializeOrbRefine", "Memory allocation error.") refnData.oldLevel[refnData.groupCount] = UNKNOWN; ++refnData.groupCount; trueGroupCount = refnData.groupCount; } else ERROR( "initializeOrbRefine", "Orbit refinement limited to ten groups.") } /*-------------------------- orbRefine ------------------------------------*/ /* The function implements the refinement family orbRefine (denoted OOO_G in the reference). This family OOO_G consists of the elementary refinements OOO_{G,Psi,i,j}, where G is a permutation group, Psi is an ordered partition (which we always assume belongs to PsiStack), and i and j will be integers. Application of OOO_{G,Psi,i,j} to the top partition UpsilonTop of UpsilonStack splits off from UpsilonTop_i those points in (Psi_j)^t, where t is in G and t maps fix(PsiTop) to fix(UpsilonTop). The family parameters are : The last two parms below are not really familyParm[0].ptrParm: G family parms; they must be filled in familyParm[1].intParm: level in before each call. Note G^(level) = familyParm[3].ptrParm: tWord G_fix(Psi_h). The refinement parameters are: refnParm[0].intParm: i refnParm[1].intParm: j Note that, instead of passing Psi explicity, we pass G as a family parm and level and t as (not true) family parms. */ SplitSize orbRefine( const RefinementParm familyParm[], const RefinementParm refnParm[], PartitionStack *const UpsilonStack) { Unsigned level = familyParm[1].intParm; THatWordType *tWord = familyParm[2].ptrParm; PermGroup *G = (PermGroup *) familyParm[0].ptrParm; Unsigned i = refnParm[0].intParm, j = refnParm[1].intParm; Unsigned left, right, currentPos, m, tWordLen, savePointLeft, savePointRight; register Unsigned pt; register UnsignedS *tw0, *tw1, *tw2; UnsignedS *tw3, *tw4, *tw5, *tw6, *tw7; UnsignedS **p; SplitSize split; Unsigned *const pointList = UpsilonStack->pointList, *const invPointList = UpsilonStack->invPointList, *const cellNumber = UpsilonStack->cellNumber, *const parent = UpsilonStack->parent, *const startCell = UpsilonStack->startCell, *const cellSize = UpsilonStack->cellSize; Unsigned startNextCell = startCell[i] + cellSize[i]; UnsignedS *completeOrbit = G->completeOrbit[level], *orbNumberOfPt = G->orbNumberOfPt[level], *startOfOrbitNo = G->startOfOrbitNo[level]; /* Compute the length of the word. */ for ( tWordLen = 0 ; tWord->invWord[tWordLen] != NULL ; ++tWordLen ) ; /* Here we start to split cell i of UpsilonTop. */ if ( cellSize[i] <= SIZE_OF_ORBIT(j) ) { /* If cell i of UpsilonTop is smaller than cell j of G_{fix(Psi_h)}, we traverse the points of cell i of UpsilonTop. */ tw0 = tWord->invWord[0]; tw1 = tWord->invWord[1]; tw2 = tWord->invWord[2]; tw3 = tWord->invWord[3]; tw4 = tWord->invWord[4]; tw5 = tWord->invWord[5]; tw6 = tWord->invWord[6]; tw7 = tWord->invWord[7]; left = startCell[i]-1; right = startNextCell; savePointLeft = pointList[left]; savePointRight = pointList[right]; pointList[left] = 0; pointList[right] = G->degree + 1; orbNumberOfPt[0] = 0; orbNumberOfPt[G->degree+1] = j; switch( tWordLen ) { case 0: for( ; ; ) { do { pt = pointList[++left]; } while ( orbNumberOfPt[pt] != j ); do { pt = pointList[--right]; } while ( orbNumberOfPt[pt] == j ); if ( left < right ) { pointList[right] = pointList[left]; pointList[left] = pt; invPointList[pointList[right]] = right; invPointList[pt] = left; } else break; } ++right; break; case 1: for( ; ; ) { do { pt = tw0[pointList[++left]]; } while ( orbNumberOfPt[pt] != j ); do { pt = tw0[pointList[--right]]; } while ( orbNumberOfPt[pt] == j ); if ( left < right ) { pt = pointList[right]; pointList[right] = pointList[left]; pointList[left] = pt; invPointList[pointList[right]] = right; invPointList[pt] = left; } else break; } ++right; break; case 2: for( ; ; ) { do { pt = tw1[tw0[pointList[++left]]]; } while ( orbNumberOfPt[pt] != j ); do { pt = tw1[tw0[pointList[--right]]]; } while ( orbNumberOfPt[pt] == j ); if ( left < right ) { pt = pointList[right]; pointList[right] = pointList[left]; pointList[left] = pt; invPointList[pointList[right]] = right; invPointList[pt] = left; } else break; } ++right; break; case 3: for( ; ; ) { do { pt = tw2[tw1[tw0[pointList[++left]]]]; } while ( orbNumberOfPt[pt] != j ); do { pt = tw2[tw1[tw0[pointList[--right]]]]; } while ( orbNumberOfPt[pt] == j ); if ( left < right ) { pt = pointList[right]; pointList[right] = pointList[left]; pointList[left] = pt; invPointList[pointList[right]] = right; invPointList[pt] = left; } else break; } ++right; break; case 4: for( ; ; ) { do { pt = tw2[tw1[tw0[pointList[++left]]]]; pt = tw3[pt]; } while ( orbNumberOfPt[pt] != j ); do { pt = tw2[tw1[tw0[pointList[--right]]]]; pt = tw3[pt]; } while ( orbNumberOfPt[pt] == j ); if ( left < right ) { pt = pointList[right]; pointList[right] = pointList[left]; pointList[left] = pt; invPointList[pointList[right]] = right; invPointList[pt] = left; } else break; } ++right; break; case 5: for( ; ; ) { do { pt = tw2[tw1[tw0[pointList[++left]]]]; pt = tw4[tw3[pt]]; } while ( orbNumberOfPt[pt] != j ); do { pt = tw2[tw1[tw0[pointList[--right]]]]; pt = tw4[tw3[pt]]; } while ( orbNumberOfPt[pt] == j ); if ( left < right ) { pt = pointList[right]; pointList[right] = pointList[left]; pointList[left] = pt; invPointList[pointList[right]] = right; invPointList[pt] = left; } else break; } ++right; break; case 6: for( ; ; ) { do { pt = tw2[tw1[tw0[pointList[++left]]]]; pt = tw5[tw4[tw3[pt]]]; } while ( orbNumberOfPt[pt] != j ); do { pt = tw2[tw1[tw0[pointList[--right]]]]; pt = tw5[tw4[tw3[pt]]]; } while ( orbNumberOfPt[pt] == j ); if ( left < right ) { pt = pointList[right]; pointList[right] = pointList[left]; pointList[left] = pt; invPointList[pointList[right]] = right; invPointList[pt] = left; } else break; } ++right; break; case 7: for( ; ; ) { do { pt = tw2[tw1[tw0[pointList[++left]]]]; pt = tw6[tw5[tw4[tw3[pt]]]]; } while ( orbNumberOfPt[pt] != j ); do { pt = tw2[tw1[tw0[pointList[--right]]]]; pt = tw6[tw5[tw4[tw3[pt]]]]; } while ( orbNumberOfPt[pt] == j ); if ( left < right ) { pt = pointList[right]; pointList[right] = pointList[left]; pointList[left] = pt; invPointList[pointList[right]] = right; invPointList[pt] = left; } else break; } ++right; break; case 8: for( ; ; ) { do { pt = tw2[tw1[tw0[pointList[++left]]]]; pt = tw6[tw5[tw4[tw3[pt]]]]; pt = tw7[pt]; } while ( orbNumberOfPt[pt] != j ); do { pt = tw2[tw1[tw0[pointList[--right]]]]; pt = tw6[tw5[tw4[tw3[pt]]]]; pt = tw7[pt]; } while ( orbNumberOfPt[pt] == j ); if ( left < right ) { pt = pointList[right]; pointList[right] = pointList[left]; pointList[left] = pt; invPointList[pointList[right]] = right; invPointList[pt] = left; } else break; } ++right; break; default: for( ; ; ) { do { pt = tw2[tw1[tw0[pointList[++left]]]]; pt = tw6[tw5[tw4[tw3[pt]]]]; pt = tw7[pt]; for ( p = tWord->invWord+8 ; *p ; ++p ) pt = (*p)[pt]; } while ( orbNumberOfPt[pt] != j ); do { pt = tw2[tw1[tw0[pointList[--right]]]]; pt = tw6[tw5[tw4[tw3[pt]]]]; pt = tw7[pt]; for ( p = tWord->invWord+8 ; *p ; ++p ) pt = (*p)[pt]; } while ( orbNumberOfPt[pt] == j ); if ( left < right ) { pt = pointList[right]; pointList[right] = pointList[left]; pointList[left] = pt; invPointList[pointList[right]] = right; invPointList[pt] = left; } else break; } ++right; break; } pointList[startCell[i]-1] = savePointLeft; pointList[startNextCell] = savePointRight; } else { /* If cell j of G_{fix(Psi_h)} is smaller, we traverse the points of G_{fix(Psi_h) = G^(level)}. */ tw0 = tWord->revWord[0]; tw1 = tWord->revWord[1]; tw2 = tWord->revWord[2]; tw3 = tWord->revWord[3]; tw4 = tWord->revWord[4]; tw5 = tWord->revWord[5]; tw6 = tWord->revWord[6]; tw7 = tWord->revWord[7]; switch( tWordLen ) { case 0: for ( m = startOfOrbitNo[j] , right = startNextCell ; m < startOfOrbitNo[j+1] ; ++m ) { pt = completeOrbit[m]; if ( cellNumber[pt] == i ) { currentPos = invPointList[pt]; pointList[currentPos] = pointList[--right]; pointList[right] = pt; invPointList[pt] = right; invPointList[pointList[currentPos]] = currentPos; } } break; case 1: for ( m = startOfOrbitNo[j] , right = startNextCell ; m < startOfOrbitNo[j+1] ; ++m ) { pt = tw0[completeOrbit[m]]; if ( cellNumber[pt] == i ) { currentPos = invPointList[pt]; pointList[currentPos] = pointList[--right]; pointList[right] = pt; invPointList[pt] = right; invPointList[pointList[currentPos]] = currentPos; } } break; case 2: for ( m = startOfOrbitNo[j] , right = startNextCell ; m < startOfOrbitNo[j+1] ; ++m ) { pt = tw1[tw0[completeOrbit[m]]]; if ( cellNumber[pt] == i ) { currentPos = invPointList[pt]; pointList[currentPos] = pointList[--right]; pointList[right] = pt; invPointList[pt] = right; invPointList[pointList[currentPos]] = currentPos; } } break; case 3: for ( m = startOfOrbitNo[j] , right = startNextCell ; m < startOfOrbitNo[j+1] ; ++m ) { pt = tw2[tw1[tw0[completeOrbit[m]]]]; if ( cellNumber[pt] == i ) { currentPos = invPointList[pt]; pointList[currentPos] = pointList[--right]; pointList[right] = pt; invPointList[pt] = right; invPointList[pointList[currentPos]] = currentPos; } } break; case 4: for ( m = startOfOrbitNo[j] , right = startNextCell ; m < startOfOrbitNo[j+1] ; ++m ) { pt = tw2[tw1[tw0[completeOrbit[m]]]]; pt = tw3[pt]; if ( cellNumber[pt] == i ) { currentPos = invPointList[pt]; pointList[currentPos] = pointList[--right]; pointList[right] = pt; invPointList[pt] = right; invPointList[pointList[currentPos]] = currentPos; } } break; case 5: for ( m = startOfOrbitNo[j] , right = startNextCell ; m < startOfOrbitNo[j+1] ; ++m ) { pt = tw2[tw1[tw0[completeOrbit[m]]]]; pt = tw4[tw3[pt]]; if ( cellNumber[pt] == i ) { currentPos = invPointList[pt]; pointList[currentPos] = pointList[--right]; pointList[right] = pt; invPointList[pt] = right; invPointList[pointList[currentPos]] = currentPos; } } break; case 6: for ( m = startOfOrbitNo[j] , right = startNextCell ; m < startOfOrbitNo[j+1] ; ++m ) { pt = tw2[tw1[tw0[completeOrbit[m]]]]; pt = tw5[tw4[tw3[pt]]]; if ( cellNumber[pt] == i ) { currentPos = invPointList[pt]; pointList[currentPos] = pointList[--right]; pointList[right] = pt; invPointList[pt] = right; invPointList[pointList[currentPos]] = currentPos; } } break; case 7: for ( m = startOfOrbitNo[j] , right = startNextCell ; m < startOfOrbitNo[j+1] ; ++m ) { pt = tw2[tw1[tw0[completeOrbit[m]]]]; pt = tw6[tw5[tw4[tw3[pt]]]]; if ( cellNumber[pt] == i ) { currentPos = invPointList[pt]; pointList[currentPos] = pointList[--right]; pointList[right] = pt; invPointList[pt] = right; invPointList[pointList[currentPos]] = currentPos; } } break; case 8: for ( m = startOfOrbitNo[j] , right = startNextCell ; m < startOfOrbitNo[j+1] ; ++m ) { pt = tw2[tw1[tw0[completeOrbit[m]]]]; pt = tw6[tw5[tw4[tw3[pt]]]]; pt = tw7[pt]; if ( cellNumber[pt] == i ) { currentPos = invPointList[pt]; pointList[currentPos] = pointList[--right]; pointList[right] = pt; invPointList[pt] = right; invPointList[pointList[currentPos]] = currentPos; } } break; default: for ( m = startOfOrbitNo[j] , right = startNextCell ; m < startOfOrbitNo[j+1] ; ++m ) { pt = tw2[tw1[tw0[completeOrbit[m]]]]; pt = tw6[tw5[tw4[tw3[pt]]]]; pt = tw7[pt]; for ( p = tWord->revWord+8 ; *p ; ++p ) pt = (*p)[pt]; if ( cellNumber[pt] == i ) { currentPos = invPointList[pt]; pointList[currentPos] = pointList[--right]; pointList[right] = pt; invPointList[pt] = right; invPointList[pointList[currentPos]] = currentPos; } } break; } } if ( right == startNextCell ) { /* If the refinement failed to split UpsilonTop_i, set return value and return to caller. Note that, in this case, the changes made to UpsilonStack above are harmless. */ split.oldCellSize = cellSize[i]; split.newCellSize = 0; return split; } else { /* If the refinement did split UpsilonTop_i, we push the new refinement onto UpsilonStack before returning. */ ++UpsilonStack->height; for ( m = right ; m < startNextCell ; ++m ) cellNumber[pointList[m]] = UpsilonStack->height; startCell[UpsilonStack->height] = right; parent[UpsilonStack->height] = i; cellSize[UpsilonStack->height] = startNextCell - right; cellSize[i] -= cellSize[UpsilonStack->height]; split.oldCellSize = cellSize[i]; split.newCellSize = cellSize[UpsilonStack->height]; return split; } } /*-------------------------- deleteRefnListEntry --------------------------*/ static void deleteRefnListEntry( RefnListEntry *entryToDelete, Unsigned hashPosition, /* hashTableSize+1 indicates unknown */ RefnListEntry *prevHashListEntry) { if ( hashPosition > hashTableSize ) { hashPosition = HASH( entryToDelete->i, entryToDelete->j); if ( hashTable[hashPosition] == entryToDelete ) prevHashListEntry = NULL; else { prevHashListEntry = hashTable[hashPosition]; while ( prevHashListEntry->hashLink != entryToDelete ) prevHashListEntry = prevHashListEntry->hashLink; } } if ( prevHashListEntry ) prevHashListEntry->hashLink = entryToDelete->hashLink; else hashTable[hashPosition] = entryToDelete->hashLink; if ( entryToDelete->last ) entryToDelete->last->next = entryToDelete->next; else inUseListHeader = entryToDelete->next; if ( entryToDelete->next ) entryToDelete->next->last = entryToDelete->last; entryToDelete->next = freeListHeader; freeListHeader = entryToDelete; } /*-------------------------- isOrbReducible -------------------------------*/ RefinementPriorityPair isOrbReducible( const RefinementFamily *family, /* The refinement family mapping must be orbRefine; family parm[0] is the group. */ const PartitionStack *const UpsilonStack) { BOOLEAN cellWillSplit; Unsigned i, j, m, groupNumber, hashPosition, newCellNumber, oldCellNumber, count; unsigned long minPriority, thisPriority; UnsignedS *oldLevelAddr; UnsignedS *const pointList = UpsilonStack->pointList, *const startCell = UpsilonStack->startCell, *const cellSize = UpsilonStack->cellSize; PermGroup *G = family->familyParm_L[0].ptrParm; Unsigned level = family->familyParm_L[1].intParm; UnsignedS *orbNumberOfPt = G->orbNumberOfPt[level]; UnsignedS *const startOfOrbitNo = G->startOfOrbitNo[level]; RefinementPriorityPair reducingRefn; RefnListEntry *refnList; RefnListEntry *p, *oldP, *position, *minPosition; /* Check that the refinement mapping really is pointStabRefn, as required, and that the group is one for which initializeOrbRefine has been called. */ if ( family->refine != orbRefine ) ERROR( "isOrbReducible", "Error: incorrect refinement mapping"); for ( groupNumber = 0 ; groupNumber < refnData.groupCount && refnData.group[groupNumber] != G ; ++groupNumber ) ; if ( groupNumber >= refnData.groupCount ) ERROR( "isOrbReducible", "Routine not initialized for group.") hashTable = refnData.hashTable[groupNumber]; refnList = refnData.refnList[groupNumber]; oldLevelAddr = &refnData.oldLevel[groupNumber]; /* If this is a new level, we reconstruct the list of potential refinements from scratch. */ if ( level != *oldLevelAddr ) { /* Initialize data structures. */ *oldLevelAddr = level; for ( i = 0 ; i < hashTableSize ; ++i ) hashTable[i] = NULL; freeListHeader = &refnList[0]; inUseListHeader = NULL; for ( i = 0 ; i < G->degree ; ++i) refnList[i].next = &refnList[i+1]; refnList[G->degree].next = NULL; /* Process the i'th cell of the top partition for i = 1,2,...., finding all possible refinements. */ for ( i = 1 ; i <= UpsilonStack->height ; ++i ) { /* First check if the i'th cell will split. If not, proceed directly to the next cell. */ for ( m = startCell[i]+1 , cellWillSplit = FALSE ; m < startCell[i] + cellSize[i] && !cellWillSplit ; ++m ) if ( orbNumberOfPt[ pointList[m] ] != orbNumberOfPt[ pointList[m-1] ] ) cellWillSplit = TRUE; if ( !cellWillSplit ) continue; /* Now find all splittings of the i'th cell and insert them into the list in sorted order. */ for ( m = startCell[i] ; m < startCell[i]+cellSize[i] ; ++m ) { j = orbNumberOfPt[pointList[m]]; hashPosition = HASH( i, j); p = hashTable[hashPosition]; while ( p && (p->i != i || p->j != j) ) p = p->hashLink; if ( p ) ++p->newCellSize; else { if ( !freeListHeader ) ERROR( "isOrbReducible", "Refinement list exceeded bound (should not occur).") p = freeListHeader; freeListHeader = freeListHeader->next; p->next = inUseListHeader; if ( inUseListHeader ) inUseListHeader->last = p; p->last = NULL; inUseListHeader = p; p->hashLink = hashTable[hashPosition]; hashTable[hashPosition] = p; p->i = i; p->j = j; p->newCellSize = 1; } } } } /* If this is not a new level, we merely fix up the old list. The entries for the new cell must be created and those for its parent must be adjusted. */ else { freeListHeader = refnData.freeListHeader[groupNumber]; inUseListHeader = refnData.inUseListHeader[groupNumber]; newCellNumber = UpsilonStack->height; oldCellNumber = UpsilonStack->parent[UpsilonStack->height]; for ( m = startCell[newCellNumber] , cellWillSplit = FALSE ; m < startCell[newCellNumber] + cellSize[newCellNumber] ; ++m ) { if ( m > startCell[newCellNumber] && orbNumberOfPt[pointList[m]] != orbNumberOfPt[pointList[m-1]] ) cellWillSplit = TRUE; j = orbNumberOfPt[pointList[m]]; hashPosition = HASH( oldCellNumber, j); p = hashTable[hashPosition]; oldP = NULL; while ( p && (p->i != oldCellNumber || p->j != j) ) { oldP = p; p = p->hashLink; } if ( p ) { --p->newCellSize; if ( p->newCellSize == 0 ) deleteRefnListEntry( p, hashPosition, oldP); } } if ( cellWillSplit ) for ( m = startCell[newCellNumber] , cellWillSplit = FALSE ; m < startCell[newCellNumber] + cellSize[newCellNumber] ; ++m ) { j = orbNumberOfPt[pointList[m]]; hashPosition = HASH( newCellNumber, j); p = hashTable[hashPosition]; while ( p && (p->i != newCellNumber || p->j != j) ) p = p->hashLink; if ( p ) ++p->newCellSize; else { if ( !freeListHeader ) ERROR( "isOrbReducible", "Refinement list exceeded bound (should not occur).") p = freeListHeader; freeListHeader = freeListHeader->next; p->next = inUseListHeader; if ( inUseListHeader ) inUseListHeader->last = p; p->last = NULL; inUseListHeader = p; p->hashLink = hashTable[hashPosition]; hashTable[hashPosition] = p; p->i = newCellNumber; p->j = j; p->newCellSize = 1; } } } /* Now we return a refinement of minimal priority. While searching the list, we also check for refinements invalidated by previous splittings. */ minPosition = inUseListHeader; minPriority = ULONG_MAX; count = 1; for ( position = inUseListHeader ; position && count < 100 ; position = position->next , ++count ) { while ( position && position->newCellSize == cellSize[position->i] ) { p = position; position = position->next; deleteRefnListEntry( p, hashTableSize+1, NULL); } if ( !position ) break; if ( (thisPriority = (unsigned long) position->newCellSize + MIN( cellSize[position->i], SIZE_OF_ORBIT(position->j) )) < minPriority ) { minPriority = thisPriority; minPosition = position; } } if ( minPriority == ULONG_MAX ) reducingRefn.priority = IRREDUCIBLE; else { reducingRefn.refn.family = family; reducingRefn.refn.refnParm[0].intParm = minPosition->i; reducingRefn.refn.refnParm[1].intParm = minPosition->j; reducingRefn.priority = thisPriority; } /* If this is the last call to isOrbReducible for this group (UpsilonStack has height degree-1), free memory and reinitialize. */ if ( UpsilonStack->height == G->degree - 1 ) { freePtrArrayDegree( refnData.hashTable[groupNumber]); free( refnData.refnList[groupNumber]); refnData.group[groupNumber] = NULL; --trueGroupCount; if ( trueGroupCount == 0 ) refnData.groupCount = 0; } refnData.freeListHeader[groupNumber] = freeListHeader; refnData.inUseListHeader[groupNumber] =inUseListHeader; return reducingRefn; } guava-3.6/src/leon/src/readpts.c0000644017361200001450000001016611026723452016471 0ustar tabbottcrontab/* File readPts. Contains routines to read in and write out point sets. The files must already be open. */ #include #include #include #include #include "group.h" #include "groupio.h" #include "storage.h" #include "token.h" #include "errmesg.h" CHECK( readpt) extern GroupOptions options; /*-------------------------- readPointSet ---------------------------------*/ PointSet *readPointSet( char *libFileName, char *libName, Unsigned degree) { Unsigned pt; PointSet *P = allocPointSet(); Token token, saveToken; char inputBuffer[81]; FILE *libFile; /* Open input file. */ libFile = fopen( libFileName, "r"); if ( libFile == NULL ) ERROR1s( "readPointSet", "File ", libFileName, " could not be opened for input.") /* Initialize input routines to correct file. */ setInputFile( libFile); lowerCase( libName); /* Initialize storage manager. */ initializeStorageManager( degree); /* Search for the correct library. Terminate with error message if not found. */ rewind( libFile); for (;;) { fgets( inputBuffer, 80, libFile); if ( feof(libFile) ) ERROR1s( "readPointSet", "Library block ", libName, " not found in specified library.") if ( inputBuffer[0] == 'l' || inputBuffer[0] == 'L' ) { setInputString( inputBuffer); if ( ( (token = sReadToken()) , token.type == identifier && strcmp(lowerCase(token.value.identValue),"library") == 0 ) && ( (token = sReadToken()) , token.type == identifier && strcmp(lowerCase(token.value.identValue),libName) == 0 ) ) break; } } /* Set the degree of the point set (must be specified). */ P->degree = degree; /* Read the point set name. */ if ( (token = nkReadToken() , saveToken = token , token.type == identifier) && (token = nkReadToken() , token.type == equal) ) strcpy( P->name, saveToken.value.identValue); if ( token = readToken() , token.type != leftBracket ) ERROR( "readPointSet", "Invalid syntax in point set library.") /* Read the points. */ P->pointList = allocIntArrayDegree(); P->inSet = allocBooleanArrayDegree(); P->size = 0; for ( pt = 1 ; pt <= P->degree ; ++pt ) P->inSet[pt] = FALSE; while (token = readToken() , token.type == integer || token.type == comma) if ( token.type == integer && (pt = token.value.intValue) > 0 && pt <= P->degree ) if ( !P->inSet[pt] ) { P->pointList[++P->size] = pt; P->inSet[pt] = TRUE; } else; else if ( token.type == integer ) ERROR1i( "ReadPointSet", "Invalid point ", pt, ".") if ( token.type != rightBracket || (token = readToken() , token.type !=semicolon) ) ERROR( "readPointSet", "Invalid symbol in point list.") /* Close the input file and return. */ fclose( libFile); return P; } /*-------------------------- writePointSet --------------------------------*/ void writePointSet( char *libFileName, char *libName, char *comment, PointSet *P) { Unsigned i, column; FILE *libFile; /* Open output file. */ libFile = fopen( libFileName, options.outputFileMode); if ( libFile == NULL ) ERROR1s( "writePointSet", "File ", libFileName, " could not be opened for output.") /* Write the library name. */ fprintf( libFile, "LIBRARY %s;\n", libName); /* Write the comment. */ if ( comment ) fprintf( libFile, "& %s &\n", comment); /* Write the point set name. */ if ( !P->name[0] ) strcpy( P->name, "P"); column = fprintf( libFile, " %s = [", P->name); /* Write the points. */ for ( i = 1 ; i <= P->size ; ++i ) { if ( column > 75 ) { fprintf( libFile, "\n "); column = 9; } column += fprintf( libFile, "%u", P->pointList[i]) + 1; if ( i < P->size ) fprintf( libFile, ","); } /* Write terminators. */ fprintf( libFile, "];\nFINISH;\n"); /* Close output file. */ fclose( libFile); } guava-3.6/src/leon/src/matiso.sh0000755017361200001450000000004311026723452016507 0ustar tabbottcrontab#!/bin/sh desauto -iso -matrix $* guava-3.6/src/leon/src/cinter.h0000644017361200001450000000067011026723452016317 0ustar tabbottcrontab#ifndef CINTER #define CINTER extern PermGroup *intersection( PermGroup *const G, /* The first permutation group. */ PermGroup *const E, /* The second permutation group. */ PermGroup *const L) /* A (possibly trivial) known subgroup of the intersection of G and E. (A null pointer designates a trivial group.) */ ; #endif guava-3.6/src/leon/src/optsvec.h0000644017361200001450000000124311026723452016513 0ustar tabbottcrontab#ifndef OPTSVEC #define OPTSVEC extern void meanCosetRepLen( const PermGroup *const G) ; extern FIXUP1 reconstructBasicOrbit( /* Returns word length of longest coset rep. */ PermGroup *const G, const Unsigned level) ; extern void expandSGS( PermGroup *G, UnsignedS longRepLen[], UnsignedS basicCellSize[], Unsigned ell) ; extern void compressGroup( PermGroup *const G) /* The group to be compressed. */ ; extern void compressAtLevel( PermGroup *const G, /* The group to be compressed. */ const Unsigned level) /* The level at which compression occurs. */ ; extern void sortGensByLevel( PermGroup *const G) ; #endif guava-3.6/src/leon/src/errmesg.h0000644017361200001450000000270711026723452016502 0ustar tabbottcrontab#ifndef ERRMESG #define ERRMESG extern BOOLEAN isValidName( char *name) /* The name to be checked for validity. */ ; extern void errorMessage( char *file, /* The file in which the error occured. */ int line, /* The line before which the error occured. */ char *function, /* The function in which the error occured. */ char *message) /* The message to be printed. It will be prefixed by "Error: ". */ ; extern void errorMessage1i( char *file, /* The file in which the error occured. */ int line, /* The line before which the error occured. */ char *function, /* The function in which the error occured. */ char *message1, /* The first part of the error message. */ Unsigned intParm, /* The integer variable part of the message. */ char *message2) /* The second part of the error message. */ ; extern void errorMessage1s( char *file, /* The file in which the error occured. */ int line, /* The line before which the error occured. */ char *function, /* The function in which the error occured. */ char *message1, /* The first part of the error message. */ char *strParm, /* The integer variable part of the message. */ char *message2) /* The second part of the error message. */ ; #endif guava-3.6/src/leon/src/repinimg.h0000644017361200001450000000226311026723452016645 0ustar tabbottcrontab/* Optimized macro to apply the inverse of a permutation perm to a list pointList of points of size listSize. (It is assumed that the inverse image fields exist.) Four temporary variables of type Unsigned* must be supplied: tImage, ptPtr, breakPtr, and endList. The first two (especially the second) are good candidates for register variables. */ #define REPLACE_BY_INV_IMAGE( pointList, perm, listSize, \ tImage, ptPtr, breakPtr, endList) \ tImage = perm->invImage; \ endList = pointList + listSize; \ breakPtr = (listSize >= 10) ? (endList - 9) : pointList; \ ptPtr = pointList+1; \ while( ptPtr <= breakPtr ) { \ *ptPtr = tImage[*ptPtr]; \ ++ptPtr; \ *ptPtr = tImage[*ptPtr]; \ ++ptPtr; \ *ptPtr = tImage[*ptPtr]; \ ++ptPtr; \ *ptPtr = tImage[*ptPtr]; \ ++ptPtr; \ *ptPtr = tImage[*ptPtr]; \ ++ptPtr; \ *ptPtr = tImage[*ptPtr]; \ ++ptPtr; \ *ptPtr = tImage[*ptPtr]; \ ++ptPtr; \ *ptPtr = tImage[*ptPtr]; \ ++ptPtr; \ } \ while ( ptPtr <= endList ) { \ *ptPtr = tImage[*ptPtr]; \ ++ptPtr; \ } guava-3.6/src/leon/src/leon_config.h.in0000644017361200001450000000276511026723452017731 0ustar tabbottcrontab/* src/leon_config.h.in. Generated from configure.in by autoheader. */ /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION /* The size of a `int', as computed by sizeof. */ #undef SIZEOF_INT /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION guava-3.6/src/leon/src/repimg.h0000644017361200001450000000214011026723452016310 0ustar tabbottcrontab/* Optimized macro to apply a permutation perm to a list pointList of points of size listSize. Four temporary variables of type Unsigned* must be supplied: tImage, ptPtr, breakPtr, and endList. The first two (especially the second) are good candidates for register variables. */ #define REPLACE_BY_IMAGE( pointList, perm, listSize, \ tImage, ptPtr, breakPtr, endList) \ tImage = perm->image; \ endList = pointList + listSize; \ breakPtr = (listSize >= 10) ? (endList - 9) : pointList; \ ptPtr = pointList+1; \ while( ptPtr <= breakPtr ) { \ *ptPtr = tImage[*ptPtr]; \ ++ptPtr; \ *ptPtr = tImage[*ptPtr]; \ ++ptPtr; \ *ptPtr = tImage[*ptPtr]; \ ++ptPtr; \ *ptPtr = tImage[*ptPtr]; \ ++ptPtr; \ *ptPtr = tImage[*ptPtr]; \ ++ptPtr; \ *ptPtr = tImage[*ptPtr]; \ ++ptPtr; \ *ptPtr = tImage[*ptPtr]; \ ++ptPtr; \ *ptPtr = tImage[*ptPtr]; \ ++ptPtr; \ } \ while ( ptPtr <= endList ) { \ *ptPtr = tImage[*ptPtr]; \ ++ptPtr; \ } guava-3.6/src/leon/src/cparstab.c0000644017361200001450000002661711026723452016636 0ustar tabbottcrontab/* File cparstab.c. Contains function partnStabilizer, the main function for a program that may be used to compute the stabilizer in a permutation group of an ordered partition. Also contains functions as follows: parStabRefnInitialize: Initialize set stabilizer refinement functions. setStabRefine: A refinement family based on the set stabilizer property. isSetStabReducible: A function to check SSS-reducibility. */ #include #include #include "group.h" #include "compcrep.h" #include "compsg.h" #include "errmesg.h" #include "orbrefn.h" CHECK( cparst) RefinementMapping partnStabRefine; ReducChkFn isPartnStabReducible; void initializePartnStabRefn(void); static Partition *knownIrreducible[10] /* Null terminated 0-base list of */ = {NULL}; /* point sets Lambda for which top */ /* partition on UpsilonStack is */ /* known to be SSS_Lambda irred. */ /*-------------------------- partnStabilizer ------------------------------*/ /* Function partnStabilizer. Returns a new permutation group representing the stabilizer in a permutation group G of an ordered partition Lambda of the point set Omega. The algorithm is based on Figure 9 in the paper "Permutation group algorithms based on partitions" by the author. */ #define familyParm familyParm_L PermGroup *partnStabilizer( PermGroup *const G, /* The containing permutation group. */ const Partition *const Lambda, /* The point set to be stabilized. */ PermGroup *const L) /* A (possibly trivial) known subgroup of the stabilizer in G of Lambda. (A null pointer designates a trivial group.) */ { RefinementFamily OOO_G, SSS_Lambda; RefinementFamily *refnFamList[3]; ReducChkFn *reducChkList[3]; SpecialRefinementDescriptor *specialRefinement[3]; ExtraDomain *extra[1]; OOO_G.refine = orbRefine; OOO_G.familyParm[0].ptrParm = G; SSS_Lambda.refine = partnStabRefine; SSS_Lambda.familyParm[0].ptrParm = (void *) Lambda; refnFamList[0] = &OOO_G; refnFamList[1] = &SSS_Lambda; refnFamList[2] = NULL; reducChkList[0] = isOrbReducible; reducChkList[1] = isPartnStabReducible; reducChkList[2] = NULL; specialRefinement[0] = malloc( sizeof(SpecialRefinementDescriptor) ); specialRefinement[0]->refnType = 'O'; specialRefinement[0]->leftGroup = G; specialRefinement[0]->rightGroup = G; specialRefinement[1] = NULL; specialRefinement[2] = NULL; extra[0] = NULL; initializeOrbRefine( G); initializePartnStabRefn(); return computeSubgroup( G, NULL, refnFamList, reducChkList, specialRefinement, extra, L); } #undef familyParm /*-------------------------- partnImage -----------------------------------*/ /* Function partnImage. Returns a new permutation in a specified group G mapping a specified partition Lambda to a specified partition Xi. The algorithm is based on Figure 9 in the paper "Permutation group algorithms based on partitions" by the author. */ Permutation *partnImage( PermGroup *const G, /* The containing permutation group. */ const Partition *const Lambda, /* One of the partitions. */ const Partition *const Xi, /* The other partition. */ PermGroup *const L_L, /* A (possibly trivial) known subgroup of the stabilizer in G of Lambda. (A null pointer designates a trivial group.) */ PermGroup *const L_R) /* A (possibly trivial) known subgroup of the stabilizer in G of Xi. (A null pointer designates a trivial group.) */ { RefinementFamily OOO_G, SSS_Lambda_Xi; RefinementFamily *refnFamList[3]; ReducChkFn *reducChkList[3]; SpecialRefinementDescriptor *specialRefinement[3]; ExtraDomain *extra[1]; OOO_G.refine = orbRefine; OOO_G.familyParm_L[0].ptrParm = G; OOO_G.familyParm_R[0].ptrParm = G; SSS_Lambda_Xi.refine = partnStabRefine; SSS_Lambda_Xi.familyParm_L[0].ptrParm = (void *) Lambda; SSS_Lambda_Xi.familyParm_R[0].ptrParm = (void *) Xi; refnFamList[0] = &OOO_G; refnFamList[1] = &SSS_Lambda_Xi; refnFamList[2] = NULL; reducChkList[0] = isOrbReducible; reducChkList[1] = isPartnStabReducible; reducChkList[2] = NULL; specialRefinement[0] = malloc( sizeof(SpecialRefinementDescriptor) ); specialRefinement[0]->refnType = 'O'; specialRefinement[0]->leftGroup = G; specialRefinement[0]->rightGroup = G; specialRefinement[1] = NULL; specialRefinement[2] = NULL; extra[0] = NULL; initializeOrbRefine( G); initializePartnStabRefn(); return computeCosetRep( G, NULL, refnFamList, reducChkList, specialRefinement, extra, L_L, L_R); } /*-------------------------- initializePartnStabRefn ----------------------*/ void initializePartnStabRefn( void) { knownIrreducible[0] = NULL; } /*-------------------------- partnStabRefine ------------------------------*/ /* The function implements the refinement family partnStabRefine (denoted SSS_Lambda in the reference). This family consists of the elementary refinements ssS_{Lambda,i,j}, where Lambda fixed. (It is the partition to be stabilized) and where 1 <= i, j <= degree. Application of sSS_{Lambda,i,j} to UpsilonStack splits off from UpsilonTop the intersection of the j'th cell of Lambda and the i'th cell of UpsilonTop from cell i of the top partition of UpsilonStack and pushes the resulting partition onto UpsilonStack, unless sSS_{Lambda,i,j} acts trivially on UpsilonTop, in which case UpsilonStack remains unchanged. The family parameter is: familyParm[0].ptrParm: Lambda The refinement parameters are: refnParm[0].intParm: i, refnParm[1].intParm: j. In the expectation that this refinement will be applied only a small number of times, no attempt has been made to optimize this procedure. */ SplitSize partnStabRefine( const RefinementParm familyParm[], /* Family parm: Lambda. */ const RefinementParm refnParm[], /* Refinement parm: i. */ PartitionStack *const UpsilonStack) /* The partition stack to refine. */ { Partition *Lambda = familyParm[0].ptrParm; Unsigned cellToSplit = refnParm[0].intParm, LambdaCellToUse = refnParm[1].intParm; Unsigned m, last, i, j, temp; UnsignedS *const pointList = UpsilonStack->pointList, *const invPointList = UpsilonStack->invPointList, *const parent = UpsilonStack->parent, *const startCell = UpsilonStack->startCell, *const cellSize = UpsilonStack->cellSize; SplitSize split; BOOLEAN cellSplits; /* First check if the refinement acts nontrivially on UpsilonTop. If not return immediately. */ cellSplits = FALSE; for ( m = startCell[cellToSplit]+1 , last = m -1 + cellSize[cellToSplit] ; m < last ; ++m ) if ( (Lambda->cellNumber[pointList[m]] == LambdaCellToUse) != (Lambda->cellNumber[pointList[m-1]] == LambdaCellToUse) ) { cellSplits = TRUE; break; } if ( !cellSplits ) { split.oldCellSize = cellSize[cellToSplit]; split.newCellSize = 0; return split; } /* Now split cell cellToSplit of UpsilonTop. A variation of the splitting algorithm used in quicksort is applied. */ i = startCell[cellToSplit]-1; j = last; while ( i < j ) { while ( Lambda->cellNumber[pointList[++i]] != LambdaCellToUse ) ; while ( Lambda->cellNumber[pointList[--j]] == LambdaCellToUse ) ; if ( i < j ) { EXCHANGE( pointList[i], pointList[j], temp) EXCHANGE( invPointList[pointList[i]], invPointList[pointList[j]], temp) } } ++UpsilonStack->height; for ( m = i ; m < last ; ++m ) UpsilonStack->cellNumber[pointList[m]] = UpsilonStack->height; startCell[UpsilonStack->height] = i; parent[UpsilonStack->height] = cellToSplit; cellSize[UpsilonStack->height] = last - i; cellSize[cellToSplit] -= (last - i); split.oldCellSize = cellSize[cellToSplit]; split.newCellSize = cellSize[UpsilonStack->height]; return split; } /*-------------------------- isPartnStabReducible -------------------------*/ /* The function isPartnStabReducible checks whether the top partition on a given partition stack is SSS_Lambda-reducible, where Lambda is a fixed ordered partition. If so, it returns a pair consisting of a refinement acting nontrivially on the top partition and a priority. Otherwise it returns a structure of type RefinementPriorityPair in which the priority field is IRREDUCIBLE. Assuming that a reducing refinement is found, the (reverse) priority is set very low (1). Note that, once this function returns negative in the priority field once, it will do so on all subsequent calls. (The static variable knownIrreducible is set to true in this situation.) Again, no attempt at efficiency has been made. */ RefinementPriorityPair isPartnStabReducible( const RefinementFamily *family, const PartitionStack *const UpsilonStack) { Partition *Lambda = family->familyParm_L[0].ptrParm; Unsigned i, cellNo, position; RefinementPriorityPair reducingRefn; UnsignedS *const pointList = UpsilonStack->pointList, *const startCell = UpsilonStack->startCell, *const cellSize = UpsilonStack->cellSize; /* Check that the refinement mapping really is partnStabRefn, as required. */ if ( family->refine != partnStabRefine ) ERROR( "isPartnStabReducible", "Error: incorrect refinement mapping"); /* If the top partition has previously been found to be SSS-irreducible, we return immediately. */ for ( i = 0 ; knownIrreducible[i] && knownIrreducible[i] != Lambda ; ++i ) ; if ( knownIrreducible[i] ) { reducingRefn.priority = IRREDUCIBLE; return reducingRefn; } /* If we reach here, the top partition has not been previously found to be SSS-irreducible. We check each cell in turn to see if it intersects at least two cells of Lambda. If such a cell is found, we return immediately. */ for ( cellNo = 1 ; cellNo <= UpsilonStack->height ; ++cellNo ) { for ( position = startCell[cellNo]+1 ; position < startCell[cellNo] + cellSize[cellNo] ; ++position ) if ( Lambda->cellNumber[pointList[position]] != Lambda->cellNumber[pointList[position-1]] ) { reducingRefn.refn.family = family; reducingRefn.refn.refnParm[0].intParm = cellNo; reducingRefn.refn.refnParm[1].intParm = Lambda->cellNumber[pointList[position]]; reducingRefn.priority = 1; return reducingRefn; } } /* If we reach here, we have found the top partition to be SSS_Lambda irreducible, so we add Lambda to the list knownIrreducible and return. */ for ( i = 0 ; knownIrreducible[i] ; ++i ) ; if ( i < 9 ) { knownIrreducible[i] = Lambda; knownIrreducible[i+1] = NULL; } else ERROR( "isPartnStabReducible", "Number of point sets exceeded max of 9.") reducingRefn.priority = IRREDUCIBLE; return reducingRefn; } guava-3.6/src/leon/src/orbdes.c0000644017361200001450000002044611026723452016307 0ustar tabbottcrontab/* File orbdes.c. Main program for orbdes command, which may be used construct a design from the orbits of a point stabilizer in a permutation group. The format of the command is: orbdes where the meaning of the parameters is as follows: : Options for program. : The permutation group from which the design is to be constructed. : Determines which orbit of the point stabilizer of 1 (or the first point in ^ for an intransitive group) will be used. : The name for the design to be created. */ #include #include #include #include #include #define MAIN #include "group.h" #include "groupio.h" #include "chbase.h" #include "errmesg.h" #include "new.h" #include "oldcopy.h" #include "permut.h" #include "readdes.h" #include "readgrp.h" #include "storage.h" #include "util.h" static void verifyOptions(void); GroupOptions options; int main( int argc, char *argv[]) { char permGroupFileName[MAX_FILE_NAME_LENGTH] = "", designFileName[MAX_FILE_NAME_LENGTH] = "", permGroupLibraryName[MAX_NAME_LENGTH] = "", designLibraryName[MAX_NAME_LENGTH] = ""; char comment[60]; Unsigned orbRep, i, j, pt, basePt, processed, found, img, optionCountPlus1; char *flag; Unsigned *pointList; PermGroup *G; Matrix_01 *D; Permutation *gen; BOOLEAN matrixFlag, transposeMatrixFlag; /* If there are no options, provide usage information and exit. */ if ( argc == 1 ) { printf( "\nUsage: orbdes [-a] [-m] [-mt] permGroup point design\n"); return 0; } /* Check for limits option. If present in position 1, give limits and return. */ if ( strcmp( argv[1], "-l") == 0 || strcmp( argv[1], "-L") == 0 ) { showLimits(); return 0; } /* Check for verify option. If present in position i (i as above) perform verify (Note verifyOptions terminates program). */ if ( strcmp( argv[1], "-v") == 0 || strcmp( argv[1], "-V") == 0 ) verifyOptions(); /* Check for exactly 3 parameters following options. */ for ( optionCountPlus1 = 1 ; optionCountPlus1 < argc && argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 ) ; if ( argc - optionCountPlus1 != 3 ) { ERROR( "main (design group)", "Exactly 3 non-option parameters are required."); exit(ERROR_RETURN_CODE); } options.maxBaseSize = DEFAULT_MAX_BASE_SIZE; strcpy( options.outputFileMode, "w"); matrixFlag = FALSE; transposeMatrixFlag = FALSE; /* Translate options to lower case and process them. */ for ( i = 1 ; i < optionCountPlus1 ; ++i ) { for ( j = 1 ; argv[i][j] != ':' && argv[i][j] != '\0' ; ++j ) #ifdef EBCDIC argv[i][j] = ( argv[i][j] >= 'A' && argv[i][j] <= 'I' || argv[i][j] >= 'J' && argv[i][j] <= 'R' || argv[i][j] >= 'S' && argv[i][j] <= 'Z' ) ? (argv[i][j] + 'a' - 'A') : argv[i][j]; #else argv[i][j] = (argv[i][j] >= 'A' && argv[i][j] <= 'Z') ? (argv[i][j] + 'a' - 'A') : argv[i][j]; #endif if ( strcmp( argv[i], "-a") == 0 ) strcpy( options.outputFileMode, "a"); else if ( strncmp( argv[i], "-mb:", 4) == 0 ) { errno = 0; options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (cent)", "Invalid syntax for -mb option") } else if ( strncmp( argv[i], "-mw:", 4) == 0 ) { errno = 0; options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (cent)", "Invalid syntax for -mw option") } else if ( strcmp( argv[i], "-m") == 0 ) { matrixFlag = TRUE; transposeMatrixFlag = FALSE; } else if ( strcmp( argv[i], "-mt") == 0 ) { transposeMatrixFlag = TRUE; matrixFlag = FALSE; } } /* Compute maximum degree and word length. */ options.maxWordLength = 200 + 5 * options.maxBaseSize; options.maxDegree = MAX_INT - 2 - options.maxBaseSize; /* Compute file and library names. */ parseLibraryName( argv[optionCountPlus1], "", "", permGroupFileName, permGroupLibraryName); parseLibraryName( argv[optionCountPlus1+2], "", "", designFileName, designLibraryName); /* Read in group. */ G = readPermGroup( permGroupFileName, permGroupLibraryName, 0, "Generate"); /* Obtain orbit representive and suborbit representative. */ errno = 0; orbRep = strtol( argv[optionCountPlus1+1], NULL, 0); if ( errno != 0 || orbRep < 1 || orbRep > G->degree ) ERROR1s( "main (orbdes command)", "Invalid orbit representative ", argv[optionCountPlus1+1], "."); /* Find the first point in the G-orbit of orbRep, call it basePt,and make it the first base point. Make orbRep the second base point. */ insertBasePoint( G, 1, orbRep); for ( basePt = 1; G->schreierVec[1][basePt] == NULL ; ++basePt ) ; insertBasePoint( G, 1, basePt); insertBasePoint( G, 2, orbRep); /* Allocate the design. */ D = newZeroMatrix( 2, G->degree, G->degree); /* Construct the design. */ pointList = allocIntArrayDegree(); flag = allocBooleanArrayDegree(); processed = 0; found = 1; pointList[1] = basePt; for ( pt = 1 ; pt <= G->degree ; ++pt ) flag[pt] = FALSE; flag[basePt] = TRUE; for ( i = 1 ; i <= G->basicOrbLen[2] ; ++i ) D->entry[G->basicOrbit[2][i]][basePt] = 1; while ( processed < found ) { pt = pointList[++processed]; for ( gen = G->generator ; gen ; gen = gen->next ) { img = gen->image[pt]; if ( !flag[img] ) { flag[img] = TRUE; pointList[++found] = img; for ( i = 1 ; i <= G->degree ; ++i ) D->entry[gen->image[i]][img] = D->entry[i][pt]; } } } /* Write out the design. */ sprintf( comment, "Design from group %s, %s_%d orbit of %d.", G->name, G->name, basePt, orbRep); strcpy( D->name, designLibraryName); if ( matrixFlag ) write01Matrix( designFileName, designLibraryName, D, FALSE, comment); else if ( transposeMatrixFlag ) write01Matrix( designFileName, designLibraryName, D, TRUE, comment); else writeDesign( designFileName, designLibraryName, D, comment); return 0; } /*-------------------------- verifyOptions -------------------------------*/ static void verifyOptions(void) { CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH, MAX_PRIME_FACTORS, MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS, MAX_EXTRA, XLARGE, SGND, NFLT}; extern void xaddsge( CompileOptions *cOpts); extern void xbitman( CompileOptions *cOpts); extern void xcopy ( CompileOptions *cOpts); extern void xcstbor( CompileOptions *cOpts); extern void xerrmes( CompileOptions *cOpts); extern void xessent( CompileOptions *cOpts); extern void xfactor( CompileOptions *cOpts); extern void xnew ( CompileOptions *cOpts); extern void xoldcop( CompileOptions *cOpts); extern void xpermgr( CompileOptions *cOpts); extern void xpermut( CompileOptions *cOpts); extern void xprimes( CompileOptions *cOpts); extern void xrandgr( CompileOptions *cOpts); extern void xrandsc( CompileOptions *cOpts); extern void xreadde( CompileOptions *cOpts); extern void xreadgr( CompileOptions *cOpts); extern void xreadpe( CompileOptions *cOpts); extern void xstorag( CompileOptions *cOpts); extern void xtoken ( CompileOptions *cOpts); extern void xutil ( CompileOptions *cOpts); xaddsge( &mainOpts); xbitman( &mainOpts); xcopy ( &mainOpts); xcstbor( &mainOpts); xerrmes( &mainOpts); xessent( &mainOpts); xfactor( &mainOpts); xnew ( &mainOpts); xoldcop( &mainOpts); xpermgr( &mainOpts); xpermut( &mainOpts); xprimes( &mainOpts); xrandgr( &mainOpts); xrandsc( &mainOpts); xreadde( &mainOpts); xreadgr( &mainOpts); xreadpe( &mainOpts); xstorag( &mainOpts); xtoken ( &mainOpts); xutil ( &mainOpts); } guava-3.6/src/leon/src/cparstab.h0000644017361200001450000000306511026723452016633 0ustar tabbottcrontab#ifndef CPARSTAB #define CPARSTAB extern PermGroup *partnStabilizer( PermGroup *const G, /* The containing permutation group. */ const Partition *const Lambda, /* The point set to be stabilized. */ PermGroup *const L) /* A (possibly trivial) known subgroup of the stabilizer in G of Lambda. (A null pointer designates a trivial group.) */ ; extern Permutation *partnImage( PermGroup *const G, /* The containing permutation group. */ const Partition *const Lambda, /* One of the partitions. */ const Partition *const Xi, /* The other partition. */ PermGroup *const L_L, /* A (possibly trivial) known subgroup of the stabilizer in G of Lambda. (A null pointer designates a trivial group.) */ PermGroup *const L_R) /* A (possibly trivial) known subgroup of the stabilizer in G of Xi. (A null pointer designates a trivial group.) */ ; extern void initializePartnStabRefn( void) ; extern SplitSize partnStabRefine( const RefinementParm familyParm[], /* Family parm: Lambda. */ const RefinementParm refnParm[], /* Refinement parm: i. */ PartitionStack *const UpsilonStack) /* The partition stack to refine. */ ; extern RefinementPriorityPair isPartnStabReducible( const RefinementFamily *family, const PartitionStack *const UpsilonStack) ; #endif guava-3.6/src/leon/src/csetstab.c0000644017361200001450000002650611026723452016644 0ustar tabbottcrontab/* File csetstab.c. Contains function setStabilizer, the main function for a program that may be used to compute the stabilizer in a permutation group of a subset of the set of points. Also contains functions as follows: setStabRefnInitialize: Initialize set stabilizer refinement functions. setStabRefine: A refinement family based on the set stabilizer property. isSetStabReducible: A function to check SSS-reducibility. */ #include #include #include "group.h" #include "compcrep.h" #include "compsg.h" #include "errmesg.h" #include "orbrefn.h" CHECK( csetst) extern GroupOptions options; static RefinementMapping setStabRefine; static ReducChkFn isSetStabReducible; static void initializeSetStabRefn(void); static PointSet *knownIrreducible[10] /* Null terminated 0-base list of */ = {NULL}; /* point sets Lambda for which top */ /* partition on UpsilonStack is */ /* known to be SSS_Lambda irred. */ /*-------------------------- setStabilizer --------------------------------*/ /* Function setStabilizer. Returns a new permutation group representing the stabilizer in a permutation group G of a subset Lambda of the point set Omega. The algorithm is based on Figure 9 in the paper "Permutation group algorithms based on partitions" by the author. */ #define familyParm familyParm_L PermGroup *setStabilizer( PermGroup *const G, /* The containing permutation group. */ const PointSet *const Lambda, /* The point set to be stabilized. */ PermGroup *const L) /* A (possibly trivial) known subgroup of the stabilizer in G of Lambda. (A null pointer designates a trivial group.) */ { RefinementFamily OOO_G, SSS_Lambda; RefinementFamily *refnFamList[3]; ReducChkFn *reducChkList[3]; SpecialRefinementDescriptor *specialRefinement[3]; ExtraDomain *extra[1]; OOO_G.refine = orbRefine; OOO_G.familyParm[0].ptrParm = G; SSS_Lambda.refine = setStabRefine; SSS_Lambda.familyParm[0].ptrParm = (void *) Lambda; refnFamList[0] = &OOO_G; refnFamList[1] = &SSS_Lambda; refnFamList[2] = NULL; reducChkList[0] = isOrbReducible; reducChkList[1] = isSetStabReducible; reducChkList[2] = NULL; specialRefinement[0] = malloc( sizeof(SpecialRefinementDescriptor) ); specialRefinement[0]->refnType = 'O'; specialRefinement[0]->leftGroup = G; specialRefinement[0]->rightGroup = G; specialRefinement[1] = NULL; specialRefinement[2] = NULL; extra[0] = NULL; initializeOrbRefine( G); initializeSetStabRefn(); return computeSubgroup( G, NULL, refnFamList, reducChkList, specialRefinement, extra, L); } #undef familyParm /*-------------------------- setImage -------------------------------------*/ /* Function setImage. Returns a new permutation in a specified group G mapping a specified point set Lambda to a specified point set Xi. The algorithm is based on Figure 9 in the paper "Permutation group algorithms based on partitions" by the author. */ Permutation *setImage( PermGroup *const G, /* The containing permutation group. */ const PointSet *const Lambda, /* One of the point sets. */ const PointSet *const Xi, /* The other point set. */ PermGroup *const L_L, /* A (possibly trivial) known subgroup of the stabilizer in G of Lambda. (A null pointer designates a trivial group.) */ PermGroup *const L_R) /* A (possibly trivial) known subgroup of the stabilizer in G of Xi. (A null pointer designates a trivial group.) */ { RefinementFamily OOO_G, SSS_Lambda_Xi; RefinementFamily *refnFamList[3]; ReducChkFn *reducChkList[3]; SpecialRefinementDescriptor *specialRefinement[3]; ExtraDomain *extra[1]; OOO_G.refine = orbRefine; OOO_G.familyParm_L[0].ptrParm = G; OOO_G.familyParm_R[0].ptrParm = G; SSS_Lambda_Xi.refine = setStabRefine; SSS_Lambda_Xi.familyParm_L[0].ptrParm = (void *) Lambda; SSS_Lambda_Xi.familyParm_R[0].ptrParm = (void *) Xi; refnFamList[0] = &OOO_G; refnFamList[1] = &SSS_Lambda_Xi; refnFamList[2] = NULL; reducChkList[0] = isOrbReducible; reducChkList[1] = isSetStabReducible; reducChkList[2] = NULL; specialRefinement[0] = malloc( sizeof(SpecialRefinementDescriptor) ); specialRefinement[0]->refnType = 'O'; specialRefinement[0]->leftGroup = G; specialRefinement[0]->rightGroup = G; specialRefinement[1] = NULL; specialRefinement[2] = NULL; extra[0] = NULL; initializeOrbRefine( G); initializeSetStabRefn(); return computeCosetRep( G, NULL, refnFamList, reducChkList, specialRefinement, extra, L_L, L_R); } /*-------------------------- initializeSetStabRefn ------------------------*/ static void initializeSetStabRefn( void) { knownIrreducible[0] = NULL; } /*-------------------------- setStabRefine --------------------------------*/ /* The function implements the refinement family setStabRefine (denoted SSS_Lambda in the reference). This family consists of the elementary refinements ssS_{Lambda,i}, where Lambda fixed. (It is the set to be stabilized) and where 1 <= i <= degree. Application of sSS_{Lambda,i} to UpsilonStack splits off from UpsilonTop the intersection of Lambda and the i'th cell of UpsilonTop from cell i of the top partition of UpsilonStack and pushes the resulting partition onto UpsilonStack, unless sSS_{Lambda,i} acts trivially on UpsilonTop, in which case UpsilonStack remains unchanged. The family parameter is: familyParm[0].ptrParm: Lambda The refinement parameters are: refnParm[0].intParm: i. In the expectation that this refinement will be applied only a small number of times, no attempt has been made to optimize this procedure. */ static SplitSize setStabRefine( const RefinementParm familyParm[], /* Family parm: Lambda. */ const RefinementParm refnParm[], /* Refinement parm: i. */ PartitionStack *const UpsilonStack) /* The partition stack to refine. */ { PointSet *Lambda = familyParm[0].ptrParm; Unsigned cellToSplit = refnParm[0].intParm; Unsigned m, last, i, j, temp, inLambdaCount = 0, outLambdaCount = 0; UnsignedS *const pointList = UpsilonStack->pointList, *const invPointList = UpsilonStack->invPointList, *const cellNumber = UpsilonStack->cellNumber, *const parent = UpsilonStack->parent, *const startCell = UpsilonStack->startCell, *const cellSize = UpsilonStack->cellSize; char *inSet = Lambda->inSet; SplitSize split; /* First check if the refinement acts nontrivially on UpsilonTop. If not return immediately. */ for ( m = startCell[cellToSplit] , last = m + cellSize[cellToSplit] ; m < last && (inLambdaCount == 0 || outLambdaCount == 0) ; ++m ) if ( inSet[pointList[m]] ) ++inLambdaCount; else ++outLambdaCount; if ( inLambdaCount == 0 || outLambdaCount == 0 ) { split.oldCellSize = cellSize[cellToSplit]; split.newCellSize = 0; return split; } /* Now split cell cellToSplit of UpsilonTop. A variation of the splitting algorithm used in quicksort is applied. */ i = startCell[cellToSplit]-1; j = last; while ( i < j ) { while ( !inSet[pointList[++i]] ); while ( inSet[pointList[--j]] ); if ( i < j ) { EXCHANGE( pointList[i], pointList[j], temp) EXCHANGE( invPointList[pointList[i]], invPointList[pointList[j]], temp) } } ++UpsilonStack->height; for ( m = i ; m < last ; ++m ) cellNumber[pointList[m]] = UpsilonStack->height; startCell[UpsilonStack->height] = i; parent[UpsilonStack->height] = cellToSplit; cellSize[UpsilonStack->height] = last - i; cellSize[cellToSplit] -= (last - i); split.oldCellSize = cellSize[cellToSplit]; split.newCellSize = cellSize[UpsilonStack->height]; return split; } /*-------------------------- isSetStabReducible ---------------------------*/ /* The function isSetStabReducible checks whether the top partition on a given partition stack is SSS_Lambda-reducible, where Lambda is a fixed set. If so, it returns a pair consisting of a refinement acting nontrivially on the top partition and a priority. Otherwise it returns a structure of type RefinementPriorityPair in which the priority field is IRREDUCIBLE. Assuming that a reducing refinement is found, the (reverse) priority is set very low (1). Note that, once this function returns negative in the priority field once, it will do so on all subsequent calls. (The static variable knownIrreducible is set to true in this situation.) Again, no attempt at efficiency has been made. */ static RefinementPriorityPair isSetStabReducible( const RefinementFamily *family, const PartitionStack *const UpsilonStack) { PointSet *Lambda = family->familyParm_L[0].ptrParm; Unsigned i, cellNo, position; BOOLEAN ptsInLambda, ptsNotInLambda; RefinementPriorityPair reducingRefn; UnsignedS *const pointList = UpsilonStack->pointList, *const startCell = UpsilonStack->startCell, *const cellSize = UpsilonStack->cellSize; char *inSet = Lambda->inSet; /* Check that the refinement mapping really is setStabRefn, as required. */ if ( family->refine != setStabRefine ) ERROR( "isSetStabReducible", "Error: incorrect refinement mapping"); /* If the top partition has previously been found to be SSS-irreducible, we return immediately. */ for ( i = 0 ; knownIrreducible[i] && knownIrreducible[i] != Lambda ; ++i ) ; if ( knownIrreducible[i] ) { reducingRefn.priority = IRREDUCIBLE; return reducingRefn; } /* If we reach here, the top partition has not been previously found to be SSS-irreducible. We check each cell in turn to see if it intersects both Lambda and Omega - Lambda. If such a cell is found, we return immediately. */ for ( cellNo = 1 ; cellNo <= UpsilonStack->height ; ++cellNo ) { ptsInLambda = ptsNotInLambda = FALSE; for ( position = startCell[cellNo] ; position < startCell[cellNo] + cellSize[cellNo] ; ++position ) { if ( inSet[pointList[position]] ) ptsInLambda = TRUE; else ptsNotInLambda = TRUE; if ( ptsInLambda && ptsNotInLambda ) { reducingRefn.refn.family = family; reducingRefn.refn.refnParm[0].intParm = cellNo; reducingRefn.priority = 1; return reducingRefn; } } } /* If we reach here, we have found the top partition to be SSS_Lambda irreducible, so we add Lambda to the list knownIrreducible and return. */ for ( i = 0 ; knownIrreducible[i] ; ++i ) ; if ( i < 9 ) { knownIrreducible[i] = Lambda; knownIrreducible[i+1] = NULL; } else ERROR( "isSetStabReducible", "Number of point sets exceeded max of 9.") reducingRefn.priority = IRREDUCIBLE; return reducingRefn; } guava-3.6/src/leon/src/readpar.h0000644017361200001450000000036611026723452016453 0ustar tabbottcrontab#ifndef READPAR #define READPAR extern Partition *readPartition( char *libFileName, char *libName, Unsigned degree) ; extern void writePartition( char *libFileName, char *libName, char *comment, Partition *partn) ; #endif guava-3.6/src/leon/src/token.c0000644017361200001450000002166411026723452016154 0ustar tabbottcrontab/* File token.c. */ #define COMMENT_CHAR '\"' #define ALT_COMMENT_CHAR '&' #include #include #include #include "group.h" #include "groupio.h" #include "errmesg.h" CHECK( token) static FILE *inFile; /* File to read from. */ static Unsigned lineNo; /* Line number in file. */ static BOOLEAN bufferNonempty; /* True if a token has been read but not returned. */ static Token tokenBuffer; /* The token read but not returned. */ static BOOLEAN endOfFileReached; /* True if end of file has been reached. */ static const char *inString; /* String to read from. */ static Unsigned stringPosition; /* First position in string not read. */ static BOOLEAN sBufferNonempty; /* True if a token has been read from string but not returned. */ static Token sTokenBuffer; /* The token read from string but not returned. */ static BOOLEAN endOfStringReached; /* True if end of string has been reached. */ static recognizeKeywordFlag = TRUE; /* If false, a colon is treated as an ordinary character. Keywords are not recognized. */ /*-------------------------- lowerCase -----------------------------------*/ /* The function lowerCase(s) converts the string s to lower case and returns a pointer to s. */ char *lowerCase( char *s) { Unsigned i; for ( i = 0 ; i < strlen(s) ; ++i ) #ifdef EBCDIC s[i] = ( s[i] >= 'A' && s[i] <= 'I' || s[i] >= 'J' && s[i] <= 'R' || s[i] >= 'S' && s[i] <= 'Z' ) ? (s[i] + 'a' - 'A') : s[i]; #else s[i] = (s[i] >= 'A' && s[i] <= 'Z') ? (s[i] + 'a' - 'A') : s[i]; #endif return s; } /*-------------------------- setInputFile --------------------------------*/ void setInputFile( FILE *newFile) { inFile = newFile; lineNo = 1; endOfFileReached = FALSE; bufferNonempty = FALSE; } /*-------------------------- setInputString ------------------------------*/ void setInputString( const char *const newString) { inString = newString; stringPosition = 0; endOfStringReached = FALSE; sBufferNonempty = FALSE; } /*-------------------------- discardThruChar --------------------------------*/ static void discardThruChar( Unsigned stopDiscard, Unsigned *lineNoPtr ) { Unsigned ch; do { ch = getc(inFile); if ( ch == '\n' ) ++(*lineNoPtr); } while ( ch != '\n' && ch != stopDiscard); } /*-------------------------- readToken -----------------------------------*/ Token readToken( void) { Token token; int ch; Unsigned lastPos; char buffer[100]; /* If a token has been read but not returned, return that token and exit. */ if ( bufferNonempty ) { bufferNonempty = FALSE; return tokenBuffer; } /* If end of file has already been reached, return eof as token type. */ if ( endOfFileReached ) { token.type = eof; return token; } /* Skip over white space, but keep track of line numbers in the file. */ while ( (ch = getc(inFile)) == ' ' || ch == '\t' || (ch == '\n' ? (++lineNo,TRUE) : FALSE) || ( (ch == COMMENT_CHAR || ch == ALT_COMMENT_CHAR) ? (discardThruChar( ch, &lineNo),TRUE) : FALSE ) ) ; /* This code handles keyword and identifier tokens. */ if ( isalpha(ch) || ch == '_' ) { buffer[0] = ch; lastPos = 0; while ( (ch = getc(inFile)) , isalpha(ch) || isdigit(ch) || ch == '_' ) if ( lastPos < MAX_TOKEN_LENGTH-1 ) buffer[++lastPos] = ch; else ERROR1i( "readToken", "Token length exceed maximum of ", MAX_TOKEN_LENGTH, ".") token.type = ( ch == ':' && recognizeKeywordFlag ) ? keyword : identifier; buffer[lastPos+1] = '\0'; if ( token.type == keyword ) strcpy( token.value.keyValue, buffer); else strcpy( token.value.identValue, buffer); if ( token.type == identifier) if ( ch != EOF ) ungetc( ch, inFile); else endOfFileReached = TRUE; } /* This code handles integer tokens. */ else if ( isdigit(ch) ) { ungetc( ch, inFile); if ( fscanf( inFile, SCANF_Int_FORMAT, &token.value.intValue) == 1 ) token.type = integer; else ERROR( "readToken", "Error in reading integer token.") } /* This code handles end-of-file tokens. */ else if ( ch == EOF ) { token.type = eof; endOfFileReached = TRUE; } /* This code handles single-character tokens. */ else switch ( ch ) { case '(': token.type = leftParen; break; case ')': token.type = rightParen; break; case '[': token.type = leftBracket; break; case ']': token.type = rightBracket; break; case '<': token.type = leftAngle; break; case '>': token.type = rightAngle; break; case ';': token.type = semicolon; break; case '=': token.type = equal; break; case '*': token.type = asterisk; break; case '^': token.type = caret; break; case ',': token.type = comma; break; case '/': token.type = slash; break; case '.': token.type = period; break; case ':': token.type = colon; break; default: token.type = other; token.value.charValue = ch; } return token; } /*-------------------------- nkReadToken ---------------------------------*/ Token nkReadToken(void) { Token token; recognizeKeywordFlag = FALSE; token = readToken(); if ( token.type == identifier ) lowerCase( token.value.identValue); recognizeKeywordFlag = TRUE; return token; } /*-------------------------- sReadToken ----------------------------------*/ Token sReadToken( void) { Token token; char ch; Unsigned lastPos; char sBuffer[100]; /* If a token has been read but not returned, return that token and exit. */ if ( sBufferNonempty ) { sBufferNonempty = FALSE; return sTokenBuffer; } /* If end of string has already been reached, return eof as token type. */ if ( endOfStringReached ) { token.type = eof; return token; } /* Skip over white space, but keep track of line numbers in the file. */ while ( (ch = inString[stringPosition++]) == ' ' || ch == '\t' || ch == '\n' ) ; /* This code handles keyword and identifier tokens. */ if ( isalpha(ch) || ch == '_' ) { sBuffer[0] = ch; lastPos = 0; while ( (ch = inString[stringPosition++]) , isalpha(ch) || isdigit(ch) || ch == '_' ) if ( lastPos < MAX_TOKEN_LENGTH-1 ) sBuffer[++lastPos] = ch; else ERROR1i( "sReadToken", "Token length exceed maximum of ", MAX_TOKEN_LENGTH, ".") token.type = ( ch == ':' && recognizeKeywordFlag ) ? keyword : identifier; sBuffer[lastPos+1] = '\0'; if ( token.type == keyword ) strcpy( token.value.keyValue, sBuffer); else strcpy( token.value.identValue, sBuffer); if ( token.type == identifier) if ( ch != '\0' ) --stringPosition; else endOfStringReached = TRUE; } /* This code handles integer tokens. */ else if ( isdigit(ch) ) { --stringPosition; if ( sscanf( inString+stringPosition, SCANF_Int_FORMAT, &token.value.intValue) == 1 ) { token.type = integer; while ( isdigit( inString[++stringPosition]) ) ; } else ERROR( "sReadToken", "Error in reading integer token.") } /* This code handles end-of-string tokens. */ else if ( ch == '\0' ) { token.type = eof; endOfStringReached = TRUE; } /* This code handles single-character tokens. */ else switch ( ch ) { case '(': token.type = leftParen; break; case ')': token.type = rightParen; break; case '[': token.type = leftBracket; break; case ']': token.type = rightBracket; break; case '<': token.type = leftAngle; break; case '>': token.type = rightAngle; break; case ';': token.type = semicolon; break; case '=': token.type = equal; break; case '*': token.type = asterisk; break; case '^': token.type = caret; break; case ',': token.type = comma; break; case '/': token.type = slash; break; case '.': token.type = period; break; case ':': token.type = colon; break; default: token.type = other; token.value.charValue = ch; } return token; } /*-------------------------- unreadToken ---------------------------------*/ void unreadToken( Token tokenToUnread) { tokenBuffer = tokenToUnread; bufferNonempty = TRUE; } /*-------------------------- sUnreadToken --------------------------------*/ void sUnreadToken( Token tokenToUnread) { sTokenBuffer = tokenToUnread; sBufferNonempty = TRUE; } guava-3.6/src/leon/src/inform.c0000644017361200001450000002073511026723452016324 0ustar tabbottcrontab/* File inform.c. */ #include #include #include #include "group.h" #include "groupio.h" #ifdef ALT_TIME_HEADER #include "cputime.h" #endif #ifdef TICK #undef CLK_TCK #define CLK_TCK TICK #endif #include "readgrp.h" CHECK( inform) extern GroupOptions options; void informStatistics( Unsigned ell, unsigned long nodesVisited[], unsigned long nodesPruned[], unsigned long nodesEssential[]) { Unsigned level; unsigned long totalVisited = 0, totalPruned = 0, totalEssential = 0; printf( "\n\nSummary of backtrack tree nodes traversed and pruned."); printf( "\n\n Level Nodes Nodes Nodes non- Pruning"); printf( "\n visited pruned essential percentage\n"); for ( level = 0 ; level <= ell ; ++level ) { if ( nodesEssential[level] < nodesVisited[level] ) #ifndef NOFLOAT printf( "\n %3u %10lu %10lu %10lu %6.4f", level, nodesVisited[level], nodesPruned[level], nodesVisited[level] - nodesEssential[level], (float) nodesPruned[level] / (nodesVisited[level] - nodesEssential[level]) ); #endif #ifdef NOFLOAT printf( "\n %3u %10lu %10lu %10lu", level, nodesVisited[level], nodesPruned[level], nodesVisited[level] - nodesEssential[level]); #endif else printf( "\n %3u %10lu %10lu %10lu ------", level, nodesVisited[level], nodesPruned[level], nodesVisited[level] - nodesEssential[level]); totalVisited += nodesVisited[level]; totalPruned += nodesPruned[level]; totalEssential += nodesEssential[level]; } if ( totalEssential < totalVisited ) #ifndef NOFLOAT printf( "\n total %10lu %10lu %10lu %6.4f\n", totalVisited, totalPruned, totalVisited - totalEssential, (float) totalPruned / (totalVisited - totalEssential) ); #endif #ifdef NOFLOAT printf( "\n total %10lu %10lu %10lu\n", totalVisited, totalPruned); #endif else printf( "\n total %10lu %10lu %10lu ------\n", totalVisited, totalPruned, totalVisited - totalEssential); } /*-------------------------- informOptions ---------------------------------*/ void informOptions(void) { printf("\nOptions: -b:%u -g:%u -r:%u -mb:%u -mw:%u\n", (unsigned) options.maxBaseChangeLevel, (unsigned) options.maxStrongGens, (unsigned) options.trimSGenSetToSize, (unsigned) options.maxBaseSize, (unsigned) options.maxWordLength); } /*-------------------------- informGroup -----------------------------------*/ void informGroup( const PermGroup *const G) { Unsigned i; if ( IS_SYMMETRIC(G) ) { printf( "\nGroup %s is symmetric of degree %d.\n ", G->name, G->degree); return; } printf( "\nGroup %s has order ", G->name); if ( G->order->noOfFactors == 0 ) printf( "%d", 1); else for ( i = 0 ; i < G->order->noOfFactors ; ++i ) { if ( i > 0 ) printf( " * "); printf( "%u", G->order->prime[i]); if ( G->order->exponent[i] > 1 ) printf( "^%u", G->order->exponent[i]); } printf( "\n"); } /*-------------------------- informRBase -----------------------------------*/ void informRBase( const PermGroup *const G, const RBase *const AAA, const UnsignedS basicCellSize[]) { Unsigned i, level; printf( "\nR-base construction complete."); printf( "\n\n New base for group %s:", G->name); for ( level = 1 ; level <= G->baseSize ; ++level ) printf( " %5u", G->base[level]); printf( "\n Basic orbit lengths:"); for ( i = 1 ; i <= strlen(G->name) ; ++i ) printf( " "); for ( level = 1 ; level <= G->baseSize ; ++level ) printf( " %5u", G->basicOrbLen[level]); printf( "\n\n Base for subgroup: "); for ( level = 1 ; level <= AAA->ell ; ++level ) printf( " %5u", AAA->alphaHat[level]); printf( "\n Basic cell sizes: "); for ( level = 1 ; level <= AAA->ell ; ++level ) printf( " %5u", basicCellSize[level]); printf( "\n\n"); } /*-------------------------- informSubgroup --------------------------------*/ void informSubgroup( const PermGroup *const G_pP) { Unsigned i, level; if ( !options.groupOrderMessage ) options.groupOrderMessage = "Subgroup"; printf( "\n%s computation complete.", options.groupOrderMessage); printf( "\n\n %s has order ", options.groupOrderMessage); if ( G_pP->order->noOfFactors > 0 ) for ( i = 0 ; i < G_pP->order->noOfFactors ; ++i ) { if ( i > 0 ) printf( " * "); printf( "%u", G_pP->order->prime[i]); if ( G_pP->order->exponent[i] > 1 ) printf( "^%u", G_pP->order->exponent[i]); } else printf( "1"); printf( "."); printf( "\n\n Base: "); for ( level = 1 ; level <= G_pP->baseSize ; ++level ) printf( " %5u", G_pP->base[level]); printf( "\n Basic orbit lengths:"); for ( level = 1 ; level <= G_pP->baseSize ; ++level ) printf( " %5u", G_pP->basicOrbLen[level]); printf( "\n"); } /*-------------------------- informCosetRep --------------------------------*/ void informCosetRep( Permutation *y) { Unsigned trueDegree; if ( y ) { trueDegree = y->degree; if ( !options.cosetRepMessage ) options.cosetRepMessage = "Coset representative found:"; printf( "\n%s\n\n", options.cosetRepMessage); if ( options.altInformCosetRep ) { setOutputFile( stdout); (*options.altInformCosetRep)( y); } else if ( (options.restrictedDegree ? options.restrictedDegree : y->degree) <= options.writeConjPerm ) { setOutputFile( stdout); if ( options.restrictedDegree != 0 ) { printf(" "); y->degree = options.restrictedDegree; writeCyclePerm( y, 3, 5, 72); y->degree = trueDegree; } else { printf(" "); writeCyclePerm( y, 3, 5, 72); } } else printf( " "); } else { if ( !options.noCosetRepMessage ) options.noCosetRepMessage = "Coset representative does not exist."; printf( "\n%s\n", options.noCosetRepMessage); } } /*-------------------------- informNewGenerator ----------------------------*/ void informNewGenerator( const PermGroup *const G_pP, const Unsigned newLevel) { Unsigned level; static BOOLEAN firstCall = TRUE; if ( firstCall ) { printf("\n"); firstCall = FALSE; } printf( "New generator (level %u): basic orbit lengths ", newLevel); for ( level = 1 ; level <= G_pP->baseSize ; ++level ) printf( " %u ", G_pP->basicOrbLen[level]); printf( "\n"); } /*-------------------------- informTime ------------------------------------*/ void informTime( clock_t startTime, clock_t RBaseTime, clock_t optGroupTime, clock_t backtrackTime) { clock_t totalTime; #ifdef NOFLOAT unsigned long secs, hSecs; #endif backtrackTime -= optGroupTime; optGroupTime -= RBaseTime; RBaseTime -= startTime; totalTime = RBaseTime + optGroupTime + backtrackTime; #ifndef NOFLOAT printf( "\n\nTime: RBase construction: %6.2lf sec", (double) RBaseTime / CLK_TCK); printf( "\n Group optimization: %6.2lf sec", (double) optGroupTime / CLK_TCK); printf( "\n Backtrack search: %6.2lf sec", (double) backtrackTime / CLK_TCK); printf( "\n TOTAL: %6.2lf sec", (double) totalTime / CLK_TCK); #endif #ifdef NOFLOAT secs = RBaseTime / CLK_TCK; hSecs = (RBaseTime - secs * CLK_TCK) * 100; hSecs /= CLK_TCK; printf( "\n\nTime: RBase construction: %4lu.%02lu sec", secs, hSecs); secs = optGroupTime / CLK_TCK; hSecs = (optGroupTime - secs * CLK_TCK) * 100; hSecs /= CLK_TCK; printf( "\n Group optimization: %4lu.%02lu sec", secs, hSecs); secs = backtrackTime / CLK_TCK; hSecs = (backtrackTime - secs * CLK_TCK) * 100; hSecs /= CLK_TCK; printf( "\n Backtrack search: %4lu.%02lu sec", secs, hSecs); secs = totalTime / CLK_TCK; hSecs = (totalTime - secs * CLK_TCK) * 100; hSecs /= CLK_TCK; printf( "\n TOTAL: %4lu.%02lu sec", secs, hSecs); #endif printf( "\n"); } guava-3.6/src/leon/src/matauto.sh0000755017361200001450000000003611026723452016667 0ustar tabbottcrontab#!/bin/sh desauto -matrix $* guava-3.6/src/leon/src/generate.c0000644017361200001450000005251611026723452016626 0ustar tabbottcrontab/* File generate.c. */ /* Copyright (C) 1992 by Jeffrey S. Leon. This software may be used freely for educational and research purposes. Any other use requires permission from the author. */ /* Main program for generate command, which may be used to find a base and strong generating set for a permutation group using the random Schreier and/or Schreier-Todd-Coxeter-Sims methods. The format of the command is: generate where the meaning of the parameters is as follows: : the permutation group G for which a base and strong generating set is to be found. : the same permutation group G with a base and strong generating set, depending on options, possibly a strong presentation. The general options are as follows: -nr Omit random-Schreier phase. -ns Omit Schreier-Todd-Coxeter-Sims phase (automatically omitted if order is known in advance and random-Schreier phases generates full order, unless the -p option is given. -p Find a presentation. -q Don't write status information to standard output. -in: Group G is contained in . Only base of is used; need not be valid as long as its base , base size, and degree fields are filled in correctly. -overwrite Overwrite, rather than append to, the output file. -i Image format for output group. -c Cycle format for output group. -gn: Options applicable specifically to the random-Schreier phase are: -s: Seed for random number generator. -tr: Random Schreier phase terminates after this many consecutive "successes" (quasi-random elements that are factorable). -ti: This many consecutive non-involutory generators will be rejected in an attempt to choose involutory generators. -th:k This many consecutive generators will be rejected in an attempt to choose a generator of order 3 (or less). -nro Suppress normal attempt to reduce generator order by replacing generators with powers. -wi:w,x Here w and x are integers with w <= x. The word length increment will be random between w and x. -z Redundant strong generators will be removed after the algorithm completes.. Options applicable to the STCS phase are: -go:m Automatically include the order of each generator as a relator when the generator order does not exceed m (default 15). -po:m Automatically include the order of each product of generators as a relator when the product order does not exceed m (default 5). -x2:m If the STCS phase terminates with more than m generators (excluding inverses), redundant generators are removed. -pr:a,b,c,d,e Determines priority for relator selection. The priority of a relator r is a - b * (len+symLen)/2. Relators are selected if their priority exceeds c + d * chosen - e * omitted, where chosen represents the number of relators chosen at this level and omitted represents the number not chosen. -sh:i1,k1,i2.. Specifies which cyclic shifts of relators will be used in the Felsch enumeration. Specifies that an i1 position shift will be used if the relator priority exceeds the selection priority by at least k1, etc. By default, all shifts are always used. -x:k Specifies use of up to k extra cosets during enumeration (default 0). When k > 0, a different procedure is used to check point stabilizers. -y:m The number of extra cosets used will be m/100 * degree (rounded up), but in no case more than k, as above (default 10). */ #include #include #include #include #include #include #define MAIN #include "group.h" #include "groupio.h" #include "enum.h" #include "storage.h" #ifdef ALT_TIME_HEADER #include "cputime.h" #endif #ifdef TICK #undef CLK_TCK #define CLK_TCK TICK #endif #include "errmesg.h" #include "new.h" #include "readgrp.h" #include "randschr.h" #include "stcs.h" #include "util.h" static void nameGenerators( PermGroup *const H, char genNamePrefix[]); static void informGenerateTime( clock_t startTime, clock_t randSchrTime, clock_t optGroupTime, clock_t stcsTime); static void verifyOptions(void); GroupOptions options; STCSOptions sOptions; Unsigned relatorSelection[5] = {1000,0,800,0,0}; Unsigned shiftSelection[11] = {UNKNOWN,UNKNOWN,UNKNOWN,UNKNOWN,UNKNOWN, UNKNOWN,UNKNOWN,UNKNOWN,UNKNOWN,UNKNOWN, UNKNOWN}; Unsigned shiftPriority[11]; int main( int argc, char *argv[]) { char groupFileName[MAX_FILE_NAME_LENGTH] = "", genGroupFileName[MAX_FILE_NAME_LENGTH] = "", containingGroupFileName[MAX_FILE_NAME_LENGTH] = ""; char groupLibraryName[MAX_NAME_LENGTH+1] = "", genGroupLibraryName[MAX_NAME_LENGTH+1] = "", genGroupObjectName[MAX_NAME_LENGTH+1] = "", containingGroupLibraryName[MAX_NAME_LENGTH+1] = "", prefix[MAX_FILE_NAME_LENGTH], suffix[MAX_NAME_LENGTH]; Unsigned i, j, optionCountPlus1, level; BOOLEAN omitRandomSchreierOption, omitStcsOption, presentationOption, quietOption, cycleFormatFlag, imageFormatFlag, removeRedunStrGens, noBackupFlag; Unsigned trimStrGenSet1, trimStrGenSet2; PermGroup *G, *containingGroup; char comment[60] = ""; UnsignedS *pointList = allocIntArrayBaseSize(); char tempStr[12]; char *strPtr, *commaPtr; Unsigned *knownBase = allocIntArrayBaseSize(); RandomSchreierOptions rOptions = {47,UNKNOWN,UNKNOWN,UNKNOWN,UNKNOWN, UNKNOWN,UNKNOWN,UNKNOWN,UNKNOWN}; clock_t startTime, randSchrTime, optGroupTime, stcsTime; /* Provide usage info if no arguments are specified. */ if ( argc == 1 ) { printf( "\nUsage: generate [options] originalPermGroup permGroupWithBaseSGS\n"); freeIntArrayBaseSize( pointList); freeIntArrayBaseSize( knownBase); return 0; } /* Check for limits option. If present in position 1 give limits and return. */ if ( strcmp( argv[1], "-l") == 0 || strcmp( argv[1], "-L") == 0 ) { showLimits(); freeIntArrayBaseSize( pointList); freeIntArrayBaseSize( knownBase); return 0; } /* Check for verify option. If present, perform verify (Note verifyOptions terminates program). */ if ( strcmp( argv[1], "-v") == 0 || strcmp( argv[1], "-V") == 0 ) verifyOptions(); /* Check for 1 or 2 parameters following options. */ for ( optionCountPlus1 = 1 ; optionCountPlus1 <= argc-1 && argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 ) ; if ( argc - optionCountPlus1 < 1 || argc - optionCountPlus1 > 2 ) { printf( "\n\nError: 1 or 2 non-option parameters are required.\n"); exit(ERROR_RETURN_CODE); } /* Process options. */ prefix[0] = '\0'; suffix[0] = '\0'; options.maxBaseSize = DEFAULT_MAX_BASE_SIZE; sOptions.maxDeducQueueSize = UNKNOWN; sOptions.genOrderLimit = 13; sOptions.prodOrderLimit = 3; sOptions.maxExtraCosets = 0; sOptions.percentExtraCosets = 10; omitRandomSchreierOption = FALSE; omitStcsOption = TRUE; presentationOption = FALSE; rOptions.reduceGenOrder = TRUE; rOptions.rejectNonInvols = 0; removeRedunStrGens = FALSE; quietOption = FALSE; options.genNamePrefix[0] = '\0'; trimStrGenSet1 = 20; trimStrGenSet2 = 20; cycleFormatFlag = FALSE; imageFormatFlag = FALSE; noBackupFlag = FALSE; strcpy( options.outputFileMode, "w"); strcpy( options.genNamePrefix, ""); for ( i = 1 ; i < optionCountPlus1 ; ++i ) /* General options. */ if ( strcmp( argv[i], "-a") == 0 ) strcpy( options.outputFileMode, "a"); else if ( strcmp( argv[i], "-c") == 0 ) cycleFormatFlag = TRUE; else if ( strcmp( argv[i], "-i") == 0 ) imageFormatFlag = TRUE; else if ( strncmp( argv[i], "-mb:", 4) == 0 ) { errno = 0; options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (cent)", "Invalid syntax for -mb option") } else if ( strncmp( argv[i], "-mw:", 4) == 0 ) { errno = 0; options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (cent)", "Invalid syntax for -mw option") } else if ( strncmp(argv[i],"-n:",3) == 0 ) strcpy( genGroupObjectName, argv[i]+3); else if ( strcmp( argv[i], "-nb") == 0 ) noBackupFlag = TRUE; else if ( strcmp( argv[i], "-overwrite") == 0 ) strcpy( options.outputFileMode, "w"); else if ( strncmp( argv[i], "-p:", 3) == 0 ) { strcpy( prefix, argv[i]+3); } else if ( strcmp( argv[i], "-q") == 0 ) quietOption = TRUE; else if ( strncmp( argv[i], "-t:", 3) == 0 ) { strcpy( suffix, argv[i]+3); } else if ( strcmp( argv[i], "-z") == 0 ) { removeRedunStrGens = TRUE; } /* Method selection options. */ else if ( strcmp( argv[i], "-nr") == 0 ) omitRandomSchreierOption = TRUE; else if ( strcmp( argv[i], "-stcs") == 0 ) omitStcsOption = FALSE; /* Random Schreier options. */ else if ( strcmp( argv[i], "-nro") == 0 ) rOptions.reduceGenOrder = FALSE; else if ( strncmp(argv[i],"-s:",3) == 0 ) { errno = 0; rOptions.initialSeed = (unsigned long) strtol( argv[i]+3, NULL, 0); if ( errno ) ERROR1s( "main (generate command)", "Invalid option ", argv[i], ".") } else if ( strncmp(argv[i],"-ti:",4) == 0 ) { errno = 0; rOptions.rejectNonInvols = (unsigned long) strtol( argv[i]+4, NULL, 0); if ( errno ) ERROR1s( "main (generate command)", "Invalid option ", argv[i], ".") } else if ( strncmp(argv[i],"-tr:",4) == 0 ) { errno = 0; rOptions.stopAfter = (unsigned long) strtol( argv[i]+4, NULL, 0); if ( errno ) ERROR1s( "main (generate command)", "Invalid option ", argv[i], ".") } else if ( strncmp( argv[i], "-wi:", 4) == 0 ) { errno = 0; rOptions.minWordLengthIncrement = (unsigned long) strtol( argv[i]+4, &commaPtr, 0); if ( errno || *commaPtr != ',' ) ERROR1s( "main (generate command)", "Invalid syntax in option ", argv[i], ".") rOptions.maxWordLengthIncrement = (unsigned long) strtol( commaPtr+1, NULL, 0); if ( errno ) ERROR1s( "main (generate command)", "Invalid syntax in option ", argv[i], ".") } /* STCS options. */ else if ( strncmp( argv[i], "-in:", 4) == 0 ) { parseLibraryName( argv[i]+4, "", "", containingGroupFileName, containingGroupLibraryName); } else if ( strncmp(argv[i],"-pr:",4) == 0 ) { errno = 0; commaPtr = argv[i]+3; for ( j = 0 ; j <= 4 ; ++j ) { strPtr = commaPtr + 1; relatorSelection[j] = (Unsigned) (unsigned long) strtol( strPtr, &commaPtr, 0); if ( errno || ( j < 4 && *commaPtr != ',') ) ERROR1s( "main (generate command)", "Invalid option ", argv[i], ".") } } else if ( strncmp(argv[i],"-sh:",4) == 0 ) { errno = 0; commaPtr = argv[i]+3; for ( j = 0 ; j < 10 && *commaPtr != '\0' ; ++j ) { strPtr = commaPtr + 1; shiftSelection[j] = (Unsigned) (unsigned long) strtol( strPtr, &commaPtr, 0); if ( errno || *commaPtr != ',' ) ERROR1s( "main (generate command)", "Invalid option ", argv[i], ".") strPtr = commaPtr + 1; shiftPriority[j] = (Unsigned) (unsigned long) strtol( strPtr, &commaPtr, 0); if ( errno || (*commaPtr != ',' && *commaPtr != '\0') ) ERROR1s( "main (generate command)", "Invalid option ", argv[i], ".") } } else if ( strncmp(argv[i],"-th:",4) == 0 ) { errno = 0; rOptions.rejectHighOrder = (unsigned long) strtol( argv[i]+4, NULL, 0); if ( errno ) ERROR1s( "main (generate command)", "Invalid option ", argv[i], ".") } else if ( strncmp(argv[i],"-go:",4) == 0 ) { errno = 0; sOptions.genOrderLimit = (unsigned long) strtol( argv[i]+4, NULL, 0); if ( errno ) ERROR1s( "main (generate command)", "Invalid option ", argv[i], ".") } else if ( strncmp(argv[i],"-po:",4) == 0 ) { errno = 0; sOptions.prodOrderLimit = (unsigned long) strtol( argv[i]+4, NULL, 0); if ( errno ) ERROR1s( "main (generate command)", "Invalid option ", argv[i], ".") } else if ( strncmp(argv[i],"-x:",3) == 0 ) { errno = 0; sOptions.maxExtraCosets = (unsigned long) strtol( argv[i]+3, NULL, 0); if ( errno ) ERROR1s( "main (generate command)", "Invalid option ", argv[i], ".") } else if ( strncmp(argv[i],"-y:",3) == 0 ) { errno = 0; sOptions.percentExtraCosets = (unsigned long) strtol( argv[i]+3, NULL, 0); if ( errno ) ERROR1s( "main (generate command)", "Invalid option ", argv[i], ".") } else ERROR1s( "main (generate command)", "Invalid option ", argv[i], ".") /* Compute maximum degree and word length. */ options.maxWordLength = 200 + 5 * options.maxBaseSize; options.maxDegree = MAX_INT - 2 - options.maxBaseSize; /* Compute names for input and output groups. */ parseLibraryName( argv[optionCountPlus1], prefix, suffix, groupFileName, groupLibraryName); if ( argc - optionCountPlus1 == 2 ) parseLibraryName( argv[optionCountPlus1+1], "", "", genGroupFileName, genGroupLibraryName); else { strcpy( genGroupFileName, groupFileName); strcpy( genGroupLibraryName, groupLibraryName); } /* Set initialize option for STCS. */ sOptions.initialize = omitRandomSchreierOption; /* Set default generator name prefix, if not specified. */ if ( options.genNamePrefix[0] == ' ' ) strncpy( options.genNamePrefix, genGroupLibraryName, 4); /* Read in input group, and base for containing group, if requested. */ G = readPermGroup( groupFileName, groupLibraryName, 0, ""); if ( containingGroupFileName[0] ) { containingGroup = readPermGroup( containingGroupFileName, containingGroupLibraryName, G->degree, ""); for ( i = 1 ; i <= containingGroup->baseSize ; ++i ) knownBase[i] = containingGroup->base[i]; knownBase[containingGroup->baseSize+1] = 0; deletePermGroup( containingGroup); } startTime = CPU_TIME(); /* Apply random Schreier algorithm. */ if ( !omitRandomSchreierOption ) { /* SETUP OPTIONS STRING */ randomSchreier( G, rOptions); if ( removeRedunStrGens ) removeRedunSGens( G, 1); } randSchrTime = CPU_TIME(); optGroupTime = CPU_TIME(); /* Apply Schreier-Todd-Coxeter-Sims algorithm, if appropriate. */ if ( !omitStcsOption /* FIX THIS */ ) schreierToddCoxeterSims( G, knownBase); stcsTime = CPU_TIME(); if ( !quietOption ) { informGroup(G); printf( "\n Base: "); for ( level = 1 ; level <= G->baseSize ; ++level ) printf( " %5u", G->base[level]); printf( "\n Basic orbit lengths:"); for ( level = 1 ; level <= G->baseSize ; ++level ) printf( " %5u", G->basicOrbLen[level]); printf( "\n"); informGenerateTime( startTime, randSchrTime, optGroupTime, stcsTime); } /* Write out the generated group. */ sprintf( comment, "The group %s, base and strong generating set constucted.", G->name); if ( cycleFormatFlag ) G->printFormat = cycleFormat; if ( imageFormatFlag ) G->printFormat = imageFormat; if ( genGroupObjectName[0] ) strcpy( G->name, genGroupObjectName); if ( argc - optionCountPlus1 == 1 && !noBackupFlag ) if ( rename(groupFileName,"oldgroup") == -1 ) ERROR1s( "main (generate command)", "Original group ", groupFileName, " could not be renamed as oldgroup.") writePermGroup( genGroupFileName, genGroupLibraryName, G, comment); /* Free pseudo-stack storage. */ freeIntArrayBaseSize( pointList); freeIntArrayBaseSize( knownBase); return 0; } /*-------------------------- nameGenerators ------------------------------*/ static void nameGenerators( PermGroup *const H, char genNamePrefix[]) { Unsigned i; Permutation *gen; if ( genNamePrefix[0] == '\0' ) { strncpy( genNamePrefix, H->name, 4); genNamePrefix[4] = '\0'; } for ( gen = H->generator , i = 1 ; gen ; gen = gen->next , ++i ) { strcpy( gen->name, genNamePrefix); sprintf( gen->name + strlen(gen->name), "%02d", i); } } /*-------------------------- verifyOptions -------------------------------*/ static void verifyOptions(void) { CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH, MAX_PRIME_FACTORS, MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS, MAX_EXTRA, XLARGE, SGND, NFLT}; extern void xaddsge( CompileOptions *cOpts); extern void xbitman( CompileOptions *cOpts); extern void xchbase( CompileOptions *cOpts); extern void xcopy ( CompileOptions *cOpts); extern void xcstbor( CompileOptions *cOpts); extern void xerrmes( CompileOptions *cOpts); extern void xessent( CompileOptions *cOpts); extern void xfactor( CompileOptions *cOpts); extern void xinform( CompileOptions *cOpts); extern void xnew ( CompileOptions *cOpts); extern void xoldcop( CompileOptions *cOpts); extern void xpermgr( CompileOptions *cOpts); extern void xpermut( CompileOptions *cOpts); extern void xprimes( CompileOptions *cOpts); extern void xrandgr( CompileOptions *cOpts); extern void xrandsc( CompileOptions *cOpts); extern void xreadgr( CompileOptions *cOpts); extern void xrelato( CompileOptions *cOpts); extern void xstcs ( CompileOptions *cOpts); extern void xstorag( CompileOptions *cOpts); extern void xtoken ( CompileOptions *cOpts); extern void xutil ( CompileOptions *cOpts); xaddsge( &mainOpts); xbitman( &mainOpts); xchbase( &mainOpts); xcopy ( &mainOpts); xcstbor( &mainOpts); xerrmes( &mainOpts); xessent( &mainOpts); xfactor( &mainOpts); xinform( &mainOpts); xnew ( &mainOpts); xoldcop( &mainOpts); xpermgr( &mainOpts); xpermut( &mainOpts); xprimes( &mainOpts); xrandgr( &mainOpts); xrandsc( &mainOpts); xreadgr( &mainOpts); xrelato( &mainOpts); xstcs ( &mainOpts); xstorag( &mainOpts); xtoken ( &mainOpts); xutil ( &mainOpts); } /*-------------------------- informGenerateTime ----------------------------*/ static void informGenerateTime( clock_t startTime, clock_t randSchrTime, clock_t optGroupTime, clock_t stcsTime) { clock_t totalTime; #ifdef NOFLOAT unsigned long secs, hSecs; #endif stcsTime -= optGroupTime; optGroupTime -= randSchrTime; randSchrTime -= startTime; totalTime = randSchrTime + optGroupTime + stcsTime; #ifndef NOFLOAT printf( "\nTime: Random Schreier: %6.2lf sec", (double) randSchrTime / CLK_TCK); printf( "\n Gen optimization: %6.2lf sec", (double) optGroupTime / CLK_TCK); printf( "\n Schr-Todd-Cox-Sims: %6.2lf sec", (double) stcsTime / CLK_TCK); printf( "\n TOTAL: %6.2lf sec", (double) totalTime / CLK_TCK); #endif #ifdef NOFLOAT secs = randSchrTime / CLK_TCK; hSecs = (randSchrTime - secs * CLK_TCK) * 100; hSecs /= CLK_TCK; printf( "\nTime: Random Schreier: %4lu.%02lu sec", secs, hSecs); secs = optGroupTime / CLK_TCK; hSecs = (optGroupTime - secs * CLK_TCK) * 100; hSecs /= CLK_TCK; printf( "\n Gen optimization: %4lu.%02lu sec", secs, hSecs); secs = stcsTime / CLK_TCK; hSecs = (stcsTime - secs * CLK_TCK) * 100; hSecs /= CLK_TCK; printf( "\n Schr-Todd-Cox-Sims: %4lu.%02lu sec", secs, hSecs); secs = totalTime / CLK_TCK; hSecs = (totalTime - secs * CLK_TCK) * 100; hSecs /= CLK_TCK; printf( "\n TOTAL: %4lu.%02lu sec", secs, hSecs); #endif printf( "\n"); } guava-3.6/src/leon/src/new.c0000644017361200001450000003522411026723452015622 0ustar tabbottcrontab/* File new.c. Contains functions to create new objects and delete objects so created. Actual allocation of memory is handled by invoking functions from storage.c. The functions included here are: */ #include #include #include "group.h" #include "errmesg.h" #include "partn.h" #include "storage.h" CHECK( new) /*-------------------------- deletePartition ------------------------------*/ void deletePartition( Partition *partn) { freeIntArrayDegree( partn->pointList); freeIntArrayDegree( partn->invPointList); freeIntArrayDegree( partn->cellNumber); freeIntArrayDegree( partn->startCell); freePartition( partn); } /*-------------------------- newPartitionStack ----------------------------*/ /* This function creates a new partition stack of specified degree and initializes it to a stack of height 1 in which the top (and only) partition is trivial. It returns a pointer to the new partition stack. */ PartitionStack *newPartitionStack( const Unsigned degree) /* The degree for the partition stack. */ { PartitionStack *newStack = allocPartitionStack(); Unsigned i; newStack->degree = degree; newStack->height = 1; newStack->pointList = allocIntArrayDegree(); newStack->invPointList = allocIntArrayDegree(); for ( i = 1 ; i <= degree ; ++i ) newStack->pointList[i] = newStack->invPointList[i] = i; newStack->pointList[degree+1] = newStack->invPointList[degree+1] = 0; newStack->cellNumber = allocIntArrayDegree(); for ( i = 1 ; i <= degree ; ++i ) newStack->cellNumber[i] = 1; newStack->parent = allocIntArrayDegree(); newStack->startCell = allocIntArrayDegree(); newStack->startCell[1] = 1; newStack->cellSize = allocIntArrayDegree(); newStack->cellSize[1] = degree; return newStack; } /*-------------------------- deletePartitionStack -------------------------*/ void deletePartitionStack( PartitionStack *partnStack) { freeIntArrayDegree( partnStack->pointList); freeIntArrayDegree( partnStack->invPointList); freeIntArrayDegree( partnStack->cellNumber); freeIntArrayDegree( partnStack->parent); freeIntArrayDegree( partnStack->startCell); freeIntArrayDegree( partnStack->cellSize); freePartitionStack( partnStack); } /*-------------------------- newCellPartitionStack ------------------------*/ /* This function creates a new cell partition stack of based on a specified partition and initializes it to a stack of height 1 in which each cell is in its own cell group. It returns a pointer to the new partition stack. */ CellPartitionStack *newCellPartitionStack( Partition *basePartn) /* The base partition. */ { CellPartitionStack *newCellStack = (CellPartitionStack *) malloc( sizeof(CellPartitionStack) ); Unsigned i, cellCount; newCellStack->basePartn = basePartn; newCellStack->height = 1; newCellStack->cellCount = cellCount = numberOfCells( basePartn); newCellStack->cellList = malloc( (cellCount+2)*sizeof(UnsignedS) ); newCellStack->invCellList = malloc( (cellCount+2)*sizeof(UnsignedS) ); for ( i = 1 ; i <= cellCount ; ++i ) newCellStack->cellList[i] = newCellStack->invCellList[i] = i; newCellStack->cellList[cellCount+1] = 0; newCellStack->invCellList[cellCount+1] = 0; newCellStack->cellGroupNumber = malloc( (cellCount+2)*sizeof(UnsignedS) ); for ( i = 1 ; i <= cellCount ; ++i ) newCellStack->cellGroupNumber[i] = 1; newCellStack->parentGroup = malloc( (cellCount+2)*sizeof(UnsignedS) ); newCellStack->parentGroup[1] = 0; newCellStack->startCellGroup = malloc( (cellCount+2)*sizeof(UnsignedS) ); newCellStack->startCellGroup[1] = 1; newCellStack->cellGroupSize = malloc( (cellCount+2)*sizeof(UnsignedS) ); newCellStack->cellGroupSize[1] = cellCount; newCellStack->totalGroupSize = malloc( (cellCount+2)*sizeof(UnsignedS) ); newCellStack->totalGroupSize[1] = basePartn->degree; return newCellStack; } /*-------------------------- newIdentityPerm ------------------------------*/ /* This function creates a new permutation of a specified degree and initializes it to the identity. The name is set to a null string. The returns a pointer to the permutation. */ Permutation *newIdentityPerm( Unsigned degree) /* The degree for the new permutation. */ { Permutation *newPerm = allocPermutation(); Unsigned pt; newPerm->name[0] = '\0'; newPerm->degree = degree; newPerm->invImage = newPerm->image = allocIntArrayDegree(); for ( pt = 1 ; pt <= degree ; ++pt ) newPerm->image[pt] = pt; newPerm->image[degree+1] = 0; newPerm->word = NULL; return newPerm; } /*-------------------------- newUndefinedPerm -----------------------------*/ /* This function creates a new permutation of specified degree. Space is allocated for the image array (It remains uninitialized), but not for the inverse image array. The function returns a pointer to the new permutation. */ Permutation *newUndefinedPerm( const Unsigned degree) /* The degree for the new permutation. */ { Permutation *newPerm = allocPermutation(); newPerm->degree = degree; newPerm->image = allocIntArrayDegree(); newPerm->image[degree+1] = 0; newPerm->invImage = NULL; newPerm->word = NULL; return newPerm; } /*-------------------------- deletePermutation ----------------------------*/ /* This function deletes a permutation created with one of the functions above. */ void deletePermutation( Permutation *oldPerm) /* The permutation to be deleted. */ { if ( oldPerm->image ) { freeIntArrayDegree( oldPerm->image); if ( oldPerm->invImage != NULL && oldPerm->invImage != oldPerm->image ) freeIntArrayDegree( oldPerm->invImage); } freePermutation( oldPerm); } /*-------------------------- newTrivialPermGroup --------------------------*/ /* This function creates a new permutation group of specified degree and sets it to the group of order 1. It returns a pointer to the new group. */ PermGroup *newTrivialPermGroup( Unsigned degree) /* The degree for the new group. */ { PermGroup *newGroup = allocPermGroup(); newGroup->name[0] = '\0'; newGroup->degree = degree; newGroup->baseSize = 0; newGroup->order = allocFactoredInt(); newGroup->order->noOfFactors = 0; newGroup->base = allocIntArrayBaseSize(); newGroup->base[1] = 0; newGroup->basicOrbLen = allocIntArrayBaseSize(); newGroup->basicOrbit = (UnsignedS **) allocPtrArrayBaseSize(); newGroup->schreierVec = (Permutation ***) allocPtrArrayBaseSize(); newGroup->generator = NULL; newGroup->omega = NULL; return newGroup; } /*-------------------------- deletePermGroup ------------------------------*/ /* This function deletes a permutation group. All memory occupied by components of the group, including all generating permutations, is freed. */ void deletePermGroup( PermGroup *G) /* The permutation group to delete. */ { Unsigned i; Permutation *gen, *genNext; if ( G->order ) freeFactoredInt( G->order); if ( G->base ) { freeIntArrayBaseSize( G->base); if ( G->basicOrbLen ) freeIntArrayBaseSize( G->basicOrbLen ); if ( G->basicOrbit ) { for ( i = 1 ; i <= G->baseSize ; ++i ) if ( G->basicOrbit[i] ) freeIntArrayDegree( G->basicOrbit[i]); freePtrArrayBaseSize( G->basicOrbit ); } if ( G->schreierVec ) { for ( i = 1 ; i <= G->baseSize ; ++i ) if ( G->schreierVec[i] ) freePtrArrayDegree( G->schreierVec[i]); freePtrArrayBaseSize( G->schreierVec ); } if ( G->completeOrbit ) { for ( i = 1 ; i <= G->baseSize+1 ; ++i ) if ( G->completeOrbit[i] ) freeIntArrayDegree( G->completeOrbit[i]); freePtrArrayBaseSize( G->completeOrbit ); } if ( G->orbNumberOfPt ) { for ( i = 1 ; i <= G->baseSize+1 ; ++i ) if ( G->orbNumberOfPt[i] ) freeIntArrayDegree( G->orbNumberOfPt[i]); freePtrArrayBaseSize( G->orbNumberOfPt ); } if ( G->startOfOrbitNo ) { for ( i = 1 ; i <= G->baseSize ; ++i ) if ( G->startOfOrbitNo[i] ) freeIntArrayDegree( G->startOfOrbitNo[i]); freePtrArrayBaseSize( G->startOfOrbitNo ); } } for ( gen = G->generator ; gen ; gen = genNext ) { genNext = gen->next; deletePermutation( gen); } if ( G->omega ) freeIntArrayDegree( G->invOmega); if ( G->invOmega ) freeIntArrayDegree( G->invOmega); } /*-------------------------- newRBase -------------------------------------*/ /* Note invOmega field is not allocated here. */ RBase *newRBase( const Unsigned degree) { RBase *newBase = allocRBase(); newBase->k = 0; newBase->ell = 0; newBase->degree = degree; newBase->PsiStack = newPartitionStack( degree); newBase->aAA = allocRefinementArrayDegree(); newBase->n_ = allocIntArrayBaseSize(); newBase->p_ = allocIntArrayBaseSize(); newBase->alphaHat = allocIntArrayBaseSize(); newBase->a_ = allocIntArrayDegree(); newBase->b_ = allocIntArrayDegree(); newBase->omega = allocIntArrayDegree(); newBase->invOmega = allocIntArrayDegree(); return newBase; } /*-------------------------- deleteRbase ----------------------------------*/ void deleteRBase( RBase *oldBase) { if ( oldBase->PsiStack ) deletePartitionStack( oldBase->PsiStack); freeRefinementArrayDegree( oldBase->aAA); freeIntArrayBaseSize( oldBase->n_); freeIntArrayBaseSize( oldBase->p_); freeIntArrayDegree( oldBase->alphaHat); freeIntArrayDegree( oldBase->a_); freeIntArrayDegree( oldBase->b_); freeRBase( oldBase); } /*-------------------------- newRPriorityQueue-----------------------------*/ /* This function creates a new, initially-empty R-Priority queue. */ RPriorityQueue *newRPriorityQueue( const Unsigned degree, const Unsigned maxSize) { RPriorityQueue *newRPriorityQueue = allocRPriorityQueue(); newRPriorityQueue->size = 0; newRPriorityQueue->degree = degree; newRPriorityQueue->maxSize = maxSize; if ( maxSize > degree / 2 ) newRPriorityQueue->pointList = allocIntArrayDegree(); else { newRPriorityQueue->pointList = malloc( (maxSize+2) * sizeof(Unsigned) ); if ( !newRPriorityQueue->pointList ) ERROR( "newRPriorityQueue", "Out of memory.") } return newRPriorityQueue; } /*-------------------------- deleteRPriorityQueue -------------------------*/ void deleteRPriorityQueue( RPriorityQueue *oldRPriorityQueue) { if ( oldRPriorityQueue->pointList ) if ( oldRPriorityQueue->maxSize > oldRPriorityQueue->degree / 2 ) freeIntArrayDegree( oldRPriorityQueue->pointList); else free( oldRPriorityQueue->pointList ); freeRPriorityQueue( oldRPriorityQueue); } /*-------------------------- newTrivialWord -------------------------------*/ Word *newTrivialWord( void) { ERROR( "newTrivialWord", "Procedure not yet implemented."); } /*-------------------------- newZeroMatrix --------------------------------*/ Matrix_01 *newZeroMatrix( const Unsigned setSize, const Unsigned numberOfRows, const Unsigned numberOfCols) { Matrix_01 *M; Unsigned i, j; M = (Matrix_01 *) malloc( sizeof(Matrix_01) ); if ( !M ) ERROR( "newZeroMatrix", "Out of memory.") M->unused = NULL; M->field = NULL; M->entry = (char **) malloc( sizeof(char *) * (numberOfRows+2) ); if ( !M->entry ) ERROR( "newZeroMatrix", "Out of memory.") M->setSize = setSize; M->numberOfRows = numberOfRows; M->numberOfCols = numberOfCols; for ( i = 1 ; i <= numberOfRows ; ++i ) { M->entry[i] = (char *) malloc( numberOfCols+1); if ( !M->entry[i] ) ERROR( "newZeroMatrix", "Out of memory.") for ( j = 1 ; j <= numberOfCols ; ++j ) M->entry[i][j] = 0; } return M; } void deleteMatrix( Matrix_01 *matrix, const Unsigned numberOfRows) { Unsigned i; for ( i = 1 ; i <= numberOfRows ; ++i ) { free(matrix->entry[i]); } free(matrix->entry); free(matrix); } /*-------------------------- newRelatorFromWord ---------------------------*/ /* The function newRelatorFromWord( w, fbRelFlag, doubleFlag) returns a new relator created from a word w. The length and rel fields are filled in. If fbRelFlag is true, the fRel and bRel fields are also filled in. If doubleFlag is true, the rel, fRel (if present), and bRel (if present) fields contain two copies of the relator. (The length counts one copy only.) Note the rel, fRel, and bRel arrays start at 1. Relators are reduced by removing consecutive entries that are inverses; the word w is similarly reduced. NOTE INVERSE PERMUTATIONS MUST BE PRESENT. The function returns null if the relator reduces to a trivial word, or if it could not be allocated. */ Relator *newRelatorFromWord( Word *const w, const Unsigned fbRelFlag, const Unsigned doubleFlag) { Relator *r; Unsigned i, j; /* First we reduce w. If it attains length 0, return NULL. */ i = 1; while ( i < w->length-1 ) if ( w->position[i+1] == w->position[i]->invPermutation ) { for ( j = i ; j <= w->length-2 ; ++j ) w->position[j] = w->position[j+2]; w->length -= 2; if ( i > 1 ) --i; } else ++i; if ( w->length == 0 ) return NULL; /* Now we allocate and fill in fields of r. */ r = allocRelator(); r->length = w->length; r->level = UNKNOWN; r->rel = (Permutation **) malloc( (2+r->length+doubleFlag*r->length) * sizeof(Permutation *) ); if ( !r->rel ) ERROR( "newRelatorFromWord", "Out of memory.") for ( i = 1 ; i <= w->length ; ++i ) r->rel[i] = w->position[i]; if ( doubleFlag ) for ( i = w->length+1 ; i <= 2*w->length ; ++i ) r->rel[i] = w->position[i-w->length]; r->rel[i] = NULL; if ( fbRelFlag ) { r->fRel = (Unsigned **) malloc( (2+r->length+doubleFlag*r->length) * sizeof(Unsigned *) ); if ( !r->fRel ) ERROR( "newRelatorFromWord", "Out of memory.") r->bRel = (Unsigned **) malloc( (2+r->length+doubleFlag*r->length) * sizeof(Unsigned *) ); if ( !r->bRel ) ERROR( "newRelatorFromWord", "Out of memory.") for ( i = 1 ; i <= (1+doubleFlag)*w->length ; ++i ) { r->fRel[i] = r->rel[i]->image; r->bRel[i] = r->rel[i]->invImage; } r->fRel[i] = NULL; r->bRel[i] = NULL; } return r; } guava-3.6/src/leon/src/randschr.c0000644017361200001450000003665211026723452016643 0ustar tabbottcrontab/* File randschr.c. */ #include #include #include #include "group.h" #include "groupio.h" #include "addsgen.h" #include "cstborb.h" #include "errmesg.h" #include "essentia.h" #include "factor.h" #include "new.h" #include "oldcopy.h" #include "permgrp.h" #include "permut.h" #include "randgrp.h" #include "storage.h" #include "token.h" extern GroupOptions options; CHECK( randsc) extern Unsigned primeList[]; /*-------------------------- removeIdentityGens ---------------------------*/ /* This function removes any identity generators for a group G. It is assumed that the group does not have a base and strong generating set; in particular, Schreier vectors are not modified. (Presumably they are not present.) */ void removeIdentityGens( PermGroup *const G) /* The group G mentioned above. */ { Permutation *gen, *tempGen; for ( gen = G->generator ; gen ; gen = gen->next ) if ( isIdentity( gen) ) { tempGen = gen; if ( tempGen->last ) { tempGen->last->next = tempGen->next; gen = tempGen->last; } else { G->generator = tempGen->next; gen = G->generator; } if ( tempGen->next ) tempGen->next->last = tempGen->last; deletePermutation( tempGen); } } /*-------------------------- adjoinGenInverses ----------------------------*/ /* This function adjoins to each generator in a permutation group G (not having a base and strong generating set) the array of inverse images, provided it is not already present. For involutory generators, G->image and G->invImage point to the same array. */ void adjoinGenInverses( PermGroup *const G) /* The group mentioned above. */ { Permutation *gen; for ( gen = G->generator ; gen ; gen = gen->next ) if ( !gen->invImage ) adjoinInvImage( gen); } /*-------------------------- initializeBase -------------------------------*/ /* This function constructs an initial segment of the base for a permutation group G. When called, the base must not exist (G->base==NULL). The initial base points are selected so that, upon return, each generator moves some base point. The function attempts to choose base points so that as many generators as possible (but not all) fix an initial segment of the base. The only field in the group G that is allocated is the base field. */ void initializeBase( PermGroup *const G) /* The group G mentioned above. */ { Unsigned pt, count, maxCount, newBasePt; BOOLEAN ok; Permutation *gensFixingBase, *perm, *lastPerm; G->baseSize = 0; /* The xNext field of the generators will be used to maintain a singly- linked list of those generators fixing the initial segment of the base chosen so far. Here the list is initialized to all generators. */ gensFixingBase = G->generator; for ( perm = G->generator ; perm ; perm = perm->next ) perm->xNext = perm->next; /* As long as some generator fixes the initial base segment, we find a new base point fixed by a maximal number (but not all) such generators. A noninvolutory generator is counted twice. */ while ( gensFixingBase ) { maxCount = UNKNOWN; for ( pt = 1 ; pt <= G->degree ; ++pt ) { for ( count = 0 , ok = FALSE , perm = gensFixingBase ; perm ; perm = perm ->xNext ) if ( perm->image[pt] == pt ) count += (perm->image == perm->invImage) ? 1 : 2; else ok = TRUE; if ( (maxCount == UNKNOWN || count > maxCount) && ok ) { newBasePt = pt; maxCount = count; } } if ( G->baseSize < options.maxBaseSize ) G->base[++G->baseSize] = newBasePt; else ERROR1i( "initializeBase", "Base size exceeded maximum of ", options.maxBaseSize, ". Rerun with -mb option.") /* Here we reconstruct the list of generators fixing the initial base segment. */ for ( perm = gensFixingBase , gensFixingBase = NULL ; perm ; perm = perm->xNext ) if ( perm->image[newBasePt] == newBasePt ) { if ( gensFixingBase ) lastPerm->xNext = perm; else gensFixingBase = perm; lastPerm = perm; } if ( gensFixingBase ) lastPerm->xNext = NULL; } } /*-------------------------- randomizeGen ---------------------------------*/ /* This function produces a (hopefully) quasi-random element of a group G by taking a previously-computed quasi-random element (randGen) any multiplying it on the right by a random word of length in a specified range (count1,count1+1,...,count2) in a list (genList) of permutations (which should generate the group G). The length of the word is pseudo-random in the range given above. */ static void randomizeGen( const Unsigned genListLength, /* The length of the list genList. */ const Permutation *const genList[], /* The list of (generating) perms. */ const Unsigned count1, /* The minimum word length, as above. */ const Unsigned count2, /* The maximum word length, as above. */ Permutation *const randGen) /* The old and new quasi-random elt. */ { Unsigned i, wordLength = count1 + ( (count2 > count1) ? randInteger( 0, count2-count1) : 0); for ( i = 1 ; i <= wordLength ; ++i ) rightMultiply( randGen, genList[ randInteger(1,genListLength) ]); } /*-------------------------- factorGroupElt -------------------------------*/ /* This function writes an element (perm) of a permutation group G as perm = u_1' u_2' ... u_{j-1}' h where u_1',...,u_{j-1}' are inverses of coset representatives (u_p' in G^(p)) and h is an element of G^(j-1) (i.e., h has level j) such that one of the following holds: 1) j <= G->baseSize and h maps G->base[j] outside the j'th basic orbit. 2) j == G->baseSize+1 and h != 1. 3) j == G->baseSize+1 and h = 1. It returns TRUE in case (3) above and FALSE otherwise. It also replaces perm by h and returns the value of j as finalLevel. */ static BOOLEAN factorGroupElt( const PermGroup *const G, /* The permutation group, as above. */ Permutation *const perm, /* The permutation to factor, as above. */ Permutation *const h, /* Set to the permutation h, as above. Must be preallocated of correct degree. */ Unsigned *const finalLevel) /* The value of j, as above. */ { Unsigned level, img; copyPermutation( perm, h); for ( level = 1 ; level <= G->baseSize ; ++level ) { img = h->image[G->base[level]]; if ( G->schreierVec[level][img] ) while ( G->schreierVec[level][img] != FIRST_IN_ORBIT ) { rightMultiplyInv( h, G->schreierVec[level][img]); img = h->image[G->base[level]]; } else break; } *finalLevel = level; if ( *finalLevel == G->baseSize+1 ) return isIdentity( h); else return FALSE; } /*-------------------------- replaceByPower -------------------------------*/ void replaceByPower( const PermGroup *const G, const Unsigned level, Permutation *const h) { unsigned long hOrder; Unsigned i, img, hCycleLen; UnsignedS *hCycle = allocIntArrayDegree(); if ( level <= G->baseSize ) { /* Replace h by h^d, where d is maximal subject to d dividing |h| and h^d mapping G->base[level] outside the level'th basic orbit. */ img = G->base[level]; hCycleLen = 0; do { hCycle[hCycleLen++] = img; img = h->image[img]; } while ( img != G->base[level] ); for ( i = 2 ; i <= hCycleLen/2 ; ++i ) if ( hCycleLen % i == 0 && G->schreierVec[level][hCycle[hCycleLen/i]] == NULL ) { raisePermToPower( h, hCycleLen / i); break; } } else { /* Replace h by h^d, where d is maximal subject to d dividing |h| and d < |h|. */ hOrder = permOrder( h); for ( i = 0 ; primeList[i] != 0 ; ++i ) { if ( hOrder % primeList[i] == 0 ) raisePermToPower( h, hOrder / primeList[i]); break; } } freeIntArrayDegree( hCycle); } /*-------------------------- randSchreier ---------------------------------*/ /* The valid options are: StopAfter: n (n a positive integer, default 40) MinWordLengthIncrement: w (w a positive integer, default 7) MaxWordLengthIncrement: x (x a positive integer, default 23) ReduceGenOrder: r (r = 'y' or 'n', default 'y') RejectNonInvols: p (p a nonnegative integer, default 0) RejectHighOrder: q (q a nonnegative integer, default 0) OnlyEssentialInitGens: i (i = 'y' or 'n', default 'n') OnlyEssentialAddedGens: a (a = 'y' or 'n', default 'y') */ BOOLEAN randomSchreier( PermGroup *const G, RandomSchreierOptions rOptions) { Unsigned noOfOriginalGens, successCount, level, finalLevel, nonInvolRejectCount, levelLowestOrder; unsigned long curOrder, lowestOrder; Permutation **originalGen; FactoredInt trueGroupOrder, factoredOrbLen; Permutation *gen; Permutation *randGen = newIdentityPerm( G->degree), *h = newUndefinedPerm( G->degree), *lowestOrderH = newUndefinedPerm( G->degree), *tempPerm; /* Set defaults for options. */ if ( rOptions.initialSeed == 0 ) rOptions.initialSeed = 47; if ( rOptions.minWordLengthIncrement == UNKNOWN ) rOptions.minWordLengthIncrement = 7; if ( rOptions.maxWordLengthIncrement == UNKNOWN ) rOptions.maxWordLengthIncrement = 23; if ( rOptions.stopAfter == UNKNOWN ) if ( G->order ) rOptions.stopAfter = 10000; else rOptions.stopAfter = 40; if ( rOptions.reduceGenOrder == UNKNOWN ) rOptions.reduceGenOrder = TRUE; if ( rOptions.rejectNonInvols == UNKNOWN ) rOptions.rejectNonInvols = 0; if ( rOptions.rejectHighOrder == UNKNOWN ) rOptions.rejectHighOrder = 0; if ( rOptions.onlyEssentialInitGens == UNKNOWN ) rOptions.onlyEssentialInitGens = FALSE; if ( rOptions.onlyEssentialAddedGens == UNKNOWN ) rOptions.onlyEssentialAddedGens = TRUE; /* Initialize seed. */ initializeSeed( rOptions.initialSeed); /* Check that fields of G that must be null initially actually are. Then allocate these fields. */ if ( G->base || G->basicOrbLen || G->basicOrbit || G->schreierVec ) ERROR( "randschr", "A group field that must be null initially was " "nonnull.") G->base = allocIntArrayBaseSize(); G->basicOrbLen = allocIntArrayBaseSize(); G->basicOrbit = (UnsignedS **) allocPtrArrayBaseSize(); G->schreierVec = (Permutation ***) allocPtrArrayBaseSize(); /* If the true group order is known, set trueGroupOrder to it. Otherwise allocate G->order and mark trueGroupOrder as undefined (i.e., noOfFactors == UNKNOWN). Then set G->order to 1. */ if ( G->order ) trueGroupOrder = *G->order; else { G->order = allocFactoredInt(); trueGroupOrder.noOfFactors = UNKNOWN; } G->order->noOfFactors = 0; /* Delete identity generators from G if present. Return immediately if G is the identity group. */ removeIdentityGens( G); if ( !G->generator) { /* Should we allocate G->base, etc??? */ G->baseSize = 0; return TRUE; } /* Adjoin an inverse image array to each permutation if absent. */ adjoinGenInverses( G); /* Choose an initial segment of the base so that each generator moves some base point. */ initializeBase( G); /* Here we allocate and construct an array of pointers to the original generators. */ noOfOriginalGens = 0; originalGen = allocPtrArrayDegree(); for ( gen = G->generator ; gen ; gen = gen->next ) originalGen[++noOfOriginalGens] = gen; /* Fill in the level of each generator, and make each generator essential at its level and above. (????) */ for ( gen = G->generator ; gen ; gen = gen->next ) { gen->level = levelIn( G, gen); MAKE_NOT_ESSENTIAL_ALL( gen); for ( level = 1 ; level <= gen->level ; ++level ) MAKE_ESSENTIAL_AT_LEVEL( gen, level); } /* Construct the orbit length, basic orbit, and Schreier vector arrays. Set G->order (previously allocated) to the product of the basic orbit lengths. */ G->order->noOfFactors = 0; for ( level = 1 ; level <= G->baseSize ; ++level ) { G->basicOrbLen[level] = 1; G->basicOrbit[level] = allocIntArrayDegree(); G->schreierVec[level] = allocPtrArrayDegree(); if ( rOptions.onlyEssentialInitGens ) constructBasicOrbit( G, level, "FindEssential"); else constructBasicOrbit( G, level, "AllGensAtLevel" ); } /* The variable successCount will count the number of consecutive times the quasi-random group element can be factored successfully. */ successCount = 0; nonInvolRejectCount = 0; while ( successCount < rOptions.stopAfter && (trueGroupOrder.noOfFactors == UNKNOWN || !factEqual( G->order, &trueGroupOrder)) ) { randomizeGen( noOfOriginalGens, originalGen, rOptions.minWordLengthIncrement, rOptions.maxWordLengthIncrement, randGen); if ( factorGroupElt( G, randGen, h, &finalLevel) ) ++successCount; else { successCount = 0; if ( rOptions.reduceGenOrder ) replaceByPower( G, finalLevel, h); if ( nonInvolRejectCount >= rOptions.rejectNonInvols || isInvolution( h) ) { if ( nonInvolRejectCount > 0 && (lowestOrder < (curOrder = permOrder(h)) || lowestOrder == curOrder && levelLowestOrder > finalLevel) ) { tempPerm = h; h = lowestOrderH; lowestOrderH = tempPerm; finalLevel = levelLowestOrder; } if ( finalLevel == G->baseSize+1 ) { if ( G->baseSize >= options.maxBaseSize ) ERROR1i( "initializeBase", "Base size exceeded maximum of ", options.maxBaseSize, ". Rerun with -mb option.") G->base[++G->baseSize] = pointMovedBy( h); G->basicOrbLen[G->baseSize] = 1; G->basicOrbit[G->baseSize] = allocIntArrayDegree(); G->schreierVec[G->baseSize] = allocPtrArrayDegree(); } assignGenName( G, h); addStrongGenerator( G, h, FALSE); h = newUndefinedPerm( G->degree); nonInvolRejectCount = 0; } else { curOrder = permOrder( h); if ( curOrder == 0 ) curOrder = ULONG_MAX; if ( nonInvolRejectCount == 0 || curOrder < lowestOrder || (curOrder == lowestOrder && finalLevel > levelLowestOrder) ) { copyPermutation( h, lowestOrderH); lowestOrder = curOrder; levelLowestOrder = finalLevel; } ++nonInvolRejectCount; } } } freePtrArrayDegree( originalGen); deletePermutation( randGen); deletePermutation( h); deletePermutation( lowestOrderH); return trueGroupOrder.noOfFactors != UNKNOWN && factEqual( G->order, &trueGroupOrder); } guava-3.6/src/leon/src/field.c0000644017361200001450000000520111026723452016104 0ustar tabbottcrontab/* File field.c. Contains miscellaneous functions for computations with fields. At present, only field whose order is a prime number or 4 are implemented. */ #include #include "group.h" #include "errmesg.h" #include "new.h" #include "primes.h" #include "storage.h" CHECK( field) /*-------------------------- newFieldTable --------------------------------*/ static FieldElement **newFieldTable( const Unsigned size) { Unsigned i; FieldElement **T; T = (FieldElement **) malloc( size * sizeof(FieldElement *) ); if ( !T ) ERROR( "newFieldTable", "Out of memory."); for ( i = 0 ; i < size ; ++i ) { T[i] = (FieldElement *) malloc ( size * sizeof(FieldElement) ); if ( !T[i] ) ERROR( "newFieldTable", "Out of memory."); } return T; } /*-------------------------- buildField -----------------------------------*/ Field *buildField( Unsigned size) { FieldElement lambda, mu; const FieldElement gf4Sum[4][4] = {0,1,2,3, 1,0,3,2, 2,3,0,1, 3,2,1,0}; const FieldElement gf4Prod[4][4] = {0,0,0,0, 0,1,2,3, 0,2,3,1, 0,3,1,2}; Field *F; /* Check for valid field size. */ if ( size > 255 ) ERROR( "buildField", "Field sizes are restricted to 255.") if ( size != 4 && !isPrime(size) ) ERROR( "buildField", "At present, field sizes must be prime or 4.") /* Allocate field and fill in field size, characteristic, and exponent. */ F = allocField(); F->size = size; if ( size != 4 ) { F->characteristic = size; F->exponent = 1; } else { F->characteristic = 2; F->exponent = 2; } /* Allocate the arithmetic table arrays. */ F->sum = newFieldTable( size); F->dif = newFieldTable( size); F->prod = newFieldTable( size); F->inv = malloc( size * sizeof(FieldElement) ); if ( !F->inv ) ERROR( "buildField", "Out of memory."); /* Construct the field tables. */ for ( lambda = 0 ; lambda < size ; ++lambda) for ( mu = 0 ; mu < size ; ++mu) { if ( F->exponent == 1 ) { F->sum[lambda][mu] = ( lambda + mu) % size; F->dif[lambda][mu] = ( lambda - mu + size) % size; F->prod[lambda][mu] = ( lambda * mu) % size; } else { F->sum[lambda][mu] = gf4Sum[lambda][mu]; F->dif[lambda][mu] = gf4Sum[lambda][mu]; F->prod[lambda][mu] = gf4Prod[lambda][mu]; } if ( F->prod[lambda][mu] == 1 ) F->inv[lambda] = mu; } return F; } guava-3.6/src/leon/src/stamp-h10000644017361200001450000000004011027426040016220 0ustar tabbottcrontabtimestamp for src/leon_config.h guava-3.6/src/leon/src/field.h0000644017361200001450000000012311026723452016107 0ustar tabbottcrontab#ifndef FIELD #define FIELD extern Field *buildField( Unsigned size) ; #endif guava-3.6/src/leon/src/compcrep.c0000644017361200001450000004565511026723452016652 0ustar tabbottcrontab/* File compcrep.c. */ /* Copyright (C) 1992 by Jeffrey S. Leon. This software may be used freely for educational and research purposes. Any other use requires permission from the author. */ /* Contains function computeCosetRep, which may be used to solve coset-type problems. */ #include #include #include #include "group.h" /* Bug fix for Waterloo C (IBM 370). */ #if defined(IBM_CMS_WATERLOOC) && !defined(SIGNED) && !defined(EXTRA_LARGE) #define FIXUP (unsigned short) #define FIXUP1 short #else #define FIXUP #define FIXUP1 Unsigned #endif #ifdef ALT_TIME_HEADER #include "cputime.h" #endif #include "chbase.h" #include "cstrbas.h" #include "errmesg.h" #include "inform.h" #include "new.h" #include "optsvec.h" #include "orbit.h" #include "orbrefn.h" #include "partn.h" #include "permgrp.h" #include "permut.h" #include "rprique.h" #include "storage.h" CHECK( compcr) extern GroupOptions options; extern RefinementFamily ptStabFamily; #define BACKTRACK \ {if ( options.statistics ) \ ++nodesPruned[d]; \ while ( d > 0 && RPQ_SIZE(Gamma[d]) < (L_L ? L_L->basicOrbLen[d] : 1) ) { \ if ( options.statistics ) { \ nodesVisited[d] += RPQ_SIZE(Gamma[d]); \ nodesPruned[d] += RPQ_SIZE(Gamma[d]); \ } \ --d; \ } \ h = AAA->n_[d]; \ if ( d > 0 ) { \ popToHeight( UpsilonStack, AAA->n_[d]); \ f = AAA->invOmega[AAA->alphaHat[d]] - 1; \ for ( m = 0 ; m < orbRefnCount ; ++m ) { \ e[m] = q_[m][d] - 1; \ tHatWord[m].invWord[tHatWord[m].lengthAtLevel[d-1]] = NULL; \ tHatWord[m].revWord = initialRevWord[m] - \ tHatWord[m].lengthAtLevel[d-1]; \ } \ } \ continue;} static void buildDeltaList( PermGroup *G, /* The perm group (base/sgs known). */ UnsignedS *DeltaList[]); /* Set to the list that is constructed. */ /*-------------------------- computeCosetRep ------------------------------*/ /* Given a permutation group G and a property pP such that G_pP (the subset of G consisting of those elements satisfying pP) is a subgroup of G, this function computes and returns a new permutation group equal to G_pP. In addition to G and pP, a family RRR of pP-refinement processes must be supplied as input to the function. This is supplied in the form of three array parameters: rRR, isReducible, and orbRefnGroup. Here *rRR[1],*rRR[2],... are families of pP-refinement processes. (See file group.h for representation of a refinement family.), and *isReducible[1],*isReducible[2],... are functions taking a partition stack UpsilonStack and a refinement family (with fixed refinement mapping) as parameters such that isReducible[i] a refinement-priority pair: If the top partition UpsilonTop on UpsilonStack is RRR-irreducible, a priority of IRREDUCIBLE is returned; otherwise a refinement acting nontrivially on UpsilonTop and a priority indicated the relative desirability of this refinement are returned. For most refinement families, orbRefnGroup will be NULL; when orbRefnGroup[i] is nonnull, computeSubgroup will pass extra information to the refinement rRR[i] and reducibility-check functions isReducible[i]. */ Permutation *computeCosetRep( PermGroup *const G, /* The permutation group, as above. A base/sgs must be known (unless name is "symmetric"). */ Property *const pP, /* The subgroup-type property, as above. A value of NULL may be used to suppress checking pP.*/ RefinementFamily /* (Ptr to) null-terminated list of refinement */ *const RRR[], /* family pointers (List starts rrR[1].) */ ReducChkFn *const /* (Ptr to) null-terminated list of pointers */ isReducible[], /* to functions checking rRR-reducibility. */ SpecialRefinementDescriptor *const specialRefinement[], /* (Ptr to) list of permutation pointers, */ /* some possibly null. For nonnull pointers, */ /* computeCosetRep will keep track of perm t. */ ExtraDomain *extra[], PermGroup *const L_L, /* A known (possibly trivial) subgroup of G_pP_L. (Null pointer signifies a trivial group.) */ PermGroup *const L_R) /* A known (possibly trivial) subgroup of G_pP_R. (Null pointer signifies a trivial group.) */ { Permutation *newPerm = NULL; RBase *AAA; PartitionStack *UpsilonStack; THatWordType tHatWord[4]; UnsignedS **initialRevWord[4], **beginRevWord[4]; UnsignedS *betaHat = allocIntArrayBaseSize(); RPriorityQueue **Gamma = (RPriorityQueue **) allocPtrArrayBaseSize(); UnsignedS **DeltaList = /* DeltaList[d][1..] is a null- */ allocPtrArrayBaseSize(); /* terminated list of points i with */ /* alphahat[d] in Delta[i](K) */ Unsigned d, f, h, i, j, m, pt, delta, oldF, firstMoved; UnsignedS e[4]; UnsignedS *eta = allocIntArrayDegree(); UnsignedS* q_[4]; /* alloc (mbs+2)*sizeof(UnsignedS) each */ BOOLEAN backtrackFlag; UnsignedS *pp; UnsignedS **p; Unsigned maxBaseChangeLevel; SplitSize split; UnsignedS **minPointOfOrbit = (UnsignedS **) allocPtrArrayBaseSize(); UnsignedS **minPointKnown = (UnsignedS **) allocPtrArrayBaseSize(); UnsignedS *minPointKnownCount = allocIntArrayBaseSize(); unsigned long *nodesVisited = allocLongArrayBaseSize(); unsigned long *nodesPruned = allocLongArrayBaseSize(); unsigned long *nodesEssential = allocLongArrayBaseSize(); Permutation *gen; UnsignedS *longRepLen = allocIntArrayBaseSize(); clock_t RBaseTime, optGroupTime, backtrackTime, startTime; Unsigned orbRefnCount; UnsignedS *basicCellSize = allocIntArrayBaseSize(); /* Allocate q_. */ for ( i = 0 ; i <= 3 ; ++i ) q_[i] = allocIntArrayDegree(); /* Initialize nodesVisited and nodesPruned. */ for ( i = 0 ; i <= options.maxBaseSize+1 ; ++i ) nodesVisited[i] = nodesPruned[i] = 0; nodesVisited[0] = 1; /* Set orbRefnCount. */ for ( i = 0 ; specialRefinement[i] && specialRefinement[i]->refnType == 'O' ; ++i ) ; orbRefnCount = i; if ( options.inform ) { informOptions(); informGroup( G); } /* Figure 9, lines 3-4. These lines construct an rRR-base AAA for G. (The base and strong generating sets for G itself are changed. The bases for L_L and L_R are not changed to alphaHat. A null terminator is added to base of the containing groups. */ startTime = CPU_TIME(); AAA = constructRBase( G, RRR, isReducible, specialRefinement, basicCellSize, extra); for ( m = 0 ; specialRefinement[m] ; ++m ) specialRefinement[m]->leftGroup->base [specialRefinement[m]->leftGroup->baseSize+1] = 0; deletePartitionStack( AAA->PsiStack); AAA->PsiStack = NULL; RBaseTime = CPU_TIME(); /* Now compression is done by level in constructRBase. if ( options.compress ) compressGroup( G); */ for ( gen = G->generator ; gen ; gen = gen->next ) adjoinInverseGen( G, gen); for ( i = 1 ; i <= G->baseSize ; ++i ) longRepLen[i] = reconstructBasicOrbit( G, i); if ( options.inform ) meanCosetRepLen( G); expandSGS( G, longRepLen, basicCellSize, AAA->ell); if ( options.inform ) meanCosetRepLen( G); optGroupTime = CPU_TIME(); /* Here we adjust each generator of G such that it maps 0 to 0 and degree+1 to degree+1. This is necessary for the procedure orbRefine. */ for ( gen = G->generator ; gen ; gen = gen->next ) { gen->image[0] = gen->invImage[0] = 0; gen->image[G->degree+1] = gen->invImage[G->degree+1] = G->degree+1; } maxBaseChangeLevel = MAX( 0, MIN( options.maxBaseChangeLevel, AAA->ell) ); firstMoved = AAA->ell + 1; if ( options.statistics ) for ( i = 0 ; i <= AAA->ell ; ++i ) { nodesEssential[i] = 0; } /* Here we build an array q_[0][1],...,q_[orbRefnCount-1][AAA->ell] such that alphaHat[d] = specialRefinement[m]->leftGroup->base[q_[d]]. Here the array e is used as a temporary variable. */ for ( m = 0 ; m < orbRefnCount ; ++m ) { j = 1; for ( i = 1 ; i <= specialRefinement[m]->leftGroup->baseSize ; ++i ) if ( specialRefinement[m]->leftGroup->base[i] == AAA->alphaHat[j] ) q_[m][j++] = i; } if ( L_L ) changeBase( L_L, AAA->alphaHat ); if ( L_R ) changeBase( L_R, AAA->alphaHat ); /* Create the group K and initialize it to L (with base alphaHat). Also, if K is nontrivial, build its initial Delta-List. */ for ( i = 1 ; i <= AAA->ell+1 ; ++i ) DeltaList[i] = allocIntArrayBaseSize(); if ( L_L ) buildDeltaList( L_L, DeltaList); else for ( i = 1 ; i <= AAA->ell ; ++i ) { DeltaList[i][1] = i; DeltaList[i][2] = 0; } /* Allocate the R-Priority queues Gamma[1],...,Gamma[ell] and the permutations tHatWord[i], 0 <= i < orbRefnCount, and initialized to the identity below. */ for ( i = 1 ; i <= AAA->ell ; ++i ) Gamma[i] = newRPriorityQueue( G->degree, basicCellSize[i]); for ( m = 0 ; m < orbRefnCount ; ++m ) { beginRevWord[m] = (UnsignedS **) malloc( (options.maxWordLength+2) * sizeof(UnsignedS**)); tHatWord[m].lengthAtLevel = (UnsignedS *) malloc( (options.maxBaseSize+2) * sizeof(Unsigned *) ); tHatWord[m].revWord = initialRevWord[m] = beginRevWord[m] + options.maxWordLength - 1; tHatWord[m].invWord = (UnsignedS **) malloc((options.maxWordLength+1) * sizeof(UnsignedS**)); if ( !tHatWord[m].lengthAtLevel || !beginRevWord[m] || !tHatWord[m].invWord ) ERROR( "computeSubgroup", "Out of memory.") tHatWord[m].revWord[0] = NULL; tHatWord[m].invWord[0] = NULL; for ( i = 0 ; i <= AAA->ell ; ++i ) tHatWord[m].lengthAtLevel[i] = 0; } /* Allocate and initialize the arrays used to keep track of which points are minimal in their K_betaHat[1..d-1] orbits. */ for ( i = 0 ; i <= maxBaseChangeLevel ; ++i ) { minPointOfOrbit[i] = allocIntArrayDegree(); for ( pt = 1 ; pt <= G->degree ; ++pt ) minPointOfOrbit[i][pt] = 0; minPointKnownCount[i] = 0; minPointKnown[i] = allocIntArrayDegree(); } /* Figure 9, lines 5-12. The following lines perform initializations corresponding to starting at the root of the tree. */ UpsilonStack = newPartitionStack( G->degree); h = 1; f = 0; for ( i = 0 ; specialRefinement[i] ; ++i ) e[i] = 0; if ( AAA->n_[1] == 1 ) { d = 1; initFromPartnStack( Gamma[1], UpsilonStack, 1, AAA); } else d = 0; /* Figure 9, line 13. The main loop begins here. On each pass, the elementary P-refinement aAA[h] is applied to the top partition on UpsilonStack. */ while ( h > 0 ) { /* Figure 9, lines 14-21. The code which follows is executed whenever a node is entered, either by descending from its parent or after backtracking from a descendant of a sibling. */ if ( h == AAA->n_[d] ) { if ( options.statistics ) ++nodesVisited[d]; betaHat[d] = removeMin( Gamma[d] ); if ( d < firstMoved && betaHat[d] != AAA->alphaHat[d] ) { firstMoved = d; for ( i = (L_R ? 0 : 1) ; i <= maxBaseChangeLevel ; ++i ) { for ( j = 1 ; j <= minPointKnownCount[i] ; ++j ) minPointOfOrbit[i][minPointKnown[i][j]] = 0; minPointKnownCount[i] = 0; } } if ( L_L || L_R ) { backtrackFlag = FALSE ; for ( pp = DeltaList[d]+1 ; *pp ; ++pp ) if ( L_R && *pp <= firstMoved + maxBaseChangeLevel && *pp >= firstMoved) if ( AAA->invOmega[betaHat[*pp]] > AAA->invOmega[ FIXUP minimalPointOfOrbit( L_R, *pp , betaHat[d], minPointOfOrbit[*pp-firstMoved], minPointKnown[*pp-firstMoved], &minPointKnownCount[*pp-firstMoved], AAA->invOmega) ] ) { backtrackFlag = TRUE; break; } else ; else if (AAA->invOmega[betaHat[*pp]] > AAA->invOmega[betaHat[d]]) { backtrackFlag = TRUE; break; } if ( backtrackFlag ) BACKTRACK } } /* Figure 9, line 22. Now aAA[h] is applied to the top partition on UpsilonStack, and the result is pushed onto UpsilonStack. */ if ( h == AAA->n_[d] ) AAA->aAA[h].refnParm[0].intParm = betaHat[d]; else if ( AAA->aAA[h].family->refine == orbRefine ) { for ( m = 0 ; AAA->aAA[h].family->familyParm_R[0].ptrParm != specialRefinement[m]->rightGroup ; ++m ) ; AAA->aAA[h].family->familyParm_R[1].intParm = e[m] + 1; AAA->aAA[h].family->familyParm_R[2].ptrParm = &tHatWord[m]; } split = (AAA->aAA[h].family->refine)( AAA->aAA[h].family->familyParm_R, AAA->aAA[h].refnParm, UpsilonStack ); /* Figure 9, lines 23-32. The following lines attempt to prune the current node using Prop. 7(c). */ if ( split.newCellSize != AAA->a_[h] ) BACKTRACK else ++h; oldF = f; if ( split.newCellSize == 1 ) eta[++f] = UpsilonStack->pointList[UpsilonStack->startCell[h]]; if ( split.oldCellSize == 1 ) eta[++f] = UpsilonStack->pointList[UpsilonStack->startCell[AAA->b_[h-1]]]; for ( i = oldF+1 , backtrackFlag = FALSE ; i <= f ; ++i ) { for ( m = 0 ; m < orbRefnCount ; ++m ) { if ( AAA->omega[i] == specialRefinement[m]->leftGroup->base[e[m]+1] ) { ++e[m]; delta = eta[i]; for ( p = tHatWord[m].invWord ; *p ; ++p ) delta = (*p)[delta]; if ( specialRefinement[m]->rightGroup-> schreierVec[e[m]][delta] ) while ( (gen = specialRefinement[m]->rightGroup-> schreierVec[e[m]][delta]) != FIRST_IN_ORBIT ) { *p = gen->invImage; *(--tHatWord[m].revWord) = gen->image; delta = (*p++)[delta]; *p = NULL; } else { backtrackFlag = TRUE; break; } } else { delta = eta[i]; for ( p = tHatWord[m].invWord ; *p ; ++p ) delta = (*p)[delta]; if ( delta != AAA->omega[i] ) { backtrackFlag = TRUE; break; } } if ( backtrackFlag ) break; } if ( backtrackFlag ) break; } if ( backtrackFlag) BACKTRACK if ( h == G->degree ) { /* Figure 9, lines 34-40. The following lines add a new strong generator, if appropriate. */ newPerm = permMapping( G->degree, AAA->omega, eta); if ( !pP || pP(newPerm) ) { for ( i = 0 ; i <= AAA->ell ; ++i ) nodesEssential[i] = 1; break; } deletePermutation( newPerm); newPerm = NULL; BACKTRACK } else if ( h == AAA->n_[d+1] ) { /* The following lines compute the set Gamma[d+1] of values of betaHat[d+1] corresponding to possible children of the current node, and then descend to the leftmost child. */ if ( d >= firstMoved && d < firstMoved+maxBaseChangeLevel ) { if ( L_R ) insertBasePoint( L_R, d, betaHat[d] ); for ( i = d+1-firstMoved ; i <= maxBaseChangeLevel ; ++i ) { for ( j = 1 ; j <= minPointKnownCount[i] ; ++j ) minPointOfOrbit[i][minPointKnown[i][j]] = 0; minPointKnownCount[i] = 0; } } for ( m = 0 ; m < orbRefnCount ; ++m ) { if ( d > 0 ) tHatWord[m].lengthAtLevel[d] = tHatWord[m].lengthAtLevel[d-1]; else tHatWord[m].lengthAtLevel[0] = 0; while ( tHatWord[m].invWord[tHatWord[m].lengthAtLevel[d]] ) ++tHatWord[m].lengthAtLevel[d]; } ++d; initFromPartnStack( Gamma[d], UpsilonStack, AAA->p_[d], AAA); } } /* Free temporary storage. */ for ( m = 0 ; m < orbRefnCount ; ++m ) { /*DEBUG -- Following code temporarily commented out because it corrupts the heap. free( tHatWord[m].invWord); free( beginRevWord[m]); END DEBUG*/ } for ( i = 1 ; i <= AAA->ell ; ++i) deleteRPriorityQueue( Gamma[i]); /* Write summary information for subgroup computed, if requested. */ backtrackTime = CPU_TIME(); if ( options.inform ) { informCosetRep( newPerm); informTime( startTime, RBaseTime, optGroupTime, backtrackTime); } /* Write statistics to standard output, if requested. */ if ( options.statistics ) informStatistics( AAA->ell, nodesVisited, nodesPruned, nodesEssential); /* Free pseudo-stack storage. */ freeIntArrayBaseSize( betaHat); freePtrArrayBaseSize( Gamma); freePtrArrayBaseSize( DeltaList); freeIntArrayDegree( eta); freePtrArrayBaseSize( minPointOfOrbit); freePtrArrayBaseSize( minPointKnown); freeIntArrayBaseSize( minPointKnownCount); freeLongArrayBaseSize( nodesVisited); freeLongArrayBaseSize( nodesPruned); freeLongArrayBaseSize( nodesEssential); freeIntArrayBaseSize( longRepLen); freeIntArrayBaseSize( basicCellSize); for ( i = 0 ; i <= 3 ; ++i ) freeIntArrayDegree( q_[i]); /* Return to caller. */ return newPerm; } /*-------------------------- buildDeltaList -------------------------------*/ /* The function buildDeltaList may be used to construct a two-dimensional array DeltaList, such that DeltaList[d][1..] is the null-terminated list of those integers i with i <= d such that the d'th base point of the group G lies in the i'th basic orbit. */ static void buildDeltaList( PermGroup *G, /* The perm group (base/sgs known). */ UnsignedS *DeltaList[]) /* Set to the list that is constructed. */ { Unsigned d, i, listLen, basePt; for ( d = 1 ; d <= G->baseSize ; ++d) { listLen = 0; basePt = G->base[d]; for ( i = 1 ; i <= d ; ++i ) if ( G->schreierVec[i][basePt] ) DeltaList[d][++listLen] = i; DeltaList[d][++listLen] = 0; } } guava-3.6/src/leon/src/inform.h0000644017361200001450000000133211026723452016321 0ustar tabbottcrontab#ifndef INFORM #define INFORM extern void informStatistics( Unsigned ell, unsigned long nodesVisited[], unsigned long nodesPruned[], unsigned long nodesEssential[]) ; extern void informOptions(void) ; extern void informGroup( const PermGroup *const G) ; extern void informRBase( const PermGroup *const G, const RBase *const AAA, const UnsignedS basicCellSize[]) ; extern void informSubgroup( const PermGroup *const G_pP) ; extern void informCosetRep( Permutation *y) ; extern void informNewGenerator( const PermGroup *const G_pP, const Unsigned newLevel) ; extern void informTime( clock_t startTime, clock_t RBaseTime, clock_t optGroupTime, clock_t backtrackTime) ; #endif guava-3.6/src/leon/src/commut.c0000644017361200001450000002336211026723452016335 0ustar tabbottcrontab/* File commut.c. Main program for program to compute commutator subgroups. Specifically, if H is a subgroup of G, the program computes the commutator group [G,H]. The formats for the command is commut or commut where in the second case it is understood that equals . The meaning of the parameters is as follows: : The group referred to as G above. : The group referred to as H above. Defaults to G. : Set to the commutator group [G,H]. The options are as follows: -i The generators of are to be written in image format. -overwrite: If the Cayley library file for exists, it will be overwritten to rather than appended to. The return code for set or partition stabilizer computations is as follows: 0: computation successful, 1: computation terminated due to error. */ #include #include #include #include #include #include "group.h" #include "groupio.h" #include "ccommut.h" #include "errmesg.h" #include "factor.h" #include "permgrp.h" #include "readgrp.h" #include "readper.h" #include "storage.h" #include "token.h" #include "util.h" GroupOptions options; static void verifyOptions(void); int main( int argc, char *argv[]) { char groupFileName[MAX_FILE_NAME_LENGTH] = "", subgroupFileName[MAX_FILE_NAME_LENGTH] = "", commutatorFileName[MAX_FILE_NAME_LENGTH] = ""; Unsigned i, j, optionCountPlus1; char groupLibraryName[MAX_NAME_LENGTH+1] = "", subgroupLibraryName[MAX_NAME_LENGTH+1] = "", commutatorLibraryName[MAX_NAME_LENGTH+1] = "", prefix[MAX_FILE_NAME_LENGTH+1] = "", suffix[MAX_NAME_LENGTH+1] = "", commutatorName[MAX_NAME_LENGTH+1] = ""; PermGroup *G, *H, *C; BOOLEAN imageFormatFlag = FALSE, HnotequalG, quietFlag, normalClosureFlag; char comment[100]; /* If no arguments (except possibly -ncl) are given, provide help and exit. */ if ( argc == 1 ) { printf( "\nUsage: commut [options] group subgroup commutatorGroup\n"); return 0; } else if ( argc == 2 && strcmp(argv[1],"-ncl") == 0 ) { printf( "\nUsage: ncl [options] group subgroup normalClosure\n"); return 0; } /* Check for limits option. If present in position 1, give limits and return. */ if ( argc > 1 && (strcmp( argv[1], "-l") == 0 || strcmp( argv[1], "-L") == 0) ) { showLimits(); return 0; } /* Check for verify option. If present in position 1, perform verify (Note verifyOptions terminates program). */ if ( argc > 1 && (strcmp( argv[1], "-v") == 0 || strcmp( argv[1], "-V") == 0) ) verifyOptions(); /* Check for exactly 2 or 3 parameters following options. */ for ( optionCountPlus1 = 1 ; optionCountPlus1 < argc && argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 ) ; if ( argc - optionCountPlus1 < 2 || argc - optionCountPlus1 > 3 ) ERROR( "main (commut)", "Exactly 2 or 3 parameters are required.") /* Process options. */ prefix[0] = '\0'; suffix[0] = '\0'; options.maxBaseSize = DEFAULT_MAX_BASE_SIZE; imageFormatFlag = FALSE; quietFlag = FALSE; normalClosureFlag = FALSE; strcpy( options.outputFileMode, "w"); /* Process options. */ for ( i = 1 ; i < optionCountPlus1 ; ++i ) { for ( j = 1 ; argv[i][j] != ':' && argv[i][j] != '\0' ; ++j ) #ifdef EBCDIC argv[i][j] = ( argv[i][j] >= 'A' && argv[i][j] <= 'I' || argv[i][j] >= 'J' && argv[i][j] <= 'R' || argv[i][j] >= 'S' && argv[i][j] <= 'Z' ) ? (argv[i][j] + 'a' - 'A') : argv[i][j]; #else argv[i][j] = (argv[i][j] >= 'A' && argv[i][j] <= 'Z') ? (argv[i][j] + 'a' - 'A') : argv[i][j]; #endif errno = 0; if ( strncmp( argv[i], "-p:", 3) == 0 ) { strcpy( prefix, argv[i]+3); } else if ( strncmp( argv[i], "-t:", 3) == 0 ) { strcpy( suffix, argv[i]+3); } else if ( strcmp( argv[i], "-i") == 0 ) imageFormatFlag = TRUE; else if ( strncmp( argv[i], "-mb:", 4) == 0 ) { errno = 0; options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (cent)", "Invalid syntax for -mb option") } else if ( strncmp( argv[i], "-mw:", 4) == 0 ) { errno = 0; options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (cent)", "Invalid syntax for -mw option") } else if ( strncmp( argv[i], "-n:", 3) == 0 ) if ( isValidName( argv[i]+3) ) strcpy( commutatorName, argv[i]+3); else ERROR1s( "main (commut)", "Invalid name ", commutatorName, " for commutator group.") else if ( strcmp( argv[i], "-a") == 0 ) strcpy( options.outputFileMode, "a"); else if ( strcmp( argv[i], "-q") == 0 ) quietFlag = TRUE; else if ( strcmp( argv[i], "-ncl") == 0 ) normalClosureFlag = TRUE; else ERROR1s( "main (compute subgroup)", "Invalid option ", argv[i], ".") } /* Compute maximum degree and word length. */ options.maxWordLength = 200 + 5 * options.maxBaseSize; options.maxDegree = MAX_INT - 2 - options.maxBaseSize; HnotequalG = (argc - optionCountPlus1 == 3); if ( normalClosureFlag && !HnotequalG ) ERROR( "main (commut)", "Invalid number of arguments for normal closure") /* Compute names for files and libraries. */ parseLibraryName( argv[optionCountPlus1], prefix, suffix, groupFileName, groupLibraryName); if ( HnotequalG ) parseLibraryName( argv[optionCountPlus1+1], prefix, suffix, subgroupFileName, subgroupLibraryName); parseLibraryName( argv[optionCountPlus1+1+HnotequalG], "", "", commutatorFileName, commutatorLibraryName); /* Read in the groups G and H. */ G = readPermGroup( groupFileName, groupLibraryName, 0, "Generate"); if ( HnotequalG ) if ( normalClosureFlag ) H = readPermGroup( subgroupFileName, subgroupLibraryName, G->degree, "Generate"); else H = readPermGroup( subgroupFileName, subgroupLibraryName, G->degree, ""); else H = G; /* Now we set C to the commutator of [G,H] of G and H, and write out C. */ if ( normalClosureFlag ) C = normalClosure( G, H); else C = commutatorGroup( G, H); if ( commutatorName[0] != '\0' ) strcpy( C->name, commutatorName); else strcpy( C->name, commutatorLibraryName); C->printFormat = (imageFormatFlag ? imageFormat : cycleFormat); if ( normalClosureFlag ) sprintf( comment, "The normal closure in %s of %s.", G->name, H->name); else sprintf( comment, "The commutator group [%s,%s].", G->name, H->name); writePermGroup( commutatorFileName, commutatorLibraryName, C, comment); /* Write commutator group order to std output. */ if ( !quietFlag ) { if ( normalClosureFlag ) printf( "\nNormal closure %s of %s in %s has order ", C->name, H->name, G->name); else printf( "\nCommutator group %s = [%s,%s] has order ", C->name, G->name, H->name); if ( C->order->noOfFactors == 0 ) printf( "%d", 1); else for ( i = 0 ; i < C->order->noOfFactors ; ++i ) { if ( i > 0 ) printf( " * "); printf( "%u", C->order->prime[i]); if ( C->order->exponent[i] > 1 ) printf( "^%u", C->order->exponent[i]); } printf( " (random Schreier)\n"); } /* Return to caller. */ if ( normalClosureFlag ) return 0; else if ( C->order->noOfFactors == 0 ) return 0; else if ( H->order ) if ( factEqual( H->order, C->order) ) return 3; else return 2; else return 4; } /*-------------------------- verifyOptions -------------------------------*/ static void verifyOptions(void) { CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH, MAX_PRIME_FACTORS, MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS, MAX_EXTRA, XLARGE, SGND, NFLT}; extern void xaddsge( CompileOptions *cOpts); extern void xbitman( CompileOptions *cOpts); extern void xccommu( CompileOptions *cOpts); extern void xcopy ( CompileOptions *cOpts); extern void xcstbor( CompileOptions *cOpts); extern void xerrmes( CompileOptions *cOpts); extern void xessent( CompileOptions *cOpts); extern void xfactor( CompileOptions *cOpts); extern void xnew ( CompileOptions *cOpts); extern void xoldcop( CompileOptions *cOpts); extern void xpermgr( CompileOptions *cOpts); extern void xpermut( CompileOptions *cOpts); extern void xprimes( CompileOptions *cOpts); extern void xrandgr( CompileOptions *cOpts); extern void xrandsc( CompileOptions *cOpts); extern void xreadgr( CompileOptions *cOpts); extern void xstorag( CompileOptions *cOpts); extern void xtoken ( CompileOptions *cOpts); extern void xutil ( CompileOptions *cOpts); xaddsge( &mainOpts); xbitman( &mainOpts); xccommu( &mainOpts); xcopy ( &mainOpts); xcstbor( &mainOpts); xerrmes( &mainOpts); xessent( &mainOpts); xfactor( &mainOpts); xnew ( &mainOpts); xoldcop( &mainOpts); xpermgr( &mainOpts); xpermut( &mainOpts); xprimes( &mainOpts); xrandgr( &mainOpts); xrandsc( &mainOpts); xreadgr( &mainOpts); xstorag( &mainOpts); xutil ( &mainOpts); } guava-3.6/src/leon/src/cjrndper.c0000644017361200001450000006532611026723452016646 0ustar tabbottcrontab/* File cjrndper.c. Main program for cjrndper command, which may be used to conjugate a given point set, permutation, permutation group, partition, design, or code by one of the following: (1) a random permutation from the symmetric group, (2) a random permutation from a specified permutation group, or (3) a specified permutation. The syntax of the command is: cjrndper where the meaning of the parameters is as follows: : "group", "perm", "set", "partition", "design", "matrix", or "code" : The point set or permutation to be conjugated. The name must include the suffix. : The name (excluding suffix) of the new object created by conjugating by a random element of . May be the same of . : (optional) Set to the conjugating permutation chosen at random from group . If omitted, the conjugating permutation is not saved. The valid options are follows: -g: The name of the permutation group from which the conjugating element is to be chosen. If omitted, the symmetric group is used. In case of input from a Cayley library, is the name of the library block. -i Write permutations in image format. -p: The specific permutation to be used as the conjugating element. -s: Sets seed for random number generator to , -d: Degree for point sets, permutations, or partitions. -b Construct base and sgs for conjugated group. */ #include #include #include #include #include #define MAIN #include "group.h" #include "groupio.h" #include "code.h" #include "copy.h" #include "errmesg.h" #include "field.h" #include "matrix.h" #include "new.h" #include "permut.h" #include "readdes.h" #include "randgrp.h" #include "readgrp.h" #include "readpar.h" #include "readper.h" #include "readpts.h" #include "storage.h" #include "token.h" #include "util.h" GroupOptions options; static void nameGenerators( PermGroup *const H, char genNamePrefix[]); static void verifyOptions(void); static void setToRandomMonomialPerm( Permutation *const perm, const Unsigned subDegree, const Field *const field); int main( int argc, char *argv[]) { ObjectType objectType; char inputFileName[60] = "", inputLibraryName[MAX_NAME_LENGTH+1] = "", outputFileName[60] = "", outputLibraryName[MAX_NAME_LENGTH+1] = "", outputObjectName[MAX_NAME_LENGTH+1] = "", permGroupSpecifier[60] = "", permGroupFileName[60] = "", permGroupLibraryName[MAX_NAME_LENGTH+1] = "", permFileName[60] = "", permLibraryName[MAX_NAME_LENGTH+1] = "", originalInputName[MAX_NAME_LENGTH+1], prefix[60] = "", suffix[MAX_NAME_LENGTH] = ""; Unsigned i, j, k, degree, temp, optionCountPlus1, nRows, nCols, m, lambda, mu, tau, fSize; unsigned long seed; PermGroup *G, *H, *HConjugated; PointSet *Lambda; Permutation *s, *t, *conjugatingPerm, *gen, *genConj; Partition *partn; Matrix_01 *matrix, *matrixConjugated; Code *C, *CConjugated; char comment[255]; BOOLEAN baseSgsFlag = FALSE, imageFormatFlag = FALSE, cjperFlag = FALSE, monomialFlag = FALSE; UnsignedS *newCellNumber; /* If there are no options (except possibly -perm), provide usage information and exit. */ if ( argc == 1 ) { printf( "\nUsage: cjrndper [options] type object conjugateObject [conjugatingPerm]"); printf( "\n (type = group, perm, set, partition, design, matrix, or code)\n"); return 0; } else if ( argc == 2 && strcmp(argv[1],"-perm") == 0 ) { printf( "\nUsage: cjrndper [options] type object conjugateObject conjugatingPerm"); printf( "\n (type = group, perm, set, partition, design, matrix, or code)\n"); return 0; } /* Count the number of options. */ for ( optionCountPlus1 = 1 ; optionCountPlus1 <= argc-1 && argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 ) ; /* Translate options to lower case. */ for ( i = 1 ; i < optionCountPlus1 ; ++i ) { for ( j = 1 ; argv[i][j] != ':' && argv[i][j] != '\0' ; ++j ) #ifdef EBCDIC argv[i][j] = ( argv[i][j] >= 'A' && argv[i][j] <= 'I' || argv[i][j] >= 'J' && argv[i][j] <= 'R' || argv[i][j] >= 'S' && argv[i][j] <= 'Z' ) ? (argv[i][j] + 'a' - 'A') : argv[i][j]; #else argv[i][j] = (argv[i][j] >= 'A' && argv[i][j] <= 'Z') ? (argv[i][j] + 'a' - 'A') : argv[i][j]; #endif } if ( strcmp(argv[1],"-perm") == 0 ) i = 2; else i = 1; /* Check for limits option. If present in position i (i as above) give limits and return. */ if ( strcmp(argv[i], "-l") == 0 || strcmp(argv[i], "-L") == 0 ) { showLimits(); return 0; } /* Check for verify option. If present in position i (i as above) perform verify (Note verifyOptions terminates program). */ if ( strcmp(argv[i], "-v") == 0 || strcmp(argv[i], "-V") == 0 ) verifyOptions(); /* Check for exactly 3 or 4 parameters following options. */ if ( argc - optionCountPlus1 != 3 && argc - optionCountPlus1 != 4 ) { printf( "\n\nError: Exactly 3 or 4 non-option parameters are " "required.\n"); exit(ERROR_RETURN_CODE); } /* Process options. */ options.maxBaseSize = DEFAULT_MAX_BASE_SIZE; strcpy( options.outputFileMode, "w"); seed = 47; degree = 0; options.genNamePrefix[0] = '\0'; for ( i = 1 ; i < optionCountPlus1 ; ++i ) if ( strcmp(argv[i],"-a") == 0 ) strcpy( options.outputFileMode, "a"); else if ( strncmp(argv[i],"-d:",3) == 0 ) { degree = strtol( argv[i]+3, NULL, 0); } else if ( strncmp(argv[i],"-s:",3) == 0 ) { errno = 0; seed = strtol( argv[i]+3, NULL, 0); if ( errno ) ERROR1s( "main (cjrndper command)", "Invalid option ", argv[i], ".") } else if ( strncmp(argv[i],"-g:",3) == 0 ) strcpy( permGroupSpecifier, argv[i]+3); else if ( strcmp(argv[i],"-i") == 0 ) imageFormatFlag = TRUE; else if ( strcmp(argv[i],"-mm") == 0 ) monomialFlag = TRUE; else if ( strncmp( argv[i], "-mb:", 4) == 0 ) { errno = 0; options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (cent)", "Invalid syntax for -mb option") } else if ( strncmp( argv[i], "-mw:", 4) == 0 ) { errno = 0; options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (cent)", "Invalid syntax for -mw option") } else if ( strncmp(argv[i],"-n:",3) == 0 ) strcpy( outputObjectName, argv[i]+3); else if ( strcmp(argv[i],"-perm") == 0 ) cjperFlag = TRUE; else if ( strncmp( argv[i], "-gn:", 4) == 0 ) if ( strlen( argv[i]+4) <= 8 ) strcpy( options.genNamePrefix, argv[i]+4); else ERROR( "main (orblist)", "Invalid value for -gn option") else if ( strncmp( argv[i], "-p:", 3) == 0 ) { strcpy( prefix, argv[i]+3); } else if ( strncmp( argv[i], "-t:", 3) == 0 ) { strcpy( suffix, argv[i]+3); } else if ( strcmp( argv[i], "-b" ) == 0 ) baseSgsFlag = TRUE; else if ( strcmp( argv[i], "-overwrite") == 0 ) strcpy( options.outputFileMode, "w"); else ERROR1s( "main (cjrndper command)", "Invalid option ", argv[i], ".") if ( cjperFlag && permGroupSpecifier[0] ) ERROR( "main (cjrndper command)", "-g and -p are conflicting options.") /* Compute maximum degree and word length. */ options.maxWordLength = 200 + 5 * options.maxBaseSize; options.maxDegree = MAX_INT - 2 - options.maxBaseSize; objectType = strcmp( lowerCase(argv[optionCountPlus1]), "group") == 0 ? PERM_GROUP : strcmp( lowerCase(argv[optionCountPlus1]), "perm") == 0 ? PERMUTATION : strcmp( lowerCase(argv[optionCountPlus1]), "set") == 0 ? POINT_SET : strcmp( lowerCase(argv[optionCountPlus1]), "partition") == 0 ? PARTITION : strcmp( lowerCase(argv[optionCountPlus1]), "design") == 0 ? DESIGN : strcmp( lowerCase(argv[optionCountPlus1]), "matrix") == 0 ? MATRIX_01 : strcmp( lowerCase(argv[optionCountPlus1]), "code") == 0 ? BINARY_CODE : INVALID_OBJECT; if ( objectType == INVALID_OBJECT ) ERROR( "main (chrndper command)", "File type for object to be conjugated is invalid.") if ( degree == 0 && (objectType == PERMUTATION || objectType == POINT_SET || objectType == PARTITION) ) ERROR( "main (cjrndper command)", "Degree must be specified.") /* Compute file names. */ parseLibraryName( argv[optionCountPlus1+1], prefix, suffix, inputFileName, inputLibraryName); parseLibraryName( argv[optionCountPlus1+2], "", "", outputFileName, outputLibraryName); if ( optionCountPlus1+3 < argc ) parseLibraryName( argv[optionCountPlus1+3], "", "", permFileName, permLibraryName); else if ( cjperFlag ) ERROR( "main (cjrndper command)", "Conjugating permutation not specified.") if ( permGroupSpecifier[0] ) parseLibraryName( permGroupSpecifier, prefix, suffix, permGroupFileName, permGroupLibraryName); /* Set output object name, if not specified by -n option. */ if ( !outputObjectName[0] ) strcpy( outputObjectName, outputLibraryName); /* Read in the object to be conjugated. */ switch( objectType ) { case PERM_GROUP: if ( baseSgsFlag ) { H = readPermGroup( inputFileName, inputLibraryName, 0, "Generate"); initializeSeed( seed); } else H = readPermGroup( inputFileName, inputLibraryName, 0, ""); degree = H->degree; break; case POINT_SET: Lambda = readPointSet( inputFileName, inputLibraryName, degree); break; case PERMUTATION: s = readPermutation( inputFileName, inputLibraryName, degree, TRUE); degree = s->degree; break; case PARTITION: partn = readPartition( inputFileName, inputLibraryName, degree); degree = partn->degree; break; case DESIGN: case MATRIX_01: if ( objectType == DESIGN ) matrix = readDesign( inputFileName, inputLibraryName, 0, 0); else matrix = read01Matrix( inputFileName, inputLibraryName, FALSE, FALSE, 0, 0, 0); nRows = matrix->numberOfRows; nCols = matrix->numberOfCols; if ( monomialFlag ) { matrix->field = buildField( matrix->setSize); degree = (matrix->setSize - 1) * (nRows + nCols); } else degree = nRows + nCols; initializeStorageManager( degree); break; case BINARY_CODE: C = readCode( inputFileName, inputLibraryName, FALSE, 0, 0, 0); if ( C->fieldSize > 2 ) { C->field = buildField( C->fieldSize); degree = (C->fieldSize - 1) * C->length; } else degree = C->length; initializeStorageManager( degree); break; } /* Initialize random number generator. */ initializeSeed( seed); /* Read in the group, if provided and check its degree. Then generate either a random permutation in the group, or a random permutation from the symmetric group. */ if ( cjperFlag ) conjugatingPerm = readPermutation( permFileName, permLibraryName, degree, TRUE); else if ( permGroupFileName[0] ) { G = readPermGroup( permGroupFileName, permGroupLibraryName, degree, "Generate"); initializeSeed( seed); conjugatingPerm = randGroupPerm( G, 1); } else { conjugatingPerm = newIdentityPerm( degree); if ( objectType != DESIGN && objectType != MATRIX_01 ) if ( objectType != BINARY_CODE || C->fieldSize == 2 ) for ( i = 1 ; i < degree ; ++i ) { j = randInteger( i, degree); EXCHANGE( conjugatingPerm->image[i], conjugatingPerm->image[j], temp); } else setToRandomMonomialPerm( conjugatingPerm, degree, C->field); else if ( !monomialFlag ) { for ( i = 1 ; i < nRows ; ++i ) { j = randInteger( i, nRows); EXCHANGE( conjugatingPerm->image[i], conjugatingPerm->image[j], temp); } for ( i = nRows+1 ; i < degree ; ++i ) { j = randInteger( i, degree); EXCHANGE( conjugatingPerm->image[i], conjugatingPerm->image[j], temp); } } else setToRandomMonomialPerm( conjugatingPerm, nRows*(matrix->setSize-1), matrix->field); conjugatingPerm->invImage = NULL; adjoinInvImage( conjugatingPerm); } /* Conjugate the object, write out conjugated object, and close its file. */ switch ( objectType ) { case POINT_SET: strcpy( originalInputName, Lambda->name); for ( i = 1 ; i <= Lambda->size ; ++i ) Lambda->pointList[i] = conjugatingPerm->image[Lambda->pointList[i]]; if ( cjperFlag ) sprintf( comment, "%s conjugated by %s.", Lambda->name, conjugatingPerm->name); else if ( permGroupFileName[0] ) sprintf( comment, "%s conjugated by a random permutation " "from group %s.", Lambda->name, G->name); else sprintf( comment, "%s conjugated by a random permutation.", Lambda->name); strcpy( Lambda->name, outputObjectName); writePointSet( outputFileName, outputLibraryName, comment, Lambda); break; case PARTITION: /* Temporarily we use the invPointList field for another purpose. It will be restored below. */ strcpy( originalInputName, partn->name); newCellNumber = partn->invPointList; for ( i = 1 ; i <= degree ; ++i ) newCellNumber[conjugatingPerm->image[partn->pointList[i]]] = partn->cellNumber[partn->pointList[i]]; for ( i = 1 ; i <= degree ; ++i ) partn->cellNumber[i] = newCellNumber[i]; for ( i = 1 ; i <= degree ; ++i ) partn->pointList[i] = conjugatingPerm->image[partn->pointList[i]]; for ( i = 1 ; i <= degree ; ++i ) partn->invPointList[partn->pointList[i]] = i; if ( cjperFlag ) sprintf( comment, "%s conjugated by %s.", partn->name, conjugatingPerm->name); else if ( permGroupFileName[0] ) sprintf( comment, "%s conjugated by a random permutation " "from group %s.", partn->name, G->name); else sprintf( comment, "%s conjugated by a random permutation.", partn->name); strcpy( partn->name, outputObjectName); writePartition( outputFileName, outputLibraryName, comment, partn); break; case PERMUTATION: strcpy( originalInputName, s->name); t = newUndefinedPerm( degree); t->degree = degree; for ( i = 1 ; i <= degree ; ++i ) t->image[conjugatingPerm->image[i]] = conjugatingPerm->image[s->image[i]]; if ( cjperFlag ) sprintf( comment, "%s conjugated by %s.", s->name, conjugatingPerm->name); else if ( permGroupFileName[0] ) sprintf( comment, "%s conjugated by a random permutation " "from group %s.", s->name, G->name); else sprintf( comment, "%s conjugated by a random permutation.", s->name); strcpy( t->name, outputObjectName); if ( imageFormatFlag ) writePermutation( outputFileName, outputLibraryName, t, "image", comment); else writePermutation( outputFileName, outputLibraryName, t, "", comment); break; case PERM_GROUP: strcpy( originalInputName, H->name); HConjugated = copyOfPermGroup( H); for ( gen = H->generator , genConj = HConjugated->generator ; gen ; gen = gen->next , genConj = genConj->next ) for ( i = 1 ; i <= degree ; ++i ) genConj->image[conjugatingPerm->image[i]] = conjugatingPerm->image[gen->image[i]]; if ( H->base ) for ( i = 1 ; i <= H->baseSize ; ++i ) HConjugated->base[i] = conjugatingPerm->image[H->base[i]]; if ( cjperFlag ) sprintf( comment, "%s conjugated by %s.", H->name, conjugatingPerm->name); else if ( permGroupFileName[0] ) sprintf( comment, "%s conjugated by a random permutation " "from group %s.", H->name, G->name); else sprintf( comment, "%s conjugated by a random permutation.", H->name); strcpy( HConjugated->name, outputObjectName); HConjugated->printFormat = imageFormatFlag ? imageFormat : cycleFormat; nameGenerators( HConjugated, options.genNamePrefix); writePermGroup( outputFileName, outputLibraryName, HConjugated, comment); break; case DESIGN: case MATRIX_01: strcpy( originalInputName, matrix->name); matrixConjugated = newZeroMatrix( matrix->setSize, nRows, nCols); if ( !monomialFlag ) for ( i = 1 ; i <= nRows ; ++i ) for ( j = 1 ; j <= nCols ; ++j ) matrixConjugated->entry[conjugatingPerm->image[i]] [conjugatingPerm->image[j+nRows]-nRows] = matrix->entry[i][j]; else { fSize = matrix->setSize - 1; for ( i = 1 ; i <= nRows ; ++i ) { /* Find k, lambda such that 1*i is mapped to lambda*k. */ k = (conjugatingPerm->image[fSize*(i-1)+1]-1) / fSize + 1; lambda = (conjugatingPerm->image[fSize*(i-1)+1]-1) % fSize + 1; for ( j = 1 ; j <= nCols ; ++j ) { /* Find m, mu such that 1*j is mapped to mu*m. */ m = (conjugatingPerm->image[fSize*(nRows+j-1)+1]-1) / fSize + 1 - nRows; mu = (conjugatingPerm->image[fSize*(nRows+j-1)+1]-1) % fSize + 1; tau = matrix->field->prod[lambda][mu]; matrixConjugated->entry[k][m] = matrix->field->prod[tau][matrix->entry[i][j]]; } } } if ( cjperFlag ) sprintf( comment, "%s conjugated by %s.", matrix->name, conjugatingPerm->name); else if ( permGroupFileName[0] ) sprintf( comment, "%s conjugated by a random permutation " "from group %s.", matrix->name, G->name); else if ( (objectType == MATRIX_01 && monomialFlag) ) sprintf( comment, "%s conjugated by a random monomial permutation.", matrix->name); else sprintf( comment, "%s conjugated by a random permutation.", matrix->name); strcpy( matrixConjugated->name, outputObjectName); if ( objectType == DESIGN ) writeDesign( outputFileName, outputLibraryName, matrixConjugated, comment); else write01Matrix( outputFileName, outputLibraryName, matrixConjugated, FALSE, comment); break; case BINARY_CODE: strcpy( originalInputName, C->name); CConjugated = (Code *) newZeroMatrix( C->fieldSize, C->dimension, C->length); if ( C->fieldSize == 2 ) for ( j = 1 ; j <= C->length ; ++j ) for ( i = 1 ; i <= C->dimension ; ++i ) CConjugated->basis[i][conjugatingPerm->image[j]] = C->basis[i][j]; else { fSize = C->fieldSize - 1; for ( j = 1 ; j <= C->length ; ++j ) { /* Find m, mu such that 1*j is mapped to mu*m. */ m = (conjugatingPerm->image[fSize*(j-1)+1]-1) / fSize + 1; mu = (conjugatingPerm->image[fSize*(j-1)+1]-1) % fSize + 1; for ( i = 1 ; i <= C->dimension ; ++i ) CConjugated->basis[i][m] = C->field->prod[mu][C->basis[i][j]]; } } if ( cjperFlag ) sprintf( comment, "%s conjugated by %s.", C->name, conjugatingPerm->name); else if ( permGroupFileName[0] ) sprintf( comment, "%s conjugated by a random permutation " "from group %s.", C->name, G->name); else if ( C->fieldSize > 2 ) sprintf( comment, "%s conjugated by a random monomial permutation.", C->name); else sprintf( comment, "%s conjugated by a random permutation.", C->name); strcpy( CConjugated->name, outputObjectName); writeCode( outputFileName, outputLibraryName, CConjugated, comment); break; } /* Write out the conjugating permutation, if requested, and close its file. */ if ( !cjperFlag && permFileName[0] ) { if ( (objectType == MATRIX_01 && monomialFlag) || (objectType == BINARY_CODE && C->fieldSize > 2) ) sprintf( comment, "A monomial permutation mapping %s to %s.", originalInputName, outputObjectName); else if ( objectType != PERM_GROUP && objectType != PERMUTATION ) sprintf( comment, "A permutation mapping %s to %s.", originalInputName, outputObjectName); else sprintf( comment, "A permutation conjugating %s to %s.", originalInputName, outputObjectName); if ( imageFormatFlag ) writePermutation( permFileName, permLibraryName, conjugatingPerm, "image", comment); else writePermutation( permFileName, permLibraryName, conjugatingPerm, "", comment); } /* Terminate. */ return 0; } /*--------------------------- setToRandomMonomialPerm ---------------------*/ static void setToRandomMonomialPerm( Permutation *const perm, /* Must start as identity. */ const Unsigned subDegree, const Field *const field) { Unsigned i, j, k, delta, lambda, temp, m, mu; const Unsigned fSize = field->size - 1; const degree = perm->degree; for ( i = 1 ; i <= degree ; i += fSize ) { j = randInteger( i, (i <= subDegree) ? subDegree : degree); delta = 0; for ( k = 0 ; k < fSize ; ++k ) { EXCHANGE( perm->image[i+k], perm->image[j+k-delta], temp); if ( (j+k) % fSize == 0 ) delta = fSize; } /* Find mu, m such that perm->image[i] = mu*m. Then perm->image[lambda*i] = (lambda*mu)*m. */ m = (perm->image[i] - 1 ) / fSize + 1; mu = (perm->image[i] - 1 ) % fSize + 1; for ( lambda = 2 ; lambda < field->size ; ++lambda ) perm->image[i+lambda-1] = fSize*(m-1) + field->prod[lambda][mu]; } } /*-------------------------- nameGenerators ------------------------------*/ static void nameGenerators( PermGroup *const H, char genNamePrefix[]) { Unsigned i; Permutation *gen; if ( genNamePrefix[0] == '\0' ) { strncpy( genNamePrefix, H->name, 4); genNamePrefix[4] = '\0'; } for ( gen = H->generator , i = 1 ; gen ; gen = gen->next , ++i ) { strcpy( gen->name, genNamePrefix); sprintf( gen->name + strlen(gen->name), "%02d", i); } } /*-------------------------- verifyOptions -------------------------------*/ static void verifyOptions(void) { CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH, MAX_PRIME_FACTORS, MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS, MAX_EXTRA, XLARGE, SGND, NFLT}; extern void xaddsge( CompileOptions *cOpts); extern void xbitman( CompileOptions *cOpts); extern void xcopy ( CompileOptions *cOpts); extern void xcstbor( CompileOptions *cOpts); extern void xerrmes( CompileOptions *cOpts); extern void xessent( CompileOptions *cOpts); extern void xfactor( CompileOptions *cOpts); extern void xfield ( CompileOptions *cOpts); extern void xnew ( CompileOptions *cOpts); extern void xoldcop( CompileOptions *cOpts); extern void xpermgr( CompileOptions *cOpts); extern void xpermut( CompileOptions *cOpts); extern void xprimes( CompileOptions *cOpts); extern void xrandgr( CompileOptions *cOpts); extern void xrandsc( CompileOptions *cOpts); extern void xreadde( CompileOptions *cOpts); extern void xreadgr( CompileOptions *cOpts); extern void xreadpa( CompileOptions *cOpts); extern void xreadpe( CompileOptions *cOpts); extern void xreadpt( CompileOptions *cOpts); extern void xstorag( CompileOptions *cOpts); extern void xtoken ( CompileOptions *cOpts); extern void xutil ( CompileOptions *cOpts); xaddsge( &mainOpts); xbitman( &mainOpts); xcopy ( &mainOpts); xcstbor( &mainOpts); xerrmes( &mainOpts); xessent( &mainOpts); xfactor( &mainOpts); xfield ( &mainOpts); xnew ( &mainOpts); xoldcop( &mainOpts); xpermgr( &mainOpts); xpermut( &mainOpts); xprimes( &mainOpts); xrandgr( &mainOpts); xrandsc( &mainOpts); xreadde( &mainOpts); xreadgr( &mainOpts); xreadpa( &mainOpts); xreadpe( &mainOpts); xreadpt( &mainOpts); xstorag( &mainOpts); xtoken ( &mainOpts); xutil ( &mainOpts); } guava-3.6/src/leon/src/orbit.h0000644017361200001450000000036711026723452016155 0ustar tabbottcrontab#ifndef ORBIT #define ORBIT extern FIXUP1 minimalPointOfOrbit( PermGroup *G, Unsigned level, Unsigned point, UnsignedS *minPointOfOrbit, UnsignedS *minPointKnown, UnsignedS *minPointKnownCount, UnsignedS *invOmega) ; #endif guava-3.6/src/leon/src/factoria.h0000644017361200001450000000004311026723452016615 0ustar tabbottcrontab#ifndef FACTORIA #define FACTORIA guava-3.6/src/leon/src/gcent.sh0000755017361200001450000000003211026723452016311 0ustar tabbottcrontab#!/bin/sh cent -group $* guava-3.6/src/leon/src/chbase.c0000644017361200001450000005433611026723452016263 0ustar tabbottcrontab/* File chbase.c. Contains functions performing base changes in permutation groups, as follows: insertBasePoint: Insert a new point at specified level into the base for a permutation group. changeBase: Change the base for a permutation group. */ #include #include "group.h" #include "addsgen.h" #include "cstborb.h" #include "errmesg.h" #include "essentia.h" #include "factor.h" #include "new.h" #include "permgrp.h" #include "permut.h" #include "randgrp.h" #include "storage.h" #include "repinimg.h" #include "settoinv.h" extern GroupOptions options; CHECK( chbase) #define MAX_CONJ_LEVEL 4 /*-------------------------- insertBasePoint ------------------------------*/ /* The function insertBasePoint may be used to insert a new point into the base for a permutation group at a specified level. Base points at a lower level are unchanged. At a higher level, the new base points are arbitrary; redundant base points at a higher level are removed. It is assumed that the base point to be inserted differs from all base points at a higher level. A random Schreier approach is used. Currently all words are multiplied out at generated. Note: insertBasePoint does not work for groups that have been compressed nor on groups for which inverse permutations exist. */ void insertBasePoint( PermGroup *G, /* The permutation group (base and sgs known). */ Unsigned newLevel, /* If newLevel = i and newBasePoint = b, the */ Unsigned newBasePoint) /* base for G is changed from (b[1],..., */ /* b(i-1),...) to (b[1],...,b[i-1],b,...). */ { Unsigned level, pt, image, i, uTemp1, uTemp2, uTemp3; UnsignedS *conjugateMap, *conjugateMapInv, *tempImg; UnsignedS *temp1, *temp2, *temp3, *temp4; FactoredInt oldOrder, oldLen; Permutation *gen, *tempGen, *randGen; Permutation **svec, **tempSVec, **temp5; UnsignedS *oldBasicOrbLen = allocIntArrayBaseSize(); UnsignedS **oldBasicOrbit = (UnsignedS **) allocPtrArrayBaseSize(); Permutation ***oldSchreierVec = (Permutation ***) allocPtrArrayBaseSize(); char *isGenAtLevel = allocBooleanArrayBaseSize(); unsigned loopCount = 0; /* For bug fix wrt random number generator. */ /* First we handle the trivial case in which newLevel == G->baseSize+1 (The largest value it should ever have). Here we just extend the base. */ if ( newLevel == G->baseSize+1 ) { G->base[++G->baseSize] = newBasePoint; G->basicOrbLen[G->baseSize] = 1; G->basicOrbit[G->baseSize] = allocIntArrayDegree(); G->basicOrbit[G->baseSize][1] = G->base[G->baseSize]; G->schreierVec[G->baseSize] = allocPtrArrayDegree(); for ( i = 1 ; i <= G->degree ; ++i ) G->schreierVec[G->baseSize][i] = NULL; G->schreierVec[G->baseSize][G->base[G->baseSize]] = FIRST_IN_ORBIT; freeIntArrayBaseSize( oldBasicOrbLen); freePtrArrayBaseSize( oldBasicOrbit); freePtrArrayBaseSize( oldSchreierVec); freeBooleanArrayBaseSize( isGenAtLevel); return; } /* If the base point is already present at the correct level, there is nothing to do, so return. */ if ( G->base[newLevel] == newBasePoint ) { freeIntArrayBaseSize( oldBasicOrbLen); freePtrArrayBaseSize( oldBasicOrbit); freePtrArrayBaseSize( oldSchreierVec); freeBooleanArrayBaseSize( isGenAtLevel); return; } /* If the new base point is conjugate in G^(newLevel) to the old, and if newLevel <= MAX_CONJ_LEVEL, we merely conjugate the old base and return. */ if ( newLevel <= MAX_CONJ_LEVEL && G->schreierVec[newLevel][newBasePoint] ) { conjugateMapInv = allocIntArrayDegree(); conjugateMap = allocIntArrayDegree(); tempSVec = allocPtrArrayDegree(); for ( pt = 1 ; pt <= G->degree ; ++pt ) conjugateMapInv[pt] = G->schreierVec[newLevel][newBasePoint]->invImage[pt]; image = conjugateMapInv[newBasePoint]; while ( image != G->base[newLevel] ) { REPLACE_BY_INV_IMAGE( conjugateMapInv, G->schreierVec[newLevel][image], G->degree, temp1, temp2, temp3, temp4) image = conjugateMapInv[newBasePoint]; } SET_TO_INVERSE( conjugateMapInv, conjugateMap, G->degree, temp1, temp2, uTemp1, uTemp2, uTemp3) for ( level = 1 ; level <= G->baseSize ; ++level ) { G->base[level] = conjugateMap[G->base[level]]; for ( i = 1 ; i <= G->basicOrbLen[level] ; ++i ) G->basicOrbit[level][i] = conjugateMap[G->basicOrbit[level][i]]; for ( pt = 1 ; pt <= G->degree ; ++pt ) tempSVec[conjugateMap[pt]] = G->schreierVec[level][pt]; EXCHANGE( G->schreierVec[level], tempSVec, temp5) } tempImg = conjugateMapInv; for ( gen = G->generator ; gen ; gen = gen->next ) { for ( pt = 1 ; pt <= G->degree ; ++pt ) tempImg[conjugateMap[pt]] = conjugateMap[gen->image[pt]]; EXCHANGE( gen->image, tempImg, temp4); if ( gen->invImage == tempImg ) gen->invImage = gen->image; else { SET_TO_INVERSE( gen->image, gen->invImage, G->degree, temp1, temp2, uTemp1, uTemp2, uTemp3) } } freeIntArrayDegree( conjugateMap); freeIntArrayDegree( tempImg); freePtrArrayDegree( tempSVec); freeIntArrayBaseSize( oldBasicOrbLen); freePtrArrayBaseSize( oldBasicOrbit); freePtrArrayBaseSize( oldSchreierVec); freeBooleanArrayBaseSize( isGenAtLevel); return; } /* ?????????? probably not needed If the new base point is present at a higher level, we record that level in variable oldLevel. Otherwise set oldLevel to G->baseSize+1. for ( oldLevel = newLevel+1 ; oldLevel <= G->baseSize && G->base[oldLevel] != newBasePoint ; ++oldLevel ) ; */ /* Now we insert the new base point into the base for G. Note the base point may be duplicated at a higher level. This shouldn't cause a problem, and later it will be deleted as redundant. At this point, we don't allocate another basic orbit vector or Schreier vector. */ randGen = newIdentityPerm(G->degree); ++G->baseSize; if ( G->baseSize > options.maxBaseSize ) ERROR1i( "insertBasePoint", "Base size exceeded maximum of ", options.maxBaseSize, ". Rerun with -mb option."); for ( level = G->baseSize ; level > newLevel ; --level ) G->base[level] = G->base[level-1]; G->base[newLevel] = newBasePoint; /* Here we allocate new basic-orbit vectors and Schreier vectors for G at levels newLevel and higher. (The old basic-orbit vectors and Schreier vectors at these levels must preserved at this point; this will be done in arrays oldBasicOrbit and oldSchreierVec, and the old basic orbit lengths at levels newLevel and higher will be preserved in oldBasicOrbLen.) */ for ( level = newLevel ; level <= G->baseSize ; ++level ) { oldBasicOrbLen[level] = G->basicOrbLen[level]; oldBasicOrbit[level] = G->basicOrbit[level]; oldSchreierVec[level] = G->schreierVec[level]; G->basicOrbit[level] = allocIntArrayDegree(); G->schreierVec[level] = allocPtrArrayDegree(); } /* Here we record the order of G, and then modify it to remove the contribution of the basic orbits at levels newLevel and above. We also set these basic orbit lengths to 1. */ oldOrder = *G->order; for ( level = newLevel ; level < G->baseSize ; ++level ) { oldLen = factorize( oldBasicOrbLen[level]); factDivide( G->order, &oldLen); G->basicOrbLen[level] = 1; } G->basicOrbLen[G->baseSize] = 1; /* Here we adjust the levels of the generators of G. Generators not essential at some level less than newLevel are flagged for later removal by setting their level to 0. These generators cannot be deleted now because their invImage fields are still needed below. However, the image field will be deleted now unless it is the invImage field of another generator (i.e., unless the inversePermutation field is nonnull. (Note that temporarily we have an invalid data structure for permutations.) We also flag those integers i with i >= newLevel for which there remains a generator at level i. */ for ( level = newLevel ; level <= G->baseSize ; ++level ) isGenAtLevel[level] = FALSE; for ( gen = G->generator ; gen ; gen = gen->next ) if ( ESSENTIAL_BELOW_LEVEL(gen,newLevel) ) { if ( gen->level >= newLevel ) { gen->level = (gen->image[newBasePoint] != newBasePoint ) ? newLevel : (gen->level + 1); isGenAtLevel[gen->level] = TRUE; } } else { gen->level = 0; if ( gen->image != gen->invImage ) { freeIntArrayDegree( gen->image); gen->image = NULL; } MAKE_NOT_ESSENTIAL_ALL( gen); } /* Now we construct the initial basic orbits at levels newLevel and higher, using any old generators retained because they were essential at a higher level. Note constructBasicOrbit must must flag essential generators. We also adjust the order of G*/ for ( level = newLevel ; level <= G->baseSize ; ++level ) if ( isGenAtLevel[level] ) constructBasicOrbit( G, level, "FindEssential"); else { G->basicOrbit[level][1] = G->base[level]; for ( pt = 1 ; pt <= G->degree ; ++pt ) G->schreierVec[level][pt] = NULL; G->schreierVec[level][G->base[level]] = FIRST_IN_ORBIT; } /* Now we repeatedly construct and test random elements of G^(newLevel) until the product of the basic orbit lengths is large enough, i.e., until newOrder = oldOrder. */ while ( !factEqual( &oldOrder, G->order) ) { /* Set randGen to a random permutation of G^(newLevel). */ for ( i = 1 ; i <= G->degree ; ++i ) randGen->image[i] = i; for ( level = newLevel ; level < G->baseSize ; ++level ) { ++loopCount; /* These four lines shouldn't */ if ( loopCount % 37 == 0 || /* be needed. They overcome */ loopCount % 181 == 0 ) /* a deficiency in the random */ randInteger(1,2); /* number generator. */ pt = oldBasicOrbit[level][ randInteger(1,oldBasicOrbLen[level]) ]; svec = oldSchreierVec[level]; while ( svec[pt] != FIRST_IN_ORBIT ) { REPLACE_BY_INV_IMAGE( randGen->image, svec[pt], G->degree, temp1, temp2, temp3, temp4) pt = svec[pt]->invImage[pt]; } } /* Attempt to factor randGen in terms of the new base. The loop terminates normally with level == G->baseSize+1 if g can be factored, and it terminates via the exit statement with level <= G->baseSize otherwise. */ for ( level = newLevel ; level <= G->baseSize ; ++level ) { if ( G->schreierVec[level][randGen->image[G->base[level]]] == NULL ) break; while ( randGen->image[G->base[level]] != G->base[level] ) { REPLACE_BY_INV_IMAGE( randGen->image, G->schreierVec[level][randGen->image[G->base[level]]], G->degree, temp1, temp2, temp3, temp4) } } /* If randGen could not be factored, we adjoin it (as modified above) as a strong generator relative to the new base. Note that the level of randGen is the current value of the variable level. If randperm is added, we reallocate it. */ if ( level <= G->baseSize ) { if ( isInvolution( randGen) ) { if ( randGen->image != randGen->invImage ) freeIntArrayDegree( randGen->invImage); randGen->invImage = randGen->image; } else { if ( randGen->image == randGen->invImage ) randGen->invImage = allocIntArrayDegree(); SET_TO_INVERSE( randGen->image, randGen->invImage, G->degree, temp1, temp2, uTemp1, uTemp2, uTemp3) } addStrongGenerator( G, randGen, newLevel==1); randGen = newIdentityPerm( G->degree); } } /* Now we free the old basic orbit vectors and Schreier vectors, as well as the permutation randGen. */ for ( level = newLevel ; level < G->baseSize ; ++level ) { freeIntArrayDegree( oldBasicOrbit[level]); freePtrArrayDegree( oldSchreierVec[level]); } deletePermutation( randGen); /* Now we remove generators flagged for removal above. Note we cannot employ deletePermutation because we do not have a valid permutation data structure, as noted above. */ gen = G->generator; while ( gen ) if ( gen->level == 0 ) { if ( gen->last ) gen->last->next = gen->next; else G->generator = gen->next; if ( gen->next ) gen->next->last = gen->last; tempGen = gen; gen = gen->next; freeIntArrayDegree( tempGen->invImage); freePermutation( tempGen); } else gen = gen->next; /* Finally we remove redundant base points at level newLevel+1 or greater. */ for ( level = newLevel+1 ; level <= G->baseSize ; ++level ) if ( G->basicOrbLen[level] == 1 ) { --G->baseSize; freeIntArrayDegree( G->basicOrbit[level]); freePtrArrayDegree( G->schreierVec[level]); for ( i = level ; i <= G->baseSize ; ++i ) { G->base[i] = G->base[i+1]; G->basicOrbLen[i] = G->basicOrbLen[i+1]; G->basicOrbit[i] = G->basicOrbit[i+1]; G->schreierVec[i] = G->schreierVec[i+1]; } for ( gen = G->generator ; gen ; gen = gen->next ) if ( gen->level > level ) { --gen->level; for ( i = level ; i <= G->baseSize ; ++i ) if ( ESSENTIAL_AT_LEVEL(gen,i+1) ) MAKE_ESSENTIAL_AT_LEVEL(gen,i); else MAKE_NOT_ESSENTIAL_AT_LEVEL(gen,i); MAKE_NOT_ESSENTIAL_AT_LEVEL(gen,G->baseSize+1); } --level; } freeIntArrayBaseSize( oldBasicOrbLen); freePtrArrayBaseSize( oldBasicOrbit); freePtrArrayBaseSize( oldSchreierVec); freeBooleanArrayBaseSize( isGenAtLevel); } /*-------------------------- changeBase -----------------------------------*/ /* The function changeBase changes the base (and updates the strong generating set) for a permutation group with known base and strong generating set. */ void changeBase( PermGroup *G, /* The permutation group. */ UnsignedS *newBase) /* An origin-1 null-terminated sequence of points. */ /* The new base will consist of newBase, followed */ /* by arbitrary extra points as needed. Redundant */ /* base points will not be deleted from newBase, */ /* but no redundant points will be adjoined. */ { Unsigned level; for ( level = 1 ; newBase[level] ; ++level ) if ( level > G->baseSize || G->base[level] != newBase[level] ) insertBasePoint( G, level, newBase[level]); } /*-------------------------- constructCandidateList -----------------------*/ /* This static function constructCandidateList( G, level) is called only by function removeRedunSGens. It constructs and returns an xNext-linked list of all generators of G at level level or above, ordered so that presumably "desirable" generators occur first. The ordering is as follows: 0) Generators essential at levels level-1 or higher come first. 1) A single generator at level level, if not present in (1) above, comes next. 2) Generators essential at levels level+1,..,G->baseSize come next. 3) Any remaining generators at level level come next. 4) Finally, any remaining generators at levels level+1,...,G->baseSize come last. At a given level, involutory generators precede noninvolutory ones. Note the xLast field is used as a flag here; a null value signifies that the generator is not to be considered for addition to the list, either because it has level below level or it is already on the list. */ #define ADD_TO_LIST(i) \ (gen->xLast = NULL , gen->image == gen->invImage) ? \ ( gen->xNext = listHeader[2*i] , listHeader[2*i] = gen ) : \ ( gen->xNext = listHeader[2*i+1] , listHeader[2*i+1] = gen ) static Permutation *constructCandidateList( PermGroup *G, const Unsigned level) { Unsigned m; Permutation *listHeader[10] = {NULL}, *combinedList, *endPreviousList, *gen; BOOLEAN genAtLevelAdded = FALSE; /* Initializer xLast, as above. */ for ( gen = G->generator ; gen ; gen = gen->next ) gen->xLast = ( gen->level >= level ) ? (Permutation *) TRUE : NULL; /* First we add any generators in class (0) above. */ for ( gen = G->generator ; gen ; gen = gen->next ) if ( gen->xLast && ESSENTIAL_BELOW_LEVEL(gen,level) ) { ADD_TO_LIST(0); if ( gen->level == level ) genAtLevelAdded = TRUE; } /* Next we add a possible generator in class (1) above. */ if ( !genAtLevelAdded ) for ( gen = G->generator ; gen ; gen = gen->next ) if ( gen->xLast && gen->level == level ) { ADD_TO_LIST(1); break; } /* Next we add any generators in class (2) above. */ for ( gen = G->generator ; gen ; gen = gen->next ) if ( gen->xLast && ESSENTIAL_ABOVE_LEVEL(gen,level) ) ADD_TO_LIST(2); /* Next we add any generators in class (3) above. */ for ( gen = G->generator ; gen ; gen = gen->next ) if ( gen->xLast && gen->level == level ) ADD_TO_LIST(3); /* Finally we add any generators in class (4) above. */ for ( gen = G->generator ; gen ; gen = gen->next ) if ( gen->xLast ) ADD_TO_LIST(4); /* Finally we concatenate the lists. */ combinedList = NULL; endPreviousList = NULL; for ( m = 0 ; m <= 9 ; ++ m ) if ( listHeader[m] ) { if ( endPreviousList ) endPreviousList->xNext = listHeader[m]; else combinedList = listHeader[m]; for ( endPreviousList = listHeader[m] ; endPreviousList->xNext ; endPreviousList = endPreviousList->xNext ) ; endPreviousList->xNext = NULL; } /* Return a pointer to the list. */ return combinedList; } /*-------------------------- removeRedunSGens -----------------------------*/ /* The function removeRedunSGens( G, startLevel) removes redundant strong generators from the group G at levels startLevel,startLevel+1,..,G->baseSize. The essential fields at levels 1,...,startLevel-1 must be set; the function sets those at other levels. Inverse permutations must not yet have been added. The function returns the number of generators removed. */ Unsigned removeRedunSGens( PermGroup *G, Unsigned startLevel) { Unsigned level, correctOrbLen, pt; Unsigned removalCount = 0; Permutation *gen, *firstGen, *newGen, *tempGen; FactoredInt factoredOrbLen; /* Flag all generators as nonessential at levels startLevel,startLevel+1,..., G->baseSize. */ for ( gen = G->generator ; gen ; gen = gen->next ) MAKE_NOT_ESSENTIAL_ATABOV_LEVEL( gen, startLevel); /* Reconstruct basic orbits and Schreier vectors at levels G->baseSize,..., startLevel until each orbit has correct length. */ for ( level = G->baseSize ; level >= startLevel ; --level ) { correctOrbLen = G->basicOrbLen[level]; firstGen = constructCandidateList( G, level); factoredOrbLen = factorize( G->basicOrbLen[level]); factDivide( G->order, &factoredOrbLen); G->basicOrbLen[level] = 1; G->basicOrbit[level][1] = G->base[level]; for ( pt = 1 ; pt <= G->degree ; ++pt ) G->schreierVec[level][pt] = NULL; G->schreierVec[level][G->base[1]] = FIRST_IN_ORBIT; while ( G->basicOrbLen[level] < correctOrbLen ) { newGen = genExpandingBasicOrbit( &firstGen, G->basicOrbLen[level], G->basicOrbit[level], G->schreierVec[level]); MAKE_ESSENTIAL_AT_LEVEL(newGen,level); constructBasicOrbit( G, level, "KnownEssential" ); } } /* Free generators that are not essential at any level. */ gen = G->generator; while ( gen ) if ( ! ESSENTIAL_BELOW_LEVEL(gen,G->baseSize+1 ) ) { if ( gen->last ) gen->last->next = gen->next; else G->generator = gen->next; if ( gen->next ) gen->next->last = gen->last; tempGen = gen; gen = gen->next; deletePermutation( tempGen); ++removalCount; } else gen = gen->next; /* Return to caller. */ return removalCount; } /*-------------------------- restrictBasePoints ---------------------------*/ /* The function restrictBasePoints( G, acceptablePoint) attempts to change the base for G so that all base points lie in the 1-based null-terminated list acceptablePoint of points. It produces a base of the form a[1],...,a[m],a[m+1],...,a[k], where a[1],...,a[m] lie in the list of acceptable points and where any permutation in G^(m+1) fixes any point in the list. It returns m. */ Unsigned restrictBasePoints( PermGroup *const G, Unsigned *acceptablePoint) { Unsigned level, i, pt; char *isAcceptable; isAcceptable = allocBooleanArrayDegree(); for ( i = 1 ; i <= G->degree ; ++i ) isAcceptable[i] = FALSE; for ( i = 1 ; acceptablePoint[i] != 0 ; ++i ) isAcceptable[acceptablePoint[i]] = TRUE; for ( level = 1 ; level <= G->baseSize ; ++level ) if ( !isAcceptable[G->base[level]] ) { for ( i = 1 ; (pt = acceptablePoint[i]) != 0 ; ++i ) if ( !isFixedPointOf( G, level, pt) ) { insertBasePoint( G, level, pt); break; } if ( pt == 0 ) { freeBooleanArrayDegree( isAcceptable); return level-1; } } freeBooleanArrayDegree( isAcceptable); return G->baseSize; } guava-3.6/src/leon/src/readper.c0000644017361200001450000001155011026723452016447 0ustar tabbottcrontab/* File readPer. Contains routines to read in and write out individual permutations. The files must already be open. */ #include #include #include #include "group.h" #include "groupio.h" #include "errmesg.h" #include "essentia.h" #include "readgrp.h" #include "storage.h" #include "token.h" CHECK( readpe) extern GroupOptions options; /*-------------------------- readPermutation ------------------------------*/ Permutation *readPermutation( char *libFileName, char *libName, const Unsigned requiredDegree, const BOOLEAN inverseFlag) /* If true, adjoin inverse. */ { Permutation *perm = allocPermutation(); Unsigned pt; Token token, saveToken; char inputBuffer[81]; FILE *libFile; /* Open input file. */ libFile = fopen( libFileName, "r"); if ( libFile == NULL ) ERROR1s( "readPermutation", "File ", libFileName, " could not be opened for input.") /* Initialize input routines to correct file. */ setInputFile( libFile); lowerCase( libName); /* Initialize storage manager. */ initializeStorageManager( requiredDegree); /* Search for the correct library. Terminate with error message if not found. */ rewind( libFile); for (;;) { fgets( inputBuffer, 80, libFile); if ( feof(libFile) ) ERROR1s( "readPermutation", "Library block ", libName, " not found in specified library.") if ( inputBuffer[0] == 'l' || inputBuffer[0] == 'L' ) { setInputString( inputBuffer); if ( ( (token = sReadToken()) , token.type == identifier && strcmp(lowerCase(token.value.identValue),"library") == 0 ) && ( (token = sReadToken()) , token.type == identifier && strcmp(lowerCase(token.value.identValue),libName) == 0 ) ) break; } } /* Set the degree of the permutation (must be specified). */ perm->degree = requiredDegree; /* Read the permutation name. */ if ( (token = nkReadToken() , saveToken = token , token.type == identifier) && (token = nkReadToken() , token.type == equal) ) strcpy( perm->name, saveToken.value.identValue); /* Read the permutation. */ perm->level = 0; MAKE_NOT_ESSENTIAL_ALL( perm); perm->image = allocIntArrayDegree(); for ( pt = 1 ; pt <= requiredDegree ; ++pt ) perm->image[pt] = 0; /* Check whether permutation is in cycle or image format, and call appropriate function to finish read. */ switch ( token = readToken() , token.type ) { case leftParen: unreadToken( token); readCyclePerm( perm); break; case slash: unreadToken( token); readImagePerm( perm); break; default: unreadToken( token); ERROR( "readPermutation", "Invalid symbol at start of cycle/image field."); } /* Adjoin inverse, if requested. */ if ( inverseFlag ) { perm->invImage = allocIntArrayDegree(); for ( pt = 1 ; pt <= requiredDegree ; ++pt ) perm->invImage[perm->image[pt]] = pt; } /* Close the input file and return. */ fclose( libFile); return perm; } /*-------------------------- writePermutation -----------------------------*/ void writePermutation( char *libFileName, char *libName, Permutation *perm, char *format, char *comment) { Unsigned column; FILE *libFile; /* Open output file. */ libFile = fopen( libFileName, options.outputFileMode); if ( libFile == NULL ) ERROR1s( "writePermutation", "File ", libFileName, " could not be opened for output.") setOutputFile( libFile); /* Write library name. */ fprintf( libFile, "LIBRARY %s;", libName); /* Write the comment. */ if ( comment ) fprintf( libFile, "\n& %s &", comment); /* Assign the name x if the permutation has no name. */ if ( !perm->name[0] ) strcpy( perm->name, "x"); column = 1 + fprintf( libFile, "\n %s = ", perm->name); if ( strcmp( format, "image") == 0 ) writeImagePerm( perm, column, 8, 80); else writeCyclePerm( perm, column, 8, 80); fprintf( libFile, ";"); /* Write "finish". */ fprintf( libFile, "\nFINISH;\n"); /* Return to caller. */ return; } /*-------------------------- writePermutationRestricted -------------------*/ /* This procedure is identical to writePermutation, except that it assumes that perm fixes {1,...,restrictedDegree} (not checked!) and writes it out as a permutation of degree restrictedDegree. */ void writePermutationRestricted( char *libFileName, char *libName, Permutation *perm, char *format, char *comment, Unsigned restrictedDegree) { Unsigned trueDegree = perm->degree; perm->degree = restrictedDegree; writePermutation( libFileName, libName, perm, format, comment); perm->degree = trueDegree; } guava-3.6/src/leon/src/ccent.h0000644017361200001450000000563711026723452016137 0ustar tabbottcrontab#ifndef CCENT #define CCENT extern PermGroup *centralizer( PermGroup *const G, /* The containing permutation group. */ const Permutation *const e, /* The point set to be stabilized. */ PermGroup *const L, /* A (possibly trivial) known subgroup of the stabilizer in G of Lambda. (A null pointer designates a trivial group.) */ const BOOLEAN noPartn, /* If true, suppresses use of ordered partition based on cycle size. */ const BOOLEAN longCycleOption, /* Always choose next base point in longest cycle; however, at present, all cycles of length 5 or greater are treated as having the same length. */ const BOOLEAN stdRBaseOption) /* Use std base selection algorithm, ignoring cycle lengths. */ ; extern Permutation *conjugatingElement( PermGroup *const G, /* The containing permutation group. */ const Permutation *const e, /* One of the elements. */ const Permutation *const f, /* The other element. */ PermGroup *const L_L, /* A (possibly trivial) known subgroup of the centralizer in G of e. (A null pointer designates a trivial group.) */ PermGroup *const L_R, /* A (possibly trivial) known subgroup of the centralizer in G of f. (A null pointer designates a trivial group.) */ const BOOLEAN noPartn, /* If true, suppresses use of ordered partition based on cycle size. */ const BOOLEAN longCycleOption, /* Always choose next base point in longest cycle; however, at present, all cycles of length 5 or greater are treated as having the same length. */ const BOOLEAN stdRBaseOption) /* Use std base selection algorithm, ignoring cycle lengths. */ ; extern PermGroup *groupCentralizer( PermGroup *const G, /* The containing permutation group. */ const PermGroup *const E, /* The point set to be stabilized. */ PermGroup *const L, /* A (possibly trivial) known subgroup of the stabilizer in G of Lambda. (A null pointer designates a trivial group.) */ const Unsigned centPartnCount, const Unsigned centGenCount) ; extern Partition *cycleLengthPartn( const Permutation *const e, UnsignedS *const cycleLen, UnsignedS *const cycleStructure) ; extern Partition *multipleCycleLengthPartn( const Permutation *const ex[]) ; #endif guava-3.6/src/leon/src/essentia.h0000644017361200001450000000151111026723452016641 0ustar tabbottcrontab#ifndef ESSENTIA #define ESSENTIA extern BOOLEAN essentialAtLevel( const Permutation *const perm, const Unsigned level) ; extern BOOLEAN essentialBelowLevel( const Permutation *const perm, const Unsigned level) ; extern BOOLEAN essentialAboveLevel( const Permutation *const perm, const Unsigned level) ; extern void makeEssentialAtLevel( Permutation *const perm, const Unsigned level) ; extern void makeNotEssentialAtLevel( Permutation *const perm, const Unsigned level) ; extern void makeNotEssentialAtAboveLevel( Permutation *const perm, const Unsigned level) ; extern void makeNotEssentialAll( Permutation *const perm) ; extern void makeUnknownEssential( Permutation *const perm) ; extern void copyEssential( Permutation *const newPerm, const Permutation *const oldPerm) ; #endif guava-3.6/src/leon/src/relator.h0000644017361200001450000000401511026723452016500 0ustar tabbottcrontab#ifndef RELATOR #define RELATOR extern BOOLEAN verifyCosetList( Unsigned degree); BOOLEAN onFreeList( Unsigned coset); UnsignedS relatorLevel( const Relator *const r) ; extern Unsigned symmetricLength( const Relator *const r) ; extern Unsigned symmetricWordLength( const Word *const w) ; extern Relator *addRelatorSortedFromWord( PermGroup *const G, Word *const w, BOOLEAN fbRelFlag, BOOLEAN doubleFlag) ; extern Unsigned addOccurencesForRelator( const Relator *const r, Unsigned priority) ; extern void resetTable( Permutation *genHeader, Unsigned basicOrbLen, Unsigned *basicOrbit) ; extern Unsigned findConsequences( DeductionQueue *deductionQueue, const Unsigned level, const Deduction *const deduc) ; extern Unsigned traceNewRelator( const PermGroup *const G, const Unsigned level, DeductionQueue *deductionQueue, const Relator *const newRel) ; extern Unsigned processCoincidence( const PermGroup *const G, DeductionQueue *deductionQueue, const Permutation *const genHeader, const Unsigned coset1, const Unsigned coset2) ; extern Unsigned xFindConsequences( const PermGroup *const G, DeductionQueue *deductionQueue, const Unsigned level, const Deduction *const deduc, const Permutation *const genHeader) ; extern Unsigned xTraceNewRelator( const PermGroup *const G, const Unsigned level, DeductionQueue *deductionQueue, const Relator *const newRel, const Permutation *const genHeader) ; extern void makeDefinition( const Unsigned coset, Permutation *const gen, DeductionQueue *const deducQueue, DefinitionList *const defnList, Permutation *const genHeader) ; extern Unsigned forceCollapse( const PermGroup *const G, const Unsigned level, Permutation *genHeader, DeductionQueue *const deductionQueue, DefinitionList *const defnList, Unsigned *jPtr, Permutation **hPtr, Word **wPtr) ; extern BOOLEAN verifyCosetList( Unsigned degree) ; extern BOOLEAN onFreeList( Unsigned coset) ; #endif guava-3.6/src/leon/src/oldcopy.c0000644017361200001450000000272611026723452016503 0ustar tabbottcrontab/* File oldcopy.c. Contains functions that copy an object to an already- existing object of the same type. */ #include #include #include "group.h" #include "storage.h" CHECK( oldcop) /*-------------------------- copyPermutation ------------------------------*/ /* This function copies one permutation to another. The destination permutation must already exist; its invImage field may be allocated or freed, depending on whether the source permutation has an invImage field. The level and essential fields are not copied. */ void copyPermutation( const Permutation *const fromPerm, Permutation *const toPerm) { Unsigned pt; strcpy ( toPerm->name, fromPerm->name); toPerm->degree = fromPerm->degree; for ( pt = 1 ; pt <= fromPerm->degree ; ++pt ) toPerm->image[pt] = fromPerm->image[pt]; if ( fromPerm->invImage ) { if ( fromPerm->invImage == fromPerm->image ) { if ( toPerm->invImage && toPerm->invImage != toPerm->image ) freeIntArrayDegree( toPerm->invImage); toPerm->invImage = toPerm->image; } else { if ( !toPerm->invImage || toPerm->invImage == toPerm->image ) toPerm->invImage = allocIntArrayDegree(); for ( pt = 1 ; pt <= fromPerm->degree ; ++pt ) toPerm->invImage[pt] = fromPerm->invImage[pt]; } } else if ( toPerm->invImage ) { freeIntArrayDegree( toPerm->invImage); toPerm->invImage = NULL; } } guava-3.6/src/leon/src/parstab.sh0000755017361200001450000000003511026723452016650 0ustar tabbottcrontab#!/bin/sh setstab -partn $* guava-3.6/src/leon/src/readdes.h0000644017361200001450000000236611026723452016446 0ustar tabbottcrontab#ifndef READDES #define READDES extern Matrix_01 *readDesign( char *libFileName, char *libName, Unsigned requiredPointCount, /* 0 = any */ Unsigned requiredBlockCount) /* 0 = any */ ; extern void writeDesign( char *libFileName, char *libName, Matrix_01 *matrix, char *comment) ; extern Matrix_01 *read01Matrix( char *libFileName, char *libName, BOOLEAN transposeFlag, /* If true, matrix is transposed. */ BOOLEAN adjoinIdentity, /* If true, form (A|I), A = matrix read. */ Unsigned requiredSetSize, /* 0 = any */ Unsigned requiredNumberOfRows, /* 0 = any */ Unsigned requiredNumberOfCols) /* 0 = any */ ; extern void write01Matrix( char *libFileName, char *libName, Matrix_01 *matrix, BOOLEAN transposeFlag, char *comment) ; extern Code *readCode( char *libFileName, char *libName, BOOLEAN reduceFlag, /* If true, gen matrix is reduced. */ Unsigned requiredSetSize, /* 0 = any */ Unsigned requiredDimension, /* 0 = any */ Unsigned requiredLength) /* 0 = any */ ; extern void writeCode( char *libFileName, char *libName, Code *C, char *comment) ; #endif guava-3.6/src/leon/src/permut.c0000644017361200001450000002727011026723452016347 0ustar tabbottcrontab/* File permut.c. Contains miscellaneous functions performing simple computations with permutations, as follows: isIdentity: Returns true if a permutation is the identity and false otherwise. Requires on the degree and image fields of the permutation to be filled in. adjoinInvImage: Adjoins the array invImage of inverse images to a permutation. The array image of images must already be present. For the identity or for an involution, a separate array is not allocated. leftMultiply: Multiplies a given permutation s on the left by a permutation t (i.e., s is replaced by ts, and t remains unchanged). */ #include #include "group.h" #include "factor.h" #include "errmesg.h" #include "factor.h" #include "new.h" #include "storage.h" #include "repimg.h" #include "repinimg.h" #include "settoinv.h" CHECK( permut) /*-------------------------- isIdentity -----------------------------------*/ /* This function may be used to test if a permutation is the identity. It returns true if the permutation is the identity and false otherwise. Only the degree and image fields of the permutation are required. If the permutation lies in a group with known base, the faster function isIdentityElt should be used instead. */ BOOLEAN isIdentity( const Permutation *const s) { Unsigned pt; for ( pt = 1 ; pt <= s->degree ; ++pt) if ( s->image[pt] != pt ) return FALSE; return TRUE; } /*-------------------------- isInvolution ---------------------------------*/ /* This function may be used to test if a permutation is an involution or is the identity. It returns true if so and false otherwise. Only the degree and image fields of the permutation are required. If the permutation lies in a group with known base, the faster function isInvolutoryElt should be used instead. */ BOOLEAN isInvolution( const Permutation *const s) { Unsigned pt; for ( pt = 1 ; pt <= s->degree ; ++pt) if ( s->image[s->image[pt]] != pt ) return FALSE; return TRUE; } /*-------------------------- pointMovedBy ---------------------------------*/ /* The function pointMovedBy( perm) returns a point moved by the permutation perm. If perm is the identity, the program is terminated with an error message. */ Unsigned pointMovedBy( const Permutation *const perm) { Unsigned pt; for ( pt = 1 ; pt <= perm->degree ; ++pt ) if ( perm->image[pt] != pt ) return pt; ERROR( "pointMovedBy", "Attempt to find a point moved by identity " "permutation"); } /*-------------------------- adjoinInvImage -------------------------------*/ /* The function adjoinInvImage may be used to adjoin an array of inverse images (invImage) to a permutation. The array image of images must already be present. If the array invImage is already present, the function does nothing. For any involutory permutation, the function merely sets the pointer invImage to point to the existing array image. */ void adjoinInvImage( Permutation *s) /* The permutation group (base and sgs known). */ { Unsigned degree = s->degree; Unsigned pt; /* Check if inverse image array already exists? If so, do nothing. */ if ( ! s->invImage ) { /* Allocate and construct the array of inverse images. */ s->invImage = allocIntArrayDegree(); for ( pt = 1 ; pt <= degree ; ++pt ) s->invImage[s->image[pt]] = pt; s->invImage[degree+1] = 0; /* Check if the permutation is an involution, adjust if so. */ for ( pt = 1 ; pt <= degree && s->image[pt] == s->invImage[pt] ; ++pt ) ; if ( pt > degree ) { freeIntArrayDegree( s->invImage); s->invImage = s->image; } } } /*-------------------------- leftMultiply ---------------------------------*/ /* The function leftMultiply( s, t) multiplies the permutation s on the left by the permutation t. */ void leftMultiply( Permutation *const s, const Permutation *const t) { UnsignedS *oldImage = allocIntArrayDegree(); Unsigned pt; for ( pt = 1 ; pt <= s->degree ; ++pt ) oldImage[pt] = s->image[pt]; for ( pt = 1 ; pt <= s->degree ; ++pt) s->image[pt] = oldImage[t->image[pt]]; freeIntArrayDegree( oldImage); if ( s->invImage ) if ( isInvolution( s) ) if ( s->invImage != s->image ) { freeIntArrayDegree( s->invImage); s->invImage = s->image; } else ; else { if ( s->invImage == s->image ) s->invImage = allocIntArrayDegree(); for ( pt = 1 ; pt <= s->degree ; ++pt ) s->invImage[s->image[pt]] = pt; } } /*-------------------------- rightMultiply ---------------------------------*/ /* The function rightMultiply( s, t) multiplies the permutation s on the right by the permutation t. If s contains inverse images initially, they will be updated. Note that t need not have inverse images. */ void rightMultiply( Permutation *const s, const Permutation *const t) { Unsigned uTemp1, uTemp2, uTemp3; UnsignedS *temp1, *temp2, *temp3, *temp4; REPLACE_BY_IMAGE( s->image, t, s->degree, temp1, temp2, temp3, temp4) if ( s->invImage ) if ( isInvolution( s) ) if ( s->invImage != s->image ) { freeIntArrayDegree( s->invImage); s->invImage = s->image; } else ; else { if ( s->invImage == s->image ) s->invImage = allocIntArrayDegree(); SET_TO_INVERSE( s->image, s->invImage, s->degree, temp1, temp2, uTemp1, uTemp2, uTemp3) } } /*-------------------------- rightMultiplyInv ------------------------------*/ /* The function rightMultiplyInv( s, t) multiplies the permutation s on the right by the inverse of the permutation t. If s contains inverse images initially, they will be updated. Note t must have inverse images. */ void rightMultiplyInv( Permutation *s, Permutation *t) { Unsigned uTemp1, uTemp2, uTemp3; UnsignedS *temp1, *temp2, *temp3, *temp4; if ( !t->invImage ) ERROR( "rightMultiplyInv", "Inverse image array for permutation not " "available."); REPLACE_BY_INV_IMAGE( s->image, t, s->degree, temp1, temp2, temp3, temp4) if ( s->invImage ) if ( isInvolution( s) ) if ( s->invImage != s->image ) { freeIntArrayDegree( s->invImage); s->invImage = s->image; } else ; else { if ( s->invImage == s->image ) s->invImage = allocIntArrayDegree(); SET_TO_INVERSE( s->image, s->invImage, s->degree, temp1, temp2, uTemp1, uTemp2, uTemp3) } } /*-------------------------- permOrder ------------------------------------*/ /* The function permOrder( perm) returns the order of permutation perm. The order is returned as a long integer. The function returns 0 if the order exceeds ULONG_MAX. */ unsigned long permOrder( const Permutation *const perm ) { unsigned long orbLen, multiplier, order; Unsigned pt, basePt, imagePt; char *found = allocBooleanArrayDegree(); for (pt = 1; pt <= perm->degree; ++pt) found[pt] = FALSE; for ( basePt = 1, order = 1; basePt <= perm->degree; ++basePt ) if ( ! found[basePt] ) { orbLen = 0; imagePt = basePt; do { ++orbLen; imagePt = perm->image[imagePt]; found[imagePt] = TRUE; } while ( imagePt != basePt ); if (order % orbLen != 0) if ( order <= ULONG_MAX / (multiplier = orbLen / gcd(order,orbLen)) ) order *= multiplier; else { freeBooleanArrayDegree( found); return 0; } } freeBooleanArrayDegree( found); return order; } /*-------------------------- raisePermToPower -----------------------------*/ /* The function raisePermToPower replaces a given permutation by a designated power of that permutation. INVERSE PERMUTATIONS ARE NOT HANDLED. */ void raisePermToPower( Permutation *const perm, /* The permutation to be replaced. */ const long power) /* Upon return, perm has been replaced by perm^power. */ { Unsigned i, pt, img, imgIndex, cycleLen; UnsignedS *cycle = allocIntArrayDegree(); char *found = allocBooleanArrayDegree(); /* Initialize found[pt] to false for all points pt. When the cycle of pt has been constructed, found[pt] will be set to true. */ for ( pt = 1 ; pt <= perm->degree ; ++pt ) found[pt] = FALSE; for ( pt = 1 ; pt <= perm->degree ; ++pt ) if ( !found[pt] ) { /* Construct the cycle of point pt. */ cycleLen = 0; img = pt; do { cycle[cycleLen++] = img; found[img] = TRUE; img = perm->image[img]; } while( img != pt ); /* Replace perm by perm^power on cycle just constructed. */ for ( i = 0 ; i < cycleLen ; ++i ) { imgIndex = (i + power) % cycleLen; perm->image[cycle[i]] = cycle[imgIndex]; if ( perm->invImage ) perm->invImage[cycle[imgIndex]] = cycle[i]; } } /* Check if the power is an involution. */ if ( isInvolution(perm) && perm->invImage != perm->image ) { freeIntArrayDegree( perm->invImage); perm->invImage = perm->image; } /* Free temporary storage. */ freeIntArrayDegree( cycle); freeBooleanArrayDegree( found); } /*-------------------------- permMapping ----------------------------------*/ /* This function returns a new permutation mapping given sequence of integers to another. */ Permutation *permMapping( const Unsigned degree, /* The degree of the new permutation.*/ const UnsignedS seq1[], /* The first sequence (must have len = degree). */ const UnsignedS seq2[]) /* The second sequence (must have len = degree. */ { Unsigned i; Permutation *newPerm = newUndefinedPerm( degree); for ( i = 1 ; i <= degree ; ++i ) newPerm->image[seq1[i]] = seq2[i]; adjoinInvImage( newPerm); return newPerm; } /*-------------------------- checkConjugacy --------------------------------------*/ /* The function checkConjugacy( e, f, conjPerm) returns true if permutation conjPerm conjugates permutation e to permutation f, that is, if e ^ conjPerm = f, or equivalently, e * conjPerm = conjPerm * f. */ BOOLEAN checkConjugacy( const Permutation *const e, const Permutation *const f, const Permutation *const conjPerm) { int pt; for ( pt = 1 ; pt <= e->degree ; ++pt ) if ( conjPerm->image[e->image[pt]] != f->image[conjPerm->image[pt]] ) return FALSE; return TRUE; } /*-------------------------- isValidPermutation ----------------------------------*/ #include "enum.h" BOOLEAN isValidPermutation( const Permutation *const perm, const Unsigned degree, const Unsigned xCos, const Unsigned *const equivPt) { Unsigned pt; if ( perm->degree != degree ) { printf( "\n*** Permutation %s has incorrect degree %u.", perm->name, perm->degree); return FALSE; } for ( pt = 1 ; pt <= degree ; ++pt ) if ( perm->image[pt] < 1 || (perm->image[pt] & NHB) > degree+xCos || equivPt[perm->invImage[equivPt[perm->image[pt] & NHB]] & NHB] != pt ) { printf( "\n*** Permutation %s has invalid image/invImage field at %u.", perm->name, pt); return FALSE; } return TRUE; } guava-3.6/src/leon/src/partn.h0000644017361200001450000000203611026723452016155 0ustar tabbottcrontab#ifndef PARTN #define PARTN extern void popToHeight( PartitionStack *piStack, /* The partition stack to pop. */ Unsigned newHeight) /* The new height for the stack. */ ; extern void xPopToLevel( CellPartitionStack *xPiStack, /* The cell partition stack to pop. */ UnsignedS *applyAfterLevel, Unsigned newHeight) /* The new height for the stack. */ ; extern void *constructOrbitPartition( PermGroup *G, /* The permutation group. */ Unsigned level, /* The orbits of G^(level) will be found. */ UnsignedS *orbitNumberOf, /* Set so that orbitNumberOf[pt] is the number of the orbit containing pt. */ UnsignedS *sizeOfOrbit) /* Set so that sizeOfOrbit[i] is the size of the i'th orbit. */ ; extern Unsigned cellNumberAtDepth( const PartitionStack *const UpsilonStack, const Unsigned depth, const Unsigned alpha) ; extern Unsigned numberOfCells( const Partition *const Pi) ; #endif guava-3.6/src/leon/src/permgrp.h0000644017361200001450000000545011026723452016510 0ustar tabbottcrontab#ifndef PERMGRP #define PERMGRP extern Unsigned genCount( const PermGroup *const G, /* The permutation group. */ Unsigned *involCount) /* If nonnull, set to number of involutory generators. */ ; extern BOOLEAN isFixedPointOf( const PermGroup *const G, /* A group with known base and sgs. */ const Unsigned level, /* The level mentioned above. */ const Unsigned point) /* Check if this point is a fixed point. */ ; extern BOOLEAN isNontrivialGroup( PermGroup *G) /* The permutation group to test. */ ; extern Unsigned levelIn( PermGroup *G, /* The perm group (base and baseSize filled in). */ Permutation *perm) /* The permutation whose level is returned. */ ; extern BOOLEAN isIdentityElt( PermGroup *G, /* The permutation group (base known). */ Permutation *perm) /* The permutation known to lie in G. */ ; extern BOOLEAN isInvolutoryElt( PermGroup *G, /* The permutation group (base known). */ Permutation *perm) /* The permutation known to lie in G. */ ; extern BOOLEAN fixesBasicOrbit( const PermGroup *const G, const Unsigned level, const Permutation *const perm) ; extern Permutation *linkEssentialGens( PermGroup *G, /* The permutation group. */ Unsigned level) /* Generators essential at this level are linked. */ ; extern void assignGenName( PermGroup *const G, Permutation *const gen) ; extern void adjoinInverseGen( PermGroup *const G, Permutation *gen) /* Must be a generator of G, and must have invImage. */ ; extern BOOLEAN depthGreaterThan( const PermGroup *const G, const Unsigned comparisonDepth) ; extern BOOLEAN isDoublyTransitive( const PermGroup *const G) ; extern void conjugatePermByPerm( Permutation *const perm, const Permutation *const conjPerm) ; extern void conjugateGroupByPerm( PermGroup *const G, const Permutation *const conjPerm) ; extern BOOLEAN checkConjugacyInGroup( const PermGroup *const G, const Permutation *const e, const Permutation *const f, const Permutation *const conjPerm) ; extern BOOLEAN isElementOf( const Permutation *const perm, const PermGroup *const group) ; extern BOOLEAN isSubgroupOf( const PermGroup *const subGroup, const PermGroup *const group) ; extern BOOLEAN isNormalizedBy( const PermGroup *const group, const PermGroup *const nGroup) ; extern BOOLEAN isCentralizedBy( const PermGroup *const group, const PermGroup *const cGroup) ; extern BOOLEAN isBaseImage( const PermGroup *const G, const Unsigned image[]) ; extern void reduceWrtGroup( const PermGroup *const G, Permutation *const h, Unsigned *reductionLevel) ; #endif guava-3.6/src/leon/src/setstab.c0000644017361200001450000007062411026723452016501 0ustar tabbottcrontab/* File setstab.c. */ /* Copyright (C) 1992 by Jeffrey S. Leon. This software may be used freely for educational and research purposes. Any other use requires permission from the author. */ /* Main program for set stabilizer command, which may be used compute the stabilizer G_Lambda in a permutation group G of a point set Lmabda. The format of the command is: setstab where the meaning of the parameters is as follows: : The name of the file containing the permutation group G, or the Cayley library name in which the permutation group G is defined. Except in the case of a Cayley library, a file type of GRP is appended. : The name of the file containing the point set Lambda, or the Cayley library name in which the point set Lambda is defined. Except in the case of a Cayley library, a file type of PTS is appended. : The name of the file in which the set stabilizer G_Lambda is written, or the Cayley library name to which the definition of G_Lambda is written. Except in the case of a Cayley library, a file type of PTS is appended. The options are as follows: -a If the output file exists, it will be appended to rather than overwritten. (A Cayley library is always appended to rather than overwritten.) -b: Base change in the subgroup being computed will be performed at levels fm, fm+1,...,fm+-1 only, where fm is the level of the first base point (of the subgroup) moved by the current permutation. Values below 1 will be raised to 1; those above the base size will be reduced to the base size. -c Compress the group G after an R-base has been constructed. This saves a moderate amount of memory at the cost of relatively little CPU time, but the group (in memory) is effectively destroyed. -crl: The definition of the group G and point set Lambda should be read from Cayley library in library file . -cwl: The definition for the group G_Lambda should be written to Cayley library library file . -g: The maximum number of strong generators for the containing group G. If, after construction of a base and strong generating set for G, the number of strong generators is less than this number, additional strong generators will be added, chosen to reduce the length of the coset representatives (as words). A larger value may increase speed of computation slightly at the cost of extra space. If, after construction of the base and strong generating set, the number of strong generators exceeds this number, at present strong generators are not removed. -gn: (Set stabilizer only). The generators for the newly-created group created are given names 01, 02, ... . If omitted, the new generators are named xxxx01, xxxx02, etc., where xxxx are the first four characters of the group name. -i The generators of are to be written in image format. -n: The name for the set stabilizer or coset rep being computed. (Default: the file name -- file type omitted) -q As the computation proceeds, writing of information about the current state to standard output is suppressed. -s: A known subgroup of the set stabilizer being computed. (Default: no subgroup known) -r: During base change, if insertion of a new base point expands the size of the strong generating set above gens (not counting inverses), redundant strong generators are trimmed from the strong generating set. (Default 25). -t Upon conclusion, statistics regarding the number of nodes of the backtrack search tree traversed is written to the standard output. -v Verify that all files were compiled with the same compile- time parameters and stop. -w: For set or partition image computations in which the sets or partitions turn out to be equivalent, a permutation mapping one to the other is written to the standard output, as well as a disk file, provided the degree is at most . (The option is ignored if -q is in effect.) Default: 100 -x: The ideal size for basic cells is set to . -z Subject to the restrictions imposed by the -b option above, check Prop. 8.3 in "Permutation group algorithms based on partitions". If a base for is not available, one will be computed. In any the base and strong generating set for will be changed during the computation. The return code for set or partition stabilizer computations is as follows: 0: computation successful, 15: computation terminated due to error. The return code for set or partition image computations is as follows: 0: computation successful; sets or partitions are equivalent, 1: computation successful; sets or partitions are not equivalent, 15: computation terminated due to error. */ #include #include #include #include #include #define MAIN #include "group.h" #include "groupio.h" #include "cparstab.h" #include "csetstab.h" #include "cuprstab.h" #include "errmesg.h" #include "permgrp.h" #include "readgrp.h" #include "readpar.h" #include "readper.h" #include "readpts.h" #include "token.h" #include "util.h" GroupOptions options; static void verifyOptions(void); UnsignedS (*chooseNextBasePoint)( const PermGroup *const G, const PartitionStack *const UpsilonStack) = NULL; int main( int argc, char *argv[]) { char permGroupFileName[MAX_FILE_NAME_LENGTH] = "", pointSetFileName[MAX_FILE_NAME_LENGTH] = "", *pointSet_L_FileName = pointSetFileName, pointSet_R_FileName[MAX_FILE_NAME_LENGTH] = "", *partitionFileName = pointSetFileName, *partition_L_FileName = pointSet_L_FileName, *partition_R_FileName = pointSet_R_FileName, knownSubgroupSpecifier[MAX_FILE_NAME_LENGTH] = "", *knownSubgroup_L_Specifier = knownSubgroupSpecifier, knownSubgroup_R_Specifier[MAX_FILE_NAME_LENGTH] = "", knownSubgroupFileName[MAX_FILE_NAME_LENGTH] = "", *knownSubgroup_L_FileName = knownSubgroupFileName, knownSubgroup_R_FileName[MAX_FILE_NAME_LENGTH] = "", outputFileName[MAX_FILE_NAME_LENGTH] = ""; Unsigned i, j, optionCountPlus1; char outputObjectName[MAX_NAME_LENGTH+1] = "", outputLibraryName[MAX_NAME_LENGTH+1] = "", permGroupLibraryName[MAX_NAME_LENGTH+1] = "", pointSetLibraryName[MAX_NAME_LENGTH+1] = "", *partitionLibraryName = pointSetLibraryName, knownSubgroupLibraryName[MAX_NAME_LENGTH+1] = "", *pointSet_L_LibraryName = pointSetLibraryName, pointSet_R_LibraryName[MAX_NAME_LENGTH+1] = "", *partition_L_LibraryName = pointSet_L_LibraryName, *partition_R_LibraryName = pointSet_R_LibraryName, *knownSubgroup_L_LibraryName = knownSubgroupLibraryName, knownSubgroup_R_LibraryName[MAX_NAME_LENGTH+1] = "", prefix[MAX_FILE_NAME_LENGTH], suffix[MAX_NAME_LENGTH]; PermGroup *G, *G_pP, *L = NULL, *L_L = NULL, *L_R = NULL; Permutation *y; PointSet *Lambda, *Xi; Partition *PLambda, *PXi; BOOLEAN imageFlag = FALSE, imageFormatFlag = FALSE; char ordUnord[] = "Ordered"; char tempArg[8]; enum { SET_STAB, SET_IMAGE, PARTN_STAB, PARTN_IMAGE, UPARTN_STAB, UPARTN_IMAGE} computationType = SET_STAB; char comment[100]; /* Check whether the first parameter is Image or (U)Partn, and if so whether the second parameter is Image or (U)Partn. If so, a set image, partition stabilizer, or partition image computation will be performed instead of a set stabilizer one, and the valid remaining parameters will be different. */ j = 0; for ( i = 1 ; i <= 2 && i < argc ; ++i ) { strncpy( tempArg, argv[i], 8); tempArg[7] = '\0'; lowerCase( tempArg); if ( strcmp( tempArg, "-image") == 0 ) j |= 4; else if ( strcmp( tempArg, "-upartn") == 0 ) j |= 2; else if ( strcmp( tempArg, "-partn") == 0 ) j |= 1; else break; } switch( j ) { case 0: computationType = SET_STAB; break; case 1: computationType = PARTN_STAB; break; case 2: computationType = UPARTN_STAB; strcpy( ordUnord, "Unordered"); break; case 4: computationType = SET_IMAGE; imageFlag = TRUE; break; case 5: computationType = PARTN_IMAGE; imageFlag = TRUE; break; case 6: computationType = UPARTN_IMAGE; imageFlag = TRUE; strcpy( ordUnord, "Unordered"); break; default: ERROR( "main (setstab)", "Invalid options"); break; } /* Provide help if no arguments are specified. Note i and j must be as described above. */ if ( i == argc ) { switch( j ) { case 0: printf( "\nUsage: setstab [options] permGroup pointSet stabilizerSubgroup\n"); break; case 1: printf( "\nUsage: parstab [options] permGroup ordPartition stabilizerSubgroup\n"); break; case 2: printf( "\nUsage: uprstab [options] permGroup unOrdPartition stabilizerSubgroup\n"); break; case 4: printf( "\nUsage: setimage [options] permGroup pointSet1 pointSet2 groupElement\n"); break; case 5: printf( "\nUsage: parimage [options] permGroup ordPartition1 ordPartition2 groupElement\n"); break; case 6: printf( "\nUsage: uprimage [options] permGroup unOrdPartition1 unOrdPartition2 groupElement\n"); break; } return 0; } /* Check for limits option. If present in position i (i as above) give limits and return. */ if ( i < argc && (strcmp(argv[i], "-l") == 0 || strcmp(argv[i], "-L") == 0) ) { showLimits(); return 0; } /* Check for verify option. If present in position i (i as above) perform verify (Note verifyOptions terminates program). */ if ( i < argc && (strcmp(argv[i], "-v") == 0 || strcmp(argv[i], "-V") == 0) ) verifyOptions(); if ( argc < 4 ) ERROR( "main (setstab)", "Too few parameters.") /* Check for exactly 3 (set or partn stabilizer) or 4 (set or partn image) parameters following options. Note i must be as above. */ for ( optionCountPlus1 = i ; optionCountPlus1 < argc && argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 ) ; if ( argc - optionCountPlus1 != 3 + imageFlag ) { ERROR1i( "setStabilizer", "Exactly ", 3+imageFlag, " non-option parameters are required."); exit(ERROR_RETURN_CODE); } /* Process options. */ prefix[0] = '\0'; suffix[0] = '\0'; options.maxBaseSize = DEFAULT_MAX_BASE_SIZE; options.statistics = FALSE; options.inform = TRUE; options.compress = TRUE; options.maxBaseChangeLevel = UNKNOWN; options.maxStrongGens = 70; options.idealBasicCellSize = 4; options.trimSGenSetToSize = 35; options.strongMinDCosetCheck = FALSE; options.writeConjPerm = MAX_COSET_REP_PRINT; options.restrictedDegree = 0; options.alphaHat1 = 0; parseLibraryName( argv[optionCountPlus1+2], "", "", outputFileName, outputLibraryName); strncpy( options.genNamePrefix, outputLibraryName, 4); options.genNamePrefix[4] = '\0'; strcpy( options.outputFileMode, "w"); /* Note i must still be as above. */ for ( ; i < optionCountPlus1 ; ++i ) { for ( j = 1 ; argv[i][j] != ':' && argv[i][j] != '\0' ; ++j ) #ifdef EBCDIC argv[i][j] = ( argv[i][j] >= 'A' && argv[i][j] <= 'I' || argv[i][j] >= 'J' && argv[i][j] <= 'R' || argv[i][j] >= 'S' && argv[i][j] <= 'Z' ) ? (argv[i][j] + 'a' - 'A') : argv[i][j]; #else argv[i][j] = (argv[i][j] >= 'A' && argv[i][j] <= 'Z') ? (argv[i][j] + 'a' - 'A') : argv[i][j]; #endif errno = 0; if ( strcmp( argv[i], "-a") == 0 ) strcpy( options.outputFileMode, "a"); else if ( strncmp( argv[i], "-a1:", 4) == 0 && (options.alphaHat1 = (Unsigned) strtol(argv[i]+4,NULL,0) , errno != ERANGE) ) ; else if ( strncmp( argv[i], "-b:", 3) == 0 && (options.maxBaseChangeLevel = (Unsigned) strtol(argv[i]+3,NULL,0) , errno != ERANGE) ) ; else if ( strncmp( argv[i], "-p:", 3) == 0 ) { strcpy( prefix, argv[i]+3); } else if ( strncmp( argv[i], "-t:", 3) == 0 ) { strcpy( suffix, argv[i]+3); } else if ( strncmp( argv[i], "-g:", 3) == 0 && (options.maxStrongGens = (Unsigned) strtol(argv[i]+3,NULL,0) , errno != ERANGE) ) ; else if ( strncmp( argv[i], "-gn:", 4) == 0 ) if ( strlen( argv[i]+4) <= 8 ) strcpy( options.genNamePrefix, argv[i]+4); else ERROR( "main (setstab)", "Invalid value for -gn option") else if ( strcmp( argv[i], "-i") == 0 ) imageFormatFlag = TRUE; else if ( strncmp( argv[i], "-mb:", 4) == 0 ) { errno = 0; options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (setstab)", "Invalid syntax for -mb option") } else if ( strncmp( argv[i], "-mw:", 4) == 0 ) { errno = 0; options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (setstab)", "Invalid syntax for -mw option") } else if ( strncmp( argv[i], "-n:", 3) == 0 ) if ( isValidName( argv[i]+3) ) strcpy( outputObjectName, argv[i]+3); else ERROR1s( "main (setstab)", "Invalid name ", outputObjectName, " for stabilizer group or coset rep.") else if ( strcmp( argv[i], "-q") == 0 ) options.inform = FALSE; else if ( strcmp( argv[i], "-overwrite") == 0 ) strcpy( options.outputFileMode, "w"); else if ( strncmp( argv[i], "-r:", 3) == 0 && (options.trimSGenSetToSize = (Unsigned) strtol(argv[i]+3,NULL,0) , errno != ERANGE) ) ; else if ( !imageFlag && strncmp( argv[i], "-k:", 3) == 0 ) strcpy( knownSubgroupSpecifier, argv[i]+3); else if ( imageFlag && strncmp( argv[i], "-kl:", 4) == 0 ) strcpy( knownSubgroup_L_Specifier, argv[i]+4); else if ( imageFlag && strncmp( argv[i], "-kr:", 4) == 0 ) strcpy( knownSubgroup_R_Specifier, argv[i]+4); else if ( strcmp( argv[i], "-s") == 0 ) options.statistics = TRUE; else if ( strncmp( argv[i], "-w:", 3) == 0 && (options.writeConjPerm = (Unsigned) strtol(argv[i]+3,NULL,0) , errno != ERANGE) ) ; else if ( strncmp( argv[i], "-x:", 3) == 0 && (options.idealBasicCellSize = (Unsigned) strtol(argv[i]+3,NULL,0) , errno != ERANGE) ) ; else if ( strcmp( argv[i], "-z") == 0 ) options.strongMinDCosetCheck = TRUE; else ERROR1s( "main (compute subgroup)", "Invalid option ", argv[i], ".") } /* Compute maximum degree and word length. */ options.maxWordLength = 200 + 5 * options.maxBaseSize; options.maxDegree = MAX_INT - 2 - options.maxBaseSize; /* Compute names for files and name for set stabilizer or coset rep. */ parseLibraryName( argv[optionCountPlus1], prefix, suffix, permGroupFileName, permGroupLibraryName); switch( computationType) { case SET_STAB: case PARTN_STAB: case UPARTN_STAB: parseLibraryName( argv[optionCountPlus1+1], prefix, suffix, pointSetFileName, pointSetLibraryName); parseLibraryName( argv[optionCountPlus1+2], "", "", outputFileName, outputLibraryName); if ( outputObjectName[0] == '\0' ) strncpy( outputObjectName, outputLibraryName, MAX_NAME_LENGTH+1); if ( knownSubgroupSpecifier[0] != '\0' ) parseLibraryName( knownSubgroupSpecifier, prefix, suffix, knownSubgroupFileName, knownSubgroupLibraryName); break; case SET_IMAGE: case PARTN_IMAGE: case UPARTN_IMAGE: parseLibraryName( argv[optionCountPlus1+1], prefix, suffix, pointSet_L_FileName, pointSet_L_LibraryName); parseLibraryName( argv[optionCountPlus1+2], prefix, suffix, pointSet_R_FileName, pointSet_R_LibraryName); parseLibraryName( argv[optionCountPlus1+3], "", "", outputFileName, outputLibraryName); if ( outputObjectName[0] == '\0' ) strncpy( outputObjectName, outputLibraryName, MAX_NAME_LENGTH+1); if ( knownSubgroup_L_Specifier[0] ) parseLibraryName( knownSubgroup_L_Specifier, prefix, suffix, knownSubgroup_L_FileName, knownSubgroup_L_LibraryName); if ( knownSubgroup_R_Specifier[0] ) parseLibraryName( knownSubgroup_R_Specifier, prefix, suffix, knownSubgroup_R_FileName, knownSubgroup_R_LibraryName); } /* Read in the containing group G. */ G = readPermGroup( permGroupFileName, permGroupLibraryName, 0, "Generate"); /* Read in the known subgroups, if present. */ switch ( computationType ) { case SET_STAB: case PARTN_STAB: case UPARTN_STAB: if ( knownSubgroupSpecifier[0] ) L = readPermGroup( knownSubgroupFileName, knownSubgroupLibraryName, G->degree, "Generate"); break; case SET_IMAGE: case PARTN_IMAGE: case UPARTN_IMAGE: if ( knownSubgroup_L_Specifier[0] ) L_L = readPermGroup( knownSubgroup_L_FileName, knownSubgroup_L_LibraryName, G->degree, "Generate"); if ( knownSubgroup_R_Specifier[0] ) L_R = readPermGroup( knownSubgroup_R_FileName, knownSubgroup_R_LibraryName, G->degree, "Generate"); break; } /* Read in the point set(s) or partition(s). */ switch ( computationType ) { case SET_STAB: Lambda = readPointSet( pointSetFileName, pointSetLibraryName, G->degree); break; case SET_IMAGE: Lambda = readPointSet( pointSet_L_FileName, pointSet_L_LibraryName, G->degree); Xi = readPointSet( pointSet_R_FileName, pointSet_R_LibraryName, G->degree); break; case PARTN_STAB: case UPARTN_STAB: PLambda = readPartition( partitionFileName, partitionLibraryName, G->degree); break; case PARTN_IMAGE: case UPARTN_IMAGE: PLambda = readPartition( partition_L_FileName, partition_L_LibraryName, G->degree); PXi = readPartition( partition_R_FileName, partition_R_LibraryName, G->degree); break; } /* Compute maximum base change level if not specified as option. */ if ( options.maxBaseChangeLevel == UNKNOWN ) options.maxBaseChangeLevel = isDoublyTransitive(G) ? ( 1 + options.maxBaseSize * depthGreaterThan(G,4) ) : ( depthGreaterThan(G,5) + options.maxBaseSize * depthGreaterThan(G,6)); /* Compute the set or partition stabilizer or coset rep and write it out. */ switch ( computationType ) { case SET_STAB: if ( options.inform ) { printf( "\n\n Set Stabilizer Program: " "Group %s, Point Set %s\n\n", G->name, Lambda->name); if ( L ) printf( "\nKnown Subgroup: %s\n", L->name); } options.groupOrderMessage = "Set stabilizer"; G_pP = setStabilizer( G, Lambda, L); strcpy( G_pP->name, outputObjectName); G_pP->printFormat = (imageFormatFlag ? imageFormat : cycleFormat); sprintf( comment, "The stabilizer in permutation group %s of point set %s.", G->name, Lambda->name); writePermGroup( outputFileName, outputLibraryName, G_pP, comment); break; case PARTN_STAB: case UPARTN_STAB: if ( options.inform ) { printf( "\n\n %s Partition Stabilizer Program: " "Group %s, Partition %s\n\n", ordUnord, G->name, PLambda->name); if ( L ) printf( "\nKnown Subgroup: %s\n", L->name); } switch( computationType ) { case PARTN_STAB: options.groupOrderMessage = "Ordered partition stabilizer"; G_pP = partnStabilizer( G, PLambda, L); sprintf( comment, "The stabilizer in permutation group %s of ordered partition %s.", G->name, PLambda->name); break; case UPARTN_STAB: options.groupOrderMessage = "Unordered partition stabilizer"; G_pP = uPartnStabilizer( G, PLambda, L); sprintf( comment, "The stabilizer in permutation group %s of unordered partition %s.", G->name, PLambda->name); break; } strcpy( G_pP->name, outputObjectName); G_pP->printFormat = (imageFormatFlag ? imageFormat : cycleFormat); writePermGroup( outputFileName, outputLibraryName, G_pP, comment); break; case SET_IMAGE: if ( options.inform ) { printf( "\n\n\n Set Image Program: " "Group %s, Point Sets %s And %s\n\n", G->name, Lambda->name, Xi->name); if ( L_L ) printf( "\nKnown Subgroup (left): %s", L_L->name); if ( L_R ) printf( "\nKnown Subgroup (right): %s", L_R->name); if ( L_L || L_R ) printf( "\n"); } options.cosetRepMessage = "The first set is mapped to the second by group element:"; options.noCosetRepMessage = "The sets are not equivalent under the group."; y = setImage( G, Lambda, Xi, L_L, L_R); if ( y ) { strcpy( y->name, outputObjectName); sprintf( comment, "A permutation in group %s mapping point set %s to point set %s.", G->name, Lambda->name, Xi->name); if ( imageFormatFlag ) writePermutation( outputFileName, outputLibraryName, y, "image", comment); else writePermutation( outputFileName, outputLibraryName, y, "", comment); } break; case PARTN_IMAGE: case UPARTN_IMAGE: if ( options.inform ) { printf( "\n\n\n %s Partition Image Program: " "Group %s, Partitions %s And %s\n\n", ordUnord, G->name, PLambda->name, PXi->name); if ( L_L ) printf( "\nKnown Subgroup (left): %s", L_L->name); if ( L_R ) printf( "\nKnown Subgroup (right): %s", L_R->name); if ( L_L || L_R ) printf( "\n"); } switch( computationType ) { case PARTN_IMAGE: options.cosetRepMessage = "The first ordered partition is mapped to the second by group element:"; options.noCosetRepMessage = "The ordered partitions are not equivalent under the group."; y = partnImage( G, PLambda, PXi, L_L, L_R); sprintf( comment, "A permutation in group %s mapping ordered partition %s to ordered partition %s.", G->name, PLambda->name, PXi->name); break; case UPARTN_IMAGE: options.cosetRepMessage = "The first unordered partition is mapped to the second by group element:"; options.noCosetRepMessage = "The unordered partitions are not equivalent under the group."; y = uPartnImage( G, PLambda, PXi, L_L, L_R); sprintf( comment, "A permutation in group %s mapping unordered partition %s to unordered partition %s.", G->name, PLambda->name, PXi->name); break; } if ( y ) { strcpy( y->name, outputObjectName); if ( imageFormatFlag ) writePermutation( outputFileName, outputLibraryName, y, "image", comment); else writePermutation( outputFileName, outputLibraryName, y, "", comment); } break; } /* Return to caller. */ if ( !imageFlag || y ) return 0; else return 1; } /*-------------------------- verifyOptions -------------------------------*/ static void verifyOptions(void) { CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH, MAX_PRIME_FACTORS, MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS, MAX_EXTRA, XLARGE, SGND, NFLT}; extern void xaddsge( CompileOptions *cOpts); extern void xbitman( CompileOptions *cOpts); extern void xchbase( CompileOptions *cOpts); extern void xcompcr( CompileOptions *cOpts); extern void xcompsg( CompileOptions *cOpts); extern void xcopy ( CompileOptions *cOpts); extern void xcparst( CompileOptions *cOpts); extern void xcsetst( CompileOptions *cOpts); extern void xcstbor( CompileOptions *cOpts); extern void xcstrba( CompileOptions *cOpts); extern void xcuprst( CompileOptions *cOpts); extern void xerrmes( CompileOptions *cOpts); extern void xessent( CompileOptions *cOpts); extern void xfactor( CompileOptions *cOpts); extern void xinform( CompileOptions *cOpts); extern void xnew ( CompileOptions *cOpts); extern void xoldcop( CompileOptions *cOpts); extern void xoptsve( CompileOptions *cOpts); extern void xorbit ( CompileOptions *cOpts); extern void xorbref( CompileOptions *cOpts); extern void xpartn ( CompileOptions *cOpts); extern void xpermgr( CompileOptions *cOpts); extern void xpermut( CompileOptions *cOpts); extern void xprimes( CompileOptions *cOpts); extern void xptstbr( CompileOptions *cOpts); extern void xrandgr( CompileOptions *cOpts); extern void xrandsc( CompileOptions *cOpts); extern void xreadgr( CompileOptions *cOpts); extern void xreadpa( CompileOptions *cOpts); extern void xreadpe( CompileOptions *cOpts); extern void xreadpt( CompileOptions *cOpts); extern void xrpriqu( CompileOptions *cOpts); extern void xstorag( CompileOptions *cOpts); extern void xtoken ( CompileOptions *cOpts); extern void xutil ( CompileOptions *cOpts); xaddsge( &mainOpts); xbitman( &mainOpts); xchbase( &mainOpts); xcompcr( &mainOpts); xcompsg( &mainOpts); xcopy ( &mainOpts); xcparst( &mainOpts); xcsetst( &mainOpts); xcstbor( &mainOpts); xcstrba( &mainOpts); xcuprst( &mainOpts); xerrmes( &mainOpts); xessent( &mainOpts); xfactor( &mainOpts); xinform( &mainOpts); xnew ( &mainOpts); xoldcop( &mainOpts); xoptsve( &mainOpts); xorbit ( &mainOpts); xorbref( &mainOpts); xpartn ( &mainOpts); xpermgr( &mainOpts); xpermut( &mainOpts); xprimes( &mainOpts); xptstbr( &mainOpts); xrandgr( &mainOpts); xrandsc( &mainOpts); xreadgr( &mainOpts); xreadpa( &mainOpts); xreadpe( &mainOpts); xreadpt( &mainOpts); xrpriqu( &mainOpts); xstorag( &mainOpts); xtoken ( &mainOpts); xutil ( &mainOpts); } guava-3.6/src/leon/src/storage.h0000644017361200001450000000417411026723452016502 0ustar tabbottcrontab#ifndef STORAGE #define STORAGE extern void initializeStorageManager( Unsigned degreeOfGroup) ; extern UnsignedS *allocIntArrayDegree( void) ; extern void freeIntArrayDegree( UnsignedS *address) ; extern char *allocBooleanArrayDegree( void) ; extern void freeBooleanArrayDegree( char *address) ; extern char *allocBooleanArrayBaseSize( void) ; extern void freeBooleanArrayBaseSize( char *address) ; extern void *allocPtrArrayDegree( void) ; extern void freePtrArrayDegree( void *address) ; extern void *allocPtrArrayWordSize( void) ; extern void freePtrArrayWordSize( void *address) ; extern void *allocPtrArrayBaseSize( void) ; extern void freePtrArrayBaseSize( void *address) ; extern UnsignedS *allocIntArrayBaseSize( void) ; extern void freeIntArrayBaseSize( UnsignedS *address) ; extern unsigned long *allocLongArrayBaseSize( void) ; extern void freeLongArrayBaseSize( unsigned long *address) ; extern Permutation *allocPermutation( void) ; extern void freePermutation( Permutation *address) ; extern PermGroup *allocPermGroup( void) ; extern void freePermGroup( PermGroup *address) ; extern Partition *allocPartition( void) ; extern void freePartition( Partition *address) ; extern PartitionStack *allocPartitionStack( void) ; extern void freePartitionStack( PartitionStack *address) ; extern RBase *allocRBase( void) ; extern void freeRBase( RBase *address) ; extern RPriorityQueue *allocRPriorityQueue( void) ; extern void freeRPriorityQueue( RPriorityQueue *address) ; extern PointSet *allocPointSet( void) ; extern void freePointSet( PointSet *address) ; extern FactoredInt *allocFactoredInt( void) ; extern void freeFactoredInt( FactoredInt *address) ; extern Word *allocWord( void) ; extern void freeWord( Word *address) ; extern Refinement *allocRefinementArrayDegree( void) ; extern void freeRefinementArrayDegree( Refinement *address) ; extern Relator *allocRelator( void) ; extern void freeRelator( Relator *address) ; extern OccurenceOfGen *allocOccurenceOfGen( void) ; extern void freeOccurenceOfGen( OccurenceOfGen *address) ; extern Field *allocField( void) ; extern void freeField( Field *address) ; #endif guava-3.6/src/leon/src/ccommut.c0000644017361200001450000000577511026723452016510 0ustar tabbottcrontab/* File ccommut.c. Contains function commutatorGroup, which computes the commutator [G,H] of a group G and a (not necessarily normal) subgroup H. */ #include #include "group.h" #include "addsgen.h" #include "copy.h" #include "chbase.h" #include "new.h" #include "permgrp.h" #include "permut.h" #include "storage.h" CHECK( ccommu) /*-------------------------- commutatorGroup -----------------------------*/ /* The function commutatorGroup( G, H) returns a new permutation group equal to the commutator [G,H]. H must be a subgroup of G, though it need not be normal. G must already have a base and strong generating set, but H need not have one. */ PermGroup *commutatorGroup( const PermGroup *const G, const PermGroup *const H) { PermGroup *C = newTrivialPermGroup( G->degree); Permutation *a, *b, *x, *newGen; Unsigned i; UnsignedS *img = allocIntArrayBaseSize(); G->base[G->baseSize+1] = 0; changeBase( C, G->base); for ( a = G->generator ; a ; a = a->next ) for ( b = (H == G ? a->next : H->generator) ; b ; b = b->next ) for ( x = G->generator ; x ; x = x->next ) { for ( i = 1 ; i <= G->baseSize ; ++i ) { img[i] = b->invImage[a->invImage[x->invImage[G->base[i]]]]; img[i] = x->image[b->image[a->image[img[i]]]]; } if ( !isBaseImage( C, img) ) { newGen = newIdentityPerm( G->degree); rightMultiplyInv( newGen, x); rightMultiplyInv( newGen, a); rightMultiplyInv( newGen, b); rightMultiply( newGen, a); rightMultiply( newGen, b); rightMultiply( newGen, x); reduceWrtGroup( C, newGen, NULL); addStrongGenerator( C, newGen, TRUE); } } freeIntArrayBaseSize( img); return C; } /*-------------------------- normalClosure -------------------------------*/ /* The function normalClosure( G, H) returns a new permutation group equal to the normal closure of H in G. H must be a subgroup of G (not checked). G must already have a base and strong generating set, but H need not have one. */ PermGroup *normalClosure( const PermGroup *const G, const PermGroup *const H) { PermGroup *N = copyOfPermGroup( H); Permutation *a, *b, *newGen; Unsigned i; UnsignedS *img = allocIntArrayBaseSize(); G->base[G->baseSize+1] = 0; changeBase( N, G->base); for ( a = G->generator ; a ; a = a->next ) for ( b = H->generator ; b ; b = b->next ) { for ( i = 1 ; i <= G->baseSize ; ++i ) img[i] = a->image[b->image[a->invImage[G->base[i]]]]; if ( !isBaseImage( N, img) ) { newGen = newIdentityPerm( G->degree); rightMultiplyInv( newGen, a); rightMultiply( newGen, b); rightMultiply( newGen, a); reduceWrtGroup( N, newGen, NULL); addStrongGenerator( N, newGen, TRUE); } } freeIntArrayBaseSize( img); return N; } guava-3.6/src/leon/src/inter.c0000644017361200001450000004226411026723452016154 0ustar tabbottcrontab/* File inter.c. */ /* Copyright (C) 1992 by Jeffrey S. Leon. This software may be used freely for educational and research purposes. Any other use requires permission from the author. */ /* Main program for group intersection command, which may be used compute the intersection of two permutation groups G and E. The format of the command is: inter where the meaning of the parameters is as follows: : The name of the file containing the permutation group G, or the Cayley library name in which the permutation group G is defined. Except in the case of a Cayley library, a file type of GRP is appended. : The name of the file containing the point set Lambda, or the Cayley library name in which the point set Lambda is defined. Except in the case of a Cayley library, a file type of PTS is appended. : The name of the file in which the set stabilizer G_Lambda is written, or the Cayley library name to which the definition of G_Lambda is written. Except in the case of a Cayley library, a file type of PTS is appended. The options are as follows: -a If the output file exists, it will be appended to rather than overwritten. (A Cayley library is always appended to rather than overwritten.) -b: Base change in the subgroup being computed will be performed at levels fm, fm+1,...,fm+-1 only, where fm is the level of the first base point (of the subgroup) moved by the current permutation. Values below 1 will be raised to 1; those above the base size will be reduced to the base size. -c Compress the group G after an R-base has been constructed. This saves a moderate amount of memory at the cost of relatively little CPU time, but the group (in memory) is effectively destroyed. -crl: The definition of the group G and point set Lambda should be read from Cayley library in library file . -cwl: The definition for the group G_Lambda should be written to Cayley library library file . -g: The maximum number of strong generators for the containing group G. If, after construction of a base and strong generating set for G, the number of strong generators is less than this number, additional strong generators will be added, chosen to reduce the length of the coset representatives (as words). A larger value may increase speed of computation slightly at the cost of extra space. If, after construction of the base and strong generating set, the number of strong generators exceeds this number, at present strong generators are not removed. -gn: (Set stabilizer only). The generators for the newly-created group created are given names 01, 02, ... . If omitted, the new generators are unnamed. -i The generators of are to be written in image format. -n: The name for the set stabilizer or coset rep being computed. (Default: the file name -- file type omitted) -q As the computation proceeds, writing of information about the current state to standard output is suppressed. -s: A known subgroup of the set stabilizer being computed. (Default: no subgroup known) -r: During base change, if insertion of a new base point expands the size of the strong generating set above gens (not counting inverses), redundant strong generators are trimmed from the strong generating set. (Default 25). -t Upon conclusion, statistics regarding the number of nodes of the backtrack search tree traversed is written to the standard output. -v Verify that all files were compiled with the same compile- time parameters and stop. -w: For set or partition image computations in which the sets or partitions turn out to be equivalent, a permutation mapping one to the other is written to the standard output, as well as a disk file, provided the degree is at most . (The option is ignored if -q is in effect.) Default: 100 -x: The ideal size for basic cells is set to . -z Subject to the restrictions imposed by the -b option above, check Prop. 8.3 in "Permutation group algorithms based on partitions". If a base for is not available, one will be computed. In any the base and strong generating set for will be changed during the computation. The return code for set or partition stabilizer computations is as follows: 0: computation successful, 15: computation terminated due to error. The return code for set or partition image computations is as follows: 0: computation successful; sets or partitions are not equivalent, 1: computation successful; sets or partitions are equivalent, 15: computation terminated due to error. */ #include #include #include #include #include #include #define MAIN #include "group.h" #include "groupio.h" #include "cinter.h" #include "errmesg.h" #include "permgrp.h" #include "readgrp.h" #include "readper.h" #include "token.h" #include "util.h" GroupOptions options; UnsignedS (*chooseNextBasePoint)( const PermGroup *const G, const PartitionStack *const UpsilonStack) = NULL; static void verifyOptions(void); int main( int argc, char *argv[]) { char permGroup1FileName[MAX_FILE_NAME_LENGTH] = "", permGroup2FileName[MAX_FILE_NAME_LENGTH] = "", knownSubgroupSpecifier[MAX_FILE_NAME_LENGTH] = "", knownSubgroupFileName[MAX_FILE_NAME_LENGTH] = "", outputFileName[MAX_FILE_NAME_LENGTH] = ""; Unsigned i, j, optionCountPlus1; char outputObjectName[MAX_NAME_LENGTH+1] = "", outputLibraryName[MAX_NAME_LENGTH+1] = "", permGroup1LibraryName[MAX_NAME_LENGTH+1] = "", permGroup2LibraryName[MAX_NAME_LENGTH+1] = "", knownSubgroupLibraryName[MAX_NAME_LENGTH+1] = "", prefix[MAX_FILE_NAME_LENGTH], suffix[MAX_NAME_LENGTH]; PermGroup *G, *E, *G_pP, *L = NULL; BOOLEAN imageFlag = FALSE, imageFormatFlag = FALSE; char comment[100]; /* Provide usage information if no options are specified. */ if ( argc == 1 ) { printf( "\nUsage: inter [options] permGroup1 permGroup2 intersection\n"); return 0; } /* Check for limits option. If present in position i (i as above) give limits and return. */ if ( strcmp( argv[1], "-l") == 0 || strcmp( argv[1], "-L") == 0 ) { showLimits(); return 0; } /* Check for verify option. If present in position i (i as above) perform verify (Note verifyOptions terminates program). */ if ( strcmp( argv[1], "-v") == 0 || strcmp( argv[1], "-L") == 0 ) verifyOptions(); if ( argc < 4 ) ERROR( "main (inter)", "Too few parameters.") /* Check for exactly 3 parameters following options. */ for ( optionCountPlus1 = 1 ; optionCountPlus1 < argc && argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 ) ; if ( argc - optionCountPlus1 != 3 ) { ERROR( "main (inter)", "Exactly 3 non-option parameters are required.") exit(ERROR_RETURN_CODE); } /* Process options. */ prefix[0] = '\0'; suffix[0] = '\0'; options.maxBaseSize = DEFAULT_MAX_BASE_SIZE; options.statistics = FALSE; options.inform = TRUE; options.compress = TRUE; options.maxBaseChangeLevel = UNKNOWN; options.maxStrongGens = 70; options.idealBasicCellSize = 4; options.trimSGenSetToSize = 35; options.strongMinDCosetCheck = FALSE; options.writeConjPerm = MAX_COSET_REP_PRINT; options.restrictedDegree = 0; options.alphaHat1 = 0; parseLibraryName( argv[optionCountPlus1+2], "", "", outputFileName, outputLibraryName); strncpy( options.genNamePrefix, outputLibraryName, 4); options.genNamePrefix[4] = '\0'; strcpy( options.outputFileMode, "w"); /* Note i must still be as above. */ for ( i = 1 ; i < optionCountPlus1 ; ++i ) { for ( j = 1 ; argv[i][j] != ':' && argv[i][j] != '\0' ; ++j ) #ifdef EBCDIC argv[i][j] = ( argv[i][j] >= 'A' && argv[i][j] <= 'I' || argv[i][j] >= 'J' && argv[i][j] <= 'R' || argv[i][j] >= 'S' && argv[i][j] <= 'Z' ) ? (argv[i][j] + 'a' - 'A') : argv[i][j]; #else argv[i][j] = (argv[i][j] >= 'A' && argv[i][j] <= 'Z') ? (argv[i][j] + 'a' - 'A') : argv[i][j]; #endif errno = 0; if ( strcmp( argv[i], "-a") == 0 ) strcpy( options.outputFileMode, "a"); else if ( strncmp( argv[i], "-a1:", 4) == 0 && (options.alphaHat1 = strtol(argv[i]+4,NULL,0) , errno != ERANGE) ) ; else if ( strncmp( argv[i], "-b:", 3) == 0 && (options.maxBaseChangeLevel = strtol(argv[i]+3,NULL,0) , errno != ERANGE) ) ; else if ( strncmp( argv[i], "-p:", 3) == 0 ) { strcpy( prefix, argv[i]+3); } else if ( strncmp( argv[i], "-t:", 3) == 0 ) { strcpy( suffix, argv[i]+3); } else if ( strncmp( argv[i], "-g:", 3) == 0 && (options.maxStrongGens = strtol(argv[i]+3,NULL,0) , errno != ERANGE) ) ; else if ( strncmp( argv[i], "-gn:", 4) == 0 ) if ( strlen( argv[i]+4) <= 8 ) strcpy( options.genNamePrefix, argv[i]+4); else ERROR( "main (inter)", "Invalid value for -gn option") else if ( strcmp( argv[i], "-i") == 0 ) imageFormatFlag = TRUE; else if ( strncmp( argv[i], "-mb:", 4) == 0 ) { errno = 0; options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (inter)", "Invalid syntax for -mb option") } else if ( strncmp( argv[i], "-mw:", 4) == 0 ) { errno = 0; options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (inter)", "Invalid syntax for -mw option") } else if ( strncmp( argv[i], "-n:", 3) == 0 ) if ( isValidName( argv[i]+3) ) strcpy( outputObjectName, argv[i]+3); else ERROR1s( "main (inter)", "Invalid name ", outputObjectName, " for stabilizer group or coset rep.") else if ( strcmp( argv[i], "-q") == 0 ) options.inform = FALSE; else if ( strcmp( argv[i], "-overwrite") == 0 ) strcpy( options.outputFileMode, "w"); else if ( strncmp( argv[i], "-r:", 3) == 0 && (options.trimSGenSetToSize = strtol(argv[i]+3,NULL,0) , errno != ERANGE) ) ; else if ( !imageFlag && strncmp( argv[i], "-k:", 3) == 0 ) strcpy( knownSubgroupFileName, argv[i]+3); else if ( strcmp( argv[i], "-s") == 0 ) options.statistics = TRUE; else if ( strncmp( argv[i], "-w:", 3) == 0 && (options.writeConjPerm = strtol(argv[i]+3,NULL,0) , errno != ERANGE) ) ; else if ( strncmp( argv[i], "-x:", 3) == 0 && (options.idealBasicCellSize = strtol(argv[i]+3,NULL,0) , errno != ERANGE) ) ; else if ( strcmp( argv[i], "-z") == 0 ) options.strongMinDCosetCheck = TRUE; else ERROR1s( "main (compute subgroup)", "Invalid option ", argv[i], ".") } /* Compute maximum degree and word length. */ options.maxWordLength = 200 + 5 * options.maxBaseSize; options.maxDegree = MAX_INT - 2 - options.maxBaseSize; /* Compute names for files and name for intersection. */ parseLibraryName( argv[optionCountPlus1], prefix, suffix, permGroup1FileName, permGroup1LibraryName); parseLibraryName( argv[optionCountPlus1+1], prefix, suffix, permGroup2FileName, permGroup2LibraryName); parseLibraryName( argv[optionCountPlus1+2], "", "", outputFileName, outputLibraryName); if ( outputObjectName[0] == '\0' ) strncpy( outputObjectName, outputLibraryName, MAX_NAME_LENGTH+1); if ( knownSubgroupSpecifier[0] != '\0' ) parseLibraryName( knownSubgroupSpecifier, prefix, suffix, knownSubgroupFileName, knownSubgroupLibraryName); /* Read in the containing group G and the second group E, and verify that the degrees are the same. */ G = readPermGroup( permGroup1FileName, permGroup1LibraryName, 0, "Generate"); E = readPermGroup( permGroup2FileName, permGroup2LibraryName, G->degree, "Generate"); /* Read in the known subgroup, if present. */ if ( knownSubgroupSpecifier[0] ) L = readPermGroup( knownSubgroupFileName, knownSubgroupLibraryName, G->degree, "Generate"); /* Compute maximum base change level if not specified as option. */ if ( options.maxBaseChangeLevel == UNKNOWN ) options.maxBaseChangeLevel = isDoublyTransitive(G) ? ( 1 + options.maxBaseSize * depthGreaterThan(G,4) ) : ( depthGreaterThan(G,5) + options.maxBaseSize * depthGreaterThan(G,6)); /* Compute the set or partition stabilizer or coset rep and write it out. */ if ( options.inform ) { printf( "\n\n Group Intersection Program: " "Groups %s and %s\n\n", G->name, E->name); if ( L ) printf( "\nKnown Subgroup: %s\n", L->name); } options.groupOrderMessage = "Intersection"; G_pP = intersection( G, E, L); strcpy( G_pP->name, outputObjectName); G_pP->printFormat = (imageFormatFlag ? imageFormat : cycleFormat); sprintf( comment, "The intersection of permutation groups %s and %s.", G->name, E->name); writePermGroup( outputFileName, outputLibraryName, G_pP, comment); /* Return to caller. */ return 0; } /*-------------------------- verifyOptions -------------------------------*/ static void verifyOptions(void) { CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH, MAX_PRIME_FACTORS, MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS, MAX_EXTRA, XLARGE, SGND, NFLT}; extern void xaddsge( CompileOptions *cOpts); extern void xbitman( CompileOptions *cOpts); extern void xchbase( CompileOptions *cOpts); extern void xcinter( CompileOptions *cOpts); extern void xcjrndp( CompileOptions *cOpts); extern void xcompcr( CompileOptions *cOpts); extern void xcompsg( CompileOptions *cOpts); extern void xcopy ( CompileOptions *cOpts); extern void xcputim( CompileOptions *cOpts); extern void xcstbor( CompileOptions *cOpts); extern void xcstrba( CompileOptions *cOpts); extern void xerrmes( CompileOptions *cOpts); extern void xessent( CompileOptions *cOpts); extern void xfactor( CompileOptions *cOpts); extern void xinform( CompileOptions *cOpts); extern void xnew ( CompileOptions *cOpts); extern void xoldcop( CompileOptions *cOpts); extern void xoptsve( CompileOptions *cOpts); extern void xorbit ( CompileOptions *cOpts); extern void xorbref( CompileOptions *cOpts); extern void xpartn ( CompileOptions *cOpts); extern void xpermgr( CompileOptions *cOpts); extern void xpermut( CompileOptions *cOpts); extern void xprimes( CompileOptions *cOpts); extern void xptstbr( CompileOptions *cOpts); extern void xrandgr( CompileOptions *cOpts); extern void xrandsc( CompileOptions *cOpts); extern void xreadgr( CompileOptions *cOpts); extern void xrpriqu( CompileOptions *cOpts); extern void xsetsta( CompileOptions *cOpts); extern void xstorag( CompileOptions *cOpts); extern void xtoken ( CompileOptions *cOpts); extern void xutil ( CompileOptions *cOpts); xaddsge( &mainOpts); xbitman( &mainOpts); xchbase( &mainOpts); xcinter( &mainOpts); xcompcr( &mainOpts); xcompsg( &mainOpts); xcopy ( &mainOpts); xcstbor( &mainOpts); xcstrba( &mainOpts); xerrmes( &mainOpts); xessent( &mainOpts); xfactor( &mainOpts); xinform( &mainOpts); xnew ( &mainOpts); xoldcop( &mainOpts); xoptsve( &mainOpts); xorbit ( &mainOpts); xorbref( &mainOpts); xpartn ( &mainOpts); xpermgr( &mainOpts); xpermut( &mainOpts); xprimes( &mainOpts); xptstbr( &mainOpts); xrandgr( &mainOpts); xrandsc( &mainOpts); xreadgr( &mainOpts); xrpriqu( &mainOpts); xstorag( &mainOpts); xtoken ( &mainOpts); xutil ( &mainOpts); } guava-3.6/src/leon/src/compset.sh0000755017361200001450000000004211026723452016664 0ustar tabbottcrontab#!/bin/sh compgrp -set:$1 $2 $3 guava-3.6/src/leon/src/wtdist.h0000644017361200001450000000145111026723452016347 0ustar tabbottcrontab#ifndef WTDIST #define WTDIST extern void readCommandLine( int argc, char *argv[], char *name, int *saveWeightPtr, int *saveCountPtr) ; extern void readCode( FILE *inFile, int *lengthPtr, int *dimensionPtr, unsigned long *basis1, unsigned long *basis2, unsigned long *basis3, unsigned long *basis4) ; extern void writeWtDist( FILE *wtFile, char *name, int length, int dimension, unsigned long *basis1, unsigned long *basis2, unsigned long *basis3, unsigned long *basis4, unsigned long *freq) ; extern void writeVector( FILE *vecFile, int length, unsigned long cw1, unsigned long cw2, unsigned long cw3, unsigned long cw4) ; extern char HUGE *buildOnesCount(void) ; extern void main( int argc, char *argv[] ) ; #endif guava-3.6/src/leon/src/relator.c0000644017361200001450000006541611026723452016507 0ustar tabbottcrontab/* File relator.c. Contains miscellaneous functions for manipulating sets of relators. */ #include #include #include "group.h" #include "enum.h" #include "errmesg.h" #include "new.h" #include "permut.h" #include "stcs.h" #include "storage.h" CHECK( relato) extern GroupOptions options; extern STCSOptions sOptions; extern Unsigned shiftSelection[11]; extern Unsigned shiftPriority[11]; extern Unsigned *nextCos, *prevCos, *ff, *bb, *equivCoset; extern Unsigned freeCosHeader, firstCos; extern Unsigned extraCosetsAtLevel; extern Unsigned currentExtraCosets; BOOLEAN verifyCosetList( Unsigned degree); BOOLEAN onFreeList( Unsigned coset); static callCount = 0; /*DEBUG*/ /*-------------------------- relatorLevel ---------------------------------*/ /* The function relatorLevel( r) returns the level in G of the relator r. This level is defined to be the minimum level of any of the generators of G appearing in r. Naturally the level fields of the generators of G must be filled in. */ UnsignedS relatorLevel( const Relator *const r) { Unsigned i, minLevel = options.maxBaseSize + 1; for ( i = 1 ; i <= r->length ; ++i ) if ( r->rel[i]->level < minLevel ) minLevel = r->rel[i]->level; return minLevel; } /*-------------------------- symmetricLength ------------------------------*/ /* The function symmetricLength( r) returns the "symmetric length" of the relator r. The symmetric length of r is defined to be the smallest positive integer i such that an i-position cyclic shift of r leaves r unchanged. The relator must have been created with doubleFlag set. */ Unsigned symmetricLength( const Relator *const r) { Permutation **rel = r->rel; Unsigned i, j, length = r->length; for ( i = 1 ; i <= length / 2 ; ++i ) if ( length % i == 0 ) { for ( j = 1 ; j <= length && rel[j+i] == rel[j] ; ++j ) ; if ( j > length ) return i; } return length; } /*-------------------------- symmetricWordLength --------------------------*/ /* The function symmetricWordLength( w) is identical to symmetricLength (above) except that it uses a word, rather than a relator, as its input. */ Unsigned symmetricWordLength( const Word *const w) { Permutation **rel = w->position; Unsigned i, j, length = w->length; for ( i = 1 ; i <= length / 2 ; ++i ) if ( length % i == 0 ) { for ( j = 1 ; j <= length && rel[(j-1+i)%length + 1] == rel[j] ; ++j ) ; if ( j > length ) return i; } return length; } /*-------------------------- addRelatorSortedFromWord ---------------------*/ /* The function addRelatorSortedFromWord( G, w, fbRelFlag, doubleFlag) adds a new relator, represented by a word w, to a permutation group G. The new relator is positioned so that the relators remain sorted by level (highest to lowest) and so that the new relator is last among relators of its level. Note both the new relator and the word w will be reduced by cancelling adjacent entries of form a * a^-1 or a^-1 * a. If fbRelFlag is set, the fRel and bRel entries of the new relator will be constructed. If doubleFlag is set, the each relator will be concatenated to itself (the length field will still give the original length). The function returns a pointer to the relator added, or NULL if it could not be added. */ Relator *addRelatorSortedFromWord( PermGroup *const G, Word *const w, BOOLEAN fbRelFlag, BOOLEAN doubleFlag) { Relator *newRel, *r, *rPrev; Unsigned newLevel; newRel = newRelatorFromWord( w, fbRelFlag, doubleFlag); if ( !newRel ) return NULL; newLevel = relatorLevel( newRel); newRel->level = newLevel; rPrev = NULL; for ( r = G->relator ; r && r->level >= newLevel ; rPrev = r , r = r->next ) ; newRel->next = r; newRel->last = rPrev; if ( rPrev ) rPrev->next = newRel; else G->relator = newRel; if ( r ) r->last = newRel; return newRel; } /*-------------------------- addOccurencesForRelator ---------------------*/ /* The function addOccurencesForRelator( r, priority) adds an occurenceOfGen record for each significantly different occurence of each generator in r. If shiftSelection[0] != UNKNOWN, only those specified shift selections for which priority >= shiftPriority are added. It returns the number of occurences added. */ Unsigned addOccurencesForRelator( const Relator *const r, Unsigned priority) { Unsigned i, j, addCount = 0, symLength = symmetricLength(r); OccurenceOfGen *p, *q, *prevQ; Permutation *gen; if ( symLength <= 4 || shiftSelection[0] == UNKNOWN ) for ( i = 1 ; i <= symLength ; ++i ) { ++addCount; p = allocOccurenceOfGen(); p->r = r; p->relLength = r->length; p->level = r->level; p->fRelStart = r->fRel + i; p->bRelFinish = r->bRel + (i + r->length - 1); gen = r->rel[i]; for ( prevQ = NULL , q = gen->occurHeader ; q && q->level >= p->level ; prevQ = q , q = q->next ) ; p->next = q; if ( prevQ ) prevQ->next = p; else gen->occurHeader = p; } else for ( j = 0 ; shiftSelection[j] != UNKNOWN ; ++j ) { i = shiftSelection[j] + 1; if ( i < r->length && priority >= shiftPriority[j] ) { ++addCount; p = allocOccurenceOfGen(); p->r = r; p->relLength = r->length; p->level = r->level; p->fRelStart = r->fRel + i; p->bRelFinish = r->bRel + (i + r->length - 1); gen = r->rel[i]; for ( prevQ = NULL , q = gen->occurHeader ; q && q->level >= p->level ; prevQ = q , q = q->next ) ; p->next = q; if ( prevQ ) prevQ->next = p; else gen->occurHeader = p; } } return addCount; } /*-------------------------- resetTable -----------------------------------*/ void resetTable( Permutation *genHeader, Unsigned basicOrbLen, Unsigned *basicOrbit) { Permutation *gen; Unsigned i; for ( gen = genHeader ; gen ; gen = gen->xNext ) for ( i = 1 ; i <= basicOrbLen ; ++i ) gen->image[basicOrbit[i]] &= NHB; } /*-------------------------- findConsequences -----------------------------*/ /* The function findConsequences( deductionQueuelevel, deduc) finds all direct consequences of a given definition or deduction and its inverse by tracing that definition/deduction at all significantly difference occurences of the generators in all relators at the specified level or above. New deductions are enqueued on deductionQueue but not processed. This function returns the number of additional table entries filled in as consequences. */ Unsigned findConsequences( DeductionQueue *deductionQueue, const Unsigned level, const Deduction *const deduc) { OccurenceOfGen *occurence; Unsigned count, fCos, bCos, newEntryCount = 0; Unsigned **fPtr, **bPtr; Deduction newDeduc; Permutation *gen; for ( occurence = deduc->gn->occurHeader ; occurence && occurence->level >= level; occurence = occurence->next ) { count = occurence->relLength - 1; for ( fCos = deduc->img , fPtr = occurence->fRelStart+1 ; count && !((*fPtr)[fCos] & HB) ; ++fPtr , --count ) fCos = (*fPtr)[fCos]; for ( bCos = deduc->pnt , bPtr = occurence->bRelFinish ; count && !((*bPtr)[bCos] & HB) ; --bPtr , --count ) bCos = (*bPtr)[bCos]; if ( count == 1 ) { (*fPtr)[fCos] = bCos; ++newEntryCount; gen = occurence->r->rel[fPtr - occurence->r->fRel]; newDeduc.pnt = fCos; newDeduc.img = bCos; newDeduc.gn = gen; ATTEMPT_ENQUEUE( deductionQueue, newDeduc) if ( fCos != bCos || gen != gen->invPermutation ) { (*bPtr)[bCos] = fCos; ++newEntryCount; newDeduc.img = fCos; newDeduc.pnt = bCos; newDeduc.gn = gen->invPermutation; ATTEMPT_ENQUEUE( deductionQueue, newDeduc) } } } return newEntryCount; } /*-------------------------- traceNewRelator ------------------------------*/ /* The function traceNewRelator( G, level, deductionQueue, newRel) processes a new relator newRel at level level for a group G. It traces all cyclic shifts of newRel from each coset. Deductions found are enqueued on deductionQueue but not otherwise processed. This function returns the number of additional table entries filled in due to tracing the new relator. */ Unsigned traceNewRelator( const PermGroup *const G, const Unsigned level, DeductionQueue *deductionQueue, const Relator *const newRel) { Unsigned i, pt, startingPos, count, fCos, bCos, newEntryCount = 0; Unsigned **fPtr, **bPtr; Deduction newDeduc; Permutation *gen; for ( i = 1 ; i <= G->basicOrbLen[level] ; ++i ) { pt = G->basicOrbit[level][i]; for ( startingPos = 1 ; startingPos <= newRel->length ; ++startingPos ) { count = newRel->length; for ( fCos = pt , fPtr = newRel->fRel+startingPos ; count && !((*fPtr)[fCos] & HB) ; ++fPtr , --count ) fCos = (*fPtr)[fCos]; for ( bCos = pt , bPtr = newRel->bRel+startingPos+newRel->length-1 ; count && !((*bPtr)[bCos] & HB) ; --bPtr , --count ) bCos = (*bPtr)[bCos]; if ( count == 1 ) { (*fPtr)[fCos] = bCos; ++newEntryCount; gen = newRel->rel[fPtr - newRel->fRel]; newDeduc.pnt = fCos; newDeduc.img = bCos; newDeduc.gn = gen; ATTEMPT_ENQUEUE( deductionQueue, newDeduc) if ( fCos != bCos || gen != gen->invPermutation) { (*bPtr)[bCos] = fCos; ++newEntryCount; newDeduc.img = fCos; newDeduc.pnt = bCos; newDeduc.gn = gen->invPermutation; ATTEMPT_ENQUEUE( deductionQueue, newDeduc) } } } } return newEntryCount; } /*-------------------------- processCoincidence ---------------------------*/ /* The function processCoincidence( G, genHeader, coset1, coset2) processes a coincidence between coset1 and coset2 in a special STCS coset enumeration. Here genHeader is a header for the xNext-linked list of generators at the appropriate level. It returns the extra number of table positions filled (points <= degree). */ Unsigned processCoincidence( const PermGroup *const G, DeductionQueue *deductionQueue, const Permutation *const genHeader, const Unsigned coset1, const Unsigned coset2) { Unsigned degree = G->degree; Unsigned retainCoset, deleteCoset, ffHead, ffTail, lambda, lambdaStar, tau, tauStar, eta, etaStar, kappa, kappaStar, tsi1, tsi2; Unsigned newTableEntries = 0; Permutation *gen; Deduction newDeduc; /* DEBUG ++callCount; if ( onFreeList(coset1) || onFreeList(coset2) ) tsi1 = tsi1; if ( !verifyCosetList(G->degree) ) tsi1 = tsi1; for ( gen = genHeader ; gen ; gen = gen->xNext ) if ( !isValidPermutation(gen,G->degree,extraCosetsAtLevel,equivCoset) ) tsi1 = tsi1; */ /* Alg 3.4, line 1. */ if ( coset1 == coset2 ) return 0; /* Alg 3.4, line 2. */ retainCoset = MIN( coset1, coset2); deleteCoset = MAX( coset1, coset2); ffTail = deleteCoset; ff[deleteCoset] = 0; bb[deleteCoset] = retainCoset; /* Alg 3.4, lines 3, 5. */ for ( lambda = deleteCoset ; lambda ; lambda = ff[lambda] ) { /* Alg 3.4, line 4. */ lambdaStar = bb[lambda]; while ( lambdaStar > degree && bb[lambdaStar] != lambdaStar ) lambdaStar = bb[lambdaStar]; /* Alg 3.4, line 5. */ for ( gen = genHeader ; gen ; gen = gen->xNext ) if ( !(gen->image[lambda] & HB) ) { tau = gen->image[lambda]; tauStar = tau; while ( tauStar > degree && bb[tauStar] != tauStar ) tauStar = bb[tauStar]; gen->image[lambda] |= HB; gen->invImage[tau] |= HB; if ( tau <= degree ) --newTableEntries; kappa = gen->image[lambdaStar]; if ( !(kappa & HB) ) { kappaStar = kappa; while ( kappaStar > degree && bb[kappaStar] != kappaStar ) kappaStar = bb[kappaStar]; if ( kappaStar != tauStar ) { tsi1 = MIN( tauStar, kappaStar); tsi2 = MAX( tauStar, kappaStar); ff[ffTail] = tsi2; ff[tsi2] = 0; ffTail = tsi2; bb[tsi2] = tsi1; if ( lambdaStar == tsi2 ) lambdaStar = tsi1; } } else { eta = gen->invImage[tauStar]; if ( !(eta & HB) ) { etaStar = eta; while ( etaStar > degree && bb[etaStar] != etaStar ) etaStar = bb[etaStar]; if ( etaStar != lambdaStar ) { tsi1 = MIN( lambdaStar, etaStar); tsi2 = MAX( lambdaStar, etaStar); ff[ffTail] = tsi2; ff[tsi2] = 0; ffTail = tsi2; bb[tsi2] = tsi1; lambdaStar = tsi1; } } else { if ( lambdaStar <= degree && (gen->image[lambdaStar] & HB) ) ++newTableEntries; gen->image[lambdaStar] = tauStar; newDeduc.pnt = lambdaStar; newDeduc.img = tauStar; newDeduc.gn = gen; ATTEMPT_ENQUEUE( deductionQueue, newDeduc) if ( lambdaStar != tauStar || gen != gen->invPermutation ) { if ( tauStar <= degree && (gen->invImage[tauStar] & HB) ) ++newTableEntries; gen->invImage[tauStar] = lambdaStar; newDeduc.pnt = tauStar; newDeduc.img = lambdaStar; newDeduc.gn = gen->invPermutation; ATTEMPT_ENQUEUE( deductionQueue, newDeduc) } } } } /*DEBUG if ( onFreeList(lambda) ) tsi1 = tsi1; */ if ( lambda == firstCos ) firstCos = nextCos[lambda]; else nextCos[prevCos[lambda]] = nextCos[lambda]; if ( nextCos[lambda] != 0 ) prevCos[nextCos[lambda]] = prevCos[lambda]; nextCos[lambda] = freeCosHeader; freeCosHeader = lambda; --currentExtraCosets; /*DEBUG if ( !verifyCosetList(G->degree) ) tsi1 = tsi1;*/ } /* DEBUG for ( gen = genHeader ; gen ; gen = gen->xNext ) if ( !isValidPermutation(gen,G->degree,extraCosetsAtLevel,equivCoset) ) tsi1 = tsi1;*/ return newTableEntries; } /*-------------------------- xFindConsequences ----------------------------*/ /* The function xFindConsequences( deductionQueuelevel, deduc) finds all direct consequences of a given definition or deduction and its inverse by tracing that definition/deduction at all significantly difference occurences of the generators in all relators at the specified level or above. New deductions are enqueued on deductionQueue but not processed. This function returns the number of additional table entries filled in as consequences. */ Unsigned xFindConsequences( const PermGroup *const G, DeductionQueue *deductionQueue, const Unsigned level, const Deduction *const deduc, const Permutation *const genHeader) { OccurenceOfGen *occurence; Unsigned count, fCos, bCos, newEntryCount = 0, degree = G->degree; Unsigned **fPtr, **bPtr; Deduction newDeduc; Permutation *gen; /* DEBUG for ( gen = genHeader ; gen ; gen = gen->xNext ) if ( !isValidPermutation(gen,G->degree,extraCosetsAtLevel,equivCoset) ) fCos = fCos; */ if ( (deduc->pnt > degree && bb[deduc->pnt] != deduc->pnt) || (deduc->img > degree && bb[deduc->img] != deduc->img) ) return 0; for ( occurence = deduc->gn->occurHeader ; occurence && occurence->level >= level; occurence = occurence->next ) { count = occurence->relLength - 1; for ( fCos = deduc->img , fPtr = occurence->fRelStart+1 ; count && !((*fPtr)[fCos] & HB) ; ++fPtr , --count ) fCos = (*fPtr)[fCos]; if ( count == 0 ) { if ( fCos != deduc->pnt ) { newEntryCount += processCoincidence( G, deductionQueue, genHeader, deduc->pnt, fCos); if ( (deduc->pnt > degree && bb[deduc->pnt] != deduc->pnt) || (deduc->img > degree && bb[deduc->img] != deduc->img) ) return 0; } continue; } for ( bCos = deduc->pnt , bPtr = occurence->bRelFinish ; count && !((*bPtr)[bCos] & HB) ; --bPtr , --count ) bCos = (*bPtr)[bCos]; if ( count == 1 ) { (*fPtr)[fCos] = bCos; if ( fCos <= G->degree ) ++newEntryCount; gen = occurence->r->rel[fPtr - occurence->r->fRel]; newDeduc.pnt = fCos; newDeduc.img = bCos; newDeduc.gn = gen; ATTEMPT_ENQUEUE( deductionQueue, newDeduc) if ( fCos != bCos || gen != gen->invPermutation) { (*bPtr)[bCos] = fCos; if ( bCos <= G->degree ) ++newEntryCount; newDeduc.img = fCos; newDeduc.pnt = bCos; newDeduc.gn = gen->invPermutation; ATTEMPT_ENQUEUE( deductionQueue, newDeduc) } } } /* DEBUG for ( gen = genHeader ; gen ; gen = gen->xNext ) if ( !isValidPermutation(gen,G->degree,extraCosetsAtLevel,equivCoset) ) fCos = fCos; */ return newEntryCount; } /*-------------------------- xTraceNewRelator ------------------------------*/ /* The function xTraceNewRelator( G, level, deductionQueue, newRel) processes a new relator newRel at level level for a group G. It traces all cyclic shifts of newRel from each coset. Deductions found are enqueued on deductionQueue but not otherwise processed. This function returns the number of additional table entries filled in due to tracing the new relator. */ Unsigned xTraceNewRelator( const PermGroup *const G, const Unsigned level, DeductionQueue *deductionQueue, const Relator *const newRel, const Permutation *const genHeader) { Unsigned i, pt, startingPos, count, fCos, bCos, newEntryCount = 0; Unsigned **fPtr, **bPtr; Deduction newDeduc; Permutation *gen; /* DEBUG for ( gen = genHeader ; gen ; gen = gen->xNext ) if ( !isValidPermutation(gen,G->degree,extraCosetsAtLevel,equivCoset) ) fCos = fCos; */ for ( i = 1 ; i <= G->basicOrbLen[level] ; ++i ) { pt = G->basicOrbit[level][i]; for ( startingPos = 1 ; startingPos <= newRel->length ; ++startingPos ) { count = newRel->length; for ( fCos = pt , fPtr = newRel->fRel+startingPos ; count && !((*fPtr)[fCos] & HB) ; ++fPtr , --count ) fCos = (*fPtr)[fCos]; if ( count == 0 ) { if ( fCos != pt ) newEntryCount += processCoincidence( G, deductionQueue, genHeader, pt, fCos); continue; } for ( bCos = pt , bPtr = newRel->bRel+startingPos+newRel->length-1 ; count && !((*bPtr)[bCos] & HB) ; --bPtr , --count ) bCos = (*bPtr)[bCos]; if ( count == 1 ) { (*fPtr)[fCos] = bCos; if ( fCos <= G->degree ) ++newEntryCount; gen = newRel->rel[fPtr - newRel->fRel]; newDeduc.pnt = fCos; newDeduc.img = bCos; newDeduc.gn = gen; ATTEMPT_ENQUEUE( deductionQueue, newDeduc) if ( fCos != bCos || gen != gen->invPermutation) { (*bPtr)[bCos] = fCos; if ( bCos <= G->degree ) ++newEntryCount; newDeduc.img = fCos; newDeduc.pnt = bCos; newDeduc.gn = gen->invPermutation; ATTEMPT_ENQUEUE( deductionQueue, newDeduc) } } } } /* DEBUG for ( gen = genHeader ; gen ; gen = gen->xNext ) if ( !isValidPermutation(gen,G->degree,extraCosetsAtLevel,equivCoset) ) fCos = fCos; */ return newEntryCount; } /*-------------------------- makeDefinition --------------------------------*/ void makeDefinition( const Unsigned coset, Permutation *const gen, DeductionQueue *const deducQueue, DefinitionList *const defnList, Permutation *const genHeader) { Unsigned newCoset, trueCoset; Deduction newDeduc; Permutation *gen1; /* DEBUG if ( !verifyCosetList(255) ) trueCoset = trueCoset; for ( gen1 = genHeader ; gen1 ; gen1 = gen1->xNext ) if ( !isValidPermutation(gen1,255,extraCosetsAtLevel,equivCoset) ) trueCoset = trueCoset; */ defnList->coset[defnList->tail] = coset; defnList->gen[defnList->tail] = gen; defnList->image[defnList->tail] = trueCoset = gen->image[coset] & NHB; ++defnList->size; ++defnList->tail; defnList->tail %= extraCosetsAtLevel; newCoset = freeCosHeader; freeCosHeader = nextCos[freeCosHeader]; if ( firstCos != 0 ) prevCos[firstCos] = newCoset; nextCos[newCoset] = firstCos; firstCos = newCoset; prevCos[newCoset] = 0; equivCoset[newCoset] = trueCoset; bb[newCoset] = newCoset; for ( gen1 = genHeader ; gen1 ; gen1 = gen1->xNext ) gen1->image[newCoset] = HB; gen->image[coset] = newCoset; gen->invImage[newCoset] = coset; ++currentExtraCosets; newDeduc.pnt = coset; newDeduc.img = newCoset; newDeduc.gn = gen; ATTEMPT_ENQUEUE( deducQueue, newDeduc) newDeduc.pnt = newCoset; newDeduc.img = coset; newDeduc.gn = gen->invPermutation; ATTEMPT_ENQUEUE( deducQueue, newDeduc) /* DEBUG if ( !verifyCosetList(255) ) trueCoset = trueCoset; for ( gen1 = genHeader ; gen1 ; gen1 = gen1->xNext ) if ( !isValidPermutation(gen1,255,extraCosetsAtLevel,equivCoset) ) trueCoset = trueCoset; */ } /*-------------------------- forceCollapse ---------------------------------*/ Unsigned forceCollapse( const PermGroup *const G, const Unsigned level, Permutation *genHeader, DeductionQueue *const deductionQueue, DefinitionList *const defnList, Unsigned *jPtr, Permutation **hPtr, Word **wPtr) { Unsigned coset, image, oldImage, j, newTableEntries; Permutation *gen, *gen1; WordImagePair wh; Unsigned basicOrbLen = G->basicOrbLen[level]; UnsignedS *basicOrbit = G->basicOrbit[level]; Deduction *newDeduc; /* ??????????????????? coset = defnList->coset[defnList->head]; gen = defnList->gen[defnList->head]; image = defnList->image[defnList->head]; ++defnList->size; ++defnList->head; defnList->head %= extraCosetsAtLevel; ?????????????*/ for ( j = 1 ; j <= G->basicOrbLen[level] ; ++j ) { coset = G->basicOrbit[level][j]; for ( gen = genHeader ; gen ; gen = gen->xNext ) if ( !(gen->image[coset] & HB) && gen->image[coset] > G->degree ) { j = G->basicOrbLen[level] + 2; break; } } image = equivCoset[gen->image[coset]]; /* DEBUG for ( gen1 = genHeader ; gen1 ; gen1 = gen1->xNext ) if ( !isValidPermutation(gen1,G->degree,extraCosetsAtLevel,equivCoset) ) j = j; */ wh = xComputeSchreierGen( G, level, coset, gen); /* DEBUG for ( gen1 = genHeader ; gen1 ; gen1 = gen1->xNext ) if ( !isValidPermutation(gen1,G->degree,extraCosetsAtLevel,equivCoset) ) j = j; */ if ( !xReduce( G, level, &j, &wh) ) { *jPtr = j; *hPtr = allocPermutation(); (*hPtr)->degree = G->degree; (*hPtr)->image = wh.image; adjoinInvImage( *hPtr); *wPtr = allocWord(); **wPtr = wh.word; resetTable( genHeader, basicOrbLen, basicOrbit); return UNKNOWN; } /* DEBUG for ( gen1 = genHeader ; gen1 ; gen1 = gen1->xNext ) if ( !isValidPermutation(gen1,G->degree,extraCosetsAtLevel,equivCoset) ) j = j; */ freeIntArrayDegree( wh.image); *wPtr = allocWord(); **wPtr = wh.word; newTableEntries = processCoincidence( G, deductionQueue, genHeader, image, gen->image[coset]); return newTableEntries; } /*-------------------------- verifyCosetList--------------------------------*/ BOOLEAN verifyCosetList( Unsigned degree) { Unsigned inUseCount = 0, freeCount = 0, i, coset; char *found = (char *) malloc( extraCosetsAtLevel+2) - degree; for ( i = degree+1 ; i <= degree + extraCosetsAtLevel ; ++i ) found[i] = FALSE; for ( coset = firstCos ; coset != 0 ; coset = nextCos[coset] ) { if ( coset <= degree || coset > degree+extraCosetsAtLevel ) { printf( "\n*** Invalid coset %u on in use list.", coset); return FALSE; } if ( found[coset] ) { printf ( "\n*** Coset %u appears twice on in use list.", coset); return FALSE; } found[coset] = 1; ++inUseCount; } for ( coset = freeCosHeader ; coset != 0 ; coset = nextCos[coset] ) { if ( coset <= degree || coset > degree+extraCosetsAtLevel ) { printf( "\n*** Invalid coset %u on free list.", coset); return FALSE; } if ( found[coset] == 1 ) { printf ( "\n*** Coset %u appears on both lists.", coset); return FALSE; } else if ( found[coset] == 2 ) { printf ( "\n*** Coset %u appears twice on free list.", coset); return FALSE; } found[coset] = 2; ++freeCount; } if ( inUseCount + freeCount != extraCosetsAtLevel ) { printf( "\n*** Invalid coset counts: %u + %u != %u", inUseCount, freeCount, extraCosetsAtLevel); return FALSE; } if ( firstCos != 0 && prevCos[firstCos] != 0 ) { printf( "\n*** firstCos = %u, prevCos[%u] = %u.", firstCos, firstCos, prevCos[firstCos]); return FALSE; } for ( coset = firstCos ; coset != 0 ; coset = nextCos[coset] ) if ( (coset != firstCos && nextCos[prevCos[coset]] != coset) || (nextCos[coset] != 0 && prevCos[nextCos[coset]] != coset) ) { printf( "\n*** Invalid linked list at %u.", coset); return FALSE; } free(found); return TRUE; } /*-------------------------- verifyCosetList--------------------------------*/ BOOLEAN onFreeList( Unsigned coset) { Unsigned i; for ( i = freeCosHeader ; i != 0 ; i = nextCos[i] ) if ( i == coset ) return TRUE; return FALSE; } guava-3.6/src/leon/src/randobj.c0000644017361200001450000003114711026723452016450 0ustar tabbottcrontab/* File randobj.c. Main program for randobj command, which may be used to construct a random point set of specified degree and size, or a random partition with specified cell sizes. The format of the command is: randobj set randobj set where the meaning of the parameters is as follows: : the name for the point set constructed, : the degree for the point set (i.e, the point set will be a subset of {1,...,degree}), : the number of points in the point set. The valid options are follows: -s: Sets seed for random number generator to , -cl: Append the point set in Cayley library format to library libName. */ #include #include #include #include #include #define MAIN #include "group.h" #include "groupio.h" #include "errmesg.h" #include "randgrp.h" #include "readpar.h" #include "readpts.h" #include "storage.h" #include "token.h" #include "util.h" GroupOptions options; static void verifyOptions(void); int main( int argc, char *argv[]) { BOOLEAN equalSizeFlag; char outputFileName[MAX_FILE_NAME_LENGTH+1] = ""; char outputLibraryName[MAX_NAME_LENGTH+1] = ""; char outputObjectName[MAX_NAME_LENGTH+1] = ""; Unsigned i, j, degree, setSize, equalCellSize, temp, optionCountPlus1, cellSizeSum, numberOfEqualCells, extraPoints; Unsigned designatedCellSize[102]; UnsignedS *randOrder; unsigned long seed; PointSet *lambda; Partition *pi; char comment[255], tempstr[25]; char *currentPos, *nextPos; ObjectType objectType; /* If there are no options, provide usage information and exit. */ if ( argc == 1 ) { printf( "\nUsage: randobj [-e] type degree size object\n"); return 0; } /* Check for limits option. If present in position 1, give limits and return. */ if ( strcmp( argv[1], "-l") == 0 || strcmp( argv[1], "-L") == 0 ) { showLimits(); return 0; } /* Check for verify option. If present in position i (i as above) perform verify (Note verifyOptions terminates program). */ if ( strcmp( argv[1], "-v") == 0 || strcmp( argv[1], "-V") == 0 ) verifyOptions(); /* Count the number of options. */ for ( optionCountPlus1 = 1 ; optionCountPlus1 <= argc-1 && argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 ) ; /* Check for exactly 4 parameters following options. */ if ( argc - optionCountPlus1 != 4 ) ERROR( "main (randobj)", "Exactly 4 non-option parameters are required.") /* Translate options to lower case. */ for ( i = 1 ; i < optionCountPlus1 ; ++i ) { for ( j = 1 ; argv[i][j] != ':' && argv[i][j] != '\0' ; ++j ) #ifdef EBCDIC argv[i][j] = ( argv[i][j] >= 'A' && argv[i][j] <= 'I' || argv[i][j] >= 'J' && argv[i][j] <= 'R' || argv[i][j] >= 'S' && argv[i][j] <= 'Z' ) ? (argv[i][j] + 'a' - 'A') : argv[i][j]; #else argv[i][j] = (argv[i][j] >= 'A' && argv[i][j] <= 'Z') ? (argv[i][j] + 'a' - 'A') : argv[i][j]; #endif } /* Process options. */ options.maxBaseSize = DEFAULT_MAX_BASE_SIZE; strcpy( options.outputFileMode, "w"); equalSizeFlag = FALSE; seed = 47; for ( i = 1 ; i < optionCountPlus1 ; ++i ) if ( strcmp(argv[i],"-a") == 0 ) strcmp( options.outputFileMode, "a"); else if ( strcmp(argv[i],"-e") == 0 ) equalSizeFlag = TRUE; else if ( strncmp( argv[i], "-n:", 3) == 0 ) if ( isValidName( argv[i]+3) ) strcpy( outputObjectName, argv[i]+3); else ERROR1s( "main (randobj)", "Invalid name ", outputObjectName, " for random set or partition.") else if ( strncmp( argv[i], "-mb:", 4) == 0 ) { errno = 0; options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (cent)", "Invalid syntax for -mb option") } else if ( strncmp( argv[i], "-mw:", 4) == 0 ) { errno = 0; options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0); if ( errno ) ERROR( "main (cent)", "Invalid syntax for -mw option") } else if ( strncmp(argv[i],"-s:",3) == 0 ) { errno = 0; seed = strtol( argv[i]+3, NULL, 0); if ( errno ) ERROR1s( "main (randobj command)", "Invalid option ", argv[i], ".") } else ERROR1s( "main (randobj command)", "Invalid option ", argv[i], ".") /* Compute maximum degree and word length. */ options.maxWordLength = 200 + 5 * options.maxBaseSize; options.maxDegree = MAX_INT - 2 - options.maxBaseSize; /* Determine the type of object (point set or partition). */ objectType = strcmp( lowerCase(argv[optionCountPlus1]), "set") == 0 ? POINT_SET : strcmp( lowerCase(argv[optionCountPlus1]), "partition") == 0 ? PARTITION : INVALID_OBJECT; if ( objectType == INVALID_OBJECT ) ERROR( "main (randobj command)", "Only types set and partition are allowed.") /* Determine the degree. */ errno = 0; degree = strtol( argv[optionCountPlus1+1], NULL, 0); if ( errno || degree <= 1 || degree > options.maxDegree ) ERROR( "main (randobj command)", "Invalid entry for degree.") /* Determine the set size, the number of cells (-e option), or the cell sizes (no -e option). */ switch( objectType ) { case POINT_SET: errno = 0; setSize = strtol( argv[optionCountPlus1+2], NULL, 0); if ( errno || setSize < 1 || setSize >= degree ) ERROR( "main (randobj command)", "Invalid entry for set size.") break; case PARTITION: if ( equalSizeFlag ) { errno = 0; numberOfEqualCells = strtol( argv[optionCountPlus1+2], NULL, 0); if ( errno || numberOfEqualCells < 1 || numberOfEqualCells > degree ) ERROR( "main (randobj command)", "Invalid entry for number of equal-size cells.") } else { errno = 0; j = 0; cellSizeSum = 0; currentPos = argv[optionCountPlus1+2]; do { designatedCellSize[++j] = (unsigned long) strtol( currentPos, &nextPos, 0); if ( errno ) ERROR( "main (randobj command)", "Invalid cell size.") cellSizeSum += designatedCellSize[j]; currentPos = nextPos+1; } while ( *nextPos == ',' && j <= 100 ); designatedCellSize[j+1] = 0; if ( j > 100 || *nextPos != '\0' ) ERROR( "main (randobj command)", "Cell size list invalid or too long.") if ( cellSizeSum != degree ) ERROR( "main (randobj command)", "Cell sizes do not sum to degree.") } break; } /* Compute file and library names for output object. */ parseLibraryName( argv[optionCountPlus1+3], "", "", outputFileName, outputLibraryName); /* Initialize storage manager and random number generator. */ initializeStorageManager( degree); initializeSeed( seed); /* Now we construct a random ordering of 1,...,degree. */ randOrder = allocIntArrayDegree(); for ( i = 1 ; i <= degree ; ++i ) randOrder[i] = i; for ( i = 1 ; i <= degree-1 ; ++i ) { j = randInteger( i, degree); EXCHANGE( randOrder[i], randOrder[j], temp); } /* Construct and write out the point set or partition. */ switch ( objectType ) { case POINT_SET: lambda = allocPointSet(); if ( outputObjectName[0] ) strcpy( lambda->name, outputObjectName); else strcpy( lambda->name, outputLibraryName); lambda->degree = degree; lambda->size = setSize; lambda->pointList = allocIntArrayDegree(); for ( j = 1 ; j <= setSize ; ++j ) lambda->pointList[j] = randOrder[j]; sprintf( comment, "Random %u-element subset of {1,...%u}. Seed = %lu.", lambda->size, lambda->degree, seed); writePointSet( outputFileName, outputLibraryName, comment, lambda); freeIntArrayDegree( lambda->pointList); freePointSet( lambda); break; case PARTITION: pi = allocPartition(); if ( outputObjectName[0] ) strcpy( pi->name, outputObjectName); else strcpy( pi->name, outputLibraryName); pi->degree = degree; pi->pointList = allocIntArrayDegree(); pi->startCell = allocIntArrayDegree(); for ( i = 1 ; i <= degree ; ++i ) pi->pointList[i] = randOrder[i]; pi->startCell[1] = 1; if ( !equalSizeFlag ) { for ( i = 1 ; designatedCellSize[i] != 0 ; ++i ) pi->startCell[i+1] = pi->startCell[i] + designatedCellSize[i]; if ( pi->startCell[i] != degree+1 ) ERROR( "randobj", "Cell size error (should not occur).") if ( i-1 <= 6 ) { sprintf( comment, "Random partition of {1,...%u} with cell sizes", pi->degree); for ( j = 1 ; j <= i-1 ; ++j ) { sprintf( tempstr, " %u", designatedCellSize[j]); strcat( comment, tempstr); } sprintf( tempstr, ", seed = %lu.", seed); strcat( comment, tempstr); } else sprintf( comment, "Random partition of {1,...%u} with %u cells " "of designated sizes. Seed = %lu.", pi->degree, i-1, seed); } else { equalCellSize = degree / numberOfEqualCells; extraPoints = degree % numberOfEqualCells; for ( i = 1 ; i <= numberOfEqualCells ; ++i ) pi->startCell[i+1] = pi->startCell[i] + equalCellSize + ((i <= extraPoints) ? 1 : 0); if ( pi->startCell[i] != degree+1 ) ERROR( "randobj", "Cell size error (should not occur).") if ( extraPoints == 0 ) sprintf( comment, "Random partition of {1,...%u} with %u cells " "of size %u. Seed = %lu.", pi->degree, numberOfEqualCells, equalCellSize, seed); else sprintf( comment, "Random partition of {1,...%u} with %u cells " "of size %u or %u. Seed = %lu.", pi->degree, numberOfEqualCells, equalCellSize, equalCellSize+1, seed); } writePartition( outputFileName, outputLibraryName, comment, pi); freeIntArrayDegree( pi->pointList); freeIntArrayDegree( pi->startCell); freePartition( pi); break; } return 0; } /*-------------------------- verifyOptions -------------------------------*/ static void verifyOptions(void) { CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH, MAX_PRIME_FACTORS, MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS, MAX_EXTRA, XLARGE, SGND, NFLT}; extern void xbitman( CompileOptions *cOpts); extern void xcopy ( CompileOptions *cOpts); extern void xerrmes( CompileOptions *cOpts); extern void xessent( CompileOptions *cOpts); extern void xfactor( CompileOptions *cOpts); extern void xnew ( CompileOptions *cOpts); extern void xoldcop( CompileOptions *cOpts); extern void xpartn ( CompileOptions *cOpts); extern void xpermgr( CompileOptions *cOpts); extern void xpermut( CompileOptions *cOpts); extern void xprimes( CompileOptions *cOpts); extern void xrandgr( CompileOptions *cOpts); extern void xreadpa( CompileOptions *cOpts); extern void xreadpt( CompileOptions *cOpts); extern void xstorag( CompileOptions *cOpts); extern void xtoken ( CompileOptions *cOpts); extern void xutil ( CompileOptions *cOpts); xbitman( &mainOpts); xcopy ( &mainOpts); xerrmes( &mainOpts); xessent( &mainOpts); xfactor( &mainOpts); xnew ( &mainOpts); xoldcop( &mainOpts); xpartn ( &mainOpts); xpermgr( &mainOpts); xpermut( &mainOpts); xprimes( &mainOpts); xrandgr( &mainOpts); xreadpa( &mainOpts); xreadpt( &mainOpts); xstorag( &mainOpts); xtoken ( &mainOpts); xutil ( &mainOpts); } guava-3.6/src/leon/src/primes.c0000644017361200001450000000216711026723452016330 0ustar tabbottcrontab/* File primes.c. Contains a null-terminated array of primes up to 256. */ #include "group.h" #include "errmesg.h" CHECK( primes) Unsigned primeList[] = {2,3,5,7,9,11,13,17,19,23,29,31,37,41,43,47,53,59, 61,67,71,73,79,83,89,97,101,103,107,109,113,127, 131, 137,139,149,151,157,163,167,173,179,181,191,193,197, 199,211,223,227,229,233,239,241,251,0}; /*-------------------------- isPrime --------------------------------------*/ /* The function isPrime( n) returns TRUE exactly when the quantity n of type Unsigned is prime. It can only be used to test positive integers which, if not prime, have a prime factor in the list primeList above. (This is not checked.) */ BOOLEAN isPrime( const Unsigned n) { Unsigned d; if ( n > 256L * 256L ) ERROR( "isPrime", "Attempt to apply function isPrime to integer out of range."); for ( d = 0 ; primeList[d] != 0 && (unsigned long) primeList[d] * primeList[d] <= (unsigned long) n ; ++d ) if ( n % primeList[d] == 0 ) return FALSE; return TRUE; } guava-3.6/src/leon/src/bitmanp.c0000644017361200001450000000170111026723452016454 0ustar tabbottcrontab/* File bitmanp.c. Declares two unsigned long arrays useful for bit manipulation, as follows: bitSetAt: For i = 0,1,...,31, bitSetAt[i] has 1 in bit i and 0 elsewhere. bitSetBelow: For i = 0,1,...,32, bitSetBelow[i] has 1 in bits 0,1,...,i-1 and 0 elsewhere. */ #include "group.h" CHECK( bitman) unsigned long bitSetAt[32] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824, 0x80000000}; unsigned long bitSetBelow[33] = {0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535, 131071, 262143, 524287, 1048575, 2097151, 4194303, 8388607, 16777215, 33554431, 67108863, 134217727, 268435455, 536870911, 1073741823, 2147483647, 0xffffffff}; guava-3.6/src/leon/src/errmesg.c0000644017361200001450000000542311026723452016473 0ustar tabbottcrontab/* File errmesg.c. Contains function errorMessage that is invoked when an error occurs. It prints a message and terminates the program. */ #include "group.h" #include #include #include #include CHECK( errmes) /*-------------------------- isValidName ----------------------------------*/ BOOLEAN isValidName( char *name) /* The name to be checked for validity. */ { Unsigned i; if ( strlen(name) > MAX_NAME_LENGTH ) return FALSE; if ( !isalpha(name[0]) && name[0] != '_' ) return FALSE; for ( i = 1 ; i < strlen(name) ; ++i ) if ( !isalnum(name[i]) && name[i] != '_' ) return FALSE; return TRUE; } /*-------------------------- errorMessage ---------------------------------*/ void errorMessage( char *file, /* The file in which the error occured. */ int line, /* The line before which the error occured. */ char *function, /* The function in which the error occured. */ char *message) /* The message to be printed. It will be prefixed by "Error: ". */ { printf( "\n\n Error: %s\n" " Program was executing function %s (line %d in file %s).", message, function, line, file); exit(ERROR_RETURN_CODE); } /*-------------------------- errorMessage1i -------------------------------*/ void errorMessage1i( char *file, /* The file in which the error occured. */ int line, /* The line before which the error occured. */ char *function, /* The function in which the error occured. */ char *message1, /* The first part of the error message. */ Unsigned intParm, /* The integer variable part of the message. */ char *message2) /* The second part of the error message. */ { printf( "\n\n Error: %s%u%s\n" " Program was executing function %s (line %d in file %s).", message1, intParm, message2, function, line, file); exit(ERROR_RETURN_CODE); } /*-------------------------- errorMessage1s -------------------------------*/ void errorMessage1s( char *file, /* The file in which the error occured. */ int line, /* The line before which the error occured. */ char *function, /* The function in which the error occured. */ char *message1, /* The first part of the error message. */ char *strParm, /* The integer variable part of the message. */ char *message2) /* The second part of the error message. */ { printf( "\n\n Error: %s%s%s\n" " Program was executing function %s (line %d in file %s).", message1, strParm, message2, function, line, file); exit(ERROR_RETURN_CODE); } guava-3.6/src/leon/src/cinter.c0000644017361200001450000000434311026723452016313 0ustar tabbottcrontab/* File cinter.c. Contains function intersection, the main function for a program that may be used to compute the intersection of two permutation groups. */ #include #include #include "group.h" #include "compcrep.h" #include "compsg.h" #include "errmesg.h" #include "orbrefn.h" CHECK( cinter) extern GroupOptions options; /*-------------------------- intersection ---------------------------------*/ /* Function intersection. Returns a new permutation group representing the intersection of two permutation groups G and E on Omega. The algorithm is based on Figure 9 in the paper "Permutation group algorithms based on partitions" by the author. */ #define familyParm familyParm_L PermGroup *intersection( PermGroup *const G, /* The first permutation group. */ PermGroup *const E, /* The second permutation group. */ PermGroup *const L) /* A (possibly trivial) known subgroup of the intersection of G and E. (A null pointer designates a trivial group.) */ { RefinementFamily OOO_G, OOO_E; RefinementFamily *refnFamList[3]; ReducChkFn *reducChkList[3]; SpecialRefinementDescriptor *specialRefinement[3]; ExtraDomain *extra[1]; OOO_G.refine = orbRefine; OOO_G.familyParm[0].ptrParm = G; OOO_E.refine = orbRefine; OOO_E.familyParm[0].ptrParm = E; refnFamList[0] = &OOO_G; refnFamList[1] = &OOO_E; refnFamList[2] = NULL; reducChkList[0] = isOrbReducible; reducChkList[1] = isOrbReducible; reducChkList[2] = NULL; specialRefinement[0] = malloc( sizeof(SpecialRefinementDescriptor) ); specialRefinement[0]->refnType = 'O'; specialRefinement[0]->leftGroup = G; specialRefinement[0]->rightGroup = G; specialRefinement[1] = malloc( sizeof(SpecialRefinementDescriptor) ); specialRefinement[1]->refnType = 'O'; specialRefinement[1]->leftGroup = E; specialRefinement[1]->rightGroup = E; specialRefinement[2] = NULL; extra[0] = NULL; initializeOrbRefine( G); initializeOrbRefine( E); return computeSubgroup( G, NULL, refnFamList, reducChkList, specialRefinement, extra, L); } #undef familyParm guava-3.6/src/leon/src/chbase.h0000644017361200001450000000177711026723452016271 0ustar tabbottcrontab#ifndef CHBASE #define CHBASE extern void insertBasePoint( PermGroup *G, /* The permutation group (base and sgs known). */ Unsigned newLevel, /* If newLevel = i and newBasePoint = b, the */ Unsigned newBasePoint) /* base for G is changed from (b[1],..., */ /* b(i-1),...) to (b[1],...,b[i-1],b,...). */ ; extern void changeBase( PermGroup *G, /* The permutation group. */ UnsignedS *newBase) /* An origin-1 null-terminated sequence of points. */ /* The new base will consist of newBase, followed */ /* by arbitrary extra points as needed. Redundant */ /* base points will not be deleted from newBase, */ /* but no redundant points will be adjoined. */ ; extern Unsigned removeRedunSGens( PermGroup *G, Unsigned startLevel) ; extern Unsigned restrictBasePoints( PermGroup *const G, Unsigned *acceptablePoint) ; #endif guava-3.6/src/leon/src/desauto.h0000644017361200001450000000012411026723452016471 0ustar tabbottcrontab#ifndef DESAUTO #define DESAUTO extern int main( int argc, char *argv[]) ; #endif guava-3.6/src/leon/src/cputime.h0000644017361200001450000000020511026723452016473 0ustar tabbottcrontab#ifndef CPUTIME #define CPUTIME #ifdef CLK_TCK #undef CLK_TCK #endif #define CLK_TCK 1000 extern clock_t cpuTime(void) ; #endif guava-3.6/src/leon/src/leon_config.h0000644017361200001450000000322411026723452017313 0ustar tabbottcrontab/* src/leon_config.h. Generated by configure. */ /* src/leon_config.h.in. Generated from configure.in by autoheader. */ /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 /* Name of package */ #define PACKAGE "libleon" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "" /* Define to the full name of this package. */ #define PACKAGE_NAME "libleon" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "libleon 0.0.2" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "libleon" /* Define to the version of this package. */ #define PACKAGE_VERSION "0.0.2" /* The size of a `int', as computed by sizeof. */ #define SIZEOF_INT 4 /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Version number of package */ #define VERSION "0.0.2" guava-3.6/src/leon/src/readgrp.h0000644017361200001450000000452011026723452016455 0ustar tabbottcrontab#ifndef READGRP #define READGRP extern FactoredInt readFactoredInt(void) ; extern void writeFactoredInt( FactoredInt *fInt) ; extern TokenType readCyclePerm( Permutation *perm) ; extern TokenType readImagePerm( Permutation *perm) ; extern Permutation *readPerm( const Unsigned degree, /* Degree of permutation to be read. */ PermFormat *const format, /* Set to cycleFormat or imageFormat. */ TokenType *const terminator) /* Set to type of token (comma, semicolon, or eof, or right square bracket) that terminated the permutation. */ ; extern PermGroup *readPermGroup( char *libFileName, /* The library file containing the group. */ char *libName, /* The library defining the group. */ const Unsigned requiredDegree, /* The degree that the group must have, or zero if group may have any degree. */ const char *rpgOptions) /* Options: Generate: generate base/sgs if absent, CompleteOrbits: construct complete orbit structure. */ ; extern void setOutputFile( FILE *grpFile) ; extern void writeCyclePerm( Permutation *s, /* The permutation to write. */ Unsigned startCol1, /* First line starts in this column. */ Unsigned startCol2, /* Remaining lines start in this column. */ Unsigned endCol) /* Lines end by this column. */ ; extern void writeImagePerm( Permutation *s, /* The permutation to write. */ Unsigned startCol1, /* First line starts in this column. */ Unsigned startCol2, /* Remaining lines start in this column. */ Unsigned endCol) /* Lines end by this column. */ ; extern void writeImageMonomialPerm( Permutation *s, /* The permutation to write. */ Unsigned fieldSize, Unsigned startCol2) /* Remaining lines start in this column. */ ; extern void writePermGroup( char *libFileName, char *libName, PermGroup *G, char *comment) ; extern void writePermGroupRestricted( char *libFileName, char *libName, PermGroup *G, char *comment, Unsigned restrictedDegree) ; #endif guava-3.6/src/leon/src/readme0000644017361200001450000000067311026723452016045 0ustar tabbottcrontabThis directory contains the source code for the partition backtrack programs. A make file is included, as is a shell script for installing the programs after they are compiled. The directory also include shell scripts needed for some of the partition backtrack programs. Please see Section XI of the User's Manual (provided in file manual.tex in the subdirectory doc) for information about compiling, installing, and testing the programs. guava-3.6/src/leon/src/compcrep.h0000644017361200001450000000247411026723452016647 0ustar tabbottcrontab#ifndef COMPCREP #define COMPCREP extern Permutation *computeCosetRep( PermGroup *const G, /* The permutation group, as above. A base/sgs must be known (unless name is "symmetric"). */ Property *const pP, /* The subgroup-type property, as above. A value of NULL may be used to suppress checking pP.*/ RefinementFamily /* (Ptr to) null-terminated list of refinement */ *const RRR[], /* family pointers (List starts rrR[1].) */ ReducChkFn *const /* (Ptr to) null-terminated list of pointers */ isReducible[], /* to functions checking rRR-reducibility. */ SpecialRefinementDescriptor *const specialRefinement[], /* (Ptr to) list of permutation pointers, */ /* some possibly null. For nonnull pointers, */ /* computeCosetRep will keep track of perm t. */ ExtraDomain *extra[], PermGroup *const L_L, /* A known (possibly trivial) subgroup of G_pP_L. (Null pointer signifies a trivial group.) */ PermGroup *const L_R) /* A known (possibly trivial) subgroup of G_pP_R. (Null pointer signifies a trivial group.) */ ; #endif guava-3.6/src/leon/src/stcs.h0000644017361200001450000000454711026723452016016 0ustar tabbottcrontab#ifndef STCS #define STCS extern WordImagePair computeSchreierGen( const PermGroup *const G, const Unsigned level, const Unsigned point, const Permutation *const gen); BOOLEAN reduce( const PermGroup *const G, const Unsigned level, Unsigned *const jPtr, WordImagePair *const whPtr); void informNewRelator( const Relator *const newRel, Unsigned numberAdded); void informSTCSSummary( const PermGroup *const G, const unsigned long numberOfRelators, const unsigned long totalRelatorLength, const Unsigned maxRelatorLength, const unsigned long numberSelected, const unsigned long totalSelectedLength); void expandGenerators( PermGroup *const G, Unsigned maxExtraCosets); unsigned long prodOrderBounded( const Permutation *const perm1, const Permutation *const perm2, const Unsigned bound); void schreierToddCoxeterSims( PermGroup *const G, const UnsignedS *const knownBase) /* Null-terminated list, or null. */ ; extern WordImagePair computeSchreierGen( const PermGroup *const G, const Unsigned level, const Unsigned point, const Permutation *const gen) ; extern WordImagePair xComputeSchreierGen( const PermGroup *const G, const Unsigned level, const Unsigned point, const Permutation *const gen) ; extern BOOLEAN reduce( const PermGroup *const G, const Unsigned level, Unsigned *const jPtr, WordImagePair *const whPtr) ; extern BOOLEAN xReduce( const PermGroup *const G, const Unsigned level, Unsigned *const jPtr, WordImagePair *const whPtr) ; extern void addStrongGeneratorNR( PermGroup *G, /* Group to which strong gen is adjoined. */ Permutation *newGen) /* The new strong generator. It must move a base point (not checked). */ ; extern void expandGenerators( PermGroup *const G, Unsigned extraCosets) ; extern unsigned long prodOrderBounded( const Permutation *const perm1, const Permutation *const perm2, const Unsigned bound) ; extern void informNewRelator( const Relator *const newRel, Unsigned numberAdded) ; extern void informSTCSSummary( const PermGroup *const G, const unsigned long numberOfRelators, const unsigned long totalRelatorLength, const Unsigned maxRelatorLength, const unsigned long numberSelected, const unsigned long totalSelectedLength) ; #endif guava-3.6/src/leon/src/codeiso.sh0000755017361200001450000000004111026723452016636 0ustar tabbottcrontab#!/bin/sh desauto -iso -code $* guava-3.6/src/leon/config.guess0000755017361200001450000012626011026723452016417 0ustar tabbottcrontab#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2006-07-02' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; x86:Interix*:[3456]*) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T:Interix*:[3456]*) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: guava-3.6/src/leon/doc/0000755017361200001450000000000011026723452014635 5ustar tabbottcrontabguava-3.6/src/leon/doc/manual.tex0000644017361200001450000043751411026723452016652 0ustar tabbottcrontab% Twelve point font \font\twelverm=cmr12 \font\twelvei=cmmi12 \font\twelvesy=cmsy10 scaled \magstep1 \font\twelveex=cmex10 scaled \magstep1 \font\twelvebf=cmbx12 \font\twelvesl=cmsl12 \font\twelvett=cmtt12 \font\twelveit=cmti12 \font\ninerm=cmr9 \font\ninei=cmmi9 \font\ninesy=cmsy9 \font\ninebf=cmbx9 \font\sevenrm=cmr7 \font\seveni=cmmi7 \font\sevensy=cmsy7 \font\sevenbf=cmbx7 \def\twelvepoint{\def\rm{\fam0\twelverm} \textfont0=\twelverm \scriptfont0=\ninerm \scriptscriptfont0=\sevenrm \textfont1=\twelvei \scriptfont1=\ninei \scriptscriptfont1=\seveni \textfont2=\twelvesy \scriptfont2=\ninesy \scriptscriptfont2=\sevensy \textfont3=\twelveex \scriptfont3=\twelveex\scriptscriptfont3=\twelveex \textfont\itfam=\twelveit \def\it{\fam\itfam\twelveit}% \textfont\slfam=\twelvesl \def\sl{\fam\slfam\twelvesl}% \textfont\ttfam=\twelvett \def\tt{\fam\ttfam\twelvett}% \textfont\bffam=\twelvebf \scriptfont\bffam=\ninebf \scriptscriptfont\bffam=\sevenbf \def\bf{\fam\bffam\twelvebf}% \normalbaselineskip=14pt \setbox\strutbox=\hbox{\vrule height9.5pt depth4.5pt width0pt}% \normalbaselines\rm} % % 11 point font \font\elevenrm=cmr10 scaled \magstephalf \font\eleveni=cmmi10 scaled \magstephalf \font\elevensy=cmsy10 scaled \magstephalf \font\elevenex=cmex10 scaled \magstephalf \font\elevenbf=cmbx10 scaled \magstephalf \font\elevensl=cmsl10 scaled \magstephalf \font\eleventt=cmtt10 scaled \magstephalf \font\elevenit=cmti10 scaled \magstephalf \font\eightrm=cmr8 \font\eighti=cmmi8 \font\eightsy=cmsy8 \font\eightbf=cmbx8 \font\sixrm=cmr6 \font\sixi=cmmi6 \font\sixsy=cmsy6 \font\sixbf=cmbx6 \def\elevenpoint{\def\rm{\fam0\elevenrm}% switch to 11-point type \textfont0=\elevenrm \scriptfont0=\eightrm \scriptscriptfont0=\sixrm \textfont1=\eleveni \scriptfont1=\eighti \scriptscriptfont1=\sixi \textfont2=\elevensy \scriptfont2=\eightsy \scriptscriptfont2=\sixsy \textfont3=\elevenex \scriptfont3=\elevenex\scriptscriptfont3=\elevenex \textfont\itfam=\elevenit \def\it{\fam\itfam\elevenit}% \textfont\slfam=\elevensl \def\sl{\fam\slfam\elevensl}% \textfont\ttfam=\eleventt \def\tt{\fam\ttfam\eleventt}% \textfont\bffam=\elevenbf \scriptfont\bffam=\eightbf \scriptscriptfont\bffam=\sixbf \def\bf{\fam\bffam\elevenbf}% \normalbaselineskip=13pt \setbox\strutbox=\hbox{\vrule height9pt depth4pt width0pt}% \normalbaselines\rm} % \twelvepoint \parindent=0pt \raggedbottom % Make headline containing date \def\makeheadline{\vbox to 0pt{\vskip-45pt \line{\vbox to 8.5pt{}\hskip-40pt\fiverm{\number\month}/{\number\day}/92\hfil}\vss} \nointerlineskip} % \def\makeactive#1{\catcode`#1 = \active \ignorespaces}% \chardef\letter = 11 \chardef\other = 12 \catcode`@=\letter \def\alwaysspace{\hglue\fontdimen2\the\font \relax}% {\makeactive\^^M \makeactive\ % \gdef\obeywhitespace{% \makeactive\^^M\def^^M{\par\indent}% \aftergroup\@removebox% \makeactive\ \let =\alwaysspace}}% \def\@removebox{\setbox0=\lastbox} % \font\titlefont=cmbx10 scaled\magstep4 \font\authorfont=cmr12 scaled\magstep1 \font\sectionheaderfont=cmbx12 scaled\magstep1 \font\subsectionheaderfont=cmbx12 \def\filenamefont{\tt} % \long\def\section#1{\bigbigbreak{\sectionheaderfont #1}\nobreak\medskip\nobreak} \long\def\subsection#1{\bigbreak{\subsectionheaderfont #1}\hskip0.75em} \def\twocols#1#2{\hskip0.45truein\hbox to 3.0truein{#1\hfil}\hskip0.4truein\relax \hbox to 2.45truein{#2\hfil}\hfil} \long\def\objectfile#1{{\elevenpoint\obeylines\obeyspaces\tt\ttraggedright #1\vskip0pt}} \newdimen\optionIndent\optionIndent=1.1in \long\def\defoption#1#2{{\advance\leftskip by1em\advance\leftskip by\optionIndent \noindent\llap{\hbox to\optionIndent{\tt #1\hfil}}#2\vskip0pt}} % \def\germR{\underline{{\rm R}}} \def\bfgermR{\underline{{\bf R}}} % \def\options{{\rm [}{\it options\/}{\rm ]}} % \newskip\bigbigskipamount \bigbigskipamount=20pt plus 7pt minus 5pt \def\bigbigskip{\vskip\bigbigskipamount} \def\bigbigbreak{\par\ifdim\lastskip<\bigbigskipamount \removelastskip\penalty-300\bigbigskip\fi} \multiply\smallskipamount by4\divide\smallskipamount by3 \multiply\medskipamount by4\divide\medskipamount by3 \multiply\bigskipamount by4\divide\bigskipamount by3 \multiply\bigbigskipamount by4\divide\bigbigskipamount by3 % \pageno=1 \centerline{{\titlefont PARTITION BACKTRACK PROGRAMS:}} \vskip10pt \centerline{{\titlefont USER'S MANUAL}} \vskip35pt \centerline{{\authorfont JEFFREY S. LEON}} \vskip6pt \centerline{Mathmatics Dept, m/c 249} \centerline{University of Illinois at Chicago} \centerline{Box 4348} \centerline{Chicago, IL 60680} \vskip40pt % \section{I.\quad INTRODUCTION} % This document describes a collection of programs for permutation group computations employing the partition backtrack method, as described in a recent article by the author (Leon, 1991). At present, these programs perform the following computations: \medskip \twocols{set stabilizers,}{set images (see below),} \vskip4pt \twocols{ordered partition stabilizers,}{ordered partition images,} \vskip4pt \twocols{intersections,}{} \vskip4pt \twocols{centralizers (of elements),}{conjugacy (of elements),} \vskip4pt \twocols{centralizers (of subgroups),}{} \vskip4pt \twocols{automorphism groups of designs,}{isomorphism of designs,} \vskip4pt \twocols{automorphism groups of matrices,}{isomorphism of matrices,} \vskip4pt \twocols{monomial automorphism groups of}{monomial isomorphism of matrices} \vskip-1.5pt \twocols{matrices over small fields,}{over small fields,} \vskip4pt \twocols{automorphism groups of linear codes,}{isomorphism of linear codes.} \medbreak The term {\it set image} problem is used here to refer to the following problem: Given a permutation group $G$ and subsets $\Lambda$ and $\Phi$ of the domain, determine if there exists $g \in G$ such that $\Lambda^g = \Phi$. The ordered partition image problem is defined analogously. The term {\it design\/} is used here to refer to any collection of points and blocks. An automorphism of a matrix is any permutation of the rows and columns that leaves the matrix invariant; two matrices are isomorphic if one may be transformed to the other by permutation of rows and columns. For monomial automorphism groups and monomial isomorphism, the matrix entries must be taken from a finite field; in addition to permutation of rows and columns, we allow each row and each column to be multiplied by a nonzero field element. % \medbreak Note that each of the problems in the first column above involves computation of a subgroup; these problems will be referred to as {\it subgroup computations}. For each problem in the second column, the set of permutations having the desired property either is empty or forms a right coset of an appropriate subgroup; we are seeking one coset representative (if it exists). These problems will be referred to as {\it coset representative computations}. % \medbreak Some of the programs described here can be used to compute in groups of relatively high degree, considerably higher than those that can be handled by programs based on conventional algorithms. However, it should be kept mind that the programs are new. All appear to work correctly, but most have not been thoroughly tested, especially on intransitive groups. (The set stabilizer program has been tested the most thoroughly, and in general those for subgroup computations have received more testing than those for coset representative calculations.) The author would appreciate any reports of errors; they may be sent to {\tt leon@turing.math.uic.edu}. \medbreak Work on programs for the following computations is in progress: \medskip \twocols{unordered partition stabilizers,}{unordered partition images,} \vskip4pt \twocols{normalizers,}{conjugacy (of subgroups),} \vskip4pt \twocols{}{coset intersections,} \medbreak In the course of constructing test cases for the partition backtrack programs and verifying their output, the author has developed several other programs, not based on backtrack search. These programs are described briefly in Section~IX. Many of these programs were put together quickly, with a view toward simplicity rather than efficiency and ease of use. \medbreak At present, the programs run on the following machines: The Sun/3, the Sun/4, the IBM~3090, and the IBM~PC. Two versions are available for the IBM~PC: a standard version, which is limited to groups of degree no more than 1000 (roughly) due to the 640K memory limitation, and a 386/486 version using a DOS extender, that can handle larger groups. The source code for all programs is written entirely in C and, with very minor exceptions, conforms to the ANSI standard. The programs should compile, with minimal changes, with any C compiler fully supporting the ANSI standard. The Sun/3 and Sun/4 versions have been compiled with the GNU C compiler, the IBM~3090 version with the Waterloo~C compiler, and the IBM/PC versions with the Borland C++ and Zortech C++ compilers (both configured as C compilers). % % \section{II.\quad OBJECTS AND FILE FORMATS} % At present, the programs compute with objects of seven types: Permutation groups, permutations, point sets, partitions (ordered or unordered), block designs, matrices, and linear codes. Each object used as input by the programs is read from a file. Likewise, each object constructed by the programs is written to a file. All of these files are ordinary text files. The format of the files is designed for compatibility with Cayley (Cannon, 1984); it is that of a Cayley library, with certain restrictions added. Essentially, the restrictions say that the library may contain only statements defining the object, and (at present) that only certain attributes of the object may specified in the library. (Many of the permutation group libraries distributed with Cayley conform to these restrictions.) Thus objects constructed by these programs described here may be read into Cayley for further investigation. Likewise, objects defined in existing Cayley libraries may, in many cases, be used as input to the programs described here. An alternative format, compatible with Gap, may be added at a later date. \medbreak The examples which follow illustrate the correct format for these object files. Note that the contents of the files is case--insensitive; upper and lower case letters may be used interchangeably. (However, the names of the files may be case--sensitive, depending on the operating system.) Also, the use of white space (blanks, tabs, newline characters) is optional: Except within integers and identifiers, any number of whitespace characters may occur. Text enclosed by ampersands or quotation marks is treated as a comment. % \subsection{a)\enskip Permutation groups:}The format for permutation group files is illustrated by following file, named {\filenamefont psp62}, which defines ${\rm PSp}_6(2)$ as a permutation group on nonzero vectors (degree 63). \medbreak \vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other LIBRARY psp62; " PSp(6,2) acting on nonzero vectors, degree 63." psp62: permutation group(63); psp62.forder: 2^9 * 3^4 * 5 * 7; psp62.generators: a = (1,2)(3,5)(4,7)(8,12)(11,16)(13,19)(17,18)(20,26)(21,28)(23,30)(24,32) (25,34)(29,37)(31,40)(33,43)(36,46)(38,41)(39,49)(42,44)(45,52)(48,51) (53,58)(57,62)(59,61), b = (1,3,6,10,15,22)(2,4,8,13,20,27)(5,9,14,21,29,38)(7,11,17,23,31,41) (12,18,24,33,44,34)(16,19,25)(26,35,45,53,32,42)(28,36,47)(30,39,50, 56,61,58)(37,48)(40,51,46,54,59,62)(49,55,60,63,52,57); FINISH;\vskip0pt}} \medbreak The line specifying the factored group order may be omitted; however, since the random Schreier method is currently used to construct a base and strong generating set for the group, there is a possibility (probably small) that the group may be generated incorrectly if this line is removed. When generators are written in cycle format, as above, inclusion of cycles of length one is optional. (For compatibility with Cayley, they should be omitted.) It is also possible to write the generators in image (rather than cycle) format; in this case, the file shown above would become: \medbreak \vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other LIBRARY psp62; " PSp(6,2) acting on nonzero vectors, degree 63." psp62: permutation group(63); psp62.forder: 2^9 * 3^4 * 5 * 7; psp62.generators: a = /2,1,5,7,3,6,4,12,9,10,16,8,19,14,15,11,18,17,13,26,28,22,30, 32,34,20,27,21,37,23,40,24,43,25,35,46,29,41,49,31,38,44,33,42, 52,36,47,51,39,50,48,45,58,54,55,56,62,53,61,60,59,57,63/, b = /3,4,6,8,9,10,11,13,14,15,17,18,20,21,22,19,23,24,25,27,29,1, 31,33,16,35,2,36,38,39,41,42,44,12,45,47,48,5,50,51,7,26,43,34, 53,54,28,37,55,56,46,57,32,59,60,61,49,30,62,63,58,40,52/; FINISH;\vskip0pt}} \medbreak Finally, if a base and strong generating set for the group are already known, they may be included in the file. This eliminates the need for the programs to first construct a base and strong generating set for the input group. The file format is then as follows. \nobreak\medskip\nobreak \vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other LIBRARY psp62; " PSp(6,2) acting on nonzero vectors, degree 63." psp62: permutation group(63); psp62.forder: 2^9 * 3^4 * 5 * 7; psp62.base: seq(1,3,6,2,4,5); psp62.strong generators: [ x01 = (1,3)(4,27)(5,9)(7,45)(10,48)(11,17)(12,34)(13,20)(14,25)(15, 39)(16,63)(19,60)(21,55)(22,58)(23,28)(24,37)(31,53)(32,47)(33, 61)(36,42)(38,49)(44,50)(51,62)(54,59), x02 = (2,16)(3,6)(5,55)(8,21)(9,40)(13,51)(14,46)(15,47)(17,44)(19, 59)(20,29)(22,36)(23,58)(24,61)(25,63)(26,37)(27,60)(31,50)(32, 48)(33,41)(34,56)(38,57)(43,45)(52,62), . . x12 = (5,51)(7,12)(8,29)(9,62)(10,42)(13,55)(15,23)(18,35)(20,21) (22,32)(28,39)(34,45)(36,48)(40,52)(43,56)(47,58)]; FINISH;\vskip0pt}} \medbreak (The vertical dots indicated that part of the file has been omitted.) When a base and strong generating set are given, inclusion of the factored order of the group is purely optional. At present it is {\it not} possible to specify both generators and a base and strong generating set for a group. (This obviously undesirable restriction will be removed eventually.) % \subsection{b)\enskip Permutations:}The format for permutation files is illustrated by following file, named {\filenamefont g}, which defines a permutation of $g$ of degree 63 and order 4, which turns out to lie in the group ${\rm PSp}_6(2)$ given above. \medbreak \vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other LIBRARY g; " An element of order 4 in the group psp62 above." g = (1,40,50,6)(2,58,18,34)(3,8,44,30)(4,10,15,48)(5,11)(7,60,38,32) (12,46,22,56)(13,62,20,61)(16,42,36,63)(19,49,47,45)(21,53,31, 55)(24,33,37,51)(25,28)(26,52)(27,59,39,54)(29,41); FINISH;\vskip0pt}} \medbreak As with generators for permutation groups, permutations may be written in image format, rather than cycle format. Note that, when cycle format is used, the file contains no explicit indication of the degree of the permutation. Thus, for example, the permutation {\tt g} above could be used wherever a permutation of degree 63 (the largest point appearing explicitly) or greater is expected. \medbreak Given the files above, the centralizer in ${\rm PSp}_6(2)$ of $g$ could be computed by the command \smallskip \hskip0.45truein{\tt cent\quad psp62\quad g\quad C} \smallskip which would save the centralizer (in the format described in part~(a) above) in the file {\filenamefont C}. % \subsection{c)\enskip Point sets:}The format for point sets is illustrated by following file, named {\filenamefont lambda}, which defines a subset $\Lambda$ of $\{1,\ldots,63\}$. \medbreak \vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other LIBRARY lambda; " A subset of {1,...,63} of size 31." lambda = [10,16,44,3,5,33,48,63,56,50,6,52,55,19,34,25,2,35,17,40,21, 58,49,36,39,12,60,30,15,29,37]; FINISH;\vskip0pt}} \medbreak Note that there is no explicit indication of the size of the base set. Thus the set {\tt lambda} above could be used wherever a subset of $\{1,\ldots,m\}$ is expected for any $m$ with $m \geq 63$ (the largest point appearing explicitly). \medbreak The set stabilizer in ${\rm PSp}_6(2)$ of $\Lambda$ could be computed by the command \smallskip \hskip0.45truein{\tt setstab\quad psp62\quad lambda\quad S} \smallskip which would save the stabilizer in the file {\filenamefont S}. % \subsection{d)\enskip Partitions:}The format for partitions (ordered or unordered) is illustrated by following file, named {\filenamefont pi}, which defines a partition $\Pi$ of $\{1,\ldots,63\}$. \medbreak \vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other LIBRARY pi; " An (ordered or unordered) partition of 1,...,63 having four " " cells of sizes 15, 20, 13, and 15. respectively." pi = seq([1,34,28,48,37,41,13,54,57,51,4,38,8,46,16],[2,40,21, 18,6,53,30,56,42,12,3,11,33,15,32,5,60,31,55,63],[7, 36,25,29,35,9,26,49,14,47,10,24,43],[17,58,52,50,59, 45,20,61,23,39,44,19,22,62,27]); FINISH;\vskip0pt}} \medbreak Note that the individual cells are delimited by square brackets. Note also that the file contains no indication whether the partition is ordered or unordered; rather each program operating on partitions interprets the partition as ordered or unordered, whichever is appropriate for the the program. \medbreak The stabilizer in ${\rm PSp}_6(2)$ of $\Pi$, interpreted as an ordered partition, could be computed by the command \smallskip \hskip0.45truein{\tt parstab\quad psp62\quad pi\quad T} \smallskip which saves the stabilizer in the file {\filenamefont T}. % \subsection{e)\enskip Block designs:}Here a block design refers to any collection of subsets of $\{1,\ldots,n\}$; it is even possible to have repeated blocks, i.e., two different blocks containing exactly the same points. (If repeated blocks occur, we require that an automorphism preserve multiplicities.) The file format for block designs is illustrated by following file, named {\filenamefont d17}, which defines a block design $D_{17}$ with 17 points and with 34 blocks, each of size 5. \medbreak \vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other LIBRARY d17; " The design with 17 points and 34 blocks, each containing " " 5 points, obtained from the codewords of weight 5 in the " " quadratic residue code of length 17 and dimension 9." d17 = seq( 17, 34, [3,6,8,15,17], [1,4,7,9,16], [1,4,5,11,17], [2,5,8,10,17], [3,4,7,8,14], [1,2,5,6,12], [1,4,6,13,15], [1,3,6,9,11], [1,3,10,12,15], [3,5,8,11,13], [2,8,9,12,13], [1,7,13,14,17], [6,8,11,14,16], [4,5,8,9,15], [2,5,7,14,16], [2,3,6,7,13], [3,4,10,16,17], [3,5,12,14,17], [1,7,8,11,12], [5,7,10,13,15], [6,12,13,16,17], [2,4,7,10,12], [2,9,11,14,17], [2,3,9,15,16], [2,4,11,13,16], [6,7,10,11,17], [4,6,9,12,14], [5,11,12,15,16], [1,8,10,13,16], [1,2,8,14,15], [5,6,9,10,16], [4,10,11,14,15], [7,9,12,15,17], [3,9,10,13,14] ); FINISH;\vskip0pt}} \medbreak Note that the file contains the number of points, followed by the number of blocks, followed by a listing of the blocks. Each block is delimited by square brackets. \medbreak The automorphism group of this block design could be computed by the command \smallskip \hskip0.45truein{\tt desauto\quad d17\quad A} \smallskip which saves the automorphism group in the file {\filenamefont A}. % \subsection{f)\enskip Matrices:}Here a matrix is merely a $k\times n$ array of integers, each in the set $\{0,\ldots,q-1\}$ for some $k$, $n$, and $q$. (At present, $q$ cannot exceed 256; this limit could be raised, at the cost of additional space, by minor changes to the source code.) The file format for matrices is illustrated by following file, named {\filenamefont m17}, which represents incidence matrix $M_{17}$ for the block design $D_{17}$ in part~(e) above. (In the incidence matrix, rows correspond to points and columns to blocks.) \medbreak \vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other LIBRARY m17; " The incidence matrix of d17." m17 = seq( 2, 17, 34, seq( 0,1,1,0,0,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0, 0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,0,0,0,0, 1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1, 0,1,1,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,0, 0,0,1,1,0,1,0,0,0,1,0,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0, 1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0, 0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0, 1,0,0,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0, 0,1,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,1,1, 0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,0,1, 0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,0,1,0,0, 0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,0,0,1,0, 0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1, 0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1, 1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,1,1,0, 0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,0,0, 1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,0,1,0 )); FINISH;\vskip0pt}} \medbreak Note that the file contains the set size $q$, followed by the number $k$ of rows, followed by the number $n$ of columns, followed by the entries of the matrix listed in row--major order. Note that matrix entries are not, in general, limited to 0 and 1; if $q$ is the set size, matrix entries may be integers in the range 0 through $q-1$. \medbreak The automorphism group of this matrix could be computed by the command \smallskip \hskip0.45truein{\tt matauto\quad m17\quad B} \smallskip which saves the automorphism group in the file {\filenamefont B}. \medbreak Matrices may also be specified using an alternate format, which is not compatible with Cayley, but which saves considerable space for large matrices.\footnote{${}^{\dag}$}{\elevenpoint At time of writing, the alternate format does not work correctly on some machines.} This alternate format is available only when the set size $q$ is at most 9. Using the alternate format, the matrix $M_{17}$ would be specified by a file as follows: \medbreak \vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other m17 2 17 34 0110011110010000001000000000110000 0001010000100011000001111000010000 1000100111000001110000010000000001 0110101000000100100001001010000100 0011010001000110010100000001001000 1000011100001001000010000110001000 0100100000010011001101000100000010 1001100001101100001000000000110000 0100000100100100000000110010001011 0001000010000000100101000100101101 0010000101001000001000101101000100 0000010010100000011011000011000010 0000001001110001000110001000100001 0000100000011010010000100010010101 1000001010000100000100010001010110 0100000000001010100010011001101000 1011000000010000110010100100000010 \vskip0pt}} \medbreak With the alternate format, blanks may occur between matrix entries, but are not required. The first line of the file is reserved for the matrix name; nothing else may be placed on this line. % \subsection{g)\enskip Linear codes:} The file format for lines codes is illustrated by following file, named {\filenamefont q17}, which represents the binary (17,9)--quadratic residue code $Q_{17}$ mentioned in part~(e) above. This file gives a generator matrix for the code, in the format of part~(f) above. \medbreak \vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other LIBRARY q17; " The (17,9) binary quadratic residue code." q17 = seq( 2, 9, 17, seq( 1,1,1,0,1,0,0,0,1,1,0,0,0,1,0,1,1, 1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,0,1, 1,1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,0, 0,1,1,1,1,1,0,1,0,0,0,1,1,0,0,0,1, 1,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0,0, 0,1,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0, 0,0,1,0,1,1,1,1,1,0,1,0,0,0,1,1,0, 0,0,0,1,0,1,1,1,1,1,0,1,0,0,0,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, )); FINISH;\vskip0pt}} \medbreak Note that the file contains the size of the field for the code, followed by the dimension of the code, followed by the length of the code, followed by a generator matrix whose entries are listed in row--major order. At present, the field size is restricted to a prime integer (less than 255) or to 4; automorphism group and isomorphism calculations are practical only when the field size is quite small. In the case of a prime, the field is taken as the integers modulo that prime. \medbreak The automorphism group of this code could be computed by the command \smallskip \hskip0.45truein{\tt codeauto\quad q17\quad v17\quad H} \smallskip which saves the automorphism group as the group {\filenamefont H}. (Here file {\filenamefont v17} defines a matrix $V_{17}$ which is the transpose of the matrix $M_{17}$ of part~(f) above; the role of $V_{17}$ will be explained later.) \medbreak As with matrices, an alternate (not Cayley--compatible) format is provided for codes over field of size at most 9.\footnote{${}^{\dag}$}{\elevenpoint As with matrices, this alternate format at present fails to work correctly on some machines.} With the alternate format, the file defining the code $Q_{17}$ would be as follows: \medbreak \vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other q17 2 9 17 11101000110001011 11110100011000101 11111010001100010 01111101000110001 10111110100011000 01011111010001100 00101111101000110 00010111110100011 11111111111111111 \vskip0pt}} \bigbreak \hrule \bigbigbreak In the examples above, it was assumed that the name of file matched the name of the Cayley library that it contained. Although this is recommended for simplicity, it need not be the case. When the names do not match, an object is specified using the format \hbox{{\it fileName\/}{\tt ::}{\it libraryName\/}}. For example, if the file {\filenamefont psp62} in part~(a) above were renamed {\filenamefont psp} and the file {\filenamefont g} in part~(b) were named {\filenamefont pspx4}, but if the contents of both files remained unchanged, the command to compute the centralizer in ${\rm PSp}_6(2)$ of $g$ might be \smallskip \hskip0.45truein{\tt cent\quad psp::psp62\quad pspx4::g\quad gCentr::C} \smallskip where now the centralizer is saved in the file {\filenamefont gCentr}, but in a Cayley library named {\tt C}. A path may also be specified, for example, \smallskip \hskip0.45in{\tt cent\quad ../groups/psp::psp62\quad ../groups/pspx4::g\quad gCentr::C} \smallskip in Unix. (In MS~DOS on the IBM~PC, the forward slash must be replaced by a backslash. Under CMS on the IBM~370, the file name and file type must be separated by a period, rather than the blank normally used under CMS.) If however, the file name and the library name for input files differ only in that the file name contains path information, the {\tt -p} option (discussed later) may be useful. % \medbreak In the examples above, not only did the file name and the Cayley library name match, but both matched the actual name for the object appearing in the Cayley library. Actually, the name for the object need not be related to the name of the Cayley library. For example, the following is acceptable. \medbreak \vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other LIBRARY psp62; " PSp(6,2) acting on nonzero vectors, degree 63." G: permutation group(63); G.forder: 2^9 * 3^4 * 5 * 7; G.generators: a = (1,2)(3,5)(4,7)(8,12)(11,16)(13,19)(17,18)(20,26)(21,28)(23,30)(24,32) (25,34)(29,37)(31,40)(33,43)(36,46)(38,41)(39,49)(42,44)(45,52)(48,51) (53,58)(57,62)(59,61), b = (1,3,6,10,15,22)(2,4,8,13,20,27)(5,9,14,21,29,38)(7,11,17,23,31,41) (12,18,24,33,44,34)(16,19,25)(26,35,45,53,32,42)(28,36,47)(30,39,50, 56,61,58)(37,48)(40,51,46,54,59,62)(49,55,60,63,52,57); FINISH;\vskip0pt}} \medbreak In this situation, the command line must still specify the Cayley library name (and file name, if different), but informative messages printed as the command executes use the object name ({\tt G}, in this case). For objects created by commands, an object name different from the Cayley library name may be specified by means of the {\tt -n} option, discussed later. % % \section{III.\quad\kern-3pt FIELDS, MONOMIAL PERMUTATIONS, AND MATRICES\kern-2pt} % This section treats several topics that arise primarily in connection with computations involving combinatorial structures -- designs, matrices, and codes. % \subsection{i)\enskip Finite fields:}Finite fields arise when computing with codes, or with matrices whose entries belong to the field. At present, only fields ${\rm GF}(q)$ whose order $q$ is either 4 or a prime integer are supported; moreover, we must have $q\leq 255$. (For automorphism group and isomorphism calculations, time and space considerations generally dictate a practical limit on $q$ that is far lower.) Field elements are numbered $0,1,\ldots,q-1$. When $q$ is prime, the field is taken as the integers modulo $q$. When $q=4$, there is an essentially unique way to number the field elements. \smallbreak We denote the set of nonzero elements of ${\rm GF}(q)$ by ${\rm GF}(q)^{\#}$. \bigbreak \subsection{ii)\enskip Monomial permutations:}Given a fixed field ${\rm GF}(q)$, a monomial permutation of monomial degree $n$ over ${\rm GF}(q)$ is essentially a permutation $s$ on ${\rm GF}(q)^{\#} \times \{1,\ldots,n\}$ which satisfies the following property, henceforth referred to as the {\it monomial property:\/} $$\displaylines{(\alpha,i)^s = (\beta,j)\quad {\rm implies}\quad (\gamma\alpha,i)^s = (\gamma\beta,j)\kern40pt\cr\kern40pt {\rm \hbox{for all}}\enskip \alpha,\beta,\gamma\in {\rm GF}(q)^{\#}\enskip {\rm and}\enskip i,j\in\{1,\ldots,n\}.\cr}$$ Note that $s$ is determined completely by its action on the points $(1,i)$, $1\leq i\leq n$; note also that the actual degree of $s$ is $(q-1)n$. \smallbreak For purposes of actual computation, however, we want a representation of $s$ as a permutation on $\{1,\ldots,(q-1)n\}$; to obtain this, we number the pair $(\alpha,i)$ by $(q-1)(i-1)+\overline{\alpha}$, where $\overline{\alpha}$ denotes the integer representing $\alpha$. Then the monomial property becomes $$\displaylines{\bigl((q-1)(i-1)+\overline{\alpha}\bigr)^s = (q-1)(j-1)+\overline{\beta}\quad{\rm implies}\kern40pt\cr \kern40pt\bigl((q-1)(i-1)+\overline{\gamma\alpha}\bigr)^s = (q-1)(j-1)+\overline{\gamma\beta}.\cr}$$ \medbreak For example, over the field ${\rm GF}(4)$, the monomial permutation $s$ on ${\rm GF}(4) \times \{1,2,3,4\}$ determined by $$ (1,1)^s = (3,2),\quad (1,2)^s = (2,4),\quad (1,3)^s = (1,1),\quad (1,4)^s = (2,3)$$ is represented as a permutation on $\{1,\ldots,12\}$ as follows: $$(1,6,10,8,2,4,11,9,3,5,12,7).$$ % \bigbreak \subsection{iii)\enskip Permutations acting on matrices:}Let $A = (a_{ij})$ be an $r \times c$ matrix with entries from an arbitrary set. A permutation $s$ of degree $r+c$ which fixes $\{1,\ldots,r\}$ setwise induces an action on $A$ as follows: Row $i$ of $A$ is moved to row position $i^s$\enskip $(1\leq i\leq r)$ and column $j$ of $A$ is moved to column position $(r+j)^s-r$\enskip $(1\leq j\leq c)$. Thus $$A^s = (b_{ij}),\quad {\rm where}\quad b_{ij} = a_{i^\prime j^\prime},\enskip {\rm with}\enskip i^\prime = i^{s^{-1}}\enskip {\rm and}\enskip j^\prime = (r+j)^{s^{-1}}-r.$$ If $A^s = B$, we say that $s$ is an {\it isomorphism\/} of $A$ to $B$. When $A^s=A$,\enskip $s$ is called an {\it automorphism\/} of $A$. The group formed by the automorphisms is called the {\it automorphism group\/} of $A$, and denoted ${\rm AUT}(A)$. \medbreak For example, the action of a permutation $s$ of degree 7 on a $3\times 4$ matrix $A$ is illustrated by the following. $$s = (1,3,2)(4,7,5),\qquad A = \pmatrix{8&0&4&3\cr 2&9&3&0\cr 0&1&7&5\cr},\qquad A^s = \pmatrix{9&0&3&2\cr 1&5&7&0\cr 0&3&4&8\cr}.$$ % \bigbreak \subsection{iv)\enskip Monomial permutations acting on matrices:}Now let $A = (a_{ij})$ be an $r \times c$ matrix with entries from a field ${\rm GF}(q)$. A monomial permutation $s$ of monomial degree $r+c\kern3pt$ (actual degree $(q-1)(r+c)\kern2pt)$ which fixes $\{1,\ldots,(q-1)r\}$ setwise induces an action on $A$. This action is most easily described if we think of $s$ as a permutation on ${\rm GF}(q)^{\#} \times \{1,\ldots,n\}$, as in~(ii) above; then $s$ fixes $\{(\alpha,i)\vert \alpha\in{\rm GF}(q)^{\#},1\leq i\leq r\}$ setwise. If $(1,i)^s = (\alpha,k)$ and $(1,r+j)^s = (\beta,r+m)$, then row $i$ of $A$ is multiplied by $\alpha$ and moved to row position $k$,\enskip and column $j$ of $A$ is multiplied by $\beta$ and moved to column position $m$. Thus $$ A^s = (b_{ij}),\quad {\rm where}\quad b_{ij} = \lambda^{-1}\mu^{-1}a_{i^\prime j^\prime},$$ with $\lambda$, $\mu$, $i^\prime$, and $j^\prime$ determined by $$ (\lambda,i^\prime) = (1,i)^{s^{-1}}\quad {\rm and}\quad (\mu,r+j^\prime) = (1,r+j)^{s^{-1}}.$$ If $A^s = B$, we say that $s$ is an {\it monomial isomorphism\/} of $A$ to $B$. When $A^s=A$,\enskip $s$ is called a {\it monomial automorphism\/} of $A$. The group formed by the automorphisms is called the {\it monomial automorphism group\/} of $A$, and denoted ${\rm AUT}^*(A)$. \medbreak For example, over the field ${\rm GF}(4)$, the action of a monomial permutation $s$ of monomial degree 5 (actual degree 15) on a $2\times 3$ matrix $A$ is illustrated by the following. $$\displaylines{(1,1)^s = (3,2),\enskip\kern2pt (1,2)^s = (1,1),\enskip\kern2pt (1,3)^s = (2,5),\enskip\kern2pt (1,4)^s = (3,3),\enskip\kern2pt (1,5)^s = (2,4),\cr s = (1,6,3,5,2,4)(7,14,12,8,15,10,9,13,11),\quad\enskip A = \pmatrix{2&0&3\cr 0&3&1\cr},\quad\enskip A^s = \pmatrix{2&2&0\cr 0&3&2\cr}.\cr}$$ % % % % \section{IV.\quad PARTITION BACKTRACK COMMANDS} % The commands employing the partition backtrack method that are currently available are described below. Note material in square brackets is optional. (The brackets themselves are not to be typed.) Discussion of most of the available options will be deferred to Section~V; only those unique to a specific command will be mentioned here. \medskip Options are never required, but they may prove useful in controlling the format of the output or the procedures used in the computation. For example, certain options allow for a time versus space tradeoff. For some ``unusual'' groups (e.g., very dense imprimitive groups), it may be necessary to specify nonstandard options in order to obtain acceptable performance. \medskip The partition backtrack programs described here represent full implementations of the partition backtrack method, as set forth in (Leon, 1991), with two exceptions. {\smallskip\advance\leftskip by 0.45in\relax \item{i)}The criterion in Prop.~8(iii) is not checked. \smallskip \item{ii)}In coset--type computations, the refinement $\germR^+$ of Figure~8 is always taken as $\germR$\footnote{${}^{\dag}$}{\elevenpoint In order to allow this manual to be printed without special AMS~TeX fonts, underlined letters (e.g., $\germR$) are used here as a substitute for letters appearing in the Euler Fraktur (German) font in (Leon, 1991).} \smallskip} % % \subsection{Set stabilizers:}Set stabilizers may be computed by the {\tt setstab} command. The format is \smallskip \hskip0.45truein{\tt setstab}\quad \options\quad {\it permGroup\quad pointSet\quad stabilizerSubgroup} \smallskip This command computes the set stabilizer in the permutation group {\it permGroup\/} of the set {\it pointSet\/} and saves the result (in Cayley library format) as the permutation group {\it stabilizerSubgroup}. \medbreak At present, the set stabilizer program sometimes run slowly in doubly transitive groups, and often runs very slowly in groups that are triply transitive or ``almost'' triply transitive (e.g., ${\rm SL}_n(2)$\kern2pt), especially when both the point set and its complement are large and when the set stabilizer turns out to be small. Imprimitive groups closely related to doubly transitive groups may also cause difficulty. Modifications to alleviate this difficulty, at least in part, will be added eventually. % % \subsection{Set images:}Given a permutation group $G$ on $\{1,\ldots,n\}$ and subsets $\Lambda$ and $\Phi$ of $\{1,\ldots,n\}$, the {\tt setimage} command may be used to determine if there exists an element $g$ of $G$ such that $\Lambda^g = \Phi$. The format is \smallskip \hskip0.45truein{\tt setimage}\quad \options\quad {\it permGroup\quad pointSet1\quad pointSet2\quad groupElement} \smallskip where {\it permGroup}, {\it pointSet1}, {\it pointSet2}, and {\it groupElement} play the role of $G$, $\Lambda$, $\Phi$, and $g$, respectively. That is, the command determines whether there exists an element of {\it permGroup\/} mapping {\it pointSet1\/} to {\it pointSet2\/} and, if so, saves one such element as the permutation {\it groupElement}. Note that {\it groupElement\/} will not be created if $\Phi\notin\Lambda^G$. (Unless the {\tt -q} option is specified, a message indicating whether $\Phi\in\Lambda^G$ will be written to the standard output.) The potential difficulties with doubly and triply transitive groups mentioned for set stabilizer computations apply here also. % % \subsection{Ordered partition stabilizers:}Stabilizers of ordered partitions may be computed by the {\tt parstab} command. The format is \smallskip \hskip0.45truein{\tt parstab}\quad \options\quad {\it permGroup\quad ordPartition\quad stabilizerSubgroup} \smallskip This command computes the stabilizer in the permutation group {\it permGroup\/} of the ordered partition {\it ordPartition\/} and saves the result as the permutation group {\it stabilizerSubgroup}. The remarks about performance on doubly and triply transitive groups for set stabilizer computations apply here also. % % \subsection{Ordered partition images:}Given a permutation group $G$ on $\{1,\ldots,n\}$ and ordered partitions $\Pi$ and $\Sigma$ of $\{1,\ldots,n\}$, the {\tt parimage} command may be used to determine if there exists an element $g$ of $G$ such that $\Pi^g = \Sigma$. The format is \smallskip \hskip0.45truein{\tt parimage}\quad \options\quad {\it permGroup\quad ordPartition1\quad ordPartition2\quad groupElement} \smallskip where {\it permGroup}, {\it ordPartition1}, {\it ordPartition2}, and {\it groupElement} play the role of $G$, $\Pi$, $\Sigma$, and $g$, respectively. That is, the command determines whether there exists an element of {\it permGroup\/} mapping {\it ordPartition1\/} to {\it ordPartition2\/} and, if so, saves one such element as the permutation {\it groupElement}. The permutation {\it groupElement\/} is created only if $\Sigma\in\Pi^G$. The remarks about performance on doubly and triply transitive groups given above for set stabilizer computations apply here also. % % \subsection{Group intersections:}Given permutation groups $G$ and $H$ on $\{1,\ldots,n\}$, the {\tt inter} command may be used compute the intersection $G\cap H$. The format is \smallskip \hskip0.45truein{\tt inter}\quad \options\quad {\it permGroup1\quad permGroup2\quad interGroup} \smallskip This command computes the intersection of groups {\it permGroup1\/} and {\it permGroup2\/} and saves the result as the group {\it interGroup\/}. The potential difficulty with doubly and triply transitive groups discussed above for set stabilizer computations applies here also when both groups are doubly or triply transitive. % % \subsection{Centralizers of elements:}Given a permutation group $G$ and a permutation $x$ (not necessarily contained in $G$), the {\tt cent} command may be used compute $C_G(x)$, the centralizer in $G$ of $x$. The format is \smallskip \hskip0.45truein{\tt cent}\quad \options\quad {\it permGroup\quad permutation\quad centralizerSubgroup} \smallskip Here {\it permGroup}, {\it permutation}, and {\it centralizerSubgroup\/} play the role of $G$, $x$, and $C_G(x)$ above. That is, the command computes the centralizer in the group {\it permGroup\/} of the permutation {\it permutation\/} and saves the result as the group {\it centralizerSubgroup}. \medbreak For this command, it is permissible to specify {\it permGroup\/} as {\tt \#}{\it n}, where {\it n\/} is an integer at least 2, in which case {\it permGroup\/} is taken as the symmetric group of degree {\it n}; in this situation, the normal restrictions on base size (discussed later) do not apply to {\it permGroup}, although they do apply to {\it centralizerSubgroup}. \medbreak The {\tt cent} command accepts an option {\tt -np} which can have an effect (often small) on performance. If this option is specified, a refinement process based on the cycle structure of $x$ will not be used. The effect is to reduce memory requirements a bit. In many cases, the running time does not change significantly, but in some cases it does increase a great deal. \medbreak It should be noted that in many cases, perhaps most cases arising in practice, centralizer computations are fairly easy even for conventional algorithms, and the partition backtrack program may perform no better than, and perhaps not even as well as, programs based on conventional techniques, such as those in Cayley. (Note, however, that, unlike Cayley, the program here does not require that the permutation to be centralized lie in the group.) % % \subsection{Conjugacy of elements:}Given a permutation group $G$ and permutations $x$ and $y$ (not necessarily contained in $G$), the {\tt conj} command may be used to determine if $x$ and $y$ are conjugate under $G$ and, if so, to find $g$ in $G$ with $x^g = y$. The format is \smallskip \hskip0.45truein{\tt conj}\quad \options\quad {\it permGroup\quad permutation1\quad permutation2\quad conjugatingElement} \smallskip Here {\it permGroup}, {\it permutation1}, {\it permutation2}, and {\it conjugatingElement\/} play the role of $G$, $x$, $y$, and $g$ above. That is, the command determines if there exists an element of {\it permGroup\/} conjugating {\it permutation1\/} to {\it permutation2\/} and, if so, it saves one such element as the permutation {\it conjugatingElement}. If the two permutations are not conjugate in {\it permGroup}, then {\it conjugatingElement} is not created. In any case, a message indicating the result is written to the standard output (unless the {\tt -q} option is specified). \medbreak As with the {\tt cent} command, {\it permGroup\/} may be specified as {\tt \#}{\it n}, in which case conjugacy in the symmetric group of degree {\it n} is checked. (In this case, the program merely checks that the two permutations have the same cycle structure.) Also, the {\tt -np} option is accepted, and it works as described above for the {\tt cent} command. \medbreak As with centralizer computations, conjugacy calculations are usually easy with conventional algorithms, and the partition backtrack method may not yield an improvement. % % \subsection{Centralizers of groups:}Given a permutation groups $G$ and a second permutation group $E$ (not necessarily contained in $G$), the {\tt gcent} command may be used compute $C_G(E)$, the centralizer in $G$ of $E$. The format is \smallskip \hskip0.45truein{\tt gcent}\quad \options\quad {\it permGroup1\quad permGroup2\quad centralizerSubgroup} \smallskip Here {\it permGroup1}, {\it permGroup2}, and {\it centralizerSubgroup\/} play the role of $G$, $E$, and $C_G(E)$ above. That is, the command computes the centralizer in the group {\it permGroup1\/} of the group {\it permGroup2\/} and saves the result as the group {\it centralizerSubgroup}. \medbreak As with the element centralizer command ({\tt cent}), it is permissible to specify {\it permGroup1\/} as {\tt \#}{\it n}, indicating the symmetric group of degree {\it n}. \medbreak To an even greater extent than element centralizer calculations, group centralizer calculations tend to be easy ones for conventional algorithms; the full power of the partition method is not needed, and perhaps not even desirable. For this reason, little effort has gone into development of the {\tt gcent} command; its implementation is fairly crude, and it is included primarily for completeness. There are two options, {\tt -cg:}{\it m} and {\tt -cp:}{\it p}, which affect its performance; for some groups $G$, it may be necessary to assign them values different from the defaults (current 3 and 10, respectively). A full description of the significance of {\it m\/} and {\it p\/} will not be given here; however, we note that higher values (especially for {\it m}) increase memory requirements, and often increase execution time as well, but may be needed if the group $E$ fails to have a small generating set (e.g., if E is a large elementary abelian group). \medbreak By specifying {\it permGroup1\/} and {\it permGroup2\/} as the same group, the {\tt gcent} command may be used to compute the center of a group; note, however, that it represents an exceptionally inefficient algorithm for this purpose. % % % \subsection{Automorphism groups of designs:}The {\tt desauto} command may be used to compute the automorphism group of a design. Here a {\it design\/} means any set of points (numbered $1,\ldots,n$ for some $n$) and any collection of subsets of the point set. The format of the design automorphism group command is: \smallskip \hskip0.45truein{\tt desauto}\quad \options\quad {\it design\quad autoGroup} \smallskip and the command sets {\it autoGroup} to the automorphism group of the design {\it design\/}. \medbreak The interpretation of the group {\it autoGroup\/} that is created depends on whether the {\tt -pb} (points and blocks) option is specified. Let $p$ and $b$ denote the number of points and blocks, respectively, of the design. \smallskip {\advance\leftskip by0.70truein \noindent\llap{i)\enspace}If the option {\tt -pb} is specified, then {\it autoGroup} is constructed as a group of degree $p+b$, in which the action on $1,\ldots,p$ is the action on points and in which the action on $p+1,\ldots,p+b$ is the action on blocks, the $j$\kern1ptth block being represented by $p+j$. \smallskip\vskip2pt \noindent\llap{ii)\enspace}If the {\tt -pb} option is omitted, then {\it autoGroup} is constructed as a group of degree $p$, representing the action on points only. In this case, if there are repeated blocks, the group acting on points only has lower order than the group acting on points and blocks). When this situation arises, the group saved as {\it autoGroup} represents the group on points only, but the information written to the standard output during the computation refers to the group acting on points and blocks. (This occurs because the computation is carried out on points and blocks; restriction to points is performed only at the end; note also, for this reason, restriction to points only does not save time or memory.)\vskip0pt} \medbreak % % % \subsection{Isomorphism of designs:}The {\tt desiso} command may be used to check isomorphism of designs. The format is \smallskip \hskip0.45truein{\tt desiso}\quad \options\quad {\it design1\quad design2\quad isoPerm} \smallskip and the command sets {\it isoPerm} to an isomorphism from design {\it design1\/} to design {\it design2}, provided the designs are isomorphic. (If not, the permutation {\it isoPerm\/} is not created. In any case, a message indicating the result is written to the standard output, unless the {\tt -q} option is specified.) \medbreak As in the case of the {\tt desauto} command, described above, the presence or absence of the {\tt -pb} option determines whether {\it isoPerm\/} is constructed as a permutation on points and blocks, or on points only (the default). When the action on blocks is included, the $j$\kern1ptth block is represented by $p+j$. % % % % \subsection{Automorphism groups and monomial groups of matrices:}The {\tt matauto} command may be used to compute the automorphism group of a matrix. If the matrix elements are taken from a small finite field ${\rm GF}(q)$, then optionally the monomial automorphism group may be computed. (See Section~III for definitions.) The command format is: \smallskip \hskip0.45truein{\tt matauto}\quad \options\quad {\it matrix\quad autoGroup} \smallskip and the command sets {\it autoGroup} to the automorphism group of the matrix {\it matrix\/} or, if the {\tt -mm} option is specified, to the monomial automorphism group of {\it matrix\/}. \medbreak If the {\tt -tr} option is specified, the matrix is transposed after it is read in, and all computations apply to the transposed matrix. \medbreak Let $r$ and $c$ denote the number of rows and columns, respectively, of the matrix $A = (a_{ij})$ whose group is to be constructed. Normally the automorphism group has degree $r+c$ and the monomial automorphism group has degree $(q-1)(r+c)$; the interpretation of these groups is described in Section~III. However, if the {\tt -ro} (rows only) option is specified, the degree will be $r$ or $(q-1)r$, and the group will represent the action on rows only. Note that restriction to rows only may reduce the order of the group, just as in the case of designs restriction to points only may reduce the order of the group. When this occurs, the remarks above for design groups apply here also. \medbreak At present, the program for computing monomial groups of matrices is a very crude one. As a result, although it works reasonably for many matrices of fairly large size, it can fail to run in acceptable time even for very small matrices, e.g., matrices of all 0s. Sometimes use of the {\tt -tr} option can get around this difficulty (which will be fixed eventually). % % % \subsection{Isomorphism and monomial isomorphism of matrices:}The {\tt matiso} command may be used to check if two matrices are isomorphic or, if the matrix elements are from a finite field ${\rm GF}(q)$, monomially isomorphic. (See Section~III for definitions.) The command format is \smallskip \hskip0.45truein{\tt matiso}\quad \options\quad {\it matrix1\quad matrix2\quad isoPerm} \smallskip In the absence of the {\tt -mm} option, the command sets {\it isoPerm} to an isomorphism from matrix {\it matrix1\/} to matrix {\it matrix2}, provided the matrices are isomorphic. (If not, the permutation {\it isoPerm\/} is not created). If the {\tt -mm} option is specified, the command sets {\it isoPerm} to a monomial isomorphism from matrix {\it matrix1\/} to matrix {\it matrix2}, provided the matrices are monomially isomorphic. (In this case, the matrix entries should be field elements.) The effect of the {\tt -ro} option is as described above for matrix automorphism group calculations. \medbreak Currently the monomial isomorphism program suffers from the same limitations as the monomial automorphism group program, as mentioned above. \medbreak % % \subsection{Automorphism groups of linear codes:}The {\tt codeauto} command may be used to compute the automorphism group of a linear code over a small field ${\rm GF}(q)$. However, before the automorphism group of a code $C$ may be computed, it is necessary to have a set $V$ of vectors (not necessarily codewords) such that the following conditions hold. In these conditions, $V^*$ denotes the set of all nonzero scalar multiples of vectors in $V$. \smallbreak {\advance\leftskip by1em\parindent=1em\relax \item{i)} No vector in $V$ is a scalar multiple of any other vector in $V$. (In particular, $\vert V^*\vert = (q-1)\vert V\vert$.) \smallbreak \item{ii)} $V$ is ``reasonably small''. (With a very large memory, ``reasonably small'' might mean 100,000 or more.) \smallbreak \item{iii)} $V^*$ is invariant under ${\rm AUT}(C)$\enskip (the automorphism group of $C$), \smallbreak \item{iv)} $\bigl\vert{\rm AUT}(V^*):{\rm AUT}(C)\bigr\vert$ is very small. (The running time rises very rapidly as a function of this index. Note that, if $V$ spans $C$, the index is 1.) \smallbreak} Often the set of minimal weight vectors of the code (scalar multiples removed if $q > 2$) make a suitable choice for $V$; minimum weight vectors of the dual code may also be used. This choice for $V$ certainly satisfies~(i) and~(iii), may well satisfy~(ii), and in many cases satisfies~(iv). The author has available programs for computing the set of minimum weight vectors (or vectors of any specified weight.) \medbreak The format of the code automorphism group command is \smallskip \hskip0.45truein{\tt codeauto}\quad \options\quad {\it code\quad invarVectors\quad autoGroup} \smallskip where {\it invarVectors\/} is the set $V$ of vectors described above (in the format of a matrix, whose rows are the vectors). The command sets {\it autoGroup} to the automorphism group of the code {\it code}. \medbreak The {\tt -cv} (coordinates and vectors) option for codes has essentially the same effect as the {\tt -pb} option for designs. With this option, the automorphism group is saved in {\it autoGroup\/} as a permutation group of degree $\bigl(q-1)(n+\vert V\vert\bigr)$\enskip ($n =$ length of code), representing the action on (monomial) coordinates and invariant vectors; without the {\tt -cv} option, it is saved as a permutation group acting of degree $(q-1)n$, representing the action on (monomial) coordinates only. (However, restriction to coordinates only can never lead to a reduction in the group order, as occurred with restriction to points or rows for designs or matrices.) For an explanation of the format of monomial permutations, see Section~III. \medbreak At present, the program for computing groups of non--binary codes is a very crude one; sometimes it can fail to run in reasonable time even on small codes. Eventually this program will be improved. \medbreak % % % \subsection{Isomorphism of linear codes:}The {\tt codeiso} command may be used to check isomorphism of linear codes. However, before isomorphism of two codes $C_1$ and $C_2$ may be checked, it is necessary to have a sets $V_1$ and $V_2$ of vectors (not necessarily codewords of the two codes) such that $V_1$ and $V_2$ satisfy conditions~(i), (ii), (iii), and~(iv) above relative to $C_1$ and $C_2$, respectively, and in addition such that any isomorphism of $C_1$ to $C_2$ must map $V_1^*$ to $V_2^*$. (As with code automorphism groups, $V_1^*$ and $V_2^*$ denote the sets of nonzero scalar multiples of vectors in $V_1$ and $V_2$, respectively. Often suitable choices for $V_1$ and $V_2$ are the minimal weight vectors of $C_1$ and $C_2$, respectively (scalar multiples removed.); minimal weight vectors of the duals of the two codes also could be used. \medbreak The format of the code isomorphism command is \smallskip \hskip0.45truein{\tt codeiso}\quad \options\quad {\it code1\quad code2\quad invarVectors1\quad invarVectors2\quad isoPerm} \smallskip where {\it invarVectors1\/} and {\it invarVectors2\/} are the sets $V_1$ and $V_2$, respectively, of vectors described above (each in the format of a matrix, whose rows are the vectors). The command sets {\it isoPerm} to an isomorphism from {\it code1\/} to {\it code2}, if the codes are isomorphic; if not, {\it isoPerm\/} is not created. \medbreak As in the case of the {\tt codeauto} command, described above, the presence or absence of the {\tt -cv} option determines whether {\it isoPerm\/} is a permutation on (monomial) coordinates and invariant vectors, or on (monomial) coordinates only. The interpretation of monomial permutations is described in Section~III.. % % \vskip10pt \bigbigbreak Note that a number of the commands above are implemented as shell files (under Unix), batch files (under MS~DOS), or exec files (under CMS). The commands that are implemented in this manner, and the contents of the Unix shell files, are as follows. (The list includes a few commands to be discussed in Section~IX.) \bigskip \long\def\shellfile#1#2{\noindent\hskip0.45truein\hbox to1.0truein{#1\hfil}\relax \hbox to4.0truein{#2\hfil}\vskip2.0pt}\relax \vbox{{\it \shellfile{command}{contents of shell file} \vskip6pt \elevenpoint\tt \shellfile{setimage}{setstab -image \$*} \shellfile{parstab} {setstab -partn \$*} \shellfile{parimage}{setstab -image -partn \$*} \shellfile{conj} {cent -conj \$*} \shellfile{gcent} {cent -group \$*} \shellfile{desiso} {desauto -iso \$*} \shellfile{matauto} {desauto -matrix \$*} \shellfile{matiso} {desauto -iso -matrix \$*} \shellfile{codeauto}{desauto -code \$*} \shellfile{codeiso} {desauto -iso -code \$*} \shellfile{cjper} {cjrndper -perm \$*} \shellfile{ncl} {commut -ncl \$*} \shellfile{compper} {compgrp -perm:\$1 \$2 \$3} \shellfile{compset} {compgrp -set:\$1 \$2 \$3} \shellfile{chbase} {orblist -chbase \$*} \shellfile{ptstab} {orblist -ptstab \$*} \vskip0pt}} % % % \section{V.\quad OPTIONS} % A partial description of the options that are currently available follows. Most of the options are available with all of the commands described in Section~IV. A few options apply only to subgroup computations, or only to coset--representative computations; these restrictions are noted below. Options applicable only to a single command are discussed with that command in Section~IV. \medbreak In general, options may be specified in any order. However, if conflicting options are specified, the one specified last is the one that is used. (In some cases, conflicting options are treated as an error. Also, the {\tt -l} and {\tt -v} options, discussed later, are an exception to the general rule that options may be specified in any order; these options, if present, must come first, and the remainder of the command line is ignored.) \medbreak Entering any command with no options or arguments causes a brief summary of the command format to be displayed. \bigbreak \subsection{Options affecting file handling:} \nobreak\medskip\nobreak % \defoption{-a}{Normally, if a file name is specified for an object to be constructed, and if a file by that name already exists, the programs overwrite the existing file. With the {\tt -a} option, they append to the existing file, rather than overwriting it.} \medbreak \defoption{-p:{\it path}}{Here {\it path\/} is a string. The string {\it path\/} is concatenated to the file name of every input file. This option can be useful if all the input files are in another directory. For example, \smallskip \hskip0.15truein{\tt setstab\quad\kern-1pt ../groups/psp62::psp62\quad\kern-1pt ../groups/lambda::lambda\quad\kern-2pt S} \smallskip may be written more compactly as \smallskip \hskip0.15truein{\tt setstab\quad -p:../groups/\quad psp62\quad lambda\quad S} \smallskip (Note the final slash following {\tt groups} is required.). The {\tt -p} option has no effect on output files.} % \bigbreak \subsection{Options affecting output format:} \nobreak\medskip\nobreak % \medbreak \defoption{-i}{This option applies to commands that construct and write out either a permutation or a permutation group. It causes permutations to be written in image format, rather than in cycle format (the default).} % \medbreak \defoption{-n:{\it name}}{Here {\it name\/} is a string. The object created by the command will be named {\it name}. By default, the name assigned to the object will be the name of the Cayley library containing its definition. Note this option affects only the name of the object, not that of the file or the Cayley library.} % \medbreak \defoption{-q}{Suppresses informative messages on the state of the computation, normally written to the standard output during the computation.} % \medbreak \defoption{-s}{Causes statistics on the pruning of the backtrack search tree to be written out to the standard output. These statistics relate to the backtrack search tree defined in the author's paper (Leon, 1991), and are likely to be meaningful only to users familiar with that paper.} % \medbreak \defoption{-w:{\it n}}{Here {\it n\/} should be a nonnegative integer. This option applies only to coset representative computations. If the degree is less than or equal to {\it n}, and if a coset representative is found, it will be included in the informative messages written to the standard output. (In any case, the coset representative will be written to a file in Cayley library format.) The default value of {\it n} is currently 300.} \bigbreak % \subsection{Options affecting performance of the algorithm:} \nobreak\medskip\nobreak \defoption{-b:{\it k}}{Here {\it k\/} is a nonnegative integer which determines the extent to which base changes are performed in an attempt to improve pruning of the backtrack search tree using tests on double--coset minimality (Leon, 1991, Prop~8). When {\it k}~=~0, base change is never performed (except during $\bfgermR$--base construction, when it is used for a different purpose). As {\it k\/} increases, the number of base change operations performed increases; however, increasing {\it k\/} beyond the base size produces no further increase in the number of base change operations. Designating {\it k}~=~0 reduces memory requirements and often produces the best running times as well. On the other hand, some high--density groups seem to require a higher value of {\it k\/} in order to obtain acceptable performance. By default, the program chooses a value of {\it k\/} based on the density and degree of transitivity of the group; quite often, this default value is 0. \smallskip {\it Note:}\enskip For coset representative computations, this option has no effect unless known subgroups of the two associated groups are specified; see discussion of the {\tt -kL} and {\tt -kR} options below.} % \medbreak \defoption{-g:$m$}{Here $m$ should be a nonnegative integer. This is one of several parameters providing a time vs.\ space tradeoff. Small values of $m$, say 10 or less, minimize memory requirements, while large values of $m$, say 100 or greater, reduce the running time moderately for most difficult groups. Use of a high value is recommended for multiply transitive groups. \smallskip After $\bfgermR$--base construction, the program attempts to reduce the height of the Schreier trees for the containing group by adding new strong generators. However, it will never add generators for this purpose if doing so would cause the total number of strong generators to exceed $m$. (It will also stop adding generators if the height falls below certain goals currently fixed in the program.)} % \medbreak \defoption{-k:$H$}{Here $H$ specifies a permutation group (in the format {\it cayleyLibraryName\/} or {\it fileName}\kern1pt::\kern1pt{\it cayleyLibraryName}). This option applies only to subgroup calculations. The group $H$ must be a known subgroup of the group being computed. In principle, this option allows one to take advantage of any subgroup of the group being computed that happens to be known in advance. In practice, however, it seldom appears to speed up the computation by very much, and it increases memory requirements.} % \medbreak \newdimen\optionWidth \optionWidth=\hsize \advance\optionWidth by-1em\relax \advance\optionWidth by-\optionIndent {\advance\leftskip by1em\noindent\vtop{\hsize=\optionIndent\parindent=0pt\tt\noindent -kL:$J$\vskip1pt\noindent -kR:$M$}\relax \vtop{\hsize=\optionWidth\parindent=0pt Here $J$ and $M$ must specify permutation groups (each in the format {\it cayleyLibraryName\/} or {\it fileName}\kern1pt::\kern1pt{\it cayleyLibraryName}). These options apply only to coset representative calculations. Either or both may be specified. Associated with every coset representative computation, there are ``left'' and ``right'' groups, as explained in Section~2 of (Leon, 1991). The groups $J$ and $M$ must be known subgroups of these left and right groups, respectively. Specifying $J$ and/or $M$, if known, increases memory requirements, but in some cases it may improve the running time. For some very dense groups, one or both of these options may be needed in order to allow the computation to finish in an acceptable amount of time.}\vskip0pt} % \medbreak \defoption{-mb:$k$}{Here $k$ should be a nonnegative integer. This integer represents an upper bound on the size of the base for a permutation group. The default value of $k$ is 62, which is more than adequate for many groups. For further discussion of the {\tt -mb} option, see Section~VII.} % \medbreak \defoption{-mw:$\ell$}{Here $\ell$ should be a nonnegative integer whose value is at least several hundred. This integer represents an upper bound on the length of any word in the generators of any permutation group. For further discussion, see Section~VII.} % \medbreak \defoption{-r:$p$}{Here $p$ should be a nonnegative integer, normally smaller than the integer $m$ specified for the {\tt -g} option described above. This is another option providing for a time versus space tradeoff. Small values of $p$, say less than 10, minimize memory requirements, while larger values, say 50 or higher, {\it may\/} reducing the running time, although usually not a great deal. \smallskip Whenever the number of strong generators for the containing group exceeds $p$, redundant strong generators are eliminated, using a procedure originally due to Sims (1971).} \bigbreak \subsection{Special options:} \nobreak\medskip\nobreak \defoption{-l}{This option, if present, must be the first option on the command line, and the remainder of the command line is ignored. (It may be omitted.) The {\tt -l} option merely prints out limits on the default maximum base size, default maximum word length, degree, and other quantities with which this version of the program has been compiled. (See Section~VII for discussion of these limits.)} \medbreak \defoption{-v}{This option, if present, must be the first option on the command line, and the remainder of the command line is ignored. (It may be omitted.) The {\tt -v} option is intended to be used once following compilation of the program. It attempts to check that all the source files for the program were compiled with the same options and size limits. (See Section~VII for discussion of size limits.)} % % % \section{VI.\quad OUTPUT AND RETURN CODES} % All programs for subgroup computations return a value of 0 if the computation is completed successfully and a nonzero value (currently 15) if the computation terminates due to an error (input file not found, incorrect format in input file, memory exhausted, size limit in program exceeded, etc.) All programs for coset representative computations return a value of 0 if the computation is completed successfully and a coset representative exists, 1 if it is completed but a coset representative does {\it not\/} exist, and a value different from 0 and 1 (currently 15) if the computation terminates due to an error. \medbreak % Unless the {\tt -q} option is specified, all of the programs write information about the progress of the computation to the standard output. Some of this information, most notably that relating to the $\bfgermR$--base and the backtrack search tree (the latter given only if {\tt -s} is specified) will probably be meaningful primarily to users familiar with the author's paper (Leon, 1991). Information of more general interest includes: \smallskip {\advance\leftskip by0.45truein\noindent \item{i)}The order of the containing group (unless it is the symmetric group). Note that this order is determined by computing a base and strong generating set for the containing group when it is read in, unless they are supplied in the input file. \smallskip \item{ii)}The new (changed) base and strong generating set for the containing group computed during $\bfgermR$--base construction, and the corresponding basic orbit lengths. In the notation of (Leon, 1991), this is the base $(\alpha_1,\ldots,\alpha_k)$ associated with the $\bfgermR$--base. \smallskip \item{iii)}A base for the subgroup to be computed (subgroup computations) or for the subgroup associated with the right coset whose representative is to be computed (coset representative computations). This is the subgroup base associated with the $\bfgermR$--base; in the notation of (Leon, 1991), it is $(\hat{\alpha}_1,\ldots,\hat{\alpha}_{\ell})$. Note that this base is a subsequence of the base for the containing group in~(ii) above. \smallskip \item{iv)}The basic cell sizes corresponding to the subgroup base in~(iii) above (for definitions, see (Leon, 1991)). Note that each basic cell size provides an upper bound for the corresponding basic orbit length of the subgroup to be computed (subgroup--type computations). (Usually the bound is not sharp). \smallskip \item{v)}The number of strong generators for the containing group and the mean node depths in the Schreier trees for the basic orbits of the containing group. Depending on the {\tt -g} and {\tt -r} options, following $\bfgermR$--base construction, additional strong generators may be added in an attempt to reduce the height of the Schreier trees. Figures are provided both before and after additional strong generators are added. \smallskip \item{vi)}[subgroup computations only]\enskip A message for each strong generator that is found for the subgroup. The message gives the level and the basic orbit lengths for the subgroup constructed thus far. (A generator will be said to be at level $i$ if it fixes the first $i-1$ base points but moves the $i$\kern1ptth.) \smallskip \item{vii)}[subgroup computations only]\enskip The order of the subgroup that was computed. \smallskip \item{viii)}[subgroup computations only]\enskip The base (same as in~(iii) above) and basic orbit lengths for the subgroup that was computed. \smallskip \item{ix)}[coset representative computations only]\enskip A message indicating whether a coset representative exists. \smallskip \item{x)}[coset representative computations only]\enskip If a coset representative exists and the degree is sufficiently low (depending on the {\tt -w} option), the coset representative that was found. \smallskip \item{xi)}The time required for the computation. Note that the time to read in the containing group from a file, construct the initial base and strong generating set for the containing group (if not present in the input file), and to write out the subgroup or coset representative to a file is not included in this time. All computations relating to calculation of the subgroup or coset representative (including base changes in the containing group) are included. \medbreak} % Note that, in subgroup computations, the actual strong generators for the subgroup are not written to standard output, and in coset computations, the actual coset representative found may not (depending on the degree and {\tt -w} option) be written to the standard output. However, both may be found (in Cayley library format) in the output file that is created. \medbreak For design, matrix, or code isomorphism computations, the isomorphism that is constructed is written to the standard output (assuming that the degree is sufficiently low) in a more easily readable (but not Cayley compatible) format than that described in Sections~II and~III. For designs with the {\tt -pb} option, the action on points and blocks is given separately. For matrices, the action on rows and columns is given separately. For monomial isomorphism of matrices for non--binary codes, the monomial isomorphism is written in the following format: $$\bigl(\kern1pt[\lambda_1]i_1,[\lambda_2]i_2,\ldots,[\lambda_k]i_k\kern1pt\bigr)$$ This denotes the monomial permutation mapping 1 to $\lambda_1i_1$, 2 to $\lambda_2i_2$, etc. For example, to apply this monomial permutation to the rows of an $r$ by $c$ matrix, row $j$ is multiplied by $\lambda_j$ and the result is moved to row position $i_j$. % \medbreak % % % \section{VII.\quad SIZE LIMITS} % There are a few fixed limits on the sizes of objects that the programs can handle. These limits can be changed only by recompiling the programs. The order of any group may have at most 30 distinct prime divisors. The name of any file may have at most 60 characters (including path information supplied with the {\tt -p} option). The name of any object may have at most 16 characters. Most importantly, if the program is compiled using 16--bit integers, the maximum degree of any permutation group is limited to slightly less than $2^{16}$ (about 65000). If it is compiled using 32--bit integers, there is, for practical purposes, no fixed limit. Note, however, that use of 16--bit integers reduces memory requirements substantially, and it is recommended unless groups of degree greater than 65000 (approx) are to be used. Only machines having at least 20 to 25 megabytes of memory are likely to be able to handle groups of degree high enough to require 32--bit integers. Currently both 16--bit and 32--bit compiled versions of the programs are available. \medbreak Although there is no fixed limit on the base size for a permutation group, a limit must be established at the time that the program is initiated, and this limit remains fixed during that run. This limit may be set at $k$ by means of the {\tt -mb:$k$} option, or it may be allowed to default to 62. Note that large values of $k$ increase running times and memory requirements slightly even if the actual base size turns out to be much less than $k$. \medbreak For the most part, the amount of memory (real and virtual) available determines the sizes of objects that can be handled by the programs. Memory requirements depend heavily on the degree of the group, and to a somewhat lesser extent on the base size. The programs can use virtual memory to some extent; however, if virtual memory used exceeds real memory by a factor of more than 1.6 to 1.8, excessive paging is likely to occur. The following steps may be taken to reduce memory requirements; the steps are listed in order of decreasing benefit. \medskip{\advance\leftskip by0.45in\noindent \item{i)}If the degree of the group is less than 65000 (approx), use a 16--bit version of the program rather than a 32--bit version. The 16--bit version is likely to run about as fast as the 32--bit version, and it requires a great deal less memory. \smallskip \item{ii)}Specify options of {\tt -g:1} and {\tt -r:1}. These options are likely to increase the execution time substantially, but they often save a good deal of memory. As a compromise, values greater than 1 but less than the defaults may be specified, e.g., {\tt -g:20} and {\tt -r:15} \smallskip \item{iii)}Specify the option {\tt -b:0} if it is not already the default. In the majority of cases, this option will not increase execution time, and it reduces memory requirements considerably. However, in a great many cases, {\tt -b:0} will already be the default. (The value for this and other options is displayed on the standard output when the program is is run.) \smallskip \item{iv)}For (element) centralizer and conjugacy calculations, specify the {\tt -np} option. This saves a modest amount of memory. The effect on execution time is hard to predict; in some cases, it may lead to a major increase. For group centralizer calculations, options of {\tt -cg:2} and {\tt -cp:$i$}, where $i$ is 3 to 5, may be tried, although on some groups they may raise the running time to unacceptable levels. \smallskip \item{v)}Specify the option {\tt -mb:$k$} for a value of $k$ less than the default of 62. The {\tt -mb:$k$} options sets a limit of $k$ on the base size for the group; often a value considerably less than 62 (e.g., 15 or 20) will be adequate. However, the amount of memory saved is relatively small. \vskip0pt} \medbreak In the author's experience, the programs can often handle groups of degree as high as 2000$m$ to 3000$m$, where $m$ is the number of megabytes of {\it real\/} memory available. However, for groups lacking a relatively small base, the limit on the degree is much lower. Also, this limit applies only to memory requirements; depending on the type of computation and the specific groups, it may or may not be possible to perform computations in groups this large in an acceptable amount of time. % % \section{VIII.\quad EXAMPLES} % The author has prepared a number of sample objects that may be used to test the programs. In the Unix distribution, these objects appear in various subdirectories of the directory {\tt partn/examples}. % \medbreak The subdirectories {\tt psp62}, {\tt psp82}, {\tt psu72}, {\tt omg84}, {\tt fi23}, {\tt ahs2}, {\tt rubik4}, and {\tt syl128} of directory {\tt partn/examples} contain examples for computation in the groups ${\rm PSp}_6(2)$ of degree 63, ${\rm PSp}_8(2)$ of degree 255, ${\rm PSU}_7(2)$ of degree 2709, $\Omega^+_8(4)$ of degree 5525, ${\rm Fi}_{23}$ of degree 31671, ${\rm AUT(HS)}\times {\rm AUT(HS)}$ of degree 200, the group of a $4\times 4$ Rubik's cube (degree 96), and a Sylow 2--subgroup of the symmetric group {\it Sym\/}(128)\enskip of degree 128, respectively. Note that, for the last two groups, any base will be large, and the {\tt -mb} option (e.g., {\tt -mb:75}) will need to be specified. Each of the directories contains files as follows, where {\it grp\/} is to be replaced by the actual name of the directory. \medbreak {\advance\leftskip by 1.0truein\relax \noindent\llap{\hbox to0.75in{{\it grp}\hfil}}The permutation group mentioned above. \medbreak \noindent\llap{\hbox to0.75in{{\it grp\/}{\tt\kern1ptx}\hfil}}A group permutation isomorphic to the group {\it grp\/} and having a small but nontrivial intersection with {\it grp}. The intersection of {\it grp\/} and {\it grp\/}{\tt x} may be computed by the command \smallskip \hskip0.4in{\tt inter\quad {\it grp\/}\quad {\it grp\/}x\quad int} \smallskip which saves the intersection as the group {\tt int}. The file {\it grp\/}{\tt x} contains a comment giving the order of the intersection. \medbreak \noindent\llap{\hbox to0.75in{\tt set1\hfil}}A random point set of size half the degree of {\it grp}. Except in the case of {\tt rubik4} and {\tt syl128}, the set stabilizer of {\tt set1} in the group {\it grp\/} turns out to be trivial. This set stabilizer may be computed by the command \smallskip \hskip0.4in{\tt setstab\quad {\it grp\/}\quad set1\quad stab1} \smallskip which saves the set stabilizer as the group {\tt stab1}. \medbreak \noindent\llap{\hbox to0.75in{\tt set2\hfil}}A point set of size approximately half the degree whose set stabilizer in {\it grp\/} is a dihedral group of low order, except in the case of {\tt rubik4} and {\tt syl128}. This set stabilizer may be computed by the command \smallskip \hskip0.4in{\tt setstab\quad {\it grp\/}\quad set2\quad stab2} \smallskip which saves the set stabilizer as the group {\tt stab2}. The file {\tt set2} contains a comment indicating the order of the stabilizer. \medbreak \noindent\llap{\hbox to0.75in{\tt set3\hfil}}A point set of size roughly half the degree (in most cases ) whose set stabilizer in {\it grp\/} is a group of high order. This set stabilizer may be computed by the command \smallskip \hskip0.4in{\tt setstab\quad {\it grp\/}\quad set3\quad stab3} \smallskip which saves the set stabilizer as the group {\tt stab3}. The file {\tt set3} contains a comment indicating the order of the stabilizer. \medbreak \noindent\llap{\hbox to0.75in{\tt set1x\hfil}}A point set obtained by applying a randomly--chosen element of the group {\it grp\/} to {\tt set1}. The command \smallskip \hskip0.4in{\tt setimage\quad {\it grp\/}\quad set1\quad set1x\quad g} \smallskip may be used to find an element {\tt g} of the group {\it grp\/} mapping {\tt set1} to {\tt set1x}. \medbreak \noindent\llap{\hbox to0.75in{\tt set1y\hfil}}A point set having the same cardinality as {\tt set1} but not equal to the image of {\tt set1} under any element of {\it grp\/}. The command \smallskip \hskip0.4in{\tt setimage\quad {\it grp\/}\quad set1\quad set1y\quad h} \smallskip may be used to determine that {\tt set1y} is not in fact an image of {\tt set1} under the group. (The permutation $h$ will {\it not\/} be created. \medbreak \noindent\llap{\hbox to0.75in{\tt par1\hfil}}A partition of the set $\{1,\ldots,n\}$, where $n$ is the degree of group {\it grp}. (The file contains a comment indicating the number of cells and cell sizes.) The stabilizer in {\it grp\/} of {\tt par1}, treated as an ordered partition, may be computed by the command \smallskip \hskip0.4in{\tt parstab\quad {\it grp\/}\quad par1\quad pstab1} \smallskip which saves the ordered partition stabilizer as the group {\tt pstab1}. The file {\tt par1} contains a comment giving the order of the stabilizer. \medbreak \noindent\llap{\hbox to0.75in{\tt par1x\hfil}}A partition obtained by applying a randomly--chosen element of the group {\it grp\/} to {\tt par1}. The command \smallskip \hskip0.4in{\tt parimage\quad {\it grp\/}\quad par1\quad par1x\quad i} \smallskip may be used to find an element {\tt i} of the group {\it grp\/} mapping {\tt par1} to {\tt par1x}. \medbreak \noindent\llap{\hbox to0.75in{\tt par1y\hfil}}A partition in which the sizes of the cells match those in {\tt par1}, but which is not the image of {\tt par1} under any element of the group {\it grp\/}. The command \smallskip \hskip0.4in{\tt parimage\quad {\it grp\/}\quad par1\quad par1y\quad j} \smallskip may be used to demonstrate that {\tt par1y} is not an image of {\tt par1} under any group element. \medbreak \noindent\llap{\hbox to0.75in{\tt elt1\hfil}}An element of the group {\it grp\/} having a fairly large centralizer in {\it grp\/}. This centralizer may be computed by the command \smallskip \hskip0.4in{\tt cent\quad {\it grp\/}\quad elt1\quad cent1} \smallskip which saves the centralizer as the group {\tt cent1}. The file {\tt elt1} contains a comment stating the order of the centralizer. \medbreak \noindent\llap{\hbox to0.75in{\tt elt1x\hfil}}An element conjugate under the group {\it grp\/} to {\tt elt1}. An element of {\it grp\/} conjugating {\tt elt1} to {\tt elt1x} may be found by the command \smallskip \hskip0.4in{\tt conj\quad {\it grp\/}\quad elt1\quad elt1x\quad c1} \smallskip which sets {\tt c1} to such a conjugating element. \medbreak \noindent\llap{\hbox to0.75in{\tt elt2\hfil}}An permutation {\it not\/} in the group {\it grp\/} having a nontrivial centralizer in {\it grp}. This centralizer may be computed by the command \smallskip \hskip0.4in{\tt cent\quad {\it grp\/}\quad elt2\quad cent2} \smallskip which saves the centralizer as the group {\tt cent2}. The file {\tt cent2} contains a comment indicating the order of the centralizer. \medbreak \noindent\llap{\hbox to0.75in{\tt elt2x\hfil}}A permutation (not in {\it grp\/}) conjugate under {\it grp\/} to {\tt elt2}. An element of {\it grp\/} conjugating {\tt elt2} to {\tt elt2x} may be found by the command \smallskip \hskip0.4in{\tt conj\quad {\it grp\/}\quad elt2\quad elt2x\quad c2} \smallskip which sets {\tt c2} to such an element. \medbreak \noindent\llap{\hbox to0.75in{\tt elt2y\hfil}}A permutation not in {\it grp\/} having the same cycle structure as {\tt elt2} but not conjugate under {\it grp\/} to {\tt elt2}. Non--conjugacy may be demonstrated by the command \smallskip \hskip0.4in{\tt conj\quad {\it grp\/}\quad elt2\quad elt2y\quad d} \smallskip which does {\it not} create a permutation {\tt d}. \vskip0pt} \medbreak Note that, in the case of the group {\tt fi23}, about 16 megabytes of real memory may be needed to perform the calculations above. \bigbreak The subdirectories {\tt q17} and {\tt q32} contain designs, (0,1)--matrices, and codes based on the quadratic residue code $Q_{17}$ of length 17 and on the extended quadratic residue code $Q_{32}$ of length 32, respectively. The contents of these directories are as follows, where $i$ denotes either 17 or 32. \medbreak {\advance\leftskip by 1.0truein\relax \noindent\llap{\hbox to0.75in{\tt q\kern1pt$i$\hfil}}The quadratic or extended quadratic residue code. \medbreak \noindent\llap{\hbox to0.75in{\tt v\kern1pt$i$\hfil}}The matrix whose rows are the weight 5 ($i = 17$) or weight 8 ($i = 32$) codewords of the code {\tt q}\kern1pt$i$. The automorphism group of the code {\tt q}\kern1pt$i$ may be computed by the command \smallskip \hskip0.4in{\tt codeauto\quad q\kern1pt$i$\quad v\kern1pt$i$\quad A} \smallskip or \smallskip \hskip0.4in{\tt codeauto\quad -cv\quad q\kern1pt$i$\quad v\kern1pt$i$\quad A} \smallskip which saves the automorphism group as the group {\tt A}, either as a group of degree $i$ or as a group of degree $i+k$, where $k$ is the number of codewords in the set {\tt v}\kern1pt$i$. \medbreak \noindent\llap{\hbox to0.75in{\tt q\kern1pt$i$\kern1ptx\hfil}}Another quadratic residue code obtained from {\tt q}\kern1pt$i$ by applying a random permutation to the coordinates.. \medbreak \noindent\llap{\hbox to0.75in{\tt v\kern1pt$i$\kern1ptx\hfil}}The matrix whose rows are the weight 5 ($i = 17$) or weight 8 ($i = 32$) codewords of the code {\tt q}\kern1pt$i$\kern1pt{\tt x}. An isomorphism from {\tt q}\kern1pt$i$ to {\tt q\kern1pt$i$\kern1ptx} may be found by the command \smallskip \hskip0.4in{\tt codeiso\quad q\kern1pt$i$\quad q\kern1pt$i$\kern1ptx\quad v\kern1pt$i$\quad v\kern1pt$i$\kern1ptx\quad s} \smallskip which saves the isomorphism found as the permutation {\tt s}. \medbreak \noindent\llap{\hbox to0.75in{\tt d\kern1pt$i$\hfil}}The design on $\{1,\ldots,i\}$ whose blocks correspond to the codewords of weight 5 ($i = 17$) or weight 8 ($i = 32$) in {\tt q}\kern1pt$i$. The automorphism group of this design (which must contain the group of the corresponding code, and which in fact equals it) may be computed by the command \smallskip \hskip0.4in{\tt desauto\quad d\kern1pt$i$\quad B} \smallskip or \smallskip \hskip0.4in{\tt desauto\quad -pb\quad d\kern1pt$i$\quad B} \smallskip which saves the automorphism group as the group {\tt B}, either as a group on points only, or as a group on points and blocks. Note that the incidence matrix of the design {\tt d}\kern1pt$i$ is the transpose of the matrix {\tt v}\kern1pt$i$, so the same automorphism group could be computed by the command \smallskip \hskip0.4in{\tt matauto\quad -tr\quad v\kern1pt$i$\quad A} \medbreak \noindent\llap{\hbox to0.75in{\tt d\kern1pt$i$\kern1ptx\hfil}}A design obtained from {\tt d}\kern1pt$i$ by applying a random permutation to the points. (The order of the blocks is also permuted randomly.) An isomorphism from {\tt d}\kern1pt$i$ to {\tt d\kern1pt$i$\kern1ptx} may be found by the command \smallskip \hskip0.4in{\tt desiso\quad d\kern1pt$i$\quad d\kern1pt$i$x t} \smallskip which sets {\tt t} to one such isomorphism. \vskip0pt} \bigbreak The subdirectory {\tt dmcl} contains a design based on the sporadic simple group of McLaughlin (McL, degree 275). In this group, a point stabilizer has orbits of length 1, 112, and 162. The design {\tt dmcl} on $\{1,\ldots,275\}$ has 275 blocks, each of size 112; the blocks are the orbits of length 112 in the 275 point stabilizers. The group of this design, which must contain AUT(McL) and turns out to equal to AUT(McL), may be computed by the command \smallskip \hskip0.4in{\tt desauto\quad dmcl\quad Y} \smallskip which saves the group as {\tt Y}. (Note that we are computing the group of the design, not the group of the graph associated with the orbit of length 112; in general, the design group is larger than the graph group, although in this case they are the equal.) The directory also contains a second design {\tt dmclx}, isomorphic to {\tt dmcl}. An isomorphism may be found by the command \smallskip \hskip0.4in{\tt desiso\quad dmcl\quad dmclx\quad s} \smallskip which sets {\tt s} to an isomorphism from {\tt dmcl} to {\tt dmclx}. \bigbreak Finally, the subdirectories {\tt had32} and {\tt had104} contains $32\times32$ and $104\times104$ matrices over ${\rm GF}(3)$, respectively, which are essentially the Paley--Hadamard matrices. (The entries of -1 have been changed to 2.) The (monomial) automorphism group of either of these Hadamard matrices may be computed by the command \smallskip \hskip0.4in{\tt matauto\quad -mm\quad had\kern1pt$i$\quad Z} \smallskip ($i = 32{\rm\ or\ }104$), which sets {\tt Z} to the automorphism group. This subdirectories also contain matrices {\tt had\kern1pt$i$\kern1ptx} obtained by applying random monomial permutations to the rows and columns of {\tt had\kern1pt$i$}. Equivalence of {\tt had\kern1pt$i$} and {\tt had\kern1pt$i$\kern1ptx} may be established by the command \smallskip \hskip0.4in{\tt matiso\quad -mm\quad had\kern1pt$i$\quad had\kern1pt$i$\kern1ptx\quad w} \smallskip which sets {\tt w} to an monomial isomorphism from {\tt had\kern1pt$i$} to {\tt had\kern1pt$i$\kern1ptx}. Finally, the subdirectories contain Hadamard designs {\tt dhad\kern1pt$i$}\kern3pt\ ($i = 32{\rm\ or\ }104$) and equivalent designs {\tt dhad\kern1pt$i$\kern1ptx}, whose groups may be computed using the {\tt desauto} command, and whose equivalence may be established with the {\tt desiso} command. % % \section{IX.\quad OTHER COMMANDS} % In the course of testing and benchmarking the partition backtrack algorithms described in Section~IV, the author developed a number of other programs. Most of these programs were put together quickly, with a view toward simplicity rather than efficiency; in some cases, they are very inefficient. Also, some of them perform only minimal error checking. Nonetheless, they may prove useful since they operate on objects specified in the format described in Section~II. \medbreak All of these programs accept the {\tt -a}, {\tt -i}, {\tt -mb:$k$}, {\tt -mw:$w$}, {\tt -n:}{\it name}, {\tt -p:}{\it path}, and {\tt -q} options, as described in Section~V, whenever they would be meaningful. (For example, the {\tt -i} option is meaningful only if the command creates a permutation or permutation group.) Other options vary by command, and are discussed separately for each command below. % \subsection{Base and strong generating set construction:}The {\tt generate} command may be used to construct a probable base and strong generating set for the permutation group generated by specified permutations. The random Schreier method (Leon, 1980) is used. If the group order is known in advance, this method always produces a correct base and strong generating set, although there is no bound on the time required to do so. Otherwise, there is no guarantee that the method will produce a correct result. However, in the author's experience, it nearly always does give a correct result, and it runs far more quickly than alternative methods, such as the Schreier--Sims or Schreier--Todd-Coxeter--Sims algorithms. \medbreak The format for the command is % \smallskip \centerline{{\tt generate}\quad {\it options\/}\quad {\it inputGroup\/}\quad {\it outputGroup}} % \smallskip where {\it options\/} denotes \smallskip \centerline{ [{\tt -a}]\kern-1pt\enskip [{\tt -i}]\kern-1pt\enskip [{\tt -mb:}$k$]\kern-1pt\enskip [{\tt -mw:}$w$]\kern-1pt\enskip [{\tt -n:}{\it name\/}]\kern-1pt\enskip [{\tt -nro}]\kern-1pt\enskip [{\tt -p:}{\it path\/}]\kern-1pt\enskip [{\tt -q}]\kern-1pt\enskip [{\tt -s:}{\it seed\/}]\kern-1pt\enskip [{\tt -ti:}$i$]\kern-1pt\enskip [{\tt -tr:}$m$]\kern-1pt\enskip [{\tt -z}]} \smallskip Here {\it inputGroup\/} denotes the original permutation group, for which a base and strong generating set are not yet available. The factored group order for {\it inputGroup\/} may or may not be present. The random Schreier method is used to construct a probable base and strong generating set for {\it inputGroup},, and the result is saved as the permutation group {\it outputGroup}. If the factored group order is present, the computation will continue until a base and strong generating set has been found. Otherwise it continues until {\it m\/} consecutive quasi--random elements of the group factor in terms of the possible base and strong generating set, where {\it m\/} is the integer specified in the {\tt -tr:}$m$ option (default 40). High values of {\it m} may be specified to reduce the chance of an incorrect result, at the cost of slowing down the computation. \medbreak Normally, before a new strong generator is added to the strong generating set, an attempt is made to replace the new generator by a power of it, in order to obtain generators of low order. (This may be desirable later on if the Schreier--Todd--Coxeter--Sims method is used to verify the base and strong generating set; in addition, it saves space whenever a non--involutory generator is converted to an involution.) This attempt may be suppressed by the {\tt -nro} option. Note, however, that replacement of generators by powers is relatively inexpensive, so the {\tt -nro} option saves little time. The {\tt -ti:}$i$ option may be specified in order to have the program try harder to find involutory generators. Up to $i$ consecutive generators that cannot be converted to involutory generators will be rejected. The default for $i$ is 0; higher values often increase the execution time a good deal. \medbreak If the {\tt -z} option is specified, the program will make some attempt to remove certain redundant strong generators from the strong generating set for {\it outputGroup}. % \subsection{Base change:}The {\tt chbase} command may be used to change the base in a permutation group. The command format is % \smallskip \centerline{{\tt chbase}\quad {\it inputGroup\/}\quad $p_1,p_2,\ldots,p_k$\quad {\it outputGroup}} \smallskip where {\it options\/} denotes \smallskip \centerline{ [{\tt -a}]\enskip [{\tt -i}]\enskip [{\tt -mb:}$k$]\enskip [{\tt -mw:}$w$]\enskip [{\tt -n:}{\it name\/}]\enskip [{\tt -p:}{\it path\/}]\enskip [{\tt -q}]\enskip [{\tt -z}]} \smallskip The base for permutation group {\it inputGroup\/} is changed, if necessary, so that it begins with $p_1,p_2,\ldots,p_k$, and the group with this new base is saved as {\it outputGroup}. Note that, in the list $p_1,p_2,\ldots,p_k$ of points, individual points are separated by commas but {\it not\/} by blanks. Note also that the points $p_1,p_2,\ldots,p_k$ are included in the new base even if they are redundant as base points. However, no other redundant base points will appear in the new base. If the {\tt -z} option is specified, certain redundant strong generators will be removed following the base change. % % \subsection{Conjugation by a specified permutation:}The {\tt cjper} command may be used to conjugate an object (group, permutation, point set, partition, design, matrix, or code) by a specified permutation. The command format is % \smallskip \centerline{{\tt cjper}\quad {\it options\quad type\quad object\quad conjugateObject\quad conjugatingPerm}} \smallskip where {\it options\/} denotes \smallskip \centerline{ [{\tt -a}]\enskip [{\tt -b}]\enskip [{\tt -d:}{\it deg\/}]\enskip [{\tt -i}]\enskip [{\tt -mb:}$k$]\enskip [{\tt -mm}]\enskip [{\tt -mw:}$w$]\enskip [{\tt -n:}{\it name\/}]\enskip [{\tt -p:}{\it path\/}]\enskip [{\tt -q}]\enskip} \smallskip Here {\it type\/} must be one of the keywords {\tt group}, {\tt perm}, {\tt set}, {\tt partition}, {\tt design}, {\tt matrix}, or {\tt code},\enskip {\it object\/} must be an object of the type designated by {\it type},\enskip and {\it conjugatingPerm\/} must be a permutation. In the event that {\it object\/} is a permutation, set, or partition, the {\tt -d:}{\it deg} option {\it must\/} be used to specify the degree {\it deg}. The program sets {\it conjugateObject\/} to the object obtained by conjugating {\it object\/} by {\it conjugatingPerm\/}, in the case that {\it object\/} is a group or permutation, or to the object obtained by applying {\it conjugatingPerm\/} to {\it object}, if {\it object} is a point set, partition, design, matrix, or code. In the event that {\it object\/} is a group, the {\tt -b} option forces the program to compute a base and strong generating set for {\it conjugateObject\/}; by default, {\it conjugateObject\/} will have a base and strong generating set only if {\it object\/} does. \medbreak In the event that {\it object\/} is a design or matrix, the degree is treated as the number of points plus the number of blocks, or the number of rows plus the number of columns, respectively. Blocks or columns are permuted as well as points or rows. However, since the input format for permutations permits a permutation of degree $n$ to be treated as a permutation of any higher degree, this represents no real restriction. \medbreak If {\it object\/} is a matrix over a finite field ${\rm GF}(q)$, the {\tt -mm} option may be specified. Then {\it conjugatingPerm\/} must have degree $(q-1)(r+c)$, where $r$ and $c$ are the number of rows and columns, and must satisfy the ``monomial property'', as described in Section~III. % \subsection{Conjugation by a random permutation:}The {\tt cjrndper} command may be used to conjugate an object by a either a random permutation, or by a permutation chosen at random from a specified permutation group. The command format is % \smallskip \centerline{{\tt cjrndper}\quad {\it options\quad type\quad object\quad conjugateObject}\quad [{\it conjugatingPerm\/}]} \smallskip where {\it options\/} denotes \smallskip \centerline{ [{\tt -a}]\kern-1pt\enskip [{\tt -b}]\kern-1pt\enskip [{\tt -d:}{\it deg\/}]\kern-1pt\enskip [{\tt -g:}{\it grp\/}]\kern-1pt\enskip [{\tt -i}]\kern-1pt\enskip [{\tt -mb:}$k$]\kern-1pt\enskip [{\tt -mm}]\kern-1pt\enskip [{\tt -mw:}$w$]\kern-1pt\enskip [{\tt -n:}{\it name}]\kern-1pt\enskip [{\tt -p:}{\it path\/}]\kern-1pt\enskip [{\tt -s:}{\it seed\/}]\kern-1pt\enskip [{\tt -q}]} \smallskip Here {\it type\/} must be one of the keywords {\tt group}, {\tt perm}, {\tt set}, {\tt partition}, {\tt design}, {\tt matrix}, or {\tt code},\enskip and {\it object\/} must be an object of the type designated by {\it type}. In the event that {\it object\/} is a permutation, set, or partition, the {\tt -d:}{\it deg} option {\it must} be used to specify the degree {\it deg}. If {\it object\/} is a permutation or permutation group, the program sets {\it conjugateObject\/} to the object obtained by conjugating {\it object\/} by a certain permutation $x$; if {\it object\/} is a point set, partition, design, matrix, or code, it sets {\it conjugateObject\/} to the object obtained by applying a certain permutation $x$ to {\it object}. In either case, the permutation $x$ is chosen at random from the group {\it grp}, if the {\tt -g:}{\it grp} option is specified, or at random from the symmetric group, if the {\tt -g:}{\it grp} option is omitted. If {\it conjugatingPerm\/} is specified, the permutation $x$ is saved as {\it conjugatingPerm}. The {\tt -s:}{\it seed} option may be used to specify a specific seed for the random number generator that is used internally. In the event that {\it object\/} is a group, the {\tt -b} option forces the program to compute a base and strong generating set for {\it conjObject}, even when one is not available for {\it object}. \medbreak In the event that {\it object\/} is a design (or matrix), both points and blocks (or both rows and columns) are permuted. \medbreak If {\it object\/} is a matrix over a finite field ${\rm GF}(q)$, the {\tt -mm} option may be specified. Then a random monomial permutation is applied to the rows and columns of the input matrix. % % % \subsection{Commutator groups and lower central series:}The {\tt commut} command may be used to compute commutator groups. Repeated application of the command may be used to compute lower central series. Specifically, given a group $G$ and a (not necessarily normal) subgroup $H$ of $G$, the command computes the commutator group $C = [G,H]$. The command format is % \smallskip \centerline{{\tt commut}\quad {\it options}\quad {\it permGroup}\quad [{\it subgroup\/}]\quad {\it commutatorGroup}} \smallskip where {\it options\/} denotes \smallskip \centerline{ [{\tt -a}]\enskip [{\tt -i}]\enskip [{\tt -mb:}$k$]\enskip [{\tt -mw:}$w$]\enskip [{\tt -n:}{\it name}]\enskip [{\tt -p:}{\it path\/}]\enskip [{\tt -q}]} \smallskip Here, {\it permGroup\/}, {\it subgroup\/}, and {\it commutatorGroup\/} play the role of $G$, $H$, and $C$ above, respectively. If {\it subgroup\/} is specified, it must be a subgroup of {\it permGroup\/} (not checked); the command sets {\it commutatorGroup\/} to the commutator of {\it permGroup\/} and {\it subgroup}. If subgroup is omitted, the command sets {\it commutatorGroup\/} to the commutator of {\it permGroup\/} with itself (the derived group). \medbreak At present, the strong generating set for the commutator group is constructed only by the random Schreier method. Thus there is a (probably small) possibility that the base and strong generating set constructed for the commutator group will be incorrect. (If this occurs, the generators constructed will generate the commutator group, but not strongly. This undesirable feature will be fixed eventually.) \medbreak The return code from the {\tt commut} command will 0 if the commutator group has order 1. Otherwise the return code will depend on whether the order of $H$ (i.e., {\it subgroup\/}) is known in advance. If so, the return code will 1 if $\vert C\vert \neq \vert H\vert$ and 2 otherwise. (If $H$ is normal in $G$, these correspond to the cases $H \subset G$ and $H = G$, respectively.) If not, the return code will be 3. % % % \subsection{Comparison of groups, normality, and centralization:}The {\tt compgrp} command may be used to check if either of two permutation groups is contained in the other, or normalizes the other, or whether the two groups centralize each other. The command format is % \smallskip \centerline{{\tt compgrp}\quad [{\tt -c}] \enskip[{\tt -n}]\enskip [{\tt -mb:}$k$]\enskip [{\tt -mw:}$w$]\enskip [{\tt -p:}{\it path\/}]\quad {\it permGroup1\quad permGroup2}} \smallskip This command checks if either of {\it permGroup1\/} or {\it permGroup2\/} is contained in the other. If the {\tt -n} option is specified, it also checks if either group normalizes the other. (Note here the {\tt -n} option is used for a different purpose that that described in Section~V.) If the {\tt -c} option is given, it checks whether the two groups centralize each other. Messages indicating the result are written to the standard output. The return code is 0 if the two groups are equal, 1 if {\it permGroup1\/} is a proper subgroup of {\it permGroup2\/}, 2 if {\it permGroup2\/} is a proper subgroup of {\it permGroup1\/}, and 3 otherwise.\quad Note: The procedure for checking normality is, at present, extremely inefficient in many cases. % % % \subsection{Comparison of permutations:}The {\tt compper} command may be used to check if two permutations are equal, or if a permutation is the identity. The command format is % \smallskip \centerline{{\tt compper}\quad {\it degree\quad permutation1}\quad {\tt [}{\it permutation2\/}{\tt ]}} \smallskip This command checks if {\it permutation1\/} and {\it permutation2}, both of which must be permutations of degree {\it degree}, are equal. It prints a message indicating whether the permutations are equal, and gives a return code of 0 if they are equal and 1 otherwise. If {\it permutation2\/} is omitted, it is taken as the identity; thus the command checks if {\it permutation1\/} is the identity. % % % \subsection{Comparison of point sets:}The {\tt compset} command may be used to check if two point sets are equal. The command format is % \smallskip \centerline{{\tt compset}\quad {\it degree\quad set1}\quad {\tt [}{\it set2\/}{\tt ]}} \smallskip This command checks if {\it set1\/} and {\it set2}, both of which must be points sets of degree {\it degree}, are equal, or if either is contained in the other. if {\it set2\/} is omitted, it is taken to be the empty set, and the command checks if {\it set1\/} is empty. It prints a message indicating the result. If {\it set2\/} is specified, the return code is 0 if the two sets are equal, 1 if {\it set1\/} is properly contained in {\it set2\/}, 2 if {\it set1\/} properly contains {\it set2\/}, and 3 otherwise. If {\it set2\/} is omitted, the return code is 0 if {\it set1\/} is empty and 1 otherwise. % % \subsection{Coset weight distributions of codes:}The {\tt cwtdist} command\footnote{${}^{\dag}$}{\elevenpoint At time of writing, this command was not complete. It should be available shortly.} may be used to compute the coset weight distribution of a linear code. At present, the program is restricted to binary codes of codimension at most 32. The program is highly optimized; nonetheless, time and space requirements may restrict the codimension to values less than its maximum of 32. The command format is % \smallskip \centerline{{\tt cwtdist}\quad {\it options}\quad {\it code}\quad [{\it maxCosWeight\/}\quad [{\it matrix\/}]]} \smallskip where {\it options\/} denotes \smallskip \centerline{ [{\tt -a}]\enskip [{\tt -n:}{\it name\/}]\enskip [{\tt -p:}{\it path\/}]\enskip [{\tt -q}]} \smallskip The program computes the coset weight distribution of the code {\it code\/}, that is, for each $d$, it determines the number of cosets of the code having minimum weight $d$. If {\it maxCosWeight\/} is specified (It should be an integer.), the computation is performed only for $d \leq {\it maxCosWeight}$. If {\it matrix\/} is given, a coset representative is saved for one coset whose minimum weight is the minimum of the covering radius and {\it maxCosetWeight\/}. {\it Note:\/} It is not possible to specify {\it matrix\/} without specifying {\it maxCosWeight\/}; however, an artificially large value of {\it maxCosWeight\/} may be given instead. % % % \subsection{Designs from groups:}The {\tt orbdes} command may be used to construct a block design $D$ from a permutation group $G$, which normally should be transitive. The design $D$ will have $n$ points and $n$ blocks, each having the same number of points, where $n$ is the degree. The automorphism group ${\rm AUT}(D)$ will contain the group $G$ (perhaps properly). For a specified point $\gamma$, let $\Gamma$ denote the orbit of $\gamma$ under the point stabilizer $G_1$. The blocks of $D$ are exactly $\Gamma^{u_1},\ldots,\Gamma^{u_k}$, where $k$ is the size of the $G$--orbit of 1, and $u_1,\ldots,u_k$ map 1 to the different points of the $G$--orbit of 1. The command format is % \smallskip \centerline{{\tt orbdes}\quad [{\tt -a}]\enskip[{\tt -m}]\enskip [{\tt -mb:}$k$]\enskip [{\tt -mw:}$w$]\enskip [{\tt -p:}{\it path\/}]\quad {\it permGroup}\quad {\it point}\quad {\it design}} \smallskip Here {\it permGroup}, {\it point}, and {\it design\/} play the role of $G$, $\gamma$, and $D$ above, respectively. If the {\tt -m} option is given, the incidence matrix of the design is written out as a matrix; otherwise the design is written in the standard format for designs. % % % \subsection{Finding group elements of specified order:}The {\tt fndelt} command may be used to locate group elements of specified order, using a quasi-random search process. (Random group elements are examined in searching for ones whose order is a multiple of the specified order.) The command format is % \smallskip \centerline{{\tt fndelt}\quad {\it options}\quad {\it permGroup} \quad $n$\quad $k_1$\quad $k_2$\quad$\ldots$} \smallskip where {\it options\/} denotes \smallskip \centerline{ [{\tt -a}]\enskip [{\tt -f}]\enskip [{\tt -i}]\enskip [{\tt -m:}{\it trials}]\enskip [{\tt -mb:}$k$]\enskip [{\tt -mw:}$w$]\enskip [{\tt -n:}{\it name}]} \vskip2pt \centerline{ [{\tt -o:}{\it ord\/}]\enskip [{\tt -p:}{\it path\/}]\enskip [{\tt -po}]\enskip [{\tt -s:}{\it seed\/}]\enskip [{\tt -wg:}{\it grp\/}]\enskip [{\tt -wp:}{\it perm\/}]} \smallskip By default, the command searches quasi--randomly until it finds $n$ involutions in the group {\it permGroup\/}, and if $k_1,\,k_2,\,\ldots$ are specified, it saves the $k_1$\kern1ptst, $k_2$\kern1ptnd, $\ldots$ elements found. (See discussion of the {\tt -wp} and {\tt -wg} options below.) The value of $n$ may be at most 99. The seed used in the random number generator may be specified by the {\tt -s:}{\it seed\/} option; two invocations with the same (default or specified) seed should produce identical results. If the {\tt -o:}{\it ord\/} option is given, the command searches for elements of order {\it ord}, rather than for involutions. If the {\tt -f} option is specified, it prints the number of fixed points of each element found. If the {\tt -po} option is specified, it prints the orders of all products of the elements found. If the {\tt -wp:}{\it perm\/} option is given and $k_1$ is specified, the $k_1$\kern1ptst element found is saved as the permutation {\it perm}. If the {\tt -wg:}{\it grp\/} is given and at least $k_1$ is specified, a group {\it grp\/} is created using the $k_1$\kern1ptst, $k_2$\kern1ptnd, $\ldots$ elements found as generators. \medbreak % In some groups, elements of a specified order may be very difficult to find using the quasi--random search technique employed by {\tt fndelt}. For example, it is very difficult to find involutions in ${\rm PGL}_2(2^k)$ if $k$ is fairly high (say 10 to 15). The {\tt -m:}{\it trials\/} option may be used to terminate the command after {\it trials\/} random group elements have been generated, regardless of how many elements of the desired order have been found. By default, {\it trials\/} is essentially infinite. \medbreak % % % \subsection{Normal closures:}The {\tt ncl} command may be used to compute normal closures of subgroups. Specifically, given a group $G$ and a subgroup $H$ of $G$, the command computes the normal closure $H^G$ of $H$ in $G$. The command format is % \smallskip \centerline{{\tt ncl}\quad {\it options}\quad {\it permGroup}\quad {\it subgroup\/}\quad {\it normal closure}} \smallskip where {\it options\/} denotes \smallskip \centerline{ [{\tt -a}]\enskip [{\tt -i}]\enskip [{\tt -mb:}$k$]\enskip [{\tt -mw:}$w$]\enskip [{\tt -n:}{\it name}]\enskip [{\tt -p:}{\it path\/}]\enskip [{\tt -q}]} \smallskip The command sets {\it normalClosure\/} to the normal closure in {\it permGroup\/} of {\it subgroup}. (Note that {\it subgroup\/} must be a subgroup of {\it permGroup\/}; this is not checked.) \medbreak At present, the strong generating set for the normal closure is constructed only by the random Schreier method. Thus there is a (probably small) possibility that the strong generating set may be incorrect. (This will be fixed eventually; if it occurs, the generators obtained will generate the normal closure, but not strongly.) % % % \subsection{Orbit structure:}The {\tt orblist} command performs various calculations relating to the orbit structure of a specified group, or to the orbit structure of point stabilizers within the group. The command format % \smallskip \centerline{{\tt orblist}\quad {\it options}\quad {\it permGroup}\quad [\kern1pt$p_1,p_2,\ldots,p_k$\quad[{\it ptStabGroup\/}]\kern1pt]} \smallskip where {\it options\/} denotes \smallskip \centerline{ [{\tt -a}]\enskip [{\tt -i}]\enskip [{\tt -len}]\enskip [{\tt -lr}]\enskip [{\tt -mb:}$k$]\enskip [{\tt -mw:}$w$]\enskip [{\tt -n:}{\it name\/}]\enskip [{\tt -p:}{\it path\/}]} \vskip2pt \centerline{ [{\tt -ps:}{\it set\/}]\enskip [{\tt -q}]\enskip [{\tt -r}]\enskip [{\tt -s:}{\it seed\/}]\enskip [{\tt -wno:}{\it $k$}]\enskip [{\tt -wo:}{\it $p_1,p_2,\ldots$}]\enskip [{\tt -wp:}{\it partn\/}]\enskip [{\tt -z}]} \smallskip In the absence of any options, and with only one non--option parameter, the command writes (to standard output) the orbits of the group {\it permGroup}. For each orbit, the orbit representative, the orbit length, and the list of points in the orbit are written. If the {\tt -r} option is given, the order in which the orbits are listed is randomized; the seed for the random number generator that is used may be specified by means of the {\tt -s:}{\it seed\/} option. (Note that the {\tt -r} option is ignored if the {\tt -len} or {\tt -lr} options are specified.) \medbreak If the {\tt -len} option is specified, only the orbit lengths are written. If the {\tt -lr} option is given, only the orbit representatives and orbit lengths are given; the output consists of a list of pairs {\it rep\/}{\tt :}{\it len}, where {\it rep\/} is an orbit representative and {\it len\/} is the length of the corresponding orbit. \medbreak The {\tt -wp:}{\it partn} may be used save the orbit partition of the group as the partition {\it partn}. The {\tt -wo:}{\it $p_1,p_2,\ldots$} option may be used to save the union of the orbits of points $p_1,p_2,\ldots$ as a point set; the name of the point set is the string {\it set\/} given by the {\tt -ps:}{\it set\/} option. Alternatively, the {\tt -wno:}{\it $k$} option causes the union of the first $k$ orbits to be saved as a point set, whose name again is specified by the {\tt -ps:}{\it set\/} option. \medbreak If a second non--option parameter $p_1,p_2,\ldots,p_k$ is specified, all orbit calculations are carried out in the stabilizer in ${\it permGroup\/}$ of the point sequence $p_1,p_2,\ldots,p_k$, rather than in {\it permGroup\/} itself. Note that this entails a base change for the group {\it permGroup}. The {\tt -z} option causes redundant strong generators for {\it permGroup} to be removed following this base change. Specifying a third non--option parameter {\it ptStabGroup\/} option causes point stabilizer of $p_1,p_2,\ldots,p_k$ to be saved as the permutation group {\it ptStab}. % % \subsection{Point stabilizers:}The {\tt ptstab} command may be used to compute point stabilizers in permutation groups. The command format is % \smallskip \centerline{{\tt ptstab}\quad {\it options}\quad {\it permGroup}\quad $p_1,p_2,\ldots,p_k$\quad {\it ptStabGroup\/}} \smallskip where {\it options\/} denotes \smallskip \centerline{ [{\tt -a}]\enskip [{\tt -i}]\enskip [{\tt -mb:}$k$]\enskip [{\tt -mw:}$w$]\enskip [{\tt -n:}{\it name\/}]\enskip [{\tt -p:}{\it path\/}]\enskip [{\tt -q}]\enskip [{\tt -z}]} \smallskip The point stabilizer in the group {\it permGroup\/} of the list $p_1,p_2,\ldots,p_k$ is computed and saved as the permutation group {\it ptStabGroup}. Note that, in the list $p_1,p_2,\ldots,p_k$, individual points are separated by commas but {\it not\/} by blanks. The {\tt -z} option causes certain redundant strong generators for {\it ptStabGroup} to be removed before the group is saved. % % % % \subsection{Random point sets and partitions:}The {\tt randobj} command may be used to construct a random $k$--element subset of $\{1,\ldots,n\}$ for specified $n$ and $k$, or to construct a partition of $\{1,\ldots,n\}$ that is random subject to the cells having specified sizes. The command format % \smallskip \centerline{{\tt randobj}\quad {\it options}\quad {\it type}\quad $n$\quad $k_1,k_2,\ldots,k_p$\quad {\it newObject}} \smallskip where {\it options\/} denotes \smallskip \centerline{ [{\tt -a}]\enskip [{\tt -e}]\enskip [{\tt -n:}{\it name\/}]\enskip [{\tt -s:}{\it seed\/}]} \smallskip Here {\it type\/} must be either {\tt set} or {\tt partition}; it indicates whether a point set or partition is to be constructed. For a point set, $p$ must be 1; a random $k_1$--element subset of $\{1,\ldots,n\}$ is constructed. For a partition, in the absence of the {\tt -e} option, $k_1 + k_2 + \ldots + k_p$ must equal $n$; a partition of $\{1,\ldots,n\}$ random subject to having cell sizes $k_1$,~$k_2$,...,~$k_p$ is constructed. However, if the {\tt -e} option is specified, then $p$ must equal 1, and a random partition having $k_1$ cells of equal size (as closely as possible) is constructed. In any case, the point set or partition constructed is saved as the object {\it newObject}. \medbreak The {\tt -s:}{\it seed} option may be used to specify an initial seed for the random number generator that is used. % % \subsection{Weight distributions of codes:}The {\tt wtdist} command may be used to compute the weight distribution of a linear code. The program is highly optimized, both for binary and nonbinary codes. The command format is % \smallskip \centerline{{\tt wtdist}\quad {\it options}\quad {\it code}\quad [{\it saveWeight\/}\quad {\it matrix\/}]} \smallskip where {\it options\/} denotes \smallskip \centerline{ [{\tt -a}]\enskip [{\tt -b}]\enskip [{\tt -g}]\enskip [{\tt -n:}{\it name\/}]\enskip [{\tt -p:}{\it path\/}]\enskip [{\tt -pf:}$p$]\enskip [{\tt -s:}$m$]\enskip [{\tt -q}]\enskip [{\tt -1}]} \smallskip The weight distribution of the code {\it code\/} is computed and written to the standard output. If {\it saveWeight\/} (which should be a positive integer) and {\it matrix\/} are specified, the codewords of weight {\it saveWeight\/} are saved; specifically, a new matrix {\it matrix\/} is created whose rows are the vectors of weight {\it saveWeight\/} in the code {\it code}. However, for nonbinary fields, only one codeword from each one-dimensional subspace is saved. (Thus, for a code over ${\rm GF}(q)$ with $k$ vectors of weight {\it saveWeight}, {\it matrix\/} will have $k/(q-1)$ rows.) Also, if the {\tt -1} option is specified, only one codeword of weight {\it saveWeight\/} will be saved, and thus {\it matrix\/} will have only one row. In the event that the code has no codewords of the specified weight, the matrix is not created. \medbreak Four options, {\tt -b}, {\tt -g}, {\tt pf:}$p$, and {\tt s:}$m$, are never necessary but may be used to optimize performance. The {\tt -s:}$m$ option may be coded if codewords of weight {\it saveWeight\/} are to be saved, and if the number of such codewords is known in advance; the value of $m$ should be the number of such codewords (excluding scalar multiples, for nonbinary fields). Use of this option saves some time and space. (If an incorrect value of $m$ is specified, the savings in time and space may be lost, but the results will still be correct.) \medbreak To understand the other optimization options, it is necessary to understand that the {\tt wtdist} command invokes one of two programs: a considerably optimized program for codes over any field, or an even more highly optimized one for binary codes meeting certain constraints on length and dimension. The binary code program requires a fixed amount of time (several seconds or more on a micro or workstation) to construct a certain table of size 65536, even if the dimension of the code is small. Accordingly, the {\tt wtdist} command invokes the general code program for binary codes of low dimension; however, the criteria for choosing the cutoff point is relatively crude, and often a nonoptimal choice may be made. The {\tt -g} option forces the general code program to be used, even if the binary one would be chosen by default. The {\tt -b} option forces the binary code program to be used, provided the code is binary, provided its length is at most 128, and provided its dimension is at most 3. (If any of these conditions fail, the binary program cannot be used.) \medbreak The {\tt -pf:}$p$ option is applicable only if the general code program is employed. The value of $p$, which is referred to as the {\it packing factor}, should be a positive integer such that $q^p\leq 65535$. (Here $q$ is the field size.) Internally, the program will pack $p$ coordinates of each codeword into a single 16--bit word. Higher values of $p$ improve performance on codes of high dimension. On the other hand, the size of the internal tables that must be allocated and initialized rise very rapidly as a function of $p$, and in particular, a value of $p$ maximal subject to $q^p\leq 65535$ will be practical only with a rather large memory, and will be optimal with respect to time only for codes of quite high dimension, because of the large amount of time spent initializing the tables. (The size in bytes of the largest single table used internally is roughly $q^p e k \lceil n/p\rceil$, where $n$ is the length, $k$ is the dimension, and $e$ is the exponent of the field.) The program will choose a packing factor by default, but at present the procedure for making this choice is crude. In particular, if the program runs out of memory, a smaller packing pactor should be specified. % % \section{X.\quad THE UNIX DISTRIBUTION} % On Unix, the programs, documentation, and examples will be available by anonymous ftp from {\tt math.uic.edu}. The directory {\tt pub/leon/partn} should contain the following files, where {\it r} denotes the release number, e.g. {\tt 1.00}: \vskip1pt \smallskip \vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other doc-\kern-1pt{\it r}.tar.Z examples-\kern-1pt{\it r}.tar.Z src-\kern-1pt{\it r}.tar.Z bin16-\kern-1pt{\it r}.sun4.tar.Z bin16-\kern-1pt{\it r}.sun3.tar.Z \vskip-2pt bin32-\kern-1pt{\it r}.sun4.tar.Z bin32-\kern-1pt{\it r}.sun3.tar.Z \vskip0pt}} \vskip-2pt (The last two files may be omitted to conserve disk space, but can be made available on request; contact the author at {\tt leon@turing.math.uic.edu}.) Users with a Sun/4 should obtain the files {\tt doc.tar.Z}, {\tt examples.tar.Z}, and {\tt bin16.sun4.tar.Z}, which contain, respectively, the documentation, the examples, and 16-bit executables for the Sun/4. Users desiring the C language source code (of limited use, due to inadequate documentation) should obtain the file {\tt src.tar.Z}. Note that source code is not required since binary executables for the programs are supplied. Users needing to compute with groups of degree greater that 65000 (approximate) should obtain the file {\tt bin32.sun4.tar.Z}, which contains 32-bit executables. Users with a Sun/3 merely substitute ``{\tt sun3}'' for ``{\tt sun4}'' in the preceding instructions. Other users should obtain only the files {\tt doc.tar.Z}, {\tt examples.tar.Z}, and {\tt src.tar.Z}. It will be necessary to compile the source; a make file is provided for this purpose (See Section~XI). \smallskip A directory, say {\tt partn}, should be created, and all the files should be downloaded or moved to this directory. They should then be uncompressed and extracted by commands such as \smallskip \vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other uncompress -v doc.tar.Z tar xvf doc.tar \vskip0pt}} \smallskip (Repeat the above for each of the files.) The result should be subdirectories of {\tt partn} as follows: \medbreak \hskip0.45truein\hbox to 0.85truein{\tt doc\hfil}{Documentation for the programs -- primarily this manual.} \vskip2pt \hskip0.45truein\hbox to 0.85truein{\tt examples\hfil}{The subdirectories of this directory contain examples. See Section~VIII.} \vskip2pt \hskip0.45truein\hbox to 0.85truein{\tt test\hfil}{Unix shell scripts to test the partition backtrack programs, using some of the examples provided in the {\tt examples} subdirectory.} \vskip2pt \hskip0.45truein\hbox to 0.85truein{\tt src\hfil}\vtop{\hsize=5.2truein\relax Source code and a make file, to allow compilation of the programs on machines other than the Sun/3 and Sun/4.} \vskip2pt \hskip0.45truein\hbox to 0.85truein{\tt bin16\hfil}{executable programs for the Sun/3 or Sun/4, using 16--bit integers.} \vskip2pt \hskip0.45truein\hbox to 0.85truein{\tt bin32\hfil}{executable programs for the Sun/3 or Sun/4, using 32--bit integers.} \smallskip For the Sun/3 or Sun/4, the appropriate directory {\tt partn/bin16} or {\tt partn/bin32} should be added to the path, or the files from one of those directories should be copied to a directory on the path. For other Unix machines, it will be necessary to recompile the source; see Section~XI. % \medbreak Once installation is complete, the programs may be tested using the shell scripts in the subdirectory {\tt test}. Specifically, the following shell scripts, written for the Bourne shell, are provided: \smallskip \vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other test\_setstab test\_cent test\_inter test\_desauto test\_setimage test\_conj test\_desiso \vskip0pt}} Each of the above shell files may be run, without options or parameters. When {\tt test\_setstab} is run, the output is collected in a file named {\tt setstab.output}, as well as appearing on the screen. This file may be compared to the file {\tt setstab.correct}, supplied in the subdirectory {\tt tests}, which contains the correct output. The files should match exactly. The comparison may be performed, for example, with the command \smallskip \vskip2pt \vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other diff setstab.output setstab.correct \vskip0pt}} The other shell files work in an analogous manner. \medbreak The tests above may take a number of hours, depending on the speed of the machine. In addition, they require several megabytes of memory. Each of the shell files accepts an option {\tt -s}, which runs a much less time--taking series of tests, requiring less memory. When this option is used with {\tt test\_setstab}, the output in file {\tt setstab.output} should be compared to the file {\tt setstab-s.correct}, rather than to {\tt setstab.correct}. A similar remark applies to the other tests. \medbreak The programs described in this manual are also available, in binary form, for the IBM~PC and compatibles, under MS~DOS, and for the IBM~370 family of machines, under CMS. For details, please contact the author. % % \section{XI.\quad COMPILING THE SOURCE CODE} % As mentioned earlier, compiled versions of the programs described here are available for the IBM~PC (DOS), the Sun/3 and Sun/4 (Unix), and the IBM~370 (CMS). For other systems, it will be necessary to compile the C source code. The information in this section is intended for users intending to compile the source code. \medbreak To compile the C source code, a compiler that supports ANSI Standard C is required. With very minor exceptions, the source code conforms to the ANSI standard for C; it does, however, make use of a number of features not present in most pre--ANSI versions of C. The code was written under the assumption that it would be compiled with optimization turned on, so it is important to enable optimization, as the programs tend to run quite slowly if compiled with optimization disabled.\footnote{${}^{\dag}$}{\elevenpoint However, some compilers fail to optimize the code correctly. GNU~C~1.39 and~2.1 (Sun/3, Sun/4) and Waterloo~C 3.2 (IBM~370) optimize it correctly; at present, Borland~C++~3.0 and Microsoft~C~5.1 do not. Microsoft~C~6.0/7.0 and Borland~C++~3.1 have not been tested.} At present large sections of the source code are not commented or are commented incorrectly. Accordingly, the source is provided primarily so that users may compile the programs on other machines, rather than modify them. Eventually the author hopes to distribute adequately documented source code. \medbreak Prior to compiling the source, it is necessary to determine whether a special timing function needs to be supplied. By default the programs use the C standard library function {\tt clock()} to measure execution times. This is adequate on many systems. However, on some systems (e.g., Sun/3 and Sun/4 Unix), a problem arises because the {\tt clock()} function returns a result with a resolution of one microsecond and thus ``wraps around'' in about 36 minutes. Unless the user is content with timing statistics correct modulo $2^{32}$ microseconds (about 71.58 minutes), an alternate timing function must be supplied in a file which should be named {\tt cputime.c}; this function must return a value of type {\tt long} which represents the elapsed CPU time, and C macros {\tt CPU\_TIME} and {\tt TICK} must be defined to specify the name of this special function (e.g., {\tt cpuTime}) and the resolution of the function (in clock ticks per second), respectively. In addition, a make file macro {\tt CPUTIME} must be defined to have the value {\tt cputime.o} (assuming object code files have suffix {\tt o}). These macros are discussed in more detail below. For the Sun/3 and Sun/4, source code for such a function {\tt cpuTime()} is supplied in the file {\tt cputime.c}; perhaps this function will work on other Unix systems as well. In the remainder of this section, it is assumed that such a function, if needed, has already been written. \medbreak A make file (named {\tt Makefile}) is provided with the source. This make file is designed for the GNU~C compiler, version 2, on the Sun/3 and Sun/4, but with some other compilers and systems, only simple editting of the first few lines of the make file should be needed; the purpose of these lines is to define appropriate make file macros. For some compilers, more extensive editting of the make file may be required. Note that the make file assumes that all source code and include files (except system include files) are in the currect directory, and that all object and executable files are to be placed in this directory. \medbreak The make file provided with the source begins as follows: \medbreak \vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other COMPILE = gcc DEFINES = -DSUN\_UNIX\_GCC -DINT\_SIZE=32 -DCPU\_TIME=cpuTime -DTICK=1000 -DLONG\_EXTERNAL\_NAMES -Dclock\_t=long INCLUDES = COMPOPT = -c -O2 -Wall LINKNAME = -o LINKOPT = -v OBJ = o CPUTIME = cputime.o BOUNDS = }} \medbreak The purpose of the make file macros defined here is as follows: \smallbreak {\advance\leftskip by 0.3in\noindent {\tt COMPILE}:\quad This macro specifies the command to invoke the C compiler; it may include path information. \smallbreak {\tt DEFINES}:\quad This make file macro specifies C macros to be defined for the compilation; these are discussed below. \smallbreak {\tt INCLUDES}:\quad This macro is used to tell the compiler where to search for include files, if they are located other than in the standard location. \smallbreak {\tt COMPOPT}:\quad This macro is used to specify compile--time options, other than those given by means of the {\tt DEFINES} and {\tt INCLUDES} macros. These options should include code optimization and compile--only (no linking) if these are not defaults. For the IBM~PC, an option specifying the large memory model should be given. \smallbreak {\tt LINKNAME}:\quad This macro is used to specify the linker option used to give the name of the executable file to be created. \smallbreak {\tt LINKOPT}:\quad This macro is used to specify linker options, other than that given by the {\tt LINKNAME} macro above. \smallbreak {\tt OBJ}:\quad This macro is used to specify the suffix (file type) for object files. Normally this would be {\tt o} on Unix and {\tt obj} on MS~DOS. \smallbreak {\tt CPUTIME}:\quad Unless a special timing function is to be supplied (see discussion above), this value of this macro should be the null string. If a special timing function is supplied, the value of the {\tt CPUTIME} macro should be {\tt cputime.o}, assuming object files have suffix {\tt o}. \smallbreak {\tt BOUNDS}:\quad This macro is present for use on MS~DOS with Bounds Checker, a debugging product published by Nu-Mega Technologies and used heavily by the author in debugging the programs. Normally its value should be the null string. \medbreak} It remains to discuss the C language macros that must, or may, be defined by the make macro {\tt DEFINES}. One of these C macros, {\tt INT\_SIZE}, always must be defined; the others are optional, or are required only in certain circumstances. The C language macros are as follows: \smallbreak {\advance\leftskip by 0.3in\noindent {\tt INT\_SIZE}:\quad This macro is always required. Its value must be the number of bits in the C data type {\tt int}, usually 16 or 32. (The programs have never been adapted to a system in which the integer size is other than 16 or 32, although it should not be difficult to do so.) {\it Note:\/}\enskip This macro only specifies the size of the C data type {\tt int}; it does {\it not\/} determine whether the programs are compiled to use 16 or 32 bit integers. \smallbreak {\tt EXTRA\_LARGE}:\quad If this macro is defined, and {\tt INT\_SIZE} above is 32, the programs will be compiled using 32--bit integers; that is, points will be represented using the C data type {\tt unsigned}. Otherwise, if {\tt INT\_SIZE} is 32, the programs will be compiled using 16--bit integers (with most compilers), as points will be represented using the C data type {\tt unsigned short}. Note {\tt EXTRA\_LARGE} should not be defined when {\tt INT\_SIZE} is 16. Care must be taken, of course, not to link object files compiled with {\tt EXTRA\_LARGE} defined with those compiled without it defined, as the make file cannot protect against this error. (However, running the programs with the {\tt -v} option will reveal this error.) \smallbreak {\tt LONG\_EXTERNAL\_NAMES}:\quad This macro should (but need not) be defined if the linker supports long external names (up to 31 characters). If defined, its value is irrelevent. \smallbreak {\tt CPU\_TIME}:\quad This macro must be defined if a special timing function is supplied, and its value must be the name of that function. If the standard C function {\tt clock()} is to be used, the macro must not be defined (not even as the null string). \smallbreak {\tt NOFLOAT}:\quad This macro probably should be defined on a system lacking floating point hardware support. (If defined, its value is irrelevant.) Normally, the programs perform a small amount of floating point arithmetic in attempting to produce a good $\bfgermR$--base; with software emulation of floating point instructions, the cost of this use of floating point arithmetic probably exceeds its benefit. If the {\tt NOFLOAT} macro is defined, no floating point arithmetic is used. (In this case, it may be advantageous to add a compiler option telling the compiler not to incorporate floating--point support into the executable program. For example, under Borland C++, the {\tt -f-} option has this effect.) \smallbreak {\tt TICK}:\quad This macro should be defined in two situations: (1) If a special CPU time function is supplied, {\tt TICK} should be defined to be the resolution (in clock ticks per second) of that function, and (2) if the {\tt NOFLOAT} macro is defined and if the compiler--supplied definition of the standard C macro {\tt CLK\_TCK} is a floating point constant (as occurs with Borland~C++), {\tt TICK} should be defined to be the nearest integer approximation to the value of {\tt CLK\_TCK}, e.g., 18 for Borland~C++. \smallbreak {\tt HUGE}:\quad This macro must be defined for the IBM PC (unless a DOS extender is being used). It simply causes a few pointers to be declared as {\tt huge}. Only one program, the weight distribution program, uses huge pointers. \medbreak} In addition, the author recommends defining a symbol unique to the system and compiler, e.g., {\tt SUN\_UNIX\_GCC} above. Then any code modifications unique to this system and compiler can be bracketed as follows: \medbreak \vbox{{\elevenpoint\advance\leftskip by 0.45truein\obeywhitespace\tt\catcode`^=\other \#ifdef SUN\_UNIX\_GCC /* Code modifications for Sun Unix, GNU C compiler. */ \#endif }} \medbreak Once the make file has been editted appropriately, all of the programs may be compiled at once by the command \smallskip \hskip0.45truein\relax {\tt make all} \smallskip or, alternatively, individual programs may be compiled by the commands \smallskip \hskip0.45truein\relax \hbox to1.5truein{\tt make setstab\hfil}for {\tt setstab}, {\tt setimage}, {\tt parstab}, and {\tt parimage}, \vskip1pt\noindent \hskip0.45truein\relax \hbox to1.5truein{\tt make cent\hfil}for {\tt cent}, {\tt conj}, {\tt gcent}, \vskip1pt\noindent \hskip0.45truein\relax \hbox to1.5truein{\tt make inter\hfil}for {\tt inter}, \vskip1pt\noindent \hskip0.45truein\relax \hbox to1.5truein{\tt make desauto\hfil}for {\tt desauto}, {\tt desiso}, {\tt matauto}, {\tt matiso}, {\tt codeauto}, and {\tt codeiso}, \vskip1pt\noindent \hskip0.45truein\relax \hbox to1.5truein{\tt make cjrndper\hfil}for {\tt cjrndper} and {\tt cjper}, \vskip1pt\noindent \hskip0.45truein\relax \hbox to1.5truein{\tt make commut\hfil}for {\tt commut} and {\tt ncl}, \vskip1pt\noindent \hskip0.45truein\relax \hbox to1.5truein{\tt make compgrp\hfil}for {\tt compgrp}, \vskip1pt\noindent \hskip0.45truein\relax \hbox to1.5truein{\tt make fndelt\hfil}for {\tt fndelt}, \vskip1pt\noindent \hskip0.45truein\relax \hbox to1.5truein{\tt make generate\hfil}for {\tt generate}, \vskip1pt\noindent \hskip0.45truein\relax \hbox to1.5truein{\tt make orblist\hfil}for {\tt orblist}, {\tt chbase}, and {\tt ptstab}, \vskip1pt\noindent \hskip0.45truein\relax \hbox to1.5truein{\tt make randobj\hfil}for {\tt randobj}, \vskip1pt\noindent \hskip0.45truein\relax \hbox to1.5truein{\tt make wtdist\hfil}for {\tt wtdist} and {\tt cwtdist}. \smallskip Ideally, there should be no errors in compilation. However, with some compilers (e.g., Zortech~C++), it is necessary to define {\tt const} to be a null string in order to avoid compile--time errors. Typically compilers will generate a number of warnings; a number of them involve implicit conversion between pointers to constant and non--constant types. \medbreak The above commands place the executable programs in the current directory (that containing the source). The final step is to move the executables to the directory in which they should reside, preferably one on the current path. A shell file named {\tt install} is provided for this purpose. The command \vskip2pt \hskip0.45in\relax {\tt sh install\ }{\it bindir} \vskip2pt should be issued, where {\it bindir\/} is the name of the directory in which the binary files should be placed, e.g., {\tt ../bin}. Note that this command also copies certain shell files from the source directory to the binary directory, renaming them by dropping the {\tt sh} suffix in the process. % \bigbreak \vskip15pt \centerline{\sectionheaderfont REFERENCES} \nobreak\medskip\nobreak Leon, J.\enskip (1980a),\enskip On an algorithm for finding a base and a strong generating set for a group given by generating permutations,\enskip {\it Math.\ Comp.} {\bf 35}, 941--974. \medbreak Leon, J.\enskip(1991),\enskip Permutation group algorithms based on partitions, I: Theory and algorithms,\enskip {\it J. Symbolic Comp.} {\bf 12}, 533--583. \medbreak Cannon, J.\enskip (1984),\enskip {\it A language for group theory,}\enskip Dept.\ of Pure Mathematics, University of Sydney, Australia. \medbreak Sims, C.~C.\enskip (1971),\enskip Computation with permutation groups,\enskip In (Petrick, S.~R., ed.),\enskip {\it Proc.\ of the Second Symposium on Symbolic and Algebraic Manipulation,}\enskip New York: Assoc.\ for Computing Mach. \bye guava-3.6/src/leon/doc/leon_guava_manual.pdf0000644017361200001450000101733611026723452021020 0ustar tabbottcrontab%PDF-1.3 %쏢 6 0 obj <> stream xZKD>p!&#Xb m\4=V߬GfIjx0@-Uee~YU|?ٯg.js+*c (9׬? _gRVN2]pÏs+e,>y|g">vRʖᙒ`­ ӳx?,NX.o߼Ǜh._S|(:ת2^ 7c^oe~{<$t789<mhtWzFy m7]4n~$Zqtަ<n0vIĊ35bm!J71,(ʡg&۩ʡ,;"zOam8."Ѯnr. z4;8Km 0[M&qV7B+3E!0xem\(rJ?3rEWw) .5Q/n4Evc!yKO/cK(w\!Rc'Ѽ7GJ=iE0 >x,1I)EfO8S@a%7]o ?Sp"Pj01!AǡjP-\.}MA9)V&rgꇟLa Jf Ynm%*(P u2t~0o~ʊHb\܍̃lQrEyAu;CLӰ!m V xv8frɀ>4eݦ^)q%@xwmdFot?@yemPm7[XeI)V p{l^YR@` ,v݌&yՋk%UqwF@:_9Twł\ʨad|t  7]),(H3!uhzH6':;IXv K~-h>L]MIYid>fK[Z`*r,Oh!KTXOk9z>6 _6PE+ Ly*6C6jc*JP˂ԄM | _GF,hXԋ)s-{R5bҠ#ɤ),cAX:(M# |y^<,̯UqFhG&DП4mX@U}U+̀ƃm TT8Z,-l@+GX*|## hjT($p}5́zm6ICP^Lc~r (%Bg*&!gS X"JϪSZ'hN+ҟV|h a"G60W4i& RuBzk,]Nh:-n;jR^sc?m{~=b$ԉjY#f9+UC`WVJ`nVqh+b$-)Xۦ&P XP8mxttZQ;ĿoS4Ji:|SYː`yY0Y(t%w~JR}㤈iKTQqR7yYZG2է;U]--jQc$F2 ru(s.\}YaL~;?%! !ax'~F՛]_*qC ]~mg9Mw8 JdVFq됈k;eՅMG_T< }줱,B%,FS>invd.1,#v,S4 /jlIM~$6=&2c+1@R|3S}_L~(k..̛Y.LnXK.2T96.dl^7/)'f*ˇ|#j r[85P˅ #CC[Q&}Wş Bx@F7-i[nilvjhQ7A'+k-2H.M6E+T|e.PяjTʐCS8@*AxL,>f0tbAӼQȲ4C\s)P譠$}T*7.Vkq_^4ewQQWwD 5w#cSaȄl)̌l'UЊ; tE"O!3dD_Xc45?ܘP⟵(R$^(?, endstream endobj 7 0 obj 3181 endobj 41 0 obj <> stream x[[sܸ~wmߠG"ą $>'{ZRzfh뙡ן9IIk)ח,E7WBgWoՅBɋϯ BB22W[7?W܅rW .^_`U ]Vl eYXS+|0wC_*8Hv mػ*\5݆MJ!nnҟ,>42}1h ӎ\MI6<3.N>|*D8-J$;sIwC|wUмvM\CkװXjD@VBKP Oʁ*`(ɻm/EQKYcm6ni\QuFkEOųJJ^<KCҋ*~V/,L-#vUuZ,^¥QJpaĚYm WΐG%`/H Em YDUlx YN]hv5S$fwtpo* /=ڈ4")yޯ(4Ƥv1]CtA1p&nY> N^!j_%w-".-F%f eQWJ@ST@ IEZ !8<< tV%(Kx~2B Ci;t+p9l#9ㄎX׎ܶA{s,v*#⩊Od7,Vp6Zhp-j);!ZMхBi]kyilz4=b-+Ag~ڱMqㆮfOb3 u f9T7A5B 6GoJ:bđUa -<DfT$pʯH+- _a񸥠hKB|$C? $8M `FoJIfK>Ty >u4Cz(7cj:j?t}3nSc|18}#Uzvd@-JpS+k6Aq2rOR +Gt4p)G-!C7&Xyh15i3C~< Mxh_x 1FK@B-}sݮ|y1& s۟w͆Mn7oA `cOJjBsJDYT RkvN"M54Rkyޯ0_VD+Wn ;S!Ak>:Vfؒ3n6n_rm"6 ddqM+y0& )_YRi߯U|Kx$(v.QXr-0 dPQh ߿gD7?/"}ƳBwݾKp6㲒;dfYrWYaQZSaУdŧ,VdJ,SNܼZK̪kGZѦF"-+:Kr)_е4P-rTP!~yIM.?0(:qL0N>-߯mj[u9iCV'mF$O}mKijwp #EY =P+'Ԅudlz(1s_䮎]&VJ9i-^`8\yijR$qbu|ߪ([a2Ξ2x"WM}Ґ i ǝ (%*YKd[Gbv Fy 7p<: VW֙h^_v#Q4(2QVNXHj':זvxNirQ {_j~KI|Ď;c\KQSsͳLg:3i_Q "8VLQ¥Cľ+Td'^1N?S/.!d2OmAI 8ဪNQV%ŒS/:ڗ_|L|AJaY h3Od BU8X( B^,ם@sQ=r=5r>m?` ^ײm6yu 0'4k]ZB›h>:Ja`suU/7wTu&H=X3'lzyPOpxd([@0虺6JH}G\ ⇌_? ~[.Y)f]2wl\7/˞K}$ͳQ3gM ZL<)AR-*i[C5Q|Z/(F8Rq}n1ߎ A@⨰GQac̣+^Qp B)!`(YI\OK<&]*g})Y 3vF$Ro^g7GzC$䍚eo$i}dp~$ cH' ܼsTAf꩘/}$]堧g.9auڌ]-1&l:c&@3}xf<(vr0"ϩ5\aeOZX9*0cC7b8ͤdBG<;K3o'mNgʎgvhb R#U> !h 7,.hiq!ssyzՔu'{\<ˠc y~L!UzXusl@> YUg~C #VfI|>{I8?:KMMd'UIVSu>F/GQDl>,gT)Xi62]5u6eH݈Z/ ZAWtWx=/ScN&Hw}[UBr-K< NeǞ0gx-!Lllٌ 3Яa-^OgT;VFЗ m:m~>4H ɩ־T`?kl&3|9ǧ-0.' 2jT& C[G~JR'/@tݒsP8PɄfa^.eLNm%''pZ?J)y?]:%nK^h7ie=} UURf0 :Dc:3"͏ L#(2<\"¾)g Dn uP! |X\cy BtX]\FX~o[endstream endobj 42 0 obj 4495 endobj 48 0 obj <> stream xZKo$ #9KEv` +  zggGH|b %H.&dWX.>,D+V7/U~Nզ^\˯ KBkZ\)*_\]\^?aQ`?/M?/wqUaery! )66!Nq&XH֛x<, w}ҷc>︴WЯ΁taLsN㶶 T=&ᾳ@Wn wKK.S8QE`R׻R+|d$OsU1Pv1e^wild1Vٞ^rލn\QL_=%iHy"^yXqҗ%84w0j"y֚xr;^]fJ鋈/aȇ^aq>GZiʺDZ˖P%q=i ϲᚮW q~K e{K>O#Qbl.嵂[5 h&5'T趧'*4pj=G<&! CP0j)n4ttUe~,ݭw9Q$X4:3N-1PPm*~~|E_o!P%OvAP!A#atO s ~*`'n_x p@|\ަQޒCO.y8H@aa ޚ/o0Ё%9 [n^!'BO\ bg}LJj' %Qh}A.pr`y?I˄,D#/P`@-iH-_9d83*09*wڑ%\pDkFC:+NVNQ:!̝xH9r35v[mFʹv&:,5QΕ}Fu ]Yq`1D y_ 09Q&-=Ksic9KӖ˄Y9fvN \إU9U\\3c=&pS-xyd[4&%Ȫl4~|*\іbV:+y۷a[qgŌK+5GDrOFr dZF;jД,JoU9֡Hv h0hNGf@Y.AY1J}qo}Fpg]0 -6"^Pӻ}^ΛqcTh+L Xr&&9ěKHnTs`( Q+w7B$eFz@ː"1|V_ܠ~}-0pU nQʮcbФqoy*ucpOP#,Z0IƝr)xR.>ՐTC}L`g7Ń^ImzzxWkh *JM|՛#8~*E@#]]Oד?<9S~Vy5h̲VL} ,U^rͥ濹/l嘈B0r\(ÊUMTPP^irГ% (|f3.L94Lsq23"d՚} L]n35 mMaͣ7pY\ OLLrB$Ssɺ=1NniAtS\jbDj Ng)0Ȑ`'+n7ҁ&8(-#9k{/gBD :[VƷ=+ٖ``rp$B2T,Xe ToN>wKi݂f} 'LADu:z¬0@4x~9r, r328)Нna&|KIN{43; uh:-$'fk{w߿n}8=%,wլXQuWXоkYv}>$K9z )De׻U܍ϒVlm*%HNN+w|2t:_ge)+EK PK r]Є~<R+y`M^x_2svuX ;ӓB ۬/o m&zIֿFCf(m8IͅYF-}cDc7}/ɕ|h7g$Z.#xE]rH!K\ SP6a׷ͺ`)$iL^15p3"/6K.;<(qQIõ"&,@:DKxڣDA`?x9hDin!B5D\Ҷ|1Z&ߨZi^!]4:xBmx4i&uǙiD̟2Q%ZblxT&,v$.0뱭 9/^ z^/v~ B4endstream endobj 49 0 obj 3284 endobj 61 0 obj <> stream xZ[o~#}\P/ Mk RG@QT @hrMZv~}ΐP+gΜۜ~ܐn7ԏ~w_Q[C9\/ g5U-Uzq)^ז{n(nk#6WDۋoC}q\?ܐ-š6<5~q}3nZQb[?kiw~iЈ4~ڡ9uԵ6llO~ESdq $OARkz W5( IP,솶6\%;5&>—h #UZll&klZK4R6э{ܪM#xB)- 9lw֛ IZu?1lV[0 ͆jCƨ?0i4? 4dCc$ڨ˘C74@DQs#Wm`;oOq1 `[kb\y_ @aLK̖bU'ദ;ZIAѓm>O*037IcL~-щ!:K͸ʇ~b`{aCj]mL]qAjH+jwoy?}tZ+Q+Td~<\ݼzo+"?DP/5nO0Voۻm+^{Et ";c;'2]W4 Sikpm;ٍ~hNIМ'zJN.=QQ] .uijǛKZ ZJM9Sµc ɜ Jqtτ.嶼z7n.EŴu? 8IBIB$aFwSZƙgPVp“I4r H'\|7xšHΧV6TUیJ\?Z*iʰ+fSxaQ:TGs_>+WYU0a90KjNO*ހR% aQ)V6,Y@ڒ )DaLVQQ(gҖ$ JWETDAx>^I+bWEz?3Rd cY"*UP I(t!Q\($ [MP>!D3F겹 >W,$P̪D`bPT;_\shR>7 h8l(&.!j*  " $_BI\(RT3DN!䋷3U8s $̗Q7$IU ՈºdIF>o~ǿ}9/@sOD$Y@Wp΃Ys%m#ΰgwS}К(lrCL#(K-)a}% KclD8+h_Gj0R!cHDP &A|/r%K_J R(pF: uޭӌkԢ<0Ff"$Rܶc74эNIm 2YJvDi{C봟q@am(/ԡ)^BvxND?á#9^ؾ~1>; `pjYGfкbC:27,9"`RY'sÑìf 2]+tYfOfT ' M}lMҀ(r+.fV9(xw jPK_"qeX ˤkƅ8=mm|Eׂ&ļԴpӜ^iOpv]XLcH; I@?c K &Jֆ"J5t `ѩ XoYx/Sؼm,xj WeP;/J߽*hoݵp3+3` XsLDkTWX*5{3r.7 2gv8$cԼM't)SerTȃ۽^fgVЙ/vNP#K:|SZLs?F![fo$b-']4w@n Wg߶?|#.O1 XH-$йG(](ٙX~sx4 _knѮ1;OAߥ|R#KA! KY)HJ|o9GQRwUDY׈KL(#Kd>־ K̕C*(4{kmP" ͮ9JIiS=~os4FiOxqu~<'ؓySA} ~iõbhm#.oG " 26?E 'rĬ)^BJȇф3'e4O4:*'`ssy B&/g&8Z?sێۡ{K8K- ^AĀe/?'N=Z%* +ќD$ H>|1Qn7?_7pőulendstream endobj 62 0 obj 3347 endobj 65 0 obj <> stream xZK>l|}p(r@Cl㙝ʯOI/ۀ &|Z0,I6g>-Zmߝz T;.,~RPnV*|sBxyoDk=|"=ujT ʽ__X] Rg a.-m$LkaQυHK}{迉Gs?9ZQp6 MQ>-^ofdκ> .,7DEMz1ApIynXZz}^ { paNU_a*>wUYuKbgfOVA5PU6p\ŒK ' *tpA=S7Z-گoX>ۣvTclmHݹK>ԓeݯkӐ^g%xn*\I.sNk48hJfd%7,xBaǛ~_AZij?Kvsrtߦ%pS18TT.19xy paz&Fr:(R cq.3 QHD9PlHj'˅AU6^3bR^8-|U9UDʶbA6ԄE-Qks^>1vDrHO  dh\IjXvib@ (XVÛwWc z,|6B.\>p;0TRo ,u+zvn!~nݭ‚ r~tWݪ9tۡhM0b F A6:3FC?+~~me@SJ)$V^;F+ʬ2ppYRa%Ϣr 賟-MÃsP Ny||c*.!gdDl^k{4R=잆5qhÚJm<U;)@kn qyqTwE{xI():5X h  ᦶ$lɆS(h"dcLjjB*r$.z"dGO4C!-m//iPߡ^~s6ɇB`e8Wm2,];z8}?xCY ja,jaA/Ƃ/Ds`~SY"AvOHZǛ1{N g R inSR8ȫD_Rg QߙCgB+@Vp]p O%>PeRhs#@l4n"diU=7&V.4$L,%c{1u#̼XzBS%zW&fw:C p(x`K: vwp2̰Of6š$/' ƃ ܮ2mγwЗ*`(E#c:5@]WE9=l՗[ p8G ΁*W?Lz4; Xx|5g*NLҗ;h>5s]AP!I|h|ܥDNtޏþj6]c+XXE/gQq/`E.+Hj:_ܷPow׮$BCe 3tRW茾t='R!-QC:csF>C* ˡL0 louqrV4kIVpG 20%! rRTDq*w \=bpА1 *IPD"4HM<&4\ew#U&8^~=5"ˑD\nOS1h'+ȱM&qN/5 6?N2뮎z{ZYzN0Pmynjݦ+~ #:}߫7tOs|i* TM#R ˪ Qb&'S,ƕ@tUBܚ=;rƄ7m Sӕg+S" "8T+d?bDuƷ 7i܌H,#ϗ&80 bB6lw330zTpl Gt)c>=AV:$a1te!@C!NՇl{ud !+UZYXfXF?ҎwML.)erex_ktfSSl03m)z-TeTd`p2`I5< ED]ԑ{7J1~^`OC*UU0k1y}.Kjdo,(BN0ۦj~CO$}zLy;]X)k "qg 1£~JIsfھx7h[`m V/60B @Xwm&f&u/usN)|;lSY_ #hbܮa KEG 7} Rc~%EB&E+a alT"UUnk-cod-`T:e..1d~˘P)0 0iarO ow:fQB"~j"yKR@±8Uy ^#ܬ0!cjـBxG evWT+A)+A.PJo6i^Vݘ}SXn@=Sŋ7ɡtG5_h0hhm\juGCIB7c&l *$hft0>X^P>vr p+[~ω]˖+&^'\ "#4Q?~g cRprcpQI N^ tf/,U1EmHQ By?xul^pHp mMO [F#-,L0x?~И5O.P¥pEfٖѹuN}~=H52ԞOTot0**)<0; O ;_,/Qaendstream endobj 66 0 obj 3167 endobj 69 0 obj <> stream xY[o6.1SeN&؇m"<#ڎ$[ҬCię$ES|~ٔٔ_k^^6ĭv- +l-(! &7w~n }{_8"4)Li=hA暳ԛ՛~ؽ\J}ޮ^kB ͌q_)6${"]Z(I/p_a('Vi֞Ƶۯ1pw۵uذ뻩j{$7UfLx@,9@DX%.yg2Vi\ P< }rʁk?Z@$Z?yǧil[Ϛ Xjjv\*f8Y 9usl7K5~RϽcMzuP p#ʭ%7K[T#ښ-C/>YǯZ,PJsJS;%VzA0#Upg0 ˲Z(|5NJ;?|Ra|F%q7&lG0٥7/5?B$*ٺbb!h g!>w3D-EPDQ', #d:,z2d z4'lcl{ A{C듄níaE712K^rӇLәbsTpkY e~ |1UPƠ_ihv.ZLeeQAZ+Lh1l3-=؛[fR~ #-p] ڌw9 C" E()s2L 3~?9r5zDy?CQOD"7S%6_Ǔ9dqRpDUc ;\B,ߝEd-+CZ##ߜ DBrRUяl7vL60!eb:}[簂4Je:imP2'pl#=2O$+}&KOSB2E`|+e]i@=XyHF2;Cۮީe(!Gcu^cR#Bd%%0eԘ)3dk1. U3m0 3) EXsr)`m.'~LMU0ծp!_Dۦ5CRΚ#=Uݣy6%F ]Q H]N_@uB+ *]I|pmT"La֍9q e8aA(cb9nGɪp|)j,)N"v(c %RgJзŃÅb\n4w;|&@I!!<2e{ߴXQs3Naܓ-sוlq넻"I׉kТ ! <,%\ 7Oo2&QǤ/1`{ 4 ^џً2?}[6YYby Zs2980){H<RgDخDr&.rpH8,d 〯+f+^&|`< ,-ڧkn+ꇖendstream endobj 70 0 obj 2265 endobj 73 0 obj <> stream xZ[oγAisCn.ȴDmv?3WP+Zv  p|;gF|.0"j<{.?vvyrd4aH("PB"&dAbQQ^9CXwwv.HIXVDP1ُAL} YZ0X]^BT7(#Lͽ[[!4 cwrNFIp??s3a&y;uq$\R\`_/wv0H:0͠iqF*N_mÌYF 2,`Њ6dbQÌôy,a6gSI,뙖njlcsN^d8rlԮWA^ؿ87_#ʧb6MQ_^vrBݜb1cvk8 zdȯ#ƹMZss9ޟvVO;M&7OByE=12Mn̦t;/5r9|5ldׯawx^̘N9+Z^,>gSa;y _98Gun>mw^Cϻ_Dp;mXnO20@qGo߻/o)AFwxr k0 ÈӪ6aH{œ_rPQ&= J֕OE ʮ:eѲtzF $"UB$5ɲ?= 4s5ђEj, lΡh0&/ zDv|0`}*n%8kAj:2| պj˥ `DLxAB'cls1 m1cdw}:Uqy6 N#~ Dr5}z7NhP†O(ɚ]4eF{N Y=mC m j; xy 0T~YR%}EW@FqZ5?=֋ !x G6LA'7}vٜJst P(z}Pw#R vZ +:\|[xo9/&oLE.Pr%ýQѵ4) WP-2^?ajKA>Zˮjץ/L*>s>!Kב%og x*'AiLzsXDLK%wD|mP (^wsA) ^r7OW&\ae@ `" E91 ;&h% pyN"2d'*)y^~I%JwrdrѪ }ӉAfI98fɿd7w @YOo藸:l`Æk(Z ?)Jt7{JCuP:,9(slsGD0}= QAt/,G9ǎ~nw9BFXoʉ{o]].?]f({Տ?_; e_**D|Pb6!BKA)";ڨƕt4LTCfv*6Ƚ>hwԉC P=]s56H0,0Y$׷Zo%LfѴmFY'u4V&/æ[|׽ҫ{>^ne*7/endstream endobj 74 0 obj 2204 endobj 80 0 obj <> stream xXێ}_#D w<@ XY /#r;6/CҊOflJ\;ZJřSO3?D[Xnfݼ~U;bv&3)ՆI3ܼRk/n~WE+V0f %wͫ w7n2PWϤG>M`[(θb.PLg-> ]3;W]/YPW_OZ3R|98`Ĕhp^w=p yoWCqG%V|i=届gߋ2 ^_EF^͗:Wr6" \Օk*t"qSz)T=B㥾z9BDU0uT _6vL*6.Fge66CoCJy9Ɛ7af>:0KT#ɾib ф.I]0Z.}ܛf |҃LLqcX֔>c\ ]vҶ۸0vw];ң@O\[\}8AGԶD2Ψbc׷+W@YwSG~R*[\w6sc:!3-Or}9&™{.$S.ͦ}͊)v>D&R>zO b:!Uj2drK1 kpcVqjCXb\sQy?퍯B;|s "P.'o\ #0t1#L8Ҍ50c]6} 3l3A?؛"4yts9Ó`U#H /4^V2_~BCJS,=<5!@`zŒL\Nsɇǽ唛'j$UkίO;WRTCF(Ԥ-= Xc˥>:S4WΙ3@]]qԁžՎQQX ԁRrUMBl$.ر ߽w0r>d^$HJ~KҹU:8AǕ1@0Hҷb^IWlZspkDyLqǫdyc\~ߩk]?>{~ᆦO |[\?QIGWmu%60G"[ar (!QO7*AРkj-I4;Qߡ],s;yt3 =fʔ7zJS=MUIw &_*,C~ru:921HyI4TBtM[MK#)f=ǕBNB{{t<\YsZ'72"gaig,\o8 Ce$f_f?ބTendstream endobj 81 0 obj 2279 endobj 84 0 obj <> stream xZrGTШ}O$%!ڒY^3 b3a^jBbA2_| ğNj ҏf𿢲r{gU -UnsJ\k˾=bVVJ+SūdDXX n~~u%3q9<'FƱgqt3i SqlAe%-ʿVд{7*íq?l+Jf<4yf<6= >0΃]`PhU0C^q*KueLj)h%4K/H??+JY1eMO%Y$G=F3+'xT۟*-wu`jbZ6 (%4ECqu|~jlXeM%Tn&=wMD3WmSz%pƮJd׭wBZ<t{S oH0U7Ej ,uE֮t^ DMa$gA>xUFt]V PC+f KmHHsJ[MD=hYNpˌIl uNkτ@gpJj12na/hu0#dѵðk>z |}%T#S^ـֶ>4]Lև\ūƵF=L!M L+s8nPiz˶F?TYTE(m!c mP}X߷Mػcq<:ؚSA~0c1.T i 6cؼ | o;w%kL5Gf" !EA ڄ "%m*{ `?`mv}0E*!*A %`(tj8HBy1%!&K s1z/,AT@X?_&G~hH2?7Tr @B`tu?Gîmw UxqL(vaSVj "@ _a#+: )Ԇ(B ~nt< Q7H~t4̜m3'!dk?n#TBPx@`XJ6.Bys{q}nq/ zqo7\|{:Qƌag_&RT5\om 1 F?r/#$E*_we T|, ٺ,hD2 DVNzDfJN#F*rPYSN| j4o9D r+h> #EhN]}WwQ8[f`,g^tnQTw' Fq=<(NҮl(q꾩",cmϡBU|ZNVp /V;n0p ͟eeH/K`,1&59ᆅ>[i믢ss9PJc l2V =0(T/D8F?cpN V5R榴$QL."}{1uCN|kl{?4@ H~e$F\ :3'vп&߫r_LTI|?f_D{29IœqP̳L[K ik\8{Spؾߗla])hj`-tMXVNIp7~h{)9},I /Kn4IcAalϢUB&3`x d|>3ydrkuTb@Faj0=v`b̜\Qٓ)̢͠:w"0)2WXeLpJi/Ts09ݜ2bw/=Bwy&I(]BHO[m?f\( MaJ`8K8qWD'5z1@&Ib2u2ޅY)`W\5~3 [lH@Wu3~x u77oĈpcB66H煼>rK;m54gjld"a)@;]0,QOf¢^]:*N:+]$)P ظGzBhZ ׁ$ĚC*#B{љuVIwJPn'NGȽ|Pi\VյaǁKADh0uy ^=3aXPO0[c/3i7 PdL)eVw?.6J}ÇHlY*N9mYANF !$CDZHO U^5^ƶ'#]#!A~GBxĸ.nЬ{8z}O@^5lc |A' ?$p1{^[|>8QuaOtr/ 5u#9-1m_ۭwT=S-`%8LjsG c-ʷܓ֕mFfтMj=+4ȁ1vVNq3|<1&ǧhFK(ѢtZ6بtEHu_A}Q!ωijPps-lp{A' 6  mF(J(H%vcv=Gj!͉A tQhԬw[W`jB<6U w_̊{5"{o<Rm҈k l mH&x;.p^WZݠjĬFa:RޝS;/.Ln,ū`_9qVRC]OOHj:-홎XӁԨ_G%m@f#ҪcSdDJb12wɇ>찦R?wRߠxw=b:d Ѹ޹ڱGFq%k|qF bw5q&5m? 䏕Rg͗{#M 8~B$X>UurOَOݧG:+30r}2b~ HszcE\H 9~%''xnl?V9J*v >0> stream x[[G^#1?ʾݩ%($v@0hQ$ݦmC{v]f!1CuswNf3ğwͨK?w~ 5սqVS5R\ז=< HBjK,uhV31 ^3;dz^>~o7WZ+@n#7>OՆ[QZsci|Wۋb3IkI}ːP!xrtMaqlmtOwTes7TI]svgP7ŷM>6LZaPiC ˦aM*_dDy{T$F8=on9*HaTZS>uiS7E1JvL~Wv?LE(/ [s,ܣ|,ݐ=l5v{/r-ipoW% aHkG?f~>:jqEp2If9nD-}TۄiUj-c oMra{_Bqo6q/kag* _BĝXk0h=g'KCf[\7CF۷(δo.@m/v팰v‰F'j~k}Gc9zMDQxs*Jx 8:v.sȻtxhR`{VEUSbIZ›K97-eăyrk.8A4Tbu}T`"@Lb/fM R^(E cD jEj!uBSRvbq7Mrwx\)o!oXhC05!SĠ55"j144p t=.&6u„r.nN+84hj(|CX_a g`'  3 dxKvB ZyJCuLIAOϞëΠv?=?{IO^>׹?'=<Us~Ӌ [^er/~`U:u'<@B9sm8Ojt[,ޝ >; E1q|} d_ Ӗݶ]5RI]e;`x> A~ }GT}xuQAޒ-sBA 7( ;GJ##y !5.- ǁ@׷AsceU]ԌNfo9E:_bCQ*SH| \1ir_#&>Ym+ijoPoJ^(G8xhw0fiѱ:=uHh9p ! dc?e.4hÒdfm\#I 9ra1u=G0:]tQ!GSm&jT!XppP=]¾BŽI\k 6R1,9M6|YG-)S2OvdJþn!{h(rщG.PJG^S0A ^.V*@4D(G4Z@ذ_,yVk/]xߢ_E/%&!0pz[ e23"j>0&z6Eph^t"HSG X26^- \ 3]u!)EG_.,'k@֔r%ݬuDl0:η9'$ T'/_a=MoRwPLDJ.Q~=&WD[J]촬">]/E|`ub]K;lRoA’5 &GWX ?1SHv`"ى=&ꘫ'X*MA\wQV`]BL7|!;h`&)n6$oc  8"s6.70Ym\9æ}wˁS-BpA]*7'?ҰS:ÿ`´Ѡ1`id֞߃\BA*闘 11l6]V@s] ] b? VVp }Nf Ԁfs5$/YzFż4!zO\Ѷ"w~EQA= ? >_QD |χ3 \AQDo OHޮZLK2]q(%3_1d6N(6Ȗ{dYH"ܜ%]. `O٥SEw|5c> %/b.VKq@BJX<"En]J @їA+SW84v\A{UڗD@w1Jqpf .775B&ViJp=.8/:o*Pp|{-XՕendstream endobj 89 0 obj 3778 endobj 92 0 obj <> stream x\oǙ77ǍѴa n,2F($Z﫮gOUw9T լޏ_Nj ꞅn?\^+:k(g˷ tYGBKqx&^}s_ J;+{ΈRPjų?8i*N;|Fy'2q)zI&ӷu e³~uϹSWۛ>jiI o>#_?aW;7U -Fq˔lZ/)i_40n}[uA;Xߴ ދWRs_<|l}aw= qݍ{vD0>-w)8_,arǭ_Ś\okkHPNk;nap옶&)Fs(ճڒD'A?n`EKRJlX }M$g` ~& y7Mzܚ(HaTuR+b$t˂`J;PII*uJ/ϖhWCwV7T q#EJEҶUd sQD>?$.`dƌK/s?"`af򦩦bcm5Q~x?pvZvBXI;pp#˿.ŋ/ŋ~?/{_nsE6PœUm3D>ʣV>_h0 e,,2dv{轷`gXJTe- \땒َ &xw5ÐBDM}ALҌof{Uw>B!Z%**oYdApSxɔEX2"u9ѾE*vi82Q3 P@'DCT0@0 &+I^N+BX8|>2"RIC 1!W{ɓ}(bUu'o1UdPTwD|E.uRp&d{8% A~2M9Wy'v>%r>BB< .RţT>@8!dA.SN=aPtC8S8,ڦ\Ɏ@ /\S?p]-jg~$>߁a(aǭ߸ '"¡WīoHH;:m& KaR-9JaYH9,,\#4DAvX-E_t$Hu"|#Չ*F* ,"j*gBŻ7Hv~Ow#8T. 36nq/ce>j۫8ylN:*s6l<|E[U+C>KN>8iNޙU,zf 3w^r >lW)"ؽHo8Z/ xV-F3с?# V_Xd59ͪ_o3̦O o.cɸOo4K۲\fy003&1gYH@t,#|Ac-l Yڗ!:} b;jjoVj { ݣ0\I0{e>T}K{~hF#aHmDZ(j"ҷv5km:IY̴@꫺I3gMHO{Kco&xW]ۼvϙzaڹtH؎yՆ\B`W:NIZc#<7w6;(A"&x~06|((%n8૟1f>k\fL}d8FñۘikDsmn_-`3YA{A1/I6bY2&BCZ?4맆: zjVzx'`L)l]SQF#V}^CJ'-WviZJr aT`g},)54.փ0D16@T)T&JЎ,hR 3Hзo+^TI@XFTz-)lR =,=Q .-J!K-oVQEU^ -zwOr\0m4d;PE_NG~XXn~Ā*R;SjBw@&RS21C1Gի4ѱ G}ZFAL\Km4/t6QYF>.#Kxk"H2Nތh6D;E;h\m|X[6U ~ 5=98E"26حtcM܎П: !9!؍ip\"-%TTuV$x U7_%UfH6-w /ed:BpqKl7 4ڬn`9Q1t|MdEvNf2NqC&DyθWˠXԬ*P fYIe [y?PTq,.a9C=r:!-5,AʘoW?}&~U/P)vF)لsDGڏ,HhۛfS )i:BNҩ><1VӬ  OfZ)H鸤YK@+H쩒V Ul4^Z vTV} Y6!K!,OqVq1]7Kƅ$G'.=`Fnw FvfY@RVNUuIxt9=џ!͗J9_9]IɣR JOhtJZYxj|Gzw%ޘrKcӸ9a4fI@q3.+9LX#Z<)уJ.AQE0 FZI|#9= 7?yF$1kV` uׅӜ2}g( 2o*Gɻ(juăǪ\4b&\sϧSz2?=HLBrQ#X!lv:шT`+?3d=vtMS#7U| ,|Hm775 b"D 6:p8gʀu@;Ѧk&GmT404.ևjmU'ǚUE׎bÉ=tt]5Ծ$9 jtqrj C3fydw MlICI^3p(JC d%f)?Y 8 RӸз V)Xm j ^ K~aj)j< V.QmI's"he:o]J \Oevك<tpWm_6x M߸x.:F"ڔnZv)ǎQ7!ͳ 6/Qr ln:P3E$)B܆dP[I S4 ƞ  n;ߛ䰋l ANĉq␙8JG6Í0@t14-d0c@M"oٱҰdž{~H D0XE-j֘upͯkx >V L5KbG6g|6z> stream x[[7v81>Ɉk elGldPS#U7UUk͟!yxIx0౫sw Żw ?⛫g/U,bquwRT^]W^\m.g__[p^9WZ,ʝ[\^< /zJ*YKٯۧ*eJoGfΥGFdTM7(x%v}֕<-CV_?Q_ysJE6msYW:%U$fmfN+l:>*JW:&|UmcR$JȚssFQXbHR⦪beD}ݷ-^ 4#w5u+Z55:XģuTt7QJ长?r2.lom~S6EOMcU:J^o6*DcwLM 2ǿSW8fc\]KZ#VL,pp,9|yEy.y2c_>/|\}QcS+$$GWb4ejާ>Y}K%M%5XV{V:sh_Ω\~=*QVg6~b`s~JnW>cyWE죨Dh+=yy,'<Ϲ 퍛e<y9ݦ>z 63݊],dQ9@) 2|PO- ΅Uj`,36gȚer+|0@ il%dYyVrkA"!__  =$VuxijWY*k|ϡfRc3y<7_gɿ..1`RM$+wTJhcqxӁѪ{5g࿗зXd6R4vM ͥs}l$􃌧M?@Vc~Aqc(2rӬЦJ5>| kx <;Uc3юol#dVŮ!1-)=uա-8q::ʠ+q'{zDjus '@;BJVNawapF%ľJR'Z/D:}p]nZM_4c#m@iu$Exd!YW#x5TRp〺%vC:b7v{H:3ٗɱa\>*8gCovlTU3`,Ĝv7B8dL.B:mSjG`씵*2`_-1~u0 P8A OVZ #*'Tc:9FHXxēPb$øV^=4Uqyj ܡ&CS~("nZIuT Prm Ff#۝7 UۏMFDGe+尚c#}aMu cXIs%H9À9þYd]_M)@m Ok>Am&O]vv>ld*MáY}i~3I[.?wo-&ft en `1$Lht8S5(0~)0y @gIs2b &PCA`DŽM3.*v"w!jVC\PDZ"aoc9v7LRXcLCۮ@]Y3c#GY&iޗ-<-^f@+At&w_KqvYMPň-*T5;۰S I!3CvB4I'-䧬k;У) un ٩hL7-5ŒOa/h4"cJquU So =@W2fbC[-.Sנw.vAn"Se|Oasg+'$IᦠZSҟfd802\!Rd66A!_t$Ri,j?HF4,>ہ!B,tA*ҙ j[%'@<}w Y8K ):_Vų?s/7? .[a[?ZOR LQ p_L3W% bq7I&E[ńß6CD6{s?M!3͇rhfry;hV{|D;L$;hJ>o !+YB ۿUL|P|r7ݺ pߋ%: M;BDb7ޑ4J&gZܚc2vÜ`Pe?&.Arw|EL|9;Մ[>  †r%{n;)>I}bԞ7I}1yžK8/PEz[:UjN :auSGuO7 f 3o R֎F::rO5!pAfbPp;:.t=I'Q+= MeT[ԆL̴@K :u2Iϔ5Wnzl 8|d4()SoiK$F 0д'ǻT"T(+-/ysI/ g;9SD(:̯I2SI*`|_\yPB%g;d6&G27gtwn ^oCbRc#.茑#yщ/xwnDZ\˹,+ ɉ?NQ #P'GL"A)KB3NHq mwMt l=߉#2ۆL#LṘ~` k rz SpuvfNR£JԩD?J<(ܣXI._: \5O>&ansGXJU =̨29.@ VxYMZzNd߼~'iŻ]1BߔO^8c9&HAu>P/jBޱK.;Jta48  ^ pUP+4͋f&Tc-YAW׫SŻ> stream x[Ko>!o~?PNy)aEIH.TggvnQ)aR_NE'C~|0F㘼wMa6ft8s8浞9N<YGRkÅsdU]e>[~s.᫠0;j2+2~I/BwMN*-cSIY?<BGI,I=#%TI8|ķ ^yudg&xMҪcg? >>oꗬ] G-R,&۴/^|9wa;h]Z]laP:U?>Y3g]ln6괴J-Cjw8l27,t@ߌepDCPysE~UIvw(]ǘi83Z gtG,Y?NTpo%mgu?[S&G01%CgJ V0k_wo)Ώw!-.!uT`j+)D\`b֊D |G6_AR/ϯ)7x!`D o9mf!NT,MvZbXS䙿zpXej]X#InRրBS f:ᰀ*mItsu~77QӊI#0+!`ĉ/3KeF 3:BKqbe/iK(lpFF`41LFOb) {@~⁆-# KB}!0b '}@iZQP0QCxF2EF5o9l_'de??"Ѡ`lPH@̈$-FȲ:]хT/V&<-YHJLVHcObEIX1rn MBK(i;JC{=$#mk/HW=>DmjY&}+ZAE~MO,$3|Ww91˂lpU=7fF7E MkC\}l)4E\Ƞ!8BYQLz&bpno?I%n@^+2qw_D|Q)CfUExI[ڢ:pSZ:/iS`c٬äPp&!L-w bm _#4Abj@_C۰%W 1)}oju>vdn}bChHސK=@ |v} Qn}߱mr*\(*G/,3H+->x $>=1dMhݧRdؕEF>kБ#g9qڛ&;,ήAv c" ߯w>D(39Dk!R{d puoˎ #nu&4|]O&cYizOK;ӐW6GBa6IAhʞ>K1(:5_`)!@6qZ8dPaOQ$9ØZg\I R\kwh ),YcyUnY)p{>f^Sė:4Za \FIU*E |Ӗt, D>#)7vbd+GUM[Tde9)yR'䜌 1;NaC N֎MӢgvpx5ܧzܰE=c   mn׻Ga,ڈlZJY/ħ)wWa=<y-S*H=BT(YTR5S(XBހ>13 b5 _*5Go nzQR0>KobJ^&TOr)X7RKGd?3icNL~4מ ~| ]Cw</2/\>Rs>ZBP{,ğм'5׋}9^mp![֠5"oR0_'=?`접[[lus}k,4րvOU´I rA-^`̶8*cC®ZV#PPܑ5YhluZaڍ믓E*?Bg4k4Z~YҲ^22hfPOzAL_xLځC5W6K+U`#)3F'5s5H)MlP f˧uI-azh!L]/P ȼs;WӾ;\Z#~=vkwv9(-lOoa.f25 o63j5'WS˧(ǰ^0!_nmi1$tεwuut-;sH}lDu-ikOC,фF37nN ͞RԔ,\mtKp*&ZM_x}(O9lI "ⅎ:(!+g<(GVSN䮾4XLUĵT-IQLAtjŀSbxy(f07'E1X\_UP^C+=A}> AW)FsFed)yc.ABQH1h?iY8b^^g,WSS2%l` 5LpEhW?Iv շ slmPSs=pw%^+ֈ\k|ۻFFT5CtI=Aۤ_~ E&3*/x՗*GVUE+lcG1aRH&gkZ;#Ӟ\ o޴ l8<hY(]*j^+8OZ:}އ,A( n,:RjXq+qsj閉-5둶xqu1IЋ*GU<_'-:\' FFQmXPu!5nPKwdsmaOx]y%8.%tҌ L3]3xUEz^IJ'^HD*,S4P*\}CSI \yp!VP]3tvJpM禤_4 OӇ@͉%71j_xZv%؃k(6AT%sH\f,a䇽1Etpy?endstream endobj 113 0 obj 3579 endobj 116 0 obj <> stream x[IܸkGd\l>8¶n,V[Hf_x 3Ur8:Hb }o 膸?ͧ76t6x滿Ee ln8h*6oފw}'xD r|ʈVͻ7ooN*Kš?w?IX_P~:=kTVBx7 e]PqXŇhW4-2Y_.pt|;ڊ(MPVp;nDSP8}.Xv;/nTJ۸0nFm|mխsp{‰qK}_w% jxΡnx~*Q[?mek+,*}NZq+O 9Y܂tTܮ9E 4 :AWh6:X!&uJ1?]2LE!{/"gtzyhjNQ[ؘ*ōTJZj6[VAXva&k+)1k*i-kGK̴1^TU4<ƳZܓ(DZKgT^DΟxd[MH[rh Gŭc?;kiθ+-EEe4c. ke\?shITrR) -n4J;a_ň*o;=(OLU@`?Ŗ fgS2^tMI(ZSZ̬3 F"IWx)3yU`"(B|s$u$E/ F@N{ J\2SuW0Mu┬f:1rIb!"" -"w #o=P QԣaP IĢxh+?KZr*pDQĒPzm jfRZ1쇠BXε"aY3Gk..s)ă#j}o&o ޥb{zi%Ԅ(_%!v4+0 D#%V l6 ʥ8K罷;V)u ^X9~]ȝơʫBfuv5, qxЊD QI't~鵲}~(J] QID57nij4s4'CE*8vhܣz&t" شbA'#TGQÞ2ih=B/{TZԾ[UU*fR|jOp#feu_&z;^3g,ɭ?B`i)&Ѣ><` iMB%ػ_B@RǮ)ۏZuݢa$T#d@H׷y w4 `gY|* 貳xT q? I31$9 v!ĪT)z{sJ7B7tOfRO;1TJ w/C:tpFXSȖ DREA & ^0^-ӊ"znʠ9!&N5]lGYtCs8u/45m-@qmIxY6P#Vcg@SޚU㊎<̇+93ܝ$cšv=:fJaTn2"cPhL}xl '4~49dQ:YhE7:A`\d*:OQ1^V"!KEw]xX r>sIe1`%9(-c %F k3(SRe)cs!3ۧ27(1aUHR]Wʕ@~w]zo.qm}F:K* =Cv $$t1>kLBBQc1营܉Bݮ?vx:x+><LRv"Sh{nB7iv2ǮktBUt\D]TD>hRTx| @5IurTĊMeÒDȦ_R9V)~pnxE´I%(×`4}Nt$o[!]fhH>] *~:R O=F)fId>f8 Do ާ'`˧Q .t ҍjKEjŎ,q~ J  gh.n/I1ĽbIOī_΄Ƌ;0:+A&׍r.L%Dz Mp 7 .ٌЬ YSD]+XcOpA,' S9{}37O ޖnx }kɌxC,LhɌ,E3 49Oyi5*8=c+%Mgml.e'AEY˪? kV ,͎ZIӟ` g!#('7Og9\pfp~2J`čw{zrf>\ce͢,λ nr*y>o#oTTF!౐q Ŷp5nv(3"/E o|]/ԱG +쥬G.疈Ülf\ճq[9fn-PR: (#BYک67&7js 9js˩6 R,TI/6J2,aYB!SWB%a')q #.N^+MUүߵlݮJo`lhJ^ݎ_ţ;QAb" RX7:վd5*p:FiR&rozz`;I /,}USjՆ>lҧXXc V ~LĸMi7@m2B1$^ 9EF^Q'H0-@^k_ lD9m,j1Π:vR.ɗ4Ůk e,@i: <ͭԱ䛕6 1KVf[|YJb)NAL,\ܵÀE,@",jJ-~;_sX@-oxo2\q$}C\ޙf:W4}Z컿sIp&lah*uKXWH%ʻ`W\ l 3?Oڠ!endstream endobj 117 0 obj 4322 endobj 120 0 obj <> stream x\I䶕2b.JvhlGbOEajLV%=T<$U>(fby~\YÇ?"a/&?+%d#}g跏"2B?a|*1fѾIiejaA7~$5N!"<{OۑtGP4ZWh\bcJhctdQƟKsN㚼6!Τ*A g,]x^f"y̥1A.C9Wa KW_E*93l&ٗ(އUո>OF?vq""vic.,*dX:-BEan*J r{aܓTZk/HIJNiW :rHȐCm< j^\QgQvNFޔT|%Aq W2R2m_xYMVkZռHa-^/>},n[ ¢ "dI?:Ϛ(MRxחAz3{WsӈZ:+,éUUW=/Hݔ<5Zmծ !o.VhR-{- E'P`]ZpP)jbh`D_u`hSd|*+b}}8]>%S dDMP PJiPK~ÔFjj"vu, Af ^BL6o 6Y:՚)Z15Xvw8tx,@+f7ב*yA]> WNrUzA | 2p8Ɨ?+'0t]S9-DKΞs3n( Tl_DP֜[<)2t8ꎥEFL7}$Uqm k>xI--FVx ~p mҷEJ̕Q*ᅯ0*_A=O I9}4[Ncn 7h.IU#|E"X7&s߼$v\cąpi͊$=/dM*cK[ǔjdX@^.4r7^*h[$s3L-L";3h,5 ŚB;z(go}P ˩|? ;X#dO@4B u- `}qBw skJ)]Yg97؍ v'_°LPXhsXa=Xcnh4XXari]*0MnyݶC7mF뿻3("hxK%.b=d8<(D}wKÕoN#O 5a`I.}PQ0"w: Ro:{ P Y0 zjkZw"!i-r.8=PiWIQw8#rH(C5dD+ё]łKݶ~ -Y.sbbòޱ۔HsC=HBƁyamYJJǝ@ 7:HDl[H /=%p؋Xo^/ҳYt|P&i?ýwUjٖҗM{ԳQy|nйLYk33M)p|%֢ 8Q+7lvs(oRJf#1D(pzGGQ+ԏ)%02!k9HN2bpf#-,GG|Oϛbb J}n |Eqsî`Hdn qWϑ͎>Co9u,@z55tċvP%(h‹BA\9`ӓ-ow A Ufl% R9xMtՇ_:'(-kXv$8"X PqP|ȃȃlxM0TDFKl,[wj;'<*ݣ ]Zc{9. O hi۪=}\{6`*\n gGn%繪/p@ 'qVA.V($HbK5}W'`_4,%iұFײH24HOEyU-B,y+$bٗ>tT-DdcudP r!M}ֆz AS@ Wב \*B,:{L&Dl7i[PKH#{G#iϮַʭ!"+ut~@_:PBoQ4j:(d񶾊CS= Z5o\.,} '1`#"Xlza6"m4rl c'ac江T1}9X3ЉCڪT!ǚ aYi{DJ۶NUuYr5TRyt " B+bFܸrX0*SD[(c9Vb}rb L\ǚ!-Gjr d@JN u+T4i}GDiZE9‹lFƦ{ 9#bq@dHxbĊi5CxG_ S3f/GQG>P긤fO{B40,IjoaNͩY|RY~)&2sH9áPc21#ɿmc@DD xH|pLOX-h"f]E[- [/Ԍ7NY0F ۔1ѺFruX;Fx;}%haHiF-3땎ŻTLVߪCucn] cfR-SH~LmBq;x`/\Ge^| ˶#QBKR&Yc!.o`&̽}iW¯qFB$BOXb3ֆ\Q mQ(bPe0~4ۚˠǤaۆ*+d/$iw-V̆A"#xp0 PwDIO/|:Г6h.K_=??F>ud[Vh lE zFguSq/f)JbR(LH^ 2)梆Yl.Bi>2I*֐q+J EAt#,`vɼ`pXaɻ rPĠԊcN yTOE~tNЅ6g13cfcvs͹5mds$DfKޣ{3EuhKS p21IϋUG ۦ( .8drLDhZtcylZ =CJP1FlҳeIi>3O@zF['㷆8Bw @?'9# .q(BakڸO _Mٝu @ (_$s[͢g\ =ldӡ\¤5$w^ݑ(G~mo0igduH0Ρ{b7\[9S]'% NeHR(}"5Z訲M|Ό[gοXk2iR%uUEd*G Gm }-Sl8!)Įym=[?O#8:U=u*0C$N ;h;[asyH[|y${BOG,~ 1YJ~CXɺo(ET>~ALs qĄw.1mnh0,i1.am֋6$k/^4fex-\E*CB N8iVqwt Pٴ/A<4Zbip#o-t9^{{cK' -|N|N‹4O_߁9 [|^. wUߥM!B-7g)Q.н;%MfsuDH6in93 ZNfd04}j,X;vz3y>yLAۯ%a926g֊ySLHJ[ֶJD7x\wendstream endobj 121 0 obj 4843 endobj 124 0 obj <> stream x[Ky`7FF4ݽ X,]9drh83ZKLJ:>U&|0LW_=麮uէOl|ZOY9p?`ׂWL_+?^˷o>k*+.W^e]zE|I>ҕNGm5wnO:Ȓ.IDQBf)TOtE%jgg[ * ~v|+SӺm\Bkx$$1 "\K1?W 5j֜ӇKڮu  \wG i-sWb$VVum,^Rʠ⤀ M4 WdAQqҊ: JK!_b`r?(F?%+.T4˯l Pk+%(ZdC{J751/8YD6`j`aJ2rDhEBD YE.l:Ep6ۤ&G+Mnhr9]J(ys}2lQIFbHMf¨ףSjoJ=t vq7UKʎR6qӱ1r.]B«Kf*-^I#s'd$5c{ Ȳ)R`w2V j]p*v04t:fY`wBl_7Ѝå@w>X(ĉnp#wS\9'o$6U6nzogb,o~#z@Cx&E޼cktQ C&g < xIcWhjWGͪb.ޜ]{ L&.pt8HJ'|䒝FG9oH|`~Т<"gM1.+,lh`#34d`j$ p":_Z8F_:tm2u^)>zjobT3,[%LE^umJG\!*(IHi]Ij?!Lt؇D"& e[:Kr3rA*d%ps2`s z ~ʤ563*b Y.gEp"y %k5F:ſ`]uJ_|DLidW"7xpSpi!$hMh)J#ƻ CגTY> =opsp1wgx UF"b}4Q*ys؆s;J!7붜5zްِ TC ,ƥ]$ 2~%_ʚPXvKNwL>QZQ9p;bo1!9F^Gt6>YaBT۶seSXI .:k| H};>˒Jx]^Ѱk% YTkC=N(FLAn_nPBU}n,XUាeFc lNk2܍d" H浒i=~0'8O`'޾a6^v:e?}PJS%i}Q% 3{J P ,)@$.߱o~G3KiEp)-$dE^}dkFl|ssͰB=sTqCȽ}Ip1A54R1Zڏs`*ڔCʧZ,#0[JMla1Nb- YVw/~ӊ a0uY\K^J&! H/1l=MtI簌M!2V]ZuN@B9+)k,.%KkWk-l($.-)G!1- A@ٕSF3^vvR]xYK ZZηo~.ŜL mT֘Y},gC`L TcqxL{çgG6(棆| R)~hIjjUgu?=KD,wsTH񼚑PQSoz,ph!&N \ɱ&UɅN.eJo,cEtؒ#N$7KAY5SZ t%U Θ$yJΓx .YO]'.BE߻bU.kyke??Hs"QOH]8ˆMU_ |!"ᒲ.Qpl9?2tFG>_c8EpZG]3>i=kfyfߏqCm4ͺfkQrRl+HKlLg%^ KZgYh '9Z? o5DzI07u&z&4$ÖTRg0 B:/) t>>bKgHYծ?̰L~mNT( |A6&T>dt,)O^"1jh#H6Ec vX=HqΖH)A␔U-eIRI c1&%A3v^m%Eש,5Z uoȁB\o(]lXM^qES?vC@ǧ8vҧ\5[r.x[RoB %lM3*ip|+J-v&&_kNz{h6}0{F~؎CٰoE9i9l4m*5B=L ')^Yr/MtfnGf͛'pJxE>O$z/&dO9׏aDJC4:Y.L2i4Aq4ܣJd~v-Jgh44$6#{g'f݉3u'd2%tVbT8l<%# g,=qAqDK$Ǻ}i3?E'zDZ~ Ec_bl!{= i1+4VfᬄW'_?\ {Dendstream endobj 125 0 obj 3804 endobj 128 0 obj <> stream x[I1Ifڵ/ 1Gg9drM\FMRj{U]\ tl_{[t?ŻnZnn~zYGՍ~n+PY)W팸*~՛n}ÐNv.+NRjn Dk>곴%ݣ{FegaAXBXi?%!˗y *m6nwSD!I#e>V-J}R^H ~N[L|Tu%q~OL&R/Ө mx#hH~y1Q)^Ri;aPAwZ}N`\F:n4/s1/~os^d0hƴDNw? 9L >XG1ZZevd  zëT„ZN+;ų#=ڤk壘wDk13M?TL}?i~yv^tZ"gR1~*q7$תwwdpQ"ӕb3񒃣XBQ8؞DGD@ 30A&c.I fJ:dZGFƴT!E(7!;9\;6Q"F}]M#N# O4Ed3_ ttα-ބ+ jsۘ14zx!*BAQX[z5fAPfx#OR \ٖxIa<" J0~XLK T )9(Xto1$vwb}`Ls<,~/: ANw> <&$s†@hvtD#^P`~9,~qWVfh~r"X! ՛V]=#9&1nQ~9W)h=uJ2!FWE;xF, 6,I1H%e( +BTIq@qȨgDO) c<9(0Z& %'))bX% ^ oM,>\dc!e @Bp[B1Mъ'bSdלpdU7)넡"+&;DgA?!%*Ad%m3!WŚ9< r $u*$&y/#X:t`LBJ\:$xKj,qwp (b<a Qq*d΁!l d-6[Hx%1 '!Oގ Y?@tX$asZH_l@ fٟ.!r-H)B:#a^XH㙣lw&>L79&"t> (0u~&ΈH,y5V|ö~ڞ2$m TeozD\z]S "$ y_"x"Y12r=+  j&.Af7Is?&L؁3_PT%eUA~qYi\?~k`@ _nc j2!J:%w:mq?9nq[urY ۘ$(Y%rsVKb\9/I Q3=\Sd|FC.C&uGyH)&E8$ĻAu;y2xx~]|M0[Z-~xtZgI۔Hf]@P8CmPtr//9n>%E<d@ кxrKJy.7u;qeK?el%sD #%/i[jhK(.! zFP[O4Mns^WA[u1ABhsHkW  !wޟ*؀ 3?O!QEܳpGWf-bnpSztbL$'dN+g BU;ABDI pʜ]y复wSrv 2J<)ic]/:Zf/MDF|Rs5s%C9I&KQqԼhWT*P!8YW(,%G`6xZFsҮpw:@QkS !vz䇨5 ÝBf8+ {AYb?wC rD܈ٕ OH4JMH$A/2pFt&z"Ժ皭\)&SuC3Fޫ#oEG&IzrSr_úiqb `L⹁D)HQ G__V%~<,mL_n ޭ nh m@!pm+#hf%-hJ>[U@_|x;bѷDOPMD-z(n!u00xN u`&{a xxڥa1(Sn! LqV%8͝0ubi9w:,d$yJOD(߮ 5PQ۫Rsn_> stream x[YI&7ÏУz>aYaYf!Az<%Wvqh{Jşە{haE|' Oao_`nu#H~1qh K XU10۸_f "9- (<ǕPa J4?\~#hM*"@"kPW\X9eAaoO(2\@~TW dսEIdp7@"],Ly!b$0Xn#mܯ42}k.GaViFg4ΒD)A+QچYTIS_H# oU2d,ex!蹪!f`f =w.^w @s6a87J| /$-&)ta̍BzsEc9>wk]pk9 6.ZT1 _UrM+]Ģ꘷(_ R(Ub3دBb]~0Y1R')e.p ցlR' odу)>1&+K vL#yfLitUk i&a KN JhL FzEVp |T>Č3E.a^sf!~3`hʈ::0}$3&$!nE!P_O<9 >wdW|80 LY)LZQhH DpEG4~nĽR ɲ\ R$Ǜciz#i`$6)lj*y 14ΧźI4o-s[-a?.یޅ;Z{۴nMT)!\љ:J3\]9PaDE.ޮn$0"Dw1 bRޚf``[d[E#S`#8g̡\`E..<i :w %6aÒE@8)+s|#@?.^X"'p5ݶ]#✍r[āYcb O@Ԥ'wGó o61q@5fD4 eL,Q4؇hËu@y߷ g 3 Q@2 0T5"'0o2@.Z({}et}Ubvhx lϬtŰ3@?fdXraB)v&x)'s2s 3 gLѫAoYt"Y~bM 4}` 'o[}γ&HuNS49^T2lRion>}M[3 vj9u|j\g$Qu4\ %t,k BWD#-CB@RWahu{&RȺBصgxPT%nM2?3r?/Y'xHW ^!H%YxtiZ!d4-r5lC\jS-T|_@e"(#Jܺ 8<`)#0\!dE/k)INgpo"y(Ӈs^ [{K)O(LJ!lN)U#J31\8 +@[mi`R$CtuH^xڨ+MDS+d]9¯Mڿ笑6FyyueZZjuM/kN˯r ʹ(8:O RC&,A = +0Tz=I]`RctqD<W$S jDA\ |dJ-I9\Qw*¥r\1I"Ts{Xs7!92W G C $Z{~[l}j4ll ;2;R-NL)QKvqx@K)YiWf겎iܡsFG"T" @>u<7ݶۄ@1(MS{wx%*jm>SqJ%2\% \Wy]; u9 UQ|h%'p'+p'\#M 8HOknܾ2Yx% ~ 5,g^b |Ean8o @3&˩]uuW 9 <Uj~β/i}MӈR4'F̷84u) cm LgmR65n!LL_fRqپchp]A9Qmέ:gr\+v $B =wi3.)8 StwF>Wm7tt:,N$)0wݦ&&'WĠ # Fn 'ĭI9A;NU)2w _}&W9'pS\ JиDj]ʵ`r.iQA=᳡& h7F  |XEp`WȤثq)~L 'အ f}^Ҹ:Y v]kƶPr3q7!K6smnu-0 _/p[!c x ?-c˽k/Tn"[ܠ/w(uZr^n/G]MZ`UY $ǭڭ  {=gňIwf::seǫ?[t3G; By,J;MUxB!u}]jioe?P,FsiY9cBio{Vn bT|<[r@x"ur\F)LTMqƭZ}Q2u@Fgmml#(RmȮz@,^*.|z!rVƙ (l)jj[=|E*RBEQg\w$ؾܓZwM`r} 1+ HcQwE tI܂4o`YB*UcW]<f4wmP{nq=S _^킅7q/ܟ endstream endobj 133 0 obj 4260 endobj 136 0 obj <> stream xYMsܸ+sa7o`TmU|:񪒋/ԈQ5CIeW|_ p#i\> F/Uſ՗/+ҟ~۫O_AnPRV 'XRbK4#LBŭ]_qі͍}ݻaagfvSMMnrT:>6;?hVQ?Iqݮ K'yY՚Ѱa3z'k8!e:jqWAT‡5.H&ՍMX[SA_r6nu,m芁 Sf:˲<ݦaxJ3ԍ2 Q"&sAds5tmm-pC<\vFU؎}ڟ S0 KN0*}=]I=,oʼn3dqW-[]l<\enKa6}S-[>[a3`al>ӡ 4t *0\P.+.4V qZ8{ҊY s܇pXp4[<{OT& Kc< Z7\42LO S~n$Ww؜v8-aW\.0UT[ .m0} jJbA`bD*n?|e+^P~|:Rok%,Ŵ4g :k:l+o7#~8L- 6mQi aotP)r{Q<ɀ d+$ vW1n"̞Gfp-idysdւ~xqP0Տ9s;=zLMzt\Zg b ?\B/4vў?M_N!Tܑh?4~)1`0 8@o)}HqZm<ޡڐƔwjo3Dgg/TM9 j:Ha2 >0ΰnz& $^sfA&l0")/(J)®uQ.ʊ%$<]H0'2&UD $1pᧁMr}#Y3l5-y.Xиse߷8!Ί!!ҧ 2gar m}/ļȔPdƜ$H\1aVerrtP<z㖘*בC1z pMQR:ٴ"6*(bS`Zϝ1*G HrsX]q_ʉf}e >!7m_ qP]VH4wkRT- irvul)4Zs}^_ f1K{HYsB7([BOǤNu)-&/dJA2%(Pi 9Sԑ!+S&jX@EET1q3 }-n=~$f;nIq: ":ۈ;W)ׂDp䘦/ϻa"c[ԈxjHC>PթoQ Qhȑ D?18]aG΍t*NrGC:l饮d^}hBӘg)٩s/T'C>Q })͵TzձJmM@+!`Q(qwirLNl¥$>B$_ɚRcc]/u^B _(GyrF,xGfXGf'&.t/"|}ENd<~@ECV?:f:r7\\)JHPdQ cT<**GSjtҳ>S4ܤ(VﱿjPk)<C*Rb:~;1m9R($I*kZyh 3 k޷XFk_x_]x#z@ʓg t'b: }JvMl=j.42&З5 ]'C 1R*ZfM<+ig2q\堊i eGO rKjm3u]?Z&Nendstream endobj 137 0 obj 2371 endobj 140 0 obj <> stream xZr3طHU$8Ryl̪$vlUE/.HŮi?[%)T6%Kӧ{ӊTtEܟstiEc[{qSTPV.tYEJKUqzx-eo RO$J"HMř0{^7wN&JǗofitf*,ޡ ~-ҳ?"0mw_ǂVL~iLV;y{i\ėl %ݺ۸jVaU_YrK0WTw*VWWȢ"̤M4%jҳsXpc[ETѪ2t6Ӱ40Ώ+-?diÒo#F۲~HQq"m($5Y/R zfWR;raS9!Lj#((1 ns B7m߬}&&-T[ `M%K ѹT la\.%bteLf^. O~< ׇ۷GPUmo߆ϺR2{YX=+WmX0ÅR҇};By G/ZE~w\˘I;e[)NL hRl/VF ilPoʅ|ҠLO cѭ?{փg> u%mZ~G7:5pA fXڃp$یlJ+@|:Blo|HQkf2;DdNW}ɔ#}=,8"9GZR$~@ ad7ArDDIuDTB'Ӱ4|PbtˈP'y2 ,D9U~Woq&g0 jL3i ӄٻ>m``ˁ/!twu 9&ׇkYHȠ1 Χh#&B"q}d2 MrSrŵ#I>,pY{00qA1Je{ԑ Eu![E?PJߌ1D)v5dj 8P5ȥ5J 5 s$@Yx 8ne郐R"H]}!r$,.iF̂Eʲ8pyMi@i@Ýz@j4wq;Fr< ]+`mC{At<vC<3SB S9 ?%$,,m(Nj̻!GF)9JK24ڠ #Kyҁ,OiZcĪ e "GNeΘ%CE/q~ipQRiQŴQ3]Fm@l@u0]4tyF 8/``3.%uafi_`fW)]nAXvA!pqt_BԶ$u 1X]tiʺb8D4qnTg~]N 1%sb&C|.}6gjZ,!9sPY\FkCɒ5799+9~O"ET*O`q|&) IRx8S+ VmV[XF#e5_2`H!12>d("NBst·(<<c}b m+$Qj0Z3hĻnShCЖ 1 S[0),b67YYX4jvuu3SiCDs䳈;?}x al <5¦1, y}Ν_gu?ġ*@ BLxtqZd{F-casL ?5ܮ8o1D8/Z5˾//ft)2YzaCEϩ=Bae&%͇ I0Uۇl"IqæÛ䕢iZ`ACV&$#1M=x1:FaiX){vMB;s!ѓ̙ & yI{ C,8zn:]vm"sRV?3)lk:W/)ToOTBji _<>ݜsTXz颥/R#L۱!BO2}IzK\W)hu>0IC3F.7Nr#*1ݵT`=R\7fi7w~sc\,eGV]6+'lASE:gwѴa?"jPi§cle '.*}ˀ:(X˕|n/ ց@]2m.3X{¢u.;[+f=nFNVQq=ue(Ÿ׺ĞD'RD^3̤TrVIMvti_YØwc (\:3V!Gƴu8p 카,[@;̉'*+es]@BH};'YdoSo䄜9Yl$FB{wkor.X~ {-0$B}xV`iϋl'ƌ}t1DɂtL6:jmi Ŧ~v{beR8$h6O;,teeCґW>9uwڋ > stream x[Kyߠɮo>ىSޔJMrCgFYIIiǛ4F$!؛KU FU]Uo~\1,ޯ~s{ |&^+Wo7W埿]1VYOD]5[ 2kWo67N^BUvݮsSZ6{FXmQ7þ=v?~=cMp6]{ޝ^?HQq_N~G^WFwMŅk2(C7㕩m/*q_A?jj[ًs+r_2QYV :sJ4M} ҂-޵c:FapZM爺a礛Mw'xQM3ƒQ~#.F[I:0\G9 l!lJYnglyC>~hxޞX,:1;x0Bia OBaU8Q2JNBB|*o?/i! S48=̵$wq!9 ~jdhy!ZٽFYn_+ԬN!%=#2^L~[GVEÜhz q+r1 RktHGwu-e“ۗ0Yi㲏l.8Y #qQ(@zvj(QLs<Ɛn}mDD!^dMqD3K8cf1ث$.@^4xRHMyC/!f-V^)J\HgcU7NA{uLpL o_XC&m7t8d䵅@tci?6͕6ApBHk.GXh$/0` Ei"Ū͉%NHQRsؘ12~{* _D}?mt2>:`Cԋ 4 tv?i#z0?R"g^#heuDo)Bv9\NJ7gZ x8Kx< QP Q2Ȋ=m|qQ|vѶ\ݡPԂONf҂m4ú[?3Gb<` n:(|h{xHo? a`UPH1ct IH?Z& ,2r]ʱ`<ᯀs"ҧoެaWbh,d%,ƕ_yOpn^cn^}yկnyKJu4++^CZb+`G@}aW!$5Hlv"pfȣh- uݞNx $P3*jR1 7SE\ӖdF3npRpfZ 4U N0t`f*iT?@5[ͣUI1,fvsJډ+-Hz#`E:>j7!/)Jii`_% BƃĤ6kv@ SQ8 b5eP.rKpIn-hnt҄p)[,Nq@=@0ZqL3Yidy8" j#!E& `T1SpN*UfȈ=+@i=ubotSB* Z܅R;i+b69]p:5u!t?nSb #` U2 'm3HLvp *]N8l) R t$$|"^Gw@ch bb]IK@mY[ I߷ < ƺԔB񴋭W)!)H6n]9Di zypYQl]hBQ܄en?(d(&?X* 9LH ]lJ,zŔD==vQLCixb17 (e `L''p?&&ڇ`0z8ڏwwD EA {<]wiI\S.T3/BD~^!F[Q#T =V'pxm_d!fF&z=Id hpN pڒX`y .]p5 S DzRGifƎ֔/n_n=;n>FlN D0@D:nWm1Q~Wmq5TXgmW<3cGɚ83vFR;13R#sTDԾ`c;1 G!h%)ͬ.@_ *:ʙ=Si ׼h{( &~i/_h+o; p 7SЀOuja*|2Ee/>H݃nM{zzRJ;^>n,z2o(^U̲G^Ҭsݦc4ɮhߌJkx$F|9iC_<1 >ج;`ER vd=;,=A%$//c@%_ǓT!H7t-޺]ӵGvc M _Z]fB^p;PZ*%OBpձ6jQauk^;Λz#ENѷ_ˆj&\epӥ[5%* x^-]Pgn QgJ c|z%M4T8DK@IٴCƦ;쨸)N idrZf¢AyqR|'%t|r}ٖ.  U5xgMrѡ#(vB޾uwFwo* ;NpDߢ>-ݤ5v?wTU@3>C&\殓iIȷ}ס|/2 oADXRٚ),֦bRC9a2wTJ,PN y)F;uA%HbPI⡾]ȅ3 oREtE4 Cq!T0At~"Iop(J}WJ?5ȭBmnd F.9Q$<;߅/4%˶$~y%GB(lԟ)ueRFo)WO;t59Z|BT1$~:kBn&\Kq& n8&1P=Fp b35E,B/?m+ڼ*ƞ~2)xB7B+sm46OפȒP]Փ0犖9IQxB,\ǣλ ]ު6Hj7hdDBc $R:^C4v/MQ!K.Sf>/Xv{WPW횻}/owjWnwϨa&GmՅ!TlѸ̧&C,xXx4Yѓd"I"}qawןЍ@Ʉ*6Gz:ſϏs9A&*?s|*X]Tpy,Ld!HU |^3#嗾>iEXe̐"o5}@l:ii6rzzy$rnznEB&p `$:~a4@nEgr2{zwbA'4kx4w%_?)~Σ#Q:tݰd} %gD.?`/._B'ߓr)m>2'1גV~|i'` W0N-ArJ6d;(蓡T9LFy&@Ⱥl2eO56D#/ޟ_W P??9.5Oki)͒y.$ mKMjuA3o@I46lPWX"IŬTOK;mB:ktU2}Sv'\{T,ݧlfYr6ӐS+Q+tcL[ (n3svK}.endstream endobj 145 0 obj 4392 endobj 148 0 obj <> stream x[ےܶZ1ov(/Γ/V%cP3F3/|9ܕ+Uq@swR ܝ]YEe ls{w~@7UTmTWs񂿰OPZY)HZV*L"5g +T&2LWS2Z_x&>)U郦)|s{>zh~BWha .a]w=UH\;Ga*C1zuspi/á0&8>Ame Z+f-27[+˦Okp|֓? 4ɮyu%9&b%t>~u'2ҤCN'榢\|]L粲Z/-"ܲޣ >o'WX{xp0+~h6,9L%XZ-<ӳ܂Egr 3tC7m*'fߜi)G$k5?b](kirU~]?يIMn9%z/& #A0)1K#N1L 9QĤO!R%U9J5T :w1,\Y@? 8V t枬ฎ(dp 9ʠ~Wg_p4ڴCH-{W0'gC3׃;`.- &Vq,"xStgzkMNWBԻ&d?tm$)=CJwv}Z$]L0-BnOAOvKkp>J A# y>P'F<&+L&S5YWdeLsv$mGy)F(! oB(j5 [H UDclX&W)i*iUXtp"C3YK},7HpZ|Y>**5(h&yH ѳ]ǰU6w1G[6Aug&5MȖ m.e\kE6gDseYFSIdE6"rSX-yl`QB8X b&]NNӑn0n*|nejOYCa&pP0]L%=" e*ᰢd="@ (rt\)G@, )uh5HfIRR#̥)6JO+,\eۀWQXMҰ3Znq J U, '2PAv Dw:۟~Z}wӹ}痷2{j¶ +,*#}|yA^X4a? \xCHGcZse͝ȗ"7g2o|e-RF_֑HMD*5t!ՈuT@1?8! Q~\ߍ\6.4{:)C n:r0MB)/`fhFW(fu} ԂYS:%b@T׭#Y6נH̝1) ٢v׎ЯCiλLx]R)c yG"Ybb&Y. W%1Qp!CNmE-,OAâ0𜸯쯐-+ Y <ɑܰ$ 14-JQ\k{ZDv.:Ɛn!5Ǧbx )w33xve=khDA{4g8 c7w"./fA[m-5h6Bl,g}c !RfTǽ [0>jbJ:!7PUmRwŜ89HZs>K'G9˰U&s}buk ]|ZO$* ~^Ppv)VP(?e=®<e>ػڅjOcLj[L?]J.+ō2q5wRN~5,A]F%xrP1AfӜ%HGz;ɵ,. U<\,{8wTW@Yq &tJaS#& @=e$C`tѥGg4xBb"Y(O'&n5nPzC4դc<G&+3jyܬ O!&+L_y 37~'캸2k~P3'F k\&7eJaJ]Nν^Ir[$rb,ENq:|Sս<fm&E^ؗ~~Se2HYH1ЬP,16CŰrnQ~_N7U @/m )I;w.0 U]=K&_ `A^@,ӭE$K 翂(+endstream endobj 149 0 obj 4374 endobj 152 0 obj <> stream x[ێܸ牑o]}ް :C&A4ݚ%}ۗϧHERbόc^DUN*R W۫wW_^]5ۻଡjjZ^}-e߼{.(mbKRkoW_}󍻗0]rOZ¥e#~)>=;m;a>_$oymj JK~Lp˔ V|~L0}QO~;תL3Tu YeKn`lYoG^FFl|o:lH?=uC. .S ;a6ڠ#OѬŕ_ep#4a?|/,ɽdrL9G?/0.tsv#9\4Bd>ǵq!_{Cp0X捰4*L(@2]R f$bøz4zjiܧc6Ra`4jb-&~QG97.칊4sR?ڱ25Ѿ{}upW?|?,uJ{E7O_MT FqI/"&6׶ۏ􈇨^;#rᥖhFWz` U@)^;cKBXo^)nMQąjCIBqL[ϹD5-#嬋|򀂋 I2ΐY{h ywuHii?= 6N3 O15R!F?Cwn$yèi ȉI3h)f!mf٬|~5I:~wmCu*b/)pDh'I,xI ~\ByV{|6r[` Et*J*dKk@ppz#7$zFg+mگG6ƝL96_:[5>3Daӆ&1 Hݏ$1_&^1lFv@B9 O@d!7"Rbq1!(R +:W0*fɛ?_Zc6 3 $;DanK02l$X "yAGHocqTiUAXO>,wnhOje֛dH$Ce01 ton;Un?gu(4NkNp.& q@Xa!4tCa}eAJ1cz/tBg"Aq?t#]y KXY ?}MB\uQF Mc Xˡ6!Do6aɳр7=R"2nfNJD(uA`HxF H@9+goZ]pi7! h+Z"@M,L-&4O!(5OEzh u( @Qn B9э5mmFMҦ>tXe7K}BWʉd$Rt$CQ/* 7e$Sg&\gˇ0roja҇D5uQQ˿RdZ'3(]SUi\'\z x~:Uh&qA XX˓k&XP*0m߃X4*hwƜ2Mn zr\f Q !CH 珽p޾׶!UѯUTjEchvMgNx*t_$Œ:@m<]c;'F3dcۯ>G؉_>m>9kMKKP֪L#6i(W\T(4Qe#@_U5u|: ; ^ΡO(131d_!Jnϧ.Q:o+=8%?iI5MތibIly=v ظ29zOʮc0 HT!22c PE)I)/F9ΪF|f4發q7DSl69S oh[I]%nI;]&QtFZax%%@DQ~#ГuKPwX@I*҆KMI\ XLQ}Г6ՠ4_v:R$iqBYpi鶲_ 1>X,k"roJ-e~cvV2.4`Dv'CLa`i\yRົPq-/=fڴ{Aeסy,,iICB}&^~]|( PaYf;VŘ _޲+h4n`E+mLjZ ~ŚB ݻs?Ձ7fuŠkx>)۞:P:FеFQ{Wv#Ѥ3713Ӧ/G%nۡ>Bְ@]̀Yɳ-ad1ȬvUM(,pGўeNEѺ;xQs4>,{?F(2GN9 ~|Y)QLXGDc:Q)ј,s&`A]rS鑸v>V&ͦ,aT=A0I4AlvP=۬\N* *2ԐH:OIG筠hЄpD@Ϗ >}ˋc?N*Ssu~{[ʼn$\: ':-vMmnGo*sȲA߆oS?}x$Į΃8/ +!@G1-%VJ&-.%ͩMDnD1&T*y+3Q~C #PEZp)7/}h8t c&D:аøӟs Q #endstream endobj 153 0 obj 4150 endobj 156 0 obj <> stream x\KFr3t}T XuZ;aFXvXbn ~ &),TVVQ=ܕJhP/|ݱ߱^m;>]KwͻUӛjHsqz'y_#k=="}݃[wonЯ>ܯw%,~:t"g6]lW~ ץjk\7^y׆t5(׾5cUZshv7ݭt#IwqhқE8ҫ%Ezx7m]Z ,K.r-ôС~۷iMXfpxkSkwaQ1tz05> W2eߵt*c!9kk7HV}v4~h1FJbeǨnL}Th\>gu3Of: H-iK{P) $b|?Xh?榟?,7sFHOx otnAGpt~[_{Xa|B$Pߒ?Lʼ*ū??o#{CE N|.J҃o;.z<$y|%썟U[_ Nru]]&:(Xq XaݰE`9"m UpX8.AF}Mf#𯺄m9"\w\wMnC'p>aorBs|:&z4WS1%3!S,쾶æK4 QFm\9FyyP0]MhHW5AQԊ'*"6y Hj)|8W2xTk"YeU[S\{ru2ꉫ"A0wNpL&8`R{.6529Rvكng:*'ASW,hY {BU>,J\sC.`X>"*ꓑT*鵸!S{W82Q"8CLm0m?4-5#]Zǟu'08.C`I,vH*ELLkTTv1\sL ) д;4^X ^8&fFý0.5sr]UҌP Bj=dM#,gUHDujE4L刼!CFNdg(#S?"WD+%8!qb~I:h06*奪kxY$:2Y$BEr?j[Ao; h#z-+C;̫ 8aAbiK5-q5E$TH~{@'jnXI0%ҺHP,Ln8Æp0'x@`V .N#:؉WGR36|9{cgZ kE#|iI硋l}Ո̠8奒rמ> Z3<q?'3A&d8nL " ZH `r~^ @%,pH5Qm,4r:F` 01+SЇd"W53ZfF**F >)EaBUZ/ZET$?2XUk!p%y~L TK_0}XyiMT aY1P[8G4%5! g  39wMxnlNR2Kx:ܰ"iLeDɽBy/ܰLקԡ c#"RC۩m쀄 鷘L$O#tǾ^&!#}%0UAf^D~QJ Agu [OA6r FYgj{Ĥr*GČK*L7@ >"]!X5KeK~_Nf$ 3D 0P TyoExK80SB gn1%*`( x\}9"9hJbc?Te97疠We 5rŦW"u+I/XȮ\L07 ;C (^lγěK &d+vSK9٧=ڢ<'Imʸx6V0Dd P"GRfJqc+Y9A6.%˙\FvHBKUJmr y9xfii ct֗nܟ6Ǘd x*v8MJ"W%1d^y ~糀b3+bM7r%GsrrрK/*O.W# r yTBtqӏ/QhRCEznbi(&\[Si8C!k+4!6Uh D/i (B [–3y=ޟt(̑+iSo\E7.}dL HOsT[}N͗Dq ʢmpE1Z&yy [&EcwH pqmh0؈t*+Ҧ3_ ׻?>tmKE. OM?b7?c 5 LB1_$rdݔ@m%oͮ.5_Bx.d]6{ަΥXIc֮6mQ-ːarR ZXJ% z-?Ω[2Ef5|.O;-QVZxWY2᳎dm(Xl)./S]d]ϹT'.Hp"aH9/xO6;.W|Žh̀7̦w%ߨl͖悺GzaVdBD4a ˘|3!aPp( (N#4w2@bàOdB3^r:^~OT bS.S1lL-mWc ]mβEYQRb.( kKBt 콪yvջ-&*SZnuJ݋o潬؟bAE&Ə"|BJq215RAMZS@Qm'x_5>sMx)@J NQy:~ۏq2AڐYQ-NbM1󕱈Y(y*Ղ1җakmv{ 8||#ÒLa<'=`wpJ)5}=L9^@ˇoirM(` xk+>`d&vA\Kc0 dq""Xm j%=<=!I '*ifJ?]퓹Ix, T qJ?*S%Чy"eKs oVm{P,|c1TaI-j l9e\䴮 S!&D#Bl6lER*yLtXm <׽22apZA!KkcH2!~o3+ :7׃xnvQhrGLmKecGR*Ul8 ^3ÿOAI3i+Ee;|UOiOoeȆeB;x_oŸ> stream x[KsQ؛ ¼gR%UN e+ɟOϫg]RJI1ӏ+j/{Zm~WFFw/ dhEB Y1޾x_W~wbTF%ĘˏvDmh5ckR4zL!~nWGSZiner :M

h2<[?pQ<>X]qzzd4h6jTlf 0nշ*tK8~Be? I1%S6Ԡc lY:Z~ՓULf_BwRpfCT- ӈK!$ӄ x>TMJy1(H2>KBg}Uu\vPYbD{ъJL}׮ ٌCHBTNP,an4`D@[FP71K!PX1{@Fu{w0gXYn 1:7G4t\ /JJ{is?RI!}D"R<*n}FVrjNxF4bXpL<&yWڕE{qnWY޴CdܢE=J>w]s܌٤lAx\Ia)4Aѣ OЎQRس>=te&˝7кD /رX)#\1!q n laRuƄjL')<Bn5/2bi'oDZ;ʚBL|F7`%; 0qo -Vm{{k/{uq#Uan1Km^צ.ʹb*&mg ɏ.l3Kޠ:mmzEs%e[_J?~"5ԲV=>vY\ 5X$?xJ͡oMߦ J! Y6bۖs62C=ʜ!?]ZjXBf @+Sμ2[|9/p&|w Z5/(̐&DYocȼ@qu(eP$6&NzهM}5b֩oZԬƣ. If[}%Wzs / d{/MϨY0:SR_nC%1l#&M8S6&uA V6Rҙ5mJCI7ofUE@_R9Pb$H)pZ%C/H'ViY9J(9źCD%qب8fixH!K̀%Sd m_Q>v!*mIU5ia{sPR)<)"sMU! ׻E>{ukwN)9v`N$dj0] b42nmgO2p}r?$⤞e? s{eIՐs )u/juDSi,b FX0w|NPI_mf3ܙY3coxX=- 4*!YjU~&b|);0~1 '؜D1-dmRžRK]l Jӂ*}~cv't粛 giVo;uÛſ^?k endstream endobj 161 0 obj 4098 endobj 164 0 obj <> stream xZɒO#(Ekj_c`iؽ# ^1!kT^>0"3lqkb3{/GFFgOȌQDL =m p1#!-B!gscfOˇS\K_ ~l]Q´_%43R]u D~d2k,:$F:_[J bWW]K)b8rWWerh:HQ*kqþ/"5MNi^{rVGdW%pU0(`Doe::.Fw'4UHh~pctԮ]s DB[8ծ'F_cZSGDg 8Ӝi)iMejf#cSL rQ')e{x)Mȕ6DBU8v#cym=N9NMwpcR)L1)[Nlkp ՚fnͩ۾8HI/%>߹ EK*W0י7sRMQ0xմ G<|Yykc>I&'+T8N"܏y3?:gp #1h %#IeUU FI#mFMH#ISqq؀„\(Q8b]Ap-eZbP|YH,:U7#tJƴbRlr} %,L a zY({D w(b j<s.=~h6'CLbr-ò6mAa6 @]MXbc_<@pFkڏ^asIdp Q  ZX i Lc}Qv1ΰw b?|gh۴`D@;4W;,݌VWX RѐT!ߏ,YT&厭]>B̃T*:i[DR#KԽ֢ipzJ0F]k+_:ۗ)9I{1u$q* harjTN{rI9@ 5"C%{BEbQP:.:|i m0k E#e[xZA E#Q23fReN;F=(ILY9 wS>dQ G'@wB#FtbMk I q N 60yfoچO[ʶ-I)ZʶB_L)&"i>u#UyWvKc潢BPuN'SKY"pJmFU S@*m"뵯tTf%]hS zd4,E-YV4hQҷfa﷜3(ΦT/V#i{6;_Um#B=ZNJ{OOa^9endstream endobj 165 0 obj 2604 endobj 168 0 obj <> stream xZn8^Veߏe70zemT`[-Wu~.%R)IW,(xKeE [Q~ow/w/+_6կw J,|up7J47"\<5OeC8lYZuM +µ} ALaA862=`0|Mid`Nj]xU@l]PC|} M(SWu#bu#qP"k(%}r%e 7"R*KD|;?8w'z20@bzf?OV|;#(DAv5G|>\Q.IdP\&SX7P,KafـrXm‹kE zDQy tF+HO_O|tp󜸕 GUwVg/`ˇa"yrnBjH.4X=H~hs 0ŽiK!GFIkSMqa*(b8[VF^@MYq8-įnVPdUPzQ鯅q"oL M}־ՒQz5Vh aP'~P5OT;ko !hcVДx=$,E,>۶A {QXׁD uK:miϛ|0X8kqzZܟ<s\`.8-n3~l"~_D?Dm +3"P!0+YUypJkIy(O 3PL?Sat4K' XoE.TPb 7T>y~eޔMܸV )<N}K:ޗ}M=b{" ܴB)h~*|m:"ߠ鐯ɉƞszi;ks0& FV$a-4ؐ %TNzr&DnWl>o]ieaXX .Ų\P[|lxTO0xڋCMg͛aYtS6Zk|0WhΰMKx;,9 i>%Y>J25a:m<]"q!1A珧X=po)%2j ~+A2 vY ?1yahPW gR1䌏3kSu*'tyq^=hu1g6{Ѩk6׻6?}X,(zbi ow"endstream endobj 169 0 obj 2671 endobj 172 0 obj <> stream xZKsFWTITU/4 I܈=r%`x]`D낸k[q?O&.d("rDL.ww'П p !#B!K[1݇>} ai햭BL0D(G\rw~L#5 _ڃ8ܵv`xw:)$amչA( F"fdK)ldo4&XYH\f(ʾ_(o\H֛?EINָ\/Q_ 1U&>hP\]%VxkfiLísXAҵ67"> b 7lVZoWFv"! ETfu]۽VXK-"^ΟHhSsOBtS<ݯN8#$N..Fot/^=6EzHH^Uz R>_&NNa@]3X q;^lb;ĭ̙ ܘ2!cU =]SHhQRFΕD=R^*]( TYb _*l8(ř;z30. >e;fx#-${*Uj?l&sdם2PoщDndLKITMY Ga@Y %%q\G'[l>:m:"EnԐtw xD*I/;wr%K~mMaX@e̪%J'\udͿEDRlM .w'V\7YqW5i2ej NUSHٰ(*Q4ϫ'T"aSXDQ2ګ.TbF U # V6)BѕG? Ā)2T-dHcV9-ksz sVK9= <][U8Es*5s9;ԌF%p˂tZwƵ:߼WχcQm ps5uWBr(e?f,C A6)T>GUS6@f)oK|qb. *{B|kb.UڡĈqDAĶ/ƹN79༪*sĝgZyhY{:bЛ3Ǖ6` zG +t {0cL9ߤ+3d D?cpEy:n9* |v2,}JY_mG#%SZD%&f=TQ-M_zx' V$Ikۚ˼hcV$g V߭!if'mA兓\<85l,m>#n}t-]К41F%,xp'ں=>o 0LF tLF E,e99rp]îoX1IBtέn_9J~}pEMepunLKsB\J!^|uvnDsAJ&M "n;Qt5upaYwA=1KO{Tuupe|c n6q{(VoG]Fʵ=Q!X N6+Cbj0vGčWמ2b ]Ӓ@q*TS;s/^zm#KEEThl4JjPnNwզw~3Kendstream endobj 173 0 obj 2430 endobj 176 0 obj <> stream x[Kr=r4رNMrgjZɟOR $^Wյ\O{y+_n+ W7ъ+%ds0O!}LՂTbݳ7ΤRX[;HTga>WVqf.OuE .m؅p鶣;81qC67iDōa;7L+찗 TVT΍.Cs-ݚZ8n &+Je0]8eҬa/a"j u39Zo*iJrbǻJ7Qae8U@JJpwfF&^rU}sۭDL" nTPd+*u>WA-ȸ)s 7ZnJImwsI+$p CXFbɍ5{]Ă_H>J$/-6?-gt:W5:~ aP/'ʿ-LU2CiZ%!5ӥ)h>łn^)CQ-Fo/t`,ǚLW5 A >PIIh qc'@ѢR&pm@  e&]ueWS@('FEѹ0x28j :/K Q(q΄x X~\y, +8q/@T1}И, xP !Z e^qЬ!$7f~(َ6%gW0S}, % M\P#ÖϿmؑ,Qf|(eT7Qt`$nVnJrn'$!Ԝ"*Q:>.B+{H .H$P(]٭J*pZ#-&xp:?v?(ZΡOeJǝc9,EL$!Cmfc8X7sg2ɆGӻjB&@jAJy*j%42nޯzHCE /BX%]FUM\\kmG %ƛ*Qnb$I҄ckoZTT)LOB*PƓ-,Z4B b@dR|E<еok6oa9XN"fz22TW6~ $)aF\$qO ,@*ۘ9 |Ncgw*wޞ D\ t ʨ`?EerX}$8"‡fg7rC Ju~S< HM4@${ʔ3JyJh`$hn۬yVp;bH VUͺ]k';V.qxS&:ad т'B_)Ai=!^&,lR+d;l2JL(C`fH~{$xk q~o@sI!A3d:8#,Il3saf 37wlɧe3}uzON }YMp=jt2.'uE̔@p}X?!>/ǭ b6uV$p H?YC Q _VKinEa߂17͑fR$9İ#'s!ŲZdF{Y@43q+͸qָc#R7uD]e>l"P}*r+KN%%K7bD]ڝHS~‚i-eNUg5ż>q`?rhS̤IŁ1cSYҧO4Gtϩ6,be B}MQpRg:K- tR`萱4aIf-^ט1 M-KK3M/CvP*eʾ̞ 0PT8P.OT6I\,g;1b͂YLf1U1ʲ7=cׁ^S XbikAr$Esc.eS#?7C'8idl, I M3rM.E0馿g Mp7?:!Û7Oe -Cf±{1'YO̲? clc]K2uVEㄠ*Y IMe%G.,su Np dl fVILfnC?l5V Y?W13_m0jhٷ;T-uHTBę |wݑLcFҮR%.(e-(&|:eg<a5>`a̤+lQD*#6^5 MѻPo&`e~RAKTY?.@/C>FRe_Jw \5 c5wKߕ`$|x ꓃[\m_ZZTwǗ46 &9üoeZd`ѫLMRh(d:?0'?WA5âԫ_b-RꪄkD}}3Fzs@vي y; >ط1)Xf<^F*2ֺź\%nٱBMѝb ғ.l0/n,=+#&4c[spJbe D%b±NZ)M(TjooؠQ 5!0B;*O7k9cIUBy畹){DV%.ס ]X)Gg4N5e^oRbr9ø,nXa$hJl tI 27ũ4e;Iդ]i/i#E{=^WxQ3쵍[Mk"/6U]Fv> (=ӢmNowQ}qmi,>\!>XoH&`Mle)'1fo}B+ kz h%;bs]M4%.a} |=O߶7m^ Fo4&=?7w|+/ <]ZOѺoH^2EY"@nFl0c4j 4.@b kˡ-\=q)܊vN ]?[vLi+4}p:q Id X#4k&O6n\k"<8QڼI@%  gD>kBY^n& 2xPObj < riU:HPqof(pendstream endobj 177 0 obj 4078 endobj 180 0 obj <> stream x\I3#f)+}nvL&bL]ib֟Cx2QE4$|xViq?n}zNk_ۻ?>Ec 㬡NKpu}`HvGic~mcJVjwlI;-[cєڰx٭ VY֟]7cLo7)|:>~O&|$#Ȇ yx&!M5[Վiv'spv"ͬ k_ܒ[>Ll *^g,- 5nEycYɒ, elÅEY͐AY%55X'9RUEq(¢$<@J!u%ݰ QDZuTM%!tdejf@E &@U.t4 " {"794] 7Zj<96F>ژf/CwC`en|2{e$><>H^ȘLM J[R$\[ `\DCDNm$kM`/š,~k-]-ìS7)tHhy ߢVXA/ zOB]i+]7Jc X` lHQ ENÆ9lQZR[]_&ϴe mt z-e8p#0M㠩 'ctB:#=ڃXBuþ J ,nJ(NeKP|lfi7v]pOw.C@`(SϣIof3 쒆#nA[J|a T3S\ƥscKP psp<#i! =!wSяA436uSJ @qWP_I}SubpB(daIۥ>wU@V Isv) $8wF>/cbFї?PPF9~E!/fѾa9y)<P^ '%M*w:v:E9M701#O=jF^3:$h!d~ǗV XQ_iPvF Dq<-Yg مGyg `%efVlVcmg:EA$R{=BXM15: *e}L J]8DE4s& S Ңwae@$EZjk_0`Dx*Ϯ9d-j5'o?L/Or>>\GϿ>oN}celn=`w>X]+~rrcm O_O5 8k h1it2 $]4V-B(g7|~۪\>)|[{yWB_i㸏7d\h!d-JIS/1fTʤl6k\mزPrxFܜQoڢP S{bV!Lgȳ:y~0^k` g *+WXgTDx9"Iו!}S?WG# DW6Jxf[ݳGE)Q.Į:;4' z'₭P"DrN*=$ZOmp΂7JhD~JDMh~Z0BkrVq9*"Nhcy^e9hCwj2 zuxb7SeQsi+~LL4+Z&'ه#6q+6{\-&`ѡDL v+]S=¾э>nϟ] 2n"L.+|Sْ"uSLew[HPA0GCmi  Iok;ц.j+Sur٦wϵ n:z;q-J}t4Ƕ]wuin&G!dQߐϝ*)BpsVil_9 W`$چ%]s~:.LLMjb;9Q ы TX0'c?wfP6S* ۸q [49=)z'QԀK\w~ v .P2sTKq3sHrM/͑'eoSAG  tKEtEZsgSKZc qC:R-T@)2eepc82XK*u|qz.`o6)p#@!"  ]Y^djq"wqj#X\S.lpႸ<"L^ƲM~{2]oy]s~(щ0y+fIrE:7p m4MӶ+bԈ<9mEN*K N(]P}#7{d۟r]R *.veT sb.kD2jbs"h/m/gE1_2yޛ{zCMS ¸HJ8l_TdXn2ҹ\YQ 'lqD nn2C|jNT~.k;m虤SVIDLŜ2o%ʚJzZhK e3 Sxa<ߣ\7{wV"I@L^c~d.҄!;H+K%jqR$eidF- Nĕiu2FD(Fqq|;ǷT^Ԟ |5^؀ڻ;!?-YE -pˤ9~WIկ4AX4NyHQmW\8]` Y#r|2yqH!2L HbϤ86y>F=e4o^᪍FJd͍'9t6*qXNM9EJ<Q7$1BYyݬ&Ff$ަ}<ė=a@~\0+Ni/'n<_endstream endobj 181 0 obj 4710 endobj 184 0 obj <> stream x\Is5?B]ؗۤOI9dKGd$Ey@@7IS9LD?{^^W_3_]xrvus⬡JKpuuzZ,{s^QX)Om*f~׹Wo(NtOg{T6DZO[FÍ{íklK?1SDY5Y>Hye7 /)״1%Z;GWK}m ?|1t:N8sQiA\(WoRm(ߚmܨQa.ܿB-;%9(uTG ikh?'uϢp{!?Q5zmxX/f`EG،μB^ pƲ@P7OȨh{gb]au9ied7B/MqyOƛ6(;c6<$2ҠNEŊ4# xQwsSR:} B~y90edKv p+Td|]-5>oY!bo]Ep׮lm=`D(HٟƪiҶ /WW@vTZﻠBBefwRjDB6;$ggW-SQ>w@`Ë i ح<͢5́:Myho k'E@"Qv%(*}M [NԠMkFhM|[fkO䍑Ț,UٱvRd&]4D0A@ &!Gμ}i耨O?vAl)JV\j m$?‘1N;a ݿ w31W\&><DCb[mV n r8JJ &1XO! 1++TP!9(Nҍt~3J{: ]m"R[=Tqrj(YBQ坺m `ͻEuQZLJs F8KbЖbu V.P=̢p"f1%\&{ HY's1(@=U/qÊĩJzPs(@k+=`Q7+ !(NJ]*gEg%")yP:R-Nƺ^I=bg`qWE?ӴBYasYgb)0|Hj08HY%sG샠:ɠ]W=2y+Gv5 ,DDH$eJ}81oϊ. .`1%} jXnmzZf:Oi:Lb> jmw)Үjܥ% EYsׁ), ҇ - ̡ԨE }-ҡy5v'@ygA zVԬѕLNw{+`?'t?宂: _OS&"Z/E&)U!kbVL`Ʉ:FcL]~jӄ.q,..~).?3QVYo>t >~t\wPH KwV5XfS0j6x9c5j50*WSj"ؔ L4腰̕jNe Ti1H} Pʮ_k*/b!NϑB\m˫=$ܸfPeЉd=tck!QqŲ>@;R`)@zU{q @/B|"W $WRk%}hogj.OrMQc/$Ǻ48~H57v谑^c$f6j*exF`{h;Qp_h0QR!DQ.;VJ{VayGAvEyyzJgmaIxsJm7H $Ekih7L+7Kg0kӹ^slH\nή܏OFrSNo` 4 He,K=n(&xG_n ヾ9]{oρ`M뚝FfŨD,m7~3˜~'R 4Keސyhq|ӫye\脷SN54}󹭶> CE:aF Wѿ:4u~$d'tzpZL=~7iSvC? tj_fãgC N+4%B{malԯ+k%U]{j if!2]uu%% `4bwG|sRD\$V0LyLm׷uep?V?uZGZ`F&@wX4l*=-5 |M@=%>*}$ww<n|:uZ6G ߵ$%u-bTWY1N ӊv2^t>k[u3GqܨFˎSb1u)p]MIZ~$>HBR!E1fS[2rZXI'8P"ȶ~Fs8'_Vlxe|yS@|Ұ"(˃G2&vxx F 0Z_]`&Y>Z`28 0$avr q\XMoOP|5SlE'5);muޙrq/a=]ø\8Zp 5oqHv'{ `0EF23H<}SD1*]ok"&rɚH2RU9<@R-Rɔ%B*GvGM&ju{K#pH65tH|)˦qEDG P} J?bEuĒ8 i҄.Mv3TrL%|غ#+K-#͑F%;r.H2.f.\(̨SDAsYu 9APzAyJ楐瞙jM1TR1Hf7b9jKHZ3^18R7L_K+H9a# nv)ʹ3)z&}oPO~3Kh?ɉn/5!)! }4bsbGeqdp2VmknlȼZ2]E܇ ;bYky;9AIܒY PBGr]R`3Oٌ)9azԆyXk] \䂳I_9O endstream endobj 185 0 obj 4425 endobj 188 0 obj <> stream x\Kwܶ޻]ii#HNmOdӴN7Q%ўQ.dw}@ꊜ{}է32~Zoz{/&]޾r_ gVD)!+&.w읡o/?د3B*#f*.8ꒂ6~GBizT󃈃j{ OwN&pԇ&ȉ[٥]ӯnkƭ93pB@Q&ڝ `M[m6=Щ1+a4O 1$6yw55ʺ]Rykp==#w"ArC]8l ҊO ĠȔ`zoh Irbw TLͤ-~pn ԬgE ߾^9ıp-pC;6AávwQ4%gφƱ FZ?F,O @/,&,Z˧& vNxl/q]w-T '>"Vfuq%1Wr [Ψys|e`[^NV4Ro4C{B(%2*jسBޮ~v4Hjx͂ !;{ˡ @:y> >]zoC EDԘ9-8za` <4xXO6pv #N}:'(gb232H 9F',eo[yw "3 S"XXj +]B5fdꍗIF- 4O ˟$ړs 8=)Z6Bt 4:tN=R:qy{mX8|l۰+gF`>Yhl p:gr@3XVAE\ R$r2OO̖|  Nuzg`1&(6ZiE?`ۇ"Aim$DNqBOpBb4儘Ǥ'h":(^IT2MH(OxYBk(mr"inH3 '@s!KstRCzWR<0e]}T3 [,5Rq;,Pf^yH~cA!? #yX ߵ䦸1Fb)_Z'dz0/x$HXDzWbhaշh:ڮ뷫cXpL1KL~X:FoK8|QyVr̗%X!e7&&VG=GQQu gQ|7nJ!DQ|7WnT7V'BTa'H놤$GκVaP 2 :}dzir id{uq~18JI;M J4!KŲG<&w] waAbc.kiA>1,E̬=sJpAga lS?7}S<1YA: p7 3[\g/ED{ZpJu&I?7'y{MM)!ciyiSZ}',XZgcrݝحMМZ~'l+W(rs(-sキ]0)+EȠȑ=r*žg^21vef? 'IUо3b~sGSi&l9KMZ`@}l{Zt :Uf^up[E/Eձe#be2אw/J犝&L c o\:֢0vfҘ,5F*}ߴɸ-W`n!a\ۈ Aʗ^= !Ff*5bf-ƚmzuk Ea p(i7a%`vӆ$U gj#>EbKFY,RYMho`aIdOz!?PdS2q9c2]KBk!&Dp3e[rp-#[CamZH\cu$r((:nܘOЅTp=JIkW2bT 6Df4ATxFI|?6'}-cɂo5nD`+a5򏓇xBWRm HMSiYou@CٶiP[7՜!VFs}Ig%7IL,6PK$]5Ȥ\P2f3Z[QF!0'K+n+k>ΖhCi XfgIԉR'ԡ H⸉=씚< FW^0QOƿ]GXmYr{>8;v&e$?`mFj*NTlu(ESOZqJՙZXY܎>#(`4@tvalkIn[MbF#~|qy᪝Mj@ P/FpƣXSa ^YyV X&ۯvpAW ~a&bT灼3,9t$l[ƐTQ vt=5[VXQYk#r Z`}ٔ]C8%L<%ӃJ?IcngٻHq̗k8;1I SY[Bjyru2 qɈ[e-^ {kšMx}ZJea踫v|͊c,rL+%i!ijYw?dhtH&hc 8y񳴖L* . 5GmVk"lۡ̈́5̟ǶBi ܒƔy#ML,WNf$?e`]atrƉo~LHsO^-F -zB<B~<\;s~; Vb; Sq^4)ђ'TdeaPpŚb/?7޴7ef5I7Ɖ ~Cdu:g?qf|8b{N2Z@LLT\,Q&r КŒs"LU5?;Qc4*ty 5#+ Jo78=@s%&}τ֘K4ކWNM'8O9&ʚ 2x+uCi-Nov+7ͰkV/U]eh3qyOHN-O] ryȎX$Ze g3mc<+翆ݞendstream endobj 189 0 obj 4536 endobj 192 0 obj <> stream x[Ky` x8ws#كd1\;x$J_Wu7ٔffͥQUU?چZOspaEܳz-/o&n_ +%dv{%a7~u_"1B0h*1fun;Ix60}vu0g!lmF*uxt߻D6c}?{x. O˦iX|!'H7-">Gaܘ8azt3f_l{p3KqK}$MD\ҽ#5vGM}K\?cw׻UpѢͰawgJHIgfp菧gktcX]uOh s8aGYN٢e}䦜FPDZm&,,eOc|( @d8O0`WLӸM*#fADuچ`TivnW/|,4Q[}=̆ėIb7o! 紅㹏]8awkhuPpR4*iAv>L|xػ)1ű| d _k?߄%i t(E9SJ\?ZAeXo\sS\@q*pMa IŃ 2i2\k7ԙ6=Co ;~S+Mcauy= Fq$.TmR`oݱ?6>h XP$6@( ٷopܻ&ч2RPF~we \LB\a R[#".zYS)~5f= w{MM!w.I]/a~΋Yvv(#m:,y: YN&T8I "y^f,d*`%;)-Чa,!a냕 #$@"-#r.)xݲI!R=*{w䙡S)C:8J .*&0 ߌacĠ~< ;A<&. ;CJ=@znR+;:d3K!ₗљj_NyH[3W$3]tvJdl :Z%FyN s& kЛXs[2op Р[ 21$s&4Q >8CL's7zYZFn!E$qᆕ䳴lj-ErG>&Gá5afp_lWêQj2īPk˚_24m*W^Lr鞀+d=f4 _6n?X,ܵh~uWbA%Į3*;om^-i,@T.:_˝DZM>mIimmcucD"r=^:t G_Q>m397LȉHȄ7&d?OjTHf7"Iy贗!4qqEf,l^>'pA}65?ayqn/*M?-M%0dR<E~(K۸zvq,cfBdoəw+ FcZT`BZ)[ôo.TΣJ0ޣbj[(1AƆ2dǓa\)0f8̣F-wP99t9jJqb{~`K˃U A] £UHV]0C 8oWs_qM΍s͛V_"W7oo@'ֿ6_{tՇ)v_]^OvZ͘묠&mx Ϸ!=i .i@M#[,pz&ye0ú@=kx *tC盄c((πАC"r)^Zt/2agjK@endstream endobj 193 0 obj 4203 endobj 196 0 obj <> stream x\K6V1rƓ L̎{jO9PUn֣EVM[??W z˄(H$D}^ٿg~o **PV޸芳+%׫7ķ[;7D~uՈZTՇw0xx{Ӫ8wnlӱ%/~xKB/1^)!8|vci0A*S߷yQPٷc:Gup]+JTJ:|;;+I{AT؛a< D+KԺEuX}WJ:QkO%TjMyYLX!Uj Eߕ/* j XvW90ăqqdaiݎA0NTK11 6ZŸ5ZS<J$jy8ڷ]o^^a3JE!ZLr"1G%6[ IJZSPCIkY޻d]w94hw>^8דh9g@Q)du"tz<[``xSKܥLAUzbRJZlwطh KsEH&w{VP|>Z}!_|s99|N!թ E(; qoW06A*)иJKK{N׬j'`w##W+%b m"O)"%>qRd3Xq|^$>MB4Y&k|Tfvz*w&Ci&!'G r֣;b ,koK54<:r7Bk/A}r( =dv*+HҚGJt,@S X޵ >XM4A^ഡ .[Pn?IxS)UeH2Sn!vkٔqzo5As=K?zZ $@L d==_%*kV_ *ö_h"齄q<"z<:g9 2`^SqA=.)̇Ӊ$I+ ٞ2h ,Bn(e pUt6öId(KQ!bU|TeIrt)Tq*f:ɒلL0g{ϡ32 ̳fg De 6yFI $|܎zpaJT\];%a'tGTpjyӍ/ 9w?tkaBCT*$7uRr+pC3nh-yX ȸז5t\10WJȇ]T4G}L 0`aHFZQ?eX=;3dNN3]C|buS`pCdĤZ)q R'G%Gv8`@. ' Mμ`f,/d'܆Kdf5㤃 ڊO?9U e2;zG% \L 8@vWf _+?ܠ? i_A f!5MY bFlL XKUN/91"Cg"} e쥱 ;mݐ{cQO2S^& PE!dokY_BFaC `/*/9Q PcMvH9DaĀ~ &x͝ a;c -mmضr3Ouܝ#$0cP':M7&؏6?y%QYN*Ӯ@o=^DetI `9S<i@aW`/zvU[W:XQ xl}"G!10dZMZH p$F㥝;aaxxc<)bHX46-m$$9OfKmq>[t>o'[\9WJt A"֑ lW7qܭ+Bj@3 PRM1c@!Y5Fd&>FdcgnzpPaC#S$fvw//d,gՔ-cj WkkFAN]G$ؽöb@"J>i%E.9h(G"-vF sCēͻ5__P| .a‹9tQ1*ON= y! B`"fDm:U2Eay::aV)8´)S`h%&ˏڑFDWx-k:VY,nGɕyMdJ} w̑ǁZcߴ; mpFXcaӠ'w4IfY׭ &dn.A6*A&Ko/IӲ"}ͼ6OdgTaƂ߬biqܷ瓧M^=xDL cz6W/}e#&Lk܀iGsAtmQck:GމC\@>g\^Ƀ.y@[aX&|Is<֑΂p e='ӕSq tF 2UK>l+b'Y0@bbAl}$ ݖWxsK>E,X.DY>D_(O9~ Ż:2Ro}4q6<׺3G!-T.1Sa6(46=ώVfb?;/sm=c]`f!f-w].5 x1 "/S.k` ɀ>9  ؍Ŕݘ\SSf-&:kKVISO)ç?K,G_Lxk]9sYhzᢜW/雎3wD\ҕ[JLJ3*&Câ"5?RԘ>t) a9DNS=>XuTKEYn(H4"63Rb'˕,Z>@,%$ з?eim=g uq|'92z8I:fz)u= &zWNwsXR$agj0;Z‰|L]7Aul6-|:Fff<۷A@<3#{u`*x+c !UoSRP4519p4wgV9ks| 猒-JC#{KCVj ?e͙%8)7ɱendstream endobj 197 0 obj 4632 endobj 203 0 obj <> stream x\[~7G[b?%nv.鷙KVO7{_࿒8&|N1JoV~+uww(~qJ_Xys+UÛnm>tVj;]reJWTK\/mWH\HQI"c?cp 1¤KGXᴉƥ1JЏSpC,>vq!qͰ0 -S' ?3d 5aFoBUңv} Դ *X<zN]3Q 9T Q 7 -TD%Ԡ}BA{ YE/9nW>]*19e٤Xky:rdq~@ "?;I;EGO@_9"=n9"yW6 55ۇGvЭa{Py2Ty`*+ & M5NB!a=y1Q4;Ď0F)w#έ/=0! <H\,|:C~> @ To==\SH{:z_B$﬉n:n:,7Ho lU0#S].B1NLa !x~V8&Ih v ˙ 2cdiK70(/VxhCȞ,fY>:9X CyY-fd%hRʥ W hF!Ai7jT<>BbT ;@VcYBq Gz@~%ݧއssft;,e*ۣ3}fwhLjk|r 1O|%ZNrZhoVe~Ao3q8+#?xajBh T/e:K_"eVk+/e* (r>":ͿlwM Ҟ^+፳h 1M}n;鞊'8avN,~n%E3N.u$HU +ٳoW}HIQ.u,rTf)P(2oAz :1%`QhB3%ML\o/L9F%\~?.F3)yu ˚e *F1]@I Y|%VIݤv ӎ\(5W>)BuB gr^Q02偖Ve*1S &TX5\A{_jvg8x 7Ch,)?shy?I(Ṟ=&͑S5<M:u/ hPD9@i6.3ɓ# 6hYs8.,L9u6N&RAhfd~'&N6nfV9Ĕ2yG Ͳ/!o8*meg);ƠK'3BD&&7Ȳ+_1gCjfȅ `79=%E+0@x4c4O)RdZ}D1 =1dSMx6(6vH`T%W6\.=Ei&;/ӘyU`#{󧮦QH}Fb~y{BR68cŅ %gy]DMMpQ/Ks^yfr4ӹ hR~zY#ZJvۇx ^츘D/oZ"חɞJ$r q} '+eV!oQ~_è0j%>V)MV̀3ڡiId>lQBR)([E5]+Nڃʲ5 lŒ>U k3giO!r)[_jn/Gl*E{ءQd΃Z=uܦ ؆%&;W|+:2 ,J&]O9h騀"?o5LǞ7Lq@,Y!VޚSBzl,)! Iww9h\l_M&sSJPj>qvV_"cn6OXA Las ZI!Yfq#O̧nZ>l,(n5wہ [qv&s[3Uo*Œ?NjukREl-_&Iq̚:LDi\]P< Mm7{l3*yn7Essf4f 9XW[8nQ9N)x>]TIq5gXvkq LQqݾEq9Qwc b >vKzp! \ h*Fe-'0a꽀6=+@挣d._#I8b^i۬G:˷Z4r_ ]]?6]B%p9!kTxWZ?O˛yoj /b˨\tk=sDC5{e"Ięq*n׬o]39Kұ_\WO jӹ>6@]H&7"a>ghchx11^S)磊M- N؛H͍"YB,GlHP_T#Lendstream endobj 204 0 obj 4563 endobj 207 0 obj <> stream x\IY裍̔;)#KGV55zuh"q{$Xȉa:*{#~6d?/ψ3_?_yc4at19SB6L^_|ɿf_իAg4Ffgcf/- 0]nGAXvp_|4|j_ňSi Wa"DE#%7aNZӆ7߮fa #$u)JM1l]R%dqnwmþwKPݰ6~OglѺ]"d#|J_d?95SЌ== 0t!2lZ2B,MׇD 6Y ?тiJISL)i{J}t{P.Z8(b:ˀv0s!zl^ g2}Eo+փo5"p{+P)L_LΣO8aRsҼ<']"災*3v}y#:ϕGef\.ѧEJ[Z7ж1UV ͪۼ dљr \M$nP/q"]FQ<~wPGwtݡ 2QfMdwQf#yJ7m *uN5`5 LSlRy_} Fّ}Df!lǘ"Hʔ@M&f[DŽ`"Rv}FfDJbz q1ӂ@܉tՉU>KCJd7aeǹy[ ,`E%K BBhҨ)В?F6*rjg0?xDzJL'wC 3<9w}jI< h8Dn$r!¹ |[ODPz4`*\9@B!l|SGBnBblqF;/ ī䃶B 쨰/pb 0RqKf,W™#ٝ-qkr(;oܦ,Eg$/S buA)ϼq"^~ڇmqﺰ-D#g /?T1b`OG8c5^@TIɍ37vxEBdF ItwDYdO" N˺Tgrns?mDyf };\.J*Y_zd't2o7e=S'PV 30P2:~eT`a `YE`{4<"yW{[ҦviK ᦪЃ9Nv48¾ Ie1HgQSDD`y9IHp̃+B'L 4C)̀- M(6juo ʠ0_ VMQ{,;i7W?I-B2 bN6ݛw_2|l%Ee 3-ahhRebpIp E(/XTUzz{oķP Bc8݇atoOwKv4+UPK ?uJY#T o`~Vvxڛ&G`!v08%>ԣ{t[}E;%{gAЇur= ]F |kxw;%uA➸"$+?,ъ7w!JJ ]fb y@[ I49T+7, /zxX5ыN% JI-БW>HCJ{8 PyUnQm=5W˵ur+ Cg9Z-7}B*dҔ%vۄm)J-nfyWDD4ǽӆ o{Y m P?_cLkm{"-n8Cr>@i+c7(qoˎIw;AJ*QyfN@O|dcS+!)&|>&zOѤ}njݡxCy\jr>0,W}Y}usJ*[=O-V3o0N=Ej:gj[}TMӺN 1yۻB%kZn_>GEQf˯Uj"M-І0b\ "دBn֢" *Puq;l%=Xd#ח6~$8| fAKY?&it  MBf1rzC0ꚅb_?endstream endobj 208 0 obj 4386 endobj 211 0 obj <> stream x[Iux#эV \ +Qnhj53_n/3QY%$[HC'߽u߽ h=>?w5TݵR5\=}/7sGict?AԘͻݾJf>d*><.a?e̗&TۚQ;epo\L+膳ǗjF+c|PjpnDØK w30.OS iLp?|ipMiJ8Q~nIrtZ 0E[8$&Zʓ7͍[O4Tr;Dv%Ȕv@yBZau~heCᏏEeUK][᠌A{\5MQuMm.J0TQJŻ eѺ簃_4J%5L٭(%$ong2L [a Ih j`yP4hZ{Fx.X _1)(sTApoq?7F%?`"FGXKE8ù2@zEGV6fip0-`T[|VRux=1@q`Yvxv+[uKv:)y_8W؃iAY]8J> Eϡc!.#@Pr8^n#q*كG~uRNR(jwD03~KY ׇz&hR2O.SvгF`+ Jxe-Hs!!%Ȱ;ta_!=!;†FPd,s Α\Ln@myOh3 Z'[I8!^0Xey :gEH{ػ/\1E]QsNç8yQO ^@ w_C <N^Exg!`"dgfjY8EEV'>JOypfS'm.آm*tvc?9shz,!BP>BtvXo' I)Dy:))t4Z Yt0g$,SRrulP d|G rIy#9ժ!ָ=8ϻnmCS{ C6(k8ƽgSFZvVy95F$<Xx,ȣeQ Ed a+e'^Ɋ\M0HD:BJBD'%J&jh"uW>R8xv~aʪEʪ5Lio",5Kނ׮ ZA㛗@zf8ʆ<’9X u\,e5k4׫Р7suYz2[m>VoG,@Y.Sj YPmwDC "&/R(HP3i4J<6fY BLhZ3=!+7RY)$mĸlN++m9)A=g:!7<$^P{BmqdBF4cX#?$LIlFWʄ">w֋vAyG(N ȽF7X~D/. %9 PBgU8cs/$Z:=ԇA*^ư;zP ρ֦"*t:NYs:2KR݃P꿼}Exjd$͘0MW,3<BHtJźqn͗ˊT[FP]a-@LV%з}蛊wH&LU03_}eZz^#@OADtK͘?W RkoL|!,:Nˡ ;/U2,GlBV4 IhĮOu h22I - Co} b0;ZSȎPi%8۱&`qA,ͦVHg8GTWT%VBMX _iě&&Q4p]NeM[b`|CX7V8CY_q| < -==/FƮG.pCYOя7+7W4Nꍕ++W4Ÿ8%,U. "9pnAc.n(/R~}\km-Վ"gUlZeC?Z%UsxPqv OJ"vd`zq$5!v۬_4z6Eѭb-X:M^ȒkjoBco| `8[L굳GgSl29E(E7-cvF|k/LA %OOfh[a_MV2](q%Pm3ՂC׆Nn'`#yi;3R$R/-0}Jyn FVaw$lbJ:5 "΂[WM3Kh~ g$7s}0ю:d- pT%e4.BAH#\Qwl֊ɷNBAZJIvjfIqMxjM&uźKI-CB߆Af8n)T4.,'`DWXBsV`O~ 6&$)‡i;b54E;5Lr_ Ϯ[LSYC5(n<% oA8r!Ђ<>S+ԗwոIPԼ,\JYm}5د&ڳzn+)k6mMfB|Y NҪP?Yc:cڑTa͂k@ 6%Vo4}RԖ!Y$v+jͮ|@zm v rg`kls+_}8xlu9GYBE]Us9ygNq}EAB7CW%EaGMDQ\; I) 54jc\ϤTmRL'q¤hS3 IW#W Vembjd ө ]4m$PَP/Zߐ%QMV"E}SNao>~z?PZJ 搵|)а~ڏ_cAC8<צ%$HiXw#tR;|vPܐ 7|Y}m>gq.6 6r(\UlzOdm|P8 ;ly9z>Oɪ,M,i994Ͼ>tpؿTe2@RT_yإozc{6m 4x(H{DPv$ݖEJNV5ԃ ^.7?DBFĹ߲lnVJ>"% 3yife FER`'dx7HfHa6!e+k',%jtSg8ӖLͤe߷Z]7Υ=UlF(RtNi/퀜h?r;^&:n?vv l>d ~?>;t(ӵendstream endobj 212 0 obj 4624 endobj 218 0 obj <> stream x[Kܶy?b*'J%@|Id;=$NuJf#Gϧ6]))UY2ģ믿n`߬ʂJ\Y,ٯ^]+ gۗWl%x(]_=ocS*|"\aj-Uv{œڿ]0!<NHI;*>j#VჯvuԆ}SN+t;HVaQGz8FKni׳i}ݽ?PL+ouX*$qO0vw )Us1G6)xoi0ee[|T2.jvn6f-ĉ՚oNu?|)k 8Gk f@0ãiD4ܷR #JQ S^j/Nͦ=dYh_<-!^,3J.qs?z46z]3܇”zbOk'#i -d Us@i%v&v1xέd9ӶC^2 ti4pr}?¼lH[X,jpH9/A^Ɂgzwl0\).IMbA(nOJNAk QDǡqz34o/m"z7(z&oGPDӾ> VuZP M;n,[ѻ}`*y]"m~_oNgP Y1ޙ-`t9[AE p1(.!!SrT)9b$]uxu^UY(GҷnSMoS~R1xҾ O!jyuS )O5z%o^=6HoN^@~6Fz{C(g.(T2E;7wfb$!) cъFg](?{h^(,OMׅIH4M\tIGWQA|>Ғk읇"LL,'yصjP0M~t1#,@YfDP/w ˻%0qb 0s! B"48*2!uY`QJf@|z^:ŋ%(dv_# /3F&MY4нL`N}Ч C h S4Ц0s=xVž ZV^)f*& > *b? yRa`o̙F1"f#R$=&AgN2^p|*M@)kH:dL`PCMXҤMq^=$Qxp@bX:YTe^nbNRBBxlGyQc(ߤPŕ8jя.%̂H1).Oq/<@txjYRk 5, ២d,z Zg3 ͛X!%5()Kmc %zޙ- ҄9K0K,q $ Oqo\8UR!S&لQ^Zy<ǷvmXSqȰCēyFh^^cC)EIcu2(xbe|x{_pԾD` Myt{4lq] ]JOkb.1G^ϐ 3aQCI 62S\:5:*LUʮ<0t }Z'R7/, *xxGYM' nm}Quh o_HK6KrZ{m$#3#QP=y =HT)ʪtu2trTPuEaj(Y4#Pi /arvQ2+c11URjԦթ?nFݓ2u6-QwLDlw &] yԃ]}|Kk@L"h$<Ȝ8 O/4\aWtl1 g,a.V Ax۬T ,^z<B%u?\2C>1ky7]s:Yr,`>)3GpV!n(P)!5NڧI1kMjНFjWkJHRKRx힚 R'>JYc DJgKY%yqY1&ї zW6A ‡Iy꡺Y f^9K=( AboyA\.Â!k@|ͽl"dWBR - PZkBO !cr.5V8VY09*a}sAgI$~Ӧ pyM6sI$  pw HPK=Js(`Tų4fN6R3kUQwP;Eٹ~Uwk#0iM'gn-p!QL<=$?es0As9yS ,yAyg[іav^K/ [ Ɣ(}J$OF!kvr5?|]GN4%O4X,PtŬyȘIE:MشܥXt8[VMd5PMnx1Z%rrRdtK<}9[W%u߄Pe޳'s{RtFo|'3H3nj-Z1k>ҁISI$F 5kFFf5x 掎q H$g5GcZ;Q^uR.1J$ [c.e^ Fϗn^pg~![j*$K-t9b^ޙ -v&aa@ $M%bs4ij g-rZK]7ذ|f-qwPO/vN|q5 ._JL#d !Jes].4mBI_5?ެ iq +^C,>jN+vugnoH3bi b|9f\ko!,Y+xeCD7alX? oa7C ,ZV}uSY:_`>FL7{PXyy/5Oƽ6keHӷKYi|wMi=u8yBabPЩIËY}_SpjyLT$ / / E *_Ԝem^LH^<EP=4,5xz8DL]~Н:9i"沜5Tvz˨GIiR5@f,ݟi4Qz%hV:HzY~/X9pY6,EZn~? ~cB0.?muSWoXsb¬Glh+_U+rS?endstream endobj 219 0 obj 3782 endobj 222 0 obj <> stream x[K6s=1j6bNV[;BUU\ףbYΟY쒴Kf /|uvW_~-kջ۟uPUz@\+Y {팭~zom߼H ƌPy}}VՋo}_v?txUڪ/ׄ/񚩤 }`=xV^/Jiuʈ_3רZMI:5ڔnǡy_}߮%iQYe<^[\U󋎧m  ۏےdq(*tch jQpƥp\Tx]mfG0&|[Z͸.87*OMOF+T֕tB`hּ4<d,0-HF鲼i;AJʓi+\#({xj؎WѐI¥%I@7,jg$D%yZ>0r}@3_`$jR1|BƁM⑝vVfj j%M~! _EZk5[ O64h0-nmF?"zO Ȭ=B#8Z?%K<=94R8YX' ɴvB0wuM,Z{/Ƀg_O4^_wlVd`q8vcZS@t6 P=- f't6o v)#XI:N^wCw'xL fHK} JIc*GB ]!!Ȧ3'fKٵ; PȚ*ʯ@]mA0.#)X87 ժ}JNTL)a9ăy1f1^&i/4i7i鞷ĹRDZ/VtD ^S5^ȢjCwȊ㪩5k.b_rl GxqqPhIhh1Ɖ/iG)5SĚo4,T W^}z"j5}h9:eԙ+DozIcp+1$gBns=kqu}ϫrN2kYC3!(/Y/V0eiC14.Y (H=0YJ ehkf'%R p8e8y΍RBe; Kw/Q)J֨[;}CĸB~ x1)t&t[puۦGowMj})}`F̾X .a)8swNqxÇ%Vwy d{/: 7W0_ݡDN<CPsS`ͳ.AYs& wa}N8 [؁ gؓ_AՖOwȡ cðG:8M DQ98k4 XM`myk6F@R^z'gw선$`O Q'-=6A9fiO-Ӳ()b0"{6XKNp:RZӽdcK:f3҂bܓ  xiRv3vŌ»[[IBtHU_~8b ^:A^/A4*=jIի]"6pGp)@ hWxDX(r\?G\CY.Xbf dzfXL!ɞsGj9j4LRCďo+@X(B` `MV}vË_ݟBg*yNJ-IBWRx ! QFi}:. lc"n@^saZ(QK5}CZxAJZ(rO;ܪU`é_RkA;:bgyJi1692=g$\z 5EI 埜@`A# ec UK9'V7?·3MMTSLS2Q+ Ϫ ҤCL,d ґ%f~c,,%dkRAzlcd<ׂYQCc̚sox{8UJ^GMO%y% ` J9`ɀ'bn,L\{fS~Mqc;zbu-/H`T{e5 ,»fBauuդf 72`plXٌ- dHqb^]sa3UE})c.d菱_^~^urzc >e@I*tT~[KׇhQ 9: X_l3yY\V\qr;VX5[9_&6S=o3R?0$i$΅`?kwOSx<힊0kkuqp%`z5->߅ UsԽdFƄTZN}/ W(.N*c=@c!vO e7HU`Lazȯ6^ N4Qs)x.'7uHO}-=Fzt5S=@!&gm梊;Si zRSDx<3_qlݠv(5fpzeȺNsꦍvSm 8/(qoЭۦ"(Fif5&y8iNq}livx1;Aѝ3Y7a>. 0r=s7jzW*Lb%: ,UaNЊb)RB1&tIvMXԜ$,%  iKRW~ɘx(} KɉrCUjɽLʫ!]sd l_v>.DMGu Ca&e*|@x5^44SŪ(g8n9o{O[ڀC߽?%oPkM%2|!N;B4[tlJ7"Kc*4K"u,bB=KsVob*ii;m0s)|q^SomZC'dM7maK`@JSlqOZ9d[EY9hwYӫ7"ILi`ΫV)ߊ@̩$\\ ][LN)v{n&9Kĥy7aËoXE=wmsLgH=z;f[.Ʒ/N}2EQSq$=Yw*wIyص/ҸٞE\(5>TVs\"s.hǹ…xykQz7l@nǜ>N2řR~QM^W زga銗M}oe̷.02y5gq-I.;璓1($p mVƔw|I;KSK TzHr>Gv஁G"_I$əGI@endstream endobj 223 0 obj 4762 endobj 226 0 obj <> stream x[nFg!oGP;bIƖ 3xnoI X0KwթSڟ&eA&Ζ'N>M~̖'??yatr}s F RM VM'O);_#zBH0](>rh=xxk{Yi2[*R4ZJ # {vdd:TYBJBK·w)<,G7$=Ҁ Roڠfp0/l%_ݛ@Cm4ovuk\ro,q՟ :h g%4|fv IVv:ev9b̀'r'BognU!*0a`QP2L%+И!+ѧ> 50 5qp͢RV xZj=Nt¶<42!7Y ^fn!|b$u,$&(Rtt~/C2C3~n ;ى]ѻw.&T>=m}T1ü[#vIvE1_w|YZX?r0Yjm˓`4/u8DX<͊lwCyY0-"Ih+I&u#UQ|I=]( `Ư9KޡJXMe6܊S1G6*n׬Kחz2U$F=,}E>,-HjE0˽?67"/ac$ {}|4ď՘vg U j^AZ_$z䦯8f4GAG4ov\!< v6pek3Ra܀[O}r< 2,>j&m\\UNU,{) aќ]1`2J"#2>TibEbhWˀ;trXZARTx*DĨYh`Fc.k>#Y0̢]yM[<ǿt8LcL!T(>z{"(+!<e>|e"$ ~On"/lȁU.`1dh@(UA ]FqEmmXkhNj/h@"GZz`ʹ!<:VF['E)qUѺr7wjj ^9ol|ڷf^x9A9WktPHD3rPW.]r_Vh `ȪJ#G#O GmW }45' Rd_>2^| } !-2%(Uv;vnkf 1iA"̨>f*I=C N1Ii~of] sBD G$I& 'eYZSKW?t,]QJw R_/~aJ[Xq3ڮ{c90=-ֳB `tŻ狵S T*EwnK^sG{$ȿ\?8] ؗ!O_S *AjaU$]˫,sI]iv&5k/5^~ kM`eZռxׂe>wtЧFqE$=,F}u|Bcf=}O +DRoXJ8wS `q!EG˓~rJiP'O |*C6q10~こ8 =(^ py+,N_SE#Iv9l7zWR|ܙ"8|(TRMyi:i8zM/ߞ!ї浏i;BX-XqutGܛ S5:?LTc{cDǹPl#ك5ƺc`Q-ŠޅX[rr`]&C C 8yh#[N.O1{]졯֡0jhÌ}kg#'w>epG։6g>N3O}%M c=Eͽ7lCpT{fqRil&\zFiBC]Dt[H&ϯ0ٶ&8$1`4iӊۅR $:qzc4r,9Yk$7ߺ66]3"?&cNgBcɸlUcAy4|U8ag[{O 3P#%&1|hT\L ͇gp2r8 #>iN1?Y}DC ]5XՍgBMTƈ706}DZw͛zyk@R áJWkߜ=uօ6ĺu8B19h9?v6|Ps|\[wB%ehJ<\{Y/ !(Unh9C,glVۣXi%"Q#e!e[d(;>2鑔 F oykQGѶ> aK;9N <1g0O&F$21dmt9 b˪ @}3Vdf"mp2;cpeW^+ަ@ s2sLxġiRv4jLA$~>D190#֜E%9@ts*ɤp=̔:x2k:kjH<?3ɉpSV,an=JT؜lJ~%|q:œUX=x`NSN!wLdt=#H> stream x\rFgbB]Qe?Y<t_&D٠.߬[V(4[01iQ̓'Of﫲 ]ߝ~?˓goB+Y1Z,\]ޝ<3M7|!~EG֫듧/~K4Ӝw#Di?mm| >GT~LY[1o6R.Y[vg iū~ ]r?{g>bZ*2﷛$/WO~Bi{C ^0*q#aL;3Q2nGQ5 l;ߕ˺u=*!3DKŒ& U}1/JŔL0]2kv bUQ)< ElpTJVs_%iZ U!N`ZaJF36`gG`Tb0>L gp2S㫉%+Bщŝq'#;#+xzM#xY't69~n67a. `7**DuC8*QU|\Os7;`*|@۾(q7Oˉ3A%Ϲuq yf|G0eXu}Wx D)7]kRAZ͎1^$]}WЅڽ늳eC2 MH(}ap3;iDB]׻uEQ6lH'ME ,+y>K 臕֓hQ kTspHT;ST&Ȉ}dbx@CƩ5 GLV-ڸԐ|E+DQ'e"̗0^΅-8Vc.}Ri_Gh_%'|HX٦yX;gFi f&ɧTo{mVҺ-R](+D `:%n*NQ39 AB{= 7vSM?ԒkTbbAO Cz=c Rĵco;}tIÔ.ھ>̘G >0y`p4@#It p&NEqpj$mb6͟_eT@?x7=*̪+n {!)7l|S#jfqI!$?6~T$9Q^Zw7>1[X2 FTrܗSNC8`x)t#Ywtt\qL"lcBqU)`@_oYFx,0TŚBbIDLd EѩH6SG0D!ѷmSQ[ȹ!+<\ 4&l8.' #O|K~8%תjD$2O8ĭSa4TlITr ~QWUg(l cM4~ >UD,|R1A'ZTf_ľ5N(QzΤv+gt!Ӫ۟tvs3R!fLh{HtU_S8DzLFXT3-M g! 1s^0Oܓ&sR̝4,;c_u)1J`pY`9OwRiLodTXkCG49Ec_(C3Ϧj&+gLȈ:/Lc Mң}IULIxB0Ϣ- B>f YpɣđtdCT,h,@w 3J4C8ʅ;/a<̡4Q#!>AaQY mL~P*$s{W_Y,7@h5oCb su;}D4gY⢢h0QD8vs-SNl2!Ɔ9-3zrm}b5G32YŒU>+L5BR_F iC"+>BJSes({pgx!1bjrb˰2n[#~_J {pgR&z}c-#5t~'`Y`f~=ĺxe?v>ZET&-7% 5! %xR 2=p!kYMRX@3&FA1 ۶km>~Į]}lL =1kG+E,z$IucOYE6BL;Ő\/d~l@&y:c1n6|dqA=X3ʹ 狇UyKX|ƂL!MAN,63:GX :E "|%itjJW(aئvtC r:ORu>3ӄs]CbZ ?vid3:iŠg*4e3].(Tr.%Z Mqx/Fb1֠LMh@]}lӽJ|Wo~̞CWPs8ՏkbpI9Q#uup?K4`88vU(|}[_GF*ZWcA{VA,Os8A5XPr{N`FgFT`4 #LIgr3 9PY4אwa6l ^EP.|'}pDv,]CΑfn_TЍw CZ91`d MBg 63Cb @HxpZAuzet*a22Ƌ7u\|cJv:]A67M;td(FKL.ԅf\9-4YFD)Fai݆4UVkBIOGT0!HF2n9_(xSjZՃ8 K|.gY^1ޛsz1MNwVFvU?kk>w&herSvw6zv:i+^q%Tg9& ߺ$m5.ݬE`$;._#; L7t}V ?%\҇Qf1Z1wX L4@QF-0(G).{/tVza#&ng6g锸y"P233kIfblJ|{ߟ6hUb΁_WF2(jrqR݋Wq-N۞FJZ&Sq -q'ìLqa& ?Z͜5=ez=WAF5:G`=n=6E|#!#OqvfNHZɎkHsNz&H; HSxaebJ{/ 0ǟ7wQ(zsk]؊Q'f3ywV3"mj|ҥiD[pL̦)N;AH[ߵQ!Z ZicFf>@HO#kendstream endobj 231 0 obj 5250 endobj 234 0 obj <> stream xZ[oFg# /i̹t6ޢCn`f* I ̝HYI1<Μ9;nQ (sxwnZ.^\\ 2dqsw? J bq]KMy 0i'#K[֋ŗ?{V vwv cCU"e2,nUUʑbepzXw@DxkRTx*J1k6k okZGB\Ѹ0%$ / +\Z7_C)P)U0),ad>^GSqg&I9bޮ.?Xb4 ,47_!GDg׎8ǰWDU *+Kwѽ[ƻv"k:$޴..tX0CA$I_զl ė%{4QĞßkD3*nlj8o/@\+5$x(Sa qiL+{QP"mvWHj(x\|RB,G2Ag߱sI@Z.Yõ P'ו}GWisH]W֬t=QHDdRAkGz1xWW bȊ(+QE*oxu]}pZ^>{E Xep;__gR@!g~WK&sΊge)4;`>x[MF?/6hoxqN8X㍞ S BBxSgVeo|nX$ر]"Yb@%}: ES<UYS 1!4)){op6Ad[/ʉމmLJ.r @[91$rX}@a58 ,"}`hO4ANdX =@W}H]9aRHΐus~FÁ4f%!zm6%ΰ@0$J~6-$ Ϥd;'xbtnnӟ}rz-OHmF砂HHC1dt >q)c>OT>ZN6z~@?&7=Fy=$ j={0R$=4MAN4FY YT{}}Tٔ2mk7(P5HWr-'4?kjNuއS C X%jd@l7֧`*kV䁨>7k;)[7ɉ7߼рc8NܢZmVcE.L]z YiPRmJL?JNYhptT4اԹ޷$@ښXiC6xn@N㢈Bν"7R`[ X"l! 0"7VQCZe>VylBj)=0x\H  ilhO#ڰ 26T!m0U!'lmS#O@䥁MOrz{B_}8VnV^h&EwMxS[kvm)9!>\djNMӉB'KaAON5Oy> wІFS18Ds#|p.kj9,ӈ ~V:vM(Y;hh>ʟ MVzs<"d>"A߫5꿣p6% 5?uj߶}Kl+O k#XGkV}T8'c> 4MNZr6\I.r5veMhc~8 E+F\*Ad<`0刧JjAddm0Z۷QhxL~T2fw {5xC o0s0 hƃ'!-r|Uʁ,ۛ2X.$3CZUyZmk]c<78,lqnZYCC燆́ %g mGѬ[<>-Nٚ֙igΗ!typ0/>:p*ٱ@OeBEwph"b0 IMZ^ImʂvL y(jhm e̱!":G\8>J8tG2ӃWq g[Qq\cPnCa$b.f^Aud=V[n'5mpiyxTK[J 뇠 Bs+"aQT.Z k|ξR+;o737Fy7{endstream endobj 235 0 obj 3340 endobj 238 0 obj <> stream xKoFB?`w hRVra$Zb#2%50;ʮhvv/+Π_N'D[V?'Ww_ż)$J 0ivro!*PL*p̹j>_0u<1WTpG~m2xK`Z:i/,@3^e De~뢿c^ymuchKzކ`ferݲV1?Ǥs:|ȎRT`)XF#6Q%gNC/¢*khGC_+̅?yBiWS̋cw MJdu):qƍ5XlհKDh8@X-1 w̢>%Ks氊>#>R1zow,FaJ^%mi]2n+c zSaa9p{(C\|.ZI͊ƿ9vh%^.>3)˜)GȬЎCHy68iSҜ~xYrKQLqg0i2ϲgx8cap*ܴ\QQd(ᰉ"-WdB1"\7uePx $/!i:PL[UK(q&z4rMδa xX7Y[ ȑs-Ùp mfcDmKC䮸Ƙ$44[\E*I% ahmY$ExT!H3s[vSVw1ϧ+x}ć޴5p͠i,ߔ{Mm(`&yu l( ҅/ayI<=SjNbeBPE=%~E@[*|IKNݳKc9W%B.l@Uva ({'i ^ _7C TrLCiw5^d O /Yg][Vdͫ'?Z endstream endobj 239 0 obj 1161 endobj 5 0 obj <> /Contents 6 0 R >> endobj 40 0 obj <> /Contents 41 0 R >> endobj 47 0 obj <> /Contents 48 0 R >> endobj 60 0 obj <> /Contents 61 0 R >> endobj 64 0 obj <> /Contents 65 0 R >> endobj 68 0 obj <> /Contents 69 0 R >> endobj 72 0 obj <> /Contents 73 0 R >> endobj 79 0 obj <> /Contents 80 0 R >> endobj 83 0 obj <> /Contents 84 0 R >> endobj 87 0 obj <> /Contents 88 0 R >> endobj 91 0 obj <> /Contents 92 0 R >> endobj 107 0 obj <> /Contents 108 0 R >> endobj 111 0 obj <> /Contents 112 0 R >> endobj 115 0 obj <> /Contents 116 0 R >> endobj 119 0 obj <> /Contents 120 0 R >> endobj 123 0 obj <> /Contents 124 0 R >> endobj 127 0 obj <> /Contents 128 0 R >> endobj 131 0 obj <> /Contents 132 0 R >> endobj 135 0 obj <> /Contents 136 0 R >> endobj 139 0 obj <> /Contents 140 0 R >> endobj 143 0 obj <> /Contents 144 0 R >> endobj 147 0 obj <> /Contents 148 0 R >> endobj 151 0 obj <> /Contents 152 0 R >> endobj 155 0 obj <> /Contents 156 0 R >> endobj 159 0 obj <> /Contents 160 0 R >> endobj 163 0 obj <> /Contents 164 0 R >> endobj 167 0 obj <> /Contents 168 0 R >> endobj 171 0 obj <> /Contents 172 0 R >> endobj 175 0 obj <> /Contents 176 0 R >> endobj 179 0 obj <> /Contents 180 0 R >> endobj 183 0 obj <> /Contents 184 0 R >> endobj 187 0 obj <> /Contents 188 0 R >> endobj 191 0 obj <> /Contents 192 0 R >> endobj 195 0 obj <> /Contents 196 0 R >> endobj 202 0 obj <> /Contents 203 0 R >> endobj 206 0 obj <> /Contents 207 0 R >> endobj 210 0 obj <> /Contents 211 0 R >> endobj 217 0 obj <> /Contents 218 0 R >> endobj 221 0 obj <> /Contents 222 0 R >> endobj 225 0 obj <> /Contents 226 0 R >> endobj 229 0 obj <> /Contents 230 0 R >> endobj 233 0 obj <> /Contents 234 0 R >> endobj 237 0 obj <> /Contents 238 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R 40 0 R 47 0 R 60 0 R 64 0 R 68 0 R 72 0 R 79 0 R 83 0 R 87 0 R 91 0 R 107 0 R 111 0 R 115 0 R 119 0 R 123 0 R 127 0 R 131 0 R 135 0 R 139 0 R 143 0 R 147 0 R 151 0 R 155 0 R 159 0 R 163 0 R 167 0 R 171 0 R 175 0 R 179 0 R 183 0 R 187 0 R 191 0 R 195 0 R 202 0 R 206 0 R 210 0 R 217 0 R 221 0 R 225 0 R 229 0 R 233 0 R 237 0 R ] /Count 43 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 38 0 obj <> endobj 39 0 obj <> endobj 46 0 obj <> endobj 59 0 obj <> endobj 63 0 obj <> endobj 67 0 obj <> endobj 71 0 obj <> endobj 78 0 obj <> endobj 82 0 obj <> endobj 86 0 obj <> endobj 90 0 obj <> endobj 106 0 obj <> endobj 110 0 obj <> endobj 114 0 obj <> endobj 118 0 obj <> endobj 122 0 obj <> endobj 126 0 obj <> endobj 130 0 obj <> endobj 134 0 obj <> endobj 138 0 obj <> endobj 142 0 obj <> endobj 146 0 obj <> endobj 150 0 obj <> endobj 154 0 obj <> endobj 158 0 obj <> endobj 162 0 obj <> endobj 166 0 obj <> endobj 170 0 obj <> endobj 174 0 obj <> endobj 178 0 obj <> endobj 182 0 obj <> endobj 186 0 obj <> endobj 190 0 obj <> endobj 194 0 obj <> endobj 201 0 obj <> endobj 205 0 obj <> endobj 209 0 obj <> endobj 216 0 obj <> endobj 220 0 obj <> endobj 224 0 obj <> endobj 228 0 obj <> endobj 232 0 obj <> endobj 236 0 obj <> endobj 240 0 obj <> endobj 12 0 obj <> endobj 11 0 obj <>stream xUmTaafT@AF [~(~*TYXjd^.U *"ɪCBTMѦs (xgb=M3s}}粌òb-}sFxV ~$K$ Oԫ#h7qc1FƲq9 2SfTl23x}~a>ds2 1YYy<<6gfSI7[D4a+\4{2D04f3D23&0aOpf<#0r3l2{cǷu+*"R *A-^̣ tOd`$ʜxD•(2=/rk-$X !` )ȸ&E>63 b(-lbyD&e;P9PUV^HlTl ;e}~Ehcl^f ٿn耻F FrEr%&U}2<(o[m &^tݩ+Y TIbQZE`Y頇հow,6+W$sl:(}/G圡8e jOVC"H(='R±7ۊBUUN%!Mi JM "͞mcFЀ杤~7K@Ϧ'{:zo|O~H0;c/jVS6[t2dDcok{3~Ln?89/X d#6\>p& :ܑ Uh$SZbVYd)\;5xf'D9yݭ--B7a. o2v@ȃ|Yoښ]g^KzP 8Q6*_g'[YʳrJ2J|LS W@*D>É t")9;Cq=֧> endobj 8 0 obj <>stream x=PiLit(EEmN'v )h(@=$ZH-R<vuyC" r\"4Acx&c4&wb4ϯs2dTaFlIJꚥ Ƅ.S9*DI᡾ЉqcpX`;t2n!V'IJ f1g *:abV:-6ѽsn#(戮mƑLӱ5-s"Κ;/>d<@4d2a%ѓi Y//!-;Z<|oШ)8U)NػhR~Ş#jߴQ a܏5fva}:؛_rŵ'AxqF) ʦSٵv|6z 7ti+-J E\@uu2b)1>Ѽjzn! _Zqg-mhT(L|Mߒ;mQoCMJ1s2: jZN+h,t ꀻ׳iY8{>S*a@>WGW'i4RNQ6H%iw!? ] vulwɍ zb.`UC yvX[?rD'1B] %R7U@#זS͠,@.F EU)f =jŌnsWSCoe3~X@,> endobj 26 0 obj <>stream xXy|SUO W@@j, (8(* *,BtI&ifk_=Mۤ{J[i)" ;cyظ ?ɉ]+<8''vmdEaZ^!OPK}<~'K rs)i9)d>?90U_`ȟ\,M[4z2AŒ72W%oS^yLxRT:.i823[3ad,c׆3J̕X.8Qu2xĉs@~{ BLnp&;@81p*@L0ku(.=-VX3ARvYbpJ0 -&P>FTT1fDM3?\h9 g +W )4]A}0_&$L M qL1a처0Cls/=cR1_7Q$}^>MoiȎll4o>Zz%EϠ?eWF xg6 ꘆh8 (٦;$ץL_ޙ:=m7U}鑀vsƔn/P lk[XC?wj:n=)Ff-si9EO]ͫͷf#Mk4.m24)@W"փJ`'= $`Jj)޺E@J?Ѝ_GOAQԹ_ JB("bG[0éO.U-h~Lr*e¢a 45F;)X/`:`]ݕ#)v<[ &12gvVњ(${U.(-aYsu5hZiͽ jB%onyz_ B1#^;GKc/Os No?$%0b[gvz({\y{{ހuLD @M* "א`ޮ曍(OՋ'}9]ٍˏ92'hx'f]/{c} $C 3*6?+|bO'm@ϮX6Ⲓwgф5w~W v[kj~D %{?; NCC#Hj1x#["]W>*K[,:䮲URņ!!Ã?Qf[mtvizo!ԠIdN;z ]S?pm,XlrKT<пaՙ=Zu`#"#[!cPyjWqphFDW߇9'ZZ\Fj¢)%Id.MU8D+ եH0DeE}iX3mY3*t䮌ȱPBc/ @e#9Ԭ3\XͮH37+o8B\V q %ԓX*sXI@Jc#dvĺ L.dTZipJ@hzą$GDߞ@1w QϯIDqoHyx*B &qˤi(eoIjɶRA'KTŋrT]gHmu:ɚ\y8@c?BƊ^|*;o<[WJ7R|F?H?D0IBX(+TZ Y8Gi%\JՇuMDOYA{$t dgeBξt$w0‹qhQU%U$.4Wp+hpeȚ #Kd =ĜvndVn8T(T2֫nZ1졕"%T`WhE epD0? F-x_JviPXu[Ndioy˰w Ucu\}aZy*  sE@}}dq|Cg#Ј~܏aA4u)GrVƕJGn;t /܀nl{C{IX56V*jɌX*npAAAqheD#陗^USUBUMUU M TkW]n7Nra9~싁'Nd0 6g endstream endobj 243 0 obj 5649 endobj 24 0 obj <> endobj 23 0 obj <>stream xXyxSe?!4ft 舂+ʰC -ݛ4ݒnٗ$i֦ktK7Z eqDDGȨsqy9Ңx}_{{[>1y!"lyuՖŏ/]'Iυ)oj#|`L4|7JͿ ޶T*SRR,=g%$&g%_2ciyyы337ȍޘ,/HNRi,?/YF,&+I.%ۻ~<%7uE^ZL~zĀ͊=[^`/'" !b+XF#ē#U)b1MbxL"lj8b x'K=xD$q'1WL9'L lyrgDh┪)!adp{pLz3v,;/ݵ2=|roX{ߴg6HfK$>ȿOJ^шEv/x֫]bt$ZԩAqB]c hcZ(.z`Qs eE6l`ӫ-^ȅl uY]V'qB !n_VXi^QmYxlFBLޡ:@ZK+*]>wuu|uD%"/,[lHJ򀽣 tt2@:*Plb]b+I) zg-zI Gܓ~{o 9_l+*L%a]fbL Hvj;F}𓽹>?jкU)Wk's嚜 tƂ8H"}@kRťeL)HH}VdPlI_?o"CÁE bG B|њ]VnB-f;kwkKL6M6?3ms 7y4WlOٙN3v@h v+ԕ3n/Tɺ@6AJa7KAS)X$QTAOmorƏ/ ,J"pSrKrIyt;%t#/9Nџ*:lhu楿' NH:wgZjھqw.KY'OEi8-FlֳŖGQ$#D絥na?s}}MiAMzjUijb ,yE|c}czٺg7RqMNc6F|KcK>Wwv[I\/^Z@6l L1tů,КU?y,6_5,l޵;\Q\CJڮbÐ􂍵א BOpU85./n=0 zj2NƵɧyMz݃W8]՟_ɢ5S;q<ȧExѢ/wg@"qO*a%vօkeü`7Г^<#W59fo(s:մGޘzByh֍oz*־HQU`*,N}tȮc {@1fuD&1 c>?ӳe~Eߢ׵W-7(M_ :rT[}) +JnzEkbdD( 5z SA54~-<ӑ(ֲڋ&9ۿ޿,Dl "CH7FR 2PJMM0Xѓ󸜿/MOբoh٘PTSrioYW)S'u];y6 ME]X؉}MNbݍ}h>~_0u֪snX o>I_>C̻=$?Sn΄Pw`t>*XYң f30B:ٞ\Z丛^I"nqKz)ǧ0 Qo"9kg` \j )s4bl;H"4ݻg 4 IuAF56 6jEؖzpt30Xz͟%*,5G.Tbpb[(% ' uU;N-{)U!f'0Kbf'L*^OWVPP&(/x~Ȇ@ϜƣqzC&SLLH<?=uun US\gOJ<[!ꕮ2])v[$Wy$Sʲd$+`- Z Dh>keW)|\$~~sh)g,$ќpGМpFmTIsW:;A{Uj'I} :2,D u"eN4W9ź|(-IXU M]occu܍xkɡ'9bE{M+PJCX7 (p}Y̎FX3v:j纽r*? |랮$>naObKk`'ˏ<ʲ^\W=5eҌ:9k[0Xޤhݵ~ITk:$A]rzLw7\# v.G?.F>3Rt.ij'.Qo!槍e($ɐ`8lX dG}kJ+5ßVNCY\J3ߴA}sdgTU#[>_Rȹ5u:FSf=4_׏pI%{ 6el 'ogov^p܂܂D"?cpLc,5D3`?RIvT 7Il̦lkѺۓ?"; }PPZdr=pĹ@o'`n]fԏ>S`wN::.jɗ1G ۚa"Kҕ10L)VRǚ1Kkỉ5nm7V6ǪbŸ?vI%q eJ(fgP}@>K 8I^:| `gKe:롶gӾra'7ZnF+>%62`kfJOݪvճ=h,8hN +JurUvطHv_:Yk-Fj\m ZñF'b,= ysK{M6ؿɸ wN`3BσAJ]^3ʠ1-XۃSL^Uȷ2_wJl &IgaxڨBl X~J<zI9V F8@MX%n s13~; _"͗@0V!͒*|m qkH)̯.jhno[qq4 p˨X<H١7Z,*-!6~^a-P1KjD7;`~ 0X6[S'Z a zʏkhč 5 5=&|F~/V;k4&c3RgMi*?i\]98RBj=cF  N۫[[fEKH4nm.KX ՝9r<a\6n:N;?uef4|n^C_EG PL*_ΠP#ИiȠ,swEˋ%(X26Ul!_Tm1WmGRT\#Qlk44M :fȤzM]eF1@qcjZ:pU g[]1`x55Yd1]T7yPUL M;s5mS d endstream endobj 244 0 obj 5249 endobj 21 0 obj <> endobj 20 0 obj <>stream xV}TTe{An̠hnHƦFj"C03̀8| fleu²8F yӾw>w2Fd21O-_6O > yאiBIy|ڸO&a齘0eѺ"MPlMXDDfɖL}Φ|MBZQv斴"OfnSNf%yyҍBL!3c,lnKAqQ^3 $9!jE&.Y˟[T\Lg" &YĄ21aLf3 b0?032L8L`&2SibN˴;^ȷ+M.6™97ǃ7J8~ÀSvFO]Hcc^ H,q:u@|t}|pBZYj39&R^oujo+mgKQ9韜i;}*_T m*q?یGilFx:S5%G]y oMT8I!y"Y$ 5$ i0TM q8*n|~?"N!fAPµ1H)u4dq?R1X.HN$je0?;}: ISbs;4K)~#DrM\ϧ}\)#p^I~zƨ8QeUi3XQ{񤪿^sN8S&;%j=oMDTnOxqg &qq8R|OXj 6wnﴨ+t+k#$@zp{DjH%ЉZ'gM'/m~|S%Nw\59֊BP[y˿ dJn~[ޮDn?(M*:}cH3#ؾ {_TIuVqи[ɼ8Q'Yjhs۠juԩgS>6GGo&\#O:ųqH5Eu,jKZ:_|X~1x_t732엂e,vGy(%}k!('0$mxe? w/O=c2 hꨐ,H6 $ar}tSP};.)/ӄD{~/Gf|JzV%. 87J0.Q9sLQSۉ*1ӿ N!'7MpX'r9)9I)Бs4wCjF[^V>e?Q=OLqN+>晣ְSFE?&yQyn6gf*-8ncòA8Z%,燛#>& S{{lTBҏ9h4C+@$GlUP_UZ}MϦ.^la)Cִ Pq~X|ͧ75w7N}o7fdudniV@9n;/=ޛwX*ߒWTu,I>(Qcx`098+ endstream endobj 245 0 obj 2476 endobj 18 0 obj <> endobj 17 0 obj <>stream xZy\֞Ɍ{N j' .UqT#; KHr=(+Zۺ\VijV{wR]?&gymtZM$ZmHc`PTϮ0Qm'͜9vawvG.0v}wXۅCC",b2;D# c.>}<<vxy(fQ2+r vY(x!>KBw[E9/qEdMfO4~ɣ:d봱=}\{IwURBV%JikD_u(YEP.jj5@ Rk,ʎFPpjDSS# 2j25rSSFj5CmiXj3rS-*ʑA ޢQoS})G1/՟FTwj5zIPT/JFͣlT 5Cŋz4"iE:Q(BL$`O]Vw5V۬K$%Fʄ3mv=D=鹮g[z3O[޺?wQ|n6tԁ0i勵sJ]b۵//1d5C>͐ MjzeXp[#"G<3Q-o]<,sY쮘pbd<"qSgz]C,'.{12#}3MSVMT)=2$-w/2w[˅PWࡋbgfdMʌDRm !*K@]sj™5 au$AbŴd(?qlAC`;Qw-Y}ųǫa-R~.OKlBZv[I$3Q 醴ь$$EbY۟IvyJ]3C$p|wSGg#_e]|_?y٦X,f-LGfyV--mG 6F]H6;t&C4JxU$㥡Ah{*J#)BNVD,ފ{"= RF5-b f;G ~,ϿC}9;Hv2C8qGNm[Gz63"߃\B:hLGVqhԥ)Ct XI'_mDTq᡻vȶf}RcSp\sb@D1o]#;,hzͦxJ#sq5^SriacLXE8YpU>?[tς{<9uR~3Ib:MhɝICT%3mhA,$Pg' w%'Ntf8̢-n`!gM&m[&Dr~)jG Z)nm˖^Q+R899 ^ɏ;DSD x.!WhD<3?Ch͑?cPSiȏ/DEx&.tIHeZEE9Wi,zFm|>hsj44s+t<Ya4,տn9Z0tQCl ?8?Žd0~9Q2e(SJZ<0`Oĭ7,=v J2O œ#ZFh;Gpl-Fj$8+q>d7F(ɷvc1F9`gI;i(P,lZvtOXnn;[/ړ_un>AZ5GHũz)^d/J[ 5OIz^;nr;i((;b"+3Q7ɣcǚ )y\&$dLXQLYyQQyy99ms|uպsPCzۍ.έXh?tC芐Ht՝ G 3rRt*﨑EY}*!V%xovɌjGD.־'.s `DT6KrJol$h$n)ØRI0 jkꌯ}5 "/;ҥW$QϲtIRcR ɋji2N7V\⮨PegJր?SdoEQe[ȅ=l1KȼS Z ˻Isk\^\ptU^F,$}F;FmnWZzYص׵ Ne&:QrczOzxjt&?=xo9 BBl!$;aˎ˫q(2R#.]Q|s!jb3; 5R@W)X),nt6SPaٮͷlז.Bz6 ik~@~:[Xtq;: kM;LD|F-\o›"Hi9L焵ܛNOIaL'F+qMzJzNiK*! ˙[L%)Yp~'~n % g͍ c3 wK΄!|uQ At<%i,?S!2%5*:uz qnnrwaب#2$秄BR IR2r MkwUT7L T%A`5#>Nm(]^a3ijc˵zcc>s.u%olKtgtzV̲~%#ް-WsfI1}GtꢫMdF`+~E_ĿcNw#xunGǚ?*Iǵɬ44i,"V5g܂ۅ22Yd,r23}жux $4TZv-qtVׂ)x.FN|?*"PYVUjî6zaewhue|EFR*1^GuPmYIi9v;Ђ>8 `Ѫ)T3JRySԭAuEd1df;0Ztʻ>-;;ZX$9#I0c2- Θ/}?e`yI$?2ރO>,zVم0udY |H)r  9h>bĨe@ ڲs8Wɴ>ɜLR{NX*fz*ϲyiջ#n "\Y!ga0n>i½ՑD5hTcW"i. ׭ GX"(F1ZjCZ$1Qxf)cObAe7h;ȏ|2<&0VC>׮eg g{(,Ēe͆ʪҀH ֽ_]CQWEU'њT $2 =A$_6.]e̲?ɤ{f˜#q_;կ›co̝ƌ\6T^X7 <ŒO}WbGGܥn*s%N7Y>D@]t*6cdVr50I#ŧl0ƷPe%y7w߂))aEc;_]gYXm#wڛn`-)4T.ȨV}1?7+6Q) ゼFNрF#Uͮ)kS*{1k<f34-I)Wv.MUlCSD?3.dM2E賠L`n__P+g-Go Цj4$D/ ZY<`ڏىH^#A1tIN_SUٍ07Ƿڗˍjq>80Xѹ'8<Y '+4]yy*7~ܒlUUc?oi+5BkEŨeqsGQ`|fmq{: x|t!.C7ՅpLu}40<Q/dP)zu22Ǝɤ?ml>mpiA 1py8QTRUen%' =vc;^C V Fj9"ɏVThE3{܂7;!Kߐ1I9u@GOjxzGp A]7 oUJt#a悔I q)DPD€~8 0nf7PrzT\۠1rnjߤ蜘&84+q`$< i+ ҹZz;ėe||洠ż fѸ|3^a#<:9 2&C|il7taи8f=Nf[qGH?c`e@].\F] -Ş{Kp#<gb }fYY/()YFr } uaI¤(X\VA" 8YKL'B0R:ZE9OOĭcDⱕe*i-0s$y'.ugQW|Yfu<Z^-w=v-I&YYN^< IJuPrRٝ[  nxj0?pAB.z.;XD ߉ DVmH*?^P_M1*rH2ol{nvG8l#TI@YY dlj|5іr: e>;C$$4+WJzno3mJLMHG.m~׽tcn=EQ endstream endobj 246 0 obj 8157 endobj 15 0 obj <> endobj 14 0 obj <>stream xekPWwI*JeV-\ENP:VQ ȥn%!$!QpMb\PƩh:֩G?z6=Z3η{swIBC$9om İra)H pQ …(a OHH2nGXS-W)V6noU)Yjy|>_ҋ"yRqvR_VH8ݡ'*uJA3#(ViJJ<8GU1ggʮ%&} BbJG$"H" MOH5z$_LZ_qi_dm˓%udRƕ8+2}p=<6G@> tFosn:dTPq鯳#{P7}N2~ Vygl2f܍wKU6s=4-uv<7@X3r-h3P\SӤܖ: fs(?d!Aoh[m])08DM A'x3Sgh5ate.qyNp-l@2bj;RW V4Y[bNMiIHSsSۧIw !oB݇lm8Ƒ8 g`c E,K!+2#nK, W6}N <`JuI g,P],,3hC~ZŹR*( E&|EK)zSrE 7j5mko/Q@QqIeS7wS'x*Ut>!c0z"XF ۿ (]B< SԻ@ىŁB t;s;k7r1\(LAYaPg`S|Z MPr.˳+m{lk\ns8c#UCjVVx3!vv `w6Xz}6ȴxѴG7{<$\EJP%ߖ~~bn^6&R56`ZSh4@qpׁ3`)Ą8U`6ןVYGNT {B%9vCz|P*Ś۵}ӡ8NAbofZ-٣A=ޚcc08)T$D<_KvpYj(HЈ寧WqStxZ^CBUSs Ý#c~ȀLxNs ̣wjՇZUn(JssV?~њ endstream endobj 247 0 obj 1285 endobj 51 0 obj <> endobj 50 0 obj <>stream xXy\Wdq(I2Q21QQqaMMٷ 4,"K+"(&JԘ&.f2:3=n5fyɼym[; bP(F:orv[is̟/ ^"Wn"ZDgXv:n^7#B'1*80(~ks;Dۻ/"bg;گ߈_?xKD؞ؘ({pIstsN s_eO;vyDF_!vP0_7ΛolfZ9jgf3ʼ,cf3/ƃYa&1WƑ̬`2Tf#LceV3 Mf:ɸ1wf)qa10Ɗynb1t gš!6C JNMyb&Juekܹ~`5c]Fkylնv`Xpaÿ3F;:a11zCa$=4)8e?*5#+IU=6. *qO:xKþWSۃ MZ߉ϪVFCsvٸdPGEB,pުԫ9 Q_ :]A4 rM: tLܕyH%٧c6IPJp^_^"Sչ {@ 멽R5y"J lZaX%QqC} qqZ,hp,δf?.\ufu!w`?]g;ؚͮ'dⷯݙ1ѓEWuςc$D1pY9%8Sz{]z'ѸSDDOUu>TE0RZk}(dN=XPVWoRŨ7!h=DҐל@,7?3ӘTzjL i zȏl87&.⋯P0MO4Afs..ukg/xTrneb(A L8(Wzi~R[|TK3w6|MT|h\ZNln9'J- ɗ6_E{ՐWKɋܥFyimrЙ>[٭a]&y1"aȪ(AepxP vgpdڝ4W)}Nr*ˣt6e=ȯruY oT?- rp4g£Fl7QށcG|Js{46q,3>s<ʎ>֪NhKl zp%]OU) %4.@֥}Y c"'C <6jR(c6eF yM$̳X `-"0r&/*>%4ôrkǣGW]==\K<r.:2()J5۵4OJ gL >*4i7I+p+=g }>쪰wR=gEi2IIݯvw3v dYEeEsK3XTS?۩x$7~Z]PΝ262 ǁЃqIFN]\Xپ|xPGe꺸){X'b N4Ր=?~+En>}WD(j'`Sig36kDwKM}C? vCsHHvtvu d9UP:{/ Lcw6!@!VB Y;8*:hacAʔ逸bЂB¤ TOBE›m=nALPtcx6&P`TMN<ؔ˃Mz9̃ *Nԃ]%r DSf/.H,r-U3n֚iIBYF 9i(ZJUetyBzHzhWM-iK e=wha֛.0 V~.X;Yٴ+lw_,Dka~^!ރ6yRBJo|.EK*,m!4=%"]Mч;p QVӨ8rQ ɍ_?f@6\ J59ge"2/_ ;qr5.G'=_B7m*ӉH?UzG2 i9I4*aeKHQ1UE ւZmlPQoc0q endstream endobj 248 0 obj 4728 endobj 44 0 obj <> endobj 43 0 obj <>stream xXTTW0w  j%#;6@D(M68 C?"ivĠѨ81=Xb&/cyYオނ붽PF@ 0Ynj'NNtܱ hFi>&a쭝n/0P!?L@ e+XKR]A--&Ϟ=bnkn rkV$XkEG4c֫dp^CGQԒ~IvlZeaIKz:.Z"&gmlۜ&O:n[ft5j$EM>6Sj6eEPj"5ZC->&Q)Gj95CVPc)'ʆJQ4ʒZOQө Jj5HSOM*ʚN R j0Ջbԇj.52S ՟2TSbJ`pH]E"5=>,+-|ruuO`_Q_E3տwAefE Kx>V3@ac~<|jpvl)bQqX)],G .XP7]د1?{̟G.v޶7oD=`/O|;溁dqeAef8e%0yNX&%徲ؘX^6Nf!Efϳyԧ~Ae361ܧ:.lvJ#{Nw'ڣ(E:饶;i@56Pp"`܌O ؔ@3]p.; WF(Π']w*|]}t5D݊U͏Z18 XE5觓|ەCf cY0X~(_9KB~I2=k}sd {2te\ x06~n458E܍ZG b`nO_z9`74~iU%fl,aX)ܺqb]6Y?n[pTR ԐH<Y@sϬ4} @_}5J韚wtY1Po?LW;=4`F{"Yc(溠"Cfbŝ,B ;=pp4w kXڣ Υڟ¢fM+wuj[ܶ I ~[!²VU+ a!8~F:s%iiY|F!xF:2 9÷6)1UYu%k.ޮwW1./$FȳH;tzɠח(ys[f7˖mvvtůY'Z + r|Fhm)QJpM #'Iy>:F<#-O uזM*ffL'M%q(Y^n2A^w_q491;<\pq !A(xn6j*Zuې9=Ƕ 6^Nj:AXV~7U T S T};8q'θOk$fcN[}uܫ7DYx.qobӕR'H|VJRiihUUiinôGt'jzLKtCiIH5I$߂SWܑw-魰*IqpIuN>}TT[|uB,%x.w~&}ѵpu4޽I62(cG2ŭ 9{+θRe)op'H$E^Hc9ݭ@za7 nEà Rf(%i*wf{nz`P=v'Υ'^HUQ)][eXG=Kz;tջ`>Fhd LKc ء&t4sf4 C`N<6 {t{ְv2.tG:o \7UkN\%aj<#)%z4}^D"` JlB[Tg4D69O>kW@izH߹ }O wӯ&S(Hj V@r4خ۰}x3gdBzRʪpIzVֽ ruB7Ar1~ r&*IhN *YgaB2?RJd,ʵ/juSTђ[ 1׏'8?m4.lAb[u6k짎u9̧ef3$T;'/HM=}u"PM)ewŽ (;r%1mwm(ߙBhWFDv%GŤ /^ 0 ,^d<&'0Ph3v }-v7VV^y#?)ґVa(ϼ.7_-?Ƙ,/.DqI2kϒۯ"0zXG ݑ~ղ/bâ#3# mOo~x,9NC &:#J©W?G?0]x^jw+,"|&Ud#ftl{͹fX 9^p<З緿(z/EۛQ:] M-Mf8+GU0S%8y1#CWϜyRR$+LK(1wN-Y2gʙWii 15A녯0-6ȕlZ:wih/;o,6 q˷zX| 7.>E0ꂒn'X.}NjGzM~FGv,1"F$''TeēqɨΩ9b4[.)4uD~ޛ oQXliORa}X辜ǻ= tS!{ FaFfnb2Ooх7Q+GǦ{{>6ZNj6o4oAꔼB0% /Xqd\McyX[݇m,WݷE7G< endstream endobj 249 0 obj 5415 endobj 36 0 obj <> endobj 35 0 obj <>stream x{PSWo$WAT&:J@EQ(L @ bA Q4* ""EVE\=δf:gf7!3!,(04l͂0臈a/ǃn.hd3-Dp9uvhT rhnoY}DUh[@K"!wLKhzzK M4=m5OL]Zd4~Æ]Bex^I5d.'+ZmӍ[`rd_ 6j d])95i_5> UI1E3LU<^uUySb1/ޠw+x6h`Գ w u|K&qPu4,S8?(،\]p+U-0&£247:uH4`iHV= X ,R2ݱ\c~]\fkm`jr|9FJvI`%]Ka1yR]nI'ϒ,;#k$u|U?x]p|FѤ tf,D(3eg~ꌼ O31w  ^"`(=\Ax83.-)R`,Osxf",&|ʇyUl5Rq";mlT #/FBI>ͮ=wIC9/s/F4젋TtRbCsg|6h9P,kVf]wMդ7+(j6+o[g> endobj 32 0 obj <>stream x{lSƏrs\@*vm$N!8 &7Ƿv|ok'_ėĹbBs!r &lh0N@!sz:>;<<<"?xE{ }{HTsB>/6/m|5{%ޱ~XNK+(v@m]5\\+g$5b%w+J-]C/CD^FRJBQiZQ.ʔA,U*HUgJ b?q( "b/ E,$^ ocgdRhbK/~dbr~:6ARLd]"v2VЈ^~{fnIvUL;S#qahKqZGڮ 12!=ޤL-jC\/^[7CD왝: F.Ey}=eb?\)|#s1Vyw-erV3]C뿹O p.jrmϴܵM8؀v4hLElWgodc5}N J:ӌ<>O"2ԧW#`>E*@cZsclP1XTL(Q(*tW4;~ k=!5``6{ў=i yn$cwF~/?^tyIi@na^`ۦT+*i:N0j H /G;#x$o[:rP Uz4 ËXqxqK%;^e|˖ĿX endstream endobj 251 0 obj 1891 endobj 30 0 obj <> endobj 29 0 obj <>stream xuTmLSWqY3ө5du3uQ'`B[(~/^^(ZD 3Snθ.b׶?0Y?ts4lC,=4U h.ڽumV+}NzJdyɧ)Qx_AwK PLͣm*m'|&4[ v[66Vc0F,L}#ko_j2#l3Ʀ;kUXjYh&s7ZMVKY|jc&fc[ z+k G笉mdh2Ml463[o_c3l *j;ZOɪZW˖2Wt*]*:LeQ:Lst(-P pJ2llX}]낧sVM|û9EEw脴I%vAߨ7 n$KZ^_6mr©x':&Ϗᘧ!iz#fWEs!KƄ6>ӓB֠ou qy3 #7qvOx?L2LđT7, eE 𙁁?0σ^\>;h8MMLWW-@[{%V0Fݕ;s@L֖Gz.EV)3%:~yVD0DGխbjr_00p@S3Y鄶T gҒ1*;23~ \3~G\ԍpsm 0#%fmo> 1$<iaNI&3<N;)M]>V1:AB*9T8/6p8!9OKK(BJ9bjwyGU*⼠v=./{8*qOJx1E JX\8Hϥ[w^V2g_BZï[ojrY%VŚ)d`6U rހ"\-(f "9KU4KhMZQp*xcCsir7q @:x@>x`x\t  ϑb9s\'xW~VDMwGs('A`\SNc{DAHpeˋ_%ocy|!:ST6 U٬R\ʴzV>Dg-UTh;+FFRFL'+_ BHǍxPl' _SnrA^|bf&3=>ir(_gw.#^AS24eHly‚)lO( endstream endobj 252 0 obj 1409 endobj 98 0 obj <> endobj 97 0 obj <>stream xKoQĊJA̸" Dt+ L gt!KjyH@#l膵]tʤI2H;I«KOm}c`[P'ds^Sxu/'׀gKo{]b13ܮ {ـ+<?tذ'˳\\ڃP$r#a ?>~}{C/&H >,pK]~AB?!w #rlQ`鳟1.j O^=Ǥlſj h[$[,%HL7㛙D* MeA1&rDQLgylL IJ†SQd[o5߭aq84Yn!$IΧT(_hxQ_ iʼF_QY;d>J=R A Əeri4srQ{ˣNŸ endstream endobj 253 0 obj 498 endobj 95 0 obj <> endobj 94 0 obj <>stream xcd`ab`ddutv 4 (f!C柷 ˓X~_+I-wSFF7xʢ gMCKKsԢ<Ē 'G!8?93RO1'G!X!(8,5ls~nAiIjo~JjQ^AQfn*CBe R3N^e3w/^R]+[mIwQ|=c,Q8{??rEOɱ`qvrcV]o?]ݝ'O0_dO%lzg:qI endstream endobj 254 0 obj 308 endobj 76 0 obj <> endobj 75 0 obj <>stream xXiXW4H[4SmKw .ֲ @ b nqƌƉqLF4nIL4&)r{ qܙtSUQ(H|ź`:YӂF#Ek;DZߍvAh3%ز .>-q[xDq Ə9j~LhQ#BcɗQシ&M5?:z:ᎤQBB .&^8jU\Hhb,EQ+oZzA|hآI$o[Ta(}ǔ㦍>DQPoP[5BʓDRRw1Zj1zZO-ReTjM-Q㩍tjAmVQ^jj5r^Q.N Xj*J ܨ!5JGJIє/uG vp .Qt 9:vt', nd 'oCu~.]ܑ6 wwh6ů.|u=nYw#FHD?tv; 6].mאM(B`<%>q-vIz2Á]G_+e=utFHsS7eftotd+4je~&-mSo-M'4ZNoNte:0ruD 9ѩJPǬx.n3| {vj{2- e,r]X.qa9gh"%槢l* $kbɐ>zJDةgnX2M׷ et`]12MgeF*|H{AԪyV_ggqdWo&w[]ίB/J[zb [u PO*GRϗ?p轎Ùʏ;hw3h= wݖYi^ ^^Ư+/KȜ~M86D=#̿1$Ԥ4֛w1wxػxF4ee;AQ)5\alzMG3ot,= o[Dj߽N̿E~|{tG ZnF< [c/!@^ B!V&4Lqh%Y8?3%-p'u[NCKo(5( MzAjwȖ,l5\!'U*)v7q"OoH=ͱn<'Nj:|Br,G5$cHoH_Y9enCIiz.K;Gn?@;v&6*Wgs$ ڼ4s΍P.Z>ӛ#ǮR%,-#r2]_1߾{8}-y&A[ϯ\ _c>@CIK~9@`[E#7R#血ȅ4_(tG'S;rI$gH4YL ݔT5ioB t@\!}o)hv?c:DU<hG6\K% I ]ZN L2.i ĞGn:m10PlG8HYv&"a>Bо/K\u[n~S>~9l5+T*6ktmpkt<`4{hH2(RrVG"`VM{qt}3$;e3A] L,>F;h;m.]PMW7h6?t+MŎxȢCL lP'«W~H:G<`NiM ]EBhZ `9 FNT(s516C"1: [߲i"GѴ[%VѵIx b$テ]VeA"\д\ֲqьs} _}6tG~b6 svԲG[lQs=OJ[|~d!DtEIăwaC16I;{+2lE*A$gw\м.M"rqOz96%8k9)+|i@&'h,{YjT֝UN|n=*+JDiA׼&+)m̷069^#Q ̸v_\Kg'*VW@6^]Uf*nIWr-90/j.ڑ +B)kң Y|5FncZXMFs ۡ )}k4>A`u Gp/lh`кg=I(_zDh!67;X&m}D-i+? *BF֪ Msfʩ+;ɂ4v!XәL^CZ iLx2fwv,9$^]o\ZqvDk}Pt9LdOhAn5ũU;sT At}DU\\֜Шc&KʷKRb/{&#Ѣ'D?e.n/NZ 2 -rzWi:JFXTNC-02}𛋓dGu]A=c9fsd {^d*-"up⋖r? LW"0Iʔ #a |u-– &8"cFvM w9x<[!lJvɐs2?´41ĺ̀pbݚ{El-=`iNrW7}<̽,h'Hj>5xq uWG̼?+,58;eݾFhx4Z(zƌbq>nxw&qM2eR_M(̥"2Ejhy9ͺS:2[^*'>)͉hy|B5h4{z26'7@}Ņ+'ލv_ oų8~#riy\ĺ)S_uҫ+^fT2>l۝fI(#YyعG7rkO/h۴e~ޏ>X9 -'.%83}ގfw|7o6%1¼c'Poy _CK݅N]̙cKW_JJG^c=h43#Cxbz%^3UGNpv@=E's`27q}Nӂ淋J2$'u{=HĵVZ$9CƢ$3A\p&O<~*vxeM "+>}Z|C]1 6qB%g:J T+fs BkUJgD2 E݋tk$l*ś @ "z}PC:F^{ h FnE ҂2oUR< %ݽ(FQ .++9So΂8bW3=e Ȃ<:vrU[oݰ__\N_}s=RUOh&mpU!`I3.hd Olh?;d`z "I5g0C)g :\U "`>#U?©o.[s^*TBNАC,S;ڴ4M ɸmjVkpofBv& b vҔe*1ũqDd/SF]p1(WG!WLC js (+h6v\ԽFFY)D5kEY}lu[\ tOlApC`,U~#$q=6QT*M׾}gY9\_⫓556sLYuME1%~{_+{+)GrK]p ҾW)\%L蕯KmL\XInbŎb@XEY\#:'sVL( 6GgzȐVg{pQm=v*' bysG^2 ^*yMFܹSI>"WZ5W?goX%pB8+JriPHx1hL-6@f0SpKRS?ykFZSfk1ُ^h#[6_u:QMA6O ;iBQ Aɍ%kcU!kͷ[a/oMp!kyvVnJ -Q lbuEމ ,t)А q :s*)Mø3x*PsB]{Y,PI?#r$[I L K%d+wTmy/M@H*-F J{Qrn;^שfv_tk}?㑘 2،S%ap5b)wDT߫: \Ml"l+lNY㛟,OseA;(E͒Jͩ)ͨER Hp n3S!%2DI2!lS%'j9yb>Ɩ $0X%NPDI$"PUzKHGFbIw0*ppTAm坃g^VLwV1ZRtq}dJV ^q,v :cUyQIE?DkΊՈQZÞ5k^\ܪ,B lFM4Uۓv3brB MqqQdS6lI ay<YGZ;f/DOkc (K{ñl+*X ̬m>O3?'s%8 7hL/A endstream endobj 255 0 obj 6009 endobj 57 0 obj <> endobj 56 0 obj <>stream xYXWמeٱ+8 jf=؃ĨXDQmeKRwM  5Zhb4|e]|x̝s==yEDP"hUN˝.spr5SJ-Ƙo3\jyXw3b$ YC)HreA2/0ޱ`{V2Vaޞado!hgX +[+GV]Uyʬvy)Z6:pf1A]ny+d^+CWl0.o}gwǿ?sLμ)[7zX3Qtj,BS 8j+ZAPR㩏LjHfQ ԇ$ʉP=5zDQS(gj 5Jm4j ZFYSC (2S(OP 5ZDYR)1E L)ˉ,r]1MūgMLwޒ,oSt?#bmZ 4tPѠ, P'y {ll `'ضF#t;#-GruiѹcƎq s/Z,TFkD_i!M+ <]ڀ[BPӱ?m]݆0ޗ_wJUH"#8Mm h+pM>(G(%{A]j 9 CiĴ$ԣ ]YKD^|O׌xEjQ%G{ӋrpLe?_HMQaFT@,,h.#BQ,q2_FzߝoӫթU3 բ}'la,~Hi@'/EeL]t,8&:}g8>=th4fkI;+l'?;F0.%l lg>[Ñtϋo>C7(ݺiJ#BZ A6$Ed*1]d#HagzWkSh5%9xO V}()|͂$tY}:}[jx"(QՠfUyUOXC@-q$?fBQ67I_[!ֻt5 6+90-QI'@"/V٠ߑ]r_DG ?^ɔ^N9a{=sSRJRK^TZPP=䕜e2B7~,{N@F i̾Bv+sI&0j_?)x6W?=:[kc1#hKu ]re*4H.wnfSCpK\vMTZ^jUf6`(?}SR|yWi U\=dI5܃b,}Q' 1UrD$牫ƨ#hoΘa󟧁 qcm<ڵ7ϜĖ6ᤁ/5 ј;y7q) q:$݄<%4M7zESas<є?ihjttntr>Ђ'z!{Zj8Q~ԖRI%v",l¾`Ĭ2X ?LA4ڳ׻\Y,KB^oۆl RLX. :=)5Sd E̷U#K4 @~`~|/%&@Mbf;M)یRt2 t6P^xKN]a'9|*yH=UWqOz^zpx$l&v4hAZX`1ZK .3"1ժUͫ8zS@@pa#cq > (G7G_"a9 ~zܑmowgyيay|fgsrSL#.ٛ\Z.JW>ػ1ӗ/·,7Tblrx(]*+LuCP"3Z_v|}js^= 1+RtPXT,US|觕*BL'HмKvL)m-!bhda Ƹ_~C\Kk0;ӽӌ׌4 ˉ̖*A0-?[edŴPVc yۮގHݗ1o7ڽw we\zeFqbthHcG/ !CO{G;+W)əEL]b F>[I":Q&wAF>i sAa^TX]A3t ʯy^o1H4qޱ~aKNNν!㈲RYA-mu^ik!w(@{בǡ*6% 'o@y\vxqI H<l,q#/Y8v߆9ʧa{ћَи 4tv #ko^i+F_lU"X7(c&βI[rPŅTmÇ۸Du`t`Dt `OҪ,Wd|1"",<&p0L^7A/XH*Yj%x~;i !NYʨ42%ǔ\ϤovrkIY"*Re矃C$sLE(@7x`0-)P)z×L|h~"'&^ a3*`**"S8?W*J.QUwI#j.՝k\}5:MGfmDf-IJ8NQw:/0KKpDnN4rW]GA `t_)y椔ϐ۠-i&_ĵu+$<$~bdBw 릎E>Fɓ:t¼Koݵ˔Gb_΁^!A>A}JOW?!X;Fbl:i ؚ3޸`2Lvw$<k^a֫=ZQi |(E2BYezYἃr]63ՕcL]2IxĂt] 2x!/}{gpE0ME,-2%85wXT瑶pn3Hj8&%/ v -&-(ufFS=pT-}Sx\%Fa9E\Cʋ1yR{/hugAMaqɻ[0G ~W钵Q$֗2bK*&5eY&Ž|}or`]V+BJEqQi{Sy4iq0"Di-}h_asE=٭ [YVPeZj^ b ӟyI93:^ӫNhđ_ӹ"CGC'榓i( SU4{Bd88 L_@&1nQY{=RS9|Eʷ|~h;qYw@B!Bm #G**\h鰔P{eV*et!eN+i'Ż'UM^\Ál6a[lBFҞtpm8&]l$ۗTwzGFipG'}S7:ˠ]p'{a7 xB[_zQS!çw/٪;\ k֮`[jud:S,,ZLoeޠ e dtO y8~l x-2#Qʭ̬%ю<EMOC{PR(`; äepv49 !ڢ䜄-6Ü;!\C=~0y*)^9yV"c*pCw\! Ӱx5A%p69Sq6G"zߒݻTt֜^蔎]{5X0q &vt%L4> endobj 53 0 obj <>stream xuR{PTe4{W*)0 u2S]\%Lwa} J 0A(N(5kdWj?o~w~LxòlҴﮞNxUİfp}bxX\6F Dz)I2rrMW^UIHS%4ƼL*5ӔedU4diLųTZJGJ)4L2 &Qjج1!sΟ?a2Q8E&D3Y2dV2:Fn*U5{#wҡ-t+w1U")Yb#.t8H[ry\6Xx&L |uGdgy lBSxɗ HP96E g^ӵh-iw9.6}~ )Sg| tmYT):쿅 N>#4,jΉtҜՖ:v9jꍺ̹$8&p7x'epW w_ɍLYx片N]rN3ès+Ɗ ;*X@LRHj,'8 93ɞ 9$Rqnl=7 t #GacTHۘfp4)a[!p+m Hv.phH;ir4%gyC2٘~k`7x ӱuB5 ?_uZ}ff"}.8P2X t׊=Ji>$}3G5?5Km ߒ3?39M]N^l_ȎL_ do3 ~/g.쀾Ѷitv^1~rrڇY&qQpjkGW2 50tyXnutSuab.ԊQZz.)p _5CDcx)R][^m-l1(S "JXot o& 1M}{#a* O|i / &ms8OĈ}o> endobj 213 0 obj <>stream xcd`ab`dd trv 44f!C9w߯?XW}?(L1wfFF7hʢ gMCKKsԢ<Ē 'G!8?93RO1'G!X!(8,5bs~nAiIjo~JjQcC0##{c|,hX­Y _}-=};>н{~mFCGvwGݔsWܴkZ[zdi\ÁyY%չuݝS'Y8Any{Vus,khw}CarVL+]~eӾNƾ<|΅Sxx" endstream endobj 258 0 obj 342 endobj 199 0 obj <> endobj 198 0 obj <>stream x^ UTASDM+CMMI7 52/FKZCopyright (C) 1997 American Mathematical Society. All Rights ReservedCMMI7Computer ModernkLMUP_O癧b,w8r}v}!ʆy|zD҄tW|Dk,~}x`pDZp aË`i|u|sVRWb\Xacjlbzw?`  7 l endstream endobj 259 0 obj 428 endobj 104 0 obj <> endobj 103 0 obj <>stream x]Qh[elmD&&wE"a0EWam &r&ަMeMإKT{ئNa{pE⊌/=Wv`s$X];z㽏V&K+6`SGg܉;0T?#FB[8ӻ'm[jkw MH=>ޭEcoUѧvi}>7=aFQ_tPF++OIX;ͭ{w~`YNbi,LC 9OA-:t֕וRu$!=&`!2Ztt'L,w*gLz<1LN7{.Iwmp_E,$d wH BP';~ 8=atf/ aq6Ue?9> 󮭖7ѩ$_NdXEz(L?_̬0jrYǦU< ޼¥Uk*'6<AϜ!a&RTOMMtvѹTh@ eflJnU(On7}^Tu/D..w_GkײY !jwK<-E] NP(n,߳b_+xC3W)_iW}G <:8Rp}$G{ h>HC7ަƖH)Hɉ).03‡x1?# U)s,,< VYI3 endstream endobj 260 0 obj 820 endobj 101 0 obj <> endobj 100 0 obj <>stream xcd`ab`dd  v 2H3a!\׷M}7]G+9(3=DAYS\17(391O7$#57QOL-SpQ(VJ-N-*KMY霟[PZZZh LX~|w?) '_Ǡ+#}qC9LbSKMgoCB 8֧wX#W>Kf}ϛ;qz[r\,y8O53Ah endstream endobj 261 0 obj 293 endobj 22 0 obj <> endobj 200 0 obj <> endobj 19 0 obj <> endobj 105 0 obj <> endobj 16 0 obj <> endobj 102 0 obj <> endobj 99 0 obj <> endobj 13 0 obj <> endobj 10 0 obj <> endobj 96 0 obj <> endobj 77 0 obj <> endobj 58 0 obj <> endobj 55 0 obj <> endobj 52 0 obj <> endobj 45 0 obj <> endobj 37 0 obj <> endobj 34 0 obj <> endobj 31 0 obj <> endobj 28 0 obj <> endobj 25 0 obj <> endobj 215 0 obj <> endobj 2 0 obj <>endobj xref 0 262 0000000000 65535 f 0000174741 00000 n 0000264674 00000 n 0000174355 00000 n 0000174789 00000 n 0000167938 00000 n 0000000015 00000 n 0000003266 00000 n 0000182496 00000 n 0000182260 00000 n 0000252729 00000 n 0000180125 00000 n 0000179862 00000 n 0000251800 00000 n 0000207111 00000 n 0000206874 00000 n 0000249078 00000 n 0000198608 00000 n 0000198041 00000 n 0000247195 00000 n 0000195456 00000 n 0000195183 00000 n 0000245333 00000 n 0000189825 00000 n 0000189498 00000 n 0000262825 00000 n 0000183740 00000 n 0000183402 00000 n 0000261903 00000 n 0000224063 00000 n 0000223724 00000 n 0000261033 00000 n 0000221724 00000 n 0000221485 00000 n 0000260106 00000 n 0000219912 00000 n 0000219649 00000 n 0000259181 00000 n 0000174858 00000 n 0000174888 00000 n 0000168098 00000 n 0000003286 00000 n 0000007853 00000 n 0000214125 00000 n 0000213685 00000 n 0000258259 00000 n 0000175019 00000 n 0000168242 00000 n 0000007874 00000 n 0000011230 00000 n 0000208848 00000 n 0000208505 00000 n 0000257327 00000 n 0000240792 00000 n 0000240534 00000 n 0000256403 00000 n 0000234053 00000 n 0000233550 00000 n 0000255481 00000 n 0000175095 00000 n 0000168386 00000 n 0000011251 00000 n 0000014670 00000 n 0000175193 00000 n 0000168530 00000 n 0000014691 00000 n 0000017930 00000 n 0000175313 00000 n 0000168674 00000 n 0000017951 00000 n 0000020288 00000 n 0000175433 00000 n 0000168818 00000 n 0000020309 00000 n 0000022585 00000 n 0000227432 00000 n 0000227030 00000 n 0000254553 00000 n 0000175553 00000 n 0000168970 00000 n 0000022606 00000 n 0000024957 00000 n 0000175673 00000 n 0000169114 00000 n 0000024978 00000 n 0000028515 00000 n 0000175782 00000 n 0000169266 00000 n 0000028536 00000 n 0000032386 00000 n 0000175913 00000 n 0000169410 00000 n 0000032407 00000 n 0000037545 00000 n 0000226614 00000 n 0000226407 00000 n 0000253681 00000 n 0000225801 00000 n 0000225581 00000 n 0000250930 00000 n 0000244931 00000 n 0000244713 00000 n 0000250000 00000 n 0000243784 00000 n 0000243487 00000 n 0000248120 00000 n 0000176066 00000 n 0000169563 00000 n 0000037566 00000 n 0000041885 00000 n 0000176235 00000 n 0000169718 00000 n 0000041907 00000 n 0000045560 00000 n 0000176402 00000 n 0000169865 00000 n 0000045582 00000 n 0000049978 00000 n 0000176523 00000 n 0000170012 00000 n 0000050000 00000 n 0000054917 00000 n 0000176633 00000 n 0000170159 00000 n 0000054939 00000 n 0000058817 00000 n 0000176743 00000 n 0000170306 00000 n 0000058839 00000 n 0000062843 00000 n 0000176864 00000 n 0000170453 00000 n 0000062865 00000 n 0000067199 00000 n 0000176985 00000 n 0000170600 00000 n 0000067221 00000 n 0000069666 00000 n 0000177117 00000 n 0000170747 00000 n 0000069688 00000 n 0000073648 00000 n 0000177227 00000 n 0000170902 00000 n 0000073670 00000 n 0000078136 00000 n 0000177315 00000 n 0000171057 00000 n 0000078158 00000 n 0000082606 00000 n 0000177414 00000 n 0000171212 00000 n 0000082628 00000 n 0000086852 00000 n 0000177546 00000 n 0000171367 00000 n 0000086874 00000 n 0000091838 00000 n 0000177667 00000 n 0000171514 00000 n 0000091860 00000 n 0000096032 00000 n 0000177777 00000 n 0000171661 00000 n 0000096054 00000 n 0000098732 00000 n 0000177898 00000 n 0000171808 00000 n 0000098754 00000 n 0000101499 00000 n 0000177997 00000 n 0000171955 00000 n 0000101521 00000 n 0000104025 00000 n 0000178096 00000 n 0000172102 00000 n 0000104047 00000 n 0000108199 00000 n 0000178184 00000 n 0000172249 00000 n 0000108221 00000 n 0000113005 00000 n 0000178294 00000 n 0000172396 00000 n 0000113027 00000 n 0000117526 00000 n 0000178415 00000 n 0000172543 00000 n 0000117548 00000 n 0000122158 00000 n 0000178547 00000 n 0000172690 00000 n 0000122180 00000 n 0000126457 00000 n 0000178657 00000 n 0000172845 00000 n 0000126479 00000 n 0000131185 00000 n 0000242950 00000 n 0000242734 00000 n 0000246262 00000 n 0000178778 00000 n 0000172992 00000 n 0000131207 00000 n 0000135844 00000 n 0000178925 00000 n 0000173139 00000 n 0000135866 00000 n 0000140326 00000 n 0000179046 00000 n 0000173286 00000 n 0000140348 00000 n 0000145046 00000 n 0000242283 00000 n 0000242065 00000 n 0000263748 00000 n 0000179178 00000 n 0000173433 00000 n 0000145068 00000 n 0000148924 00000 n 0000179323 00000 n 0000173588 00000 n 0000148946 00000 n 0000153782 00000 n 0000179400 00000 n 0000173743 00000 n 0000153804 00000 n 0000157877 00000 n 0000179521 00000 n 0000173898 00000 n 0000157899 00000 n 0000163223 00000 n 0000179598 00000 n 0000174053 00000 n 0000163245 00000 n 0000166659 00000 n 0000179686 00000 n 0000174208 00000 n 0000166681 00000 n 0000167916 00000 n 0000179774 00000 n 0000182238 00000 n 0000183381 00000 n 0000189476 00000 n 0000195161 00000 n 0000198019 00000 n 0000206852 00000 n 0000208483 00000 n 0000213663 00000 n 0000219627 00000 n 0000221463 00000 n 0000223702 00000 n 0000225559 00000 n 0000226386 00000 n 0000227009 00000 n 0000233528 00000 n 0000240512 00000 n 0000242043 00000 n 0000242713 00000 n 0000243466 00000 n 0000244692 00000 n 0000245312 00000 n trailer << /Size 262 /Root 1 0 R /Info 2 0 R >> startxref 264724 %%EOF guava-3.6/src/leon/doc/readme0000644017361200001450000000023511026723452016015 0ustar tabbottcrontabThe file manual.tex contains TeX source for the manual describing the partition backtrack programs. The file manual.dvi contains a dvi file for the manual. guava-3.6/src/leon/missing0000644017361200001450000000000011026723452015452 0ustar tabbottcrontabguava-3.6/src/leon/config.sub0000755017361200001450000007730011026723452016062 0ustar tabbottcrontab#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2006-07-02' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16c) basic_machine=cr16c-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: guava-3.6/src/leon/configure.in0000644017361200001450000000047611026723452016410 0ustar tabbottcrontabAC_INIT(leon,1.0) AC_CONFIG_SRCDIR(src/group.h) AM_INIT_AUTOMAKE AM_CONFIG_HEADER(src/leon_config.h) AC_CHECK_SIZEOF(int) AC_PROG_LIBTOOL AC_PROG_INSTALL AC_PROG_CC AC_LANG_C AC_PROG_MAKE_SET AC_HEADER_STDC dnl maybe AC_CHECK_HEADERS or AC_CHECK_FUNCS to verify existence of needed things... AC_OUTPUT(Makefile) guava-3.6/src/leon/install-sh0000755017361200001450000002201711026723452016076 0ustar tabbottcrontab#!/bin/sh # install - install a program, script, or datafile scriptversion=2004-12-17.09 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit 0;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit 0;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $cpprog "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: guava-3.6/src/leon/Makefile.in0000755017361200001450000006244611027425503016151 0ustar tabbottcrontabCOMPILE = gcc CFLAGS = -O2 SRCDIR = ./src COMPOPT = -c -O2 INCLUDES = LINKOPT = -v LINKNAME = -o OBJ = o OBJS = setstab cent inter desauto generate commut cjrndper orblist fndelt compgrp orbdes randobj wtdist all: $(OBJS) # # Invoke linker -- setstab setstab: setstab.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) csetstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) cuprstab.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(COMPILE) $(LINKNAME) setstab $(LINKOPT) setstab.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) csetstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) cuprstab.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(BOUNDS) # # Invoke linker -- cent cent: cent.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) ccent.$(OBJ) chbase.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(COMPILE) $(LINKNAME) cent $(LINKOPT) cent.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) ccent.$(OBJ) chbase.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(BOUNDS) # # Invoke linker -- inter inter: inter.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) cinter.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(COMPILE) $(LINKNAME) inter $(LINKOPT) inter.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) cinter.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(BOUNDS) # # Invoke linker -- desauto desauto: desauto.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) cdesauto.$(OBJ) chbase.$(OBJ) cmatauto.$(OBJ) code.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) inform.$(OBJ) matrix.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(COMPILE) $(LINKNAME) desauto $(LINKOPT) desauto.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) cdesauto.$(OBJ) chbase.$(OBJ) cmatauto.$(OBJ) code.$(OBJ) compcrep.$(OBJ) compsg.$(OBJ) copy.$(OBJ) cparstab.$(OBJ) cstborb.$(OBJ) cstrbas.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) inform.$(OBJ) matrix.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) orbit.$(OBJ) orbrefn.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) ptstbref.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) rprique.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(BOUNDS) # # Invoke linker -- generate generate: generate.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) relator.$(OBJ) stcs.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(COMPILE) $(LINKNAME) generate $(LINKOPT) generate.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) inform.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) optsvec.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) relator.$(OBJ) stcs.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(BOUNDS) # # Invoke linker -- commut commut: commut.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) ccommut.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(COMPILE) $(LINKNAME) commut $(LINKOPT) commut.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) ccommut.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS) # # Invoke linker -- cjrndper cjrndper: cjrndper.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) code.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) matrix.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(COMPILE) $(LINKNAME) cjrndper $(LINKOPT) cjrndper.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) code.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) matrix.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS) # # Invoke linker -- orblist orblist: orblist.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(COMPILE) $(LINKNAME) orblist $(LINKOPT) orblist.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS) # # Invoke linker -- fndelt fndelt: fndelt.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(COMPILE) $(LINKNAME) fndelt $(LINKOPT) fndelt.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS) # # Invoke linker -- compgrp compgrp: compgrp.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(COMPILE) $(LINKNAME) compgrp $(LINKOPT) compgrp.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readgrp.$(OBJ) readpar.$(OBJ) readper.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS) # # Invoke linker -- orbdes orbdes: orbdes.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) code.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(COMPILE) $(LINKNAME) orbdes $(LINKOPT) orbdes.$(OBJ) addsgen.$(OBJ) bitmanp.$(OBJ) chbase.$(OBJ) code.$(OBJ) copy.$(OBJ) cstborb.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) randschr.$(OBJ) readdes.$(OBJ) readgrp.$(OBJ) readper.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(BOUNDS) # # Invoke linker -- randobj randobj: randobj.$(OBJ) bitmanp.$(OBJ) copy.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) readpar.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(COMPILE) $(LINKNAME) randobj $(LINKOPT) randobj.$(OBJ) bitmanp.$(OBJ) copy.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) new.$(OBJ) oldcopy.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) randgrp.$(OBJ) readpar.$(OBJ) readpts.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(BOUNDS) # # Invoke linker -- wtdist wtdist: wtdist.$(OBJ) bitmanp.$(OBJ) code.$(OBJ) copy.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) new.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) readdes.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(COMPILE) $(LINKNAME) wtdist $(LINKOPT) wtdist.$(OBJ) bitmanp.$(OBJ) code.$(OBJ) copy.$(OBJ) errmesg.$(OBJ) essentia.$(OBJ) factor.$(OBJ) field.$(OBJ) new.$(OBJ) partn.$(OBJ) permgrp.$(OBJ) permut.$(OBJ) primes.$(OBJ) readdes.$(OBJ) storage.$(OBJ) token.$(OBJ) util.$(OBJ) $(CPUTIME) $(BOUNDS) # # # Invoke compiler addsgen.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/essentia.h $(SRCDIR)/permgrp.h $(SRCDIR)/permut.h $(SRCDIR)/cstborb.h $(SRCDIR)/addsgen.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/addsgen.c bitmanp.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/bitmanp.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/bitmanp.c ccent.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/compcrep.h $(SRCDIR)/compsg.h $(SRCDIR)/cparstab.h $(SRCDIR)/errmesg.h $(SRCDIR)/inform.h $(SRCDIR)/new.h $(SRCDIR)/orbrefn.h $(SRCDIR)/permut.h $(SRCDIR)/randgrp.h $(SRCDIR)/storage.h $(SRCDIR)/ccent.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/ccent.c ccommut.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/addsgen.h $(SRCDIR)/copy.h $(SRCDIR)/chbase.h $(SRCDIR)/new.h $(SRCDIR)/permgrp.h $(SRCDIR)/permut.h $(SRCDIR)/storage.h $(SRCDIR)/ccommut.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/ccommut.c cdesauto.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/code.h $(SRCDIR)/compcrep.h $(SRCDIR)/compsg.h $(SRCDIR)/errmesg.h $(SRCDIR)/matrix.h $(SRCDIR)/storage.h $(SRCDIR)/cdesauto.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/cdesauto.c cent.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/ccent.h $(SRCDIR)/errmesg.h $(SRCDIR)/permgrp.h $(SRCDIR)/readgrp.h $(SRCDIR)/readper.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/util.h $(SRCDIR)/cent.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/cent.c chbase.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/addsgen.h $(SRCDIR)/cstborb.h $(SRCDIR)/errmesg.h $(SRCDIR)/essentia.h $(SRCDIR)/factor.h $(SRCDIR)/new.h $(SRCDIR)/permgrp.h $(SRCDIR)/permut.h $(SRCDIR)/randgrp.h $(SRCDIR)/storage.h $(SRCDIR)/repinimg.h $(SRCDIR)/settoinv.h $(SRCDIR)/chbase.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/chbase.c cinter.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/compcrep.h $(SRCDIR)/compsg.h $(SRCDIR)/errmesg.h $(SRCDIR)/orbrefn.h $(SRCDIR)/cinter.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/cinter.c cjrndper.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/code.h $(SRCDIR)/copy.h $(SRCDIR)/errmesg.h $(SRCDIR)/matrix.h $(SRCDIR)/new.h $(SRCDIR)/permut.h $(SRCDIR)/readdes.h $(SRCDIR)/randgrp.h $(SRCDIR)/readgrp.h $(SRCDIR)/readpar.h $(SRCDIR)/readper.h $(SRCDIR)/readpts.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/util.h $(SRCDIR)/cjrndper.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/cjrndper.c cmatauto.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/code.h $(SRCDIR)/compcrep.h $(SRCDIR)/compsg.h $(SRCDIR)/errmesg.h $(SRCDIR)/matrix.h $(SRCDIR)/storage.h $(SRCDIR)/cmatauto.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/cmatauto.c code.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.h $(SRCDIR)/storage.h $(SRCDIR)/code.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/code.c commut.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/ccommut.h $(SRCDIR)/errmesg.h $(SRCDIR)/factor.h $(SRCDIR)/permgrp.h $(SRCDIR)/readgrp.h $(SRCDIR)/readper.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/util.h $(SRCDIR)/commut.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/commut.c compcrep.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/cputime.h $(SRCDIR)/chbase.h $(SRCDIR)/cstrbas.h $(SRCDIR)/errmesg.h $(SRCDIR)/inform.h $(SRCDIR)/new.h $(SRCDIR)/optsvec.h $(SRCDIR)/orbit.h $(SRCDIR)/orbrefn.h $(SRCDIR)/partn.h $(SRCDIR)/permgrp.h $(SRCDIR)/permut.h $(SRCDIR)/rprique.h $(SRCDIR)/storage.h $(SRCDIR)/compcrep.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/compcrep.c compgrp.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/errmesg.h $(SRCDIR)/permgrp.h $(SRCDIR)/permut.h $(SRCDIR)/readgrp.h $(SRCDIR)/util.h $(SRCDIR)/compgrp.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/compgrp.c compsg.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/cputime.h $(SRCDIR)/addsgen.h $(SRCDIR)/chbase.h $(SRCDIR)/copy.h $(SRCDIR)/cstrbas.h $(SRCDIR)/errmesg.h $(SRCDIR)/inform.h $(SRCDIR)/new.h $(SRCDIR)/optsvec.h $(SRCDIR)/orbit.h $(SRCDIR)/orbrefn.h $(SRCDIR)/partn.h $(SRCDIR)/permgrp.h $(SRCDIR)/permut.h $(SRCDIR)/ptstbref.h $(SRCDIR)/rprique.h $(SRCDIR)/storage.h $(SRCDIR)/compsg.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/compsg.c copy.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/essentia.h $(SRCDIR)/storage.h $(SRCDIR)/copy.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/copy.c cparstab.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/compcrep.h $(SRCDIR)/compsg.h $(SRCDIR)/errmesg.h $(SRCDIR)/orbrefn.h $(SRCDIR)/cparstab.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/cparstab.c csetstab.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/compcrep.h $(SRCDIR)/compsg.h $(SRCDIR)/errmesg.h $(SRCDIR)/orbrefn.h $(SRCDIR)/csetstab.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/csetstab.c cstborb.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.h $(SRCDIR)/essentia.h $(SRCDIR)/factor.h $(SRCDIR)/storage.h $(SRCDIR)/cstborb.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/cstborb.c cstrbas.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/chbase.h $(SRCDIR)/cstborb.h $(SRCDIR)/inform.h $(SRCDIR)/new.h $(SRCDIR)/orbrefn.h $(SRCDIR)/permgrp.h $(SRCDIR)/ptstbref.h $(SRCDIR)/optsvec.h $(SRCDIR)/storage.h $(SRCDIR)/cstrbas.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/cstrbas.c cuprstab.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/compcrep.h $(SRCDIR)/compsg.h $(SRCDIR)/errmesg.h $(SRCDIR)/orbrefn.h $(SRCDIR)/cuprstab.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/cuprstab.c desauto.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/cdesauto.h $(SRCDIR)/errmesg.h $(SRCDIR)/permgrp.h $(SRCDIR)/readdes.h $(SRCDIR)/readgrp.h $(SRCDIR)/readper.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/util.h $(SRCDIR)/desauto.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/desauto.c errmesg.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/errmesg.c essentia.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/essentia.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/essentia.c factor.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.h $(SRCDIR)/factor.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/factor.c field.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.h $(SRCDIR)/new.h $(SRCDIR)/storage.h $(SRCDIR)/field.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/field.c fndelt.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/errmesg.h $(SRCDIR)/new.h $(SRCDIR)/oldcopy.h $(SRCDIR)/permut.h $(SRCDIR)/readgrp.h $(SRCDIR)/readper.h $(SRCDIR)/randgrp.h $(SRCDIR)/util.h $(SRCDIR)/fndelt.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/fndelt.c generate.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/enum.h $(SRCDIR)/storage.h $(SRCDIR)/cputime.h $(SRCDIR)/errmesg.h $(SRCDIR)/new.h $(SRCDIR)/readgrp.h $(SRCDIR)/randschr.h $(SRCDIR)/stcs.h $(SRCDIR)/util.h $(SRCDIR)/generate.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/generate.c inform.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/cputime.h $(SRCDIR)/readgrp.h $(SRCDIR)/inform.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/inform.c inter.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/cinter.h $(SRCDIR)/errmesg.h $(SRCDIR)/permgrp.h $(SRCDIR)/readgrp.h $(SRCDIR)/readper.h $(SRCDIR)/token.h $(SRCDIR)/util.h $(SRCDIR)/inter.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/inter.c matrix.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.h $(SRCDIR)/storage.h $(SRCDIR)/matrix.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/matrix.c new.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.h $(SRCDIR)/partn.h $(SRCDIR)/storage.h $(SRCDIR)/new.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/new.c oldcopy.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/storage.h $(SRCDIR)/oldcopy.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/oldcopy.c optsvec.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/cstborb.h $(SRCDIR)/essentia.h $(SRCDIR)/new.h $(SRCDIR)/permut.h $(SRCDIR)/permgrp.h $(SRCDIR)/storage.h $(SRCDIR)/optsvec.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/optsvec.c orbdes.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/chbase.h $(SRCDIR)/errmesg.h $(SRCDIR)/new.h $(SRCDIR)/oldcopy.h $(SRCDIR)/permut.h $(SRCDIR)/readdes.h $(SRCDIR)/readgrp.h $(SRCDIR)/storage.h $(SRCDIR)/util.h $(SRCDIR)/orbdes.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/orbdes.c orbit.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/cstborb.h $(SRCDIR)/orbit.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/orbit.c orblist.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/addsgen.h $(SRCDIR)/chbase.h $(SRCDIR)/cstborb.h $(SRCDIR)/errmesg.h $(SRCDIR)/factor.h $(SRCDIR)/new.h $(SRCDIR)/randgrp.h $(SRCDIR)/readgrp.h $(SRCDIR)/readpar.h $(SRCDIR)/readpts.h $(SRCDIR)/storage.h $(SRCDIR)/util.h $(SRCDIR)/orblist.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/orblist.c orbrefn.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.h $(SRCDIR)/partn.h $(SRCDIR)/storage.h $(SRCDIR)/orbrefn.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/orbrefn.c partn.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/storage.h $(SRCDIR)/permgrp.h $(SRCDIR)/partn.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/partn.c permgrp.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/copy.h $(SRCDIR)/errmesg.h $(SRCDIR)/essentia.h $(SRCDIR)/new.h $(SRCDIR)/permut.h $(SRCDIR)/storage.h $(SRCDIR)/permgrp.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/permgrp.c permut.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/factor.h $(SRCDIR)/errmesg.h $(SRCDIR)/new.h $(SRCDIR)/storage.h $(SRCDIR)/repimg.h $(SRCDIR)/repinimg.h $(SRCDIR)/settoinv.h $(SRCDIR)/enum.h $(SRCDIR)/permut.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/permut.c primes.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/primes.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/primes.c ptstbref.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/partn.h $(SRCDIR)/cstrbas.h $(SRCDIR)/errmesg.h $(SRCDIR)/ptstbref.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/ptstbref.c randgrp.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/new.h $(SRCDIR)/permut.h $(SRCDIR)/randgrp.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/randgrp.c randobj.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/errmesg.h $(SRCDIR)/randgrp.h $(SRCDIR)/readpar.h $(SRCDIR)/readpts.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/util.h $(SRCDIR)/randobj.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/randobj.c randschr.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/addsgen.h $(SRCDIR)/cstborb.h $(SRCDIR)/errmesg.h $(SRCDIR)/essentia.h $(SRCDIR)/factor.h $(SRCDIR)/new.h $(SRCDIR)/oldcopy.h $(SRCDIR)/permgrp.h $(SRCDIR)/permut.h $(SRCDIR)/randgrp.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/randschr.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/randschr.c readdes.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/code.h $(SRCDIR)/errmesg.h $(SRCDIR)/new.h $(SRCDIR)/token.h $(SRCDIR)/readdes.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/readdes.c readgrp.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/chbase.h $(SRCDIR)/cstborb.h $(SRCDIR)/errmesg.h $(SRCDIR)/essentia.h $(SRCDIR)/factor.h $(SRCDIR)/permut.h $(SRCDIR)/permgrp.h $(SRCDIR)/randschr.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/readgrp.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/readgrp.c readpar.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/errmesg.h $(SRCDIR)/readpar.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/readpar.c readper.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/errmesg.h $(SRCDIR)/essentia.h $(SRCDIR)/readgrp.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/readper.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/readper.c readpts.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/errmesg.h $(SRCDIR)/readpts.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/readpts.c relator.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/enum.h $(SRCDIR)/errmesg.h $(SRCDIR)/new.h $(SRCDIR)/permut.h $(SRCDIR)/stcs.h $(SRCDIR)/storage.h $(SRCDIR)/relator.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/relator.c rprique.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/storage.h $(SRCDIR)/rprique.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/rprique.c setstab.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/cparstab.h $(SRCDIR)/csetstab.h $(SRCDIR)/cuprstab.h $(SRCDIR)/errmesg.h $(SRCDIR)/permgrp.h $(SRCDIR)/readgrp.h $(SRCDIR)/readpar.h $(SRCDIR)/readper.h $(SRCDIR)/readpts.h $(SRCDIR)/token.h $(SRCDIR)/util.h $(SRCDIR)/setstab.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/setstab.c stcs.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/enum.h $(SRCDIR)/repimg.h $(SRCDIR)/addsgen.h $(SRCDIR)/cstborb.h $(SRCDIR)/errmesg.h $(SRCDIR)/essentia.h $(SRCDIR)/factor.h $(SRCDIR)/new.h $(SRCDIR)/oldcopy.h $(SRCDIR)/permgrp.h $(SRCDIR)/permut.h $(SRCDIR)/randschr.h $(SRCDIR)/relator.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/stcs.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/stcs.c storage.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/errmesg.h $(SRCDIR)/storage.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/storage.c token.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/errmesg.h $(SRCDIR)/token.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/token.c util.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/util.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/util.c wtdist.$(OBJ) : $(SRCDIR)/group.h $(SRCDIR)/extname.h $(SRCDIR)/groupio.h $(SRCDIR)/errmesg.h $(SRCDIR)/field.h $(SRCDIR)/readdes.h $(SRCDIR)/storage.h $(SRCDIR)/token.h $(SRCDIR)/util.h $(SRCDIR)/wt.h $(SRCDIR)/swt.h $(SRCDIR)/wtdist.c $(COMPILE) $(COMPOPT) $(INCLUDES) $(SRCDIR)/wtdist.c clean: rm -f *.o $(OBJS) config.log config.status Makefileguava-3.6/src/leon/configure0000755017361200001450000250706711026723452016020 0ustar tabbottcrontab#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59 for libleon 0.0.2. # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac echo=${ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then # Yippee, $echo works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null && echo_test_string="`eval $cmd`" && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break fi done fi if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. echo='printf %s\n' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. ECHO=$echo if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi tagnames=`echo "$tagnames,CXX" | sed 's/^,//'` tagnames=`echo "$tagnames,F77" | sed 's/^,//'` # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME='libleon' PACKAGE_TARNAME='libleon' PACKAGE_VERSION='0.0.2' PACKAGE_STRING='libleon 0.0.2' PACKAGE_BUGREPORT='' ac_unique_file="src/group.h" # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE CPP EGREP build build_cpu build_vendor build_os host host_cpu host_vendor host_os LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CXX CXXFLAGS ac_ct_CXX CXXDEPMODE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP ac_env_CXX_set=${CXX+set} ac_env_CXX_value=$CXX ac_cv_env_CXX_set=${CXX+set} ac_cv_env_CXX_value=$CXX ac_env_CXXFLAGS_set=${CXXFLAGS+set} ac_env_CXXFLAGS_value=$CXXFLAGS ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} ac_cv_env_CXXFLAGS_value=$CXXFLAGS ac_env_CXXCPP_set=${CXXCPP+set} ac_env_CXXCPP_value=$CXXCPP ac_cv_env_CXXCPP_set=${CXXCPP+set} ac_cv_env_CXXCPP_value=$CXXCPP ac_env_F77_set=${F77+set} ac_env_F77_value=$F77 ac_cv_env_F77_set=${F77+set} ac_cv_env_F77_value=$F77 ac_env_FFLAGS_set=${FFLAGS+set} ac_env_FFLAGS_value=$FFLAGS ac_cv_env_FFLAGS_set=${FFLAGS+set} ac_cv_env_FFLAGS_value=$FFLAGS # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures libleon 0.0.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] _ACEOF cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of libleon 0.0.2:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking Speeds up one-time builds --enable-dependency-tracking Do not reject slow dependency extractors --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-pic try to use only PIC/non-PIC objects [default=use both] --with-tags[=TAGS] include additional configurations [automatic] Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor CXX C++ compiler command CXXFLAGS C++ compiler flags CXXCPP C++ preprocessor F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then echo $SHELL $ac_srcdir/configure.gnu --help=recursive elif test -f $ac_srcdir/configure; then echo $SHELL $ac_srcdir/configure --help=recursive elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF libleon configure 0.0.2 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by libleon $as_me 0.0.2, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version="1.6" ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f $ac_dir/shtool; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 test "$program_prefix" != NONE && program_transform_name="s,^,$program_prefix,;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$,$program_suffix,;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi # Define the identity of the package. PACKAGE=libleon VERSION=0.0.2 cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} AMTAR=${AMTAR-"${am_missing_run}tar"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Add the stamp file to the list of files AC keeps track of, # along with our hook. ac_config_headers="$ac_config_headers src/leon_config.h" rm -f .deps 2>/dev/null mkdir .deps 2>/dev/null if test -d .deps; then DEPDIR=.deps else # MS-DOS does not allow filenames that begin with a dot. DEPDIR=_deps fi rmdir .deps 2>/dev/null ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' doit: @echo done END # If we don't find an include directive, just comment out the code. echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | fgrep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6 rm -f confinc confmf # Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval="$enable_dependency_tracking" fi; if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std1 is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std1. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. echo '#include "conftest.h"' > conftest.c echo 'int i;' > conftest.h echo "${am__include} ${am__quote}conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=conftest.c object=conftest.o \ depfile=conftest.Po tmpdepfile=conftest.TPo \ $SHELL ./depcomp $depcc -c conftest.c -o conftest.o >/dev/null 2>&1 && grep conftest.h conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then am_cv_CC_dependencies_compiler_type=$depmode break fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done echo "$as_me:$LINENO: checking for int" >&5 echo $ECHO_N "checking for int... $ECHO_C" >&6 if test "${ac_cv_type_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((int *) 0) return 0; if (sizeof (int)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_int=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_int=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5 echo "${ECHO_T}$ac_cv_type_int" >&6 echo "$as_me:$LINENO: checking size of int" >&5 echo $ECHO_N "checking size of int... $ECHO_C" >&6 if test "${ac_cv_sizeof_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_int" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_int=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (int)); } unsigned long ulongval () { return (long) (sizeof (int)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (int))) < 0) { long i = longval (); if (i != ((long) (sizeof (int)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (int)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_int=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_int=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5 echo "${ECHO_T}$ac_cv_sizeof_int" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF # Check whether --enable-shared or --disable-shared was given. if test "${enable_shared+set}" = set; then enableval="$enable_shared" p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi; # Check whether --enable-static or --disable-static was given. if test "${enable_static+set}" = set; then enableval="$enable_static" p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi; # Check whether --enable-fast-install or --disable-fast-install was given. if test "${enable_fast_install+set}" = set; then enableval="$enable_fast_install" p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi; # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6 if test "${lt_cv_path_SED+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && break cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done SED=$lt_cv_path_SED fi echo "$as_me:$LINENO: result: $SED" >&5 echo "${ECHO_T}$SED" >&6 # Check whether --with-gnu-ld or --without-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval="$with_gnu_ld" test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi; ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. case `"$LD" -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 with_gnu_ld=$lt_cv_prog_gnu_ld echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 if test "${lt_cv_ld_reload_flag+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_ld_reload_flag='-r' fi echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$CC -nostdlib -Xlinker$reload_flag $archargs -o $output$reload_objs' echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 if test "${lt_cv_path_NM+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/${ac_tool_prefix}nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac esac fi done IFS="$lt_save_ifs" test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi fi echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 echo "${ECHO_T}$lt_cv_path_NM" >&6 NM="$lt_cv_path_NM" echo "$as_me:$LINENO: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6 fi echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6 if test "${lt_cv_deplibs_check_method+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix4* | aix5*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi4*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin* | mingw* | pw32*) # win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='win32_libid' ;; darwin* | rhapsody*) # this will be overwritten by pass_all, but leave it in just in case lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library' lt_cv_file_magic_cmd='/usr/bin/file -L' case "$host_os" in rhapsody* | darwin1.[012]) lt_cv_file_magic_test_file=`/System/Library/Frameworks/System.framework/System` ;; *) # Darwin 1.3 on lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib' ;; esac lt_cv_deplibs_check_method=pass_all ;; freebsd*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case "$host_cpu" in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; irix5* | irix6* | nonstopux*) case $host_os in irix5* | nonstopux*) # this will be overridden with pass_all, but let us keep it just in case lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" ;; *) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac # this will be overridden with pass_all, but let us keep it just in case lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1" ;; esac lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*` lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux*) case $host_cpu in alpha* | hppa* | i*86 | ia64* | m68* | mips | mipsel | powerpc* | sparc* | s390* | sh*) lt_cv_deplibs_check_method=pass_all ;; *) # glibc up to 2.1.1 does not perform some relocations on ARM lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; esac lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; nto-qnx) lt_cv_deplibs_check_method=unknown ;; openbsd*) lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object' else lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' fi ;; osf3* | osf4* | osf5*) # this will be overridden with pass_all, but let us keep it just in case lt_cv_deplibs_check_method='file_magic COFF format alpha shared library' lt_cv_file_magic_test_file=/shlib/libc.so lt_cv_deplibs_check_method=pass_all ;; sco3.2v5*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all lt_cv_file_magic_test_file=/lib/libc.so ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; esac ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; esac fi echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Check whether --enable-libtool-lock or --disable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval="$enable_libtool_lock" fi; test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line 4483 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case "`/usr/bin/file conftest.o`" in *32-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 if test "${lt_cv_cc_needs_belf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then lt_cv_cc_needs_belf=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 lt_cv_cc_needs_belf=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; esac need_locks="$enable_libtool_lock" for ac_header in dlfcn.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------- ## ## Report this to the libleon lists. ## ## ---------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CXX" && break done test -n "$ac_ct_CXX" || ac_ct_CXX="g++" CXX=$ac_ct_CXX fi # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS CXXFLAGS="-g" echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cxx_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu depcc="$CXX" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. echo '#include "conftest.h"' > conftest.c echo 'int i;' > conftest.h echo "${am__include} ${am__quote}conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=conftest.c object=conftest.o \ depfile=conftest.Po tmpdepfile=conftest.TPo \ $SHELL ./depcomp $depcc -c conftest.c -o conftest.o >/dev/null 2>&1 && grep conftest.h conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then am_cv_CXX_dependencies_compiler_type=$depmode break fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6 CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6 if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi echo "$as_me:$LINENO: result: $CXXCPP" >&5 echo "${ECHO_T}$CXXCPP" >&6 ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then echo "$as_me:$LINENO: result: $F77" >&5 echo "${ECHO_T}$F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_F77="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 echo "${ECHO_T}$ac_ct_F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_F77" && break done F77=$ac_ct_F77 fi # Provide some information about the compiler. echo "$as_me:5542:" \ "checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6 if test "${ac_cv_f77_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_f77_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6 ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+set} ac_save_FFLAGS=$FFLAGS FFLAGS= echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_f77_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else FFLAGS=-g cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_f77_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_f77_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 echo "${ECHO_T}$ac_cv_prog_f77_g" >&6 if test "$ac_test_FFLAGS" = set; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-O2" else FFLAGS= fi fi G77=`test $ac_compiler_gnu = yes && echo yes` ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! # find the maximum length of command line arguments echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 if test "${lt_cv_sys_max_cmd_len+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else i=0 testring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; *) # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while (test "X"`$CONFIG_SHELL $0 --fallback-echo "X$testring" 2>/dev/null` \ = "XX$testring") >/dev/null 2>&1 && new_result=`expr "X$testring" : ".*" 2>&1` && lt_cv_sys_max_cmd_len=$new_result && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` testring=$testring$testring done testring= # Add a significant safety factor because C++ compilers can tack on massive # amounts of additional arguments before passing them to the linker. # It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 else echo "$as_me:$LINENO: result: none" >&5 echo "${ECHO_T}none" >&6 fi # Check for command to grab the raw symbol name followed by C symbol from nm. echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6 if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Transform the above into a raw symbol and a C symbol. symxfrm='\1 \2\3 \3' # Transform an extracted symbol line into a proper C declaration lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32*) symcode='[ABCDGISTW]' ;; hpux*) # Its linker distinguishes data from code symbols if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris* | sysv5*) symcode='[BDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGISTW]' ;; esac # Try without a prefix undercore, then with it. for ac_symprfx in "" "_"; do # Write the raw and C identifiers. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Now try to grab the symbols. nlist=conftest.nm if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if grep ' nm_test_var$' "$nlist" >/dev/null; then if grep ' nm_test_func$' "$nlist" >/dev/null; then cat < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[] = { EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then echo "$as_me:$LINENO: result: failed" >&5 echo "${ECHO_T}failed" >&6 else echo "$as_me:$LINENO: result: ok" >&5 echo "${ECHO_T}ok" >&6 fi echo "$as_me:$LINENO: checking for objdir" >&5 echo $ECHO_N "checking for objdir... $ECHO_C" >&6 if test "${lt_cv_objdir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 echo "${ECHO_T}$lt_cv_objdir" >&6 objdir=$lt_cv_objdir case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e s/^X//' sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to undo escaping of the cmd sep variable unescape_variable_subst='s/\\\(${_S_}\)/\1/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except M$VC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then echo "$as_me:$LINENO: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false" fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 echo "${ECHO_T}$ac_ct_AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi AR=$ac_ct_AR else AR="$ac_cv_prog_AR" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$SED" && SED=sed test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="\$RANLIB -t \$oldlib\${_S_}$old_postinstall_cmds" ;; *) old_postinstall_cmds="\$RANLIB \$oldlib\${_S_}$old_postinstall_cmds" ;; esac old_archive_cmds="$old_archive_cmds\${_S_}\$RANLIB \$oldlib" fi # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then echo "$as_me:$LINENO: checking for file" >&5 echo $ECHO_N "checking for file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi else MAGIC_CMD=: fi fi fi ;; esac enable_dlopen=no enable_win32_dll=no # Check whether --enable-libtool-lock or --disable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval="$enable_libtool_lock" fi; test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Check whether --with-pic or --without-pic was given. if test "${with_pic+set}" = set; then withval="$with_pic" pic_mode="$withval" else pic_mode=default fi; test -z "$pic_mode" && pic_mode=default # Use C for the default configuration in the libtool script tagname= lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}\n' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # # Check for any special shared library compilation flags. # lt_prog_cc_shlib= if test "$GCC" = no; then case $host_os in sco3.2v5*) lt_prog_cc_shlib='-belf' ;; esac fi if test -n "$lt_prog_cc_shlib"; then { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5 echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;} if echo "$old_CC $old_CFLAGS " | grep "[ ]$lt_prog_cc_shlib[ ]" >/dev/null; then : else { echo "$as_me:$LINENO: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5 echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;} lt_cv_prog_cc_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # echo "$as_me:$LINENO: checking if $compiler static flag $lt_prog_compiler_static works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_prog_compiler_static works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_prog_compiler_static" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 else lt_prog_compiler_static_works=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works" >&6 if test x"$lt_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:6572: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:6576: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; *) lt_prog_compiler_pic='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; linux*) case $CC in icc|ecc) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; ccc) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; sco3.2v5*) lt_prog_compiler_pic='-Kpic' lt_prog_compiler_static='-dn' ;; solaris*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 echo "${ECHO_T}$lt_prog_compiler_pic" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:6804: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:6808: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_prog_compiler_pic_works=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6 if test x"$lt_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext # According to Tom Tromey, Ian Lance Taylor reported there are C compilers # that will create temporary files in the current directory regardless of # the output directory. Thus, making CWD read-only will cause this test # to fail, enabling locking or at least warning the user not to do parallel # builds. chmod -w . lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:6871: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:6875: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . $rm conftest* out/* rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag= enable_shared_with_static_runtimes=no archive_cmds= archive_expsym_cmds= old_archive_From_new_cmds= old_archive_from_expsyms_cmds= export_dynamic_flag_spec= whole_archive_flag_spec= thread_safe_flag_spec= hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no hardcode_shlibpath_var=unsupported link_all_deplibs=unknown hardcode_automatic=no module_cmds= module_expsym_cmds= always_export_symbols=no export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data${_S_}$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data${_S_}$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data${_S_}$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data${_S_}$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data${_S_}$AR $AR_FLAGS $lib $libobjs${_S_}$RANLIB $lib${_S_}(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi${_S_} $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = yes; then runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE${_S_}$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_libdir_separator=':' link_all_deplibs=yes if test "$GCC" = yes; then case $host_os in aix4.012|aix4.012.*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct=yes else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) always_export_symbols=yes # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec=' ' archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds it's shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}\${_S_}$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data${_S_}$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data${_S_}$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data${_S_}$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data${_S_}$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data${_S_}$AR $AR_FLAGS $lib $libobjs${_S_}$RANLIB $lib${_S_}(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi4*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll${_S_}linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then archive_cmds_need_lc=no case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag='-undefined suppress' ;; darwin1.* | darwin[2-6].*) # Darwin 1.3 on, but less than 7.0 test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag='-flat_namespace -undefined suppress' ;; *) # Darwin 7.0 on case "${MACOSX_DEPLOYMENT_TARGET-10.1}" in 10.[012]) test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag='-flat_namespace -undefined suppress' ;; *) # 10.3 on if test -z ${LD_TWOLEVEL_NAMESPACE}; then allow_undefined_flag='-flat_namespace -undefined suppress' else allow_undefined_flag='-undefined dynamic_lookup' fi ;; esac ;; esac # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. Also zsh mangles # `"' quotes if we put them in here... so don't! lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds='$CC -dynamiclib $archargs -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else archive_cmds='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs${_S_}$CC -dynamiclib $archargs $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi module_cmds='$CC -bundle $archargs ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -dynamiclib $archargs -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs${_S_}$CC -dynamiclib $archargs $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -bundle $archargs $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='-all_load $convenience' link_all_deplibs=yes fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; freebsd1*) ld_shlibs=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd*) archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$rm $output_objdir/$soname${_S_}$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags${_S_}test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$rm $output_objdir/$soname${_S_}$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags${_S_}test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*|ia64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case "$host_cpu" in hppa*64*|ia64*) archive_cmds='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; esac fi if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_libdir_separator=: hardcode_direct=no hardcode_shlibpath_var=no ;; ia64*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=no hardcode_shlibpath_var=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; *) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld='-rpath $libdir' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; openbsd*) hardcode_direct=yes hardcode_shlibpath_var=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def${_S_}$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def${_S_}$echo DATA >> $output_objdir/$libname.def${_S_}$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def${_S_}$echo EXPORTS >> $output_objdir/$libname.def${_S_}emxexp $libobjs >> $output_objdir/$libname.def${_S_}$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp${_S_} $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib${_S_}$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; sco3.2v5*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='${wl}-Bexport' runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ;; solaris*) no_undefined_flag=' -z text' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp${_S_}cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp${_S_}$echo "local: *; };" >> $lib.exp${_S_} $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags${_S_}$rm $lib.exp' else archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp${_S_}cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp${_S_}$echo "local: *; };" >> $lib.exp${_S_} $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags${_S_}$rm $lib.exp' fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4.2uw2*) archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=no hardcode_shlibpath_var=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) no_undefined_flag='${wl}-z ${wl}text' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' fi runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv5*) no_undefined_flag=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp${_S_}cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp${_S_}$echo "local: *; };" >> $lib.exp${_S_} $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags${_S_}$rm $lib.exp' hardcode_libdir_flag_spec= hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs" >&5 echo "${ECHO_T}$ld_shlibs" >&6 test "$ld_shlibs" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *"$_S_"*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 echo "${ECHO_T}$archive_cmds_need_lc" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ test -n "$runpath_var " || \ test "X$hardcode_automatic"="Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action" >&5 echo "${ECHO_T}$hardcode_action" >&6 if test "$hardcode_action" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in NOT-darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac fi echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`${_S_} dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`${_S_} dldir=$destdir/`dirname \$dlpath`${_S_} test -d \$dldir || mkdir -p \$dldir${_S_} $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`${_S_} dlpath=$dir/\$dldll${_S_} $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/lib /lib/w32api /usr/lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext ${libname}${release}${versuffix}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.01* | freebsdelf3.01*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_shl_load) || defined (__stub___shl_load) choke me #else char (*f) () = shl_load; #endif #ifdef __cplusplus } #endif int main () { return f != shl_load; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dlopen to an innocuous variant, in case declares dlopen. For example, HP-UX 11i declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dlopen /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_dlopen) || defined (__stub___dlopen) choke me #else char (*f) () = dlopen; #endif #ifdef __cplusplus } #endif int main () { return f != dlopen; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dld_link (); int main () { dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$lt_cv_dlopen_self" >&6 if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi # Report which librarie types wil actually be built echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case "$host_os" in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds\${_S_}\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; darwin* | rhapsody*) if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then archive_cmds_need_lc=no case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag='-undefined suppress' ;; darwin1.* | darwin[2-6].*) # Darwin 1.3 on, but less than 7.0 test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag='-flat_namespace -undefined suppress' ;; *) # Darwin 7.0 on case "${MACOSX_DEPLOYMENT_TARGET-10.1}" in 10.[012]) test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag='-flat_namespace -undefined suppress' ;; *) # 10.3 on if test -z ${LD_TWOLEVEL_NAMESPACE}; then allow_undefined_flag='-flat_namespace -undefined suppress' else allow_undefined_flag='-undefined dynamic_lookup' fi ;; esac ;; esac # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. Also zsh mangles # `"' quotes if we put them in here... so don't! output_verbose_link_cmd='echo' archive_cmds='$CC -dynamiclib $archargs $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring' module_cmds='$CC -bundle $archargs $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -dynamiclib $archargs $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -bundle $archargs $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='-all_load $convenience' link_all_deplibs=yes fi ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler \ CC \ LD \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_prog_compiler_no_builtin_flag \ export_dynamic_flag_spec \ thread_safe_flag_spec \ whole_archive_flag_spec \ enable_shared_with_static_runtimes \ old_archive_cmds \ old_archive_from_new_cmds \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ archive_cmds \ archive_expsym_cmds \ postinstall_cmds \ postuninstall_cmds \ old_archive_from_expsyms_cmds \ allow_undefined_flag \ no_undefined_flag \ export_symbols_cmds \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ hardcode_automatic \ module_cmds \ module_expsym_cmds \ lt_cv_prog_compiler_c_o \ exclude_expsyms \ include_expsyms; do case $var in old_archive_cmds | \ old_archive_from_new_cmds | \ archive_cmds | \ archive_expsym_cmds | \ module_cmds | \ module_expsym_cmds | \ old_archive_from_expsyms_cmds | \ export_symbols_cmds | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\" -e \"\$unescape_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="${ofile}T" trap "$rm \"$cfgfile\"; exit 1" 1 2 15 $rm -f "$cfgfile" { echo "$as_me:$LINENO: creating $ofile" >&5 echo "$as_me: creating $ofile" >&6;} cat <<__EOF__ >> "$cfgfile" #! $SHELL # `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="$SED -e s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi # The names of the tagged configurations supported by this script. available_tags= # ### BEGIN LIBTOOL CONFIG # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Set the command separator (default: ~) _S_=\${LIBTOOL_CMD_SEP-\~} # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler # Is the compiler the GNU C compiler? with_gcc=$GCC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext='$shrext' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # ### END LIBTOOL CONFIG __EOF__ case $host_os in aix3*) cat <<\EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi EOF ;; esac # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || \ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. test -f Makefile && make "$ltmain" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" # Check whether --with-tags or --without-tags was given. if test "${with_tags+set}" = set; then withval="$with_tags" tagnames="$withval" fi; if test -f "$ltmain" && test -n "$tagnames"; then if test ! -f "${ofile}"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} fi if test -z "$LTCC"; then eval "`$SHELL ${ofile} --config | grep '^LTCC='`" if test -z "$LTCC"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} else { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} fi fi # Extract list of available tagged configurations in $ofile. # Note that this assumes the entire list is on one line. available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for tagname in $tagnames; do IFS="$lt_save_ifs" # Check whether tagname contains only valid characters case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in "") ;; *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 echo "$as_me: error: invalid tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null then { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} { (exit 1); exit 1; }; } fi # Update the list of available tags. if test -n "$tagname"; then echo appending configuration tag \"$tagname\" to $ofile case $tagname in CXX) if test -n "$CXX" && test "X$CXX" != "Xno"; then ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_flag_spec_ld_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_automatic_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= # Source file extension for C++ test sources. ac_ext=cc # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *) { return(0); }\n' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC compiler_CXX=$CC cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` # We don't want -fno-exception wen compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld or --without-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval="$with_gnu_ld" test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi; ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. case `"$LD" -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes if test "$GXX" = yes; then case $host_os in aix4.012|aix4.012.*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_CXX=yes else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) always_export_symbols_CXX=yes # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX=' ' archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds it's shared libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}\${_S_}$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi${_S_} $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs_CXX=no fi ;; darwin* | rhapsody*) if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then archive_cmds_need_lc_CXX=no case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag_CXX='-undefined suppress' ;; darwin1.* | darwin[2-6].*) # Darwin 1.3 on, but less than 7.0 test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag_CXX='-flat_namespace -undefined suppress' ;; *) # Darwin 7.0 on case "${MACOSX_DEPLOYMENT_TARGET-10.1}" in 10.[012]) test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag_CXX='-flat_namespace -undefined suppress' ;; *) # 10.3 on if test -z ${LD_TWOLEVEL_NAMESPACE}; then allow_undefined_flag_CXX='-flat_namespace -undefined suppress' else allow_undefined_flag_CXX='-undefined dynamic_lookup' fi ;; esac ;; esac lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds_CXX='$CC -dynamiclib $archargs -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else archive_cmds_CXX='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs${_S_}$CC -dynamiclib $archargs $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi module_cmds_CXX='$CC -bundle $archargs ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -dynamiclib $archargs -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs${_S_}$CC -dynamiclib $archargs $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -bundle $archargs $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported whole_archive_flag_spec_CXX='-all_load $convenience' link_all_deplibs_CXX=yes fi ;; dgux*) case $cc_basename in ec++) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd12*) # C++ shared libraries reported to be fairly broken before switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC) archive_cmds_CXX='$rm $output_objdir/$soname${_S_}$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags${_S_}test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | egrep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$rm $output_objdir/$soname${_S_}$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags${_S_}test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld_CXX='+b $libdir' hardcode_libdir_separator_CXX=: ;; ia64*) hardcode_libdir_flag_spec_CXX='-L$libdir' ;; *) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case "$host_cpu" in hppa*64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; *) hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC) case "$host_cpu" in hppa*64*|ia64*) archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case "$host_cpu" in ia64*|hppa*64*) archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' ;; *) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; irix5* | irix6*) case $cc_basename in CC) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: ;; linux*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc) # Intel C++ with_gnu_ld=yes archive_cmds_need_lc_CXX=no archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; cxx) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; osf3*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; RCC) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; osf4* | osf5*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; RCC) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done${_S_} echo "-hidden">> $lib.exp${_S_} $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib${_S_} $rm $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sco*) archive_cmds_need_lc_CXX=no case $cc_basename in CC) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; sunos4*) case $cc_basename in CC) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC) # Sun C++ 4.2, 5.x and Centerline C++ no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp${_S_}cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp${_S_}$echo "local: *; };" >> $lib.exp${_S_} $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags${_S_}$rm $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.0-5 | solaris2.0-5.*) ;; *) # The C++ compiler is used as linker so we must use $wl # flag to pass the commands to the underlying system # linker. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac link_all_deplibs_CXX=yes # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[LR]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | grep -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp${_S_}cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp${_S_}$echo "local: *; };" >> $lib.exp${_S_} $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags${_S_}$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp${_S_}cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp${_S_}$echo "local: *; };" >> $lib.exp${_S_} $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags${_S_}$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' fi ;; esac ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) archive_cmds_need_lc_CXX=no ;; tandem*) case $cc_basename in NCC) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$ld_shlibs_CXX" >&6 test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no # The `*' in the case matches for architectures that use `case' in # $output_verbose_cmd can trigger glob expansion during the loop # eval without this substitution. output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`" for p in `eval $output_verbose_link_cmd`; do case $p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" \ || test $p = "-R"; then prev=$p continue else prev= fi if test "$pre_test_object_deps_done" = no; then case $p in -L* | -R*) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi ;; *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $rm -f confest.$objext case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | os2* | pw32*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix4* | aix5*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68) # Green Hills C++ Compiler # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; dgux*) case $cc_basename in ec++) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux*) case $cc_basename in KCC) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; icpc) # Intel C++ lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; cxx) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; osf3* | osf4* | osf5*) case $cc_basename in KCC) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; sco*) case $cc_basename in CC) lt_prog_compiler_pic_CXX='-fPIC' ;; *) ;; esac ;; solaris*) case $cc_basename in CC) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; tandem*) case $cc_basename in NCC) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; unixware*) ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:11284: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:11288: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_prog_compiler_pic_works_CXX=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6 if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_CXX=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext # According to Tom Tromey, Ian Lance Taylor reported there are C compilers # that will create temporary files in the current directory regardless of # the output directory. Thus, making CWD read-only will cause this test # to fail, enabling locking or at least warning the user not to do parallel # builds. chmod -w . lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:11351: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:11355: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . $rm conftest* out/* rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix4* | aix5*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw*) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$ld_shlibs_CXX" >&6 test "$ld_shlibs_CXX" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *"$_S_"*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_CXX=no else archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || \ test -n "$runpath_var CXX" || \ test "X$hardcode_automatic_CXX"="Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 echo "${ECHO_T}$hardcode_action_CXX" >&6 if test "$hardcode_action_CXX" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in NOT-darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac fi echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`${_S_} dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`${_S_} dldir=$destdir/`dirname \$dlpath`${_S_} test -d \$dldir || mkdir -p \$dldir${_S_} $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`${_S_} dlpath=$dir/\$dldll${_S_} $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/lib /lib/w32api /usr/lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext ${libname}${release}${versuffix}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.01* | freebsdelf3.01*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_shl_load) || defined (__stub___shl_load) choke me #else char (*f) () = shl_load; #endif #ifdef __cplusplus } #endif int main () { return f != shl_load; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dlopen to an innocuous variant, in case declares dlopen. For example, HP-UX 11i declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dlopen /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_dlopen) || defined (__stub___dlopen) choke me #else char (*f) () = dlopen; #endif #ifdef __cplusplus } #endif int main () { return f != dlopen; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dld_link (); int main () { dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$lt_cv_dlopen_self" >&6 if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_CXX \ CC_CXX \ LD_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_static_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ export_dynamic_flag_spec_CXX \ thread_safe_flag_spec_CXX \ whole_archive_flag_spec_CXX \ enable_shared_with_static_runtimes_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ postinstall_cmds_CXX \ postuninstall_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ export_symbols_cmds_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_flag_spec_ld_CXX \ hardcode_libdir_separator_CXX \ hardcode_automatic_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ lt_cv_prog_compiler_c_o_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX; do case $var in old_archive_cmds_CXX | \ old_archive_from_new_cmds_CXX | \ archive_cmds_CXX | \ archive_expsym_cmds_CXX | \ module_cmds_CXX | \ module_expsym_cmds_CXX | \ old_archive_from_expsyms_cmds_CXX | \ export_symbols_cmds_CXX | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\" -e \"\$unescape_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Set the command separator (default: ~) _S_=\${LIBTOOL_CMD_SEP-\~} # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU C compiler? with_gcc=$GCC_CXX # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_CXX # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext='$shrext' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_CXX old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_CXX # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_CXX # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_CXX # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_CXX # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_CXX" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. test -f Makefile && make "$ltmain" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ldcxx=$with_gnu_ld with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld else tagname="" fi ;; F77) if test -n "$F77" && test "X$F77" != "Xno"; then ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu archive_cmds_need_lc_F77=no allow_undefined_flag_F77= always_export_symbols_F77=no archive_expsym_cmds_F77= export_dynamic_flag_spec_F77= hardcode_direct_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= link_all_deplibs_F77=unknown old_archive_cmds_F77=$old_archive_cmds no_undefined_flag_F77= whole_archive_flag_spec_F77= enable_shared_with_static_runtimes_F77=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o objext_F77=$objext # Code to be used in simple compile tests lt_simple_compile_test_code=" subroutine t\n return\n end\n" # Code to be used in simple link tests lt_simple_link_test_code=" program t\n end\n" # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${F77-"f77"} compiler=$CC compiler_F77=$CC cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case "$host_os" in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds\${_S_}\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4*) test "$enable_shared" = yes && enable_static=no ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 test "$ld_shlibs_F77" = no && can_build_shared=no GCC_F77="$G77" LD_F77="$LD" lt_prog_compiler_wl_F77= lt_prog_compiler_pic_F77= lt_prog_compiler_static_F77= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_static_F77='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_F77='-fno-common' ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_F77=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_F77=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_F77='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' else lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_F77='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_F77='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_F77='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_F77='-non_shared' ;; newsos6) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; linux*) case $CC in icc|ecc) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-static' ;; ccc) lt_prog_compiler_wl_F77='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_F77='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; sco3.2v5*) lt_prog_compiler_pic_F77='-Kpic' lt_prog_compiler_static_F77='-dn' ;; solaris*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sunos4*) lt_prog_compiler_wl_F77='-Qoption ld ' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_F77='-Kconform_pic' lt_prog_compiler_static_F77='-Bstatic' fi ;; uts4*) lt_prog_compiler_pic_F77='-pic' lt_prog_compiler_static_F77='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_F77=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_F77"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_F77=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_F77" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:13603: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:13607: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_prog_compiler_pic_works_F77=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6 if test x"$lt_prog_compiler_pic_works_F77" = xyes; then case $lt_prog_compiler_pic_F77 in "" | " "*) ;; *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; esac else lt_prog_compiler_pic_F77= lt_prog_compiler_can_build_shared_F77=no fi fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_F77= ;; *) lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" ;; esac echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_F77=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext # According to Tom Tromey, Ian Lance Taylor reported there are C compilers # that will create temporary files in the current directory regardless of # the output directory. Thus, making CWD read-only will cause this test # to fail, enabling locking or at least warning the user not to do parallel # builds. chmod -w . lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:13670: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:13674: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then lt_cv_prog_compiler_c_o_F77=yes fi fi chmod u+w . $rm conftest* out/* rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag_F77= enable_shared_with_static_runtimes_F77=no archive_cmds_F77= archive_expsym_cmds_F77= old_archive_From_new_cmds_F77= old_archive_from_expsyms_cmds_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= thread_safe_flag_spec_F77= hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_direct_F77=no hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=unsupported link_all_deplibs_F77=unknown hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= always_export_symbols_F77=no export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_F77= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs_F77=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_F77=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data${_S_}$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data${_S_}$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data${_S_}$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data${_S_}$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data${_S_}$AR $AR_FLAGS $lib $libobjs${_S_}$RANLIB $lib${_S_}(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_F77=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_F77=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_F77=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_F77='-L$libdir' allow_undefined_flag_F77=unsupported always_export_symbols_F77=no enable_shared_with_static_runtimes_F77=yes export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi${_S_} $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs_F77=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; sunos4*) archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac if test "$ld_shlibs_F77" = yes; then runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_F77='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_F77= fi fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE${_S_}$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_F77=yes if test "$GCC" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_F77=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_F77='' hardcode_direct_F77=yes hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes if test "$GCC" = yes; then case $host_os in aix4.012|aix4.012.*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_F77=yes else # We have old collect2 hardcode_direct_F77=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_F77=yes hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_libdir_separator_F77= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_F77=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_F77='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_F77="-z nodefs" archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_F77=' ${wl}-bernotok' allow_undefined_flag_F77=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) always_export_symbols_F77=yes # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_F77=' ' archive_cmds_need_lc_F77=yes # This is similar to how AIX traditionally builds it's shared libraries. archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}\${_S_}$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data${_S_}$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data${_S_}$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data${_S_}$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data${_S_}$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data${_S_}$AR $AR_FLAGS $lib $libobjs${_S_}$RANLIB $lib${_S_}(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes # see comment about different semantics on the GNU ld section ld_shlibs_F77=no ;; bsdi4*) export_dynamic_flag_spec_F77=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_F77=' ' allow_undefined_flag_F77=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll${_S_}linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_F77='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_F77=yes ;; darwin* | rhapsody*) if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then archive_cmds_need_lc_F77=no case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag_F77='-undefined suppress' ;; darwin1.* | darwin[2-6].*) # Darwin 1.3 on, but less than 7.0 test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag_F77='-flat_namespace -undefined suppress' ;; *) # Darwin 7.0 on case "${MACOSX_DEPLOYMENT_TARGET-10.1}" in 10.[012]) test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag_F77='-flat_namespace -undefined suppress' ;; *) # 10.3 on if test -z ${LD_TWOLEVEL_NAMESPACE}; then allow_undefined_flag_F77='-flat_namespace -undefined suppress' else allow_undefined_flag_F77='-undefined dynamic_lookup' fi ;; esac ;; esac # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. Also zsh mangles # `"' quotes if we put them in here... so don't! lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds_F77='$CC -dynamiclib $archargs -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else archive_cmds_F77='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs${_S_}$CC -dynamiclib $archargs $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi module_cmds_F77='$CC -bundle $archargs ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -dynamiclib $archargs -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs${_S_}$CC -dynamiclib $archargs $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -bundle $archargs $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' hardcode_direct_F77=no hardcode_automatic_F77=yes hardcode_shlibpath_var_F77=unsupported whole_archive_flag_spec_F77='-all_load $convenience' link_all_deplibs_F77=yes fi ;; dgux*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; freebsd1*) ld_shlibs_F77=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd*) archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_F77='$rm $output_objdir/$soname${_S_}$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags${_S_}test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_F77='$rm $output_objdir/$soname${_S_}$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags${_S_}test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes export_dynamic_flag_spec_F77='${wl}-E' ;; hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*|ia64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case "$host_cpu" in hppa*64*|ia64*) archive_cmds_F77='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; *) archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; esac fi if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld_F77='+b $libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=no hardcode_shlibpath_var_F77=no ;; ia64*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=no hardcode_shlibpath_var_F77=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; *) hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: link_all_deplibs_F77=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; newsos6) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_shlibpath_var_F77=no ;; openbsd*) hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-R$libdir' ;; *) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes allow_undefined_flag_F77=unsupported archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def${_S_}$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def${_S_}$echo DATA >> $output_objdir/$libname.def${_S_}$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def${_S_}$echo EXPORTS >> $output_objdir/$libname.def${_S_}emxexp $libobjs >> $output_objdir/$libname.def${_S_}$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp${_S_} $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib${_S_}$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_F77='-rpath $libdir' fi hardcode_libdir_separator_F77=: ;; sco3.2v5*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='${wl}-Bexport' runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ;; solaris*) no_undefined_flag_F77=' -z text' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp${_S_}cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp${_S_}$echo "local: *; };" >> $lib.exp${_S_} $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags${_S_}$rm $lib.exp' else archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp${_S_}cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp${_S_}$echo "local: *; };" >> $lib.exp${_S_} $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags${_S_}$rm $lib.exp' fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_shlibpath_var_F77=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_F77=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; sysv4) case $host_vendor in sni) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_F77='$CC -r -o $output$reload_objs' hardcode_direct_F77=no ;; motorola) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv4.3*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_F77=yes fi ;; sysv4.2uw2*) archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) no_undefined_flag_F77='${wl}-z ${wl}text' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' fi runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv5*) no_undefined_flag_F77=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp${_S_}cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp${_S_}$echo "local: *; };" >> $lib.exp${_S_} $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags${_S_}$rm $lib.exp' hardcode_libdir_flag_spec_F77= hardcode_shlibpath_var_F77=no runpath_var='LD_RUN_PATH' ;; uts4*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; *) ld_shlibs_F77=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 echo "${ECHO_T}$ld_shlibs_F77" >&6 test "$ld_shlibs_F77" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_F77" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_F77=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_F77 in *"$_S_"*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_F77 compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_F77 allow_undefined_flag_F77= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_F77=no else archive_cmds_need_lc_F77=yes fi allow_undefined_flag_F77=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_F77= if test -n "$hardcode_libdir_flag_spec_F77" || \ test -n "$runpath_var F77" || \ test "X$hardcode_automatic_F77"="Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_F77" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && test "$hardcode_minus_L_F77" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_F77=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_F77=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_F77=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 echo "${ECHO_T}$hardcode_action_F77" >&6 if test "$hardcode_action_F77" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in NOT-darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac fi echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`${_S_} dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`${_S_} dldir=$destdir/`dirname \$dlpath`${_S_} test -d \$dldir || mkdir -p \$dldir${_S_} $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`${_S_} dlpath=$dir/\$dldll${_S_} $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/lib /lib/w32api /usr/lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext ${libname}${release}${versuffix}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.01* | freebsdelf3.01*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_F77 \ CC_F77 \ LD_F77 \ lt_prog_compiler_wl_F77 \ lt_prog_compiler_pic_F77 \ lt_prog_compiler_static_F77 \ lt_prog_compiler_no_builtin_flag_F77 \ export_dynamic_flag_spec_F77 \ thread_safe_flag_spec_F77 \ whole_archive_flag_spec_F77 \ enable_shared_with_static_runtimes_F77 \ old_archive_cmds_F77 \ old_archive_from_new_cmds_F77 \ predep_objects_F77 \ postdep_objects_F77 \ predeps_F77 \ postdeps_F77 \ compiler_lib_search_path_F77 \ archive_cmds_F77 \ archive_expsym_cmds_F77 \ postinstall_cmds_F77 \ postuninstall_cmds_F77 \ old_archive_from_expsyms_cmds_F77 \ allow_undefined_flag_F77 \ no_undefined_flag_F77 \ export_symbols_cmds_F77 \ hardcode_libdir_flag_spec_F77 \ hardcode_libdir_flag_spec_ld_F77 \ hardcode_libdir_separator_F77 \ hardcode_automatic_F77 \ module_cmds_F77 \ module_expsym_cmds_F77 \ lt_cv_prog_compiler_c_o_F77 \ exclude_expsyms_F77 \ include_expsyms_F77; do case $var in old_archive_cmds_F77 | \ old_archive_from_new_cmds_F77 | \ archive_cmds_F77 | \ archive_expsym_cmds_F77 | \ module_cmds_F77 | \ module_expsym_cmds_F77 | \ old_archive_from_expsyms_cmds_F77 | \ export_symbols_cmds_F77 | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\" -e \"\$unescape_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Set the command separator (default: ~) _S_=\${LIBTOOL_CMD_SEP-\~} # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_F77 # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler_F77 # Is the compiler the GNU C compiler? with_gcc=$GCC_F77 # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_F77 # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_F77 # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext='$shrext' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_F77 pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_F77 # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_F77 old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_F77 archive_expsym_cmds=$lt_archive_expsym_cmds_F77 postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_F77 module_expsym_cmds=$lt_module_expsym_cmds_F77 # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_F77 # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_F77 # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_F77 # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_F77 # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_F77 # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_F77 # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_F77 # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_F77 # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_F77 # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_F77 # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_F77 # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_F77 # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_F77" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_F77 # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_F77 # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_F77 # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_F77 # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. test -f Makefile && make "$ltmain" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" else tagname="" fi ;; GCJ) if test -n "$GCJ" && test "X$GCJ" != "Xno"; then # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o objext_GCJ=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}\n" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String argv) {}; }\n' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${GCJ-"gcj"} compiler=$CC compiler_GCJ=$CC # GCJ did not exist at the time GCC didn't implicitly link libc in. archive_cmds_need_lc_GCJ=no lt_prog_compiler_no_builtin_flag_GCJ= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:15649: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:15653: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl_GCJ= lt_prog_compiler_pic_GCJ= lt_prog_compiler_static_GCJ= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_static_GCJ='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_GCJ='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_GCJ='-fno-common' ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_GCJ=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_GCJ=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_GCJ='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_GCJ='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_GCJ='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_GCJ='-Bstatic' else lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_GCJ='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_GCJ='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_GCJ='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_GCJ='-non_shared' ;; newsos6) lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; linux*) case $CC in icc|ecc) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-static' ;; ccc) lt_prog_compiler_wl_GCJ='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_GCJ='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; sco3.2v5*) lt_prog_compiler_pic_GCJ='-Kpic' lt_prog_compiler_static_GCJ='-dn' ;; solaris*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sunos4*) lt_prog_compiler_wl_GCJ='-Qoption ld ' lt_prog_compiler_pic_GCJ='-PIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_GCJ='-Kconform_pic' lt_prog_compiler_static_GCJ='-Bstatic' fi ;; uts4*) lt_prog_compiler_pic_GCJ='-pic' lt_prog_compiler_static_GCJ='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_GCJ=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_GCJ"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_GCJ=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_GCJ" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:15881: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:15885: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_prog_compiler_pic_works_GCJ=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6 if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then case $lt_prog_compiler_pic_GCJ in "" | " "*) ;; *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; esac else lt_prog_compiler_pic_GCJ= lt_prog_compiler_can_build_shared_GCJ=no fi fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_GCJ= ;; *) lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" ;; esac echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_GCJ=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext # According to Tom Tromey, Ian Lance Taylor reported there are C compilers # that will create temporary files in the current directory regardless of # the output directory. Thus, making CWD read-only will cause this test # to fail, enabling locking or at least warning the user not to do parallel # builds. chmod -w . lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:15948: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:15952: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then lt_cv_prog_compiler_c_o_GCJ=yes fi fi chmod u+w . $rm conftest* out/* rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag_GCJ= enable_shared_with_static_runtimes_GCJ=no archive_cmds_GCJ= archive_expsym_cmds_GCJ= old_archive_From_new_cmds_GCJ= old_archive_from_expsyms_cmds_GCJ= export_dynamic_flag_spec_GCJ= whole_archive_flag_spec_GCJ= thread_safe_flag_spec_GCJ= hardcode_libdir_flag_spec_GCJ= hardcode_libdir_flag_spec_ld_GCJ= hardcode_libdir_separator_GCJ= hardcode_direct_GCJ=no hardcode_minus_L_GCJ=no hardcode_shlibpath_var_GCJ=unsupported link_all_deplibs_GCJ=unknown hardcode_automatic_GCJ=no module_cmds_GCJ= module_expsym_cmds_GCJ= always_export_symbols_GCJ=no export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_GCJ= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs_GCJ=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_GCJ=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data${_S_}$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data${_S_}$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data${_S_}$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data${_S_}$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data${_S_}$AR $AR_FLAGS $lib $libobjs${_S_}$RANLIB $lib${_S_}(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_GCJ=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_GCJ=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_GCJ=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_GCJ='-L$libdir' allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=no enable_shared_with_static_runtimes_GCJ=yes export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi${_S_} $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs_GCJ=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; sunos4*) archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; esac if test "$ld_shlibs_GCJ" = yes; then runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_GCJ='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_GCJ= fi fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=yes archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE${_S_}$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_GCJ=yes if test "$GCC" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_GCJ=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_GCJ='' hardcode_direct_GCJ=yes hardcode_libdir_separator_GCJ=':' link_all_deplibs_GCJ=yes if test "$GCC" = yes; then case $host_os in aix4.012|aix4.012.*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_GCJ=yes else # We have old collect2 hardcode_direct_GCJ=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_GCJ=yes hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_libdir_separator_GCJ= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_GCJ=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_GCJ='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_GCJ="-z nodefs" archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_GCJ=' ${wl}-bernotok' allow_undefined_flag_GCJ=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) always_export_symbols_GCJ=yes # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_GCJ=' ' archive_cmds_need_lc_GCJ=yes # This is similar to how AIX traditionally builds it's shared libraries. archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}\${_S_}$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data${_S_}$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data${_S_}$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data${_S_}$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data${_S_}$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data${_S_}$AR $AR_FLAGS $lib $libobjs${_S_}$RANLIB $lib${_S_}(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # see comment about different semantics on the GNU ld section ld_shlibs_GCJ=no ;; bsdi4*) export_dynamic_flag_spec_GCJ=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_GCJ=' ' allow_undefined_flag_GCJ=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll${_S_}linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_GCJ='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_GCJ=yes ;; darwin* | rhapsody*) if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then archive_cmds_need_lc_GCJ=no case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag_GCJ='-undefined suppress' ;; darwin1.* | darwin[2-6].*) # Darwin 1.3 on, but less than 7.0 test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag_GCJ='-flat_namespace -undefined suppress' ;; *) # Darwin 7.0 on case "${MACOSX_DEPLOYMENT_TARGET-10.1}" in 10.[012]) test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag_GCJ='-flat_namespace -undefined suppress' ;; *) # 10.3 on if test -z ${LD_TWOLEVEL_NAMESPACE}; then allow_undefined_flag_GCJ='-flat_namespace -undefined suppress' else allow_undefined_flag_GCJ='-undefined dynamic_lookup' fi ;; esac ;; esac # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. Also zsh mangles # `"' quotes if we put them in here... so don't! lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds_GCJ='$CC -dynamiclib $archargs -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else archive_cmds_GCJ='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs${_S_}$CC -dynamiclib $archargs $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi module_cmds_GCJ='$CC -bundle $archargs ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -dynamiclib $archargs -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs${_S_}$CC -dynamiclib $archargs $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym${_S_}$CC -bundle $archargs $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags${_S_}nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' hardcode_direct_GCJ=no hardcode_automatic_GCJ=yes hardcode_shlibpath_var_GCJ=unsupported whole_archive_flag_spec_GCJ='-all_load $convenience' link_all_deplibs_GCJ=yes fi ;; dgux*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; freebsd1*) ld_shlibs_GCJ=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd*) archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_GCJ='$rm $output_objdir/$soname${_S_}$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags${_S_}test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_GCJ='$rm $output_objdir/$soname${_S_}$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags${_S_}test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' ;; hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*|ia64*) archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case "$host_cpu" in hppa*64*|ia64*) archive_cmds_GCJ='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; *) archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; esac fi if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no ;; ia64*) hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes ;; *) hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: link_all_deplibs_GCJ=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; newsos6) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_shlibpath_var_GCJ=no ;; openbsd*) hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' export_dynamic_flag_spec_GCJ='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' ;; *) archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes allow_undefined_flag_GCJ=unsupported archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def${_S_}$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def${_S_}$echo DATA >> $output_objdir/$libname.def${_S_}$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def${_S_}$echo EXPORTS >> $output_objdir/$libname.def${_S_}emxexp $libobjs >> $output_objdir/$libname.def${_S_}$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp${_S_} $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib${_S_}$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_GCJ='-rpath $libdir' fi hardcode_libdir_separator_GCJ=: ;; sco3.2v5*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no export_dynamic_flag_spec_GCJ='${wl}-Bexport' runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ;; solaris*) no_undefined_flag_GCJ=' -z text' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp${_S_}cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp${_S_}$echo "local: *; };" >> $lib.exp${_S_} $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags${_S_}$rm $lib.exp' else archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp${_S_}cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp${_S_}$echo "local: *; };" >> $lib.exp${_S_} $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags${_S_}$rm $lib.exp' fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_shlibpath_var_GCJ=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_GCJ=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; sysv4) case $host_vendor in sni) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_GCJ='$CC -r -o $output$reload_objs' hardcode_direct_GCJ=no ;; motorola) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_GCJ=no ;; sysv4.3*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no export_dynamic_flag_spec_GCJ='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_GCJ=yes fi ;; sysv4.2uw2*) archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=no hardcode_shlibpath_var_GCJ=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) no_undefined_flag_GCJ='${wl}-z ${wl}text' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' fi runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_GCJ=no ;; sysv5*) no_undefined_flag_GCJ=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp${_S_}cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp${_S_}$echo "local: *; };" >> $lib.exp${_S_} $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags${_S_}$rm $lib.exp' hardcode_libdir_flag_spec_GCJ= hardcode_shlibpath_var_GCJ=no runpath_var='LD_RUN_PATH' ;; uts4*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; *) ld_shlibs_GCJ=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 echo "${ECHO_T}$ld_shlibs_GCJ" >&6 test "$ld_shlibs_GCJ" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_GCJ" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_GCJ=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_GCJ in *"$_S_"*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_GCJ compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ allow_undefined_flag_GCJ= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_GCJ=no else archive_cmds_need_lc_GCJ=yes fi allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_GCJ= if test -n "$hardcode_libdir_flag_spec_GCJ" || \ test -n "$runpath_var GCJ" || \ test "X$hardcode_automatic_GCJ"="Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_GCJ" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && test "$hardcode_minus_L_GCJ" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_GCJ=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_GCJ=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_GCJ=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 echo "${ECHO_T}$hardcode_action_GCJ" >&6 if test "$hardcode_action_GCJ" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in NOT-darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac fi echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`${_S_} dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`${_S_} dldir=$destdir/`dirname \$dlpath`${_S_} test -d \$dldir || mkdir -p \$dldir${_S_} $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`${_S_} dlpath=$dir/\$dldll${_S_} $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/lib /lib/w32api /usr/lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext ${libname}${release}${versuffix}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.01* | freebsdelf3.01*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_shl_load) || defined (__stub___shl_load) choke me #else char (*f) () = shl_load; #endif #ifdef __cplusplus } #endif int main () { return f != shl_load; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dlopen to an innocuous variant, in case declares dlopen. For example, HP-UX 11i declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dlopen /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_dlopen) || defined (__stub___dlopen) choke me #else char (*f) () = dlopen; #endif #ifdef __cplusplus } #endif int main () { return f != dlopen; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dld_link (); int main () { dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$lt_cv_dlopen_self" >&6 if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_GCJ \ CC_GCJ \ LD_GCJ \ lt_prog_compiler_wl_GCJ \ lt_prog_compiler_pic_GCJ \ lt_prog_compiler_static_GCJ \ lt_prog_compiler_no_builtin_flag_GCJ \ export_dynamic_flag_spec_GCJ \ thread_safe_flag_spec_GCJ \ whole_archive_flag_spec_GCJ \ enable_shared_with_static_runtimes_GCJ \ old_archive_cmds_GCJ \ old_archive_from_new_cmds_GCJ \ predep_objects_GCJ \ postdep_objects_GCJ \ predeps_GCJ \ postdeps_GCJ \ compiler_lib_search_path_GCJ \ archive_cmds_GCJ \ archive_expsym_cmds_GCJ \ postinstall_cmds_GCJ \ postuninstall_cmds_GCJ \ old_archive_from_expsyms_cmds_GCJ \ allow_undefined_flag_GCJ \ no_undefined_flag_GCJ \ export_symbols_cmds_GCJ \ hardcode_libdir_flag_spec_GCJ \ hardcode_libdir_flag_spec_ld_GCJ \ hardcode_libdir_separator_GCJ \ hardcode_automatic_GCJ \ module_cmds_GCJ \ module_expsym_cmds_GCJ \ lt_cv_prog_compiler_c_o_GCJ \ exclude_expsyms_GCJ \ include_expsyms_GCJ; do case $var in old_archive_cmds_GCJ | \ old_archive_from_new_cmds_GCJ | \ archive_cmds_GCJ | \ archive_expsym_cmds_GCJ | \ module_cmds_GCJ | \ module_expsym_cmds_GCJ | \ old_archive_from_expsyms_cmds_GCJ | \ export_symbols_cmds_GCJ | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\" -e \"\$unescape_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Set the command separator (default: ~) _S_=\${LIBTOOL_CMD_SEP-\~} # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_GCJ # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler_GCJ # Is the compiler the GNU C compiler? with_gcc=$GCC_GCJ # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_GCJ # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_GCJ # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext='$shrext' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_GCJ pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_GCJ # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_GCJ old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_GCJ archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_GCJ module_expsym_cmds=$lt_module_expsym_cmds_GCJ # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_GCJ # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_GCJ # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_GCJ # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_GCJ # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_GCJ # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_GCJ # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_GCJ # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_GCJ # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_GCJ # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_GCJ" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_GCJ # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_GCJ # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_GCJ # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_GCJ # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. test -f Makefile && make "$ltmain" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" else tagname="" fi ;; RC) # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o objext_RC=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${RC-"windres"} compiler=$CC compiler_RC=$CC lt_cv_prog_compiler_c_o_RC=yes # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_RC \ CC_RC \ LD_RC \ lt_prog_compiler_wl_RC \ lt_prog_compiler_pic_RC \ lt_prog_compiler_static_RC \ lt_prog_compiler_no_builtin_flag_RC \ export_dynamic_flag_spec_RC \ thread_safe_flag_spec_RC \ whole_archive_flag_spec_RC \ enable_shared_with_static_runtimes_RC \ old_archive_cmds_RC \ old_archive_from_new_cmds_RC \ predep_objects_RC \ postdep_objects_RC \ predeps_RC \ postdeps_RC \ compiler_lib_search_path_RC \ archive_cmds_RC \ archive_expsym_cmds_RC \ postinstall_cmds_RC \ postuninstall_cmds_RC \ old_archive_from_expsyms_cmds_RC \ allow_undefined_flag_RC \ no_undefined_flag_RC \ export_symbols_cmds_RC \ hardcode_libdir_flag_spec_RC \ hardcode_libdir_flag_spec_ld_RC \ hardcode_libdir_separator_RC \ hardcode_automatic_RC \ module_cmds_RC \ module_expsym_cmds_RC \ lt_cv_prog_compiler_c_o_RC \ exclude_expsyms_RC \ include_expsyms_RC; do case $var in old_archive_cmds_RC | \ old_archive_from_new_cmds_RC | \ archive_cmds_RC | \ archive_expsym_cmds_RC | \ module_cmds_RC | \ module_expsym_cmds_RC | \ old_archive_from_expsyms_cmds_RC | \ export_symbols_cmds_RC | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\" -e \"\$unescape_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Set the command separator (default: ~) _S_=\${LIBTOOL_CMD_SEP-\~} # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_RC # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler_RC # Is the compiler the GNU C compiler? with_gcc=$GCC_RC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_RC # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_RC # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext='$shrext' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_RC pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_RC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_RC old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_RC archive_expsym_cmds=$lt_archive_expsym_cmds_RC postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_RC module_expsym_cmds=$lt_module_expsym_cmds_RC # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_RC # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_RC # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_RC # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_RC # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_RC # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_RC # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_RC # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_RC # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_RC # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_RC # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_RC # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_RC # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_RC # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_RC" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_RC # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_RC # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_RC # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_RC # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. test -f Makefile && make "$ltmain" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ;; *) { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 echo "$as_me: error: Unsupported tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac # Append the new tag name to the list of available tags. if test -n "$tagname" ; then available_tags="$available_tags $tagname" fi fi done IFS="$lt_save_ifs" # Now substitute the updated list of available tags. if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then mv "${ofile}T" "$ofile" chmod +x "$ofile" else rm -f "${ofile}T" { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 echo "$as_me: error: unable to update list of available tagged configurations." >&2;} { (exit 1); exit 1; }; } fi fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' # Prevent multiple expansion # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std1 is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std1. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. echo '#include "conftest.h"' > conftest.c echo 'int i;' > conftest.h echo "${am__include} ${am__quote}conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=conftest.c object=conftest.o \ depfile=conftest.Po tmpdepfile=conftest.TPo \ $SHELL ./depcomp $depcc -c conftest.c -o conftest.o >/dev/null 2>&1 && grep conftest.h conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then am_cv_CC_dependencies_compiler_type=$depmode break fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by libleon $as_me 0.0.2, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ libleon config.status 0.0.2 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ac_shift=: ;; -*) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS section. # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "src/leon_config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/leon_config.h" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@PACKAGE@,$PACKAGE,;t t s,@VERSION@,$VERSION,;t t s,@ACLOCAL@,$ACLOCAL,;t t s,@AUTOCONF@,$AUTOCONF,;t t s,@AUTOMAKE@,$AUTOMAKE,;t t s,@AUTOHEADER@,$AUTOHEADER,;t t s,@MAKEINFO@,$MAKEINFO,;t t s,@AMTAR@,$AMTAR,;t t s,@install_sh@,$install_sh,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t s,@AWK@,$AWK,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@DEPDIR@,$DEPDIR,;t t s,@am__include@,$am__include,;t t s,@am__quote@,$am__quote,;t t s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t s,@CCDEPMODE@,$CCDEPMODE,;t t s,@CPP@,$CPP,;t t s,@EGREP@,$EGREP,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@LN_S@,$LN_S,;t t s,@ECHO@,$ECHO,;t t s,@AR@,$AR,;t t s,@ac_ct_AR@,$ac_ct_AR,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@CXX@,$CXX,;t t s,@CXXFLAGS@,$CXXFLAGS,;t t s,@ac_ct_CXX@,$ac_ct_CXX,;t t s,@CXXDEPMODE@,$CXXDEPMODE,;t t s,@CXXCPP@,$CXXCPP,;t t s,@F77@,$F77,;t t s,@FFLAGS@,$FFLAGS,;t t s,@ac_ct_F77@,$ac_ct_F77,;t t s,@LIBTOOL@,$LIBTOOL,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t s,@builddir@,$ac_builddir,;t t s,@abs_builddir@,$ac_abs_builddir,;t t s,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } # Do quote $f, to prevent DOS paths from being IFS'd. echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if diff $ac_file $tmp/config.h >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi # Run the commands associated with the file. case $ac_file in src/leon_config.h ) # update the timestamp echo 'timestamp for src/leon_config.h' >"src/stamp-h1" ;; esac done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_COMMANDS section. # for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue ac_dest=`echo "$ac_file" | sed 's,:.*,,'` ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_dir=`(dirname "$ac_dest") 2>/dev/null || $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_dest" : 'X\(//\)[^/]' \| \ X"$ac_dest" : 'X\(//\)$' \| \ X"$ac_dest" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_dest" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 echo "$as_me: executing $ac_dest commands" >&6;} case $ac_dest in depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`(dirname "$mf") 2>/dev/null || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` else continue fi grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue # Extract the definition of DEP_FILES from the Makefile without # running `make'. DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` test -z "$DEPDIR" && continue # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n -e '/^U = / s///p' < "$mf"` test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" # We invoke sed twice because it is the simplest approach to # changing $(DEPDIR) to its actual value in the expansion. for file in `sed -n -e ' /^DEP_FILES = .*\\\\$/ { s/^DEP_FILES = // :loop s/\\\\$// p n /\\\\$/ b loop p } /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`(dirname "$file") 2>/dev/null || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p $dirpart/$fdir else as_dir=$dirpart/$fdir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi guava-3.6/Makefile0000644017361200001450000000626611027426023014011 0ustar tabbottcrontabCC = gcc CFLAGS = -O2 SRCDIR = ../../src/leon/src CJSRCDIR= ../../src/ctjhai GAP_PATH=../.. PKG_PATH=.. SRCDISTFILE=guava all: ( test -d bin || mkdir bin; \ test -d bin/x86_64-unknown-linux-gnu-gcc || mkdir bin/x86_64-unknown-linux-gnu-gcc; cd bin/x86_64-unknown-linux-gnu-gcc; \ $(MAKE) -f ../../Makefile all2 CC="$(CC)" CFLAGS="$(CFLAGS)"; \ cd $(SRCDIR)/../; ./configure; $(MAKE); mkdir ../../bin/leon; \ cp cent ../../bin/leon; cp cjrndper ../../bin/leon; \ cp commut ../../bin/leon; cp compgrp ../../bin/leon; \ cp desauto ../../bin/leon; cp fndelt ../../bin/leon; \ cp generate ../../bin/leon; cp inter ../../bin/leon; \ cp orbdes ../../bin/leon; cp orblist ../../bin/leon; \ cp randobj ../../bin/leon; cp setstab ../../bin/leon; \ cp wtdist ../../bin/leon; cp src/*.sh ../../bin/leon; \ cp wtdist ../../bin; cp desauto ../../bin; \ cp wtdist ../../bin/x86_64-unknown-linux-gnu-gcc; cp desauto ../../bin/x86_64-unknown-linux-gnu-gcc \ ) # the last two for backwards compatibility? all2: leonconv minimum-weight # rules to make the executables, just link them together leonconv: leonconv.o $(CC) $(CFLAGS) -o leonconv leonconv.o minimum-weight: minimum-weight.o minimum-weight-gf2.o minimum-weight-gf3.o popcount.o $(CC) -lm -o minimum-weight \ minimum-weight.o minimum-weight-gf2.o minimum-weight-gf3.o popcount.o # rules to make the .o files, just compile the .c file # cannot use implicit rule, because .c files are in a different directory leonconv.o: ../../src/leonconv.c $(CC) -c $(CFLAGS) -o leonconv.o -c ../../src/leonconv.c minimum-weight.o: $(CJSRCDIR)/minimum-weight.c $(CJSRCDIR)/minimum-weight-gf2.h $(CJSRCDIR)/minimum-weight-gf3.h $(CJSRCDIR)/popcount.h $(CJSRCDIR)/config.h $(CJSRCDIR)/types.h $(CC) -c -O3 -Wall -I $(CJSRCDIR) $(CJSRCDIR)/minimum-weight.c minimum-weight-gf2.o: $(CJSRCDIR)/minimum-weight-gf2.c $(CJSRCDIR)/minimum-weight-gf2.h $(CJSRCDIR)/popcount.h $(CJSRCDIR)/config.h $(CJSRCDIR)/types.h $(CC) -c -O3 -Wall -I $(CJSRCDIR) $(CJSRCDIR)/minimum-weight-gf2.c minimum-weight-gf3.o: $(CJSRCDIR)/minimum-weight-gf3.c $(CJSRCDIR)/minimum-weight-gf3.h $(CJSRCDIR)/popcount.h $(CJSRCDIR)/config.h $(CJSRCDIR)/types.h $(CC) -c -O3 -Wall -I $(CJSRCDIR) $(CJSRCDIR)/minimum-weight-gf3.c popcount.o: $(CJSRCDIR)/popcount.c $(CJSRCDIR)/popcount.h $(CJSRCDIR)/config.h $(CJSRCDIR)/types.h $(CC) -c -O3 -Wall -I $(CJSRCDIR) $(CJSRCDIR)/popcount.c # pseudo targets clean: ( cd bin/x86_64-unknown-linux-gnu-gcc; rm -f *.o ) ( cd src && make clean ) ( cd src/leon && make clean ) distclean: clean ( rm -rf bin ) ( rm -f Makefile ) ( cd src && make distclean ) ( cd src/leon && make distclean ) # for GAP distribution src_dist: @(cmp ${PKG_PATH}/guava/doc/guava.tex \ ${GAP_PATH}/doc/guava.tex \ || echo \ "*** WARNING: current 'guava.tex' and 'doc/guava.tex' differ ***") @zoo ah ${SRCDISTFILE}.zoo \ ${PKG_PATH}/guava/Makefile \ ${PKG_PATH}/guava/doc/guava.tex \ ${PKG_PATH}/guava/init.g \ `find ${PKG_PATH}/guava/lib -name "*.g" -print` \ `find ${PKG_PATH}/guava/tbl -name "*.g" -print` \ `find ${PKG_PATH}/guava/src -print` @zoo PE ${SRCDISTFILE}.zoo guava-3.6/read.g0000644017361200001450000000302511026723452013427 0ustar tabbottcrontab############################################################################# ## #A read.g GUAVA library Reinald Baart #A Jasper Cramwinckel #A Erik Roijackers #A Eric Minkes #A Lea Ruscio #A David Joyner ## ## This file is read by GAP upon startup. It installs all functions of ## the GUAVA library ## #H @(#)$Id: read.g,v 1.5 2003/02/27 22:45:16 gap Exp $ ## ## added read curves.gi 5-2005 ## ############################################################################# ## #F Read calls to load all files. ## ReadPkg("guava", "lib/util2.gi"); ReadPkg("guava", "lib/setup.g"); ReadPkg("guava", "lib/codeword.gi"); ReadPkg("guava", "lib/codegen.gi"); ReadPkg("guava", "lib/matrices.gi"); ReadPkg("guava", "lib/nordrob.gi"); ReadPkg("guava", "lib/util.gi"); ReadPkg("guava", "lib/curves.gi"); ReadPkg("guava", "lib/codeops.gi"); ReadPkg("guava", "lib/bounds.gi"); ReadPkg("guava", "lib/codefun.gi"); ReadPkg("guava", "lib/codeman.gi"); ReadPkg("guava", "lib/codecr.gi"); ReadPkg("guava", "lib/codecstr.gi"); ReadPkg("guava", "lib/codemisc.gi"); ReadPkg("guava", "lib/codenorm.gi"); ReadPkg("guava", "lib/decoders.gi"); ReadPkg("guava", "lib/tblgener.gi"); ReadPkg("guava", "lib/toric.gi"); guava-3.6/doc/0000755017361200001450000000000011027016165013106 5ustar tabbottcrontabguava-3.6/doc/chap3.html0000644017361200001450000007707111027015742015006 0ustar tabbottcrontab GAP (guava) - Chapter 3: Codewords

3. Codewords

Let GF(q) denote a finite field with q (a prime power) elements. A code is a subset C of some finite-dimensional vector space V over GF(q). The length of C is the dimension of V. Usually, V=GF(q)^n and the length is the number of coordinate entries. When C is itself a vector space over GF(q) then it is called a linear code and the dimension of C is its dimension as a vector space over GF(q).

In GUAVA, a `codeword' is a GAP record, with one of its components being an element in V. Likewise, a `code' is a GAP record, with one of its components being a subset (or subspace with given basis, if C is linear) of V.

  gap> C:=RandomLinearCode(20,10,GF(4));
  a  [20,10,?] randomly generated code over GF(4)
  gap> c:=Random(C);
  [ 1 a 0 0 0 1 1 a^2 0 0 a 1 1 1 a 1 1 a a 0 ]
  gap> NamesOfComponents(C);
  [ "LeftActingDomain", "GeneratorsOfLeftOperatorAdditiveGroup", "WordLength",
    "GeneratorMat", "name", "Basis", "NiceFreeLeftModule", "Dimension", 
     "Representative", "ZeroImmutable" ]
  gap> NamesOfComponents(c);
  [ "VectorCodeword", "WordLength", "treatAsPoly" ]
  gap> c!.VectorCodeword;
  [ immutable compressed vector length 20 over GF(4) ] 
  gap> Display(last);
  [ Z(2^2), Z(2^2), Z(2^2), Z(2)^0, Z(2^2), Z(2^2)^2, 0*Z(2), Z(2^2), Z(2^2),
    Z(2)^0, Z(2^2)^2, 0*Z(2), 0*Z(2), Z(2^2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2^2)^2,
    Z(2)^0, 0*Z(2) ]
  gap> C!.Dimension;
  10

Mathematically, a `codeword' is an element of a code C, but in GUAVA the Codeword and VectorCodeword commands have implementations which do not check if the codeword belongs to C (i.e., are independent of the code itself). They exist primarily to make it easier for the user to construct a the associated GAP record. Using these commands, one can enter into a GAP both a codeword c (belonging to C) and a received word r (not belonging to C) using the same command. The user can input codewords in different formats (as strings, vectors, and polynomials), and output information is formatted in a readable way.

A codeword c in a linear code C arises in practice by an initial encoding of a 'block' message m, adding enough redundancy to recover m after c is transmitted via a 'noisy' communication medium. In GUAVA, for linear codes, the map mlongmapsto c is computed using the command c:=m*C and recovering m from c is obtained by the command InformationWord(C,c). These commands are explained more below.

Many operations are available on codewords themselves, although codewords also work together with codes (see chapter 4. on Codes).

The first section describes how codewords are constructed (see Codeword (3.1-1) and IsCodeword (3.1-3)). Sections 3.2 and 3.3 describe the arithmetic operations applicable to codewords. Section 3.4 describe functions that convert codewords back to vectors or polynomials (see VectorCodeword (3.4-1) and PolyCodeword (3.4-2)). Section ??? describe functions that change the way a codeword is displayed (see TreatAsVector (3.5-1) and TreatAsPoly (3.5-2)). Finally, Section 3.6 describes a function to generate a null word (see NullWord (3.6-1)) and some functions for extracting properties of codewords (see DistanceCodeword (3.6-2), Support (3.6-3) and WeightCodeword (3.6-4)).

3.1 Construction of Codewords

3.1-1 Codeword
> Codeword( obj[, n][, F] )( function )

Codeword returns a codeword or a list of codewords constructed from obj. The object obj can be a vector, a string, a polynomial or a codeword. It may also be a list of those (even a mixed list).

If a number n is specified, all constructed codewords have length n. This is the only way to make sure that all elements of obj are converted to codewords of the same length. Elements of obj that are longer than n are reduced in length by cutting of the last positions. Elements of obj that are shorter than n are lengthened by adding zeros at the end. If no n is specified, each constructed codeword is handled individually.

If a Galois field F is specified, all codewords are constructed over this field. This is the only way to make sure that all elements of obj are converted to the same field F (otherwise they are converted one by one). Note that all elements of obj must have elements over F or over `Integers'. Converting from one Galois field to another is not allowed. If no F is specified, vectors or strings with integer elements will be converted to the smallest Galois field possible.

Note that a significant speed increase is achieved if F is specified, even when all elements of obj already have elements over F.

Every vector in obj can be a finite field vector over F or a vector over `Integers'. In the last case, it is converted to F or, if omitted, to the smallest Galois field possible.

Every string in obj must be a string of numbers, without spaces, commas or any other characters. These numbers must be from 0 to 9. The string is converted to a codeword over F or, if F is omitted, over the smallest Galois field possible. Note that since all numbers in the string are interpreted as one-digit numbers, Galois fields of size larger than 10 are not properly represented when using strings. In fact, no finite field of size larger than 11 arises in this fashion at all.

Every polynomial in obj is converted to a codeword of length n or, if omitted, of a length dictated by the degree of the polynomial. If F is specified, a polynomial in obj must be over F.

Every element of obj that is already a codeword is changed to a codeword of length n. If no n was specified, the codeword doesn't change. If F is specified, the codeword must have base field F.

gap> c := Codeword([0,1,1,1,0]);
[ 0 1 1 1 0 ]
gap> VectorCodeword( c ); 
[ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ]
gap> c2 := Codeword([0,1,1,1,0], GF(3));
[ 0 1 1 1 0 ]
gap> VectorCodeword( c2 );
[ 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, 0*Z(3) ]
gap> Codeword([c, c2, "0110"]);
[ [ 0 1 1 1 0 ], [ 0 1 1 1 0 ], [ 0 1 1 0 ] ]
gap> p := UnivariatePolynomial(GF(2), [Z(2)^0, 0*Z(2), Z(2)^0]);
Z(2)^0+x_1^2
gap> Codeword(p);
x^2 + 1 

This command can also be called using the syntax Codeword(obj,C). In this format, the elements of obj are converted to elements of the same ambient vector space as the elements of a code C. The command Codeword(c,C) is the same as calling Codeword(c,n,F), where n is the word length of C and the F is the ground field of C.

gap> C := WholeSpaceCode(7,GF(5));
a cyclic [7,7,1]0 whole space code over GF(5)
gap> Codeword(["0220110", [1,1,1]], C);
[ [ 0 2 2 0 1 1 0 ], [ 1 1 1 0 0 0 0 ] ]
gap> Codeword(["0220110", [1,1,1]], 7, GF(5));
[ [ 0 2 2 0 1 1 0 ], [ 1 1 1 0 0 0 0 ] ] 
gap> C:=RandomLinearCode(10,5,GF(3));
a linear [10,5,1..3]3..5 random linear code over GF(3)
gap> Codeword("1000000000",C);
[ 1 0 0 0 0 0 0 0 0 0 ]
gap> Codeword("1000000000",10,GF(3));
[ 1 0 0 0 0 0 0 0 0 0 ]

3.1-2 CodewordNr
> CodewordNr( C, list )( function )

CodewordNr returns a list of codewords of C. list may be a list of integers or a single integer. For each integer of list, the corresponding codeword of C is returned. The correspondence of a number i with a codeword is determined as follows: if a list of elements of C is available, the i^th element is taken. Otherwise, it is calculated by multiplication of the i^th information vector by the generator matrix or generator polynomial, where the information vectors are ordered lexicographically. In particular, the returned codeword(s) could be a vector or a polynomial. So CodewordNr(C, i) is equal to AsSSortedList(C)[i], described in the next chapter. The latter function first calculates the set of all the elements of C and then returns the i^th element of that set, whereas the former only calculates the i^th codeword.

gap> B := BinaryGolayCode();
a cyclic [23,12,7]3 binary Golay code over GF(2)
gap> c := CodewordNr(B, 4);
x^22 + x^20 + x^17 + x^14 + x^13 + x^12 + x^11 + x^10
gap> R := ReedSolomonCode(2,2);
a cyclic [2,1,2]1 Reed-Solomon code over GF(3)
gap> AsSSortedList(R);
[ [ 0 0 ], [ 1 1 ], [ 2 2 ] ]
gap> CodewordNr(R, [1,3]);
[ [ 0 0 ], [ 2 2 ] ]

3.1-3 IsCodeword
> IsCodeword( obj )( function )

IsCodeword returns `true' if obj, which can be an object of arbitrary type, is of the codeword type and `false' otherwise. The function will signal an error if obj is an unbound variable.

gap> IsCodeword(1);
false
gap> IsCodeword(ReedMullerCode(2,3));
false
gap> IsCodeword("11111");
false
gap> IsCodeword(Codeword("11111"));
true 

3.2 Comparisons of Codewords

3.2-1 =
> =( c1, c2 )( function )

The equality operator c1 = c2 evaluates to `true' if the codewords c1 and c2 are equal, and to `false' otherwise. Note that codewords are equal if and only if their base vectors are equal. Whether they are represented as a vector or polynomial has nothing to do with the comparison.

Comparing codewords with objects of other types is not recommended, although it is possible. If c2 is the codeword, the other object c1 is first converted to a codeword, after which comparison is possible. This way, a codeword can be compared with a vector, polynomial, or string. If c1 is the codeword, then problems may arise if c2 is a polynomial. In that case, the comparison always yields a `false', because the polynomial comparison is called.

The equality operator is also denoted EQ, and EQ(c1,c2) is the same as c1 = c2. There is also an inequality operator, < >, or not EQ.

gap> P := UnivariatePolynomial(GF(2), Z(2)*[1,0,0,1]);
Z(2)^0+x_1^3
gap> c := Codeword(P, GF(2));
x^3 + 1
gap> P = c;        # codeword operation
true
gap> c2 := Codeword("1001", GF(2));
[ 1 0 0 1 ]
gap> c = c2;
true 
gap> C:=HammingCode(3);
a linear [7,4,3]1 Hamming (3,2) code over GF(2)
gap> c1:=Random(C);
[ 1 0 0 1 1 0 0 ]
gap> c2:=Random(C);
[ 0 1 0 0 1 0 1 ]
gap> EQ(c1,c2);
false
gap> not EQ(c1,c2);
true

3.3 Arithmetic Operations for Codewords

3.3-1 +
> +( c1, c2 )( function )

The following operations are always available for codewords. The operands must have a common base field, and must have the same length. No implicit conversions are performed.

The operator + evaluates to the sum of the codewords c1 and c2.

gap> C:=RandomLinearCode(10,5,GF(3));
a linear [10,5,1..3]3..5 random linear code over GF(3)
gap> c:=Random(C);
[ 1 0 2 2 2 2 1 0 2 0 ]
gap> Codeword(c+"2000000000");
[ 0 0 2 2 2 2 1 0 2 0 ]
gap> Codeword(c+"1000000000");

The last command returns a GAP ERROR since the `codeword' which GUAVA associates to "1000000000" belongs to GF(2) and not GF(3).

3.3-2 -
> -( c1, c2 )( function )

Similar to addition: the operator - evaluates to the difference of the codewords c1 and c2.

3.3-3 +
> +( v, C )( function )

The operator v+C evaluates to the coset code of code C after adding a `codeword' v to all codewords in C. Note that if c in C then mathematically c+C=C but GUAVA only sees them equal as sets. See CosetCode (6.1-17).

Note that the command C+v returns the same output as the command v+C.

gap> C:=RandomLinearCode(10,5);
a  [10,5,?] randomly generated code over GF(2)
gap> c:=Random(C);
[ 0 0 0 0 0 0 0 0 0 0 ]
gap> c+C;
[ add. coset of a  [10,5,?] randomly generated code over GF(2) ]
gap> c+C=C;
true
gap> IsLinearCode(c+C);
false
gap> v:=Codeword("100000000");
[ 1 0 0 0 0 0 0 0 0 ]
gap> v+C;
[ add. coset of a  [10,5,?] randomly generated code over GF(2) ]
gap> C=v+C;
false
gap> C := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
a linear [4,2,1]1 code defined by generator matrix over GF(2)
gap> Elements(C);
[ [ 0 0 0 0 ], [ 0 1 0 0 ], [ 1 0 0 0 ], [ 1 1 0 0 ] ]
gap> v:=Codeword("0011");
[ 0 0 1 1 ]
gap> C+v;
[ add. coset of a linear [4,2,4]1 code defined by generator matrix over GF(2) ]
gap> Elements(C+v);
[ [ 0 0 1 1 ], [ 0 1 1 1 ], [ 1 0 1 1 ], [ 1 1 1 1 ] ]

In general, the operations just described can also be performed on codewords expressed as vectors, strings or polynomials, although this is not recommended. The vector, string or polynomial is first converted to a codeword, after which the normal operation is performed. For this to go right, make sure that at least one of the operands is a codeword. Further more, it will not work when the right operand is a polynomial. In that case, the polynomial operations (FiniteFieldPolynomialOps) are called, instead of the codeword operations (CodewordOps).

Some other code-oriented operations with codewords are described in 4.2.

3.4 Functions that Convert Codewords to Vectors or Polynomials

3.4-1 VectorCodeword
> VectorCodeword( obj )( function )

Here obj can be a code word or a list of code words. This function returns the corresponding vectors over a finite field.

gap> a := Codeword("011011");; 
gap> VectorCodeword(a);
[ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ]

3.4-2 PolyCodeword
> PolyCodeword( obj )( function )

PolyCodeword returns a polynomial or a list of polynomials over a Galois field, converted from obj. The object obj can be a codeword, or a list of codewords.

gap> a := Codeword("011011");; 
gap> PolyCodeword(a);
x_1+x_1^2+x_1^4+x_1^5

3.5 Functions that Change the Display Form of a Codeword

3.5-1 TreatAsVector
> TreatAsVector( obj )( function )

TreatAsVector adapts the codewords in obj to make sure they are printed as vectors. obj may be a codeword or a list of codewords. Elements of obj that are not codewords are ignored. After this function is called, the codewords will be treated as vectors. The vector representation is obtained by using the coefficient list of the polynomial.

Note that this only changes the way a codeword is printed. TreatAsVector returns nothing, it is called only for its side effect. The function VectorCodeword converts codewords to vectors (see VectorCodeword (3.4-1)).

gap> B := BinaryGolayCode();
a cyclic [23,12,7]3 binary Golay code over GF(2)
gap> c := CodewordNr(B, 4);
x^22 + x^20 + x^17 + x^14 + x^13 + x^12 + x^11 + x^10
gap> TreatAsVector(c);
gap> c;
[ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 0 0 1 0 1 ] 

3.5-2 TreatAsPoly
> TreatAsPoly( obj )( function )

TreatAsPoly adapts the codewords in obj to make sure they are printed as polynomials. obj may be a codeword or a list of codewords. Elements of obj that are not codewords are ignored. After this function is called, the codewords will be treated as polynomials. The finite field vector that defines the codeword is used as a coefficient list of the polynomial representation, where the first element of the vector is the coefficient of degree zero, the second element is the coefficient of degree one, etc, until the last element, which is the coefficient of highest degree.

Note that this only changes the way a codeword is printed. TreatAsPoly returns nothing, it is called only for its side effect. The function PolyCodeword converts codewords to polynomials (see PolyCodeword (3.4-2)).

gap> a := Codeword("00001",GF(2));
[ 0 0 0 0 1 ]
gap> TreatAsPoly(a); a;
x^4
gap> b := NullWord(6,GF(4));
[ 0 0 0 0 0 0 ]
gap> TreatAsPoly(b); b;
0 

3.6 Other Codeword Functions

3.6-1 NullWord
> NullWord( n, F )( function )

Other uses: NullWord( n ) (default F=GF(2)) and NullWord( C ). NullWord returns a codeword of length n over the field F of only zeros. The integer n must be greater then zero. If only a code C is specified, NullWord will return a null word with both the word length and the Galois field of C.

gap> NullWord(8);
[ 0 0 0 0 0 0 0 0 ]
gap> Codeword("0000") = NullWord(4);
true
gap> NullWord(5,GF(16));
[ 0 0 0 0 0 ]
gap> NullWord(ExtendedTernaryGolayCode());
[ 0 0 0 0 0 0 0 0 0 0 0 0 ] 

3.6-2 DistanceCodeword
> DistanceCodeword( c1, c2 )( function )

DistanceCodeword returns the Hamming distance from c1 to c2. Both variables must be codewords with equal word length over the same Galois field. The Hamming distance between two words is the number of places in which they differ. As a result, DistanceCodeword always returns an integer between zero and the word length of the codewords.

gap> a := Codeword([0, 1, 2, 0, 1, 2]);; b := NullWord(6, GF(3));;
gap> DistanceCodeword(a, b);
4
gap> DistanceCodeword(b, a);
4
gap> DistanceCodeword(a, a);
0 

3.6-3 Support
> Support( c )( function )

Support returns a set of integers indicating the positions of the non-zero entries in a codeword c.

gap> a := Codeword("012320023002");; Support(a);
[ 2, 3, 4, 5, 8, 9, 12 ]
gap> Support(NullWord(7));
[  ] 

The support of a list with codewords can be calculated by taking the union of the individual supports. The weight of the support is the length of the set.

gap> L := Codeword(["000000", "101010", "222000"], GF(3));;
gap> S := Union(List(L, i -> Support(i)));
[ 1, 2, 3, 5 ]
gap> Length(S);
4 

3.6-4 WeightCodeword
> WeightCodeword( c )( function )

WeightCodeword returns the weight of a codeword c, the number of non-zero entries in c. As a result, WeightCodeword always returns an integer between zero and the word length of the codeword.

gap> WeightCodeword(Codeword("22222"));
5
gap> WeightCodeword(NullWord(3));
0
gap> C := HammingCode(3);
a linear [7,4,3]1 Hamming (3,2) code over GF(2)
gap> Minimum(List(AsSSortedList(C){[2..Size(C)]}, WeightCodeword ) );
3 
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

generated by GAPDoc2HTML

guava-3.6/doc/chap2.txt0000644017361200001450000002747611027015733014664 0ustar tabbottcrontab 2. Coding theory functions in GAP This chapter will recall from the GAP4.4.5 manual some of the GAP coding theory and finite field functions useful for coding theory. Some of these functions are partially written in C for speed. The main functions are -- AClosestVectorCombinationsMatFFEVecFFE, -- AClosestVectorCombinationsMatFFEVecFFECoords, -- CosetLeadersMatFFE, -- DistancesDistributionMatFFEVecFFE, -- DistancesDistributionVecFFEsVecFFE, -- DistanceVecFFE and WeightVecFFE, -- ConwayPolynomial and IsCheapConwayPolynomial, -- IsPrimitivePolynomial, and RandomPrimitivePolynomial. However, the GAP command PrimitivePolynomial returns an integer primitive polynomial not the finite field kind. 2.1 Distance functions 2.1-1 AClosestVectorCombinationsMatFFEVecFFE > AClosestVectorCombinationsMatFFEVecFFE( mat, F, vec, r, st ) _____function This command runs through the F-linear combinations of the vectors in the rows of the matrix mat that can be written as linear combinations of exactly r rows (that is without using zero as a coefficient) and returns a vector from these that is closest to the vector vec. The length of the rows of mat and the length of vec must be equal, and all elements must lie in F. The rows of mat must be linearly independent. If it finds a vector of distance at most st, which must be a nonnegative integer, then it stops immediately and returns this vector. --------------------------- Example ---------------------------- gap> F:=GF(3);; gap> x:= Indeterminate( F );; pol:= x^2+1; x_1^2+Z(3)^0 gap> C := GeneratorPolCode(pol,8,F); a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3) gap> v:=Codeword("12101111"); [ 1 2 1 0 1 1 1 1 ] gap> v:=VectorCodeword(v); [ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ] gap> G:=GeneratorMat(C); [ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],  [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],  [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],  [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],  [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],  [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ] gap> AClosestVectorCombinationsMatFFEVecFFE(G,F,v,1,1); [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ------------------------------------------------------------------ 2.1-2 AClosestVectorComb..MatFFEVecFFECoords > AClosestVectorComb..MatFFEVecFFECoords( mat, F, vec, r, st ) _____function AClosestVectorCombinationsMatFFEVecFFECoords returns a two element list containing (a) the same closest vector as in AClosestVectorCombinationsMatFFEVecFFE, and (b) a vector v with exactly r non-zero entries, such that v*mat is the closest vector. --------------------------- Example ---------------------------- gap> F:=GF(3);; gap> x:= Indeterminate( F );; pol:= x^2+1; x_1^2+Z(3)^0 gap> C := GeneratorPolCode(pol,8,F); a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3) gap> v:=Codeword("12101111"); v:=VectorCodeword(v);; [ 1 2 1 0 1 1 1 1 ] gap> G:=GeneratorMat(C);; gap> AClosestVectorCombinationsMatFFEVecFFECoords(G,F,v,1,1); [ [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ],  [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0 ] ] ------------------------------------------------------------------ 2.1-3 DistancesDistributionMatFFEVecFFE > DistancesDistributionMatFFEVecFFE( mat, f, vec ) _________________function DistancesDistributionMatFFEVecFFE returns the distances distribution of the vector vec to the vectors in the vector space generated by the rows of the matrix mat over the finite field f. All vectors must have the same length, and all elements must lie in a common field. The distances distribution is a list d of length Length(vec)+1, such that the value d[i] is the number of vectors in vecs that have distance i+1 to vec. --------------------------- Example ---------------------------- gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];; gap> vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], > [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], > [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ], > [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ], > [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ], > [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];; gap> DistancesDistributionMatFFEVecFFE(vecs,GF(3),v); [ 0, 4, 6, 60, 109, 216, 192, 112, 30 ] ------------------------------------------------------------------ 2.1-4 DistancesDistributionVecFFEsVecFFE > DistancesDistributionVecFFEsVecFFE( vecs, vec ) __________________function DistancesDistributionVecFFEsVecFFE returns the distances distribution of the vector vec to the vectors in the list vecs. All vectors must have the same length, and all elements must lie in a common field. The distances distribution is a list d of length Length(vec)+1, such that the value d[i] is the number of vectors in vecs that have distance i+1 to vec. --------------------------- Example ---------------------------- gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];; gap> vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], > [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], > [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ], > [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ], > [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ], > [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];; gap> DistancesDistributionVecFFEsVecFFE(vecs,v); [ 0, 0, 0, 0, 0, 4, 0, 1, 1 ] ------------------------------------------------------------------ 2.1-5 WeightVecFFE > WeightVecFFE( vec ) ______________________________________________function WeightVecFFE returns the weight of the finite field vector vec, i.e. the number of nonzero entries. --------------------------- Example ---------------------------- gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];; gap> WeightVecFFE(v); 7 ------------------------------------------------------------------ 2.1-6 DistanceVecFFE > DistanceVecFFE( vec1, vec2 ) _____________________________________function The Hamming metric on GF(q)^n is the function dist((v_1,...,v_n),(w_1,...,w_n)) =|\{i\in [1..n]\ |\ v_i\not= w_i\}|. This is also called the (Hamming) distance between v=(v_1,...,v_n) and w=(w_1,...,w_n). DistanceVecFFE returns the distance between the two vectors vec1 and vec2, which must have the same length and whose elements must lie in a common field. The distance is the number of places where vec1 and vec2 differ. --------------------------- Example ---------------------------- gap> v1:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];; gap> v2:=[ Z(3), Z(3)^0, Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];; gap> DistanceVecFFE(v1,v2); 2 ------------------------------------------------------------------ 2.2 Other functions We basically repeat, with minor variation, the material in the GAP manual or from Frank Luebeck's website http://www.math.rwth-aachen.de:8001/~Frank.Luebeck/data/ConwayPol on Conway polynomials. The prime fields: If p>= 2 is a prime then GF(p) denotes the field Z}/pZ}, with addition and multiplication performed mod p. The prime power fields: Suppose q=p^r is a prime power, r>1, and put F=GF(p). Let F[x] denote the ring of all polynomials over F and let f(x) denote a monic irreducible polynomial in F[x] of degree r. The quotient E = F[x]/(f(x))= F[x]/f(x)F[x] is a field with q elements. If f(x) and E are related in this way, we say that f(x) is the defining polynomial of E. Any defining polynomial factors completely into distinct linear factors over the field it defines. For any finite field F, the multiplicative group of non-zero elements F^x is a cyclic group. An alpha in F is called a primitive element if it is a generator of F^x. A defining polynomial f(x) of F is said to be primitive if it has a root in F which is a primitive element. 2.2-1 ConwayPolynomial > ConwayPolynomial( p, n ) _________________________________________function A standard notation for the elements of GF(p) is given via the representatives 0, ..., p-1 of the cosets modulo p. We order these elements by 0 < 1 < 2 < ... < p-1. We introduce an ordering of the polynomials of degree r over GF(p). Let g(x) = g_rx^r + ... + g_0 and h(x) = h_rx^r + ... + h_0 (by convention, g_i=h_i=0 for i > r). Then we define g < h if and only if there is an index k with g_i = h_i for i > k and (-1)^r-k g_k < (-1)^r-k h_k. The Conway polynomial f_p,r(x) for GF(p^r) is the smallest polynomial of degree r with respect to this ordering such that: -- f_p,r(x) is monic, -- f_p,r(x) is primitive, that is, any zero is a generator of the (cyclic) multiplicative group of GF(p^r), -- for each proper divisor m of r we have that f_p,m(x^(p^r-1) / (p^m-1)) = 0 mod f_p,r(x); that is, the (p^r-1) / (p^m-1)-th power of a zero of f_p,r(x) is a zero of f_p,m(x). ConwayPolynomial(p,n) returns the polynomial f_p,r(x) defined above. IsCheapConwayPolynomial(p,n) returns true if ConwayPolynomial( p, n ) will give a result in reasonable time. This is either the case when this polynomial is pre-computed, or if n,p are not too big. 2.2-2 RandomPrimitivePolynomial > RandomPrimitivePolynomial( F, n ) ________________________________function For a finite field F and a positive integer n this function returns a primitive polynomial of degree n over F, that is a zero of this polynomial has maximal multiplicative order |F|^n-1. IsPrimitivePolynomial(f) can be used to check if a univariate polynomial f is primitive or not. guava-3.6/doc/head.tmp0000644017361200001450000017426311026723452014551 0ustar tabbottcrontab%!PS-Adobe-2.0 %%Creator: dvips(k) 5.96.1 Copyright 2007 Radical Eye Software %%Title: /tmp/kde-wdj/kdviHbyvnc.tmp %%CreationDate: Wed Oct 31 21:45:03 2007 %%Pages: 153 %%PageOrder: Ascend %%BoundingBox: 0 0 595 842 %%DocumentFonts: Helvetica-Bold Times-Bold Times-Roman Symbol Courier %%+ Helvetica-Oblique CMSY10 Helvetica Times-Italic MSAM10 CMR10 CMMI10 %%+ MSBM10 Courier-Oblique CMEX10 TeX-cmex9 %%DocumentPaperSizes: a4 %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -z /tmp/kde-wdj/kdviHbyvnc.tmp -o %+ /home/wdj/wdj/gapfiles/codes/guava3.1/doc/manual.ps %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2007.10.20:1942 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ /Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) (LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: 8r.enc 0 0 % File 8r.enc TeX Base 1 Encoding Revision 2.0 2002-10-30 % % @@psencodingfile@{ % author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry, % W. Schmidt, P. Lehman", % version = "2.0", % date = "27nov06", % filename = "8r.enc", % email = "tex-fonts@@tug.org", % docstring = "This is the encoding vector for Type1 and TrueType % fonts to be used with TeX. This file is part of the % PSNFSS bundle, version 9" % @} % % The idea is to have all the characters normally included in Type 1 fonts % available for typesetting. This is effectively the characters in Adobe % Standard encoding, ISO Latin 1, Windows ANSI including the euro symbol, % MacRoman, and some extra characters from Lucida. % % Character code assignments were made as follows: % % (1) the Windows ANSI characters are almost all in their Windows ANSI % positions, because some Windows users cannot easily reencode the % fonts, and it makes no difference on other systems. The only Windows % ANSI characters not available are those that make no sense for % typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen % (173). quotesingle and grave are moved just because it's such an % irritation not having them in TeX positions. % % (2) Remaining characters are assigned arbitrarily to the lower part % of the range, avoiding 0, 10 and 13 in case we meet dumb software. % % (3) Y&Y Lucida Bright includes some extra text characters; in the % hopes that other PostScript fonts, perhaps created for public % consumption, will include them, they are included starting at 0x12. % These are /dotlessj /ff /ffi /ffl. % % (4) hyphen appears twice for compatibility with both ASCII and Windows. % % (5) /Euro was assigned to 128, as in Windows ANSI % % (6) Missing characters from MacRoman encoding incorporated as follows: % % PostScript MacRoman TeXBase1 % -------------- -------------- -------------- % /notequal 173 0x16 % /infinity 176 0x17 % /lessequal 178 0x18 % /greaterequal 179 0x19 % /partialdiff 182 0x1A % /summation 183 0x1B % /product 184 0x1C % /pi 185 0x1D % /integral 186 0x81 % /Omega 189 0x8D % /radical 195 0x8E % /approxequal 197 0x8F % /Delta 198 0x9D % /lozenge 215 0x9E % /TeXBase1Encoding [ % 0x00 /.notdef /dotaccent /fi /fl /fraction /hungarumlaut /Lslash /lslash /ogonek /ring /.notdef /breve /minus /.notdef /Zcaron /zcaron % 0x10 /caron /dotlessi /dotlessj /ff /ffi /ffl /notequal /infinity /lessequal /greaterequal /partialdiff /summation /product /pi /grave /quotesingle % 0x20 /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash % 0x30 /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question % 0x40 /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O % 0x50 /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore % 0x60 /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o % 0x70 /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef % 0x80 /Euro /integral /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl /circumflex /perthousand /Scaron /guilsinglleft /OE /Omega /radical /approxequal % 0x90 /.notdef /.notdef /.notdef /quotedblleft /quotedblright /bullet /endash /emdash /tilde /trademark /scaron /guilsinglright /oe /Delta /lozenge /Ydieresis % 0xA0 /.notdef /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron % 0xB0 /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown % 0xC0 /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis % 0xD0 /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls % 0xE0 /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis % 0xF0 /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] def %%EndProcSet %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginProcSet: special.pro 0 0 %! TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known {userdict/md get type/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale }if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState save N userdict maxlength dict begin/magscale true def normalscale currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts /psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def @MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N /@beginspecial{SDict begin/SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N} N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N /setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{ pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B /rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet %%BeginProcSet: color.pro 0 0 %! TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll }repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def /TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{ setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{ /currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC /Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC /Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0 setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0 setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61 0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC /Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0 setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87 0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{ 0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{ 0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC /Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0 setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0 setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90 0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC /Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0 setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0 0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{ 0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{ 0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC /BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0 setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC /CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0 0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1 0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11 0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0 setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0 0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC /Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0 setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0 0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0 1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC /PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0 setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{ 0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor} DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70 setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0 setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1 setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end %%EndProcSet %%BeginProcSet: hps.pro 0 0 %! /HPSdict 20 dict dup begin/braindeaddistill 50 def/rfch{dup length 1 sub 1 exch getinterval}bind def/splituri{dup(#)search{exch pop}{()exch} ifelse dup(file:)anchorsearch{pop exch pop 3 -1 roll pop false}{pop 3 -1 roll exch pop true}ifelse}bind def/lookuptarget{exch rfch dup /TargetAnchors where{pop TargetAnchors dup 3 -1 roll known{exch get true }{pop(target unknown:)print == false}ifelse}{pop pop (target dictionary unknown\012)print false}ifelse}bind def/savecount 0 def/stackstopped{count counttomark sub/savecount exch store stopped count savecount sub 1 sub dup 0 gt{{exch pop}repeat}{pop}ifelse}bind def /tempstring 128 string def/targetvalidate{1 index dup length 127 gt exch tempstring cvs dup(/)search{pop pop pop exch pop true exch}{pop}ifelse token{pop length 0 ne}{true}ifelse or not}bind def/targetdump-hook where {pop}{/targetdump-hook{dup mark exch gsave initmat setmatrix{{mark/Dest 4 2 roll targetvalidate{aload pop exch pop/Page 3 1 roll/View exch[exch /FitH exch]/DEST pdfmark}{cleartomark}ifelse}forall}stackstopped pop grestore}bind def}ifelse/baseurl{mark exch 1 dict dup 3 -1 roll/Base exch put/URI exch/DOCVIEW{pdfmark}stackstopped pop}bind def /externalhack systemdict/PDF known def/oldstyle true def/initmat matrix currentmatrix def/actiondict 2 dict dup/Subtype/URI put def /weblinkhandler{dup 3 1 roll mark 4 1 roll/Title 4 1 roll splituri 3 -1 roll dup length 0 gt{cvn/Dest exch 4 2 roll}{pop}ifelse{externalhack{ /HTTPFile exch}{actiondict dup 3 -1 roll/URI exch put/Action exch} ifelse}{externalhack{/HTTPFile exch}{/File exch/Action/GoToR}ifelse} ifelse counttomark 2 sub -1 roll aload pop/Rect 4 1 roll/Border 3 1 roll /Color exch oldstyle{/LNK}{/Subtype/Link/ANN}ifelse gsave initmat setmatrix{pdfmark}stackstopped grestore}bind def/externalhandler where{ pop}{/externalhandler{2 copy{weblinkhandler}exec{/externalhack externalhack not store 2 copy{weblinkhandler}exec{/externalhack externalhack not store/oldstyle false store 2 copy{weblinkhandler}exec{ (WARNING: external refs disabled\012)print/externalhandler{pop pop}bind store externalhandler}{pop pop}ifelse}{pop pop/externalhack externalhack not store}ifelse}{pop pop/externalhandler{weblinkhandler pop}bind store} ifelse}bind def}ifelse/pdfmnew{dup type/stringtype eq{externalhandler}{ exch dup rfch exch 3 -1 roll lookuptarget{mark 4 1 roll/Title 4 1 roll aload pop exch pop/Page 3 1 roll/View exch[exch/FitH exch]5 -1 roll aload pop/Rect 4 1 roll/Border 3 1 roll/Color exch/LNK gsave initmat setmatrix pdfmark grestore}{pop pop}ifelse}ifelse}bind def/pdfmold{dup type/stringtype eq{externalhandler}{exch dup rfch exch 3 -1 roll lookuptarget{mark 4 1 roll/Title 4 1 roll aload pop exch pop/Page 3 1 roll/View exch[exch/FitH exch]5 -1 roll aload pop pop 0 3 getinterval /Rect 3 1 roll/Border exch/LNK gsave initmat setmatrix pdfmark grestore} {pop pop}ifelse}ifelse}bind def/pdfm where{pop}{/pdfm /currentdistillerparams where{pop currentdistillerparams dup /CoreDistVersion known{/CoreDistVersion get}{0}ifelse dup braindeaddistill le{(WARNING: switching to old pdfm because version =) print ==/pdfmold}{pop/pdfmnew}ifelse load}{/pdfmark where{pop{dup type /stringtype eq{externalhandler}{2 copy mark 3 1 roll{pdfmnew} stackstopped{2 copy mark 3 1 roll{pdfmold}stackstopped{ (WARNING: pdfm disabled\012)print/pdfm{pop pop}store}{ (WARNING: new pdfm failed, switching to old pdfm\012)print/pdfm/pdfmold load store}ifelse}{/pdfm/pdfmnew load store}ifelse pop pop}ifelse}}{{ pop pop}}ifelse}ifelse bind def}ifelse end def %%EndProcSet TeXDict begin @defspecial /DvipsToPDF { 72.27 mul Resolution div } def /PDFToDvips { 72.27 div Resolution mul } def /HyperBorder { 1 PDFToDvips } def /H.V {pdf@hoff pdf@voff null} def /H.B {/Rect[pdf@llx pdf@lly pdf@urx pdf@ury]} def /H.S { currentpoint HyperBorder add /pdf@lly exch def dup DvipsToPDF /pdf@hoff exch def HyperBorder sub /pdf@llx exch def } def /H.L { 2 sub dup /HyperBasePt exch def PDFToDvips /HyperBaseDvips exch def currentpoint HyperBaseDvips sub /pdf@ury exch def /pdf@urx exch def } def /H.A { H.L currentpoint exch pop vsize 72 sub exch DvipsToPDF HyperBasePt sub sub /pdf@voff exch def } def /H.R { currentpoint HyperBorder sub /pdf@ury exch def HyperBorder add /pdf@urx exch def currentpoint exch pop vsize 72 sub exch DvipsToPDF sub /pdf@voff exch def } def systemdict /pdfmark known { userdict /?pdfmark systemdict /exec get put }{ userdict /?pdfmark systemdict /pop get put userdict /pdfmark systemdict /cleartomark get put } ifelse @fedspecial end %%BeginFont: TeX-cmex9 %!PS-AdobeFont-1.0: TeX-cmex9 001.001 % Filtered by type1fix.pl 0.05 %%EndComments 13 dict dup begin /FontInfo 16 dict dup begin /Copyright (see\040copyright\040of\040original\040TeX\040font) def /FamilyName (TeX\040cmex9) def /FullName (TeX\040cmex9\040Regular) def /ItalicAngle 0 def /Notice (converted\040after\040April\0402001) def /UnderlinePosition -100 def /UnderlineThickness 50 def /Weight (Regular) def /isFixedPitch false def /version (001.001) def end readonly def /FontName /TeX-cmex9 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 91 /bracketleft put readonly def /FontBBox {-26 -2961 1503 773} readonly def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA06DA87FC7163A5A2A756A598FAB07633 89DE8BAE4F093966CD2192CE95EB0F323A6BABFDACCFCF27D91F7869A0E46CA5 9AAF6905783E8AC1F3F9875A76F97187738432F8D14E61574CB292FFB9740871 66839799D8CAF6E0DFE00012EE6D46A2B3655F29705BE37FD5EDA1C765AA2CF5 C5AD37207ED1EE9DB82FF31A33307FFA16911406557336AF92F50B603C7BD336 73EC060F68318378A6F599DDADA5A21504CADBA1E1F4B1A22962BA1BB39ADC7B E8CC92F196549457877C9636A8A7EFAC1C3745644C0FD151C70B9FAD69B02C1F FE5ED071CA1CF3D4A70909B6A3986687D8FB87391E0C665A4EBD2993161FA81B 2B8F7221294CCB11AE65A31E8903DCC3AC1A47765E880ACDDC88509418B04F0F 2D84FD3007D411EEE2DFF237D99A10430524F07480302DFD698B571A023B08A1 36F84F09BCECBE34ECC1CFD251EBBF338CFF7C197D9B33CBD9ACA7171370527C CFA0F7FD5DE8B62790D7DF23F004AEDA717F35B5E2B260A8AAFDE31164AFA47C 686735EC47454F42AC5037D97B410DC373EB0CEFE3C41E243EDA86FF582AB53E 7B56D103AD816F2D7DA35DE239DE30CA5645A377E77A1980B984C195E605841B 36C82FF23D95B5FF770C3AB37C2D657FD1731E91FA0446C316C68F62626B900D 8574C26A5150F80628D1AABF76459D28E0B2493D9F16B3EA6B965C802BFEF566 834D9939CEAF52A614F6123279A91B0CB9E2D48E44E5C1357463E2FCC9E178BC CA13CF4B05D06F8BE68AE08CFE6251BA567A4CE526D34669856DF513053DCEDC 91E8C72DBE48F5F782A90A63A5861D0166895D66FF1509CEE868AD14CFF59D9B A062BEC0DA8B76E38983379AAC883EE97F13CA32EA25F6CD353D7386EA3D24BF 8F66CB141E56D9AA7CBA25BC43CDE97AE4884FC75662247C4D6213A788A1BB36 1E6F573A812B5C8E6B637F4CD4037AE3D5B9FA96E021D51879E3874DA27B780B 0BB0A60D84879A1F00231EA8B4DF391E75B4770220F8E778DB7C15CB53669F5F 95AE0FE783053768CE6F848715B4D2079A69C56C1E305AE286BDB50AD95492A6 3824F7EAC7EAA1DE16EFD4A5D99865670607A285DC0E1015F245A14236E512A1 ED9A0B5836E537A975CA77D0DB392A40478D3ED7A596CD5DB97E2806D6D8369C 6842D53009BAFB02B81F12141E416EC8CAD484EFD741D7E51B2D4131C1694EB8 F94720238D471D541BAF8269745A05A008C7AD1104 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMEX10 %!PS-AdobeFont-1.1: CMEX10 1.00 %%CreationDate: 1992 Jul 23 21:22:48 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.00) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMEX10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /CMEX10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /parenleftbig put dup 1 /parenrightbig put dup 18 /parenleftbigg put dup 19 /parenrightbigg put dup 24 /ceilingleftbigg put dup 25 /ceilingrightbigg put dup 26 /braceleftbigg put dup 40 /braceleftBigg put dup 41 /bracerightBigg put readonly def /FontBBox{-24 -2960 1454 772}readonly def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5CF5B8CAC6A7BEB5D02276E511FFAF2AE11910 DE076F24311D94D07CACC323F360887F1EA11BDDA7927FF3325986FDB0ABDFC8 8E4B40E7988921D551EC0867EBCA44C05657F0DC913E7B3004A5F3E1337B6987 FEBC45F989C8DC6DC0AD577E903F05D0D54208A0AE7F28C734F130C133B48422 BED48639A2B74E4C08F2E710E24A99F347E0F4394CE64EACB549576E89044E52 EABE595BC964156D9D8C2BAB0F49664E951D7C1A3D1789C47F03C7051A63D5E8 DF04FAAC47351E82CAE0794AA9692C6452688A74A7A6A7AD09B8A9783C235EC1 EA2156261B8FB331827145DE315B6EC1B3D8B67B3323F761EAF4C223BB214C4C 6B062D1B281F5041D068319F4911058376D8EFBA59884BA3318C5BC95684F281 E0591BC0D1B2A4592A137FF301610019B8AC46AE6E48BC091E888E4487688350 E9AD5074EE4848271CE4ACC38D8CBC8F3DB32813DDD5B341AF9A6601281ABA38 4A978B98483A63FCC458D0E3BCE6FD830E7E09B0DB987A6B63B74638FC9F21A5 8C68479E1A85225670D79CDDE5AC0B77F5A994CA700B5F0FF1F97FC63EFDE023 8135F04A9D20C31998B12AE06676C362141AAAA395CDEF0A49E0141D335965F2 FB4198499799CECCC8AA5D255264784CD30A3E8295888EFBC2060ADDD7BAC45A EEEECDFF7A47A88E69D84C9E572616C1AC69A34B5F0D0DE8EE4EDF9F4ADE0387 680924D8D5B73EF04EAD7F45977CA8AD73D4DD45DE1966A3B8251C0386164C35 5880DD2609C80E96D1AB861C9259748E98F6711D4E241A269ED51FF328344664 3AF9F18DCE671611DB2F5D3EA77EE734D2BED623F973E6840B8DAD1E2C3C2666 DD4DD1C1CBB3090A024F78BE318AC24F80AB0BB79A391182750B7F1518FC30F5 58116E51ECF4A6AE68F883F9AA51C0D451A4702D4903A1FBD0B72A5A4DDD8B39 9F07E7C9DB5972795BD977174104A5F5594EDF2F268137083A1ADE3CF849DC26 4661C54CD833ABB2A01111C54FFA2AFCD4313E70A8F0870E209285B326FFA5C4 5367B765867C29765837ACE969AAC41C2474E0BDEDB8EAEC5DDBE1EF9B1DD046 9991121CEE6752403DB7DC18EBA743ABF7BE8D756950885F86A28446A5A18DE6 627D6747FD2AACF3F37492163C536EE4165484E7FE467B4BA62AD196BFE337F7 57961D8289ADE770B5177E2F79B766259F4F636CA89BB49F84F1BEEB23FEDF04 641F0ECB8F88F1A9C83B222F87FFADDD3C4BBF7C6F160BC677F67DE890F4D089 492D77A118C47A5E549B8BA1F42F7FF32EA40A9942A0E4B5ACA2C6DE472F9868 B526117EF7A859F15C7F30A0EE721D7DE052C1DFC3E4212CAD0C09A03F89C061 4CC7A255426E7CE75B49672F746F6273E3B781B8B0789A2FB6AF46D617D3A67B 5424C1FF6560CB16396CC4007E5EA29C680388D295E66B5A15810BBCBB043B2E 848D87BADD7C0EF7605E554AC83BD9E283D45D9E04CCF8941D11601D895E83DA 566B0A9282989CCF67F814965A858FEBEFA67E3CC258FF025D241BFD644FA553 263D13DA42EA766CD7924EC65846AE51A60D88DE2A8C99D5E21F5C2D16CC460B A987570E86E7BB207ECBB5FADC8431F117C9B2A4AF328B30320DFA6C147A186D 04CA5EC02D7E89EBFD7EDF1A2B6DCA7F9267845C447517D55CBFB5BE06B5ABB7 0972191933C3BF9AD66A38BCF152636E6B04BA1034590513EE1FED7AFFD744A8 445267B01C9478D224CB1485DD4CBEC45EC7527C5FBBDE27E3EC392D21939B1D F6C347D166C1A6EFCA0FA05D8DB110DE4A66D1B22936C1AB2DBD49CC59832AA4 5046E6331CC7C28990422A613382DE491724C97E4F06641CB0A4A27BFA14C914 7A46BA2A781F5C1E49035DDE3D13F2A30D8BBAAF90C5AC9A24BF7847BDB75F2D 6BD0F0D46EAF69D961797B119FF60683F456F7FEAF9C2C2DB0A08DAB4C265C84 40ABC31AE9C7BAFA5AC778E008CB36354B7DE295F9261625C775ADD6DC919071 2847BD50DF5A51E290AF9029005E44E0291B55924121173146683A3F982AACD8 A9D95099B566B3FA6EFF999D7D5545BCEDB0D842FDA5B034DB0FC22002E1935B 56EABE1230CE414D7559FDB06777D601A3E0CA52B73AE19508357B8758CB95BB 7F390AEE9089B6EC4ACB6E57FCD92261356B5B664DFEF86901EA16DFCD5F2E6D 95C72292FC600A53A39E3D233BCF0CE9C11FCFB506FED171ED52A979B48CFF7F DCF865E22E33E82C3035A4EA824FC68126E3FA69359CCF6A28B0EA8D84EE886B EC6098902C20863C59E73BA8EBE8A0AB486CBFC6EFFACC659CDC5609C3E7EE2C 9FF420CADC206FBDA02326DF16F439C4084C6BCE1B49D64DD5B915763C7A0CAE FCE68ADAC262499570A446C0B332C1E70F06E424B5EFAA0F65783F1416D5983D 7255F5AD9BCD102F5376B7796F8DF70C6208DB7A8DCD73F43472FAE69DAE2DE3 76A9F112978C3BF87602A977DAFF1CE7E2F18DCF4FF56BD8DE7E8A8DF597D49A 0F3DFD68CF65C4D7AC12028A2341E737C2975433A274968E717235C3C439640B 2B0BE867ADC59731284528DDA948A73F9D7E9F6BD7DF25FDD6428C714803EE20 479E47EE86571FE040147E0CBB7683709E0E6591908EB863E4064EFE219FD11F EC0498D51187EB1527BAD392A6F8EC0933916290C5DC4E3F51ED5A798C1F3A2E 9EA2C512B111216909FB39D589614D4A6B5466E67B3C4E4E7F21BF079BD17206 5A8804F2BE84D1C15CD8233F62BE290DC2C16D27067584ADB712C1AE8A4FB764 A2E1945135178DAB161F86CDCADC64942DD988605769FB337D5DE67AC5C1907E 417E48DC3DB09BE98B0C281B733BFD1BA9D2115EDAA83982E2F53E8482DCCFC6 3DD533016F4A07A4111B1CFC0707B0C8D110C64E047E2E7D8B63BDAC95ECB15B 31A5C08180B35DD89DF1D3B7B29D03BA60B6B93D61613C073E7324C7A1854CA3 8FDDD09A63276898657E3F65F5EFD44395B6300F5AC1968CA87F622869F11A4E E8AAD1EC683306131B05BC7068B134649364D2CDA6F296D3EBAA72175F15D550 0F2251F9FBD5D1EDE8DC379B38FB613F411E17B1C2BB1E91B051B7D6B5F9A68E D0AC68046AD7CE78BB7D3897B086DD820A2B7A34D007DEB937D107FD1BB14ACE EB362FD92F4A90904E49154D753D2B2DB0DFF1A4B61599F58F 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMSY10 %!PS-AdobeFont-1.1: CMSY10 1.0 %%CreationDate: 1991 Aug 15 07:20:57 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.035 def /isFixedPitch false def end readonly def /FontName /CMSY10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put dup 1 /periodcentered put dup 2 /multiply put dup 3 /asteriskmath put dup 8 /circleplus put dup 13 /circlecopyrt put dup 14 /openbullet put dup 15 /bullet put dup 17 /equivalence put dup 18 /reflexsubset put dup 20 /lessequal put dup 21 /greaterequal put dup 26 /propersubset put dup 33 /arrowright put dup 41 /arrowdblright put dup 48 /prime put dup 50 /element put dup 54 /negationslash put dup 55 /mapsto put dup 98 /floorleft put dup 99 /floorright put dup 100 /ceilingleft put dup 101 /ceilingright put dup 102 /braceleft put dup 103 /braceright put dup 104 /angbracketleft put dup 105 /angbracketright put dup 106 /bar put dup 107 /bardbl put readonly def /FontBBox{-29 -960 1116 775}readonly def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A 221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A 27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF 5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09 0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730 DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A 71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09 4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C 515DB70A8D4F6146FE068DC1E5DE8BC57036537C42A2CE49D6C4C9FF1C3908F6 707398A95DFBDD74738ECB713BB7D3092869DF8074F736C6E8F94B200E4C41BB 3838C1D4DC86A2DC2036E37B191CB7EBCD1124EFAEC6E9B59ADC2C4FA5D509D8 15D59F6019BA306075E41798B479263FE89D4893E8C207CF9E3F6E1ACFF89B39 6D18238F251154B10116204CF7FA5CB5D5C5069DABA9E6B339839C96C5C55801 072C78B325382E513485971FB9ECBE1A81D30AD550D7C53ADE620448929820AE 84C0A508539B1055965ED2F17159294CA5D75681FC9EBBD82B259E00FF6E78ED 2B931BA3007833E53A063DD4C7AC02195DE71887947606BECCE03D98CCB05C66 38A2A0365B9227423C581A5533D6368F532F45B8ABC7E640E6D11B13732BA6D8 54799D268FBE0FFCED284A385C31D0F51AC4920B91F7C876C4F7E8C4B629290A A02DDFB7ACD2553AAB889C587CD05A0A56ED125A65C742B3400F964CA21BF839 1BCFDBE760FE105A2BFE6D349DA6114C6B5504CFF5F5B520C044137BE4E2442D CD220F9BF5C43805D66C37D3FDA87D2C7FC117AB23655D9F4491952EF9715465 429198D14062167C8F3E84B0D57F830595258A5DF91A21EC8C952688C6ECA335 B0B0838D0810BB71C9E951C1FACE28D31FCD2B76F5488A9D5196E757F5326505 6B70BD8A162087A65BDC6E3C9260DD89F246BD9D064AC971A7EA5278830E6DF7 3A0D510FEA1876BAA32E39246D7F8CAAAEC956C2E8F744CDB2B52149EE4A9600 CE66E490149A4104F95AFE1CEF203008A8FA9226C398531A5B86BB4E4A3780A6 845E19599D7F08612D6DCF388118C43FE63068858230159D3FD1A37883B56A8D 58B2C69A92472ABBCAB444CD7CAA29EE9B290F8E420DD3A37095C9A0F367758B A53C6C7CF95A85D05F4C8FEB3628C6ABDB0F528321C3F7177E54A20570C6EE27 A72D06B84AF2E57A630BA5FD89BAF626276EA15184D74F2CC22A450C40ADAE28 63103CE37368737DFA707DABA100A84C4912173040E204D9150C620B9A641541 368070765A8B43DF1634AE4E7BBC9EFEC4D264250FA1C395457509322722E7C4 4D366E1CDB0D89F61E1670E45A0F32E0C28B08EE23E4CAA318A29093E57839E9 3B26DBD439A75EF8F945EA4D9D59DBEF41AF2ED6699BD19783FB7A303BC9E8DE B2C533F88E9897DB505E5B2D5DE4D340863179B4666FAA11BF300333E6E94E0D 31222ECDF2310265D8E79F92A28606060E314291920AC05DA662C5688BDDC9D8 AE2FF2A78ABB1AEC004E713B74D02D32CBA92E69473C2819764ED462F7AE4F39 E52486369D1027C58BE09D0048B7B3F41E19087B8A8227250B362B55DC63ED60 6DF3838F434894BB92CF674F45BBD0881C0523C2581D4DB880B6BBE72187F94B 9D63EAE52535D5BF5AABD9BA580E17DE46B8920948F6F461F04AE6E356C37C4F 9D5278F563D1A4518C56CF404A62C239B01E2D0F2CAB27BA4E7638004AE005E1 BA56487458B490AD372033194571877AF2FDCC6E71830B96952BBBD087697988 4877539CD3CAF1A0AAF2B775A77671FA51B7C5E5298AE34D49A879A739526F5D A6E7A8D1EA5DA0FCE6DEBD22EA41F028C55C5B4FF9FAAD9E8FDD3096B0DDF034 4978E21B0FA143B750BD6532F5B0AE398F58ADCF12168979D49FD555CDC7D472 1295FF3C1AEA2C76DC03D7EC0D361C89A9E9ABD4EF3FD2DE1291DAB96E5261E3 5981CCF3889AA2E0FE297EDFE25ED85B3AAE1924B639AF020DD271702E1E640D 74CD611C09A47F0A698258C1C5C8E1C8B1EBC563D1058EAB75DB2D9F1FD0DC67 CE84D946625CE7797F21766C1D54171174896D56842F807444F370257C69AB17 9DF29BFD29F7A2E531C648E65A6244916D90F5C92C049FAAFC63C871ADC65175 6D69A691AAFB052A47E9A9651A6C2EC3A4DB2AE1B942A1E3E8678C037D65BA7D F842DC9A68013153A908873F2164EEEF80F30748B45D6BDB41CA69DE5D0E8ACC 3EBE17AD2D1C44FB35D15ADB1343D5B1E735B37E90D58AE0A029A70C443A2913 4C1C77F3BC70D6F88BDBC53271C2F542240FE5F60CEE70B4712034287198B143 994E2D19C4D27A069DEBF28B358323CB11157C9BC477E51BD0358A01C2DF9518 61927A7478DFE8BB623A9997B7AF3C0EF0BFD5EAF5E714C066CA5ADBBA5428AA AC9ECC731085E890D1E40505E8EFB4C834C62544A650E06251EE9FB954A7F5D4 D6D25739FFC430FBA7A3FFACCE68EB3FE08D4E0B2CCB44E0D6FA8C68317ECDEC 699A666AF49E37B2B719B598701427162528441385979C03DF7CF7A28D29834E 05C0EDC8035C7F7324AAD5FA08DD42A1D88558F1B7B735CD309355FEE00CF6D6 4888029663D387CA13C31179B0D3DC7A6E441FA7A19CCF1A7E52B6B8B0D2786C C6ECA621FB7ABEEC1D3D4986ECDA7B6EFFDA31217B34ADAE2006D9FCEF17FBC3 C17B96B82C8E1B2BD1F06F464ED30E280C4046071BB2AA930FACAE389EDE630E 0EB70A82F3A1A028941287F40B0C8D21F83AD9116C46AC7A4892DF0AC1721E64 CE4EA7C2DD2502CFF4C4E8A286CB6B09EB0BAD81667C0FFF53DF06FD6E73F1FF B68D873C858B4461D2179DBC5700459FFC01B74C9014B564EACA43350F7A6DDC CC155ABE0CAB5CDC99DE03E32D52BA0795B546EC716F5D74C15AEF47A4EF17D0 75AEB48948F52B2A413D6791E6E356D10691D3C90045BB9C8DFA45B4C753941B D44A6D2FEF352AC9E64681E32E75BC03F5A52452A07450D692760A2E3AE6D4EF 3F3E3C99BDD0D2336E700AF272D6EC0AEF6733116D6DE0F1A90DBD73CB453064 9E1E2382187936CF7F4483C720D8C926739F1D56C4FA74832946F60D74534E14 B8DEA9D853DBB3504DE4CCED56845C3C2050EB3B3A0BCD205A40FFDBB895391C 4425426117DE6189131D6CEED0D67B962A3946EE0CF79EEE038B56310747B418 747EC34A14F1F4C162A77E6385097051AAFE631791933692BAC727FF752BFE21 AAD8914F07E002EDD5513F2253EE1C9ECE7AAAFAE3302721701D1167FFB70ED5 26FC85BEBEF765F93FBCF13AA097731D19B41A256D9B15F803F2D367768BC66A 76A23757364374487B0057CF319651F9BFF83F9E1087B1798D2544E84AD8F4E2 7E5BAC56D00A387E75D9A566A3F581EA24EF2493957E9417B5AB0664CE8977D3 CB7B64ED18283786D4791AAF8B9F5308A3F3E64D04950F5C596D8F03EB4A6C27 9641D42B3A72822FD803C698F087E2C02683580F8F5C5C53089455D4E74709C7 5392224FD5C9A4D0A5100463E691B0E80B6EAB6A60868CA8BA5113DF14A02105 F3CFBD6DF1B57AB3CED1BC2743494B0F41D56B24CFF13FA32AF699BC5ED3C48D EDA97E654867DAE9BD245289323FB46678A21A6A8DF7D51C2C145EAF45105D29 62F085222FF090E865D853BB92746B27BD636DD507FFEC3C6F18AFFFFE71BC34 7CE9DD9070B4F0420C118ED518EF746B1FC9483A3E93A56B795BDDE536208C7B D58CFA96C8F55F2428C0F8388365BF48B086D86D80892835B0109EC5DA44331F 11E7EF1F8A5E87C5F855C4889CB210A556E5DA20118226349BFCD13BF316FAD8 5664F9AA73A39426BA7B2B7041AFD8D051E8A73B2D38FEEA3E533F09D82A253C C77CFBC28FB7C58FD5EC021F79873A956D841E8373A433BA820F503753FE1695 77ED2C5F92AC4F3A217348C327E1A13E5CB2B55BF223724514A53948260225BE 0AB1E5634C1E89AFB24742FF79B2A48F423C7D142DBCAD002554EAEDF5D67750 2C26E793751DBACB36A1D5DB2BAF455D78DEDAFF13AF36504D05D0900E385BED 546D25F26EA6C916E653F5333AFC93FD4D861C03618E89201E063F6356C2CF06 112CFC00C580BA9195DDAC6ECDE95B5092E969726A7060CAE36E6C210ECA01BE 2BA66EAA75D244593CDB16C0862E25AFEDAA0276FB3DFE5693618E503DA5388B 4D0F8B78025604EBFFB94DC2EBB06A5AFF892D018CE800AA0088AFAF2E8E3819 F2AAB2F4040BE83DB58531419B5122030C155D30F25A27B94142227D155AD6C0 56EEDD5469AF2D0A7B06F497ED8E4FFF21F26C3968CDC1F4D72AEFCDF49B8075 0C3932751E424B1AED832E3266311CDAF52D7A13E7FB54BD212ED4791C341808 E41E5A3B76A9AE2D5DA4D0691651ED509AD7134A9EF3D3F4D22B3D25A35D39AA CC3BB987567DDD1391EA3EA3DB87C218396543766FF6C414B9258F2E6CFE299A E7E8A99CDC189DFB19E3330E3D6C5929616B77FE6EDBA935E15EFD6DF06787D2 87AF7052B7C3E6D26477E8043E3D80C3F839BBEB7477A8B92CCA75F552E215AB D4CB7E9A345E6709CC675D97BE6657D16D25792C7CBCC74BBCE90A350AB3DD22 957D8375AC41C03F5A910FA403AAC4E9D1F9E3177EDC01DEDA7FACCD874DAEC0 5604A4F238759FAA0D3092FF1430CA76D1823B6ECC66D21356C7D48E40383776 01B374D2384358DDD2AE0681A886EEE5F6F678A8E4C900932B79272D3C840C50 6526D907769DBD434D3E410319B4E7F572A812CBDBDE2ACCD8920EE5154C6FD0 B924FD0E5E0C3492B9AC6A0B91993E757BDD0B44AB15852ACCAD4326579ABA2C E41DDA011CFEB25436F7E8402AAB2FCACFBC98D229B3A1FD895559D649B144EF AFFB8E73F4CD1DCEE6A9E6E430AC2A3CA34F9656D9A0ED661C4CAA62E3CD1C35 F9970AACE3097F88B759B8D86998A78EE50A31CA7AA15314CB5CBAC1CD640E7B A22957B9F5C7EC4F5EA3216FFCCC3A75986C882CFC57656A3C6DCC2B860E2702 700D579CC2A8B6165D0CC2B725215E21FD059AF2BACD8FE2AFFE31C064385A64 8198D2E1B72E6568FA5E9747CC5E890986D25FF81EC74897F36E161488903561 A727D695848D9E91B64DC4FCFF971D9F463BD3CBB651EB380BA4DDD94C7AB0A4 C408102BEFA4F53DBE7173DB6364B2557326C7EE3B158AEF4D1EA825EF727038 08246FC824CB419ABBE1AD505B5DA5372B59D3BC6CF1018151102C1E5DA9D8A5 D8593FAB2B9CB5EDAE88D500A4E264889FC5172DE9283C89B139BD7E12DED7C0 BEDE134B08225D3F4149BD9A6EEF3C5AEFABA6729906149A710A352E7D5B8C99 FBE69149569AE642941A57BC0F7F59EA19FDBE3D103885D0737A57871F317508 35C05B640F71EEAA82CFCCD013421254AF0DACC1EA8D3EF416AD5B97DFB1861D E16AB8136755A00AC8432B83D007F4019F5B82F0DACE52E7CA839AD032B349ED 6A76225EF056061581F57FE5BCFF68184F46EA192863A7585FED7FE85C792554 862022F4520117EF4B0664F3BE729024B4044FBFAF0A0409D3E5A87FE54AEB91 7833D29F 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: MSBM10 %!PS-AdobeFont-1.1: MSBM10 2.1 %%CreationDate: 1993 Sep 17 11:10:37 % Math Symbol fonts were designed by the American Mathematical Society. % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (2.1) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (MSBM10) readonly def /FamilyName (Euler) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /MSBM10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 80 /P put dup 81 /Q put dup 90 /Z put readonly def /FontBBox{-55 -420 2343 920}readonly def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6A66A4000A13D5F68BFF326D 1D432B0D064B56C598F4338C319309181D78E1629A31ECA5DD8536379B03C383 D10F04E2C2822D3E73F25B81C424627D3D9A158EAB554233A25D3C6849ABA86F 1F25C1667CB57D2E79B7803083CB7CC0616467F68450D9A3FEAB534EB9721003 DBFEEFD050F3AC3492F5C74162A9A531ECEC0F47610B4940E946D21CAA771D30 A6C27ECBA11708CC46C62396BF9D1990D579D0C394899D24FE7A4382EA18E7E1 160E7283AF5BE17254790628E79FCC206F28B5566075B3A5697D5209062544FF D85FD89D6F43D6588B242AB2666B5D2861CD38A8CE676503EDFAE84D12A71E77 8405E468FE391F4F3F50D2C57ED55512036B0DB8E76A7EF413ED08673E56DE2C 16A3B65CD478433C0D2F9FEC4E662D54DAA43CFA6957D2A9AF8979BE06F70B68 ED4C8C493D6DAC4971A3F1D010A7726D084EC1074FECD7D12D72AE16C26194AF 21AF5774D9B860EEE8608D34F150092F09C19959BAA670022B9A9F263CD391E3 74DD1D1B4CD4D75273CAA4E37F68C631723E08FA35AD34C0AFB4621AE6689861 854D16CE1C375FD159A337E221A6FF1CFFB5693A0623E7EBB58C2969F590D081 AD92DD9E5322E26D6A15023664AC73A355998BCC48ADD0E7A4BC79790519606F A1FEF6075033BCD422EE8233B83D1E7C20043280D531223D5AD4D5B41669F884 95CE4D6DDE819B588742B930C579EDF743F2C74C95F717FAA6154FADC3FE2975 F59CFB1C1A29059487E75C48505BAEAD7145667D4E18E46E610C868A257173ED 0D30EAA4C090854DD8378E92D0A376226EA7DA63798F247BAC770FE26D70E72F 90CCFAADF118304646955DE0B9D25C4B419FBF62FB42ED17CD96B7343A615ABE 10AB49D23B8AC3CA10553C5B5ABC15FF83B6B5A939E450BBF3FF2C25FBE2646A 6A9E6BB4AAF1D716774D8A9B4A2E0A6E4ED6A9A6795CD10B29D7546F125A21BE 0398B895C916C715516F37A766638676F975E16121A149ADB6004F87454C33E4 391FC10668166B6B67FB6E2BBFF0230C9BC38A29DFFA2DB6138C5AB01BAC2AE7 A20E96CC79CA95C3CFE10D51A2990531795472F073F7EC3FB0448B4340D6B73F 489723A20DAF9AB0CEA00CE2449A636AF0388CBB9B2A2FFEBA1E0E57D5E31128 760B48E679280CBCA68D28BC35FFB82CDACE3EC6DFC1FB027C403CE9526B6788 0B3837C0CCAE8C9A472D14752C743149583EBAA36EE1888DF22132DF186F88DE F122D05DA3F652EA9E302228424B3A9D7CA0DAAE7464AFA860F7EAA371531FE0 D401C99642C01EAFE5601AA5966739FBF7E039BE39B55AF87BEFC2397D3D24F8 AE5CD3BC5879BC45A5B68340DD379EC5F06DEB6F5A5FBFFC1531E66D5FAF68A3 0F10ED2D1CDEA6726B14EFD56F445D267198F8B703F7FE3149D2D4E6BEFB728D 432E427954206D888AB37344E05A2AA9FE94263DEBEED0AA9066F0A123F5731A 2757746EE2C16B6A94C793820C2B0D21B521C668D851C0DC379887B93290AFE6 4D31D1CE63CC5F46FF8C1CAA3F315447DEBA2BBFAE7202E3ED7F6EDB2E3C37C2 A7F54D56F94B336A908960BB1D16BAFA7CE21383158750639CB466E10B0E7AB2 F7A7540539FEF889C66FA32BF432920C6349609AE67EEC3609253EDE2F97DC50 30C8198826C4C3AA0F4A7D2C26AC22BA35B4E7E8EAF875F69DE02F6529948962 F7D040F5B0D3FFD550AF3A286E5F8897F0C66670DF8A538EE0873798A302F1C9 A5AD2DD1DA6B90E4F35193502FAF3A0C01196F7293619739177A84A709D5E7FD B1D6AE62EF2810F276FB45F70368A8A859F103F073B2DCA6FD70358A57D8F4BD 6F17F027DA2EA1ECD115E55015B8E7E5A690135551035C7278BCFAD631CE352D FFFB51FCAA577FF4E034321BB79CB8840A6D6478EDFAE6ACC6F3919F45B3EE78 B8DFE3113F435F880D73A036314C7E9E19B25934C68D61E74FB39B8583129310 5D504C604EC9B9526D26B4EE3CDE43ABE11032FC82ABF714B483481A1CDB7AD9 689CBD1458F7C92359050062932F3A2BA388DA3B0AD9FA201EA42FB2F2A85A8F C036F35E585042B2AB1AC07CE55E92FE2B2EDC5420491901AA6CCB5F087548FA BADD1CE08BCAC72790AFAE2711D4ED5B 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMR10 %!PS-AdobeFont-1.1: CMR10 1.00B %%CreationDate: 1992 Feb 19 19:54:52 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.00B) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /CMR10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 40 /parenleft put dup 41 /parenright put dup 43 /plus put dup 61 /equal put dup 91 /bracketleft put dup 93 /bracketright put readonly def /FontBBox{-251 -250 1009 969}readonly def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C 295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75 409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C 4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF 2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E 0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008 24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B 43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575 5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC 96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3 7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3C8578EF9A20A0E06E 4F7ADDAF0E7D1E182D115BF1AD931977325AD391E72E2B13CC108E3726C11099 E2000623188AAAC9F3E233EB253BDD8B0A4759A66A113E066238B0086AC1B634 5ABFF90E4B5ED3FA69C22541981B2BFC9710AEF6B50A8BB53431C7B4D380D721 639E005D6B4688EE16BFF48443E7C9E5FB5BC5883E271CB03428966C96B6988B 2C9127404E8C64B122D405610B1207E61D6CB678BF414E64299C22D6B8DA233B 8E0E897EEAF81E43E962BD1DE1D8F24C8350761B0E688E433D01BCC9ADD5857E BE9564F01D501D5F99C4272CA490100395D23DEC1BE59A6DE8D20B90C61434C9 062B6856C5C61184BD58F20E01B447F6140CB149BD370D59069F121FCA8AC937 4A86AF9E00E141BE1F2B0DEF30A4AC17817E4B58B1A8921B990F237E64A938AD 284A1DAB4F3BF58231B22F57219F9BF0E38585D631CF24EB1DDCBB1EA6E3DB31 88D7C3F8D9EAF27F7239557A2D2EA7AC5AED0DC02CDB0A2C9E4D64C24C3616F3 AA98D473C46596DC975C149FD66CE806C4529D92B0173BBCDA0D18B2956E0F51 179D7861557A915D2AA59CE21800265DAF737E83C7B4E9C41F80195E51A95158 F9CEAFA5ABDEBCDF332BC7107FEA70FDE84269ACCD15BB35D961846217D54B02 88995D6A3304BF88EEA7ACB9C548195606C4E601789F3562E89A69C40BEA9167 D3F49BF39DB2D57630674554F297DA605A079220182EA752B31072D46E091410 D021BFC8B8A1E4D6E2AC110AE143BE32F407F6AAD2FEE259839BF6AEE1B7FAC4 7597F8E3347EFB48F3DDE6E9198354D1D408AD5657D41F5D11FE6B805FBFA2E2 F92F6332DDAD4AE77D30758E37B67866D6CEA29B6027812977B8D68A570904DF 47550EA6773ED0DFE830F8B80BBECAA80EC33DC5ACDD4E683E5B688F5D1F14FA A5778EE610C3FCF3429021E2A014F8B0B97BEAFFA7F3868E61B35678D54173BC 93A7BF29949C2814BB364594DA9ABAA2F2AEC654B0FB8C022B5775582D8CBA0D D1AD19333BD74415F40C24E839E48B674B003359EAB05AC8A0ABD358DA7E999D 1AFE8359E410DE798A76FBF289C701E5DC730913F6FC2FD9693C34013B47C8CF 84670F3925D2FB69CA3C2C61029C9FD1066AD2C1D640A556E226D7056118CBBB CB4C859D64B04B08751F3EFBDEF6F1F352DCBD682F73C89910D7A937D07ED50E 5DCA560DBAD3A96F708B639F62730A566E7D4D3C6C89BF3868707B721ED3ECD8 F185314C9D5B4E8456BC0B096F99F1A9AD67E40E0EBF19B06BFE1DE82BA32980 AA 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMMI10 %!PS-AdobeFont-1.1: CMMI10 1.100 %%CreationDate: 1996 Jul 23 07:53:57 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.100) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMMI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def end readonly def /FontName /CMMI10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put dup 59 /comma put dup 60 /less put dup 61 /slash put dup 62 /greater put dup 96 /lscript put readonly def /FontBBox{-32 -250 1048 750}readonly def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E 6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF 8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE 03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 95601766730045C2D9F29DC2BFEBDE5E7720CC7D82522859B92B2395E3305B29 73FD4E10D7424AD26B4CB3A3B63772EAC0C1D2105D9D905BDDAEAE6D1608B712 3FBE98033DCC0388B4F7C41BB62EDBB86AF2632E2DE8F7647A13F5687010ED09 4F623DB722C478C95C2876F9D36DC318015CCE51CC458196221F79BC766EC955 80E17D642DFD23D7FAC69C5536361311640EDCF70A695C64534231AA573D9DD6 D4DE612F998BA3BC526A9C8CE3B506277D99DFA253E49EBD8E8D1CAC7D29294D 73A5DBB684E0DB043188F7F4C4D7F651A9E8ABBA7CAC3F9DB366553416ED1F67 5480281C2356B3C16E14CEE1FAF70A10E28B2729372BAED967E5A5548621E00E C11A217F16D8D662FA8743FFEDED1177926DB303E939809999ED4071A8072A92 AC242B2BCA812DB939859148D52C7298F13D658FDFED1A219001450958CBAC84 DF255AA7C4C4520E518A0F742B9D4F5E60B9A17450D910FDDD3E619734FDBF86 90F1ECB58FFE06E9A9DC509ED5EB1592B621FAA0169AE91E2B8AA96783F10823 A77A12C1A41D79E367A81F2E84FCAE5C655E4FA04BE41F6B396E56BEA0FB69EE 26AE7AACE7ADAD7ED5EB4B9FDBFF84AAB444D09DFE2854E985C13642EA31A879 5EFDB4EFD8DEAC4B6D04881FBB7CD09CDDE7A9A78507ED5ECE741AE82AF43633 F8CA76079DD855F1CE7DE875DD367A06CC953CE09A9C486E4EE4F258BF38FECF 1ACE6E06A4C153ADEF401392AE903BD28B2520016E4E4955F04E14E0BCC3265C 256270CBB43C9E92CEA6F973197AF6597D8167E14D30F8230B65B09E260EEA26 E31F8B8B464874190DF863E216A98CAECDFAB040445693A3FE2664DFF83A4625 30B159B31248968E45E84E6D913E06CC701BF9BE3D3F991DDF2676B66B0F5898 C66C48ECF5E544E13397933353CD0A060CA4F441E9E4E79923452D265C17F68D B3E7DC14DF2162F8254C8569EBF2F3627990DE0BE81A9FFF77297290F5C7EBC1 DAFEDC2F8009B29FAD5304B3558E667B2EF4B2FD0C2659B00E97B30AD3E9541D 233413F2EBCBFBDEE9B26282E263097DA714F8EAC9B8771CDA407491385F23DE 1F1206237DC4C9801B62D202DC16A18A92B19E2EF605BE5CE03A52D109AF2825 ECAE7A6B0F8CEBC798BFA3DF006BB3ACE7EB46CB7CF1D26A14805EC936EC0E6E 426ED2B7B1CE624E49D89D6CF5 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: MSAM10 %!PS-AdobeFont-1.1: MSAM10 2.1 %%CreationDate: 1993 Sep 17 09:05:00 % Math Symbol fonts were designed by the American Mathematical Society. % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (2.1) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (MSAM10) readonly def /FamilyName (Euler) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /MSAM10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 6 /diamond put readonly def /FontBBox{8 -463 1331 1003}readonly def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1C87678CE98C24B934A76220 4DD9B2FF3A49786028E35DDE10AD2C926BD30AD47015FFE9469DE1F793D1C53A C8812CBCD402444EAEA7A50EC5FD93D6A04C2783B50EA48059E3E7407537CB8D 4C206846EF0764C05289733920E2399E58AD8F137C229F3CE3E34D2D1EAB2D53 20D44EFAC8EFA4D14A2EFE389D952527F98D0E49BD5BD2C8D58FF9CB9C78D974 75C2AB5467D73D2B5E277A3FDC35909938A9DF0EB91BD9159D3437BE22EE4544 3429AC8E2BFBE34AE54D3BA3AD04BDF3F4F43A2B43992DF88678681B3AB32CFD A23E2C98D1AF00AB206AC95B78BBE6316F7A0AB6BD3236C28C76288B3C25D1EB E9ABB3576C5EC15A71D26177F5883E9B48293D59015615E2EEAF2E9BA04151ED 5497B9A1C41CBA44BAFF13EA218F5EAC11952EE336AD1DBE6CE92F002EAA3B3D 3BE4C3792F3405763C4BD93EFC3B4FC34193439561841BA989DD8D9F9AEE7A7B 24AEB4654B35023C9720B8F31AA9452E29753FB7915CB29977E725611E37C0B7 784BCC26FACF8A7A0EB1E54290D27FFE52B2D87FAD080AD15EE1984C37E0EB30 122C3012D3A16B09C28903D138352AB5462674B6CFB63F1371768D094DDF288C 36FB9B58443F872D61F2CD8CED42FE0EFF3D7E9952A172BB1AFECB60BF79F2B6 04265FDE4F78BC9FD619AA733CD0412F1D9A7C13B271BF827DCBDC8ABAE24FF0 74D3C220621D7FF0EFE62D835A221D0A7C139E2E6681FC2BBA58FA3B80D416EC 3854C63BA040A4262B458340DAA18AA6AEA3BBAC61615CB85982B18664D3D3AF 340C65B969071CF2D0CABEB80E04623D0526F862ECA8280EEE236C535F70561A 854181132E677674AD5E14C6636F57541D3C821F0776D2CB9B8526D4B826791A 0B179B386A8DA0D481554CE0403EA023B18B1872778F6D7D777422A8F9CF907C 3CF9B25D896447A44EC6582EE6C72FA2FD57DCBB7B1E822D9BCB1A791E445CB8 25D721F80CEA8D51C78E22D3D78FF83F2284FA32DF7D50BEA022AE226D6ED003 71C929BBEB85C9319CAD1E344E160448A9A7E26C6E5BF0725D972D109C371C75 C6BF8728E14C0D62AC6C6DE55ED9C2BF660DEDA2F13BD8E0A59E7CF34299A797 BF015CA2E3B3211E455C2F5C0AFA2D23C3D98D98A7F72D03A80B113C6057508B 7E89EC05DF37083B35836FCA652456E39DA936F2A39DB0D5C563824896D39D93 FAC9309D5EA7E10A6546385DB15419356137A6A8A823CA8E57F4396CCF3DAD30 83AD35D6358E1B839D42602E872BB5A498E0ACF9F78B25A5866F 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont TeXDict begin 39139632 55387786 1000 600 600 (/tmp/kde-wdj/kdviHbyvnc.tmp) @start /Fa 26[93 229[{}1 130.908 /Symbol rf /Fb 164[93 91[{}1 81.818 /TeX-cmex9 rf /Fc 214[73 73 13[68 53 53 4[67 67 16[42 42{}9 90.9091 /CMEX10 rf /Fd 205[25 25 49[{TeXBase1Encoding ReEncodeFont}2 49.8132 /Times-Roman rf /Fe 136[55 119[{TeXBase1Encoding ReEncodeFont}1 90.9091 /Courier-Oblique rf /Ff 141[19 3[25 36 1[22 14 14 28[28 9[30 66[{TeXBase1Encoding ReEncodeFont}8 49.8132 /Times-Italic rf /Fh 205[44 1[18 27[52 16[33 52 1[52{}6 66.4176 /CMSY10 rf /Fi 165[61 8[71 56 80[{}3 90.9091 /MSBM10 rf /Fj 165[44 53 1[69 53 53 44 40 49 1[40 53 53 65 44 2[24 1[53 40 44 53 49 1[53 65[{TeXBase1Encoding ReEncodeFont} 20 72.7272 /Times-Roman rf /Fk 194[52 17[52 1[26 26 40[{}4 66.4176 /CMR10 rf /Fl 159[28 34[33 1[18 59[{}3 66.4176 /CMMI10 rf /Fm 74[33 60[29 44 29 33 18 26 26 33 33 33 33 48 18 29 18 18 33 33 18 29 33 29 33 33 12[37 3[41 3[37 3[48 48 41 41 2[41 41 65[{TeXBase1Encoding ReEncodeFont}34 66.4176 /Times-Italic rf /Fo 162[25 1[25 29[71 17[71 1[35 35 40[{}6 90.9091 /CMR10 rf /Fp 159[38 33[71 45 71 25 25 58[{}6 90.9091 /CMMI10 rf /Fq 74[45 58[35 40 40 61 40 45 25 35 35 45 45 45 45 66 25 40 25 25 45 45 25 40 45 40 45 45 6[51 51 56 76 56 1[51 45 56 66 56 66 61 76 51 61 40 30 66 66 56 56 66 61 56 56 18[23 30 23 1[45 30 30 37[45 2[{TeXBase1Encoding ReEncodeFont}59 90.9091 /Times-Italic rf /Fr 138[33 18 4[33 33 4[18 2[22 2[29 44[33 33 33 33 33 33 33 6[22 22 40[{TeXBase1Encoding ReEncodeFont} 16 66.4176 /Times-Roman rf /Fs 249[61 6[{}1 90.9091 /MSAM10 rf /Ft 103[46 29[46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 2[46 1[46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 3[46 1[46 46 1[46 1[46 1[46 46 46 46 46 46 46 46 46 46 46 46 46 46 5[46 33[{ .85 ExtendFont TeXBase1Encoding ReEncodeFont}76 90.9091 /Courier rf /Fu 26[65 63[65 50[50 11[47 40 3[57 7[72 89[{}7 90.9091 /Symbol rf /Fv 148[45 25 35 35 45 45 40 40 40 40 42[0 0 3[61 8[91 7[91 6[71 4[71 71 1[71 71 1[45 45 5[71 4[45 71 25 71{}27 90.9091 /CMSY10 rf /Fw 139[57 1[76 1[96 7[96 2[76 3[86 29[124 11[86 86 86 86 86 86 86 49[{TeXBase1Encoding ReEncodeFont}14 172.188 /Times-Bold rf /Fx 175[55 8[64 5[59 65[{TeXBase1Encoding ReEncodeFont}3 81.8175 /Helvetica-Bold rf /Fy 169[55 59 50 55 2[55 64 59 6[64 5[55 65[{TeXBase1Encoding ReEncodeFont}9 81.8175 /Helvetica rf /Fz 134[45 1[66 1[51 30 35 40 1[51 45 51 76 25 2[25 51 45 30 40 51 40 1[45 19[86 3[35 1[71 3[66 61 2[45 5[45 45 45 45 45 45 45 45 45 45 3[23 44[{ TeXBase1Encoding ReEncodeFont}36 90.9091 /Times-Bold rf /FA 134[103 103 149 1[115 69 80 92 1[115 103 115 172 57 2[57 115 103 69 92 115 92 1[103 14[149 4[195 3[80 1[161 3[149 138 21[52 44[{TeXBase1Encoding ReEncodeFont}27 206.559 /Times-Bold rf /FB 138[42 23 32 32 2[42 42 4[23 6[42 30[55 67[{TeXBase1Encoding ReEncodeFont}9 83.022 /Times-Italic rf /FC 144[42 11[37 12[50 54 4[50 8[58 2[54 2[50 65[{TeXBase1Encoding ReEncodeFont}8 74.7193 /Helvetica rf /FD 242[83 13[{}1 83.022 /CMSY10 rf /FE 169[40 43 13[47 5[40 65[{TeXBase1Encoding ReEncodeFont}4 59.7754 /Helvetica-Oblique rf /FF 103[42 15[42 10[42 1[42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 1[42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 1[42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 1[42 42 42 42 42 33[{.85 ExtendFont TeXBase1Encoding ReEncodeFont}91 83.022 /Courier rf /FH 87[28 16[83 2[37 37 25[42 42 60 42 42 23 32 28 42 42 42 42 65 23 42 23 23 42 42 28 37 42 37 42 37 7[60 60 78 60 60 51 46 55 1[46 60 60 74 51 1[32 28 60 60 46 51 60 55 55 60 5[23 23 42 1[42 42 42 42 42 42 42 42 23 21 28 21 1[42 28 28 28 36[46 2[{ TeXBase1Encoding ReEncodeFont}72 83.022 /Times-Roman rf /FI 107[42 42 25[42 2[42 1[28 1[37 2[42 46 1[23 1[28 23 46 2[37 46 1[46 42 12[55 1[60 4[78 55 1[42 5[60 60 25[28 28 40[{TeXBase1Encoding ReEncodeFont}25 83.022 /Times-Bold rf /FJ 107[50 50 24[44 50 50 72 50 55 33 39 44 55 55 50 55 83 28 55 33 28 55 50 33 44 55 44 55 50 6[66 2[100 72 72 66 55 72 78 61 78 72 94 66 78 50 39 78 78 61 66 72 72 66 72 3[57 3[50 50 50 50 50 50 50 50 50 50 1[25 33 25 57 50 33 33 37[55 2[{TeXBase1Encoding ReEncodeFont} 71 99.6264 /Times-Bold rf /FK 64[40 22[30 15[30 1[45 1[40 40 24[40 45 45 66 45 45 25 35 30 45 45 45 45 71 25 45 25 25 45 45 30 40 45 40 45 40 30 2[30 1[30 56 66 66 86 66 66 56 51 61 66 51 66 66 81 56 66 35 30 66 66 51 56 66 61 61 66 3[51 1[25 25 45 45 45 45 45 45 45 45 45 45 25 23 30 23 51 45 30 30 30 5[30 29[51 51 2[{ TeXBase1Encoding ReEncodeFont}86 90.9091 /Times-Roman rf /FL 169[72 78 4[72 8[84 5[78 65[{TeXBase1Encoding ReEncodeFont}5 107.596 /Helvetica-Bold rf /FM 134[60 1[86 60 66 40 47 53 66 66 60 66 100 33 66 1[33 66 60 40 53 66 53 66 60 10[86 86 80 66 2[73 93 86 113 80 2[47 1[93 73 80 86 86 80 86 7[60 60 60 60 60 60 60 60 60 60 1[30 40 3[40 40 40[{TeXBase1Encoding ReEncodeFont}54 119.552 /Times-Bold rf /FN 169[124 134 4[124 8[145 5[134 65[{TeXBase1Encoding ReEncodeFont} 5 185.902 /Helvetica-Bold rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%PaperSize: A4 end HPSdict begin /TargetAnchors 0 dict dup begin end targetdump-hook def end TeXDict begin %%EndSetup guava-3.6/doc/guava.pnr0000644017361200001450000001324611027015742014740 0ustar tabbottcrontabPAGENRS := [ [ 0, 0, 0 ], 1, [ 0, 0, 1 ], 2, [ 0, 0, 2 ], 2, [ 0, 0, 3 ], 4, [ 1, 0, 0 ], 12, [ 1, 1, 0 ], 12, [ 1, 2, 0 ], 12, [ 1, 3, 0 ], 13, [ 2, 0, 0 ], 14, [ 2, 1, 0 ], 14, [ 2, 1, 1 ], 14, [ 2, 1, 2 ], 15, [ 2, 1, 3 ], 15, [ 2, 1, 4 ], 16, [ 2, 1, 5 ], 16, [ 2, 1, 6 ], 16, [ 2, 2, 0 ], 17, [ 2, 2, 1 ], 17, [ 2, 2, 2 ], 18, [ 3, 0, 0 ], 19, [ 3, 1, 0 ], 20, [ 3, 1, 1 ], 20, [ 3, 1, 2 ], 21, [ 3, 1, 3 ], 22, [ 3, 2, 0 ], 22, [ 3, 2, 1 ], 22, [ 3, 3, 0 ], 23, [ 3, 3, 1 ], 23, [ 3, 3, 2 ], 23, [ 3, 3, 3 ], 23, [ 3, 4, 0 ], 24, [ 3, 4, 1 ], 24, [ 3, 4, 2 ], 24, [ 3, 5, 0 ], 25, [ 3, 5, 1 ], 25, [ 3, 5, 2 ], 25, [ 3, 6, 0 ], 26, [ 3, 6, 1 ], 26, [ 3, 6, 2 ], 26, [ 3, 6, 3 ], 26, [ 3, 6, 4 ], 27, [ 4, 0, 0 ], 28, [ 4, 1, 0 ], 30, [ 4, 1, 1 ], 30, [ 4, 2, 0 ], 31, [ 4, 2, 1 ], 31, [ 4, 2, 2 ], 31, [ 4, 2, 3 ], 31, [ 4, 2, 4 ], 32, [ 4, 3, 0 ], 32, [ 4, 3, 1 ], 32, [ 4, 3, 2 ], 33, [ 4, 3, 3 ], 33, [ 4, 3, 4 ], 33, [ 4, 3, 5 ], 33, [ 4, 3, 6 ], 34, [ 4, 3, 7 ], 34, [ 4, 3, 8 ], 35, [ 4, 3, 9 ], 35, [ 4, 3, 10 ], 35, [ 4, 3, 11 ], 36, [ 4, 3, 12 ], 36, [ 4, 3, 13 ], 37, [ 4, 3, 14 ], 37, [ 4, 3, 15 ], 38, [ 4, 4, 0 ], 38, [ 4, 4, 1 ], 38, [ 4, 4, 2 ], 38, [ 4, 4, 3 ], 39, [ 4, 4, 4 ], 40, [ 4, 5, 0 ], 40, [ 4, 5, 1 ], 40, [ 4, 5, 2 ], 40, [ 4, 5, 3 ], 41, [ 4, 5, 4 ], 41, [ 4, 5, 5 ], 41, [ 4, 6, 0 ], 42, [ 4, 6, 1 ], 42, [ 4, 6, 2 ], 42, [ 4, 6, 3 ], 43, [ 4, 6, 4 ], 43, [ 4, 7, 0 ], 44, [ 4, 7, 1 ], 44, [ 4, 7, 2 ], 44, [ 4, 7, 3 ], 45, [ 4, 7, 4 ], 45, [ 4, 7, 5 ], 45, [ 4, 8, 0 ], 46, [ 4, 8, 1 ], 46, [ 4, 8, 2 ], 46, [ 4, 8, 3 ], 46, [ 4, 8, 4 ], 47, [ 4, 8, 5 ], 48, [ 4, 8, 6 ], 51, [ 4, 8, 7 ], 51, [ 4, 8, 8 ], 53, [ 4, 8, 9 ], 54, [ 4, 9, 0 ], 54, [ 4, 9, 1 ], 54, [ 4, 9, 2 ], 54, [ 4, 9, 3 ], 55, [ 4, 9, 4 ], 55, [ 4, 9, 5 ], 56, [ 4, 10, 0 ], 56, [ 4, 10, 1 ], 56, [ 4, 10, 2 ], 57, [ 4, 10, 3 ], 58, [ 4, 10, 4 ], 58, [ 4, 10, 5 ], 59, [ 4, 10, 6 ], 60, [ 4, 10, 7 ], 60, [ 4, 10, 8 ], 61, [ 4, 10, 9 ], 62, [ 4, 10, 10 ], 62, [ 4, 10, 11 ], 62, [ 4, 10, 12 ], 63, [ 5, 0, 0 ], 64, [ 5, 1, 0 ], 64, [ 5, 1, 1 ], 64, [ 5, 1, 2 ], 65, [ 5, 1, 3 ], 65, [ 5, 1, 4 ], 66, [ 5, 1, 5 ], 67, [ 5, 1, 6 ], 67, [ 5, 1, 7 ], 67, [ 5, 1, 8 ], 68, [ 5, 2, 0 ], 68, [ 5, 2, 1 ], 68, [ 5, 2, 2 ], 69, [ 5, 2, 3 ], 69, [ 5, 2, 4 ], 70, [ 5, 2, 5 ], 70, [ 5, 2, 6 ], 70, [ 5, 2, 7 ], 71, [ 5, 2, 8 ], 71, [ 5, 2, 9 ], 72, [ 5, 2, 10 ], 72, [ 5, 2, 11 ], 72, [ 5, 2, 12 ], 73, [ 5, 2, 13 ], 74, [ 5, 2, 14 ], 74, [ 5, 3, 0 ], 76, [ 5, 3, 1 ], 76, [ 5, 3, 2 ], 76, [ 5, 3, 3 ], 76, [ 5, 3, 4 ], 76, [ 5, 3, 5 ], 76, [ 5, 4, 0 ], 77, [ 5, 4, 1 ], 77, [ 5, 4, 2 ], 77, [ 5, 4, 3 ], 78, [ 5, 4, 4 ], 78, [ 5, 5, 0 ], 78, [ 5, 5, 1 ], 79, [ 5, 5, 2 ], 80, [ 5, 5, 3 ], 80, [ 5, 5, 4 ], 81, [ 5, 5, 5 ], 82, [ 5, 5, 6 ], 82, [ 5, 5, 7 ], 82, [ 5, 5, 8 ], 83, [ 5, 5, 9 ], 83, [ 5, 5, 10 ], 84, [ 5, 5, 11 ], 84, [ 5, 5, 12 ], 85, [ 5, 5, 13 ], 85, [ 5, 5, 14 ], 85, [ 5, 5, 15 ], 85, [ 5, 5, 16 ], 86, [ 5, 5, 17 ], 87, [ 5, 5, 18 ], 88, [ 5, 5, 19 ], 89, [ 5, 6, 0 ], 89, [ 5, 6, 1 ], 89, [ 5, 6, 2 ], 89, [ 5, 6, 3 ], 90, [ 5, 6, 4 ], 91, [ 5, 6, 5 ], 91, [ 5, 7, 0 ], 92, [ 5, 7, 1 ], 92, [ 5, 7, 2 ], 93, [ 5, 7, 3 ], 93, [ 5, 7, 4 ], 93, [ 5, 7, 5 ], 95, [ 5, 7, 6 ], 95, [ 5, 7, 7 ], 95, [ 5, 7, 8 ], 96, [ 5, 7, 9 ], 96, [ 5, 7, 10 ], 96, [ 5, 7, 11 ], 96, [ 5, 7, 12 ], 96, [ 5, 7, 13 ], 98, [ 5, 7, 14 ], 98, [ 5, 7, 15 ], 99, [ 5, 7, 16 ], 100, [ 5, 7, 17 ], 100, [ 5, 7, 18 ], 100, [ 5, 7, 19 ], 100, [ 5, 7, 20 ], 101, [ 5, 7, 21 ], 102, [ 5, 7, 22 ], 103, [ 5, 7, 23 ], 103, [ 5, 7, 24 ], 103, [ 5, 7, 25 ], 104, [ 5, 8, 0 ], 105, [ 5, 8, 1 ], 106, [ 6, 0, 0 ], 108, [ 6, 1, 0 ], 108, [ 6, 1, 1 ], 108, [ 6, 1, 2 ], 109, [ 6, 1, 3 ], 109, [ 6, 1, 4 ], 110, [ 6, 1, 5 ], 110, [ 6, 1, 6 ], 111, [ 6, 1, 7 ], 111, [ 6, 1, 8 ], 112, [ 6, 1, 9 ], 112, [ 6, 1, 10 ], 113, [ 6, 1, 11 ], 114, [ 6, 1, 12 ], 114, [ 6, 1, 13 ], 114, [ 6, 1, 14 ], 115, [ 6, 1, 15 ], 116, [ 6, 1, 16 ], 116, [ 6, 1, 17 ], 116, [ 6, 1, 18 ], 117, [ 6, 1, 19 ], 117, [ 6, 1, 20 ], 118, [ 6, 2, 0 ], 119, [ 6, 2, 1 ], 119, [ 6, 2, 2 ], 119, [ 6, 2, 3 ], 119, [ 6, 2, 4 ], 120, [ 6, 2, 5 ], 120, [ 6, 2, 6 ], 121, [ 6, 2, 7 ], 121, [ 6, 2, 8 ], 122, [ 6, 2, 9 ], 122, [ 6, 2, 10 ], 123, [ 6, 2, 11 ], 124, [ 6, 2, 12 ], 125, [ 7, 0, 0 ], 126, [ 7, 1, 0 ], 126, [ 7, 1, 1 ], 127, [ 7, 1, 2 ], 127, [ 7, 1, 3 ], 127, [ 7, 1, 4 ], 128, [ 7, 1, 5 ], 128, [ 7, 1, 6 ], 129, [ 7, 1, 7 ], 129, [ 7, 1, 8 ], 129, [ 7, 1, 9 ], 130, [ 7, 1, 10 ], 130, [ 7, 1, 11 ], 130, [ 7, 1, 12 ], 131, [ 7, 1, 13 ], 131, [ 7, 2, 0 ], 132, [ 7, 2, 1 ], 132, [ 7, 2, 2 ], 132, [ 7, 2, 3 ], 133, [ 7, 2, 4 ], 134, [ 7, 2, 5 ], 134, [ 7, 2, 6 ], 135, [ 7, 2, 7 ], 135, [ 7, 2, 8 ], 136, [ 7, 2, 9 ], 136, [ 7, 2, 10 ], 137, [ 7, 2, 11 ], 137, [ 7, 2, 12 ], 138, [ 7, 2, 13 ], 138, [ 7, 2, 14 ], 139, [ 7, 2, 15 ], 139, [ 7, 2, 16 ], 139, [ 7, 2, 17 ], 140, [ 7, 3, 0 ], 140, [ 7, 3, 1 ], 141, [ 7, 3, 2 ], 141, [ 7, 3, 3 ], 141, [ 7, 3, 4 ], 142, [ 7, 3, 5 ], 142, [ 7, 3, 6 ], 143, [ 7, 3, 7 ], 144, [ 7, 3, 8 ], 144, [ 7, 3, 9 ], 144, [ 7, 3, 10 ], 145, [ 7, 3, 11 ], 145, [ 7, 3, 12 ], 146, [ 7, 3, 13 ], 146, [ 7, 4, 0 ], 147, [ 7, 4, 1 ], 147, [ 7, 4, 2 ], 147, [ 7, 4, 3 ], 147, [ 7, 4, 4 ], 148, [ 7, 4, 5 ], 148, [ 7, 5, 0 ], 148, [ 7, 5, 1 ], 148, [ 7, 5, 2 ], 149, [ 7, 5, 3 ], 149, [ 7, 5, 4 ], 149, [ 7, 5, 5 ], 150, [ 7, 5, 6 ], 150, [ 7, 5, 7 ], 150, [ 7, 5, 8 ], 151, [ 7, 5, 9 ], 151, [ 7, 5, 10 ], 151, [ 7, 5, 11 ], 152, [ 7, 5, 12 ], 152, [ 7, 5, 13 ], 153, [ 7, 5, 14 ], 153, [ 7, 5, 15 ], 153, [ 7, 5, 16 ], 154, [ 7, 5, 17 ], 154, [ 7, 6, 0 ], 154, [ 7, 6, 1 ], 154, [ 7, 6, 2 ], 154, [ 7, 6, 3 ], 155, [ 7, 6, 4 ], 155, [ 7, 6, 5 ], 156, [ 7, 6, 6 ], 156, [ 7, 6, 7 ], 156, [ 7, 6, 8 ], 157, [ 7, 6, 9 ], 157, [ 7, 6, 10 ], 158, [ 7, 7, 0 ], 158, [ "Bib", 0, 0 ], 164, [ "Ind", 0, 0 ], 166, ["End"], 171]; guava-3.6/doc/chap0.txt0000644017361200001450000003732511027015733014654 0ustar tabbottcrontab GUAVA A GAP4 Package for computing with error-correcting codes   Version 3.6 June 20, 2008 Jasper Cramwinckel Erik Roijackers Reinald Baart Eric Minkes, Lea Ruscio Robert L Miller, Tom Boothby Cen (``CJ'') Tjhai David Joyner (Maintainer), Robert L Miller, Email: mailto:rlm@robertlmiller.com Cen (``CJ'') Tjhai Email: mailto:cen.tjhai@plymouth.ac.uk Homepage: http://www.plymouth.ac.uk/staff/ctjhai David Joyner (Maintainer), Email: mailto:wdjoyner@gmail.com Homepage: http://sage.math.washington.edu/home/wdj/guava/ ------------------------------------------------------- Copyright GUAVA: © The GUAVA Group: 1992-2003 Jasper Cramwinckel, Erik Roijackers,Reinald Baart, Eric Minkes, Lea Ruscio (for the tex version), Jeffrey Leon © 2004 David Joyner, Cen Tjhai, Jasper Cramwinckel, Erik Roijackers, Reinald Baart, Eric Minkes, Lea Ruscio. © 2007 Robert L Miller, Tom Boothby GUAVA is released under the GNU General Public License (GPL). GUAVA is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GUAVA 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 GUAVA; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA For more details, see http://www.fsf.org/licenses/gpl.html. For many years GUAVA has been released along with the ``backtracking'' C programs of J. Leon. In one of his *.c files the following statements occur: ``Copyright (C) 1992 by Jeffrey S. Leon. This software may be used freely for educational and research purposes. Any other use requires permission from the author.'' The following should now be appended: ``I, Jeffrey S. Leon, agree to license all the partition backtrack code which I have written under the GPL (www.fsf.org) as of this date, April 17, 2007.'' GUAVA documentation: © Jasper Cramwinckel, Erik Roijackers,Reinald Baart, Eric Minkes, Lea Ruscio (for the tex version), David Joyner, Cen Tjhai, Jasper Cramwinckel, Erik Roijackers, Reinald Baart, Eric Minkes, Lea Ruscio. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". ------------------------------------------------------- Acknowledgements GUAVA was originally written by Jasper Cramwinckel, Erik Roijackers, and Reinald Baart in the early-to-mid 1990's as a final project during their study of Mathematics at the Delft University of Technology, Department of Pure Mathematics, under the direction of Professor Juriaan Simonis. This work was continued in Aachen, at Lehrstuhl D fur Mathematik. In version 1.3, new functions were added by Eric Minkes, also from Delft University of Technology. JC, ER and RB would like to thank the GAP people at the RWTH Aachen for their support, A.E. Brouwer for his advice and J. Simonis for his supervision. The GAP 4 version of GUAVA (versions 1.4 and 1.5) was created by Lea Ruscio and (since 2001, starting with version 1.6) is currently maintained by David Joyner, who (with the help of several students) has added several new functions. Starting with version 2.7, the ``best linear code'' tables have been updated. For further details, see the CHANGES file in the GUAVA directory, also available at http://sage.math.washington.edu/home/wdj/guava/CHANGES.guava. This documentation was prepared with the GAPDoc package of Frank Lübeck and Max Neunhöffer. The conversion from TeX to GAPDoc's XML was done by David Joyner in 2004. Please send bug reports, suggestions and other comments about GUAVA to mailto:support@gap-system.org. Currently known bugs and suggested GUAVA projects are listed on the bugs and projects web page http://sage.math.washington.edu/home/wdj/guava/guava2do.html. Older releases and further history can be found on the GUAVA web page http://sage.math.washington.edu/home/wdj/guava/. Contributors: Other than the authors listed on the title page, the following people have contributed code to the GUAVA project: Alexander Hulpke, Steve Linton, Frank Lübeck, Aron Foster, Wayne Irons, Clifton (Clipper) Lennon, Jason McGowan, Shuhong Gao, Greg Gamble. For documentation on Leon's programs, see the src/leon/doc subdirectory of GUAVA. ------------------------------------------------------- Content (guava) 1. Introduction 1.1 Introduction to the GUAVA package 1.2 Installing GUAVA 1.3 Loading GUAVA 2. Coding theory functions in GAP 2.1 Distance functions 2.1-1 AClosestVectorCombinationsMatFFEVecFFE 2.1-2 AClosestVectorComb..MatFFEVecFFECoords 2.1-3 DistancesDistributionMatFFEVecFFE 2.1-4 DistancesDistributionVecFFEsVecFFE 2.1-5 WeightVecFFE 2.1-6 DistanceVecFFE 2.2 Other functions 2.2-1 ConwayPolynomial 2.2-2 RandomPrimitivePolynomial 3. Codewords 3.1 Construction of Codewords 3.1-1 Codeword 3.1-2 CodewordNr 3.1-3 IsCodeword 3.2 Comparisons of Codewords 3.2-1 = 3.3 Arithmetic Operations for Codewords 3.3-1 + 3.3-2 - 3.3-3 + 3.4 Functions that Convert Codewords to Vectors or Polynomials 3.4-1 VectorCodeword 3.4-2 PolyCodeword 3.5 Functions that Change the Display Form of a Codeword 3.5-1 TreatAsVector 3.5-2 TreatAsPoly 3.6 Other Codeword Functions 3.6-1 NullWord 3.6-2 DistanceCodeword 3.6-3 Support 3.6-4 WeightCodeword 4. Codes 4.1 Comparisons of Codes 4.1-1 = 4.2 Operations for Codes 4.2-1 + 4.2-2 * 4.2-3 * 4.2-4 InformationWord 4.3 Boolean Functions for Codes 4.3-1 in 4.3-2 IsSubset 4.3-3 IsCode 4.3-4 IsLinearCode 4.3-5 IsCyclicCode 4.3-6 IsPerfectCode 4.3-7 IsMDSCode 4.3-8 IsSelfDualCode 4.3-9 IsSelfOrthogonalCode 4.3-10 IsDoublyEvenCode 4.3-11 IsSinglyEvenCode 4.3-12 IsEvenCode 4.3-13 IsSelfComplementaryCode 4.3-14 IsAffineCode 4.3-15 IsAlmostAffineCode 4.4 Equivalence and Isomorphism of Codes 4.4-1 IsEquivalent 4.4-2 CodeIsomorphism 4.4-3 AutomorphismGroup 4.4-4 PermutationAutomorphismGroup 4.5 Domain Functions for Codes 4.5-1 IsFinite 4.5-2 Size 4.5-3 LeftActingDomain 4.5-4 Dimension 4.5-5 AsSSortedList 4.6 Printing and Displaying Codes 4.6-1 Print 4.6-2 String 4.6-3 Display 4.6-4 DisplayBoundsInfo 4.7 Generating (Check) Matrices and Polynomials 4.7-1 GeneratorMat 4.7-2 CheckMat 4.7-3 GeneratorPol 4.7-4 CheckPol 4.7-5 RootsOfCode 4.8 Parameters of Codes 4.8-1 WordLength 4.8-2 Redundancy 4.8-3 MinimumDistance 4.8-4 MinimumDistanceLeon 4.8-5 MinimumWeight 4.8-6 DecreaseMinimumDistanceUpperBound 4.8-7 MinimumDistanceRandom 4.8-8 CoveringRadius 4.8-9 SetCoveringRadius 4.9 Distributions 4.9-1 MinimumWeightWords 4.9-2 WeightDistribution 4.9-3 InnerDistribution 4.9-4 DistancesDistribution 4.9-5 OuterDistribution 4.10 Decoding Functions 4.10-1 Decode 4.10-2 Decodeword 4.10-3 GeneralizedReedSolomonDecoderGao 4.10-4 GeneralizedReedSolomonListDecoder 4.10-5 BitFlipDecoder 4.10-6 NearestNeighborGRSDecodewords 4.10-7 NearestNeighborDecodewords 4.10-8 Syndrome 4.10-9 SyndromeTable 4.10-10 StandardArray 4.10-11 PermutationDecode 4.10-12 PermutationDecodeNC 5. Generating Codes 5.1 Generating Unrestricted Codes 5.1-1 ElementsCode 5.1-2 HadamardCode 5.1-3 ConferenceCode 5.1-4 MOLSCode 5.1-5 RandomCode 5.1-6 NordstromRobinsonCode 5.1-7 GreedyCode 5.1-8 LexiCode 5.2 Generating Linear Codes 5.2-1 GeneratorMatCode 5.2-2 CheckMatCodeMutable 5.2-3 CheckMatCode 5.2-4 HammingCode 5.2-5 ReedMullerCode 5.2-6 AlternantCode 5.2-7 GoppaCode 5.2-8 GeneralizedSrivastavaCode 5.2-9 SrivastavaCode 5.2-10 CordaroWagnerCode 5.2-11 FerreroDesignCode 5.2-12 RandomLinearCode 5.2-13 OptimalityCode 5.2-14 BestKnownLinearCode 5.3 Gabidulin Codes 5.3-1 GabidulinCode 5.3-2 EnlargedGabidulinCode 5.3-3 DavydovCode 5.3-4 TombakCode 5.3-5 EnlargedTombakCode 5.4 Golay Codes 5.4-1 BinaryGolayCode 5.4-2 ExtendedBinaryGolayCode 5.4-3 TernaryGolayCode 5.4-4 ExtendedTernaryGolayCode 5.5 Generating Cyclic Codes 5.5-1 GeneratorPolCode 5.5-2 CheckPolCode 5.5-3 RootsCode 5.5-4 BCHCode 5.5-5 ReedSolomonCode 5.5-6 ExtendedReedSolomonCode 5.5-7 QRCode 5.5-8 QQRCodeNC 5.5-9 QQRCode 5.5-10 FireCode 5.5-11 WholeSpaceCode 5.5-12 NullCode 5.5-13 RepetitionCode 5.5-14 CyclicCodes 5.5-15 NrCyclicCodes 5.5-16 QuasiCyclicCode 5.5-17 CyclicMDSCode 5.5-18 FourNegacirculantSelfDualCode 5.5-19 FourNegacirculantSelfDualCodeNC 5.6 Evaluation Codes 5.6-1 EvaluationCode 5.6-2 GeneralizedReedSolomonCode 5.6-3 GeneralizedReedMullerCode 5.6-4 ToricPoints 5.6-5 ToricCode 5.7 Algebraic geometric codes 5.7-1 AffineCurve 5.7-2 AffinePointsOnCurve 5.7-3 GenusCurve 5.7-4 GOrbitPoint 5.7-5 DivisorOnAffineCurve 5.7-6 DivisorAddition 5.7-7 DivisorDegree 5.7-8 DivisorNegate 5.7-9 DivisorIsZero 5.7-10 DivisorsEqual 5.7-11 DivisorGCD 5.7-12 DivisorLCM 5.7-13 RiemannRochSpaceBasisFunctionP1 5.7-14 DivisorOfRationalFunctionP1 5.7-15 RiemannRochSpaceBasisP1 5.7-16 MoebiusTransformation 5.7-17 ActionMoebiusTransformationOnFunction 5.7-18 ActionMoebiusTransformationOnDivisorP1 5.7-19 IsActionMoebiusTransformationOnDivisorDefinedP1 5.7-20 DivisorAutomorphismGroupP1 5.7-21 MatrixRepresentationOnRiemannRochSpaceP1 5.7-22 GoppaCodeClassical 5.7-23 EvaluationBivariateCode 5.7-24 EvaluationBivariateCodeNC 5.7-25 OnePointAGCode 5.8 Low-Density Parity-Check Codes 5.8-1 QCLDPCCodeFromGroup 6. Manipulating Codes 6.1 Functions that Generate a New Code from a Given Code 6.1-1 ExtendedCode 6.1-2 PuncturedCode 6.1-3 EvenWeightSubcode 6.1-4 PermutedCode 6.1-5 ExpurgatedCode 6.1-6 AugmentedCode 6.1-7 RemovedElementsCode 6.1-8 AddedElementsCode 6.1-9 ShortenedCode 6.1-10 LengthenedCode 6.1-11 SubCode 6.1-12 ResidueCode 6.1-13 ConstructionBCode 6.1-14 DualCode 6.1-15 ConversionFieldCode 6.1-16 TraceCode 6.1-17 CosetCode 6.1-18 ConstantWeightSubcode 6.1-19 StandardFormCode 6.1-20 PiecewiseConstantCode 6.2 Functions that Generate a New Code from Two or More Given Codes 6.2-1 DirectSumCode 6.2-2 UUVCode 6.2-3 DirectProductCode 6.2-4 IntersectionCode 6.2-5 UnionCode 6.2-6 ExtendedDirectSumCode 6.2-7 AmalgamatedDirectSumCode 6.2-8 BlockwiseDirectSumCode 6.2-9 ConstructionXCode 6.2-10 ConstructionXXCode 6.2-11 BZCode 6.2-12 BZCodeNC 7. Bounds on codes, special matrices and miscellaneous functions 7.1 Distance bounds on codes 7.1-1 UpperBoundSingleton 7.1-2 UpperBoundHamming 7.1-3 UpperBoundJohnson 7.1-4 UpperBoundPlotkin 7.1-5 UpperBoundElias 7.1-6 UpperBoundGriesmer 7.1-7 IsGriesmerCode 7.1-8 UpperBound 7.1-9 LowerBoundMinimumDistance 7.1-10 LowerBoundGilbertVarshamov 7.1-11 LowerBoundSpherePacking 7.1-12 UpperBoundMinimumDistance 7.1-13 BoundsMinimumDistance 7.2 Covering radius bounds on codes 7.2-1 BoundsCoveringRadius 7.2-2 IncreaseCoveringRadiusLowerBound 7.2-3 ExhaustiveSearchCoveringRadius 7.2-4 GeneralLowerBoundCoveringRadius 7.2-5 GeneralUpperBoundCoveringRadius 7.2-6 LowerBoundCoveringRadiusSphereCovering 7.2-7 LowerBoundCoveringRadiusVanWee1 7.2-8 LowerBoundCoveringRadiusVanWee2 7.2-9 LowerBoundCoveringRadiusCountingExcess 7.2-10 LowerBoundCoveringRadiusEmbedded1 7.2-11 LowerBoundCoveringRadiusEmbedded2 7.2-12 LowerBoundCoveringRadiusInduction 7.2-13 UpperBoundCoveringRadiusRedundancy 7.2-14 UpperBoundCoveringRadiusDelsarte 7.2-15 UpperBoundCoveringRadiusStrength 7.2-16 UpperBoundCoveringRadiusGriesmerLike 7.2-17 UpperBoundCoveringRadiusCyclicCode 7.3 Special matrices in GUAVA 7.3-1 KrawtchoukMat 7.3-2 GrayMat 7.3-3 SylvesterMat 7.3-4 HadamardMat 7.3-5 VandermondeMat 7.3-6 PutStandardForm 7.3-7 IsInStandardForm 7.3-8 PermutedCols 7.3-9 VerticalConversionFieldMat 7.3-10 HorizontalConversionFieldMat 7.3-11 MOLS 7.3-12 IsLatinSquare 7.3-13 AreMOLS 7.4 Some functions related to the norm of a code 7.4-1 CoordinateNorm 7.4-2 CodeNorm 7.4-3 IsCoordinateAcceptable 7.4-4 GeneralizedCodeNorm 7.4-5 IsNormalCode 7.5 Miscellaneous functions 7.5-1 CodeWeightEnumerator 7.5-2 CodeDistanceEnumerator 7.5-3 CodeMacWilliamsTransform 7.5-4 CodeDensity 7.5-5 SphereContent 7.5-6 Krawtchouk 7.5-7 PrimitiveUnityRoot 7.5-8 PrimitivePolynomialsNr 7.5-9 IrreduciblePolynomialsNr 7.5-10 MatrixRepresentationOfElement 7.5-11 ReciprocalPolynomial 7.5-12 CyclotomicCosets 7.5-13 WeightHistogram 7.5-14 MultiplicityInList 7.5-15 MostCommonInList 7.5-16 RotateList 7.5-17 CirculantMatrix 7.6 Miscellaneous polynomial functions 7.6-1 MatrixTransformationOnMultivariatePolynomial 7.6-2 DegreeMultivariatePolynomial 7.6-3 DegreesMultivariatePolynomial 7.6-4 CoefficientMultivariatePolynomial 7.6-5 SolveLinearSystem 7.6-6 GuavaVersion 7.6-7 ZechLog 7.6-8 CoefficientToPolynomial 7.6-9 DegreesMonomialTerm 7.6-10 DivisorsMultivariatePolynomial 7.7 GNU Free Documentation License ------------------------------------------------------- guava-3.6/doc/manual.bib0000644017361200001450000000435111026723452015047 0ustar tabbottcrontab%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %A manual.bib GUAVA documentation Reinald Baart %A & Jasper Cramwinckel %A & Erik Roijackers % %H $Id: manual.bib,v 1.2 2003/02/12 03:40:23 gap Exp $ % %Y Copyright (C) 1995, Vakgroep Algemene Wiskunde, T.U. Delft, Nederland % @article{GDT91, AUTHOR = {Gabidulin, Ernst M. and Davydov, Alexander A. and Tombak, Leonid M.}, TITLE = {Linear codes with covering radius $2$ and other new covering codes}, JOURNAL = {IEEE Trans. Inform. Theory}, VOLUME = {37}, YEAR = {1991}, NUMBER = {1}, PAGES = {219--224}, } @article{Han99, author = "J. P. Hansen", title = "Toric surfaces and error-correcting codes", journal = "Coding theory, cryptography, and related areas (ed., Bachmann et al) Springer-Verlag", year = 1999, } @article{He72, author = "Hermann~J. Helgert", title = "Srivastava codes", journal = "IEEE Trans. Inform. Theory", volume = 18, month = "March", year = 1972, pages = "292--297", } @book{HP03, author="W. C. Huffman and V. Pless", title="Fundamentals of Error-correcting Codes", publisher="Cambridge Univ. Press", year=2003} @article{Leon88, author = "Jeffrey~S. Leon", title = "A Probabilistic Algorithm for Computing Minimum Weights of Large Error-Correcting Codes", journal = "IEEE Trans. Inform. Theory", volume = 34, month = "September", year = 1988, pages = "1354--1359", } @article{Leon91, author = "Jeffrey~S. Leon", title = "Permutation group algorithms based on partitions, {I}: theory and algorithms", journal = "J. Symbolic Comput.", volume = 12, year = 1991, pages = "533--583", } @book{MS83, author="F. J. MacWilliams and N. J. A. Sloane", title="The Theory of Error-Correcting Codes", publisher="Amsterdam: North-Holland", year=1983} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %E guava-3.6/doc/chapBib.txt0000644017361200001450000001115311027015733015200 0ustar tabbottcrontab References [All84] Alltop, W. O., A method for extending binary linear codes, IEEE Trans. Inform. Theory, 30 (1984), 871--872 [BMd)] Bazzi, L. and Mitter, S. K., Some constructions of codes from group actions, preprint (March 2003 (submitted)) [Bro06] Brouwer, A. E., Bounds on the minimum distance of linear codes, On the internet at the URL: http$://$www.win.tue.nl$/\tilde$aeb$/$voorlincod.html (1997-2006) [Bro98] Brouwer, A. E. (Pless, V. S. and Huffman, W. C., Ed.), Bounds on the Size of Linear Codes, in Handbook of Coding Theory, {Elsevier, North Holland} (1998), 295--461 [Che69] Chen, C. L., Some Results on Algebraically Structured Error-Correcting Codes, {University of Hawaii}, USA (1969) [GDT91] Gabidulin, E., Davydov, A. and Tombak, L., Linear codes with covering radius 2 and other new covering codes, IEEE Trans. Inform. Theory, 37, 1 (1991), 219--224 [Gal62] Gallager, R., Low-Density Parity-Check Codes, IRE Trans. Inform. Theory, IT-8 (1962), 21--28 [Gao03] Gao, S., A new algorithm for decoding Reed-Solomon codes, Communications, Information and Network Security (V. Bhargava, H. V. Poor, V. Tarokh and S. Yoon, Eds.), Kluwer Academic Publishers (2003), pp. 55-68 [GS85] Graham, R. and Sloane, N., On the covering radius of codes, IEEE Trans. Inform. Theory, 31, 1 (1985), 385--401 [Han99] Hansen, J. P., Toric surfaces and error-correcting codes, Coding theory, cryptography, and related areas (ed., Bachmann et al) Springer-Verlag (1999) [HHKK07] Harada, M., Holzmann, W., Kharaghani, H. and Khorvash, M., Extremal Ternary Self-Dual Codes Constructed from Negacirculant Matrices, Graphs and Combinatorics, 23, 4 (2007), 401--417 [Hel72] Helgert, H. J., Srivastava codes, IEEE Trans. Inform. Theory, 18 (1972), 292--297 [HP03] Huffman, W. C. and Pless, V., Fundamentals of error-correcting codes, Cambridge Univ. Press (2003) [Joy04] Joyner, D., Toric codes over finite fields, Applicable Algebra in Engineering, Communication and Computing, 15 (2004), 63--79 [JH04] Justesen, J. and Hoholdt, T., A course in error-correcting codes, European Mathematical Society (2004) [Leo88] Leon, J. S., A probabilistic algorithm for computing minimum weights of large error-correcting codes, IEEE Trans. Inform. Theory, 34 (1988), 1354--1359 [Leo82] Leon, J. S., Computing automorphism groups of error-correcting codes, IEEE Trans. Inform. Theory, 28 (1982), 496--511 [Leo91] Leon, J. S., Permutation group algorithms based on partitions, I: theory and algorithms, J. Symbolic Comput., 12 (1991), 533--583 [MS83] MacWilliams, F. J. and Sloane, N. J. A., The theory of error-correcting codes, Amsterdam: North-Holland (1983) [S}04] R. Tanner D. Sridhara A. Sridharan, T. F. and }, D. C., LDPC Block and Convolutional Codes Based on Circulant Matrices, STRING-NOT-KNOWN: ieee_j_it, 50, 12 (2004), 2966--2984 [SRC72] Sloane, N., Reddy, S. and Chen, C., New binary codes, IEEE Trans. Inform. Theory, 18 (1972), 503--510 [Sti93] Stichtenoth, H., Algebraic function fields and codes, Springer-Verlag (1993) [GG03] von zur Gathen, J. and J. Gerhard, , Modern computer algebra, Cambridge Univ. Press (2003) [Zim96] Zimmermann, K. -.H., Integral Hecke Modules, Integral Generalized Reed-Muller Codes, and Linear Codes, 3--96, Hamburg, Germany (1996) ------------------------------------------------------- guava-3.6/doc/guava.bbl0000644017361200001450000001045711027015737014705 0ustar tabbottcrontab\begin{thebibliography}{HHKK07} \bibitem[All84]{Alltop84} W.~O. Alltop. \newblock A method for extending binary linear codes. \newblock {\em IEEE Trans. Inform. Theory}, 30:871--872, 1984. \bibitem[BMed]{BM03} L.~Bazzi and S.~K. Mitter. \newblock Some constructions of codes from group actions. \newblock {\em preprint}, March 2003 (submitted). \bibitem[Bro98]{Brouwer98} A.~E. Brouwer. \newblock Bounds on the size of linear codes. \newblock In V.~S. Pless and W.~C. Huffman, editors, {\em Handbook of Coding Theory}, pages 295--461. {Elsevier, North Holland}, 1998. \bibitem[Bro06]{Br} A.~E. Brouwer. \newblock {\em Bounds on the minimum distance of linear codes}. \newblock On the internet at the URL: http$://$www.win.tue.nl$/\tilde$aeb$/$voorlincod.html, 1997-2006. \bibitem[Che69]{Chen69} C.~L. Chen. \newblock {\em Some Results on Algebraically Structured Error-Correcting Codes}. \newblock Ph.{D} dissertation, {University of Hawaii}, USA, 1969. \bibitem[Gal62]{Gallager.1962} R.~Gallager. \newblock Low-density parity-check codes. \newblock {\em IRE Trans. Inform. Theory}, IT-8:21--28, Jan. 1962. \bibitem[Gao03]{Gao03} S.~Gao. \newblock A new algorithm for decoding reed-solomon codes. \newblock {\em Communications, Information and Network Security (V. Bhargava, H. V. Poor, V. Tarokh and S. Yoon, Eds.)}, pages pp. 55--68, 2003. \bibitem[GDT91]{GDT91} E.~Gabidulin, A.~Davydov, and L.~Tombak. \newblock Linear codes with covering radius 2 and other new covering codes. \newblock {\em IEEE Trans. Inform. Theory}, 37(1):219--224, 1991. \bibitem[GS85]{GS85} R.~Graham and N.~Sloane. \newblock On the covering radius of codes. \newblock {\em IEEE Trans. Inform. Theory}, 31(1):385--401, 1985. \bibitem[Han99]{Han99} J.~P. Hansen. \newblock Toric surfaces and error-correcting codes. \newblock {\em Coding theory, cryptography, and related areas (ed., Bachmann et al) Springer-Verlag}, 1999. \bibitem[Hel72]{He72} Hermann~J. Helgert. \newblock Srivastava codes. \newblock {\em IEEE Trans. Inform. Theory}, 18:292--297, March 1972. \bibitem[HHKK07]{HHKK07} M.~Harada, W.~Holzmann, H.~Kharaghani, and M.~Khorvash. \newblock Extremal ternary self-dual codes constructed from negacirculant matrices. \newblock {\em Graphs and Combinatorics}, 23(4):401--417, 2007. \bibitem[HP03]{HP03} W.~C. Huffman and V.~Pless. \newblock {\em Fundamentals of error-correcting codes}. \newblock Cambridge Univ. Press, 2003. \bibitem[JH04]{JH04} J.~Justesen and T.~Hoholdt. \newblock {\em A course in error-correcting codes}. \newblock European Mathematical Society, 2004. \bibitem[Joy04]{Jo04} D.~Joyner. \newblock Toric codes over finite fields. \newblock {\em Applicable Algebra in Engineering, Communication and Computing}, 15:63--79, 2004. \bibitem[Leo82]{Leon82} Jeffrey~S. Leon. \newblock Computing automorphism groups of error-correcting codes. \newblock {\em IEEE Trans. Inform. Theory}, 28:496--511, May 1982. \bibitem[Leo88]{Leon88} Jeffrey~S. Leon. \newblock A probabilistic algorithm for computing minimum weights of large error-correcting codes. \newblock {\em IEEE Trans. Inform. Theory}, 34:1354--1359, September 1988. \bibitem[Leo91]{Leon91} Jeffrey~S. Leon. \newblock Permutation group algorithms based on partitions, {I}: theory and algorithms. \newblock {\em J. Symbolic Comput.}, 12:533--583, 1991. \bibitem[MS83]{MS83} F.~J. MacWilliams and N.~J.~A. Sloane. \newblock {\em The theory of error-correcting codes}. \newblock Amsterdam: North-Holland, 1983. \bibitem[RTC04]{TSSFC04} A.~Sridharan T.~Fuja R.~Tanner, D.~Sridhara and D.~Costello{, Jr.} \newblock {LDPC} block and convolutional codes based on circulant matrices. \newblock 50(12):2966--2984, Dec. 2004. \bibitem[SRC72]{Sloane72} N.~Sloane, S.~Reddy, and C.~Chen. \newblock New binary codes. \newblock {\em IEEE Trans. Inform. Theory}, 18:503--510, Jul 1972. \bibitem[Sti93]{St93} H.~Stichtenoth. \newblock {\em Algebraic function fields and codes}. \newblock Springer-Verlag, 1993. \bibitem[vzGG03]{GG03} J.~von~zur Gathen and J.~Gerhard. \newblock {\em Modern computer algebra}. \newblock Cambridge Univ. Press, 2003. \bibitem[Zim96]{Zimmermann96} K.-H. Zimmermann. \newblock Integral hecke modules, integral generalized {Reed-Muller} codes, and linear codes. \newblock Technical Report 3--96, Technische Universit\"at Hamburg-Harburg, Hamburg, Germany, 1996. \end{thebibliography} guava-3.6/doc/manual.pdf0000644017361200001450000341250011027015742015063 0ustar tabbottcrontab%PDF-1.4 % 5 0 obj << /S /GoTo /D [6 0 R /Fit ] >> endobj 13 0 obj << /Length 721 /Filter /FlateDecode >> stream xUKo0WRc<S*JUepQ1$ Ju|37Ȓ0rsY/g'giNf £H"*TBfsݻK] 1"R4QRLDE:&8UҚBHHy{Go?t;X\zvԔmWKʽeuCb؛m`y8!`T1WP:VzmrS9|H#&I#YOUϖ%@.邰f:j]*]ldE+@Pw]k7N'T&#,t1wKi V]6ߦ5}msQ4a|T;`1*> endobj 7 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [196.735 190.881 305.427 201.511] /Subtype/Link/A<> >> endobj 8 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [201.258 163.528 325.193 174.413] /Subtype/Link/A<> >> endobj 9 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [141.473 149.85 336.54 160.654] /Subtype/Link/A<> >> endobj 10 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [243.748 122.881 337.197 133.765] /Subtype/Link/A<> >> endobj 11 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [141.473 109.202 382.269 120.007] /Subtype/Link/A<> >> endobj 14 0 obj << /D [6 0 R /XYZ 81 757.935 null] >> endobj 15 0 obj << /D [6 0 R /XYZ 81 733.028 null] >> endobj 12 0 obj << /Font << /F28 16 0 R /F29 17 0 R /F31 18 0 R /F36 19 0 R >> /ProcSet [ /PDF /Text ] >> endobj 28 0 obj << /Length 3782 /Filter /FlateDecode >> stream xڭZYsH~ϯR[QyY9.'qΤ6@Q- Ejy@d:kEݍ4=W/޹j(9[mgNvfHyf/k[y`[X̐6hk41/lͤ+;8x*Ox7[@>9/e״Bl8i>~89Q$0h GqgP6-L\8"b0--X|vw:<8.Ëe_ʉ,E±mE]qu%?/]'ҶtL؛"soYig:̐8#!4KÇ/;J)"zc8X7Mտڞ-JjxCUpaU K;-{z@F24& PXlۥsǶ~j^ȆX "⣞zWqڞF 9f'̉Pt ,+o,+C0r1\ӁS<p=w,ֺ V_(~ @1mZFt\ieoR+gԸnY4yQ__1|o(*J<.o@RҺ/K✆zVuQZ5iXo"Pl;@uyۓ>PzA9G$:eM?#NFN\SI[Aj>p`\7Ah4``zPa.4܅ VQqMu`9Scͦo{gqj(S#}p>Q=)OYc]1E!_ȵzoGL<1&1OW4| S,onW_c֮\vF@Yq"rF:1pRsZ em 凷7öHYW/4X}|{{ˍO7Ի5vy38|aOo |p(&tiPI]iV=e.h - {jHAkg6Hq{B.bIf;*h*8<Ί|Gtlh7Z>I%uWP*˸SLf}#"OWopr 8<1ªRVu%#\HzϷG%O'{Lcx nfPeX0rg% ) qhȯܨĶڊܝe$lwľ>d'~#BGDxWc]R:Vִu\VQs gwzG|ParzݖdǨF*_7%.Sq,`Ŋ3 JDPdZF"! j`'v;@{c Qڶiu[dYF.ëKt^"IOu؋s0c0(=v *W|t9B9!yk=eWN(2 E7MbޭW(IXxǦ< DHnfԬ'Ҋq.:w@Vxp^! ngቀ3}a|3mPj*0RxI]%I@'JŒ x@Eiʬk! =;Bt )>&ņd?u Scg5>GU}.٣9& 90O,`[#<);h0 C^`yNkp6E3J90^$a ,\GV' <@G0MiFBqlZ3 [BpK$ W>ԇsQnrJˀny[ڢ4TDqqڡh1#bQ ^ p.N$&XMm͠c`\(65 3M8ymRP|G P*p1έW `BB5)5#mX;2J8s$7n@ZO(׮ g<ۄ;HѠbDF6-0. k i#&\Wɵ ÓpO$ 8`؁G.7l`Ĭ;` xRܯ[IJK<^R}1Q4)&"ѐ63#7>FE2w m>;pL 6pCmPALCJČ> endobj 21 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [182.289 553.81 367.195 564.131] /Subtype/Link/A<> >> endobj 22 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [80.004 194.605 386.852 204.612] /Subtype/Link/A<> >> endobj 23 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [406.733 158.116 520.506 169.06] /Subtype/Link/A<> >> endobj 24 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [80.004 134.829 386.852 145.15] /Subtype/Link/A<> >> endobj 25 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [252.176 122.251 492.972 133.195] /Subtype/Link/A<> >> endobj 29 0 obj << /D [27 0 R /XYZ 81 757.935 null] >> endobj 31 0 obj << /D [27 0 R /XYZ 81 708.838 null] >> endobj 34 0 obj << /D [27 0 R /XYZ 81 337.678 null] >> endobj 26 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F44 32 0 R /F14 33 0 R /F36 19 0 R /F46 35 0 R >> /ProcSet [ /PDF /Text ] >> endobj 38 0 obj << /Length 306 /Filter /FlateDecode >> stream xuQ=O0+aK9DZhL.n+'tN;@GJ$[)g>TCPTs=z )xK l [G%*C/>q}527-( 2J@é\47Zgocng#|j+Gr?,9{Iո\yC?d b2)QxG=VH޻z6vl~čq_;> endobj 39 0 obj << /D [37 0 R /XYZ 81 757.935 null] >> endobj 36 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F44 32 0 R >> /ProcSet [ /PDF /Text ] >> endobj 77 0 obj << /Length 1170 /Filter /FlateDecode >> stream x[Mo8W(a!{ȺuТm={PmIi_JТ!lEf{ pq_7CaP51@*B0o@EP*f-2܎D=OcBx.,05GkV|S8y  8y6L.}~XUl>%P\rq[?V@?/j^3&G,}bg ÀXA^DyN\)-#+'ͽ^9J wZDGMX *4]V#ҁQkƗC,$tiTEgwmZN^Ltq~VLxu&Jd&]qmvK+TL=·R#ᰄzGCLPIqsy{@/'iT)*wIsغd(>|w\?:O@Lܹ穅f˃,ݖ<ؙ"ON>Gߣ\C%C8 n?e'YB'AS[/~,1xViu\%Hai[.rbUtȋ.Ջ$1OJ *DD/dO7]B)NDCMf*OZYv=J,FQˆVN:B %B:\LD_ci~\`??A{ݠm[_C.QP}U5SK\I+6jbM%MQg*K:IvV*g${fyE\$:/o,Z{|[*ҋbERt5]m=E z˞o9vܦ}G7^h7-Lԍ֬ا[\4R;%D> endobj 40 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [80.004 576.91 157.563 586.572] /Subtype /Link /A << /S /GoTo /D (chapter.1) >> >> endobj 41 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 561.152 278.357 572.946] /Subtype /Link /A << /S /GoTo /D (section.1.1) >> >> endobj 42 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 547.603 199.899 559.397] /Subtype /Link /A << /S /GoTo /D (section.1.2) >> >> endobj 43 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 534.054 195.045 545.848] /Subtype /Link /A << /S /GoTo /D (section.1.3) >> >> endobj 44 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [80.004 509.737 248.675 521.466] /Subtype /Link /A << /S /GoTo /D (chapter.2) >> >> endobj 45 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 498.282 207.679 507.84] /Subtype /Link /A << /S /GoTo /D (section.2.1) >> >> endobj 46 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 484.706 359.139 494.291] /Subtype /Link /A << /S /GoTo /D (subsection.2.1.1) >> >> endobj 47 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 471.157 361.125 480.742] /Subtype /Link /A << /S /GoTo /D (subsection.2.1.2) >> >> endobj 48 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 457.608 324.808 467.193] /Subtype /Link /A << /S /GoTo /D (subsection.2.1.3) >> >> endobj 49 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 444.058 327.83 453.643] /Subtype /Link /A << /S /GoTo /D (subsection.2.1.4) >> >> endobj 50 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 428.3 224.752 440.094] /Subtype /Link /A << /S /GoTo /D (subsection.2.1.5) >> >> endobj 51 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 416.96 231.679 426.545] /Subtype /Link /A << /S /GoTo /D (subsection.2.1.6) >> >> endobj 52 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 403.411 194.348 412.996] /Subtype /Link /A << /S /GoTo /D (section.2.2) >> >> endobj 53 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 387.653 244.923 399.447] /Subtype /Link /A << /S /GoTo /D (subsection.2.2.1) >> >> endobj 54 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 374.103 285.82 385.897] /Subtype /Link /A << /S /GoTo /D (subsection.2.2.2) >> >> endobj 55 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [80.004 351.805 150.974 361.516] /Subtype /Link /A << /S /GoTo /D (chapter.3) >> >> endobj 56 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 338.305 243.668 347.89] /Subtype /Link /A << /S /GoTo /D (section.3.1) >> >> endobj 57 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 324.756 203.425 334.341] /Subtype /Link /A << /S /GoTo /D (subsection.3.1.1) >> >> endobj 58 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 311.207 214.934 320.792] /Subtype /Link /A << /S /GoTo /D (subsection.3.1.2) >> >> endobj 59 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 297.657 211.301 307.242] /Subtype /Link /A << /S /GoTo /D (subsection.3.1.3) >> >> endobj 60 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 281.899 244.879 293.693] /Subtype /Link /A << /S /GoTo /D (section.3.2) >> >> endobj 61 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 270.559 164.512 280.144] /Subtype /Link /A << /S /GoTo /D (subsection.3.2.1) >> >> endobj 62 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 254.801 288.798 266.595] /Subtype /Link /A << /S /GoTo /D (section.3.3) >> >> endobj 63 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 243.461 164.512 253.046] /Subtype /Link /A << /S /GoTo /D (subsection.3.3.1) >> >> endobj 64 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 229.911 161.993 239.496] /Subtype /Link /A << /S /GoTo /D (subsection.3.3.2) >> >> endobj 65 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 216.362 164.512 225.947] /Subtype /Link /A << /S /GoTo /D (subsection.3.3.3) >> >> endobj 66 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 200.604 393.372 212.398] /Subtype /Link /A << /S /GoTo /D (section.3.4) >> >> endobj 67 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 189.264 231.897 198.849] /Subtype /Link /A << /S /GoTo /D (subsection.3.4.1) >> >> endobj 68 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 173.505 223.432 185.3] /Subtype /Link /A << /S /GoTo /D (subsection.3.4.2) >> >> endobj 69 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 159.956 370.463 171.75] /Subtype /Link /A << /S /GoTo /D (section.3.5) >> >> endobj 70 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 148.616 221.588 158.201] /Subtype /Link /A << /S /GoTo /D (subsection.3.5.1) >> >> endobj 71 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 132.858 213.123 144.652] /Subtype /Link /A << /S /GoTo /D (subsection.3.5.2) >> >> endobj 72 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 121.518 244.573 131.103] /Subtype /Link /A << /S /GoTo /D (section.3.6) >> >> endobj 73 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 107.969 201.723 117.554] /Subtype /Link /A << /S /GoTo /D (subsection.3.6.1) >> >> endobj 78 0 obj << /D [76 0 R /XYZ 81 757.935 null] >> endobj 79 0 obj << /D [76 0 R /XYZ 81 602.059 null] >> endobj 75 0 obj << /Font << /F29 17 0 R /F31 18 0 R /F44 32 0 R >> /ProcSet [ /PDF /Text ] >> endobj 162 0 obj << /Length 1234 /Filter /FlateDecode >> stream xOS6| vb_֡! vih{`{&JԑR`@gx+9>EϫGz_EEWgwgcF#cIqt7HcH$,]g7K[x>vg`V3) m1g*"$F`bh@r-!}Xdo"쾶ݼX}?(+L;}{1b#=_\ԋaJ]b#$Ɯo)dZ٢%zLĎ-%:[$]UӎukXCf 04"Ѷ)"%- p[:5[5^ic΋#wEpW2JGYCu9Y)r,. )O]UXߩ٦dʛsٱ ̒d8ͳic\O0)-ɂÔ G Ob]oBfru><,iyp=*0OE`ք)9>eم ]/1iD}Rvz!&Y'oϠ'#|Фd0I uRTixOy2p^?~Fm_i(͗sU`H[k3djfۍ.mzeH&Md$(#>@Rm_]K:J<ֲ՜oQWpbUa+o *84HVu OSO24;D X#pMg& XWr_ 2Γ; ] C͍WC)<{?."t88:z7R KOH]԰LlQMV(tto!uom<}|E3)F =GB 7WLVwA*7 xW2:&U5[-k3+-})3,;v~I,ӕ6X<{n=mS][?Ҽ[>pzXnH([8ަHe#eHP˻) endstream endobj 161 0 obj << /Type /Page /Contents 162 0 R /Resources 160 0 R /MediaBox [0 0 595.276 841.89] /Parent 20 0 R /Annots [ 74 0 R 114 0 R 115 0 R 116 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R 128 0 R 129 0 R 130 0 R 131 0 R 132 0 R 133 0 R 134 0 R 135 0 R 136 0 R 137 0 R 138 0 R 139 0 R 140 0 R 141 0 R 142 0 R 143 0 R 144 0 R 145 0 R 146 0 R 147 0 R 148 0 R 149 0 R 150 0 R 151 0 R 152 0 R 153 0 R 154 0 R 155 0 R 156 0 R 157 0 R 158 0 R ] >> endobj 74 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 720.92 241.595 730.505] /Subtype /Link /A << /S /GoTo /D (subsection.3.6.2) >> >> endobj 114 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 705.162 192.909 716.956] /Subtype /Link /A << /S /GoTo /D (subsection.3.6.3) >> >> endobj 115 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 691.613 234.668 703.407] /Subtype /Link /A << /S /GoTo /D (subsection.3.6.4) >> >> endobj 116 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [80.004 669.314 126.843 679.025] /Subtype /Link /A << /S /GoTo /D (chapter.4) >> >> endobj 117 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 653.605 222.842 665.399] /Subtype /Link /A << /S /GoTo /D (section.4.1) >> >> endobj 118 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 642.265 164.512 651.85] /Subtype /Link /A << /S /GoTo /D (subsection.4.1.1) >> >> endobj 119 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 626.507 219.493 638.301] /Subtype /Link /A << /S /GoTo /D (section.4.2) >> >> endobj 120 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 615.167 164.512 624.752] /Subtype /Link /A << /S /GoTo /D (subsection.4.2.1) >> >> endobj 121 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 601.618 163.814 611.203] /Subtype /Link /A << /S /GoTo /D (subsection.4.2.2) >> >> endobj 122 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 588.068 163.814 597.653] /Subtype /Link /A << /S /GoTo /D (subsection.4.2.3) >> >> endobj 123 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 574.519 234.439 584.104] /Subtype /Link /A << /S /GoTo /D (subsection.4.2.4) >> >> endobj 124 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 560.97 253.748 570.555] /Subtype /Link /A << /S /GoTo /D (section.4.3) >> >> endobj 125 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 547.421 166.847 557.006] /Subtype /Link /A << /S /GoTo /D (subsection.4.3.1) >> >> endobj 126 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 533.872 195.33 543.457] /Subtype /Link /A << /S /GoTo /D (subsection.4.3.2) >> >> endobj 127 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 520.322 189.265 529.907] /Subtype /Link /A << /S /GoTo /D (subsection.4.3.3) >> >> endobj 128 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 506.773 217.737 516.358] /Subtype /Link /A << /S /GoTo /D (subsection.4.3.4) >> >> endobj 129 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 491.015 217.748 502.809] /Subtype /Link /A << /S /GoTo /D (subsection.4.3.5) >> >> endobj 130 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 479.675 220.159 489.26] /Subtype /Link /A << /S /GoTo /D (subsection.4.3.6) >> >> endobj 131 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 466.126 212.905 475.711] /Subtype /Link /A << /S /GoTo /D (subsection.4.3.7) >> >> endobj 132 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 452.576 228.046 462.161] /Subtype /Link /A << /S /GoTo /D (subsection.4.3.8) >> >> endobj 133 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 436.818 256.53 448.612] /Subtype /Link /A << /S /GoTo /D (subsection.4.3.9) >> >> endobj 134 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 423.269 244.247 435.063] /Subtype /Link /A << /S /GoTo /D (subsection.4.3.10) >> >> endobj 135 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 409.72 240.014 421.514] /Subtype /Link /A << /S /GoTo /D (subsection.4.3.11) >> >> endobj 136 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 398.38 211.519 407.965] /Subtype /Link /A << /S /GoTo /D (subsection.4.3.12) >> >> endobj 137 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 382.621 277.137 394.415] /Subtype /Link /A << /S /GoTo /D (subsection.4.3.13) >> >> endobj 138 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 371.281 216.865 380.866] /Subtype /Link /A << /S /GoTo /D (subsection.4.3.14) >> >> endobj 139 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 357.732 248.991 367.317] /Subtype /Link /A << /S /GoTo /D (subsection.4.3.15) >> >> endobj 140 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 341.974 300.154 353.768] /Subtype /Link /A << /S /GoTo /D (section.4.4) >> >> endobj 141 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 328.425 212.959 340.219] /Subtype /Link /A << /S /GoTo /D (subsection.4.4.1) >> >> endobj 142 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 314.875 238.966 326.669] /Subtype /Link /A << /S /GoTo /D (subsection.4.4.2) >> >> endobj 143 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 301.326 252.297 313.12] /Subtype /Link /A << /S /GoTo /D (subsection.4.4.3) >> >> endobj 144 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 287.777 305.631 299.571] /Subtype /Link /A << /S /GoTo /D (subsection.4.4.4) >> >> endobj 145 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 276.437 252.537 286.022] /Subtype /Link /A << /S /GoTo /D (section.4.5) >> >> endobj 146 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 262.888 191.697 272.473] /Subtype /Link /A << /S /GoTo /D (subsection.4.5.1) >> >> endobj 147 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 249.338 177.145 258.923] /Subtype /Link /A << /S /GoTo /D (subsection.4.5.2) >> >> endobj 148 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 233.58 241.377 245.374] /Subtype /Link /A << /S /GoTo /D (subsection.4.5.3) >> >> endobj 149 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 222.24 206.239 231.825] /Subtype /Link /A << /S /GoTo /D (subsection.4.5.4) >> >> endobj 150 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 208.691 222.003 218.276] /Subtype /Link /A << /S /GoTo /D (subsection.4.5.5) >> >> endobj 151 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 192.933 260.424 204.727] /Subtype /Link /A << /S /GoTo /D (section.4.6) >> >> endobj 152 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 181.592 179.578 191.177] /Subtype /Link /A << /S /GoTo /D (subsection.4.6.1) >> >> endobj 153 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 165.834 185.032 177.628] /Subtype /Link /A << /S /GoTo /D (subsection.4.6.2) >> >> endobj 154 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 152.285 192.298 164.079] /Subtype /Link /A << /S /GoTo /D (subsection.4.6.3) >> >> endobj 155 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 138.736 243.81 150.53] /Subtype /Link /A << /S /GoTo /D (subsection.4.6.4) >> >> endobj 156 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 125.187 329.172 136.981] /Subtype /Link /A << /S /GoTo /D (section.4.7) >> >> endobj 157 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 113.846 219.548 123.431] /Subtype /Link /A << /S /GoTo /D (subsection.4.7.1) >> >> endobj 158 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 100.297 203.807 109.882] /Subtype /Link /A << /S /GoTo /D (subsection.4.7.2) >> >> endobj 163 0 obj << /D [161 0 R /XYZ 81 757.935 null] >> endobj 160 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R >> /ProcSet [ /PDF /Text ] >> endobj 258 0 obj << /Length 1265 /Filter /FlateDecode >> stream xKS8| C$y![QI=L\Ȕ.Jxd3얅: >DD(MOhGH(D"DRMkeHp} >~l^mmM8ԫ\kTC`ϫw|8 kO8zW]k8a p>6gNl9WY$ya&  ȧ)g`AP qw"Y8x)Fg0T.PRUiVXnڢ8U;\3eq&~R!K78k4i[-[?D܃ endstream endobj 257 0 obj << /Type /Page /Contents 258 0 R /Resources 256 0 R /MediaBox [0 0 595.276 841.89] /Parent 20 0 R /Annots [ 159 0 R 210 0 R 211 0 R 212 0 R 213 0 R 214 0 R 215 0 R 216 0 R 217 0 R 218 0 R 219 0 R 220 0 R 221 0 R 222 0 R 223 0 R 224 0 R 225 0 R 226 0 R 227 0 R 228 0 R 229 0 R 230 0 R 231 0 R 232 0 R 233 0 R 234 0 R 235 0 R 236 0 R 237 0 R 238 0 R 239 0 R 240 0 R 241 0 R 242 0 R 243 0 R 244 0 R 245 0 R 246 0 R 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R 253 0 R 254 0 R ] >> endobj 159 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 720.92 216.526 730.505] /Subtype /Link /A << /S /GoTo /D (subsection.4.7.3) >> >> endobj 210 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 707.371 200.785 716.956] /Subtype /Link /A << /S /GoTo /D (subsection.4.7.4) >> >> endobj 211 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 693.822 218.359 703.407] /Subtype /Link /A << /S /GoTo /D (subsection.4.7.5) >> >> endobj 212 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 680.273 216.297 689.858] /Subtype /Link /A << /S /GoTo /D (section.4.8) >> >> endobj 213 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 664.514 213.232 676.308] /Subtype /Link /A << /S /GoTo /D (subsection.4.8.1) >> >> endobj 214 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 650.965 212.73 662.759] /Subtype /Link /A << /S /GoTo /D (subsection.4.8.2) >> >> endobj 215 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 639.625 240.177 649.21] /Subtype /Link /A << /S /GoTo /D (subsection.4.8.3) >> >> endobj 216 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 626.076 262.595 635.661] /Subtype /Link /A << /S /GoTo /D (subsection.4.8.4) >> >> endobj 217 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 610.318 233.25 622.112] /Subtype /Link /A << /S /GoTo /D (subsection.4.8.5) >> >> endobj 218 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 596.768 336.503 608.562] /Subtype /Link /A << /S /GoTo /D (subsection.4.8.6) >> >> endobj 219 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 585.428 277.147 595.013] /Subtype /Link /A << /S /GoTo /D (subsection.4.8.7) >> >> endobj 220 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 569.67 228.941 581.464] /Subtype /Link /A << /S /GoTo /D (subsection.4.8.8) >> >> endobj 221 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 556.121 242.883 567.915] /Subtype /Link /A << /S /GoTo /D (subsection.4.8.9) >> >> endobj 222 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 544.693 182.937 554.366] /Subtype /Link /A << /S /GoTo /D (section.4.9) >> >> endobj 223 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 529.022 261.461 540.816] /Subtype /Link /A << /S /GoTo /D (subsection.4.9.1) >> >> endobj 224 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 515.473 242.119 527.267] /Subtype /Link /A << /S /GoTo /D (subsection.4.9.2) >> >> endobj 225 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 504.046 233.893 513.718] /Subtype /Link /A << /S /GoTo /D (subsection.4.9.3) >> >> endobj 226 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 490.497 253.289 500.169] /Subtype /Link /A << /S /GoTo /D (subsection.4.9.4) >> >> endobj 227 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 476.947 235.715 486.62] /Subtype /Link /A << /S /GoTo /D (subsection.4.9.5) >> >> endobj 228 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 461.276 214.355 473.07] /Subtype /Link /A << /S /GoTo /D (section.4.10) >> >> endobj 229 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 449.936 191.676 459.521] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.1) >> >> endobj 230 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 436.387 213.712 445.972] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.2) >> >> endobj 231 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 422.838 328.005 432.423] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.3) >> >> endobj 232 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 409.289 326.805 418.874] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.4) >> >> endobj 233 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 393.53 226.235 405.325] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.5) >> >> endobj 234 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 379.981 313.693 391.775] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.6) >> >> endobj 235 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 366.432 292.475 378.226] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.7) >> >> endobj 236 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 352.883 203.207 364.677] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.8) >> >> endobj 237 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 339.334 227.174 351.128] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.9) >> >> endobj 238 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 325.784 222.581 337.579] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.10) >> >> endobj 239 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 314.444 245.01 324.029] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.11) >> >> endobj 240 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 300.895 260.162 310.48] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.12) >> >> endobj 241 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [80.004 274.37 182.293 286.098] /Subtype /Link /A << /S /GoTo /D (chapter.5) >> >> endobj 242 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 260.679 261.296 272.473] /Subtype /Link /A << /S /GoTo /D (section.5.1) >> >> endobj 243 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 249.338 221.992 258.923] /Subtype /Link /A << /S /GoTo /D (subsection.5.1.1) >> >> endobj 244 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 235.789 226.825 245.374] /Subtype /Link /A << /S /GoTo /D (subsection.5.1.2) >> >> endobj 245 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 222.24 231.668 231.825] /Subtype /Link /A << /S /GoTo /D (subsection.5.1.3) >> >> endobj 246 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 208.691 211.694 218.276] /Subtype /Link /A << /S /GoTo /D (subsection.5.1.4) >> >> endobj 247 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 195.142 218.359 204.727] /Subtype /Link /A << /S /GoTo /D (subsection.5.1.5) >> >> endobj 248 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 181.592 270.482 191.177] /Subtype /Link /A << /S /GoTo /D (subsection.5.1.6) >> >> endobj 249 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 165.834 213.494 177.628] /Subtype /Link /A << /S /GoTo /D (subsection.5.1.7) >> >> endobj 250 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 154.494 201.221 164.079] /Subtype /Link /A << /S /GoTo /D (subsection.5.1.8) >> >> endobj 251 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 138.736 235.846 150.53] /Subtype /Link /A << /S /GoTo /D (section.5.2) >> >> endobj 252 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 127.396 242.577 136.981] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.1) >> >> endobj 253 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 113.759 263.195 123.431] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.2) >> >> endobj 254 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 100.21 226.835 109.882] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.3) >> >> endobj 259 0 obj << /D [257 0 R /XYZ 81 757.935 null] >> endobj 256 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R >> /ProcSet [ /PDF /Text ] >> endobj 355 0 obj << /Length 1158 /Filter /FlateDecode >> stream xr6z .Ņ/Xdƍ%Yd@DD"4Vy];C2 yos~EEL8F$\&hFƗ _U.LQ9y|J"Y=,uT.G?E'Tz]'$a j&Eke3 &ߘ*+Y^Wq{zqz>#kDFXn$Qti™c=NMnܖ 1u'<+[ )A((=(^@d/AH'é|p–&ϾtVf1ߛLL ZɁמą 5 8V*닚25{߈j,`4'rppp,m&[ШCu`Gg75EV?e5 t(^pd?lUjkz1cc<5.)%4“D܁ч1KyVbjIsfKI}?JYtr}[CS M&ăy2j)(Qߕ =xkmh.u1{NpJl>]yͻGfWJi'ndf6_|dPbċ֬C2/{}ҽ$ b~M21yd^*uX6> QG#X嫬Xި" F0,Q}WXkA:NHujX]½t]|&y)6q/2u'{^>rtmHK *ܭ\3%lxBvM<>) ,s,o_P&@HSj^/҂$2x]ngk0 ?6a~BGC !cԮmUYI#dlr0 ^{l% L@8l;/\<@黣=+y\( 1mye'˘"+ζDR/ O{)rDTt/&a9ooMgC{0urܻ% p#Q=O7 ]؈/C%j34+;UNСP}y0GY endstream endobj 354 0 obj << /Type /Page /Contents 355 0 R /Resources 353 0 R /MediaBox [0 0 595.276 841.89] /Parent 357 0 R /Annots [ 255 0 R 306 0 R 307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R 315 0 R 316 0 R 317 0 R 318 0 R 319 0 R 320 0 R 321 0 R 322 0 R 323 0 R 324 0 R 325 0 R 326 0 R 327 0 R 328 0 R 329 0 R 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R 344 0 R 345 0 R 346 0 R 347 0 R 348 0 R 349 0 R 350 0 R 351 0 R ] >> endobj 255 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 718.711 225.025 730.505] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.4) >> >> endobj 306 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 707.371 233.501 716.956] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.5) >> >> endobj 307 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 693.822 222.592 703.407] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.6) >> >> endobj 308 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 678.064 210.472 689.858] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.7) >> >> endobj 309 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 666.723 278.5 676.308] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.8) >> >> endobj 310 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 653.087 225.799 662.759] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.9) >> >> endobj 311 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 637.416 250.792 649.21] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.10) >> >> endobj 312 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 623.867 244.399 635.661] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.11) >> >> endobj 313 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 612.527 246.832 622.112] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.12) >> >> endobj 314 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 596.768 228.668 608.562] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.13) >> >> endobj 315 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 585.428 261.101 595.013] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.14) >> >> endobj 316 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 571.879 199.814 581.464] /Subtype /Link /A << /S /GoTo /D (section.5.3) >> >> endobj 317 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 558.33 225.025 567.915] /Subtype /Link /A << /S /GoTo /D (subsection.5.3.1) >> >> endobj 318 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 542.572 264.21 554.366] /Subtype /Link /A << /S /GoTo /D (subsection.5.3.2) >> >> endobj 319 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 529.022 221 540.816] /Subtype /Link /A << /S /GoTo /D (subsection.5.3.3) >> >> endobj 320 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 517.682 216.876 527.267] /Subtype /Link /A << /S /GoTo /D (subsection.5.3.4) >> >> endobj 321 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 501.924 256.061 513.718] /Subtype /Link /A << /S /GoTo /D (subsection.5.3.5) >> >> endobj 322 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 488.375 182.839 500.169] /Subtype /Link /A << /S /GoTo /D (section.5.4) >> >> endobj 323 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 474.826 237.745 486.62] /Subtype /Link /A << /S /GoTo /D (subsection.5.4.1) >> >> endobj 324 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 461.276 278.948 473.07] /Subtype /Link /A << /S /GoTo /D (subsection.5.4.2) >> >> endobj 325 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 447.727 241.814 459.521] /Subtype /Link /A << /S /GoTo /D (subsection.5.4.3) >> >> endobj 326 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 434.178 283.017 445.972] /Subtype /Link /A << /S /GoTo /D (subsection.5.4.4) >> >> endobj 327 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 420.629 235.857 432.423] /Subtype /Link /A << /S /GoTo /D (section.5.5) >> >> endobj 328 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 409.201 239.555 418.874] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.1) >> >> endobj 329 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 395.74 223.814 405.325] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.2) >> >> endobj 330 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 382.19 206.85 391.775] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.3) >> >> endobj 331 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 368.641 203.818 378.226] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.4) >> >> endobj 332 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 355.092 243.21 364.677] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.5) >> >> endobj 333 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 341.543 284.413 351.128] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.6) >> >> endobj 334 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 326.21 196.541 337.579] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.7) >> >> endobj 335 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 312.661 219.57 324.029] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.8) >> >> endobj 336 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 299.111 204.418 310.48] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.9) >> >> endobj 337 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 287.346 198.963 296.931] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.10) >> >> endobj 338 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 271.588 236.523 283.382] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.11) >> >> endobj 339 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 260.248 200.785 269.833] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.12) >> >> endobj 340 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 244.489 226.846 256.283] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.13) >> >> endobj 341 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 230.94 214.115 242.734] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.14) >> >> endobj 342 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 217.391 225.624 229.185] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.15) >> >> endobj 343 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 203.842 235.322 215.636] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.16) >> >> endobj 344 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 190.292 233.512 202.087] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.17) >> >> endobj 345 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 176.743 301.584 188.537] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.18) >> >> endobj 346 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 163.194 316.736 174.988] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.19) >> >> endobj 347 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 151.767 203.174 161.439] /Subtype /Link /A << /S /GoTo /D (section.5.6) >> >> endobj 348 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 138.217 228.385 147.89] /Subtype /Link /A << /S /GoTo /D (subsection.5.6.1) >> >> endobj 349 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 124.668 295.911 134.341] /Subtype /Link /A << /S /GoTo /D (subsection.5.6.2) >> >> endobj 350 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 111.119 286.202 120.791] /Subtype /Link /A << /S /GoTo /D (subsection.5.6.3) >> >> endobj 351 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 97.57 208.399 107.242] /Subtype /Link /A << /S /GoTo /D (subsection.5.6.4) >> >> endobj 356 0 obj << /D [354 0 R /XYZ 81 757.935 null] >> endobj 353 0 obj << /Font << /F43 30 0 R /F31 18 0 R >> /ProcSet [ /PDF /Text ] >> endobj 453 0 obj << /Length 1352 /Filter /FlateDecode >> stream x]s6+|i.p$ْKl' v^8`SNw}% ] th"c =zΑ_N!8"NHCOnFV#DH?suO]:WWc-T]s捐ux ܑ3燯WN灇:R/bjẓU9XUT_ BXL&v6>}^IUgr8]o\-ľGQ5 3(dP!w&(D1m+U%%vDaŶ DR.sSZdْ$-A Q 7~HNn:="]Q&P1)r%dZ $$:>'y&QfRʃsGӤHԖgv#fRXˎhdueO\+&FW?: mn#I c;G3 7u^bSnQOp?hÖ Ze-3'/rOus1B&_Fb%E.b3_R JVq'52YW5p1:`ŋr-*|_I\'cpk֧Ppm!z A>XZ܇a$+xQ6i_+PߣUr+6s1z a>;Y}nvm'*%Br^J[G`/PIG 4Y 5ť3@u($\}蠆^DYrlG.5<.G}  gquX?GOjP8 /9۶%= T3# Q~)D:Sd~AH!ljŕ"RMt77N$yP>N2J.4;C!eF1 5 WlhTI.1lhHį> dH,3=Vᴻf`{31SXLC31?3*KpwNHg"cQ"4dZ/? 5j`<F[GCi`'hgi^r}3H"C v&2^=zfN> endobj 352 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 720.833 204.145 730.505] /Subtype /Link /A << /S /GoTo /D (subsection.5.6.5) >> >> endobj 405 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 705.162 243.111 716.956] /Subtype /Link /A << /S /GoTo /D (section.5.7) >> >> endobj 406 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 693.734 212.458 703.407] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.1) >> >> endobj 407 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 680.185 253.072 689.858] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.2) >> >> endobj 408 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 666.636 212.73 676.308] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.3) >> >> endobj 409 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 653.087 215.032 662.759] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.4) >> >> endobj 410 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 639.538 258.243 649.21] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.5) >> >> endobj 411 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 625.988 232.334 635.661] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.6) >> >> endobj 412 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 610.318 224.872 622.112] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.7) >> >> endobj 413 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 596.768 224.217 608.562] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.8) >> >> endobj 414 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 585.341 222.014 595.013] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.9) >> >> endobj 415 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 569.67 223.235 581.464] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.10) >> >> endobj 416 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 558.243 216.57 567.915] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.11) >> >> endobj 417 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 544.693 217.181 554.366] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.12) >> >> endobj 418 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 529.022 323.511 540.816] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.13) >> >> endobj 419 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 517.595 292.333 527.267] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.14) >> >> endobj 420 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 501.924 284.718 513.718] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.15) >> >> endobj 421 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 490.584 266.751 500.169] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.16) >> >> endobj 422 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 477.035 348.569 486.62] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.17) >> >> endobj 423 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 463.485 353.75 473.07] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.18) >> >> endobj 424 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 449.849 396.164 459.521] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.19) >> >> endobj 425 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 434.178 298.998 445.972] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.20) >> >> endobj 426 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 420.629 369.546 432.423] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.21) >> >> endobj 427 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 407.08 249.864 418.874] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.22) >> >> endobj 428 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 395.74 267.831 405.325] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.23) >> >> endobj 429 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 382.19 282.984 391.775] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.24) >> >> endobj 430 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 368.641 237.919 378.226] /Subtype /Link /A << /S /GoTo /D (subsection.5.7.25) >> >> endobj 431 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 352.883 273.602 364.677] /Subtype /Link /A << /S /GoTo /D (section.5.8) >> >> endobj 432 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 339.334 275.937 351.128] /Subtype /Link /A << /S /GoTo /D (subsection.5.8.1) >> >> endobj 433 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [80.004 315.017 193.224 326.746] /Subtype /Link /A << /S /GoTo /D (chapter.6) >> >> endobj 434 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 303.535 372.994 313.12] /Subtype /Link /A << /S /GoTo /D (section.6.1) >> >> endobj 435 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 289.986 222.592 299.571] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.1) >> >> endobj 436 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 276.349 225.625 286.022] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.2) >> >> endobj 437 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 260.679 249.428 272.473] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.3) >> >> endobj 438 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 249.338 223.203 258.923] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.4) >> >> endobj 439 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 233.58 231.428 245.374] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.5) >> >> endobj 440 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 220.031 232.29 231.825] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.6) >> >> endobj 441 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 208.691 263.479 218.276] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.7) >> >> endobj 442 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 195.142 251.075 204.727] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.8) >> >> endobj 443 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 181.505 225.625 191.177] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.9) >> >> endobj 444 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 165.834 232.89 177.628] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.10) >> >> endobj 445 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 154.494 198.363 164.079] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.11) >> >> endobj 446 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 140.945 216.537 150.53] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.12) >> >> endobj 447 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 127.396 245.032 136.981] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.13) >> >> endobj 448 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 113.846 202.596 123.431] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.14) >> >> endobj 449 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 100.297 253.519 109.882] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.15) >> >> endobj 454 0 obj << /D [452 0 R /XYZ 81 757.935 null] >> endobj 451 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R >> /ProcSet [ /PDF /Text ] >> endobj 549 0 obj << /Length 1325 /Filter /FlateDecode >> stream x[s8)x3k;Io:Nq%fjCpۏs3&F s_ Cdzt|Ψ8؛y$D yHʽi}'#w7=p|G`HBi9B_DtIC'GޘJ [DB4sX4Ȍiy_!BtD_Ɖ:-RfuF2јyzälwsH"|Е,ƘgLLOJ <>Ȇg^q^ig6+%lJJ2=a%ñ6|A]f*Q#Y6L%1!<0іɑv0?_IiT#=Y\7G2UӋSCbM1/Eٴr}$3s|7*Hucv ,n ;{* R$~HxFZx}}OL&˲H H\DuLMH,]*+u䄈f|L+͡Qyp),xU4!a/  -P[^ >fY97#/"ɇ`B*A(nYYJj_`S4jnO/?7hGUiR^_?gÀ6qyڼiឹW j:ڳ?i% endstream endobj 548 0 obj << /Type /Page /Contents 549 0 R /Resources 547 0 R /MediaBox [0 0 595.276 841.89] /Parent 357 0 R /Annots [ 450 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R 526 0 R 527 0 R 528 0 R 529 0 R 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R 536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R ] >> endobj 450 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 720.92 205.836 730.505] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.16) >> >> endobj 501 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 707.371 206.239 716.956] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.17) >> >> endobj 502 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 691.613 265.966 703.407] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.18) >> >> endobj 503 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 680.185 243.646 689.858] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.19) >> >> endobj 504 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 666.723 263.533 676.308] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.20) >> >> endobj 505 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 653.087 429.579 662.759] /Subtype /Link /A << /S /GoTo /D (section.6.2) >> >> endobj 506 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 639.538 228.657 649.21] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.1) >> >> endobj 507 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 625.988 205.018 635.661] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.2) >> >> endobj 508 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 612.439 242.588 622.112] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.3) >> >> endobj 509 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 598.977 232.89 608.562] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.4) >> >> endobj 510 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 585.428 208.661 595.013] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.5) >> >> endobj 511 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 571.879 269.86 581.464] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.6) >> >> endobj 512 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 556.121 289.802 567.915] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.7) >> >> endobj 513 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 544.781 274.715 554.366] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.8) >> >> endobj 514 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 531.144 245.632 540.816] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.9) >> >> endobj 515 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 517.682 253.508 527.267] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.10) >> >> endobj 516 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 504.133 195.33 513.718] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.11) >> >> endobj 517 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 490.584 210.483 500.169] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.12) >> >> endobj 518 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [80.004 464.058 391.407 475.787] /Subtype /Link /A << /S /GoTo /D (chapter.7) >> >> endobj 519 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 452.576 239.795 462.161] /Subtype /Link /A << /S /GoTo /D (section.7.1) >> >> endobj 520 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 436.818 256.541 448.612] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.1) >> >> endobj 521 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 423.269 258.352 435.063] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.2) >> >> endobj 522 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 409.72 250.476 421.514] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.3) >> >> endobj 523 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 396.171 246.243 407.965] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.4) >> >> endobj 524 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 382.621 236.534 394.415] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.5) >> >> endobj 525 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 369.072 255.308 380.866] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.6) >> >> endobj 526 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 357.645 229.857 367.317] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.7) >> >> endobj 527 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 341.974 214.716 353.768] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.8) >> >> endobj 528 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 330.546 297.471 340.219] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.9) >> >> endobj 529 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 317.084 295.475 326.669] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.10) >> >> endobj 530 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 301.326 280.933 313.12] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.11) >> >> endobj 531 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 287.777 296.533 299.571] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.12) >> >> endobj 532 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 276.437 273.515 286.022] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.13) >> >> endobj 533 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 260.679 271.29 272.473] /Subtype /Link /A << /S /GoTo /D (section.7.2) >> >> endobj 534 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 247.129 262.279 258.923] /Subtype /Link /A << /S /GoTo /D (subsection.7.2.1) >> >> endobj 535 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 233.58 322.573 245.374] /Subtype /Link /A << /S /GoTo /D (subsection.7.2.2) >> >> endobj 536 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 220.031 306.668 231.825] /Subtype /Link /A << /S /GoTo /D (subsection.7.2.3) >> >> endobj 537 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 206.482 320.762 218.276] /Subtype /Link /A << /S /GoTo /D (subsection.7.2.4) >> >> endobj 538 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 192.933 319.824 204.727] /Subtype /Link /A << /S /GoTo /D (subsection.7.2.5) >> >> endobj 539 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 179.383 356.806 191.177] /Subtype /Link /A << /S /GoTo /D (subsection.7.2.6) >> >> endobj 540 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 165.834 327.766 177.628] /Subtype /Link /A << /S /GoTo /D (subsection.7.2.7) >> >> endobj 541 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 152.285 327.766 164.079] /Subtype /Link /A << /S /GoTo /D (subsection.7.2.8) >> >> endobj 542 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 138.736 357.144 150.53] /Subtype /Link /A << /S /GoTo /D (subsection.7.2.9) >> >> endobj 543 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 125.187 338.348 136.981] /Subtype /Link /A << /S /GoTo /D (subsection.7.2.10) >> >> endobj 544 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 111.637 338.348 123.431] /Subtype /Link /A << /S /GoTo /D (subsection.7.2.11) >> >> endobj 545 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 98.088 328.049 109.882] /Subtype /Link /A << /S /GoTo /D (subsection.7.2.12) >> >> endobj 550 0 obj << /D [548 0 R /XYZ 81 757.935 null] >> endobj 547 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R >> /ProcSet [ /PDF /Text ] >> endobj 646 0 obj << /Length 1421 /Filter /FlateDecode >> stream xMw8^&}-i')B8j-edefʯn UJ qe'WzuU@2O@r|I"AvI ,qMk2̓{$(̽tiZdYwf"f5z}}b R!o;}%E BR¾@Ax)+B?/Ц?& cjPs{ m0x0M-̩<`fo?H;I,hwT BWCw*05MHhŵπsΙxGkj0szF$7?\4Uq]pYp ^~s*BS 0S c:& nT}yN5Y6'}EKz0|? Skw%t1bli1tZtҊHWM{kHl_üDa,y5Ҫ xՑU ϓeʻ{$+xxoO!@m,ZIsʭTӿ1;,>Lts#wّ6$Gt-\Rͅ7#*|jͪ]u\]˻bo{aOl Hk3ʁza#;摇S╾h31 ۏb3+A>/KSٞZ|B +Q!.kl!^ %Ԯ#dcja8Dz)EUq%<#oDBgC[%ҾRڍVpWC"\cޞl,WNJA[XtHҘ8*|p\D*=8_1 H#ϋ6HR1 e{#=78ۀPIOէZZ9D()7NA#dC,B JZyl?󭭼c3p91F̖TťU|ŧenio"F4λ6U%N3 GADratɫvvWCy1uʑn F¬?b> endobj 546 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 718.711 339.668 730.505] /Subtype /Link /A << /S /GoTo /D (subsection.7.2.13) >> >> endobj 597 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 705.162 321.646 716.956] /Subtype /Link /A << /S /GoTo /D (subsection.7.2.14) >> >> endobj 598 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 691.613 322.268 703.407] /Subtype /Link /A << /S /GoTo /D (subsection.7.2.15) >> >> endobj 599 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 678.064 345.776 689.858] /Subtype /Link /A << /S /GoTo /D (subsection.7.2.16) >> >> endobj 600 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 664.514 336.809 676.308] /Subtype /Link /A << /S /GoTo /D (subsection.7.2.17) >> >> endobj 601 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 650.965 244.43 662.759] /Subtype /Link /A << /S /GoTo /D (section.7.3) >> >> endobj 602 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 639.625 229.694 649.21] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.1) >> >> endobj 603 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 623.867 197.741 635.661] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.2) >> >> endobj 604 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 610.318 216.374 622.112] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.3) >> >> endobj 605 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 598.977 221.37 608.562] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.4) >> >> endobj 606 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 585.428 236.523 595.013] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.5) >> >> endobj 607 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 571.879 235.17 581.464] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.6) >> >> endobj 608 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 558.33 237.581 567.915] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.7) >> >> endobj 609 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 544.781 220.181 554.366] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.8) >> >> endobj 610 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 531.144 281.991 540.816] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.9) >> >> endobj 611 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 517.682 294.722 527.267] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.10) >> >> endobj 612 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 504.133 188.665 513.718] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.11) >> >> endobj 613 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 488.375 219.559 500.169] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.12) >> >> endobj 614 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 477.035 205.018 486.62] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.13) >> >> endobj 615 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 463.485 322.507 473.07] /Subtype /Link /A << /S /GoTo /D (section.7.4) >> >> endobj 616 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 449.936 232.29 459.521] /Subtype /Link /A << /S /GoTo /D (subsection.7.4.1) >> >> endobj 617 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 436.387 206.839 445.972] /Subtype /Link /A << /S /GoTo /D (subsection.7.4.2) >> >> endobj 618 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 420.629 263.784 432.423] /Subtype /Link /A << /S /GoTo /D (subsection.7.4.3) >> >> endobj 619 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 409.289 259.541 418.874] /Subtype /Link /A << /S /GoTo /D (subsection.7.4.4) >> >> endobj 620 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 395.74 222.592 405.325] /Subtype /Link /A << /S /GoTo /D (subsection.7.4.5) >> >> endobj 621 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 382.19 232.529 391.775] /Subtype /Link /A << /S /GoTo /D (section.7.5) >> >> endobj 622 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 366.432 264.133 378.226] /Subtype /Link /A << /S /GoTo /D (subsection.7.5.1) >> >> endobj 623 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 355.005 271.06 364.677] /Subtype /Link /A << /S /GoTo /D (subsection.7.5.2) >> >> endobj 624 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 341.455 286.005 351.128] /Subtype /Link /A << /S /GoTo /D (subsection.7.5.3) >> >> endobj 625 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 325.784 215.326 337.579] /Subtype /Link /A << /S /GoTo /D (subsection.7.5.4) >> >> endobj 626 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 312.235 223.203 324.029] /Subtype /Link /A << /S /GoTo /D (subsection.7.5.5) >> >> endobj 627 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 300.895 212.119 310.48] /Subtype /Link /A << /S /GoTo /D (subsection.7.5.6) >> >> endobj 628 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 285.137 244.606 296.931] /Subtype /Link /A << /S /GoTo /D (subsection.7.5.7) >> >> endobj 629 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 271.588 264.602 283.382] /Subtype /Link /A << /S /GoTo /D (subsection.7.5.8) >> >> endobj 630 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 258.038 272.282 269.833] /Subtype /Link /A << /S /GoTo /D (subsection.7.5.9) >> >> endobj 631 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 244.489 301.365 256.283] /Subtype /Link /A << /S /GoTo /D (subsection.7.5.10) >> >> endobj 632 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 230.94 255.929 242.734] /Subtype /Link /A << /S /GoTo /D (subsection.7.5.11) >> >> endobj 633 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 217.391 238.366 229.185] /Subtype /Link /A << /S /GoTo /D (subsection.7.5.12) >> >> endobj 634 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 203.842 235.661 215.636] /Subtype /Link /A << /S /GoTo /D (subsection.7.5.13) >> >> endobj 635 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 190.292 236.555 202.087] /Subtype /Link /A << /S /GoTo /D (subsection.7.5.14) >> >> endobj 636 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 178.952 247.464 188.537] /Subtype /Link /A << /S /GoTo /D (subsection.7.5.15) >> >> endobj 637 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 165.403 203.817 174.988] /Subtype /Link /A << /S /GoTo /D (subsection.7.5.16) >> >> endobj 638 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 151.854 228.657 161.439] /Subtype /Link /A << /S /GoTo /D (subsection.7.5.17) >> >> endobj 639 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 136.096 284.958 147.89] /Subtype /Link /A << /S /GoTo /D (section.7.6) >> >> endobj 640 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 122.546 375.295 134.341] /Subtype /Link /A << /S /GoTo /D (subsection.7.6.1) >> >> endobj 641 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 108.997 293.391 120.791] /Subtype /Link /A << /S /GoTo /D (subsection.7.6.2) >> >> endobj 642 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 95.448 297.634 107.242] /Subtype /Link /A << /S /GoTo /D (subsection.7.6.3) >> >> endobj 647 0 obj << /D [645 0 R /XYZ 81 757.935 null] >> endobj 644 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F44 32 0 R >> /ProcSet [ /PDF /Text ] >> endobj 704 0 obj << /Length 470 /Filter /FlateDecode >> stream xMo0 g>MwjSU ɡihlvl!i(]e`} z4Ȋgd&1 @RnEKbaN(R~'JO4)?̢9pGALe0B1h4+yF a-V!Zi&cIE0ϯ$.\M]uK&lj1)'+$HF ~'_qR@)P0%3!5EXQT_ԍڋp({Go+1("L% (`EXMhc|{P3S;@)?I=lg>UU}wPej|;R: nL6uvZm8bd'biԮ5Tl^>]h,0: &>0SzOE\%.^e? endstream endobj 703 0 obj << /Type /Page /Contents 704 0 R /Resources 702 0 R /MediaBox [0 0 595.276 841.89] /Parent 357 0 R /Annots [ 643 0 R 695 0 R 696 0 R 697 0 R 698 0 R 699 0 R 700 0 R 701 0 R ] >> endobj 643 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 718.711 310.267 730.505] /Subtype /Link /A << /S /GoTo /D (subsection.7.6.4) >> >> endobj 695 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 705.162 243.646 716.956] /Subtype /Link /A << /S /GoTo /D (subsection.7.6.5) >> >> endobj 696 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 693.822 219.668 703.407] /Subtype /Link /A << /S /GoTo /D (subsection.7.6.6) >> >> endobj 697 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 678.064 197.741 689.858] /Subtype /Link /A << /S /GoTo /D (subsection.7.6.7) >> >> endobj 698 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 664.514 268.126 676.308] /Subtype /Link /A << /S /GoTo /D (subsection.7.6.8) >> >> endobj 699 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 650.965 262.257 662.759] /Subtype /Link /A << /S /GoTo /D (subsection.7.6.9) >> >> endobj 700 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.458 637.416 298.758 649.21] /Subtype /Link /A << /S /GoTo /D (subsection.7.6.10) >> >> endobj 701 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [96.367 626.076 278.565 635.661] /Subtype /Link /A << /S /GoTo /D (section.7.7) >> >> endobj 705 0 obj << /D [703 0 R /XYZ 81 757.935 null] >> endobj 702 0 obj << /Font << /F43 30 0 R /F31 18 0 R >> /ProcSet [ /PDF /Text ] >> endobj 720 0 obj << /Length 2175 /Filter /FlateDecode >> stream xڵXY7~Л[iW޼F2I^;M;9-Ju_ۇ'﷊UԚA&F&dY+*\] WW?|B$*^V\%:Wt\~P+IyP4K%2 WLFf2 TeGޏ[+5HOSk3X}0 KrG[,J*K/c)$N/kv-ԥ_^++<̝N62υNiZx{([M6d*";~3W?hBgNL3N,T=FHc헌3o2[,뮲mFj36`hkgNcX J HdJN"$m(ݮ7Q;p!c/L S= ?[6IA M͞F*֛8` `X!{ӟռbo*{60ElhhEL͖2qҬ̄n[;ߖkE%Bٜ\dW(((l7&<$:P4uwkxСhŤ7y3"ʂCQjB|7~ȣdڶyi}?S&e#r81^˙!wbJǏ1"eA9㾸 DhDs|~2b1" iLE)ikGSVLjKwrdZ XpeSS-qyXhgv eNB߸_>қO>.9Gېꜫ\ PRqv..khEGA?1  hknOCPEB` uchW AxY<ze{$bB JGA7"_^rE_ ؆ev )0Y 'xeP3䉔]\nj_:N {SVVU颏 jM*QM-! վ8JPaF?~ K:JE_ԋ^+^AN}9xAp,{w‰BITv]b }8z$"z\1.qrM_pLس 3I\pe~IMC H0xh'guGvGo_Pyw?Pew|B~\MT6Rkm!D [ ̶9<d0a [fZcIEs@;˜1B\\mt 9u !x3!$NYqu YHLha~doPײoDcNvR ` н ZWa骲R{`\@kѳ| `x]UѢTB,ݕ{|Đqxxd+R"ʎT D"9|fM)x`R{1D:)#H7* Dʹ,% E9Z9Y'N! j*RǰUplP6%F5*7 endstream endobj 719 0 obj << /Type /Page /Contents 720 0 R /Resources 718 0 R /MediaBox [0 0 595.276 841.89] /Parent 357 0 R /Annots [ 714 0 R 715 0 R 716 0 R 717 0 R ] >> endobj 714 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [183.792 306.244 213.657 315.916] /Subtype /Link /A << /S /GoTo /D (cite.Leon91) >> >> endobj 715 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [300.341 290.573 324.151 302.367] /Subtype /Link /A << /S /GoTo /D (subsection.4.8.5) >> >> endobj 716 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [196.217 238.585 224.882 248.17] /Subtype /Link /A << /S /GoTo /D (cite.MS83) >> >> endobj 717 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [318.354 238.585 345.197 248.17] /Subtype /Link /A << /S /GoTo /D (cite.HP03) >> >> endobj 721 0 obj << /D [719 0 R /XYZ 81 757.935 null] >> endobj 80 0 obj << /D [719 0 R /XYZ 81 733.028 null] >> endobj 722 0 obj << /D [719 0 R /XYZ 81 557.339 null] >> endobj 81 0 obj << /D [719 0 R /XYZ 81 557.339 null] >> endobj 723 0 obj << /D [719 0 R /XYZ 81 525.543 null] >> endobj 82 0 obj << /D [719 0 R /XYZ 81 221.172 null] >> endobj 724 0 obj << /D [719 0 R /XYZ 81 190.731 null] >> endobj 718 0 obj << /Font << /F29 17 0 R /F28 16 0 R /F31 18 0 R /F44 32 0 R /F14 33 0 R /F36 19 0 R >> /ProcSet [ /PDF /Text ] >> endobj 731 0 obj << /Length 1723 /Filter /FlateDecode >> stream xڥXoGRn{RRZmB+Hk{{`wfgωxgv7υ{K{WgޜM/C%L$Jx7 O Ke*n{$$ߓ7O/ABp$%HZpw'~A:/"eYzXǤM^ˡ5 glر!H"}*I eI~em*z3~ۣ۵M봬Q +페S7պ(͜Vzb_׎F􇾝4OT 9 D5Xt CdS[(:' h.h2~Qwݷ>PYaus#~9o)9ёJWwWxu0#t,Iq%@ 4 P>!`I tٰ|3tCwT ESwġx]QƣcEqNm:C5/ j_7`fXo,-zb9GVb7zN[x! NCEqyx%Ř+PM]n]2t4J:c{Yta=99a/ SYiubQ|9Yur֫L٪2Q#S`$j#G>ĕl[]6M{Kl#< #8 Ƞb64iݘdPv1x_uޥY:Ȳ<1j@n h B ( ^:煡Tu3dqDa7FrDnP6z~w=ws]SIPa!\;e6; m!,䳮F6:>oOټhM7cH}ˁ."eû4KIj{K JCEXD#kPR1Fb8Q1U.;7/:w6[gI0սi=0Ts"h)CaaZSZvn3vg{h fbK]]] 1] Y19 0cu\Q% EܛS0nMٟG,JBOI>P=> endobj 728 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [141.801 624.066 266.193 635.86] /Subtype/Link/A<> >> endobj 732 0 obj << /D [730 0 R /XYZ 81 757.935 null] >> endobj 83 0 obj << /D [730 0 R /XYZ 81 440.907 null] >> endobj 733 0 obj << /D [730 0 R /XYZ 81 411.125 null] >> endobj 729 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F44 32 0 R /F29 17 0 R /F28 16 0 R >> /ProcSet [ /PDF /Text ] >> endobj 737 0 obj << /Length 1494 /Filter /FlateDecode >> stream xڵXKs6WHAS5Nig2=$=$a** q}X13n6\~X,v?FFoohhܼy)IS.>X&$6c>g-4?6?PB#9DᇷAaBTSH$'A_3٣G/֚jqh*l߾~6WwEv)H7GX9h-ᾩKY?jՄ$D,K峸 SqƎ6lk [tEOXnO;M&?vR NgʘſzNu-M=5G>4Z]v=A~9k F7͔EwWg OϘ%3f)irN$KQ'u`E nuk[[7뺼7U!Rػ70㌑Nw_E 9< Xu]ͮE󥈥$f/ڟuM8QJX"bw*yڢusq^|Y1},4BDp愥b1;ƔAaY' Mf$e~pOkLSo)V/ x|_$8)gD qdQ%W$_~PZi-k74|@DfsArt@.nSRkɭ0!c2~1zd"Tf.R\Hey é.J3[h{i|YcEM<g=F`ɋU6S).bZV2N#~va'c $$a9a ]R8u-F3H.egKE&WR]Y\TTm C6񰠗ST#=Ά Jz29)Ɂwӎ'YqzzMh[; ) }4=-dE1B|$D3<ɶA8\|By/?h.v$/#NhvK."~{2.jo8NpTCEL%٠1_Cա5ٵ Dn u+R  ;۞tAboڭnfcU {uIp-OFc.\ȡ"|SN,d>-xs[BpV;}&Kwb+ŁOo nTA8h(뮀\g,G=kF į%BDK:>q>w?ޙP}gH'z#I|P%Bx;9 %7OA endstream endobj 736 0 obj << /Type /Page /Contents 737 0 R /Resources 735 0 R /MediaBox [0 0 595.276 841.89] /Parent 734 0 R >> endobj 738 0 obj << /D [736 0 R /XYZ 81 757.935 null] >> endobj 84 0 obj << /D [736 0 R /XYZ 81 733.028 null] >> endobj 739 0 obj << /D [736 0 R /XYZ 81 552.642 null] >> endobj 85 0 obj << /D [736 0 R /XYZ 81 283.541 null] >> endobj 740 0 obj << /D [736 0 R /XYZ 81 254.242 null] >> endobj 86 0 obj << /D [736 0 R /XYZ 81 254.242 null] >> endobj 741 0 obj << /D [736 0 R /XYZ 81 232.911 null] >> endobj 735 0 obj << /Font << /F29 17 0 R /F31 18 0 R /F14 33 0 R /F36 19 0 R /F61 742 0 R /F85 743 0 R >> /ProcSet [ /PDF /Text ] >> endobj 746 0 obj << /Length 2212 /Filter /FlateDecode >> stream x[ks6_'37򴳝m~١%Df% @Il {^88ptqgBD1]FT3(H "]>xXcmKח?#{DA;DFg؏g8"&QG 9ˆ=V1 )0G跳;c 2XC*JW 9^}X&Q0#bLAxo8ht V =T&`{ !>IHpw~<fo^c"}RZmKG7i4E+-"Y,. ϣu,ȗK)CBo!ϔ ReiTI3ڛے"08\:]*]$Y||y/Jς'z2+}l_KC `%Ex|]JO D/"Mdnn>]L|Kw?&Ica7֐.C% Ăx|S^XHw9 - 1퇉 c!#B[wuy!hgxLn&{NHH}s}eŢE), Gpۛ[ɐlnB _GPۛZA} e6-gA0/K&&23e[F᥸*: 'd2D 1S p7ɦrՍA<@^4zm &2!6!kzG`[էMKisPyBڽ-4sx!j*j p7JRDu2.jzq]Md+V 1~ U:|9l/7-y Cɖ);œ1^1fWby8+kZeُ-R&N>&s_Z4(!mĕN*~e+mۇlnאZ8h` SɯqHIULܠ6aPAԿoZ.|}g0F(UOK ҩOIk]d5Ӌn5Z&cCN!;C柀gmb6z_";J5וήaw{"$1ZǦ|s!3*U\bgYyHCe l2emнPW]lFv $\t&auc'ڞ(Z6^):U,Duw!-Pm[xԄ束E9> endobj 747 0 obj << /D [745 0 R /XYZ 81 757.935 null] >> endobj 87 0 obj << /D [745 0 R /XYZ 81 484.545 null] >> endobj 748 0 obj << /D [745 0 R /XYZ 81 463.013 null] >> endobj 88 0 obj << /D [745 0 R /XYZ 81 226.935 null] >> endobj 749 0 obj << /D [745 0 R /XYZ 81 205.403 null] >> endobj 744 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F14 33 0 R /F15 750 0 R >> /ProcSet [ /PDF /Text ] >> endobj 753 0 obj << /Length 2073 /Filter /FlateDecode >> stream x[S7篸GŊV߂IgiiR2Sƒ8c)6_%l$VV+A&{?:<4*ac[$ZjbLN.cAGoƚNƵO޽:@d4rD{d=&M 1hS&X읝K($9"Fh2O+UbULj ~ty[R9(R>GtSu&,kYЄkl@J(9+ZAp#]O?0Hg*)ud- wx^re%.!W\bŲlP#<*hxf0+rrmBx, [ b AX b[ `i b#uз@7>!B  WBeQsX17x/oqS5Da䔩)r5.ҥk>ޯfٯQdFzoáka2ҸUP[/eW4GA Vc̮vxl1*Hmp4O# 2?y^r6UQnc|?muh"N(xR/y"^VJ ;^"UM2e|]DJ*z3{!= [7qET- #ҿz0J"VKO\` Km.n|ڄu+KGyOhO)G_UCL.2*ע47%뱈0K_PR!ʌ.К\NǪz2FMy`mN[VmL\/Σ;8c4W%n0}4*wO,6yb7.Ȗ-DV"IZHQ6klHwܙ7?$Ҍ׮&8N76LfVhI[ff!:86 7ǓM;(P0TD*/57raPts Gg=Pane%gBL[3[/%9aw`fA !LaJ/,9an,Q0s e&gB5QjcȒlWʓF2 ǫ0ܤØvRs_lL@%؁ޛ3"ԉX#~0]߬Q6LD T>Qr\jSX`iN͚rǜ.V\$rnIhg g$%кVL4unӻ[OfHdu'z7KɁ>c)Ͷ=CtDt]|9*Wk&\a^vR?^!%u5 @A2-q ;k-2"TN݁9߱ ]RcWϨ~MA]e1xRnЙmh lN [;^تte>mHqwn CŪ,ʘ㹥:EH MEw"QυdYt`: UP)g!DwWRD2'/@P =D}(x5mD]Au33љF,^Eꈯgygՠت ]cP|ؠ2E7.>]9OHiAb|"SйN͵Z5(IJL=eʞSG,)- 漩ն:jDgBQU\P/\͂i~rlX endstream endobj 752 0 obj << /Type /Page /Contents 753 0 R /Resources 751 0 R /MediaBox [0 0 595.276 841.89] /Parent 734 0 R >> endobj 754 0 obj << /D [752 0 R /XYZ 81 757.935 null] >> endobj 89 0 obj << /D [752 0 R /XYZ 81 592.142 null] >> endobj 755 0 obj << /D [752 0 R /XYZ 81 570.61 null] >> endobj 90 0 obj << /D [752 0 R /XYZ 81 346.366 null] >> endobj 756 0 obj << /D [752 0 R /XYZ 81 322.622 null] >> endobj 91 0 obj << /D [752 0 R /XYZ 81 188.227 null] >> endobj 757 0 obj << /D [752 0 R /XYZ 81 166.695 null] >> endobj 751 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F88 758 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 762 0 obj << /Length 4375 /Filter /FlateDecode >> stream x\[8v~_;HULۙ$8k-Hbgs^@:CH\sfFg/WR aFO\˙QBޮfRKC\&x=}O0JR'9< ka;]P?l!%u!IvޮBd><+ײ6|ZuSE5n.k\&+1otk:X$IyOS>)1ixqJYc1C,@ CmOق-$Á$ z=\0F.{>1@cӗ=Loi9dƈb1+WQ* BE.6!PnMPpϣt#XHS T%S{/Wb#'p~yJ~YP,%"ext$MXzTr~.kqXgHR˼]9<϶J7yyӬ]+.6ޭom^6{7(vYmozO)7+k T?Tۏyk׶d P#:iMr a{btvN5%溵s"Xf=6ᬂH zåTIaGƠ3N$=AqF>gvJbGe*5ITZvҀv\( سQ Tv9ɸɱn'ߑ;2(4h*h#4yߛ`4GЩυ ZyhsqؓOylk^@28U{ȪhPYC`ܔRrtO P3eR? FDg௾ o߀F+\6EUOil psn?h tpu˳l~WXt*U8am"Y}G_Yx/+o^uu-]x̗Z8?&̤H0I*#?bVM{mI}׬Y\%YJ\PZt5./ 5\E& #%$iqj]H|Wm(-|@ ED(}ݹp|h#~_ٶpj?\G]:F; v=S&G;!ȊD#t x nG_ELEJ=KE@MR0Q4 8fU-yL Ю{1XWs#Ѓ6΂QY]N`/~)" B&jcBS>oD^]yL{v=JLwœRN6CMs뢼qM6yWކ^9QVa0Etx4|cI%8:n4|:N)n~ԧ mCf@۪,|u,>n|Q \a&Ҁ;aC.*G&n#eLPVMQР& '8#.?>Tq0Ƌs0҄Kt>my֜7JpcshBF~0_n c.LC&CBטʁ<)}>JlY9v.DCu5a#Ӟ Y;V盬A/8AlllZ"6wum,U].\9lw]:1?k`,sOxoA7KWwDp{OzW49zE-?UW"hs 5X0.h&bƶ(]a(ePж8P Rs* ^B <$tGDşD9ѬMs^iovYeU.;+wץ%'|o)X э @r9pfci) d 34P_ ixY,5`})D t2ot;u Rap wvpKDBUȚSXH kfݺCno2FpP)#I8h[u6רp5a3P1=ES)7r~5(iXG ~^wjc$LuMc_gDtujZE:I<qÙ0T 54DZ)Y |v|`I]fxk wLtc?$~b LxmVE~G|n`@|Vdd!R 2@G3Kt*W6 wV]rh݄ $ E_ S t:vX? ܖٚɒ78}QI #z=\Q[VkbvSMZO$*zeauVpIc@ITXt;(|r3e(-<i=aքs,rNljo :MB^/q9ru jqŮ;A\ydNx`z>m}!.n'b 2̧ΰo$}ٳ7k*0z{|Ȳ03M#Ӄ<ʾ}<XS4(BפzO9ҨD3 xD+M~#@dJVǽQ=X9#-'*g9c3-kJx/^ y-f$q?2g/ESF'_tG^Y/;9/:(Lq~_K8j 7_jP)8pXI9KO)QU~*((=U'jy<X<.o)_}8h%y1tXV-Ca-CG>&"ث]_o:fh*aa0;ڃ ~ x }Ufu6homn[М?<o՝˄/Gukbm 8[ܵM91ieSFxH;j| _2jKJxۋtΒe endstream endobj 761 0 obj << /Type /Page /Contents 762 0 R /Resources 760 0 R /MediaBox [0 0 595.276 841.89] /Parent 734 0 R /Annots [ 759 0 R ] >> endobj 759 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [117.768 538.538 481.395 549.651] /Subtype/Link/A<> >> endobj 763 0 obj << /D [761 0 R /XYZ 81 757.935 null] >> endobj 92 0 obj << /D [761 0 R /XYZ 81 597.537 null] >> endobj 764 0 obj << /D [761 0 R /XYZ 81 568.048 null] >> endobj 93 0 obj << /D [761 0 R /XYZ 81 387.406 null] >> endobj 767 0 obj << /D [761 0 R /XYZ 81 366.024 null] >> endobj 760 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F46 35 0 R /F15 750 0 R /F88 758 0 R /F36 19 0 R /F85 743 0 R /F29 17 0 R /F14 33 0 R /F64 765 0 R /F80 766 0 R /F61 742 0 R >> /ProcSet [ /PDF /Text ] >> endobj 770 0 obj << /Length 670 /Filter /FlateDecode >> stream x}UKo0 WhJ,v*lv/qo]8N׏,'j"%||H*@ zqʌ`d# KbN(ޒl-} dsw?_oh:p3wa+-`t0FRkRPj8_@ɵxZ@vW6xǺsٳU9=mc]ltxQ$' G@k51su;xԪTJy1f. הYU#`)wZ;7nhqUp24.)g*kZgeX }%5Ha;)s[$S{WVec(>V\L6lb:*>p uUS 8nvgWUs@Ɛ {07"n~ΨH7tjl9Y( ˿knjP*I(ñS|C)_0}vۘIDSL\;d,ƿirz endstream endobj 769 0 obj << /Type /Page /Contents 770 0 R /Resources 768 0 R /MediaBox [0 0 595.276 841.89] /Parent 734 0 R >> endobj 771 0 obj << /D [769 0 R /XYZ 81 757.935 null] >> endobj 94 0 obj << /D [769 0 R /XYZ 81 733.028 null] >> endobj 772 0 obj << /D [769 0 R /XYZ 81 712.273 null] >> endobj 768 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F14 33 0 R /F46 35 0 R >> /ProcSet [ /PDF /Text ] >> endobj 775 0 obj << /Length 2720 /Filter /FlateDecode >> stream xks6/;7ݸiM4ls"*I%Ϳ]DD3@< :g^p;hvi'׋ɛtո|w:NWM?_]E0H'3iIDW.sFe̳M%vDi/]z{ L~Ջ0EJ1oc$B`6jZlNPo"t}̚Q%<;M`&1.<"*Ϲ~tG/.wESfz9:O妅=!ARNV7Px'c*d ˖3< cf2cV"]$AΙySbsJn|ƈ]0T+t_A(NʪC*@~\E;M\Um%Q*rS*]sBj2Kpfu\~:jz1{A5;`wH 7oMh b ݂0cL MC3ݘQ<2i7zA[b]E`9/aOȊc5UމoI0?)IOv˸vz~_Xk%ngdO)CJ)9h[z:&BuH.¥1HxhP09(qjcc ȃކކK(*Il{dJ2=ŁVqzPq%̘DCU_[~h-RN0K!:T^K %GMW 9>aƧν]]* aL|sYX ,Ve"|ˊe Q7$!l4 nFf@uV;$& ۮ`y2AF& r jÄ[AoBCMoۃcOb)w ZMZgEQ՜Î]] (ƹhI '8CyJR1"7d@;4%~T>aC?g.boah[J4aL WpXzu`}A'`ω@P&6| '8^-y‰,KW8)08eҫBQ9`% >dyGјӐ$&n3L.]y!_wpW0/HL=BIF+Gz I84QM@ E :Vȷbl\:6K~DzbL$F?pdSݾ=9!iFZKw\ؽ+4+\Ď`eT㠟WrȚ샻/~K̐|.LB(8aDIo1m: z- OܽCX.//d IB' }4a**ǓWnUβ,hlND\|/:M545KrR=!LDRv铿OGc3$'%M'ˬ56>62o^a}AAMԀ/6ScOrHv]V'j=!I&4;2O$/AGcHgz1|%vѯ7aͻ!aNq<?ih=nap}44֔(1|x܆AL`͉LRW 1#DIhi̦3wKnD%DJs!׿Ԑx'{C<gY%5}$xewx;Cɚ줷Rg. X޺=Gn9Z=D#IivgX:m6NmgF`CXn-ͣ<>l)&\E /Zp:*8}6K:](P߻861+m@ܸeYEM9APrgS :z،8rZ!* p+nu|Ȳl듡}'OߕUM<2΅sBvPXm_ e2hK$`60"iZ< R P ) F&|0s[< oSD>0a5+=B7OPzVCL㠁6yFg8bܬ,n+;gBiKז{ ?:P7BNX:Fw0qR!sn2;+t]|K |rʧc>{o]8`I,+sd&Z&QYcsԡ4|teEXhgEG4S\X~ M8[q6Ѡfb&e_؈67 rc6"%]QCruHy @wоo~QCB6/k7/rj~@ ,g$0"[EgQwCJ,eVz>x)wlՉ$8?2w@P? " endstream endobj 774 0 obj << /Type /Page /Contents 775 0 R /Resources 773 0 R /MediaBox [0 0 595.276 841.89] /Parent 778 0 R >> endobj 776 0 obj << /D [774 0 R /XYZ 81 757.935 null] >> endobj 95 0 obj << /D [774 0 R /XYZ 81 733.028 null] >> endobj 777 0 obj << /D [774 0 R /XYZ 81 557.227 null] >> endobj 773 0 obj << /Font << /F29 17 0 R /F31 18 0 R /F46 35 0 R /F15 750 0 R /F44 32 0 R /F36 19 0 R >> /ProcSet [ /PDF /Text ] >> endobj 797 0 obj << /Length 3518 /Filter /FlateDecode >> stream xڭ[[۶~_>ExAΤnqgimLbC*Iu ƅwqEV7tB5+r苕:1\vwfMj{xo2xja.!~խ$KoLRp I 2IJSGDi=ksI_mnu.o sO]ѩ-Gy=O_}} ebT/CK͑nmr?Oؽ#'Z%\-f">%i}SbOWDED:aw8z- :[Rof -44z&,=R͈>o{.OVχ[Eb"}zi$cRU=7(-q07 J?]WZe(Y CLJקǽ7)֏9PmyTt$ص湟g)@3EY5` 15Y8dke!40FXv8h=ƶ) `w `J^]sڢ%p#h0&|P aWDzoi~ נ@ pTWF'j }a4 E!߯׶]x.nXP‰ @'G2/e~% `󎌁px2-Ζ+- 6Oa]g7-,zE=2W$ Cٵ1$K1{ O\J`b:3]JN<pifJ,9c^Y(æ:%zP+~~^  /Nt96v 1t0L ckCMW.DBτ[ƹ;Ő4Cעj_E=?`'2lu6 y.3[/ŮXno kj5I"! JeSh`wh(!6g{Fwc)(1pdah >`P\pDEm gҾ|Ȑ0]yJH&\'FL 2j7FRa 5&9]Ϡt"io6;5Jg#(> qfòh}P3VAX7TQBfAGR/ 8l=]T\+T q%BNVTg6CXncWgp|pӹ!ZLei >>؀-f)q|p#oG4`2G?T(T >mYC7x.Wb*: Y>ps}WgSCFts̜JԱn yZ䩉4YAP"ҳoh'썊9X\LjOI9_cNZf M[[j50,TuA8p}9,3d:϶{|65P9W-BRnfi@2rSGYGLwYYcFO]7/w1Ahp[7KE0!MxN*(EUy= n'X-j8Aΐ[m1zo4΃f]pٕKGHQ5+> ͮe,.Ѯ sb)$7 6MTVc'ZAIn^_<=^_wy8XlIJ')SwE [Al0K2ʒfꜰ5_x鼞 ᴒ&3Bm{ (sNyod{ 0Uq29_rgTu[KFx3KDQKojU9Ko].Nu&faT&Qwoj]Ōe~n<~xH 31WqMeAN yDߤxzuBRԳJ3{rPlqTd*bi <> endobj 779 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [184.817 664.514 192.264 676.308] /Subtype /Link /A << /S /GoTo /D (chapter.4) >> >> endobj 780 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [419.65 651.391 443.461 662.759] /Subtype /Link /A << /S /GoTo /D (subsection.3.1.1) >> >> endobj 781 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 637.416 107.447 649.21] /Subtype /Link /A << /S /GoTo /D (subsection.3.1.3) >> >> endobj 782 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [162.654 637.416 178.283 649.21] /Subtype /Link /A << /S /GoTo /D (section.3.2) >> >> endobj 783 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [199.561 637.416 215.19 649.21] /Subtype /Link /A << /S /GoTo /D (section.3.3) >> >> endobj 784 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [80.004 623.867 95.633 635.661] /Subtype /Link /A << /S /GoTo /D (section.3.4) >> >> endobj 785 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 610.318 107.447 622.112] /Subtype /Link /A << /S /GoTo /D (subsection.3.4.1) >> >> endobj 786 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [205.098 610.318 228.909 622.112] /Subtype /Link /A << /S /GoTo /D (subsection.3.4.2) >> >> endobj 787 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [277.986 610.318 293.615 622.112] /Subtype /Link /A << /S /GoTo /D (section.3.5) >> >> endobj 788 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [234.207 596.768 258.017 608.562] /Subtype /Link /A << /S /GoTo /D (subsection.3.5.1) >> >> endobj 789 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.935 596.768 372.746 608.562] /Subtype /Link /A << /S /GoTo /D (subsection.3.5.2) >> >> endobj 790 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [456.137 596.768 471.766 608.562] /Subtype /Link /A << /S /GoTo /D (section.3.6) >> >> endobj 791 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [295.116 583.219 318.927 595.013] /Subtype /Link /A << /S /GoTo /D (subsection.3.6.1) >> >> endobj 792 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [257.09 570.095 280.9 581.464] /Subtype /Link /A << /S /GoTo /D (subsection.3.6.2) >> >> endobj 793 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [333.3 570.095 357.111 581.464] /Subtype /Link /A << /S /GoTo /D (subsection.3.6.3) >> >> endobj 794 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [464.209 570.095 488.019 581.464] /Subtype /Link /A << /S /GoTo /D (subsection.3.6.4) >> >> endobj 798 0 obj << /D [796 0 R /XYZ 81 757.935 null] >> endobj 96 0 obj << /D [796 0 R /XYZ 81 553.91 null] >> endobj 799 0 obj << /D [796 0 R /XYZ 81 526.357 null] >> endobj 97 0 obj << /D [796 0 R /XYZ 81 526.357 null] >> endobj 800 0 obj << /D [796 0 R /XYZ 81 505.09 null] >> endobj 795 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F44 32 0 R /F46 35 0 R /F14 33 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R >> /ProcSet [ /PDF /Text ] >> endobj 803 0 obj << /Length 2745 /Filter /FlateDecode >> stream x[O_a;]S1FAhWM2E1mf>08BU.~Q}'.O>s)D#]D5:P0]FWϿM90Ux򷩶˟?Ə0(׍v:a/O~?!P4AĘHfbyru[xs3:zv=7AF(.Ne22H*#a*J/}?i:M<+n碼 _@#EiL@_"HP5 D5!CaAQ d6 _) I} ᑴGhDDG ԗeS _|>̱e ^S$("Do /H_npFR#:NRv1 g%E԰>%gJz椇`0.DJ#Ʊz1 TN1!0 q(ӈ0 cDm4`>tY N]s2 +Dvd~oq/E4ά8yW]g=(1wǑ@WA|OW{ FG7l f{NMxiFa0w2 })Pb:3lxڏVZ͹dc+d16ƑgCΩur!}%V$ի,KBU!_%DL1ǫ)Ϳfg7DZþa/S^[+e!'ɒeWvh΀sœH;U4A CE)./sA~1Iʵc4-+%Zay!^w7)t~6{ E|zbkC̔zўș7q 2xrش[U@p@a[Ter 7%cZZIl ת|v~LrIYXgִ Ny d,M+7rCz[^8ZHDer_O_1IvaH2:D";.ZNڹ,'ۨزM'd3E ܩIV?,(oRe wzO:Q!Yp"K.JiRTNn2Q\28j, +5S3rgWwv[R6S72R;X1GRA81+0͞bJ]ZE.cu]kg~0]B .G9r]jiGp;xw %\!l%,jQC3. AB#>L#Ij>~|]ͭyi eF`?A&p.[q.*)Y3eZKžZ7 $~`ޑѤ[i>f(" =uZߨo?gv,Ԟ6_h$+Sۄ.Cj.mT)U/ElgUĘ*dX.l޼}$n/q޽54Uv>/H-)Ko+|k2T`1o2Z$Alg\AkIHP)|Nmޏ !6Y'2IWqxuWdYF>ZO`&]kf/i/ &E_8%x#ڜ9Y|%V"t#fmA9"@ROvCkvBݦZqbjm6@bSxy)[ݡElͤovvf݅[A{.&u*C915 |Oʰ˶.;m0boh+{ihlh\q5̙tQܗCj^215yuj:RR`اnp;Sv7a|6l24lIE稙ƪOg!טW[lpr$)|uݻ8\QVl[ݮz^bZ7oT Ze7=,*͵Z<ďʵ_MW|Wgdo!JUuCQ}!jFA6Y%DbM$4,".gb}{76k;=Oh[qvń|ӹˉx]s*AX}v ˨{TΑrNqM۪6^8*cF6(MzDJT{X}ĪHDpV1EEgU#pTGvRWO<._?YZ%d S֣d H*3u|, ݟ bKyB)|"v}(]+8JI:yo6zxOiY6=1h rq/Ir{QdŲ+Ag JTo> endstream endobj 802 0 obj << /Type /Page /Contents 803 0 R /Resources 801 0 R /MediaBox [0 0 595.276 841.89] /Parent 778 0 R >> endobj 804 0 obj << /D [802 0 R /XYZ 81 757.935 null] >> endobj 98 0 obj << /D [802 0 R /XYZ 81 340.534 null] >> endobj 805 0 obj << /D [802 0 R /XYZ 81 319.002 null] >> endobj 801 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F85 743 0 R /F29 17 0 R /F61 742 0 R /F46 35 0 R >> /ProcSet [ /PDF /Text ] >> endobj 808 0 obj << /Length 2315 /Filter /FlateDecode >> stream xڽZoH?T޵&sf" h9-PmD/I7DdD$o~wQ8Kpog/p(D#mB51OP0\Γ9tڎ/y l w(pg8!&(,-Ϯq2g$1GriWdHɧ/AFRiw5 (EXuz>Of" Y6~*ŲX9(l-S-S?j0WBRt шܫPE!i]:^d8?]h$ERKDqG??i9rL. eOa$8WQk|RCr-hӡE$>6v}C% 1wI۳jJ0Ɠws=y@ !8R# F6Lvj\+ quq^rXqQt.ADS-b穡UvySf( c ەY.W1.ٟ8cZčM:lo5#>{ҳt7{0 ʛ.roC(U{e}ȹKŤi7ɔ50)a8p ~}-]TVvc^eȒǓJT{ ?Ud5+ˢ~RnqB2v@sXG>Xe,yQ#?ꙉQH1>-j:]H&k|Xd]+ŷl,@~|k1#4 A0d?=9m$܌бtk䃷"feC.lbv ԟ`]N }6@h] =0u\G/F5q@Ev+(2Wiy\#sBCAvA5 K4d#f@ ڿM:2{!: X>@"S،^A(  DǫCC6ȃ%>zyy9Q{@{< = GO dE^oY֐ 50c;W}F`nV.bY $V5v.sI;B+xbҤu-'(idV+*='<+MW0I j3WԮeo2O~-?ڏ"is9q_-6Ga^ $C^QV'.; "V|}xKUҀw^qt$CU^~XQ@ 2[ͳ9b}uŇrW3B'zic,Y2LCК7Q7큾c~ Uo&"Wb d8 uDnqO#B;;WВ`Cp!V\ Oa Q^[:,2tXT@޶(Pi `?;ažRU[ CBOCpRжzwyӝ kCYΒdn or[YxCXw+ Ua^UCaW[<[̷VmI;} ?su}_׆MY T{B"Xgyo $2$ClEKtm;{76h+jF!1bCc@&U > endobj 809 0 obj << /D [807 0 R /XYZ 81 757.935 null] >> endobj 99 0 obj << /D [807 0 R /XYZ 81 651.581 null] >> endobj 810 0 obj << /D [807 0 R /XYZ 81 630.049 null] >> endobj 100 0 obj << /D [807 0 R /XYZ 81 444.01 null] >> endobj 811 0 obj << /D [807 0 R /XYZ 81 411.867 null] >> endobj 101 0 obj << /D [807 0 R /XYZ 81 411.867 null] >> endobj 812 0 obj << /D [807 0 R /XYZ 81 393.308 null] >> endobj 806 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 816 0 obj << /Length 2089 /Filter /FlateDecode >> stream xZ[oF~ lM~"]tċbn/2m T3f,6@8gmq7g߾,S(Fjc)a"Yd_O*pD6\" Bg8,SM/Moz#4%f$bʌiM8q ͿoNxju-%L:&`%&_IЯ鋯"q:@g !r &'enQY`j)IM?k?. bC7rbcYIxU2Dm5_zT2Y ED`No)e 7r0c$K[^[YIh0g/V'}r>0Ԗ}gr_ۏPM|h5pjKws_l Wy^A 'Gr<չ%fquS˔4*hz*%t.V]F7@=_&C LbX&趨%\[͓W_KfQZ@pV= 6DNJ|zfS8ce鷳BC6z ;3hƓ:DCQ7ѝdcU^l[PAQ(0N M7'hJώ*i6+a -?R ;1O\ }xOw Κ8P/2^mA0m~:tz+jQWۢ6a.V~TK?̷iKtN61ه)PKE,ҞE~ C[_L^Y 5//eGѼ:'~`AqVOϔIuҖb> endobj 813 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [154.916 145.989 184.181 157.358] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.17) >> >> endobj 817 0 obj << /D [815 0 R /XYZ 81 757.935 null] >> endobj 102 0 obj << /D [815 0 R /XYZ 81 590.557 null] >> endobj 818 0 obj << /D [815 0 R /XYZ 81 558.414 null] >> endobj 103 0 obj << /D [815 0 R /XYZ 81 558.414 null] >> endobj 819 0 obj << /D [815 0 R /XYZ 81 539.855 null] >> endobj 104 0 obj << /D [815 0 R /XYZ 81 312.925 null] >> endobj 820 0 obj << /D [815 0 R /XYZ 81 294.174 null] >> endobj 105 0 obj << /D [815 0 R /XYZ 81 235.618 null] >> endobj 814 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F44 32 0 R /F46 35 0 R /F15 750 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 824 0 obj << /Length 2077 /Filter /FlateDecode >> stream xZms4_ᓏ&B/e99Ýl')%٧/f $[Z=jWG8✳H!.#yBb]Ưq3S8~?Ӷvu0`dq#) 6c(џG8"&),.pwG1&_~vx 2J;HpE)Ҹoۯf'x]/,!_6zh%Hc 8!#,jFZBctI@ZNi4""4ꋳ+?)d+J-}+&L*]/g'S_|,rOƉWMeRV"B^[}+a7̺(n$lmTݵi7gUiN>i6,6ajC!XزQ,@M7D@gbgPD0)Y߮\BCTL)+?7Or# nܿ!ds3p24I'9 ).0b%!$-3$I-S?xhO{ k GG~B`J&y:"ɷ*ÿm¹^MVH[ `+ endstream endobj 823 0 obj << /Type /Page /Contents 824 0 R /Resources 822 0 R /MediaBox [0 0 595.276 841.89] /Parent 778 0 R /Annots [ 821 0 R ] >> endobj 821 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [404.06 332.762 419.689 344.557] /Subtype /Link /A << /S /GoTo /D (section.4.2) >> >> endobj 825 0 obj << /D [823 0 R /XYZ 81 757.935 null] >> endobj 106 0 obj << /D [823 0 R /XYZ 81 317.036 null] >> endobj 826 0 obj << /D [823 0 R /XYZ 81 287.254 null] >> endobj 107 0 obj << /D [823 0 R /XYZ 81 287.254 null] >> endobj 827 0 obj << /D [823 0 R /XYZ 81 268.641 null] >> endobj 108 0 obj << /D [823 0 R /XYZ 81 147.216 null] >> endobj 828 0 obj << /D [823 0 R /XYZ 81 123.472 null] >> endobj 822 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R >> /ProcSet [ /PDF /Text ] >> endobj 833 0 obj << /Length 2424 /Filter /FlateDecode >> stream xڭZ[s~4fڙt<줩*[#"1iq0KlU1{A:+R33hCgr*AppLV>ާ|Vow%fư)Ƴ8Z\DJDY\k`wV^׶R%V vhYaXEj&D˜9 Envعfs );(exڔeNa@@_@Wx ըcj:!@3fGc8c EP {G|OGJEODE>F+xa#.i"1;C'7d&W99`JBQ8Mwz/\L448R;&'ܮl6y endstream endobj 832 0 obj << /Type /Page /Contents 833 0 R /Resources 831 0 R /MediaBox [0 0 595.276 841.89] /Parent 838 0 R /Annots [ 829 0 R 830 0 R ] >> endobj 829 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.254 459.331 188.065 470.7] /Subtype /Link /A << /S /GoTo /D (subsection.3.4.1) >> >> endobj 830 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [153.127 169.032 176.938 180.401] /Subtype /Link /A << /S /GoTo /D (subsection.3.4.2) >> >> endobj 834 0 obj << /D [832 0 R /XYZ 81 757.935 null] >> endobj 109 0 obj << /D [832 0 R /XYZ 81 634.741 null] >> endobj 835 0 obj << /D [832 0 R /XYZ 81 602.598 null] >> endobj 110 0 obj << /D [832 0 R /XYZ 81 602.598 null] >> endobj 836 0 obj << /D [832 0 R /XYZ 81 583.985 null] >> endobj 111 0 obj << /D [832 0 R /XYZ 81 342.317 null] >> endobj 837 0 obj << /D [832 0 R /XYZ 81 318.573 null] >> endobj 831 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F85 743 0 R /F29 17 0 R /F61 742 0 R /F46 35 0 R >> /ProcSet [ /PDF /Text ] >> endobj 841 0 obj << /Length 1977 /Filter /FlateDecode >> stream xڽZKs6Wprf,G2Lns#Qۃ%юf(ʑ8_"-~bw8^^r(D#6J(d:kqvpXKA02ظvt=TE#9} q@M1&PD#Y0_opF!_ 2BIyd`TZ#KX_'ɡ6 JbbU &;1&?, njldC&FDxQgف q̨mZ*&nݜ5Q*aŐ?nv?6wA秫Qp=!kO"~7 rγ:6ίk5X(%Dz m$, و9"̡I֗\D/ĭԢR#-:O$"JAb].G1Ki z;j*n 3ܕ a5]p0޾B' *)vRhmWp ^ķM] /rWiŊ7]D`+WT@\:.\WQKFtZoLĠxF#"}Z"FuqȘQ;K*?nځw3?[XW~!>i]HN&zLDly_;&pi,:@Rz˚\`(LEHGGxޢN 4-;@aX.jpg蚨iƃ5rpkIhׅ\/s/.: 㲓N!Aʕ$qڱ^bv<,?[tT訦e*JNBY)HT65 ey ?Q8;\6N~ r'F!DoI63W_[b?VI(.)ú. $=+]:D)ʢ[$?@=~$왵ɕP-HAlrV%ކ/ /ܭm޴̏? nF< AxmvཹK4l ;8qquiDZ3Kohmf)\!wQ-hʆm#Eƛ4<^E;w={mFؓٽAbmi 8s֥} v+ӿQDI( G6yql64UÜvgQŎ U'䁶閥 N}R.TKZ-;vቺzՙC|ygL 3[?SSvtU c,|}LEm,+Q~(\e.J˪΁_e^lgnaV~T>,},ظ׾ DkY=ĶBͩ;(MXyo\K`px o5s*}cpw_^M,V@Dk jdv&#cowIYRVHO:хiBGm4uZSA^+7r+ !a![ZƹKF mwJm!z xRrb ֭ˌ~93.3H AL!R d?՛v1s/K?[odӤX٤nVih+Q*ĉD .l,uF^ّD?B .au{l0f6me3KotmAB c&P;d۠A /!Er*ѵHA#Ԧw;@s$e|Ϊ ^UVGeywd[> endobj 842 0 obj << /D [840 0 R /XYZ 81 757.935 null] >> endobj 112 0 obj << /D [840 0 R /XYZ 81 674.003 null] >> endobj 843 0 obj << /D [840 0 R /XYZ 81 644.514 null] >> endobj 113 0 obj << /D [840 0 R /XYZ 81 644.514 null] >> endobj 844 0 obj << /D [840 0 R /XYZ 81 623.247 null] >> endobj 164 0 obj << /D [840 0 R /XYZ 81 411.64 null] >> endobj 845 0 obj << /D [840 0 R /XYZ 81 390.108 null] >> endobj 165 0 obj << /D [840 0 R /XYZ 81 188.301 null] >> endobj 846 0 obj << /D [840 0 R /XYZ 81 164.557 null] >> endobj 839 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R >> /ProcSet [ /PDF /Text ] >> endobj 849 0 obj << /Length 1461 /Filter /FlateDecode >> stream xڭXYoF~ׯ DzA F"p vD%ʕIكeӢ c|spdbD!I$T3D ,o \?=#IQ@ݡ)NHI(ETv9dɃ;LQH,,AFRYURQ"E72ʁx ](b>H'm"jLPA`5*S !THp+ =RXNÏ~<[Ͳz | ecvț7~.ۏ Q}@&^:# # #~yZ΀c)RKj;&mX| 6W֜Ϙ;X>EE<ő6)mrK(#$=tsRa1NowpLL7+bŏS;to$-!/[C*҇!xx&lO ?UbZf͏ǡm&˜2϶EYÃcœwH'pY7{OY1w^J{U2QOD"n +XǞN8"'Q{X8B)pr$_ڧ7a}qn/: Ŋ4# at#`_J+eq2aR3)(6T֋ )o d^.gb٤DzM߬ɮ3Ug,8#F1maH0?31fG6%S![$7!(C@a'?.*ӏC)RC] p{BK tz.u$j +13a>0u Shk8;cojCULJ:Dhu/n$HE.wҷ+h?YqfwBʿg׺V#yr"Z֏pI:8;3 $ R*W endstream endobj 848 0 obj << /Type /Page /Contents 849 0 R /Resources 847 0 R /MediaBox [0 0 595.276 841.89] /Parent 838 0 R >> endobj 850 0 obj << /D [848 0 R /XYZ 81 757.935 null] >> endobj 166 0 obj << /D [848 0 R /XYZ 81 534.986 null] >> endobj 851 0 obj << /D [848 0 R /XYZ 81 511.242 null] >> endobj 847 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R >> /ProcSet [ /PDF /Text ] >> endobj 855 0 obj << /Length 2423 /Filter /FlateDecode >> stream xZKsܸW|Ti`HTj-n*5K9䘤l+>lCJ)x 2GO$gi*cdD)mm>>kVkX>v'\FϿye&HGkmӫ%2^קJD3m(iO8N#`&04jJd" vVJ9JĮzʞL+7n@!Ml4uXG!I8gR Wf2<8^Lșmۗ7#MDܺ׮ڸ.t;WuUe&OL%a\VEtd&/WnޑAS# %LH'|JA dDF,jBWqK-XHƯ eNE!{)=o,:OPwtGk 7aYRyfL^Y,vm.L+g zɯ,dz{E y\A.~ߨ^mG;F2~'@EZC"Hd%b9*}Kwp%G>p˩.ٔ{wOU?0r!.`A` <~H75U #eP@լU:z{~C!.Z&fwcʚk?j La/ߏJ e6}( RCz-͹*Ǣ3amd}4x$5vF!.DBJ\`0 {.Zݻ)[2eN N o1\>8Շ_&a)k?oړuM N_l\*9X 4*#VA~w[-3~>:3ZS@!<.۔%<x1Nx4-Ѱ ~0bO F<CPM:ݕˁx|e0Z:puH6`9ղ~Ϯn4}-)3GHu N/m#kWuG@ׅs5\9c"vSO-T1~Ov`LuȆ*kۀP$óE`غ%0C]~NDwWx'`L ?62T*G"M"5.o 985n_Z D 폈m=aQ6⢨G[(ĺ>kآ: jK~E2lqpg*K0OnHwcT|N ?_%5u5zȉtmGO"9L'gMN@4|[\4|g*LGj'!"m〕7Wt˸Xfqn^L1)#q3Xϐ8a~xXx ]QuMC"x76'K?1~ (mQPŇSu}PsxP^$&/G'K _Bjod3׎/7[O򿱙.)s <{p}٥Sg$@$@FԾGT _tk87PXJea+r?= #c?L.0}>eԖm!pcN/)>zwJFWO$cKa%+29lOgo<' /p[݁S5˓H//R&IGPkcD3Oë8E C_em<$\TxSQ%{ZK@g=f 7f `H=D"jXztX?LuZbb-'^m;Z.K6KMfi?:$?S1zw"b U}0zm=Y{rzpx֐2 f2 P endstream endobj 854 0 obj << /Type /Page /Contents 855 0 R /Resources 853 0 R /MediaBox [0 0 595.276 841.89] /Parent 838 0 R /Annots [ 852 0 R ] >> endobj 852 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.595 500.131 188.042 511.925] /Subtype /Link /A << /S /GoTo /D (chapter.3) >> >> endobj 856 0 obj << /D [854 0 R /XYZ 81 757.935 null] >> endobj 167 0 obj << /D [854 0 R /XYZ 81 733.028 null] >> endobj 857 0 obj << /D [854 0 R /XYZ 81 557.227 null] >> endobj 853 0 obj << /Font << /F29 17 0 R /F31 18 0 R /F46 35 0 R /F44 32 0 R /F15 750 0 R /F36 19 0 R /F88 758 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 864 0 obj << /Length 3215 /Filter /FlateDecode >> stream xڽ]s]>J}qL2m'U1(Eݽ=|Maq߷{ >o?]|NYDL zE>f?_j>}/!n>};X!8xD+%ukd.. LB1 d҆V~ƙ٣(`g짋"Yib2@o7Yv쪤-KD1IZC.NАAk yVfF#7(I~?/$Oʸ.MJ~___5]țjl .aW.RGGƪjt4#1ȀACJ6 I)&4Oj!1yʀFI9ų8 %p' (B\ rjŎ" "iaI?T)M/!3aDkmb\fFN3`Ioaژfƫ)Vnf|eEb̸yvF9-XmfQ ӊ$czMK4r5 oͲ| 6ݩe10[VV&ɫ )F2ItUZqLG`UaO "dRN(34ٳ+KT4IWu`ޔfn͔6؍sM ܜx+a#H¼E@Łj',b'g" (כmUh&%-H<<Li{lG 6dą+-kFn$CrԜ3tA\*АcOx\X2;uAvR?n7&zW@gΟ$sQA1x@:vHqD_6d6gÂmb"G5$!f֎zd' &mo@C?o 8}?OuQj2@}=ycѭcae| hRV/zT'='hPikQ}Ț9Fw55|I o\;UݣZ=xb`BElhX`aE{Wy$>Go|S_脬$;9V+NuqBz'4'4L,!h{tUa["s^й& m^&U]mx#|Ͻ;^z 3~YHK(hn۸zr[V>R{sGA]+"Lszӏ'F=M+`EfwJxW0&m#d>, TѦ>o=.US* U%+ U0̗CJMGO֐5z #0)fE$ Xkƛ9⩮q$Hj0'5K3RA r/f礵n2̮4!oW:,ګW2yWKjJ4J۪w* tCTÕdXF5:֗ɲ--N_OL8]w<[cpa\E2\\ ҏ.J^OBlb*j3g]i1u$׶jrA&;ZwX4A?iB\Tv~k/e|8F.s4rh(zziGLG8Cg ]09͛\x B^("uٟTNjMu~ y掦loRG{ZPfv}̀ga@Iw~aG6!dtRqVI%␓ N1ZOb JO(xA]#PTŒUUt1 cxOɬ췼NUCa[SXnM7]R>5SSe(?uK ^!=x.aLf'zq}+Uuڸ,Ljp7sx*%hNJ'7M6'j\9Ug&rWf~WUCU*v0n)5q?d]8(/ENxEY ;[m\M ̿L(VA۝Z__{_D]czɦdeXE}.rpB*\CDhpV㬽-Qb{PMߨT XpC}Q%u\6(p j_C9PL1|d>,IU%+xRM*N(z㵎GCH0Mi--}nuێ@~2" w=9t훖_0M n% 3_HNމ_PV Pn1 XصK\ yE9Z0c YeOjB kݸ2ٗm x~ Y :iD DN@/r84;`'a"vo֦|DSՙ|}h[.akSchH0EY>U>o6>&m%;eխ:\;1ZTxRYpFv" twbŅ,yAif9<zs<{K e "쳈@J,v/YƏԃ?ķbWt2vq10/X ,Q4S8TqG& endstream endobj 863 0 obj << /Type /Page /Contents 864 0 R /Resources 862 0 R /MediaBox [0 0 595.276 841.89] /Parent 838 0 R /Annots [ 858 0 R 859 0 R 860 0 R 861 0 R ] >> endobj 858 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [153.095 463.266 176.906 475.06] /Subtype /Link /A << /S /GoTo /D (subsection.5.1.1) >> >> endobj 859 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [453.984 463.266 477.794 475.06] /Subtype /Link /A << /S /GoTo /D (subsection.4.3.4) >> >> endobj 860 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [241.184 178.194 256.813 189.988] /Subtype /Link /A << /S /GoTo /D (section.4.2) >> >> endobj 861 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [276.027 178.194 305.293 189.988] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.1) >> >> endobj 865 0 obj << /D [863 0 R /XYZ 81 757.935 null] >> endobj 862 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F15 750 0 R /F46 35 0 R /F88 758 0 R /F14 33 0 R /F44 32 0 R >> /ProcSet [ /PDF /Text ] >> endobj 902 0 obj << /Length 3094 /Filter /FlateDecode >> stream xڵks&Pyj!xl\|wer6)-Q6TH!",3 {5ݏJ1GhQ" 5nW:t<l}$,u73wzss&a(bH#F':G،%f$Vj}<+(&w%QPwu:-foTQ׿pG{|Ũa>55Ҳ,JLjyVV~lUTY%A u1.&GȘtu80|:0 }.Lu:sݻ'Z'48D|x NbwVB%ZZJ@Ko`m$ړ#DrC(E__n'R$}~8g/_UªoYZM{VQ2q1NR)9\l-U 90͓4;0au2a|O2Dj\UR_Ngq_ܵ3?1q"za,,gavz롁[eݔ.I%11 V]uorlxwѷD Cx$$zWiR[8bDe%~{DϚjAwaV.>P&nX6Y@(:k vD3hC J܄`vzs^Բ[m:j‰/b]f:Clʋ4~YU,rUK7Z$ ֟oyv;ս05{Ƅ л=H_hW9.j]o*؀@} _TC+8Drj8vjElG!p)A_; FnU;1+I.E%D4)`W|HV9[8Jv pIoe7Qիu:OK8>bo?'Ot'*jf5y]XY^gȒgYZ$O٘Q-00GG(2i.s׶\2ljW/hS^,dQ2xl<'0>Ljg48('v5A>:® Eˇt'"D;z*aCϟ?%58(u{ <5CA(_H뢨󽡘u0 _$ɾK!nɖ .q8ᙻWhXn M].k2YuZVn>a80lBп4b d*1B7 ^u>K>`0 {.0Vwl,ϖ묪t}"8%P%:Y#Ly#iSޡ<_a 5Po]lϝ/`4S`YxuL!m÷_6@]0*lyor>_5@/ú~&f(P{ͼyDe3@lU")tXO¦ i'h ^D6t/vܯ(d8ovՅ?% /l>7}$yL?[%#Z6E8'/S>+e/!J@4'xc}LW gуputi}K1K٫LzÓN= ' 6`Rkkts-r5郃{^,f ϵ_a1TڰR|?Cޝ\~9(lF[>`D pw" "a:q|Y,!h*(҆M}Xؗ+Em-$ivqkݒ]z᥺{ -o%F=IX#CGKo_Ntꣁ#8o? 1;v!pLX5 Ϗd`f ƳϠ>r.' sXuޯlq_~Hf2)g̳4xgŃ΄pb{;ݴ 68:#D?}(U2MۜQ-k+ֶ|{}<] +x9r\ ;ʕZp>M%ڽi%?~~k.Rmj> endobj 866 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.918 680.906 137.547 692.7] /Subtype /Link /A << /S /GoTo /D (section.4.1) >> >> endobj 867 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [161.195 680.906 176.824 692.7] /Subtype /Link /A << /S /GoTo /D (section.4.2) >> >> endobj 868 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [466.075 680.906 481.704 692.7] /Subtype /Link /A << /S /GoTo /D (section.4.3) >> >> endobj 869 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [154.936 654.233 178.747 665.602] /Subtype /Link /A << /S /GoTo /D (subsection.4.3.4) >> >> endobj 870 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [99.882 640.259 115.511 652.053] /Subtype /Link /A << /S /GoTo /D (section.4.4) >> >> endobj 871 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [492.826 640.259 516.636 652.053] /Subtype /Link /A << /S /GoTo /D (subsection.4.4.1) >> >> endobj 872 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [171.051 627.135 194.861 638.503] /Subtype /Link /A << /S /GoTo /D (subsection.4.4.2) >> >> endobj 873 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [322.349 627.135 346.16 638.503] /Subtype /Link /A << /S /GoTo /D (subsection.4.4.3) >> >> endobj 874 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [397.928 627.135 413.557 638.503] /Subtype /Link /A << /S /GoTo /D (section.4.5) >> >> endobj 875 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [116.633 599.611 132.262 611.405] /Subtype /Link /A << /S /GoTo /D (section.4.6) >> >> endobj 876 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [418.367 599.611 433.996 611.405] /Subtype /Link /A << /S /GoTo /D (section.4.7) >> >> endobj 877 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [444.266 586.062 468.076 597.856] /Subtype /Link /A << /S /GoTo /D (subsection.4.7.1) >> >> endobj 878 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 572.938 107.447 584.307] /Subtype /Link /A << /S /GoTo /D (subsection.4.7.2) >> >> endobj 879 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [187.614 572.938 211.425 584.307] /Subtype /Link /A << /S /GoTo /D (subsection.4.7.3) >> >> endobj 880 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [269.337 572.938 293.148 584.307] /Subtype /Link /A << /S /GoTo /D (subsection.4.7.4) >> >> endobj 881 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.751 572.938 391.561 584.307] /Subtype /Link /A << /S /GoTo /D (subsection.4.7.5) >> >> endobj 882 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [438.36 572.938 453.988 584.307] /Subtype /Link /A << /S /GoTo /D (section.4.8) >> >> endobj 883 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [379.536 558.963 403.347 570.757] /Subtype /Link /A << /S /GoTo /D (subsection.4.8.1) >> >> endobj 884 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [475.647 558.963 499.457 570.757] /Subtype /Link /A << /S /GoTo /D (subsection.4.8.2) >> >> endobj 885 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [170.089 545.414 193.9 557.208] /Subtype /Link /A << /S /GoTo /D (subsection.4.8.3) >> >> endobj 886 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [241.821 545.414 257.45 557.208] /Subtype /Link /A << /S /GoTo /D (section.4.9) >> >> endobj 887 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [231.19 532.29 255.001 543.659] /Subtype /Link /A << /S /GoTo /D (subsection.4.9.2) >> >> endobj 888 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.372 532.29 387.182 543.659] /Subtype /Link /A << /S /GoTo /D (subsection.4.9.3) >> >> endobj 889 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [495.553 532.29 519.364 543.659] /Subtype /Link /A << /S /GoTo /D (subsection.4.9.5) >> >> endobj 890 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [223.489 518.741 247.3 530.11] /Subtype /Link /A << /S /GoTo /D (subsection.4.9.4) >> >> endobj 891 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [297.755 518.741 318.839 530.11] /Subtype /Link /A << /S /GoTo /D (section.4.10) >> >> endobj 892 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.691 504.767 189.956 516.561] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.1) >> >> endobj 893 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [262.036 504.767 291.301 516.561] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.2) >> >> endobj 894 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.254 504.767 381.519 516.561] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.8) >> >> endobj 895 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [470.29 504.767 499.555 516.561] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.9) >> >> endobj 896 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.465 491.217 194.185 503.011] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.10) >> >> endobj 897 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [262.761 491.217 270.208 503.011] /Subtype /Link /A << /S /GoTo /D (chapter.5) >> >> endobj 898 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [290.971 491.217 298.418 503.011] /Subtype /Link /A << /S /GoTo /D (chapter.6) >> >> endobj 899 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [154.995 95.448 178.806 107.242] /Subtype /Link /A << /S /GoTo /D (subsection.4.4.1) >> >> endobj 903 0 obj << /D [901 0 R /XYZ 81 757.935 null] >> endobj 168 0 obj << /D [901 0 R /XYZ 81 462.2 null] >> endobj 904 0 obj << /D [901 0 R /XYZ 81 432.419 null] >> endobj 169 0 obj << /D [901 0 R /XYZ 81 432.419 null] >> endobj 900 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F46 35 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 910 0 obj << /Length 2260 /Filter /FlateDecode >> stream xZ[s6~%c#N6vn>)#QRR=4);xd s9.ɛ]x-Eb3%ӄ[ueH&Tr=In7?$M{dv{0Q̏0׍ ;@ $#YR JpPj=DQ\.麜˥We*S_>q5)B+ 媞WBq>EU>)+?|~>|?D>}ahZտӪF@v/%D ~V5㊦YY䵯ޱ_|-ź}zןzU!#^p=w']oj#!r I(4Av۝#z/b=3 ?"ZdxqvsK  0HXfy` Jme.ɉ=|/AWUX}K J5lحpM4Xn3# <-?5'Ax1 /~|/BԄY~kN 2[PeTo8꽈Dٍ= w'kb^,rx*`aXL=~_̫nV޵iU/ܕ'.&5j٢X.4x>f414 ܝcXKuѿ~PEpx4HGLK;j|D.ta m0-WԗղݐpT4|l{ tR:ჵUc lҺބlfGvĵ&鳆^l]kƀ-i\3x1WT]M"MY5uf8,ҿ6EG9gܸ:wr wK"W;\pd@H]Ix 6.%`2_ZٯDZ]=o{vqȪ ;kkg/-чVM jyG؃Gmy]1oce;d."lnnAKg+{TʟmбN!QC] D򀽤0-{mhZKmr` S젥(+^c@AFFik4D\)|SW1T">BnV4óհ0MزqNim1Q3{<SOLPsDHU,hhQ> endobj 905 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [492.826 596.798 516.636 608.592] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.1) >> >> endobj 906 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 412.938 107.447 424.307] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.3) >> >> endobj 907 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [430.497 160.907 454.308 172.701] /Subtype /Link /A << /S /GoTo /D (subsection.4.2.4) >> >> endobj 911 0 obj << /D [909 0 R /XYZ 81 757.935 null] >> endobj 170 0 obj << /D [909 0 R /XYZ 81 688.976 null] >> endobj 912 0 obj << /D [909 0 R /XYZ 81 659.195 null] >> endobj 171 0 obj << /D [909 0 R /XYZ 81 659.195 null] >> endobj 172 0 obj << /D [909 0 R /XYZ 81 491.379 null] >> endobj 173 0 obj << /D [909 0 R /XYZ 81 307.519 null] >> endobj 908 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F44 32 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R >> /ProcSet [ /PDF /Text ] >> endobj 917 0 obj << /Length 1969 /Filter /FlateDecode >> stream xڽYnF}W~H_@NA}p (Dl7Y.IZ6-e/qplq6xsYQe@5k(a"-#F i{u9F 6n$DFm.V43 ph1"q͂zpq`Čkۛ #D ~wx 2JHpRqK_&!59 A ҘOK$ Ȕ\?9w-:Qv}E FDiךtG@ z)2x3Px F3FsnrH`s:rDw #\gbB0_刊aY8M){PR n[ͩvL(ܑwe~7KaX`7@ Lt9h:M$7M%"]aBR%D WP /Q$p&P T¦&jBNb3mrQ.q60MkVqw=OQ2Y4-3H,/0g-!'EEl8u@Œ#I#znB쿉w$ &$ﱵ ueu~CWV]Z"٫: '~DẀb'MBqSdwcTH9,'qoW?<\^֨%nX1JUqUM:"bx/F`\1w֘lH5`W!΢{o][K~&6P H@&R0KZL|r6[z]ϊ(!ZUwi߃Yu#jȾGʢϛ Gph$Q1%֏G(ԇB['a|: 9HKrR'G߻Cr h/U".쑵OQFmɧowA!?&El뮮UZFm{B3^2epGp7噼t&]WqI<|~~TJœ2K1r,-W'%#4N+4/ 晐 ca>/VSBۊնVU*MJe^4]2͠(!ÿm{/oh$w ^^ALm':bS޾΍O iOhUPWyB;^:hO`2Umyz݆3m٠ҏ|"?>!h*xZd7ሖ:p=*J7UUxz\īE\HxjO΅){f^`$;z% Ja[hXùVc,!so6Z r7f7`ޝ'b$R\bu-qm_/ǵ>Ge9RR!. @<'-z(҄I| 1xU}iя2 s)>|t"L?jbXeyrţ\Sh7ZW`2=,W; endstream endobj 916 0 obj << /Type /Page /Contents 917 0 R /Resources 915 0 R /MediaBox [0 0 595.276 841.89] /Parent 913 0 R /Annots [ 914 0 R ] >> endobj 914 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [315.349 569.266 339.16 581.06] /Subtype /Link /A << /S /GoTo /D (subsection.4.2.3) >> >> endobj 918 0 obj << /D [916 0 R /XYZ 81 757.935 null] >> endobj 174 0 obj << /D [916 0 R /XYZ 81 675.23 null] >> endobj 919 0 obj << /D [916 0 R /XYZ 81 653.752 null] >> endobj 175 0 obj << /D [916 0 R /XYZ 81 343.068 null] >> endobj 920 0 obj << /D [916 0 R /XYZ 81 313.579 null] >> endobj 176 0 obj << /D [916 0 R /XYZ 81 313.579 null] >> endobj 921 0 obj << /D [916 0 R /XYZ 81 292.366 null] >> endobj 915 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R >> /ProcSet [ /PDF /Text ] >> endobj 924 0 obj << /Length 1880 /Filter /FlateDecode >> stream xZ[o6~ϯ[mfyl؀-h"3V$CQJX E;?]/Ϟ,P(Fۀj}(a"\W~+ XE ,IZžt Q'jF, V*,.|IEfnW}I8%}VM紥kcHzZj]ͼtg~|;-*>D"4KޡoM ,! ҍ`Ej4@,F͗3GtmƕwMqH,A ͋ Madj;1i įNǦin{|M"&y4$;g{08Y~%$B\O)n\(;RCN5pnoخ7^i9pU*3G@x]ͩ@\I4Ѡvni{.•ww I'?h3ڣ '觳~6#'1Ux> om~}Բ{(|]+>8H1v]6Nc5mmE[>@vzlgfm]Znsfl~ M}M-Ir]' wf%^4x̽;i 6\r'dZ dɢϑKŎ !Q\@2DIrG9/2΍)M.2]7@+{zUPɂ, ~1J.&ඡz 8VN%ESXTJHA= Îչ<7E4 l>׋+ϵ..^:z:&7d- Tɗv8}fUoSjjom|4t5꺆p 4(zn[t:u P9DCueCv)9MdD+{6vD > endobj 925 0 obj << /D [923 0 R /XYZ 81 757.935 null] >> endobj 177 0 obj << /D [923 0 R /XYZ 81 733.028 null] >> endobj 926 0 obj << /D [923 0 R /XYZ 81 714.484 null] >> endobj 178 0 obj << /D [923 0 R /XYZ 81 553.886 null] >> endobj 927 0 obj << /D [923 0 R /XYZ 81 532.354 null] >> endobj 179 0 obj << /D [923 0 R /XYZ 81 394.161 null] >> endobj 928 0 obj << /D [923 0 R /XYZ 81 372.628 null] >> endobj 180 0 obj << /D [923 0 R /XYZ 81 147.554 null] >> endobj 929 0 obj << /D [923 0 R /XYZ 81 123.81 null] >> endobj 922 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R >> /ProcSet [ /PDF /Text ] >> endobj 934 0 obj << /Length 3066 /Filter /FlateDecode >> stream xZ[ܶ~_1@EgE5HǍN^6 T;U=#%msnAQ(Qt񰠋W_X͂mUL׋גFcrmu/ FIB7 ];GHtEJ0ZGH )ݤןW|\g5bJX=f*7+1sU5$bOƅ!I7&n5Su[r}#c}D9lcVYgYwi([a5ra phdXy6ŪK$*(}n]t캪yڍWS=g5?H)1xDSJ7V鸎{Tn?.ONrdq VR:}i47CqƵ"&/t\vvYN)7!O`W`#m p].C Ntbj`xaHVeF'˕-+8P! %BEoZI1γ,>muE,]$t[#L%߼xŀG` Z$b5aA4v.߁-n|CZCNo~OwOlpC D5АSv]@2Ɍ^BeBq>L1@Sa"oha|Hv}_r +UwKĖ=o,1ׁ/TtsI .# 梬%_2B zʵ&/0%WMlSZگ嚫cu@z>W^%{lA>qEɵlbk%WnޯeiH y4jcx>0;5niugm=SlS_6?|n\aꢒ2C {=>{*\$!DümøSJ'ȳF]ĐH"aK 񳗝s I.w̉44Ch3y ;r"EӔ(qY^6%g0nv|x6z\ A'{dE| - <cW=,?Z0Js~PV(cz+DOXl.n`?IpJEha-`~a뷁"IX;uV|i1IbJ%&VQ ^A@bІP0Nףˏ  ܐ h2\:SG1Z A(,drtWcCE ">TW})Fũ$X.:BCtwT-vX~:`n *(?;)/rʞl%+ۉW,PS\D.wz*kzUB{E&ҳVA Ly.SB{l-&4B ˽W%ѩ/ߦOOprG8R=dz;qʢ*]u0ц4_AIXGޒaOhպvyl8lJLXU :ޠv,2 |ʛGW=|syݤEX.\iKړ %M!2x8/Aޭ–x5S˹ViCӣg9|֚n@PqWMNl8c 8hF4sKfʺ ;ꠓC nĦ*w2MWZ`e*2i!驶=됽2u/8G Ck`--)|u=x0&rh"!>AkhcZr./ۯo8Hb.}^YeOY{կA6͊sQs3܍zrP5]杝IktaYpT˒kIOLc1ʭ6 "h >]ȡB8ĪS<@w;_e)]ۆmM?&JaUZ8B>y{@ ֙Sgeܵrs RDaoˇuх20:WҳRQh'R$Z&@"P E Ap6{s!1sθpe# |Y[dKqFP9_0?}/\%Prrq v4-‡pr7J~l_0Cf:g 8\6Czew[-[|dx|qf #B_$?AN2[6\q<9Ք?e]-we1~=.ϗd bʈ$4U+e˲K0J0D+~m־8`g3=[2PE|S8HgG9\}B=݇KDڋc }Q}^]'DhΧ`F(7#.ݗzSax(QB}'^Z T6LuUm0`Z\܇v#>iPN#!waiѶx 8(!BA5뉂=٫z:-"(& bK<Y.(9RJb&"Iʹprk*9k(S4v_%2V/&Ww4xd1~`ޚWKf{wB$'; hs,u0 eYifEkbݗυFtBA$U_̞ZCbƦW7=d aC@M*BJ3M~mߖEtʟXΐp]֭'':_ǐ}2}؄㮏=)@+v8饿* pʏ.9`L&9~}+㾭ux#=Z1]cܔg>θ>g_ t endstream endobj 933 0 obj << /Type /Page /Contents 934 0 R /Resources 932 0 R /MediaBox [0 0 595.276 841.89] /Parent 913 0 R /Annots [ 930 0 R 931 0 R ] >> endobj 930 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [432.025 379.65 458.869 389.236] /Subtype /Link /A << /S /GoTo /D (cite.HP03) >> >> endobj 931 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.618 131.421 376.428 144.322] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.1) >> >> endobj 935 0 obj << /D [933 0 R /XYZ 81 757.935 null] >> endobj 181 0 obj << /D [933 0 R /XYZ 81 537.603 null] >> endobj 936 0 obj << /D [933 0 R /XYZ 81 516.07 null] >> endobj 182 0 obj << /D [933 0 R /XYZ 81 224.202 null] >> endobj 937 0 obj << /D [933 0 R /XYZ 81 202.669 null] >> endobj 932 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F29 17 0 R /F61 742 0 R /F14 33 0 R /F15 750 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 943 0 obj << /Length 2128 /Filter /FlateDecode >> stream xڽY[oD~ﯰHf~݋ !&µl73qbc{98p۫9".GJ(dnɛߧO~*~a:O~ _Cn]-r_\|w}Mw7{E,@w!Uy57wÍO7]lT]a0GHN]Ah.SIjZ9?w\"CbZPsM*T:?`A=ށvqT=9n͚J}k{^ 1qRL)H1|%E1jI&xE]@)0G i?HoTGZcWdlzrZX hނe qv# ; cI5W5]͇6:kDBWk[WaՍYn-}( Z2![0Vr]d 25XNH Prx$^M  AO&"\=Dv295)û?c31/sjt [(YqY6(uu TD#ϫ1o3_[zSuW^ɪk鯋<+$ 4L|bQExS>e2<}Y}(΋!ϳZc+yJ f~j{^°.ǸL`gIˊ@t\{K@v7uP c$صIs8UĘm/Yho{(&g7b77%]> endobj 938 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [130.754 520.877 160.019 532.671] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.14) >> >> endobj 939 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [452.741 507.328 476.552 519.122] /Subtype /Link /A << /S /GoTo /D (subsection.4.3.9) >> >> endobj 944 0 obj << /D [942 0 R /XYZ 81 757.935 null] >> endobj 183 0 obj << /D [942 0 R /XYZ 81 599.743 null] >> endobj 945 0 obj << /D [942 0 R /XYZ 81 578.21 null] >> endobj 184 0 obj << /D [942 0 R /XYZ 81 362.855 null] >> endobj 946 0 obj << /D [942 0 R /XYZ 81 339.111 null] >> endobj 185 0 obj << /D [942 0 R /XYZ 81 153.066 null] >> endobj 947 0 obj << /D [942 0 R /XYZ 81 129.322 null] >> endobj 941 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F46 35 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R >> /ProcSet [ /PDF /Text ] >> endobj 950 0 obj << /Length 1951 /Filter /FlateDecode >> stream xZKs6WpRS N:8^$n{5--Qgd$]L 4%X/`R8ptq"b$FT3yBr]8hK.{f 6n&D&\qѲ9z 0"2n|}3BwTb#Bc yR1w;"8LXBـY'%\oJ+j8q!5@7"C3_J=c7[hT[@V}[LkeUui϶6d-$[®ccŸȤ }CAEp c$;LM}E⤳cI#\3YګSNCR>\Ղ.Cʨ+STY}K `-o站gܔN4&GeH*iWfSگ@gUT- ]-ږڝz] ):(S )^J X{#MW 6ow7!\Uy=i|Z%TdU៎G8S_nul%Z`ЧuʲpB&|dQzP6Ce>'kKRM?N6V4%GHޯ֎f}ŅpU|k 𰟭#lV( DdCDqU죽Kl[YH-z+SPƴ򼩂M4AlFj3c/I3%.H~B4U8W_p #X"yˡkό<,5)ًG(}F¹kHQKh7[(q\ mX 8>* {@#A,=]zTL_(Arه<[8 K\a@o~Zt~owt e)5ҡSb3ʭEjDy ̵;wvGl?i  X{@fi1+"@:gpX,'&1|:׌3#&1}9ķD2mߜCӑp|A|%F%\}]?N!67"SB2py< 4d:Lۿn endstream endobj 949 0 obj << /Type /Page /Contents 950 0 R /Resources 948 0 R /MediaBox [0 0 595.276 841.89] /Parent 913 0 R /Annots [ 940 0 R ] >> endobj 940 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [231.917 707.371 258.76 716.956] /Subtype /Link /A << /S /GoTo /D (cite.HP03) >> >> endobj 951 0 obj << /D [949 0 R /XYZ 81 757.935 null] >> endobj 186 0 obj << /D [949 0 R /XYZ 81 503.205 null] >> endobj 952 0 obj << /D [949 0 R /XYZ 81 479.46 null] >> endobj 187 0 obj << /D [949 0 R /XYZ 81 259.841 null] >> endobj 953 0 obj << /D [949 0 R /XYZ 81 238.308 null] >> endobj 948 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F85 743 0 R /F29 17 0 R /F61 742 0 R >> /ProcSet [ /PDF /Text ] >> endobj 956 0 obj << /Length 1500 /Filter /FlateDecode >> stream xڽY]6}W07h2䡝$a3%a7I}bkQA{#dd׽oz/4Piv3˘x-2-5X.ivۿ} HbIqWw7o^\JG2A5ݍuMKPfgɦߛ&r)X)e*`SΫ b |`$)k|:^OD1~ї;l LQ0>Tȋ(L'Tx^Oj(_21lh+9` 3`LR0UA_ooa=_e4# &I2 XnOd%k\P*MV&Ly9xBJҀ&ir0;"k\(2M.$C{zx}.Q9h!e.@[27 vfh44 W@0F# cLDRBWMSiv X&-z|VR-$ɐzܡ{mQ]l` ųM?ZsjAؘX17gDPId3(׷Cg{R/zilץVȴJ[J56F h>*QQRo@p418Fی|VX'M@Z R"\z>G2B j ֜$v$M^>n`$&z1E=hqՐgAG L k3e q˦ \5 :m3VBا$$KaC}_4"!>-N}\Euex̷˼mȩ >E2 BAXZtIVcɐҨqoH)(1%9|@p%U]S{ueZ-yG>p?4Nl$sea[$[ٟ͢bPxǵsrXudqoʂ-S'^}6Y`#I7 &ˢ<)ldgJ! F\/j=j|ڪ$E66@57(> endobj 957 0 obj << /D [955 0 R /XYZ 81 757.935 null] >> endobj 188 0 obj << /D [955 0 R /XYZ 81 555.679 null] >> endobj 958 0 obj << /D [955 0 R /XYZ 81 531.935 null] >> endobj 189 0 obj << /D [955 0 R /XYZ 81 335.927 null] >> endobj 959 0 obj << /D [955 0 R /XYZ 81 314.394 null] >> endobj 954 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F14 33 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 964 0 obj << /Length 2429 /Filter /FlateDecode >> stream xڽYmo_AJ!fwC \޵hL$ҡľ_/|I<&ܝgf83w~}@! W yBm1iqx>S8yw/a(‘[IaQ ׮aL:~ח4 A^pY`i)"`w"_]: >.8~wf| c&oۤ/7Z,(sL4KحѢF r> . Tv*$ճj.u+Fo_"Q@zC{ װJ<)y$ɟͽ׫> #";6h_{qVEl5"twO4-w$po6ɭۙݩ9Z[lEtUfK(X΋+XUX'f0<spԷך-cP$u9K55i}*z*=l 8 ^ >{1:YǝS7MRThvaJ"u_ܸYø4Z9]UaxҘCh[.1b3ܿ1BK\]I t32VN}rޛޚZ"!J)]M*aWVl1.ԅ(s Zgc L-"&"r{3n;(t 7;kH!eM?C0ʲ+ L.&(P߳uSuIQ dNE:l!g@DTH\3hˆ q6[iWw$$-vU`~z׮/<((巻"϶ﳛuA1h&6i|SļV:smcP/iX^ Bz#9'fϰ0 ,  T_~= jě$]&Wug}~ۺWm$c'fQPG%_CV7>,BTBD " /2]n)Py ꑈc}[UX|/bmT璠":e4kM頦{-C=o즈!;ߺ 2r> q-oэ2uzw 1Z2F?VߡXTH_QC!l;2`d |p^rM>7g#zm2#~ B\ 3r]Aҍq3'=@$_4@q'QDq%08XMn|h٦\^=:vkDqoG̯uhm$7߶+,wi3)MZy'80)5MISyOzYY5sLyd岵kw*C=vmF3Πhwa[ڵ3r N[CQmpW bӼ(2;y6~ۮPO9x$iy;S~i|ZP?̵֜H14HV c%8V @Bw8ѕ<#Ac9JV3l=,rtq- DhZ"-hf|Q爎눫 ? 㕎&z AMO #͞GP^!m$ endstream endobj 963 0 obj << /Type /Page /Contents 964 0 R /Resources 962 0 R /MediaBox [0 0 595.276 841.89] /Parent 960 0 R >> endobj 965 0 obj << /D [963 0 R /XYZ 81 757.935 null] >> endobj 190 0 obj << /D [963 0 R /XYZ 81 733.028 null] >> endobj 966 0 obj << /D [963 0 R /XYZ 81 714.484 null] >> endobj 191 0 obj << /D [963 0 R /XYZ 81 489.777 null] >> endobj 967 0 obj << /D [963 0 R /XYZ 81 457.634 null] >> endobj 192 0 obj << /D [963 0 R /XYZ 81 457.634 null] >> endobj 968 0 obj << /D [963 0 R /XYZ 81 436.809 null] >> endobj 193 0 obj << /D [963 0 R /XYZ 81 160.701 null] >> endobj 969 0 obj << /D [963 0 R /XYZ 81 136.957 null] >> endobj 962 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R >> /ProcSet [ /PDF /Text ] >> endobj 974 0 obj << /Length 2588 /Filter /FlateDecode >> stream xZ[o~ ЇC!z@4i:FHCT"u(*}g/Dc>rwvٙqt_/.p)D#]D5>P0]/oWL^|+F [ÌtNь,D4ci)w:DŽbn^Z @*luE!aM9I#D1R7gnm5!qReE߷لIi^yT IӰlm4b;߼r=Aj'KKa t!Iwh&#V#Hߴ hUp0oUQeUZ!i-s y9`T7IzeorkD!}.$ Y^GBsv9h2L:Qvؗy42 1u UgɌ goه3,7OբʮT 6^W;`P8B"_>zbVi+YEV?4945ɯY};3l 62˷<{R``&N>^-D!yږJ﯋e %xxA^v҈c0~TPz?Os]6IsKQ yG B]KtU(v0eduȹnqυ$&MJ?n̾"pܮzBUekv5MI! -= -i6m3{8O7Naj'ȁ.SG M&U rJiRsA~^/30a⪀VNivGaÍ7Q]r?qc.5H.??jrg^ET dpІfț|PYOn#9+|d\LN PQfUrhUlɱ? ~-bοzL٦ڄ P]։Q`JS(|- t-r]ucUJW~кG[+u/ÙRvYL?%Lʏ{U8 rб,l=쇍픶MȃgY}&B I-E yhZ%ĩnڥVWK R/ MK( oCx R6ane^klمiXL}iӎ=rdrxm=ܔ%\>=l6aRH$hb[=9^ؼt[g)i]H_U]UT[{#~I]0S6>V/'2*8\v?u'Q JAf m􉁛R0.6}JiQgj|q8]Y(^ Jdn*բBTurz3O;2j bxbjWM( jݕŏ#fVՇ(]S.%H*Cفz:"ͫ 3ŬC;Uζ*ERLl<3edQT*uMKy{Rtk/> endobj 961 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [489.193 718.711 513.004 730.505] /Subtype /Link /A << /S /GoTo /D (subsection.4.4.1) >> >> endobj 970 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [145.533 390.782 175.398 400.367] /Subtype /Link /A << /S /GoTo /D (cite.Leon82) >> >> endobj 971 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [459.806 361.475 483.617 373.269] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.4) >> >> endobj 975 0 obj << /D [973 0 R /XYZ 81 757.935 null] >> endobj 194 0 obj << /D [973 0 R /XYZ 81 535.185 null] >> endobj 976 0 obj << /D [973 0 R /XYZ 81 511.441 null] >> endobj 972 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F85 743 0 R /F36 19 0 R /F46 35 0 R /F29 17 0 R /F61 742 0 R /F44 32 0 R >> /ProcSet [ /PDF /Text ] >> endobj 980 0 obj << /Length 2110 /Filter /FlateDecode >> stream xڽY[o8~ϯ@*$< iv!-0$B-ɕd~dɒoQ(<GOn.yw暳(E$e${d0Q*Rf}| IN}5 )N ;H t͢ 9*")!Y}FfH&߄ۇpdOQ""Xj-|78^-'Nj)n`(jC<=w_oIO5]Qx#I[ .#8(#r|Rv'1.c$+iO#2YWvtҧEDQ7ڌEqJP."^>k3HE :!qUC-4, jyțzU6TsM"sǏa1<+–z!=UQdr4->b a";`u!ެ jr_rT7u'*d`io¦.~vabN*0NiqqG3 ݮ* ḄOvJh`] #ıX)&5P@0h"%ՀP]09DB&l7NZܐDkSer% moU/27A`> 3hi 3(XEa`8sM_|\/Խխ~AfvTi܌:a50:`j7~}@vq& :rluwښr Y.p;eOpj!8EAtRzY֔l_8-@1gC1e?Pp ('THH;ݽ[|1ijpmj"ɶ!hf*ګѵ{h j@C4AR $\{ ?ezd-ZeVŴAÉs?K]gss#v?4 =?cLn:=}oO=wwRܻ:4/H}ֵF;Mژ>A|h2_> <0JNQS'E][m$LQӹ|'7He۰4|<>Taf2&ȣ&0bӬA\`m(` 2O}kAͻ!mئ8B փca0M''BP Q$R`[.nޜ2]dLG; "m( 98tDnxBƝQ'f7$Le.C6EQ>em+NF3K88cu F|2k FSގ趚_/WŃm9vNgwu7un3e -%oƭjijpdl׊PdAG3Vêo ]@.?:ZW~c|Wv!I]=FW5~d@ucIL>G|()gc  պ կ[>tBBʴ%DZ.c C l|A% )A =BAQ0DDP ?gZD Ov9 H)amYz[ڝhJSrPyYPh#rC!')H9!PPKx= endstream endobj 979 0 obj << /Type /Page /Contents 980 0 R /Resources 978 0 R /MediaBox [0 0 595.276 841.89] /Parent 960 0 R >> endobj 981 0 obj << /D [979 0 R /XYZ 81 757.935 null] >> endobj 195 0 obj << /D [979 0 R /XYZ 81 733.028 null] >> endobj 982 0 obj << /D [979 0 R /XYZ 81 712.273 null] >> endobj 196 0 obj << /D [979 0 R /XYZ 81 471.418 null] >> endobj 983 0 obj << /D [979 0 R /XYZ 81 441.929 null] >> endobj 197 0 obj << /D [979 0 R /XYZ 81 396.78 null] >> endobj 984 0 obj << /D [979 0 R /XYZ 81 377.663 null] >> endobj 198 0 obj << /D [979 0 R /XYZ 81 264.832 null] >> endobj 985 0 obj << /D [979 0 R /XYZ 81 243.299 null] >> endobj 978 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R >> /ProcSet [ /PDF /Text ] >> endobj 990 0 obj << /Length 2513 /Filter /FlateDecode >> stream xZo۶_GY~l tYm 5wK8t*\[N%y]_EJ,ڱbuCE#G?\,nU "< ^Hc1%bX [וf(mu9J?¢5~HOY=eu|÷2z5YZ[\-uZ6LR\iIw5tK[vzsº*l8Z/n?m"ZGD`Hſ] MOI@>$%~WW~\rDxmaՑ$ )8H+A !j&DGpmVkK?.-pځeE;J"{̛:. g/e VcHs޽8+OA_c* qQ0Oz bwuƠvH}p8mZvis#"ϊ!g loܰc9'xv«@;>B8)1y6c Xj0#=΃I7nPP2n'I!U fwZ@bߤ u7YnwĘl˩gxOS2bV-DiɎ9԰.ۮLRr+W "cLKqZ M򾱍mJlJlr $S 1RT8 qMYAJp/%+U&ρC!$RH9NΩD'f/rꜭ!j& m8cڻ;]aZut>\.0F\e8$>){\3ЀbA7| u?uGj>:vEk!h(FSb`?qSL|fҌZ#;<5תL֚{K^׌؀Q~y֗f| (>)\s (h q&9\m^mƾ0\7B`; Be"Fa|$!-~QHۥ5׻M^_Ӣ;1XgC8,|W?&aPc0>p&Rg ˉ;\=Z<)Qܛq-٤6LV61 n1)#[rZ ޹d% q0ߛ` z%¿)~FZfܫQZmb+C:〾$F4ziqݖL\RX|; c=n:v`4 CxL M3V7ن/ӣ(Z cBQ0ADZ%+ M}oR Cpw,B$Ue"6UjCbo)[rPX%(®Zڼ:2WD; :yr;[KUs[YothkƐEYr(+CJux4&ʗZۻ”:ӦG4PE1DaK4C ɗzcM7N 2(ojqgL/frhO1Ht^nM0{'k g/1ౣL)8}@"fΪkfg.J6X}\ g'=ZO·={Kz{#v<ٗ㠵{ endstream endobj 989 0 obj << /Type /Page /Contents 990 0 R /Resources 988 0 R /MediaBox [0 0 595.276 841.89] /Parent 960 0 R /Annots [ 986 0 R 987 0 R ] >> endobj 986 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [489.193 183.545 513.004 195.339] /Subtype /Link /A << /S /GoTo /D (subsection.3.1.1) >> >> endobj 987 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [485.888 156.447 509.699 168.241] /Subtype /Link /A << /S /GoTo /D (subsection.3.1.2) >> >> endobj 991 0 obj << /D [989 0 R /XYZ 81 757.935 null] >> endobj 199 0 obj << /D [989 0 R /XYZ 81 733.028 null] >> endobj 992 0 obj << /D [989 0 R /XYZ 81 712.273 null] >> endobj 200 0 obj << /D [989 0 R /XYZ 81 527.963 null] >> endobj 993 0 obj << /D [989 0 R /XYZ 81 506.485 null] >> endobj 201 0 obj << /D [989 0 R /XYZ 81 309.549 null] >> endobj 994 0 obj << /D [989 0 R /XYZ 81 288.016 null] >> endobj 988 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F14 33 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 998 0 obj << /Length 2210 /Filter /FlateDecode >> stream xZs_9%/L;Lqm5hIIKﻇ;6~88w7 HpP`%2LwQp?}DZ£= lN ;s=EWSz{w)H "h5 f˫D#ft\\!E꟎_&R%#EH(EXG~<pc aOh);Z4, %Hc 05%T]FS`3.MAӋIP,V i8=ۣ4"›<\&,~?ax a99o )D]Dx-M|qy1\6> IumZ'T\|ܮiԪ9%G?yPp{O x>OMS*(L#7G^-5u#\86 p 6p e|4}l6Ks?a,}eѯ XkL2Ӵ\$(WXG".Y1€ː*Mg$K55[5,^ml$TZD;:vf}z|LK IV$̖fk.I4\R54FS'0qLY^ly|_lLҒ_\X kw 4ՄdEФBOv"eB*T@Nsȉ9!iꐳt:rui_D _RKR5[X|&t%n:/P[2j+H <__Tb{9NLAEyS;u S^˽g2w{GqW1AfLS.v_IU."HYq-hcw*)ONuJYQ8m UŶ5\}Qukx/Px8E/16 џ QEE7j" pʭc"=yp%Ԗd0o|W7}iG64^%y%s)ZRUpQd@XևK=|cs0m91C]D}KLkWi9^{I)TC,-ªۯ'xz} ‡dι>"-uQDNi{LKp!Z3\68Zuι8Bݸwg#tׁVZt@ =HG`R#lBʣMH: I}RBF oy: I BS}WeKe{d5ūuk۪:@]&Nv(ƀ<1ҭ+.а+#J&l'C_'PBs)cK{ԄZJndlQnD!K_L,K Őp(!+a3e0'ma$|"HuZK7lk+hH1D"z-I׃Z:pڢAt2ʲ'z׬:n4CPl,2@>ԓS`1HP.djP?d|9{-YU] A>?Ic?>}`V 4[&;dUFЍ`QhAp'2vC\ڳ]R]D,PYZ^yڿk-AOfܿ^c v@ endstream endobj 997 0 obj << /Type /Page /Contents 998 0 R /Resources 996 0 R /MediaBox [0 0 595.276 841.89] /Parent 960 0 R /Annots [ 995 0 R ] >> endobj 995 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [369.261 348.674 393.072 360.469] /Subtype /Link /A << /S /GoTo /D (subsection.4.6.3) >> >> endobj 999 0 obj << /D [997 0 R /XYZ 81 757.935 null] >> endobj 202 0 obj << /D [997 0 R /XYZ 81 662.832 null] >> endobj 1000 0 obj << /D [997 0 R /XYZ 81 630.689 null] >> endobj 203 0 obj << /D [997 0 R /XYZ 81 630.689 null] >> endobj 1001 0 obj << /D [997 0 R /XYZ 81 612.13 null] >> endobj 204 0 obj << /D [997 0 R /XYZ 81 272.724 null] >> endobj 1002 0 obj << /D [997 0 R /XYZ 81 248.98 null] >> endobj 996 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1006 0 obj << /Length 2016 /Filter /FlateDecode >> stream xZ]s6}HS Gv&dIgZ>~%T"(Ew$\\{,G8x"b$ZDT3 &yt3x=xXїwW^}#IaQ0o937@MD2BP{Fv D~‘lNjfJ0ƣ2~j؍?^Z;djM)< cz7+\`]G-9G󻶹$\T=`gTøF /v٬HQ9Lźawq$LߵޤYO)W!7rJ|l[lv`Ԙyq jx  CeWuMoR&[ʷ%&{L⥷xcmr"E4% ȸCtL/^&RKL;߰I$s5yʅ2HvL+pKc}0]lgz],ՃM- 7b5bc8J;V|8p <\˅֩AhM`RCc*Pk IǕ 0e,jn4]_zamiIF!h? ckbeo.Iex +ꀼ+^IVF98WMxa"I cQd f )*#X Lt^` F1O^6\&H#shw2 ͻ7,RЁ bB9:bgiLgFNDrٓ{ߒMHi(ACp `p;߸$'?'^jGn$U-pWwc.dnL6v7 k"]R##?C<2>'=1;_ ȤIwDBl:? C d#,,}L!t'"Óˌޑr4@ENpXH  7ܹܐ[kKʩ[n A<003*[,ׯm|p8q"AF)YѪ l*T0%d0Δ.>p 9a|t—_P[ÇuurVѥ13`$- i \l(848c mGs3M4˪d'i{ךl9[XE @y=) ̭wmĦС!t(sEK+$%q⃽$){oU'> LQS(-0DKә^i "kKu)phڔ+Yڭ"fd2iԟQJ٦b$6i0I^]sA]wF|:ca R1ewv\ܕѬӞ?I? '*fptt=m!<g,VIuZ$M2j?ށoX+!0f9/ޘBZDb18] Z~ۇ|־;p62IH5H`+$[qi2f=]DMH6 ixm )0#24GBZDjVc~ѯ p6Of^6j! X%$:j_K'/D6ggj^6,QKn6l !r8~@G\5NHzNm[N]3XוFޘBZ5jU]T euv폮.mD0dyrǕ|ot{wٟYXi,|SuP;) ʊAhh2`sxV{#&=U8ql٭79Y:SVIXǭ? u endstream endobj 1005 0 obj << /Type /Page /Contents 1006 0 R /Resources 1004 0 R /MediaBox [0 0 595.276 841.89] /Parent 1010 0 R /Annots [ 1003 0 R ] >> endobj 1003 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [220.162 644.027 243.973 655.396] /Subtype /Link /A << /S /GoTo /D (subsection.4.6.1) >> >> endobj 1007 0 obj << /D [1005 0 R /XYZ 81 757.935 null] >> endobj 205 0 obj << /D [1005 0 R /XYZ 81 733.028 null] >> endobj 1008 0 obj << /D [1005 0 R /XYZ 81 712.273 null] >> endobj 206 0 obj << /D [1005 0 R /XYZ 81 478.832 null] >> endobj 1009 0 obj << /D [1005 0 R /XYZ 81 455.088 null] >> endobj 1004 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1013 0 obj << /Length 1955 /Filter /FlateDecode >> stream xZKo6Wh1>mw-m>Dqr*+-C! 5"3dɳ'0Yr}\&׷ɛ?gNi:kfl^ FIJS7pӨ#4~g/ M \(Sbgι$F)?h71IIf(ӗyWY]$>os_*n{[mt^~.׫"[nz,e$&8O&6uta~6V K5eww @pifsOaǫr7M}mE}).AQޒ1с?̔\83?h`#?5ұߵ0؅J!T*~v<,6-M}" 'vP"e&ays!a V6l qqg7ض=UJpOᇓؓOl[DQvO`QvĽq ʨQ W4?z?uan%|B5ܥRNc9ǔSp.6F[47V'hq@ODxpaǩD]1 G7s=K/Palu|%Gʼnq`Ga;е0\f4y:Ŋ A}xMcv"V!=C,qD61 j 1jVް@K n_/e_k'ϳ{ϑ2Aܣ6Jy ;-T)Z%+m6g}_eaZZa?hԪXMi9A]mkn jQ}&n(m2ޖ2ϡmV%@A;uYQӶ#]6GOH=cq, oHdW]պ]F`q,$G^Nw"oeG)oaR[vWGĠb,8 `z!P#BdX}GФg:T#R$@f /O)*Pѓ#;IQ -vOQ#S_|z la'Lj$nzOl[V FB 1AppwbDΤ "t/Cp/c4~r^3 _ ^!lҧ3^B/S| endstream endobj 1012 0 obj << /Type /Page /Contents 1013 0 R /Resources 1011 0 R /MediaBox [0 0 595.276 841.89] /Parent 1010 0 R >> endobj 1014 0 obj << /D [1012 0 R /XYZ 81 757.935 null] >> endobj 207 0 obj << /D [1012 0 R /XYZ 81 733.028 null] >> endobj 1015 0 obj << /D [1012 0 R /XYZ 81 707.859 null] >> endobj 208 0 obj << /D [1012 0 R /XYZ 81 707.859 null] >> endobj 1016 0 obj << /D [1012 0 R /XYZ 81 689.246 null] >> endobj 209 0 obj << /D [1012 0 R /XYZ 81 377.479 null] >> endobj 1017 0 obj << /D [1012 0 R /XYZ 81 355.946 null] >> endobj 1011 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1021 0 obj << /Length 2095 /Filter /FlateDecode >> stream xZ[o6~ϯfy`X ح6iyVv~"u(G$us6ˋ._r)D#:AGJ(dVu3_fڶn}~ 3F7 `r{N__] 4AĘHfrsq}6ˆ/)7 #DE/~r2d$+)B"E)8׳ 8Ɵy<2 (u7*QRP4&Orh(,$C6Ljt.Yݢ*_,y}X&/UҌrk7m}>b ,":"hDD9QNg q,$(2 VhxfҷlG׊ZE$A.vG 1,?mzy]1DOMv"8sY'Y?%]X$)-'&#JM <+֢M(bNf/B BsQQ_eEH 4 $Ba,|[ͨ?gBPPO!lPPVq-.)vlΰ6T|[6ߤ̽! BF͹2Ut i[}/5rteyȊ>Kz!`b +7KempG%jLWYdݰ`a8jƉi%#l dN4؝=o qH6=rdϱȷ5R6{wdd Wn Kŝk]mw]ǜa bH5bP1tJdI H %^m8IA-K{p3t\<랝EK?#ɒMZFP7 v.Ha0Z>?&T/RzFE׌( Z>6e_/lSQ@(̕՛F 2>Qc C-<. .|Ή8bFp9,6 AVa2<*hG,:Tuʞ ! ̜y=:S+UVP#L%DRSn6}(r&Qudq"ˋ#:FŇ> rxrj7eCh)˪X08"\I`A*9е*\ٹ2@"_Q L{Z94l7}q&ADc* jj,CP$H D@M8$08 { [d qvr%v%#4k_fԷb D~ &N#}EԻk-!&Ec> _dW>ռ? ޷Ohփ*j:;aJF19 "9DBӵJq;I i0گ0g0Cu8~5fCϟRg 熋~Qm2U*>ϣ 5G}FY ?o%* ,4m_ɰG\L@"zj?a fcAOCDABbjdv*&g~5&y+W8jVj.wLv g^:&Ws$> endobj 1022 0 obj << /D [1020 0 R /XYZ 81 757.935 null] >> endobj 260 0 obj << /D [1020 0 R /XYZ 81 675.23 null] >> endobj 1023 0 obj << /D [1020 0 R /XYZ 81 653.698 null] >> endobj 261 0 obj << /D [1020 0 R /XYZ 81 450.298 null] >> endobj 1024 0 obj << /D [1020 0 R /XYZ 81 428.765 null] >> endobj 262 0 obj << /D [1020 0 R /XYZ 81 189.898 null] >> endobj 1025 0 obj << /D [1020 0 R /XYZ 81 168.366 null] >> endobj 1019 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F14 33 0 R /F15 750 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1031 0 obj << /Length 2025 /Filter /FlateDecode >> stream xZ[o6~ϯУ , Mb.M[`iYIR*mwHJub€=hH~88;)gBD1\T3@ <}rotPڎ 1NJ@7c2C"=XA4ʮ&ADPaCP8: Bќоќ:R#e>Q>V5vus:"L55"&4Ubv}W#yn5pl.Mp?UXũ}% I0 *v9P;0&] iKQ/[68 PQ]T$Ry]=/ڤ֪k= U:|G(l&齚়ᘛت&%o{·cM8]uYY P E:\}ۼ=F WCW3r V( ܓ>c9Áau9sR auqDs8kV<[g׋t%nVm8HQgQE\=Z6H_~6w>eI>]#_, Hqkd̾X=5%H^^Q<.oJž!xmoi8[ƛOZ)8hyI& @!+DO xIa=h~; Ձ2m4xsV1ibnyUMfd sغCA.ay%EZy{@qhR2  ɛN5gĕ)VvY4M"Ygrm^(Eɉx1uU3LG L$<) yB5`?/*kEqֵ4Oy־f=JB3_@V{\=CҝjKA-t &T(آ WO/O8j,N"T%SRe #.o+i|B+} 1u@ <:P.a\fVpi?eIz0pf2\XⱾr,UD^Yc`Kھ i33(E\k֧mMgOa eQz-B (8T.Yp]>(jdyCء3pQapv)@XbMǢ endstream endobj 1030 0 obj << /Type /Page /Contents 1031 0 R /Resources 1029 0 R /MediaBox [0 0 595.276 841.89] /Parent 1010 0 R /Annots [ 1018 0 R ] >> endobj 1018 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [209.526 705.587 233.337 716.956] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.3) >> >> endobj 1032 0 obj << /D [1030 0 R /XYZ 81 757.935 null] >> endobj 263 0 obj << /D [1030 0 R /XYZ 81 575.031 null] >> endobj 1033 0 obj << /D [1030 0 R /XYZ 81 545.542 null] >> endobj 264 0 obj << /D [1030 0 R /XYZ 81 545.542 null] >> endobj 1034 0 obj << /D [1030 0 R /XYZ 81 522.063 null] >> endobj 265 0 obj << /D [1030 0 R /XYZ 81 361.522 null] >> endobj 1035 0 obj << /D [1030 0 R /XYZ 81 337.778 null] >> endobj 266 0 obj << /D [1030 0 R /XYZ 81 163.688 null] >> endobj 1036 0 obj << /D [1030 0 R /XYZ 81 142.209 null] >> endobj 1029 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F14 33 0 R /F15 750 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1041 0 obj << /Length 3568 /Filter /FlateDecode >> stream xYs]3}91{ҙDdwjCH$4$evŶ,>Wdv7#߿3Pc1R'ٯ_2n |AIb_2j}#4. $XARΖ\&F)/ywyM,v5>emwZ,g}:_mMݔ Hz;h$d&|nj'b-L5DM|{?@aS>dz:.@Ol قG(l['Vb/U`HE>~iwUt &B"6Q|?lBWF$Zhz{1Hհ&{,7YBZaƭ8Á5<Emf/[toHd[ȡ8 ,,іXϒ XaJW$`v (7~U^di_*}NHClخOytU[_co N&KA),p%[ ktU~ϫuZ9釲ʷyR~#N]xu*k mZkh_ۅ Qam#_O讐 4v+DwJ(o@U=HQ h"[. Qx0=$H6 iI( M!fhI}l{l6gHd]EcXpDX:c>?j?"D@z OB>(`,|;̫!yVdY>T04uOy&Vxg>U'w1^eEP" RI2li9A#ޕ ڿ*m"ڕjU]yL9F z6 B8V5A@3 W .WizMo"[!31}7„"H&ѤQ˯viX%`:E)XUurI2(Su܄5gqofMCX1K)DhQ$R?6Kjk,SD@cW&Yw1ؕۡ5]h֤udK0GOMGuOQEvT7D"mzgwCS%Z龵 "4vȦ=6P xfm ;G3y-Aq %@ܻ?>QfhWkHz$64~o\uN `qr 02Ԕ8T{Yo\:g87IUQr֊Nꉊ_Bd[{<pf8kt6rcf5Jڍ0.9 F8O>8lyQKEBZھbhMȡQd  0c<@3C[2mCM61*/H  ܞl(Q"[JLA(a ko'6aec9ozg[OTђٓ؂A/.AD8A'B- 36{'{!es,ԯSrlncnNnxW9c?6͉A(m(0h!S/Rb ykHkjd0a5g9݊|I:8hB|i]p6= l,#_Є~;&9Ъ&ZpZi1; )'-@*Y`1tQH}3j;rQ[;MgpѪ  Km*ۂm]}ϯ7Y4T^h9hwG\MKʶF:);LۖC%X.*=p*+k&{:Q,mz7Ѧ3-E7qb WPỡ]@o05{u4([l! PHt=/$ ,/ٜ'?_Hb=g&/'-xQe?tTOuS5~r OL)fGvl2%js56T'^Hni'\yk5c\\qߛ ⼿VU:K׮Cz~J+8|Y5 5juNjHhs2 `eh PyZT&w lUWl(%|tKz_Ui!w)Iԙ:3t&N$#_? 4;fVgD{5{w7/d&VAri;Xd8VTAZGwAO([p-Ȍ%C }5${w鱠S‰ h+;ݥΘ"$Ԝx(@}crs@Ͱp{^-$6Et DBZ7#PC? D&vAGdF1K]3 ,wˎqSoj`5͐4?zHaxЅ֘2ڸ9(c8d}7"Er25&R͋C0Ojyx. *M8& WX)DE;GbdS,"̷ٺJ-`(ƴeIFM> Ku<&X VW,`WǾSmY|A`q!_y-C:([B`&euׯ붘3Q%xM93Clm>,]fE]>Vu]#B'tX ULfx0ׂ*qB?hϢ笆=Ng}}ɪh]k5UNDo? gKXTfzR+CJ. ڥS8rY `Lc?lʫjX[%{MGJۻRx+,Œϧ`ƛgvn5RC\,)UګkLPltp=2g%hl&&r|j! -]r(׹]r}puMgn5l`KݫTU}v%~, endstream endobj 1040 0 obj << /Type /Page /Contents 1041 0 R /Resources 1039 0 R /MediaBox [0 0 595.276 841.89] /Parent 1010 0 R /Annots [ 1026 0 R 1027 0 R 1028 0 R 1037 0 R 1038 0 R ] >> endobj 1026 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [436.429 705.162 460.24 717.027] /Subtype /Link /A << /S /GoTo /D (subsection.3.6.2) >> >> endobj 1027 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [313.37 664.514 337.18 676.379] /Subtype /Link /A << /S /GoTo /D (subsection.4.9.2) >> >> endobj 1028 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 637.841 107.447 649.21] /Subtype /Link /A << /S /GoTo /D (subsection.4.9.3) >> >> endobj 1037 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.997 475.251 381.808 486.62] /Subtype /Link /A << /S /GoTo /D (subsection.4.9.4) >> >> endobj 1038 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [459.765 186.837 475.394 198.631] /Subtype /Link /A << /S /GoTo /D (section.7.1) >> >> endobj 1042 0 obj << /D [1040 0 R /XYZ 81 757.935 null] >> endobj 267 0 obj << /D [1040 0 R /XYZ 81 171.952 null] >> endobj 1043 0 obj << /D [1040 0 R /XYZ 81 152.836 null] >> endobj 1039 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F14 33 0 R /F88 758 0 R /F44 32 0 R /F29 17 0 R /F61 742 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1050 0 obj << /Length 3349 /Filter /FlateDecode >> stream xڵks)̉d2i'dҙmfLiؓHrbI` bglv}7Jǒng"VXQ*f5_Rw12z+8RJ+x p v-dN]H%Ьe/ByuObMQ2=9eC8J3Kῼ<ZcAVhNF|J"-:Ig"8Y=;KȊ9ubqƩ.`&i8`>&sY0Pāe81_!Fiȁ#>p`I!DP)p☊#`q I&|}{IT Z^gYyQN? F@J:irOx8 x*K$iOѽf\. :e î?%s|TUS;dξoШɸ5>#D ]UX^7Պ:pJYm<^$'r/^Х#!e3$k] R5m(Sh[!XwoB֗Yr Xիߏyt`;[Bk>+y3Hi!=BC>x774G?#3 x=zcv,%i:nh֤q6==lݗ#}~ʫx"u2%~H]{#jVg"dO0UCaÑ5 m r& )k,64YZJ%WU60M&a!6sFCEI}]FIX'?_l`? Q[ư 3 \v5"IG~sq_k"$A`ƅ…AC*;r{iԸ!S,gp/!RۑvEi:_y1u6u wҗVVb"z];}*D]i_6sOq}mOԶQ<6ZLT6^/ "p<(YGF]l9VN5q1@H[GI%@Ci3܈^6I1`кv4Xnhܦ!8QkPбuxEmV^pd]C_3&u]lWBte4,ϳTGLX:L8մy=(L*3alH]{7,r&.UqѨiN)%ʑ*"'#b}cX,ڀ&F6Կ嗗Ѯٕ d@sy!\D*Ӧc6% XLܥb!\hSDMvY@I}6`Ԅ7zv5X `vH$ƿU"V ;v| +fu,gC?E<==<9¨ ^k:dLߨË'(M ("s9-cc91"h:ğ=E!ϡT<gW%GE^NB ߒs{"A%L>aq endstream endobj 1049 0 obj << /Type /Page /Contents 1050 0 R /Resources 1048 0 R /MediaBox [0 0 595.276 841.89] /Parent 1010 0 R /Annots [ 1044 0 R 1045 0 R 1046 0 R 1047 0 R ] >> endobj 1044 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [215.678 511.605 245.543 521.19] /Subtype /Link /A << /S /GoTo /D (cite.Leon88) >> >> endobj 1045 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [373.227 260.978 397.037 272.347] /Subtype /Link /A << /S /GoTo /D (subsection.4.8.3) >> >> endobj 1046 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [322.006 249.126 352.482 258.798] /Subtype /Link /A << /S /GoTo /D (cite.Chen69) >> >> endobj 1047 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [118.972 235.576 150.059 245.249] /Subtype /Link /A << /S /GoTo /D (cite.Zimmermann96) >> >> endobj 1051 0 obj << /D [1049 0 R /XYZ 81 757.935 null] >> endobj 268 0 obj << /D [1049 0 R /XYZ 81 366.517 null] >> endobj 1052 0 obj << /D [1049 0 R /XYZ 81 342.773 null] >> endobj 1048 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F46 35 0 R /F15 750 0 R /F80 766 0 R /F14 33 0 R /F88 758 0 R /F85 743 0 R /F44 32 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1058 0 obj << /Length 2189 /Filter /FlateDecode >> stream x[ko_!_ll1v7v(6ݢVڒG㤿&8 " )J9/?sV(D#EA5|ёM`./hxpYԳ]w-|ٗ}6U4m3?zV/ɡERF$ nb^r::xہ'o(9Cr% fnA?^vW n ټkD Kjڋ], , h8̿Ƈ#M՟Bv̬].@p5Afүv20Bu}e]6u l΂*ޠ7ͦUYe> ccmӃRQD,Ƴs\LAb~jVi?\/IeE TqYxSrDxΫMGĘEFA Ҙ`!t rB#%Fx/OÑKU31ok]|]]vբ,+w:nbi\W.u 7brTY)Ӹ;G}Q91"y$R:r}D٠e_YQݒVo1^h<{>rܷbD nFL1 &[ EZ0{-3Ps~ O^~d# -cyflm X1ĩX)I ugIeo2(IS"aĀ |%ͳ/羨9L"BmBgK#/yL7H<$`C6yv/g  Y$]}8 &xm`څ lx $qQMzߕC?`Φ~{x୹uEd!D,`eQ|p+cM(Ƅ ,@Q}|=:u%{vfƕ dsb@0+d0& k2^ NgpO&MD2 5B4!"ְ ͝q=\?:C/.³fNs-f\!,m Z>r7˙OþE iw9wwdH%fpC̋ ƊA[ *VD {@&[<»r9(Ane݅!31;9!6l06Y?jf~?r٭VÁHc {7FM2Ș',ai'jAoy5i2!oEn2=($?@1ª'ˈ˴@e?A&Ŧa@v4&KaDBbH)Wl B0MI3%4tH1+\"7HWdcW`~UoضްM2Ԙ-Jy xFC)8Y3`Xe96b!$chF#ؗap8}%I7?f@KXe j0:m/St1[B/0R +N8:# c")9>GsґdI <%%"{jN:s|MG4_$34JQN ҙ4Glkx$C٢ gXat1[0=s 3=$+udc01!>Cz&[ sYpd8Bku+cW/0[_z;RY-lx~l&{#ヌߎcOLΈ \2yd{#F J 6G>y'?L&SH' endstream endobj 1057 0 obj << /Type /Page /Contents 1058 0 R /Resources 1056 0 R /MediaBox [0 0 595.276 841.89] /Parent 1060 0 R >> endobj 1059 0 obj << /D [1057 0 R /XYZ 81 757.935 null] >> endobj 1056 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1063 0 obj << /Length 1680 /Filter /FlateDecode >> stream xڽ[nF}W.7A F4AUDB%ґEґ36 `-/Ԝ33;DdW^~ S.3Al4Ώ^}/Ns쫣ћgCZJI+s7k& DMFCa0̡U6Y /D6{o2*lf#cy^eJ[}k`4=JJ6_}5Ԡ8/bŬէ^V#r‚. ^"Qwp<+Eq4hL[d 6x@zu>r~VN7^ˋC_3f,&qh>L>OI}|O9A#. 4h_Ί|Z|ܮ(o\/kE9֦ Ajujo>@=&qTƃiJAը_hops5#zK}WYYt -jZ-uQ#|y\0CR\I )7]Me=޵7w:ul\{{9oS,.ۺ]S\-Wy1;,5&aLZв Wj/ iqzvw]͊rÝ1׼1 ~O`4x#wA&+$|D2BP Ӏ xZo!Ii;$J`ChC+P.g}^We)yzAP8΀HyqYn6lbϧ',K|scusFgb,YEIB`M3ypv~OR"іs$y 64!r_s*PݓZ2i"ۉpk/}x0n}U@9WA5Qe.5 z ^z 4|kс$r^(>$/,5a$|ƀH5N1HL*(j[P>s(_T L{Il-m!iG: H {TE1m^˜eGӃݕ:ʹҊ4 $MyB0'A 6s0PG&Mz;9轒C4NNp`u`iRuK~B V^+I\9JWT8Qށo>gv.MwW9ʦU*fUʹ݅OVVn;;TŴ"%:ʊ#+P9[i u%pv!M3YFXW #+6cJ]ۺbҕh+ 0my=ⰺ %xi"K(`hv=4jl۬>ěpj$Mg+n]ʹЧn]q= endstream endobj 1062 0 obj << /Type /Page /Contents 1063 0 R /Resources 1061 0 R /MediaBox [0 0 595.276 841.89] /Parent 1060 0 R >> endobj 1064 0 obj << /D [1062 0 R /XYZ 81 757.935 null] >> endobj 1061 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1068 0 obj << /Length 2898 /Filter /FlateDecode >> stream xڽZ[s6~R `:ݝ&mH@\ 9!].ūwR,bb7 n"V1IZ\o_F/csiW`$aa^;F1tAJdI{%%8r%1ZA8BcoꇫF?dzLM̋}C޴i~7վN`~"W? z]8Ԙp}T{HУ|)La´y{\i`"1 YPELZ&Q/z/7m^݈ D K8H!e'fI$ț3%>e6Eܻ=%2w[y{WMUmסpD! ;NL/VL% s,]yiŽT,6a=[oC'D&Y6aꏝs>% I7vp c&dTDwVHdp[Y㋕fAk2Ud4MvN`V8z褿<m,A\}ZEfuP6݆Ie21$Au2[\KXi\S{gڎm8ۃv0&DG H*uףEf]g'Κh3'Pa6{m VLH(hRDy{nvUU+tqAØ7ZݞsKGč!F:(ZhS/aflr_zJZ/nVC87S)\QW0R[P(485=iY֚y`BViq;52[*mo+ck@D%BUH:T]Gps[ܲ`әJ`P=4vM L= (PL`TJB ` 򿯀ֽC(Z[ {ٷifj߮3P~bbDf4!o4^/9(<ڠ>}Yn&R.-;a"(8lK6+`4`}\-85t`_^GCywO!c%8 #QpA}vLזctX 7U_w4#R8C)́bÁt]S:?Cn\k8>.N߹tON|tͿzC'(}p]-CIC@M㗱+%Vv5'kE,l 4g/yH5c~mJbiRgy)SS"2CDP9Ql@!xQE@51|%Ө~6܊<OEu~y:d bn!FF%ij@D =ٹM_Η١uLy{|RYER ,_^2@5#$αS7G&rF2p!CV/>#73hY G3w.]/| - O8KL% u:q9̝sqv׃jSrXXBs;r.E}A"^\]Rp(BAg{ /'w]&Ppu4;_ )ӹ!0!eo*Μ}]uATUM˪.AFXEo/+i>k ABq&4vi^ f]N]$T@XL/*wuؒH2waT871e<$CyB=]HEztڗCB wn%{L6`O5A10p7rp.y:KلQI96oDwYِb;f6Ca|„kU7V 3^ JF]4IFQPN{&0{dI%)0܌y-Sڮ gfMe垌ɔixn>A44?swM+BdcGVuG(FT^!Cr#8N)xVK"VL|>O]쇄/lݾ(ҏpأ0"{"t4PhsBkٌ?lk燅t> "'ʹ"3J bc[e.Թ b>ıC~B? Dc!1уM9 Tjcϻc|NI# M!f3v/QI!@>liH 4Y#8DYY\C%Z endstream endobj 1067 0 obj << /Type /Page /Contents 1068 0 R /Resources 1066 0 R /MediaBox [0 0 595.276 841.89] /Parent 1060 0 R /Annots [ 1065 0 R ] >> endobj 1065 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [269.811 659.36 299.676 668.945] /Subtype /Link /A << /S /GoTo /D (cite.Leon88) >> >> endobj 1069 0 obj << /D [1067 0 R /XYZ 81 757.935 null] >> endobj 269 0 obj << /D [1067 0 R /XYZ 81 733.028 null] >> endobj 1070 0 obj << /D [1067 0 R /XYZ 81 712.273 null] >> endobj 270 0 obj << /D [1067 0 R /XYZ 81 336.6 null] >> endobj 1071 0 obj << /D [1067 0 R /XYZ 81 315.121 null] >> endobj 1066 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F44 32 0 R /F15 750 0 R /F14 33 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1074 0 obj << /Length 1982 /Filter /FlateDecode >> stream x[Ks6W0CH'4nNzHP'ZmN$ҥ]" CHC ~:8Mprq9gBD1\$T3D "\rL6vB;Lru?,"KN:/:/ pEmh&ۻr5X.&ta ko4泏e7Mg MUX]JS{jFRdF Zᗭ$*||n۲Us'*Z?bQ{Y}4 8?W n4fdUVCF+8Vu[~j-kKA<iv!‹CwSt~)6v>mnړr>TU^w̬h'P$$RbĒ-NB1m;gbM.?N^ڽ #; ,MWyQa#b X#ON(2x1":\ "T&#Q oQr疿LΞ<}Fv3;Hi^O)>8oƴߏ>;S2(QlMPi OM?w}fEVٝm_vTUvGFF<(ءϿ[vƞֱͮ`HU jxP>f2+ֲSO޳N[ٺw۲zFr@0|;cq G_'Oϋ|Y <YqM0#F&B4ɷK?娼Oy]sL9S\= gK9닕`>n*.QpS"w]Qeg=I8$נbaQ2牺d=C1Af*KAZgXR W .(.c /o#kN naQ*7sצӃjۖ?uG/(C&#b(9dp$:x7`4ï4t0c3 ɊVBX(ehGCp7`HM 1q ?C g6,82 GL48R,aW$4<(?}%q6lt_%7=uzĀ͌BR +}Ț#dxѷRS3Y+@ •FD(CJy9VG'4q"UVQ% -K=b0LpJs1(6R8B*X`(qaQ:=h4xn2|=M6ԷUKࣸ6l,'簟!xp#!I8PVI!xcdt0FrlmQh/L)!Ҙ"*xl@od>OOBB~}N%*Q0#MiOM8$q M&Q8$8v5 (E9Tk8Cu$+Zpdqp08}J%(=GJ(NK@i)V$=CUD4PCi)F䧊낱qiu]+l6]=izM^yqsCd8>T*Þ?FW&(U]lp}J͠,o(nE`nM]+[ˡ<+j1 endstream endobj 1073 0 obj << /Type /Page /Contents 1074 0 R /Resources 1072 0 R /MediaBox [0 0 595.276 841.89] /Parent 1060 0 R >> endobj 1075 0 obj << /D [1073 0 R /XYZ 81 757.935 null] >> endobj 1072 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F14 33 0 R /F85 743 0 R /F46 35 0 R /F36 19 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1081 0 obj << /Length 2719 /Filter /FlateDecode >> stream xڭZYs~ׯ@UUG\Njlo+l DB+ d9p }~=C-#xssH!n#yBfosqӥoڶ>f 6~&Dn`v;|s@G$c"E4Eg-/Fٍ\!,toO/AFRiw5 KQ4~˙ 8&ow{F{ӏ_N=·J'aA Ҙ|Z ΢%0Bx@>y _"h^BllШ \Q+5XDJ%8H{B+QۋvF0Uq d*_~LmsKfbPzy-{.7c@v\Uw,Ew<@3$X4ðA(|U3Ϙ`6T3E聱2l˼1CgNM53^En?$"޹HZ.>d4)}׼XSVZe%!aZusV$j.-'#0FVS[8Mcs>63*ߔJ?cZn< MtIJ u4-iTWν.z(1La*4ʯV3.u;jI{3 +u6)Z^a,Hz*e^\z<6񽗡h(ҝN!M*֌/z)8{Lbָ wX{M9{чNLiሲ&z#p [v1CFУWuI=@5jf?4;gLCJv_zdQ<*f~=TPq; 4`OI^@tKSإ)yID߭湫m;wU"͋M{`Y )ŏMvPBeH@1$LYc*Ӥ*. _9z B! tFnmګ[^v2 `Ln8H!#-!SC.Ϡ6 ! >/S۲6STOІտ W;S[3EiS{kE$ʄ{roHl3Xq'PZvD-6gSUy$8\˞ imlu`3-ˢ|-b^7e*KƱ]@`fMÈדVyhN$h/;Uy!2 Ӄ-)^vUZoj5L9Th4;|hmBT>x:uǼI#˛ I($="ڈ:zW-]- TY)i}zL$;\#Z@[Lb)\ixa/BPRAnJBˁ:<*|˦Y 7O&G z#?eBZ?mօM}8qp3 kYem2af(Ľe6}.q@3i@䉀Z'KͶV):BD G^uLtD =ZXd@}4OTIUu$hAx% AsWHzeSɝX 1Hi1yUWϾʚַѩD>|5 nns(de18Lkr6EdD4H}> &K\FƉ<3)&\5 m]xFa)9NE w_K2묧M$$vpN/ -X׫ڼiӐVEn~MEZVϓ&͔E!ԬA˱ϖ56&Fu`ѓ_,dt9)ri}5J{jKOfAPu#XȞww޳&6ik%-04ș8=8;<*?SUimo+S 0X2Ywa{ukk{RvkȈ?a%-K햽3UD@ &6(؝߳蒋j ;%j",׸Tü;kb;dEWkM@BYD 1 `[`O{-7LsbX-ndG '0Y $#K_(;ݓieC9 8Ov\j ϣ rw"ײH_ށQ)94G ُiTdźkS/tbBI< PFXzcBGK%]1pw[y2Wcp TE0\# ~P'o91y$Gs#wjd2L,2 0ZcnOrL5~w$5VͲxePkN%{8TG[_iWG OWfH endstream endobj 1080 0 obj << /Type /Page /Contents 1081 0 R /Resources 1079 0 R /MediaBox [0 0 595.276 841.89] /Parent 1060 0 R /Annots [ 1076 0 R 1077 0 R 1078 0 R ] >> endobj 1076 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [296.612 542.167 320.423 553.962] /Subtype /Link /A << /S /GoTo /D (subsection.4.3.6) >> >> endobj 1077 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [169.818 515.495 193.628 526.863] /Subtype /Link /A << /S /GoTo /D (subsection.4.8.3) >> >> endobj 1078 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [425.238 460.872 449.049 472.666] /Subtype /Link /A << /S /GoTo /D (subsection.7.2.1) >> >> endobj 1082 0 obj << /D [1080 0 R /XYZ 81 757.935 null] >> endobj 271 0 obj << /D [1080 0 R /XYZ 81 675.23 null] >> endobj 1083 0 obj << /D [1080 0 R /XYZ 81 651.486 null] >> endobj 1079 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F88 758 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1089 0 obj << /Length 2177 /Filter /FlateDecode >> stream xY[o~[%;$@f MkED)rKR9sDEK `s899|#=E4>9{A(&,,y0Qb,?ξtϹO>FIB]GI\tF=n{`H#FXD13D=,nho?EDkrI跳;yhk"@sBuX_U_:/~My?Pi]ܹ{k37xk[mwqh 8#7H>Tjx| I|7AEP2-˪uNU-[i>V5jA>Y)T׉!Ly_w+\5^ُCM֏uV_Vr/`t%v0hvFN}6MD2-Wif?Y"kӼh^zCcJ>cI4'y厽/i~5&22$ OƭSKׄ w{Ԛ,ӈZ@O$ )L¸݊%vK뷍ګgH'(,-ʍ0Tl!a$F$ T:"jqLH[͖g}Y˯ʍ8v|ZE޴i?~m=9l%PHxN),$b{$'N9E@c&6"I,"ix1J)X_VfhmwtD7&B֤;Go/c48 ]@lٰ[ Jz[ ΡWthj3JcJ 8*Jo>JȰ3. p8t M4ä2/0iBj!'mE"Tb;k f>?qsV7YxoմYp0u"ki;iPiBRh*L FP2rqՐsi=V;GC)G!lA<AmԼB [yQ8M\|uAӠ+Վ\-óxzVTWk7;a] 66is5ję jOYE=sz>u>9uaSxf ϼ}vʶm&p}fřʊah ĜfF_*~q9B)R̖ۯn;D1{̽ТX = mXhѳ!Ŗƈ"vB(]g` PbOcYqm[]3H-K-Hѭ[&qrNGUClÖ!;/i:*[a jʂP[Qu\ڰ^߬We՗M40d hԾ:mRo14RCfH6*84Z=랗W?^Adn)ۊoy dHUJDb >ګm#YM(*R JN=}0&_bN0%Bߍq>h/yJ%$nb'd) 2uEap7tFDRG#H[S3~q1`_J8Wh[kد X6/:\Cwğ汚UA 'r}+HԺ5m41.1; :ĉ )A"~ps29LoLZ*[Nf|Cbq=4Sf-6>Σ*vױ[k zC`I&34 y0ơդtZ{'5P%/O{o>{:Ff!^ǁ/z}ˆ^zPL@áߒ=nfGhCz;1щ >A¸:֩Hll$> m..#ҧm ViN \ endstream endobj 1088 0 obj << /Type /Page /Contents 1089 0 R /Resources 1087 0 R /MediaBox [0 0 595.276 841.89] /Parent 1060 0 R /Annots [ 1084 0 R 1085 0 R ] >> endobj 1084 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [459.765 626.492 475.394 638.286] /Subtype /Link /A << /S /GoTo /D (section.7.2) >> >> endobj 1085 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [446.432 252.594 470.242 264.388] /Subtype /Link /A << /S /GoTo /D (subsection.4.8.5) >> >> endobj 1090 0 obj << /D [1088 0 R /XYZ 81 757.935 null] >> endobj 272 0 obj << /D [1088 0 R /XYZ 81 611.54 null] >> endobj 1091 0 obj << /D [1088 0 R /XYZ 81 590.157 null] >> endobj 273 0 obj << /D [1088 0 R /XYZ 81 374.233 null] >> endobj 1092 0 obj << /D [1088 0 R /XYZ 81 344.809 null] >> endobj 274 0 obj << /D [1088 0 R /XYZ 81 344.809 null] >> endobj 1093 0 obj << /D [1088 0 R /XYZ 81 321.265 null] >> endobj 275 0 obj << /D [1088 0 R /XYZ 81 147.216 null] >> endobj 1094 0 obj << /D [1088 0 R /XYZ 81 123.472 null] >> endobj 1087 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F44 32 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1100 0 obj << /Length 2904 /Filter /FlateDecode >> stream xڽZێF} /CNo=$qI`/o JK{T)q3h}-(L$etebr}̖>-v(C˙vY~mkD/2x.D8c$vBndK$Y ) ^]Ψyͤٵ, q kE)oY j|."X'KxvNVU6yer@-)Xt "u4ԿV&OdU8K懠d銡j`2%mjC 0bjm [W8I0ێUfJt_Q:6 :߉$Z{QV3oV'BmbpEvQ+xV$6᭼R??Wjq"j[Vɰ\Ž6m/ k&IƥE7k_D62[>}kn/g 4 -Pz!7R ۊlt5SH{+\m#!{3hh}pT\Jbۍ,S mm*kX;|}خ Yެ l"ucw.ߥr6.v|~:ٽ^+zagd0 w'U|mwӊ?A<.jwMLRR A0籨Vyo&_oim#qrp Y@å-qdKzΐ%|!-I>{%[8)L&w \lKxȄEIGb}ەlw59)(>.SZg/[A^S;f ENAQJI!O U X+,;:CqOK=Lg[ TȄkIN/LL[Ь+Di|jU8cU;_azh& Uy!iU5XMh>6s?5='qxZFX;ޚDg!76d9XP"b"f 1LfA@9 U)jڥE'#P:諹#$`'TPKi{,3/HIG#yMm4v4Iq8\7%LѸ+tj]/ GDe,2CDa)Gh*Iܚ8RD&|þcpxz!F5Ba7^һVYށC zR0 0 mBp(M9$䐄䐌9$$䉎dϜc {Uav1Hb,pUU/UtB5b|TAmamd\Sd)쬲Tx>pٸ2gOJ3r}XaMztA 3] RU3~V[tuk. xq^C=XP3kA 513;U#~`y 8JQtߟ9> endobj 1086 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [344.053 691.613 367.863 703.407] /Subtype /Link /A << /S /GoTo /D (subsection.4.9.3) >> >> endobj 1095 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [408.495 446.905 432.305 458.699] /Subtype /Link /A << /S /GoTo /D (subsection.4.9.2) >> >> endobj 1096 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 393.134 107.447 404.502] /Subtype /Link /A << /S /GoTo /D (subsection.4.8.3) >> >> endobj 1097 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [250.282 206.476 274.093 217.872] /Subtype /Link /A << /S /GoTo /D (subsection.4.8.3) >> >> endobj 1101 0 obj << /D [1099 0 R /XYZ 81 757.935 null] >> endobj 276 0 obj << /D [1099 0 R /XYZ 81 539.32 null] >> endobj 1102 0 obj << /D [1099 0 R /XYZ 81 517.841 null] >> endobj 277 0 obj << /D [1099 0 R /XYZ 81 312.015 null] >> endobj 1103 0 obj << /D [1099 0 R /XYZ 81 290.537 null] >> endobj 1098 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F14 33 0 R /F15 750 0 R /F29 17 0 R /F61 742 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1110 0 obj << /Length 3119 /Filter /FlateDecode >> stream xڽr`|1U%=@\qv틓]%9Ȫ2D$I@ +O *9y{gw3>{{WZNLf zc2jϿ=u| {ח?~u;g9iaǛL#qB+pBYK4˙}'͆oOfW 9MvMys*+jt93G>[H E̹2C?siKf[8ڤ}SZf+ ѓ(8Q9Ll>VxءC E.I{&s@3˵|)ySЋ[=6UK7ظN6ꮻNzApqyuќ nEwͤIa*jͤ‹#R OzM%[Œg75 *'Bš7Z(^CEdMbK>Fz.~pɣ/c;8i7F)& fc?葛zNZ& /4aS%:h*v O`/O~;AQjrsrug+V"'z> Qο ,|; \RJ3uQkzZĕ+`COp4D0):`,<²]AX&!/h01ֿ5,>"G jFkD6J䦫њqgGl}ɗl5xlcBOӣGӛhb[8x4ס7ݤOϡ7~zM}zs DaBo3!ɷ_[yM=[g_ÖkׄU^߾&-H͕| U 3|[9uTH0jq/ϣb~ !Hs%>i Zxzs0qDFTvk-Ə?k |<)/7B-—ELKS8NЍϕ04a6 D&_((SKRbyoǬìºvɜqէg2(CͿ<5[Ӕc:"ʸ>geLU꧲^h%&PprNF=VpJBaJ=K*%qo.z@)&sO{٥yr::ռnfS+'V]ٵ/ڶ^EE0DKN8bYqiJMPpr] 8wPhν~PM z_` qyO6EbŹD Q`Nu4 6h7 BQE@[ʏŦ nށyGywJǿʊi2*g8A_zpn~;EReQr b4K8о ` ,1l\S9?XEluE hb_ g|01ޢkR[E(~46J*K!نuY" i"knǜ왧Oq΍Av4ڏժ7F2(L0!?l}'%V-p٩Tkup2,o{eK"1ɏi ڢ@Ͱ+o /XERƗ_؇7W<6V_O]X$.B)3T^Ī#}2A}aG-{tC׷N-7AXf]r?D|"Zo7"1Șv> +Klvĸ'X:13;#c/P bUtMRbh\C+y(hcj'n1 {|pY[l&} fuxf ]Orn!EJG avRR!@!B!W;?b 0R)0 DJLT_ER|G:~x M$ :@0PUlmZS?#:}VdCtʊ`HIn2M/O endstream endobj 1109 0 obj << /Type /Page /Contents 1110 0 R /Resources 1108 0 R /MediaBox [0 0 595.276 841.89] /Parent 1104 0 R /Annots [ 1105 0 R 1106 0 R ] >> endobj 1105 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 602.954 107.447 614.748] /Subtype /Link /A << /S /GoTo /D (subsection.4.9.4) >> >> endobj 1106 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [474.594 263.615 501.437 273.2] /Subtype /Link /A << /S /GoTo /D (cite.HP03) >> >> endobj 1111 0 obj << /D [1109 0 R /XYZ 81 757.935 null] >> endobj 278 0 obj << /D [1109 0 R /XYZ 81 733.028 null] >> endobj 1112 0 obj << /D [1109 0 R /XYZ 81 714.484 null] >> endobj 279 0 obj << /D [1109 0 R /XYZ 81 437.242 null] >> endobj 1113 0 obj << /D [1109 0 R /XYZ 81 405.099 null] >> endobj 280 0 obj << /D [1109 0 R /XYZ 81 405.099 null] >> endobj 1114 0 obj << /D [1109 0 R /XYZ 81 386.539 null] >> endobj 1108 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F88 758 0 R /F14 33 0 R /F44 32 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1119 0 obj << /Length 2490 /Filter /FlateDecode >> stream xZ[o~`݇H>@s4%ucD$%,wW"d {ofvvfV8Ip9K":A'J(dHߦO~?UxOo ͤ0(X#tNɌXYdRQr7x׮\EjW\/q3t}GuYu^۔I6_k?'s`O_̑0e2B$$M.%8]vU_}@'$$Q t2_\\d`IftЌZ%("L7H*pZa 'IWw,ޕQPٺM:"w,61y i8f <@KiDMzt&ĕ tj )fs8HQj(g-uxy_#~.Ik4XE:ܡ[xoAsd(! N# Nd>`wtF0x[ןs,Beqq6ՎYXe58 k׽.]= 9'PF­9vOI XrZJ= Kn 1 :[E#el/3{9۲rGI˝pAw \ .3cVA3*` H GݕR0N7XmX|$#A7"A5[69f˦Ԥv=O?Nf*f۴lfFK@JR!WLcQFwtySVpVؚ=J+S*+k#sIɊJ]Xad,[̾r$b N#c뫫ަS򶮧ߺZ;/99͞|tM [nI b:>B8/7cJ]uh´y_e 04EҲ'> μiq\ժ-/ &t'?c4}i$<;#fd`lMWJY^\yK};2mhoSwޭgF[hwl62ҚZވem?ΐE:G:7~m sz3V?\en&|koEHM3 媇JN%<{5l;vȋg }in8;4onӏX%Е[mzX dmmcbo¦_?)yUrV_u啈[+wl"A5+DP%hdT4˨D!X}('b 5qFa Xo{)NjVK\-5ͅ^UQdKFV_Z4#_)`Rc\/6|f\.rOgSIptq>s 3Jǀ`^H\w`b #шH\Ok 1:ő \"I#Y̏ObQ^$x/{)@,{4O><zxϵt> *ƅ?Ǒ*Irz'.g+ Z#zCZp92dkC?| endstream endobj 1118 0 obj << /Type /Page /Contents 1119 0 R /Resources 1117 0 R /MediaBox [0 0 595.276 841.89] /Parent 1104 0 R /Annots [ 1107 0 R 1115 0 R 1116 0 R ] >> endobj 1107 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [424.624 718.711 440.253 730.505] /Subtype /Link /A << /S /GoTo /D (section.4.2) >> >> endobj 1115 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [422.028 402.89 448.871 412.475] /Subtype /Link /A << /S /GoTo /D (cite.HP03) >> >> endobj 1116 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [137.072 375.792 162.093 385.377] /Subtype /Link /A << /S /GoTo /D (cite.JH04) >> >> endobj 1120 0 obj << /D [1118 0 R /XYZ 81 757.935 null] >> endobj 281 0 obj << /D [1118 0 R /XYZ 81 520.195 null] >> endobj 1121 0 obj << /D [1118 0 R /XYZ 81 498.716 null] >> endobj 1117 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F14 33 0 R /F44 32 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1129 0 obj << /Length 2372 /Filter /FlateDecode >> stream xZ[o~ϯc6K,f6̴VN^Hb[>hxx.>,Q(FϷ Zٵ,i="K@ Uc}\lb;N72C(60Ѻ AnĺKp"')5xM PT61oc"F6,SGOcx['] ]]цCsL #6j9v8!Jfb+ EB(!lo S觬Tl;6rNt:/ >twB ٶ޴Y{\j{ϊcu ¬ˢ2ENL1$h+še$_碲rX62cKurY-\e w,_}{ahZڢU(v)g.E>']:6&[JF * 1 )& L+=0 "weǩ:J`78&;D 6lC*]c\},W2OWP0QCMTonԝٌ8NDRI3%!f7Dv epaedgk@^(DL$ ֛HZ58|ii{P!=,2Nr` yu%V,W{|?#F auZz^ +Va@Sl;*_>.CHWgLrq(0& 0tc)d\4ӳt5/7;Dq3/6[,0ym}a~pي$Pa橑x{-ןX> rTCv nEg,ԐbcJE?sAէ1$_wS,^p~4n f^ D ⡭Ǯ}и)<'Jٍ+$lUY0Mѧy}iu5ec2MwEWKh:M=Db  p,A+,'롯?sG-[ =ٽP@V rN \5[S @bL uyÁśzgVtv :wqgGn7|[.ZTv»1emֳg+Bumlb|qǣeö_:l2`|S痍ښ,v3gkAԼ]i?רqy*T+yTRd ~ x瓃Mz?9P&^~rg \J W:JEg Q3A$#"#X,rOڛXl7yo*`v,9I S /{:iz endstream endobj 1128 0 obj << /Type /Page /Contents 1129 0 R /Resources 1127 0 R /MediaBox [0 0 595.276 841.89] /Parent 1104 0 R /Annots [ 1123 0 R 1124 0 R 1125 0 R 1126 0 R ] >> endobj 1123 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [407.11 500.954 430.92 512.748] /Subtype /Link /A << /S /GoTo /D (subsection.5.6.2) >> >> endobj 1124 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [346.019 476.065 377.095 485.65] /Subtype /Link /A << /S /GoTo /D (cite.Gao03) >> >> endobj 1125 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [140.249 172.905 165.271 182.49] /Subtype /Link /A << /S /GoTo /D (cite.JH04) >> >> endobj 1126 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [326.635 144.023 350.445 155.392] /Subtype /Link /A << /S /GoTo /D (subsection.5.6.2) >> >> endobj 1130 0 obj << /D [1128 0 R /XYZ 81 757.935 null] >> endobj 282 0 obj << /D [1128 0 R /XYZ 81 579.82 null] >> endobj 1131 0 obj << /D [1128 0 R /XYZ 81 558.288 null] >> endobj 283 0 obj << /D [1128 0 R /XYZ 81 249.562 null] >> endobj 1132 0 obj << /D [1128 0 R /XYZ 81 228.03 null] >> endobj 1127 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F14 33 0 R /F44 32 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1138 0 obj << /Length 2256 /Filter /FlateDecode >> stream xZ[o8~ϯ0/fy;$3,fwADXJH%ieY`8$^C NnpyD!I.yBrLre21H*m#)Ju}}? 2_U]E |ț7I^'N+!iL^ }HHP  B#Z{Hۻ}F#" 'ZuQ>VP^r?xB"IzQQU4qd[k'Ɏj,V Q2WC4FR~HGqDvz=ՙ:>ݟW˴hBF c"j||lM(!.R1悀)b|uScM>O.ӈ@[i ϫyVe2_U:D|A5 ^s \*:Y!EBu?$qha/@(֏0El"/lXbuZ3 By6^,xzzQ0 kCWYZE .bSb#:g.#cO{3b\x|{vBDvC@9Y($*_/B옮f:ןΥ%YYeCKYf H҇%)F:Pli/X 䏬,*6& :Hq<>|m]ņu"\)L;?C/`gOE9J-Mx_}֊ 0I [׭je@<!!M/Tb cmf]TYOݣrD[w/.+< PCjMB0!5GZl eg)^܄vewmmgxTԒf!@\sH3}-BƤIڏGdL0ƃl5ek`@x}&7.dLxA>bh.Fps`gk0Wp:X宦DDӦh5Z_P(oNM_ͪX=m6lߝ3Cp( U?_f1|W@!!znmJxeV0 fgMmYޯ+_Z<"*\.g{XQ68-VaY3JBAuQ.SKT%fФaFk4Ƙٵݼ6մ7JHL x ;M74r!;g u:sY/ q򵚳|tYG$sq?yŠ̰mw{q'-W`/ep6+ٴ0x)_k|YԦ2[/{ ʫ2-}|oN,jD-F8mx(viM ٵKY_9c^*dty|KOoӻ*ɦŵK'S7׶3x, gBg+ٖh؜7|Ƭ4~ RQ^ނY!8dǡOr ؜";"s>xB#{+!ik#; ݃n8<> endobj 1134 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [284.206 249.664 299.835 261.459] /Subtype /Link /A << /S /GoTo /D (section.5.8) >> >> endobj 1135 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [312.223 224.775 337.244 234.36] /Subtype /Link /A << /S /GoTo /D (cite.JH04) >> >> endobj 1139 0 obj << /D [1137 0 R /XYZ 81 757.935 null] >> endobj 284 0 obj << /D [1137 0 R /XYZ 81 328.53 null] >> endobj 1140 0 obj << /D [1137 0 R /XYZ 81 304.786 null] >> endobj 1136 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1143 0 obj << /Length 2561 /Filter /FlateDecode >> stream x[Yo~ )#}YE1Y=t8|Tyy'؇$Ώ(^WS11ѣp9?ln>!aV6v][lN8R# ca\l cˉkEPYTzmwuJd$_aKU8[r-|^:kf)3\`nu;<)95Ԝ2BFuϗ>0~,7UM?GQZT5"SD¢<%,Yw"82%}W# ˳ZwfU}=*|]`YVkA}S*hn|gd6/*/'=n{Rv?Ҧwx3@W~\?!ɩK!Z1>ǤIҪ z(N"Rv"Ӹ a˺3 Gq]iό:A8m$ue@/h%+?q_Z,\a֪-l̮nt(*{H _ ^Cm7眞287(iK,^IUCOH> ,\ę _SR}=+ FI L?Xc%pڅZf8krVaVr=?3L ozP U_TcR}:R: Uk@xKTJhOk3u?WA@!|^"`HmY"Ì`  C-"; ]@!`2;KO`g K4>%DW&N~U‹fg%9vnf'sUe wɅka} #-IVj_ R@N!HIJ#mN2%˜{⯻Z@WA{=O:֋!- |' m*G,<<8b+›ɖf{G]؂NZt[Q)c]jdž7N4,)4jye_)|Ekl0&#*Өhy_3ʲA>pL:2;WylD_ _0ih.lYEOM^;ǧ|cJ#7Hc6~\߆0^E.r# p{Õ QE+%39'x',^IpH< ^&|~qȯgSH{S|{~o,>6I]loI}T!1'ܤ;hm?<%+"8]6H\!/Ir&6Oa_9slQo~4C0ShWߧtg_EKǛ8SKѬ 2a+uz@XؽĦCHMwuvGoNoY|4@!ph> .D~E%9IƥB7.O.] wq%> Jnۢ|0&*LԊܵ@>&0 $bXvu^ql|K7T֥*ig[ "I Ch2ucs'tOTG ;f.3S.i_Yl7 _7,ߧPg'ƵL)YyodEenz9\6;uo؆#5[ڿЅv҈ٖ} Ixi0^ڟFI(Miq!#5:)MZOxfQҢG1kAWrBswjzpQnbMy&Bi$/֭ H;)QIa猁g8g9p5Vi7gyNv39s50F`_D/㸓^Ɖn 3Un]#LbӌZfi&2ehaYN'T3QFCl5qJkZpmj8"J#i+ҡ&RŬxu IݢnQPe*Jь endstream endobj 1142 0 obj << /Type /Page /Contents 1143 0 R /Resources 1141 0 R /MediaBox [0 0 595.276 841.89] /Parent 1104 0 R >> endobj 1144 0 obj << /D [1142 0 R /XYZ 81 757.935 null] >> endobj 285 0 obj << /D [1142 0 R /XYZ 81 639.365 null] >> endobj 1145 0 obj << /D [1142 0 R /XYZ 81 615.621 null] >> endobj 286 0 obj << /D [1142 0 R /XYZ 81 188.512 null] >> endobj 1146 0 obj << /D [1142 0 R /XYZ 81 164.768 null] >> endobj 1141 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F44 32 0 R /F88 758 0 R /F15 750 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1150 0 obj << /Length 2286 /Filter /FlateDecode >> stream xڵZ[s~$/R#aq(̤NMݤ^ӉD{9Hz/>)D+6/@}@8yHpg.9K">A'J(dH~+0 GחD¿-hY80!Hom}G a )D#RK'ԎFU7SvU{nvZyvsO‡5|őAG! a|"mj5H0zWCܵ73ᷓ|/DFELUt=ێDo 9AzzID\S8;͚@\`@0={8#=Ud#:h5h"Vymha<$0nCTJĮ4;O{ <&^VH(6a`^\*/ۣͧe )$уSQ()`XdZEֿ݇QѲp%CRM ~nLsbqE-NH0 Q@ tF"datbw^@“Y./*oe*rYLؤђ`aTfu2r6HyqX;3#ӚfZs&9#9 y>~H7-.>ZvZ H̹uOXsbs DrqPɮ:Ȫy?'^cF ɵ<&= 5D(j {G!ˤp| H|M/mߞ/HatR`weZe@!&!&`T\I~WOF ZuݪVݞMQyd1ȑL[<󾁭6[od)vʤcV-gbʇuZ͉]PCFArq4ctӪi?Ί#w]ф3#!:5b2V 0=n! כsҽգ Q$F!UIYr?ƣE5&zT5c߽_]Ε N m37݌ sZ[jn)`"ETOmZRA`]#F)?&/mt@ߝ` 8eCBDnH5UCUS> endobj 1147 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [467.007 284.534 496.272 296.328] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.9) >> >> endobj 1151 0 obj << /D [1149 0 R /XYZ 81 757.935 null] >> endobj 287 0 obj << /D [1149 0 R /XYZ 81 376.949 null] >> endobj 1152 0 obj << /D [1149 0 R /XYZ 81 353.205 null] >> endobj 1148 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1159 0 obj << /Length 2511 /Filter /FlateDecode >> stream xr`^* 7&UlrHmf\>mV"$5^xQ|X h>狿^]Y 0]ET1( LDW:E,\'8A0XN3Mczf3%HIqdG_y?|c}储eW Mvu;8/,aGK _9z~Xz^e{MKAnvەhoO`|("81H5v#IM[>_՛"'Z_2MKPj1&5tY/j:qNJX_YpaՓIc<]9]xT`z ôLg d(S"mq;ēKU7`777/l<5=O _lȸGLs4Gq-98ZB65㈆3F ^y~.Vb]*7E&Imxig>^jϣ̈́" h/ .7!KJ|J4v9Fí|ގ>9dv9Ĵ0fs2PGN$+ 2yC3_W7_ix6}՗XUOi6C11ylI$DP[D7|7!BYvTE]EHDwbP<4ٞMmr9;j_wpZn[ HF^zg:ҝQqiaӜaޛp>#Bk!^Bӄ69''ngvO9M:i~_ڌj#oFߌ#O5H3i3<ZPvj;6 0F"zrx=QU$^h ѼO]Z̻fեn:K@Xr-u:aX W"{ܓl7 sP@\A2b_ KV尃G; _Ƒ A{sGY!{ػ[l<3ή3dUIǷi7_]7q(9O9DT4]V$rD}wih=17+Di.Uڒ3j&]{2f I7_gDC@}vW$SI%D{rGwf4#JmHƲA]}N76¾t 6ԙMlLYKhcjGQiC2E)D40[nE2=s MKSi͢ vV zcimKFāȓ }&FךEq24!̷k,ٺȪ 5ߔ̠M *=ÌZ&r,J j!R 7?:;{p3tKs !bhwٮ(Ay7$Lv$%/OlO~A]@ $z/WD`0S W~%{ɉCO<01̜K-M^ռ"$g[Y3>K+(> endobj 1154 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [197.532 630.052 226.797 641.846] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.8) >> >> endobj 1155 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.988 258.895 210.254 270.264] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.8) >> >> endobj 1160 0 obj << /D [1158 0 R /XYZ 81 757.935 null] >> endobj 288 0 obj << /D [1158 0 R /XYZ 81 733.028 null] >> endobj 1161 0 obj << /D [1158 0 R /XYZ 81 712.273 null] >> endobj 289 0 obj << /D [1158 0 R /XYZ 81 377.983 null] >> endobj 1162 0 obj << /D [1158 0 R /XYZ 81 354.239 null] >> endobj 290 0 obj << /D [1158 0 R /XYZ 81 161.818 null] >> endobj 1163 0 obj << /D [1158 0 R /XYZ 81 140.339 null] >> endobj 1157 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1166 0 obj << /Length 2402 /Filter /FlateDecode >> stream xڵZKsWTpʩxwl%)gTD-IO )Ҁ sB }Fwh-"^OE HQ͠#%2LD)&֞A02ظ7)A[#t뙠r M@ZJ}oeR,F0._|SL vvaxL]V/=%۹iϷ`YZ=N_:+܂pd C ն,\ qZ [feݽ+N}Tm}m|mnl %!q,wVzrV5YRPײ^oX S [O$uJ1DZ#C/ ҼemUAeS:e*WhH:S/|85߇M9(;){q]bތv v(M*T8Y/@W>%0X,Mj3]!, EE c\nE7[T"]8eC-]-Y՝CDl!U:G  0IAsY Kh6g-uZ$Sf(Ie(kC`81U%G8^\f Ca3H㿀0UiK]-Kg]UW]L̜9U{ o$-TWXy 8s Shzz֪d*8؋on "}vGܫzbvD­!#|&9#;kp~Lel f--uO>B. Y>QB ĨnG]mts!)^$/] a-ϙJ-ΛJ%׫}Vm3W2 %Rĝ)Hmpц1!s6rF)k;sZYj(]4ΑŨF&$XwMlv S%3nbCMRwq'Tk'z#L!Hex/` 6q?lg7f Bi *f pD"}XdGsh&cFGoU  )fd=\ÝF=EesQHdChz2 Ko $6HPrj QdFא3C @vi[B+zO @mo]l '[Rn(sq BQ1oڦIO_gjV5,ˉJ_Ő]((~ BMi@np%S˧& RA(sյ+ frŗaM{?v T+GA|d{/X:ϋ41%3;k>t4`qU['_%`|>AHpi>&(HS7O\| zX AH@v(ycqma!=n&ѣwP(|z~5CzF!rAVUs82Q @|(y8& f Is>3r8p=rQF|z W)FC|gG4lYP`ލ|ͧ%58hj|0t NyߤFČMePANW: [85I~"HN p\>5'՘cQfl }BC;ˏ议A' S <F,w@^ [ϭ^}gG@L#tϜ1`>[J0ȐJD'˰p< (RszlHj9 [LUys8!|Z"4 j=R g {ڽ-pW efE{)D0ě8mvMD]鴏MΔ` _ng%{wef@`;=J!M?!|ȂT7q7H ZXQ.s)0/mu~r/ ?${&TLHLc(; (,Ub6{')ݔ6uMݵ^Rn5^zdtққߌ$jMI|Btۼ#{ѩp\$V;_]t)W^HveΤJ{)3vzqJU6K fjڻ] . ~\f :-AN/} G񳣒IwUm{WuaWvQ.]=ٜ4yn?ֆ endstream endobj 1165 0 obj << /Type /Page /Contents 1166 0 R /Resources 1164 0 R /MediaBox [0 0 595.276 841.89] /Parent 1153 0 R /Annots [ 1156 0 R ] >> endobj 1156 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [414.934 626.076 441.777 635.661] /Subtype /Link /A << /S /GoTo /D (cite.HP03) >> >> endobj 1167 0 obj << /D [1165 0 R /XYZ 81 757.935 null] >> endobj 291 0 obj << /D [1165 0 R /XYZ 81 267.389 null] >> endobj 1168 0 obj << /D [1165 0 R /XYZ 81 245.857 null] >> endobj 1164 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F46 35 0 R /F85 743 0 R /F15 750 0 R /F14 33 0 R /F88 758 0 R /F29 17 0 R /F61 742 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1187 0 obj << /Length 1901 /Filter /FlateDecode >> stream xڽYYs6~IX^hiMiS}eNy$]`(5N<8.=ʣOWG/N8%a΋>Y/x@g#J ~/ά@DqĴ@-|Ib&Pޙ*UYB'R5(ւzq*(T: >^iݦL۬*w]aI5x,$Rނ 8S\*#ـshbCHZclσUk4 a]<怜UYڪ gJ/ [D֫zS[ϧ0֛G$+9 fU?->fdfv^a,͖Q~1v;28_@x6;fpL3h+z*^;ߞ@Z|-!ל RY߽aYs8QP/9: ѓmRv*k׷%|ymB]4!AoQKEQVde5kfI>Zҋ&{(K`@)YaY*W*Fˮ)D5iwo".p`<>R a"6D!^5Nlr^h‘<.$ ̚UtҰp>.cvdp.*g%R8臶(|XL{5dZF.`%\ Zg~%x*mV6<nw u]v`L 2DǨZt:y!`~Hφfe2-%(_#>%&\`l֫0uV{{uh/D,xsV8p)jkѭ=|9Xz0 xe$XiǦc{ȹUyb"BPv`_*q=W=|LdHք%[{_Sn{fS|?4-# R8t889C2)ԍNpFWX;HŤDŽ߹ !9aH?Q˰Osd\)u;qR,<3WBh1UC'ϚvHYS@X$B&YVDX˩=OTtj 8099! RHte8Zx :!cx4IS} mrF*,X}3bHȝRǺEFRvw>d϶U֮5T%I Nˆn 4d)C(̱y,իA@%άbu[O[ُoԖvS}Θ?GQg >-oy**<&#D}s ^C @aۛ+^SCUB2!ɠ'2[u@0H~ XvP&XuV"zwcL '6۹G+ibn 7/_n볭mXꋃ\ {24VF[Q6Ho쓳#8{llŶl#CV9 Ȇ\8fZ[czoc;T- PuYv? endstream endobj 1186 0 obj << /Type /Page /Contents 1187 0 R /Resources 1185 0 R /MediaBox [0 0 595.276 841.89] /Parent 1153 0 R /Annots [ 1169 0 R 1170 0 R 1171 0 R 1172 0 R 1173 0 R 1174 0 R 1175 0 R 1176 0 R 1177 0 R 1178 0 R 1179 0 R 1180 0 R 1181 0 R 1182 0 R 1183 0 R 1184 0 R ] >> endobj 1169 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.394 527.229 148.023 539.023] /Subtype /Link /A << /S /GoTo /D (section.5.1) >> >> endobj 1170 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.394 513.68 148.023 525.474] /Subtype /Link /A << /S /GoTo /D (section.5.2) >> >> endobj 1171 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.699 500.131 149.328 511.925] /Subtype /Link /A << /S /GoTo /D (section.5.3) >> >> endobj 1172 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.394 473.032 148.023 484.826] /Subtype /Link /A << /S /GoTo /D (section.5.4) >> >> endobj 1173 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.394 459.483 148.023 471.277] /Subtype /Link /A << /S /GoTo /D (section.5.5) >> >> endobj 1174 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.141 445.934 148.77 457.728] /Subtype /Link /A << /S /GoTo /D (section.5.6) >> >> endobj 1175 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.394 405.286 148.023 417.081] /Subtype /Link /A << /S /GoTo /D (section.5.7) >> >> endobj 1176 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.394 391.737 148.023 403.531] /Subtype /Link /A << /S /GoTo /D (section.5.8) >> >> endobj 1177 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [173.2 318.659 197.011 330.027] /Subtype /Link /A << /S /GoTo /D (subsection.5.1.1) >> >> endobj 1178 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [277.033 318.659 300.843 330.027] /Subtype /Link /A << /S /GoTo /D (subsection.5.1.2) >> >> endobj 1179 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [391.993 318.659 415.803 330.027] /Subtype /Link /A << /S /GoTo /D (subsection.5.1.3) >> >> endobj 1180 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [489.193 318.659 513.004 330.027] /Subtype /Link /A << /S /GoTo /D (subsection.5.1.4) >> >> endobj 1181 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.283 291.135 387.094 302.929] /Subtype /Link /A << /S /GoTo /D (subsection.5.1.5) >> >> endobj 1182 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [246.813 277.586 270.624 289.38] /Subtype /Link /A << /S /GoTo /D (subsection.5.1.6) >> >> endobj 1183 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [327.867 250.487 351.678 262.282] /Subtype /Link /A << /S /GoTo /D (subsection.5.1.7) >> >> endobj 1184 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [425.394 250.487 449.204 262.282] /Subtype /Link /A << /S /GoTo /D (subsection.5.1.8) >> >> endobj 1188 0 obj << /D [1186 0 R /XYZ 81 757.935 null] >> endobj 292 0 obj << /D [1186 0 R /XYZ 81 733.028 null] >> endobj 1189 0 obj << /D [1186 0 R /XYZ 81 552.642 null] >> endobj 293 0 obj << /D [1186 0 R /XYZ 81 375.552 null] >> endobj 1190 0 obj << /D [1186 0 R /XYZ 81 345.77 null] >> endobj 294 0 obj << /D [1186 0 R /XYZ 81 235.529 null] >> endobj 1191 0 obj << /D [1186 0 R /XYZ 81 216.358 null] >> endobj 1185 0 obj << /Font << /F29 17 0 R /F31 18 0 R /F36 19 0 R /F61 742 0 R /F85 743 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1195 0 obj << /Length 2916 /Filter /FlateDecode >> stream xZIsFW6d}*vRaƚA"!p@0{r\2`/o׍'ﯾzD!InyBfg컹³εm lH #y)l+V+MDDIшk,Ww8Yo?%1Ϯ&lW2d$vUÑ0K~L?c~Y~Je?y'(Ag8K$ lB%GTKZiǏEYeA7|j$^⠗[@xוFh<;ASPdP)ͩ94sۿ:Vwv+rz  G|L~.x!]۴\-VYH+ N@' o$P2`v#m\o-E6@G]ljfUlwsCTP) ?e.zD#a\X0Cjp6 nBq5{(mIh۝X=CkYli /s2K%}fI,e P>\W=;#ofuT)V&f?83 ALt]cAY1Feil a6ܯ_YSAftO@e9'zfyY7U%8F4)m4&=tr-f2x_TOٟs"fYUT3nl= fY/]_\y%,ԓ| ׭WH؇LJ=%e2ο@CYlZMr%#N@I渲W5"|-DO5ǧ^UĴޗ,i%եǛś̯\SerԀ_R3˜k4sftoA햀(g?nQR!Gcy]=Em"N`"6Pm,$6GAg:X! Ŕ!gղAdd'b#ЦŒ<6GǨ2k V_a_no1d@ $,Jnd#PsHaW]Dআ!: N_B.g@20m ~*ژ X 'a-#4)k5UEϪ2w6Vu^<-髞("F'qSB>,^f6r?kͅ|g=ݏik9E!slw֫:r Гz+HHTL׼icD&T]JK?-m ]985nj nk*L)ӊ勎2gزʙ |t6yeݷqsV@LkJ:ҝ'#d.aP{MiN'֮{y4quD,6mıpicrD&1rD;U1㷅%Ž=DlAקR99como 6[ySj A{b:׺tdl! "4=dzt $/jwٲpA0tbxHy : ⶎE 1]tl{iuer,0 e6+U͔NW,jj{?VH: `GOeoܚ0vgSADStT 4\T>a2#7_͗'ƈ !)1!tu@r`K i2js[6rKBж, <&h'}mxNm0D )VBv+Y쫐ab p`|Cr~vi\Ycg$ب?8IΥ[*syJAhLyaH ^9H "?ՏpuXw l6\eݪ[Y k]i ed˪;4c5P"+h5C[!V & Izn[(cS r٬,-fVn ):{$(u?VFfH}LRhwfUU\SZ,UdcF u(!<,+Ve-ĦlO',2[sޙ L 6>C@QXT+30Yusڠ@bh|X!ۂ>e0"^/ՠXq:鮍?S3˺Tl o$aws<+"Mf×f`UX>c}F"/)j"@vˆ| |7:-vͅoEtwD>rBԍޝR]9r|2GRC\BpN2W̮҆>'9eqV=ʰ`$ş쌴<aƈQuO6zOS ٜ(. @_X,B"/"a '4Kݘ?!a+$Xmlba-`ʄ ];1u@Ah} N􁳉5YL,>p.K##]2{tH)#xs <1hE Rjp}NSh?}泽Bho>3n>-]ev~z҇hEG > &'պ endstream endobj 1194 0 obj << /Type /Page /Contents 1195 0 R /Resources 1193 0 R /MediaBox [0 0 595.276 841.89] /Parent 1153 0 R /Annots [ 1192 0 R ] >> endobj 1192 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 355.667 107.447 367.461] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.4) >> >> endobj 1196 0 obj << /D [1194 0 R /XYZ 81 757.935 null] >> endobj 295 0 obj << /D [1194 0 R /XYZ 81 651.32 null] >> endobj 1197 0 obj << /D [1194 0 R /XYZ 81 629.788 null] >> endobj 296 0 obj << /D [1194 0 R /XYZ 81 153.012 null] >> endobj 1198 0 obj << /D [1194 0 R /XYZ 81 131.48 null] >> endobj 1193 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F14 33 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1202 0 obj << /Length 3279 /Filter /FlateDecode >> stream xڽْ6}BoT$*Gff<(gZ)MqIQ w˞ hago~{kf ~F5g>SB!v;[w ǯ_ Ϥ0(Hi]KN`!!fK&OzIUMVlE%l oLבv д1Hč.Fc܅AB,=)zPÔ͏_6ŦO8/zZDD"ʁ}F_mj nzH)3$Fzdu bT:рGE1dw-'8Q>9!B_o.A05 Ƌ EɃn>O#&ǮEXu#H Z҄#nlD2nR1VShKNsS輞%+E@/b5`CH16[:†XwݦG""Yl1ЈQaGI>x XwA+^2,(.amҚs k3ϳk*柏 P){"ƂW ۫OWV xFf(Ikpó-|q|vCVEz?r*P\ay8F`iSsj,}))Uހ7 k%n L!2e,k. NL$"+A YltV'fF\I/ v Uպ0c>Ol umxY\1O6,Y~ B )*xϓ}rHѿڵo~ߥNtߥ:jnSoha'F7a0lJ)4(Pp+(Nby6aݫ8:$Q7s ЩC s>Ig1xid49zk#]niP_;~>?eKza-wğX(v 0鵃%b<{C$Z!>W}YNY%xlI!p%`, 5cKiY"! (EM?>|'Uxu1`P0g NHcw <cf$ሱ&xXz)7]+K߿zmďFE0)'NC)PH[V]ԲĎǴMnXaGESԯH,8\<6͊#'P8I^c tA-%!둝߆ӛv6-|F{zHiI 'bpIƣkS(`(v ݯǤѫga2h8E 3H1LVm 8Ȋa$PfoD4R'IÛRxsd~w<,h${.1(*HyU g{;sIyyfvK^V=K^s VH`2ۦ/ڙ0IQ.u Ge>=B"ER-5]qf]w%5%u|3LD4&װ'}wV)a$*g3:ﺜGR)[)Ϫ:w(*dJ^Ȣ΍Fl-X]V+:G}_CȲ~MC!K1N ] >I:x=m_?C5+\ Mg;ߞQ2YJ{,N,<`fHV{kLnEhE껒<)2]("8쓭{wh7PThڗU~.Emtmtm@;Rr*x *4lu51wu :5W#R"-pඡ2x%O[!jq_ԣ$Hv_`/ Vlo p׾w{SJmq}OΆ ]V/:Nlˮ>Qi[nqe9}X_6Yow)X sZlv_ g|} Bo.W$Щ#L(X_[sa竈&O m|rLӏ*zẁֶVIL8׵BTt ,Ql^>aցj<@ i6~,:Opf IP. ^\rrABXRX-G_4aǾZn[^q(C늤LjfEVшicBoAm26-_xLAPH?IȃFӎǭM@Sgx)쩝jqPS ڙvdNmQmSK4|1Q0c/% fir: /xԌ *S4'P9@>Co}{ endstream endobj 1201 0 obj << /Type /Page /Contents 1202 0 R /Resources 1200 0 R /MediaBox [0 0 595.276 841.89] /Parent 1153 0 R /Annots [ 1199 0 R ] >> endobj 1199 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [323.934 300.165 347.745 311.533] /Subtype /Link /A << /S /GoTo /D (subsection.4.3.7) >> >> endobj 1203 0 obj << /D [1201 0 R /XYZ 81 757.935 null] >> endobj 297 0 obj << /D [1201 0 R /XYZ 81 459.9 null] >> endobj 1204 0 obj << /D [1201 0 R /XYZ 81 438.368 null] >> endobj 1200 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F46 35 0 R /F14 33 0 R /F85 743 0 R /F15 750 0 R /F88 758 0 R /F44 32 0 R /F29 17 0 R /F61 742 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1209 0 obj << /Length 2261 /Filter /FlateDecode >> stream xYK۸W(UI0Tml\{HV$&n~}RHqDq0ݍF8xpp?z掳@! O xB~^fBfr̠+a@ f3HK& Dp9h>~Vc<l.ƭňl)'œ?a,}9ʴ?aX-c%A.+ ]pN bIb!E4C),&4ݖbfq7!}*4Z-CbFs;ݽ:y\y){1bm/{r?qHa y5kR8_ϳ|V3ҳRڒBkق/_I&kS@!$aPGC8@X"+ E˗(u,wmY5(v8[f.i%ɔs[Fym!-Pe1bD؀qR s5cRBUH(v8AR>_ߑ!cq;p!$J;','μYYΚWqܛE4$c4 3_wh K@MB@'{!CT7Y~XϾ̌M0 <Ƀ~gl AjG* ]qw !l'սv2SΒ~wqwU]tSuȸ! HA@/ jLnQ)C0(g=r{$DSށ?.VR;?uiɥk ;־0Qa?- 5#0AuDT#Ic T]o_;bwκdA]h;z  $Mҍ w䕭T,ɜNЃ ~ـңj 1T(-l9Vt `H(= i$Y\p$*Vx6]DI :COѮ4l@M " ? 朴Qhpo9{Xl!{L"K5J0 faS¡iCj29xoZ֪ޛqyBjoz^MSz[?cZ3TMޞ!"K\:{#>PCut>]4Pu.:^.?a& S6 tqaǯ+~I*Js,]yNس^]{[gkAߝR_}bN1L !İ"+Gܰ2}utJˇ&Al JNu0vleLL\:%r GgaaL:ތ',51#wvod6Iyw_DKl x@KhMPd%h7A 2Z#>U#齅q[ZЃ mGԐP|ijL滾G(z۸H e`7`In@, ,VLvl!M}jQuU&mӢ&K!7P$V*ûʕЏvYNܻGcw'sæ򢷜02*"aMKR6֯jx7.OqyHL3TMݩGa9 y< Z [R7ƫV]4k?s1j_L.v8-; ׂD]غDg%$F 3xW&ilF>{'&byR+mxB<l ]Ae!1ֺ0OuU.Ԯk8Z=-^ i_sku0)5O,f|l {OX=L`>#s TW.䐟͠]_|MSS_7l90kPwI׫:2 {$"O=%_216={dCQQm9|T [+&şU{e@<pb" UX^+>\הt5%bkJu{&.n("צk6̕MbHjW(z NÓh*U  endstream endobj 1208 0 obj << /Type /Page /Contents 1209 0 R /Resources 1207 0 R /MediaBox [0 0 595.276 841.89] /Parent 1214 0 R /Annots [ 1205 0 R 1206 0 R ] >> endobj 1205 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 630.478 112.902 641.846] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.12) >> >> endobj 1206 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [130.873 194.612 154.683 205.98] /Subtype /Link /A << /S /GoTo /D (subsection.5.1.8) >> >> endobj 1210 0 obj << /D [1208 0 R /XYZ 81 757.935 null] >> endobj 298 0 obj << /D [1208 0 R /XYZ 81 733.028 null] >> endobj 1211 0 obj << /D [1208 0 R /XYZ 81 714.484 null] >> endobj 299 0 obj << /D [1208 0 R /XYZ 81 501.343 null] >> endobj 1212 0 obj << /D [1208 0 R /XYZ 81 479.811 null] >> endobj 300 0 obj << /D [1208 0 R /XYZ 81 340.798 null] >> endobj 1213 0 obj << /D [1208 0 R /XYZ 81 317.054 null] >> endobj 1207 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1230 0 obj << /Length 2712 /Filter /FlateDecode >> stream xڽr۸_Gc!Dwڙ${vYiZmN(KQqү98EJl7}p?@>ٻ7Z,VLf zfeNr)s˓gXKX!8sJ +~M3vzs)L挑8{gr Ҕ&XX ~lxu64oŷ},F[0a#$ZB >s4#bqpLYgN p $..'0r?IqŤYnS/Ǽ+'pp@@>+&C]Ӯbi2)DXn-˴3ۢ۴uSQ$h\iqf}#d)ey$)3%źiezQLp'i>jtؔ䶬s2J|YEF3Uk{ʺschӳg,3,H-Vgnl `fO~j&ez)@&L? 1G(!AxL>|WU`Rl=<:`h8$hqq# !&=B$tˀ):P>3)TOT %o z>/z"}*.NBlp>zB1 % U1V+]"\!CnO'{mDüIO ;w jW_aѥ/T`VTD @;F0&_r[O.XQ?"Zc;fqd6{7 b y)8>s}CX/|< r*zO tgB %0T_|nMP4=-tb2T"3#.ϳ(T b1}(8\X* y~PG;ʢ\9L ~vJ9̰901)_*ͻD Ww,K2MIBXuAb=8~uE[ކV⎒n釣^(@Beatt1({|"-X.RD8;4ge6:J1bCDZ{GXqzz6+Z º&L!ciW 5\AUKv|a =86]ei;vEzW?q,TS{{,:|V[M#a_, 5A!a C 됤ġz'K3r<դ@;j dO~\`J,ͪjnΥIjb9ajozڋ:a48fO8;j~2nC8_#/6Hi_ 'o' P8T(wOr! 8EMXj_Pi x-zZeO7xhԝ:1-BJ^NHI'v~]/8yʤQ:>OPnԩ->TA$2̈HWh6y*aۘJ2*4\ԗW)N! @m>n0Y}1.9#^e@uu.hnr*޽9OGL 6߾8h@NS03@nէ:};& 2Um5_w׃G0q2+xy2 @hFToտiOZ)Xa]{n<ޡI ;~(Xm N$-:¯ FއDNM| 99\(S\sQ^9|{ߖkNN6UCk0Rfe^274W/j|E JVzm1@kHV÷@߃Ƶ."Wq [T_d[D:  blb,a`xqCvC1xHq<֠5ERJ،s^4N1~zR?X~>'!pN endstream endobj 1229 0 obj << /Type /Page /Contents 1230 0 R /Resources 1228 0 R /MediaBox [0 0 595.276 841.89] /Parent 1214 0 R /Annots [ 1215 0 R 1216 0 R 1217 0 R 1218 0 R 1219 0 R 1220 0 R 1221 0 R 1222 0 R 1223 0 R 1224 0 R 1225 0 R 1226 0 R ] >> endobj 1215 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142 429.262 165.81 440.63] /Subtype /Link /A << /S /GoTo /D (subsection.5.1.7) >> >> endobj 1216 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 328.66 107.447 340.028] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.1) >> >> endobj 1217 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [270.782 328.66 294.593 340.028] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.3) >> >> endobj 1218 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.076 287.586 174.887 299.381] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.4) >> >> endobj 1219 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.081 287.586 382.891 299.381] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.5) >> >> endobj 1220 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [217.959 274.463 241.77 285.831] /Subtype /Link /A << /S /GoTo /D (subsection.5.4.2) >> >> endobj 1221 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [404.504 274.463 428.315 285.831] /Subtype /Link /A << /S /GoTo /D (subsection.5.4.4) >> >> endobj 1222 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [404.263 246.939 428.073 258.733] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.6) >> >> endobj 1223 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [492.826 246.939 516.636 258.733] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.7) >> >> endobj 1224 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [225.454 233.815 249.265 245.184] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.8) >> >> endobj 1225 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.362 233.815 380.173 245.184] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.9) >> >> endobj 1226 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 206.717 112.902 218.085] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.12) >> >> endobj 1231 0 obj << /D [1229 0 R /XYZ 81 757.935 null] >> endobj 301 0 obj << /D [1229 0 R /XYZ 81 733.028 null] >> endobj 1232 0 obj << /D [1229 0 R /XYZ 81 714.484 null] >> endobj 302 0 obj << /D [1229 0 R /XYZ 81 413.076 null] >> endobj 1233 0 obj << /D [1229 0 R /XYZ 81 382.869 null] >> endobj 303 0 obj << /D [1229 0 R /XYZ 81 191.758 null] >> endobj 1234 0 obj << /D [1229 0 R /XYZ 81 172.162 null] >> endobj 1228 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1239 0 obj << /Length 2535 /Filter /FlateDecode >> stream xZs6_{;ӛI3N۹K|}8h5(%~BiiKX`XbwMFg?^E]E\ ( 1BFWzrNޞ'tF70Qb#9` (Ψ)ł:hllܞ͝}l2,2r>@^6:)Ӫ\X!Q_*y]q:+VH&TRS(d5o˳"-7ciɶ7%sP?ΙwO0؜s j.3M3jgizvܳ,_ph7aZdilv(lb%$+cuzdіH5}-Aږ|^g_t@M65-[AIenmNmcSM.*Ehk Ru,^IB(| 1uyؽ0Mw״eHl'ze!,Pj=C8D18J}lzp]7f-Csٗ3\XY |}v}C LתqBjWѧY' +0pN8W$'F[~\eYS5SN1 pQfl<є/Bh#Tw&ƹC>}"\jc96~glJlʧfzm)6enn~-5QZN;}ށ2uϋ3ۀ>F0DyQ R̩Ejm)#f4R. z |/z揬rn QB;PR{Y>ÇQvwh߷}6ZlPI4 , iO$XzjukC ItKjNb kYrҢO6E-ͿA-vo7W(q{&MNRB>TAv^oֈ|Y9k$cOZg)chgb;1Q%SY1Ш#]U-6i2ccknFK .Tsy=\A 7:YύW!`B I` IW`1٨~\\/?dlT.` sè~.o.T' "/DR`+0}e@j!̒ t8"4fP`ɃpQv zHgpP'9,uGN؂pHI ɦxu- #deg4-;Ӌڶ:mt~@1{6$1-%uI bWUiT"0D7-^*D+UXRTIct9/ӧS!|*КscЫû]("6`@:= DA|SRS' {y4ЏnLB:)/f@ijf\tEX4W0о5ّ@dV*U}0J@h>%ٶ,X>Vɻ[VD@YR"~|L wêeB ϥSi}l4"|Y"%1"$]^QMժ1/ʥeӡzn8 Rdw" U,ТUaCmy J_jFNC1V(eh]"!J|}TM6ږ;TwƧٽh\m%=[Be9`Ȥ6(Ex)5 \ ?Xߊ{΂NUuEvW$Yl'/_O"heIdajw` aR`xӃS PWnc0_֪ժbȩV 4V%McoZ*ުUဦV ԪsvW*4=[ժPT%@s/﯌0E]—񸧫Xyrp]K˝Ȏ;{_HްXq׾BOFƱz9C֧xOmwjNkڧ:Gږ=u2`1gP{}, > 8H6> F0 K@t2>"QJ c'1!p"CE b*q TBT?(r^;':7n@mp|E;,4Dݮ  endstream endobj 1238 0 obj << /Type /Page /Contents 1239 0 R /Resources 1237 0 R /MediaBox [0 0 595.276 841.89] /Parent 1214 0 R /Annots [ 1227 0 R 1235 0 R ] >> endobj 1227 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.238 664.94 385.048 676.308] /Subtype /Link /A << /S /GoTo /D (subsection.4.7.1) >> >> endobj 1235 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [275.667 286.006 299.478 297.375] /Subtype /Link /A << /S /GoTo /D (subsection.4.7.2) >> >> endobj 1240 0 obj << /D [1238 0 R /XYZ 81 757.935 null] >> endobj 304 0 obj << /D [1238 0 R /XYZ 81 523.655 null] >> endobj 1241 0 obj << /D [1238 0 R /XYZ 81 502.123 null] >> endobj 305 0 obj << /D [1238 0 R /XYZ 81 432.067 null] >> endobj 1242 0 obj << /D [1238 0 R /XYZ 81 410.66 null] >> endobj 1237 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F46 35 0 R /F85 743 0 R /F14 33 0 R /F15 750 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1248 0 obj << /Length 3107 /Filter /FlateDecode >> stream xڽ[[s#~ϯv-tũ=ԡB{ kϘX~i]"؉dnZݟx0W_\}~D!OfP%2LLnV۟fO)n.ޖq?{>I_{v׾Yu[ʖMUTt^ Ub/84P圷,JilwMgLs_|n&W|Ӻ)bY}fO3L`rZe;i[h("|6Ud8xHBqF &d=4 imI_[c Jg.6 ]W)[4),NsKOsz畯4OaY6/EgIE[[ u,t=z.|&#|H#X@O8(ng#)tb|hOGY/O!="{J. {2"SwI=Kdg<ٿǮk'Hq5tgCbXI Qo 1㑁gxaK+{@x;PG Znndq nuLQH1ǫ0TRن qS~Wٮ񤌂xR`!bQN [(4lWhPT4٧Piȇ c/~Fܗomgm7ep6c @BҐyD ;@tZG^sX)gK4V˘FfAO0 9,f.YpH0d`ssYglJa {z9 G9' @Q8<_}^? 3BS4-h ՐzA4e_IPPZYmY O[$"1 _[i:E 3nLl`U˝M3)(w1hM=+WfUh &QG"tظl3j>m!ÃZRp4J #y/1OWl6Ǫ5Y̏̇a5x:u 'Cݾ~o5t8&c+qͦ egp8h;؆/16xfƝڰؐByM|mwdS10- ˙S*rq.SM;0yk`܋h彉;] xᓃ?p1<&]P`_nīSz I l(S TzF 8R4bN'lSJq"IkMFS8*6!!vuN.%CIKfqiS Ap@0Uγhvb{SYml+'cQ!u4_DTQSI9:ߦ=)_ >_V3&—~:>z@!حȏ kyٺ;_=u;$b+9{MU?Uk'紑x^fgW\{?ۉe NMw>܆J>fwn HQ\H$5y" yI<%}ե@X%b ^۬69t%/1ukrr5OƇ\( ªӱ[u*hXKQmBd.[ا, \赡Uq@˪q:\ۊ1dyطk뾻KDotN [?A!c*アpm.:h7ֻkH0U9 nZ V"p<<^/(p}*P ;sPW|J~ntn-az#ˍ~:oRBsw;jTytO/3q mIh^A pq8CB_ ֐cbO \gH2ъ5ɠם'0V\ 2r8,Y+EwҰrV=%Ş(7$2V<4[[@ZTVۗ0v= ba)%?VY,_0{vrMT%_.>k5,&GO^}*GDQ j8$Aᔜ%֑n/ w@[e2-0F=oS9"zJ i=Q0{ #lA앢RSBw)e^RR^Lh?Lw[yuq1F:C|M3ھ!:e >R*-ٺj#C1rsEW\"5QO^0d u^2D˄.)>!˻7o|-'H>>Ghh8|])~EQ%Kз!y$/|hB .N٢{^v m@)=*51G";00ziO~irLcXЃ]H2]՜BJ!$qV}g=_&Яr/'a 2mؖZ endstream endobj 1247 0 obj << /Type /Page /Contents 1248 0 R /Resources 1246 0 R /MediaBox [0 0 595.276 841.89] /Parent 1214 0 R /Annots [ 1236 0 R 1243 0 R 1244 0 R 1245 0 R ] >> endobj 1236 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.036 630.052 169.301 641.846] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.1) >> >> endobj 1243 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [486.16 432.468 513.004 442.053] /Subtype /Link /A << /S /GoTo /D (cite.HP03) >> >> endobj 1244 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [243.934 332.654 267.744 344.448] /Subtype /Link /A << /S /GoTo /D (subsection.5.6.3) >> >> endobj 1245 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 200.178 107.447 214.19] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.9) >> >> endobj 1249 0 obj << /D [1247 0 R /XYZ 81 757.935 null] >> endobj 358 0 obj << /D [1247 0 R /XYZ 81 733.028 null] >> endobj 1250 0 obj << /D [1247 0 R /XYZ 81 712.273 null] >> endobj 359 0 obj << /D [1247 0 R /XYZ 81 509.125 null] >> endobj 1251 0 obj << /D [1247 0 R /XYZ 81 487.592 null] >> endobj 360 0 obj << /D [1247 0 R /XYZ 81 317.696 null] >> endobj 1252 0 obj << /D [1247 0 R /XYZ 81 298.525 null] >> endobj 1246 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F14 33 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1260 0 obj << /Length 3600 /Filter /FlateDecode >> stream x[[s6~IX(g3]ONYDj$ҕί߃ / !J +FxWG_]p6R(FFW#H z_>Vx˱7F&7q;NG85#B0oN@ZJ@)#Gou7ht=!!;/gy4 {DFtфav#欙=wբU$DRRuW4i*:1e1_!%uSd@ bMMBeB?|172Q$ol h2eoe#"AxbRn)* &E2RCQȔva"Z3 l%UV̩ ߺ,AŴ<AmzM? "N7H}ԅhQ{4݃s7(b[ no8fGHpf{p! RO w0UPs[y*Z}D_z}yY|xfz(7lqIa8t<ļ ٓHL$fCp͌ABiOA S//ts0(T'X C<9ޛ!Cqe z3vR$qu)Jcߛ!LC Rzn[Ľ)2aG:PkZ=[{!B5V ڛ!J|Cً©?'m·fhܝMuQ  -UA͋|-jnXl]e\Ո[!G,`V?ШnB"E/@! 8+ pV4WqN*ߵvaZ?8|=é'faDb Sz_ {/="HU;Bi MޞgIt)%tq#i\׬ FIúFؤ"` 4<#%R[mQP.j*2ܭط˝X;:(9 >žxSeDkT%L6#N Q5ù9aOXLd6xAeفlju9`]6 Rzg`!`< qwO@ndkEY|WiB= CLߗB˘8tVh.n6~՘_;X=|=+64%hFR "$;el$3UCJ[4ƴ/[!@=߅T P]AU.q17dl[?4lE3@q췇 q!(Ȉ^9T*vGJP_##ԖL]?̭ z RN{[?HdP}HCTЗ8P]d뛔[h4pB޺)JiM~^гBh8Zj!1Z󦋞f[ zQD.7_D;<:B!ǿZt\xt))jlEi1HmCoH!aZKJքi޺-E{[fr"Nَ( `8'( Aݼph3~[m{[HvyQ]!'%vA[u/g5v#/TH~ZOW==.{¦ܾ$83aQ!uq:;u>{ċS@[Lv>룒2)on?k}sr:{ (҅ )q endstream endobj 1259 0 obj << /Type /Page /Contents 1260 0 R /Resources 1258 0 R /MediaBox [0 0 595.276 841.89] /Parent 1214 0 R /Annots [ 1253 0 R 1254 0 R 1255 0 R 1256 0 R 1257 0 R ] >> endobj 1253 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [492.826 628.266 516.636 645.067] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.9) >> >> endobj 1254 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [403.812 605.163 430.655 614.748] /Subtype /Link /A << /S /GoTo /D (cite.HP03) >> >> endobj 1255 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [196.217 591.614 224.882 601.199] /Subtype /Link /A << /S /GoTo /D (cite.MS83) >> >> endobj 1256 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.949 122.181 382.76 135.083] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.9) >> >> endobj 1257 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [491.92 108.997 515.731 120.791] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.9) >> >> endobj 1261 0 obj << /D [1259 0 R /XYZ 81 757.935 null] >> endobj 361 0 obj << /D [1259 0 R /XYZ 81 733.028 null] >> endobj 1262 0 obj << /D [1259 0 R /XYZ 81 712.273 null] >> endobj 362 0 obj << /D [1259 0 R /XYZ 81 274.895 null] >> endobj 1263 0 obj << /D [1259 0 R /XYZ 81 253.363 null] >> endobj 1258 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F88 758 0 R /F14 33 0 R /F44 32 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1268 0 obj << /Length 2968 /Filter /FlateDecode >> stream xڽ[Ys6~`վPd&U^9'EKHBRlA!ɲUy8_w88`ߧ-A(D^6BJ"2 \yZ&K:.OIU'bI&= 2&|EqR809-gyN,SzJw !nkl:~R)-Q͡"##Da~v!"+7ohVE5g y`.k?4^]ca4SFT-=KJ}=17,]c,f7vۣQ}$AMmVx ՝+]f%d8Bl X~XuV<6ӛ`b E` F(ɦ,k@ejf4,~08J z8eZʼaX>bb[%ӥǬ2)E !MHjYvٴ8 ٲ7HŪvO,R}C^e˦;8d8l# Q,7JzŰմv-xQ$(0-M|X ]ˠ0R>&t۶rEq8 V`6X_H^mY`lczhҟ^}+L? F\f6୏$05lIP~=ȃ$( A~8}[)Ð/a`]Օ-~(Ն hz (m9Zȋ-y*]E&3dFM-2mt_f6̥-5QwAޚn*N۲|sID׭zVjth4V73cNcWsZw!a1؞һ d*@g68 vXdIoX&MN8&8(Cw̜G:}t,Ec-[x8s3d@:^oшX}.".ڗo CC'ō{9kE1'oټǜP+X/dkŦ5_ =^wK*,bR뙖3FA^@-13!b\Ab5ϮxPZ[>Em GggHשt>MKDd{bU}(΍^; EiRQ'ټEnZ.b dfii`TkUK^6* -!->ZCKd믊t^RnT{3Ϙz F?BC.2W\`ew '{Ku`q DDrB#D \T?|5/.=.H^Ov$uթ8ewc;`XqɎ#@u_ΟI $qXuʱ.Wښa8?&+[_ͱ؃;~sUo\5|d(eCD7{I ޭX' > S^PI$S$%N-O$#F?4{dxKS,dD(Zg|ڄ; hbJx|ln}Gk] olYBsz48 "q+@v CqvW" mݪ7>#`8WWиoW ]P0!gAOJ(zm[Hva؎_O7O9nbt )QީL|L-cIG2+Y*jyqVvxkzuf<7qRyfnSR:hFx zp8F9I(4xIQ<ivg[Ǖ4O,F/n$̦>-AyѼ|=| DT/e)d Lesb#i@"YV_ĝ0ؐyd<<&a?< C+w؜78$G5DӨ[!q~yc:@`:6"N[`0+w$>t:Inn 8VFbǙyZVi6ӡ4Fń@DFx[h:pL$Re>b03Z0QJ`hȟ.|m"/dv>&ٽkGݖ l{ЩFiaf4Ü·dV-A7 ܥB ha LZNLZa,Bx\y3B}/vOm_IU߼Ξ`s^Crǭ^k+< ;,.%JGWnAnJa(L,z\z%#IL xУE#siV$EZ50 ;<,]rj$@auI2IŸ31,fbzUz1xC6TVlukܷf]˼XAPLhf&y"B TaU  rg:3Mz,k pH5~R鍑򐙅u#ibj?P0|үH #o5p`,}EEzmCjg;kxg<kAjAD("Wr%eLZ44[3jg靖majSjJD 9^j[$C\^Urm_&8zP8鯞P7|G)vݰr a(lJqJ/4Cqa%:ݲYmF`_ӹW]BԚ? #mg`_'$f04糵J &y nkXx RM!qKsV_jJ`b 輋0oc d&M;΂v[kLArjd+nT42#$e&k'B&BU.3Y}ot;FÂkȆreOL19>'3eqd Z!IG|Jz?OJC' oH\aJ429=mRa2 Չ2 Z[sekʹ@5١]l= wCViWϟp֢l+t 04`C-B:~qGۤ7&Cb(1|1X4ޛ-i_#?mt4Y|QFEHȲ%['Z[~&X-ٛ!k0CQcAp`(KXg@[Xo,/Ծ2Mߩtߙ̛+Z[o5LӳdNS7dr[ն5&hk]GׁFTgnZ*2qZh;h\ ՙaH]+Ӌjx Z%]u\^IV:[Hz.]ڛ!x VlF{=h"0 ׇf62{!ތC8|zJntI]gh}zoe.!P!SB3/uk&>iұw  D"DIse\ЭW/k}ĤWig[l±r C=~Sa6P4KTݚʹ~ة "5 ! E!QA?C );!)(T1xg;ݟ!B A gO_mB! A5aSC+X-xq"N Ƞُ~?|蛂hli,@VIAG_q7j??]Mf}muk&l@_߫t1;:qr siɠp y$ʞDދBHvL9:QXLuw” Oe Y s-X8.43n.⸻ K 5y1uA!!.mAعyYn0=@:6!MP#L~C4G{ҽ<7`Lf.az#%(sD4}BugARvV> ;Ri6znF&nnb黚Sm 4Ot$}O`t3- pMMrHӵXȕTgqIU[roAXZJm/1CQ9k%`α\ ۮSѼr!gnt}䦗C1'ÚVKpE:s'&ʻAߺwAC¥vA ,}Y!KAxZ )CFB2< ^u"qfzyAzH5V]א~B_b( endstream endobj 1276 0 obj << /Type /Page /Contents 1277 0 R /Resources 1275 0 R /MediaBox [0 0 595.276 841.89] /Parent 1280 0 R /Annots [ 1274 0 R ] >> endobj 1274 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [421.505 98.089 445.315 109.458] /Subtype /Link /A << /S /GoTo /D (subsection.5.1.5) >> >> endobj 1278 0 obj << /D [1276 0 R /XYZ 81 757.935 null] >> endobj 366 0 obj << /D [1276 0 R /XYZ 81 217.177 null] >> endobj 1279 0 obj << /D [1276 0 R /XYZ 81 195.645 null] >> endobj 1275 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F15 750 0 R /F46 35 0 R /F88 758 0 R /F14 33 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1285 0 obj << /Length 2577 /Filter /FlateDecode >> stream xZYs~@*GTI*M:Næ"JP zs%WDj`f+E8>{ssꊳH!nn#yB&?s\_| V 6~%Dn3N3]HHQj}=R>ˆݻ1 )GE?LFIe'#%+d)2wTF9))b>(2L6 ;t"`w !h8jGK68Ǘ}CRy%*~'D+?OIz0Ne4w 4ߣ_Lqt/ޫuP;?l4Y+/v ANVa % HvVGz0S}P]Dő7եp޾!^"Dӷħ*4DjDA=BXc9'{=vNv`#T>pFDBuZ@!,Y}:1Me[Wmi0e06"LV~. T0;`D2`X'U^"R^6fe/YRݢ F0.s>@r@F_p#s"*sL!g^aRC瀚]xbT{ FfL]xϱYJ)n89>j=: {`Jgfc{dW>\j*p[Xo-d~wݣR}f΅.f'fϭbxE28yt?[]K6"z/vcҿSoӲaq~b Pr΃q:]l-Aϡ; [?ԖpY,O,?լ@zZOi:{ހʙ_BKoڠ F.2\\d]iz9t|3"gW PUu㓸B裥8I$ ]hhV3rWuc`)Fj?)cMB䮶GWK#Wtbt ~뫾ozoF H>J;] Y"n6RHe#L5  ^ΈVUY7vtۑ@%RC[R f&gKZ[坟削]$bjяq+H>Ԕy|Wl6d$!WrBE<&]m~wX4 hk?P˱^۱P/^#o+8sb@H9yf=ro[!Ũ|;';LY_@M_o{ux? p]}P}d `b:9f 3Ne8_yޯg nbZ?@?ٺI͒teI:bbwMM"8$ ,Kk|/9_q{*iآBġ\C7dvC?]8~СOAt +&*dIAUvaUOs*TĂ,c~nY?/*c=Yĩ HE.cPjw"^yQw 髳e'K:UxR[wDYbm L AQ_ Ŝhj4zM1zb=mE&5Uچ%ʃG|S@%' uGEVl+9=]^Y^ĨD)ZxWO )Pe" x'K3UVϴ:`@&!В y|DrΓ P%kk$O<)TKI \EQ%;0'c1p%$ c\'E? XLawb$G|&OkpEk4 endstream endobj 1284 0 obj << /Type /Page /Contents 1285 0 R /Resources 1283 0 R /MediaBox [0 0 595.276 841.89] /Parent 1280 0 R /Annots [ 1281 0 R 1282 0 R ] >> endobj 1281 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 361.666 112.902 373.035] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.13) >> >> endobj 1282 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.256 307.044 396.522 318.838] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.13) >> >> endobj 1286 0 obj << /D [1284 0 R /XYZ 81 757.935 null] >> endobj 367 0 obj << /D [1284 0 R /XYZ 81 569.855 null] >> endobj 1287 0 obj << /D [1284 0 R /XYZ 81 548.473 null] >> endobj 368 0 obj << /D [1284 0 R /XYZ 81 451.294 null] >> endobj 1288 0 obj << /D [1284 0 R /XYZ 81 432.123 null] >> endobj 1283 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F44 32 0 R /F46 35 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F15 750 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1292 0 obj << /Length 2008 /Filter /FlateDecode >> stream x՛moܸS>HugHыzA[7_Ȼr"W;Zkҫ]t1CrfȰcƲӣ7gG߿"3F`vvq+\fFpBeg/%{K^m.~@$h轫2FKoώ>! 3e-H+ec猁p6Y=9iFpJeهw:s4WMvݗdnZ$(G "4(nRfEbTwfN2<N,r8wg4Nm5p&Hu7h!N@$i$pifT Kbw" !dpH~T")5:6%硺g4`~Ne* ^w7U]nOee@ftCYIdr fStFjԝs#ͅ/WziΚYoq Ј '4 t/uyLoViYb듕% Bt\&'ҘhâlMVjU(gr M{+aT>aƓX,hW)u#2-(jT f)5h7OViFq*:b JvfcgX(BQ̘6%#C>M8#L3EH*Զg h,%*X&Zmqou",BL.N'ApFpJ/8%*7g4Iar$h<6&N$h<R uTR_{tGqJArkOf4@Pʦ)Tp 4E)r zeC9V>׷TV}Oub1F弻*f}quuUz_pHyY^\3wy,!rdI8co4ֺb~/_@p Kb /frw? 0"Ik@p~7f6T'I|BmMwxd2m_9ifr6G6YIK(/6n;qŐ誇(0R`Q1-#p87,$2vC[%hhFv~ɟS9ZTM9mں/GW=T\ {%J{B0͇|Ån1$RẀ$,+eӈĐغjqT940ON?(U߆v}>[<ի13^RH2HWJ`ob 6Wkx#,hUbЖ|Da8*pfq8ѷul[ˢh!&)Kc.6&ͅp6[Pq J /ߋ󷂹|oO_Pࠟk_Q|k誆j9*MKs wpC?=Z`NɡևP+0{88Uo]ae)绲?9\ endstream endobj 1291 0 obj << /Type /Page /Contents 1292 0 R /Resources 1290 0 R /MediaBox [0 0 595.276 841.89] /Parent 1280 0 R >> endobj 1293 0 obj << /D [1291 0 R /XYZ 81 757.935 null] >> endobj 1290 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1296 0 obj << /Length 2170 /Filter /FlateDecode >> stream xZKs6WHM+oǶIQ{Iz-f#QJr]|%Yu!H Lg3:qy3ClTXΌ2 5[f&? M8s˛Qbu+9`kIW=3&ʅP$-RDU_u?v}5`:)VuQ\* 6 Hg .I*fˇ| I {^²dĆC/a~[(Wd~rS7پ*n]MX$nrסjBPlO4l#Dm*xE@܊N-/נh&O9F*pjljw?,|p.ЂV=|S?7z*߸s)3k+/#m5<1 CZ|3:-ͦ(po6s'y#? Wl):ᲪݾVš7:4EV7žʪz[XxNPH%`081 [ 1R0ޘpIj?胍?RETCR%3f̀P)E@qB.hNO{ݡEiVA'r`@0J# "QD>z`EM#M}޹:/W>!,"]I̬i>!axQJlpa{X7`M^"z)钴^jTGŎ#p3F*XVQdXGbQ f `js}qQk MM O@j,D(QaPŇͩ@ƇlNel5 Cg8 ֊((ib2ԎV#gQD@O=.-;Upp!A~y9Yus.jKķo(|جMs(v8Bӗ?" 8lQKXM(j=,Sf(51ʇ&4ோ<ܾD#bz$0ń>0 Ll=͏)7&mesl dOߠM@'@x28whhHa/f^)}Ui/!6FߤSbׁZFpmq<HlyP] p6P[ҤgTsKNwC"J3nmk1bLw|/^5?c3BA-G [H&Wer W‡r3kul3rnv^NhF%lkO-N֖tөje %((丞TuT'U1S1dXߞ'Pi}hPA!̕Wj{œdMj紽Tۂ&v|i(q*oE)l"hiUrîSs 3H9mU ʗ+gF`\tyjԉVU=%~**Ptogi2ޜj5IsFx][BZ?J`ԅ4I ``璴)z&цp:7R= xԙ" )~̀hgUyWJ}4}>iG3.1xt=I:t|BSTӽE剻Pu.4㢌G:ȜOR_ߝ8|wPwaoI|P endstream endobj 1295 0 obj << /Type /Page /Contents 1296 0 R /Resources 1294 0 R /MediaBox [0 0 595.276 841.89] /Parent 1280 0 R /Annots [ 1289 0 R ] >> endobj 1289 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [83.636 682.444 118.956 692.116] /Subtype /Link /A << /S /GoTo /D (cite.GDT91) >> >> endobj 1297 0 obj << /D [1295 0 R /XYZ 81 757.935 null] >> endobj 369 0 obj << /D [1295 0 R /XYZ 81 733.028 null] >> endobj 1298 0 obj << /D [1295 0 R /XYZ 81 710.513 null] >> endobj 370 0 obj << /D [1295 0 R /XYZ 81 611.167 null] >> endobj 1299 0 obj << /D [1295 0 R /XYZ 81 591.996 null] >> endobj 371 0 obj << /D [1295 0 R /XYZ 81 519.339 null] >> endobj 1300 0 obj << /D [1295 0 R /XYZ 81 498.322 null] >> endobj 372 0 obj << /D [1295 0 R /XYZ 81 427.876 null] >> endobj 1301 0 obj << /D [1295 0 R /XYZ 81 406.859 null] >> endobj 373 0 obj << /D [1295 0 R /XYZ 81 322.864 null] >> endobj 1302 0 obj << /D [1295 0 R /XYZ 81 304.059 null] >> endobj 374 0 obj << /D [1295 0 R /XYZ 81 217.852 null] >> endobj 1303 0 obj << /D [1295 0 R /XYZ 81 196.836 null] >> endobj 1294 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F14 33 0 R /F15 750 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1311 0 obj << /Length 2278 /Filter /FlateDecode >> stream xZs6_S36ٝ6=\6$VNvv7@Re^+v!!E#iǫoJŒ`}­L2 \%şǒ?b7oaQVrX kIG4r::.MXbYb8'\d2;O(&Yœ!@"<=lV7kH=W%TauœK s$ANu j);B n V$J4pShzNMyay㐄g0uOb(4Sc%,0ȳ*;aD j3E(?[|  gojCEEV=wc(~*4\.Z_,#z q}JVv!R*GHsb]G~>ܕjjuӌf@]L!שء7LYMĪOMg 3X.:Bq4FX;sUn UBZ'#optH1AF}Smk wKZ6X.&Zq)BͶ{Ohʶu RQ 9Lg] !ʈ10PHN]YNeGv4\@:k aj{N0X%5A"\8EdHD ,?CQr} @Er|Mv3)@/0Q9ẕj>fMSUfE||gb'Ξj͗a~yX*ݖ{r:Ɋ0#5*oдʳE9_Eb+x- TA9k 9X%Zqm˥-$aO8Hj'H`wX>?$BL<4]7 *R7c{[NIV`JS8La!*A9Pei9}~].|ey;]քB :yOػ>)ߵvx_ik~UiQe-/ezksq&aL<^Ii%4PXVwJN->Ѻըv' k\Rz!μOyS8xa <^_ \ë [O$k] ^44.>}>Ypv9#뾽 ָSmzw}T$TLDqGC.k[nW,2ˤN|,5qma? cl:BQs^gp-qX9gW6J{jYnI>F(LԁNu1Hg;InXv,=wڢMNEshy4sn <1 41":2ﻕ ?宑<`2]|n}<txw͈s!Bb\h`.z!N^ŋi (rpDj[Ё{;VxD8#Xt6T8_pJ;DKCHԛOQ>I Fͷg["JcE2pz% M/>l+&E1kwZeF5$8xi QW(% _c t̵gZ|@w߬abp!vUA")*1^uoKWW̫f!HpY v#7UxXP B(ߗq.]{(r}]9HMm ѐkP+Fr)CIڐISj+<5yj9sANKX#u .?a<scNlgBtSj}E^ܟ=gEe^L"3zNRwz2lϩsRw2|{W#ӮE3oR??7kf`l8 {'}c;N> endstream endobj 1310 0 obj << /Type /Page /Contents 1311 0 R /Resources 1309 0 R /MediaBox [0 0 595.276 841.89] /Parent 1280 0 R /Annots [ 1305 0 R 1306 0 R 1307 0 R 1308 0 R ] >> endobj 1305 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [98.11 509.721 126.775 519.306] /Subtype /Link /A << /S /GoTo /D (cite.MS83) >> >> endobj 1306 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [329.708 375.59 353.519 387.384] /Subtype /Link /A << /S /GoTo /D (subsection.5.4.2) >> >> endobj 1307 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [195.672 362.466 219.483 373.835] /Subtype /Link /A << /S /GoTo /D (subsection.5.4.3) >> >> endobj 1308 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [489.193 155.601 513.004 167.395] /Subtype /Link /A << /S /GoTo /D (subsection.5.4.1) >> >> endobj 1312 0 obj << /D [1310 0 R /XYZ 81 757.935 null] >> endobj 375 0 obj << /D [1310 0 R /XYZ 81 567.192 null] >> endobj 1313 0 obj << /D [1310 0 R /XYZ 81 535.049 null] >> endobj 376 0 obj << /D [1310 0 R /XYZ 81 465.643 null] >> endobj 1314 0 obj << /D [1310 0 R /XYZ 81 444.261 null] >> endobj 377 0 obj << /D [1310 0 R /XYZ 81 234.467 null] >> endobj 1315 0 obj << /D [1310 0 R /XYZ 81 210.723 null] >> endobj 1309 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F15 750 0 R /F88 758 0 R /F46 35 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1321 0 obj << /Length 2047 /Filter /FlateDecode >> stream xڽZKs6Wjb!L:Ӹ'9ڋ+Ѷfhɥ$]'pk͈2)/'{J, jElP.rT#hmN1g1 %}l>,2-gW*q-'PN*k1:Yp/ O+9EwζbSEg "+/EXxDaam h:Lt|;:Vgb>=twPDa!qѸΊվpV۶ zڌ#df8Qf =VX B?"-6U\éIP1+o'QJB#&F>i,AfE9WC&c}Tų^mvc:'yٙj@S?[Kjy|FVo+s v@4v+%9+h̍t'7*])ᛗ^ݱCFcT:1Xu>]L6$4_v }I39K &c.K,)!q2dKƙ{lާܱX- „&D2fg0حiOGcif+Ml,eXͳ"X&U1fm7K:?bFcf%n1C8ETc^wYd^M.1Q#Q`Խ^w%[6iL!]k\ ݛ ]A8&?b6_܄=_5]櫇b " @# j%dwE9Qɗna:a LwD62mq.شte )%MJ?'v􌝪SyYc,׈{m-n6x g+ِH}B`]ٳțwUîAϭNEPzE"81 '诵m8ak]B0@:b%;(v e0a48v$L>sу׻t8?L*j9UMybs{ЊJ\'yGTy#;{m'yw[^7ɻg9F*b=3xYef/؋{fWumQ( @S" =DEHTEdy}IrtU^\gYэ:|A=[Y"*#\L${U9k˽{DSj\ Ƨx 򫪈שFZB QW7̇B&xa".1iyf쯵m8a &8;tUm'ah%UTofSZe__{x8 ֶ~6]fҒp9H4p!Uj;,GahloŒX0M0t"BqYL︂Vیň1Gp9=fy!ML܃niMꇀ$쬻8&cVACVA9"U0y.i&r-uM3;h\BUjf*")}n"?y*YY݁ˇux[etPN8l:"*\e@;o)bKS2w`E+ ԡN'aUظ+Q/{9~Zp0wdm6B~-8f/Sn> endobj 1316 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [299.121 513.495 322.931 525.289] /Subtype /Link /A << /S /GoTo /D (subsection.5.4.4) >> >> endobj 1317 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [169.818 500.371 193.628 511.74] /Subtype /Link /A << /S /GoTo /D (subsection.5.4.1) >> >> endobj 1318 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [466.565 318.497 490.375 330.291] /Subtype /Link /A << /S /GoTo /D (subsection.5.4.3) >> >> endobj 1322 0 obj << /D [1320 0 R /XYZ 81 757.935 null] >> endobj 378 0 obj << /D [1320 0 R /XYZ 81 605.91 null] >> endobj 1323 0 obj << /D [1320 0 R /XYZ 81 582.166 null] >> endobj 379 0 obj << /D [1320 0 R /XYZ 81 397.363 null] >> endobj 1324 0 obj << /D [1320 0 R /XYZ 81 373.619 null] >> endobj 380 0 obj << /D [1320 0 R /XYZ 81 155.128 null] >> endobj 1325 0 obj << /D [1320 0 R /XYZ 81 122.985 null] >> endobj 1319 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F15 750 0 R /F88 758 0 R /F46 35 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1339 0 obj << /Length 3173 /Filter /FlateDecode >> stream xڽioF6dĚ=d.umZ F%RT}sͻcctGNʃ,8`jeyTĻ~S(׽DIxڦ4y^ YzyIT,ֳw"Z$KA$({%fl`38SKi6 ƒFHc~հ7 y|NªWQ8I2Kd'o5"q1М'ی~y5*ڵYm0I Dx_ѯ'=$29nFN¦/HQWJb }[f&B(4zr$8e)Έ y䃉 aqF,BZki80yamTK| i9K;U9ky(1CA M-~^hB~GDwnY>|t*1~_,;Ph׸n~ݧuZ7w X/L(bFңEATm <!IT8ɗW-?"& 9 1 wq~"6C[v@MojBXdrf`ZuB8((31R~s̞~>>ڱ,=EmE{ej.^wk +2\ L2! LmxO0=p9ɬ@9#gz[",(id(o-S![QG$ '<&jЅ< b;C!P0x[_W_g hkƳQRI XȒ4("Jg{K\`F8w?hfPL0\JHNx:)Ļ7fqZ4]Ǥ|6Z8aL1(,}Րxo&ۀC{r~xPER$WyߖOC.L |bǩ.r*耓҉"Ǩrl]N~ltK9s/"J_ʩ_qdTu#DH8cA ;My> 1I~M+֊v{doq\z}ay7̎iCHDHz"B\&sw]mHLG}eC=.poyDw|N!crcnu79儖yZ,рԲy=HZ(_n*aӻWgeŮ9U\UO<j',%^d^)>Mz;ON_^gg<4<<Z-BjOA! 䟢?ÑAZ !/XwNj:d3& 岑?]_@BhQJ!tx4ᲃ֥Ͱ@r^&dO}ʑ}5'=]C}w㛾CȹY6Үo5ϗJ4 5Z4òΌJaB%x4ovwKQ/Y4JIʵ-Dr:ba*3{MemIGir]mCZXFo bYbA+Q=Ǡ! rErnSugྐcy-6>aH ;(2"oHV؁FU}&.0(H(7TI>b /0m8On(­|:?E.6 FiNHZgoizma\|1gY!Ezχ`r/RS,8pNP.iXZ795~NR )8-W0LK}u8@^`i47܎%CM)Bp 0hjZbPr6]RQ Ks]y'Vz_k4`F8e=6W!>Iͽ%~w_gDlx*Jʶԕ \a?azʷ;v}QP GPSGHE;g<زϦG endstream endobj 1338 0 obj << /Type /Page /Contents 1339 0 R /Resources 1337 0 R /MediaBox [0 0 595.276 841.89] /Parent 1342 0 R /Annots [ 1326 0 R 1327 0 R 1328 0 R 1329 0 R 1330 0 R 1331 0 R 1332 0 R 1333 0 R 1334 0 R 1335 0 R 1336 0 R ] >> endobj 1326 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [473.787 577.29 497.597 589.084] /Subtype /Link /A << /S /GoTo /D (subsection.5.4.1) >> >> endobj 1327 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.026 563.74 199.837 575.534] /Subtype /Link /A << /S /GoTo /D (subsection.5.4.3) >> >> endobj 1328 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [331.014 378.505 354.824 390.299] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.3) >> >> endobj 1329 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [406.823 378.505 430.633 390.299] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.4) >> >> endobj 1330 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 365.381 107.447 376.749] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.5) >> >> endobj 1331 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [170.036 365.381 193.847 376.749] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.7) >> >> endobj 1332 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [391.723 351.406 420.988 363.2] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.11) >> >> endobj 1333 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [487.371 351.406 516.636 363.2] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.12) >> >> endobj 1334 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [169.693 337.857 198.958 349.651] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.13) >> >> endobj 1335 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.196 324.733 180.461 336.102] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.14) >> >> endobj 1336 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [476.458 192.032 492.087 204.934] /Subtype /Link /A << /S /GoTo /D (section.5.5) >> >> endobj 1340 0 obj << /D [1338 0 R /XYZ 81 757.935 null] >> endobj 381 0 obj << /D [1338 0 R /XYZ 81 309.975 null] >> endobj 1341 0 obj << /D [1338 0 R /XYZ 81 290.379 null] >> endobj 1337 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F46 35 0 R /F15 750 0 R /F88 758 0 R /F14 33 0 R /F36 19 0 R /F44 32 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1349 0 obj << /Length 2958 /Filter /FlateDecode >> stream x[[oF~ࣄJӹ_6:M4], Zeb)ʑsfo%[Xp89o9Cd."17 21'Ta|m*SC'Zl]}KxQ orx׿c)q?\|`Ф K,#̹0Kb}&KxsBp6Gq4#NH~%+t\N%a* .,Nۢ¯X|Yfn2[olVm:Op'o.?QE90oO=ѡ& Ƙ Zw,S}|uÓp;n c4Hw٬#,h RD 3 \+N VeVG` atl&I~Pힶ+s^=6|nZ@#t Mݎq$QQ-ژB2PJ΂"Ve+mnkT|1}،:=jI嘘#Bl>]^.z i|AaE - 1Fj҈Xz CYY0/e6aqN<ƥ1w_8Dp7?ca3:!EiDIEbꆈ0D$ˊF~|HwE6\Up`Kk%!2/?CMSuW6I`XW6W^=I1|rk_2b˪?ft;ev|a aQV M'0$]\ۗ〘H㾨ol-0-‰:Փ_rbD`mp-"m2._EՅN$l+^%qGyU Gv5 `\BaO*t|d=xdQ9^A/"yQ8S=}`1Ý9DOn/>Q9Urv0( ES_ɻ]~]vi8Yf璷 Woa#<$hZzx)*!?/V}YCHXfj܇":*p jTl-hE#" &,ڊҭm{q)C" CaRk i7?@X,rMmhO}nm:4Frq׬{fN(~ŏq9(\;(z҃N^0EMv"@@(/Iwd!nߨEܝ<ꋾiO9> TIE>I])Ձsp%VE RA՟u59i151hc_:kuо:Jѧ6UgQ4ץԱ# BbFkr#Ef`g^?`HE^^*C<<* BT<@Kг1\ͼfuN%}ȼ`GeX165`|³N&`,=80E0?ɪоy@PR#fCƏ,b޻ endstream endobj 1348 0 obj << /Type /Page /Contents 1349 0 R /Resources 1347 0 R /MediaBox [0 0 595.276 841.89] /Parent 1342 0 R /Annots [ 1343 0 R 1344 0 R 1345 0 R 1346 0 R ] >> endobj 1343 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [381.505 555.514 397.134 568.416] /Subtype /Link /A << /S /GoTo /D (section.5.5) >> >> endobj 1344 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 348.474 107.447 360.268] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.4) >> >> endobj 1345 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [204.569 348.474 228.379 360.268] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.5) >> >> endobj 1346 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [291.252 348.474 315.063 360.268] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.7) >> >> endobj 1350 0 obj << /D [1348 0 R /XYZ 81 757.935 null] >> endobj 382 0 obj << /D [1348 0 R /XYZ 81 675.393 null] >> endobj 1351 0 obj << /D [1348 0 R /XYZ 81 653.861 null] >> endobj 383 0 obj << /D [1348 0 R /XYZ 81 427.34 null] >> endobj 1352 0 obj << /D [1348 0 R /XYZ 81 405.808 null] >> endobj 1347 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F14 33 0 R /F15 750 0 R /F88 758 0 R /F44 32 0 R /F80 766 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1358 0 obj << /Length 3000 /Filter /FlateDecode >> stream xYs۸ݿo`vҙYggg:m7n_y%Zb#%~8xu8>ؼ>''],Q(Fj\dTRi (EXgyTP4&:$K$ AB#]OomoE;ؽ/HO$q6IHÆL5"«rZ^0PQZ`86%z,no8R ƚ9Ca?xtJ;þg4)K) , n]OÓN8hVG}?z`UugprMoVb/5oV,W pXVa*pO;DHↇjoWe3Cf{,)a64y!zj3b3/ֳ2ܗr::|a~ŠoP]KQ|_Ϳri^D!6[;/et9ˬȪٮjߋrjeGVۘ &.-Y35{'*[L;~a2^s5MD :_"*d^ޣwJLi&O_W^@̨VNҥ1C]fmxxD2z&{J N-BzZeU~_}{Wױ2b=yM˯i`1fמrFVg ( *>G@۾wݫp\hG[./M zV!=SRS1 cY}QwnpAE(X %uT$ uiwcdRԲeFKUAȸ1. B`QIc0#'8L2C0`c/8h*ѯ뛜A-@yH'"j&61p 4K6׻,pT;V{0 '&Q ,7įQkڛr_1c`mfmZDPw+Ond/Ыw\ Ț.Yg'@I#%T$^e4 IJSt]`Rwu-/|ѨL?EB[wF),F_PJ.?v$rZ"g{ ,9`}L[0vRjy{>]AyZ"X/tV+l,|ԏ@6G%bUѦadrWSm 6$ ƒ`ΈcLL7ͷmGJR $JBub6{_ݽ\e [LˌF!\t+&V`hžW `̑fZͦ,ܽD{r9!Z0-ggtLOojfXMߞmG &s?q'ݩz[hCR(iYV>'[<*vWcS*5}_BޛPSn@X|(tF-O¡϶&ڛYɕFAå-ATm U55Y@!n`½|Q̪mVlw5K1TwJ5p>g͋x0UhiP.^EY}.LPo`E`Ehn"D@5?L49Cy2mn#ah- U>_Hd|`|vzd |Yd owb E]She^E/VS'Rnqkv2Fݫ)7Ɏ0?e #m-F`MaF*%DovRի:jۊV*pɥ9@cl/؉=H|9ZVx@U-o)AgPU6w5)Ye\6;'WjcdT0]m3h3qyN19XOs ff09`Ќ~63beP [{+#Gr~DMӋ ^_2랉q'D}&>co wO8u>/CqP n/"h2Re`usx>F,~  7?ݿb(ߗиXi(S:FT:w>kk=&q%Id9H͢/WTrHr%& u=`zăi{>C1(2'ٸOFR S} l\ 8n*gR̙yr9?]U =2Fݢ%c$?;LFc=\f3:&[ $bЇxoQͯ!] 59b%~[Ϧmu[hc@"+5 endstream endobj 1357 0 obj << /Type /Page /Contents 1358 0 R /Resources 1356 0 R /MediaBox [0 0 595.276 841.89] /Parent 1342 0 R /Annots [ 1353 0 R 1354 0 R 1355 0 R ] >> endobj 1353 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 354.522 112.902 365.891] /Subtype /Link /A << /S /GoTo /D (subsection.7.5.12) >> >> endobj 1354 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [468.445 259.253 497.711 271.047] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.1) >> >> endobj 1355 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [154.916 95.448 178.727 107.242] /Subtype /Link /A << /S /GoTo /D (subsection.5.5.3) >> >> endobj 1359 0 obj << /D [1357 0 R /XYZ 81 757.935 null] >> endobj 384 0 obj << /D [1357 0 R /XYZ 81 640.729 null] >> endobj 1360 0 obj << /D [1357 0 R /XYZ 81 619.196 null] >> endobj 1356 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F88 758 0 R /F15 750 0 R /F14 33 0 R /F44 32 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1367 0 obj << /Length 2668 /Filter /FlateDecode >> stream xZYo#7~[$}" xX<mm7"u{x_ţoJl!X pH!]ߏf#%2L磛o(<}m0`d3) 9A'8᜚!A)gٙS&Oyèxyq22MWŢXY1O;+0{ KˏpGS OyF`,=J_~ Lt5)?L%=ѦM@j*\P7̊yw)3CATQAbi\[vULV6z2 d/3 ~"qP>4E4L# .KFx<ٺLYB\jOio?g%ܫN3WM~tt]1~Z .:UX2< md??4&+sQ p3Dë%^X,H`ye$ <!4$x+#Xeb-b" R}y}Uxt96=`nSCUpfj^x‹+iN;xWlbNӨo$LoOO꣝P2hf{P6 "Dp ߻#e @]`%}!΅v<@ T,Է4)톶cWl}jf.WaJڄ2˳fjO,m[`s<8ٞuOMnE\$' ҪyϽR8[rʵٞce=-yi>%nwTϿdvk5{V8bHm r?|>zb[F$H)>[ DٍZ, )feYN~p`TV翂(Kbg2|,pUFJ۬'4@"xD4 `D`B쎮|U;p h-nNm,s?SRXchJʮ4EvM{o)=@ڹn'^2ۻ8u" mx(8#2yͶ4JK8!ڳc;:dS$: \"J8{nH6$oCPvHa% ǐYGcGrؑ#+;`j )zP@(/]sxn( 0|om/ o "49 ѐ2W qsP$8<ոsK=|!GAB9' [0"pPzW[Bw@J_yJٟ|6&!4F4XNbqk!qItєqZOy@2Q U-,l+ UW@kPfG,upZ|*,>sɼMf+٦{67!%JdEA{5Elgͦv 0҉_9E]N͔T"Wt;?bq ܿjJg1=YZiCʭߵ˫b|JVY2=?X 8Ôq?WEaWwt,b/ Xqhq|اU݀_  ŎlO&ߓp+ R=Vg)btKM&qլS0m F"2cD8lBы(l 1 NI;_ۿ{JA,ļaA|,{ƒSXa~؊a8 d}ݤoǡCT {%<fްN=MBvSn B$$iު4ڝ .PA2sdP-dw"gg(ˆby q?v OEt#fK): X򯎍Bai.*H crPشEbv3ʵ;ӡI+pfQ8f]7f>%e:r̺tA6ᅸ| 5{6"u)ޥ-utm ]녳"z?PЍ^NDBߌU'c2ܖ {\fì=yngzHPi%G ܶCܽSJG}l 5CEB ] % t' l},@bnIz{W nBBܶKt\WgJȾ<ȱ8StAT,^b"ޫ@ﬡm0+Oۿqg=y_> endobj 1361 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [474.735 643.602 498.546 655.467] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.1) >> >> endobj 1362 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [335.481 616.503 359.291 628.297] /Subtype /Link /A << /S /GoTo /D (subsection.4.3.7) >> >> endobj 1363 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [249.497 450.868 273.308 462.662] /Subtype /Link /A << /S /GoTo /D (subsection.5.6.2) >> >> endobj 1364 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.92 345.899 381.73 357.693] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.1) >> >> endobj 1368 0 obj << /D [1366 0 R /XYZ 81 757.935 null] >> endobj 385 0 obj << /D [1366 0 R /XYZ 81 733.028 null] >> endobj 1369 0 obj << /D [1366 0 R /XYZ 81 714.484 null] >> endobj 386 0 obj << /D [1366 0 R /XYZ 81 435.952 null] >> endobj 1370 0 obj << /D [1366 0 R /XYZ 81 416.782 null] >> endobj 387 0 obj << /D [1366 0 R /XYZ 81 251.139 null] >> endobj 1371 0 obj << /D [1366 0 R /XYZ 81 227.7 null] >> endobj 1365 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1375 0 obj << /Length 2408 /Filter /FlateDecode >> stream xZKsFW`oT-9.oUČSeUrQtIPF-I0 [ۃH3 U9Xxpf=0#M]zYQDwj #)1rXXmz5)<$E԰SPw}]omXv]v뭺K0v0vYp1GH<-bB jNÈ\1A&i‹zK!R*ȧO$)>K6Jl\ޥuMa`4Y'ex׎`>x8MH]ϝl Eaa!Q L!7rB`z ?@h a ΅אadw <5DVQ6*&&űb#ln cCxeIt'7smmjt7i]c%Ko4)rnTP'n[}c /_xGPN {@ ѝ|h;(F&dS+7H5cm|\?v<]%l5ۺUd2k\U~Yfw,_9mx'(1G7Bz:ysAu/I?pN@l׻l5<~s6hb 34v6BY5l@j)C P6: Irm'67-xrL? [ b M= ]jUeLʌ#&hFK1k`LizRp:7[Qz^BԒL?®؈-fT>9lK*nz8e(zj#(.[r dj~6@$I(X^\n].\s.%t\rԒKJGgr j.%DKhCKr =K.K%J s%ԵwHT A b>q> K!Rz ^.=n0y1"m5g{}-r"gq9=eYx[ReMN }GQ]lets 6QyW0Q$َbRL4K'O۹" HK{,KAߴ1yA FA΂5oG3GUPRPA>P'eN\jL !qz?OiѰ۰kU>@>Wn4GP)y~Sn_/ S IutYOpFQÞR7.(u `|>DR AJ\JdX|6lE1ޖM5]T=T"e |x Xbٰ5+;i]qy莙v:z knSę|&$`|>`/ %yI;|ov J#AeGpCN3D|6 X\JTL1O !I"DK|0S|/NȻkv:zc a3|A4Dl>FJ]ef,>!q,27X|S} endstream endobj 1374 0 obj << /Type /Page /Contents 1375 0 R /Resources 1373 0 R /MediaBox [0 0 595.276 841.89] /Parent 1342 0 R /Annots [ 1372 0 R ] >> endobj 1372 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [83.636 375.631 112.901 385.189] /Subtype /Link /A << /S /GoTo /D (cite.BM03) >> >> endobj 1376 0 obj << /D [1374 0 R /XYZ 81 757.935 null] >> endobj 388 0 obj << /D [1374 0 R /XYZ 81 543.724 null] >> endobj 1377 0 obj << /D [1374 0 R /XYZ 81 520.284 null] >> endobj 389 0 obj << /D [1374 0 R /XYZ 81 452.048 null] >> endobj 1378 0 obj << /D [1374 0 R /XYZ 81 428.822 null] >> endobj 1373 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F88 758 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1382 0 obj << /Length 2851 /Filter /FlateDecode >> stream x[Yo~ׯ Rcp $JD5CI f8ZZ>x {JA=fu]]Uw' N.OxuD!IyBj\.v³jۺ|A02/)|Auhn0W'h$ bLF\d:`ČN+; #DL>|2d$vVc)EX?3:=72xΑV,1y0c}`UG[bD Os^䫧՟Ny _Mj$\)z ш`iSIrsH-#s|;3gMa1rՐzyo_ }FA5JEv7ϊLuJ2Y轼 sڡɲ%4R8^#)yus)q+ MgTj]>>\?=؍h'|2cGȣ4b:X󘕫:uՊ?5 1k^?١UsrP8gK34 K(2ڌ(\_KpntIMZe`VH"c,}Ir}N0Ƴ<%z 3f$O($H3*ƍͷ%᳴XiR?),tn5PD1X$焹pb,r|?C:sC*)@}C jn81ޢ\,ڊč06F չH YJ9ˋګ* GYT_0Q@uÐUKgut;X^woY<{儸}~HkOvՐLV~!SgOe-fO9_lRYȡ25FdBnб.l^g %"u1iu{ GڼsCD0jN=+Em=~p* -A%*uˋACVhHj܀+X2<÷?`,o#C"1*ٌ j0Mvg8`XQ0(U8D- e.W؟~ uʃlZUT; u3c^@:kE\a@JRJtpS9 3>G2|}ZqH2`17|CF4{̼c0P7YTR4:G[ ;|灅mZsc:+ҕ32tw9B[~aa(jͷ &^A$2l#x/g[MϺ\Y3Ov5QUm$pc=quDKkմ^n rHiyq̞E`m꽋#F ށPt:F!L}pD|KywC(&U/-?i%̢gĨ2U[.#VP-8~w6ARWS 8ZY"rHb31ѵf'd2b;1crvr(V6_Z7+cv0i7$ G C_7 zC|,A|+]{R-BBJDxK%;9K6<V$BXbCw6àڕ| j^DꎔӃFye\Ͱ2]g<{D!r1Ħԇyo,k~b Slva@Y{ P:Zm-˨~Ϫo3mF6hk J]Z7SZ]3gY~K6jA)* Q2;?v_JoK>4>4w7bbxh089QaSxVFARdс nH_$&=t18b!ssrh&Ӻw~?tv43t^6?7A:.X)LQ"7څdVR+nh2;cp>AԙWT=CɌecqbS6w.;x0u ($:2݇ a7e8ft2cq2CjpfjDw3u~CAomspms%wj;Rtcq$8bt2j (nAAB6Ws/{Q o4jދ+c$e* x} *(m w_L2763oY.½۰^ =⽍G[꧲_6y/ZUeiPAN𲫰65G1=[ t{- ->u.y5䝹+[A_r(KmUN+X{ˬj ƴ X'nol|J<93+V%}(I{`}G@=ÉyM} < %Yΰjm{XPp|څLlGL sbbA QScFMM"j9 endstream endobj 1381 0 obj << /Type /Page /Contents 1382 0 R /Resources 1380 0 R /MediaBox [0 0 595.276 841.89] /Parent 1342 0 R >> endobj 1383 0 obj << /D [1381 0 R /XYZ 81 757.935 null] >> endobj 390 0 obj << /D [1381 0 R /XYZ 81 591.544 null] >> endobj 1384 0 obj << /D [1381 0 R /XYZ 81 570.012 null] >> endobj 391 0 obj << /D [1381 0 R /XYZ 81 266.631 null] >> endobj 1385 0 obj << /D [1381 0 R /XYZ 81 242.887 null] >> endobj 1380 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F14 33 0 R /F15 750 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1388 0 obj << /Length 1835 /Filter /FlateDecode >> stream xZ[s6~Wo0Z/ig&;mݤ}0cp fw_#K>$pttn:GOnz?\s)D#cD5>P0M͟ h}|s +F oF K~7D ##0+GL -[$@G)*?[U6M*{ODVшˆ0'gWO=?ceJ)HMLDDoH!XpA(E\$ed#f(" ̭4:Lr9qe6b2ĩ]Ӊe #:˟|,`(J9{T8۠Dɲ#gB{H0ϱkRdш0$qg[K8M])rr7mĪ:Ig7ΟwYA4$Ȁ(y~)8g<"F!Gity2y6̈'x&]8Jqea'< 8G8J`)E72^^Dd6mkJ(fе7v>(ZD#mx'S`X6]Qto-u]q,^6[*:4׶ĵh$S{5x3^eKڠ,|l.J%ny`5礚2I-b-Ч%gt詐>` ;`DA.iң >@ Fq冫{ѭ؏Ych#6I@Hɮ ~/ =Fbnb$M3&`;UcL#$<{$eb,Uz5eW?2lBkq͑Dvֵ5\쒴z> ˆ+=GX#!0uI'hKH|XilHlLݨ| ʽMl5K$d'CN!wf m<Аf65;4١aMqXu{e(E7݀=Y>&IN {Snc޶&9"Żq 0s^rZ"u1wK\J]gH_f ,_XEuU\6fVsi}J3T7zߝ4ת•& 3m&*Oڽ= MlDïɭ1N({z)s NO|%[fiȞWZi Yyt/Y3Hnqm}R<5VHͫ(fcom@ydPޚW| %Dǖ SҢ8)5!E 0:-b_Y;*qJt{%c׀5 Hj񺵣/smwN D_!IsH%D2ԗ3}*B=]"e]\T" VV-ֲյcû)s)u ҃ZoOX)H*hI>ttb ?\!AIvhD 2n7/%qAN,;4BkVŕЉ`4`; G+la39hXQr'R!IK\Bᕍp8'Ǿ0a!O8 L|dp)ݨy#Bnؙd©Ym]NCL}HC ʞfNU3t/)&d_Eh! kn endstream endobj 1387 0 obj << /Type /Page /Contents 1388 0 R /Resources 1386 0 R /MediaBox [0 0 595.276 841.89] /Parent 1394 0 R >> endobj 1389 0 obj << /D [1387 0 R /XYZ 81 757.935 null] >> endobj 392 0 obj << /D [1387 0 R /XYZ 81 733.028 null] >> endobj 1390 0 obj << /D [1387 0 R /XYZ 81 714.484 null] >> endobj 393 0 obj << /D [1387 0 R /XYZ 81 575.642 null] >> endobj 1391 0 obj << /D [1387 0 R /XYZ 81 551.898 null] >> endobj 394 0 obj << /D [1387 0 R /XYZ 81 367.447 null] >> endobj 1392 0 obj << /D [1387 0 R /XYZ 81 343.703 null] >> endobj 395 0 obj << /D [1387 0 R /XYZ 81 181.567 null] >> endobj 1393 0 obj << /D [1387 0 R /XYZ 81 157.823 null] >> endobj 1386 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1397 0 obj << /Length 2353 /Filter /FlateDecode >> stream xZms_IȵK;יƍ\3M3OmICI񹿾 D2L>.v p컻w7e HvQ͠3%2Ldw~rs':WxsmKӻ@Ѓ(mtLߝrF3i)J:-8CFm̈QH8[d? dfTv*RQ"nEޛQSe}1&S <:(2UcrF #Q G[4xWɏlQήyvՔ]퍭 [CHrhig hF32RDQRVE@Arv~=*/EH"8\:E'S6ˢ|Ǜ+տMPB2A úi$Ex8$)INE4 &B@Hbr B,zROdLC7 dJYr&aLP8Kd`4h,!DAjeizˈP!A& 9/\5B;x!Z!X&1ohb:BH4%$:E!A|뻲ʛzʢہ+~R6SK Iɒ Qul' )FIB j%\<r]Ud:r lE3 ȼEѳCHU&A Bf7Ǫhx֢%C՜&O k!_R[\׮=G}ra!)' ]o9ޛs?1^*jAHl {T`G_,"O|UֽC.`7Oݍ |Xs5ߌH`v) T|[v^Lcץ]Q BFaw'9Y ?l]-\1C@,usEϛ>pH`ϥ ${,6%B}Wch?CnwMx@\rPX'?&XxWs"&>%lK}c3%[6@|H[ M{ί 9\eY HQ a3rV34dtXCcɉ;~{nZ|'oJ>|U,DߘA%H'?,o搪-k_kk'}ER,XHMG'/S/{E4i^>q 9\wG4:89ZzgOfV6"UUۢUaTŬX@WWOnmy,!=\ Lrҭ2PhhT Jn_/0.R>h%HFRuڷhB2X.+c|]R{݉er0HL^}20Y%婴cynfVܯ:60a6}9YޕdhkUW`RX7 /Vle{u'؁&Y5jP$hT/ubb0͌{.^@d3v{Dɾcnd[}~{|?y(?> ɞv+m8oTRm]ڟ}v>H4j Si4;h MQjbX? /u3oFM08OBz@J&Q/XmGk)-@f A(H ULUL)eSU-$XG{U^PnZVwa4xqECcS:4.m\ &4c/}4hz21V[їA&X dƤ1b`#~Wb̟h:Bz0G1}9;9NquG]|$MM.1F@Rȸ=@TI) 7~FtJ㱅H&$Qdw{\P`52b\%fuR ]xWS_"$4P44l?EY߯ oV1:!AS&ǯQ,Fa{ƈ_˪\n.W뼚Vs5=G ˕.vw+;zPlOىm@E&5D 1䛌ˍjEC wN endstream endobj 1396 0 obj << /Type /Page /Contents 1397 0 R /Resources 1395 0 R /MediaBox [0 0 595.276 841.89] /Parent 1394 0 R >> endobj 1398 0 obj << /D [1396 0 R /XYZ 81 757.935 null] >> endobj 396 0 obj << /D [1396 0 R /XYZ 81 496.501 null] >> endobj 1399 0 obj << /D [1396 0 R /XYZ 81 472.757 null] >> endobj 1395 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F88 758 0 R /F46 35 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1402 0 obj << /Length 2150 /Filter /FlateDecode >> stream xڵZK6ϯ`e/Xэw٪ĉJlρжi~(E 3AH@7A^-xquWRP\) (ÜP]q3ߥ. yi_Qq{"CnXS7a/>\Uy,V[^ѳ ΄ŧM50T1-+tӨYdJPk~[>r5B`#&)4Y'"d,~7YZVbnV­q 7󅯼ſCFDhgOoiȢQm5Ci7]i{w|GΑsU\?ߵ!)aLLMKֆ2<6HGhyژ#)UN8my4JeM l2sV:*&F X4 'ho-t(1R6 BH!H*, aAϻ)caZ5C NQE 9ּ9lw~YiKpފR4.Z %bX-/{uQ܌~zhB}KnDbt!z͹z樲5fk4j1:h|I|5T̂m46975M mZZ7ٸNJVpx:TQ]X&/A %= j7+\ժZ,YUuKal Q 6-EQ5 ]$k;Q4N' r5@:բZA{B.)Ʒ- ȡ;R-T-Ȥ!-n[=BG՝" Y湞,x%18c`_sλiq+q` [jnQ$vqWaר퉖!)fO7{ r=S.tAnI8F>t TMF;5M'˻u{bˤkx[j?I^!?X?/놳N!.iî]}N+dL8Iww"#" sR5qX]~V3E8ÌP퍹"_0TҎËhR$?b(|J$Sb' A99, %|8C'"tbp{#fIB7 B7Z[J(` -~'bg-t 1 {g蟖{=KdY@L(uXW=' Nٰy4թsM ИSZI,G%ϣ9y5a*~KJlwT'-ED( ȣeNpOrtqbDrE1n9>k,8eJf9;y>$J,_ԁ6zZ4Ș8;[: ٵȣaBjV-||z%K<"VEx͇VkW3_'|.{ H ntz\Y;XOުs5e)の endstream endobj 1401 0 obj << /Type /Page /Contents 1402 0 R /Resources 1400 0 R /MediaBox [0 0 595.276 841.89] /Parent 1394 0 R >> endobj 1403 0 obj << /D [1401 0 R /XYZ 81 757.935 null] >> endobj 397 0 obj << /D [1401 0 R /XYZ 81 376.351 null] >> endobj 1404 0 obj << /D [1401 0 R /XYZ 81 352.607 null] >> endobj 1400 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F15 750 0 R /F46 35 0 R /F88 758 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1408 0 obj << /Length 2296 /Filter /FlateDecode >> stream x՛ms6WpIJLwM;\S>0h"K^g?)) =%bv!24Mhrqt::zu.x h&ac[$ZjbLFrpPPƵF?:;KQnq1-Gzul@NݙrIR&I$FBMo/(!zs~]OC04~ͧ7߮|7RroaMRG~(U heVPwTRە¶ddTuǶAq& '45'֋ެg׫|VQQӣ)e@q2L4t Cۡl]hz:FsE-}#,_de#&3J%76_!6U4n܅ϧ:ki聽 1"tA]b8 SAq{9gu|9v7;Lʦa*^7ս崉i䤧QytRT#Ѵ27!\?>}y?q ДW:90!8%A7^ MÝ>y8KA}e/z;(mSUMJBUPml6ne`rM*=ۄ`-ǎYa.)fd"-˼aUqۈ2e 8#%lΩ\,T*`!s -r`͞EWlk](߬q|^̖^n!7]䄲K[I!wAFod8AqnUrR??^tL:CX=K^ona؄q븎'v 0f9V;8 =Oܟ}nFmU^"Լ˪Fc6am] e(|Q n$Y#R(X!ƴZdv^}UXUSV-Z'"\VҼ-h"hQ*vEe3_b9O?wl k\gFQ臹wTkأXrâj.tJaIf&!`AfoJqRv[Xƺӛ~*9±rUU4[&hZ]-HcI oƟ,w.M"ʏq䜈ӌ*[*\]^dBcMuI[]di/~߆3bTo=dw<3\D1?a90蘽"hŠ+@2\ qA~JghEER(fpuOz+}u9~ ݰ@W Yi~#[cQ:E,@̩ ]<ѩܪ$qDҧrlx5Xz dسa'?>_( srɨd6[};Yua٣EkF%QRK :3_`e6O̊)0 KL8VY#kMNYq[܇YFj˴Z=zGʰ~E4| \et?~P@%?L'<[%3 n㈛ ݡ~Af'ڲf1 8[X"qvviZOjclh/w_1~a0} J۝\?yrv퀓GM<WH1B8D2XYnѸBL ?l? (^y"wgpK3<#?<Ă'້G zqZ |7h\!qʈ8Ub#້G D>b g ~ûx<6D qp|Uppx4Rg)S>>@6 D FL/t/XS韇,"snh`D8EKʟXB~^. ;uE<EK4 =$9({!X\c:̛(Vv,L?{zAW``^ Mv<# endstream endobj 1407 0 obj << /Type /Page /Contents 1408 0 R /Resources 1406 0 R /MediaBox [0 0 595.276 841.89] /Parent 1394 0 R /Annots [ 1405 0 R ] >> endobj 1405 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [189.355 533.033 233.762 542.619] /Subtype /Link /A << /S /GoTo /D (cite.HHKK07) >> >> endobj 1409 0 obj << /D [1407 0 R /XYZ 81 757.935 null] >> endobj 398 0 obj << /D [1407 0 R /XYZ 81 733.028 null] >> endobj 1410 0 obj << /D [1407 0 R /XYZ 81 712.273 null] >> endobj 1406 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F14 33 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1414 0 obj << /Length 2557 /Filter /FlateDecode >> stream xڽYs۸ݿҎ>qgZoN6:nhYr%ʱM2e>H$AO8ppy7 Hp}PJ(d_cG+|x*|wnj}y IP4&e K$: [ _Bc+]ocΐ`EFAhί+j@GNDG෾W'͔`Gc*FctlnHMrPA?7'8Rx"QcO#𤋊)֪-F<8>MS ~-nH+X_)][aYRDGYnx+JٴĔXl(A!lro0BG DFh-rppHr"aRhLi=902zo&wc?&ur}0qCu0%, Ml 0$< p7Y=3 7Zh^Ɖϛ fQ\CD4iՌ3/6Z"kQHhZ̸a73wdZx>͑Q)'cff ~lmhfr$Jd=7oZl|\}Gp5Wߍ yxtHܥd+\*u. |JPsH&^TM[Є#t\`I? =$AapX_֦IsJk[zmmZ}}r  [Ci8Ey_P<ƚh#*2l뾭Z)HC6 NCp*^)i0)juV]Y57k>:f|TZBV46H1LĚx$;}We!T^]^YujU/wae lوh<\g}DPZud͎ R^{L9fr>eT7t9q݆!㦞coHD}0'|Z%P+^R2"+W`CAmzúegܺnf4]9UBiNw/ !z!u]yը 0մJdp6B F/J$/u4[νZ}R_M&e$ MT  eݦRKVIdG Xqȁpm;/~se|HW) K3Y`(jҩBa @h$l+Ge7WU̬-jC%e/ :A4bޭHJZƶ. ?ut&PjubOFU+}^iPv}d;+vv!D=&$ A9\ `M*2u.ce].F0slqu8y(4;c "o]]^X dApZXP H曥uzBsl-+}\陻~Z-2Wږˋ էTva(rF1Lی<{;q6vp»CPw%?9o-0=cuTayR~8=yB w܅N g{0])*>^@t)>LI3 I2}2ſ`Aue-31V>83*{푐8t!?P=38fz(ʔJQDJ t֊_,ƌ/s(](S8F$ iE{!uar6N\?L;ʧqU$Ңk88]-*Wi7;KV{mWO 3 }WO+x7 endstream endobj 1413 0 obj << /Type /Page /Contents 1414 0 R /Resources 1412 0 R /MediaBox [0 0 595.276 841.89] /Parent 1394 0 R >> endobj 1415 0 obj << /D [1413 0 R /XYZ 81 757.935 null] >> endobj 399 0 obj << /D [1413 0 R /XYZ 81 675.889 null] >> endobj 1416 0 obj << /D [1413 0 R /XYZ 81 652.145 null] >> endobj 400 0 obj << /D [1413 0 R /XYZ 81 580.931 null] >> endobj 1417 0 obj << /D [1413 0 R /XYZ 81 553.803 null] >> endobj 401 0 obj << /D [1413 0 R /XYZ 81 553.803 null] >> endobj 1418 0 obj << /D [1413 0 R /XYZ 81 532.536 null] >> endobj 402 0 obj << /D [1413 0 R /XYZ 81 147.216 null] >> endobj 1419 0 obj << /D [1413 0 R /XYZ 81 125.683 null] >> endobj 1412 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F88 758 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1430 0 obj << /Length 3435 /Filter /FlateDecode >> stream xڵr6Pr\%!x3v6xmm6Ԑx&_߄$+V3Aݦ]xs#Mlt8FX$jt3ݎ/{,ǚ?9|( iӰ&舖'JBn?zur<NoM\sDŽauȹT+4YS=mw(} gB2'Ψn+!6o}%yU.";,Et]4Wk-h^tNy\y\<&LI0|k؄)w؆sFHUGqYnq1 cOUH(lp~LXóoH EKW_ LfM@!&>DVH*ZYWa*JEf[h\p'O++PX@]-j1[ZY(, wm8".'L&/6p,BBd+7iTð4XCIMZ:?{3sL쟘AѤ=)/^$wAƠTğ" piMNcQ }s홥2RD?!JIwDxÛrov譸9t@٦;:[ؒSY%wB (?nR*PF.p9]y\풉b^80ѡ9O8VJq!v5n3Gܨm!gŏā,A/&iX/~AS_oc@ !A@[!dύ'=sC'oɽ/+a8IC"dfn7Je !U5>Ct+ R F!4O $&~x)ك:^#;MGzVj [[~-%ݛL|6Zm2] 6* f1n+UԷQPj{xbqCuFb-݈?ohSBi"|jY1u{aσ%)DmIIJxC74@4KZ)A_:y{-z7qZ.Ԗ"ˠV"BJ w`罢C[ wU}w43[^Cu[^py> c~t9t[$]C7=wy /̽WpbSzz^ʶ'-8p(i>*lAS6+|tע, UV טf5_i`P(Z= 6WU >q;5izP+:5t:p0?e7 W n _W&L(;نn7(-ձYCH%Nleu_:L<ΝVthkzd}뿿_MFAhAmYeˇ!.*OqlYWzEVVX V$$k8ئ'=XפJ-%{ 6؉ 6Z[#KeJSo+tMj?ֆzXhm Da;AةBq7n,!nJUD`W8BUOmXöȫCyRh(tw endstream endobj 1429 0 obj << /Type /Page /Contents 1430 0 R /Resources 1428 0 R /MediaBox [0 0 595.276 841.89] /Parent 1394 0 R /Annots [ 1420 0 R 1421 0 R 1422 0 R 1423 0 R 1424 0 R 1425 0 R 1426 0 R 1427 0 R ] >> endobj 1420 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [334.155 561.301 363.42 573.095] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.3) >> >> endobj 1421 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [83.636 536.412 108.658 545.997] /Subtype /Link /A << /S /GoTo /D (cite.JH04) >> >> endobj 1422 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.628 534.628 203.894 545.997] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.1) >> >> endobj 1423 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [288.737 534.628 318.002 545.997] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.2) >> >> endobj 1424 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [139.381 482.215 168.046 491.8] /Subtype /Link /A << /S /GoTo /D (cite.MS83) >> >> endobj 1425 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [449.661 468.666 474.682 478.251] /Subtype /Link /A << /S /GoTo /D (cite.JH04) >> >> endobj 1426 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 439.784 112.902 451.153] /Subtype /Link /A << /S /GoTo /D (subsection.4.10.4) >> >> endobj 1427 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.734 225.816 206.545 237.61] /Subtype /Link /A << /S /GoTo /D (subsection.5.6.1) >> >> endobj 1431 0 obj << /D [1429 0 R /XYZ 81 757.935 null] >> endobj 403 0 obj << /D [1429 0 R /XYZ 81 210.858 null] >> endobj 1432 0 obj << /D [1429 0 R /XYZ 81 191.687 null] >> endobj 1428 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F14 33 0 R /F88 758 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1439 0 obj << /Length 2483 /Filter /FlateDecode >> stream xZ[o#~ׯI Ru,ݸ)PثBy%yeF %{FB6)yxn24 ?|rpP"<~-ft)i=+jB)7`FjvTJrɉ.}VW˛X?w3')_89kC?*6O8o1*P>-?$'bX2G}&XʹFV mVN& *#ߏ˲j+|j@tUI3 Kն# ,]BAԗ'N ac#ot#D#~. Ou>ϟlY ba,"DmzȒ p$45zqP~ <5Wy&afa%0A|EŸ.6[lR:Y6gm j!.: ^ghT2bSK ܢ#B/8nX;u8uɨҫ^x2t{blBsxxѢu™;԰R;^;+؊d^Rđ(Z%sw8^0+S&.4B<^{L :d{ #ϱ LlܙtȳG%az9r_ )ir_c 6FgU$1g2Dp9{avUJ[w~>^t@ MC:Hq F[ X`x["` RX'R%4RE(Nt.( oOCGhCG+4lQ.uDm.S,#\ϥKd&t8"]s$D>| 9U L|r5adꇼ\XLڛpfuuK赎^렾EPwNLQL`Fvp1X)d\1N`ğx1ǖl -_a?~~wХm}Ol=yS1);4Z6E|?YѽK1:C84R52Psh 7V;/bHw:w7h2~_-r(59Pl7!+t(C"FS|)D;"cqAzpI㺽Np'uܾQ&,:+z썂Fzi㗅sCVGהB^=`$:OF,%S`'%4SX07 ~0ظhl770>1_i[XY.AK\gOq?~CPt-xJ: nq?;i SCK`[F̞=cłUaI:і+yZz;/i:s'?"pǩJb0jkcs@ 7']/j*.Ԫ?` endstream endobj 1438 0 obj << /Type /Page /Contents 1439 0 R /Resources 1437 0 R /MediaBox [0 0 595.276 841.89] /Parent 1443 0 R /Annots [ 1433 0 R 1434 0 R 1435 0 R 1436 0 R ] >> endobj 1433 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.734 514.317 206.545 526.111] /Subtype /Link /A << /S /GoTo /D (subsection.5.6.1) >> >> endobj 1434 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [327.958 261.214 355.903 273.008] /Subtype /Link /A << /S /GoTo /D (cite.Jo04) >> >> endobj 1435 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [459.192 263.336 490.268 273.008] /Subtype /Link /A << /S /GoTo /D (cite.Han99) >> >> endobj 1436 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.734 95.448 206.545 107.242] /Subtype /Link /A << /S /GoTo /D (subsection.5.6.1) >> >> endobj 1440 0 obj << /D [1438 0 R /XYZ 81 757.935 null] >> endobj 404 0 obj << /D [1438 0 R /XYZ 81 499.914 null] >> endobj 1441 0 obj << /D [1438 0 R /XYZ 81 480.797 null] >> endobj 455 0 obj << /D [1438 0 R /XYZ 81 326.531 null] >> endobj 1442 0 obj << /D [1438 0 R /XYZ 81 304.999 null] >> endobj 1437 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F46 35 0 R /F15 750 0 R /F14 33 0 R /F85 743 0 R /F29 17 0 R /F61 742 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1449 0 obj << /Length 2489 /Filter /FlateDecode >> stream xZYo#~ׯG{>`c k ZQZC-ap}dI`mA]=GWg9{sYQD7j{:k(q Wև\|pN>b`-ꃥDJ{,_.# ̧Cu),) 7v ëAq1Ս Xx$n֘b;>.VfxqoS?8iK}<R1Dn 1HL}7( 979W0JGhDy *y&+-ZmL7M45"mK A!kgYfx8҄XZoVx`TͰ] 4n;m:ktS ,xu")e6i$5RP TH{jc앝'bm$Yj͘ (R\-d.Fp 4KR(Xb.)hBHSij+Q+Rc&uFbx]ZYNi2ffCbU~"Bb=c0O9Uȓb(ftŸSHӔ]~c WH`ncቓ̋W.| f?nvY>.̫0y3ĪCl E]|Qʭ@By;Ӓk|ic'e 1Qqh5 󹥎e`~ m[#)jyۚ] C@_yIIj C{e}1jEfĿm 4kMO *yJnݚl8ʣp8DAC+GB]CA\e2 r`[h: ܨUDB,d(,dQ~UE*R|u֡E5@v Z%P!3 x0)"pnCP|W iza\ ƓKkۄX|̄xv{E}QsMǓʯ!Ypԡ;3g!8"o$4 ,WV"녇{!w6R;̆xtTxP2!NoǓY%j<5=iy 20GLCqxbߒ;➼OQp9 Qt?I{lY3Ȧd<~u'}3!^xMh?$rk&SW(8 W WXunw :fP V2s/`"ɱӝVlf0p[eu_2Z ԏ3 :)tUɳ) 7,Y.>;`܏$4̳rf0 .kB@wQ~)82L~Е430ԜE5;t%CݩiFÕyJ.2RzAO ŠY~sջUXBb5H+Dȷy`SCOŠHRn! IzQHX+iLGtf&~N @nѺ0r+a;/M 9֋ktIw6B$0e}ѐoEݧ>U@m_FvvXw~C#,QR?H̋r5˯"&Pc@лJc^ͩ-CaJ| У?X[ӭ%Ƀ4iiW> !`ƭ$(WqOQ}߬ ~ nSfcɺ/"-D}GWHU';|L.bNwWReK3Y&+{mZOIH(y?uJBr6K~Ǟ9Щb$O<\_ (~O% endstream endobj 1448 0 obj << /Type /Page /Contents 1449 0 R /Resources 1447 0 R /MediaBox [0 0 595.276 841.89] /Parent 1443 0 R /Annots [ 1446 0 R ] >> endobj 1446 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [426.512 521.113 450.323 532.907] /Subtype /Link /A << /S /GoTo /D (subsection.7.6.2) >> >> endobj 1450 0 obj << /D [1448 0 R /XYZ 81 757.935 null] >> endobj 456 0 obj << /D [1448 0 R /XYZ 81 733.028 null] >> endobj 1451 0 obj << /D [1448 0 R /XYZ 81 707.859 null] >> endobj 457 0 obj << /D [1448 0 R /XYZ 81 678.913 null] >> endobj 1452 0 obj << /D [1448 0 R /XYZ 81 659.742 null] >> endobj 1447 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F44 32 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F64 765 0 R /F15 750 0 R /F88 758 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1455 0 obj << /Length 2371 /Filter /FlateDecode >> stream xZko_!'9|?2Hi[`ٴXl&(GN?fKQ%#G~%^^'cˣ},R(FQD52P0g_*?dWC}hCv[%R}!E0uTeTʐ8!?ּ2{P4좖=ၬgZnXq3`ɩѪxl'5B$b0]kiv8'F]#\$ YuL?L*z.XIcp-h8dr>`wL }>ES?"`q]J5_$ˤԤ_)Gb k)lS6A蚖C;I#=N۽F=.`bɇP,(VO_=ޖd>~uj\b Gԥnjfu~T :nI!'[tC~Jh|`ְQCEﳕޘt-ľ̀۷Yt,3 zçd_-5l!)L\4ocz/ܛ9JO. # ۇz8 ]P\Gįp8A<^L‚3WP#JQ1;kogݫ;LNhHHLL%3:*=g;}I{|Hnd:ŧgf ^4]p ^u0AEcӳx7}Y76oA+KՇKݨ=jX*h="M7cG$CsMl힏Ów3\D^o\ QN! 67p*xoAl Rq${V 6#ML'w`nY f:,,XE2셽bod_](KPE)X= V-CLC= lQ 1M i0k-N"G>(NDȅ%&wݺOmj`#}ҍw(݀0e9Äv)S' QN6}*/Ҥ:HAU,ˮ(I e݇ByZ^&ʪ&;gs}Z?}*z6a/0WdM!jrU*B̰arlfgoҼ_Xvg+cTiDK /̱rv4]Dܽovذ+ PB ߢ0a(.-8)kȃuW;wTި#1޸QWQ29,-j_,{BWY˞(.iVN nfMj^jVK J$̰`1 "H(1e7ך2<,l2_2́Zl-#nl2[a&v>ӆI{^NjU:+Z,6M0 # [ep_#LC4YPVmRG_)ey"xU[e^GuxN endstream endobj 1454 0 obj << /Type /Page /Contents 1455 0 R /Resources 1453 0 R /MediaBox [0 0 595.276 841.89] /Parent 1443 0 R >> endobj 1456 0 obj << /D [1454 0 R /XYZ 81 757.935 null] >> endobj 458 0 obj << /D [1454 0 R /XYZ 81 733.028 null] >> endobj 1457 0 obj << /D [1454 0 R /XYZ 81 714.484 null] >> endobj 459 0 obj << /D [1454 0 R /XYZ 81 503.545 null] >> endobj 1458 0 obj << /D [1454 0 R /XYZ 81 482.013 null] >> endobj 460 0 obj << /D [1454 0 R /XYZ 81 210.07 null] >> endobj 1459 0 obj << /D [1454 0 R /XYZ 81 188.537 null] >> endobj 1453 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F15 750 0 R /F46 35 0 R /F88 758 0 R /F14 33 0 R /F64 765 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1462 0 obj << /Length 2436 /Filter /FlateDecode >> stream xڽ[Ks8Wj/RFB~x[[;qTśx0L٬($m$-$E9$A<݀`'8<% HrHfP &ftۘ? ~k[A02ظz} p9Og=#P I4IJWg78_sjpL> dbTV*RQ"ni1rR2(b'mȪ1yFE #D'#-  aQ ӰJ?xr_~gqASO59xyܸ {}Y>fup n*ˠƒ:Wu; X~a 41dDpA/ )b,Wn PI X8=wz!:q7g2qbr|7gܔXpe\_޿*5yl,שR9ˎc _s`sZ K_HUK%̍O/dZGٶ W:Tr\1_ɋaQ̗$¦=&Pݕ&8|* 1*q͐/Xtm78s 5☃"HBk} 0|&DXƱa0ӣycw1my8X_m:QG"9+$nspI|0""q& =rOM1(2r 4OFQ4ӌEMĻAgF¦)61H+||vW,5:^R4Q2t@ꀃz8>* J@OF5D3 Na7/&9„Yr#)R^5죢*(B+:Q~1ـG0)>L)r@xX߲ tXR)Y@IE5"\TֵvrJ(*0$9Veo 򓏫9i8?3eX+GOaie!@0+Tk؋F>^N|ؠuw{WppV|bD*N#?@,'Å s=J"'ub8vսǶS7ovi8° 9I >?m6ۺ{u]j[ާfl>׫rV ^Fp[nPVO>iqT˵;Ыlr6 ʓ)(:JtU3@h%4Cm@X44KZ]%崌u(]X?VZ7Pr\|LS+6jVu6"dii'BUXD4:4Ro,kJҍA iBG08Y au1f3}kʂ;3_(e.{\fl޹k^Ц?Jgz_,o"hÑGr-i6p_מj΋[ mSǛXN7Ū4[V?k‚^t <c*@$L}z\Ϊb!H %o\y zs-+ {aev.RY9JLWi+\4[lRtUOXPV&<>;h}Ol<09j7z4زiۅ"z>=>7ָgޢVQ_LoQz &T>qGLwl Z^!Ư@!?z̔Sjbr :[I3w3r ju>}I7kֶY S(2JviS~XFKh)62tkfJU53^>c_Z>I0S c{-,N\qn/?P"&!ӠaɪŔFE"cNk,-Lסي4Z:VXn_?0П endstream endobj 1461 0 obj << /Type /Page /Contents 1462 0 R /Resources 1460 0 R /MediaBox [0 0 595.276 841.89] /Parent 1443 0 R >> endobj 1463 0 obj << /D [1461 0 R /XYZ 81 757.935 null] >> endobj 1460 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F46 35 0 R /F15 750 0 R /F88 758 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1466 0 obj << /Length 2073 /Filter /FlateDecode >> stream xZr6+ :LZǙvux$ԢQv$AQ&]8} |x5x{YQWˀjxn6oW=v%DlM(̤vs˫&0 &L -]|,39C4PzXJ 4ˈa4m=.}lz<p::m:Mçdĭ&Nł!(f*T1x 52 埗5XY<a^t[`LM6j*# D?/9eŜd_9Z=Y\H39^,]EeH!t_RT <'=R6xֳa2 ˳9ou6RD@CmI\=|.)Cx_v9ܼXD;z1G=pHBwnuY|Iq!YD@5s@ -,"^C̎;lC ȁF!BQ^ G;LVei4 F܆kؤ[;^ڑ:Zyl"\Jq?=xG)pgR+l%:.['MI0R( qbW=mglji@$P0|5 f*1m-k$yYSP3cse3 "hBzt\V;M fFt&-YY_! m^t!,Hݙ/5gs\->}87ImtT^~O@Q5(S@մY}<؇$.&3fдaU0_5 50G7&5rIE68Fǥ>?,,%jˇ0~d^[E?ֽQr[βh:)әAܶ] _ qAE<}%KXRgjb@#H؋&"wgL"& hCC鬶ur;;62ޗ %@dN\B&gL[s0`ߦ34BeW;vأ2=~4 1s%}`faI3C L,:3ސtc%o ֢4wlS1)b|9>לtӓi Bف i5h Enl-vII$E'Q҅3]x6m5ksy[鮤o'ɡU+`R#u7gٮk2?I%IՏSBݜ#-jZs>2![VCzތs\v'B*~h^g}QXv xߤ?讠o#sON@iT Y)tW·w-Q$ 1NQdxq $]-WsNG1 BAB{1yܽػ"6@"`_M)%Km"N%lނ)Iq-ނtS5M IQ &K8ôҬY#;G(T*!tf]4H(_t27\]-tD_Axaqf! S w%7(f]42MŬL\6 u i_N4mv9 _; 4f\44sѨt*8#ۇ(iGܪCD63v2U5AA=*殰yf݊<&|'AkwbLz7X Ge*SViD ujcc!RgfD0(ڱ4̣,I$#n.2"Bu_Cm}q?Z֋R8{{;VAeZJdK*.jL%d}5bT.9qZd!TPl$x--|/ "/{pcsY endstream endobj 1465 0 obj << /Type /Page /Contents 1466 0 R /Resources 1464 0 R /MediaBox [0 0 595.276 841.89] /Parent 1443 0 R >> endobj 1467 0 obj << /D [1465 0 R /XYZ 81 757.935 null] >> endobj 461 0 obj << /D [1465 0 R /XYZ 81 681.237 null] >> endobj 1468 0 obj << /D [1465 0 R /XYZ 81 662.067 null] >> endobj 462 0 obj << /D [1465 0 R /XYZ 81 285.516 null] >> endobj 1469 0 obj << /D [1465 0 R /XYZ 81 264.037 null] >> endobj 463 0 obj << /D [1465 0 R /XYZ 81 191.326 null] >> endobj 1470 0 obj << /D [1465 0 R /XYZ 81 170.309 null] >> endobj 1464 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F14 33 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F44 32 0 R /F46 35 0 R /F15 750 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1473 0 obj << /Length 2602 /Filter /FlateDecode >> stream x[Ys7~ׯY!a܇\*lUVd=PC&)sb.jldr Fw1#gBD1]"| &˻jpƒ?~ lH #y1FZ#WzyFMD2BP+= #;rRA)8#Gose//Ώ1̇d7ͭI ^^XdN)\Tfʬ{ ̳ h iN'CJ$K<$1UXa)<{\~DyxPD +8^)~.f鐈d5٭7  z3"!&$`T:ٻ͐/^`#φMa#0ܶo?=N=`F;byCCSS Qm7̳qSaͮZHI b [)G􈽛exH0,Yeɞ?$y<$"="e0L)3-b_FC{1mK^ (椰p,u<$/`A:uw,ZO SBtP#b5~.;%H*ABgb(.ҳCU!Ip`B#:Aț C/AIJ#H" Ճ6ٲM`Ź~omq77Shж;wu^.^n>F|RL|(t8tcKE9IM{U5c s`DCWJrRt@&cCMn:KiVQFUp-vVE13o WƑ^sn[|d |hR6_ e.~AJEM:|tcm8ǜv/&wq7ƈweǭ7~ai&ںp>͓uxmVїPl\\ R2U F,p8]# 劙k]}`.Pf!yvB[R ai~ؘJ qRd D(#>Ʌ Ε]\ţnEG!5IZq,e>v?iPCL61%VLAҔb ]P/T?&$MjBR?ۤf?'N Ij~pܽoн!)Jq257wv4wc; r&H\6ƍ4sM_6Id~om ϷXxI?d;݌T.;9҃n=FQ*E.ʺ+iL%~)PM Vf!.>,E Y-RbB!yd4s _KL{^!vԧj7PTNeΗt7!wCgԡ3AmsDI>C's(*shN&?(!Zj -,3Lh7݊6h IZ8/)%Hy\L'_X>.v󇅟8R >L[ȟ\QV~ H1"shNNe6=j*B_/GuAGFDKs ]ȿ"]Zх$u в&O.4 m ]hcOOvXd rw V G`lK֧'D %wH?@JFdd+O?Q0`ҒҔEn(>z2G&ڒ~H?Z$HB'p 'ˣOGJHJett<1°uw,Q1mYDǽ 1!ܿ82wo?O>evu_98"tf Ѧ4б`)J{-U4<~8'xO̳3ĚκaI>pZPc@PQbq9>y^Z/|uoM;]ze GJ}/t§l||e:+|AxEkY0E11%Pp/n^UM;J%H^`%ɹ?cTk}ɲJC ʤ}wt0PtWetusLw&J\ N +kF>u)]([d5hAlBre8CbHdBVb}gRF 8=׳|5=~3hıjeAPw0ξKC9i3%}};>qo=$$Oea2 n$ŀ?A<쿮 qEFtFztg}Q+Pף8򚂬%0APݮ6>aC'G֨Ί_Af{ endstream endobj 1472 0 obj << /Type /Page /Contents 1473 0 R /Resources 1471 0 R /MediaBox [0 0 595.276 841.89] /Parent 1443 0 R >> endobj 1474 0 obj << /D [1472 0 R /XYZ 81 757.935 null] >> endobj 464 0 obj << /D [1472 0 R /XYZ 81 733.028 null] >> endobj 1475 0 obj << /D [1472 0 R /XYZ 81 712.273 null] >> endobj 465 0 obj << /D [1472 0 R /XYZ 81 655.966 null] >> endobj 1476 0 obj << /D [1472 0 R /XYZ 81 636.849 null] >> endobj 466 0 obj << /D [1472 0 R /XYZ 81 578.277 null] >> endobj 1477 0 obj << /D [1472 0 R /XYZ 81 556.895 null] >> endobj 467 0 obj << /D [1472 0 R /XYZ 81 500.589 null] >> endobj 1478 0 obj << /D [1472 0 R /XYZ 81 481.418 null] >> endobj 468 0 obj << /D [1472 0 R /XYZ 81 379.15 null] >> endobj 1479 0 obj << /D [1472 0 R /XYZ 81 360.344 null] >> endobj 1471 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1482 0 obj << /Length 2021 /Filter /FlateDecode >> stream x[r6}WQ6_Ig8񤓶n!'H͎D)M D8~1)Ξ]b0In\xu9M 3Eer5H[ihkmOO^%xT㸫wvH9ӫgoIBCZhj@g7$೟ܚUϱMJ~+rX)7+x//c@-/lJJZORK?0JX7kh鬤ݑR2 3EH0:TLtYwҕ?vd%>s=CqT6MoZv;Li0 }n2@ei{}6Y:d,/a"QHi*<[P*>&̾>~y_a/pʹqӹZ]xb/O*:X\1i@8V c;?Iy'tB+)NpB,KT87A!4a*XL).@[)nG8>0FYzL`I`|J0*_0F9=#qAH e~b0$zr!Rb8:r% 19|ߢj?EYH/E ӧ8&J2JQGp>|J%^8)(~߄E.@PؑX>iFHN@c\Wƛ0/](0_2*1j/>Nl<p`F͕r2,Cb bH'jY#a6m0Y}J9}{z^~Io{</ TH Dʰ^j_ӭv29k8|q.R@Åy4qxz7·O)ҡ!}˿Dy їhPD1bH Iϭ}vطv Y 'p<Fg·O)8_=~&(qNpT`0,J=cR.}p>p 8@YK`/^|; ˈƩ reU -~> c:x<å sS >ZR8>`?y  ГF\0KAR8Tn^gA+Lhô>*ĩd3A}) ( &%ڨ6C'N80_6Aũ2TRqu>jf0MHr 4 ̗*LXT0j9}D@h |>/{שBNgKa Z)MQTei]>pCaAdkpJ⺸+;Ng\iTMEkNZ,O))LYPL&]7ڕ& ҉MKo^ǚXnzm+}vlM zSo^`^Vv6#DJ%Crzm 7ݫָhrvl-Z'YY^&pˏWK~Y:^KY:Og)nԵb1]Bl٬xwp > }V;Pɟ#Lֻ,mS2ϻ&q>ZpE^ C5Gy8a؉ȪS6/3S1OQZ uUYU2F~J^IOfjN|]:BϏVt4EK z`ŐsܐjzkFk] 6FHY{ []XuaݻKpϙmMm[Ր.?m3 endstream endobj 1481 0 obj << /Type /Page /Contents 1482 0 R /Resources 1480 0 R /MediaBox [0 0 595.276 841.89] /Parent 1484 0 R >> endobj 1483 0 obj << /D [1481 0 R /XYZ 81 757.935 null] >> endobj 1480 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F46 35 0 R /F15 750 0 R /F88 758 0 R /F64 765 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1487 0 obj << /Length 2126 /Filter /FlateDecode >> stream xZMs6W$J|PJ[ىgÎq@KÊE)d}IE j.~lׯpYQ뀆 yBv܍>4x£CsvÇkx`ORx(=C3 opMu@BP3zF)(>$ aAGoT/)It]e-oCr~NdސbraL)\fY0 }P`0#5pкuۂJDBZcTpnK#Ue^0'*E2M+'&OwYnJ5D E1&9TQdtI'{OGsFIjeL('S|=Cվ˦KUXڎ!5 #ڬ0i?sJ#ie 6'F^i!wsoh/kxL?}?@\ñ*AvPv^/-/8&11zc!Fh㶀]XF-b4¢$ @J{s(͡7 s(D0?nW::gYE.4NV5JWQSյv3n,"^mcMo7їd{hBobV=y݊';j2pJ8d7l@2.i&J$ eUs#HNQ8ei۫߯c!h` AG6jbSGCdB1T]wF F쾕QJ(2oxu:$1 6ltcAPBL.1Q"Mv[4 l0`1ĩWHͳ"G+co׳kSl1eWڒ/   Pv݃'f먱 MYpPj ݻ}O@~ܠuM!i|@t&I!!>] ͞fsu@H~hz>٤0*pt\F #ɇT#+]"D2ԃQ%[ܦK4ll$=ϥȡB7EQR4vL򈳇.@\.P[F."&=1ja`]B\2v8.la7#.DSq6Cf[Cd~>ptX=ӆ8EDGVAb*DBnT4s/2oQK_20zKX2G xǞWt8]@<Ұؓ Xf[v6^|6%)3j`ϻvl[C}M 3D!p.x` $dY>_:ŚVo,QYjTv'o/*,v#EFJ ޯu(ULX15ѽaL0{-  ܰ'fo( bd](5}2q( PXj:{{N{y#sI8F,XjZV3zzCu q)*4̑nzaqT8C\CB8d-1MK1*L BÖlcyglzvhkߟg/ֽ]z UrV)ub0(Q~2˛9y"xh yaǑ"liD%|] BS3bCifwnPu =қE`50ȶ:QS[snWo.YhA Se:;v7ء|"6#6}@yx&Avu ,yek'p9x=0B/kN,@3r3Ju?Z0.Qy:̬t<9)R82؄ endstream endobj 1486 0 obj << /Type /Page /Contents 1487 0 R /Resources 1485 0 R /MediaBox [0 0 595.276 841.89] /Parent 1484 0 R >> endobj 1488 0 obj << /D [1486 0 R /XYZ 81 757.935 null] >> endobj 469 0 obj << /D [1486 0 R /XYZ 81 733.028 null] >> endobj 1489 0 obj << /D [1486 0 R /XYZ 81 712.273 null] >> endobj 470 0 obj << /D [1486 0 R /XYZ 81 641.827 null] >> endobj 1490 0 obj << /D [1486 0 R /XYZ 81 623.022 null] >> endobj 1485 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F88 758 0 R /F14 33 0 R /F64 765 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1493 0 obj << /Length 1845 /Filter /FlateDecode >> stream xZ[o"7~WdTTl6QW6eӪ*!J $m}gc.9R]spxvvzU;9W2 j '^eV[ήnn#,v]9z<k,nCK!6`:PF"lDyU =fo43`{/τ-e0=nErc?~RdR \ iҖI(eκN􊕊G,)f֦YVVV{o}A} _L'Ҭ.X+OW0_:V- Hf Y3:JivTe#̛#Ôǧ =X9joXldTU"]%fEv,*|{mcN<%LW-ǂ2r&d&N1=*ZɳvCf ]8eKfruw[v(j[V;22ژ2X$gV2A@#wE:F/Ʈpev ]d1c!KJ)GS΄Ic"H&()&FwX1k,{- 9äNbpH-T pcVa5Dpd81##Jsf)a\=pcƚcYCw<=$ÉItSITr!nXx(94'DpLDK1 7fI*3 Px"JyH (^%&ƌ:j{Cl $?O 7f[Ks X*J/urtS $)Ӝ$bYδ8@2 n]%9Q}bxcbڜ@,R ` ;óe endstream endobj 1492 0 obj << /Type /Page /Contents 1493 0 R /Resources 1491 0 R /MediaBox [0 0 595.276 841.89] /Parent 1484 0 R >> endobj 1494 0 obj << /D [1492 0 R /XYZ 81 757.935 null] >> endobj 471 0 obj << /D [1492 0 R /XYZ 81 733.028 null] >> endobj 1495 0 obj << /D [1492 0 R /XYZ 81 712.273 null] >> endobj 1491 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F64 765 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1498 0 obj << /Length 2268 /Filter /FlateDecode >> stream xYn}W znzzmqgJ< ,ҡ$﷊ݤxe/u9uޓGݝ}ӄi %RjO+MG~rϩ˩ߦ~| ;% N30JquGtw3ca!o9#ţD#_ՌJy?^8#(PD_'w\an޿[J\oQびAoWB 'z9):5~{7rv=jfpI- V^}kޜszNW1ZP$WT`͊F6s/ +ZX bحŰ2jYYEd*;J?4?p0XQƊM$̦L(mG;6 =1Y"(>T~8yY.5oHIS <"1e:ZG΄8YEϏ]'2ʉםGB2rI<:?ٟ-I7qlTL!fuOTŊtmHzs{%3"p`&Ta)騉2%ﻄ\y)[ I]VdH"1NIl{E}Wp' ׮|})&j%vp=:9iW0}>;TE + 6BJAKU؋et ❅5^E]`}f/[X~ysyw ך~ Qg,Io+~ kL8Cݺ& 8P": # V!#}tA2'FYLp 1ZA-<йjQE'&(\t7!˝xHrA̡g;wIc:c.#ΖbP2p]}(myy~oʢ/Dx1qhbn ՗ oPydH J- %Ű7|";1~>/nlHwU@9DC): U<:o얍PE(U*.4/rY&wO@b" ;䁞Psp{zBho%J2S)Ǽ}־ wߥ4{7 \⃗,O6#B^Qdd`#m}ʼKvk`_e# {f߱j8uAIMB<ě)rӫ~ ^Vǫ#39̜1X,(_P.;&3K0Yu>r).B CuFc1쾆),_?oߓWx0/gWǺGEY(g}td.QH:`6-9MWEFaw)]~j5d cP-|D]чH`U(ob;e-'-4vAvfmIS69SAKmK|fuź 0wӂ cȧ쇶OKcҶS35H9pjAOoqx,m9.`ZEӮgOyB4X0H6 2˦a6 .6qus xz0X^P{pX_ :yUj[(8aFieփlk -Ă4Y u2_> `&Rh8P_lC-i h>J6qԴؑw#D+׶5g(L.Vm!.pG_+ڶ՗˳Ql lrB!\l>{lq2Uk[SƉ$\b\Qn`9:h)*uYNe}lqip>ݴ qu~&/Ilgb&f>4{sF@4ꃇYSlk]-DށU: p+ܯtȚX?XPou10J:JU1rwBFcXSl{ ʶAtOQC$w@Ya0`?3[ endstream endobj 1497 0 obj << /Type /Page /Contents 1498 0 R /Resources 1496 0 R /MediaBox [0 0 595.276 841.89] /Parent 1484 0 R >> endobj 1499 0 obj << /D [1497 0 R /XYZ 81 757.935 null] >> endobj 472 0 obj << /D [1497 0 R /XYZ 81 699.141 null] >> endobj 1500 0 obj << /D [1497 0 R /XYZ 81 677.662 null] >> endobj 473 0 obj << /D [1497 0 R /XYZ 81 591.767 null] >> endobj 1501 0 obj << /D [1497 0 R /XYZ 81 572.596 null] >> endobj 474 0 obj << /D [1497 0 R /XYZ 81 488.964 null] >> endobj 1502 0 obj << /D [1497 0 R /XYZ 81 467.585 null] >> endobj 475 0 obj << /D [1497 0 R /XYZ 81 381.744 null] >> endobj 1503 0 obj << /D [1497 0 R /XYZ 81 362.573 null] >> endobj 1496 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F14 33 0 R /F46 35 0 R /F15 750 0 R /F88 758 0 R /F64 765 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1506 0 obj << /Length 1931 /Filter /FlateDecode >> stream xZYo"G~ 6`E$g[RdqVQXHOp0lCg<}U]GG7g?=]\s)D#(#UB)5n~orܸl*z 6YO*MLl3O_gnqD"M1&RD#Y89q}0bFG_Җۚ #Dvk #(EXlf[@ L|O`#-o7ߦ %Hcr: HP eKay<4﻾7WG\rU4шY<`͒^_NjYrΊ_$j[S$I3Z"s3 ^q ri] #)hLqDY G)F5"jؿ+؟+..aA@? f)#f12Y-`Y]75'AS8=Ja߬)o.aZራ\SIh9dgh;š%"WY{Cw pnB^Hbb5ϒe%~$)aqsu(D\`$z\%qQXJwdB- G@(2`8zƤ~YQ`lV  "O>ߜE6h7M04Fl X-gYb?Սj~W,|4 _\BGm O,mF𺶓GmIbDp6@0UHXbbk&g&&Atm7(e63gji0fQx7D_EI,S!E!6MfӬ6BM쮂,x"!ֲ6V\RuP M+PA8k|'q՜R(Y,xt40aN8{i'xvtX 5VA!N6/֔JD UH"%؈`mh%~ '/Z`A Pc` ,MX$^ɫz+H)^@l#bd[ rʼn>6 !8lSO/3+/M)^:u1l٪ LB(yR*q )%߃"giA4vԎ@XS| C -7H ^w7(&$c,).޳F4HƔ%ڸ'^z4)}[ _t.?!0H R&:HSx:XƋۑK9Byk;H7zW#$8.hx|x޲-;oH.+F @j֠EMm0]0F龛M RUJ7R7>"ÆQ Iሤ\ժ B 8hF]-%͑VoVt +5yx\q7N~ T!#Qcz~rdOيe>lT74H 1FRq_̛+3# c"*tdȺe[rmU._VjwL̛+. )~R0%tJ5V|=b5/)oekHHĴ_)D ܝ3^ާNUQŵM]I\xv8& HʭH1,aAE QT-eaTɼX+sDH\2!|70NcO)Ý0 ̷eOO> endobj 1507 0 obj << /D [1505 0 R /XYZ 81 757.935 null] >> endobj 476 0 obj << /D [1505 0 R /XYZ 81 507.858 null] >> endobj 1508 0 obj << /D [1505 0 R /XYZ 81 484.114 null] >> endobj 1504 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F64 765 0 R /F15 750 0 R /F46 35 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1511 0 obj << /Length 2427 /Filter /FlateDecode >> stream x[ko_1'*\&պ?-@#I^Kp"aD{ιw8sۋ_.p)D#SD5FH 8q窫p珮z 6EO*L] 5!A}N9LF}&%B/9:cg&߆"IIWy)NYE{H9.:p8SFXaeɁܾ Ʈ#60xZpV>_NiHHpqɛ:Y[J g"b(P`&] 1]Wn)ֹJ}I'&3ۆDsDHGj'iqJmR=ką}s6_/7ڙ? W];.Eo6"Xm옼QÐ[2/zZŵ$RE r 8⚁'wic:T/Ņp:Yγ6WDh- 8,+Q%(nR#iwIB?Bח$K+S6>ĉ@\KW\adl%1zU bouY> g[ AƐ0h4R^W!twbMk7H\FVd_ץ;`u:~Ak6WZe"*!b@֚|OZƕ7+~V8GGzu־qh|=&^xutF٬6xwl0bB,^'ه8ȖduҺg ;[Q=3ݦHf@R6<ʋUef2yNR[TZ\ve\X;ˤl)T8Bb_/c|+1ɖ9s]R'0FE YDBY?F_(Sȸ2w^62t) DNoqn3+MLm:%ƀ8Ȁ19g[5_{ ެx4Z+2^o76b_]Jk,Pψ `uOZm{!a%b se-C.!}|sq5"4@I'h^v'{[`Paf(8Ow=ت6EE1^I)t0Z@HlqF:0OGi\>V1as r#!C}hzHphH"X\kĸpB#mV#J|qЯ|BpӅ Is3GQ$M>" m6,:A/Yg(/ s|Y^OF˦ m{ !r̰01$)m=лfL{lP 7V.ȑFq1Fi'UnӼҳz{gFp(e BTgO&H?/Xu^gl2Yn_]v鲚̒`RPh WճE>`R È2Xǹ,VH7E$ab^3\p '0@e5k<x>;Q o\L@mF =c$s/>xv9# 1-pf_tQd/oX"{|h7P A+/[QmwA94S!h} r&?]j\v ÝDŽ"`vˇUQio?r, iaܙQt [Ff endstream endobj 1510 0 obj << /Type /Page /Contents 1511 0 R /Resources 1509 0 R /MediaBox [0 0 595.276 841.89] /Parent 1484 0 R >> endobj 1512 0 obj << /D [1510 0 R /XYZ 81 757.935 null] >> endobj 477 0 obj << /D [1510 0 R /XYZ 81 733.028 null] >> endobj 1513 0 obj << /D [1510 0 R /XYZ 81 712.273 null] >> endobj 1509 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F14 33 0 R /F64 765 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1517 0 obj << /Length 2535 /Filter /FlateDecode >> stream xZ[s۸~ԑAd;;&uCKD&DX2kMwn8?5gBD1.bĹ P(b"]wsTz\uͰ{-Z td[N9G1}bp&Oj<(m1A!!#;m& 4!7 m:O stS=^O)*eԻp)cHE 3T@+ \|=BQ>śf >y;l A2RqL'z=NpĹ}\ ʗ@\ 5{9TBqbvRoF,yw "B>f#"w,Tu$i%y%&賘;Lru{3D'.볻{,'H+RH1׳_lr j1-C( Q 3]}כU_A(R'KYӈE$w(lQob # Z:e:W7i]OQpC9cX) G{zrvcHIN3[ˏ>ܛhڇ8IвNN=UƳ ܟ?6?j(K}P\4:qŝ}!9:>k.DP-XYBӨSsbSeVߚ\afnp}A~>IP;x `e0\@EHD=`?E26u]fpb'% {?SWރ-O 'SIL3=CwCv3>F]ː'R*.#Ņ jB'!y6p1k=qa_c%Eu-ү?%wD5g_TR!Oc =sK]Znca.`x}—k Q9~58Zx64W\TٮBk.]UzjXyjXx.T.=!-<\<=qΎl "uu*B[4eBۿ9Sv3Wڵ28|.2^~h>64tU0P+5BAX\eI!)z2QFɨU[ݕt]iJ3QE8ru %kLЫ3bcy/& X}x։%H{RݳRGU\5a\(f,Y M= N^e@(? pՌ2"Y.y-m6VulMVMaFBU 搱F: @=YtEKLR`p}n"Oܴ,w]4 cf c/jN6-L[ŅRɤDWsTӺy3mFW:QaIc>yRvxH\#c+ YKme~^|@tjb٣qw^4B:2IQ 5t]x*DE.AL {^sh/7:76^9m7Qd޻X-6|lj9X\6o:K#rn L{qrz'Xyy;ۀԄJ!/m mk/Q3V) d6 뙜A/Pdz' Sv endstream endobj 1516 0 obj << /Type /Page /Contents 1517 0 R /Resources 1515 0 R /MediaBox [0 0 595.276 841.89] /Parent 1522 0 R /Annots [ 1514 0 R ] >> endobj 1514 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [347.808 203.048 371.619 214.842] /Subtype /Link /A << /S /GoTo /D (subsection.5.6.1) >> >> endobj 1518 0 obj << /D [1516 0 R /XYZ 81 757.935 null] >> endobj 478 0 obj << /D [1516 0 R /XYZ 81 733.028 null] >> endobj 1519 0 obj << /D [1516 0 R /XYZ 81 712.273 null] >> endobj 479 0 obj << /D [1516 0 R /XYZ 81 336.111 null] >> endobj 1520 0 obj << /D [1516 0 R /XYZ 81 314.578 null] >> endobj 480 0 obj << /D [1516 0 R /XYZ 81 188.09 null] >> endobj 1521 0 obj << /D [1516 0 R /XYZ 81 168.919 null] >> endobj 1515 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F64 765 0 R /F15 750 0 R /F46 35 0 R /F14 33 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1526 0 obj << /Length 2692 /Filter /FlateDecode >> stream x[[s۸~`"m$2L{6COؔr$ٱ}"J2c}I ps.ϗGN8"rQ*RB!Dty]Np}mϮ/{wO 6I*͟!QG/SHHQGp#ft=5QH 8FIddT:iRqE4W(%ŏ,]c"E {E=Y5&٨?!S#- zNwßCAph߿YBh-ABi4p2|B pFAj-O|N"̅ڂt1ϧl>KEYx'ZKSBl#6xϲd,fiI ضXA NJ <[Wz/rPB =Jk9B(Ln4*7df)ٞ-.8prkyCȔ!κUSoErc8 ,w6ctw_dPQwrkŝ?3gǬ[xʞ=lPpni4.cBAESPCuZ@ A!zފk7軍^VH(\a` םE8j9+$qi#kpr^:Dw\DF~LFO1^R~ x~ >Y.'揬YvkCؒ!)LsC~~@3 >q5ot+F2?%;̧߾)2$w\ ?=k.(.bsuͳ-AF{ഖ%%IsI SSKAxHs}kaCPV WP' DPPS)Tĕd6 I|  BqŽ )Xz*uDgYф aT'}=UHWR=ƎJHa4%LEݔ5j;,'&T˯>,ڃ "$²sB7+!go3 Y8S[f^6vI'F_ú5P!"":+=b^3b`:P>fU-0E m-fkDy7a+c[ ŒDtbzgyJݙwjK=Ob7Q'LD>H!6|Xodugӂ4ZTC /@G$AsERRx Pv.`^TFcvc9LP l0d\!\Pq5j +MSI!R0{SZ>eb|r/fuݨ`}lB^ 6*}"UCBZՆy}hSH#*U&kYEWFmlm1/0-Nl>T)قZs)ӹ*PIղ4Ѝ* i5uHȺ=&ABMAC Į?~%;,'&_M-؝/W $E,^ <$MNJn]Iƚ!I+y@-*]' Tl8y;ҍ2Wnww^aleh9xpA^iM 7 3o2S62 h]kkLo@8C=(CFISV"sn3F`i;shm0B `67|ދн]ΖCJZ/Qֲ/i]`C)(V9*N! Mɰ \F+cca endstream endobj 1525 0 obj << /Type /Page /Contents 1526 0 R /Resources 1524 0 R /MediaBox [0 0 595.276 841.89] /Parent 1522 0 R /Annots [ 1523 0 R ] >> endobj 1523 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [276.853 113.305 301.886 122.978] /Subtype /Link /A << /S /GoTo /D (cite.St93) >> >> endobj 1527 0 obj << /D [1525 0 R /XYZ 81 757.935 null] >> endobj 481 0 obj << /D [1525 0 R /XYZ 81 293.263 null] >> endobj 1528 0 obj << /D [1525 0 R /XYZ 81 271.73 null] >> endobj 1524 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F80 766 0 R /F46 35 0 R /F15 750 0 R /F88 758 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1534 0 obj << /Length 2707 /Filter /FlateDecode >> stream xڭZKs8WpsYV SĎ]3x^hPbk~vAZ9l4x;w._r<'`"s}Ȑ3'<\Ϝ#wغs!8xD#f"@#F#nr&,p&fC: ʹǴLvv2ΈS]49(,$_z 3Z1Ojg"j-C|E-'SWpU=g}2þRnj9 f -B2kvV& f0џGN(Az8 ;yQ<#"'s> lXKc?m/YҟHXzSu&f`.ܑ,pܖ;"%|P o[kXK;"j}ח օIaC齧kCt1mH;wƾpT a< R[yty|>͓KS&W\NG=vMV |KK^#x2dj)GQ>ϳtyfUz3 !F8nYg ߰㰆==pa ERrOn=M1qjwm%ی˴,6ɫu0iZ. $)̓YVt|,cϥ)MհiInMB UqcM;+wh>e*_5u'%VL7 ΪLݏ\e݃Xh+fݡyx\7Wr8Ґ,@s۾aȧ6 wfUnR_IYKbBja 6{KCHsmH?W #BqdijxMGlEUD:/T6slvS! Z:$Tz ԣېAڜ7h;j'j݈;0,C뀭m9z(Z3H@b<4MYo[ McIi"&ߤPFײk3icR"4XD_ t˔loۋ9ҪjZ",1f7gJɮ69yk\ooN>v0B=U[Y{=:WfaPiw(e`k5lzMFggcb<1vZ ط$IУ݀򞣅lT[v*"Kq[l6nHAQDX9(d[ )#6H endstream endobj 1533 0 obj << /Type /Page /Contents 1534 0 R /Resources 1532 0 R /MediaBox [0 0 595.276 841.89] /Parent 1522 0 R /Annots [ 1530 0 R 1531 0 R ] >> endobj 1530 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.734 417.869 206.545 429.663] /Subtype /Link /A << /S /GoTo /D (subsection.5.6.1) >> >> endobj 1531 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [83.636 333.025 112.29 342.61] /Subtype /Link /A << /S /GoTo /D (cite.Gallager.1962) >> >> endobj 1535 0 obj << /D [1533 0 R /XYZ 81 757.935 null] >> endobj 482 0 obj << /D [1533 0 R /XYZ 81 401.683 null] >> endobj 1536 0 obj << /D [1533 0 R /XYZ 81 371.902 null] >> endobj 1532 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F85 743 0 R /F29 17 0 R /F14 33 0 R /F15 750 0 R /F46 35 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1541 0 obj << /Length 2831 /Filter /FlateDecode >> stream xr۸_GiBp!";Lt'ӡ$f,Zm=%;Mgv6!<7;@':ysWh´`ǔDhrrLmgN>qWP䒰\ W]Pj2F $rqodS\]sU˫ԍ;?XeeUdC;7v"-p̚zoi{tn2;6٭ܠg\NJd ؙ3Add EZe/3&񈪬p}Rd|y.6~'Rn&#%Gι&\ĸ!pG-cWN??oR:~uJ{ bsuW pD}nA)Tw>t@G*(@\lyBXX\YȚ:8%QE#!P_Nln 5T4@|uXV d %t)u>ׄ Q/pD2WkI!$ r;,$'"E[=l CRf%>.7͢Vr\L E-bd힋Mþ%3}ޤ.ij3 j۫t&lʟ摈_1bF?Xʊk&(`]ډ=e :-W{T(epi7!۠DFwI9p|q- ~c90DBzv:ųG/YdtJq)9Ys¥xEPOkcn(IumX)xˀ@1k!j̿oY((XDM&t҉̈́Ƃh TL:dYI$7띎}ܠoAY2an=Qw![ 'A@m6shJ)1\PHӝ.[WMx/̳Wn,< "gY%EUǕy\< jPT*R2 ө Fc::d=RU?Upc"U%W#hb;%dæn.C}Ʃ̇[-H?!D3~R75䋺(Ahƫsƪȶe0g""$ ;*d(eX:Dύjұ{PsM_⿠&3Md tźh0!QXL=+#1Eukr9CV+pMP$uzPaQ"|9Lugj_&9*aXTi:"9 -2-/=;OW^lu8$bz5nړBt`519GƭsX<$W n1 0Hٰmnb Jm0]IɦSS>>n4?2q +;9:iFRM۱ ?VY<^ w eφ眳~.hPN}i{XrH1oW-03o5t!]s/?eԝa94Ϻ'm,yG?PI1LLOCjP-zƦEC;H 4V79jl>g yD\H2ʶӥLFDŽgiewHo՛'6AG b}Bh}ؙnb,9pS\ lS ?m{ӕ=_aaD_6N? qNX@ >2f~iq”>S<0v<ʞ{qߓGNF6Sh mX3\0Py$ ?Þnڦr&+?**HF>s8B.8 a>ŇDiGfma_ 4WE,;Iŏ^vA5*IBt 9Yn/n> ށ'ǃ]m7^ ɃRP%Js"AY٥sCHvϿ qev Kt^Bsul,r +tSd[?cB8@I [¯lJnec6 Gu9x$/ _$D)lwB/i~1}OFo%]="cM} F1lkW/3[M`^Q~9Rc;⡆ j eF-d_G='ŕA|$cəΏ_~lC4` fn 0CIxAP DV(/d-v>,/ñfMj4fUu1hYs7]ƗI¨_?KD?npI=Q> endobj 1538 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [261.813 135.016 295.278 144.601] /Subtype /Link /A << /S /GoTo /D (cite.TSSFC04) >> >> endobj 1542 0 obj << /D [1540 0 R /XYZ 81 757.935 null] >> endobj 483 0 obj << /D [1540 0 R /XYZ 81 690.314 null] >> endobj 1543 0 obj << /D [1540 0 R /XYZ 81 668.931 null] >> endobj 1539 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F15 750 0 R /F46 35 0 R /F88 758 0 R /F14 33 0 R /F80 766 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1547 0 obj << /Length 1595 /Filter /FlateDecode >> stream x͚[o6)%S/:K:=dyPm9IleRNFviҒ(9W$(<`4%h1H.AS&埧 >SG^\Fږ$潫2rz;|`E Nu"h2.W({TdzhƠ9O?lH4hADỲ3*B m}~:=˼hv?jQ#N0( DFQeb̬+,m~\M23wKZ™M X|v5"-lylD+LlVk_jY:42>VM9yi~I%)Gin{tծ].CmrY.*Eq6ڟuZ~۬6GD D SkVS.:ɲ'X|gr+wteʛqX\W Q۲)Z3˛MN2_\^Ns'WxQiKi0f?&dT΀.ڈ`r-+k QZ*ʵoM:肃 &3aZyGNgd `)> u+ q ~^lщ]r$azE'> ^`F3mf4}Lf,T13QV7xٗY6~mQ…t~5yXhznz«0-bqhD/OBU?`>-Ep@ 5ؐ.ب=#K! jfS< %!@p}*>n(QsB;3y8^nкj6s8Hs[?ךH4̓ŁlY|ny~6:n_s}^5Ǵ'm6c CL4-VeMLo.p{ἕ>}XOYGm++" DôjԼIWM-x?`@M#2^}R1,)b 43((1 _s90Q9`z f؏/Xb\G9`ƿ&t;b 5o< Cb)B5rH57HMҭ菑1 S$aTI9D0XЌܤbAq8 V4#7u  PP`ED㸨:10ccqhn:ΡJ53sݢ[W٦i^œtݷl2k񘑙sJqR^}筼s#좮˺jfC:;+P# s?Ե4 0){'g狯,Mj쮣R286=e^qvOm+]Yݹ͔oE;6-nj}N.wڹ w?` S8) ~Ő G /X 3g/Eٍޟs4bFEkD گ[gP."P_:c}ޖvFK endstream endobj 1546 0 obj << /Type /Page /Contents 1547 0 R /Resources 1545 0 R /MediaBox [0 0 595.276 841.89] /Parent 1522 0 R >> endobj 1548 0 obj << /D [1546 0 R /XYZ 81 757.935 null] >> endobj 1545 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1575 0 obj << /Length 2478 /Filter /FlateDecode >> stream xڭZKs6W(U H [U3Ljwk{gIBR8~hWAF`YOwg XH☉nHQBx4\.1pO|0? j #ȄZap)")GzEެt $zYFևkN$B Ij:4<*{O21yBTzM1kpnI`A+5oNpqߦc<"R_lj5%yq@gvJMn܏vw͖Oc$\PND+(]g0)>=c?k|[J5J#a|m*Lfn}+F7o ilzƧ~QjCB⑕[C,l3e ȵe(g񐣰EœloqΒI妨llp0,qɦq[N/aaȪO zh9C %k8ؓ-yK*3kVi Mܒ4b/шN%2(];2Ï[B/A lNa dfښCB":(d'X2fmM$֬u8g`Mz e2f/q󹶋 $uT pB1#:=9rȱ2T#0:#imQ6~j.W&ҧO?McS㓿 =$aM;sR6ALeIGиԵΜӈ!:cC"F8U^P*S8oAUZ 3\؋2ZA'F'C/mxrYugTHN{qk3j(s *" Vq 9Z r8&tNcryK#mf}۬wYr)q-ZddWmd;ѭC?>P]сXE0})VغGsy{p1@ξKdN82o*z׺a*ފ%*8YBB%_ : /$g:Ü-'D ̢&ˍ_;&ĶWLY5d4KuU-7͟. C]bSO"`&$ta֞ziYG0~fyi8eͻJ/JM[++ {'Goacb5)RެǙLUz>[mlٗ8ڴtݖ B'Ő5RCQKgŬ2{s8QazlE$0-rEɶCuVԣ΍'8:|qR>ƶQyVdƻs[B̴U.j}?o+XtK%ş#(_P9,⏞U* TiT%텱]ŢEjP|"tvuw 8?(pY~v- RS"𓛕KH­[g_!`_so4q!57VwV,xCpbP  Q"zD(Iȏ !n*BaD`^ W[O:Xt'\11슡k_$L)w_e#.t `׾d裩vYs/Bc'[ b kߣh@ʑ endstream endobj 1574 0 obj << /Type /Page /Contents 1575 0 R /Resources 1573 0 R /MediaBox [0 0 595.276 841.89] /Parent 1522 0 R /Annots [ 1549 0 R 1550 0 R 1551 0 R 1552 0 R 1553 0 R 1554 0 R 1555 0 R 1556 0 R 1557 0 R 1558 0 R 1559 0 R 1560 0 R 1561 0 R 1562 0 R 1563 0 R 1564 0 R 1565 0 R 1566 0 R 1567 0 R 1568 0 R 1569 0 R 1570 0 R 1571 0 R 1572 0 R ] >> endobj 1549 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.853 418.836 165.482 430.63] /Subtype /Link /A << /S /GoTo /D (section.6.1) >> >> endobj 1550 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [377.009 405.286 400.82 417.081] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.1) >> >> endobj 1551 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [492.826 405.286 516.636 417.081] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.2) >> >> endobj 1552 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.559 392.163 207.369 403.531] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.3) >> >> endobj 1553 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [293.468 392.163 317.279 403.531] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.4) >> >> endobj 1554 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [414.504 392.163 438.315 403.531] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.5) >> >> endobj 1555 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 378.613 107.447 389.982] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.6) >> >> endobj 1556 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [234.869 378.613 258.68 389.982] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.7) >> >> endobj 1557 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [374.975 378.613 398.785 389.982] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.8) >> >> endobj 1558 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [492.826 378.613 516.636 389.982] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.9) >> >> endobj 1559 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [169.389 365.064 198.654 376.433] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.10) >> >> endobj 1560 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [284.862 365.064 314.127 376.433] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.12) >> >> endobj 1561 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [433.716 365.064 462.982 376.433] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.13) >> >> endobj 1562 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 351.515 112.902 362.884] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.14) >> >> endobj 1563 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [233.632 351.515 262.897 362.884] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.15) >> >> endobj 1564 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [394.755 351.515 424.02 362.884] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.18) >> >> endobj 1565 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 337.54 112.902 349.335] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.19) >> >> endobj 1566 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [199.996 337.54 229.261 349.335] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.17) >> >> endobj 1567 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [300.936 337.54 316.564 349.335] /Subtype /Link /A << /S /GoTo /D (section.6.2) >> >> endobj 1568 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [281.86 324.417 305.671 335.785] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.1) >> >> endobj 1569 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.525 324.417 383.336 335.785] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.2) >> >> endobj 1570 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [492.826 324.417 516.636 335.785] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.3) >> >> endobj 1571 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [175.381 310.867 199.192 322.236] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.4) >> >> endobj 1572 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [278.472 310.867 302.282 322.236] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.5) >> >> endobj 1576 0 obj << /D [1574 0 R /XYZ 81 757.935 null] >> endobj 484 0 obj << /D [1574 0 R /XYZ 81 733.028 null] >> endobj 1577 0 obj << /D [1574 0 R /XYZ 81 552.642 null] >> endobj 485 0 obj << /D [1574 0 R /XYZ 81 294.682 null] >> endobj 1578 0 obj << /D [1574 0 R /XYZ 81 267.129 null] >> endobj 486 0 obj << /D [1574 0 R /XYZ 81 267.129 null] >> endobj 1579 0 obj << /D [1574 0 R /XYZ 81 245.862 null] >> endobj 1573 0 obj << /Font << /F29 17 0 R /F31 18 0 R /F44 32 0 R /F36 19 0 R /F61 742 0 R /F85 743 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1585 0 obj << /Length 2567 /Filter /FlateDecode >> stream xڽIo_A &/-R H<@6Z%Hɒ-`pf4˷2n},R(Fۇj8W &E= 'ڎn N 6$h3 >^"04AĘHf|sG #ftvnn: #(EX2L_S{JE.a_X!qP +b%T]c=!cxY&[?|Ҁ#x OiTxJ~)?e:ͫ'HwuYx>BCh$稜j;_02TQ5+;LP*]k] \fUe9Tl1ld)|FJa=8 _?wGhw6Cq, 8tLc{9_cχy6HyFLv_MB@?zrdg;-(0#'zGUfOZt+!~F Ra#ihWjO4hPSEDC!iG]DZ+)ߡ9VV)3:)+4/ֻMnŎ8~yٟrn]!aXxQ{Qa{m~8'ລܓ{!]U{x'i;3ZWƏd Y F<h7l$/o>H4)pteV7Ymv?Y@|inxs6%xA"ajU:㢛$>,lFˎ=|Ϋר8> Nv7"DːK^C`䘎)%ړCh`ifӻfi Y\q-j#g`p<*yc = DLQut/JW.2Z,1?@P~8 ^J*i_j)g`Z}MXMu&,q+y06ϸm),|Hxo$>E}#S6Vf)Pq~j[j܀O4`F H^`)# Km{Yz !bۮ7= RyFYpAgiA*/u?}x…Zg3xQUs;yZ۰VR`PY:Rmjd]ܹ 0 o-lLx "ۤyi i=|<ƻ73LK4Qlv|ABj2_ 3#y:QPW<=Hԙ\x+j C H~J JC_o{a\&>! ""!PW*;JE;h(v J(Q> endobj 1580 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [404.726 603.246 428.537 615.04] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.2) >> >> endobj 1581 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [301.166 589.697 324.977 601.491] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.3) >> >> endobj 1582 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [344.412 213.894 368.223 225.688] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.1) >> >> endobj 1586 0 obj << /D [1584 0 R /XYZ 81 757.935 null] >> endobj 487 0 obj << /D [1584 0 R /XYZ 81 561.304 null] >> endobj 1587 0 obj << /D [1584 0 R /XYZ 81 542.134 null] >> endobj 488 0 obj << /D [1584 0 R /XYZ 81 187.738 null] >> endobj 1588 0 obj << /D [1584 0 R /XYZ 81 164.119 null] >> endobj 1583 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1595 0 obj << /Length 2678 /Filter /FlateDecode >> stream xZYs~ׯ#YE>VyU-⬔DB2ж}zQ `==ݍS7߼zYQDq"%2LD?OLsݗ^7F&ht;`;VќS$ќ e2Ω8[z\6r('?g KȰj>2i%dH QUI ]IZ=yJ$MǷsY*X~MdJI?k݃&LM@k|QsVќ0$9Hz=I>n 3-,SgʹHVzxB2$590Ӏ>) 2I긂;pua[C I?%M+!k`?Sc_j}h⧩i-,*] G>$`fnG`ZUONDgM 6!iю|:XZ78O*vy/k]hS8fI˳dMmmMؔK ǁzۍ} G$)%EX|%aX:f#bRYEw7 ؅(}6Ð"#X{~o-W %#b OEC 1D%1$B| BÝK!sxt.o鵿dr~uו ѯm 虿p}>c~7?w V#5X.T V@âj 16i|O¤*.*.Wz]BZ |Lro7&/e{a އ0y VČ W8Wycs9_p=`c 'WO0dQ ܑԳ/',rGkaౖc0 {,[et 32 K ,sY{,}&~!{^M2# ֩ k+HhDSosN:X#D`&TyXddyN=e Zgپa!C֬~l.i°K~adA [3'S'O_7"͞#eN"݄z#ݪ Ic4Lj:Wnk- T!DS;xaD9_Xʱ&$u-$m" P/%+,g]t' nw^ZD'xN ".eWp}jݗEQ[p R5io᪐QMbآ޲.[-u?d0RVE]-z + V+GU!"Ej_y3X_:['PlU*Po H1\>Z'72-ImׂqZWm>T[ګ-kݺvA!;kbtbsŎֳi"<),%,̐x3O l9J'iɰNyRVOǼ D0Zm$rI9t7fdΤX+-u|;%(4 :Btz=5W硶eZ@#Cb Y'i'ܬ7_<T۞n>!X`uΪd?>4ڜ q 0sʠ=x }X0;M59n3M$LkD1& D%$”RAFsMO6g,ކ+FrώTH31S_0jj5,fWS" @ҎжtQn-zЅ6-18g0Z_e*ɋ:uaq:w009q΃*D$4F&X3?BUjڕW"FkDp*KCQg[&mss)Tb']9S֍SRN͌:,2#l%k:,~mSQO5w2d[amE.vWsGqE@/݇lÃ)$f=%FTsq`i A}E!pe;e\{'HR+Hh8v?nqZ"}sS hn\S7'TnL78,I ζ} ޷zN픉TB7R HA'@6QW|v$bSXn; d'\WiQS%EBuRζwEzH*}*؅`_90L@)5 Sٟ&7`?T,4J4s)&/`q\elS>Y \7nUOA҃OAn=ą_i9ytGx6YY"Ͻ ]!sN.I2ph޴zo0!D*Sw 9vT'iTzon]%Jy؈Rnm2)Ϊ]t~6r<83ZS/8W<)l+\{a%j c endstream endobj 1594 0 obj << /Type /Page /Contents 1595 0 R /Resources 1593 0 R /MediaBox [0 0 595.276 841.89] /Parent 1589 0 R /Annots [ 1590 0 R 1591 0 R 1592 0 R ] >> endobj 1590 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [173.418 534.658 197.228 546.026] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.1) >> >> endobj 1591 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [252.638 415.671 276.449 427.465] /Subtype /Link /A << /S /GoTo /D (subsection.4.4.3) >> >> endobj 1592 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [153.127 402.548 176.938 413.916] /Subtype /Link /A << /S /GoTo /D (subsection.4.4.1) >> >> endobj 1596 0 obj << /D [1594 0 R /XYZ 81 757.935 null] >> endobj 489 0 obj << /D [1594 0 R /XYZ 81 519.7 null] >> endobj 1597 0 obj << /D [1594 0 R /XYZ 81 500.103 null] >> endobj 490 0 obj << /D [1594 0 R /XYZ 81 225.398 null] >> endobj 1598 0 obj << /D [1594 0 R /XYZ 81 201.653 null] >> endobj 1593 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F46 35 0 R /F15 750 0 R /F14 33 0 R /F85 743 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1604 0 obj << /Length 2499 /Filter /FlateDecode >> stream xڽZ[o~ϯ`sxH.4MLy+Q[2PlɎ EQH' O>a`$$)ed\Oo|)| _ŒM \.L/# cz=p(fn9Ef!XzQ$'-w[1 kvYgKtƒ1u2qPsgG8MeL0*ujâ e"`qLq0/-&C8)o#zm+ޚw'[j7G_)+vjBOkXZ\?V ~SyOj4-8^k<#4&Ťrz{p5]@_,E響cB$"i%\P/%}&u\q)aYMy23~ϧ|]2pDjR9ĜD5Rq䱱hi0.Y>$?ᷚ3;u< qq|kźb))ts݋_%L@SD0n(aobD84|J)#rM[ ;2@#xa-r ;q`+_ٴ9ݘPO.p5LߠE}4 bUai[T3HT0F`֟z,V]bյ=]tS[ٳ{ѮA2u蘱d‹jMtoH* 1Nv0s f>u1ì. E8QlĔ"QiIBi(Q"_f/qaI;Xu5/ یlUWd$ōWOLE}i ֠9ȣ@:BIH95aR 0|'l_fƲ2Ϧ/4<+hš|NAz/QHÏl$Ks|&+"VR<Z3%>LYAɣ,/#3;q5Y1#>}-Sh;^iihڰ(LrP)$ۅw<Sx2yDz+B &Dc}VU^Giėb +B n)ٚal>^n#9`5ê>>>|3}-˯CQ/~e[Y"apW氻1~cH X,\{>cߛ/pQ1#-u[2>ݸ4iomf #7nд]KOyKHy*K`H!GURr ko}ڈc"e NݕaLmq_z?l'9m_m9 ޲{ K_s%v) :gw]g`A}7݂:;@|ܑK'*Er<ǁzuM!\G)X /$fQH&r_&:RH&s臏 $;nLb ׯ&kW0꤫#3e endstream endobj 1603 0 obj << /Type /Page /Contents 1604 0 R /Resources 1602 0 R /MediaBox [0 0 595.276 841.89] /Parent 1589 0 R /Annots [ 1599 0 R 1600 0 R 1601 0 R ] >> endobj 1599 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [320.264 589.595 344.075 601.389] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.7) >> >> endobj 1600 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [373.805 576.046 397.616 587.84] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.3) >> >> endobj 1601 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [225.781 164.856 249.591 176.225] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.8) >> >> endobj 1605 0 obj << /D [1603 0 R /XYZ 81 757.935 null] >> endobj 491 0 obj << /D [1603 0 R /XYZ 81 561.088 null] >> endobj 1606 0 obj << /D [1603 0 R /XYZ 81 539.705 null] >> endobj 492 0 obj << /D [1603 0 R /XYZ 81 149.898 null] >> endobj 1607 0 obj << /D [1603 0 R /XYZ 81 130.302 null] >> endobj 1602 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1614 0 obj << /Length 2575 /Filter /FlateDecode >> stream xZݏ۸߿BH_o z@Mr9hmk!Irr_!,KP,.AB&3ÙOsDW!=E/8ajOf2H bFfGOD82A8u):yLM BK 8?oKr=0x4.tnkg27TW~rbЈLPt(B}V`R`4ZF fg\y bb8F_>/KµwY'ZA14ĂSP,KHTLXɏS`Xt,Fǜ(4|zo?%8sREqPbK'͞?2g 2۬M?{Jz Տ֠>=~ %= n{PhqAD=Ykzͯ͊J=mǠч#6"T1Ѭcm&[BN*>~]ރe[(h!f :S !d1l!Z{X{EjO B8(5Zt|s:MK秜q0]h8ם|Z LBrq{_rQS Q4hd8]0K$8'F}8y'?ɮr6Cc<' ?a2U1lLb1_uڮ$Y:bs:1&qP-b]ޔYf4álE+TO?ߤɗQ@i2yM0I 7hIQM=!߶ɲZv<F/I/ j&RkHIHD}}Y*B$h ffb[XOP:voqU^ v^gLjF2.e} sIQx{k5naHgP2 Τu ?g@~*~Ǥ=W\6 9/ɶUF8^y?'R\jCJ.36>e㜈:|"~onss|-6íGQJfEi>~ppn)+D tA(%LrfBi T#ab IXspU@VFkHk 1P5v3I&p 'Kaƒav|TI"aY0?}x-p P('Bs^WBQΙ[,k\\]@"՚ˀ$ u%Ygpc:x7z\r3' O_ Q|a>:R/(QUb ʍRVA;;V*2ڭ! XpC2z}vt"T΂$+:= '½c^7"Q QkCqk WC/h 7'"VK"F]\E+q32B(x亵aH߃@L>!/=pY)EBS/dbSڥ2f>}a 3!@ItRUa͍$%vzm7\.{E䡋_z/7a!v$p:rϋKI[nWU6 a$'`Q}b ׇ> %ON Ngjkv{"޶@YpI$\3>ӠM4>Mc'O;M'VwrfO zs0oU*3W3}RlOL΋ J|5xϊge3.e&8TTAcB g {).Bu]7gi.RS|f<,_m*k4Ns2@Ta P}Lowfv.VVo%D/'|Ox?YIk92h7٩Z(<8 endstream endobj 1613 0 obj << /Type /Page /Contents 1614 0 R /Resources 1612 0 R /MediaBox [0 0 595.276 841.89] /Parent 1589 0 R /Annots [ 1608 0 R 1609 0 R 1610 0 R 1611 0 R ] >> endobj 1608 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 526.053 107.447 537.421] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.8) >> >> endobj 1609 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.254 512.504 188.065 523.872] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.5) >> >> endobj 1610 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [489.193 255.069 513.004 266.437] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.7) >> >> endobj 1611 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [467.655 241.52 491.465 252.888] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.6) >> >> endobj 1615 0 obj << /D [1613 0 R /XYZ 81 757.935 null] >> endobj 493 0 obj << /D [1613 0 R /XYZ 81 497.559 null] >> endobj 1616 0 obj << /D [1613 0 R /XYZ 81 477.962 null] >> endobj 494 0 obj << /D [1613 0 R /XYZ 81 226.575 null] >> endobj 1617 0 obj << /D [1613 0 R /XYZ 81 206.979 null] >> endobj 1612 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F85 743 0 R /F29 17 0 R /F61 742 0 R /F15 750 0 R /F46 35 0 R /F88 758 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1624 0 obj << /Length 2600 /Filter /FlateDecode >> stream xڭZY۸~_K>T9Sē<#JÊD͒i\(Rg@@}-|% HrLƈs(a"[$rCCۘVE[MAu*dE]Yjb).zW:hGڞ󀶓۔ɶ Y|#b(6:a[꧴W/ Drywۍ NHI"Fqss<ߎ77kbvu_Oc@TS!I$tO7묻+JIGXC EX~iL^D$AJή@2UNp'KI$" /ӹ%ӟ}swOƞ=?uLl/&> ^A[Ip`:/{"fiob>u%,F|)uVE u㢣+`8]J!Gq1gԀ5,8aF:.R *ף a.k :Ue{"HfGo`Luu* )Zap dXt[<aWEk_d˼Q]W떢A 'Hqtݓvtp:p : o?co٥JFFp7w_)v!åJq t ",0TvպtQ;}W}b1->xl8}]*IGbNq&4ai ؜`]8bV 뚰"/Q)Q nsX-u]YJв\Җq)$mzF tvRFQR?|gH:&`[Q$ Bgej q%b mHQwYCmhx,H؄"x<87yusy!&?+l& TLR[Dϭ6n@ֶ􏣙ڇ͖6aeX\OIi՝uz6FÑAIUo[Ӹ]ms+CT *̏\b[lkq c}VVaj(4PZ8Å`œyۻ}C$|CX%FEc'OE%t~pw%?Vf"_*Qkcr0 G7Adsf(8 X}{G_MrWlEZ_S98x"} ] gނi:`֯GJÓyYն]^CGiva[d:cm=yXjtmh:c&[t8eDv+;[jk3(O#l%\,\ue&_3} WӾh}= ƙWb??~Xo[_ QJH{8a?@W8upYqe5 {?OPJ7Y A!D'Eƒ89->>K8/ҺG.]mm-"[:حk{)|Jl2HKƄ}"#ibO5k;aƾ^+Oo#D.MеV맙GXqX%1:;I? 0RrTN{^fR{ yHրh@ BFKʏ8cc_X\ R%4E3NU[WV_uFC$9yͅ+DWA a\]I_QV p;1tNC>=Wfb2Za0z}2޾.9.f)_Ӓ36tHCz? _\sA D b ˪ȣ k0Rhst57'BQ5bi C͉%8,}q[}JpD6kZGCXlA{d endstream endobj 1623 0 obj << /Type /Page /Contents 1624 0 R /Resources 1622 0 R /MediaBox [0 0 595.276 841.89] /Parent 1589 0 R /Annots [ 1618 0 R 1619 0 R 1620 0 R 1621 0 R ] >> endobj 1618 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 364.232 112.902 376.027] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.10) >> >> endobj 1619 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [386.891 272.77 410.702 284.564] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.6) >> >> endobj 1620 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [153.347 245.306 177.157 258.207] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.1) >> >> endobj 1621 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [340.181 137.34 363.992 149.134] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.9) >> >> endobj 1625 0 obj << /D [1623 0 R /XYZ 81 757.935 null] >> endobj 495 0 obj << /D [1623 0 R /XYZ 81 349.274 null] >> endobj 1626 0 obj << /D [1623 0 R /XYZ 81 327.892 null] >> endobj 1622 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F85 743 0 R /F36 19 0 R /F46 35 0 R /F29 17 0 R /F61 742 0 R /F15 750 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1630 0 obj << /Length 2406 /Filter /FlateDecode >> stream xڽZKs8Wr$7v*[L23MD۪HTBQm EhFA_w| #}zs&9D73#-5\F7v?SA'j:Ըo?@ֿ$cQnphf#bd\0AWќKbo)HhǨ~Ut;JzL]AhJONЛFswP]mZQ3s+sn,ϙ&/iI)K9Edv+Y4ȏe_L]v3{cݺjqEUO "v"!;H⛀h'E.9(]dץ*)`4AS$M8f~/'=`֋!0ByPzM$K0lՔDETi`i>Y6IsUԟLxd:0C'4OiaĬKrv;*YeM⵽U'K_˲kzJr_I7+Ƙˆޯ!)F/7W߮E0EJ-6Ww4Zb8&.z}8 Ŕh(cBxu;嘝s]q<EA#F,$b(\"Ty ~z:iA+'%Pwr0p+kCH 1 b3Pa=bZm 4qu8D3_\&<~Mv'բ3&n ֲ8#XGZ}mpjVzKLL6^INKs_Y1VQ&qq5EٱW;xamE?ኵIK8q\n=rё=ՆiV앣쌡[mhQ@۩k^hlR;cPp.9J.Fpʇ+o\ ծic{'aٴ]VAMlct(q0}+mRB粡ʴXH1IqQsN=:Tyxs&- Wڸ(YIX -V ĺиwW@_WM tU?d f.m}p#R-;hm"{Ϯ&Ѥ0hY#S[-ɏ&kݞ"E.oNj'Zv yylKgFy;pnGo"ARLȎAu϶ٲHOR΢+,J[,F]u5T7pn UU@.+$n:g<5.Y@p*,l 'IhN,4pwu:HCrʋ~.dӇlq%29R_"n%AMt^!C[8NSF#.nuD#DCrߺ1&A#s6j04m] 1h5U>iYEHkH$fz' ê0w.O)N3JjX=L;'%Ex-}tCM~jp{1t}wrgwimAU8F6v.8yaԼ4;n-9u8KJ0D@1v ׈Zq< ƒҳqքQ= hC3}'}pLmQmokF0}q0X6`1UrĤ:wыf&f.*"P$^m@k#Ώ!VƬrhl6[lVVOk)Y|ՇG+M+fA3 endstream endobj 1629 0 obj << /Type /Page /Contents 1630 0 R /Resources 1628 0 R /MediaBox [0 0 595.276 841.89] /Parent 1589 0 R /Annots [ 1627 0 R ] >> endobj 1627 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [245.052 119.223 274.317 131.017] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.14) >> >> endobj 1631 0 obj << /D [1629 0 R /XYZ 81 757.935 null] >> endobj 496 0 obj << /D [1629 0 R /XYZ 81 733.028 null] >> endobj 1632 0 obj << /D [1629 0 R /XYZ 81 714.484 null] >> endobj 497 0 obj << /D [1629 0 R /XYZ 81 432.822 null] >> endobj 1633 0 obj << /D [1629 0 R /XYZ 81 411.29 null] >> endobj 498 0 obj << /D [1629 0 R /XYZ 81 198.089 null] >> endobj 1634 0 obj << /D [1629 0 R /XYZ 81 176.557 null] >> endobj 1628 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F14 33 0 R /F15 750 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1637 0 obj << /Length 2666 /Filter /FlateDecode >> stream xZKs8WFBlI<3MGmVdQ_ H!V&߇F 8<{su=gBD1\TcĹ P(d"ZדOqsmn~{ZBږT ChC0ΰ*qʑd21ZzkҢ=]k_>UbE|NI-Gxb-+ jU`?C?qrw۪S9YEy 7S[?qbreǕ,TRDf!Cf]j2>y,y2bllYd(K}~ϿZ|rfʲH<)<׶: aJ} ֐Hk|u"n`:vs+_%JGCh?b i%bS]/6U -Jr.nڤHpO(gC- 3I0o_k549=m3EqjH6y&[;^O-^# Tm㥐pPξp@M)}g78X@oF,cQF!HٿPRi(C(茀qP;޻a2T ]0 {.R!.BPVEa Ő ,w/}zmxv P/X`[N)>P",w: d"ePYLVqkFDNq0$h1 Eμ}ER71Q5`bƎ:A:q6yIzSW >aM،q@3_hA Dp[fګDP@L\e^6M]-6':-&_3M?J#h(@5>d|sU7zg^uWŷr(elP „ QiZC0B}k,UzƗ?oz4/ 1~Җ6MBv,KC!6IATb3P `ct%O@ݴ>8IDC4l/ -hU}v.`uneCK`TMb a3v1\ &4CdDba@gWwdADpBX՜J{Z/U_b ǬDcd?}Qξ7j$y.}  {q:UH#Щ*{2#iQAұ!k!Btq`#w^Eox#fH= ̬שhSg#<` ֈ0=!A:ٮ׃pax tf =&Qc].z8 ɑr'ЗB2ϳhW[6Yoe}Q[7!4Yxl"iRʿI'|tC,Wsж5ֽ15~ fM'DC̲ JY/=.xy\%eŶi'4}^q01ܝ{e÷ HCtY1!BJmֈS$*I!o‘Fw?c!Ln;/Ile>yE.eG,`A3Ku e\iɝTEjJeb%](˜]ZnȪ&Rԣ-Zy !y'lk; Ir)k#m ?4EN(}L{[vƪsj<'5&5be;2Jd&5nf+p e:Vtta8tm[|"+vU*Ѓ$S`_MQEݕ3v oʡ~iJ0U~znZIS~)-HΆ?}D2gAڇS喬-;gS5YN?VCb׮}f얀pyyjՏ1]L;o$8fUVϓu} uYE9DcPű1U M.%ߋLK\l2Ϳ/2p ݌wվb ΆPz Ht5sc 1Tۚ2fKA ̌jit5\ƋuS 6vVt"3JoP%d4Tq`>&3nPޡMn.cDq@%+B.w(ŽʔC'(!>ۮN)sLhcjbmƠA6m]#j'U9%ms&bt`0&-|r '4`s04c4uY<=!8Q=DD|2q"UF?FpMDr(("fs(lTMՔ8̏ wm9d.hR!!FQ#RAQCC%QFґzFs(>jSp[`FOOBfzdŸE$ endstream endobj 1636 0 obj << /Type /Page /Contents 1637 0 R /Resources 1635 0 R /MediaBox [0 0 595.276 841.89] /Parent 1640 0 R >> endobj 1638 0 obj << /D [1636 0 R /XYZ 81 757.935 null] >> endobj 499 0 obj << /D [1636 0 R /XYZ 81 432.931 null] >> endobj 1639 0 obj << /D [1636 0 R /XYZ 81 411.399 null] >> endobj 1635 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F85 743 0 R /F15 750 0 R /F46 35 0 R /F14 33 0 R /F88 758 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1645 0 obj << /Length 2757 /Filter /FlateDecode >> stream xZ[s۸~ܑf'iN3&>-g$Kz}.$t4$!=D8ū+"b$ƈs)PDtngxKg?_jWW0`؏]7i{]0ի+GXj/8H2-@ZJ?J"xڟ/%3SlE0NDlGp@߄Oh:u?lw5ط QA0]> ҳ`)b8'`\K~dο0UXDo7)1d Ho>qv5a,lk͡şt_naVrk#zN#ěW.ٚEz20Y>("-Y@V2|J^mf=N)&3ߗq&`B$wcIަ,7\jBr]:EGIAxL)nzhC6X7a deT\0017a[2,CX\.@BV7Uf"v-`0,y9/Qck=zhjӻsnʔ6!"1"|%P!AT#&*NmwI 85U(pQEf&y0|lSz,l49ⱒ!ir~Oف̥eݷmG[ M/*dB&xVi9 &ew`c* &mkR@g[81횖VcF\UeQ"H[tR[;b|IULl}S [dDޗUn,Zβ<4m&{-wd(VfTZ"٘o*ٞaG@[XluH,YA:r#viKi6p$]':|kܙN3 ;OBA,NOI36i H&(8k< uP$[8_^ y+[p7CmdK0}}$4FB"Iγx*liԸ,@;y+_}a!,@ΑY9Ce5'_B6uee4לf[>P'.^!F:OBL<>'Ob~gf3qRڏB!Z+JMGM 5&=2.^R:1OJw`녅) "7osn*.Ѡ+񁴒l.=WO,֣Y~fBc}p`) 5 nA%ac&> endobj 1641 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [297.862 616.929 327.128 628.297] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.10) >> >> endobj 1642 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [422.485 95.448 438.114 107.242] /Subtype /Link /A << /S /GoTo /D (section.4.2) >> >> endobj 1646 0 obj << /D [1644 0 R /XYZ 81 757.935 null] >> endobj 500 0 obj << /D [1644 0 R /XYZ 81 733.028 null] >> endobj 1647 0 obj << /D [1644 0 R /XYZ 81 714.484 null] >> endobj 551 0 obj << /D [1644 0 R /XYZ 81 451.792 null] >> endobj 1648 0 obj << /D [1644 0 R /XYZ 81 430.259 null] >> endobj 552 0 obj << /D [1644 0 R /XYZ 81 201.413 null] >> endobj 1649 0 obj << /D [1644 0 R /XYZ 81 179.88 null] >> endobj 1643 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F88 758 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1653 0 obj << /Length 2490 /Filter /FlateDecode >> stream xZ[۸~_!llw]@vbmwC6@56g,Ԗ"e(2!ENOco^,R(Fq"%LDwoS' O>m گX]eg]՛_D18Zl0b:vn&"Z!%qveÖK>d#E4/EqL@1&PY`6*^@BTHp+ =Rӹ xo~l6ix//X`67oFwL!1/2'^ujgiNb?^`q d/tLyXZ"_9ӚfAs/8p+ 㒢Xwv}lTu~bwq&bs+Ā1p0 Y+9cV&Aփ<-`11$!w cZVVm^TfY\[%zeoZv6H%*28Ʀ a>dߐrik VeǗ&5?0X3z3`evZcbcd,^Li6&p{m2e|4GodSB> hċ%E$bsҮ)TPA9HžD@7W9rJS)&&}\UP$,ƞ#zV*[)<yc `y8m8d~hpTL7u5ěAv}[PGLui*q($٢J)FjEo0g/QN_iy0zb a{ Hrw/nVI(fﭒԆt,]sb!כ}A31[9Ds&愹Rnו&Vxm,uEZOY$۲^Vv^YK*>8 8WS@, XƉtmv8lV=F:7$[< '7zm´]ZY%z>J=N׭8Eg^>yȋMR63fmQ,x'RJ>=ll.0~{فM?w3z4csʀ39Q5R|!PEi!,U~M}m]<ߧYR{39$X4>͔j `l }a<>|Lx.9U1&],̓5MiLdSأ 'e\F (ӞH6~Qˊ"L/XCe?Aٽ=]+n%HɶN ]ܼ~fvtvI#G?HMrO4kѯB[6^S0qiJW+ uopaXS*ſ`iؙK.VQ "&1 92jO~bDf,]uH8(S vC-!hrsjHǫ$ApKϻ v|ws H\;ȭmL"XqBsvzrX'S ,LW#c }0wGNП&ϙz0_]р֣+PR'첖]J!0=$i=c;ITliwwٛ|?1j@P#Wp3R_tQO~yKUT 5:*¿9YJ(BDBglqBEt5")lWW4&p9.bWK\!z·^.. X{jC{=L[[? 7Oacr JWy&c _^PXcGJIs %yؖmH`&X,%QB%s^8H'9-Hg ԜQS mL_0pk|!IbJTL,:@["ZOtKPFa|X'v_B;jyk@~~}: `X4CW ]CdH7e)P윧H}aѿo=Ύq͗[G[Pb5[پSmeN%xG:%j]֓jm*+땂׾O_{`FY{ض*}.t-+(^W|6> endobj 1654 0 obj << /D [1652 0 R /XYZ 81 757.935 null] >> endobj 553 0 obj << /D [1652 0 R /XYZ 81 568.232 null] >> endobj 1655 0 obj << /D [1652 0 R /XYZ 81 544.488 null] >> endobj 554 0 obj << /D [1652 0 R /XYZ 81 230.92 null] >> endobj 1656 0 obj << /D [1652 0 R /XYZ 81 209.388 null] >> endobj 1651 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F44 32 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1659 0 obj << /Length 2941 /Filter /FlateDecode >> stream x]s۸ݿs/;oΤ9um>Zl6#w)b=$ ,v )ѧ?]" 7HGI"Tt7'}-uL'6{ۻ[X(IhVrEI]ØYWoM%D M"Fk7~Ϋ)WtRd\M~fj0$Iҿ3י.I6|bukpN|@J7eUz]\mׅ/_v[ל2s!r `є d0"+`b2{N',IOTQ:scE !R8~i< # p,H Qw';*ZeQiIɫ2}; Ɉy3!:"DhL",N)dP"-@?/OFu?1;|CQ{*Y/W۲cٯ!IYQ'5L8d_c'$GִT\ORP^g|,$ԧ=ҺӢXnc6uPuζڦKl:]Tأmp*4rQ,Qk_pzGɾ.PAʁ8'/M݃uHzZWyM s+,ޕkSϖ PkQWyxMIo8XfvYUVa,uyZM.-v8Ds.҂[]?hp@D$&zVKbH2|Oh6,$f1c$aaj̆ \ٺ:aI"C0h܇ȣC[@x$`5`0V44s) Tk?6FϾ/v9:-G0On:<p|l3 M\cR Jd] 6i@zyB?=! Z]DFTC|e$u/"ChOQF?nl?K\o[VYgS3d"Њp*z~k]4Q8!0yIP̐@=ulUe84q69C@'ad"jY;#RrKܐ=:!/Gqs69#HƭևWKˆ KG bH%}f #M_1G\>du(ȳYWG!n"6e~!upݭ"IDLS=ZFM9@#Y Iaot tս>@/N@8&IL|p4 Jma+'k`* ,䍅TMNl= @ w({*DU氀@y~!B/B aM,Y;+" Qgf汜`'4QY3T[׸SY!*˚1AىH#4dslkhӼۡ|#Z_gGYp?%\bݩ V ,XH 6+ޞ6&bWvU4/C '3KU}dgzZNX^ eVip{F%t\ >>v O9b!|!VGd=!wf{R9p poas@A "1\DwG]icia8#J7Ez:g [r8^B<ڀ-zQ@DMJ>&z18R&S(r"!_ P0(=>kWm5΂ [ au)++Zk,rr>z~6[`."LyV|lD`qO]c$U:{$[ƃףI$#k-$UcqAW[E4ى{$q>7ݍq#U9D^.EE,,ꀅ`1f;M3nR,_WH}^W_1!DCJP;y͸3Hy_gOҩ; gT ܁WbI mƖͦݚ}{.ƨ G}6thq/V)P(;v$]Sxwpb8˘-݆q7*T0c-XYʩ O.Ml[X/X nPleY]B<~ 8ĻzPbj@4H@:.S1=(ftktܗQR 4[( 8:MPr%$̓kvysE^H W?rT=O܄&_fsϚjmevǼHWplhE2"ޜOؐ7FApe.n"#96N,wbo9gS6dF^Ft4OBhDM -(I7k|'g WrqQP}.ls^;ejC|t t2'-Q\~>Ԝq }5=IX٬rmRŨO(gf!ӿ`>C^2 E!,&ɎG]SNh̿ D`x4G#8/Ն#ϺEeSl{tN-IEf|i?#*OݷM-c!X+L2_Z*mzYekdV%1|ޖopXy +&yӂVz endstream endobj 1658 0 obj << /Type /Page /Contents 1659 0 R /Resources 1657 0 R /MediaBox [0 0 595.276 841.89] /Parent 1640 0 R /Annots [ 1650 0 R ] >> endobj 1650 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [189.552 691.613 213.363 703.407] /Subtype /Link /A << /S /GoTo /D (subsection.4.6.3) >> >> endobj 1660 0 obj << /D [1658 0 R /XYZ 81 757.935 null] >> endobj 555 0 obj << /D [1658 0 R /XYZ 81 506.493 null] >> endobj 1661 0 obj << /D [1658 0 R /XYZ 81 484.96 null] >> endobj 1657 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F85 743 0 R /F29 17 0 R /F61 742 0 R /F46 35 0 R /F15 750 0 R /F80 766 0 R /F88 758 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1667 0 obj << /Length 2616 /Filter /FlateDecode >> stream xioP G-0vid?d TƶIɦ\.(|7>߮/,Q(F뻄j8W &YypqP럞#?I"\wcw][jcN9L&c&ҟS'O~??\^$c1D =, I#+A( p =Sif,Raoo:h)ЉCW>X N-D"LYH}_O|͏MRA aWL*+< *6GK+;YGdY,[H^~oNߪQ]39AK]:ؐ"6pVv{WJQ1~ߐfD2Dwnُ2|pmb.k0;’ (O=m*vB ,6;Wk:+Ljsd*  X֡*[9\} xC8Yes7Z d}!qW]fEÞ}M7aI4׽eգ25T@d6y)k)Ұ?H J"pP\Ʈp*ujS{'$Gu[HBn IK  [v ʸ.m.f.C6k TAAg_<&:.:p:‹5oHt?uA#)-Su.DD@B*}Mop2 w۵LQH1{?} MTAG sě&E :utp`P C`c U߅ (AS@D@"Ʉ"4\A2k7F mNySWs, RW:;Y?:^U߷ũy 4oc^oiQ77i@'I ]]-M^.$k?bIDb4$ĕ=z.. SQ<ߢF~ߏ{3s8d{f#Ec"~=51S퉛jxb; KcH)cU \%xrO]Ҫ&N[,wRsjzP}( BiCYX#P1T %)E@D9KݙJ8.ԗts:z"zLӢ-ZJ|vᶲq*0qJKyF&(W'{[:XMoeFgF\CcqާTNF88AꚌMC^vgβ/HbzsAG"![T~N:ho*[Zyª"p#^ic}*]/?m5,J&Z#iQ%<.i^ͦb(Qtc''PHӇ;VPˎxd7yW7 HpQEHnf_ש endstream endobj 1666 0 obj << /Type /Page /Contents 1667 0 R /Resources 1665 0 R /MediaBox [0 0 595.276 841.89] /Parent 1640 0 R /Annots [ 1662 0 R 1663 0 R 1664 0 R ] >> endobj 1662 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [434.989 559.783 450.618 571.577] /Subtype /Link /A << /S /GoTo /D (section.4.2) >> >> endobj 1663 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.55 546.659 387.36 558.027] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.2) >> >> endobj 1664 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [458.508 283.098 482.319 294.467] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.1) >> >> endobj 1668 0 obj << /D [1666 0 R /XYZ 81 757.935 null] >> endobj 556 0 obj << /D [1666 0 R /XYZ 81 733.028 null] >> endobj 1669 0 obj << /D [1666 0 R /XYZ 81 692.58 null] >> endobj 557 0 obj << /D [1666 0 R /XYZ 81 692.58 null] >> endobj 1670 0 obj << /D [1666 0 R /XYZ 81 671.313 null] >> endobj 558 0 obj << /D [1666 0 R /XYZ 81 429.285 null] >> endobj 1671 0 obj << /D [1666 0 R /XYZ 81 407.752 null] >> endobj 559 0 obj << /D [1666 0 R /XYZ 81 153.769 null] >> endobj 1672 0 obj << /D [1666 0 R /XYZ 81 132.236 null] >> endobj 1665 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F15 750 0 R /F46 35 0 R /F88 758 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1676 0 obj << /Length 2569 /Filter /FlateDecode >> stream x[I۸QJIK*Ox2r=9D,Y(GKl<Wha79 Bco~xYQ$ q%2L$d6mXѿڶ?f 6n&ht9b;{V0\ևO9VH%S&yn:.UcdK]O2S pUr9}p@|kQNG@D VWQJ aȶ42G?mONqp~L]:ε % 61( nϟ4&3\dˢ U)Zcasa}uyý ߕC .F(dQA(R'Q`'j511ywA>pwD}c"脋v1a Bs'ZiRnOcGoPy $TA AA35&B$AZ4;`GOk6WEw,>M[^wv)onE$+mIA35 KSDnz]< 1*[cᆒf,*糘`e% *DM^*KcG|pHs~7~Ҙ>56E ēVؕɍ]fuVI?ˮ_Vź6"6wIbHc.]=Ih^N)ZTJ@Ch$^$Go_IfS1n϶yJP9ؑj!'HIp2]B$c !mi 4XD/_b1Axm~8 sYc֠U% QjeZFV6wӰӋWjJ4?eJo*Xm{ܕbneKZOb˃,ƍM.QFFcU| 2¦~xd\|4/t\{3ozm±#]0%嘈ѷ:[N @@Rd\c U1:ʲ; S"P!d.@]Cim3 -iw US]9Et9$ў9U|:,鈚 cǍE?U-8Nآ"]S0/H EԤ '!:']K˘ %$&]c`ٰ5W30X0 2DMАabiϮnm)k5HBqD٨ 8:t堐l3H(uw1?c޺tyăIΤbeL} u;JِnL2_ތ#)ӈzP;d3M% Hh7K i}"pa{"Y@Z^9BY++a( /4ЛsC_PfEWźfkM!]u ;5TE++rntBŔCH[_o态׾G&1;2+Be I!7M]])>c'zqW2= Q\cpPb@LKR($Bo(m[Wx R`%%l liOl jp:yKĭ9 USQ %ĵ&U1H*e%tQ:`;,_ڃ8#vKޥ3B-a^B[OÝA`@ÞL%C6+WONҫ*]Y4?OUW* UjfcUm6{!8i8GaLE؆Zq m:l-=˗룋UYYiݴ8iG"M`ؐ,*"I;sآa7 7 t,h{B@dQdPe_ ј Zҁ0YZL;i_>BC'͓mWwML.Ǣ2< dsW-7p_e K%d6 0W oYj_Åg-cJ?av7%;߮⦷:Q@φ {/*?0 endstream endobj 1675 0 obj << /Type /Page /Contents 1676 0 R /Resources 1674 0 R /MediaBox [0 0 595.276 841.89] /Parent 1640 0 R /Annots [ 1673 0 R ] >> endobj 1673 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [324.634 170.639 348.445 182.433] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.8) >> >> endobj 1677 0 obj << /D [1675 0 R /XYZ 81 757.935 null] >> endobj 560 0 obj << /D [1675 0 R /XYZ 81 572.625 null] >> endobj 1678 0 obj << /D [1675 0 R /XYZ 81 551.092 null] >> endobj 561 0 obj << /D [1675 0 R /XYZ 81 275.403 null] >> endobj 1679 0 obj << /D [1675 0 R /XYZ 81 255.071 null] >> endobj 1674 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F88 758 0 R /F14 33 0 R /F29 17 0 R /F61 742 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1685 0 obj << /Length 3434 /Filter /FlateDecode >> stream xYo]bex \ JcAS0I =Grn&`!ݧq@7/~-fpKf`!Nvx. riqtǯ_G]+¬}73\uAQ?2œfb0_~q@pvWq5#NlBqk{sQ硄!J'_ 8}x%FJl׻}8q+ N-^ __Kkh.Bo eDGzJ!:c?֏n.#F)6_LߦKfxn7 Mgc^_ FX$Ju#t} QDuT3 \~@s:J*bY Zұtm}-[%>.H8pC) Xdja 3)prG&.7>|m\&%<a:{"nRpE␠.y7ÛwV5swg#DuͶcxnJ-6vՅ 8*RgrLxb\M[JN$WvDs^ 53 WyV}kr5|] n~@A7YQ5: /֖(N&AE2Wv2^T8-V _rR؍ "*ކ%!@L^¸(WT¨zoemŠiୈIbH O¶NƥLĸKiGȄyN4ܐڊwtL?ӱ` 2GёF$ƭ,QסYytVz>nsXvP۲Kp/O8V=*GzW|/Xp*ly7uvǟϸCksPF`7zA (~\Di`8G7ǀ)* /:OJ:qP\5or MmgɄdm_m1EDOeJlkƉ[f~D1㪿NsKiG&PiAV@K`M^3×j".{8g~)[>-cL?)$[ {}-MLiz>U^}ABֿ=OA$3`1tQI^%JZ$o Aٰf0rpWZ& -Óށܕ  pٚF5X֞#l\1,ig1wt' D؝FEWKތ[)b/ 1Hy$S*8A ` RQ*M[ط@$mci{rLf"=I{kR?\>HR6.cai7)0o.O7X&) Ev,f`y:b t^xg>gM\3̳͏%OܛA|}X`ԣP1TaCzC_Au;oZK|8OVY"oBl57ai]{m>POVN{%y&`5^7z+ y)ay+H9qƀ+/]k;zNT.\3N#@)\H4ҭ}:t ea9X-/?Zֶ^ZV l|+j(/O_rt :HK _Eq Ev0eTkdseOXys<8q&P߱LEM\+q(xHEh)_wӏ6:y@ ӭO<,y-Kd8 <l1 wη#b 7Tðg+^p/C&UΔO hM^Nv֮*78Ng^WЗ<|_2T3 n,)+AƐ݃؄QQ{ 0P.l6 hCL+KZugh  0?S{Bu2nɦkWUg;9J3ߵY?`3oXf*0đBY-K2%̡M l_/j*PU:ҳe Ca1:2=cʗ?P!׾F{Ư7[kM'(Et3^a(_89|r Sx?HD;l;.Oq!l6|`)Q+n!T?We یVZ-ΤkqVu8V@'VI0ybp1~ZMgǪ?~0g/jб ] ҆i!B :@WP0"`|~ \ .֕[{qiK>f|H2"&j_\?/7b< J}FB/" w9ؚ?NoV9-R BVbfGKy% endstream endobj 1684 0 obj << /Type /Page /Contents 1685 0 R /Resources 1683 0 R /MediaBox [0 0 595.276 841.89] /Parent 1689 0 R /Annots [ 1680 0 R 1681 0 R 1682 0 R ] >> endobj 1680 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [489.793 552.347 516.636 561.932] /Subtype /Link /A << /S /GoTo /D (cite.GS85) >> >> endobj 1681 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [306.316 141.442 330.127 153.236] /Subtype /Link /A << /S /GoTo /D (subsection.7.4.5) >> >> endobj 1682 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [209.861 127.893 233.672 139.687] /Subtype /Link /A << /S /GoTo /D (subsection.7.4.3) >> >> endobj 1686 0 obj << /D [1684 0 R /XYZ 81 757.935 null] >> endobj 562 0 obj << /D [1684 0 R /XYZ 81 615.455 null] >> endobj 1687 0 obj << /D [1684 0 R /XYZ 81 593.922 null] >> endobj 563 0 obj << /D [1684 0 R /XYZ 81 288.054 null] >> endobj 1688 0 obj << /D [1684 0 R /XYZ 81 264.31 null] >> endobj 1683 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F15 750 0 R /F46 35 0 R /F88 758 0 R /F14 33 0 R /F80 766 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1693 0 obj << /Length 2856 /Filter /FlateDecode >> stream xio6{~>:X}̱ӝ.vL*Qk˩οG:(Q])iz7E N⛷% Hr}P*QB!DrHn&uե“_j;`ޤmnU2#d2ci)ݶqg t9FO;ZA !?gc\u-H&>”sVEjg|Ƨ|tO慎%&'-ܯ7nGެez) )i.yf&UeʓaHp xV \ kUX,;tWjx85,'-)|Vr8nRZƊ;541ӍIѣy5g./Zn\tYRMvfipOM:_7Hw~?+@jnefG&>f]~I&[K yAPfq-k?i4b]W7:0oͥhܛ?. I4ITHW78Y: CܵJ+㎓e1Y5H*c`H$oz\f} N:9ۄ#b H`sN(2y%Hc v!1(@KJ!N_/g ~ƿU^<\}E6u㻷v[ZM|s>e^doԔO- QٴŸ=nmh~"I~`Q5Eh?grmB *i0>D"c #S1շɠ120L9xֈӵ,*44c1PY BAԀwPRnae'/Țҳ9}=E߇~IC$^E".z!W|KyMaIՆG*S~N~;yxly5=Eb`4>!H@v?t6h4` {IB1HCN{mIX[@9︢VҜ:KDv!iEr3#|$zȠAk`߼AI' E+wFpUxHcPǪl"'V+4א+\zS2։~_@.ꄨNA$Fb2 TuǽvMadmvR6,atU-Lv]1a* y-m% ܓc$ ZW4 ά!ۿjr]m r=D/тZG"@x9FD/8+ vܦ ;f6P$I-8ƓHpeR{O˯)}33,UVGf*~]\gb8X pli9>zm㦩c7eāU ^2S \(,RHUO ToE]UOx|]R(Ge3y5sojn+ݴtP[Qi^ C#=qIq}DPw}0Rs'Tl #KEGMWᮊVZEJ^^6hcZ}lncD+K*R_gLN +)k[o,ٓDBL ҌR!i~k&={MQB G@< 1e^EpBeef6Ik_. ^u|A,㈡׬I>Q0paO4H;R:N_*/U=M<L5kU.1H(W >g,*\{a-&?>xPXI)jp9O5Ms"Ԁ>RTY,`Ws}@(ğ(  (Ƞkg6W`mp/ȁc9I'Ŧco*0%JH4?")S$EH+"Ɨus:PteG4ń12.0!lQR? |-N IN^`<^3 !/Q b,=ujw9|E^x" 9D@JD@CdGUl2h4!(|EE;yQU)ƴ&/7i?t;>8zv;= %6,1Ֆ40']'Hg1EIu`S۔ D&)ϼODlvo3_vE$Q}jöum tEO!Pc:1Yb)d~Ǣ;D2 /~$TVnv e8,LLHo$KŖQ]ba dFW U њ#)kqmgյW7]!.OP{@F{xb4zUP1{w~MsMpu([T Z9oT '?mFlVc\ QJ*RyI-s)[bvF[Ɍ]RfkkVc9[΁{(Ln[m~F$uH@ȩ1Dq%(;]h@vL"Cu`0}r[wy*Ql}xTN=lqR!n`*@u3 2޾I8iu٢m~WPT6MЩ<,X'i}(r@Y~'CY vRQD endstream endobj 1692 0 obj << /Type /Page /Contents 1693 0 R /Resources 1691 0 R /MediaBox [0 0 595.276 841.89] /Parent 1689 0 R >> endobj 1694 0 obj << /D [1692 0 R /XYZ 81 757.935 null] >> endobj 564 0 obj << /D [1692 0 R /XYZ 81 513.79 null] >> endobj 1695 0 obj << /D [1692 0 R /XYZ 81 492.258 null] >> endobj 565 0 obj << /D [1692 0 R /XYZ 81 174.314 null] >> endobj 1697 0 obj << /D [1692 0 R /XYZ 81 152.782 null] >> endobj 1691 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F85 743 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F46 35 0 R /F15 750 0 R /F103 1696 0 R /F14 33 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1701 0 obj << /Length 3428 /Filter /FlateDecode >> stream x\[S9~WdjFKU l$.U4 ،mr{A nڲt.߹uO&xrd#& rB5F &&'9Wx}m'x l/@D7 ̎RI&'3& [_ES^‘fňMp1+HڟQo˛b{\%>__$[{I-au. VEp%2_(DBB|AhLDTGDG ^lYF2@*(^tDRɌjDҺ ٤2jQVmj3B AJ(AD)0$E@I(8AV" һ Fy^'ϻK2$;f2dܸy¬Xyw ӂLNZ*R*6dpJTIBbȚQTE8~ n`:c1ZiA? GGn R]vcEH y U+B? 5!iB OEK,"-u<[l5-=]@7R :5>k账 _c۲SP0B幋+2]1b$w%Z Y}Jv^mw]rp: $[ꇀTr vi\abYq W$O.;x@t43@ M#Y Y&al"]Ҳ"Fb&:@_C*o`N(S d`hM!*~w(Pk\ct!5 x2ۼe^ȅmB6U![X7Y$I6n>w"BBEl~6|?>?Ta޻?<Hݝ10[HRi|mҀIIc WIvymq{w2 |U2ZJƔH7֘Qsٜ)XƂ2/gٿ^eZ6eh^'9_>T#AƁ:  tB,8P8h:=VP1XFUO'8b3H! x|hf( TyP8n׋tO JVf[o~]Cy] ijKABAQ֔뻻duaY;&ZX'3y/C|WzHT}B3C_qt50!2`6}ep{5\/.2}^rBY~{ˈdz+ drajy{v-VIi]@%gbM88:zMlf ,<;yb>GKCN3)F{.x}i)4"@ágNˡ/#ŠIHJ" aSEgbfҗOfư@.A\T6=߷?m y`' 4|EJe(m£W g Q:^8F腖zazg . 1!z^'08zJmd[y~uvݗddyu-g?q_(UxRO(2l#BI@ar癟m-auZ>s1I@ k wuwrD˴A1D Exp=<4a&=%\c ap SbQqmSIT/w紂v֣Y8ʖa)g(֛tO l] D1KW\Hh9zqʠbl_3 "!5P'%8X%'ڊAFK$QHQvPEeγi 2!:bXs"h(Z<9RÐi05 iI[<1T1 1v3j@=踢 !DbHQDp~Ğ$@n1)MOƍ42#kgMH+& x$kGmdnͲ0N4qt#Ul#5`48x]v Gk瘈3r_tO r5lO /j;Ez,(kcv+p8 yw\6tÝ,e ʾ3ݚ]w5a7jwlҶe7NgDOØ`pሖXj['>(/O;P[o;2QcYg}fv@0ll9O4 O*!3u(iϡ ͕}t(4L V`|{~?cv6.vA(jfS1-7ԓ~FǞ?ϟ66#Tu#IwACɬ>$~R3%U>s56}ݷJ%U!Pm[>D5Sb#TTSGةD'm5qΛ伓(mZTT &O˷=D-(o],Z.J,%d/*F-hVEV1UjHh;`B9iX([nw[[$n@}V3K5[6]#Fwk5(M7ICۻw3oh yeň>xfzeo=թ%mXTG:jx*ո]x'Qȼgl{Q_/hR#vgMUoȻ[l-Xlǫ]ol6Iwï4ئ՝6 {Q||"41ǧ0*W ubEV0hdYzmh#ݳ{E>$9E<;SJҷ)_JȰ$:hw rݹEKA1mkwi֒lddT߮onU~ksn13BLH}τ3S^%sTFΡsVfjyFD0Ls>tӵؐtQlJp-ƖxðzEFB޹W>ʬh|juN iI! endstream endobj 1700 0 obj << /Type /Page /Contents 1701 0 R /Resources 1699 0 R /MediaBox [0 0 595.276 841.89] /Parent 1689 0 R /Annots [ 1698 0 R ] >> endobj 1698 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [318.262 680.273 351.781 689.858] /Subtype /Link /A << /S /GoTo /D (cite.Sloane72) >> >> endobj 1702 0 obj << /D [1700 0 R /XYZ 81 757.935 null] >> endobj 566 0 obj << /D [1700 0 R /XYZ 81 274.425 null] >> endobj 1703 0 obj << /D [1700 0 R /XYZ 81 252.893 null] >> endobj 1699 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F46 35 0 R /F14 33 0 R /F15 750 0 R /F88 758 0 R /F80 766 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1709 0 obj << /Length 2997 /Filter /FlateDecode >> stream x\[sܶ~ׯIj0-n6M]9l$xK3%A\> x|LpW% HrzP*QB!Drz?|G zmǯ ƽI";rW7_qU41hd&.8>R=>RHj"Sۣe^"V "$36?\ '1%2/d3#DCc'˜Glqe64l6Jf*삍Xe Ѐu5l;@j{dvLf!eF)ь |\Sz9f('|]^OΎ]c^~];#L;IbE6/ 3y;ߟ~@&NHI"%Is\a4ftLQH" ȊJgA6D`1-̗74QI:"$R8Ȁ (AP!J"FAi G[~KoG3A0@oV]_OCW&6I_fk~ry0z z(`*m3˳|jq|QX^co+t>Gs 5>@[?K{Wq8gc4 !#J)f@tJSNGsCha$:RjB Ǔr$bx eu]X1A'UyQKz<}! &aQၾOh[''2U]v+ebOnƃI(Uni9ġ n..مk c"!F [׺Lpk"09aQ9;iRIF|Rl^Ǔr$f0$ovqN-JQVAݞjMN7IL*)ޱh`Zc>t< Ѭ`  iȫl8Fx?:!ñfTS(70N5G' 7Ppaj&B HRnhCapp5G;+mtX?hΩ6zLj(2d|h \$G_hz`O `G&hC2 иmd[ @p`Mo`M~il? Yޕ5HVmc7$ljT+ݱ`t{7-X>][x>zWB>]."=•^9ĮwY޹հ_2uѺ7FnK=MdSdPVjqchߦq>0.^G( %T5 DU^ Uhg Fcb۬H!J{ݴLڋ]+)5B=˽G,<2ύqؕ+o inXD4Fir[Xz Zno2 =c kK{}\kc7=Xa[Fb#th?Q6"zbZpv/̷gf0zENNAjQp6zAg(==Ap6Y?;BB@/md,),a/#E_c{i!k=m𤓙DF=a\Hxۓ3d@Xׇ #OdL'{OS{CzXQ 1 4Լ21aAӢSFllg+f{7d?Hvr.$O2[Ɵ(chChPZe(Plw'C::F6r"^aУ]|:c=W=\tΜy LE]ۄbmB}mBu9AY{BDuvKv(>'3#f{sW8b2nW$Z endstream endobj 1708 0 obj << /Type /Page /Contents 1709 0 R /Resources 1707 0 R /MediaBox [0 0 595.276 841.89] /Parent 1689 0 R /Annots [ 1705 0 R 1706 0 R ] >> endobj 1705 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [309.201 675.889 336.045 685.474] /Subtype /Link /A << /S /GoTo /D (cite.Alltop84) >> >> endobj 1706 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [447.326 125.551 476.591 135.224] /Subtype /Link /A << /S /GoTo /D (cite.Brouwer98) >> >> endobj 1710 0 obj << /D [1708 0 R /XYZ 81 757.935 null] >> endobj 567 0 obj << /D [1708 0 R /XYZ 81 270.042 null] >> endobj 1711 0 obj << /D [1708 0 R /XYZ 81 248.509 null] >> endobj 1707 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F14 33 0 R /F15 750 0 R /F46 35 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F88 758 0 R /F80 766 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1716 0 obj << /Length 2024 /Filter /FlateDecode >> stream xڵZIsFW4 l$5Se˶$" (\lk4jTG [/}W7/r(D#]B5FD "]2xrױw_#I"uBmu^&!!m>#d2ai)]/("uD8?}}|}Nx귫j|՛4m}|o%=q2D#Ʋ'ns~Zt[ HѶ4O$HؠTg0 9P +\7b"xەmQmU0 F!n>1|v FŘ6v9w-6٪6Gya i,Sh pFѷyusl}_NF1 6_rߛ!U޴,Uls%9h7Nye'nf/ 9Zgbq՝Q!"G06գ_6 swjk&o*>=urojYZ*1n8'vcެҶµTϛ?.Hbu$$udda@֍V 1 )f}|%I% )`,ݘכoa2T0sWpuCA E%9CB18s'4KIY5ÿ ăchB ڗ* 47`O #!=ij&8{<3#Ѧ"QDpU@1IG[˾U ?dK\+{q9}:At;>>_vles}˖}o^]:S(x>~/B%O ЃǮ95A,c;2`j|vg\"X9- -j#*Cvb" m5TAA)3j4ղm}ZV_U.P[<% S5,$ HWaE_2HJr"ӓp|xjpbP ܗ_Pm,H oyt8_WYpU_徬VEDJ;2_vSwh\q(!e%gS"Rקjh3J-g%QGAAZp*b[.6۬(:l@5`g sq{^kӭ.letd$Cmw1P3#QFUM6S4&5 kuZŬ%bpP>/E9nԫkҴ*pi}R#(Kq4PJ:TnN'JHMX&1"؜.dJSѩ}g py}V ȶ1kö-ܳ"Xn:P(Й<)R_r׏ʺr¥VA1B~{0Iȯ`>XCQD0A( 1R<˜8$x|P#*`ퟞ]ʴyf/(\b4ve5bJ &ܧb8vP8 E$" (Rol;xN_l&Ή, DXj2 iRhOhP|yep)]p`>7T C6Qb_+6j-?x &0(]HMdH ݧq9== U0 (VE E=o/"ϟRprVF4F=o=Eټ89{x0ᵽ)o. endstream endobj 1715 0 obj << /Type /Page /Contents 1716 0 R /Resources 1714 0 R /MediaBox [0 0 595.276 841.89] /Parent 1689 0 R >> endobj 1717 0 obj << /D [1715 0 R /XYZ 81 757.935 null] >> endobj 568 0 obj << /D [1715 0 R /XYZ 81 733.028 null] >> endobj 1718 0 obj << /D [1715 0 R /XYZ 81 714.484 null] >> endobj 1714 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1736 0 obj << /Length 2116 /Filter /FlateDecode >> stream xYs#5 "o$3~=rp-00Px9xpٹ HI7q0<+۲,O# ~%՛+/I"SĤ"2fxbgkWkeWR)k,Ј4K E"9ێ55}7unSؒb[\%je$*+K[wzMݑl훫H-̃fq$ Itl| c/(i[G,:< fVE|l45B<p40oy*q8%`ʗXZt eOҜq?Zk8j6 OISqM2(%C=# G6o8vm?=v[V9/gfB3=G'i0=I+U;=\ȼ;jH~+#`_VR~ʱ G0Y@#|"1qxd#ǁ纾v=c2hdp]goʣ"|S Z*C>|d}ӂTM-KP7PSojR_i`խOM ;2@@m`3 ^A1D:'F8r"9sCM1|8Y含+m>Y#1&Mg 0؃ARb>*d-qۀwUadDDlyg0xOtQcK#%>@sje~.&M.*iZ6M}9rerZ46LD ..dvO[ ҹYoWɓ & 6.Scc×J7 F&A. xc}p(H;Ek 3_~t}SyRP74~>όQ*15~e+_]~)UUx!UVumd.Tv@2Cy!ˋ5"ǻ,l7h ):sp|0\+|_IIM})9w$|6b/T^KvԢZ_!PX!o> |$G\l&PH Y{j΅ɜq&^z3'h s(@Oii44}ox4 KZD3 +@6uRJ'LJ~<ΜXEm'-dG{ nz? 0F4{\-+w8sdֻ;;~A(z Y<){5W(a]zٺgˀ{1 '5HČo[Fo@MnG Ebtq@+-"puJgw78׍( endstream endobj 1735 0 obj << /Type /Page /Contents 1736 0 R /Resources 1734 0 R /MediaBox [0 0 595.276 841.89] /Parent 1689 0 R /Annots [ 1719 0 R 1720 0 R 1721 0 R 1722 0 R 1723 0 R 1724 0 R 1725 0 R 1726 0 R 1727 0 R 1728 0 R 1729 0 R 1730 0 R 1731 0 R 1732 0 R 1733 0 R ] >> endobj 1719 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.987 497.341 161.616 509.135] /Subtype /Link /A << /S /GoTo /D (section.7.1) >> >> endobj 1720 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [80.004 483.792 95.633 495.586] /Subtype /Link /A << /S /GoTo /D (section.7.2) >> >> endobj 1721 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [482.304 483.792 497.933 495.586] /Subtype /Link /A << /S /GoTo /D (section.7.3) >> >> endobj 1722 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [388.127 470.243 403.756 482.037] /Subtype /Link /A << /S /GoTo /D (section.7.5) >> >> endobj 1723 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [475.85 290.555 505.115 300.14] /Subtype /Link /A << /S /GoTo /D (cite.Br) >> >> endobj 1724 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [217.523 248.123 241.333 259.492] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.1) >> >> endobj 1725 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.174 248.123 378.985 259.492] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.2) >> >> endobj 1726 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [492.826 248.123 516.636 259.492] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.3) >> >> endobj 1727 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.945 234.574 204.756 245.943] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.4) >> >> endobj 1728 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [301.664 234.574 325.475 245.943] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.5) >> >> endobj 1729 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [454.827 234.574 478.638 245.943] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.6) >> >> endobj 1730 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142 207.476 165.81 218.844] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.8) >> >> endobj 1731 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [288.453 180.377 312.264 191.746] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.9) >> >> endobj 1732 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [480.561 180.377 509.827 191.746] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.12) >> >> endobj 1733 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 139.73 112.902 151.098] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.13) >> >> endobj 1737 0 obj << /D [1735 0 R /XYZ 81 757.935 null] >> endobj 569 0 obj << /D [1735 0 R /XYZ 81 733.028 null] >> endobj 1738 0 obj << /D [1735 0 R /XYZ 81 527.451 null] >> endobj 570 0 obj << /D [1735 0 R /XYZ 81 454.057 null] >> endobj 1739 0 obj << /D [1735 0 R /XYZ 81 426.995 null] >> endobj 1734 0 obj << /Font << /F29 17 0 R /F31 18 0 R /F44 32 0 R /F46 35 0 R /F15 750 0 R /F36 19 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1748 0 obj << /Length 2638 /Filter /FlateDecode >> stream xZ[s6~#5 4ӝiMn%-6tD*n;tilB x88#qtūo8DFۈ*8OD$H3]/_f?:Sf݋7Hc힤}ĬՋ7TG -5r$L %{ A=pdmo/s1yx6mʋUVŀ+aGITќ/œ0a,F߰!%4͓l.A~ 1`G2i I;*|-une!#' ̙h z'kS VHЖ&ͩPq}; vPuwnˍKEDy뮫CƤ"Idk̐x ޮ+SIu^3l׎2Xd!J#NC`b1# ܴ[ZΈѐr!\ hZVIVa4쿄'Sh6gy6"n*kdĸ/7uVToᵩ?Hn| >qD9R ͊hx!R4!$”7`Lf /}e1wq#<ł%OC<5Һb"uΪK7G`N==l䞡2T!A-(`@!A˂ph9MVmWuǼIC5HMjCCpd`Iw8]vD056nl CJHke51]eYdGhr -[n7숲@xR(Ei GR}2UK Z =8}?g $iGp2 ?|X?ܹq v~<)gȤ޾ +8ڍYV7s/U7~.*[+%r:#*ҍқU0 P &ͺԂ"uߡdwH?]_|0 xl"~Q]NPL`V$c@RZ 61N"? \Ta#`6{h¾  ARrvZPs[ spo_ xWs/m¸୦9T2$΢LlUoUb' ѯ#L&z.lyUuY-|Ŭw^Wkׇ\vS+}!_s]v2ϩk~oT]&p4S}9"6Vz}2׀2I(t͞9'ip@{um'A[Ikl-gprZ!"ű9 k]['*:7ww-o)DQ*ѷ56UG6F7$˼/fk 6{|_6/:R/W~(, 71HJlR8׌vͰDZBӈI 㨼pP7 H`:pFRiap ۓ_COA.?ώ٣dj)HI[d|s?cC\{Cqg?Z3Lfsd63gnS̠(7KO!-i?s3W 4̾lӕT]f1dn#g4l VZJ f8\/iЕ)/N g4Bb`͡o5m6S*ݮؽAv)_MĦ`5󦞾Ո:Ћ }AП6^#/6Cy~ 'FHZxDtͿ]viyKyp] U)H\t $Ns@64P}ݸn]U)ZM1 3*f}vdF݈ ⓨhARM#~6rHW}z2׀ 1t=M{LhHcI$Dd>|瘟*#h=&'Ժh2hLثb~_ݙy}Hu~PɥQ*/2ۂȦC6ɍIMTKf9RyC# &;t}躴׉ w Cu~eԇ%yѐH Xެ!Y{Hڹr[W2D2کN9 }.c6_9k#u%KY|ぃϞmtEQrX5 endstream endobj 1747 0 obj << /Type /Page /Contents 1748 0 R /Resources 1746 0 R /MediaBox [0 0 595.276 841.89] /Parent 1753 0 R /Annots [ 1741 0 R 1742 0 R 1743 0 R 1744 0 R 1745 0 R ] >> endobj 1741 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [457.06 643.236 480.87 657.403] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.9) >> >> endobj 1742 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [455.611 599.606 479.421 611.318] /Subtype /Link /A << /S /GoTo /D (subsection.4.3.7) >> >> endobj 1743 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [217.781 313.897 241.591 325.266] /Subtype /Link /A << /S /GoTo /D (subsection.7.5.5) >> >> endobj 1744 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [321.266 299.923 345.077 311.744] /Subtype /Link /A << /S /GoTo /D (subsection.4.3.6) >> >> endobj 1745 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 108.997 107.447 120.791] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.2) >> >> endobj 1749 0 obj << /D [1747 0 R /XYZ 81 757.935 null] >> endobj 571 0 obj << /D [1747 0 R /XYZ 81 733.028 null] >> endobj 1750 0 obj << /D [1747 0 R /XYZ 81 712.273 null] >> endobj 572 0 obj << /D [1747 0 R /XYZ 81 487.547 null] >> endobj 1751 0 obj << /D [1747 0 R /XYZ 81 463.803 null] >> endobj 573 0 obj << /D [1747 0 R /XYZ 81 187.863 null] >> endobj 1752 0 obj << /D [1747 0 R /XYZ 81 164.119 null] >> endobj 1746 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F15 750 0 R /F46 35 0 R /F88 758 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1757 0 obj << /Length 2081 /Filter /FlateDecode >> stream xَF}P cx}bu%*S}qx$ZvJ'^\|YQ$7˄j8W &BLc8U (G8ܖ$G "d+ ָi `b it4uJo!ZjE;h 04N'^ ۞ؗ!Z8alM6CHd#ItM%8 !B QSOq#Hʚ}wt 0YgPzV^P@┧6Si(/htf>&d(Z+p}pQl7#:YfXZ#gVZs6-4QCsGÝ5~ <}KN*4OI0s?cVؘ1CNZX0?iaq5i]ugCr.r&%@ak@bWeqmlp2n&KaVnP `_*-gW_~vR}:p*L-2u7%J8Pf$ PD&0EJ)r<12$d6sOlb 7b6FMW '\ل6Q/ Z~=>7󵘹 endstream endobj 1756 0 obj << /Type /Page /Contents 1757 0 R /Resources 1755 0 R /MediaBox [0 0 595.276 841.89] /Parent 1753 0 R /Annots [ 1754 0 R ] >> endobj 1754 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [475.832 267.47 499.643 279.264] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.4) >> >> endobj 1758 0 obj << /D [1756 0 R /XYZ 81 757.935 null] >> endobj 574 0 obj << /D [1756 0 R /XYZ 81 639.963 null] >> endobj 1759 0 obj << /D [1756 0 R /XYZ 81 616.219 null] >> endobj 575 0 obj << /D [1756 0 R /XYZ 81 332.787 null] >> endobj 1760 0 obj << /D [1756 0 R /XYZ 81 309.043 null] >> endobj 1755 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F14 33 0 R /F15 750 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1768 0 obj << /Length 2695 /Filter /FlateDecode >> stream xَ8B>f$d2O}IDmRG'|Eݾ`bݬ*Gw\zH!o#1\EJ(dWٛ?^gmo_ ƭmnPcg]aD #r$L -[ !_q?xs_χxo՛"MMR 6%~v@X-(|p45Z p˜|!o%l(fmIeCJD?ޥߓN#~ɶHVnxob4JWҩMOo"AeQ%>@%Kȳ<[>.ָ6Y'$=8)FuBg5dxh >]H4ޖw*z$d wޕ`@Poּ taՇrO:aBGP2fZĊCVnjd*m[7>в<ʺE1WȐH)i9ؤmlD,v0}[G.dÑP|M: pJ('[iTɇbvqyxZ;TmU_B^ RO'O3sɀ Mnf]m{-Y.?`@0Z+YU&iGQg)f2 N I;s8`tMAhe:ln8do^1zBlzSAS@WE֞3ڀyVD)$|BX}CQ:?جglV/EM݂glCipJΫi=0ڥpu=lB]ͭDNmuv ny( YԈ]ӎ[{:-ROM\  ]a$C8$cGcj ՉNJd.u%Oa(X`ppG=TiBce1q(e?)*zhOyfkdV段o g@7zҎ!vL`]Y0K+I2:ӀÏʈ`rxa *=֓p~N   "˔ 'HrRg endstream endobj 1767 0 obj << /Type /Page /Contents 1768 0 R /Resources 1766 0 R /MediaBox [0 0 595.276 841.89] /Parent 1753 0 R /Annots [ 1761 0 R 1762 0 R 1763 0 R 1764 0 R 1765 0 R ] >> endobj 1761 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [489.193 213.87 513.004 225.664] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.1) >> >> endobj 1762 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [252.216 200.321 276.027 212.115] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.2) >> >> endobj 1763 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [453.015 200.321 476.826 212.115] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.3) >> >> endobj 1764 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.717 186.772 226.527 198.566] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.4) >> >> endobj 1765 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [391.359 186.772 415.17 198.566] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.5) >> >> endobj 1769 0 obj << /D [1767 0 R /XYZ 81 757.935 null] >> endobj 576 0 obj << /D [1767 0 R /XYZ 81 733.028 null] >> endobj 1770 0 obj << /D [1767 0 R /XYZ 81 712.273 null] >> endobj 577 0 obj << /D [1767 0 R /XYZ 81 525.822 null] >> endobj 1771 0 obj << /D [1767 0 R /XYZ 81 504.29 null] >> endobj 578 0 obj << /D [1767 0 R /XYZ 81 319.834 null] >> endobj 1772 0 obj << /D [1767 0 R /XYZ 81 296.09 null] >> endobj 1766 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F88 758 0 R /F14 33 0 R /F80 766 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1776 0 obj << /Length 2192 /Filter /FlateDecode >> stream xYIoFWKhMi@K-DQ_7 )R$%Q"P`ϐy!"]ߌ\q)D#ͧj8W &Y>{qXXǛO``wR6@! U#X=&"!]>#d4ai).[E7ף`W1t|gyIiZOUXdMM(< :2 u_:[m堾6 .@v(aNMeM7UV 3OBhOE6go繝jhDcqmB8EXb:O)mm.B{+8=م?x2m-͙F`m} 2@2BHҖ@>t=6tH$] $]" T.A;1uQ,&WJq P /}$pDbK@@јAAOK"_|~K8۴Eȇj6^j[DeCOx?߃r](G ZD~.63n?Y}Iήhl[jM@"b48T^ Emjtfm^P$ ;AS6'[X}+\ i'eQMoŚav&GJ evc<GEIo5 Q6LP4 -+{ͳEl8LA}9'\Ǯ@+(nQk)zMכwcCd'K+_ i$_;,4-ETK? 51-fF9Dki+aR1d8;=%Vy6KRm?wdV~ 6IAݘm"*ΓLIɴL ;V9X.D(=9kF aq%s,maع0UT5tD˺d9jq6`"W{"@Ǧ;7pU>Ʉ)H=\~/9΄Wr/q)qv׀طI tގ'1tZ"JcVpRi{k&!mS]=m,0sпҴj Xz% ( 3Y6y0G9zKQkA> endobj 1773 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.636 605.163 142.901 614.748] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.13) >> >> endobj 1777 0 obj << /D [1775 0 R /XYZ 81 757.935 null] >> endobj 579 0 obj << /D [1775 0 R /XYZ 81 733.028 null] >> endobj 1778 0 obj << /D [1775 0 R /XYZ 81 714.538 null] >> endobj 580 0 obj << /D [1775 0 R /XYZ 81 488.12 null] >> endobj 1779 0 obj << /D [1775 0 R /XYZ 81 466.588 null] >> endobj 581 0 obj << /D [1775 0 R /XYZ 81 254.386 null] >> endobj 1780 0 obj << /D [1775 0 R /XYZ 81 230.642 null] >> endobj 1774 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F14 33 0 R /F88 758 0 R /F15 750 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1788 0 obj << /Length 2738 /Filter /FlateDecode >> stream xZ_s۸̽S _L&is.C$y-f#Iɷ.HRLGsmf ].~뫓Kf1ۙibDr~ݩ|SW8'R&lt:~K̄`1/,Rl QD&$-d|Y=pi5d7:#1MDt85eҙo7MEX9y-T"Bƌ'H-NRysԺ-&b-XVVY [ 9j^#і^F5mFe[DBJ\fc'#9`ۃa œ0sǜ盢olI#[}m;ϦCAT ʊ~lU^diOӤRK?hHף/Ӄ`8x(:^}ާQ/뵓Hj3q>.i:*6u^Ѱ?c3Muy E'G/2u7m# 2rlrc R=;X3t:vt6tl:q7^бR\'H@d#udߍ.D3|b8[1 .t0eΊo16L*čH)%ƥ/_eSfu ԣ/#Yj}ն1aBrsynl|}X% 兿bô#3O~:|ffX2PG>[8,ݬL$1jɿ K"XS,#89~VpSxKF9;w9Ȑ g%w)<!XG0B{5hgL=ݻ.=__r.PoC˗Cͷ"Ofx(J=ZO .:v2CiZsV69L gHGԚTJw]?&1W,9>3#}ۓan H~$=1w`֢/k cjBZԣ M`j rl+V$˯2#WĐ y:p~HX 5Zt f6()=V7@Q7Ac_lz,X淚.Lpđcl?4:]`wq1:90 f%~h_>/=*nzpk=N/!L^T^FXg!]F68 ll ;CxغH=0HiLқ=ww7nkM)9{&&,>lXvDa#_}(e%&B}EMq<Ͻ) n&xX`!7%U_4.d6O§ܲ(I`uՕ!ߑNblx᭙0W*W4GroM9FmIv{J8#^^>pS^QrԞQ_-OtEO]n)^ ʊǾSv^-)\>`Au>Ǽ`&c`4>R@7YbFXhϞn8\LX7ԁOڵi3SQsQ`f +_wG05݋L7awwu}[I_';ҕ{}+hRoVkƽtx _X^@ v."T܆Y(_~h%KF*_hVq_'oV1U̹aW - IKvC)=c&\Ŋ9 4-i1p-tK2NJ2)%q2␖'VY!]H!H&0RΒx4(g0ЫMZWxum3m];կRQ_RAZ]m"Hc}|ΖCɪ=@BXt2YNi5ޘGw@cGQAxrVMF3@J?9=IitOʍK0 Ӆxʾq@Pt)(-$vqK& ߈&j$fJkKcH[ƕK.z&0Qɼ ŋ$q6ʦ?TDhߍ7UpQltYJ,3VE: : psU>r;W.w\:TJKwCU6Yޡ$d88sO!udUWE쀘y)4XL _ ~.P?\Bt3SpXWɖ{{@ 8< N endstream endobj 1787 0 obj << /Type /Page /Contents 1788 0 R /Resources 1786 0 R /MediaBox [0 0 595.276 841.89] /Parent 1753 0 R /Annots [ 1781 0 R 1782 0 R 1783 0 R 1784 0 R 1785 0 R ] >> endobj 1781 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [190.304 630.478 219.569 641.846] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.13) >> >> endobj 1782 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.636 578.065 142.901 587.65] /Subtype /Link /A << /S /GoTo /D (subsection.7.1.13) >> >> endobj 1783 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [487.371 340.198 516.636 349.783] /Subtype /Link /A << /S /GoTo /D (cite.Br) >> >> endobj 1784 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [80.004 324.865 315.668 336.234] /Subtype/Link/A<> >> endobj 1785 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [193.979 283.792 223.244 295.586] /Subtype /Link /A << /S /GoTo /D (subsection.5.2.14) >> >> endobj 1789 0 obj << /D [1787 0 R /XYZ 81 757.935 null] >> endobj 582 0 obj << /D [1787 0 R /XYZ 81 733.028 null] >> endobj 1790 0 obj << /D [1787 0 R /XYZ 81 712.273 null] >> endobj 583 0 obj << /D [1787 0 R /XYZ 81 484.601 null] >> endobj 1791 0 obj << /D [1787 0 R /XYZ 81 463.122 null] >> endobj 1786 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F44 32 0 R /F46 35 0 R /F15 750 0 R /F14 33 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1794 0 obj << /Length 2820 /Filter /FlateDecode >> stream xڽZ_o8ϧʸKR$En%Bm+IoCʒM9F*VޞryD)i"HZΔJT,Kttg<487CpvJ̈́̀#Tg܋3C &,Je&b{vuͣ%qd6w[,:D97)(cfidd$;͵񦬊=WZGO4XU5EWUY4o#re*>B>X<,6B'Zroe>٠©|͂g,$L++'\s ^x ^*'oaOlKNfH4 2H0z-~JfOV GBDgLf|d ׬ㇷg\pz?ESV\j8|Y[jxdG֎,i|2^)&/NrH\sb7|ZQ@I$_S̐LPNw.aF~gaJݮAK9UTj၊+W$pp<0˔,{܊Z YTM >KZLAqk;dfʪ+fBǫil_ ˆ6a[} LGLTͿ GsKENM=:t} $@f;1I=>pɡ){|#Q}Hu~YI,y(ʌ[|t z?{W9tȄ+ڂt+E36.n޻PFzݍ <6@Y [ۮ-\&򦻯")Q+[( }Z [ }VO" hc)A ~!bzwV6N`zQ 2{q"j՞!h&e&E6o8BLi; )ލNA64 2Um@*A7xFwl)hV6K׷Z߷fq+%6^y7bҍ;z[jE ḕ(+Z;\XtW6&rp;y2Ggwۀ>VDʧ[/>Dk]ݶͦ_0M64:Vkf8٭n"< H^-6+gJP Xuh@?zk4G݁~qwu{2Fݻ4YkSVslm6xZWRf}.j(B|"}PB>j*>D2zn'G"AKQG2ea|4 YP Vq8Z-\)pfat뒢>8V]҈㠯U]s/[> )삌7e~tòCx[R ];{PMA%7OLXjCȚ<z O Y08;Q3?kty I#mr}8wH- ^yVv _Zb<F]*ѕmt6KYڗx@&6z4U*H endstream endobj 1793 0 obj << /Type /Page /Contents 1794 0 R /Resources 1792 0 R /MediaBox [0 0 595.276 841.89] /Parent 1753 0 R >> endobj 1795 0 obj << /D [1793 0 R /XYZ 81 757.935 null] >> endobj 584 0 obj << /D [1793 0 R /XYZ 81 662.048 null] >> endobj 1796 0 obj << /D [1793 0 R /XYZ 81 629.905 null] >> endobj 585 0 obj << /D [1793 0 R /XYZ 81 629.905 null] >> endobj 1797 0 obj << /D [1793 0 R /XYZ 81 609.08 null] >> endobj 586 0 obj << /D [1793 0 R /XYZ 81 418.935 null] >> endobj 1798 0 obj << /D [1793 0 R /XYZ 81 395.19 null] >> endobj 1792 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1801 0 obj << /Length 2288 /Filter /FlateDecode >> stream xڽZKs6Wjli`A&rTʩljahRCק<1=P{`@48Y%8b$Oh*QBv|Ho=8}=S8,3?zor7@$a\a~dαB*32)]lNLvmUw [ͪnnuղuϺF \3d 8b gkVbftI_m0qrI3$Qv0L<_탳IJgf>;1$$'<AgdA$%[;4CŪxq6`~W]Q-/e N|).oޘ"5k!{t!RBy=Ce`?:؍lVM饫}єG#4LҀ1REss.Z}e+eR"SWKoi|TeHAPEN˼w̙껯]`M6.˶+W{[}י#dBI(J"&b2Q1 !FLba8V1lX!2ub0%3;䙎#|qL°לEEg: C*C6LPrM0$>sb2J `,g8v3FHb(L(Ce硬:4G[tD !qI(ˈSg e9q ь B[AԮySktm[}Wɲ𙂈 zN*:c(3s*2ٙ*3TUl6z;f(!ت2{?so?_¢o]y23V \KxM!D)q(r0wL!xՊoutG1P&!)"^ܓ' &"q(HTpt ߸ٞ.S K8Qp7M2Oh bd‰ݼ`̽=sv989PԨΌ!1 ?)DOAE0IJn.s..+MzأkX_ֽ]?*vVaWoQNj XGdAG+蹇=#".,~8d48[(s{a!>8ؒ#"?g9ys{SqDS 2,kk*dj(q^DWקb'da[>GeBk㤲#L!Pp˟,ey~'+JҮjW*cQڦA.Te CIS&D'uᔛ&(1MgsِLvД6@i73:h5> endobj 1802 0 obj << /D [1800 0 R /XYZ 81 757.935 null] >> endobj 587 0 obj << /D [1800 0 R /XYZ 81 174.936 null] >> endobj 1803 0 obj << /D [1800 0 R /XYZ 81 151.192 null] >> endobj 1799 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F46 35 0 R /F85 743 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1807 0 obj << /Length 1840 /Filter /FlateDecode >> stream xYKs6WHMcG;męvr@KLe .HS,&$ vh4hS)"C,:DJe*:EI?&L/]F0Ju8+¬&uDTѱhcדclcrJr(qNs2ʉ0B!"X1ptr |&-r̓/h0viW8w1=+o`V$.WB %J /rcn 7q}|kՐ2߲J U* +EeRN![ʺtSiz~ W}VXCl27Y@L;t"-7kR-G1A#YiˉNo..i4vO}&bF߸`u;4׸1̀1F8o**`wp^3u:aE88dF8ح 1Qm[`8 U"Dpw(O~ v~qIq/TQFߨ7N}_o<퍳RD91 (08h|Q%]T>6O33N!XNV,0H% ;ml. .NϪ/{;*A9Jo]W#1.`!c;^SKt]p8q݄c덩r@(R G{xu) u70h`Pb͠p FKɶw+s(kH&`> >iC*"+>B7!MP3|"n{x'nxOq= {Ppo|VbQO{=Puk/谜x/}>j@:%}`2>Z{߶Hڑ , PŹ@5dkh#z'اD'zjٯ 0DS;6m + ˉC[!pD(TsȼbGuV6S8C' YQ-##맅[v-%`Pm7tD?Wm/<OE(5 ׈TC&,V&?|i endstream endobj 1806 0 obj << /Type /Page /Contents 1807 0 R /Resources 1805 0 R /MediaBox [0 0 595.276 841.89] /Parent 1804 0 R >> endobj 1808 0 obj << /D [1806 0 R /XYZ 81 757.935 null] >> endobj 588 0 obj << /D [1806 0 R /XYZ 81 564.52 null] >> endobj 1809 0 obj << /D [1806 0 R /XYZ 81 540.776 null] >> endobj 589 0 obj << /D [1806 0 R /XYZ 81 341.181 null] >> endobj 1810 0 obj << /D [1806 0 R /XYZ 81 317.437 null] >> endobj 1805 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F46 35 0 R /F15 750 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F44 32 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1813 0 obj << /Length 2418 /Filter /FlateDecode >> stream xZKsWHVy?rRe׺RU䃼Z$V%)73@a; q zho aF>)Mf!Nzk(CC7CG{s7%&WY&uA\q1FROI.: E-C8=B3zȪ]d#F)_䫯ϋpy1_  X<:f#+&"?R Ptu%;.s~F:V%2Me%p!S1y;'nJ XmUfC$̡ϋt(W$' 7:I\?NstpNjIq1^]Oyh6ˋik0<׿.6_$Lۂ%DIYZV8ڬ8J$Q;Q1~8Fqzo>*"']/5lm˃4V{q M:\a9s <њ.TCN12 | Vв( ޏVZ=hEN*UOR!h@waϢ C4aПOpZMD*Ffc^^dO"R%LewO4wHsb0k1g ,xϘ'Hq u4cbhX_Y\UqZX: )EZ.4Ȗ\XAdN 1 O|?5o£tWo>>PKue'!qQ% Q*"Zgƫ|1#QN Enc8Eex],odNHL! >P>y&GQpm94>FKXHe(bRLbg%x?P`7pW]e(OR4AHzR"/=tMkՏ$>,%z5Cj;& as@}Л%\SC"e [6$aJ|Av-%K״"bbo9[7CC?g }V52+q`4/:kuN…o1Al1o1GEcyYt]YSGMZLMob] \YsEoނ@v|Gڕ&Ɗna)wp)C!AeXǔl1#^H+\t(SAr]"UTImNCp˓Us"TKz n4c!<۶͐#_?w$yӪQ+ۨ6")EWr̒}S .룚&})8Ie`)mm>VDvNp;|X6eiպzw5թӴk`3K{Q\@%\OAځ7>@&Av ʥ-xHc7=%$k[\[*n /-qU91 qVުeC.pֳm -K(R?9]MZ3G- ԫL&6ا0*zmVǽcVPLTamΖY7տ/-EO#Ne\PBwE;o:BCFt? :fvG6^tF %sjDg(Pt/-Ȗe l*w|Q%'24aqL/  9i %\?:E<ܡ;}&>-Ixh{~tb9ePN[t'XLE-& endstream endobj 1812 0 obj << /Type /Page /Contents 1813 0 R /Resources 1811 0 R /MediaBox [0 0 595.276 841.89] /Parent 1804 0 R >> endobj 1814 0 obj << /D [1812 0 R /XYZ 81 757.935 null] >> endobj 590 0 obj << /D [1812 0 R /XYZ 81 733.028 null] >> endobj 1815 0 obj << /D [1812 0 R /XYZ 81 712.273 null] >> endobj 591 0 obj << /D [1812 0 R /XYZ 81 387.803 null] >> endobj 1816 0 obj << /D [1812 0 R /XYZ 81 364.058 null] >> endobj 1811 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F14 33 0 R /F88 758 0 R /F102 1817 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1820 0 obj << /Length 2484 /Filter /FlateDecode >> stream x[KsFWH֊y:lmT+:XdJ`BR_=ě L<3_?gͣG~<{Jbd0(,gR(&\ٿέzwӳWqńu4o@G|g 䑈`¹ˤnOgl|sJEѯg s_I$Mva %Sa\JM||ܼߒD+ 87.F,GkL=AG/٢Z% LAv uj"ۮIlc{@l3k?'QU3Mvwa` b1/["[~ff\Cnàmh&9.ʄQ yIK(RJT ŰsO8x2gnl&`FOuLc)ᱚ&og,]E.ɀ7` 8|#V7.>I fw=HrcL~鄑3%qA}m?tM*--횓:iIQ8YAc."=o#> @4ubqY`'ԁP&}6y=oZZU"1tn-!gތղX :S6/?'U(R:bֹDN'0EA?E;EFz@5V_ӛ4$TjjOj;T;* DI: bb.fEWuuxR@㈝}XYo}8WaJ*$oUԃ}#*xBDUív*ҪRLmyvvT[}|m/`଄9qξ<*+fǔ) ɾ)Do=.mT+&Qf1Gq8 Q)pXKV҃/ɃHK);eڗ8yň;ckIYNI!,E4(wzDQW!Yi ?=TG` vn4 68D f%zEWc<^K.fjQf?Y&P endstream endobj 1819 0 obj << /Type /Page /Contents 1820 0 R /Resources 1818 0 R /MediaBox [0 0 595.276 841.89] /Parent 1804 0 R >> endobj 1821 0 obj << /D [1819 0 R /XYZ 81 757.935 null] >> endobj 592 0 obj << /D [1819 0 R /XYZ 81 651.811 null] >> endobj 1822 0 obj << /D [1819 0 R /XYZ 81 628.067 null] >> endobj 593 0 obj << /D [1819 0 R /XYZ 81 279.836 null] >> endobj 1823 0 obj << /D [1819 0 R /XYZ 81 256.092 null] >> endobj 1818 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F14 33 0 R /F102 1817 0 R /F15 750 0 R /F88 758 0 R /F80 766 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1826 0 obj << /Length 2269 /Filter /FlateDecode >> stream xZ[s۶~[~ILI2s'E9JKQq_x.Nd- G8z}ճWE Htƈs)a"YF׿90Wx\۫7?={o 6M*l+컊r$L -kgKgL1"ҔF Wĵ]K"-5W~[`1`1\QגNCdB#)kyN".cCtd7b!m+&v|#j<˛?i`,b/"\~)PߏeMĐѻ_}eVH_6rh0w|Hp` n3j ^x-,F+%7ڇ܊kɨ aUh \*q<[D$J!LI?GdI(X/K!/I KR/ěu0P)u:"ƀ ;fGX %&*,)}@J /Ͽ vs%qbLc ׯ_K |7$t4Ρ S6~<_gKK_}%y\$Kw{$$wW-.0ڇ! h&ffo". S1d #j`1e}aULP4GM4/h4t V|p $i-PrZ$bX??o>[vp]YU%'5qBL.&A=!j 5`4P\"ߟ hC(M&qj1]$]Qs}5 lT0W.ZmŽIWR㽢e] F0P ىϕ,'ڷoPymV!̶wV|LdI:6߾^Ɏ* CX]H_tkc\CícG/:Ѧz/9VO Uʥ0Vxt"_,# $HnR8su>&Wu=ŧ#*k8")rUTkBY.lvYֳ7q6+>%p|N~I}]Huk*SrVAfe&7w' 0:<cTc+vN\E.W[$^v 7S %w ^U_@d55/o-d$JQng,dS=F1%׶]k;ʓhgh6UTV )JNܵ8( ;AI̸U`@OZ#{;)}F nj#h^=tz}L8p1hpj.H_m>FPiypC(i'IIafZ_$ xw7:n7=0KDl[M>"ci,R^AB1˧;sC&1|uHq=IÄvT# e0=_Zp 5!р̡40 )M!>o $ہVvzoNˮ8 ltBu83hCyCa۔lҶ?-ډ32R4gf$iR2 <T7 du9)r>ڙSP'IHLiBIPow8eTLm@T6tӻ8_e"/]v[٣{Kq[( -h!IOC&~`,]gw(̴*/:}S/. ih 4K蠎׈Iޖ^m%6"d@zxBݻ&)M 0B_)Zv>PRM)Bu-{;Xq\{}Z{dROeՒjkEsK^Ź'a ,̓Q=$ ]g(4ݙ[ h$SlQ-as6U4*X F0$Av7Ӱ >l<3P+>/{'Fw9`VD*5vxLC@Ilj> endobj 1827 0 obj << /D [1825 0 R /XYZ 81 757.935 null] >> endobj 594 0 obj << /D [1825 0 R /XYZ 81 523.488 null] >> endobj 1828 0 obj << /D [1825 0 R /XYZ 81 499.744 null] >> endobj 595 0 obj << /D [1825 0 R /XYZ 81 147.216 null] >> endobj 1829 0 obj << /D [1825 0 R /XYZ 81 123.472 null] >> endobj 1824 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F80 766 0 R /F15 750 0 R /F102 1817 0 R /F46 35 0 R /F14 33 0 R /F88 758 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1832 0 obj << /Length 2259 /Filter /FlateDecode >> stream xZ[s6~[~izL:icюR/ !YtI߹;]?\]xYQ$W q%2L$Wz)Ǔ O~j{ ƽI"ڀ´uTɜcT2gi)ݠtu/Mt)ՇjG"$0֬FS?|qY> endobj 1833 0 obj << /D [1831 0 R /XYZ 81 757.935 null] >> endobj 596 0 obj << /D [1831 0 R /XYZ 81 398.047 null] >> endobj 1834 0 obj << /D [1831 0 R /XYZ 81 374.303 null] >> endobj 648 0 obj << /D [1831 0 R /XYZ 81 148.434 null] >> endobj 1835 0 obj << /D [1831 0 R /XYZ 81 124.69 null] >> endobj 1830 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F14 33 0 R /F102 1817 0 R /F15 750 0 R /F88 758 0 R /F29 17 0 R /F61 742 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1839 0 obj << /Length 2056 /Filter /FlateDecode >> stream xYKw4Wx&p)pfNm|HNJ;vn<X껺}WCяף8">#UBzėo?kۺ+A02T us3vWKpY>X!M@ZJ?cZ\Ӌ凴d˫t }I~kabFt.r<ūYE1&"^ q.4H(F$ZIkoB9#jM`Av?n`qQkA#P6GۭY˕>?Y&o-[liD`2c-F78BoFӂ0 z #ʐ" 1D~,i{UF9RE]>ǰm\\nJӸ}_ϲiNF6t`\nX8qVi}j|U*-r?DӬ\A~ߣTAƋl""˳z{gIO'lϞ' }3yHln[J0+a;渞9M˻"{o9z.t_5b=oB桰F(c6JA~_~ǬWw]p S1Lim O,MtRé9s@('54pa˔&qU`;Q+( ٿ_ס "ڤ?Z,ر*D(p1̎'l s30ONyzl)ʌDbf˰pv5;`3Y9 ϦDW0!V 7bLt8<80i8P-Z`bwT֑]kSڰw!࠯]XKZ:/m|;. 'ٝwZ,}rYLjUO؆ʻev}E[2a _ %cul5vЬ@:Y@`[˛A!(. UJH>4&^vK,4Þ|JErW!fΧHbWٶf^w~˪REj)3vjbak FxmZl2F%wKQ~߾:#ⷖ4i^2| 0'phAB-*DWmɡ8JٮFT) 7l'*`Ԫ;6AGhǂ(K*t%.Qf~ ^wn@Վ;~5] Frt[@^1+UwäqIbӲ1z@\zۃ)SɿʝC n]S.a |K#k'?> endobj 1836 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [272.368 484.032 299.211 493.617] /Subtype /Link /A << /S /GoTo /D (cite.HP03) >> >> endobj 1840 0 obj << /D [1838 0 R /XYZ 81 757.935 null] >> endobj 649 0 obj << /D [1838 0 R /XYZ 81 587.788 null] >> endobj 1841 0 obj << /D [1838 0 R /XYZ 81 564.044 null] >> endobj 650 0 obj << /D [1838 0 R /XYZ 81 377.064 null] >> endobj 1842 0 obj << /D [1838 0 R /XYZ 81 353.32 null] >> endobj 651 0 obj << /D [1838 0 R /XYZ 81 152.132 null] >> endobj 1843 0 obj << /D [1838 0 R /XYZ 81 128.387 null] >> endobj 1837 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F85 743 0 R /F29 17 0 R /F61 742 0 R /F46 35 0 R /F14 33 0 R /F15 750 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1860 0 obj << /Length 2308 /Filter /FlateDecode >> stream xڭZKwHWXz?OfNO۝0"]zsH!n#1\EJ(dnf/cG lܝT ȭ!Ug?*p&L -[t3OI<_e*3;#"VE/))ܩ*?W7c"FDŽ1J/5+/4w6hѱĄ 6\ 28iZt/WeH$.["g&7EKd> k&T8.-`rWjAɖĀp'1C2JL/F$N/Szw']6aH g>_='IM4+zDkE4Dg@"bh^m KDB`%}>HRmu ^9SogFP$$<.np4DKG">{6,s.H!"HXBэdM")  *O _( <8Q0ۏxHzG9Rm!0f c?g|.),&\_]!?~vxcznJ b*cp|Ha՝uZpVi*,zA"Gg BkFX|W Z+~'jHDh{Dڈ}wsNmo a)㻿B$xOon.[4뜾x.ҩ/ O4섷 ݥeM(m􈭋LqkvZp;lVTnvŵbCk؀hh^1iIp&/0Q0mCl1ԚKq掞7 zN-3hQq^e8p(3XJz}bժl[e(XX:hԈ1X@3$,zlFo}2Ʀ&l͝JL,z6 ySj$n,@ܬC,8Gn62c +8r[xbв0[!q}WެK`( 9 }1 03#1 >lG?r[kECh- Ѓi=6S0H:Z3@NO 8=[ B-;rKvJ aj;eGPde\4h$r<@ N8zy,*V'g@L&7?qˁ5h)b-΋G?Kkt_ݰ4#U˦׿18RŶɘִQZU"ΨRveZe,\34"ZȨ̗~TífZevjKR$}|*n?qՋ$%d6뀛L(D~< \>="~١,6琢/IY%m55[>UKF-g2.fdbt$f}\0Ρ73/lb ܗɞ.azzY劖c1Xp6vyg^,Ha}\q;۳_gU]{їVhߖbBկRmyl5 ABdM7v6)J{ݤ F}%vBɷbJb-,}Z-bK¾,u$rt"_;ʔm.}pbnwi3%{&]ՋpxƚHgXV+I̘AMtŋ0 0vu'\M3.땹;:cGt I*V1jE?Vqx [j8B*# &LÝ1~)]P 0B8? endstream endobj 1859 0 obj << /Type /Page /Contents 1860 0 R /Resources 1858 0 R /MediaBox [0 0 595.276 841.89] /Parent 1844 0 R /Annots [ 1845 0 R 1846 0 R 1847 0 R 1848 0 R 1849 0 R 1850 0 R 1851 0 R 1852 0 R 1853 0 R 1854 0 R 1855 0 R 1856 0 R ] >> endobj 1845 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [448.962 250.282 472.773 262.076] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.1) >> >> endobj 1846 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 237.158 107.447 248.527] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.2) >> >> endobj 1847 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [187.665 237.158 211.476 248.527] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.3) >> >> endobj 1848 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [286.13 237.158 309.941 248.527] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.4) >> >> endobj 1849 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.402 237.158 390.667 248.527] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.11) >> >> endobj 1850 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 210.06 107.447 221.428] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.6) >> >> endobj 1851 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [225.672 210.06 249.483 221.428] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.7) >> >> endobj 1852 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [492.826 196.085 516.636 207.879] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.8) >> >> endobj 1853 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [231.017 182.961 254.828 194.33] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.9) >> >> endobj 1854 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [439.816 182.961 469.082 194.33] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.10) >> >> endobj 1855 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [470.995 168.987 500.26 180.781] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.12) >> >> endobj 1856 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [125.309 155.863 154.574 167.232] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.13) >> >> endobj 1861 0 obj << /D [1859 0 R /XYZ 81 757.935 null] >> endobj 652 0 obj << /D [1859 0 R /XYZ 81 550.741 null] >> endobj 1862 0 obj << /D [1859 0 R /XYZ 81 526.997 null] >> endobj 653 0 obj << /D [1859 0 R /XYZ 81 309.962 null] >> endobj 1863 0 obj << /D [1859 0 R /XYZ 81 277.819 null] >> endobj 1858 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F85 743 0 R /F46 35 0 R /F14 33 0 R /F80 766 0 R /F15 750 0 R /F102 1817 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F88 758 0 R /F28 16 0 R /F44 32 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1867 0 obj << /Length 2456 /Filter /FlateDecode >> stream xZ[s۸~L*m-WL&I;{nݙ:y%f#Q1I\Hff`sppoWg/.8 $"6 #e D*]c\os>]f"ٙT "kN3XQ@zSB & C;K"<G/ ^ 1Ǐ~s\7_4aKx,(fqt k1Õh)xrS"|iC 1CHlEa6F],mVhf`E$D8R5|VHVY1ԬO b"!CH  ^kJ,';m6L6q_},B\5Ql69‘\۝#y fQ)x/1Mm\ȭpz%c`s @DU]Q_{[\1pH.2^T[+9C r=6?`h5JyaVꀼmGVr= cAK+a"|Dھ Vrt 7`Acin> Tb' MClIr+Ļ1ИZ6RYB"MHd6~ya(lm6Ny|!P(*U5b+JC)_EZs*fhۛfe_,f0:[ L;y[</bY_ZG.tvlҲ/ä[woWkz2s`V~O9^uo Gbd% /@^v4۳7dv$cd~D!#1plΣIKJ PfNlhAֶmUNkKHgޟ1 6uVWmEW%' -g! ٴ, x}w}.Q$89ؠcdebܾ[ۦk"MSFlݻyR֥ gδa Bvi.Vьڀ%L>]E! хA`@ rV_͗u "uStH#h`utR )$"ˆBq=0ƗDH*]C}=L_dٹmmX?[a}$d \NT̝ :exF?ؑΏ9ZȾ!^XէI`HjEȽ?g8Z#ON(Qst-`_GNSّ ѣYX55-f_S~p8„v#[ۼ|mҙ[ԡ^=wUWpPi, d(]_qwZiɰ;dL(w%X|~2Oڳ>@Sr[Yoﶛ8LaG߃k'AG .~ncNHYqpQv}]EM MGJ^E; e-M3Z>>#!ifϋ$x H2ZB0FP7I3{ގL߇HI0chAN9@BlID۾$D0A<1:zjḇꪋc; cЇQDr2'5aGcЇCJVB,4Msq >9>L &)oC"Ξ9 io<}0)CpX$N#]K^͓ {>W&ʌC{hg8HO 3W"4ٟV&aѢQ^2S&mhºʖd6=@N8 fpE/ &.鈥KWLZMbi8#Bvuzxzt eg3Ni9o,|xZO\IQ&7.i߃?pԐwѮ,`-x3y; endstream endobj 1866 0 obj << /Type /Page /Contents 1867 0 R /Resources 1865 0 R /MediaBox [0 0 595.276 841.89] /Parent 1844 0 R /Annots [ 1857 0 R ] >> endobj 1857 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [304.124 656.785 327.935 669.687] /Subtype /Link /A << /S /GoTo /D (subsection.7.5.6) >> >> endobj 1868 0 obj << /D [1866 0 R /XYZ 81 757.935 null] >> endobj 654 0 obj << /D [1866 0 R /XYZ 81 733.028 null] >> endobj 1869 0 obj << /D [1866 0 R /XYZ 81 714.538 null] >> endobj 655 0 obj << /D [1866 0 R /XYZ 81 415.443 null] >> endobj 1870 0 obj << /D [1866 0 R /XYZ 81 391.699 null] >> endobj 656 0 obj << /D [1866 0 R /XYZ 81 168.194 null] >> endobj 1871 0 obj << /D [1866 0 R /XYZ 81 144.45 null] >> endobj 1865 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1875 0 obj << /Length 2699 /Filter /FlateDecode >> stream xڽZYs6~ׯ [u^*UDqbp$nfZ7 ht7]W gBD1l#1\EJ(dn6ߗ/~\*xO?#I"]7pj{]0tkRњ c~{ecS( yR>bL/ďYX5!1J.sIY=eI‰Ye~6~vԴPN(Aꁖk> Cr;_H_F!,Y& O_&f*r@eI>i ybEJ(J a dH!Ih׷W0V!xA ҘV\jٗv#0X_vUnfG,]0f(A l@ݱ ]qHQFFUw-Ӄ-9 >ɓQsn)e-PžVV.m}{Xt2Hdo%EUy[ΝvЂ-F])(˱@I/<pHY5| .E@l1#)M eW0JD(%ypIBupM`1qF4[\9BH\BSqX1 Ws+^daUDTc+v$k*kaEb@7}z3 ^"?TS{goDݏfdx!;¦q!Fͬ6JfgEY;ԾZAB9TW<]Y="ۇA5|.,n%ٞƣXQpW/I<([%6&[<%sn*7mopW9b]ϻ_pByMqm3˼g)NmyˀUV1^h1>}.cX4 O\бaFc:#(˙Q&pu)6S.&-n$*&`W3Je~l/^e/qd $5+p If 2w2[)j&pkCMٛ+tk56]&0!x& 5[MNibMPC2&0z&.MLc e0؄=|RSyq&&1ԄTHy bl6O[MLc G@5M"ejCHIQ吐z$/n*خ ^5z!ҝV!Ͼ˪L5]ơAb b"vs 5<l[bS;!gPW(YTtF!Iܞ@ CTvqf2$^Q6hߏ<di/ZpF|iMvn]԰4/i 6~hPoufQEL:,>.Vt(˚Go+4Dy7A*ٵ1CNmgqvf5)-j@~[x$D;>kDt;zs6o##-X ?Q{uܫ+z&.@-(1shb"e³E_~js)bG&뢊Y  endstream endobj 1874 0 obj << /Type /Page /Contents 1875 0 R /Resources 1873 0 R /MediaBox [0 0 595.276 841.89] /Parent 1844 0 R /Annots [ 1864 0 R 1872 0 R ] >> endobj 1864 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [256.908 705.162 280.719 716.956] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.4) >> >> endobj 1872 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [459.81 417.785 483.621 429.579] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.3) >> >> endobj 1876 0 obj << /D [1874 0 R /XYZ 81 757.935 null] >> endobj 657 0 obj << /D [1874 0 R /XYZ 81 550.848 null] >> endobj 1877 0 obj << /D [1874 0 R /XYZ 81 529.369 null] >> endobj 658 0 obj << /D [1874 0 R /XYZ 81 212.468 null] >> endobj 1878 0 obj << /D [1874 0 R /XYZ 81 190.935 null] >> endobj 1873 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F46 35 0 R /F14 33 0 R /F85 743 0 R /F29 17 0 R /F61 742 0 R /F15 750 0 R /F88 758 0 R /F44 32 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1881 0 obj << /Length 2586 /Filter /FlateDecode >> stream x[o@?:؛}?.Iz1rkm:JKu$U>H"M4].wٙ٥Go/|,R(FyD5FH ,>8~7Q8DOo> Ưm[C8.p`ů8"&),./q4w?E1'7sigd藋z 2J˖`!ai<ɕ 8g,gJ00X( "BDP4&/*HP*T G[aD>&?x(Yl5=`a:H+ ɀFD!^`~X*h$Qc%T!GT̿HQ8\T U̿HQ )T`i0D;}E>/&jA̱՜;RAK<>Q X -ǿ]_DwWqqJV}PŲfHX=Gl,]Qx"1!iYm=/bw6a /fY:X@|4>2]dgoVj  C@Y ;6+M\&ϾS}I*K %% O;\|G|=tlZiȬ $njeR߼\2>‚f]M5a*U/@ 7-GI2Wy X!˧_}7iEاGIPmÛ5tO Tzݞ(9/62 챎suQwa=҃P[Fa2>ޒG L)[xw]͎jPmJiӰVӗEk՞tD ιj6d(~j˳|=OVYճ&W\Sy6 <E= <$e^o!vlJ!<(6@: ${L q6$NUZr!KSZ,7Ub50cgth)G"%( 2@Q- } q (w$4AlbfD .^Je͆XoҳH|C>P^0ڄ*!gt 骅YVbe:X :m*Mg<;+,e4 ӕQTϴȜ w_7[ohP DFB`3]uS@jN(=/=-k o@UI\XiDpeK |Ǖ00SP.s;$F*mkT:NP+**(Nq|E^zʋ ujObeG@;@:_{/ݥ)&}HuOb% Cq렙'xX9{6dqp{ r('ezd~LL2ƇqrYR&[瑈vYKUnOُ;Q hr Sަ.,t> z& %lZN2e-fjGn$ˬՠ$bfHꃪ_=ƕwխ3Ӵ,b=BPbҜ1(j^@3yR"VK,reg/aݹJ_s D#p7s7Lm`\bC/\ o L⼫jtaGA$y:1~0u@l('lE >/ Õ)"L z-xǿӶœ}%m]>_ ٞ+#2X." Z ^j_̻ nMƐ_TcA!l8]8]HF/ jjLoPTU'k{=)}tLU,gWUhAFQS8w7*y&9ӕ51.Hc`9r}c Ջ@@R㘑h6O9wL8F;ȏNc0}I-"EoИ 9DS9p,pB5X'ڹ׉SzNr6s0]8!I1 #T QA%},7>P(`Bz7)49g3p?`,prg1IJPh &#;h2Cs0]8hR Gy6 h &md$)(0y>d>`,:p(1#i4$_Ӄ`Fsښ endstream endobj 1880 0 obj << /Type /Page /Contents 1881 0 R /Resources 1879 0 R /MediaBox [0 0 595.276 841.89] /Parent 1844 0 R >> endobj 1882 0 obj << /D [1880 0 R /XYZ 81 757.935 null] >> endobj 659 0 obj << /D [1880 0 R /XYZ 81 629.648 null] >> endobj 1883 0 obj << /D [1880 0 R /XYZ 81 608.115 null] >> endobj 1879 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F14 33 0 R /F15 750 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1887 0 obj << /Length 2308 /Filter /FlateDecode >> stream xZIoFWpn`U׾2A x&8:%&Z[H:U$EbP\^}%=G8ջ"b$zxƈs)a"zXD&?L?M=V 6n%ht5s; ><\zEG$c"E4E G xS3:Z\!eտLFI$AJm&SA2t 9ygUQiLޠ:D1 v%c*;T:뢧Ni8Ni4"Œ?F9\}uj$yE6.Q$T'ALvn5jN*jT!K/vo}{=N 8X|\\&E/n&Tě|įÎ-yw#;GS w9n~X w\/X`B4W=^O54U J®H1v~z]lW4Z'>e QW!lLXPi4 aMil)"ΞBK`]s" .`vqrO5T@J6U6g Y,d힕/IYI A4T4% Wv2"vpw'78KeV~sWIgk8 **P!]bIѥp*4 Q"(JR0hcJ Uc(cľ! HbqK: +!w]KuT[]^G砖q394 ;_"'ʳ҇l :B%fP52] wH$:"pU|hj@&"S!t WH͐J6G11 )&E#'2(GTlCs \@fr2+_L"ƽ Uۏ>ުk7:aL81HoX5=]c4l ;j_4op=cVzJEzʔiC6ZWgr}5G1Z# чQf'5 X\A-3]Kb(K0c3Y$+ْZ<,DZYnG8ms^@BO ;lNaWeq,Fξ:kD;X;>V3l[ sI[Mm47i=M;5+_:sIխ6t9FSB.th7f5*ouL@-0rn'!e &-.w ftD8,gʝރ5(]us5{޽ϳuC'lݝ3yOORgtN %RY Z_X9ɾD /33`H\ ᰜˉx8 M._o<וwN':J(Lܘo3\y8}95Fqed]W>C“<ɾ <\@Bնr`IHe6O?8 M.m_g|j!IF͛&)j8ѧ CR=ɤ˄9@!'v("PKz>7!X0i'=囕u;^(пmۈ=x[QodBaS:p2K" 9mgutqW,HHS'Nb &߾dE0ZR aRctDAw`E _Yy GPiL@z$`d;",wrKq$ˮUmڙ>d0{"uܤ*U`KZ> endobj 1884 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [489.193 584.655 513.004 596.449] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.6) >> >> endobj 1888 0 obj << /D [1886 0 R /XYZ 81 757.935 null] >> endobj 660 0 obj << /D [1886 0 R /XYZ 81 663.521 null] >> endobj 1889 0 obj << /D [1886 0 R /XYZ 81 641.989 null] >> endobj 661 0 obj << /D [1886 0 R /XYZ 81 429.972 null] >> endobj 1890 0 obj << /D [1886 0 R /XYZ 81 408.44 null] >> endobj 662 0 obj << /D [1886 0 R /XYZ 81 260.981 null] >> endobj 1891 0 obj << /D [1886 0 R /XYZ 81 239.448 null] >> endobj 1885 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F88 758 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1897 0 obj << /Length 2204 /Filter /FlateDecode >> stream xZKsFWHqeiǵ&u(Hb- Ӄ I@* ~ΠGo/~x,R(Fj8W &z)ǓWS'\7F&htwv.Y|AG$$R"*u\\G1/ŪMDB d:?NZ&#Iː" -%+83|Z'WF9a/:"DE% @V*0AF 4 n`#u{?c:O.X`wdFoftFnn^tU_Ko`= H.P4;\;8pGJ0f9yFofQ >Oyf'A- *º(VèVv[+4]ggr?*YYnvڛ ,U0Ho0XWcPeg!2^ަ$nM k^:9mNc`&N}0Z_aLq4fEtKes=R`A}!89* 2}Ns>Lx5&6l9XB0 :-1CehuV`BB1T 9 UW!.W $2bѮDGp),~|~ GM9pZ*KCP$Sܫ 3٭6uSֹ̡jW>6[oR: C׭vIbG+s3ZFDs 7w<ࢡ`pe! ޅnDEb܈Z^} [&?Ƕ 9alL!V}@!}-Y`T>b,cJ/ZM`;S3IZ\±5HmYn(Xb@IG L8Tz繰H3$&cn6q iDc83o_9ࢆKGGtluIjCwɝϦdݸA.`d SV<31TNi(":ATfot,$#t٥e?+TDĠL5/(Yr,$3]:2OS$v($ߺk.GG?Xcqt, CdtΈIn~)(DƧu,foO x%;x+WSS7n\r".9Ltठ!a:Z*64W7Jݵː-29"}0a(/͐Bf "oi,vdUc,LD1TiG}AY"u`mX[{nßM~+"CG1dz-m-Blp'WdJ||w;޻EۍIkGY%SvSm$잛̜Vp}T7 i%L "mvI)K i>`z{)WQ^XƩC|[NEvLf o/T9PMhAᱺ'1+:\z_@W߲-:\f6a߼-:\d5Kq6Zj4$3%j;ղnǠ:q `;{y}S=w1jzF  {JvL`éin1IӈrszÉzc0_"8pR6H'_o̖pHVwyAG$#̰ nHv^bfFU1(w{Ù@꬟VAB%65m`ȦkK)ivtm(ܵ5_7\!,y-7_rN 9H7-3{Z2_{~c-C}W&e5 dnQx^!_ endstream endobj 1896 0 obj << /Type /Page /Contents 1897 0 R /Resources 1895 0 R /MediaBox [0 0 595.276 841.89] /Parent 1901 0 R /Annots [ 1892 0 R 1893 0 R 1894 0 R ] >> endobj 1892 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 536.098 112.902 547.467] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.10) >> >> endobj 1893 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 350.752 112.902 362.121] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.15) >> >> endobj 1894 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [489.193 172.826 513.004 184.194] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.9) >> >> endobj 1898 0 obj << /D [1896 0 R /XYZ 81 757.935 null] >> endobj 663 0 obj << /D [1896 0 R /XYZ 81 522.101 null] >> endobj 1899 0 obj << /D [1896 0 R /XYZ 81 502.505 null] >> endobj 664 0 obj << /D [1896 0 R /XYZ 81 147.216 null] >> endobj 1900 0 obj << /D [1896 0 R /XYZ 81 125.683 null] >> endobj 1895 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1906 0 obj << /Length 2636 /Filter /FlateDecode >> stream xڽn=_ʀT@ZLg1;i_8r"Զ23_C#M>)\x.<8zp/W?,R(FMD5FH &ۇ.~B_ mzVؕT ۬!\YWmpcTbi)횛_?| rՇr_-VT85 yUہbc!h1 hB)|Ph'C~ -$cOvCZ{ O$F,Q-c d\0n;Wv݄Fv|kFvg 4<3s#n$@({9P$(!g a$=)A4".SQelYoΦ,v{j"=o9! [#I& j&h4> PTCv|vme)3GˁhGv♤ޠDuHcrcVV(Pr.Ma%p\A$1,>P)bUֶXY,( '?_no4p2NW3q_ycF,ݨat]7@ܯ3d9{̍ŊaٜAfw3Ծf|+;XҦo없\3P BO3nD 1 )w2KK&-gp8g nX-_mʜ0Cdl*\j2ttzEy&VC3Xe:>tdDqgvg|r**@>(.#lZ #ߜq}|;n.aqd]cRKG hl0=Ff_2߹M]Q40lTG,ڑCu+*,;ޚbtLnTS^S0/ҎUgSQQ0;Z㐟NlIc1 %⚟ 1_bWuyX7RkDO$Ƣ;5+eϏE9G\^qѐcoYmG:t_G0:p/#D\`xi/p0ɆlGuv<*DвI~Lc~O1s Fi?FD#G9@\ֹ13VٟyTHW } z&4(GB doJ[.Zh[eEcthEf\UkbȕQpwW5⣋;12e>|{4vDlB=ZqÿD>/ͤ`a6x{- HR͵!EtM ;G$IxJM<1y  u)&%8‚[>?-V6clmm߼{ Lo`/% ybل^'7kxrg 됶Cێc dO01@ YG蘰T֑:2$&MzL!:Bd(!\>ymN9INp92!I&\c;:tՙG!D1y 1EV?N|$}:2:X>lu'P8=Bp^F'9\d8]1=Bpk2Ki uN5:quN9l͙O!"&s :or|NfS Pe+H$s>Fϧt)w'}?cRbӇ"K$M'hp|H&HztZ\B!J66~p>z>*(_B*1ٖ36V ڬ(9o 9'LMU).N\J!m5&)4M΀.`Jm]Eͼd^QXW&Lͳ>5UQteao-8=d_epG |_P31Y?>#)CVg.\iyMm@qr̀<`O}][ 4XBu3smpVY0 fD)}T(6 Ar% f,-ZM!$%f甑Ǖb[8@b8p<&afb6o0P})E?]T65dX 0L wll ^cBDR]Ax.ݑ%_%GϧBul)1b다()a]xCBɫTAhZ/u .6#躶Vn]YwY$4:-V5Z`6W@Ř6!Vy)c:3܁3X2$ Ll_c5=.5C]Tf&^0> endobj 1902 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [335.181 596.768 358.992 608.562] /Subtype /Link /A << /S /GoTo /D (subsection.5.1.4) >> >> endobj 1903 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [480.461 107.052 509.726 118.847] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.11) >> >> endobj 1907 0 obj << /D [1905 0 R /XYZ 81 757.935 null] >> endobj 665 0 obj << /D [1905 0 R /XYZ 81 359.842 null] >> endobj 1908 0 obj << /D [1905 0 R /XYZ 81 336.098 null] >> endobj 666 0 obj << /D [1905 0 R /XYZ 81 199.468 null] >> endobj 1909 0 obj << /D [1905 0 R /XYZ 81 177.935 null] >> endobj 1904 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F14 33 0 R /F44 32 0 R /F88 758 0 R /F15 750 0 R /F29 17 0 R /F61 742 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1913 0 obj << /Length 2266 /Filter /FlateDecode >> stream xZYo~ׯcxM@Hry>U}A6)S$a꺺ꫢhT7?0ǂ[J4Q8Y0Xћ-}wQ ;":0iFQ?z0m1]<| *(_=բ`:b^|GV bh?^.VKH\H} s0z-8q} t]!@ظ:́1:@'h ?࿧rD1:9<:~_?|[ímgv`vNig s0!2|dSǧuJDڕ{T,ӠMG]=Q XN:}AVtvܡ t7Xu\u9F9"9b m׻gK(`~ vӻd]$Rs2>3DzL`;1[?F)}X.+:z5ml6z쨚j74"-ó rV >ńc7 8|SM5)mHS1l(aô<>GƯPm\.ݶJ;m|#Yܴ _ͪiܭ &1ToP7(G z3m@K8#|m6lM7qK LVyEcuSyT:!$K^}7u{2г("x$ဿVu]/gi :Rܭ/e@|0_MbCD30<1X}Ԏ>X5.XDNŋ;OQ8^vx\gm7 Hwv}).𼎰ZMz(3xO5H*xͱWݒcEh=4hMW.mpR*c Lu`u541ڏ J3p䊜1k B;V4D@E^}D An-+@h8;*# dP&h TlCףz3zF K&Xi2H}ԧAj|Ո-52i4pV"39\囹G:'_2SO@PzVT=]xJ'k0}-OAx֐71H*jj@H-M QTH[ HÈ^6 ܽkO' Hͯ.Ж:LDщ 'HdmpA Y(Gԅ@R<Ɉ&߅jz=ᨤn;g/|= %,\e tR2xܯ\, `ZL3wC Sόe774sWPb'>[dFk$EQb7vpt'2hZO~V9V)霝l72|}aQR?a ɉJiz粲 k{KXKŗCڇ)mQ 8j7z#z1a2t.іf=ak"$z[[{%"Gh> endobj 1910 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [290.558 567.901 317.401 577.487] /Subtype /Link /A << /S /GoTo /D (cite.GS85) >> >> endobj 1914 0 obj << /D [1912 0 R /XYZ 81 757.935 null] >> endobj 667 0 obj << /D [1912 0 R /XYZ 81 638.922 null] >> endobj 1915 0 obj << /D [1912 0 R /XYZ 81 609.433 null] >> endobj 668 0 obj << /D [1912 0 R /XYZ 81 551.58 null] >> endobj 1916 0 obj << /D [1912 0 R /XYZ 81 531.75 null] >> endobj 669 0 obj << /D [1912 0 R /XYZ 81 345.142 null] >> endobj 1917 0 obj << /D [1912 0 R /XYZ 81 323.61 null] >> endobj 670 0 obj << /D [1912 0 R /XYZ 81 187.863 null] >> endobj 1918 0 obj << /D [1912 0 R /XYZ 81 164.119 null] >> endobj 1911 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F14 33 0 R /F80 766 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1922 0 obj << /Length 2089 /Filter /FlateDecode >> stream xڽZ[6~_ A2Mn! W3,ٲ3}KsxxGjpt۫8"vQ*RB!Dt>n=xv=Wxvw_nyF 6~$hr1k UoowEG$$R"*uWh D1ǶWpEe22H* )R"^oql}Q*sTMGĘHQ8ت19CBgiB #7px|!ߔeLIbM|X`8M4zεQ!݅wljzNvp#i (% F#Xvtl k^gn4اќʤ&xElN H2Bq?}4|* CVq.]xQ:!aR ;9M8ZPx"ː]PFx;H p*ڍ|!.zsH}3 q? Mb/]K]pۋ $t«M4iYtzv, C0!2>qWTE=_Pg̓9/ cJ;XNu+\M1뱟hV}Ǵy*[mk)l樵fFV0 )/S6H'ֻghHB+Y J N%ҹPd%kݮm4.qX{u>!.E0!0^bp@a2q V"->Wz}^3s~۱oʢn9;ceJ<#~eC$\/F}ўn>=,D?b*'HB-=|<_'\Yjh }b)\TTvU4Jy;DeT 2]"D01 &>$R#7cMAh`ή}KASYf^$ 71fҫ_yXvrվ9E82т6rݥ qԬyC:+Cs:?I9'b ؁]tSY!p6A^YXd,/Ʒx!A\T1Ȼ졜{cZGź̭.(Xdia߅h:9AowrS,[)5PV-RS~B-a>dX4deSXr HV5(r;ěYPüΩ2n2_o?V`ݸ~4a!`nQ'f x1h hIׁdpM6zE+'%!jU=,mC.HwZUdXOxK$ʸ `-Z }钣 gcL;p~z.j܂o x 5:e"z {qYdϗЙ@5"" dv~?sO$z;@Z)'0PzGcr+GˎR>莟NMfY\r _G]޶G9aeyh b&!BW(Iٮˠ.Ǥi3<8 Gϝud$50I_@\*}vW$Fx:Gj8D ti[cD+vCaPfXt(gDz-S>c~ er,׵eIY~퉀jMgY/`d_j_䣛48M?[nz~Tn:sn΅-{Ił ݏs ; ֆ?RHGQ%FsvxdÛbcD1fcCNYyڑ. [Yh ]0M>(G$Oȕ SҀ󰞥~D^<YP00Axļ]F-gńPh!~io@->>^O?L(g8Q`\OX#a]$S#s(N z}`U+3E-^ByO )B1 endstream endobj 1921 0 obj << /Type /Page /Contents 1922 0 R /Resources 1920 0 R /MediaBox [0 0 595.276 841.89] /Parent 1901 0 R /Annots [ 1919 0 R ] >> endobj 1919 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [488.888 368.75 515.731 378.335] /Subtype /Link /A << /S /GoTo /D (cite.GS85) >> >> endobj 1923 0 obj << /D [1921 0 R /XYZ 81 757.935 null] >> endobj 671 0 obj << /D [1921 0 R /XYZ 81 665.577 null] >> endobj 1924 0 obj << /D [1921 0 R /XYZ 81 644.045 null] >> endobj 672 0 obj << /D [1921 0 R /XYZ 81 486.055 null] >> endobj 1925 0 obj << /D [1921 0 R /XYZ 81 464.523 null] >> endobj 673 0 obj << /D [1921 0 R /XYZ 81 295.871 null] >> endobj 1926 0 obj << /D [1921 0 R /XYZ 81 266.447 null] >> endobj 674 0 obj << /D [1921 0 R /XYZ 81 194.375 null] >> endobj 1927 0 obj << /D [1921 0 R /XYZ 81 172.992 null] >> endobj 1920 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F44 32 0 R /F15 750 0 R /F80 766 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1930 0 obj << /Length 2155 /Filter /FlateDecode >> stream xZko7_11|Ӡom|~TƶiHr 5R08|\^{ie4{!]fR"Ɍ2$*eWKohu>^-%9CK9m]3Z $D "VP龘;r"{~UfkhwkSv)Z+[C8ϳ𼙍>W>C|TaC0!+cSfQx/CO~@I[$&A<.>1ьeeqyLϮ>l3JDn'_k#H糟S`H{y8}Q֙ce1tt<34'˷q{P O9 +{4R!jPM@mzOxg,l~M oMiQ.VSz=+_uް՛j0>.N@&mw8wka֛߰ ǟ}TR#\IP1]9kΨWx"EؖlfwadZ(s.p:w&{"sO*-/B+lobʚp GtaCkj̶֎D)*̊;]' ȣm"<0;_ s5`gx7E%bUK:jEG/ti6*{)'h+`VzPαq4k0[f' =RbuD},oYYX!>@1ed%,ږ s\zy|lMILVv6<DToR\ fٞ"PƆnA}Nwcpz&X2l*\sX"GqX_ =@a%Vְy6p|Iq3#CTN59>!*s+B-gfzW@UM |xfu2S.w^r/w2]vf%H*Uh+]Βy ) bE{UzpT^3T!BZfe:[=' ~ ݇pZ}j1o"è[6&iP%-rkcv(Mir9Ҕ`_;E[buc9^aNv<Š7PgrWW^yV?^yv̞*XrOuDE**)-SLj6s̺HJ>~{<.T"ƏWU'gm CWLqUUiS-M^|\X}~68(iTÛ_ d<..Frq4KBgOm6lԅ"WmGkޥ 2ǨAU)&݅hO}ASWr")B4ۊWW 6jv =) L[}EӪO" wkŴAN#y\_Ԉ=5#wr37O6Bcܭq U'˜nLxS㎐ ; : KU3IE\ nGw*hQ.lhM-&((xt WGs<OqwlOEh rC*yhmgt grc M l:GYwJ?Num,5/QUoL& 7*~\3BQd$Y]4ܰM?>ɩ^"@{1sكt- = { ag>@6~ ^k$a#7҇\!z '@R7#W|V.2DD,;,f "3)+W54MDtjXjmFAFMGe<> endobj 1931 0 obj << /D [1929 0 R /XYZ 81 757.935 null] >> endobj 675 0 obj << /D [1929 0 R /XYZ 81 630.691 null] >> endobj 1932 0 obj << /D [1929 0 R /XYZ 81 609.159 null] >> endobj 676 0 obj << /D [1929 0 R /XYZ 81 402.655 null] >> endobj 1933 0 obj << /D [1929 0 R /XYZ 81 381.122 null] >> endobj 677 0 obj << /D [1929 0 R /XYZ 81 224.918 null] >> endobj 1934 0 obj << /D [1929 0 R /XYZ 81 201.174 null] >> endobj 1928 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F46 35 0 R /F85 743 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F15 750 0 R /F80 766 0 R /F88 758 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1940 0 obj << /Length 2625 /Filter /FlateDecode >> stream xڽYs]뽏zܙ։&ik+}q$~{ı$E̓b8߮^]r(D#MB5FD , 9vW`d;@D3PtuvF`h(J:.>} N0bF'n"!F!4d|< #2PK x?}waaeJ]1&Q N(2 !jLАب d*@Ñ r^~_Ojbtbm&مs?J+ D@u yHX@DqL3h0%'9D#9!gy^ϑsl%XI8\ڰWsCQQp@G#@h+k7J \Q+< *$$!ޅ#/Iûӄ`ӏwy}NtU^zMWKp2F'7e9&8 bnJ!mHU@*%' ߬骨fG+! 34 a81;`[|ns;4vՍfu6w?fzQԢԀaպ|Ū'?ŀ6( p&qBgᜈ4zyMsORb-INk0pAbp5iW2-1IY`ճc㩻b_HO&,gkĤ:54@鰶]Y(m&frܓkz10F0ԟWH mxyYCk6pxHL;yR$=;kuBNrGoGU:UT?vG ͊Zx V C?tי0yߤ1,2˰vmXe)$Y-7kz?g*!e H3ۀC0t: e1@k DLBj ∂4gҿTafwFjF 9;pQ>[,`UKp#v>Vf^ s!dm9N?QeG֏6+bXce>!9 KZP)`߳5B]|M91@ yM ! `c™rNsj@:1'ǟDAbLޘC*a9jh22O\Py>bq_>9뱓.9 D(ћz\juY F0.)^;t0c9a e>D cǶ7ָ7i5iųH@Nr6{MIZttLUc#@hvoq:&L7:y@:{\Mo?ICq-\M> .>E\ctߧqX8 ujKb(l@qC)3HVDD3k oΪ͑QBAX@1~;{=xe#zҺ]],]j%xA"2SJZ-V|.!z,_vAжU.;sgeUNJtqYƔSU[haYFM`Nۺk)Ydee=1B؎>TԤz&,Ћ[P]"ki?0#m&݆K1l<3P>p-@,]r?xÝ%|{dMg%?բ$X$Ĩ].PZ^7l&R:"U%p/'JùBP8AG;WSuJIG! &HkH@xFNэg\D N0a-]Iq"j EΰcH'EFVA΁NoFbm A>' *1uy.t=+ǘ{o_'Pz:U,jXzDp~+߈~ :zcC)oMõùyI;&?ڇN# iX өy÷xNⱴQҾGJ ku׫"4{B[eu3l9j Z7:\ZnѝY bl[S*j~x&GMb0:Gh?8MHGAE{mGnv̰uK$LѐT2B5x,q ǵc7mH.Զ8-ӇCx`F"gͯ)R >tss$# Z?Q, endstream endobj 1939 0 obj << /Type /Page /Contents 1940 0 R /Resources 1938 0 R /MediaBox [0 0 595.276 841.89] /Parent 1901 0 R /Annots [ 1935 0 R 1936 0 R 1937 0 R ] >> endobj 1935 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [175.381 549.096 199.192 560.891] /Subtype /Link /A << /S /GoTo /D (subsection.3.6.2) >> >> endobj 1936 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [158.691 278.535 182.501 290.329] /Subtype /Link /A << /S /GoTo /D (subsection.7.3.1) >> >> endobj 1937 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [184.839 205.474 213.504 215.059] /Subtype /Link /A << /S /GoTo /D (cite.MS83) >> >> endobj 1941 0 obj << /D [1939 0 R /XYZ 81 757.935 null] >> endobj 678 0 obj << /D [1939 0 R /XYZ 81 641.512 null] >> endobj 1942 0 obj << /D [1939 0 R /XYZ 81 617.768 null] >> endobj 679 0 obj << /D [1939 0 R /XYZ 81 370.95 null] >> endobj 1943 0 obj << /D [1939 0 R /XYZ 81 349.471 null] >> endobj 680 0 obj << /D [1939 0 R /XYZ 81 147.216 null] >> endobj 1944 0 obj << /D [1939 0 R /XYZ 81 123.472 null] >> endobj 1938 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F88 758 0 R /F80 766 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1948 0 obj << /Length 2166 /Filter /FlateDecode >> stream xZY6~_G>8u'x8y53ZR[qV_`MuU_c]}sYQwq%2LwCx˂Bׅ?~f 6n&ht9D; ׬`_r L -HҤL>ǿdI6K#4|.bI#ZP~^Ǝ}:#L*DfIJ|r< +W&p=V\L2*زR6WcLʽш+հ P+5s2gZ (#\!JE@AUa 8g_nAqfyDH vD?o-̖,!/B['k!`ǿKPyQf3$tA%-JjBu~:|G9K(ݗྷ`S1S y!HHLpl#{N?ZK"^='MuR_l;sj-`e-~#^a?u}}tT|t,5f\3d\~CvʑCE-՘ͤ+것J4i%d G vPU@_~MW(VЯbdN2wϨEԕMӏ Oxy`fjok |7/>cz8P @z|×BbCZUlW\ yPl1ߺ-ԙy rǠ4]!o׵{yͅ8},~wIq_eǐ"7!)rH16Ou(GHK &.ABhJ9`%" Gptasq dcthĠA=vX3:nNobAt؀Pg7<b H rH#H.1yjZAWa@~/\;ݻɮ /mW鐁A)m$;zܛ5l%bEFT$VܟLxg#p.fO-2d~xdˏ Bv *1sxyxi+pOH4GmAJݹX 1eaZt]ŀHa5тf_ > endobj 1945 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [83.636 482.891 107.447 494.26] /Subtype /Link /A << /S /GoTo /D (subsection.2.2.2) >> >> endobj 1949 0 obj << /D [1947 0 R /XYZ 81 757.935 null] >> endobj 681 0 obj << /D [1947 0 R /XYZ 81 588.43 null] >> endobj 1950 0 obj << /D [1947 0 R /XYZ 81 564.686 null] >> endobj 682 0 obj << /D [1947 0 R /XYZ 81 413.338 null] >> endobj 1951 0 obj << /D [1947 0 R /XYZ 81 389.593 null] >> endobj 683 0 obj << /D [1947 0 R /XYZ 81 264.918 null] >> endobj 1952 0 obj << /D [1947 0 R /XYZ 81 241.174 null] >> endobj 1946 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F29 17 0 R /F61 742 0 R /F14 33 0 R /F80 766 0 R /F88 758 0 R /F64 765 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1956 0 obj << /Length 2622 /Filter /FlateDecode >> stream xY}*ի܇ hSH)FAk$qMJxJB>H3=5}WzD!In1\%J(dHnnL9u_SmGo~zV 6~%hp"u7W_ qBM1&QD#Y2_^}[xS3:f.l"꟞`&Ң5 (EX>}t&/^}HWKG_.A Ҙ@ؐ7," ិ_-%La4%@K FD ūw̿ˬVtܽ^dK̦}ŽWɾ{w@9 CS$ə 5H2$AGiWII/AraG#.4R" (A԰&|4!\"%N!   )yQdudگWsn練GMZY pSB:}UqF0Ɠ<,DOyx?xR,V2O(Ezo7p2pGE}X(˯ҢHPX><<: [a@ "v۬6f #"B\2YHq7媚fCW>fŔNs1,\!H{ue+x X6'!y5~4/f:H$I`7*Ra͆svd#{IC;_ypVnPfoS"&YY|RY9²(\]L?2D ru B R(ʺ14bATqc$LYϢlFkơ#1@儭Y/e#@he'A/$"@T#؃)]D:0Ad@mIiu FeHmL :G!$kEQ1D|C ̀d" 6UOz{,7"6S¿kYK'hIx?8I7q̝;"+%$dY~(6F>, SJ1Kj7^_dU~*r׍VaYqg+@X'Z`ݦU0"}5>ogHooi)U Z& eU:PMܛU6-‰M!# Ԝ-z^[i1dS;$lAÊ$bo1HLtN J5QPs,k{|\dCB !̃"a)Q9.Pse؋W*--tż'1k<0\krM?oNxFbP*sY1$gtlWIr2WP {zVpT;d9i+-?(M΀#f|xQGtGs[MōQxk"dZ!M*&ChCE2G-L dz:2jPtoNIr!qvmU8! lr1MZ=&&C jJy|(ʧ#Z?<,kCQe}ܻZftST|7n!IӃ-|[2sZIqPQ֍Ռ7퉢H ~:kAG@S&\"=4f苖T "j'u-H ynA!<C_{;O6X5WNJ-zN-r-sΑ#jI:T5;H-n6G8dӂ1 >ћCjt,6Hx\{#wF)oe4AYtگVpvR}N\t endstream endobj 1955 0 obj << /Type /Page /Contents 1956 0 R /Resources 1954 0 R /MediaBox [0 0 595.276 841.89] /Parent 1953 0 R >> endobj 1957 0 obj << /D [1955 0 R /XYZ 81 757.935 null] >> endobj 684 0 obj << /D [1955 0 R /XYZ 81 615.455 null] >> endobj 1958 0 obj << /D [1955 0 R /XYZ 81 591.71 null] >> endobj 685 0 obj << /D [1955 0 R /XYZ 81 317.075 null] >> endobj 1959 0 obj << /D [1955 0 R /XYZ 81 293.331 null] >> endobj 1954 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F15 750 0 R /F88 758 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1962 0 obj << /Length 1833 /Filter /FlateDecode >> stream xZr6}Wj$K2L;mSypȴJT$*N]LdZ6c =g.vm/o9"&#UB:r*=ӷ0`dq3@D[!QU=}KMD2BP;|)GhRY ?Ql] 84"Ni.[2m%~vRݏ‣1ag*,?mvOaäWXUtfU4 dcnXF(|Oʬ5oԘ@V!lq1McEaIoZ"B7dyQ'Nt3[ܸwd?4:m.gژ p.43ϒl!dAhL8) BlՆOPRLI+uz3$8Ny4}R':une^Hj0"[9~ieZ8ټ/ڄƜ,*.e#x5Y|{IT<_Ͼ04)dH;bᖋ(8}XW`?.;7tꦇnCX¶7DmHH2~w2\^]F"bR̮c9ùjx 2JRD0$dӦVJu7L$u`2pN]  " q׀W/rM?޻wyw,߾d-gomOXkϛ0I ĸ2pӍLl#>bWd8awU-]6r 4L" }XD g{ o2+~wd;j^Zh0%٥E;+*y':3&ui4gQCXYԭv^D@xtsă@$Y;lf IYg6'kCQq؝u6acQsug >\H6ƆlCnOi1Q DgMmb{ !V K!N>tҤZk z)8ADy&a8D!-}݁5Q$#໔l-)UDqh;|V뮱4)"كaC/;Rb endstream endobj 1961 0 obj << /Type /Page /Contents 1962 0 R /Resources 1960 0 R /MediaBox [0 0 595.276 841.89] /Parent 1953 0 R >> endobj 1963 0 obj << /D [1961 0 R /XYZ 81 757.935 null] >> endobj 686 0 obj << /D [1961 0 R /XYZ 81 733.028 null] >> endobj 1964 0 obj << /D [1961 0 R /XYZ 81 712.273 null] >> endobj 687 0 obj << /D [1961 0 R /XYZ 81 418.631 null] >> endobj 1965 0 obj << /D [1961 0 R /XYZ 81 394.887 null] >> endobj 688 0 obj << /D [1961 0 R /XYZ 81 246.301 null] >> endobj 1966 0 obj << /D [1961 0 R /XYZ 81 224.768 null] >> endobj 1960 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1969 0 obj << /Length 2114 /Filter /FlateDecode >> stream xZ[s~[ f>Ůֵ{8>Ji`UAX>= t,C4_w88gBD1NbĹ PH3>w9}+?4] ڭP]nf]`ջ+BCN9LC&P([n!#͂Ep7$xGy1Y݈۱EVXa/K/ܝFp!v/X`77s%ADbP!NA 9B3 O7$OibG2M*uH6?d ܛّ(0`N6%~po&kwͿn0{̓όA wș/kd-/ !AH%=9Hdg-R̨|?L4ҒJg )@\{9ZqsWKxֻi P%(`m {Uɸjp~*-eIS" HuY!ࣱCuf)V,A?;{r[p"N27Sb|p1p4bHT?'YfMg?X`+X8%F%==`&jMyleg$ ڂS,XEgS wl}*zO歫Wq"Jy0L^qoغQfp QJ$%蒽wݙjʥJYRX]ĐǁCCuf),Is8_jn@ywfZةIv&!ZwC(!RDxإjI֓x/7>tH/`b}# r`- !Fx {O{'Y5.8f'9DY{S?|v}7$Ewd(46Z>k<~؇,2-j\a:nY$ +|eUe'Y'Y>Z#_`z576s«mi TR(,2=(N5|h WҐX?=j"lS$rŢ=M?, ?rV=@hiYܐcVrCCFC0iEArVyA9Vt->L44ZjD94F l[n&3`;` bgKۧscNE,6 sC]C~5ϷPllLT{tNWTS&"i3כ>r hx~_߇B>)z@ѿ*>q & zLH=M jZ\t-P]7lhЪ9D|"#hB:ҔA866gٮHk;gṀaH7A w#Kqڔ9QBT֎2!cӨjiTǘ5μ6զ?rO.{G?? tȼ_kO endstream endobj 1968 0 obj << /Type /Page /Contents 1969 0 R /Resources 1967 0 R /MediaBox [0 0 595.276 841.89] /Parent 1953 0 R >> endobj 1970 0 obj << /D [1968 0 R /XYZ 81 757.935 null] >> endobj 689 0 obj << /D [1968 0 R /XYZ 81 733.028 null] >> endobj 1971 0 obj << /D [1968 0 R /XYZ 81 714.538 null] >> endobj 690 0 obj << /D [1968 0 R /XYZ 81 587.946 null] >> endobj 1972 0 obj << /D [1968 0 R /XYZ 81 566.413 null] >> endobj 691 0 obj << /D [1968 0 R /XYZ 81 438.647 null] >> endobj 1973 0 obj << /D [1968 0 R /XYZ 81 406.504 null] >> endobj 692 0 obj << /D [1968 0 R /XYZ 81 364.058 null] >> endobj 1974 0 obj << /D [1968 0 R /XYZ 81 342.676 null] >> endobj 693 0 obj << /D [1968 0 R /XYZ 81 272.645 null] >> endobj 1975 0 obj << /D [1968 0 R /XYZ 81 251.263 null] >> endobj 1967 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F29 17 0 R /F61 742 0 R /F36 19 0 R /F85 743 0 R /F44 32 0 R /F46 35 0 R /F14 33 0 R /F15 750 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1978 0 obj << /Length 2135 /Filter /FlateDecode >> stream xZ[s~ࣔZ8X3Lƞfnpj. @J(ʴ<ؼ]`M\ӕ&9$JЉX.Yr7XcMG?J,~&Eҍ:A7g; $Xh0D<.i2ϾM($#n4+eGrj R(U~u<@G/M^B%}sM2 "A>O4y6]fu2΋E6}vdVrgDU9 AUYC@WèQF|x  mb[#wAalll!pϊ99!h"w[>%7g( y fr5qqU=ftTF` z(ӕjD)L>ARc~o1?tT2B7m°ɪnC~P(:ȫA[ˌ!sM(q7|5psZ_|^,S'|(6k?zk-J1F 'ek+*0V`cb]#,=e.p1FCPMV8l[x$˗t6}xNCxa*]HpK-k3"q<{BuxAHVPQ qX~J:ADBZ qHňfyyuqy}v=LoD ܆,rΏĽ9Hr#!Jnb:sO_^: 68ad8c3xY]\3tr =B>Xc1a y_/.;G*囷w,"'%\ K!M b~FAqx[^xN<jIė`e\!%Tw"PG w4lPc:jWwl_a6`U'(R osÑm!4Cu9lb I%R) ݈sxo1pn45 Eէ'0~zR,mKdѣD{α^eY\E6϶_(L/q~{)~O]s60뮟bwZ UX, {V15z_tuϋMfWh/n]U>< Gr.%_vH+l|Oiwrh֎3._fU^r1S
] constr. B, of a [ n+dd, k+dd-1, d ] code ## [ 5, ] an UUV-construction with a [ n / 2, k1 ] ## and a [ n / 2, k - k1 ] code ## [ 6, ] concatenation of a [ n1, k ] and a ## [ n - n1, k ] code ## [ 7, ] taking the residue of a [ n1, k + 1 ] code ## 20 taking the subcode of a [ n, k + 1 ] code ## [21,,] constr. B2 of a [ n+s, k+s-2j-1, d+2j] code ## [22,,] an UUAVUVW-construction with a [ n/3, k1 ], ## a [ n/3, k2 ] and a [ n/3, k-(k1+k2) ] code ## ## FOR UPPERBOUNDSTABLE ## empty trivial and Singleton bound ## 11 shortening a [ n + 1, k + 1 ] code ## 12 puncturing a [ n + 1, k ] code ## 13 extending a [ n - 1, k ] code ## [ 14,
] constr. B, with dd = dual distance ## [ 15, ] Griesmer bound ## [ 16, ] One-step Griesmer bound GUAVA_BOUNDS_TABLE[1][4] := [ #V n = 1 [ ], #V n = 2 [ ], #V n = 3 [ ], #V n = 4 [ , 1], #V n = 5 [ , 1, 2], #V n = 6 [ , 20, [0, 4, "QR"], 20], #V n = 7 [ , 1, 1, 1, 20], #V n = 8 [ , 1, 1, 1, 1, 20], #V n = 9 [ , 2, 1, 1, 1, 1, 20], #V n = 10 [ , [6, 5], 20, 1, 1, 1, 1, 20], #V n = 11 [ , 1, 1, 20, 1, 2, 1, 1, 20], #V n = 12 [ , 1, 1, 1, 20, [0, 6, "QR"], 20, 1, 1, 20], #V n = 13 [ , 1, 1, 1, 1, 1, 1, 20, 1, 1, 20], #V n = 14 [ , 1, 1, 2, 1, 1, 1, 1, 20, 1, 1, 20], #V n = 15 [ , 1, 1, 2, 20, 1, 1, 1, 1, 20, 1, 1, 20], #V n = 16 [ , 20, 1, 2, 1, 20, 1, 1, 1, 1, 20, 1, 1, 20], #V n = 17 [ , 1, 20, [0, 12, "BCH"], 1, 2, 20, 1, 2, 1, 1, 20, [0, 4, "ovo"], 1, 20], #V n = 18 [ , 1, 2, 3, 20, [0, 10, "Gu"], 20, 20, [0, 8, "MOS"], 20, 1, 1, 1, 20, 1, 20], #V n = 19 [ , 1, 2, 1, 1, 1, 1, 20, 1, 1, 20, 1, 1, 1, 20, 1, 20], #V n = 20 [ , 1, 2, 1, 1, 1, 1, 1, 20, [0, 8, "QR"], 1, 20, [0, 6, "EB3"], 1, 1, 20, 1, 20], #V n = 21 [ , 20, [7, 82], 1, 2, 1, 1, 1, 1, 1, 20, [0, 7, "KPm"], 1, 20, [0, 5, "KPm"], 1, 20, [4, 60], 20], #V n = 22 [ , 2, 1, 1, 2, 20, 1, 1, 1, 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20], #V n = 23 [ , 2, 20, 1, 2, 1, 20, 1, 1, 1, 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20], #V n = 24 [ , 2, 1, 20, [0, 16, "Li1"], 2, [0, 13, "GB4"], 20, 1, 1, 1, 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20], #V n = 25 [ , [6, 5], 1, 2, 1, 2, 1, 20, 20, 1, 1, 1, 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20], #V n = 26 [ , 1, 1, 2, 20, [0, 16, "Gu"], 1, 1, 20, 20, 1, 1, 1, 1, 2, [0, 7, "EB3"], 20, 1, 1, 20, 1, 1, 20, 20], #V n = 27 [ , 2, 1, 2, 1, 1, 2, [0, 14, "GB4"], [0, 13, "GuB"], 20, 20, 1, 1, 1, 2, 1, 20, 20, [0, 6, "EB3"], 1, 20, 1, 1, 20, 20], #V n = 28 [ , 2, 20, [0, 20, "GH"], 2, [0, 17, "GB4"], [0, 16, "GuB"], 1, 1, 20, 20, 20, 1, 1, 2, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20], #V n = 29 [ , 2, 1, 1, 2, 1, 1, 1, 1, 1, 20, 20, 20, 1, 2, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20], #V n = 30 [ , [6, 5], 1, 2, [0, 20, "KPq"], 1, 2, [0, 16, "DaH"], [0, 15, "GB4"], [0, 14, "Da4"], [0, 13, "DG5"], 20, 20, 20, [0, 12, "QR"], 2, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20], #V n = 31 [ , 1, 2, [0, 22, "GH"], 1, 1, 2, 1, 1, 1, 1, 20, 20, 20, 3, 2, 20, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20], #V n = 32 [ , 2, [6, 16], 1, 2, [0, 20, "Gu"], [0, 19, "GB4"], 1, 1, 1, 1, 1, 20, 20, 3, [0, 11, "Du3"], 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20], #V n = 33 [ , 2, 1, 2, [0, 22, "Bo1"], 2, 3, 1, 2, [0, 16, "DaH"], [0, 15, "DG"], 1, 2, 20, 1, 1, 1, 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20], #V n = 34 [ , 2, 2, [6, 17], 1, 2, 1, 20, [0, 18, "DaH"], 1, 1, 20, [0, 14, "DaH"], 20, 20, 1, 1, 2, 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20], #V n = 35 [ , [6, 5], 2, 1, 2, [0, 22, "GB4"], 1, 1, 2, 20, 1, 2, 1, 1, 20, 20, 1, 2, 20, 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20], #V n = 36 [ , 1, 2, 1, 2, 1, 2, [0, 20, "GB4"], [0, 19, "Gu"], 1, 20, [0, 16, "DG"], 20, 1, 1, 20, 20, [0, 12, "GaO"], 1, 20, 1, 20, 20, [0, 8, "Zi"], 1, 20, 1, 20, 1, 20, 1, 1, 20, 20], #V n = 37 [ , 2, [6, 16], 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 20, 1, 1, 20, 1, 1, 1, 20, 1, 20, 3, 20, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20], #V n = 38 [ , 2, 1, 1, 2, 1, 2, 2, [0, 20, "Bou"], [0, 19, "DaH"], 1, 1, 1, 1, 20, 1, 1, 20, [0, 12, "QR"], 1, 2, 20, 1, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20], #V n = 39 [ , 2, 2, 1, 2, 2, [0, 24, "Gu"], 2, 1, 1, 20, [0, 18, "KPm"], [0, 17, "BMP"], 1, 1, 20, 1, 1, 1, 20, [0, 11, "KPm"], 20, 20, [0, 9, "KPm"], 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20], #V n = 40 [ , [6, 5], 2, 20, [0, 28, "KPq"], 2, 1, 2, 1, 1, 1, 1, 1, 20, 1, 1, 20, 1, 1, 1, 1, 2, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20], #V n = 41 [ , 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 20, 1, 2, 20, 1, 1, 1, 2, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, [0, 4, "IN"], 1, 20, 20], #V n = 42 [ , 2, [6, 21], 1, 2, [0, 28, "GB4"], 1, 2, [0, 23, "Ayd"], [0, 22, "DaH"], 20, [0, 20, "DaH"], 20, [0, 18, "DaH"], [0, 17, "DaH"], 20, [0, 16, "DaH"], 20, 20, 1, 1, 2, 1, 20, 20, 1, 20, 1, 20, 20, [0, 7, "Zi"], 20, 1, 20, 1, 1, 20, 1, 20, 20], #V n = 43 [ , 2, 1, 2, [0, 30, "Liz"], 3, 1, 2, 1, 1, 2, 3, 20, 3, 3, 20, 3, 20, 20, 20, 1, 2, 2, 1, 20, 20, 1, 20, 1, 20, 3, 20, 20, 1, 20, [0, 5, "KPc"], 1, 20, 1, 20, 20], #V n = 44 [ , 2, 20, [7, 169], 2, 1, 20, [0, 27, "Zi"], 1, 1, 2, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, [0, 14, "QR"], 2, 20, 1, 20, 20, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20], #V n = 45 [ , [6, 5], 1, 1, 2, 2, [0, 28, "Gu"], 3, 2, 1, 2, 2, 1, 2, [0, 18, "DG5"], [0, 17, "GW1"], 20, 1, 1, 20, 20, 1, 2, 1, 20, 1, 20, 20, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20], #V n = 46 [ , 2, 1, 2, [0, 32, "Liz"], 2, 1, 1, 2, 20, [0, 24, "DaH"], [0, 22, "DaH"], 20, [0, 20, "GW2"], 1, 1, 20, 20, 1, 1, 20, 20, [0, 14, "GaO"], 1, 1, 20, 1, 20, 20, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20], #V n = 47 [ , 2, 1, 2, 1, 2, 1, 1, 2, 20, 3, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 1, 2, 1, 1, 20, 1, 20, 20, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20], #V n = 48 [ , 2, 1, 2, 2, [0, 32, "Gu"], 1, 1, 2, 2, 3, [0, 23, "DG"], 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, [0, 14, "GaO"], 20, 1, 1, 20, 1, 20, 20, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20], #V n = 49 [ , 2, 20, [0, 36, "GH"], 2, 1, 1, 1, 2, 2, 1, 1, 20, 1, 1, 1, 2, 1, 1, 20, 20, 1, 1, 1, 1, 20, 1, 2, 20, 1, 20, 20, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20], #V n = 50 [ , [6, 5], 2, 1, 2, 2, 1, 1, 2, [0, 27, "Da4"], 20, 1, 2, 20, 1, 1, 2, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, [0, 12, "D1"], 20, 20, 1, 20, 20, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20], #V n = 51 [ , 2, 2, 20, [0, 36, "Bou"], 2, 20, 1, 2, 2, 1, 20, [0, 24, "DaH"], 20, 20, 1, 2, [0, 19, "DaH"], 20, 1, 1, 20, 20, 1, 1, 1, 2, 1, 1, 20, 20, 1, 20, 20, [0, 9, "DaH"], 20, [0, 8, "LX"], 1, 20, 20, 20, [0, 6, "DaH"], 1, 20, 1, 20, 1, 20, 20], #V n = 52 [ , 2, 2, 1, 1, 2, [0, 33, "Gu"], 20, [0, 32, "DaH"], 2, 2, [0, 25, "DG5"], 1, 1, 20, 20, [0, 22, "DaH"], 1, 20, 20, 1, 1, 20, 20, 1, 1, 2, 20, 1, 1, 20, 20, 1, 20, 3, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20], #V n = 53 [ , 2, [6, 16], 1, 2, [0, 36, "XX"], 1, 20, 3, 2, 2, 1, 20, 1, 1, 20, 3, 1, 1, 20, 20, 1, 1, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20], #V n = 54 [ , 2, 1, 1, 2, 3, 1, 2, 3, 2, 2, 1, 1, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, [0, 16, "GaO"], 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, [0, 8, "BZ"], 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20], #V n = 55 [ , [6, 5], 2, 1, 2, 1, 1, 2, 2, [0, 31, "DaH"], [0, 29, "DG"], 1, 1, 1, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 3, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20], #V n = 56 [ , 2, 2, 20, [0, 40, "BKW"], 1, 1, 2, 2, 3, 3, 1, 1, 1, 1, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20], #V n = 57 [ , 2, 2, 2, 3, 1, 1, 2, [0, 34, "YC"], 2, 1, 20, 1, 1, 1, 2, 20, [0, 24, "DaH"], 1, 1, 1, 1, 1, 20, 20, 1, 1, 1, 1, 1, 2, 20, 20, [0, 12, "D1"], 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20], #V n = 58 [ , 2, [6, 16], 2, 1, 1, 1, 2, 2, [0, 32, "DaH"], 1, 1, 20, 1, 1, 2, 20, 3, 20, 1, 1, 1, 1, 1, 20, 20, 1, 1, 1, 1, 2, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20], #V n = 59 [ , 2, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 2, 20, 1, 2, 1, 1, 20, 20, 1, 1, 1, 1, 1, 20, 20, 1, 1, 1, 2, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20], #V n = 60 [ , [6, 5], 1, 2, 1, 1, 1, 2, [0, 36, "BZ"], 1, 1, 2, [0, 30, "BZ"], 20, 20, [0, 28, "GW2"], 1, 1, 1, 20, 20, 1, 1, 1, 1, 1, 20, 20, 1, 1, 2, 1, 1, 20, 20, [5, 21], 20, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20], #V n = 61 [ , 2, 1, 2, 1, 1, 1, 2, 3, 1, 1, 2, 1, 1, 20, 1, 1, 1, 1, 1, 20, 20, 1, 1, 1, 1, 2, 20, 20, 1, 2, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20], #V n = 62 [ , 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 20, 1, 1, 1, 2, 1, 20, 20, 1, 1, 1, 2, 20, 20, 20, [0, 18, "GaO"], [0, 15, "Vx"], 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20], #V n = 63 [ , 2, 1, 2, 20, 1, 1, 2, 2, 1, 1, 2, [0, 32, "DaH"], [0, 31, "DaH"], 1, 2, 20, [0, 28, "DaH"], 1, 2, 20, 1, 20, 20, 1, 1, 2, 20, 20, 20, 3, 1, 20, 20, 1, 2, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20], #V n = 64 [ , 2, 20, [7, 253], 2, 20, 1, 2, 2, 20, 1, 2, 1, 1, 20, [0, 30, "DaH"], 20, 3, 20, [0, 27, "XBC"], 20, 20, 1, 20, 20, 1, 2, 20, 20, 20, 3, 1, 1, 20, 20, [0, 14, "XBC"], 20, 20, 1, 20, 20, 1, 20, 20, 1, 2, 20, 1, 20, 20, 1, 20, 20, [0, 6, "XBC"], 20, 1, 20, 1, 20, 1, 20, 20], #V n = 65 [ , [6, 5], 20, 3, 2, 20, 20, [0, 44, "BCH"], 2, 20, 20, [0, 36, "DaH"], 2, 1, 2, 1, 1, 1, 20, 3, 1, 20, 20, 1, 20, 20, [0, 23, "BCH"], [0, 19, "Vx"], 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 1, 20, 20, 1, 20, 20, [0, 10, "BCH"], 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, [0, 5, "Ed"], 20, 1, 20, 1, 20, 20], #V n = 66 [ , 2, 1, 1, 2, 1, 20, 3, 2, 1, 20, 3, 2, 20, [0, 32, "DaH"], 20, 1, 2, 1, 1, 1, 1, 20, 20, 1, 20, 3, 1, 20, 20, 20, 1, 1, 2, 1, 20, 1, 1, 20, 20, 1, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20], #V n = 67 [ , 2, 1, 2, [0, 48, "Bou"], 1, 2, 3, 2, 1, 2, 3, [0, 35, "MTS"], 1, 2, 20, 20, [0, 30, "DaH"], 20, [0, 28, "XX"], 1, 1, 1, 20, 20, [0, 24, "XX"], 3, 2, [0, 19, "Vx"], 20, 20, 20, 1, 2, 20, [0, 15, "XX"], 20, 1, 1, 20, 20, 1, 20, 20, [0, 11, "XX"], 20, 1, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20], #V n = 68 [ , 2, 1, 2, 1, 1, 2, 2, 2, 1, 2, 1, 2, 20, [0, 33, "BZ"], 1, 20, 3, 20, 3, 20, 1, 2, 1, 20, 1, 2, [0, 21, "Vx"], 1, 20, 20, 20, 20, [0, 18, "GaO"], 2, 1, 20, 20, [0, 14, "XX"], 1, 20, 20, 1, 20, 1, 20, 20, [0, 10, "XX"], 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20], #V n = 69 [ , 2, 1, 2, 2, 1, 2, 2, 2, 1, 2, 2, [0, 36, "DaH"], 1, 1, 2, 1, 2, [0, 29, "XX"], 1, 20, 20, [0, 27, "XX"], 20, [0, 25, "XX"], 20, [0, 24, "XX"], 1, 1, 1, 20, 20, 20, 1, 2, 20, 1, 20, 1, 20, [0, 13, "XX"], 20, 20, [0, 12, "XX"], 20, 1, 20, 1, 20, [0, 9, "XX"], 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20], #V n = 70 [ , [6, 5], 20, [0, 52, "Bel"], [0, 50, "BKW"], 20, [0, 48, "XX"], 2, [0, 44, "DaH"], 20, [0, 40, "BZ"], [0, 38, "DaH"], 3, [0, 35, "DaH"], [0, 34, "DaH"], [0, 33, "DaH"], 20, [0, 31, "DaH"], 1, 20, 1, 20, 1, 1, 1, 20, 3, 2, [0, 21, "Vx"], [0, 20, "BZ"], [0, 19, "Ed"], 20, 20, 20, [0, 18, "GaO"], 2, 20, [0, 15, "XX"], 20, 1, 1, 20, 20, 1, 20, 20, [0, 11, "XX"], 20, 1, 1, 20, 20, 20, 1, 20, 20, [0, 7, "Ed"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20], #V n = 71 [ , 2, 1, 2, 1, 2, 1, 2, 3, 1, 2, 3, 1, 2, 3, 3, 20, 3, 1, 2, 20, [0, 28, "XX"], 20, [0, 27, "BET"], 1, 1, 2, [0, 23, "Vx"], 1, 1, 1, 20, 20, 20, 1, 2, 20, 1, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20], #V n = 72 [ , 2, 1, 2, 1, 2, 20, [0, 48, "BET"], 3, 1, 2, 1, 2, [0, 36, "BZ"], 1, 2, 20, 1, 20, [0, 30, "Tol"], 20, 1, 20, 1, 20, [0, 26, "Tol"], [0, 25, "X"], 1, 1, 2, 1, 1, 20, 20, 20, [0, 18, "GaO"], 1, 20, 1, 20, 20, [0, 14, "Tol"], 1, 20, 20, [0, 12, "X"], 20, 1, 20, 20, [0, 10, "Tol"], 1, 20, 20, 20, [0, 8, "BZ"], 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20], #V n = 73 [ , 2, 1, 2, 1, 2, 20, 3, 1, 1, 2, 1, 2, 1, 1, 2, 1, 20, 1, 2, 20, 20, [0, 28, "XX"], 20, 1, 2, 3, 20, [0, 23, "Ed"], [0, 22, "XX"], 20, 1, 1, 20, 20, 3, 20, 1, 20, 1, 20, 1, 20, [0, 13, "XX"], 20, 1, 20, 20, 1, 20, 1, 20, [0, 9, "XX"], 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20], #V n = 74 [ , 2, 1, 2, 1, 2, 2, 3, 20, 1, 2, 1, 2, 2, 1, 2, 1, 1, 20, [0, 31, "XX"], 1, 20, 1, 20, 20, [0, 27, "XX"], 2, [0, 24, "Ed"], 3, 1, 1, 20, 1, 2, 20, 1, 1, 20, 1, 20, [0, 15, "BET"], 20, 1, 1, 20, 20, 1, 20, 20, [0, 11, "BET"], 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20], #V n = 75 [ , [6, 5], 20, [0, 56, "Bel"], 1, 2, 2, 2, 1, 20, [0, 44, "BZ"], 2, [0, 40, "BZ"], 2, 20, [0, 36, "BZ"], 1, 1, 2, 3, 1, 2, 20, 1, 20, 1, 2, 1, 1, 20, [0, 22, "Ed"], 1, 20, [0, 20, "BZ"], 20, 20, [0, 18, "Vx"], 1, 20, 1, 1, 20, 20, [0, 14, "BET"], 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20], #V n = 76 [ , 2, 1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 1, 2, 20, 1, 1, 1, 2, 1, 20, [0, 30, "BET"], 20, 20, [0, 28, "XX"], 20, [0, 27, "Ed"], 20, [0, 24, "Ed"], [0, 23, "XX"], 1, 20, [0, 21, "XX"], 1, 1, 20, 1, 20, [0, 17, "VE"], 20, 1, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20], #V n = 77 [ , 2, 1, 2, 1, 2, [0, 52, "BET"], [0, 50, "X"], 1, 1, 2, 2, 1, 2, 1, 20, 1, 1, 2, 20, 1, 2, [0, 29, "Ed"], 20, 1, 20, 3, [0, 25, "Ed"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 1, 20, [0, 11, "VE"], 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20], #V n = 78 [ , 2, 1, 2, 20, [0, 56, "Hi"], 3, 2, 1, 1, 2, [0, 44, "Ayd"], 1, 2, 1, 1, 20, 1, 2, 1, 20, [0, 31, "XX"], 1, 20, 20, [0, 28, "XX"], 3, 1, 20, 1, 1, 20, [0, 22, "XX"], [0, 21, "Ed"], 20, 1, 1, 20, [0, 18, "VE"], 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20], #V n = 79 [ , 2, 1, 2, 20, 3, 1, 2, 20, 1, 2, 1, 1, 2, 1, 1, 1, 20, [0, 36, "GW2"], 20, 1, 1, 1, 1, 20, 1, 1, 2, [0, 25, "Ed"], 20, 1, 1, 1, 1, 20, 20, 1, 2, 1, 20, 1, 20, 20, 1, 2, 20, [0, 14, "Ed"], 20, [0, 13, "Ed"], 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20], #V n = 80 [ , [6, 5], 20, [7, 317], 20, 3, 20, [0, 52, "BZ"], 20, 20, [0, 48, "BZ"], 1, 1, 2, 1, 1, 1, 2, 3, 1, 20, [0, 32, "BZ"], [0, 31, "Ed"], 1, 2, 20, [0, 28, "Ed"], [0, 27, "Ed"], 1, 20, 20, [0, 24, "BZ"], [0, 23, "Ed"], 1, 1, 20, 20, [0, 20, "BZ"], 20, 1, 20, 1, 20, 20, [0, 16, "BZ"], 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20], #V n = 81 [ , 2, 1, 2, 1, 2, 1, 2, 1, 20, 3, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 2, 1, 20, [0, 30, "X6u"], 20, 3, 3, [0, 26, "Ed"], 1, 20, 1, 1, 20, 1, 2, 20, 1, 1, 20, 1, 20, [0, 17, "VE"], 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, [0, 6, "Ed"], 20, 1, 20, 20, 1, 20, 1, 20, 20], #V n = 82 [ , 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 2, 20, 1, 2, [0, 29, "Ed"], 1, 1, 1, 20, [0, 25, "Ed"], 20, 1, 1, 20, [0, 22, "Ed"], 20, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20], #V n = 83 [ , 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 2, [0, 32, "Ed"], 20, [0, 31, "XX"], 1, 20, 1, 1, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 1, 1, 20, [0, 18, "VE"], 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20], #V n = 84 [ , 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 20, 1, 2, 1, 1, 1, 2, 2, 20, 1, 2, 1, 20, 1, 2, [0, 29, "Ed"], 20, 1, 2, 1, 1, 20, 20, 1, 2, 1, 1, 20, 20, 1, 2, 1, 20, 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20], #V n = 85 [ , [6, 5], 20, [7, 338], 2, [0, 60, "BCH"], 20, [0, 56, "BZ"], 2, 1, 2, 20, 20, [0, 48, "DaH"], [0, 45, "DaH"], [0, 44, "DaH"], [0, 43, "DaH"], [0, 42, "DaH"], [0, 40, "DaH"], 20, 20, [0, 36, "BZ"], [0, 33, "BZ"], [0, 32, "BZ"], 20, [0, 31, "BCH"], 1, 20, 20, [0, 28, "BZ"], 20, [0, 26, "BZ"], [0, 25, "Ed"], 20, 20, [0, 24, "BZ"], 20, [0, 22, "BZ"], 1, 20, 20, [0, 20, "BZ"], 20, 1, 20, 1, 20, 20, [0, 16, "BZ"], 1, 20, 1, 20, 1, 20, 20, 20, [0, 12, "BZ"], 1, 20, 20, 20, [0, 10, "BCH"], [0, 9, "BZ"], 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, [0, 3, "Ham"], 20, 20], #V n = 86 [ , 2, 20, 3, 2, 2, 20, 3, [0, 54, "Da"], 20, [0, 52, "XBZ"], 20, 20, 3, 3, 3, 3, 3, 2, 20, 20, 3, 1, 1, 20, 1, 2, [0, 29, "Ed"], 20, 3, [0, 27, "Ed"], 1, 1, 20, 20, 3, [0, 23, "Ed"], 1, 20, [0, 21, "Ed"], 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 15, "Ed"], 20, [0, 14, "XBC"], 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 87 [ , 2, 2, 1, 2, 2, 2, 3, 3, 20, 3, 20, 20, 3, 3, 3, 3, 3, [0, 41, "DaH"], 2, 20, 3, 2, [0, 33, "Ed"], 1, 20, [0, 31, "X"], 1, 20, 1, 1, 20, [0, 26, "Ed"], 1, 20, 1, 1, 20, 1, 1, 20, 20, [0, 20, "Ed"], 1, 20, 1, 20, [0, 17, "VE"], 20, 1, 1, 20, 1, 20, 20, [0, 13, "Var"], 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 88 [ , 2, 2, 20, [0, 64, "Bou"], 2, 2, 2, 2, 20, 3, 1, 20, 3, 1, 1, 1, 1, 2, [0, 38, "Vx"], 20, 3, [0, 35, "Ed"], 1, 20, [0, 32, "BZ"], 3, 1, 1, 20, [0, 28, "Ed"], 1, 1, 20, 1, 20, 1, 1, 20, [0, 22, "Ed"], 1, 20, 1, 20, 1, 20, [0, 18, "VE"], 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 89 [ , 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 1, 2, 3, 1, 2, 1, 2, [0, 42, "DaH"], 2, [0, 37, "Vx"], 1, 1, 2, [0, 33, "Ed"], 1, 1, 20, [0, 30, "VE"], [0, 29, "Var"], 1, 20, [0, 27, "Ed"], 1, 20, [0, 25, "Ed"], 20, 1, 1, 1, 20, 1, 20, 1, 20, [0, 19, "Ed"], 1, 20, 1, 20, 20, [0, 16, "Ed"], 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, [0, 11, "X"], 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 90 [ , [6, 5], [6, 6], 2, 20, [0, 64, "BZ"], 2, [0, 58, "XB"], [0, 56, "BZx"], 1, 2, 20, [0, 50, "DaH"], 1, 2, [0, 46, "DaH"], 20, [0, 44, "DaH"], 3, 2, 1, 20, [0, 36, "Ed"], [0, 35, "Ed"], 1, 20, [0, 32, "Ed"], 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, [0, 24, "Tol"], [0, 23, "Ed"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, [0, 10, "X"], 1, 20, 20, 20, 20, [0, 8, "BZ"], 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 91 [ , 2, 1, 2, 2, 3, [0, 61, "Gu"], 2, 3, 20, [0, 54, "XB"], 1, 2, 20, [0, 48, "DaH"], 1, 1, 2, 2, [0, 40, "Vx"], 2, [0, 37, "Vx"], 1, 1, 2, 1, 1, 20, [0, 31, "Ed"], 1, 1, 20, [0, 28, "Ed"], 1, 20, [0, 26, "Ed"], 1, 20, 1, 1, 20, 1, 20, [0, 21, "Var"], 20, [0, 20, "Ed"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 92 [ , 2, 2, [6, 17], 2, 3, 3, 2, 1, 1, 2, 1, 2, 1, 1, 2, 1, 2, 2, 3, [0, 39, "BZ"], 1, 20, [0, 36, "BZ"], [0, 35, "Ed"], 20, [0, 33, "Ed"], 1, 1, 20, [0, 30, "BZ"], 1, 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 93 [ , 2, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, [0, 48, "DaH"], 20, [0, 46, "DaH"], [0, 44, "DaH"], 1, 2, [0, 38, "BZ"], [0, 37, "Vx"], 1, 1, 1, 1, 20, [0, 32, "Ed"], 1, 1, 20, [0, 29, "Var"], 1, 20, [0, 27, "Ed"], 1, 20, [0, 25, "Var"], 20, 1, 1, 20, [0, 22, "Ed"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 94 [ , 2, 2, 2, [0, 68, "Bou"], 2, 1, 2, 1, 2, [0, 56, "XB"], 20, [0, 53, "DaH"], 1, 2, 3, 20, 3, 3, 1, 2, 1, 1, 20, [0, 36, "Ed"], [0, 35, "Ed"], [0, 34, "Var"], 1, 1, 20, [0, 31, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 17, "Var"], 20, 1, 20, [0, 15, "Var"], 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, [0, 10, "Ed"], 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 95 [ , [6, 5], [6, 16], 2, 2, 2, 2, [0, 62, "DaH"], [0, 59, "DaH"], [0, 58, "DaH"], 3, [0, 54, "DaH"], 3, [0, 52, "DaH"], [0, 51, "DaH"], 1, 2, 3, 2, 1, 2, 1, 1, 2, 1, 1, 1, 20, [0, 33, "Var"], 1, 1, 20, 1, 1, 20, [0, 28, "Var"], 1, 20, [0, 26, "Var"], 1, 20, 20, 1, 2, 1, 20, 1, 20, 1, 20, [0, 19, "Var"], 20, [0, 18, "VE"], 1, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 1, 20, 20, [0, 9, "Ed"], 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 96 [ , 2, 1, 2, 2, 2, [0, 64, "GB4"], 2, 1, 2, 2, 2, 3, 3, 3, 20, [0, 48, "BZ"], 2, [0, 45, "BZ"], 20, [0, 42, "BZ"], [0, 40, "BZ"], [0, 39, "BZ"], [0, 38, "BZ"], 20, [0, 36, "BZ"], 1, 1, 1, 20, [0, 32, "Var"], 1, 20, [0, 30, "Ed"], 1, 1, 20, 1, 1, 20, 1, 20, 20, [0, 24, "Tol"], 20, 1, 20, 1, 20, [0, 20, "Var"], 1, 20, 1, 20, 1, 20, 20, [0, 16, "BZ"], 1, 20, 20, [0, 14, "Ed"], 20, 1, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 97 [ , 2, 2, [6, 17], 2, [0, 68, "Koh"], 1, 2, 1, 2, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 20, [0, 35, "Ed"], [0, 34, "Var"], 1, 1, 20, 1, 1, 20, [0, 29, "Var"], 1, 20, [0, 27, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, [0, 21, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 98 [ , 2, 2, 1, 2, 2, 2, [0, 64, "DaH"], 1, 2, 2, 2, 1, 2, [0, 52, "DaH"], 1, 2, [0, 48, "DaH"], 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 20, 1, 1, 20, [0, 31, "Ed"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 25, "Var"], 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 13, "Var"], 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 99 [ , 2, 2, 2, [0, 72, "BKW"], 2, 2, 3, 1, 2, 2, 2, 1, 2, 3, 20, [0, 50, "GW1"], 1, 2, 1, 2, 1, 2, [0, 40, "BZ"], 1, 2, 20, 1, 1, 1, 20, [0, 33, "Ed"], 1, 1, 20, 1, 1, 20, [0, 28, "Var"], 1, 20, 1, 1, 20, 20, 1, 1, 20, [0, 22, "Ed"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 100 [ , [6, 5], [6, 16], 2, 3, 2, 2, 1, 1, 2, [0, 60, "BZ"], 2, 1, 2, 1, 1, 2, 20, [0, 48, "BZ"], 2, [0, 45, "BZ"], 20, [0, 42, "BZ"], 1, 20, [0, 39, "BZ"], 1, 20, [0, 36, "BZ"], [0, 35, "Var"], 1, 1, 20, [0, 32, "Var"], 1, 20, [0, 30, "Ed"], 1, 1, 20, 1, 20, [0, 26, "Var"], 1, 20, 20, 1, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 101 [ , 2, 1, 2, 1, 2, 2, 20, 1, 2, 1, 2, 1, 2, 1, 2, [0, 51, "XBZ"], 2, 1, 2, 3, 2, 3, 20, [0, 40, "Ed"], 3, [0, 38, "Ed"], [0, 37, "Var"], 1, 1, 20, [0, 34, "Var"], 1, 1, 20, 1, 1, 20, [0, 29, "Var"], 1, 20, 1, 1, 20, 1, 20, 20, 1, 2, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 2, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 102 [ , 2, 2, [6, 17], 2, [0, 72, "BKW"], 2, 2, 20, [0, 64, "DaH"], 20, [0, 60, "DaH"], 1, 2, [0, 54, "DaH"], [0, 53, "DaH"], 3, [0, 50, "DaH"], 20, [0, 48, "BZ"], 2, [0, 44, "BZ"], 1, 2, 1, 1, 1, 1, 20, 1, 1, 1, 20, [0, 33, "Var"], 1, 20, [0, 31, "Ed"], 1, 1, 20, 1, 20, [0, 27, "Var"], 1, 20, 1, 20, 20, [0, 24, "Tol"], 20, 1, 20, 1, 20, 1, 20, [0, 19, "Var"], 20, [0, 18, "Var"], 20, [0, 17, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 20, [0, 12, "Tol"], 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 103 [ , 2, 2, 3, 2, 3, 2, 2, 20, 3, 1, 1, 1, 2, 2, 3, 1, 2, 20, 3, 2, 1, 2, [0, 42, "XBZ"], 20, [0, 40, "Ed"], 1, 1, 1, 20, [0, 36, "Ed"], [0, 35, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 25, "Var"], 20, 1, 1, 20, 1, 20, 1, 20, [0, 20, "Var"], 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 104 [ , 2, 2, 1, 2, 2, [0, 71, "Gu"], 2, 20, 3, 1, 1, 1, 2, 2, 3, 1, 2, 20, 1, 2, 1, 2, 1, 1, 1, 20, [0, 39, "Ed"], [0, 38, "Var"], 1, 1, 1, 20, 1, 1, 20, [0, 32, "Var"], 1, 20, [0, 30, "Ed"], 1, 20, [0, 28, "Var"], 1, 20, 1, 1, 20, 20, [0, 24, "Vx"], 1, 20, 1, 20, [0, 21, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 16, "Ed"], 20, [0, 15, "Var"], 20, 1, 20, 1, 20, 20, 20, [0, 12, "Vx"], 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 105 [ , [6, 5], [6, 21], 1, 2, 2, 3, [0, 68, "BZ"], 1, 1, 1, 1, 1, 2, [0, 56, "BZ"], 1, 20, [0, 52, "DaH"], 1, 20, [0, 48, "BZ"], 1, 2, [0, 43, "Ed"], [0, 42, "Ed"], [0, 41, "Var"], 1, 1, 1, 20, [0, 37, "Var"], 1, 1, 20, [0, 34, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 26, "Var"], 1, 20, 1, 20, 1, 20, [0, 22, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 106 [ , 2, 3, 1, 2, 2, 3, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 3, 2, 1, 1, 1, 2, 1, 1, 1, 20, [0, 40, "Ed"], 1, 1, 1, 20, [0, 36, "Var"], 1, 1, 20, [0, 33, "Var"], 1, 20, [0, 31, "Var"], 1, 20, [0, 29, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 23, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, [0, 6, "Ed"], 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 107 [ , 2, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 20, [0, 54, "XB"], 3, [0, 51, "XB"], 20, 1, 1, 2, 1, 1, 1, 1, 1, 20, [0, 39, "Ed"], [0, 38, "Var"], 1, 1, 20, [0, 35, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 27, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 14, "Ed"], 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 108 [ , 2, 2, 1, 2, [0, 76, "BKW"], 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 20, 20, 1, 2, [0, 45, "Ed"], [0, 44, "DNX"], [0, 43, "DNX"], [0, 42, "Ed"], [0, 41, "Var"], 1, 1, 1, 20, [0, 37, "Var"], 1, 1, 20, 1, 1, 20, [0, 32, "Var"], 1, 20, [0, 30, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 24, "Ed"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, [0, 8, "BZ"], 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 109 [ , 2, 2, 20, [7, 426], 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 2, 20, 20, [0, 49, "GW2"], 1, 1, 1, 1, 1, 20, [0, 40, "Var"], 1, 1, 1, 20, 1, 1, 20, [0, 34, "Ed"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 28, "Var"], 1, 20, 1, 20, [0, 25, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 110 [ , [6, 5], 2, 2, 3, 2, 2, [0, 72, "BZ"], 2, 20, 1, 1, 1, 2, [0, 60, "BZ"], 20, [0, 56, "BZ"], 1, 2, [0, 51, "BZ"], 20, 20, 3, [0, 46, "Ed"], [0, 45, "Ed"], [0, 44, "BZ"], [0, 43, "Var"], 1, 1, 1, 20, [0, 39, "Ed"], 1, 1, 20, [0, 36, "Ed"], 1, 1, 20, [0, 33, "Var"], 1, 20, [0, 31, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 20, "Var"], 20, [0, 19, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 13, "Var"], 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 111 [ , 2, [6, 6], 2, 2, 2, 2, 1, 2, 20, 20, 1, 1, 2, 2, 1, 2, 1, 2, 1, 2, 20, 3, 1, 1, 1, 1, 20, [0, 42, "Ed"], [0, 41, "Var"], 1, 1, 20, [0, 38, "Ed"], 1, 1, 20, [0, 35, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 29, "Var"], 1, 20, 1, 20, [0, 26, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 21, "Var"], 1, 20, 1, 20, 20, [0, 18, "Ed"], 20, [0, 17, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, [0, 11, "VE"], 20, 20, 1, 20, 1, 20, 20, 20, [0, 8, "Ed"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 112 [ , 2, 1, 2, 2, 2, [0, 76, "DG5"], 1, 2, 2, 20, 20, 1, 2, 2, 1, 2, 20, [0, 55, "GW2"], 2, [0, 51, "BZ"], 20, 3, 1, 1, 1, 1, 1, 1, 1, 20, [0, 40, "Var"], 1, 1, 20, [0, 37, "Var"], 1, 1, 20, 1, 1, 20, [0, 32, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 27, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 22, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, [0, 9, "Ed"], 20, 20, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 113 [ , 2, 2, [6, 28], 2, 2, 2, 1, 2, 2, 20, 20, 20, [0, 68, "DaH"], 2, 1, 2, 1, 2, 2, 1, 2, 3, 1, 1, 2, [0, 45, "DNX"], [0, 44, "Ed"], [0, 43, "Var"], 1, 1, 1, 20, [0, 39, "Var"], 1, 1, 20, [0, 36, "Var"], 1, 20, [0, 34, "Ed"], 1, 1, 20, 1, 20, [0, 30, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 23, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 16, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 20, [0, 7, "DaH"], 1, 20, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 114 [ , 2, 2, 1, 2, 2, 2, 2, [0, 74, "Bou"], 2, 20, 20, 20, 3, 2, 1, 2, 1, 2, 2, 1, 2, 1, 20, 1, 2, 1, 1, 1, 20, [0, 42, "Var"], [0, 41, "Var"], 1, 1, 20, [0, 38, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 28, "Var"], 1, 20, 1, 20, 1, 20, [0, 24, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 3, 20, 1, 20, 20, 20, [0, 5, "Bou"], 20, 20, 1, 1, 20, 20, 20], #V n = 115 [ , [6, 5], 2, 2, [0, 84, "Gu3"], 2, 2, [0, 76, "BZ"], 3, [0, 72, "BZ"], 1, 20, 20, 3, [0, 64, "BZ"], 20, [0, 60, "BZ"], 1, 2, 2, 2, [0, 52, "BZ"], 2, 1, 20, [0, 48, "BZ"], [0, 46, "Ed"], [0, 45, "Var"], 1, 1, 1, 1, 20, 1, 1, 1, 20, 1, 1, 20, [0, 35, "Var"], 1, 20, [0, 33, "Var"], 1, 20, [0, 31, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 25, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 15, "Var"], 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20], #V n = 116 [ , 2, [6, 16], 2, 1, 2, 2, 2, 3, 2, 1, 1, 20, 3, 2, 1, 1, 1, 2, 2, [0, 54, "BZ"], 2, [0, 51, "BZ"], 20, [0, 49, "GW2"], 3, 1, 1, 20, [0, 44, "Ed"], [0, 43, "Var"], 1, 1, 20, [0, 40, "Ed"], 1, 1, 20, [0, 37, "Ed"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 29, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20], #V n = 117 [ , 2, 1, 2, 2, [0, 84, "Bou"], [0, 80, "Gu"], 2, 1, 2, 1, 1, 2, 3, 2, 1, 2, 1, 2, 2, 1, 2, 2, [0, 50, "Ed"], 3, 1, 1, 1, 1, 1, 1, 20, [0, 42, "Var"], 1, 1, 20, [0, 39, "Ed"], 1, 1, 20, [0, 36, "Var"], 1, 20, [0, 34, "Var"], 1, 20, [0, 32, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 26, "Ed"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20], #V n = 118 [ , 2, 2, [0, 88, "Bel"], 2, 2, 2, 2, 1, 2, 1, 1, 2, 3, 2, 1, 2, 20, [0, 60, "GW2"], 2, 1, 2, 2, 1, 1, 20, 1, 1, 2, [0, 45, "Var"], 1, 1, 1, 20, [0, 41, "Var"], 1, 1, 20, [0, 38, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 30, "Var"], 1, 20, 1, 20, [0, 27, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 20, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, [0, 7, "VE"], 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20], #V n = 119 [ , 2, 2, 1, 2, 2, 2, 2, 1, 2, 20, 1, 2, 1, 2, 1, 2, 20, 3, [0, 59, "GW2"], 1, 2, 2, 1, 2, [0, 49, "Var"], 20, 1, 2, 1, 20, [0, 44, "Var"], [0, 43, "Var"], 1, 1, 20, [0, 40, "Var"], 1, 1, 20, 1, 1, 20, [0, 35, "Var"], 1, 20, [0, 33, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 22, "Var"], 20, [0, 21, "Ed"], 1, 20, 20, [0, 19, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 14, "Var"], 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, [0, 8, "Ed"], 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20], #V n = 120 [ , [6, 5], 2, 2, [0, 88, "GB4"], 2, 2, [0, 80, "BZ"], 20, [0, 76, "BZ"], 20, 20, [0, 72, "BZ"], 20, [0, 68, "BZ"], 20, [0, 64, "BZ"], 20, 3, 3, [0, 57, "BZ"], [0, 56, "BZ"], [0, 54, "BZ"], [0, 52, "BZ"], [0, 51, "BZ"], 1, 20, 20, [0, 48, "BZ"], 1, 1, 1, 1, 20, [0, 42, "Var"], 1, 1, 20, 1, 1, 20, [0, 37, "Ed"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 31, "Var"], 1, 20, 1, 20, [0, 28, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 23, "Ed"], 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 18, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, [0, 12, "BZ"], 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20], #V n = 121 [ , 2, [6, 16], 2, 1, 2, 2, 2, 1, 2, 1, 20, 3, 1, 2, 1, 2, 1, 2, 3, 1, 2, 2, 1, 1, 1, 1, 20, 3, [0, 47, "Ed"], [0, 46, "Ed"], [0, 45, "Var"], 1, 1, 1, 20, 1, 1, 20, [0, 39, "Ed"], 1, 1, 20, [0, 36, "Var"], 1, 20, [0, 34, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 29, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 24, "Ed"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 17, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20], #V n = 122 [ , 2, 1, 2, 20, [0, 88, "GW2"], 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 2, 1, 2, [0, 51, "Ed"], [0, 50, "Var"], [0, 49, "Var"], 1, 1, 1, 1, 20, [0, 44, "Var"], 1, 1, 20, [0, 41, "Ed"], 1, 1, 20, [0, 38, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 32, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 25, "Ed"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20], #V n = 123 [ , 2, 2, [0, 92, "Bel"], 2, 3, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 1, 20, [0, 48, "Ed"], [0, 47, "Var"], 1, 1, 1, 20, [0, 43, "Var"], 1, 1, 20, [0, 40, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 30, "Var"], 1, 20, 1, 20, 1, 20, [0, 26, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20], #V n = 124 [ , 2, 2, 2, 2, 3, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 20, 1, 2, [0, 57, "BZ"], 2, [0, 54, "BZ"], 1, 1, 1, 1, 1, 1, 20, [0, 46, "Ed"], [0, 45, "Var"], 1, 1, 20, [0, 42, "Var"], 1, 1, 20, [0, 39, "Var"], 1, 20, [0, 37, "Var"], 1, 20, [0, 35, "Ed"], 1, 20, [0, 33, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 27, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 16, "Var"], 20, 1, 20, 1, 20, 20, [0, 13, "Var"], 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20], #V n = 125 [ , [6, 5], 2, 2, 2, 1, 2, [0, 84, "BZ"], 2, [0, 80, "BZ"], 2, 1, 2, 20, [0, 72, "BZ"], 20, [0, 68, "BZ"], 2, [0, 64, "BZ"], 1, 20, [0, 60, "BZ"], 2, [0, 56, "BZ"], 2, [0, 53, "Ed"], [0, 52, "BZ"], [0, 51, "BZ"], [0, 50, "Ed"], [0, 49, "Var"], 1, 1, 1, 1, 20, [0, 44, "Var"], 1, 1, 20, [0, 41, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 31, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, [0, 12, "Ed"], 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20], #V n = 126 [ , 2, [6, 21], 2, [0, 92, "GB4"], 20, [0, 88, "BKW"], 2, [0, 82, "DaH"], 3, [0, 78, "DaH"], 20, [0, 76, "XBZ"], 20, 3, [0, 69, "DaH"], 3, [0, 66, "DaH"], 2, 1, 2, 3, 2, 1, 2, 1, 1, 1, 1, 1, 20, [0, 48, "Ed"], [0, 47, "Var"], 1, 1, 1, 20, [0, 43, "Var"], 1, 1, 20, 1, 1, 20, [0, 38, "Var"], 1, 20, [0, 36, "Var"], 1, 20, [0, 34, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 28, "Ed"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, [0, 4, "Gl"], 1, 20, 20, 20], #V n = 127 [ , 2, 1, 2, 2, 2, 3, 2, 2, 3, 1, 2, 3, 2, 3, 2, 3, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, [0, 52, "Var"], [0, 51, "Var"], 1, 1, 1, 1, 20, [0, 46, "Var"], 1, 1, 1, 20, 1, 1, 20, [0, 40, "Ed"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 32, "Var"], 1, 20, 1, 20, [0, 29, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 15, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 128 [ , 2, 20, [6, 64], 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 20, [0, 63, "BZ"], 20, [0, 60, "BZ"], 20, [0, 57, "BZ"], 20, [0, 54, "BZ"], 1, 1, 20, [0, 50, "Ed"], [0, 49, "Var"], 1, 1, 1, 20, [0, 45, "Var"], 1, 1, 20, [0, 42, "Ed"], 1, 1, 20, [0, 39, "Var"], 1, 20, [0, 37, "Var"], 1, 20, [0, 35, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 129 [ , 2, 2, 3, 2, 2, 2, 2, 2, 2, 1, 2, [0, 77, "GW1"], 2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 20, [0, 48, "Ed"], [0, 47, "Var"], 1, 1, 20, [0, 44, "Var"], 1, 1, 20, [0, 41, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 33, "Var"], 1, 20, 1, 20, [0, 30, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 130 [ , [6, 5], 2, 1, 2, 2, 2, [6, 65], 2, 2, 20, [0, 80, "DaH"], 2, [0, 76, "DaH"], [0, 74, "DaH"], [0, 72, "GW2"], [0, 70, "XB"], 20, [0, 68, "DaH"], 1, 2, 1, 2, 1, 2, 1, 2, [0, 54, "Ed"], [0, 53, "DNX"], [0, 52, "Ed"], [0, 51, "Var"], 1, 1, 1, 1, 20, [0, 46, "Var"], 1, 1, 20, [0, 43, "Var"], 1, 1, 20, 1, 1, 20, [0, 38, "Var"], 1, 20, [0, 36, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 31, "Var"], 1, 20, 1, 20, 1, 20, [0, 27, "Var"], 20, [0, 26, "BZ"], 20, [0, 25, "BZ"], 20, [0, 24, "BZ"], 20, [0, 23, "BZ"], 20, [0, 22, "BZ"], 20, [0, 21, "BZ"], 20, [0, 20, "BZ"], 20, [0, 19, "BZ"], 20, [0, 18, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 131 [ , 2, 2, 2, [0, 96, "BDK"], 2, 2, 3, 2, 2, 20, 3, 2, 3, 2, 3, 1, 2, 3, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 20, [0, 50, "VE"], [0, 49, "Var"], 1, 1, 1, 20, [0, 45, "Var"], 1, 1, 20, [0, 42, "Var"], 1, 20, [0, 40, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 34, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 132 [ , 2, [6, 6], 2, 3, 2, [0, 92, "GW2"], 1, 2, 2, 20, 3, [0, 79, "GW1"], 1, 2, 3, [0, 71, "XB"], [0, 70, "GW2"], 3, 20, [0, 66, "BZ"], 20, [0, 63, "BZ"], 20, [0, 60, "BZ"], 20, [0, 57, "BZ"], [0, 55, "Vx"], [0, 54, "Var"], [0, 53, "Var"], 1, 1, 1, 1, 20, [0, 48, "Var"], 1, 1, 1, 20, [0, 44, "Var"], 1, 1, 20, 1, 1, 20, [0, 39, "Var"], 1, 20, [0, 37, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 32, "Var"], 1, 20, 1, 20, 1, 20, [0, 28, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 17, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 133 [ , 2, 1, 2, 1, 2, 2, 20, [0, 88, "DaH"], 2, 2, 3, 3, 1, 2, 3, 3, 3, 3, 20, 3, 20, 3, 20, 3, [0, 58, "Vx"], 3, 1, 1, 1, 20, [0, 52, "VE"], [0, 51, "Var"], 1, 1, 1, 20, [0, 47, "VE"], 1, 1, 1, 20, 1, 1, 20, [0, 41, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 35, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 29, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 134 [ , 2, 2, [6, 49], 2, [0, 96, "BKW"], 2, 2, 3, 2, 2, 1, 2, 20, [0, 77, "GW1"], 1, 2, 3, 3, 20, 3, 20, 3, [0, 61, "Vx"], 3, 1, 1, 1, 1, 1, 1, 1, 1, 20, [0, 50, "VE"], [0, 49, "Var"], 1, 1, 20, [0, 46, "VE"], 1, 1, 20, [0, 43, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 33, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 135 [ , [6, 5], 2, 2, 2, 3, [0, 94, "GW2"], 2, 1, 2, 2, 20, [0, 80, "BZ"], 20, 3, 20, [0, 72, "BZ"], 3, 3, 20, 3, [0, 64, "Vx"], 3, 2, 1, 2, [0, 58, "Vx"], [0, 57, "Vx"], [0, 56, "DNX"], [0, 55, "DNX"], [0, 54, "VE"], [0, 53, "Var"], 1, 1, 1, 1, 20, [0, 48, "Var"], 1, 1, 20, [0, 45, "Var"], 1, 1, 20, [0, 42, "Var"], 1, 20, [0, 40, "Var"], 1, 20, [0, 38, "VE"], 1, 20, [0, 36, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 30, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 136 [ , 2, 2, 2, 2, 2, 3, 2, 20, [0, 88, "DaH"], [0, 84, "GW2"], 1, 2, 20, 3, 1, 2, 2, 1, 1, 2, 1, 1, 2, 20, [0, 60, "Vx"], 1, 1, 1, 1, 1, 1, 20, [0, 52, "VE"], [0, 51, "Var"], 1, 1, 1, 20, [0, 47, "Var"], 1, 1, 20, [0, 44, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 34, "Var"], 1, 20, 1, 20, [0, 31, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 25, "VE"], 20, [0, 24, "VE"], 20, [0, 23, "VE"], 20, [0, 22, "VE"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 16, "Var"], 20, 1, 20, 20, 1, 20, 1, 20, 20, [0, 12, "VE"], 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 137 [ , 2, [6, 16], 2, [0, 100, "BKW"], 2, 2, [6, 65], 2, 3, 2, 1, 2, 1, 2, 1, 2, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, [0, 58, "Vx"], [0, 57, "Vx"], [0, 56, "Var"], [0, 55, "Var"], 1, 1, 1, 1, 20, [0, 50, "Var"], 1, 1, 1, 20, [0, 46, "Var"], 1, 1, 20, 1, 1, 20, [0, 41, "Var"], 1, 20, [0, 39, "Var"], 1, 20, [0, 37, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 27, "Var"], 20, [0, 26, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 21, "VE"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 138 [ , 2, 1, 2, 2, 2, 2, 3, [0, 90, "MTS"], 3, 2, 1, 2, 1, 2, 1, 2, [0, 72, "BZ"], 2, 20, [0, 68, "BZ"], [0, 66, "Vx"], 20, [0, 64, "BZ"], 2, 20, [0, 60, "BZ"], 1, 1, 1, 1, 20, [0, 54, "VE"], [0, 53, "Var"], 1, 1, 1, 20, [0, 49, "VE"], [0, 48, "Var"], 1, 1, 20, 1, 1, 20, [0, 43, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 35, "Var"], 1, 20, 1, 20, [0, 32, "Var"], 1, 20, 1, 20, 1, 20, [0, 28, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 20, "VE"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 139 [ , 2, 2, [6, 64], 2, 2, [0, 96, "GW2"], 3, 2, 3, [0, 86, "GW2"], 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, [0, 63, "Vx"], 2, 1, 2, [0, 58, "Var"], 1, 1, 1, 1, 1, 20, [0, 52, "VE"], [0, 51, "Var"], 1, 1, 1, 20, 1, 1, 20, [0, 45, "VE"], 1, 1, 20, [0, 42, "Var"], 1, 20, [0, 40, "Var"], 1, 20, [0, 38, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 33, "Var"], 1, 20, 1, 20, 1, 20, [0, 29, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 19, "VE"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 140 [ , [6, 5], 2, 2, 2, [0, 100, "BKW"], 2, 1, 2, 3, 3, 20, [0, 84, "BZ"], 20, [0, 80, "BZ"], 20, [0, 76, "BZ"], 20, [0, 72, "BZ"], 20, [0, 69, "BZ"], 20, [0, 66, "BZ"], 1, 2, [0, 62, "Vx"], 20, [0, 60, "BZ"], 1, 20, [0, 57, "VE"], [0, 56, "VE"], [0, 55, "Var"], 1, 1, 1, 1, 20, [0, 50, "Var"], 1, 1, 20, [0, 47, "VE"], 1, 1, 20, [0, 44, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 36, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, [0, 13, "Var"], 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 141 [ , 2, 2, 2, 2, 2, 2, 2, [0, 92, "MTS"], 2, 2, 20, 3, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, [0, 64, "Vx"], 1, 2, 1, 1, 1, 1, 1, 1, 20, [0, 54, "VE"], [0, 53, "Var"], 1, 1, 1, 20, [0, 49, "Var"], 1, 1, 20, [0, 46, "Var"], 1, 1, 20, 1, 1, 20, [0, 41, "Var"], 1, 20, [0, 39, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 34, "Var"], 1, 20, 1, 20, 1, 20, [0, 30, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 18, "Var"], 20, 1, 20, 1, 20, 20, [0, 15, "Var"], 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 142 [ , 2, [6, 16], 2, [0, 104, "Bo1"], 2, 2, 2, 2, 2, [0, 87, "MTS"], 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 20, [0, 60, "Vx"], [0, 59, "VE"], [0, 58, "Var"], [0, 57, "Var"], 1, 1, 1, 1, 20, [0, 52, "Var"], [0, 51, "Var"], 1, 1, 20, [0, 48, "Var"], 1, 1, 20, [0, 45, "Var"], 1, 20, [0, 43, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 37, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 31, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 143 [ , 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 20, [0, 56, "VE"], [0, 55, "Var"], 1, 1, 1, 1, 20, [0, 50, "Var"], 1, 1, 20, [0, 47, "Var"], 1, 1, 20, 1, 1, 20, [0, 42, "Var"], 1, 20, [0, 40, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 35, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 25, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 144 [ , 2, 2, [6, 64], 2, 2, [0, 100, "GW2"], [6, 72], 2, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 20, [0, 72, "BZ"], 20, [0, 69, "BZ"], [0, 68, "BZ"], [0, 66, "BZ"], 20, [0, 64, "BZ"], 2, [0, 61, "Var"], [0, 60, "Var"], [0, 59, "Var"], 1, 1, 1, 1, 20, [0, 54, "VE"], [0, 53, "Var"], 1, 1, 1, 20, [0, 49, "Var"], 1, 1, 20, 1, 1, 20, [0, 44, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 38, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 32, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 27, "Var"], 20, [0, 26, "Var"], 1, 20, 20, [0, 24, "VE"], 20, [0, 23, "VE"], 20, [0, 22, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 17, "Var"], 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 145 [ , [6, 5], 2, 2, 2, [0, 104, "Koh"], 3, 1, 2, [0, 92, "BZ"], 1, 1, 2, 20, [0, 84, "BZ"], 20, [0, 80, "BZ"], 20, [0, 76, "BZ"], 2, 3, 1, 2, 3, 2, [0, 65, "Vx"], 3, [0, 63, "Vx"], 1, 1, 1, 20, [0, 58, "VE"], [0, 57, "Var"], 1, 1, 1, 1, 20, [0, 52, "Var"], 1, 1, 1, 20, 1, 1, 20, [0, 46, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 36, "Var"], 1, 20, 1, 20, [0, 33, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 28, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, [0, 5, "Ed"], 20, 20, 1, 20, 1, 20, 20, 20], #V n = 146 [ , 2, 2, 2, 2, 3, 2, 1, 2, 2, [0, 90, "MTS"], 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, [0, 56, "VE"], [0, 55, "Var"], 1, 1, 1, 20, [0, 51, "Var"], 1, 1, 20, [0, 48, "VE"], 1, 1, 20, [0, 45, "Var"], 1, 20, [0, 43, "Var"], 1, 20, [0, 41, "VE"], 1, 20, [0, 39, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 29, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 21, "VE"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 147 [ , 2, [6, 21], 2, [0, 108, "Bo1"], 3, 2, 1, 2, 2, 1, 20, [0, 89, "GW1"], 1, 2, 1, 2, 1, 2, 2, 2, 1, 2, 1, 2, 1, 2, [0, 64, "Vx"], [0, 63, "Vx"], [0, 62, "VE"], [0, 61, "VE"], [0, 60, "Var"], [0, 59, "Var"], 1, 1, 1, 1, 20, [0, 54, "VE"], [0, 53, "Var"], 1, 1, 20, [0, 50, "Var"], 1, 1, 20, [0, 47, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 37, "Var"], 1, 20, 1, 20, [0, 34, "Var"], 1, 20, 1, 20, 1, 20, [0, 30, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 20, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 148 [ , 2, 1, 2, 2, 2, 2, 20, [0, 98, "MTS"], 2, 1, 2, 3, 1, 2, 1, 2, 1, 2, [0, 76, "GW2"], 2, 20, [0, 72, "BZ"], 2, [0, 69, "BZ"], 1, 2, 1, 1, 1, 1, 1, 1, 20, [0, 58, "VE"], [0, 57, "Var"], 1, 1, 1, 1, 20, [0, 52, "Var"], 1, 1, 20, [0, 49, "Var"], 1, 1, 20, 1, 1, 20, [0, 44, "Var"], 1, 20, [0, 42, "Var"], 1, 20, [0, 40, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 35, "Var"], 1, 20, 1, 20, 1, 20, [0, 31, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 149 [ , 2, 20, [6, 64], 2, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 2, [0, 62, "Var"], [0, 61, "Var"], 1, 1, 1, 1, 20, [0, 56, "VE"], [0, 55, "Var"], 1, 1, 1, 20, [0, 51, "Var"], 1, 1, 20, [0, 48, "Var"], 1, 20, [0, 46, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 38, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, [0, 16, "Var"], 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 150 [ , [6, 5], 2, 3, 2, 2, [0, 104, "DG5"], 1, 2, [0, 96, "BZ"], 20, [0, 92, "BZ"], 2, 20, [0, 88, "BZ"], 20, [0, 84, "BZ"], 20, [0, 80, "BZ"], [0, 77, "GW2"], [0, 76, "BZ"], 1, 2, [0, 72, "BZ"], 2, 20, [0, 68, "BZ"], [0, 66, "Vx"], 20, [0, 64, "BZ"], 1, 1, 20, [0, 60, "VE"], [0, 59, "Var"], 1, 1, 1, 1, 20, [0, 54, "Var"], 1, 1, 1, 20, [0, 50, "Var"], 1, 1, 20, 1, 1, 20, [0, 45, "Var"], 1, 20, [0, 43, "Var"], 1, 20, [0, 41, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 36, "Var"], 1, 20, 1, 20, 1, 20, [0, 32, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 19, "VE"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 151 [ , 2, 2, 1, 2, 2, 3, 1, 2, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 20, [0, 58, "VE"], [0, 57, "Var"], 1, 1, 1, 20, [0, 53, "Var"], 1, 1, 1, 20, 1, 1, 20, [0, 47, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 39, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 33, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 25, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 152 [ , 2, 2, 2, [0, 112, "Bo1"], 2, 2, 20, [0, 101, "Ma"], 2, 1, 2, [0, 92, "XBZ"], 1, 2, 1, 2, 1, 2, 1, 2, 20, [0, 75, "BZ"], 20, [0, 72, "BZ"], 20, [0, 69, "BZ"], 2, [0, 66, "BZ"], 20, [0, 64, "Vx"], [0, 63, "VE"], [0, 62, "Var"], [0, 61, "Var"], 1, 1, 1, 1, 20, [0, 56, "VE"], [0, 55, "Var"], 1, 1, 20, [0, 52, "Var"], 1, 1, 20, [0, 49, "Var"], 1, 1, 20, 1, 1, 20, [0, 44, "Var"], 1, 20, [0, 42, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 37, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 28, "Var"], 20, [0, 27, "Var"], 20, [0, 26, "VE"], 1, 20, 20, [0, 24, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 153 [ , 2, [6, 6], 2, 3, 2, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 20, 3, 2, 3, 1, 2, [0, 68, "Vx"], 1, 1, 1, 1, 1, 1, 20, [0, 60, "VE"], [0, 59, "Var"], 1, 1, 1, 1, 20, [0, 54, "Var"], 1, 1, 20, [0, 51, "Var"], 1, 1, 20, [0, 48, "Var"], 1, 20, [0, 46, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 40, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 34, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 29, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 23, "VE"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 18, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 154 [ , 2, 1, 2, 2, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 65, "Var"], [0, 64, "Var"], [0, 63, "Var"], 1, 1, 1, 1, 20, [0, 58, "VE"], [0, 57, "Var"], 1, 1, 1, 20, [0, 53, "Var"], 1, 1, 20, [0, 50, "Var"], 1, 1, 20, 1, 1, 20, [0, 45, "Var"], 1, 20, [0, 43, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 38, "Var"], 1, 20, 1, 20, [0, 35, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 30, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 22, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 155 [ , [6, 5], 2, [6, 70], 2, 2, 2, [0, 104, "BZ"], [0, 103, "MTS"], [0, 100, "BZ"], 20, [0, 96, "BZ"], [0, 94, "GW1"], 20, [0, 92, "BZ"], 20, [0, 88, "BZ"], 20, [0, 84, "BZ"], 20, [0, 80, "BZ"], 20, 1, 2, 20, 1, 2, [0, 69, "Vx"], 1, 2, 1, 1, 1, 20, [0, 62, "VE"], [0, 61, "Var"], 1, 1, 1, 1, 20, [0, 56, "Var"], 1, 1, 1, 20, [0, 52, "Var"], 1, 1, 20, 1, 1, 20, [0, 47, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 41, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 31, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 156 [ , 2, 2, 2, 2, [6, 78], 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 20, [0, 76, "BZ"], [0, 73, "Vx"], 20, [0, 72, "BZ"], 1, 20, [0, 68, "BZ"], 2, 1, 1, 1, 1, 1, 20, [0, 60, "VE"], [0, 59, "Var"], 1, 1, 1, 20, [0, 55, "VE"], 1, 1, 1, 20, 1, 1, 20, [0, 49, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 39, "Var"], 1, 20, 1, 20, [0, 36, "Var"], 1, 20, 1, 20, 1, 20, [0, 32, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 21, "VE"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 157 [ , 2, 2, 2, 2, 3, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 1, 20, 3, 1, 2, 3, [0, 67, "Vx"], 20, [0, 65, "VE"], [0, 64, "Var"], [0, 63, "Var"], 1, 1, 1, 1, 20, [0, 58, "VE"], [0, 57, "Var"], 1, 1, 20, [0, 54, "VE"], 1, 1, 20, [0, 51, "VE"], 1, 1, 20, [0, 48, "Var"], 1, 20, [0, 46, "VE"], 1, 20, [0, 44, "VE"], 1, 20, [0, 42, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 37, "Var"], 1, 20, 1, 20, 1, 20, [0, 33, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 158 [ , 2, [6, 16], 2, 2, 2, [0, 110, "BKW"], 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 20, [0, 62, "VE"], [0, 61, "Var"], 1, 1, 1, 1, 20, [0, 56, "Var"], 1, 1, 20, [0, 53, "VE"], 1, 1, 20, [0, 50, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 40, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 20, "Var"], 20, 1, 20, 1, 20, 20, [0, 17, "Var"], 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 159 [ , 2, 1, 2, 2, 2, 2, 1, 2, 2, 1, 2, 20, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 1, 2, 2, [0, 68, "Var"], [0, 67, "Var"], [0, 66, "Var"], [0, 65, "Var"], 1, 1, 1, 1, 20, [0, 60, "VE"], [0, 59, "Var"], 1, 1, 1, 20, [0, 55, "Var"], 1, 1, 20, [0, 52, "Var"], 1, 1, 20, 1, 1, 20, [0, 47, "Var"], 1, 20, [0, 45, "Var"], 1, 20, [0, 43, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 38, "Var"], 1, 20, 1, 20, 1, 20, [0, 34, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 160 [ , [6, 5], 2, [6, 75], 2, 2, 2, 1, 2, [0, 104, "BZ"], 20, [0, 100, "BZ"], 2, 20, [0, 96, "BZ"], 20, [0, 92, "BZ"], 20, [0, 88, "BZ"], 20, [0, 84, "BZ"], 20, [0, 80, "BZ"], 2, 1, 1, 2, 20, [0, 72, "BZ"], 2, 1, 1, 1, 1, 20, [0, 64, "VE"], [0, 63, "Var"], 1, 1, 1, 1, 20, [0, 58, "Var"], [0, 57, "Var"], 1, 1, 20, [0, 54, "Var"], 1, 1, 20, [0, 51, "Var"], 1, 20, [0, 49, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 41, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 35, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 29, "Var"], 20, [0, 28, "Var"], 20, [0, 27, "Var"], 20, [0, 26, "Var"], 20, [0, 25, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 161 [ , 2, 2, 1, 2, 2, [0, 112, "BKW"], 20, [0, 108, "MTS"], 2, 1, 2, [0, 98, "GW1"], 20, 3, 1, 2, 1, 2, 1, 2, 1, 1, 2, 20, 1, 2, 20, 1, 2, 2, 1, 1, 1, 1, 1, 1, 20, [0, 62, "VE"], [0, 61, "Var"], 1, 1, 1, 1, 20, [0, 56, "Var"], 1, 1, 20, [0, 53, "Var"], 1, 1, 20, 1, 1, 20, [0, 48, "Var"], 1, 20, [0, 46, "Var"], 1, 20, [0, 44, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 39, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 30, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 24, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 162 [ , 2, 2, 2, [0, 120, "BKW"], [0, 116, "BKW"], 3, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, [0, 80, "BZ"], 2, 20, [0, 76, "BZ"], 2, 20, [0, 72, "BZ"], [0, 70, "Vx"], 20, [0, 68, "BZ"], [0, 67, "VE"], [0, 66, "Var"], [0, 65, "Var"], 1, 1, 1, 1, 20, [0, 60, "VE"], [0, 59, "Var"], 1, 1, 1, 20, 1, 1, 1, 20, 1, 1, 20, [0, 50, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 36, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 31, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 23, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 163 [ , 2, [6, 16], 2, 3, 2, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 20, 3, 2, 20, 3, 1, 1, 1, 1, 1, 1, 20, [0, 64, "VE"], [0, 63, "Var"], 1, 1, 1, 1, 20, [0, 58, "Var"], 1, 1, 20, [0, 55, "VE"], 1, 1, 20, [0, 52, "VE"], 1, 1, 20, 1, 1, 20, [0, 47, "Var"], 1, 20, [0, 45, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 40, "Var"], 1, 20, 1, 20, [0, 37, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 32, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 164 [ , 2, 1, 2, 2, 2, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, [0, 70, "Var"], [0, 69, "Var"], [0, 68, "Var"], [0, 67, "Var"], 1, 1, 1, 1, 20, [0, 62, "VE"], [0, 61, "Var"], 1, 1, 1, 20, [0, 57, "Var"], 1, 1, 20, [0, 54, "Var"], 1, 1, 20, [0, 51, "Var"], 1, 20, [0, 49, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 43, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 33, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 22, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, [0, 16, "Var"], 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 165 [ , [6, 5], 2, [6, 80], 2, [0, 118, "BKW"], 2, 1, 2, [0, 108, "BZ"], 20, [0, 104, "BZ"], 20, 1, 2, 20, [0, 96, "BZ"], 20, [0, 92, "BZ"], 20, [0, 88, "BZ"], 20, [0, 84, "BZ"], 2, [0, 80, "BZ"], 1, 2, [0, 76, "BZ"], 1, 2, [0, 72, "BZ"], 1, 1, 1, 1, 20, [0, 66, "VE"], [0, 65, "Var"], 1, 1, 1, 1, 20, [0, 60, "Var"], [0, 59, "Var"], 1, 1, 20, [0, 56, "Var"], 1, 1, 20, [0, 53, "Var"], 1, 1, 20, 1, 1, 20, [0, 48, "Var"], 1, 20, [0, 46, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 41, "Var"], 1, 20, 1, 20, [0, 38, "Var"], 1, 20, 1, 20, 1, 20, [0, 34, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 166 [ , 2, 2, 2, 2, 2, 2, 1, 2, 2, 1, 2, 20, 20, [0, 100, "XBZ"], 20, 3, 20, 3, 20, 3, 20, 3, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 20, [0, 64, "VE"], [0, 63, "Var"], 1, 1, 1, 1, 20, [0, 58, "Var"], 1, 1, 20, [0, 55, "Var"], 1, 1, 20, 1, 1, 20, [0, 50, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 44, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 39, "Var"], 1, 20, 1, 20, 1, 20, [0, 35, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 167 [ , 2, 2, 2, 2, 2, 2, 1, 2, 2, 1, 2, 2, 20, 3, 2, 3, 20, 3, 20, 3, 20, 1, 2, 20, 1, 2, 20, 1, 2, [0, 73, "Vx"], 1, 2, 20, [0, 69, "VE"], [0, 68, "Var"], [0, 67, "Var"], 1, 1, 1, 1, 20, [0, 62, "VE"], [0, 61, "Var"], 1, 1, 1, 20, [0, 57, "Var"], 1, 1, 20, [0, 54, "Var"], 1, 20, [0, 52, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 42, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 21, "VE"], 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 168 [ , 2, [6, 21], 2, 2, 2, 2, 1, 2, 2, 1, 2, 2, 20, 3, 2, 2, 2, 3, 20, 3, [0, 85, "Vx"], 20, [0, 84, "BZ"], [0, 81, "BZ"], 20, [0, 80, "BZ"], [0, 77, "Vx"], 20, [0, 76, "BZ"], 1, 20, [0, 72, "BZ"], 1, 1, 1, 1, 20, [0, 66, "VE"], [0, 65, "Var"], 1, 1, 1, 1, 20, [0, 60, "Var"], 1, 1, 1, 20, 1, 1, 1, 20, 1, 1, 20, [0, 51, "Var"], 1, 20, [0, 49, "VE"], 1, 20, [0, 47, "VE"], 1, 20, [0, 45, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 40, "Var"], 1, 20, 1, 20, 1, 20, [0, 36, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 30, "Var"], 20, [0, 29, "Var"], 20, [0, 28, "Var"], 20, [0, 27, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 169 [ , 2, 1, 2, 2, 2, [0, 118, "DG5"], 1, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 3, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 2, [0, 73, "Vx"], 1, 2, [0, 70, "Var"], [0, 69, "Var"], 1, 1, 1, 1, 20, [0, 64, "VE"], [0, 63, "Var"], 1, 1, 1, 20, [0, 59, "Var"], 1, 1, 20, [0, 56, "VE"], 1, 1, 20, [0, 53, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 43, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 37, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 31, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 26, "VE"], 20, [0, 25, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 170 [ , [6, 5], 20, [6, 85], 2, [0, 122, "DaH"], 3, 1, 2, [0, 112, "DaH"], 20, [0, 108, "DaH"], [0, 104, "DaH"], [0, 102, "DaH"], 20, [0, 100, "DaH"], [0, 98, "DaH"], 2, 3, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 75, "Vx"], 1, 20, [0, 72, "Vx"], 1, 1, 20, [0, 68, "VE"], [0, 67, "Var"], 1, 1, 1, 1, 20, [0, 62, "VE"], [0, 61, "Var"], 1, 1, 20, [0, 58, "Var"], 1, 1, 20, [0, 55, "Var"], 1, 1, 20, 1, 1, 20, [0, 50, "Var"], 1, 20, [0, 48, "Var"], 1, 20, [0, 46, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 41, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 32, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 20, "Var"], 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 171 [ , 2, 2, 1, 2, 2, 2, 20, [0, 117, "MTS"], 3, 20, 3, 3, 2, 20, 3, 3, [0, 96, "DaH"], 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 20, [0, 66, "VE"], [0, 65, "Var"], 1, 1, 1, 1, 20, [0, 60, "Var"], 1, 1, 20, [0, 57, "Var"], 1, 1, 20, [0, 54, "Var"], 1, 20, [0, 52, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 44, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 38, "VE"], 1, 20, 1, 20, 1, 20, [0, 34, "Var"], 20, [0, 33, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 24, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 172 [ , 2, 2, 20, [0, 128, "Liz"], 2, [0, 119, "Ayd"], 20, 3, 3, 20, 3, 1, 2, 2, 3, 3, 3, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 20, [0, 72, "Vx"], [0, 71, "VE"], [0, 70, "Var"], [0, 69, "Var"], 1, 1, 1, 1, 20, [0, 64, "VE"], [0, 63, "Var"], 1, 1, 1, 20, [0, 59, "Var"], 1, 1, 20, [0, 56, "Var"], 1, 1, 20, 1, 1, 20, [0, 51, "Var"], 1, 20, [0, 49, "Var"], 1, 20, [0, 47, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 20, [0, 39, "Var"], 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, [0, 17, "Var"], 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 173 [ , 2, 2, 20, 3, 2, 2, 20, 3, 2, 2, 3, 1, 2, 2, 2, 2, 3, 2, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 1, 1, 1, 1, 1, 20, [0, 68, "VE"], [0, 67, "Var"], 1, 1, 1, 1, 20, [0, 62, "Var"], 1, 1, 1, 20, [0, 58, "Var"], 1, 1, 20, 1, 1, 20, [0, 53, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 45, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 35, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 23, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 174 [ , 2, [6, 6], 2, 3, 2, 2, 20, 3, 2, 2, 3, 1, 2, 2, 2, 2, 1, 2, 20, [0, 92, "BZ"], 20, 20, [0, 88, "BZ"], 2, 20, [0, 84, "BZ"], 20, 20, [0, 80, "BZ"], 2, 20, [0, 76, "BZ"], 2, [0, 73, "Var"], [0, 72, "Var"], [0, 71, "Var"], 1, 1, 1, 1, 20, [0, 66, "VE"], [0, 65, "Var"], 1, 1, 1, 20, [0, 61, "Var"], 1, 1, 1, 20, 1, 1, 20, [0, 55, "VE"], 1, 1, 20, 1, 1, 20, [0, 50, "Var"], 1, 20, [0, 48, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 43, "Var"], 1, 20, 1, 20, [0, 40, "Var"], 1, 20, 1, 20, 1, 20, [0, 36, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 175 [ , [6, 5], 2, 2, 2, [0, 126, "BKW"], [0, 121, "DG5"], 1, 2, [0, 114, "GW2"], 2, 1, 2, [0, 106, "GW2"], [0, 104, "BZ"], 2, [0, 100, "BZ"], 20, [0, 96, "BZ"], 20, 3, 1, 20, 3, 2, 20, 3, 1, 20, 3, [0, 78, "Vx"], 20, 3, [0, 75, "Vx"], 1, 1, 1, 20, [0, 70, "VE"], [0, 69, "Var"], 1, 1, 1, 1, 20, [0, 64, "VE"], [0, 63, "Var"], 1, 1, 20, [0, 60, "VE"], 1, 1, 20, [0, 57, "VE"], 1, 1, 20, [0, 54, "Var"], 1, 20, [0, 52, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 46, "VE"], 1, 20, 1, 1, 20, 1, 20, [0, 41, "Var"], 1, 20, 1, 20, 1, 20, [0, 37, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 176 [ , 2, 2, 2, 2, 2, 2, 1, 2, 2, [0, 112, "GW2"], 20, [0, 108, "GW2"], 2, 2, [0, 103, "GW1"], 2, 1, 2, 1, 2, 1, 1, 2, [0, 87, "BZ"], 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 20, [0, 68, "VE"], [0, 67, "Var"], 1, 1, 1, 1, 20, [0, 62, "Var"], 1, 1, 20, [0, 59, "Var"], 1, 1, 20, [0, 56, "Var"], 1, 1, 20, 1, 1, 20, [0, 51, "Var"], 1, 20, [0, 49, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 44, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 31, "Var"], 20, [0, 30, "Var"], 20, [0, 29, "Var"], 20, [0, 28, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 177 [ , 2, 2, [6, 17], 2, 2, 2, 20, [0, 119, "MTS"], 2, 3, 2, 1, 2, 2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 76, "Vx"], [0, 75, "Vx"], 20, [0, 73, "VE"], [0, 72, "Var"], [0, 71, "Var"], 1, 1, 1, 1, 20, [0, 66, "VE"], [0, 65, "Var"], 1, 1, 1, 20, [0, 61, "Var"], 1, 1, 20, [0, 58, "Var"], 1, 1, 20, 1, 1, 20, [0, 53, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 47, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 20, 1, 20, [0, 38, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 32, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 27, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 178 [ , 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 20, [0, 108, "GW2"], 2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 20, [0, 70, "VE"], [0, 69, "Var"], 1, 1, 1, 1, 20, [0, 64, "Var"], 1, 1, 1, 20, [0, 60, "Var"], 1, 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "VE"], 1, 1, 20, 1, 1, 20, [0, 50, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 45, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 39, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 34, "Var"], 20, [0, 33, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 26, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 179 [ , 2, [6, 16], 2, [0, 132, "Koh"], 2, 2, 20, [0, 120, "MTS"], 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 1, 2, 20, 1, 2, 2, 1, 2, 20, 1, 2, 20, 1, 2, [0, 77, "Vx"], 1, 2, [0, 74, "Var"], [0, 73, "Var"], 1, 1, 1, 1, 20, [0, 68, "VE"], [0, 67, "Var"], 1, 1, 1, 20, [0, 63, "VE"], 1, 1, 1, 20, [0, 59, "Var"], 1, 1, 20, 1, 1, 20, [0, 54, "Var"], 1, 20, [0, 52, "VE"], 1, 1, 20, 1, 20, [0, 48, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 43, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 35, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 25, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, [0, 21, "VE"], 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 180 [ , [6, 5], 2, 2, 2, [0, 130, "BKW"], 2, 1, 2, [0, 118, "GW2"], 2, 2, 2, 20, [0, 108, "BZ"], [0, 106, "GW1"], [0, 104, "BZ"], 20, [0, 100, "BZ"], 20, [0, 96, "BZ"], [0, 93, "BZ"], 20, [0, 92, "BZ"], [0, 90, "BZ"], 20, [0, 88, "BZ"], 20, 20, [0, 84, "BZ"], [0, 81, "BZ"], 20, [0, 80, "BZ"], 1, 20, [0, 76, "BZ"], 1, 1, 20, [0, 72, "VE"], [0, 71, "Var"], 1, 1, 1, 1, 20, [0, 66, "VE"], [0, 65, "Var"], 1, 1, 20, [0, 62, "VE"], 1, 1, 1, 20, 1, 1, 20, [0, 56, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 46, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 40, "VE"], 1, 20, 1, 20, 1, 20, [0, 36, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 181 [ , 2, 2, 2, 2, 2, 2, 2, [0, 121, "MTS"], 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 1, 2, 1, 20, 3, 3, 20, 3, 1, 20, 3, 1, 20, 3, 2, [0, 77, "Var"], 1, 1, 1, 1, 1, 1, 20, [0, 70, "VE"], [0, 69, "Var"], 1, 1, 1, 1, 20, [0, 64, "Var"], 1, 1, 20, [0, 61, "VE"], 1, 1, 20, [0, 58, "VE"], 1, 1, 20, 1, 1, 20, [0, 53, "Var"], 1, 20, [0, 51, "Var"], 1, 20, [0, 49, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 44, "Var"], 1, 20, 1, 20, [0, 41, "Var"], 1, 20, 1, 20, 1, 20, [0, 37, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 24, "Var"], 20, 1, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 182 [ , 2, 2, [6, 17], [0, 134, "BKW"], 2, 2, 2, 2, 2, 2, [0, 114, "DaH"], [0, 112, "DaH"], 1, 2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 20, [0, 76, "Vx"], [0, 75, "VE"], [0, 74, "Var"], [0, 73, "Var"], 1, 1, 1, 1, 20, [0, 68, "VE"], [0, 67, "Var"], 1, 1, 1, 20, [0, 63, "Var"], 1, 1, 20, [0, 60, "Var"], 1, 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 47, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 183 [ , 2, 2, 2, 2, 2, [0, 128, "GW2"], 2, [0, 122, "MTS"], [0, 120, "GW2"], 2, 2, 2, 20, [0, 110, "GW1"], 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 80, "Vx"], 1, 1, 1, 1, 1, 1, 20, [0, 72, "VE"], [0, 71, "Var"], 1, 1, 1, 1, 20, [0, 66, "Var"], [0, 65, "Var"], 1, 1, 20, [0, 62, "Var"], 1, 1, 20, [0, 59, "Var"], 1, 1, 20, 1, 1, 20, [0, 54, "Var"], 1, 20, [0, 52, "Var"], 1, 20, [0, 50, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 45, "VE"], 1, 20, 1, 20, [0, 42, "VE"], 1, 20, 1, 20, 1, 20, [0, 38, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 184 [ , 2, [6, 16], 2, 2, 2, 2, 2, 2, 3, 2, 2, [0, 113, "GW1"], 1, 2, [0, 109, "GW1"], 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 77, "Var"], [0, 76, "Var"], [0, 75, "Var"], 1, 1, 1, 1, 20, [0, 70, "VE"], [0, 69, "Var"], 1, 1, 1, 1, 20, [0, 64, "Var"], 1, 1, 20, [0, 61, "Var"], 1, 1, 20, 1, 1, 20, [0, 56, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 48, "VE"], 1, 20, 1, 1, 20, 1, 20, [0, 43, "Var"], 1, 20, 1, 20, 1, 20, [0, 39, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 31, "Var"], 20, [0, 30, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 23, "Var"], 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 185 [ , [6, 5], 2, 2, 2, [0, 134, "BKW"], 2, 2, 2, 1, 2, [0, 116, "BZ"], 2, 1, 2, 2, [0, 108, "BZ"], 20, [0, 104, "BZ"], 20, [0, 100, "BZ"], 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 1, 1, 1, 20, [0, 74, "VE"], [0, 73, "Var"], 1, 1, 1, 1, 20, [0, 68, "VE"], [0, 67, "Var"], 1, 1, 1, 20, [0, 63, "Var"], 1, 1, 20, [0, 60, "Var"], 1, 20, [0, 58, "VE"], 1, 1, 20, 1, 1, 20, [0, 53, "Var"], 1, 20, [0, 51, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 46, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 34, "Var"], 20, [0, 33, "Var"], 20, [0, 32, "VE"], 1, 20, 1, 20, 20, [0, 29, "Var"], 20, [0, 28, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 186 [ , 2, 2, 2, 2, 3, 2, 2, [0, 124, "MTS"], 2, [0, 120, "DaH"], 2, 2, 20, [0, 112, "XBZ"], 2, 2, 1, 2, 1, 2, 1, 20, [0, 96, "BZ"], 20, 20, [0, 92, "BZ"], 20, 20, [0, 88, "BZ"], [0, 85, "Vx"], 20, [0, 84, "BZ"], 2, 20, [0, 80, "BZ"], 2, 1, 1, 1, 1, 1, 20, [0, 72, "VE"], [0, 71, "Var"], 1, 1, 1, 1, 20, [0, 66, "Var"], 1, 1, 1, 20, 1, 1, 1, 20, 1, 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 49, "VE"], 1, 20, 1, 1, 20, 1, 20, [0, 44, "Var"], 1, 20, 1, 20, 1, 20, [0, 40, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 35, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 27, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, [0, 5, "DaH"], 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 187 [ , 2, 2, [6, 17], 2, 2, 2, [0, 128, "GW2"], 2, 2, 3, 2, 2, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 2, 20, 3, [0, 79, "Vx"], 20, [0, 77, "VE"], [0, 76, "Var"], [0, 75, "Var"], 1, 1, 1, 1, 20, [0, 70, "VE"], [0, 69, "Var"], 1, 1, 1, 20, [0, 65, "Var"], 1, 1, 20, [0, 62, "VE"], 1, 1, 20, [0, 59, "Var"], 1, 1, 20, 1, 1, 20, [0, 54, "Var"], 1, 20, [0, 52, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 47, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 41, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 36, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 188 [ , 2, 2, 1, 2, 2, 2, 3, 2, 2, 3, 2, [0, 116, "GW1"], 2, 20, [0, 112, "GW1"], 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 83, "Vx"], 1, 1, 1, 1, 1, 1, 1, 20, [0, 74, "VE"], [0, 73, "Var"], 1, 1, 1, 1, 20, [0, 68, "VE"], [0, 67, "Var"], 1, 1, 20, [0, 64, "Var"], 1, 1, 20, [0, 61, "Var"], 1, 1, 20, 1, 1, 20, [0, 56, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 50, "VE"], 1, 20, 1, 1, 20, 1, 20, [0, 45, "Var"], 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 37, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 26, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 189 [ , 2, [6, 21], 2, [0, 140, "BKW"], 2, 2, 3, [22, 8, 1], 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 80, "Var"], [0, 79, "Var"], [0, 78, "Var"], [0, 77, "Var"], 1, 1, 1, 1, 20, [0, 72, "VE"], [0, 71, "Var"], 1, 1, 1, 1, 20, [0, 66, "Var"], 1, 1, 20, [0, 63, "Var"], 1, 1, 20, [0, 60, "Var"], 1, 20, [0, 58, "VE"], 1, 1, 20, 1, 1, 20, [0, 53, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 48, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 38, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 190 [ , [6, 5], 3, 2, 2, 2, 2, 3, 1, 2, 20, [0, 120, "BZ"], 2, [0, 116, "BZ"], 1, 2, [0, 112, "BZ"], 2, [0, 108, "BZ"], 20, [0, 104, "BZ"], 20, [0, 100, "BZ"], 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 20, [0, 76, "VE"], [0, 75, "Var"], 1, 1, 1, 1, 20, [0, 70, "VE"], [0, 69, "Var"], 1, 1, 1, 20, [0, 65, "Var"], 1, 1, 20, [0, 62, "Var"], 1, 1, 20, 1, 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "VE"], 1, 1, 20, 1, 20, [0, 51, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 46, "Var"], 1, 20, 1, 20, [0, 43, "Var"], 1, 20, 1, 20, 1, 20, [0, 39, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 25, "Var"], 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 191 [ , 2, 1, 2, 2, [0, 138, "BKW"], 2, 1, 1, 2, 1, 2, 2, 1, 1, 2, 3, 2, 3, 20, 3, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 2, 1, 1, 1, 1, 1, 1, 20, [0, 74, "VE"], [0, 73, "Var"], 1, 1, 1, 1, 20, [0, 68, "Var"], 1, 1, 1, 20, [0, 64, "Var"], 1, 1, 20, 1, 1, 20, [0, 59, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 49, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 192 [ , 2, 2, [6, 64], 2, 2, [0, 136, "GW2"], 1, 1, 2, 1, 2, [0, 119, "GW1"], 1, 2, [0, 115, "GW1"], 1, 2, 3, 20, 3, 20, 20, [0, 100, "BZ"], 20, 20, [0, 96, "BZ"], 20, 20, [0, 92, "BZ"], 20, 20, [0, 88, "BZ"], 2, 20, [0, 84, "BZ"], [0, 82, "Vx"], 20, [0, 80, "BZ"], [0, 79, "VE"], [0, 78, "Var"], [0, 77, "Var"], 1, 1, 1, 1, 20, [0, 72, "VE"], [0, 71, "Var"], 1, 1, 1, 20, [0, 67, "Var"], 1, 1, 1, 20, 1, 1, 20, [0, 61, "VE"], 1, 1, 20, 1, 1, 20, [0, 56, "Var"], 1, 20, [0, 54, "Var"], 1, 20, [0, 52, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 47, "VE"], 1, 20, 1, 20, [0, 44, "VE"], 1, 20, 1, 20, 1, 20, [0, 40, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 24, "Var"], 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 193 [ , 2, 2, 1, 2, 2, 3, 1, 1, 2, 1, 2, 1, 1, 2, 2, 1, 2, 3, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, [0, 86, "Vx"], 20, 3, 1, 1, 1, 1, 1, 1, 20, [0, 76, "VE"], [0, 75, "Var"], 1, 1, 1, 1, 20, [0, 70, "VE"], [0, 69, "Var"], 1, 1, 20, [0, 66, "Var"], 1, 1, 20, [0, 63, "VE"], 1, 1, 20, [0, 60, "Var"], 1, 20, [0, 58, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 50, "VE"], 1, 20, 1, 1, 20, 1, 20, [0, 45, "Var"], 1, 20, 1, 20, 1, 20, [0, 41, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 35, "Var"], 20, [0, 34, "Var"], 20, [0, 33, "VE"], 20, [0, 32, "VE"], 20, [0, 31, "Var"], 20, [0, 30, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 194 [ , 2, 2, 20, [0, 144, "BKW"], 2, 2, 1, 1, 2, 1, 2, 1, 1, 2, 2, 1, 2, 3, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, [0, 82, "Var"], [0, 81, "Var"], [0, 80, "Var"], [0, 79, "Var"], 1, 1, 1, 1, 20, [0, 74, "VE"], [0, 73, "Var"], 1, 1, 1, 1, 20, [0, 68, "Var"], 1, 1, 20, [0, 65, "Var"], 1, 1, 20, [0, 62, "Var"], 1, 1, 20, 1, 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "Var"], 1, 20, [0, 53, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 48, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 36, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 29, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 195 [ , [6, 5], [6, 6], 2, 3, [0, 141, "BKW"], [0, 137, "GW2"], 1, 1, 2, 20, [0, 124, "DaH"], 2, 1, 2, [0, 117, "GW1"], 20, [0, 114, "DaH"], 3, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 84, "Vx"], 1, 1, 1, 1, 20, [0, 78, "VE"], [0, 77, "Var"], 1, 1, 1, 1, 20, [0, 72, "VE"], [0, 71, "Var"], 1, 1, 1, 20, [0, 67, "Var"], 1, 1, 20, [0, 64, "Var"], 1, 1, 20, [0, 61, "Var"], 1, 20, [0, 59, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 51, "VE"], 1, 20, 1, 1, 20, 1, 20, [0, 46, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 37, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 28, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 196 [ , 2, 2, 2, 2, 3, 2, 20, 1, 2, 2, 3, [0, 122, "GW1"], 20, [0, 120, "DaH"], 2, 20, 3, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 20, [0, 76, "VE"], [0, 75, "Var"], 1, 1, 1, 1, 20, [0, 70, "Var"], 1, 1, 1, 20, [0, 66, "Var"], 1, 1, 20, [0, 63, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, [0, 56, "Var"], 1, 20, [0, 54, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 49, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 43, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 38, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 27, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 197 [ , 2, 2, 2, 2, 2, 2, 2, 20, [0, 132, "XX"], 2, 2, 1, 2, 3, 2, 20, 3, 2, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, [0, 85, "Vx"], 1, 2, 20, [0, 81, "VE"], [0, 80, "Var"], [0, 79, "Var"], 1, 1, 1, 1, 20, [0, 74, "VE"], [0, 73, "Var"], 1, 1, 1, 20, [0, 69, "VE"], 1, 1, 1, 20, [0, 65, "Var"], 1, 1, 20, 1, 1, 20, [0, 60, "Var"], 1, 20, [0, 58, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 52, "VE"], 1, 20, 1, 1, 20, 1, 20, [0, 47, "Var"], 1, 20, 1, 20, [0, 44, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 39, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 198 [ , 2, 2, [6, 28], 2, 2, 2, [0, 134, "MTS"], 20, 3, 2, 2, 1, 2, 1, 2, 20, 3, 2, 20, [0, 108, "BZ"], 20, 20, [0, 104, "BZ"], 20, 20, [0, 100, "BZ"], 20, 20, [0, 96, "BZ"], 20, 20, [0, 92, "BZ"], [0, 89, "Vx"], 20, [0, 88, "BZ"], 1, 20, [0, 84, "BZ"], 1, 1, 1, 1, 20, [0, 78, "VE"], [0, 77, "Var"], 1, 1, 1, 1, 20, [0, 72, "VE"], [0, 71, "Var"], 1, 1, 20, [0, 68, "VE"], 1, 1, 1, 20, 1, 1, 20, [0, 62, "VE"], 1, 1, 20, 1, 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 50, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 40, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 26, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 199 [ , 2, 2, 1, 2, 2, [0, 140, "Koh"], 1, 2, 3, [0, 128, "MTS"], [0, 126, "GW1"], 2, [0, 123, "GW1"], 1, 2, 2, 3, 2, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 2, [0, 85, "Vx"], 1, 2, [0, 82, "Var"], [0, 81, "Var"], 1, 1, 1, 1, 20, [0, 76, "VE"], [0, 75, "Var"], 1, 1, 1, 1, 20, [0, 70, "Var"], 1, 1, 20, [0, 67, "VE"], 1, 1, 20, [0, 64, "VE"], 1, 1, 20, [0, 61, "Var"], 1, 20, [0, 59, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 53, "VE"], 1, 20, 1, 1, 20, 1, 20, [0, 48, "VE"], 1, 20, 1, 20, [0, 45, "Var"], 1, 20, 1, 20, 1, 20, [0, 41, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 200 [ , [6, 5], [6, 16], 2, [0, 148, "Bo1"], 2, 2, 1, 2, 3, 2, 2, [0, 125, "GW1"], 1, 2, [0, 121, "GW1"], [0, 116, "BZ"], 3, [0, 112, "BZ"], 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 87, "Vx"], 1, 20, [0, 84, "Vx"], 1, 1, 20, [0, 80, "VE"], [0, 79, "Var"], 1, 1, 1, 1, 20, [0, 74, "VE"], [0, 73, "Var"], 1, 1, 1, 20, [0, 69, "Var"], 1, 1, 20, [0, 66, "Var"], 1, 1, 20, [0, 63, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, [0, 56, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 51, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 201 [ , 2, 2, 2, 2, [0, 145, "BKW"], [0, 141, "GW2"], 1, 2, 3, 2, 2, 1, 1, 2, 2, 2, 3, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 20, [0, 78, "VE"], [0, 77, "Var"], 1, 1, 1, 1, 20, [0, 72, "Var"], [0, 71, "Var"], 1, 1, 20, [0, 68, "Var"], 1, 1, 20, [0, 65, "Var"], 1, 1, 20, 1, 1, 20, [0, 60, "Var"], 1, 20, [0, 58, "VE"], 1, 1, 20, 1, 20, [0, 54, "Var"], 1, 20, [0, 52, "Var"], 1, 20, 1, 20, [0, 49, "VE"], 1, 20, 1, 20, [0, 46, "VE"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 36, "Var"], 20, [0, 35, "Var"], 20, [0, 34, "Var"], 20, [0, 33, "Var"], 20, [0, 32, "Var"], 20, [0, 31, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 25, "Var"], 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 202 [ , 2, 2, 2, 2, 2, 2, 1, 2, 3, [0, 130, "MTS"], 2, 1, 2, [0, 124, "GW1"], 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 20, [0, 84, "Vx"], [0, 83, "VE"], [0, 82, "Var"], [0, 81, "Var"], 1, 1, 1, 1, 20, [0, 76, "VE"], [0, 75, "Var"], 1, 1, 1, 1, 20, [0, 70, "Var"], 1, 1, 20, [0, 67, "Var"], 1, 1, 20, 1, 1, 20, [0, 62, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, [0, 47, "Var"], 1, 20, 1, 20, 1, 20, [0, 43, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 37, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 30, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 203 [ , 2, 2, [6, 64], 2, 2, 2, 1, 2, 2, 2, [0, 129, "GW1"], 2, [0, 126, "GW1"], 1, 2, 2, 1, 2, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 1, 1, 1, 1, 1, 20, [0, 80, "VE"], [0, 79, "Var"], [0, 78, "Var"], 1, 1, 1, 20, [0, 74, "VE"], [0, 73, "Var"], 1, 1, 1, 20, [0, 69, "Var"], 1, 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "VE"], 1, 1, 20, [0, 61, "Var"], 1, 20, [0, 59, "Var"], 1, 20, [0, 57, "VE"], 1, 20, [0, 55, "Var"], 1, 20, [0, 53, "Var"], 1, 20, 1, 20, [0, 50, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 44, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 38, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 29, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 204 [ , 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 1, 1, 2, 2, 1, 2, 20, [0, 112, "BZ"], 20, 20, [0, 108, "BZ"], 20, 20, [0, 104, "BZ"], 20, 20, [0, 100, "BZ"], 20, 20, [0, 96, "BZ"], 20, 20, [0, 92, "BZ"], 2, 20, [0, 88, "BZ"], [0, 86, "Vx"], [0, 85, "Var"], [0, 84, "Var"], [0, 83, "Var"], 1, 1, 1, 1, 1, 20, [0, 77, "Var"], 1, 1, 1, 1, 20, [0, 72, "Var"], 1, 1, 1, 20, 1, 1, 1, 20, 1, 1, 20, [0, 63, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, [0, 48, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 39, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 24, "Var"], 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 205 [ , [6, 5], [6, 16], 2, [0, 152, "Bo1"], [0, 148, "BKW"], [0, 144, "MTS"], 1, 2, [0, 134, "X6a"], 2, 2, [0, 129, "GW1"], 1, 2, [0, 125, "GW1"], [0, 120, "BZ"], 20, [0, 116, "BZ"], 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, [0, 90, "Vx"], 20, 3, 1, 1, 1, 1, 20, [0, 82, "VE"], [0, 81, "Var"], [0, 80, "Var"], 1, 1, 1, 20, [0, 76, "VE"], [0, 75, "Var"], 1, 1, 1, 20, [0, 71, "Var"], 1, 1, 20, [0, 68, "VE"], 1, 1, 20, [0, 65, "Var"], 1, 1, 20, 1, 1, 20, [0, 60, "Var"], 1, 20, [0, 58, "Var"], 1, 20, [0, 56, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 51, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 45, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 40, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 28, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 206 [ , 2, 2, 2, 3, 2, 2, 1, 2, 2, [0, 133, "MTS"], 2, 1, 1, 2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, [0, 86, "Var"], 1, 1, 1, 1, 1, 1, 20, [0, 79, "Var"], [0, 78, "Var"], 1, 1, 1, 20, [0, 74, "VE"], [0, 73, "Var"], 1, 1, 20, [0, 70, "Var"], 1, 1, 20, [0, 67, "Var"], 1, 1, 20, [0, 64, "Var"], 1, 20, [0, 62, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 54, "VE"], 1, 20, [0, 52, "Var"], 1, 20, 1, 20, [0, 49, "Var"], 1, 20, 1, 20, [0, 46, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 41, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 207 [ , 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, [0, 132, "GW1"], 1, 2, [0, 128, "GW1"], 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 88, "Vx"], 1, 20, [0, 85, "VE"], [0, 84, "Var"], [0, 83, "Var"], 1, 1, 1, 1, 1, 20, [0, 77, "Var"], 1, 1, 1, 1, 20, [0, 72, "Var"], 1, 1, 20, [0, 69, "Var"], 1, 1, 20, [0, 66, "Var"], 1, 1, 20, 1, 1, 20, [0, 61, "Var"], 1, 20, [0, 59, "Var"], 1, 20, [0, 57, "Var"], 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 27, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 208 [ , 2, 2, [6, 64], 2, 2, 2, 1, 2, 2, 2, 1, 2, [0, 130, "GW1"], 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 20, [0, 82, "VE"], [0, 81, "Var"], [0, 80, "Var"], 1, 1, 1, 20, [0, 76, "VE"], [0, 75, "Var"], 1, 1, 1, 20, [0, 71, "Var"], 1, 1, 20, [0, 68, "Var"], 1, 1, 20, 1, 1, 20, [0, 63, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 55, "VE"], 1, 20, [0, 53, "Var"], 1, 20, 1, 20, [0, 50, "VE"], 1, 20, 1, 20, [0, 47, "Var"], 1, 20, 1, 20, 1, 20, [0, 43, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 209 [ , 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 1, 1, 2, 2, 1, 2, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, [0, 89, "Vx"], 1, 2, [0, 86, "Var"], [0, 85, "Var"], 1, 1, 1, 1, 1, 20, [0, 79, "Var"], [0, 78, "Var"], 1, 1, 1, 20, [0, 74, "Var"], 1, 1, 1, 20, [0, 70, "Var"], 1, 1, 20, 1, 1, 20, [0, 65, "VE"], 1, 1, 20, 1, 1, 20, [0, 60, "Var"], 1, 20, [0, 58, "Var"], 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 44, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 37, "Var"], 20, [0, 36, "Var"], 20, [0, 35, "Var"], 20, [0, 34, "Var"], 20, [0, 33, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 210 [ , [6, 5], [6, 21], 2, 2, [0, 152, "BKW"], [0, 148, "MTS"], 20, [0, 144, "DaH"], [0, 138, "MTS"], [0, 136, "MTS"], 2, [0, 133, "GW1"], 1, 2, [0, 129, "GW1"], [0, 124, "BZ"], [0, 121, "DaH"], [0, 120, "BZ"], 20, [0, 116, "BZ"], 20, 20, [0, 112, "BZ"], 20, 20, [0, 108, "BZ"], 20, 20, [0, 104, "BZ"], 20, 20, [0, 100, "BZ"], 20, 20, [0, 96, "BZ"], [0, 93, "Vx"], 20, [0, 92, "BZ"], 1, 20, [0, 88, "BZ"], 1, 1, 20, [0, 84, "VE"], [0, 83, "Var"], [0, 82, "Var"], 1, 1, 1, 1, 20, [0, 77, "Var"], 1, 1, 1, 20, [0, 73, "Var"], 1, 1, 1, 20, 1, 1, 20, [0, 67, "VE"], 1, 1, 20, [0, 64, "Var"], 1, 20, [0, 62, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 56, "VE"], 1, 20, [0, 54, "Var"], 1, 20, 1, 20, [0, 51, "VE"], 1, 20, 1, 20, [0, 48, "VE"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 38, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 32, "Var"], 20, [0, 31, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 211 [ , 2, 3, 2, [0, 156, "Bou"], 3, 2, 20, 3, 2, 2, [0, 135, "GW1"], 2, 1, 2, 2, 2, 1, 2, 1, 2, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 2, [0, 89, "Var"], 1, 1, 1, 1, 1, 1, 1, 20, [0, 81, "VE"], [0, 80, "Var"], 1, 1, 1, 20, [0, 76, "VE"], [0, 75, "Var"], 1, 1, 20, [0, 72, "Var"], 1, 1, 20, [0, 69, "VE"], 1, 1, 20, [0, 66, "Var"], 1, 1, 20, 1, 1, 20, [0, 61, "Var"], 1, 20, [0, 59, "Var"], 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 52, "Var"], 1, 20, 1, 20, [0, 49, "Var"], 1, 20, 1, 20, 1, 20, [0, 45, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 39, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 212 [ , 2, 1, 2, 2, 2, 2, 20, 3, 2, 2, 1, 2, 20, [0, 132, "GW1"], 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 20, [0, 88, "Vx"], [0, 87, "VE"], [0, 86, "Var"], [0, 85, "Var"], 1, 1, 1, 1, 1, 20, [0, 79, "Var"], [0, 78, "Var"], 1, 1, 1, 20, [0, 74, "Var"], 1, 1, 20, [0, 71, "Var"], 1, 1, 20, [0, 68, "Var"], 1, 1, 20, 1, 1, 20, [0, 63, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 57, "VE"], 1, 20, [0, 55, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 46, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 41, "Var"], 20, [0, 40, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 30, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 213 [ , 2, 2, [6, 64], 2, 2, 2, 2, 3, 2, 2, 1, 2, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 92, "Vx"], 1, 1, 1, 1, 1, 1, 20, [0, 84, "VE"], [0, 83, "Var"], [0, 82, "Var"], 1, 1, 1, 1, 20, [0, 77, "Var"], 1, 1, 1, 20, [0, 73, "Var"], 1, 1, 20, [0, 70, "Var"], 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 53, "Var"], 1, 20, 1, 20, [0, 50, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 29, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, [0, 25, "VE"], 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 214 [ , 2, 2, 3, 2, 2, [0, 151, "MTS"], 2, 3, 2, [0, 139, "MTS"], 2, [0, 136, "GW1"], 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 89, "Var"], [0, 88, "Var"], [0, 87, "Var"], 1, 1, 1, 1, 1, 20, [0, 81, "VE"], [0, 80, "Var"], 1, 1, 1, 20, [0, 76, "Var"], 1, 1, 1, 20, [0, 72, "Var"], 1, 1, 20, [0, 69, "Var"], 1, 1, 20, 1, 1, 20, [0, 64, "Var"], 1, 20, [0, 62, "Var"], 1, 20, [0, 60, "VE"], 1, 20, [0, 58, "Var"], 1, 20, [0, 56, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 47, "VE"], 1, 20, 1, 20, 1, 20, [0, 43, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 215 [ , [6, 5], 2, 1, 2, 2, 2, [0, 147, "Ayd"], 2, 2, 1, 2, 1, 1, 2, [0, 133, "GW1"], [0, 128, "BZ"], 20, [0, 124, "BZ"], 20, [0, 120, "BZ"], 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 1, 1, 1, 20, [0, 86, "VE"], [0, 85, "Var"], [0, 84, "Var"], 1, 1, 1, 1, 20, [0, 79, "Var"], [0, 78, "Var"], 1, 1, 20, [0, 75, "Var"], 1, 1, 1, 20, [0, 71, "Var"], 1, 1, 20, 1, 1, 20, [0, 66, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 54, "Var"], 1, 20, 1, 20, [0, 51, "Var"], 1, 20, 1, 20, [0, 48, "Var"], 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 28, "Var"], 20, 1, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 216 [ , 2, [6, 6], 2, [0, 160, "Bo1"], 2, 2, 3, [0, 145, "MTS"], [0, 143, "GW1"], 2, [0, 139, "GW1"], 1, 1, 2, 2, 2, 1, 2, 1, 2, 1, 20, [0, 116, "BZ"], 20, 20, [0, 112, "BZ"], 20, 20, [0, 108, "BZ"], 20, 20, [0, 104, "BZ"], 20, 20, [0, 100, "BZ"], 20, 20, [0, 96, "BZ"], 2, 20, [0, 92, "BZ"], 2, 1, 1, 1, 1, 1, 1, 20, [0, 83, "VE"], [0, 82, "Var"], 1, 1, 1, 1, 20, [0, 77, "Var"], 1, 1, 20, [0, 74, "VE"], 1, 1, 1, 20, 1, 1, 20, [0, 68, "VE"], 1, 1, 20, 1, 1, 20, [0, 63, "Var"], 1, 20, [0, 61, "Var"], 1, 20, [0, 59, "Var"], 1, 20, [0, 57, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 52, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 44, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 217 [ , 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, [0, 136, "GW1"], 2, 2, 1, 2, 1, 2, 1, 2, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 2, 20, 3, [0, 91, "Vx"], 20, [0, 89, "VE"], [0, 88, "Var"], [0, 87, "Var"], 1, 1, 1, 1, 1, 20, [0, 81, "Var"], [0, 80, "Var"], 1, 1, 1, 20, [0, 76, "Var"], 1, 1, 20, [0, 73, "VE"], 1, 1, 20, [0, 70, "VE"], 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 55, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 49, "Var"], 1, 20, 1, 20, 1, 20, [0, 45, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 37, "Var"], 20, [0, 36, "Var"], 20, [0, 35, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 218 [ , 2, 2, 2, 2, 2, 2, 2, 2, 2, [0, 142, "MTS"], 1, 2, [0, 138, "GW1"], 1, 2, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 95, "Vx"], 1, 1, 1, 1, 1, 1, 1, 20, [0, 86, "VE"], [0, 85, "Var"], [0, 84, "Var"], 1, 1, 1, 1, 20, [0, 79, "Var"], 1, 1, 1, 20, [0, 75, "Var"], 1, 1, 20, [0, 72, "Var"], 1, 1, 20, [0, 69, "Var"], 1, 1, 20, 1, 1, 20, [0, 64, "Var"], 1, 20, [0, 62, "Var"], 1, 20, [0, 60, "Var"], 1, 20, [0, 58, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 53, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 46, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 39, "Var"], 20, [0, 38, "VE"], 1, 20, 1, 20, 1, 20, 20, [0, 34, "VE"], 20, [0, 33, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 27, "Var"], 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 219 [ , 2, 2, [6, 49], [0, 162, "BKW"], 2, [0, 155, "MTS"], 2, 2, 2, 1, 2, [0, 140, "GW1"], 1, 1, 2, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 92, "Vx"], [0, 91, "Var"], [0, 90, "Var"], [0, 89, "Var"], 1, 1, 1, 1, 1, 20, [0, 83, "VE"], [0, 82, "Var"], 1, 1, 1, 20, [0, 78, "Var"], 1, 1, 1, 20, [0, 74, "Var"], 1, 1, 20, [0, 71, "Var"], 1, 1, 20, 1, 1, 20, [0, 66, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 56, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 50, "VE"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 41, "Var"], 20, [0, 40, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 32, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 220 [ , [6, 5], 2, 2, 2, [0, 160, "BKW"], 2, [0, 150, "MTS"], [0, 148, "MTS"], 2, 1, 2, 1, 1, 2, [0, 137, "GW1"], [0, 132, "BZ"], 20, [0, 128, "BZ"], 20, [0, 124, "BZ"], 20, [0, 120, "BZ"], 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 20, [0, 88, "VE"], [0, 87, "Var"], [0, 86, "Var"], 1, 1, 1, 1, 20, [0, 81, "Var"], [0, 80, "Var"], 1, 1, 20, [0, 77, "VE"], [0, 76, "Var"], 1, 1, 20, [0, 73, "Var"], 1, 1, 20, [0, 70, "Var"], 1, 20, [0, 68, "VE"], 1, 1, 20, 1, 1, 20, [0, 63, "Var"], 1, 20, [0, 61, "Var"], 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 54, "Var"], 1, 20, 1, 20, [0, 51, "Var"], 1, 20, 1, 20, 1, 20, [0, 47, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 31, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 221 [ , 2, [6, 16], 2, 2, 3, 2, 2, 2, [0, 147, "GW1"], 2, [0, 143, "GW1"], 1, 1, 2, 2, 3, 1, 2, 1, 2, 1, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 20, [0, 85, "VE"], [0, 84, "Var"], 1, 1, 1, 1, 20, [0, 79, "Var"], 1, 1, 1, 20, 1, 1, 1, 20, [0, 72, "Var"], 1, 1, 20, 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 59, "VE"], 1, 20, [0, 57, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 48, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 43, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 222 [ , 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 1, 1, 2, [0, 140, "GW1"], 2, 2, 1, 2, 1, 2, 1, 2, [0, 120, "BZ"], 2, 20, [0, 116, "BZ"], 20, 20, [0, 112, "BZ"], 20, 20, [0, 108, "BZ"], 20, 20, [0, 104, "BZ"], 20, 20, [0, 100, "BZ"], 2, 20, [0, 96, "BZ"], [0, 94, "Vx"], 20, [0, 92, "BZ"], [0, 91, "VE"], [0, 90, "Var"], [0, 89, "Var"], 1, 1, 1, 1, 1, 20, [0, 83, "VE"], [0, 82, "Var"], 1, 1, 1, 20, [0, 78, "Var"], 1, 1, 20, [0, 75, "VE"], 1, 1, 1, 20, 1, 1, 20, [0, 69, "Var"], 1, 1, 20, 1, 1, 20, [0, 64, "Var"], 1, 20, [0, 62, "Var"], 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 55, "Var"], 1, 20, 1, 20, [0, 52, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 44, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 30, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 223 [ , 2, 2, 2, 2, 2, 2, 2, [0, 150, "MTS"], 2, 2, 1, 2, [0, 142, "GW1"], 1, 2, 2, 1, 2, 1, 2, 1, 2, 3, 2, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, [0, 98, "Vx"], 20, 3, 1, 1, 1, 1, 1, 1, 20, [0, 88, "VE"], [0, 87, "Var"], [0, 86, "Var"], 1, 1, 1, 1, 20, [0, 81, "Var"], 1, 1, 1, 20, [0, 77, "Var"], 1, 1, 20, [0, 74, "VE"], 1, 1, 20, [0, 71, "Var"], 1, 1, 20, 1, 1, 20, [0, 66, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 60, "VE"], 1, 20, [0, 58, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 49, "VE"], 1, 20, 1, 20, 1, 20, [0, 45, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 224 [ , 2, 2, [6, 64], 2, 2, 2, [0, 153, "MTS"], 1, 2, [0, 147, "MTS"], 1, 2, 1, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, [0, 94, "Vx"], [0, 93, "Var"], [0, 92, "Var"], [0, 91, "Var"], 1, 1, 1, 1, 1, 20, [0, 85, "VE"], [0, 84, "Var"], 1, 1, 1, 20, [0, 80, "VE"], [0, 79, "Var"], 1, 1, 20, [0, 76, "Var"], 1, 1, 20, [0, 73, "Var"], 1, 1, 20, [0, 70, "Var"], 1, 20, [0, 68, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 56, "Var"], 1, 20, 1, 20, [0, 53, "Var"], 1, 20, 1, 20, [0, 50, "Var"], 1, 20, 1, 20, 1, 20, [0, 46, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 29, "Var"], 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 225 [ , [6, 5], 2, 1, 2, 2, 2, 2, 1, 2, 1, 2, [0, 145, "GW1"], 1, 1, 2, 2, 20, [0, 132, "BZ"], 20, [0, 128, "BZ"], 20, [0, 124, "BZ"], 2, [0, 120, "BZ"], 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 96, "Vx"], 1, 1, 1, 1, 20, [0, 90, "VE"], [0, 89, "Var"], [0, 88, "Var"], 1, 1, 1, 1, 20, [0, 83, "Var"], [0, 82, "Var"], 1, 1, 1, 20, [0, 78, "Var"], 1, 1, 20, [0, 75, "Var"], 1, 1, 20, [0, 72, "Var"], 1, 1, 20, 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "Var"], 1, 20, [0, 63, "VE"], 1, 20, [0, 61, "Var"], 1, 20, [0, 59, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 54, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 38, "Var"], 20, [0, 37, "Var"], 20, [0, 36, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 226 [ , 2, [6, 16], 2, [0, 168, "BKW"], [0, 163, "BKW"], [0, 161, "MTS"], 2, 1, 2, 1, 2, 1, 1, 2, [0, 142, "GW1"], [0, 136, "XBZ"], 20, 3, 20, 3, 20, 3, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 20, [0, 87, "VE"], [0, 86, "Var"], 1, 1, 1, 1, 20, [0, 81, "Var"], 1, 1, 1, 20, [0, 77, "Var"], 1, 1, 20, [0, 74, "Var"], 1, 1, 20, 1, 1, 20, [0, 69, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 57, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 51, "Var"], 1, 20, 1, 20, 1, 20, [0, 47, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 41, "Var"], 20, [0, 40, "Var"], 20, [0, 39, "VE"], 1, 20, 1, 20, 1, 20, 20, [0, 35, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 28, "Var"], 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 227 [ , 2, 2, 2, 3, 2, 2, 2, [0, 153, "MTS"], [0, 152, "GW1"], 2, [0, 148, "GW1"], 1, 1, 2, 2, 3, 20, 3, 20, 3, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, [0, 97, "Vx"], 1, 2, 20, [0, 93, "VE"], [0, 92, "Var"], [0, 91, "Var"], [0, 90, "Var"], 1, 1, 1, 1, 20, [0, 85, "VE"], [0, 84, "Var"], 1, 1, 1, 20, [0, 80, "Var"], 1, 1, 1, 20, [0, 76, "Var"], 1, 1, 20, 1, 1, 20, [0, 71, "VE"], 1, 1, 20, 1, 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "Var"], 1, 20, [0, 62, "Var"], 1, 20, [0, 60, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 55, "Var"], 1, 20, 1, 20, [0, 52, "Var"], 1, 20, 1, 20, 1, 20, [0, 48, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 34, "VE"], 20, [0, 33, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 228 [ , 2, 2, 2, 2, 2, 2, [0, 156, "MTS"], 1, 2, [0, 150, "MTS"], 1, 1, 2, [0, 145, "GW1"], 2, 3, 20, 3, 20, 3, 20, 20, [0, 124, "BZ"], 20, 20, [0, 120, "BZ"], 20, 20, [0, 116, "BZ"], 20, 20, [0, 112, "BZ"], 20, 20, [0, 108, "BZ"], 20, 20, [0, 104, "BZ"], [0, 101, "Vx"], 20, [0, 100, "BZ"], 1, 20, [0, 96, "BZ"], 1, 1, 1, 1, 1, 20, [0, 89, "VE"], [0, 88, "Var"], 1, 1, 1, 1, 20, [0, 83, "Var"], [0, 82, "Var"], 1, 1, 20, [0, 79, "Var"], 1, 1, 1, 20, 1, 1, 20, [0, 73, "VE"], 1, 1, 20, [0, 70, "Var"], 1, 20, [0, 68, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 58, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 43, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 229 [ , 2, 2, [6, 64], 2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 20, 3, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 2, [0, 97, "Vx"], 1, 2, [0, 94, "Var"], [0, 93, "Var"], 1, 1, 1, 1, 1, 20, [0, 87, "VE"], [0, 86, "Var"], 1, 1, 1, 1, 20, [0, 81, "Var"], 1, 1, 20, [0, 78, "Var"], 1, 1, 20, [0, 75, "VE"], 1, 1, 20, [0, 72, "Var"], 1, 1, 20, 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "Var"], 1, 20, [0, 63, "Var"], 1, 20, [0, 61, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 56, "Var"], 1, 20, 1, 20, [0, 53, "Var"], 1, 20, 1, 20, 1, 20, [0, 49, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 44, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 32, "VE"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 230 [ , [6, 5], 2, 2, 2, 2, 2, [0, 157, "MTS"], 1, 2, 1, 2, 20, [0, 148, "GW1"], 1, 2, 3, 20, 3, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 99, "Vx"], 1, 20, [0, 96, "Vx"], 1, 1, 20, [0, 92, "VE"], [0, 91, "Var"], [0, 90, "Var"], 1, 1, 1, 1, 20, [0, 85, "Var"], [0, 84, "Var"], 1, 1, 1, 20, [0, 80, "Var"], 1, 1, 20, [0, 77, "Var"], 1, 1, 20, [0, 74, "Var"], 1, 1, 20, 1, 1, 20, [0, 69, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 59, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 50, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 45, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 31, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 231 [ , 2, [6, 21], 2, 2, 2, 2, 1, 1, 2, 1, 2, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 20, [0, 89, "VE"], [0, 88, "Var"], 1, 1, 1, 1, 20, [0, 83, "Var"], 1, 1, 1, 20, [0, 79, "Var"], 1, 1, 20, [0, 76, "Var"], 1, 1, 20, [0, 73, "Var"], 1, 20, [0, 71, "VE"], 1, 1, 20, 1, 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "Var"], 1, 20, [0, 62, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 57, "Var"], 1, 20, 1, 20, [0, 54, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 46, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 232 [ , 2, 3, 2, 2, [0, 168, "BKW"], 2, 1, 1, 2, 1, 2, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 20, [0, 96, "Vx"], [0, 95, "VE"], [0, 94, "VE"], [0, 93, "Var"], [0, 92, "Var"], 1, 1, 1, 1, 20, [0, 87, "VE"], [0, 86, "Var"], 1, 1, 1, 20, [0, 82, "Var"], 1, 1, 1, 20, [0, 78, "Var"], 1, 1, 20, [0, 75, "Var"], 1, 1, 20, 1, 1, 20, [0, 70, "Var"], 1, 20, [0, 68, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 60, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 51, "VE"], 1, 20, 1, 20, 1, 20, [0, 47, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 30, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 233 [ , 2, 1, 2, 2, 1, 2, 1, 1, 2, 2, [0, 153, "GW1"], 1, 1, 1, 2, 2, 1, 2, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 1, 1, 1, 1, 1, 1, 20, [0, 91, "VE"], [0, 90, "Var"], 1, 1, 1, 1, 20, [0, 85, "Var"], [0, 84, "Var"], 1, 1, 20, [0, 81, "Var"], 1, 1, 1, 20, [0, 77, "Var"], 1, 1, 20, 1, 1, 20, [0, 72, "Var"], 1, 1, 20, 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "Var"], 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 58, "Var"], 1, 20, 1, 20, [0, 55, "VE"], 1, 20, 1, 20, [0, 52, "Var"], 1, 20, 1, 20, 1, 20, [0, 48, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 38, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 234 [ , 2, 2, [6, 64], 2, 2, [0, 168, "DaH"], 1, 1, 2, [0, 155, "MTS"], 1, 1, 1, 1, 2, 2, 1, 2, 20, [0, 132, "BZ"], 20, 20, [0, 128, "BZ"], 20, 20, [0, 124, "BZ"], 20, 20, [0, 120, "BZ"], 20, 20, [0, 116, "BZ"], 20, 20, [0, 112, "BZ"], 20, 20, [0, 108, "BZ"], 20, 20, [0, 104, "BZ"], 2, 20, [0, 100, "BZ"], [0, 98, "Vx"], [0, 97, "Var"], [0, 96, "Var"], [0, 95, "Var"], 1, 1, 1, 1, 1, 20, [0, 89, "VE"], [0, 88, "Var"], 1, 1, 1, 1, 20, [0, 83, "Var"], 1, 1, 20, [0, 80, "VE"], 1, 1, 1, 20, 1, 1, 20, [0, 74, "VE"], 1, 1, 20, 1, 1, 20, [0, 69, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 63, "VE"], 1, 20, [0, 61, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 56, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 42, "Var"], 20, [0, 41, "Var"], 20, [0, 40, "VE"], 20, [0, 39, "VE"], 1, 20, 20, [0, 37, "VE"], 20, [0, 36, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 235 [ , [6, 5], 2, 1, 2, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, [0, 140, "BZ"], 20, [0, 136, "BZ"], 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, [0, 102, "Vx"], 20, 3, 1, 1, 1, 1, 20, [0, 94, "VE"], [0, 93, "Var"], [0, 92, "Var"], 1, 1, 1, 1, 20, 1, 1, 1, 1, 1, 20, [0, 82, "Var"], 1, 1, 20, [0, 79, "Var"], 1, 1, 20, [0, 76, "VE"], 1, 1, 20, [0, 73, "Var"], 1, 20, [0, 71, "VE"], 1, 1, 20, 1, 1, 20, [0, 66, "Var"], 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 59, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 53, "Var"], 1, 20, 1, 20, 1, 20, [0, 49, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 43, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 35, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 29, "Var"], 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 236 [ , 2, 2, 20, [0, 176, "BKW"], 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, [0, 98, "Var"], 1, 1, 1, 1, 1, 1, 20, [0, 91, "VE"], [0, 90, "Var"], 1, 1, 20, 1, 1, 1, 1, 1, 1, 20, [0, 81, "Var"], 1, 1, 20, [0, 78, "Var"], 1, 1, 20, [0, 75, "Var"], 1, 1, 20, 1, 1, 20, [0, 70, "Var"], 1, 20, [0, 68, "Var"], 1, 1, 20, 1, 20, [0, 64, "Var"], 1, 20, [0, 62, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 57, "Var"], 1, 20, 1, 20, [0, 54, "Var"], 1, 20, 1, 20, 1, 20, [0, 50, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 44, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 34, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 237 [ , 2, [6, 6], 2, 3, [0, 172, "BKW"], [0, 170, "Ma"], 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 100, "Vx"], 1, 20, [0, 97, "VE"], [0, 96, "VE"], [0, 95, "Var"], [0, 94, "Var"], 1, 1, 1, 1, 20, [0, 89, "VE"], [0, 88, "Var"], 20, 1, 1, 1, 1, 1, 1, 1, 20, [0, 80, "Var"], 1, 1, 20, [0, 77, "Var"], 1, 1, 20, 1, 1, 20, [0, 72, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 60, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 45, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 33, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 238 [ , 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 20, [0, 93, "VE"], [0, 92, "Var"], 1, 1, 1, 1, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, [0, 79, "Var"], 1, 1, 20, [0, 76, "Var"], 1, 20, [0, 74, "VE"], 1, 1, 20, 1, 1, 20, [0, 69, "Var"], 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "Var"], 1, 20, [0, 63, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 58, "Var"], 1, 20, 1, 20, [0, 55, "Var"], 1, 20, 1, 20, 1, 20, [0, 51, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 46, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 28, "Var"], 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 239 [ , 2, 2, 2, 2, 2, 2, 20, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, [0, 101, "Vx"], 1, 2, [0, 98, "Var"], [0, 97, "Var"], 1, 1, 1, 1, 1, 20, [0, 91, "VE"], [0, 90, "Var"], 1, 1, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, [0, 78, "Var"], 1, 1, 20, 1, 1, 20, [0, 73, "Var"], 1, 20, [0, 71, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 61, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 52, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 47, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 32, "VE"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 240 [ , [6, 5], 2, [6, 70], 2, 2, 2, 2, 20, [0, 164, "GW1"], 1, 1, 1, 1, 1, 2, [0, 144, "BZ"], 20, [0, 140, "BZ"], 20, [0, 136, "BZ"], 20, 20, [0, 132, "BZ"], 20, 20, [0, 128, "BZ"], 20, 20, [0, 124, "BZ"], 20, 20, [0, 120, "BZ"], 20, 20, [0, 116, "BZ"], 20, 20, [0, 112, "BZ"], 20, 20, [0, 108, "BZ"], [0, 105, "Vx"], 20, [0, 104, "BZ"], 1, 20, [0, 100, "BZ"], 1, 1, 20, [0, 96, "VE"], [0, 95, "Var"], [0, 94, "Var"], 1, 1, 1, 1, 20, [0, 89, "VE"], [0, 88, "Var"], 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 1, 1, 20, [0, 75, "Var"], 1, 1, 20, 1, 1, 20, [0, 70, "Var"], 1, 20, [0, 68, "Var"], 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 59, "Var"], 1, 20, 1, 20, [0, 56, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 48, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 241 [ , 2, 2, 1, 2, 2, 2, [0, 166, "MTS"], 20, 3, 1, 1, 1, 1, 1, 2, 3, 1, 2, 1, 2, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 2, [0, 101, "Var"], 1, 1, 1, 1, 1, 1, 1, 20, [0, 93, "VE"], [0, 92, "Var"], 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, [0, 77, "Var"], 1, 1, 20, [0, 74, "Var"], 1, 20, [0, 72, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 62, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 53, "VE"], 1, 20, 1, 20, 1, 20, [0, 49, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 31, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 242 [ , 2, [6, 16], 2, [0, 180, "Bo1"], 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 20, [0, 100, "Vx"], [0, 99, "VE"], [0, 98, "VE"], [0, 97, "Var"], [0, 96, "Var"], 1, 1, 1, 1, 20, [0, 91, "VE"], [0, 90, "Var"], 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, [0, 76, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, [0, 69, "Var"], 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 60, "Var"], 1, 20, 1, 20, [0, 57, "VE"], 1, 20, 1, 20, [0, 54, "Var"], 1, 20, 1, 20, 1, 20, [0, 50, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 43, "Var"], 20, [0, 42, "Var"], 20, [0, 41, "Var"], 20, [0, 40, "VE"], 20, [0, 39, "VE"], 20, [0, 38, "Var"], 20, [0, 37, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 243 [ , 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 104, "Vx"], 1, 1, 1, 1, 1, 1, 1, 20, [0, 95, "VE"], [0, 94, "Var"], 1, 1, 1, 1, 20, [0, 89, "Var"], 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 1, 1, 20, [0, 73, "Var"], 1, 20, [0, 71, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 63, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 58, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 44, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 36, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 244 [ , 2, 2, 2, 2, 2, 2, 1, 2, [0, 166, "GW1"], 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 101, "Var"], [0, 100, "Var"], [0, 99, "Var"], 1, 1, 1, 1, 1, 20, [0, 93, "VE"], [0, 92, "Var"], 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, [0, 75, "VE"], 1, 1, 20, 1, 1, 20, [0, 70, "Var"], 1, 20, [0, 68, "Var"], 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 61, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 55, "VE"], 1, 20, 1, 20, 1, 20, [0, 51, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 45, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 35, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 245 [ , [6, 5], 2, [6, 75], 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 20, [0, 144, "BZ"], 20, [0, 140, "BZ"], 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 1, 1, 1, 20, [0, 98, "VE"], [0, 97, "Var"], [0, 96, "Var"], 1, 1, 1, 1, 20, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, [0, 74, "Var"], 1, 20, [0, 72, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 66, "VE"], 1, 20, [0, 64, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 59, "Var"], 1, 20, 1, 20, [0, 56, "Var"], 1, 20, 1, 20, 1, 20, [0, 52, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 46, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 246 [ , 2, 2, 1, 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, [0, 148, "XBZ"], 20, 3, 20, 3, 20, 20, [0, 136, "BZ"], 20, 20, [0, 132, "BZ"], 20, 20, [0, 128, "BZ"], 20, 20, [0, 124, "BZ"], 20, 20, [0, 120, "BZ"], 20, 20, [0, 116, "BZ"], 20, 20, [0, 112, "BZ"], 20, 20, [0, 108, "BZ"], 2, 20, [0, 104, "BZ"], 2, 1, 1, 1, 1, 1, 1, 20, [0, 95, "VE"], [0, 94, "Var"], 1, 1, 20, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 20, 1, 1, 20, 1, 1, 20, [0, 69, "Var"], 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 62, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 48, "Var"], 20, [0, 47, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 34, "VE"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 247 [ , 2, [6, 16], 2, [0, 184, "Bo1"], 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 3, 20, 3, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 20, 3, 2, 20, 3, [0, 103, "Vx"], 20, [0, 101, "VE"], [0, 100, "VE"], [0, 99, "Var"], [0, 98, "Var"], 1, 1, 1, 1, 20, [0, 93, "VE"], [0, 92, "Var"], 20, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 20, 1, 1, 20, [0, 73, "Var"], 1, 20, [0, 71, "VE"], 1, 1, 20, 1, 20, [0, 67, "VE"], 1, 20, [0, 65, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 60, "Var"], 1, 20, 1, 20, [0, 57, "Var"], 1, 20, 1, 20, 1, 20, [0, 53, "VE"], 1, 20, 1, 20, 1, 20, [0, 49, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 33, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, [0, 29, "VE"], 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 248 [ , 2, 2, 2, 2, 2, 2, [4, 6], [4, 8], 1, 1, 1, 1, 1, 1, 2, 3, 20, 3, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 107, "Vx"], 1, 1, 1, 1, 1, 1, 1, 1, 20, [0, 97, "VE"], [0, 96, "Var"], 1, 1, 1, 1, 20, 20, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 20, [0, 75, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 63, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 54, "Var"], 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 249 [ , 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 3, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, [0, 104, "Vx"], [0, 103, "Var"], [0, 102, "Var"], [0, 101, "Var"], 1, 1, 1, 1, 1, 20, [0, 95, "VE"], [0, 94, "Var"], 1, 1, 20, 20, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 77, "Vx"], 1, 1, 20, [0, 74, "Var"], 1, 20, [0, 72, "Var"], 1, 20, [0, 70, "Var"], 1, 20, [0, 68, "Var"], 1, 20, [0, 66, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 61, "Var"], 1, 20, 1, 20, [0, 58, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 50, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 32, "Var"], 20, 1, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 250 [ , [6, 5], 2, [6, 80], 2, [0, 184, "Koh"], 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 20, [0, 100, "VE"], [0, 99, "Var"], [0, 98, "Var"], 1, 1, 1, 1, 20, [0, 93, "VE"], [0, 92, "Var"], 20, 20, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 2, 1, 20, [0, 76, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 64, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 59, "Var"], 1, 20, 1, 20, 1, 20, [0, 55, "VE"], 1, 20, 1, 20, 1, 20, [0, 51, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 44, "Var"], 20, [0, 43, "Var"], 20, [0, 42, "Var"], 20, [0, 41, "Var"], 20, [0, 40, "Var"], 20, [0, 39, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 251 [ , 2, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 149, "Vx"], 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 20, [0, 97, "VE"], [0, 96, "Var"], 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 20, 1, 1, 20, [0, 73, "Var"], 1, 20, [0, 71, "Var"], 1, 20, [0, 69, "Var"], 1, 20, [0, 67, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 62, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 56, "Var"], 1, 20, 1, 20, 1, 20, [0, 52, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 45, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, [0, 37, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 252 [ , 2, [6, 21], 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, [0, 148, "BZ"], 2, 20, [0, 144, "BZ"], [0, 141, "BZ"], 20, [0, 140, "BZ"], 20, 20, [0, 136, "BZ"], 20, 20, [0, 132, "BZ"], 20, 20, [0, 128, "BZ"], 20, 20, [0, 124, "BZ"], 20, 20, [0, 120, "BZ"], 20, 20, [0, 116, "BZ"], 20, 20, [0, 112, "BZ"], 2, 20, [0, 108, "BZ"], [0, 106, "Vx"], 20, [0, 104, "BZ"], 1, 1, 1, 1, 1, 1, 1, 1, 20, [0, 95, "VE"], [0, 94, "Var"], 1, 1, 20, 20, 20, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 1, 1, 1, 2, [0, 79, "Vx"], [0, 78, "VE"], [0, 77, "Var"], 1, 20, [0, 75, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 65, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 60, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 46, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 31, "Var"], 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, [5, 125], 20, 1, 20, 20, 20], #V n = 253 [ , 2, 3, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 3, 2, 20, 3, 2, 20, 3, 20, 20, 3, 20, 20, 3, 20, 20, 3, 20, 20, 3, 20, 20, 3, 20, 20, 3, 2, 20, 3, [0, 110, "Vx"], 20, 3, 1, 1, 1, 20, 1, 1, 1, 2, [0, 99, "VE"], [0, 98, "Var"], 1, 1, 1, 1, 20, [0, 93, "VE"], 1, 20, 20, 20, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 1, 1, 2, 1, 1, 1, 20, 1, 1, 20, [0, 74, "Var"], 1, 20, [0, 72, "Var"], 1, 20, [0, 70, "Var"], 1, 20, [0, 68, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 63, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 57, "VE"], 1, 20, 1, 20, 1, 20, [0, 53, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 48, "Var"], 20, [0, 47, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20], #V n = 254 [ , 2, 1, 1, 2, 1, 2, 2, 1, 1, 2, 20, 1, 1, 1, 2, 2, 1, 2, 2, 3, 2, 20, 3, 1, 20, 3, 2, 20, 3, 20, 20, 3, 1, 20, 3, 2, 20, 3, 2, 20, 3, [0, 114, "Vx"], 20, 3, 2, [0, 109, "Vx"], 1, 2, [0, 106, "Vx"], [0, 105, "Var"], 1, 20, 1, 1, 2, 1, 1, 20, [0, 97, "VE"], [0, 96, "Var"], 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 2, 20, 1, 20, 20, 20, 1, 1, 1, 2, 2, [0, 79, "Vx"], 1, 1, 20, [0, 76, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 66, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 61, "Var"], 1, 20, 1, 20, [0, 58, "Var"], 1, 20, 1, 20, 1, 20, [0, 54, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 49, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20], #V n = 255 [ , [6, 5], 2, 1, 2, 1, 2, 2, 20, 1, 2, 20, 20, 1, 1, 2, [0, 152, "Vx"], 2, [0, 148, "BZ"], 2, 1, 2, 1, 2, 1, 2, 3, 2, 20, 3, 1, 20, 3, 1, 2, 3, 2, 20, 3, [0, 118, "Vx"], 20, 3, 2, [0, 113, "Vx"], 1, 2, 1, 20, [0, 108, "Vx"], 1, 1, 20, 1, 20, 1, 2, 2, 1, 1, 1, 1, 20, 1, 1, 1, 20, 1, 20, 20, 20, 1, 2, 20, 20, 1, 20, 20, 20, 1, 1, 2, 2, 1, 20, [0, 78, "VE"], 1, 1, 20, 1, 1, 20, [0, 73, "Var"], 1, 20, [0, 71, "Var"], 1, 20, [0, 69, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 64, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 55, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 50, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 2, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 2, 20, 20, 1, 20, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 2, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 2, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20], #V n = 256 [ , 3, [6, 4], 20, [0, 192, "Bel"], 20, [0, 188, "XBC"], [0, 179, "BCH"], 20, 20, [0, 176, "XBC"], 20, 20, 20, [0, 172, "XBC"], [0, 171, "XBC"], 3, [0, 150, "BZ"], 3, [0, 147, "BZ"], 20, [0, 144, "BZ"], 20, [0, 141, "BZ"], 20, [0, 138, "BZ"], 3, [0, 135, "BZ"], 20, 3, 20, [0, 129, "BZ"], 3, 20, [0, 126, "BZ"], 3, [0, 123, "BZ"], 20, 3, 3, [0, 117, "BZ"], 3, [0, 115, "Vx"], 3, 20, [0, 112, "Vx"], [0, 110, "Var"], [0, 109, "Var"], 3, [0, 107, "XBC"], [0, 106, "Var"], [0, 105, "Vx"], 20, [0, 104, "XBC"], 20, [0, 103, "XBC"], [0, 101, "Vx"], 20, [0, 99, "VE"], [0, 98, "Var"], [0, 97, "Var"], [0, 96, "Vx"], 20, [0, 95, "XBC"], [0, 94, "BCH"], [0, 93, "Var"], 20, [0, 92, "XBC"], 20, 20, 20, [0, 91, "XBC"], 20, 20, 20, [0, 88, "XBC"], 20, 20, 20, [0, 87, "XBC"], [0, 86, "XBC"], [0, 82, "Vx"], [0, 80, "Vx"], [0, 79, "Vx"], 3, 20, [0, 77, "Var"], [0, 76, "Vx"], 20, [0, 75, "VE"], [0, 74, "Var"], 3, 20, [0, 72, "Var"], 3, 20, [0, 70, "Var"], 3, 20, [0, 68, "Var"], 20, [0, 67, "Var"], [0, 66, "Vx"], 20, [0, 65, "Var"], 3, 20, [0, 63, "Var"], 20, [0, 62, "Var"], [0, 61, "Vx"], 20, [0, 60, "Var"], 20, [0, 59, "Var"], [0, 58, "Vx"], 20, [0, 57, "Var"], 20, [0, 56, "Var"], 3, 20, [0, 54, "Vx"], 20, [0, 53, "Var"], 20, [0, 52, "Var"], 20, [0, 51, "Var"], 3, 20, [0, 49, "Vx"], 20, [0, 48, "Var"], 20, [0, 47, "Var"], 20, [0, 46, "Var"], 20, [0, 45, "Var"], 20, [0, 44, "Var"], 20, [0, 43, "Var"], 20, [0, 42, "Var"], 20, [0, 41, "Var"], 20, [0, 40, "Var"], 20, [0, 39, "Var"], 20, 20, [0, 38, "XBC"], [0, 37, "Var"], 20, 20, [0, 36, "XBC"], 20, [0, 35, "XBC"], 20, [0, 34, "VE"], 20, [0, 33, "Var"], 20, [0, 32, "Var"], 20, [0, 31, "XBC"], 20, 20, 20, [0, 30, "XBC"], [0, 29, "Var"], 20, 20, [0, 28, "XBC"], 20, 20, 20, [0, 27, "XBC"], 20, 20, 20, [0, 26, "XBC"], 20, 20, 20, [0, 24, "XBC"], 20, 20, 20, [0, 23, "XBC"], 20, 20, 20, [0, 22, "XBC"], 20, 20, 20, [0, 20, "XBC"], 20, 20, 20, [0, 19, "XBC"], 20, [0, 18, "XBC"], [0, 17, "BCH"], 20, 20, [0, 16, "XBC"], 20, 20, 20, [0, 15, "XBC"], 20, 20, 20, [0, 14, "XBC"], 20, 20, 20, [0, 12, "XBC"], 20, 20, 20, [0, 11, "XBC"], 20, 20, 20, [0, 10, "XBC"], [0, 9, "BCH"], 20, 20, [0, 8, "XBC"], 20, 20, 20, [0, 7, "XBC"], 20, 20, 20, [0, 6, "XBC"], 20, 20, [5, 125], 20, [5, 127], 20, 20, [0, 3, "Ham"], 20, 20, 20]]; GUAVA_BOUNDS_TABLE[2][4] := [ #V n = 1 [ ], #V n = 2 [ ], #V n = 3 [ ], #V n = 4 [ ,], #V n = 5 [ ,,], #V n = 6 [ , [15, 4],, [14, 4]], #V n = 7 [ , [15, 5], [15, 4], 12, 11], #V n = 8 [ , [15, 6], [15, 5], [15, 4], 11, 11], #V n = 9 [ , [15, 7], [15, 6], [15, 5], [15, 4], 11, 11], #V n = 10 [ , [15, 8], [0, 6, "GH"], [15, 6], [15, 5], [15, 4], 11, 11], #V n = 11 [ , [15, 8], 12, 11, [15, 6], [15, 5], [15, 4], 11, 11], #V n = 12 [ , [15, 9], [15, 8], 11, 11, [15, 6], [14, 6], [15, 4], 11, 11], #V n = 13 [ , [15, 10], [15, 9], [15, 8], 11, 11, 12, 11, [15, 4], 11, 11], #V n = 14 [ , [15, 11], [15, 10], [15, 9], [15, 8], 11, 11, 11, 11, [15, 4], 11, 11], #V n = 15 [ , [15, 12], [15, 11], [15, 10], [16, 8], [15, 8], 11, 11, 11, 11, [15, 4], 11, 11], #V n = 16 [ , [15, 12], [15, 12], [15, 11], [16, 9], [16, 8], [15, 8], 11, 11, 11, 11, [15, 4], 11, 11], #V n = 17 [ , [15, 13], [15, 12], [15, 12], [16, 10], [16, 9], [16, 8], [15, 8], 11, 11, 11, 11, [15, 4], 11, 11], #V n = 18 [ , [15, 14], [15, 13], [15, 12], [0, 10, "Liz"], [16, 10], [16, 9], [16, 8], [15, 8], [14, 8], 11, 11, 11, [0, 3, "cap"], 11, 11], #V n = 19 [ , [15, 15], [15, 14], [14, 3], 12, 11, [16, 10], [16, 9], [16, 8], 12, 11, 11, 11, 11, 11, 11, 11], #V n = 20 [ , [15, 16], [15, 15], 12, [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 21 [ , [15, 16], [15, 16], 12, [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 22 [ , [15, 17], [15, 16], 12, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, [14, 16], 11], #V n = 23 [ , [15, 18], [15, 16], [15, 16], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 24 [ , [15, 19], [15, 17], [15, 16], [15, 16], [0, 14, "Bou"], [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 25 [ , [15, 20], [15, 18], [15, 17], [15, 16], 12, 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 26 [ , [15, 20], [15, 19], [15, 18], [15, 17], [15, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 27 [ , [15, 21], [15, 20], [15, 19], [0, 17, "Bou"], [15, 17], [15, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 28 [ , [15, 22], [15, 20], [15, 20], 12, 11, [15, 17], [15, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 29 [ , [15, 23], [15, 21], [15, 20], 12, 11, 11, [16, 16], [15, 16], 11, 11, [16, 14], [14, 10], [16, 12], 11, 11, [16, 10], [14, 14], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 30 [ , [15, 24], [15, 22], [15, 21], [15, 20], 11, 11, [16, 17], [16, 16], [15, 16], 11, 11, 12, 11, [16, 12], [14, 12], 11, 12, 11, [16, 8], 11, 11, 11, [0, 4, "BK"], 11, 11, 11, 11], #V n = 31 [ , [15, 24], [15, 23], [15, 22], [0, 20, "Bou"], [15, 20], 11, [16, 18], [16, 17], [16, 16], [15, 16], 11, 11, 11, [16, 12], 12, 11, 11, 11, [16, 8], [16, 8], 11, 11, 12, 11, 11, 11, 11, 11], #V n = 32 [ , [15, 25], [15, 24], [0, 22, "GH"], 12, 11, [15, 20], [16, 19], [16, 18], [16, 17], [16, 16], [15, 16], 11, 11, [16, 13], [16, 12], 11, 11, 11, [16, 9], [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 33 [ , [15, 26], [15, 24], 12, 11, 11, 11, [15, 20], [16, 19], [16, 18], [16, 17], [16, 16], [15, 16], 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 34 [ , [15, 27], [15, 25], [15, 24], 11, 11, 11, [16, 20], [15, 20], [16, 19], [16, 18], [16, 17], [16, 16], [15, 16], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 35 [ , [15, 28], [15, 26], [16, 24], [15, 24], 11, 11, [16, 21], [16, 20], [15, 20], [16, 19], [16, 18], [16, 17], [16, 16], [15, 16], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 36 [ , [15, 28], [15, 27], [16, 25], [16, 24], [15, 24], 11, [16, 22], [16, 21], [16, 20], [15, 20], [16, 19], [16, 18], [16, 17], [16, 16], [15, 16], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 37 [ , [15, 29], [15, 28], [16, 26], [16, 25], [16, 24], [15, 24], [16, 23], [16, 22], [16, 21], [16, 20], [15, 20], [16, 19], [14, 10], [16, 17], [16, 16], [15, 16], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 38 [ , [15, 30], [15, 28], [16, 27], [16, 26], [16, 25], [16, 24], [15, 24], [16, 23], [16, 22], [16, 21], [16, 20], [15, 20], 12, 11, [16, 17], [16, 16], [15, 16], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 39 [ , [15, 31], [15, 29], [15, 28], [16, 27], [16, 26], [16, 25], [16, 24], [14, 6], [0, 22, "Gur"], [16, 22], [16, 21], [16, 20], 12, 11, 11, [16, 17], [16, 16], [15, 16], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], [16, 8], [0, 6, "LP"], 11, 11, 11, 11, 11, 11, 11], #V n = 40 [ , [15, 32], [15, 30], [16, 28], [15, 28], [16, 27], [16, 26], [16, 25], [16, 24], 11, 11, [16, 22], [16, 21], [16, 20], 11, 11, 11, [16, 17], [16, 16], [15, 16], [14, 16], [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 12, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 41 [ , [15, 32], [15, 31], [16, 29], [16, 28], [0, 27, "Da"], [16, 27], [16, 26], [14, 6], [16, 24], 11, 11, [16, 22], [14, 10], [16, 20], 11, 11, 11, [16, 17], [16, 16], 12, 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 42 [ , [15, 33], [15, 32], [16, 30], [16, 29], [16, 28], 11, [16, 27], 12, 11, [16, 24], 11, 11, 12, 11, [16, 20], 11, 11, 11, [16, 17], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, [0, 3, "EB4"], 11, 11, 11], #V n = 43 [ , [15, 34], [15, 32], [16, 31], [16, 30], [16, 29], [16, 28], 11, 12, 11, [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], 11, 11, 11, [16, 17], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 44 [ , [15, 35], [15, 32], [15, 32], [16, 31], [16, 30], [16, 29], [16, 28], 11, 11, [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], 11, 11, 11, [16, 17], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 45 [ , [15, 36], [15, 33], [15, 32], [0, 31, "Liz"], [0, 30, "Da"], [16, 30], [16, 29], [16, 28], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], 11, 11, 11, [16, 17], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 46 [ , [15, 36], [15, 34], [15, 33], [15, 32], 11, 11, [16, 30], [14, 6], [16, 28], [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], 11, 11, 11, [16, 17], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 47 [ , [15, 37], [15, 35], [15, 34], [14, 3], [15, 32], 11, 11, 12, 11, [16, 28], [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], 11, 11, 11, [16, 16], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [16, 9], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 48 [ , [15, 38], [15, 36], [15, 35], 12, [16, 32], [15, 32], 11, 11, 11, [16, 28], [16, 28], [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], 11, 11, [16, 17], [16, 16], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, [16, 10], [0, 8, "LP"], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 49 [ , [15, 39], [15, 36], [15, 36], 12, [16, 33], [16, 32], [15, 32], 11, 11, [16, 29], [16, 28], [16, 28], [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], 11, [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, 12, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 50 [ , [15, 40], [15, 37], [15, 36], 12, [16, 34], [16, 33], [16, 32], [15, 32], 11, [16, 30], [16, 29], [16, 28], [16, 28], [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 51 [ , [15, 40], [15, 38], [0, 36, "LMH"], [15, 36], [16, 35], [16, 34], [16, 33], [16, 32], [0, 31, "Gur"], [16, 31], [16, 30], [16, 29], [16, 28], [0, 27, "LP"], [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 52 [ , [15, 41], [15, 39], 12, 11, [15, 36], [16, 35], [16, 34], [16, 33], [16, 32], 11, [16, 31], [16, 30], [16, 29], [16, 28], 11, [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, [16, 20], [16, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, [16, 14], [0, 12, "LP"], [16, 12], 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 53 [ , [15, 42], [15, 40], 12, 11, [16, 36], [15, 36], [16, 35], [16, 34], [16, 33], [16, 32], 11, [16, 31], [16, 30], [16, 29], [16, 28], 11, [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, [16, 21], [16, 20], [16, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, 12, 11, [16, 12], 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 54 [ , [15, 43], [15, 40], 12, 11, [16, 37], [16, 36], [0, 35, "Gur"], [0, 34, "Gur"], [16, 34], [16, 33], [16, 32], 11, [16, 31], [16, 30], [16, 29], [16, 28], 11, [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, [16, 22], [16, 21], [16, 20], [16, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 55 [ , [15, 44], [15, 41], [15, 40], 11, [16, 38], [16, 37], [16, 36], 11, 11, [16, 34], [14, 8], [16, 32], 11, [16, 31], [16, 30], [16, 29], [16, 28], 11, [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 20], [16, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, 11, [16, 12], [16, 12], 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 56 [ , [15, 44], [15, 42], [0, 40, "HLa"], [15, 40], [16, 39], [16, 38], [16, 37], [16, 36], 11, 11, 12, 11, [16, 32], 11, [16, 31], [16, 30], [16, 29], [16, 28], 11, [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 20], [16, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, [16, 13], [16, 12], [16, 12], 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 57 [ , [15, 45], [15, 43], 12, 11, [15, 40], [16, 39], [0, 37, "Gur"], [14, 6], [16, 36], 11, 11, 11, 11, [16, 32], 11, [14, 12], [16, 30], [16, 29], [16, 28], 11, [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 20], [16, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], 11, [16, 14], [16, 13], [16, 12], [16, 12], [0, 10, "LP"], 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 58 [ , [15, 46], [15, 44], 12, 11, [16, 40], [15, 40], 12, 11, 11, [16, 36], 11, 11, 11, 11, [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 20], [16, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], [16, 15], [16, 14], [16, 13], [16, 12], 12, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 59 [ , [15, 47], [15, 44], 12, 11, [16, 40], [16, 40], 12, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 20], [16, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 60 [ , [15, 48], [15, 45], [15, 44], 11, [16, 41], [16, 40], [16, 40], 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, [0, 26, "LP"], [16, 26], [16, 25], [16, 24], [0, 23, "LP"], [16, 23], [16, 22], [16, 21], [16, 20], [16, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, [0, 4, "LP"], 11, 11, 11, 11, 11], #V n = 61 [ , [15, 48], [15, 46], [15, 45], [15, 44], [16, 42], [16, 41], [16, 40], [16, 40], 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 32], 11, 11, [0, 29, "LP"], [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, [16, 23], [16, 22], [16, 21], [16, 20], [0, 19, "LP"], [16, 19], [16, 18], [16, 17], [16, 16], [0, 15, "LP"], [0, 14, "LP"], [16, 14], [16, 13], [16, 12], 11, 11, 11, 11, 11, [16, 8], [0, 6, "LP"], 11, 12, 11, 11, 11, 11, 11, 11], #V n = 62 [ , [15, 49], [15, 47], [15, 46], [14, 3], [16, 43], [16, 42], [16, 41], [16, 40], [16, 40], 11, 11, 11, 11, [0, 35, "LP"], 11, 11, 11, [16, 32], [16, 32], 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, [16, 23], [16, 22], [16, 21], [16, 20], 11, [16, 19], [16, 18], [16, 17], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 63 [ , [15, 50], [15, 48], [15, 47], 12, [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 33], [16, 32], [16, 32], 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, [16, 23], [16, 22], [16, 21], [16, 20], 11, [16, 19], [16, 18], [16, 17], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 64 [ , [15, 51], [15, 48], [15, 48], 12, [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], [0, 39, "BK"], 11, 11, 11, 11, 11, 11, [16, 34], [16, 33], [16, 32], [16, 32], 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 26], [16, 24], [16, 24], 11, [16, 23], [16, 22], [16, 21], [16, 20], 11, [0, 18, "LP"], [16, 18], [16, 17], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 65 [ , [15, 52], [15, 48], [15, 48], 12, [16, 45], [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, 11, 11, [16, 35], [16, 34], [16, 33], [16, 32], [16, 32], 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 25], [16, 24], [16, 24], 11, [14, 26], [16, 22], [16, 21], [16, 20], 11, 11, [16, 18], [16, 17], [16, 16], 11, 11, [16, 14], [16, 13], [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 66 [ , [15, 52], [15, 49], [15, 48], [15, 48], [16, 46], [16, 45], [16, 44], [0, 43, "Gur"], [16, 43], [16, 42], [16, 41], [16, 40], 11, [0, 38, "LP"], 11, 11, 11, 11, [0, 34, "LP"], [16, 34], [16, 33], [16, 32], [16, 32], 11, 11, 11, [0, 28, "LP"], [16, 28], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, [16, 22], [16, 21], [16, 20], 11, 11, [16, 18], [16, 17], [16, 16], 11, 11, [16, 14], [0, 12, "Jo"], [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 67 [ , [15, 53], [15, 50], [15, 49], [15, 48], [16, 47], [16, 46], [16, 45], [16, 44], 11, [0, 42, "Gur"], [16, 42], [14, 8], [16, 40], 11, 11, 11, 11, [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], [0, 31, "LP"], 11, 11, 11, 11, [16, 28], [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, [16, 22], [16, 21], [16, 20], 11, 11, [16, 18], [16, 17], [16, 16], 11, 11, 12, 11, [16, 12], 11, 11, 11, [0, 8, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 68 [ , [15, 54], [15, 51], [15, 50], [16, 48], [15, 48], [16, 47], [16, 46], [16, 45], [16, 44], 11, 11, 12, 11, [16, 40], 11, 11, [0, 37, "LP"], [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, [16, 28], [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, [16, 22], [16, 21], [16, 20], 11, 11, [16, 18], [16, 17], [16, 16], 11, 11, 11, 11, [16, 12], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 69 [ , [15, 55], [15, 52], [15, 51], [16, 49], [16, 48], [15, 48], [16, 47], [16, 46], [16, 45], [16, 44], 11, 11, 11, 11, [16, 40], 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, [16, 28], [16, 28], [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, [0, 21, "LP"], [16, 21], [16, 20], 11, 11, [0, 17, "LP"], [16, 17], [16, 16], 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 70 [ , [15, 56], [15, 52], [15, 52], [16, 50], [16, 49], [16, 48], [15, 48], [0, 46, "Gur"], [16, 46], [16, 45], [16, 44], 11, 11, 11, 11, [16, 40], 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, [16, 29], [16, 28], [16, 28], [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, [0, 20, "LP"], [16, 20], 11, 11, 11, [0, 16, "LP"], [16, 16], 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 71 [ , [15, 56], [15, 53], [15, 52], [16, 51], [16, 50], [16, 49], [16, 48], 12, 11, [0, 45, "LP"], [0, 44, "Gur"], [16, 44], 11, 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 37], [16, 36], 11, 11, [0, 33, "LP"], [16, 33], [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], [16, 28], [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 72 [ , [15, 57], [15, 54], [15, 53], [15, 52], [16, 51], [16, 50], [16, 49], [16, 48], 11, 11, 11, 11, [16, 44], 11, 11, [16, 41], [16, 40], [16, 40], 11, 11, 11, [0, 36, "LP"], [16, 36], 11, 11, 11, [16, 33], [16, 32], 11, [0, 30, "LP"], [16, 30], [16, 29], [16, 28], [0, 27, "LP"], [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 73 [ , [15, 58], [15, 55], [15, 54], [16, 52], [15, 52], [16, 51], [16, 50], [16, 49], [16, 48], 11, 11, 11, 11, [0, 43, "LP"], 11, [16, 42], [16, 41], [16, 40], [0, 39, "LP"], 11, 11, 11, 11, [16, 36], 11, 11, 11, [16, 33], [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, [16, 27], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 74 [ , [15, 59], [15, 56], [15, 55], [16, 53], [16, 52], [0, 51, "BK"], [16, 51], [0, 49, "Gur"], [14, 6], [16, 48], 11, 11, 11, 11, 11, [16, 43], [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, [16, 33], [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, [16, 27], [16, 26], [16, 25], [16, 24], [0, 23, "LP"], 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, [16, 16], [0, 14, "LP"], 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 75 [ , [15, 60], [15, 56], [15, 56], [16, 54], [16, 53], [16, 52], 11, 12, 11, 11, [0, 47, "BK"], [0, 46, "Gur"], 11, 11, 11, 11, [0, 42, "LP"], [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, [16, 33], [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, [16, 27], [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, [0, 19, "LP"], 11, 11, 11, 11, 12, 11, 11, 11, 11, [16, 12], [0, 10, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 76 [ , [15, 60], [15, 57], [15, 56], [16, 55], [16, 54], [16, 53], [16, 52], 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, [16, 33], [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, [16, 27], [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 77 [ , [15, 61], [15, 58], [15, 57], [15, 56], [16, 55], [0, 53, "Gur"], [16, 53], [16, 52], 11, 11, 11, 11, 11, 11, [0, 45, "LP"], [16, 45], [16, 44], 11, 11, [0, 41, "LP"], [16, 41], [16, 40], 11, [0, 38, "LP"], 11, 11, 11, [0, 35, "LP"], 11, 11, 11, [16, 33], [16, 32], 11, 11, [0, 29, "LP"], [16, 29], [16, 28], 11, [0, 26, "LP"], [16, 26], [16, 25], [16, 24], 11, [0, 22, "LP"], 11, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 78 [ , [15, 62], [15, 59], [15, 58], [16, 56], [15, 56], 12, 11, [0, 52, "Gur"], [0, 51, "BK"], 11, 11, 11, [16, 48], 11, 11, 11, [16, 45], [16, 44], 11, 11, 11, [16, 41], [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 32, "LP"], [16, 32], 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, [16, 17], [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 79 [ , [15, 63], [15, 60], [15, 59], [16, 57], [16, 56], 12, 11, 11, 11, 11, [0, 50, "BK"], [0, 49, "BK"], [16, 49], [16, 48], 11, 11, 11, [16, 45], [16, 44], 11, 11, 11, [16, 41], [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, [0, 18, "LP"], [16, 18], [16, 17], [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 80 [ , [15, 64], [15, 60], [15, 60], [16, 58], [16, 57], [16, 56], 11, 11, 11, 11, 11, 11, 11, [0, 48, "LP"], [16, 48], 11, 11, 11, [16, 45], [16, 44], 11, 11, 11, [16, 41], [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, [16, 29], [16, 28], 11, 11, [0, 25, "LP"], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 18], [16, 17], [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 81 [ , [15, 64], [15, 61], [15, 60], [16, 59], [16, 58], [16, 56], [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [0, 44, "LP"], [16, 44], 11, 11, 11, [16, 41], [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], [16, 32], 11, 11, 11, [16, 29], [16, 28], 11, 11, 11, [16, 25], [16, 24], 11, 11, [0, 21, "LP"], 11, 11, 11, 11, [16, 18], [16, 17], [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 82 [ , [15, 65], [15, 62], [15, 61], [15, 60], [0, 58, "LP"], [16, 57], [16, 56], [0, 55, "Gur"], [0, 54, "BK"], 11, 11, 11, 11, 11, 11, 11, [0, 47, "LP"], 11, 11, 11, 11, [0, 43, "LP"], 11, 11, 11, [0, 40, "LP"], [16, 40], 11, 11, [0, 37, "LP"], 11, 11, 11, 11, 11, [16, 33], [16, 32], [16, 32], 11, 11, 11, [16, 29], [16, 28], 11, 11, 11, [16, 25], [16, 24], 11, 11, 11, 11, [16, 20], 11, 11, [16, 18], [16, 17], [16, 16], 11, 11, 11, [0, 12, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 83 [ , [15, 66], [15, 63], [15, 62], [16, 60], 12, [16, 58], [16, 57], [16, 56], 11, 11, [0, 53, "BK"], [0, 52, "LP"], [16, 52], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, [0, 34, "LP"], [16, 34], [16, 33], [16, 32], [16, 32], 11, 11, 11, [0, 28, "LP"], [16, 28], 11, 11, 11, [16, 25], [16, 24], 11, 11, 11, [16, 21], [16, 20], 11, 11, [0, 17, "LP"], [0, 16, "LP"], [16, 16], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 84 [ , [15, 67], [15, 64], [15, 63], [16, 61], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], 11, 11, 11, 11, [0, 51, "LP"], [0, 50, "LP"], 11, 11, 11, 11, [0, 46, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 34], [16, 33], [16, 32], [0, 31, "LP"], 11, 11, 11, 11, [16, 28], 11, 11, 11, [0, 24, "LP"], [16, 24], 11, 11, 11, [16, 21], [16, 20], 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 85 [ , [15, 68], [15, 64], [15, 64], [16, 62], [0, 60, "Gur"], [16, 60], [16, 59], [16, 58], [0, 56, "BK"], [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, [16, 24], 11, 11, 11, [16, 21], [16, 20], 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 86 [ , [15, 68], [15, 64], [15, 64], [0, 62, "Gur"], 12, [16, 60], [0, 59, "LP"], [0, 58, "Gur"], 12, 11, [16, 56], [0, 54, "LP"], 11, 11, 11, 11, 11, [0, 49, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, [16, 24], [16, 24], 11, 11, 11, [0, 20, "LP"], [16, 20], 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 64], 11, 11], #V n = 87 [ , [15, 69], [15, 65], [15, 64], 12, 11, [16, 61], [16, 60], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, [0, 27, "LP"], 11, 11, [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 88 [ , [15, 70], [15, 66], [15, 64], [15, 64], 11, [16, 62], [16, 61], [16, 60], 11, 11, 11, 11, 11, 11, [0, 53, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 45, "LP"], 11, 11, 11, [0, 42, "LP"], 11, 11, 11, [0, 39, "LP"], 11, 11, 11, [0, 36, "LP"], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, [0, 30, "LP"], 11, 11, 11, 11, 11, [16, 26], [16, 25], [16, 24], [0, 23, "LP"], 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 89 [ , [15, 71], [15, 67], [15, 65], [15, 64], [15, 64], [0, 62, "BK"], [16, 62], [16, 61], [0, 59, "BK"], 11, 11, 11, 11, 11, 11, 11, [0, 52, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, [0, 33, "LP"], [16, 33], [16, 32], 11, 11, 11, 11, 11, 11, [0, 26, "LP"], [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 90 [ , [15, 72], [15, 68], [15, 66], [15, 65], [15, 64], 12, 11, [0, 61, "Gur"], 12, 11, 11, [0, 57, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 48, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, [16, 33], [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 26], [16, 25], [16, 24], 11, [0, 22, "LP"], 11, 11, 11, [0, 19, "LP"], 11, 11, 11, 11, [16, 16], [0, 14, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 91 [ , [15, 72], [15, 68], [15, 67], [15, 66], [15, 65], [15, 64], 11, 11, 11, 11, 11, 12, 11, 11, [0, 55, "LP"], 11, 11, 11, 11, [0, 51, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 44, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, [16, 33], [16, 32], 11, 11, 11, 11, [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 92 [ , [15, 73], [15, 69], [15, 68], [15, 67], [15, 66], [14, 4], [15, 64], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 41, "LP"], 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, [16, 33], [16, 32], 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, [0, 18, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 93 [ , [15, 74], [15, 70], [15, 68], [15, 68], [15, 67], 12, 11, [15, 64], [0, 62, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 54, "LP"], 11, 11, 11, 11, [0, 50, "LP"], 11, 11, 11, [0, 47, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 38, "LP"], 11, 11, 11, [16, 36], 11, 11, 11, [16, 33], [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 94 [ , [15, 75], [15, 71], [15, 69], [15, 68], [0, 67, "Gur"], 12, 11, [16, 64], 12, 11, 11, [0, 60, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, [16, 33], [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 95 [ , [15, 76], [15, 72], [15, 70], [15, 69], [15, 68], 11, 11, [16, 65], [16, 64], 11, 11, 12, 11, 11, [0, 58, "LP"], 11, 11, 11, 11, 11, [0, 53, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 35, "LP"], 11, 11, 11, [0, 32, "LP"], [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 96 [ , [15, 76], [15, 72], [15, 71], [15, 70], [16, 68], [15, 68], 11, [16, 66], [0, 64, "Gur"], [16, 64], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 8, "sp"], 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 97 [ , [15, 77], [15, 73], [15, 72], [0, 70, "War"], [16, 69], [16, 68], [15, 68], [16, 67], 12, 11, [16, 64], [0, 62, "LP"], 11, 11, 11, 11, 11, [0, 57, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 46, "LP"], 11, 11, 11, [0, 43, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 98 [ , [15, 78], [15, 74], [15, 72], 12, [16, 70], [16, 69], [16, 68], [0, 67, "Gur"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, [0, 56, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 40, "LP"], [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 99 [ , [15, 79], [15, 75], [15, 73], [15, 72], [16, 71], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, [0, 61, "LP"], [0, 60, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 52, "LP"], 11, 11, 11, [0, 49, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, [0, 16, "sp"], 11, 11, 11, 11, 11, 11, 11, [0, 10, "sp"], 11, 11, 11, 11, [16, 8], [0, 6, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 100 [ , [15, 80], [15, 76], [15, 74], [15, 73], [15, 72], [16, 71], [16, 70], [16, 69], [0, 67, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 59, "LP"], 11, 11, 11, 11, [0, 55, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, [0, 37, "LP"], 11, 11, 11, [0, 34, "LP"], 11, 11, [16, 32], [0, 31, "LP"], 11, 11, [0, 29, "LP"], [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 101 [ , [15, 80], [15, 76], [15, 75], [15, 74], [16, 72], [0, 71, "LP"], [16, 71], [16, 70], 12, 11, 11, [0, 65, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, [16, 33], [16, 32], 11, 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, [0, 20, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 102 [ , [15, 81], [15, 77], [15, 76], [0, 74, "Gur"], [16, 73], [16, 72], 11, [16, 71], 12, 11, 11, 12, 11, 11, [0, 63, "LP"], 11, 11, 11, 11, 11, [0, 58, "LP"], 11, 11, 11, 11, [0, 54, "LP"], 11, 11, 11, 11, 11, 11, 11, [0, 48, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 103 [ , [15, 82], [15, 78], [15, 76], 12, [16, 74], [16, 73], [16, 72], 11, 12, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 51, "LP"], 11, 11, 11, 11, 11, 11, 11, [0, 45, "LP"], 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 104 [ , [15, 83], [15, 79], [0, 76, "HLa"], [15, 76], [16, 75], [16, 74], [16, 73], [16, 72], [0, 70, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 62, "LP"], 11, 11, 11, 11, 11, [0, 57, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 12, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 105 [ , [15, 84], [15, 80], 12, 11, [15, 76], [0, 74, "BK"], [16, 74], [16, 73], 12, 11, 11, [0, 68, "LP"], [0, 67, "LP"], 11, 11, 11, 11, 11, 11, 11, [0, 60, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 42, "LP"], 11, 11, 11, [0, 39, "LP"], 11, 11, 11, 11, [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 106 [ , [15, 84], [15, 80], 12, 11, [16, 76], 12, 11, [16, 74], 12, 11, 11, 12, 11, 11, [0, 66, "LP"], [0, 65, "LP"], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 50, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, [16, 29], [16, 28], 11, 11, [16, 26], [0, 24, "sp"], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 107 [ , [15, 85], [15, 80], 12, 11, [16, 77], [16, 76], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, [0, 64, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, [16, 29], [16, 28], 11, 11, 12, 11, [16, 24], 11, 11, 11, 11, 11, [0, 18, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 108 [ , [15, 86], [15, 81], [15, 80], 11, [16, 78], [14, 4], [16, 76], 11, [0, 73, "LP"], [0, 72, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 56, "LP"], 11, 11, 11, [0, 53, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, [16, 29], [16, 28], 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 109 [ , [15, 87], [15, 82], [15, 80], [15, 80], [16, 79], 12, 11, [16, 76], 12, 11, 11, [0, 71, "LP"], [0, 70, "LP"], 11, 11, 11, 11, 11, 11, 11, [0, 63, "LP"], 11, 11, 11, 11, [0, 59, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 47, "LP"], 11, 11, 11, [0, 44, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, [16, 29], [16, 28], 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 110 [ , [15, 88], [15, 83], [15, 81], [15, 80], [15, 80], 12, 11, 11, 12, 11, 11, 11, 11, 11, [0, 69, "LP"], [0, 68, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, [16, 29], [16, 28], 11, 11, 11, 11, [16, 24], [0, 22, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 14, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 111 [ , [15, 88], [15, 84], [15, 82], [15, 81], [15, 80], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 67, "LP"], [0, 66, "LP"], 11, 11, 11, 11, [0, 62, "LP"], 11, 11, 11, 11, [0, 58, "LP"], 11, 11, 11, [0, 55, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, [16, 29], [16, 28], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 112 [ , [15, 89], [15, 84], [15, 83], [15, 82], [16, 80], [15, 80], 11, 11, [0, 76, "LP"], [0, 75, "LP"], 11, 11, [0, 72, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 52, "LP"], 11, 11, 11, [0, 49, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, [0, 28, "Jo"], [16, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 113 [ , [15, 90], [15, 85], [15, 84], [15, 83], [16, 81], [16, 80], [15, 80], 11, 12, 11, 11, [0, 74, "LP"], 12, 11, [0, 71, "LP"], [0, 70, "LP"], 11, 11, 11, 11, 11, [0, 65, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 114 [ , [15, 91], [15, 86], [15, 84], [15, 84], [16, 82], [16, 81], [16, 80], [0, 79, "LP"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 64, "LP"], 11, 11, 11, [0, 61, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 115 [ , [15, 92], [15, 87], [15, 85], [15, 84], [16, 83], [16, 82], [16, 81], [16, 80], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 69, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 54, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, [16, 28], [0, 26, "sp"], 11, 11, 11, 11, 11, 11, [0, 20, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 116 [ , [15, 92], [15, 88], [15, 86], [0, 84, "Ma"], [15, 84], [16, 83], [16, 82], [16, 81], [0, 79, "LP"], [0, 78, "LP"], 11, [0, 76, "LP"], [0, 75, "LP"], 11, 11, 11, 11, 11, 11, 11, [0, 68, "LP"], 11, 11, 11, 11, 11, [0, 63, "LP"], 11, 11, 11, 11, 11, 11, 11, [0, 57, "LP"], 11, 11, 11, 11, 11, 11, 11, [0, 51, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 117 [ , [15, 93], [15, 88], [15, 87], 12, [16, 84], [0, 83, "LP"], [0, 82, "LP"], [16, 82], 12, 11, 11, 12, 11, 11, [0, 74, "LP"], [0, 73, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 60, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 16, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 118 [ , [15, 94], [15, 89], [15, 88], 12, [16, 85], [16, 84], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, [0, 72, "LP"], [0, 71, "LP"], 11, 11, 11, 11, [0, 67, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, [0, 24, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 119 [ , [15, 95], [15, 90], [15, 88], 12, [16, 86], [16, 85], [16, 84], 11, 11, [0, 80, "LP"], 11, 11, [0, 77, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 120 [ , [15, 96], [15, 91], [15, 89], [15, 88], [16, 87], [0, 85, "BK"], [16, 85], [16, 84], [0, 82, "BK"], 12, 11, [0, 79, "LP"], 12, 11, 11, [0, 75, "LP"], 11, 11, 11, 11, 11, [0, 70, "LP"], 11, 11, 11, 11, [0, 66, "LP"], 11, 11, 11, 11, [0, 62, "LP"], 11, 11, 11, [0, 59, "LP"], 11, 11, 11, [0, 56, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 121 [ , [15, 96], [15, 92], [15, 90], [16, 88], [15, 88], 12, 11, [16, 85], 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, [0, 30, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 4, "sp"], 11, 11, 11, 11, 11, 11], #V n = 122 [ , [15, 97], [15, 92], [15, 91], [16, 89], [16, 88], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 74, "LP"], 11, 11, 11, 11, 11, [0, 69, "LP"], 11, 11, 11, 11, [0, 65, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11], #V n = 123 [ , [15, 98], [15, 93], [15, 92], [16, 90], [16, 89], [16, 88], 11, 11, 11, [0, 83, "LP"], 11, 11, [0, 80, "LP"], 11, 11, 11, 11, 11, 11, 11, [0, 73, "LP"], [0, 72, "LP"], 11, 11, 11, 11, [0, 68, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, [0, 28, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 124 [ , [15, 99], [15, 94], [15, 92], [16, 91], [16, 90], [0, 88, "LP"], [16, 88], 11, [0, 85, "LP"], 12, 11, [0, 82, "LP"], 12, 11, 11, [0, 78, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 58, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 12, 11, 11, 11, 11, 11, 11, [16, 24], [0, 22, "sp"], 11, 11, 11, 11, [0, 18, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 125 [ , [15, 100], [15, 95], [15, 93], [15, 92], [16, 91], 12, 11, [0, 87, "LP"], 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, [0, 76, "LP"], 11, 11, 11, 11, 11, [0, 71, "LP"], 11, 11, 11, 11, [0, 67, "LP"], 11, 11, 11, [0, 64, "LP"], 11, 11, 11, [0, 61, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 126 [ , [15, 100], [15, 96], [15, 94], [16, 92], [15, 92], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 127 [ , [15, 101], [15, 96], [15, 95], [16, 93], [16, 92], 12, 11, 11, 11, [0, 86, "LP"], 11, 11, [0, 83, "LP"], 11, 11, [0, 80, "LP"], 11, 11, 11, 11, 11, [0, 75, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, [0, 26, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 128 [ , [15, 102], [15, 96], [15, 96], [16, 94], [16, 93], [0, 91, "LP"], 11, 11, [0, 88, "LP"], 12, 11, [0, 85, "LP"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 129 [ , [15, 103], [15, 97], [15, 96], [16, 95], [16, 94], 12, 11, [0, 90, "LP"], 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, [0, 79, "LP"], 11, 11, 11, 11, 11, [0, 74, "LP"], 11, 11, 11, 11, [0, 70, "LP"], 11, 11, 11, 11, [0, 66, "LP"], 11, 11, 11, [0, 63, "LP"], 11, 11, 11, [0, 60, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 34], [16, 32], [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 130 [ , [15, 104], [15, 98], [15, 96], [15, 96], [16, 95], 12, 11, 11, 11, [0, 88, "LP"], 11, 11, [0, 85, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 77, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, [16, 33], [16, 32], [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 12, "sp"], 11, 11, [0, 10, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 131 [ , [15, 104], [15, 99], [15, 97], [15, 96], [15, 96], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, [0, 83, "LP"], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, [0, 73, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], 11, [16, 34], [16, 33], [16, 32], [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 132 [ , [15, 105], [15, 100], [15, 98], [16, 96], [15, 96], [0, 94, "LP"], 11, 11, [0, 91, "LP"], 12, 11, 11, 12, 11, 11, 12, 11, 11, [0, 81, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 69, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], [16, 35], [16, 34], [16, 33], [16, 32], [16, 32], [0, 30, "sp"], 11, 11, 11, 11, 11, 11, [0, 24, "sp"], 11, 11, 11, 11, [0, 20, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 133 [ , [15, 106], [15, 100], [15, 99], [16, 97], [16, 96], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 37], [16, 36], [16, 35], [16, 34], [16, 33], [16, 32], 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 134 [ , [15, 107], [15, 101], [15, 100], [16, 98], [16, 97], [16, 96], 11, 11, 12, [0, 91, "Da1"], 11, 11, [0, 88, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 80, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, [16, 36], [16, 36], [16, 35], [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 14, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 135 [ , [15, 108], [15, 102], [15, 100], [16, 99], [16, 98], [16, 97], [16, 96], 11, 11, 12, 11, 11, 12, 11, 11, [0, 86, "Da1"], [0, 85, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, [16, 37], [16, 36], [16, 36], [16, 35], [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 8, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 136 [ , [15, 108], [15, 103], [15, 101], [15, 100], [16, 99], [0, 97, "DM3"], [14, 4], [16, 96], [0, 94, "Da1"], 12, 11, 11, 12, 11, 11, 12, 11, 11, [0, 84, "Da1"], [0, 83, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, [16, 38], [16, 37], [16, 36], [16, 36], [16, 35], [16, 34], [16, 33], [16, 32], 11, 11, 11, [0, 28, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 137 [ , [15, 109], [15, 104], [15, 102], [16, 100], [15, 100], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 82, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, [16, 39], [16, 38], [16, 37], [16, 36], [16, 36], [16, 35], [16, 34], [16, 33], [16, 32], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 138 [ , [15, 110], [15, 104], [15, 103], [16, 101], [16, 100], 12, 11, 11, [16, 96], [0, 94, "Da1"], 11, 11, [0, 91, "Da1"], [0, 90, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, [16, 39], [16, 38], [16, 37], [16, 36], [16, 36], [0, 34, "sp"], [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 139 [ , [15, 111], [15, 105], [15, 104], [16, 102], [16, 101], [16, 100], 11, 11, [16, 97], 12, 11, 11, 12, 11, 11, [0, 89, "Da1"], [0, 88, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], 11, [16, 39], [16, 38], [16, 37], [16, 36], 12, 11, [16, 34], [16, 33], [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 16, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 140 [ , [15, 112], [15, 106], [15, 104], [16, 103], [16, 102], [0, 100, "DM3"], [0, 99, "Da1"], 11, [0, 97, "Da1"], 12, 11, 11, 12, 11, 11, 11, 11, 11, [0, 87, "Da1"], [0, 86, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 42], [16, 40], [16, 40], 11, [16, 39], [16, 38], [16, 37], [16, 36], 11, 11, [16, 34], [0, 32, "Jo"], [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 22, "sp"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 141 [ , [15, 112], [15, 107], [15, 105], [15, 104], [16, 103], 12, 11, 11, 12, 11, 11, 11, [0, 93, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 85, "Da1"], [0, 84, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], 11, 11, [16, 41], [16, 40], [16, 40], 11, [16, 39], [16, 38], [16, 37], [16, 36], 11, 11, 12, 11, [16, 32], 11, 11, 11, 11, 11, [0, 26, "sp"], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 142 [ , [15, 113], [15, 108], [15, 106], [16, 104], [15, 104], 12, 11, 11, 11, [0, 97, "Da1"], 11, 11, 12, 11, 11, [0, 91, "Da1"], [0, 90, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], 11, [16, 42], [16, 41], [16, 40], [16, 40], 11, [16, 39], [16, 38], [16, 37], [16, 36], 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 143 [ , [15, 114], [15, 108], [15, 107], [16, 105], [16, 104], 12, 11, 11, [16, 100], 12, 11, 11, 12, 11, 11, 12, 11, 11, [0, 89, "Da1"], [0, 88, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], [16, 40], 11, [16, 39], [16, 38], [16, 37], [16, 36], 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 144 [ , [15, 115], [15, 109], [15, 108], [16, 106], [16, 105], [0, 103, "DM3"], [0, 102, "Da1"], 11, [0, 100, "Da1"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, 11, [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], [16, 40], 11, [16, 39], [16, 38], [16, 37], [16, 36], 11, 11, 11, 11, [16, 32], [0, 30, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 18, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 145 [ , [15, 116], [15, 110], [15, 108], [16, 107], [16, 106], 12, 11, 11, 12, [0, 99, "Da1"], 11, 11, [0, 96, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 87, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, 11, [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], [16, 40], 11, [0, 38, "sp"], [16, 38], [16, 37], [16, 36], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 146 [ , [15, 116], [15, 111], [15, 109], [15, 108], [16, 107], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, [0, 94, "Da1"], [0, 93, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, 11, [16, 45], [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], [16, 40], 11, 11, [16, 38], [16, 37], [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 147 [ , [15, 117], [15, 112], [15, 110], [16, 108], [15, 108], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 12, 11, 11, [0, 92, "Da1"], [0, 91, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, 11, [16, 46], [16, 45], [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], [16, 40], 11, 11, [16, 38], [0, 36, "sp"], [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 148 [ , [15, 118], [15, 112], [15, 111], [16, 109], [16, 108], 12, [0, 105, "Da1"], 11, [0, 103, "Da1"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 90, "Da1"], [0, 89, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], [16, 40], 11, 11, 12, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 24, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 149 [ , [15, 119], [15, 112], [15, 112], [16, 110], [16, 109], [0, 107, "DM3"], 12, 11, 12, [0, 102, "Da1"], 11, 11, [0, 99, "Da1"], [0, 98, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], [16, 40], 11, 11, 11, 11, [16, 36], [0, 34, "sp"], 11, 11, 11, 11, 11, 11, [0, 28, "sp"], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 150 [ , [15, 120], [15, 113], [15, 112], [16, 111], [16, 110], [16, 108], 11, 11, 11, 12, 11, 11, 12, 11, 11, [0, 97, "Da1"], [0, 96, "Da1"], [0, 95, "Da1"], 11, [0, 93, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], [16, 40], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 151 [ , [15, 120], [15, 114], [15, 112], [15, 112], [16, 111], [16, 109], [16, 108], 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 20, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 152 [ , [15, 121], [15, 115], [15, 113], [15, 112], [15, 112], [16, 110], [0, 108, "Da1"], [16, 108], [0, 106, "Da1"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 93, "Da1"], 11, [0, 92, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 153 [ , [15, 122], [15, 116], [15, 114], [16, 112], [15, 112], [16, 111], 12, 11, 12, [0, 105, "Da1"], 11, 11, [0, 102, "Da1"], [0, 101, "Da1"], 11, 11, [0, 98, "Da1"], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], [16, 40], 11, 11, 11, 11, 11, 11, 11, [0, 32, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 154 [ , [15, 123], [15, 116], [15, 115], [16, 113], [16, 112], [0, 111, "DM3"], 12, 11, 11, 12, 11, 11, 12, 11, 11, [0, 100, "Da1"], 12, 11, [0, 97, "Da1"], [0, 96, "Da1"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], [16, 40], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 112], 11, 11, 11, 11], #V n = 155 [ , [15, 124], [15, 117], [15, 116], [16, 114], [16, 113], [16, 112], 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, 11, 11, 11, [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], [16, 40], [0, 38, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 156 [ , [15, 124], [15, 118], [15, 116], [16, 115], [16, 114], [0, 112, "DM3"], [0, 111, "Da1"], 11, [0, 109, "Da1"], 12, 11, 11, 11, [0, 103, "Da1"], 11, 11, [0, 100, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, 11, 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 26, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 6, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 157 [ , [15, 125], [15, 119], [15, 117], [15, 116], [16, 115], 12, 11, 11, 12, [0, 108, "Da1"], 11, 11, [0, 105, "Da1"], 12, 11, [0, 102, "Da1"], 12, 11, 11, [0, 98, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, 11, 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 30, "Jo"], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 158 [ , [15, 126], [15, 120], [15, 118], [16, 116], [15, 116], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], 11, 11, 11, [0, 36, "sp"], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 22, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 159 [ , [15, 127], [15, 120], [15, 119], [16, 117], [16, 116], 12, [0, 113, "Da1"], 11, [16, 112], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 97, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 160 [ , [15, 128], [15, 121], [15, 120], [16, 118], [16, 117], [0, 115, "DM3"], 12, 11, [0, 112, "Da1"], 12, 11, 11, 11, [0, 106, "Da1"], 11, 11, [0, 103, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 161 [ , [15, 128], [15, 122], [15, 120], [16, 119], [16, 118], 12, 11, 11, 11, [0, 111, "Da1"], [0, 110, "Da1"], 11, [0, 108, "Da1"], 12, 11, 11, 12, 11, 11, [0, 101, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, 11, [0, 34, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 162 [ , [15, 129], [15, 123], [15, 121], [15, 120], [16, 119], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, [0, 99, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], [16, 44], [0, 42, "sp"], [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 14, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 163 [ , [15, 130], [15, 124], [15, 122], [16, 120], [15, 120], 12, [0, 116, "Da1"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], 12, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, [0, 12, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 164 [ , [15, 131], [15, 124], [15, 123], [16, 121], [16, 120], [0, 118, "DM3"], 12, 11, [16, 116], [0, 113, "Da1"], 11, 11, [0, 110, "Da1"], [0, 109, "Da1"], [0, 108, "Da1"], 11, [0, 106, "Da1"], 11, 11, [0, 103, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], 11, 11, [16, 42], [0, 40, "sp"], [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 28, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 16, "sp"], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 165 [ , [15, 132], [15, 125], [15, 124], [16, 122], [16, 121], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], 11, 11, 12, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, [0, 24, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 166 [ , [15, 132], [15, 126], [15, 124], [16, 123], [16, 122], [16, 120], 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, [0, 102, "Da1"], [0, 101, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], 11, 11, 11, 11, [16, 40], [0, 38, "sp"], 11, 11, 11, 11, 11, 11, [0, 32, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 167 [ , [15, 133], [15, 127], [15, 125], [15, 124], [16, 123], [16, 121], [0, 119, "Da1"], 11, 11, 12, 11, 11, 11, [0, 111, "Da1"], 11, 11, [0, 108, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 168 [ , [15, 134], [15, 128], [15, 126], [16, 124], [15, 124], [0, 121, "DM3"], 12, 11, [0, 118, "Da1"], [0, 116, "Da1"], 11, 11, [0, 113, "Da1"], 12, 11, 11, 12, 11, 11, [0, 106, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 44], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 18, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 169 [ , [15, 135], [15, 128], [15, 127], [16, 125], [16, 124], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, [0, 104, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, [0, 46, "sp"], [16, 46], [16, 45], [16, 44], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 170 [ , [15, 136], [15, 128], [15, 128], [16, 126], [16, 124], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, [16, 46], [16, 45], [16, 44], 11, 11, 11, 11, 11, 11, 11, [0, 36, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 10, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 171 [ , [15, 136], [15, 129], [15, 128], [16, 127], [16, 125], [16, 124], [0, 122, "Da1"], 11, 11, 12, 11, 11, 11, [0, 114, "Da1"], 11, 11, [0, 111, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 46], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, [16, 46], [0, 44, "sp"], [16, 44], 11, 11, 11, [16, 40], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 172 [ , [15, 137], [15, 130], [15, 128], [15, 128], [16, 126], [0, 124, "DM3"], 12, 11, 11, [0, 119, "Da1"], [0, 118, "Da1"], 11, [0, 116, "Da1"], 12, 11, [0, 113, "Da1"], 12, 11, 11, [0, 109, "Da1"], [0, 108, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, 12, 11, [16, 44], [0, 42, "Jo"], 11, [16, 41], [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 30, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 173 [ , [15, 138], [15, 131], [15, 128], [15, 128], [16, 127], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, [0, 106, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 44], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, 11, 11, 12, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, [0, 26, "sp"], 11, 11, 11, 11, 11, 11, 11, [0, 20, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 174 [ , [15, 139], [15, 132], [15, 129], [15, 128], [15, 128], 12, 11, 11, 11, 12, 11, 11, 11, [0, 116, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 42], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, 11, 11, 11, 11, [16, 42], [16, 41], [16, 40], 11, 11, 11, 11, 11, [0, 34, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 175 [ , [15, 140], [15, 132], [15, 130], [15, 129], [15, 128], 12, [0, 125, "Da1"], 11, 11, 12, 11, 11, 11, 12, 11, 11, [0, 114, "Da1"], [0, 113, "Da1"], 11, [0, 111, "Da1"], [0, 110, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, 11, 11, 11, 11, [16, 42], [0, 40, "sp"], [16, 40], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 176 [ , [15, 140], [15, 133], [15, 131], [15, 130], [16, 128], [0, 127, "DM3"], 12, 11, [0, 124, "Da1"], [0, 122, "Da1"], [0, 121, "Da1"], 11, [0, 119, "Da1"], 12, 11, 11, 12, 11, 11, 12, 11, 11, 11, [0, 108, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, 11, [16, 44], 11, 11, 12, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 177 [ , [15, 141], [15, 134], [15, 132], [15, 131], [16, 129], [16, 128], 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 54], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, [16, 45], [16, 44], 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 178 [ , [15, 142], [15, 135], [15, 132], [15, 132], [16, 130], [16, 129], [16, 128], 11, 11, 12, 11, 11, 11, [0, 119, "Da1"], 11, 11, [0, 116, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 46], [16, 45], [16, 44], 11, 11, 11, 11, [16, 40], [0, 38, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 22, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 179 [ , [15, 143], [15, 136], [15, 133], [15, 132], [16, 131], [16, 130], [0, 128, "Da1"], [16, 128], 11, 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, [0, 114, "Da1"], [0, 113, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 50], [16, 48], [16, 48], [16, 48], [0, 46, "sp"], [16, 46], [16, 45], [16, 44], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 180 [ , [15, 144], [15, 136], [15, 134], [15, 133], [15, 132], [0, 130, "DM3"], 12, 11, [0, 127, "Da1"], [0, 125, "Da1"], [0, 124, "Da1"], 11, [0, 122, "Da1"], 12, 11, 11, 12, 11, 11, 12, 11, 11, [0, 112, "Da1"], [0, 111, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 51], [16, 49], [16, 48], [16, 48], 12, 11, [16, 46], [16, 45], [16, 44], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 32, "sp"], 11, 11, 11, 11, [0, 28, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 181 [ , [15, 144], [15, 137], [15, 135], [15, 134], [16, 132], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 54], 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], 11, [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, [16, 46], [0, 44, "sp"], [16, 44], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 182 [ , [15, 145], [15, 138], [15, 136], [15, 135], [16, 133], [16, 132], [0, 130, "Da1"], 11, 11, 12, 11, 11, 11, [0, 122, "Da1"], 11, 11, [0, 119, "Da1"], [0, 118, "Da1"], 11, 11, [0, 115, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 46], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 64], 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, 12, 11, [16, 44], 11, 11, 11, 11, 11, 11, 11, [0, 36, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 183 [ , [15, 146], [15, 139], [15, 136], [15, 136], [16, 134], [16, 133], 12, 11, 11, 12, [0, 126, "Da1"], 11, 11, 12, 11, 11, 12, 11, 11, [0, 117, "Da1"], 12, 11, 11, [0, 113, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, 11, 11, 11, 11, [16, 65], [16, 64], 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, 11, 11, [16, 44], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 184 [ , [15, 147], [15, 140], [15, 137], [15, 136], [16, 135], [0, 133, "DM3"], 12, 11, 11, [0, 128, "Da1"], 12, 11, [0, 125, "Da1"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 44], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 54], 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, 11, 11, 11, [16, 66], [16, 65], [16, 64], 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], [16, 52], [16, 52], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, 11, 11, [16, 44], [0, 42, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 185 [ , [15, 148], [15, 140], [15, 138], [15, 137], [15, 136], 12, 11, 11, 11, 12, 11, 11, 11, [0, 124, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 42], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, [14, 60], 11, 11, 11, 11, 11, 11, 11, [16, 66], [16, 65], [16, 64], 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 53], [16, 52], [16, 52], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 24, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 186 [ , [15, 148], [15, 141], [15, 139], [15, 138], [16, 136], 12, [0, 133, "Da1"], 11, 11, 12, 11, 11, 11, 12, 11, 11, [0, 122, "Da1"], [0, 121, "Da1"], 11, 11, [0, 118, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 52], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 66], [16, 65], [16, 64], 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, [16, 54], [16, 53], [16, 52], [16, 52], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 187 [ , [15, 149], [15, 142], [15, 140], [0, 138, "Ma"], [16, 137], [16, 136], 12, 11, 11, 12, [0, 129, "Da1"], 11, 11, 12, 11, 11, 12, 11, 11, [0, 120, "Da1"], 12, 11, 11, [0, 116, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], [16, 55], [16, 54], [16, 53], [16, 52], [16, 52], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, 11, 11, 11, 11, 11, [0, 40, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 188 [ , [15, 150], [15, 143], [15, 140], 12, [16, 138], [0, 136, "DM3"], 12, 11, 11, [0, 131, "Da1"], 12, 11, [0, 128, "Da1"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 69], [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], [16, 55], [16, 54], [16, 53], [16, 52], [16, 52], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, [0, 34, "sp"], 11, 11, 11, 11, [0, 30, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 189 [ , [15, 151], [15, 144], [15, 141], [15, 140], [16, 139], 12, 11, 11, 11, 12, 11, 11, 11, [0, 127, "Da1"], 11, 11, [0, 124, "Da1"], [0, 123, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 52], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 60], 11, 11, 11, 11, 11, 11, 11, [14, 66], [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], [16, 55], [16, 54], [16, 53], [16, 52], [16, 52], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], [0, 46, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 190 [ , [15, 152], [15, 144], [15, 142], [0, 140, "LaM"], [15, 140], 12, [0, 136, "Da1"], 11, 11, 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, [0, 122, "Da1"], [0, 121, "Da1"], 11, 11, [0, 118, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], [16, 55], [16, 54], [16, 53], [16, 52], [16, 52], [16, 51], [16, 50], [16, 49], [16, 48], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 8, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 191 [ , [15, 152], [15, 144], [15, 143], 12, [16, 140], 12, 12, 11, [16, 136], 12, [0, 132, "Da1"], 11, [0, 130, "Da1"], 12, 11, 11, 12, 11, 11, 11, 11, 11, [0, 120, "Da1"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 53], [16, 52], [16, 52], [16, 51], [16, 50], [16, 49], [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 38, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 26, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 192 [ , [15, 153], [15, 145], [15, 144], 12, [16, 141], [16, 140], 12, 11, 11, [0, 134, "Da1"], 12, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 38], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 57], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 53], [16, 52], [16, 52], [16, 51], [16, 50], [16, 49], [16, 48], 11, 11, 11, [0, 44, "sp"], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 193 [ , [15, 154], [15, 146], [15, 144], 12, [16, 142], [16, 141], 12, 11, 11, 12, 11, 11, 11, [0, 130, "Da1"], 11, 11, [0, 127, "Da1"], 11, 11, 11, [0, 123, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 52], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], 11, 11, 11, 11, 11, [16, 60], 11, [16, 58], [16, 57], [16, 56], [16, 56], [14, 82], [16, 55], [16, 54], [16, 53], [16, 52], [16, 52], [16, 51], [16, 50], [16, 49], [16, 48], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 194 [ , [15, 155], [15, 147], [15, 144], [15, 144], [16, 143], [16, 142], [0, 139, "Da1"], 11, 11, 12, [0, 134, "Da1"], 11, 11, 12, 11, 11, 12, 11, [0, 126, "Da1"], [0, 125, "Da1"], 12, 11, 11, [0, 121, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], 11, 11, 11, 11, 11, [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], 11, [16, 55], [16, 54], [16, 53], [16, 52], [16, 52], [16, 51], [16, 50], [16, 49], [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 195 [ , [15, 156], [15, 148], [15, 145], [15, 144], [15, 144], [16, 143], 12, 11, 11, [0, 136, "Da1"], 12, 11, [0, 133, "Da1"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 38], 11, 11, 11, 11, [14, 42], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], 11, 11, 11, 11, 11, [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], 11, [16, 55], [16, 54], [16, 53], [16, 52], [16, 52], [16, 51], [16, 50], [16, 49], [16, 48], 11, 11, 11, 11, 11, [0, 42, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 18, "sp"], 11, 11, [0, 16, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 196 [ , [15, 156], [15, 148], [15, 146], [16, 144], [15, 144], 13, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, [0, 128, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, [14, 44], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 55], 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 68], 11, 11, [14, 74], [16, 65], [16, 64], 11, 11, 11, 11, [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], 11, [16, 55], [16, 54], [16, 53], [16, 52], [16, 52], [0, 50, "sp"], [16, 50], [16, 49], [16, 48], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 32, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 197 [ , [15, 157], [15, 149], [15, 147], [16, 145], [16, 144], [0, 143, "DM3"], 12, 11, 11, 12, 11, 11, 11, [0, 133, "Da1"], [0, 132, "Da1"], 11, [0, 130, "Da1"], 12, 11, 11, [0, 126, "Da1"], 11, 11, [0, 123, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, 11, [16, 68], 11, 11, 11, [16, 65], [16, 64], 11, 11, 11, [16, 61], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], 11, [16, 55], [16, 54], [16, 53], [16, 52], 12, 11, [16, 50], [16, 49], [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 36, "sp"], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 14, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 198 [ , [15, 158], [15, 150], [15, 148], [16, 146], [16, 145], [16, 144], [0, 142, "Da1"], 11, 11, 12, [0, 137, "Da1"], 11, 11, 12, 11, 11, 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 50], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, 11, 11, 11, 11, 11, [16, 73], [16, 72], 11, 11, 11, 11, 11, [16, 68], 11, 11, 11, [16, 65], [16, 64], 11, 11, [16, 62], [16, 61], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], 11, [16, 55], [16, 54], [16, 53], [16, 52], 11, 11, [16, 50], [0, 48, "sp"], [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 28, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 20, "sp"], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 199 [ , [15, 159], [15, 151], [15, 148], [16, 147], [16, 146], [16, 145], 12, 11, 11, [0, 139, "Da1"], 12, 11, [0, 136, "Da1"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, 11, 11, 11, 11, [14, 68], [16, 73], [16, 72], 11, 11, 11, 11, 11, [14, 74], 11, 11, 11, [16, 65], [16, 64], 11, [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], 11, [16, 55], [16, 54], [16, 53], [16, 52], 11, 11, 12, 11, [16, 48], 11, 11, 11, 11, 11, 11, 11, [0, 40, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 200 [ , [15, 160], [15, 152], [15, 149], [15, 148], [16, 147], [16, 146], 12, 11, 11, 12, 11, 11, 11, [0, 135, "Da1"], 11, 11, 11, [0, 131, "Da1"], 11, 11, [0, 128, "Da1"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 55], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, 11, 11, 11, 11, 11, [16, 73], [16, 72], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 65], [16, 64], 11, [14, 80], [16, 62], [16, 61], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], 11, [16, 55], [16, 54], [16, 53], [16, 52], 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 201 [ , [15, 160], [15, 152], [15, 150], [16, 148], [15, 148], [16, 147], 12, 11, 11, 12, 11, 11, 11, 12, 11, 11, [0, 133, "DM4"], 12, 11, [0, 130, "DM4"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, 11, 11, 11, 11, 11, [16, 73], [16, 72], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 65], [16, 64], 11, 11, [16, 62], [16, 61], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], 11, [16, 55], [16, 54], [16, 53], [16, 52], 11, 11, 11, 11, [16, 48], [0, 46, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 202 [ , [15, 161], [15, 153], [15, 151], [16, 149], [16, 148], [15, 148], [0, 145, "DM4"], 11, [16, 144], 12, [0, 140, "DM4"], 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, 11, [16, 76], 11, 11, 11, [16, 73], [16, 72], 11, [14, 73], 11, 11, 11, 11, 11, 11, 11, [16, 65], [16, 64], 11, 11, [16, 62], [16, 61], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], 11, [16, 55], [16, 54], [16, 53], [16, 52], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 22, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 203 [ , [15, 162], [15, 154], [15, 152], [16, 150], [16, 149], [16, 148], 12, 11, [0, 144, "DM4"], 12, 12, 11, [0, 139, "DM4"], 12, 11, 11, 11, [0, 133, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 55], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, [16, 77], [16, 76], 11, 11, 11, [16, 73], [16, 72], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 65], [16, 64], 11, 11, [16, 62], [16, 61], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], 11, [0, 54, "sp"], [16, 54], [16, 53], [16, 52], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 204 [ , [15, 163], [15, 155], [15, 152], [16, 151], [16, 150], [16, 149], 12, 11, 11, 11, 12, 11, 11, [0, 138, "DM4"], [0, 137, "DM4"], 11, 11, 12, 11, 11, [0, 131, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 52], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, [16, 77], [16, 76], 11, 11, 11, [16, 73], [16, 72], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 64], [16, 64], 11, 11, [16, 62], [16, 61], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], [0, 52, "Jo"], [16, 52], 11, 11, 11, 11, 11, 11, 11, [0, 44, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 34, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 205 [ , [15, 164], [15, 156], [15, 153], [15, 152], [16, 151], [16, 150], 12, 11, 11, [0, 144, "DM4"], 12, 11, 11, 12, 11, 11, [0, 136, "DM4"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, [16, 77], [16, 76], 11, 11, 11, [16, 73], [16, 72], 11, 11, 11, 11, 11, 11, 11, 11, [16, 65], [16, 64], [16, 64], 11, 11, [16, 62], [16, 61], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, 12, 11, [16, 52], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, [0, 38, "sp"], 11, 11, 11, 12, 11, 11, 11, 11, 11, [0, 30, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 12, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 206 [ , [15, 164], [15, 156], [15, 154], [16, 152], [15, 152], [16, 151], [0, 148, "DM4"], [16, 148], 11, 12, [0, 143, "DM4"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, [16, 77], [16, 76], 11, 11, 11, [16, 73], [16, 72], 11, 11, 11, 11, 11, 11, 11, [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, [16, 62], [16, 61], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, 11, 11, [16, 52], [0, 50, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, [0, 24, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 207 [ , [15, 165], [15, 157], [15, 155], [16, 153], [16, 152], [15, 152], 12, 11, [0, 147, "DM4"], 12, 12, 11, [0, 142, "DM4"], 12, 11, 11, 11, [0, 136, "DM4"], 11, 11, [0, 133, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, [16, 77], [16, 76], 11, 11, 11, [16, 73], [16, 72], 11, 11, 11, 11, 11, 11, [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, [16, 62], [16, 61], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 208 [ , [15, 166], [15, 158], [15, 156], [16, 154], [16, 153], [16, 152], 12, 11, 11, [0, 146, "DM4"], 12, 11, 11, [0, 141, "DM4"], [0, 140, "DM4"], 11, [0, 138, "DM4"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, [16, 77], [16, 76], 11, 11, 11, [16, 73], [16, 72], 11, 11, 11, 11, 11, 11, [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, [16, 62], [16, 61], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 42, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 209 [ , [15, 167], [15, 159], [15, 156], [16, 155], [16, 154], [16, 153], [0, 150, "DM4"], 11, 11, 12, [0, 145, "DM4"], 11, 11, 12, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 50], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, [16, 77], [16, 76], 11, 11, 11, [16, 73], [16, 72], 11, 11, 11, 11, [16, 68], 11, [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, [16, 62], [16, 61], [16, 60], [14, 89], [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, 11, 11, 11, 11, 11, [0, 48, "sp"], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 210 [ , [15, 168], [15, 160], [15, 157], [15, 156], [16, 155], [16, 154], 12, 11, 11, 12, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, [16, 77], [16, 76], 11, 11, 11, [16, 73], [16, 72], 11, 11, 11, [16, 69], [16, 68], 11, [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, [16, 62], [16, 61], [16, 60], 11, [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 211 [ , [15, 168], [15, 160], [15, 158], [16, 156], [15, 156], [16, 155], 12, 11, 11, [0, 148, "DM4"], 12, 11, 11, 12, 11, 11, 11, [0, 139, "DM4"], 11, 11, [0, 136, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, [16, 77], [16, 76], 11, 11, 11, [16, 73], [16, 72], 11, 11, [16, 70], [16, 69], [16, 68], 11, [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, [16, 62], [16, 61], [16, 60], 11, [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 212 [ , [15, 169], [15, 160], [15, 159], [16, 157], [16, 156], [15, 156], 12, 11, 11, 12, 11, 11, 11, [0, 144, "DM4"], [0, 143, "DM4"], 11, [0, 141, "DM4"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 46], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], 11, 11, 11, [16, 77], [16, 76], 11, 11, 11, [16, 73], [16, 72], 11, 11, [16, 70], [16, 69], [16, 68], 11, [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, [16, 62], [16, 61], [16, 60], 11, [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], [0, 46, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 36, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 26, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 213 [ , [15, 170], [15, 161], [15, 160], [16, 158], [16, 157], [16, 156], [0, 153, "DM4"], 11, 11, 12, [0, 148, "DM4"], 11, 11, 12, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 38], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], [16, 80], 11, 11, 11, [16, 77], [16, 76], 11, 11, 11, [16, 73], [16, 72], 11, 11, [16, 70], [16, 69], [16, 68], 11, [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, [16, 62], [16, 61], [16, 60], 11, [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], [0, 54, "sp"], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, [0, 40, "sp"], 11, 11, 11, 12, 11, 11, 11, 11, 11, [0, 32, "sp"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 214 [ , [15, 171], [15, 162], [15, 160], [16, 159], [16, 158], [16, 157], 12, 11, 11, 12, 12, 11, 11, 12, 11, 11, 11, [0, 141, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 81], [16, 80], [16, 80], 11, 11, 11, [16, 77], [16, 76], 11, 11, 11, [16, 73], [16, 72], 11, 11, [16, 70], [16, 69], [16, 68], 11, [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, [16, 62], [16, 61], [16, 60], 11, [16, 59], [16, 58], [16, 57], [16, 56], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 215 [ , [15, 172], [15, 163], [15, 160], [15, 160], [16, 159], [16, 158], 12, 11, 11, [0, 151, "DM4"], 12, 11, 11, 12, [0, 145, "DM4"], 11, 11, 12, 11, 11, [0, 139, "DM4"], [0, 138, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 46], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 82], [16, 81], [16, 80], [16, 80], 11, 11, 11, [16, 77], [16, 76], 11, 11, 11, [16, 73], [16, 72], 11, 11, [16, 70], [16, 69], [16, 68], 11, [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, [16, 62], [16, 61], [16, 60], 11, [16, 59], [16, 58], [16, 57], [16, 56], 11, 11, 11, [0, 52, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 216 [ , [15, 172], [15, 164], [15, 161], [15, 160], [15, 160], [16, 159], 12, 11, 11, 12, 11, 11, 11, [0, 147, "DM4"], 12, 11, [0, 144, "DM4"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 82], [16, 81], [16, 80], [16, 80], 11, 11, 11, [16, 77], [16, 76], 11, 11, 11, [16, 73], [16, 72], 11, 11, [14, 84], [16, 69], [16, 68], 11, [14, 87], [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, [16, 62], [16, 61], [16, 60], 11, [16, 59], [16, 58], [16, 57], [16, 56], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 44, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 217 [ , [15, 173], [15, 164], [15, 162], [16, 160], [15, 160], [15, 160], [0, 156, "DM4"], 11, 11, 12, [0, 151, "DM4"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 82], [16, 81], [16, 80], [16, 80], 11, 11, 11, [16, 77], [16, 76], 11, 11, 11, [16, 72], [16, 72], 11, 11, 11, [16, 69], [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, [16, 62], [16, 61], [16, 60], 11, [16, 59], [16, 58], [16, 57], [16, 56], 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 218 [ , [15, 174], [15, 165], [15, 163], [16, 161], [16, 160], [15, 160], 12, 11, 11, 12, 12, 11, 11, 12, 11, 11, 11, [0, 144, "DM4"], 11, 11, [0, 141, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 52], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, [16, 82], [16, 81], [16, 80], [16, 80], 11, 11, 11, [16, 77], [16, 76], 11, 11, [16, 73], [16, 72], [16, 72], 11, 11, 11, [16, 69], [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, [14, 93], [16, 61], [16, 60], 11, [16, 59], [16, 58], [16, 57], [16, 56], 11, 11, 11, 11, [16, 52], [0, 50, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 28, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 219 [ , [15, 175], [15, 166], [15, 164], [16, 162], [16, 161], [16, 160], 12, 11, 11, [0, 154, "DM4"], 12, 11, 11, [0, 149, "DM4"], [0, 148, "DM4"], 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, [16, 82], [16, 81], [16, 80], [16, 80], 11, 11, 11, [16, 77], [16, 76], 11, [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, 11, [16, 69], [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, 11, [16, 61], [16, 60], 11, [16, 59], [16, 58], [16, 56], [16, 56], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 220 [ , [15, 176], [15, 167], [15, 164], [16, 163], [16, 162], [16, 160], 12, 11, 11, 12, 11, 11, 11, 12, 11, 11, [0, 147, "DM4"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, [16, 82], [16, 81], [16, 80], [16, 80], 11, 11, 11, [16, 77], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, 11, [16, 69], [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, 11, [16, 61], [16, 60], 11, [0, 58, "sp"], [16, 57], [16, 56], [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 38, "sp"], 11, 11, 11, 11, [0, 34, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 221 [ , [15, 176], [15, 168], [15, 165], [15, 164], [16, 163], [16, 161], [0, 159, "DM4"], 11, 11, 12, [0, 154, "DM4"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, [16, 82], [16, 81], [16, 80], [16, 80], 11, 11, 11, [16, 77], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, 11, [16, 69], [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, 11, [16, 61], [16, 60], 11, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, 11, 11, 11, 11, 11, [0, 48, "sp"], 11, 11, 11, 11, 11, 11, [0, 42, "Jo"], 11, 11, 11, 12, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 222 [ , [15, 177], [15, 168], [15, 166], [16, 164], [15, 164], [16, 162], 12, 11, 11, 12, 12, 11, [0, 153, "DM4"], 12, 11, 11, 11, [0, 147, "DM4"], 11, 11, [0, 144, "DM4"], [0, 143, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 42], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, [16, 82], [16, 81], [16, 80], [16, 80], 11, 11, 11, [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, 11, [16, 69], [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, 11, [16, 61], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 223 [ , [15, 178], [15, 169], [15, 167], [16, 165], [16, 164], [16, 163], 12, 11, 11, [0, 157, "DM4"], 12, 11, 11, [0, 152, "DM4"], [0, 151, "DM4"], 11, [0, 149, "DM4"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, [16, 82], [16, 81], [16, 80], [16, 80], 11, 11, [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, 11, [16, 69], [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, 11, [16, 61], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 224 [ , [15, 179], [15, 170], [15, 168], [16, 166], [16, 165], [16, 164], 12, 11, 11, 12, [0, 156, "DM4"], 11, 11, 12, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, [16, 82], [16, 81], [16, 80], [16, 80], 11, [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, 11, [16, 69], [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, 11, [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], [0, 54, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 10, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 225 [ , [15, 180], [15, 171], [15, 168], [16, 167], [16, 166], [16, 164], [0, 162, "DM4"], 11, 11, 12, 12, 11, 11, 12, 11, 11, 11, [0, 149, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, [16, 82], [16, 81], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, 11, [16, 69], [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, [16, 61], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 46, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 30, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 226 [ , [15, 180], [15, 172], [15, 169], [15, 168], [16, 167], [16, 165], 12, 11, 11, 12, 12, 11, 11, 12, [0, 153, "DM4"], 11, 11, 12, 11, 11, [0, 147, "DM4"], [0, 146, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 46], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, [16, 82], [16, 81], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, 11, [16, 69], [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], [14, 97], 11, [16, 62], [16, 61], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], 11, 11, 11, [0, 52, "sp"], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 20, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 227 [ , [15, 181], [15, 172], [15, 170], [16, 168], [15, 168], [16, 166], 12, 11, 11, [0, 160, "DM4"], 12, 11, 11, [0, 155, "DM4"], 12, 11, [0, 152, "DM4"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, [16, 82], [16, 81], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, 11, [16, 69], [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], 11, [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, [0, 18, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 228 [ , [15, 182], [15, 173], [15, 171], [16, 169], [16, 168], [16, 167], 12, 11, 11, 12, [0, 159, "DM4"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, [16, 82], [16, 81], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, 11, [16, 69], [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], 11, [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 40, "sp"], 11, 11, 11, 11, [0, 36, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 22, "sp"], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 229 [ , [15, 183], [15, 174], [15, 172], [16, 170], [16, 169], [16, 168], [0, 165, "DM4"], 11, 11, 12, 12, 11, 11, 12, 11, 11, 11, [0, 152, "DM4"], 11, 11, [0, 149, "DM4"], [0, 148, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 46], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 88], 11, 11, 11, 11, 11, [16, 84], 11, 11, [16, 82], [16, 81], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, 11, [16, 69], [16, 68], 11, 11, [16, 66], [16, 64], [16, 64], 11, [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], 11, 11, 11, 11, 11, [0, 50, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 230 [ , [15, 184], [15, 175], [15, 172], [16, 171], [16, 170], [16, 168], 12, 11, 11, 12, 12, 11, 11, 12, [0, 156, "DM4"], 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 89], [16, 88], 11, 11, 11, 11, 11, [16, 84], 11, 11, [16, 82], [16, 81], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, 11, [16, 69], [16, 68], 11, 11, [16, 65], [16, 64], [16, 64], 11, [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], [0, 58, "sp"], [16, 58], [16, 57], [16, 56], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, [0, 44, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 231 [ , [15, 184], [15, 176], [15, 173], [15, 172], [16, 171], [16, 169], 12, 11, 11, [0, 163, "DM4"], 12, 11, 11, [0, 158, "DM4"], 12, 11, [0, 155, "DM4"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 30], 11, 11, 11, 11, [14, 34], 11, 11, 11, 11, 11, 11, 11, [14, 40], 11, 11, 11, 11, [14, 44], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 89], [16, 88], 11, 11, 11, 11, 11, [16, 84], 11, 11, [16, 82], [16, 81], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, 11, [16, 69], [16, 68], 11, [16, 66], [16, 65], [16, 64], [16, 64], 11, [16, 63], [16, 62], [16, 61], [16, 60], 12, 11, [16, 58], [16, 57], [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 32, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 24, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 16, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 232 [ , [15, 185], [15, 176], [15, 174], [16, 172], [15, 172], [16, 170], 12, 11, 11, 12, [0, 162, "DM4"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 32], 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 89], [16, 88], 11, 11, 11, 11, 11, [16, 84], 11, 11, [16, 82], [16, 80], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, 11, [16, 69], [16, 68], [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], 11, [16, 63], [16, 62], [16, 61], [16, 60], 11, 11, [16, 58], [0, 56, "sp"], [16, 56], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 233 [ , [15, 186], [15, 176], [15, 175], [16, 173], [16, 172], [16, 171], [0, 168, "DM4"], 11, 11, 12, 12, 11, 11, 12, [0, 158, "DM4"], 11, 11, [0, 155, "DM4"], [0, 154, "DM4"], 11, [0, 152, "DM4"], [0, 151, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 89], [16, 88], 11, 11, 11, 11, 11, [16, 84], 11, 11, [16, 81], [16, 80], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, 11, [16, 69], [16, 68], [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], 11, [16, 63], [16, 62], [16, 61], [16, 60], 11, 11, 12, 11, [16, 56], 11, 11, 11, 11, 11, 11, 11, [0, 48, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 234 [ , [15, 187], [15, 177], [15, 176], [16, 174], [16, 173], [16, 172], 12, 11, 11, 12, 12, 11, 11, 12, 12, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 44], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 92], 11, 11, 11, [16, 89], [16, 88], 11, 11, 11, 11, 11, [16, 84], 11, [16, 82], [16, 81], [16, 80], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, 11, [16, 68], [16, 68], [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], 11, [16, 63], [16, 62], [16, 61], [16, 60], 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 235 [ , [15, 188], [15, 178], [15, 176], [16, 175], [16, 174], [16, 172], 12, 11, 11, [0, 166, "DM4"], 12, 11, 11, [0, 161, "DM4"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 92], 11, 11, 11, [16, 89], [16, 88], 11, 11, 11, 11, 11, [16, 84], [16, 83], [16, 82], [16, 81], [16, 80], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, [16, 69], [16, 68], [16, 68], [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], 11, [16, 63], [16, 62], [16, 61], [16, 60], 11, 11, 11, 11, [16, 56], [0, 54, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 26, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 236 [ , [15, 188], [15, 179], [15, 176], [15, 176], [16, 175], [16, 173], 12, 11, 11, 12, [0, 165, "DM4"], 11, 11, 12, 11, 11, 11, [0, 157, "DM4"], 11, 11, 11, [0, 153, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 42], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 92], 11, 11, 11, [16, 89], [16, 88], 11, 11, 11, 11, 11, [16, 84], [16, 83], [16, 82], [16, 81], [16, 80], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], 11, [16, 70], [16, 69], [16, 68], [16, 68], [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], 11, [16, 63], [16, 62], [16, 61], [16, 60], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 42, "sp"], 11, 11, 11, 11, [0, 38, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 237 [ , [15, 189], [15, 180], [15, 177], [15, 176], [15, 176], [16, 174], [0, 171, "DM4"], 11, 11, 12, 12, 11, 11, 12, [0, 161, "DM4"], 11, 11, 12, 11, 11, [0, 155, "DM4"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 92], 11, 11, 11, [16, 89], [16, 88], 11, 11, 11, 11, [16, 84], [16, 84], [16, 83], [16, 82], [16, 81], [16, 80], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 68], [16, 68], [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], 11, [0, 62, "sp"], [16, 62], [16, 61], [16, 60], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 238 [ , [15, 190], [15, 180], [15, 178], [15, 177], [15, 176], [16, 175], 12, 11, 11, 12, 12, 11, 11, 12, 12, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 92], 11, 11, 11, [16, 89], [16, 88], 11, 11, 11, [16, 85], [16, 84], [16, 84], [16, 83], [16, 82], [16, 81], [16, 80], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 68], [16, 68], [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, [16, 62], [0, 60, "sp"], [16, 60], 11, 11, 11, 11, 11, 11, 11, [0, 52, "sp"], 11, 11, 11, 11, 11, 11, [0, 46, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 34, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 239 [ , [15, 191], [15, 181], [15, 179], [0, 177, "LaM"], [16, 176], [15, 176], 12, 11, 11, [0, 169, "DM4"], [0, 167, "DM4"], 11, 11, [0, 164, "DM4"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 42], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 92], 11, 11, 11, [16, 89], [16, 88], 11, 11, [16, 86], [16, 85], [16, 84], [16, 84], [16, 83], [16, 82], [16, 81], [16, 80], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 68], [16, 68], [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, 12, 11, [16, 60], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 240 [ , [15, 192], [15, 182], [15, 180], 12, [16, 177], [16, 176], 12, 11, 11, 12, 12, 11, 11, 12, 11, 11, 11, [0, 160, "DM4"], [0, 159, "DM4"], 11, 11, [0, 156, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 92], 11, 11, 11, [16, 89], [16, 88], 11, [16, 87], [16, 86], [16, 85], [16, 84], [16, 84], [16, 83], [16, 82], [16, 81], [16, 80], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 68], [16, 68], [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 28, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 14, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 241 [ , [15, 192], [15, 183], [15, 180], 12, [16, 178], [16, 176], [0, 174, "DM4"], 11, 11, 12, 12, 11, 11, 12, [0, 164, "DM4"], 11, 11, 12, 11, 11, [0, 158, "DM4"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 92], 11, 11, 11, [16, 89], [16, 88], 11, [16, 87], [16, 86], [16, 85], [16, 84], [16, 84], [16, 83], [16, 82], [16, 81], [16, 80], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 68], [16, 68], [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, 11, 11, [16, 60], [0, 58, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 50, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 242 [ , [15, 193], [15, 184], [15, 181], [15, 180], [16, 179], [16, 177], 12, 11, 11, 12, 12, 11, 11, [0, 166, "DM4"], 12, 11, [0, 163, "DM4"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 92], 11, 11, 11, [16, 89], [16, 88], 11, [16, 87], [16, 86], [16, 85], [16, 84], [16, 84], [16, 83], [16, 82], [16, 81], [16, 80], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 68], [16, 68], [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 4, "sp"], 11, 11, 11, 11, 11, 11, 11], #V n = 243 [ , [15, 194], [15, 184], [15, 182], [0, 180, "Ha"], [15, 180], [16, 178], 12, 11, 11, [0, 172, "DM4"], [0, 170, "DM4"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, [0, 158, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 92], 11, 11, 11, [16, 89], [16, 88], 11, [16, 87], [16, 86], [16, 85], [16, 84], [16, 84], [16, 83], [16, 82], [16, 81], [16, 80], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 68], [16, 68], [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, 11, 11, 11, 11, 11, [0, 56, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 40, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 244 [ , [15, 195], [15, 185], [15, 183], 12, [16, 180], [16, 179], 12, 11, 11, 12, 12, 11, 11, 12, [0, 166, "DM4"], 11, 11, [0, 163, "DM4"], [0, 162, "DM4"], 11, [0, 160, "DM4"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 92], 11, 11, 11, [16, 89], [16, 88], 11, [16, 87], [16, 86], [16, 85], [16, 84], [16, 84], [16, 83], [16, 82], [16, 81], [16, 80], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 68], [16, 68], [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 44, "sp"], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 245 [ , [15, 196], [15, 186], [15, 184], 12, [16, 181], [16, 180], [0, 177, "DM4"], [0, 176, "DM4"], 11, 12, 12, 11, 11, 12, 12, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 96], 11, 11, 11, 11, 11, [16, 92], 11, 11, 11, [16, 89], [16, 88], 11, [16, 87], [16, 86], [16, 85], [16, 84], [16, 84], [16, 83], [16, 82], [16, 81], [16, 80], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 68], [16, 68], [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 36, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 246 [ , [15, 196], [15, 187], [15, 184], 12, [16, 182], [16, 180], 12, 11, 11, 12, 12, 11, 11, [0, 169, "DM4"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 97], [16, 96], 11, 11, 11, 11, 11, [16, 92], 11, 11, 11, [16, 89], [16, 88], 11, [16, 87], [16, 86], [16, 85], [16, 84], [16, 84], [16, 83], [16, 82], [16, 81], [16, 80], [16, 80], [16, 80], [16, 79], [16, 78], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 68], [16, 68], [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 54, "sp"], 11, 11, 11, 11, 11, 11, [0, 48, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, [0, 30, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 247 [ , [15, 197], [15, 188], [15, 185], [15, 184], [16, 183], [16, 181], 12, 11, 11, [0, 175, "DM4"], [0, 173, "DM4"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, [0, 161, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 97], [16, 96], 11, 11, 11, 11, 11, [16, 92], 11, 11, 11, [16, 88], [16, 88], 11, [16, 87], [16, 86], [16, 85], [16, 84], [16, 84], [16, 83], [16, 82], [16, 81], [16, 80], [16, 80], [16, 80], [16, 79], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 68], [16, 68], [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], [0, 62, "sp"], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 6, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 248 [ , [15, 198], [15, 188], [15, 186], [0, 184, "Ha"], [15, 184], [16, 182], 12, 11, 11, 12, 12, 11, 11, 12, [0, 169, "DM4"], 11, 11, [0, 166, "DM4"], [0, 165, "DM4"], [0, 164, "DM4"], [0, 163, "DM4"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 97], [16, 96], 11, 11, 11, 11, 11, [16, 92], 11, 11, [16, 89], [16, 88], [16, 88], 11, [16, 87], [16, 86], [16, 85], [16, 84], [16, 84], [16, 83], [16, 82], [16, 81], [16, 80], [16, 80], [16, 80], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 68], [16, 68], [16, 67], [16, 66], [16, 65], [16, 64], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 249 [ , [15, 199], [15, 189], [15, 187], 12, [16, 184], [16, 183], [0, 180, "DM4"], 11, 11, 12, 12, 11, 11, 12, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, [14, 34], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 97], [16, 96], 11, 11, 11, 11, 11, [16, 92], 11, [16, 90], [16, 89], [16, 88], [16, 88], 11, [16, 87], [16, 86], [16, 85], [16, 84], [16, 84], [16, 83], [16, 82], [16, 81], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 68], [16, 68], [16, 67], [16, 66], [16, 65], [16, 64], 11, 11, 11, [0, 60, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 250 [ , [15, 200], [15, 190], [15, 188], 12, [16, 185], [16, 184], 12, 11, 11, 12, 12, 11, 11, [0, 172, "DM4"], 12, 11, 11, 12, 11, 11, 11, [0, 163, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 97], [16, 96], 11, 11, 11, 11, 11, [16, 92], [16, 91], [16, 90], [16, 89], [16, 88], [16, 88], 11, [16, 87], [16, 86], [16, 85], [16, 84], [16, 84], [16, 83], [16, 82], [16, 81], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 68], [16, 68], [16, 67], [16, 66], [16, 65], [16, 64], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 52, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 251 [ , [15, 200], [15, 191], [15, 188], 12, [16, 186], [16, 184], 12, 11, 11, 12, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 97], [16, 96], 11, 11, 11, 11, 11, [16, 92], [16, 91], [16, 90], [16, 89], [16, 88], [16, 88], 11, [16, 87], [16, 86], [16, 85], [16, 84], [16, 84], [16, 83], [16, 82], [16, 81], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 68], [16, 68], [16, 67], [16, 66], [16, 65], [16, 64], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 42, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 252 [ , [15, 201], [15, 192], [15, 189], [15, 188], [16, 187], [16, 185], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 97], [16, 96], 11, 11, 11, 11, [16, 92], [16, 92], [16, 91], [16, 90], [16, 89], [16, 88], [16, 88], 11, [16, 87], [16, 86], [16, 85], [16, 84], [16, 84], [16, 83], [16, 82], [16, 81], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 68], [16, 68], [16, 67], [16, 66], [16, 65], [16, 64], 11, 11, 11, 11, 11, [0, 58, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 46, "sp"], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 32, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 253 [ , [15, 202], [15, 192], [15, 190], [15, 189], [15, 188], [16, 186], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 97], [16, 96], 11, 11, 11, [16, 93], [16, 92], [16, 92], [16, 91], [16, 90], [16, 89], [16, 88], [16, 88], 11, [16, 87], [16, 86], [16, 85], [16, 84], [16, 84], [16, 83], [16, 82], [16, 81], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 68], [16, 68], [16, 67], [16, 66], [16, 65], [16, 64], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 38, "sp"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 254 [ , [15, 203], [15, 192], [15, 191], [15, 190], [16, 188], [16, 187], 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 97], [16, 96], 11, 11, 11, [16, 93], [16, 92], [16, 92], [16, 91], [16, 90], [16, 89], [16, 88], [16, 88], 11, [16, 87], [16, 86], [16, 85], [16, 84], [16, 84], [16, 83], [16, 82], [16, 80], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 68], [16, 68], [0, 66, "sp"], [16, 66], [16, 65], [16, 64], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 255 [ , [15, 204], [15, 193], [15, 192], [15, 191], [16, 189], [16, 188], 12, 11, [16, 184], 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 97], [16, 96], 11, 11, 11, [16, 93], [16, 92], [16, 92], [16, 91], [16, 90], [16, 89], [16, 88], [16, 88], 11, [16, 87], [16, 86], [16, 85], [16, 84], [16, 84], [16, 83], [16, 81], [16, 80], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 68], 12, 11, [16, 66], [0, 64, "sp"], [16, 64], 11, 11, 11, 11, 11, 11, 11, [0, 56, "sp"], 11, 11, 11, 11, 11, 11, [0, 50, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 256 [ , [15, 204], [15, 194], [15, 192], [15, 192], [16, 190], [16, 188], 12, 11, [16, 185], [16, 184], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 97], [16, 96], 11, 11, 11, [16, 93], [16, 92], [16, 92], [16, 91], [16, 90], [16, 89], [16, 88], [16, 88], 11, [16, 87], [16, 86], [16, 85], [16, 84], [16, 84], [16, 82], [16, 81], [16, 80], [16, 80], [16, 80], [16, 79], [16, 78], [16, 77], [16, 76], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 68], 11, 11, 12, 11, [16, 64], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11]]; guava-3.6/tbl/codes4.g0000644017361200001450000065712611026723452014477 0ustar tabbottcrontab############################################################################# ## #A codes4.g GUAVA library Reinald Baart #A & Jasper Cramwinckel #A & Erik Roijackers ## #H @(#)$Id: codes4.g,v 1.1.1.1 1998/03/19 17:31:41 lea Exp $ ## #Y Copyright (C) 1994, Vakgroep Algemene Wiskunde, T.U. Delft, Nederland ## #H CJ, 17 May 2006 #H Updated lower- and upper-bounds of minimum distance for GF(2), #H GF(3) and GF(4) codes. (Brouwer's table as of 11 May 2006) #H #H $Log: codes4.g,v $ #H Revision 1.1.1.1 1998/03/19 17:31:41 lea #H Initial version of GUAVA for GAP4. Development still under way. #H Lea Ruscio 19/3/98 #H #H #H Revision 1.2 1997/01/20 15:34:25 werner #H Upgrade from Guava 1.2 to Guava 1.3 for GAP release 3.4.4. #H #H Revision 1.1 1994/11/10 14:29:23 rbaart #H Initial revision #H ## YouWantThisCode := function(n, k, d, ref) if IsList( GUAVA_TEMP_VAR ) and GUAVA_TEMP_VAR[1] = false then Add( GUAVA_TEMP_VAR, [n, k, d, ref] ); fi; return [n, k] = GUAVA_TEMP_VAR; end; if YouWantThisCode( 6, 3, 4, "QR" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 12, 6, 6, "QR" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 17, 4, 12, "BCH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 17, 13, 4, "ovo" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 18, 6, 10, "Gu" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 18, 9, 8, "MOS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 20, 10, 8, "QR" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 20, 13, 6, "EB3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 21, 12, 7, "KPm" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 21, 15, 5, "KPm" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 24, 5, 16, "Li1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 24, 7, 13, "GB4" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 26, 6, 16, "Gu" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 26, 16, 7, "EB3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 27, 8, 14, "GB4" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 27, 9, 13, "GuB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 27, 19, 6, "EB3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 28, 4, 20, "GH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 28, 6, 17, "GB4" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 28, 7, 16, "GuB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 30, 5, 20, "KPq" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 30, 8, 16, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 30, 9, 15, "GB4" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 30, 10, 14, "Da4" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 30, 11, 13, "DG5" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 30, 15, 12, "QR" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 31, 4, 22, "GH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 32, 6, 20, "Gu" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 32, 7, 19, "GB4" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 32, 16, 11, "Du3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 33, 5, 22, "Bo1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 33, 10, 16, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 33, 11, 15, "DG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 34, 9, 18, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 34, 13, 14, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 35, 6, 22, "GB4" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 36, 8, 20, "GB4" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 36, 9, 19, "Gu" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 36, 12, 16, "DG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 36, 18, 12, "GaO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 36, 24, 8, "Zi" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 38, 9, 20, "Bou" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 38, 10, 19, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 38, 19, 12, "QR" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 39, 7, 24, "Gu" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 39, 12, 18, "KPm" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 39, 13, 17, "BMP" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 39, 21, 11, "KPm" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 39, 24, 9, "KPm" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 40, 5, 28, "KPq" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 41, 36, 4, "IN" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 42, 6, 28, "GB4" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 42, 9, 23, "Ayd" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 42, 10, 22, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 42, 12, 20, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 42, 14, 18, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 42, 15, 17, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 42, 17, 16, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 42, 31, 7, "Zi" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 43, 5, 30, "Liz" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 43, 36, 5, "KPc" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 44, 8, 27, "Zi" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 44, 22, 14, "QR" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 45, 7, 28, "Gu" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 45, 15, 18, "DG5" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 45, 16, 17, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 46, 5, 32, "Liz" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 46, 11, 24, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 46, 12, 22, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 46, 14, 20, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 46, 23, 14, "GaO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 48, 6, 32, "Gu" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 48, 12, 23, "DG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 48, 24, 14, "GaO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 49, 4, 36, "GH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 50, 10, 27, "Da4" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 50, 28, 12, "D1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 51, 5, 36, "Bou" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 51, 13, 24, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 51, 18, 19, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 51, 35, 9, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 51, 37, 8, "LX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 51, 42, 6, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 52, 7, 33, "Gu" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 52, 9, 32, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 52, 12, 25, "DG5" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 52, 17, 22, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 53, 6, 36, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 54, 27, 16, "GaO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 54, 39, 8, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 55, 10, 31, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 55, 11, 29, "DG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 56, 5, 40, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 57, 9, 34, "YC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 57, 18, 24, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 57, 34, 12, "D1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 58, 10, 32, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 60, 9, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 60, 13, 30, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 60, 16, 28, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 62, 31, 18, "GaO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 62, 32, 15, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 63, 13, 32, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 63, 14, 31, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 63, 18, 28, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 64, 16, 30, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 64, 20, 27, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 64, 36, 14, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 64, 54, 6, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 65, 8, 44, "BCH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 65, 12, 36, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 65, 27, 23, "BCH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 65, 28, 19, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 65, 46, 10, "BCH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 65, 57, 5, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 66, 15, 32, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 67, 5, 48, "Bou" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 67, 13, 35, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 67, 18, 30, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 67, 20, 28, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 67, 26, 24, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 67, 29, 19, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 67, 36, 15, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 67, 45, 11, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 68, 15, 33, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 68, 28, 21, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 68, 34, 18, "GaO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 68, 39, 14, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 68, 48, 10, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 69, 13, 36, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 69, 19, 29, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 69, 23, 27, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 69, 25, 25, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 69, 27, 24, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 69, 41, 13, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 69, 44, 12, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 69, 50, 9, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 70, 4, 52, "Bel" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 70, 5, 50, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 70, 7, 48, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 70, 9, 44, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 70, 11, 40, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 70, 12, 38, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 70, 14, 35, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 70, 15, 34, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 70, 16, 33, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 70, 18, 31, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 70, 29, 21, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 70, 30, 20, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 70, 31, 19, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 70, 35, 18, "GaO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 70, 38, 15, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 70, 47, 11, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 70, 57, 7, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 71, 22, 28, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 71, 24, 27, "BET" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 71, 28, 23, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 72, 8, 48, "BET" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 72, 14, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 72, 20, 30, "Tol" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 72, 26, 26, "Tol" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 72, 27, 25, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 72, 36, 18, "GaO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 72, 42, 14, "Tol" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 72, 46, 12, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 72, 51, 10, "Tol" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 72, 56, 8, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 73, 23, 28, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 73, 29, 23, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 73, 30, 22, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 73, 44, 13, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 73, 53, 9, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 74, 20, 31, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 74, 26, 27, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 74, 28, 24, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 74, 41, 15, "BET" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 74, 50, 11, "BET" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 75, 4, 56, "Bel" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 75, 11, 44, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 75, 13, 40, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 75, 16, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 75, 31, 22, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 75, 34, 20, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 75, 37, 18, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 75, 44, 14, "BET" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 76, 22, 30, "BET" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 76, 25, 28, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 76, 27, 27, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 76, 29, 24, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 76, 30, 23, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 76, 33, 21, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 76, 39, 17, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 77, 7, 52, "BET" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 77, 8, 50, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 77, 23, 29, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 77, 28, 25, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 77, 52, 11, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 78, 6, 56, "Hi" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 78, 12, 44, "Ayd" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 78, 22, 31, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 78, 26, 28, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 78, 33, 22, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 78, 34, 21, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 78, 39, 18, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 79, 19, 36, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 79, 29, 25, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 79, 47, 14, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 79, 49, 13, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 80, 8, 52, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 80, 11, 48, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 80, 22, 32, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 80, 23, 31, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 80, 27, 28, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 80, 28, 27, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 80, 32, 24, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 80, 33, 23, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 80, 38, 20, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 80, 45, 16, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 81, 25, 30, "X6u" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 81, 29, 26, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 81, 43, 17, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 81, 70, 6, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 82, 26, 29, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 82, 31, 25, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 82, 36, 22, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 83, 23, 32, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 83, 25, 31, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 83, 43, 18, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 84, 27, 29, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 6, 60, "BCH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 8, 56, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 14, 48, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 15, 45, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 16, 44, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 17, 43, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 18, 42, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 19, 40, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 22, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 23, 33, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 24, 32, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 26, 31, "BCH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 30, 28, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 32, 26, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 33, 25, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 36, 24, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 38, 22, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 42, 20, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 49, 16, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 58, 12, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 63, 10, "BCH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 64, 9, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 81, 3, "Ham" ) then GUAVA_TEMP_VAR := [ HammingCode, [ 4, 4 ]]; fi; if YouWantThisCode( 86, 9, 54, "Da" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 86, 11, 52, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 86, 28, 29, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 86, 31, 27, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 86, 37, 23, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 86, 40, 21, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 86, 51, 15, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 86, 53, 14, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 87, 19, 41, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 87, 24, 33, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 87, 27, 31, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 87, 33, 26, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 87, 43, 20, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 87, 48, 17, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 87, 56, 13, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 88, 5, 64, "Bou" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 88, 20, 38, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 88, 23, 35, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 88, 26, 32, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 88, 31, 28, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 88, 40, 22, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 88, 47, 18, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 89, 19, 42, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 89, 21, 37, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 89, 25, 33, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 89, 29, 30, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 89, 30, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 89, 33, 27, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 89, 36, 25, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 89, 46, 19, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 89, 52, 16, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 89, 63, 11, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 6, 64, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 8, 58, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 9, 56, "BZx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 13, 50, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 16, 46, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 18, 44, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 23, 36, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 24, 35, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 27, 32, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 39, 24, "Tol" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 40, 23, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 67, 10, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 73, 8, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 91, 7, 61, "Gu" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 91, 11, 54, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 91, 15, 48, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 91, 20, 40, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 91, 22, 37, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 91, 29, 31, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 91, 33, 28, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 91, 36, 26, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 91, 44, 21, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 91, 46, 20, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 92, 21, 39, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 92, 24, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 92, 25, 35, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 92, 27, 33, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 92, 31, 30, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 93, 16, 48, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 93, 18, 46, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 93, 19, 44, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 93, 22, 38, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 93, 23, 37, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 93, 29, 32, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 93, 33, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 93, 36, 27, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 93, 39, 25, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 93, 44, 22, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 94, 5, 68, "Bou" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 94, 11, 56, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 94, 13, 53, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 94, 25, 36, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 94, 26, 35, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 94, 27, 34, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 94, 31, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 94, 54, 17, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 94, 58, 15, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 94, 70, 10, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 95, 8, 62, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 95, 9, 59, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 95, 10, 58, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 95, 12, 54, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 95, 14, 52, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 95, 15, 51, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 95, 29, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 95, 36, 28, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 95, 39, 26, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 95, 51, 19, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 95, 53, 18, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 95, 73, 9, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 7, 64, "GB4" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 17, 48, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 19, 45, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 21, 42, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 22, 40, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 23, 39, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 24, 38, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 26, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 31, 32, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 34, 30, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 44, 24, "Tol" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 50, 20, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 58, 16, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 62, 14, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 97, 6, 68, "Koh" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 97, 28, 35, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 97, 29, 34, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 97, 36, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 97, 39, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 97, 49, 21, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 98, 8, 64, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 98, 15, 52, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 98, 18, 48, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 98, 34, 31, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 98, 43, 25, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 98, 66, 13, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 99, 5, 72, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 99, 17, 50, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 99, 24, 40, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 99, 32, 33, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 99, 39, 28, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 99, 49, 22, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 100, 11, 60, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 100, 19, 48, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 100, 21, 45, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 100, 23, 42, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 100, 26, 39, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 100, 29, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 100, 30, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 100, 34, 32, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 100, 37, 30, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 100, 43, 26, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 101, 17, 51, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 101, 25, 40, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 101, 27, 38, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 101, 28, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 101, 32, 34, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 101, 39, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 102, 6, 72, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 102, 10, 64, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 102, 12, 60, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 102, 15, 54, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 102, 16, 53, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 102, 18, 50, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 102, 20, 48, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 102, 22, 44, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 102, 34, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 102, 37, 31, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 102, 43, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 102, 49, 24, "Tol" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 102, 57, 19, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 102, 59, 18, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 102, 61, 17, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 102, 74, 12, "Tol" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 103, 24, 42, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 103, 26, 40, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 103, 31, 36, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 103, 32, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 103, 47, 25, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 103, 56, 20, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 7, 71, "Gu" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 28, 39, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 29, 38, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 37, 32, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 40, 30, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 43, 28, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 50, 24, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 55, 21, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 65, 16, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 67, 15, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 75, 12, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 105, 8, 68, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 105, 15, 56, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 105, 18, 52, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 105, 21, 48, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 105, 24, 43, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 105, 25, 42, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 105, 26, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 105, 31, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 105, 35, 34, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 105, 47, 26, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 105, 54, 22, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 106, 28, 40, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 106, 33, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 106, 37, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 106, 40, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 106, 43, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 106, 53, 23, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 106, 94, 6, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 107, 17, 54, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 107, 19, 51, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 107, 30, 39, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 107, 31, 38, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 107, 35, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 107, 47, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 107, 72, 14, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 6, 76, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 24, 45, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 25, 44, "DNX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 26, 43, "DNX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 27, 42, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 28, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 33, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 40, 32, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 43, 30, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 53, 24, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 90, 8, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 109, 23, 49, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 109, 30, 40, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 109, 38, 34, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 109, 47, 28, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 109, 52, 25, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 110, 8, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 110, 15, 60, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 110, 17, 56, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 110, 20, 51, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 110, 24, 46, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 110, 25, 45, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 110, 26, 44, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 110, 27, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 110, 32, 39, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 110, 36, 36, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 110, 40, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 110, 43, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 110, 62, 20, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 110, 64, 19, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 110, 77, 13, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 111, 29, 42, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 111, 30, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 111, 34, 38, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 111, 38, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 111, 47, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 111, 52, 26, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 111, 61, 21, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 111, 67, 18, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 111, 69, 17, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 111, 83, 11, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 111, 92, 8, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 7, 76, "DG5" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 19, 55, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 21, 51, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 32, 40, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 36, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 43, 32, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 51, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 60, 22, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 89, 9, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 113, 14, 68, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 113, 27, 45, "DNX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 113, 28, 44, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 113, 29, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 113, 34, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 113, 38, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 113, 41, 34, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 113, 47, 30, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 113, 59, 23, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 113, 73, 16, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 113, 99, 7, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 114, 9, 74, "Bou" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 114, 31, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 114, 32, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 114, 36, 38, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 114, 51, 28, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 114, 58, 24, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 114, 105, 5, "Bou" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 5, 84, "Gu3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 8, 76, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 10, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 15, 64, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 17, 60, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 22, 52, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 26, 48, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 27, 46, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 28, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 41, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 44, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 47, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 57, 25, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 77, 15, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 116, 21, 54, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 116, 23, 51, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 116, 25, 49, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 116, 30, 44, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 116, 31, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 116, 35, 40, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 116, 39, 37, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 116, 51, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 117, 6, 84, "Bou" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 117, 7, 80, "Gu" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 117, 24, 50, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 117, 33, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 117, 37, 39, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 117, 41, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 117, 44, 34, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 117, 47, 32, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 117, 57, 26, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 4, 88, "Bel" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 19, 60, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 30, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 35, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 39, 38, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 51, 30, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 56, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 69, 20, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 102, 7, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 119, 20, 59, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 119, 26, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 119, 32, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 119, 33, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 119, 37, 40, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 119, 44, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 119, 47, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 119, 66, 22, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 119, 68, 21, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 119, 72, 19, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 119, 83, 14, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 119, 99, 8, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 5, 88, "GB4" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 8, 80, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 10, 76, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 13, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 15, 68, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 17, 64, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 21, 57, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 22, 56, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 23, 54, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 24, 52, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 25, 51, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 29, 48, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 35, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 42, 37, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 51, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 56, 28, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 65, 23, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 75, 18, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 90, 12, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 30, 47, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 31, 46, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 32, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 40, 39, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 44, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 47, 34, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 55, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 64, 24, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 78, 17, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 122, 6, 88, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 122, 26, 51, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 122, 27, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 122, 28, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 122, 34, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 122, 38, 41, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 122, 42, 38, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 122, 51, 32, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 122, 63, 25, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 123, 4, 92, "Bel" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 123, 30, 48, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 123, 31, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 123, 36, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 123, 40, 40, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 123, 55, 30, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 123, 62, 26, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 124, 23, 57, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 124, 25, 54, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 124, 33, 46, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 124, 34, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 124, 38, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 124, 42, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 124, 45, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 124, 48, 35, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 124, 51, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 124, 61, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 124, 83, 16, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 124, 90, 13, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 8, 84, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 10, 80, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 15, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 17, 68, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 19, 64, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 22, 60, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 24, 56, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 26, 53, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 27, 52, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 28, 51, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 29, 50, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 30, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 36, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 40, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 55, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 94, 12, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 5, 92, "GB4" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 7, 88, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 9, 82, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 11, 78, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 13, 76, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 16, 69, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 18, 66, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 32, 48, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 33, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 38, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 45, 38, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 48, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 51, 34, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 61, 28, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 120, 4, "Gl" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 127, 28, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 127, 29, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 127, 35, 46, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 127, 43, 40, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 127, 55, 32, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 127, 60, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 127, 88, 15, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 21, 63, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 23, 60, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 25, 57, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 27, 54, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 31, 50, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 32, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 37, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 41, 42, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 45, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 48, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 51, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 129, 13, 77, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 129, 34, 48, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 129, 35, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 129, 39, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 129, 43, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 129, 55, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 129, 60, 30, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 12, 80, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 14, 76, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 15, 74, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 16, 72, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 17, 70, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 19, 68, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 28, 54, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 29, 53, "DNX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 30, 52, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 31, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 37, 46, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 41, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 48, 38, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 51, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 59, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 66, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 68, 26, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 70, 25, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 72, 24, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 74, 23, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 76, 22, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 78, 21, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 80, 20, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 82, 19, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 84, 18, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 131, 5, 96, "BDK" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 131, 33, 50, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 131, 34, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 131, 39, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 131, 43, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 131, 46, 40, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 131, 55, 34, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 7, 92, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 13, 79, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 17, 71, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 18, 70, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 21, 66, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 23, 63, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 25, 60, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 27, 57, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 28, 55, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 29, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 30, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 36, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 41, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 48, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 51, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 59, 32, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 66, 28, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 88, 17, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 133, 9, 88, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 133, 26, 58, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 133, 32, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 133, 33, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 133, 38, 47, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 133, 46, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 133, 55, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 133, 65, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 134, 6, 96, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 134, 15, 77, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 134, 24, 61, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 134, 35, 50, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 134, 36, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 134, 40, 46, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 134, 44, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 134, 59, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 7, 94, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 13, 80, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 17, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 22, 64, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 27, 58, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 28, 57, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 29, 56, "DNX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 30, 55, "DNX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 31, 54, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 32, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 38, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 42, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 46, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 49, 40, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 52, 38, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 55, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 65, 30, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 10, 88, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 11, 84, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 26, 60, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 34, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 35, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 40, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 44, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 59, 34, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 64, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 75, 25, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 77, 24, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 79, 23, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 81, 22, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 94, 16, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 104, 12, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 137, 5, 100, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 137, 28, 58, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 137, 29, 57, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 137, 30, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 137, 31, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 137, 37, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 137, 42, 46, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 137, 49, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 137, 52, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 137, 55, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 137, 72, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 137, 74, 26, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 137, 84, 21, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 9, 90, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 18, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 21, 68, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 22, 66, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 24, 64, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 27, 60, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 33, 54, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 34, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 39, 49, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 40, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 47, 43, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 59, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 64, 32, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 71, 28, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 87, 20, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 139, 7, 96, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 139, 11, 86, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 139, 25, 63, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 139, 29, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 139, 36, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 139, 37, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 139, 45, 45, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 139, 49, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 139, 52, 40, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 139, 55, 38, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 139, 63, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 139, 70, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 139, 90, 19, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 6, 100, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 13, 84, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 15, 80, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 17, 76, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 19, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 21, 69, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 23, 66, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 26, 62, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 28, 60, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 31, 57, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 32, 56, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 33, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 39, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 43, 47, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 47, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 59, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 105, 13, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 141, 9, 92, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 141, 25, 64, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 141, 35, 54, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 141, 36, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 141, 41, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 141, 45, 46, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 141, 52, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 141, 55, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 141, 63, 34, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 141, 70, 30, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 141, 94, 18, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 141, 101, 15, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 5, 104, "Bo1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 11, 87, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 29, 60, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 30, 59, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 31, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 32, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 38, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 39, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 43, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 47, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 50, 43, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 59, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 69, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 143, 34, 56, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 143, 35, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 143, 41, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 143, 45, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 143, 52, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 143, 55, 40, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 143, 63, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 143, 81, 25, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 7, 100, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 21, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 23, 69, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 24, 68, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 25, 66, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 27, 64, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 29, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 30, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 31, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 37, 54, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 38, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 43, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 50, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 59, 38, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 69, 32, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 78, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 80, 26, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 84, 24, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 86, 23, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 88, 22, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 99, 17, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 6, 104, "Koh" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 10, 92, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 15, 84, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 17, 80, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 19, 76, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 26, 65, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 28, 63, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 33, 58, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 34, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 40, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 48, 46, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 63, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 68, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 77, 28, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 135, 5, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 11, 90, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 36, 56, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 37, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 42, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 46, 48, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 50, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 53, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 56, 41, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 59, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 76, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 92, 21, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 147, 5, 108, "Bo1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 147, 13, 89, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 147, 28, 64, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 147, 29, 63, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 147, 30, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 147, 31, 61, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 147, 32, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 147, 33, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 147, 39, 54, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 147, 40, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 147, 44, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 147, 48, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 147, 63, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 147, 68, 34, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 147, 75, 30, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 147, 95, 20, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 9, 98, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 20, 76, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 23, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 25, 69, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 35, 58, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 36, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 42, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 46, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 53, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 56, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 59, 40, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 67, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 74, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 149, 31, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 149, 32, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 149, 38, 56, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 149, 39, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 149, 44, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 149, 48, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 149, 51, 46, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 149, 63, 38, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 149, 106, 16, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 7, 104, "DG5" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 10, 96, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 12, 92, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 15, 88, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 17, 84, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 19, 80, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 20, 77, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 21, 76, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 24, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 27, 68, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 28, 66, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 30, 64, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 34, 60, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 35, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 41, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 46, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 53, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 56, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 59, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 67, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 74, 32, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 100, 19, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 151, 37, 58, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 151, 38, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 151, 43, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 151, 51, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 151, 63, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 151, 73, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 151, 88, 25, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 5, 112, "Bo1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 9, 101, "Ma" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 13, 92, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 23, 75, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 25, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 27, 69, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 29, 66, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 31, 64, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 32, 63, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 33, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 34, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 40, 56, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 41, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 45, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 49, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 56, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 59, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 67, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 83, 28, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 85, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 87, 26, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 91, 24, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 28, 68, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 36, 60, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 37, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 43, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 47, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 51, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 54, 46, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 63, 40, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 73, 34, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 82, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 94, 23, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 105, 18, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 31, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 32, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 33, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 39, 58, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 40, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 45, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 49, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 56, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 59, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 67, 38, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 72, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 81, 30, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 97, 22, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 8, 104, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 9, 103, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 10, 100, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 12, 96, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 13, 94, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 15, 92, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 17, 88, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 19, 84, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 21, 80, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 28, 69, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 35, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 36, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 42, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 47, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 54, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 63, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 80, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 24, 76, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 25, 73, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 27, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 30, 68, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 38, 60, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 39, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 44, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 52, 49, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 67, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 72, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 79, 32, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 101, 21, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 31, 67, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 33, 65, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 34, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 35, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 41, 58, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 42, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 46, 54, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 50, 51, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 54, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 57, 46, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 60, 44, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 63, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 71, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 78, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 158, 7, 110, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 158, 37, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 158, 38, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 158, 44, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 158, 48, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 158, 52, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 158, 67, 40, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 158, 105, 20, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 158, 112, 17, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 31, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 32, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 33, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 34, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 40, 60, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 41, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 46, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 50, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 57, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 60, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 63, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 71, 38, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 78, 34, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 10, 104, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 12, 100, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 15, 96, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 17, 92, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 19, 88, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 21, 84, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 23, 80, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 29, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 36, 64, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 37, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 43, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 44, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 48, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 52, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 55, 49, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 67, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 77, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 88, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 90, 28, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 92, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 94, 26, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 96, 25, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 7, 112, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 9, 108, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 13, 98, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 39, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 40, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 46, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 50, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 57, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 60, 46, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 63, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 71, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 87, 30, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 99, 24, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 5, 120, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 6, 116, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 24, 80, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 27, 76, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 30, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 31, 70, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 33, 68, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 34, 67, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 35, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 36, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 42, 60, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 43, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 55, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 67, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 77, 36, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 86, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 102, 23, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 163, 38, 64, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 163, 39, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 163, 45, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 163, 49, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 163, 53, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 163, 60, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 163, 63, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 163, 71, 40, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 163, 76, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 163, 85, 32, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 32, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 33, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 34, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 35, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 41, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 42, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 47, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 51, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 55, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 58, 49, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 67, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 84, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 106, 22, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 120, 16, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 6, 118, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 10, 108, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 12, 104, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 17, 96, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 19, 92, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 21, 88, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 23, 84, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 25, 80, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 28, 76, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 31, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 37, 66, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 38, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 44, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 45, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 49, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 53, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 60, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 63, 46, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 71, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 76, 38, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 83, 34, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 166, 15, 100, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 166, 40, 64, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 166, 41, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 166, 47, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 166, 51, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 166, 58, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 166, 67, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 166, 75, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 166, 82, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 31, 73, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 35, 69, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 36, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 37, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 43, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 44, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 49, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 53, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 56, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 71, 42, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 111, 21, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 22, 85, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 24, 84, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 25, 81, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 27, 80, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 28, 77, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 30, 76, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 33, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 39, 66, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 40, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 46, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 58, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 61, 49, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 64, 47, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 67, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 75, 40, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 82, 36, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 93, 30, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 95, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 97, 28, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 99, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 7, 118, "DG5" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 32, 73, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 35, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 36, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 42, 64, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 43, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 48, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 52, 56, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 56, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 71, 43, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 81, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 92, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 102, 26, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 104, 25, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 6, 122, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 10, 112, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 12, 108, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 13, 104, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 14, 102, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 16, 100, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 17, 98, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 31, 75, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 34, 72, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 38, 68, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 39, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 45, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 46, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 50, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 54, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 61, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 64, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 67, 46, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 75, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 91, 32, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 116, 20, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 9, 117, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 18, 96, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 41, 66, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 42, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 48, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 52, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 56, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 59, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 71, 44, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 81, 38, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 88, 34, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 90, 33, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 108, 24, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 5, 128, "Liz" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 7, 119, "Ayd" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 35, 72, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 36, 71, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 37, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 38, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 44, 64, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 45, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 50, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 54, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 61, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 64, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 67, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 75, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 80, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 125, 17, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 40, 68, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 41, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 47, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 52, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 59, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 71, 45, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 88, 35, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 112, 23, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 21, 92, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 24, 88, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 27, 84, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 30, 80, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 33, 76, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 35, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 36, 72, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 37, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 43, 66, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 44, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 49, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 57, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 64, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 67, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 75, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 80, 40, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 87, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 6, 126, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 7, 121, "DG5" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 10, 114, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 14, 106, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 15, 104, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 17, 100, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 19, 96, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 31, 78, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 34, 75, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 39, 70, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 40, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 46, 64, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 47, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 51, 60, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 55, 57, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 59, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 62, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 71, 46, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 79, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 86, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 11, 112, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 13, 108, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 16, 103, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 25, 87, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 42, 68, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 43, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 49, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 53, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 57, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 64, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 67, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 75, 44, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 98, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 100, 30, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 102, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 104, 28, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 9, 119, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 34, 76, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 35, 75, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 37, 73, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 38, 72, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 39, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 45, 66, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 46, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 51, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 55, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 62, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 71, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 79, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 86, 38, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 97, 32, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 107, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 14, 108, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 41, 70, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 42, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 48, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 53, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 57, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 60, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 67, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 75, 45, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 85, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 94, 34, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 96, 33, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 110, 26, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 5, 132, "Koh" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 9, 120, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 34, 77, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 37, 74, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 38, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 44, 68, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 45, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 50, 63, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 55, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 62, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 65, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 71, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 79, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 93, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 113, 25, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 122, 21, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 6, 130, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 10, 118, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 15, 108, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 16, 106, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 17, 104, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 19, 100, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 21, 96, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 22, 93, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 24, 92, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 25, 90, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 27, 88, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 30, 84, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 31, 81, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 33, 80, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 36, 76, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 40, 72, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 41, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 47, 66, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 48, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 52, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 60, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 75, 46, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 85, 40, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 92, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 9, 121, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 35, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 43, 70, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 44, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 50, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 54, 61, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 58, 58, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 65, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 68, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 71, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 79, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 84, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 91, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 117, 24, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 5, 134, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 12, 114, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 13, 112, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 37, 76, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 38, 75, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 39, 74, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 40, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 46, 68, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 47, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 52, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 56, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 60, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 63, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 75, 47, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 7, 128, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 9, 122, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 10, 120, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 15, 110, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 34, 80, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 42, 72, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 43, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 49, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 50, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 54, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 58, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 65, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 68, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 71, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 79, 45, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 84, 42, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 91, 38, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 13, 113, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 16, 109, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 37, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 38, 76, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 39, 75, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 45, 70, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 46, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 52, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 56, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 63, 56, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 75, 48, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 83, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 90, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 105, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 107, 30, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 122, 23, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 6, 134, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 12, 116, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 17, 108, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 19, 104, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 21, 100, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 41, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 42, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 48, 68, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 49, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 54, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 58, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 61, 58, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 68, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 71, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 79, 46, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 100, 34, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 102, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 104, 32, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 110, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 112, 28, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 9, 124, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 11, 120, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 15, 112, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 24, 96, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 27, 92, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 30, 88, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 31, 85, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 33, 84, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 36, 80, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 44, 72, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 45, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 51, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 63, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 66, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 75, 49, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 83, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 90, 40, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 99, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 115, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 175, 5, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 187, 8, 128, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 187, 37, 79, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 187, 39, 77, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 187, 40, 76, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 187, 41, 75, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 187, 47, 70, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 187, 48, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 187, 53, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 187, 57, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 187, 61, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 187, 68, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 187, 71, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 187, 79, 47, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 187, 89, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 187, 98, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 13, 116, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 16, 112, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 34, 83, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 43, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 44, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 50, 68, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 51, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 55, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 59, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 66, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 75, 50, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 83, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 88, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 97, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 119, 26, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 5, 140, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 37, 80, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 38, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 39, 78, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 40, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 46, 72, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 47, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 53, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 57, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 61, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 64, 58, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 71, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 79, 48, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 96, 38, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 12, 120, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 14, 116, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 17, 112, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 19, 108, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 21, 104, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 23, 100, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 42, 76, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 43, 75, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 49, 70, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 50, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 55, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 59, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 66, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 69, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 75, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 83, 46, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 88, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 95, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 123, 25, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 6, 138, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 45, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 46, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 52, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 57, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 64, 59, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 79, 49, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 7, 136, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 13, 119, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 16, 115, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 24, 100, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 27, 96, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 30, 92, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 33, 88, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 36, 84, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 37, 82, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 39, 80, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 40, 79, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 41, 78, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 42, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 48, 72, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 49, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 54, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 62, 61, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 69, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 72, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 75, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 83, 47, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 88, 44, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 95, 40, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 127, 24, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 34, 86, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 44, 76, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 45, 75, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 51, 70, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 52, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 56, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 60, 63, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 64, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 67, 58, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 79, 50, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 87, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 94, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 105, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 107, 34, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 109, 33, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 111, 32, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 113, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 115, 30, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 5, 144, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 38, 82, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 39, 81, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 40, 80, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 41, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 47, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 48, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 54, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 58, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 62, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 69, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 72, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 75, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 83, 48, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 93, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 104, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 118, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 6, 141, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 7, 137, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 12, 124, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 16, 117, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 18, 114, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 37, 84, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 43, 78, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 44, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 50, 72, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 51, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 56, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 60, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 64, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 67, 59, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 79, 51, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 87, 46, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 103, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 121, 28, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 13, 122, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 15, 120, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 46, 76, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 47, 75, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 53, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 58, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 62, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 72, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 75, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 83, 49, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 93, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 102, 38, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 124, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 10, 132, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 37, 85, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 41, 81, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 42, 80, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 43, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 49, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 50, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 55, 69, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 60, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 67, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 70, 58, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 79, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 87, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 92, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 101, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 8, 134, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 21, 108, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 24, 104, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 27, 100, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 30, 96, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 33, 92, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 34, 89, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 36, 88, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 39, 84, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 45, 78, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 46, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 52, 72, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 53, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 57, 68, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 65, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 72, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 75, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 83, 50, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 100, 40, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 128, 26, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 7, 140, "Koh" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 11, 128, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 12, 126, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 14, 123, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 38, 85, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 41, 82, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 42, 81, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 48, 76, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 49, 75, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 55, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 59, 67, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 63, 64, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 67, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 70, 59, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 79, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 87, 48, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 92, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 99, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 5, 148, "Bo1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 13, 125, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 16, 121, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 17, 116, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 19, 112, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 37, 87, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 40, 84, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 44, 80, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 45, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 51, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 52, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 57, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 61, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 65, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 75, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 83, 51, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 98, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 6, 145, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 7, 141, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 47, 78, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 48, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 54, 72, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 55, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 59, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 63, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 70, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 73, 58, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 79, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 82, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 87, 49, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 92, 46, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 110, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 112, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 114, 34, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 116, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 118, 32, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 120, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 133, 25, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 11, 130, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 15, 124, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 41, 84, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 42, 83, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 43, 82, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 44, 81, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 50, 76, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 51, 75, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 57, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 61, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 68, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 91, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 98, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 109, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 123, 30, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 12, 129, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 14, 126, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 46, 80, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 47, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 48, 78, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 53, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 54, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 59, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 63, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 66, 64, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 70, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 73, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 76, 57, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 79, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 82, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 87, 50, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 97, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 108, 38, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 126, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 21, 112, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 24, 108, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 27, 104, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 30, 100, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 33, 96, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 36, 92, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 39, 88, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 40, 86, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 41, 85, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 42, 84, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 43, 83, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 50, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 56, 72, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 68, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 91, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 107, 39, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 138, 24, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 5, 152, "Bo1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 6, 148, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 7, 144, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 10, 134, "X6a" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 13, 129, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 16, 125, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 17, 120, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 19, 116, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 37, 90, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 45, 82, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 46, 81, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 47, 80, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 52, 76, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 53, 75, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 58, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 62, 68, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 66, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 73, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 76, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 79, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 87, 51, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 97, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 106, 40, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 130, 28, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 11, 133, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 41, 86, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 49, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 50, 78, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 55, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 56, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 60, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 64, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 68, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 71, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 83, 54, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 86, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 91, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 96, 46, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 105, 41, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 12, 132, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 15, 128, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 40, 88, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 43, 85, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 44, 84, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 45, 83, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 52, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 58, 72, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 62, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 66, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 73, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 76, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 79, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 104, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 134, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 14, 130, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 47, 82, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 48, 81, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 49, 80, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 54, 76, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 55, 75, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 60, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 64, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 71, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 83, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 86, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 91, 50, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 96, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 103, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 40, 89, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 43, 86, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 44, 85, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 51, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 52, 78, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 57, 74, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 62, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 69, 65, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 76, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 79, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 102, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 115, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 117, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 119, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 121, 34, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 123, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 6, 152, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 7, 148, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 9, 144, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 10, 138, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 11, 136, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 13, 133, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 16, 129, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 17, 124, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 18, 121, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 19, 120, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 21, 116, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 24, 112, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 27, 108, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 30, 104, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 33, 100, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 36, 96, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 37, 93, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 39, 92, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 42, 88, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 46, 84, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 47, 83, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 48, 82, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 54, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 59, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 67, 67, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 71, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 74, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 83, 56, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 86, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 91, 51, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 96, 48, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 114, 38, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 126, 32, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 128, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 5, 156, "Bou" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 12, 135, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 41, 89, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 50, 81, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 51, 80, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 56, 76, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 57, 75, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 61, 72, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 65, 69, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 69, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 76, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 79, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 90, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 95, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 102, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 113, 39, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 15, 132, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 43, 88, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 44, 87, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 45, 86, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 46, 85, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 53, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 54, 78, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 59, 74, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 63, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 67, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 74, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 83, 57, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 86, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 101, 46, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 110, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 112, 40, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 132, 30, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 40, 92, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 48, 84, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 49, 83, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 50, 82, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 56, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 61, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 65, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 69, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 72, 65, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 90, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 95, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 109, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 135, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 144, 25, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 7, 151, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 11, 139, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 13, 136, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 43, 89, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 44, 88, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 45, 87, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 52, 81, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 53, 80, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 58, 76, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 63, 72, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 67, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 74, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 77, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 80, 60, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 83, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 86, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 101, 47, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 108, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 8, 147, "Ayd" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 16, 133, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 17, 128, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 19, 124, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 21, 120, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 47, 86, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 48, 85, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 49, 84, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 55, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 56, 78, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 60, 75, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 65, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 72, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 90, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 95, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 100, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 139, 28, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 5, 160, "Bo1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 9, 145, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 10, 143, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 12, 139, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 24, 116, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 27, 112, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 30, 108, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 33, 104, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 36, 100, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 39, 96, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 42, 92, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 51, 83, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 52, 82, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 58, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 62, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 70, 68, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 77, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 80, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 83, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 86, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 94, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 108, 44, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 15, 136, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 43, 91, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 45, 89, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 46, 88, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 47, 87, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 54, 81, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 55, 80, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 60, 76, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 64, 73, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 68, 70, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 72, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 75, 65, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 90, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 100, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 107, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 122, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 124, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 126, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 11, 142, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 14, 138, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 40, 95, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 49, 86, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 50, 85, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 51, 84, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 57, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 62, 75, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 66, 72, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 70, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 77, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 80, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 83, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 86, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 94, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 106, 46, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 119, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 121, 38, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 129, 34, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 131, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 144, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 5, 162, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 7, 155, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 13, 140, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 43, 92, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 44, 91, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 45, 90, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 46, 89, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 53, 83, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 54, 82, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 59, 78, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 64, 74, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 68, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 75, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 90, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 100, 50, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 116, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 118, 40, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 134, 32, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 6, 160, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 8, 150, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 9, 148, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 16, 137, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 17, 132, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 19, 128, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 21, 124, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 23, 120, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 48, 88, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 49, 87, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 50, 86, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 56, 81, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 57, 80, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 61, 77, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 62, 76, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 66, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 70, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 73, 68, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 80, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 83, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 94, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 99, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 106, 47, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 115, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 137, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 10, 147, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 12, 143, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 52, 85, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 53, 84, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 59, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 68, 72, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 75, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 78, 65, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 87, 59, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 90, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 105, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 114, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 15, 140, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 24, 120, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 27, 116, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 30, 112, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 33, 108, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 36, 104, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 39, 100, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 42, 96, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 43, 94, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 45, 92, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 46, 91, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 47, 90, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 48, 89, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 55, 83, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 56, 82, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 61, 78, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 65, 75, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 73, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 80, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 83, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 94, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 99, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 113, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 141, 30, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 9, 150, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 14, 142, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 40, 98, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 50, 88, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 51, 87, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 52, 86, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 58, 81, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 63, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 67, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 71, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 78, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 87, 60, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 90, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 105, 49, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 112, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 8, 153, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 11, 147, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 44, 94, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 45, 93, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 46, 92, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 47, 91, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 54, 85, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 55, 84, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 60, 80, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 61, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 65, 76, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 69, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 73, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 76, 68, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 94, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 99, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 104, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 111, 46, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 145, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 13, 145, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 19, 132, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 21, 128, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 23, 124, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 25, 120, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 43, 96, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 49, 90, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 50, 89, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 51, 88, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 57, 83, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 58, 82, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 63, 78, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 67, 75, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 71, 72, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 78, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 81, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 84, 63, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 87, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 90, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 98, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 127, 38, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 129, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 131, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 5, 168, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 6, 163, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 7, 161, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 16, 142, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 17, 136, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 53, 87, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 54, 86, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 60, 81, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 65, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 69, 74, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 76, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 94, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 104, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 111, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 122, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 124, 40, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 126, 39, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 134, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 149, 28, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 9, 153, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 10, 152, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 12, 148, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 43, 97, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 47, 93, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 48, 92, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 49, 91, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 50, 90, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 56, 85, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 57, 84, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 62, 80, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 67, 76, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 74, 71, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 81, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 84, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 87, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 90, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 98, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 103, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 110, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 121, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 137, 34, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 139, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 8, 156, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 11, 150, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 15, 145, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 24, 124, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 27, 120, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 30, 116, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 33, 112, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 36, 108, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 39, 104, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 40, 101, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 42, 100, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 45, 96, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 52, 89, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 53, 88, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 59, 83, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 60, 82, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 64, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 72, 73, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 76, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 79, 68, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 94, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 120, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 44, 97, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 47, 94, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 48, 93, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 55, 87, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 56, 86, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 62, 81, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 66, 78, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 70, 75, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 74, 72, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 81, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 84, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 87, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 90, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 98, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 103, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 110, 49, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 119, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 143, 32, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 8, 157, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 14, 148, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 43, 99, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 46, 96, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 50, 92, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 51, 91, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 52, 90, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 58, 85, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 59, 84, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 64, 80, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 68, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 72, 74, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 79, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 94, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 109, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 118, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 146, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 54, 89, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 55, 88, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 61, 83, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 66, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 70, 76, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 74, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 77, 71, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 84, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 87, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 90, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 98, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 103, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 117, 46, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 6, 168, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 47, 96, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 48, 95, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 49, 94, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 50, 93, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 51, 92, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 57, 87, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 58, 86, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 63, 82, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 68, 78, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 72, 75, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 79, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 82, 68, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 94, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 109, 51, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 116, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 150, 30, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 12, 153, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 53, 91, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 54, 90, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 60, 85, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 61, 84, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 65, 81, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 70, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 77, 72, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 84, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 87, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 98, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 103, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 108, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 115, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 134, 38, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 7, 168, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 11, 155, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 21, 132, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 24, 128, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 27, 124, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 30, 120, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 33, 116, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 36, 112, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 39, 108, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 42, 104, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 45, 100, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 46, 98, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 47, 97, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 48, 96, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 49, 95, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 56, 89, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 57, 88, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 63, 83, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 67, 80, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 75, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 82, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 91, 63, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 94, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 102, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 127, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 129, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 131, 40, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 133, 39, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 137, 37, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 139, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 17, 140, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 19, 136, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 43, 102, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 51, 94, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 52, 93, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 53, 92, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 65, 82, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 69, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 73, 76, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 77, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 80, 71, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 87, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 98, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 108, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 115, 49, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 126, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 142, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 155, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 5, 176, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 47, 98, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 55, 91, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 56, 90, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 67, 81, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 71, 78, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 75, 75, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 82, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 85, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 91, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 94, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 102, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 107, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 114, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 125, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 145, 34, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 6, 172, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 7, 170, "Ma" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 46, 100, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 49, 97, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 50, 96, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 51, 95, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 52, 94, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 58, 89, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 59, 88, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 69, 80, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 73, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 80, 72, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 98, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 124, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 148, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 54, 93, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 55, 92, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 71, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 75, 76, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 78, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 85, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 88, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 91, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 94, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 102, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 107, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 114, 51, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 123, 46, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 160, 28, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 46, 101, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 49, 98, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 50, 97, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 57, 91, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 58, 90, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 73, 78, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 80, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 83, 71, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 98, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 113, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 122, 47, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 152, 32, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 10, 164, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 17, 144, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 19, 140, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 21, 136, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 24, 132, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 27, 128, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 30, 124, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 33, 120, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 36, 116, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 39, 112, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 42, 108, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 43, 105, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 45, 104, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 48, 100, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 52, 96, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 53, 95, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 54, 94, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 60, 89, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 61, 88, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 78, 75, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 85, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 88, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 91, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 94, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 102, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 107, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 121, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 8, 166, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 47, 101, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 56, 93, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 57, 92, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 76, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 80, 74, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 83, 72, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 98, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 113, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 120, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 156, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 5, 180, "Bo1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 49, 100, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 50, 99, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 51, 98, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 52, 97, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 53, 96, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 59, 91, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 60, 90, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 78, 76, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 88, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 91, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 94, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 102, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 107, 57, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 112, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 119, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 132, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 134, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 136, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 138, 40, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 140, 39, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 142, 38, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 144, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 46, 104, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 55, 95, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 56, 94, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 62, 89, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 83, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 86, 71, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 98, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 106, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 131, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 147, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 244, 10, 166, "GW1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 244, 49, 101, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 244, 50, 100, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 244, 51, 99, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 244, 58, 93, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 244, 59, 92, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 244, 81, 75, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 244, 88, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 244, 91, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 244, 102, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 244, 112, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 244, 119, 51, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 244, 130, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 244, 150, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 245, 19, 144, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 245, 21, 140, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 245, 53, 98, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 245, 54, 97, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 245, 55, 96, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 245, 83, 74, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 245, 86, 72, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 245, 95, 66, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 245, 98, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 245, 106, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 245, 111, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 245, 118, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 245, 129, 46, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 246, 17, 148, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 246, 24, 136, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 246, 27, 132, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 246, 30, 128, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 246, 33, 124, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 246, 36, 120, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 246, 39, 116, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 246, 42, 112, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 246, 45, 108, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 246, 48, 104, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 246, 57, 95, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 246, 58, 94, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 246, 91, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 246, 102, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 246, 126, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 246, 128, 47, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 246, 154, 34, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 247, 5, 184, "Bo1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 247, 49, 103, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 247, 51, 101, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 247, 52, 100, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 247, 53, 99, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 247, 54, 98, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 247, 60, 93, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 247, 61, 92, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 247, 86, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 247, 89, 71, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 247, 95, 67, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 247, 98, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 247, 106, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 247, 111, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 247, 118, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 247, 125, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 247, 157, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 247, 166, 29, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 248, 46, 107, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 248, 56, 97, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 248, 57, 96, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 248, 84, 75, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 248, 102, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 248, 117, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 249, 49, 104, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 249, 50, 103, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 249, 51, 102, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 249, 52, 101, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 249, 59, 95, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 249, 60, 94, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 249, 82, 77, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 249, 86, 74, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 249, 89, 72, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 249, 92, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 249, 95, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 249, 98, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 249, 106, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 249, 111, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 249, 125, 50, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 249, 161, 32, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 250, 6, 184, "Koh" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 250, 54, 100, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 250, 55, 99, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 250, 56, 98, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 250, 62, 93, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 250, 63, 92, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 250, 84, 76, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 250, 102, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 250, 110, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 250, 117, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 250, 124, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 250, 137, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 250, 139, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 250, 141, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 250, 143, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 250, 145, 40, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 250, 147, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 251, 17, 149, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 251, 58, 97, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 251, 59, 96, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 251, 89, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 251, 92, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 251, 95, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 251, 98, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 251, 106, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 251, 116, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 251, 123, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 251, 136, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 251, 152, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 18, 148, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 21, 144, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 22, 141, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 24, 140, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 27, 136, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 30, 132, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 33, 128, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 36, 124, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 39, 120, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 42, 116, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 45, 112, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 48, 108, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 49, 106, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 51, 104, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 61, 95, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 62, 94, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 82, 79, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 83, 78, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 84, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 87, 75, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 102, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 110, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 135, 46, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 166, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 253, 46, 110, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 253, 57, 99, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 253, 58, 98, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 253, 64, 93, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 253, 89, 74, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 253, 92, 72, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 253, 95, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 253, 98, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 253, 106, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 253, 116, 57, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 253, 123, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 253, 132, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 253, 134, 47, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 254, 43, 114, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 254, 47, 109, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 254, 50, 106, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 254, 51, 105, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 254, 60, 97, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 254, 61, 96, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 254, 83, 79, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 254, 87, 76, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 254, 102, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 254, 110, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 254, 115, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 254, 122, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 254, 131, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 255, 17, 152, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 255, 19, 148, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 255, 40, 118, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 255, 44, 113, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 255, 49, 108, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 255, 85, 78, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 255, 92, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 255, 95, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 255, 98, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 255, 106, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 255, 121, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 255, 130, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 5, 192, "Bel" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 7, 188, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 8, 179, "BCH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 11, 176, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 15, 172, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 16, 171, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 18, 150, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 20, 147, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 22, 144, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 24, 141, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 26, 138, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 28, 135, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 32, 129, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 35, 126, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 37, 123, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 41, 117, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 43, 115, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 46, 112, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 47, 110, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 48, 109, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 50, 107, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 51, 106, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 52, 105, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 54, 104, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 56, 103, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 57, 101, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 59, 99, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 60, 98, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 61, 97, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 62, 96, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 64, 95, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 65, 94, "BCH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 66, 93, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 68, 92, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 72, 91, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 76, 88, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 80, 87, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 81, 86, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 82, 82, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 83, 80, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 84, 79, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 87, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 88, 76, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 90, 75, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 91, 74, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 94, 72, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 97, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 100, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 102, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 103, 66, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 105, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 108, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 110, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 111, 61, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 113, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 115, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 116, 58, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 118, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 120, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 123, 54, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 125, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 127, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 129, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 132, 49, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 134, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 136, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 138, 46, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 140, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 142, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 144, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 146, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 148, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 150, 40, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 152, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 155, 38, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 156, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 159, 36, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 161, 35, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 163, 34, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 165, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 167, 32, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 169, 31, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 173, 30, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 174, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 177, 28, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 181, 27, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 185, 26, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 189, 24, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 193, 23, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 197, 22, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 201, 20, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 205, 19, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 207, 18, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 208, 17, "BCH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 211, 16, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 215, 15, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 219, 14, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 223, 12, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 227, 11, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 231, 10, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 232, 9, "BCH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 235, 8, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 239, 7, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 243, 6, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 251, 3, "Ham" ) then GUAVA_TEMP_VAR := false; fi; guava-3.6/tbl/codes2.g0000644017361200001450000302434011026723452014462 0ustar tabbottcrontab############################################################################# ## #A codes2.g GUAVA library Reinald Baart #A & Jasper Cramwinckel #A & Erik Roijackers ## #H @(#)$Id: codes2.g,v 1.1.1.1 1998/03/19 17:31:36 lea Exp $ ## #Y Copyright (C) 1994, Vakgroep Algemene Wiskunde, T.U. Delft, Nederland ## #H CJ, 17 May 2006 #H Updated lower- and upper-bounds of minimum distance for GF(2), #H GF(3) and GF(4) codes. (Brouwer's table as of 11 May 2006) #H #H $Log: codes2.g,v $ #H Revision 1.1.1.1 1998/03/19 17:31:36 lea #H Initial version of GUAVA for GAP4. Development still under way. #H Lea Ruscio 19/3/98 #H #H #H Revision 1.2 1997/01/20 15:34:01 werner #H Upgrade from Guava 1.2 to Guava 1.3 for GAP release 3.4.4. #H #H Revision 1.1 1994/11/10 14:29:23 rbaart #H Initial revision #H ## YouWantThisCode := function(n, k, d, ref) if IsList( GUAVA_TEMP_VAR ) and GUAVA_TEMP_VAR[1] = false then Add( GUAVA_TEMP_VAR, [n, k, d, ref] ); fi; return [n, k] = GUAVA_TEMP_VAR; end; if YouWantThisCode( 18, 9, 6, "QR" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[QRCode, [17, 2]]]]; fi; if YouWantThisCode( 23, 7, 9, "HP" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 23, 14, 5, "Wa" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 24, 12, 8, "QR" ) then GUAVA_TEMP_VAR := [ExtendedBinaryGolayCode, []]; fi; if YouWantThisCode( 27, 10, 9, "Pi2" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1], [0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,1,0,1], [0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,1,0], [0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,1], [0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,1,1,1,1,1,0,0], [0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,1,1,1,1,1,0], [0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,1,1,1,1,1], [0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1,0,0,1,0,1,1,1,1], [0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,1], [0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0] ], 2]]; fi; if YouWantThisCode( 27, 14, 7, "Ka" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,1,0,1], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,1,1,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,1,1], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,0,1], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,1,0,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,1,0] ], 2]]; fi; if YouWantThisCode( 32, 11, 12, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [31, 1, 11, 2]]]]; fi; if YouWantThisCode( 32, 13, 10, "Sh1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 32, 17, 8, "CS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 33, 8, 14, "HY2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 33, 23, 5, "Ch0" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 34, 12, 12, "Sh1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 35, 9, 14, "Pi" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 36, 8, 16, "DHM" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 36, 14, 11, "Mo" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 36, 16, 10, "Sh1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 37, 9, 15, "FB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 38, 22, 8, "Sh1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 39, 7, 17, "vT3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 39, 10, 15, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,0,1,1,0], [0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,1,0,0,0,1,1,1], [0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,1,1,0,1,1,1,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,0,1,1,0,0,1,0,1,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,0,1,1,0,1,0,0,1], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,0,1,1,0,1,0,1], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,1,0,0,0,1,1,0,1], [0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,0,0,0,1,1,1], [0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,1,0,1,0,0,0,0,1,1,0,1,1] ], 2]]; fi; if YouWantThisCode( 39, 12, 14, "BE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 42, 7, 19, "vT1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 42, 8, 18, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 42, 21, 10, "QR" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,1,0,1], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,1,1], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,1,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,0,1], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,1], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,1,1,1,1,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,1], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,0,1,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,1,0,1,1], ], 2]]; fi; if YouWantThisCode( 43, 15, 13, "cy" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1100001011011111110110100001100000000000000")]], 43, GF(2)]]; fi; if YouWantThisCode( 44, 6, 21, "Bel" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 45, 8, 20, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 45, 10, 18, "Gu9" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 45, 14, 16, "Bo0" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 45, 16, 13, "DJ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 46, 11, 17, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 47, 36, 5, "Ch0" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 48, 8, 22, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 48, 10, 20, "GB5" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 48, 16, 15, "FB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 48, 17, 14, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 48, 24, 12, "QR" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,0,1,1,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,0,1,1,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,0,1,1,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,0,1], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,0,1,1,1,0,0,1,1,0,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,0,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1], ], 2]]; fi; if YouWantThisCode( 48, 31, 8, "RR" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 49, 11, 19, "B2x" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 49, 13, 17, "B2x" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 49, 27, 9, "EB3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 51, 8, 24, "cy" ) then GUAVA_TEMP_VAR := [BCHCode, [51, 0, 20, 2]]; fi; if YouWantThisCode( 51, 17, 16, "cy" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("100010000011100101111011111000110110000000000000000")]], 51, GF(2)]]; fi; if YouWantThisCode( 51, 19, 14, "cy" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("110101101111101010010100100000101000000000000000000")]], 51, GF(2)]]; fi; if YouWantThisCode( 51, 25, 11, "DJ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 52, 10, 21, "Pu" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 54, 11, 21, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 55, 16, 19, "LC" ) then GUAVA_TEMP_VAR := [PuncturedCode, [[GoppaCode, [Indeterminate(GF(2))^8+Z(2^6)^44*Indeterminate(GF(2))^7+Z(2^6)^60*Indeterminate(GF(2))^6+Z(2^6)^13*Indeterminate(GF(2))^5+Z(2^6)^29*Indeterminate(GF(2))^4+Z(2^3)^5*Indeterminate(GF(2))^3+Z(2^6)^61*Indeterminate(GF(2))^2+Z(2^6)^14*Indeterminate(GF(2))+Z(2^6)^47, [ 0*Z(2), Z(2)^0, Z(2^2)^2, Z(2^3), Z(2^3)^3, Z(2^3)^4, Z(2^3)^6, Z(2^6), Z(2^6)^2, Z(2^6)^3, Z(2^6)^4, Z(2^6)^5, Z(2^6)^6, Z(2^6)^7, Z(2^6)^8, Z(2^6)^10, Z(2^6)^11, Z(2^6)^12, Z(2^6)^13, Z(2^6)^14, Z(2^6)^15, Z(2^6)^16, Z(2^6)^17, Z(2^6)^19, Z(2^6)^20, Z(2^6)^22, Z(2^6)^23, Z(2^6)^25, Z(2^6)^28, Z(2^6)^29, Z(2^6)^30, Z(2^6)^31, Z(2^6)^32, Z(2^6)^33, Z(2^6)^34, Z(2^6)^35, Z(2^6)^37, Z(2^6)^38, Z(2^6)^39, Z(2^6)^40, Z(2^6)^41, Z(2^6)^43, Z(2^6)^46, Z(2^6)^47, Z(2^6)^48, Z(2^6)^49, Z(2^6)^50, Z(2^6)^51, Z(2^6)^52, Z(2^6)^53, Z(2^6)^55, Z(2^6)^56, Z(2^6)^57, Z(2^6)^58, Z(2^6)^59, Z(2^6)^62 ]]], 22]]; fi; if YouWantThisCode( 55, 21, 15, "cy" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1001011010010001100001001001010101100000000000000000000")]], 55, GF(2)]]; fi; if YouWantThisCode( 55, 23, 13, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 55, 31, 10, "Sh1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 56, 10, 24, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 56, 17, 17, "MoY" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 57, 11, 23, "SRC" ) then GUAVA_TEMP_VAR := [ConstructionBCode, [[BCHCode, [63,1,23,2]]]]; fi; if YouWantThisCode( 58, 8, 26, "?" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 58, 13, 22, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 59, 7, 28, "?" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 60, 8, 27, "Sa" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 60, 10, 25, "Ch" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 60, 17, 20, "CDJ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 60, 20, 17, "We" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0,1], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,1,1,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,0,0,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,0,1,1,1,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0] ], 2]]; fi; if YouWantThisCode( 63, 11, 26, "BCH" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("111110100010011110010101011101111011100011110000010010000000000")]], 63, GF(2)]]; fi; if YouWantThisCode( 63, 19, 20, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 63, 28, 15, "B2x" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("110010011101100011110101100010100011000000000000000000000000000")]], 63, GF(2)]]; fi; if YouWantThisCode( 63, 46, 7, "cy" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("110110010110000011000000000000000000000000000000000000000000000")]], 63, GF(2)]]; fi; if YouWantThisCode( 64, 10, 28, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [63, 1, 27, 2]]]]; fi; if YouWantThisCode( 64, 16, 24, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [63, 1, 23, 2]]]]; fi; if YouWantThisCode( 64, 18, 22, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [63, 1, 21, 2]]]]; fi; if YouWantThisCode( 64, 30, 14, "B2x" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [63, 1, 13, 2]]]]; fi; if YouWantThisCode( 64, 36, 12, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [63, 1, 10, 2]]]]; fi; if YouWantThisCode( 65, 8, 30, "DHM" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 65, 11, 27, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 65, 13, 25, "cy" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("11011101001110001001100001110000110010001110010111011000000000000")]], 65, GF(2)]]; fi; if YouWantThisCode( 65, 24, 17, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 65, 40, 10, "BCH" ) then GUAVA_TEMP_VAR := [BCHCode, [65, 0, 5, 2]]; fi; if YouWantThisCode( 65, 53, 5, "cy" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("10100111001010000000000000000000000000000000000000000000000000000")]], 65, GF(2)]]; fi; if YouWantThisCode( 66, 18, 23, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 66, 21, 20, "CZ" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,1,1,1,0,0,1,0,0,0,0], [1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,0,1,1,1,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,1,1,0,0,1,0,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,0,1,1,1,1,0,0,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,1,0,1,1,0,1,1,0,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,1,0,0,1,0,1,0,1,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,0,1,1,0,1,1,1,1,1,0,0,1,0,1,1,0,0,1,1,1,1,0,1,0,0,0,1,0,1,1,0,0,1,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,1,1,0,0,1,0,1,1,0,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,0,1,0,1,1,0,1,0,1,1,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,0,0,1], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,1,0,0,1,0,0,1,1,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,0,1,1,0,0,1,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,0,1,1,0,0,1,1,1,0,1,0,1,0,1,1,0,1], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,1,1], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1] ], 2]]; fi; if YouWantThisCode( 67, 8, 31, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 67, 10, 29, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 67, 39, 11, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,0,0,0,1,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,0,1,1,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,0,1,1,1,0,1,0,1,1,1,1,1,0,0,1,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,1,1,0,1,1,1,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,1,1,0,1,1,1,1,1,0,0,1,0,1,1,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,0,1,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,1,1,0,0,0,0,0,1,1,1,0,0,1,1,0,1,0,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,1,1] ], 2]]; fi; if YouWantThisCode( 69, 19, 22, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 69, 50, 8, "Sh1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 70, 10, 31, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 70, 11, 29, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 70, 13, 28, "GB0" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 70, 16, 25, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,1,1,0,0,1,0,1,0,1,1,1,0,1,0,0,1], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,1,1,0,1,0,1], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,1,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,1,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,1,1,0,0,1,0,0,1,1,0,1], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,1,1,0,1,0,0,1,1,1,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,1,1,0,1,0,0,1,1,1], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,0,0,1,1] ], 2]]; fi; if YouWantThisCode( 71, 28, 17, "SRC" ) then GUAVA_TEMP_VAR := [ConstructionBCode, [[BestKnownLinearCode, [90, 45, 2]]]]; fi; if YouWantThisCode( 72, 12, 29, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 72, 17, 25, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 72, 19, 24, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 72, 21, 22, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 72, 41, 12, "To" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 72, 47, 9, "EB3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 73, 11, 31, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 73, 27, 20, "cy" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1101000101011101000010000100110110100110101111100000000000000000000000000")]], 73, GF(2)]]; fi; if YouWantThisCode( 73, 36, 16, "cy" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1010001011101110000100110010100011111100000000000000000000000000000000000")]], 73, GF(2)]]; fi; if YouWantThisCode( 73, 38, 13, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 74, 8, 34, "?" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 74, 16, 27, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,0,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,1,1,0,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,0,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,1,1,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,1,1,1,1] ], 2]]; fi; if YouWantThisCode( 74, 18, 25, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 74, 43, 11, "To" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 75, 7, 36, "?" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 75, 12, 31, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 75, 13, 30, "To2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 75, 21, 24, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 75, 23, 22, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 75, 39, 13, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 76, 8, 35, "Sa" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 76, 9, 34, "Bo0" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 76, 17, 27, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 76, 28, 20, "cyx" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,1,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,0,0,1,1,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,0,0,1,1,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,1,1,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,1,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,1,1,0,1,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,1,1,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,1,1,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,1,1,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,1,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1] ], 2]]; fi; if YouWantThisCode( 77, 51, 9, "EB3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 78, 10, 34, "EB2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 78, 13, 32, "To" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 78, 16, 29, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 78, 18, 27, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 78, 23, 24, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 78, 25, 22, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 78, 46, 11, "ZL" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 79, 9, 36, "JS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 80, 10, 35, "GB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 80, 14, 32, "Pi" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 80, 40, 16, "QR" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,0,0,1], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,0,1], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,0,1,0,1,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,0,0,1,1,1,1,1,1,0,1,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1,0,0,1,0,1], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1,0,0,1,1], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,1,1,1,1,0,1,1,0,0,0,0,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,1,1,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,0,0,1,1,1,0,1,1,0,1,0,1,0,1,1,0,0,1,1,0,0,1,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,1,0,0,0,0,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,1,0,0,0,0,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,0,0,1,0,0,1,0,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,1,0,0,1,1,1,0,0,1,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,1,0,0,1,1,1,0,0,1,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,1,0,0,1,1,1,0,0,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,1,1,0,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,1,1,0,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,0,1,1,1,0,1,1,1,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,0,1,1,1,0,1,1,1,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,0,0,1,1] ], GF(2)]]; fi; if YouWantThisCode( 81, 8, 38, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 81, 20, 26, "CZ" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0], [0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0], [0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1], [0,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,1,1], [0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,0,1,1], [0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,0,1,1,1], [0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,0,0,1,0,1,0,0,1,1,0,0], [0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,1,0,0,0,0,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,1,0,1,1,1,0,1,0,1,0,1,0,1,1,0,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,1,0,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,0,0,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,1,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,0,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,1,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,1,1,1] ], 2]]; fi; if YouWantThisCode( 81, 25, 24, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 81, 27, 22, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 81, 31, 20, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 81, 42, 14, "BET" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 82, 68, 6, "Sh1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 83, 16, 31, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 83, 17, 29, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 84, 8, 40, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 84, 10, 38, "EB2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 84, 11, 36, "GB0" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 84, 21, 27, "We" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1,0,1], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1,0,1,1], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1,0,1,1,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0] ], 2]]; fi; if YouWantThisCode( 84, 27, 24, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 84, 29, 22, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 13, 34, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 22, 26, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 86, 12, 36, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 86, 18, 29, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 87, 10, 40, "EB2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 87, 13, 35, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 87, 29, 24, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 87, 31, 22, "cy" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("110111010110101000010000101010010001010010101111011110101000000000000000000000000000000")]], 87, GF(2)]]; fi; if YouWantThisCode( 87, 36, 20, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 88, 8, 41, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 88, 15, 34, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 88, 17, 32, "cyx" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,1,1,0,1,0,1,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,1,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,1,0,0,1,1,0,1,1,0,0,0,1,1,1,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,1,0,0,1,1,0,1,1,0,0,0,1,1,1,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,1,0,0,1,1,0,1,1,0,0,0,1,1,1,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,1,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,1,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,1,0,1,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,1,1,0,1,1,0,0,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,1,0,1,0,1,1,1,0,1,0,1,1,0,1,0,1,0,1,1,1,1,1] ], 2]]; fi; if YouWantThisCode( 89, 11, 40, "cy" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("10010001001111111000011000000110100001011001110111101011001011010111100001010110000000000")]], 89, GF(2)]]; fi; if YouWantThisCode( 89, 18, 31, "BEx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 89, 23, 28, "HS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 89, 24, 25, "MoY" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 89, 56, 11, "cy" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("11010111110010000100001011010001110000000000000000000000000000000000000000000000000000000")]], 89, GF(2)]]; fi; if YouWantThisCode( 89, 69, 8, "Sh1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 15, 35, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 31, 24, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 32, 21, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 45, 18, "QR" ) then # CJ, QRCode function is not used since GUAVA complained that finite field of order larger # than 2^16 cannot be evaluated # GeneratorPolCode function is used instead, however, the execution seems to take ages. GUAVA_TEMP_VAR := [ExtendedCode, [[GeneratorPolCode, [[PolyCodeword, [Codeword("10110101001101111011111111101111011001010110100000000000000000000000000000000000000000000")]], 89, GF(2)]]]]; fi; if YouWantThisCode( 91, 12, 40, "Gu9" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 91, 16, 33, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 91, 51, 14, "cy" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1011101100011011000111111010110110111100100000000000000000000000000000000000000000000000000")]], 91, GF(2)]]; fi; if YouWantThisCode( 91, 64, 9, "Hg" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 92, 7, 45, "Bel" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 92, 8, 44, "Ja2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 92, 46, 16, "AGP" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 93, 10, 42, "EB2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 93, 26, 26, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 93, 33, 22, "cy" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("101001010111001000001110110010101101101000100011001001001000100000000000000000000000000000000")]], 93, GF(2)]]; fi; if YouWantThisCode( 94, 24, 28, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 94, 48, 15, "Ch" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 95, 13, 40, "CZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 95, 23, 31, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 95, 25, 27, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 95, 33, 23, "Ch" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 95, 54, 14, "cyx" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,0,1,0,1,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,0,1,0,1,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,0,1,0,1,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,1,0,0,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,0,1,0,1,1,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,1,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,1,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,1,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,0,1,1,1,0,1,0,1,0,1,1,1,0,0,1,1,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,0,1,1,1,0,1,0,1,0,1,1,1,0,0,1,1,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0,1,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,1,0,0,1,1,1,1,0,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,1,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,1,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,0,1,1,0,1,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1] ], 2]]; fi; if YouWantThisCode( 96, 8, 46, "vT1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 10, 44, "GB5" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 15, 38, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 16, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 35, 22, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 75, 8, "Sh1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 97, 11, 42, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 98, 15, 39, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 99, 8, 48, "DHM" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 99, 11, 43, "GB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 99, 20, 34, "CZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 99, 31, 25, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 99, 35, 24, "To" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 99, 65, 11, "Roe" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 100, 13, 41, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 100, 39, 21, "Ch" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 101, 18, 37, "Gra" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 101, 60, 13, "Roe" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 102, 26, 32, "DaH" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,1,1,1,0,1,1,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,0,0], [0,0,0,1,1,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1], [0,0,1,0,1,1,0,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,0,1,1], [0,1,0,0,0,0,0,1,1,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,0,0,1,0,1,0,1,0,0,1,0,0,0,1,1,0], [0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1], [0,0,0,0,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,0], [0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,0,1,0,1,1,0,1], [0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,0,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,0,0,1,0,1,0,1,1,1,1,1,0], [0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,0,0,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,0,0,1,1,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,1,1,1,0,1,0,1,1,1,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,1,1,0,1,0,1,0,1,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,0,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,0,0,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,0,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,0,0,1,1,1,0,1,0,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,0,0,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,0,1,0,0,0,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,1,1,0,1,1,0,1,1,0,1,0,0,1,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1] ], 2]]; fi; if YouWantThisCode( 102, 27, 30, "DaH" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,1,1,0,0,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,1,1,0,0,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1], [0,1,0,1,0,1,1,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,1,0], [0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,1,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,1,1,1,1,0,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0], [0,0,0,0,1,0,1,1,1,0,0,0,0,0,1,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,1,1,1,1,0,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0], [0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,0,1,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,0,1,1], [0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,1,0,1], [0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,0,1,0,1,1,0,0,1,1,1,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,0,1,1,1,0,1,0,0,1,0,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0,1,1,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,1,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0,1,1,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,1,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,0,0,1,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,1,0,1,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,1,0,1,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,1,1,0,1,0,0,0,0,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,1,0,1,1,1,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,1,0,0,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,1,0,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,1,1,0,0,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,0] ], 2]]; fi; if YouWantThisCode( 102, 37, 24, "QC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 103, 11, 46, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 103, 15, 41, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 7, 51, "Bel" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 17, 40, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 52, 20, "QR" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0] ], 2]]; fi; if YouWantThisCode( 105, 8, 50, "JS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 105, 19, 38, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 105, 21, 36, "We" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,1], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,1,1], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,1,1,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,1,1,1], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,1,1,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,1,1,1,1], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,0,1,1,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,1,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1] ], 2]]; fi; if YouWantThisCode( 105, 23, 33, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 105, 35, 26, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 105, 39, 24, "QC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 105, 43, 21, "HS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 105, 57, 15, "Roe" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 106, 11, 48, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 107, 54, 19, "Ka" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0] ], 2]]; fi; if YouWantThisCode( 108, 8, 52, "Ja2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 12, 46, "GB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 16, 41, "Ch" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 24, 34, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 28, 32, "B2x" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 30, 30, "B2x" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 32, 28, "B2x" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 36, 26, "BJK" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 109, 10, 50, "EB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 109, 23, 35, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 110, 20, 40, "Pi" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 111, 26, 34, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 111, 37, 26, "BJK" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 8, 54, "vT1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 10, 52, "EB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 13, 48, "CZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 16, 44, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 24, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 45, 24, "B2x" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 113, 11, 50, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 113, 18, 42, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 113, 22, 38, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 114, 38, 27, "BHJ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 8, 56, "DHM" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 26, 36, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 116, 11, 52, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 116, 12, 50, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 116, 14, 48, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 116, 16, 45, "Ch" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 117, 20, 43, "HS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 117, 36, 32, "cy" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("100101010011111111011010010100010011110010101101010000010001001001011110100000110100000000000000000000000000000000000")]], 117, GF(2)]]; fi; if YouWantThisCode( 117, 42, 26, "cy" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("111100001100100000100010001011101011100010000011010010010000001011001111111100000000000000000000000000000000000000000")]], 117, GF(2)]]; fi; if YouWantThisCode( 118, 22, 42, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 24, 40, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 26, 38, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 28, 36, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 119, 11, 54, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 119, 12, 52, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 8, 58, "Bo0" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 16, 48, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 37, 32, "cyx" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,1,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,1,0,1,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,1,1,1,0,0,1,0,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,1,1,1,1,0,0,1,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,1,1,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,1,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,1,0,1,1,0,0,1,0,1,1,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,1,0,1,1,1,1,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,1,0,1,1,1,0,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,0,1,0,0,1,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,0,0,1,0,0,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,0,1,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,0,1,0,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,1,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,1,1,1,1,0,0,1,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,1,1,1,1,0,0,1,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,1,1,1,0,0,1,0,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,1,0,1,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,0,1,1,0,0,1,0,1,0,0,0,1,1,0,1,0,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1] ], 2]]; fi; if YouWantThisCode( 123, 9, 58, "JS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 124, 10, 57, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 124, 16, 49, "Ch" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 9, 60, "Ja2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 127, 10, 59, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 127, 30, 37, "MoY" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 127, 36, 35, "cy" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1000110011101111110110110111110101110100100101111110110111011010001100110001101010100011010100000000000000000000000000000000000")]], 127, GF(2)]]; fi; if YouWantThisCode( 127, 43, 31, "BCH" ) then GUAVA_TEMP_VAR := [BCHCode, [127, 1, 28, 2]]; fi; if YouWantThisCode( 128, 15, 56, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [127, 1, 55, 2]]]]; fi; if YouWantThisCode( 128, 16, 52, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 22, 48, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [127, 1, 47, 2]]]]; fi; if YouWantThisCode( 128, 29, 44, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [127, 1, 43, 2]]]]; fi; if YouWantThisCode( 128, 50, 28, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [127, 1, 27, 2]]]]; fi; if YouWantThisCode( 128, 64, 22, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [127, 1, 21, 2]]]]; fi; if YouWantThisCode( 128, 71, 20, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [127, 1, 19, 2]]]]; fi; if YouWantThisCode( 128, 79, 15, "Gp" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 93, 11, "Gp" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 107, 7, "Gp" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 129, 11, 58, "JS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 129, 45, 29, "Dup" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("111010010101001001010111101001100110001111111110001100110010111101010010010101001011100000000000000000000000000000000000000000000")]], 129, GF(2)]]; fi; if YouWantThisCode( 129, 72, 18, "BCH" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("101001111111011110111110000011000001111101111011111110010100000000000000000000000000000000000000000000000000000000000000000000000")]], 129, GF(2)]]; fi; if YouWantThisCode( 129, 87, 13, "MMT" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("110101111111000001001110010000011111110101100000000000000000000000000000000000000000000000000000000000000000000000000000000000000")]], 129, GF(2)]]; fi; if YouWantThisCode( 129, 100, 10, "BCH" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("110100110100100001001011001011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")]], 129, GF(2)]]; fi; if YouWantThisCode( 129, 114, 6, "BCH" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("100000111100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")]], 129, GF(2)]]; fi; if YouWantThisCode( 130, 9, 62, "JS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 131, 23, 47, "BEx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 131, 51, 27, "Su" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 131, 72, 19, "Su" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 10, 61, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 11, 60, "Gu9" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 16, 53, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 17, 52, "BY" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 20, 49, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 30, 39, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 32, 37, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 37, 33, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 44, 32, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 133, 9, 64, "Ja2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 8, 65, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0], [0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,0], [0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1] ], 2]]; fi; if YouWantThisCode( 135, 10, 63, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 15, 57, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,1] ], 2]]; fi; if YouWantThisCode( 135, 22, 49, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,1,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,1] ], 2]]; fi; if YouWantThisCode( 135, 26, 47, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,1,1,0,1,0,0,1,0,0,1,1,0,1,0,1,0,0,0,1,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,1,1,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,0,1,1,0,1,1,0,1,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,0,1,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,1,1,1,1] ], 2]]; fi; if YouWantThisCode( 135, 29, 45, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,1,1,0,1,0,0,1,0,0,1,1,0,1,0,1,0,0,0,1,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,1,1,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,0,1,1,0,1,1,0,1,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,0,1,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,1,1] ], 2]]; fi; if YouWantThisCode( 135, 37, 35, "Vx" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,0,1,0,1,0,0,0,0,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,0,1,0,1,1,0,1,0,1,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,0,1,0,1,0,0,0,0,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,0,1,0,1,1,0,1,0,1,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,0,1,0,1,0,0,0,0,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,0,1,0,1,1,0,1,0,1,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,0,0,1,0,0,1,1,1,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,1,0,1,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,0,1,0,0,0,1,1,1,0,0,1,1,1,0,1,0,0,1,0,1,1,1,0,1,1,1,1,0,0,0,0,1,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,1,0,1,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,0,1,0,0,0,1,1,1,0,0,1,1,1,0,1,0,0,1,0,1,1,1,0,1,1,1,1,0,0,0,0,1,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,0,0,0,1,0,0,0,1,1,0,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,0,0,0,1,0,0,0,1,1,0,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,1,0,1,0,0,1,0,0,1,1,1,1,0,1,0,1,1,1,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,0,1,1,0,0,1,0,1,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,1,1,1,1,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,0,1,0,1,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,0,1,0,1,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,1,0,0,1,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1] ], 2]]; fi; if YouWantThisCode( 135, 50, 29, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,1,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,1,1,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,1,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,1,1,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,1,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,1,1,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,1,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,0,1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,1,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,0,1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,0,0,0,1,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,0,0,0,1,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,0,0,0,1,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,0,0,0,1,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,1,1,0,0,0,1,0,1,1,1,0,0,0,1,0,0,1,1,1,1,1,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1,1,0,0,0,0,1,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,1,0,1,1,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1,0,1,1,1,1,1,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,1,1,0,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,1,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,1,1,0,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,1,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,1,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,1,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,0,1,0,1,0,1,1,0,1,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,0,1,0,1,0,1,1,0,1,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,1,1,0,1,1,0,0,0,1,0,0,1,0,0,0,0,1,1,1,0,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,1,1,1,1,0,1,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,0,1,1,1,1,1,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,1,1,1,1,1,0,0,1,0,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,0,1,0,1,1,0,1,0,1,1,1,0,0,1,1,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,0,1,0,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,0,1,0,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,1] ], 2]]; fi; if YouWantThisCode( 135, 54, 27, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,1,0,1,0,1,0,1,1,0,1,0,0,0,1,0,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,1,1,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,1,1,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,0,0,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,0,0,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,0,0,1,1,0,1,1,0,1,1,0,0,0,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,1,0,1,0,1,1,0,1,1,1,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,1,0,0,1,0,1,1,1,1,1,1,0,1,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,0,0,1,1,0,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,0,1,1,0,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,0,1,1,0,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1] ], 2]]; fi; if YouWantThisCode( 135, 57, 25, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,1,0,1,0,1,0,1,1,0,1,0,0,0,1,0,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,1,1,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,1,1,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,0,0,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,0,0,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,0,0,1,1,0,1,1,0,1,1,0,0,0,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,1,0,1,0,1,1,0,1,1,1,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,1,0,0,1,0,1,1,1,1,1,1,0,1,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,0,0,1,1,0,1,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,0,1,1,0,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,0,1,1,0,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1] ], 2]]; fi; if YouWantThisCode( 135, 71, 21, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,1,1,0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,0,1,0,0,0,0,0,1,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,0,1,1,0,1,1,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1,0,0,0,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,1,1,0,1,1,0,1,1,1,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,1,0,0,1,1,0,1,1,0,1,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,1,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,0,0,1,0,1,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,0,0,1,0,1,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,0,1,0,1,0,1,1,0,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1,1,1,1,0,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1,0,1,1,1,1,1,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1,0,1,1,1,1,1,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1,0,1,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1,0,1,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1,0,1,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,1,0,1,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,1,0,1,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,1,0,1,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,1,1,0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,1,1,0,1,0,1,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1] ], 2]]; fi; if YouWantThisCode( 135, 75, 19, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,1,1,1,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,0,0,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,1,1,0,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,1,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,1,1,0,1,1,0,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,1,1,1,1,1,0,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1,0,0,1,0,0,1,1,1,1,0,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,1,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,1,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,0,0,1,1,0,0,1,0,1,0,1,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,0,0,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,1,0,1,1,1,0,1,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,1,0,1,0,0,1,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1] ], 2]]; fi; if YouWantThisCode( 135, 78, 17, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,1,1,1,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,0,0,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,1,1,0,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,1,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,1,1,0,1,1,0,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,1,1,1,1,1,0,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1,0,0,1,0,0,1,1,1,1,0,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,1,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,1,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,0,0,1,1,0,0,1,0,1,0,1,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,0,0,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,1,0,1,1,1,0,1,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,0,0,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,0,0,0,0,1,1] ], 2]]; fi; if YouWantThisCode( 135, 85, 15, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,1,1,0,1,1,0,0,1,1,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,1,1,1,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,1,1,1,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,1,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,0,0,1,1,1,0,0,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,1,0,0,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,0,0,1,1,1,0,0,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,1,0,0,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,0,0,1,1,1,0,0,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,1,0,0,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,0,0,1,1,1,0,0,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,1,0,0,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,1,1,0,1,1,0,0,1,0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,1,0,0,1,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,1,0,1,0,1,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,1,1,1,0,0,0,1,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,0,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,1,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,1,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,1,0,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,1,1,1,1,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,0,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,1,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,1,1,1,0,0,0,1,1,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,1,0,0,1,0,1,1,1,0,1,0,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,0,1,1,0,0,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,0,0,0,1,1] ], 2]]; fi; if YouWantThisCode( 135, 92, 13, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,1,1,0,0,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,0,1,1,0,0,0,1,1,0,0,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,0,0,0,1,0,0,1,0,1,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,1,1,0,0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,0,1,0,0,1,1,1,1,1,0,0,1,1,0,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,1,1,0,1,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,0,1,0,1,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,0,1,0,1,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1,1,0,0,0,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1,1,0,0,0,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,1,1,1,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,0,1,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,1,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,0,1,1,0,0,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,0,1,1,0,0,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1,1,0,0,1,0,1,1,0,0,1,1,0,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,1,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1] ], 2]]; fi; if YouWantThisCode( 135, 99, 11, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,1,0,0,1,1,0,1,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,1,1,0,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,0,1,0,1,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,1,1,1,0,1,1,0,1,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,1,1,1,0,1,1,0,1,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,1,1,1,0,1,1,0,1,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,1,0,0,1,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,1,0,0,1,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,1,1,0,0,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,1,1,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,1,1,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,0,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,1,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,1,0,1,1,1,0,0,0,1,0,0,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,0,1,0,0,1,0,0,1,0,1,1,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,0,1,0,0,1,0,0,1,0,1,1,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,0,0,1,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,0,0,0,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,1,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1,1,0,0,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,1,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,1,1,0,1,0,1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1] ], 2]]; fi; if YouWantThisCode( 135, 106, 9, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,0,1,1,0,0,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,1,0,1,1,0,0,1,1,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,0,1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,0,1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,1,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,0,1,0,0,1,1,0,1,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,1,0,0,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,1,1,0,1,0,1,1,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,0,1,0,0,1,1,1,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,1,1] ], 2]]; fi; if YouWantThisCode( 136, 16, 56, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 17, 53, "BEx" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,1,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1] ], 2]]; fi; if YouWantThisCode( 136, 20, 52, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 30, 41, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 32, 40, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 39, 34, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 47, 32, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 68, 24, "RS" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0] ], 2]]; fi; if YouWantThisCode( 137, 11, 61, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 7, 68, "vT3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 139, 8, 67, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,1], [0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1], [0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,1,0,1,0], [0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,1,0,1], [0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,0,1,1], [0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0], [0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,0] ], 2]]; fi; if YouWantThisCode( 139, 15, 59, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,1,1,0] ], 2]]; fi; if YouWantThisCode( 139, 17, 55, "BEx" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,1,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1] ], 2]]; fi; if YouWantThisCode( 139, 19, 53, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,1,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,0,1,1,1,0,0,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,] ], 2]]; fi; if YouWantThisCode( 139, 22, 51, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,1,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,1,0,0,0,0,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,0,1,1,1,0] ], 2]]; fi; if YouWantThisCode( 139, 29, 47, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,1,1,0,1,0,0,1,0,0,1,1,0,1,0,1,0,0,0,1,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,1,1,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,0,1,1,0,1,1,0,1,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,0,1,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,0,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0] ], 2]]; fi; if YouWantThisCode( 139, 30, 43, "Vx" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,0,0,0,1,1,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,1,0,1,1,1,1,1,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,1,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,1,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,1,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,0,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,1,0,1,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,1,0,1,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,1,0,1,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,1,0,1,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,0,1,0,0,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,0,1,0,0,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1] ], 2]]; fi; if YouWantThisCode( 139, 39, 35, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 139, 57, 27, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,1,0,1,0,1,1,1,1,0,1,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,1,0,1,0,1,1,1,1,0,1,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,1,0,1,0,1,1,1,1,0,1,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,1,0,1,1,0,1,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,1,1,0,0,1,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,0,1,0,1,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,1,1,0,0,1,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,0,1,0,1,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,1,1,0,0,1,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,0,1,0,1,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,1,1,0,0,1,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,0,1,0,1,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,1,0,1,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,1,0,1,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,1,0,1,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,0,1,1,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1,0,1,0,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,1,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,1,0,0,1,0,0,1,1,1,0,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,1,1,1,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,1,1,1,0,1,1,0,0,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,1,1,1,0,1,1,0,0,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,0,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,0,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0] ], 2]]; fi; if YouWantThisCode( 139, 78, 19, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,1,1,1,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,0,0,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,1,1,0,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,1,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,1,1,0,1,1,0,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,1,1,1,1,1,0,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1,0,0,1,0,0,1,1,1,1,0,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,1,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,1,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,0,0,1,1,0,0,1,0,1,0,1,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,0,0,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,1,0,1,1,1,0,1,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,0,1,0,0,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,0,0,0,0,1,0,1,1,1,0] ], 2]]; fi; if YouWantThisCode( 140, 9, 66, "GB5" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 11, 63, "GB6" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 50, 32, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 141, 69, 24, "Kol" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("111000001101011100010111010000000110011111110000010001101101111110000001100000000000000000000000000000000000000000000000000000000000000000000")]], 141, GF(2)]]; fi; if YouWantThisCode( 142, 7, 70, "vT3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 10, 65, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 35, 40, "DaH" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [0,1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0], [0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,0,1,1,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1], [0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1], [0,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1], [0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,1,0,1,0,1,1,0,1,1,0,0,0,0,1,0,1,0,0,0,1,1,0,1,0,0,1,1,1,1,1,0,0,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1], [0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,1,1,1,1,0,1,0,0,1,0,1,1,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,1,1,0,1,0,1,1,0,0,0,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,1,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,1,1,0,0,1,1,0,0,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1,1,0,0,0,1,1,1,0,0,1,0,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,0,0,1,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,1,0,0,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,1,0,1,1,1,0,0,1,1,1,1,0,1,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,0,1,1,0,1,1,0,1,0,1,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1,0,0,1,0,0,1,1,0,1,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,1,0,1,1,0,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,1,0,0,0,1,1,0,1,0,1,0,1,0,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,1,1,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,1,1,0,1,0,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,0,1,0,1,1,1,0,0,0,1,0,1,1,0,0,1,1,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,0,1,0,1,1,1,0,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,1,0,1,0,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,1,0,1,1,0,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0] ], 2]]; fi; if YouWantThisCode( 142, 36, 38, "DaH" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [0,1,1,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,0,1,0,0,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,1,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [0,0,0,0,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,0,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1], [0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,0,1,1,1,1,0,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1], [0,0,0,1,0,0,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1], [0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,1,1,1,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,0,0,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1], [0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1], [0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,1,1,0,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,0,1,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,0,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,0,1,1,0,1,1,0,1,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,1,0,1,0,1,0,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,1,0,0,1,1,1,0,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,0,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,0,1,0,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,0,0,0,1,1,0,0,1,1,0,1,0,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,1,1,1,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,1,0,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,1,0,0,0,1,1,1,1,1,0,1,1,1,0,1,0,1,0,1,0,0,0,1,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,0,1,0,1,1,1,0,1,1,0,1,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,1,1,0,0,0,1,0,0,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,0,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,0,1,0,0,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,0,1] ], 2]]; fi; if YouWantThisCode( 142, 58, 27, "BEx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 63, 25, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 70, 23, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 74, 21, "Su" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 79, 19, "BEx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 84, 17, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 91, 15, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 98, 13, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 105, 11, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 112, 9, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 143, 8, 69, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1], [0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,1], [0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,0,0,1], [0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,0,1], [0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,1], [0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1], [0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1] ], 2]]; fi; if YouWantThisCode( 143, 13, 63, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1] ], 2]]; fi; if YouWantThisCode( 143, 15, 61, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,0,1,1,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1] ], 2]]; fi; if YouWantThisCode( 143, 22, 53, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,1,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,1,1,1,0,1,0,1,1,1,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,1,1,1,0,1,0,1,1,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1] ], 2]]; fi; if YouWantThisCode( 143, 25, 50, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 143, 43, 34, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 9, 68, "Gu" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 16, 57, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 23, 52, "BET" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 30, 45, "Gra" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 40, 36, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 59, 27, "BEx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 71, 23, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 80, 19, "BEx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 7, 72, "HvT" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 32, 44, "CLC" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1100000011010111110111100111100000111000100111010001000000000010001011100100011100000111100111101111101011000000110000000000000000000000000000000")]], 145, GF(2)]]; fi; if YouWantThisCode( 146, 8, 71, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1], [0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1], [0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,1], [0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1], [0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,1], [0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,1], [0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,1] ], 2]]; fi; if YouWantThisCode( 146, 10, 68, "Ja" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 15, 63, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,1] ], 2]]; fi; if YouWantThisCode( 146, 22, 55, "X" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,1,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,1] ], 2]]; fi; if YouWantThisCode( 146, 28, 49, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 36, 40, "DaH" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [0,0,1,0,0,1,1,0,0,1,1,0,1,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,0,1,1,0,0,1,1,0,1,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [1,0,0,1,1,0,0,1,1,0,1,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,1,1,1,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,1,1,1,0,0,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,1,1,1,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1], [0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1], [0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1], [0,0,0,0,0,1,0,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,0,1,0,1,1,1,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1], [0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1], [0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,1,0,1,1,1,1,0,0,0,0,1,0,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,1,1,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,0,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,0,1,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,0,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,1,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,1,1,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,0,1,0,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,1,1,1,1,1,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,1,0,0,0,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,1,0,0,0,1,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,1,0,0,1,1,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,1,0,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,1,0,0,0,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,0,0,0,1,1,1,0,1,1,1,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,0,0,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,0,0,1,0,0] ], 2]]; fi; if YouWantThisCode( 146, 38, 38, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 77, 21, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 81, 19, "BEx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 147, 9, 70, "Ja2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 147, 11, 66, "GB6" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 147, 25, 52, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 23, 53, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 29, 49, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 34, 41, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 43, 36, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 78, 21, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 149, 7, 73, "Bel" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 149, 69, 25, "Su" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 149, 90, 17, "Su" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 149, 97, 15, "Su" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 149, 111, 11, "Su" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 9, 72, "GB5" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 10, 70, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 11, 68, "GB6" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 12, 66, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 16, 62, "CZ2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 28, 51, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 50, 33, "BHJ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 151, 8, 73, "BEx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 151, 13, 65, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 151, 23, 55, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 151, 24, 53, "BEx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 151, 34, 43, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 151, 36, 41, "BEx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 151, 45, 36, "Dup" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1110010001011000110111010011011001110001100110100000011001001101001000010010100100011001100011111000111111100000000000000000000000000000000000000000000")]], 151, GF(2)]]; fi; if YouWantThisCode( 151, 61, 31, "MMT" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1000010001010001110111001110100010101100100000011110100100100001011001000000111001101010011000000000000000000000000000000000000000000000000000000000000")]], 151, GF(2)]]; fi; if YouWantThisCode( 151, 64, 27, "Su" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 151, 76, 23, "MMT" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1000010011100111010110010011001101100011101000111000011000010010000100011111000000000000000000000000000000000000000000000000000000000000000000000000000")]], 151, GF(2)]]; fi; if YouWantThisCode( 151, 85, 19, "Su" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 151, 106, 13, "MMT" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1111100110101110011100000110110011110011011001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")]], 151, GF(2)]]; fi; if YouWantThisCode( 151, 136, 5, "GB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 7, 75, "Bel" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 29, 51, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 31, 48, "Dup" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[GeneratorPolCode, [[PolyCodeword, [Codeword("1010010000110011110010101011111101011010110000000001010011011111111101000000110111001110000110011101101001101010101001101000000000000000000000000000000")]], 151, GF(2)]]]]; fi; if YouWantThisCode( 152, 41, 40, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 43, 38, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 79, 22, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 10, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 12, 68, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 14, 65, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 16, 64, "CZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 18, 62, "CZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 21, 57, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 25, 53, "BEx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 32, 46, "LLX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 8, 75, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 24, 55, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 36, 43, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 70, 26, "BET" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 80, 22, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 13, 67, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 15, 65, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 18, 63, "Gra" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 19, 62, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 22, 57, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 26, 53, "BEx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 48, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 52, 34, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 77, 23, "TTH" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,1,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,1,0,0,1,0,1,0,0,1,1,0,0,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,1,1,0,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,1,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,1,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,0,1,1,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,1,0,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,0,0,0,1,0,1,1,0,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,1,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,1,1,0,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,0,1,0,0,1,0,1,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,1,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,0,1,1,0,1,1,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,0,0,0,1,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,1,0,1,1,0,0,1,0,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1,1,1,0,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,1,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,1,1,1,0,0,0,0,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,1,0,1,1,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,0,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,0,0,0,1,0,1,0,1,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,1,1,0,1,0,1,0,0,0,1,1,1,0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,1,1,0,1,1,0,1,1,1,1,0,0,0,0,1,1,1,1,0,1,1,0,0,1,1,1,0,1,1,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,0,1,1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,1,1,0,0,1,0,1,1,1,0,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,1,0,0,1,1,1,0,0,0,1,1,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,1,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,1,0,1,0,0,1,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,1,0,1,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,0,1,0,1,1,0,1,0,1,1,0,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,1,1,1,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0,1,1,0,1,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,1,1,0,1,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,0,1,0,1,0,1,0,1,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,0,1,0,0,0,1,1,0,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,0,0,0,1,0,1,1,1,0,0,0,1,0,0,1,1,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,1,1,1,0,0,1,0,1,0,0,1,1,1,1,1,0,1,0,0,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,1,1,1,1,1,1,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,0,0,1,0,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,1,1,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,0,1,1,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,0,1,0,0,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,0,0,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,1,1,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,1,1,0,0,1,1,1,0,1,0,1,0,1,1,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,0,0,1,0,1,0,1,1,1,0,1,1,1,0,0,0,1,1,1,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,1,1,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,1,0,1,0,0,1,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,1,1,0,1,0,1,1,0,0,1,0,1,1,1,0,0,0,1,0,1,1,1,0,0,1,0,0,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,1,1,0,1,1,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1,0,1,1,1,1,0,0,0,1,1,0,1,0,0,0,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,0,1,1,1,0,0,1,1,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,0,0,1,0,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,0,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,1,0,1,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,0,1,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,1,1,0,1,0,1,1,0,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,1,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,0,1,1,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,1,1,0,0,1,0,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,1,0,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,1,1,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,0,0,1,1,1,1,0,1,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,0,1,1,1,0,0,1,0,1,0,1,1,0,0,1,0,1,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,1,0,1,1,1,0,1,1,0,0,1,0,1,0,1,0,1,1,1,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,1,1,0,0,1,1,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,0,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,0,1,1,0,1,0,0,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,0,1,0,1,0,0,1,1,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,0,0,1,1,1,0,0,1,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0,0,1,0,0,1,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,0,0,0,1,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,1,1,1,1,0,1,1,1,0,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,1,1,1,1,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,1,0,0,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,1,0,1,0,1,1,0,0,0,1,0,1,1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,1,0,1,1,1,1,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,1,0,1,1,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,1,0,1,1,1,1,0,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,0,0,0,1,1,0,0] ], 2]]; fi; if YouWantThisCode( 155, 133, 7, "EB3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 9, 74, "GB5" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 11, 72, "JS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 12, 70, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 25, 55, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 30, 49, "Gra" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 32, 48, "LLX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 39, 42, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 43, 40, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 45, 38, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 68, 27, "Su" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 72, 25, "Su" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 96, 17, "Su" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 103, 15, "Su" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 110, 13, "Su" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 14, 67, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 21, 59, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 27, 53, "BEx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 62, 31, "TTH" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,1,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,1,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,1,0,1,1,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,0,1,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,0,1,1,1,1,0,1,0,1,1,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,1,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,1,0,1,0,1,0,1,0,0,1,1,0,1,0,0,0,1,0,1,0,1,1,1,1,0,0,1,1,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,1,1,0,1,0,1,0,1,0,0,1,0,1,1,0,0,0,1,1,1,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,1,1,1,0,1,0,1,1,1,1,1,1,0,1,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,1,0,1,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,0,1,1,0,0,1,1,1,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,1,0,1,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,1,0,0,0,1,1,1,1,0,1,1,1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,0,1,0,0,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,1,1,1,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,1,0,0,0,1,1,1,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,0,1,0,0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0,1,0,0,1,0,1,0,0,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,1,1,1,0,1,0,1,0,0,0,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,1,0,0,0,1,0,1,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,0,0,1,1,1,1,0,1,1,0,0,1,0,0,1,0,1,1,0,1,0,0,0,1,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,1,0,0,1,0,0,1,0,0,0,1,1,0,1,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1,0,1,1,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,1,0,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,0,0,1,0,0,1,1,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,1,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,0,1,1,0,1,0,1,0,0,1,0,1,0,1,1,0,1,1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,0,0,1,0,0,1,1,1,1,1,1,0,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,1,1,0,0,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,0,1,1,1,1,1,0,1,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1,0,1,1,1,0,0,0,1,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,1,0,1,0,1,0,0,1,0,0,1,0,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,0,1,1,0,0,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,0,1,1,1,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,0,1,1,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,0,1,0,0,0,0,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,0,1,0,1,0,1,1,1,1,1,1,0,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,1,0,0,0,1,1,1,1,0,1,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,1,0,0,1,0,1,1,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,0,1,0,1,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,1,1,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,1,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,1,1,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,1,0,1,1,0,1,0,1,0,1,0,1,1,0,1,0,0,1,1,0,0,1,1,0,1,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,1,0,0,1,0,1,1,1,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,0,1,0,0,0,1,1,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,0,1,1,0,0,1,0,1,0,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,0,1,1,0,1,1,0,0,1,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,0,1,1,0,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,1,0,1,1,0,0,1,0,1,0,0,1,0,1,1,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,1,0,1,0,1,0,1,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,1,0,0,1,0,1,0,1,1,1,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,1,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,1,0,0,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,1,1,1,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,1,0,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,0,0,0,0,1,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,0,1,0,1,1,0,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,1,1,0,1,1,1,0,0,1,0,0,1,1,0,1,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,1,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,0,0,1,0,1,1,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,0,1,0,0,1,1,1,1,0,1,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,1,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0,1,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,1,1,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,1,0,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,1,0,0,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,0,1,0,1,0,0,1,1,1,0,1,1,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1,0,0,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,1,1,1,1,0,1,0,1,0,1,1,0,0,1,0,1,1,0,1,1,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0] ], 2]]; fi; if YouWantThisCode( 158, 26, 55, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 158, 84, 21, "KSH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 8, 78, "BDH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 9, 76, "Ja2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 12, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 13, 69, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 15, 67, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 22, 59, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 28, 53, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 33, 46, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 19, 64, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 23, 57, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 40, 44, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 42, 42, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 45, 40, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 48, 38, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 52, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 56, 34, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 63, 31, "TTH" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,1,1,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,0,1,0,1,0,1,0,1,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,1,1,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,1,0,0,0,1,1,0,1,0,0,1,0,1,1,1,0,0,1,1,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,1,0,1,1,1,0,1,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,1,0,0,1,0,0,1,1,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,1,1,0,0,1,1,0,1,0,1,1,0,1,0,1,1,0,0,0,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,1,0,1,0,0,1,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,1,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,1,0,0,0,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,1,0,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,1,0,1,0,0,1,1,0,1,0,0,0,1,1,1,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,0,0,0,1,1,0,0,1,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,1,1,0,1,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,1,0,1,0,1,0,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,0,0,0,1,1,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,1,1,0,0,1,1,1,0,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,0,1,1,1,0,1,1,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,0,1,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,1,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,0,0,0,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,1,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,1,1,1,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,1,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,1,1,0,1,1,1,1,0,0,1,0,1,1,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1,1,1,0,0,1,0,1,0,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,0,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,0,0,0,1,0,1,0,1,0,0,1,1,1,1,1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,0,1,0,1,1,1,1,0,1,0,1,0,0,1,1,1,0,1,1,0,1,1,1,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,0,1,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,0,1,1,1,0,0,1,0,1,1,1,0,1,0,0,1,0,1,0,0,1,0,0,1,1,1,1,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,1,0,1,1,0,1,1,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,0,0,1,1,1,0,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,0,1,0,0,1,0,1,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,0,1,1,0,1,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,1,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,0,1,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,0,0,1,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,1,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,1,0,0,0,1,0,0,0,1,1,1,0,1,0,0,1,0,1,0,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1,1,1,1,0,0,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1,0,1,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,0,0,1,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,1,0,0,1,1,0,1,1,1,0,1,0,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,0,0,0,1,1,0,1,1,1,1,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,1,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,1,0,0,1,1,1,0,0,0,0,1,0,1,0,0,1,0,1,1,0,0,1,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,1,1,0,1,1,0,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,1,0,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,1,0,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,1,0,1,1,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,0,1,1,1,0,0,1,0,1,1,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,1,1,0,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,0,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,1,1,1,1,0,0,1,0,1,1,0,1,0,1,1,0,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,1,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,0,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,1,1,0,1,1,0,0,1,1,0,1,0,0,0,0,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,1,1,0,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,1,1,0,1,1,0,1,1,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,1,0,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1,0,1,1,1,1,0,0,0,1,0,1,1,1,1,0,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,1,0,1,1,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,1,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,1,1,1,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,1,0,0,1,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0,1,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,0,0,1,0,1,1,1,0,1,1,1,0,0,1,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,0,0,1,0,1,0,0,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,1,0,0,1,1,0,0,1,0,1,0,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,1,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,1,0,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0] ], 2]]; fi; if YouWantThisCode( 160, 65, 30, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 69, 28, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 14, 69, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 27, 55, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 29, 53, "BEx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 30, 51, "Gra" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 35, 45, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 8, 80, "BDH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 9, 78, "Ja2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 10, 76, "Ja2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 11, 74, "JS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 13, 71, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 16, 66, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 33, 47, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 41, 44, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 43, 42, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 76, 26, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 81, 24, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 139, 7, "EB3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 163, 15, 69, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 163, 102, 17, "Su" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 163, 109, 15, "Su" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 14, 71, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 23, 59, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 24, 58, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 29, 55, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 32, 49, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 9, 80, "Ja2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 10, 78, "GB5" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 11, 76, "Gu9" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 12, 74, "Ja2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 16, 68, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 20, 64, "CZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 43, 44, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 44, 42, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 48, 40, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 52, 38, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 56, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 65, 32, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 69, 30, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 166, 15, 71, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 166, 18, 66, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 166, 25, 58, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 166, 61, 34, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 8, 81, "BEx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 21, 64, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 26, 57, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 136, 9, "Hg" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 10, 80, "Ja2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 11, 77, "Gu9" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 12, 76, "GB6" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 17, 68, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 19, 66, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 22, 62, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 24, 60, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 32, 52, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 57, 36, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 70, 30, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 76, 28, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 81, 26, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 86, 24, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 8, 83, "BEx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 16, 72, "DaH" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [0,0,1,1,0,1,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,0,0,0,1,0,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,0,0,0,0], [0,1,0,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,0,1,0,0,1,1,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,1,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,0,1,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,0,0,1,1,0,1,0,1,1,0,1,0,0,0,0], [1,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0], [0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1], [0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0], [0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,0,0,0,1,1,1,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0], [0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,1,0,1], [0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,0,1,1,1,0,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,1,1,0,1,1,0,0,1,0,0,1,1,1,1,0,1,0,1,1,1,1,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,1,1,1,0,1,1,0,0], [0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,1,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,1,0,1,0,1,1,1,1,0,1,1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,1,0,0,0,0,0,0,1,0,1,1,0,0,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,0,1,0,0,1,1,1,1,0,1,0,1,0,1,0,0,1,1,1,0,1,0,1,0,1,1,1,0,0,1,0,0,0,1,1,1,1,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,0,1,1,0,0,0,1,0,0,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,1,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,1,1,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,0,0,0,1,0,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,1,1,1,1,1,1,0,1,0,1,1,0,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,0,1,0,0,1,1,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,1,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,0,1,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,1,1,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1] ], 2]]; fi; if YouWantThisCode( 170, 20, 66, "DaH" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [0,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0], [0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0], [1,0,0,1,1,0,1,1,0,0,0,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,1,1,0,1,1,0,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,1,0,0,1,0,0,1,1,0,1,0,0,1,0,0,1,1,1,0,1,0,0,1,0,1,0,1,0,0,1,0,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,1], [0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,1,1,0,0,1,0,1,0,1,0,0,1,1,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,1,1,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1], [0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,1,1,0,0,1,0,1,0,1,0,0,1,1,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,1,1,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1], [0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,1,1,0,0,1,0,1,0,1,0,0,1,1,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,1,1,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0], [0,0,0,0,1,0,0,0,1,0,1,1,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,0,0,1,1,1,0,1,1,1,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,1,1,1,0,0,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,0,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,1,1,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,1,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,0,1,0,1,0,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,0,0,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,0,1,0,1,0,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,0,1,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,1,1,0,1,1,0,1,1,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,1,0,1,0,1,1,0,0,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,1,1,1,0,0,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,0,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,0,1,1,0,0,1,1,1,1,0,0,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0,1,1,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,1,0,0,0,0,1,0,1,0,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1] ], 2]]; fi; if YouWantThisCode( 170, 22, 63, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 25, 60, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 33, 52, "DaH" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [0,0,1,0,1,1,1,1,0,0,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,1,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,0,0,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,1,1,1,1,0,0,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,1,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,0,0,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,1,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,0,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,1,0,1,0,0,0,0,1,1,0,1,0,1,1,1,1,0,1,0,1,1,0,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [0,0,0,1,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,0,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,1,1,1,0,1,0,1,0,0,0,0,1,1,0,1,0,1,1,1,1,0,1,0,1,1,0,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1], [0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0], [0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,0,1,1,1,1,0,1,0,0,1,1,1,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,0,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1], [0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,0,1,1,0,0,1,0,0,0,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0], [0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,0,1,1,0,0,1,0,0,0,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,1,0,0,0,0,1,1,1,1,0,1,1,1,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,1,1,0,1,0,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,1,1,0,1,0,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,0,1,1,1,0,1,0,1,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,1,1,0,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,1,1,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,1,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,1,1,1,1,0,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,0,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,1,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,1,1,1,0,0,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,0,1,0,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,1,1,1,0,1,0,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,1,1,1,0,1,0,0,1,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,1,0,1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,1,1,1,1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,1,1,1,0,1,0,0,1,0,1,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,1,1,1,1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,1,1,1,0,1,0,0,1,0,1,0,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,1,1,1,1,1,1,0,0,0,0,1,1,0,1,0,1,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,1,1,0,1,0,0,1,1,1,0,1,1,1,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,0,1,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,1,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,1,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,0,0] ], 2]]; fi; if YouWantThisCode( 170, 36, 50, "DaH" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [0,0,1,0,0,0,0,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [1,0,0,0,0,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [0,0,0,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1], [0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,0,1,0,1,0,1,1,1,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0], [0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,1,1,1,1,1,0,1,1,1,0,0,0,1,0,0,0,0,1,1,0,0,1,1,1,0,1,1,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,1,1,1,1,0,1,0,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1], [0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,0,1,1,0,0,1,1,1,0,1,0,1,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,1,1,1,0,0,1,0,0,1,0,1,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,1,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1], [0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,1,1,0,0,0,1,1,1,0,1,0,1,1,0,1,0,1,0,0,1,1,1,1,0,0,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,0,1,1,0,0,1,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,1,0,1,0,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,0,1,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,1,0,1,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,1,1,1,0,1,1,1,0,0,1,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,0,1,1,1,1,0,1,0,0,1,0,1,1,0,0,1,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,0,1,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,0,1,1,1,1,0,1,0,0,1,0,1,1,0,0,1,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,0,1,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,1,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,1,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,0,1,0,1,1,0,1,0,0,1,1,0,1,0,0,1,1,0,0,1,1,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,1,0,1,1,0,1,0,0,1,1,0,1,0,0,1,1,0,0,1,1,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,0,1,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,0,0,1,1,1,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,0,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,1,0,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,0,1,0,0,0,1,1,1,0,1,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,0,1,1,0,0,1,1,0,0,1,1,0,0,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,1,0,0,0,1,1,1,1,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,1,1,1,1,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,1,1,0,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,0,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,1,1,0,1,0,0,1,1,0,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,0,0,0,0,1,1,1,0,1,0,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,0,0,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,1,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,0,0,0,0,1,1,1,0,1,0,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,0,0,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,1,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,0,0,0,0,1,1,1,0,1,0,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,0,0,0,1,0,1,0,0,1,1,1,0,1,1,1,1,0,1,0,1,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,1,1,1,0,0,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,1,1,0,0,0,1,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,1,0,1,1,0,0,1,1,1,1,1,0,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,1,1,1,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,1,0,0,1,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,0,1,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,0,1,1,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,1,1,0,0,0,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,1,1,1,0,1,0,1,1,0,1,1,0,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,1,1,1,0,1,0,0,0,0,1,1,1,0,0,0,0,1,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,1,1,1,0,1,0,0,0,0,1,1,1,0,0,0,0,1,1,0,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0] ], 2]]; fi; if YouWantThisCode( 170, 108, 17, "Su" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 9, 81, "Gu9" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 14, 74, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 19, 68, "GG1" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("110101011011110000001110011011111001101110110100110100100100110011010111100010001111010110011001001001011001011011101100111110110011100000011110110101011000000000000000000")]], 171, GF(2)]]; fi; if YouWantThisCode( 171, 26, 59, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 38, 48, "Dup" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("111100100101011010010101101110001010100100011110001101100101111111001111111010011011000111100010010101000111011010100101101010010011110000000000000000000000000000000000000")]], 171, GF(2)]]; fi; if YouWantThisCode( 171, 60, 35, "TTH" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,0,0,0,1,1,0,1,0,1,1,1,0,1,0,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,0,0,1,0,1,0,0,1,0,0,1,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,1,0,0,1,0,0,1,1,0,1,0,1,0,0,0,1,1,1,0,0,0,1,0,0,1,1,0,1,0,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,1,1,1,0,1,1,1,1,1,0,0,1,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,1,0,1,0,0,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,1,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,1,0,1,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,1,1,0,0,1,0,0,1,1,1,1,0,0,1,0,1,1,0,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,0,0,1,1,1,1,1,0,1,1,1], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,1,1,1,1,0,1,0,0,1,1,0,1,0,1,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,1,1,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,1,1,1], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,1,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,0,0,0,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,0,1,0,0,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,1,0,1,0,0,1,0,0,1,0,1,0,1,0,1,0,1,1,0,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,1,1,1,0,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,1,1,0,1,0,0,1,0,1,1,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,1,1,1,1,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,0,0,1,0,1,1,1,0,1,0,1,0,0,1,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,0,1,0,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,0,1,1,1,1,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,0,0,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,0,1,1,0,1,0,0,0,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,0,0,0,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,1,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,0,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,0,1,0,0,0,1,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,1,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,1,0,1,1,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,1,0,0,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,1,1,0,1,0,0,1,1,1,1,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,0,0,1,0,1,0,1,0,0,1,0,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,1,1,0,0,0,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,1,1,0,0,1,0,0,0,1,1,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,1,0,0,1,1,0,1,1,0,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,1,0,1,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,1,0,1,1,1,1,1,1,0,0,0,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,1,0,0,0,1,1,0,1,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,0,0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,0,1,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,1,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,1,1,0,0,0,0,1,0,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,1,0,1,1,0,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,1,1,1,0,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,0,1,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,1,1,0,0,1,0,0,0,0,1,0,1,1,1,1,1,1,0,0,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,0,0,1,1,1,1,0,1,0,1,0,1,1,0,0,0,1,1,1,0,0,1,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,0,0,0,1,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,0,0,1,0,1,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,1,0,0,1,0,0,0,0,0,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,0,0,0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1,1,1,1,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,1,1,0,1,0,0,0,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,1,0,1,1,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,0,1,1,1,1,1,1,1,1,0,1,0,0,1,1,0,0,1,1,1,0,0,1,0,1,0,0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,1,1,0,0,0,1,1,0,1,1,0,1,1,0,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,1,1,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,1,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,0,1,1,0,1,0,0,1,0,1,0,0,1,1,1,0,1,0,0,1,0,0,1,1,1,0,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,0,0,1,0,0,1,0,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,0,0,1,0,1,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,1,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,1,1,0,1,0,1,0,1,1,1,0,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,1,1,1,0,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,1,0,0,1,1,0,0,0,1,0,0,0,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,1,1,0,1,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,1,1,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0,1,1,0,1,1,1,0,1,0,1,0,1,0,0,1,1,1,1,1,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,0,0,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,1,1,1,1,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,1,1,0,1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,1,1,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,1,1,1,0,0,0,1,0,0,1,1,1,1,1,0,1,1,0,0,1,1,0,0,0,1,1,0,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,0,1,0,0,1,0,1,1,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,0,1,0,1,1,1,1,0,0,0,1,0,1,0,1,0,1,1,0,1,1,0,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,0,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,0,0,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,0,0,1,0,1,1,1,1,0,1,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,0,0,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,1,1,0,0,1,1,1,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,1,1,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,1,1,0,1,0,1,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,1,1,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,1,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,1,0,0,1,1,1,0,0,1,0,1,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0,1,1,0,0,1,0,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,1,0,1,1,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,1,1,1,0,0,1,0,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,1,1,0,0,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,1,0,0,0,1,1,0,1,1,0,1,0,1,0,1,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,1,0,1,1,1,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,1,1,0,0,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,0,0,1,0,0,1,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,0,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,0,1,0,1,1,1,0,0,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,1,1,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,0,1,0,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,1,0,0,1,1,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,1,1,1,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,0,1,0,1,0,0,1,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,0,1,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0] ], 2]]; fi; if YouWantThisCode( 172, 11, 80, "Ja" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 12, 78, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 24, 61, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 28, 58, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 32, 53, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 43, 45, "Gra" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 48, 41, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 52, 39, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 56, 37, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 18, 70, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 37, 50, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 61, 35, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 8, 85, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 10, 82, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 14, 76, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 16, 74, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 29, 58, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 65, 34, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 72, 31, "TTH" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,0,1,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,1,0,1,1,0,1,1,1,0,1,0,0,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0], [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,0,1,1,0,0,1,0,1,1,0,0,0,1,0,1,1,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,1,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,1,0,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,1,1,1,0,0,0,1,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,1,1,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,0,1], [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,0,1,0,1,1,0,1,1,1,1], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,1,1,1,1,0,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,1,1,0,0,1,0,1,1,1,0,0,1,0,1,0,1,0,1,1,1,1,0,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1], [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,1,0,1,1,1,1,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,1,0,1,1,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,1,1,0,0,1,0,0,0,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,0,0,0,1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,0,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,1,1,1,0,0,1,0,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1,0,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,1,0,1,0,1,1,1,0,0,0,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,1,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,1,0,1,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,1,0,1,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,0,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,1,0,1,0,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,1,1,1,1,1,0,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,1,1,0,0,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,1,1,1,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,1,1,0,0,0,1,0,1,1,1,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,1,0,1,0,1,1,0,0,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,0,0,1,0,0,0,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,1,0,0,0,0,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0,1,0,1,0,1,1,1,1,0,0,1,1,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,1,1,1,0,1,1,1,0,0,1,0,1,0,0,0,1,1,1,1,0,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,1,1,0,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,0,1,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,1,1,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,1,0,0,1,0,0,1,1,0,0,1,1,1,0,1,0,0,1,0,0,1,0,0,1,0,1,1,0,1,0,0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,1,0,0,0,1,0,1,1,0,0,1,1,1,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,1,1,0,1,1,1,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,1,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,1,0,1,1,1,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,0,1,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1,1,0,1,0,1,0,1,0,1,1,0,0,0,0,1,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,1,1,1,0,0,0,1,0,0,0,1,0,1,1,0,0,0,0,1,1,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,1,0,1,1,0,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,0,0,1,0,1,0,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,1,1,0,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,0,0,0,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,1,1,1,0,0,1,1,1,0,1,0,1,0,0,0,0,1,0,1,0,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,1,1,1,1,1,0,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,1,1,0,1,1,1,0,1,1,1,0,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,0,1,0,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,1,0,0,1,0,0,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,1,0,1,1,1,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,0,1,1,1,0,1,0,1,0,0,1,1,0,1,0,0,1,1,1,0,1,1,1,0,0,1,0,1,0,1,1,0,0,1,1,0,0,1,1,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,0,1,1,0,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,1,0,1,1,0,1,1,0,0,0,1,0,0,0,0,0,1,1,0,1,0,1,1,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,0,1,1,0,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,1,0,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,0,1,1,0,1,0,1,0,1,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,0,1,0,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,1,0,1,0,1,1,1,0,0,0,1,0,0,1,0,0,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0,1,0,1,0,0,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,1,1,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,1,0,1,0,1,0,1,0,0,1,1,0,1,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,0,1,0,1,1,1,1,1,0,0,0,1,0,1,1,0,0,0,0,1,1,0,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,1,0,1,0,0,1,0,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,0,1,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,0,1,0,1,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,1,0,1,1,0,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,0,1,0,0,0,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,0,1,0,0,1,0,0,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,0,1,1,0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,0,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,1,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,1,1,0,0,1,0,0,0,1,1,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,1,1,1,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,0,0,0,1,1,0,0,1,0,1,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,1,0,0,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,1,1,1,0,0,1,1,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,0,0,1,0,0,1,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,1,1,1,0,1,1,1,1,1,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,1,1,1,1,0,1,0,0,0,1,0,0,1,1,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,0,0,0,0,0,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,0,1,1,1,0,0,1,0,0,0,1,1,0,1,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,1,1,0,1,0,0,1,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,0,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,1,0,1,0,1,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,0,1,1,1,1,0,0,1,0,1,0,1,0,1,1,1,1,0,1,1,0,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,0,0,1,1,0,0,1,0,1,1,1,1,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,1,0,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,0,0,1,0,1,1,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,1,0,0,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,1,0,0,1,1,1,1,1,0,1,1,0,0,1,1,0,0,0,1,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,0,0,1,0,0,0,1,1,0,0,1,1,1,0,1,0,1,1,0,0,0,0,1,1,1,0,1] ], 2]]; fi; if YouWantThisCode( 174, 81, 28, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 86, 26, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 91, 24, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 9, 84, "Ja2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 12, 80, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 20, 68, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 24, 64, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 28, 60, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 32, 56, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 36, 52, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 40, 48, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 47, 44, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 8, 87, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 9, 85, "Gra" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 10, 84, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 11, 82, "EB2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 14, 78, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 16, 76, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 19, 69, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 29, 60, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 33, 56, "DaH" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [0,1,0,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [1,0,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1], [0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0], [0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,1,1,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,0,0,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1], [0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1], [0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,1,0,0,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0], [0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,0,1,0,1,1,1,1,0,1,1,0,1,0,0,1,1,1,0,1,0,0,1,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,0,0,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,0,0,1,0,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,0,1,0,0,1,1,0,0,0,0,0,1,1,1,1,0,1,0,0,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,1,1,1,0,0,1,0,0,0,1,0,1,1,0,1,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,1,0,1,1,1,1,0,1,0,1,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,1,1,1,0,1,1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,1,1,1,0,1,1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,0,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,1,1,0,1,0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,0,1,0,0,1,1,1,1,1,1,1,1,0,1,0,0,1,1,0,1,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,1,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,1,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,0,1,0,0,1,0,0,1,1,0,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,0,1,0,1,0,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,0,0,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,0,1,0,0,1,0,1,1,0,1,1,1,0,0,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,1,1,1,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,1,0,0,1,1,0,1,1,0,1,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,1,1,1,0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,1,0,0,1,1,0,1,1,0,1,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,0,1,0,0,1,0,0,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,0,1,0,0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,0,1,1,0,1,1,0,1,1,0,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,0,0,0,1,1,1,1,1,1,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,1,0,0,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,0,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,1,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,1,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,1,0,0,1,1,0,0,0,0,1,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,1,0,1,0,0,1,1,0,0,1,1,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,0,1,1,0,1,0,0,0,0,1,1,0,0,0,1,1,1,1,1,1,1,0,1,1,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1,1,1,1,1,0,1,0,0,0,0,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,0,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0,1,1,1,1,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,1,1,0,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,0,1,0,0,1,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,0,0,1,0,1,0,1,0,0,1,1,0,0,1,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1] ], 2]]; fi; if YouWantThisCode( 179, 40, 50, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 42, 47, "Gra" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 48, 44, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 9, 87, "Gu9" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 11, 84, "EB2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 12, 82, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 14, 80, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 16, 78, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 18, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 20, 69, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 21, 68, "BY" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 24, 65, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 28, 61, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 32, 57, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 52, 42, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 56, 40, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 60, 38, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 65, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 70, 34, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 75, 32, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 81, 30, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 86, 28, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 91, 26, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 10, 86, "Zwa" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 27, 64, "DaH" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,1,1,0,0,1,1,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1], [0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,1,1,0,0,1,1,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1], [0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,1,0,1,1,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0], [0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,1,0,1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1], [0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,1,0,0,1,0,1,1,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,1,0,1,1,1,1,1,1,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,1,0,0,1,1,0,1,1,1,0,1,0,1,0,1,1,0,1,0,0,0,0,1,0,0,1,1,1,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,1,1,0,1,0,1,1,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1], [0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,1,0,1,1,1,1,1,1,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,1,0,0,1,1,0,1,1,1,0,1,0,1,0,1,1,0,1,0,0,0,0,1,0,0,1,1,1,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,1,1,0,1,0,1,1,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,0,1,1,1,1,0,1,1,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,0,1,0,1,1,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1,1,1,1,0,1,1,0,1,0,1,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,0,1,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,1,0,1,0,0,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,1,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,0,0,1,1,1,0,0,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,1,0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,0,0,0,1,1,0,1,0,0,1,0,0,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,1,0,0,1,1,1,1,0,1,0,1,1,0,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,1,0,1,1,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,1,0,1,1,1,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,1,0,1,1,1,1,1,1,1,0,0,1,0,1,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,1,1,0,1,0,0,0,1,1,1,1,0,1,0,1,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,0,0,1,0,0,1,1,0,1,0,0,0,1,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,1,1,1,0,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,1,0,0,0,1,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,0,0,0,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,1,1,1,0,1,0,0,1,1,1,1,0,0,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,1,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,1,0,0,1,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,1,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1] ], 2]]; fi; if YouWantThisCode( 182, 36, 56, "DaH" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [0,0,1,1,1,0,1,0,1,0,1,0,1,1,0,1,0,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,1,1,1,1,1,0,0,1,0,1,0,1,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,1,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,1,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0], [0,0,0,1,0,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1,1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,1,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1], [0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0], [0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,0,0,1,0,0,0,0,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,1,1,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,1,1,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1], [0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,1,1,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,0,1,1,0,0,1,1,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,1,0,0,0,0,1,1,0,1,0,0,1,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,1,1,1,0,1,0,1,0,1,1,1,1,1,0,0,1,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,1,1,1,0,1,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,0,1,0,1,0,0,0,1,1,0,1,0,0,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,1,0,0,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,0,1,1,0,1,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,1,0,0,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,0,1,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,0,1,1,0,1,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,1,0,1,0,0,0,1,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,1,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,1,0,1,0,0,0,1,1,1,1,0,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,1,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,1,0,1,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,1,0,1,1,0,0,1,1,1,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,1,1,0,1,0,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,1,1,0,1,1,0,1,0,0,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,0,0,1,0,0,1,0,1,0,0,1,1,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,1,1,0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,1,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,0,1,1,0,1,1,1,1,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,1,0,1,1,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,0,1,1,1,1,0,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,0,0,0,0,1,0,0,0,1,0,1,1,0,0,0,0,1,1,1,1,1,0,1,1,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,0,1,0,1,1,1,0,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,0,1,1,0,1,0,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,1,0,1,1,1,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,1,1,1,1,1,0,0,1,0,1,0,1,0,0,1,0,0,1,1,1,0,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,1,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,1,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0] ], 2]]; fi; if YouWantThisCode( 183, 8, 90, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 11, 86, "EB2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 12, 84, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 14, 82, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 16, 80, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 40, 52, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 47, 46, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 10, 88, "Zwa" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 20, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 24, 68, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 28, 64, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 32, 60, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 37, 56, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 46, 48, "Gra" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 52, 44, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 56, 42, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 60, 40, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 9, 90, "EB2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 11, 88, "EB2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 12, 86, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 14, 84, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 16, 82, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 39, 54, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 42, 52, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 49, 46, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 70, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 75, 34, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 86, 30, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 91, 28, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 96, 26, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 8, 93, "Bel" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 18, 77, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 20, 73, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 21, 72, "BY" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 24, 69, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 25, 68, "BY" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 28, 65, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 32, 61, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 33, 60, "BY" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 36, 57, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 40, 53, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 9, 92, "EB2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 11, 90, "EB2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 12, 88, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 14, 86, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 16, 84, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 30, 64, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 39, 56, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 43, 52, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 52, 46, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 56, 44, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 64, 40, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 69, 38, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 116, 21, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 124, 19, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 128, 17, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 136, 15, "Su" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 144, 13, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 152, 11, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 11, 92, "EB2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 14, 88, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 16, 86, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 20, 76, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 24, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 28, 68, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 32, 64, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 36, 60, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 40, 56, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 45, 52, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 65, 40, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 70, 38, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 75, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 80, 34, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 86, 32, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 91, 30, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 96, 28, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 101, 26, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 9, 94, "B2x" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 18, 80, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 9, 95, "B2x" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 11, 93, "B2x" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 12, 89, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 16, 88, "BZ" ) then GUAVA_TEMP_VAR := false; fi; # This lower-bound of 57 on the following code is probably a mistake. # I think the codes contributed by "Dup" are binary cyclic codes. # There are 1365 inequivalent (with the respect to the definition given # in Berlekamp's book) [195,41] cyclic codes. I've computed all the # minimum distance of these codes and the highest I've found was 56. # CJ if YouWantThisCode( 195, 41, 57, "Dup" ) then GUAVA_TEMP_VAR := false; fi; # Similarly, there does not exists cyclic code with this parameters # [195, 42, 56]. There are 1365 inequivalent [195, 42] cyclic codes and # the minimum distance of all codes is < 56. I'm pretty sure the codes # contributed by "Dup" is cyclic. # CJ if YouWantThisCode( 195, 42, 56, "Dup" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 53, 49, "MMT" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("110010000000001001010001101110001110010111100110100100010110100100000010100100010011011110011110100010101100101010110101111111011110110010000110000000000000000000000000000000000000000000000000000")]], 195, GF(2)]]; fi; if YouWantThisCode( 195, 55, 47, "MMT" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("111011000110100010010001010001110010111010011010010011100011100001101100000110010110101001011010111101000010000101001110111010000100011010111000000000000000000000000000000000000000000000000000000")]], 195, GF(2)]]; fi; if YouWantThisCode( 195, 61, 43, "MMT" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("110100101101000011000011111100100111000110010111001100011011011011101101101000100101010110111110010001001100110101000111001010010110111000000000000000000000000000000000000000000000000000000000000")]], 195, GF(2)]]; fi; if YouWantThisCode( 195, 65, 42, "MMT" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("101110101111010100010110000000100111111001011111011100111101100001101110011011111110010010010011101011110100011100000100000111000110000000000000000000000000000000000000000000000000000000000000000")]], 195, GF(2)]]; fi; if YouWantThisCode( 196, 20, 77, "Gra" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 21, 76, "BY" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 24, 73, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 25, 72, "BY" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 28, 69, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 29, 68, "BY" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 32, 65, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 33, 64, "BY" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 36, 61, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 37, 60, "BY" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 44, 53, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 56, 45, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 8, 97, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 11, 95, "EB2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 14, 89, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 70, 40, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 75, 38, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 80, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 91, 32, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 96, 30, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 101, 28, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 12, 91, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 86, 34, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 18, 81, "Gra" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 20, 80, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 24, 76, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 28, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 32, 68, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 36, 64, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 40, 60, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 44, 56, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 48, 52, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 62, 44, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 66, 41, "Gra" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 81, 36, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 97, 29, "Ch" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 8, 99, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 9, 97, "EB2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 14, 91, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 15, 90, "EB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 16, 89, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 18, 83, "Gra" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 42, 57, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 51, 51, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 19, 81, "CZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 13, 94, "EB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 21, 80, "Sab" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 41, 60, "Dup" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1101000100100001000000001001011011111100100011010001110100110101011011111001101111111110110011111011010101100101110001011000100111111011010010000000010000100100010110000000000000000000000000000000000000000")]], 205, GF(2)]]; fi; if YouWantThisCode( 205, 45, 55, "Gra" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 56, 48, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 60, 46, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 9, 99, "EB2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 15, 92, "EB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 18, 85, "Gra" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 52, 51, "Gra" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 75, 39, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 96, 31, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 101, 29, "Ch" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 8, 102, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 11, 98, "EB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 12, 96, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 14, 94, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 16, 91, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 49, 54, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 86, 35, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 91, 33, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 108, 27, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 116, 25, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 124, 23, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 20, 81, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 28, 73, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 32, 69, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 36, 65, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 40, 61, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 44, 57, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 97, 31, "Gra" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 18, 87, "Gra" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 24, 78, "LLX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 9, 101, "EB2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 11, 100, "EB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 14, 96, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 15, 94, "EB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 19, 84, "CZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 23, 80, "DaH" ) then GUAVA_TEMP_VAR := [GeneratorMatCode, [Z(2)^0*[ [1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1], [0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0], [0,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,1], [0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,0,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0], [0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,1,0,1,1,1,1,0,0,1,0,0,1,1,0,1,1,0,0,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,1,1,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,1,1,0], [0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,1,0,1,0,1,0,0,1,1,1,0,0,1,1,0,0,0,1,0,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,0,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,1,0,0,0,0,1,1,0,1,1,0], [0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,1,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,0,0,1,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,1,1,1,1,1,0,1,0,0,1,0,1,0,1,0,0,1,1,0,1,0,0,0,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,0,1,0,1,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,0,0,0,1,1,0,0,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,0,0,0,1,1,1], [0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,0,1,1,0,0,0,1,0,1,1,0,1,1,0,1,1,0,1,1,0,0,1,1,0,0,1,0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,1,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,0,0,1,1,0,1,0,1,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,0,0,0,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,0,0,1,1,0,1,1,1,0,1,1,1,1,0,0,0,1,1,1,0,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,0,1,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,1,1,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,0,1,0,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,0,1,0,1,0,1,1,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,1,0,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,1,0,1,1,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,1,0,1,1,0,1,0,1,0,0,1,0,1,0,1,1,0,0,0,0,1,0,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,1,1,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,0,1,1,1,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,1,1,0,0,1,1,0,0,1,1,1,1,0,1,1,0,1,0,1,0,0,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,1,1,0,0,1,0,1,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,1,0,0,1,0,0,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,0,0,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,1,0,0,1,0,0,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,0,0,1,0,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,1,0,1,1,0,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,1,1,1,0,1,0,1,1,0,0,1,1,0,0,1,0,1,1,1,0,1,0,1,0,0,0,0,1,0,1,1,1,0,0,0,1,1,1,0,1,0,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,0,0,1,1,0,0,0,1,1,0,0,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0] ], 2]]; fi; if YouWantThisCode( 207, 50, 54, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 56, 50, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 60, 48, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 64, 46, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 73, 42, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 16, 93, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 20, 83, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 24, 79, "Gra" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 28, 75, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 32, 71, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 36, 67, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 40, 63, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 44, 59, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 21, 82, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 45, 57, "Gra" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 106, 29, "Ch" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 8, 105, "Bel" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 9, 103, "EB2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 12, 98, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 15, 96, "EB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 11, 102, "EB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 13, 97, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 16, 95, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 17, 89, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 19, 86, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 51, 55, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 21, 84, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 41, 63, "Gra" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 52, 54, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 56, 52, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 60, 50, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 64, 48, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 68, 46, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 77, 42, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 8, 107, "Bel" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 12, 100, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 14, 97, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 46, 59, "Gra" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 96, 34, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 101, 32, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 11, 104, "EB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 17, 91, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 19, 88, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 24, 82, "LLX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 28, 78, "LLX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 32, 74, "LLX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 36, 70, "LLX" ) then GUAVA_TEMP_VAR := false; fi; # This lower-bound of 68 on the following code is probably a mistake. # I think the codes contributed by "Dup" are binary cyclic codes. # There are 990 inequivalent (with the respect to the definition given # in Berlekamp's book) [217,40] cyclic codes. I've computed all the # minimum distance of these codes and the highest I've found was 64. # CJ if YouWantThisCode( 217, 40, 68, "Dup" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 44, 62, "LLX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 48, 58, "LLX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 9, 106, "JS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 21, 86, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 12, 102, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 8, 109, "Bel" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 9, 107, "EB2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 14, 99, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 20, 88, "CZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 24, 84, "LLX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 28, 80, "LLX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 32, 76, "LLX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 36, 72, "LLX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 44, 64, "LLX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 48, 60, "LLX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 52, 56, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 56, 54, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 60, 52, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 64, 50, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 68, 48, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 72, 46, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 11, 106, "EB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 17, 93, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 12, 104, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 21, 88, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 46, 62, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 51, 58, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 106, 32, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 16, 97, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 38, 71, "Dup" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1000010011011011000111110101110000101110010101000100001111111100001100011100011001111101000001001111110101011101001100111101010101100000010110011010100101111010001110100000101010011010110000000000000000000000000000000000000")]], 223, GF(2)]]; fi; if YouWantThisCode( 223, 41, 65, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 11, 108, "EB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 14, 101, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 18, 91, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 20, 90, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 9, 110, "Gu9" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 12, 106, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 13, 104, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 17, 96, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 52, 58, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 56, 56, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 60, 54, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 64, 52, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 68, 50, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 72, 48, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 21, 90, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 41, 67, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 45, 63, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 49, 60, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 9, 111, "EB2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 14, 103, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 16, 99, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 18, 93, "PD" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 11, 110, "EB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 12, 108, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 20, 92, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 32, 77, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 33, 76, "BY" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 36, 73, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 40, 69, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 44, 65, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 48, 61, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 54, 58, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 73, 48, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 8, 113, "Bel" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 13, 105, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 17, 97, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 22, 89, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 21, 92, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 69, 50, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 11, 112, "EB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 12, 110, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 16, 101, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 20, 94, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 49, 61, "Gra" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 8, 115, "Bel" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 17, 99, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 32, 80, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 36, 76, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 40, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 44, 68, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 48, 64, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 52, 60, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 55, 58, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 59, 56, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 13, 107, "Gra" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 21, 94, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 30, 88, "MYI" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("11110100111100101011000011001001101011011101010000101011001011101010110100010111101001001010010000101100011001100100001110111100001000011010101011011100010101000010111101001100001000101010100000111010010100000000000000000000000000000")]], 233, GF(2)]]; fi; if YouWantThisCode( 234, 12, 112, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 16, 103, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 20, 96, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 22, 92, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 14, 105, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 23, 90, "B2x" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 8, 117, "Bel" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 17, 101, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 18, 99, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 21, 96, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 48, 65, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 49, 64, "BY" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 59, 57, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 61, 56, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 22, 94, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 9, 116, "GB5" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 14, 107, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 20, 99, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 11, 114, "EB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 13, 112, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 16, 105, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 17, 104, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 22, 96, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 48, 68, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 52, 64, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 59, 60, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 61, 58, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 64, 56, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 18, 103, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 25, 93, "MYI" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("1111101101100100100001101011100101010110000110111010101011010100011101111100110101000011010100111011101011011101101011101110010101100001010110011111011100010101101010101110110000110101010011101011000010010011011011111000000000000000000000000")]], 241, GF(2)]]; fi; if YouWantThisCode( 242, 9, 118, "Ja2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 17, 105, "PD" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 21, 100, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 12, 113, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 14, 109, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 16, 107, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 244, 8, 121, "Bel" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 244, 11, 116, "EB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 244, 20, 103, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 244, 48, 69, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 244, 49, 68, "BY" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 244, 52, 65, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 244, 53, 64, "BY" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 244, 64, 58, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 245, 9, 120, "JS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 245, 10, 117, "EB2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 245, 13, 113, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 245, 21, 102, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 246, 14, 111, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 246, 16, 109, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 246, 18, 107, "GG1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 246, 22, 97, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 247, 12, 115, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 248, 10, 119, "EB2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 248, 48, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 248, 52, 68, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 248, 56, 64, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 249, 11, 118, "EB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 249, 13, 115, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 250, 22, 99, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 11, 120, "GB6" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 48, 73, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 49, 72, "BY" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 52, 69, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 53, 68, "BY" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 252, 56, 65, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 253, 14, 113, "GG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 255, 25, 100, "Lun" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 255, 26, 98, "Dup" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("100111110110010101101100001010000110100111101011010100001000000010101110011010010100011011100000000111100111001001001100001100001011101001101011101110100100100010010000001000001011000010111001011011110010011110110110010110001001010000000000000000000000000")]], 255, GF(2)]]; fi; if YouWantThisCode( 255, 38, 90, "BCH" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("100011101011011111110110110100111101010010011001110011111100000110010111101011110110110011100000011000001010110111011000100111011011011110100010100110001110100101111110001100110001000111110110110100110111110001101001010000000000000000000000000000000000000")]], 255, GF(2)]]; fi; if YouWantThisCode( 255, 57, 65, "Gra" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("111111010000001000101010101110100010001010001110110101111001101101000010111001011001010111000010101101100000000111110111100010001100111111010101001011000111011100111010100011100101101010100001101010100000000000000000000000000000000000000000000000000000000")]], 255, GF(2)]]; fi; if YouWantThisCode( 255, 71, 61, "BCH" ) then GUAVA_TEMP_VAR := [BCHCode, [255, 1, 59, 2]]; fi; if YouWantThisCode( 255, 134, 34, "BCH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 13, 120, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 119, 2]]]]; fi; if YouWantThisCode( 256, 21, 112, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 111, 2]]]]; fi; if YouWantThisCode( 256, 22, 104, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 33, 96, "Rod" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[GeneratorPolCode, [[PolyCodeword, [Codeword("101001000101111011100000100010010000111101001001010000110101101111000110001011101110011110101011100110101111010111100111100010111001011100001011111011110010110011011101111101010110110000101001100000100111110110011001000010100000000000000000000000000000000")]], 255, GF(2)]]]]; fi; if YouWantThisCode( 256, 37, 92, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 91, 2]]]]; fi; if YouWantThisCode( 256, 45, 88, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 87, 2]]]]; fi; if YouWantThisCode( 256, 47, 86, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 85, 2]]]]; fi; if YouWantThisCode( 256, 48, 76, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 52, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 56, 68, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 63, 64, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 73, 58, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 79, 56, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 55, 2]]]]; fi; if YouWantThisCode( 256, 87, 54, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 53, 2]]]]; fi; if YouWantThisCode( 256, 91, 52, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 51, 2]]]]; fi; if YouWantThisCode( 256, 99, 48, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 47, 2]]]]; fi; if YouWantThisCode( 256, 107, 46, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 45, 2]]]]; fi; if YouWantThisCode( 256, 115, 44, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 43, 2]]]]; fi; if YouWantThisCode( 256, 123, 40, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 39, 2]]]]; fi; if YouWantThisCode( 256, 131, 38, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 37, 2]]]]; fi; if YouWantThisCode( 256, 139, 32, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 31, 2]]]]; fi; if YouWantThisCode( 256, 147, 30, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 29, 2]]]]; fi; if YouWantThisCode( 256, 155, 28, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 27, 2]]]]; fi; if YouWantThisCode( 256, 163, 26, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 25, 2]]]]; fi; if YouWantThisCode( 256, 171, 24, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 23, 2]]]]; fi; if YouWantThisCode( 256, 179, 22, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 21, 2]]]]; fi; if YouWantThisCode( 256, 187, 20, "XBC" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [255, 1, 19, 2]]]]; fi; if YouWantThisCode( 256, 192, 17, "BCH" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [257, 1, 9, 2]]]]; fi; if YouWantThisCode( 256, 200, 15, "Gp" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 208, 13, "BCH" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [127, 1, 23, 2]]]]; fi; if YouWantThisCode( 256, 216, 11, "Gp" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 256, 224, 9, "BCH" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[BCHCode, [257, 0, 6, 2]]]]; fi; if YouWantThisCode( 256, 232, 7, "Gp" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 257, 11, 121, "EB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 257, 17, 113, "Dup" ) then GUAVA_TEMP_VAR := [GeneratorPolCode, [[PolyCodeword, [Codeword("11110111110110100010011110100011110101100001110010111001010110011111000101101011101110001010111111110111011010110001000111000100011010110111011111111010100011101110101101000111110011010100111010011100001101011110001011110010001011011111011110000000000000000")]], 257, GF(2)]]; fi; if YouWantThisCode( 257, 38, 91, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 257, 46, 87, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 257, 64, 63, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 257, 74, 57, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 257, 80, 55, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 257, 88, 53, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 257, 92, 49, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 257, 100, 47, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 257, 108, 45, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 257, 116, 41, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 257, 124, 39, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 257, 132, 35, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 257, 140, 31, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 257, 148, 29, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 257, 156, 27, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 257, 164, 25, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 257, 172, 23, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 257, 180, 21, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 257, 188, 19, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 257, 241, 5, "GB" ) then GUAVA_TEMP_VAR := false; fi; guava-3.6/tbl/upperbd2.g0000644017361200001450000003367411026723452015035 0ustar tabbottcrontab############################################################################# ## #A upperbd2.g GUAVA library Reinald Baart #A & Jasper Cramwinckel #A & Erik Roijackers ## ## This file contains a reference and an upper bound on the minimum distance ## of a linear code over GF(2) of given word length and dimension. ## #H @(#)$Id: upperbd2.g,v 1.1.1.1 1998/03/19 17:31:44 lea Exp $ ## #Y Copyright (C) 1994, Vakgroep Algemene Wiskunde, T.U. Delft, Nederland ## #H CJ, 17 May 2006 #H Updated lower- and upper-bounds of minimum distance for GF(2), #H GF(3) and GF(4) codes. (Brouwer's table as of 11 May 2006) #H #H $Log: upperbd2.g,v $ #H Revision 1.1.1.1 1998/03/19 17:31:44 lea #H Initial version of GUAVA for GAP4. Development still under way. #H Lea Ruscio 19/3/98 #H #H #H Revision 1.2 1997/01/20 15:34:39 werner #H Upgrade from Guava 1.2 to Guava 1.3 for GAP release 3.4.4. #H #H Revision 1.1 1994/11/10 14:29:23 rbaart #H Initial revision #H ## GUAVA_TEMP_VAR := [ [ 12, 5, 4, "FP"], [ 25, 8, 9, "YH1"], [ 25, 15, 5, "Si"], [ 26, 13, 7, "Pu2"], [ 28, 6, 12, "BM"], [ 28, 8, 11, "DM"], [ 29, 11, 9, "Ja"], [ 29, 15, 7, "Ja"], [ 31, 7, 13, "vT3"], [ 33, 9, 12, "He"], [ 33, 12, 11, "Ja"], [ 34, 7, 15, "vT3"], [ 34, 24, 4, "BoV"], [ 35, 13, 11, "Ja"], [ 35, 17, 8, "Ja"], [ 36, 9, 14, "Ja"], [ 39, 10, 15, "Bou"], [ 39, 13, 13, "Ja"], [ 40, 6, 18, "BM"], [ 41, 8, 17, "BJV"], [ 42, 27, 7, "Ja"], [ 43, 13, 15, "Ja"], [ 43, 20, 11, "Ja"], [ 44, 8, 19, "DM"], [ 45, 18, 13, "Ja"], [ 48, 11, 19, "Ja"], [ 49, 9, 20, "Ja"], [ 49, 18, 15, "Ja"], [ 51, 14, 18, "Ja"], [ 53, 9, 23, "Bro"], [ 55, 7, 25, "vT4"], [ 55, 13, 21, "Ja"], [ 55, 39, 7, "Ja"], [ 57, 8, 25, "BJV"], [ 57, 12, 23, "Ja"], [ 58, 7, 27, "vT3"], [ 59, 14, 22, "Ja"], [ 59, 36, 10, "Ja"], [ 60, 7, 28, "Hel"], [ 60, 8, 27, "BJV"], [ 60, 21, 19, "Ja"], [ 63, 8, 28, "BJV"], [ 63, 11, 26, "Ja"], [ 64, 18, 22, "Ja"], [ 67, 8, 31, "DHM"], [ 67, 10, 29, "Ja"], [ 68, 15, 26, "Ja"], [ 68, 18, 24, "Ja"], [ 68, 48, 8, "Ja"], [ 69, 9, 31, "BGV"], [ 70, 46, 10, "Ja"], [ 70, 54, 6, "Ja"], [ 71, 13, 29, "Ja"], [ 72, 18, 26, "Ja"], [ 73, 7, 34, "Hel"], [ 73, 8, 33, "BJV"], [ 73, 12, 31, "Ja"], [ 74, 31, 20, "Ja"], [ 74, 34, 19, "Bro"], [ 74, 46, 12, "Ja"], [ 75, 28, 22, "Ja"], [ 76, 8, 35, "BJV"], [ 76, 15, 30, "Ja"], [ 76, 18, 28, "Ja"], [ 78, 46, 14, "Ja"], [ 79, 11, 34, "Ja"], [ 79, 28, 24, "Ja"], [ 79, 43, 16, "Ja"], [ 80, 8, 37, "BJV"], [ 80, 18, 30, "Ja"], [ 80, 25, 26, "Ja"], [ 80, 55, 10, "Ja"], [ 81, 60, 8, "Ja"], [ 82, 42, 18, "Ja"], [ 83, 8, 39, "DHM"], [ 83, 10, 37, "Ja"], [ 83, 39, 20, "Ja"], [ 83, 54, 12, "Ja"], [ 84, 15, 34, "Ja"], [ 84, 24, 29, "Bro"], [ 85, 7, 40, "Hel"], [ 85, 10, 38, "Ja"], [ 86, 13, 36, "Ja"], [ 87, 11, 38, "Ja"], [ 87, 38, 23, "Bro"], [ 88, 7, 42, "Hel"], [ 88, 8, 41, "BJV"], [ 88, 24, 31, "Bro"], [ 89, 36, 25, "Bro"], [ 89, 55, 15, "BK"], [ 90, 19, 35, "LP"], [ 90, 77, 5, "BK"], [ 91, 8, 43, "DMa"], [ 91, 49, 19, "BK"], [ 91, 53, 17, "Jo2"], [ 91, 74, 6, "Joplus"], [ 92, 24, 33, "Bro"], [ 92, 31, 29, "Bro"], [ 92, 35, 27, "Bro"], [ 93, 15, 39, "Bro"], [ 93, 18, 37, "Bro"], [ 93, 21, 35, "Bro"], [ 94, 13, 40, "Ja"], [ 94, 29, 31, "Bro"], [ 95, 8, 45, "DHM"], [ 95, 49, 21, "BK"], [ 96, 9, 44, "Ja"], [ 96, 11, 43, "Bro"], [ 96, 46, 23, "LP"], [ 96, 69, 11, "LP"], [ 97, 21, 37, "Bro"], [ 97, 28, 33, "Bro"], [ 97, 43, 25, "Bro"], [ 97, 66, 13, "BK"], [ 98, 8, 47, "DM"], [ 98, 19, 39, "Bro"], [ 98, 25, 35, "Bro"], [ 98, 40, 27, "Bro"], [ 98, 63, 15, "LP"], [ 99, 10, 45, "Ja"], [ 99, 14, 42, "Ja"], [100, 9, 47, "Bro"], [100, 17, 41, "Bro"], [100, 34, 31, "Bro"], [100, 77, 9, "LP"], [101, 21, 39, "Bro"], [101, 39, 29, "Bro"], [101, 58, 19, "Jo2"], [102, 10, 47, "Bro"], [102, 13, 44, "Ja"], [102, 25, 37, "Bro"], [102, 63, 17, "LP"], [103, 33, 33, "Bro"], [103, 56, 21, "BK"], [104, 11, 47, "Ja"], [104, 17, 43, "Bro"], [104, 20, 41, "Bro"], [104, 30, 35, "Bro"], [105, 54, 23, "BK"], [106, 25, 39, "Bro"], [107, 16, 45, "Bro"], [107, 48, 27, "LP"], [107, 52, 25, "BK"], [108, 14, 47, "Ja"], [108, 20, 43, "Bro"], [108, 30, 37, "Bro"], [108, 45, 29, "LP"], [108, 76, 13, "BK"], [109, 24, 41, "Bro"], [109, 38, 33, "Bro"], [109, 42, 31, "Bro"], [109, 73, 15, "BK"], [110, 83, 10, "Joplus"], [111, 11, 50, "Ja"], [111, 16, 47, "Bro"], [111, 29, 39, "Bro"], [111, 63, 21, "BK"], [112, 20, 45, "Bro"], [112, 37, 35, "Bro"], [112, 72, 17, "BK"], [113, 24, 43, "Bro"], [113, 27, 41, "Bro"], [113, 34, 37, "Bro"], [113, 69, 19, "Jo2"], [114, 62, 23, "BK"], [114, 96, 6, "Joplus"], [115, 16, 49, "Bro"], [115, 22, 45, "Bro"], [115, 59, 25, "BK"], [116, 11, 53, "Ja"], [116, 14, 51, "Ja"], [116, 20, 47, "Bro"], [116, 26, 43, "Bro"], [117, 34, 39, "Bro"], [117, 49, 31, "LP"], [117, 57, 27, "BK"], [118, 31, 41, "Bro"], [118, 42, 35, "Bro"], [118, 46, 33, "LP"], [118, 54, 29, "BK"], [119, 8, 57, "DMa"], [119, 11, 55, "Bro"], [119, 13, 53, "Ja"], [119, 16, 51, "Bro"], [119, 22, 47, "Bro"], [119, 39, 37, "Bro"], [119, 95, 9, "BK"], [120, 20, 49, "Bro"], [120, 26, 45, "Bro"], [121, 12, 55, "Bro"], [121, 72, 21, "BK"], [121, 84, 15, "BK"], [121, 88, 13, "LP"], [122, 18, 51, "Bro"], [122, 21, 49, "Bro"], [122, 31, 43, "Bro"], [122, 69, 23, "LP"], [122, 82, 16, "Joplus"], [123, 8, 59, "BJV"], [123, 16, 53, "Bro"], [123, 39, 39, "Bro"], [124, 14, 55, "Ja"], [124, 26, 47, "Bro"], [124, 36, 41, "Bro"], [124, 79, 19, "BK"], [125, 30, 45, "Bro"], [125, 64, 27, "BK"], [125, 68, 25, "BK"], [126, 10, 59, "Ja"], [126, 12, 57, "Ja"], [126, 18, 53, "Bro"], [126, 21, 51, "Bro"], [126, 97, 11, "BK"], [126,112, 5, "BK"], [127, 16, 55, "Bro"], [127, 25, 49, "Bro"], [127, 35, 43, "Bro"], [127, 50, 35, "BK"], [127, 54, 33, "LP"], [127, 62, 29, "BK"], [129, 12, 59, "Ja"], [129, 23, 51, "BK"], [129, 30, 47, "LP"], [129, 44, 39, "LP"], [129, 48, 37, "LP"], [129, 60, 31, "LP"], [130, 18, 55, "BK"], [130, 21, 53, "BK"], [130, 27, 49, "BK"], [130, 34, 45, "LP"], [131, 11, 60, "Ja"], [131, 16, 57, "BK"], [131, 77, 23, "LP"], [132, 9, 63, "Gur"], [132, 14, 59, "Ja"], [132, 22, 53, "BK"], [132, 32, 47, "LP"], [132, 43, 41, "LP"], [132, 91, 16, "Jo"], [133, 12, 60, "Ja"], [133, 17, 57, "LP"], [133, 40, 43, "LP"], [133, 75, 25, "LP"], [133, 96, 14, "Jo"], [134, 11, 62, "Ja"], [134, 21, 55, "BK"], [134, 27, 51, "BK"], [135, 16, 59, "BK"], [135, 31, 49, "BK"], [135, 90, 18, "Jo"], [136, 12, 62, "Ja"], [136, 22, 55, "BK"], [136,103, 12, "Jo"], [137, 17, 59, "BK"], [137, 26, 53, "BK"], [138, 8, 66, "Hel"], [138, 21, 57, "BK"], [138, 89, 20, "Jo"], [139, 16, 61, "BK"], [139, 31, 51, "BK"], [140, 14, 63, "Ja"], [140, 22, 57, "BK"], [140, 28, 53, "BK"], [141, 17, 61, "BK"], [141, 26, 55, "BK"], [141,117, 8, "Jo"], [142, 21, 59, "BK"], [143, 16, 63, "BK"], [144, 22, 59, "BK"], [144, 28, 55, "BK"], [145, 17, 63, "BK"], [145, 26, 57, "BK"], [145, 99, 18, "Jo"], [145,103, 16, "Jo"], [145,116, 10, "Jo"], [145,126, 6, "Jo"], [146, 21, 61, "BK"], [146, 23, 59, "BK"], [147, 11, 68, "Ja"], [147, 14, 66, "Ja"], [147, 16, 65, "BK"], [147, 18, 63, "BK"], [147, 27, 57, "BK"], [147, 97, 20, "Jo"], [147,109, 14, "Jo"], [148, 22, 61, "BK"], [149, 12, 68, "Ja"], [149, 32, 55, "BK"], [150, 11, 70, "Ja"], [150, 23, 61, "BK"], [150, 89, 26, "Jo"], [150, 96, 22, "Jo"], [151, 16, 67, "BK"], [151, 18, 65, "BK"], [151, 27, 59, "BK"], [152, 12, 70, "Ja"], [152, 22, 63, "BK"], [152,118, 12, "Jo"], [153, 17, 67, "BK"], [154, 23, 63, "BK"], [154, 29, 59, "BK"], [154, 96, 24, "Jo"], [155, 13, 71, "Ja"], [155, 16, 69, "BK"], [155, 18, 67, "BK"], [155, 27, 61, "BK"], [155, 33, 57, "BK"], [155, 37, 55, "BK"], [156, 22, 65, "BK"], [156, 91, 28, "Jo"], [157, 12, 72, "Ja"], [157, 17, 69, "BK"], [157,110, 18, "Jo"], [158, 23, 65, "BK"], [158, 29, 61, "BK"], [158,107, 20, "Jo"], [158,115, 16, "Jo"], [159, 16, 71, "BK"], [159, 18, 69, "BK"], [159, 27, 63, "BK"], [159, 33, 59, "BK"], [159, 97, 26, "Jo"], [160,105, 22, "Jo"], [161, 12, 75, "Ja"], [161, 92, 30, "Jo"], [162, 13, 74, "Ja"], [162,123, 14, "Jo"], [163, 97, 28, "Jo"], [163,104, 24, "Jo"], [164, 11, 77, "Ja"], [165, 10, 79, "Gur"], [165, 12, 76, "Ja"], [166, 11, 78, "Ja"], [166,136, 10, "Jo"], [167,104, 26, "Jo"], [168, 12, 78, "Ja"], [168, 14, 76, "Ja"], [168, 98, 30, "Jo"], [168,143, 8, "Jo"], [169,117, 20, "Jo"], [170, 13, 78, "Ja"], [170,122, 18, "Jo"], [171, 18, 75, "BK"], [171, 21, 73, "BK"], [171, 24, 71, "BK"], [171,104, 28, "Jo"], [171,115, 22, "Jo"], [171,136, 12, "Jo"], [172,128, 16, "Jo"], [173, 12, 80, "Ja"], [173, 17, 77, "BK"], [173, 19, 75, "BK"], [173,113, 24, "Jo"], [174, 23, 73, "BK"], [174, 26, 71, "BK"], [174,100, 32, "Jo"], [175, 16, 79, "BK"], [175, 18, 77, "BK"], [175, 33, 67, "BK"], [175, 39, 63, "BK"], [176, 12, 82, "Ja"], [176, 13, 81, "Ja"], [176, 24, 73, "BK"], [176,105, 30, "Jo"], [176,112, 26, "Jo"], [177, 17, 79, "BK"], [177, 19, 77, "BK"], [177, 28, 71, "BK"], [178, 10, 85, "Ja"], [178, 13, 82, "Ja"], [178,100, 34, "Jo"], [178,138, 14, "Jo"], [179, 18, 79, "BK"], [179, 23, 75, "BK"], [179, 29, 71, "BK"], [180, 10, 86, "Ja"], [180, 27, 73, "BK"], [180,112, 28, "Jo"], [180,166, 4, "Jo"], [181, 8, 88, "Hel"], [181, 12, 84, "Ja"], [181, 17, 81, "BK"], [181, 19, 79, "BK"], [181, 22, 77, "BK"], [181,106, 32, "Jo"], [181,128, 20, "Jo"], [182, 11, 86, "Ja"], [182,125, 22, "Jo"], [183, 16, 83, "BK"], [183, 18, 81, "BK"], [183, 23, 77, "BK"], [183,122, 24, "Jo"], [183,134, 18, "Jo"], [184, 8, 90, "Hel"], [184, 12, 86, "Ja"], [184, 13, 85, "Ja"], [184,112, 30, "Jo"], [184,164, 6, "Jo"], [185, 17, 83, "BK"], [185, 19, 81, "BK"], [185, 22, 79, "BK"], [185, 24, 77, "BK"], [186, 13, 86, "Ja"], [186,107, 34, "Jo"], [186,121, 26, "Jo"], [187, 9, 90, "Ja"], [187, 18, 83, "BK"], [187, 23, 79, "BK"], [187,142, 16, "Jo"], [188, 14, 86, "Ja"], [189, 12, 88, "Ja"], [189, 17, 85, "BK"], [189, 19, 83, "BK"], [189, 22, 81, "BK"], [189, 24, 79, "BK"], [189,113, 32, "Jo"], [189,120, 28, "Jo"], [190,104, 38, "Jo"], [191, 9, 92, "Ja"], [191, 13, 88, "Ja"], [192,109, 36, "Jo"], [192,156, 12, "Jo"], [192,161, 10, "Jo"], [193, 10, 92, "Ja"], [193, 12, 91, "BK"], [193,113, 34, "Jo"], [193,120, 30, "Jo"], [193,131, 24, "Jo"], [193,135, 22, "Jo"], [194, 20, 85, "BK"], [194, 25, 81, "BK"], [194, 28, 79, "BK"], [194,140, 20, "Jo"], [195, 9, 95, "BG3"], [195, 13, 90, "Ja"], [195, 23, 83, "BK"], [195, 32, 77, "BK"], [196, 10, 94, "Ja"], [196, 18, 87, "BK"], [196, 29, 79, "BK"], [196,109, 38, "Jo"], [196,130, 26, "Jo"], [197, 12, 92, "Ja"], [197, 17, 89, "BK"], [197, 22, 85, "BK"], [197, 24, 83, "BK"], [197, 33, 77, "BK"], [197,120, 32, "Jo"], [197,147, 18, "Jo"], [197,156, 14, "Jo"], [198, 28, 81, "BK"], [198,114, 36, "Jo"], [198,128, 28, "Jo"], [199, 13, 92, "Ja"], [199, 23, 85, "BK"], [199, 25, 83, "BK"], [200, 12, 94, "Ja"], [200, 18, 89, "BK"], [200, 21, 87, "BK"], [200, 29, 81, "BK"], [200, 35, 77, "BK"], [200,174, 8, "Jo"], [201, 8, 98, "Hel"], [201, 17, 91, "BK"], [201, 24, 85, "BK"], [201,120, 34, "Jo"], [201,127, 30, "Jo"], [202, 19, 89, "BK"], [203, 13, 95, "BK"], [203, 23, 87, "BK"], [203, 25, 85, "BK"], [204, 18, 91, "BK"], [204,116, 38, "Jo"], [204,141, 24, "Jo"], [204,158, 16, "Jo"], [205, 8,100, "Hel"], [205, 14, 95, "BK"], [205, 17, 93, "BK"], [205, 24, 87, "BK"], [205,146, 22, "Jo"], [206, 19, 91, "BK"], [206,121, 36, "Jo"], [206,128, 32, "Jo"], [206,139, 26, "Jo"], [207, 23, 89, "BK"], [207, 25, 87, "BK"], [207,136, 28, "Jo"], [207,152, 20, "Jo"], [208, 8,102, "Hel"], [208, 18, 93, "BK"], [208, 29, 85, "BK"], [208,113, 42, "Jo"], [209, 14, 97, "BK"], [209, 17, 95, "BK"], [209,117, 40, "Jo"], [209,127, 34, "Jo"], [210, 19, 93, "BK"], [210, 30, 85, "BK"], [211, 13, 99, "BK"], [211, 23, 91, "BK"], [211, 25, 89, "BK"], [211,122, 38, "Jo"], [211,136, 30, "Jo"], [212, 18, 95, "BK"], [212, 29, 87, "BK"], [213,162, 18, "Jo"], [214,118, 42, "Jo"], [214,128, 36, "Jo"], [214,135, 32, "Jo"], [215,178, 12, "Jo"], [216, 17, 99, "BK"], [216,123, 40, "Jo"], [217, 12,103, "BK"], [217, 14,101, "BK"], [217, 24, 93, "BK"], [217, 26, 91, "BK"], [217,149, 26, "Jo"], [217,153, 24, "Jo"], [217,175, 14, "Jo"], [218, 19, 97, "BK"], [218, 22, 95, "BK"], [218,128, 38, "Jo"], [218,135, 34, "Jo"], [218,146, 28, "Jo"], [219, 25, 93, "BK"], [219,159, 22, "Jo"], [220, 13,103, "BK"], [220, 18, 99, "BK"], [220, 20, 97, "BK"], [220, 31, 89, "BK"], [220,144, 30, "Jo"], [220,188, 10, "Jo"], [221, 24, 95, "BK"], [221, 26, 93, "BK"], [222, 19, 99, "BK"], [222,125, 42, "Jo"], [222,135, 36, "Jo"], [222,166, 20, "Jo"], [222,175, 16, "Jo"], [223,129, 40, "Jo"], [224,144, 32, "Jo"], [226,122, 46, "Jo"], [226,142, 34, "Jo"], [227, 9,111, "BG3"], [227,136, 38, "Jo"], [229,131, 42, "Jo"], [229,156, 28, "Jo"], [229,160, 26, "Jo"], [229,164, 24, "Jo"], [230, 11,111, "BK"], [230,178, 18, "Jo"], [231, 13,109, "BK"], [231, 16,107, "BK"], [231,143, 36, "Jo"], [231,154, 30, "Jo"], [232, 18,105, "BK"], [232, 20,103, "BK"], [232, 23,101, "BK"], [232,127, 46, "Jo"], [232,137, 40, "sp"], [232,171, 22, "Jo"], [232,211, 6, "Jo"], [233, 12,111, "BK"], [233, 17,107, "BK"], [233,152, 32, "Jo"], [234,132, 44, "Jo"], [234,142, 38, "Jo"], [236,137, 42, "Jo"], [236,151, 34, "Jo"], [237,210, 8, "Jo"], [238,181, 20, "Jo"], [239,143, 40, "Jo"], [239,150, 36, "Jo"], [240, 13,113, "BK"], [240, 17,111, "BK"], [240, 18,109, "BK"], [240,134, 46, "Jo"], [240,197, 14, "Jo"], [241,138, 44, "Jo"], [241,167, 28, "Jo"], [241,171, 26, "Jo"], [242,164, 30, "Jo"], [242,204, 12, "Jo"], [243,150, 38, "Jo"], [243,161, 32, "Jo"], [243,177, 24, "Jo"], [243,195, 16, "Jo"], [244,131, 50, "Jo"], [244,144, 42, "Jo"], [245, 12,117, "BK"], [245, 14,115, "BK"], [245, 17,113, "BK"], [245, 19,111, "BK"], [245, 21,109, "BK"], [245,159, 34, "Jo"], [246,139, 46, "Jo"], [247, 9,121, "DMa"], [247,150, 40, "Jo"], [247,185, 22, "Jo"], [247,194, 18, "Jo"], [248,144, 44, "Jo"], [249,159, 36, "Jo"], [250,136, 50, "Jo"], [251, 9,123, "Gur"], [252,141, 48, "Jo"], [252,151, 42, "Jo"], [252,158, 38, "Jo"], [252,173, 30, "Jo"], [252,177, 28, "Jo"], [253,145, 46, "Jo"], [253,170, 32, "Jo"], [254,183, 26, "Jo"], [254,221, 10, "sp"], [254,239, 4, "Jo"], [255,197, 20, "Jo"], [256,169, 34, "Jo"], [257,142, 50, "Jo"], [257,152, 44, "sp"], [257,159, 40, "sp"]]; guava-3.6/tbl/refs.g0000644017361200001450000007344011026723452014244 0ustar tabbottcrontab############################################################################# ## #A refs.g GUAVA library Reinald Baart #A & Jasper Cramwinckel #A & Erik Roijackers ## ## This file contains a record, which fields are references used in the ## tables. ## #H @(#)$Id: refs.g,v 1.1.1.1 1998/03/19 17:31:43 lea Exp $ ## #Y Copyright (C) 1994, Vakgroep Algemene Wiskunde, T.U. Delft, Nederland ## #H CJ, 17 May 2006 #H Updated lower- and upper-bounds of minimum distance for GF(2), #H GF(3) and GF(4) codes. (Brouwer's table as of 11 May 2006) #H #H $Log: refs.g,v $ #H Revision 1.1.1.1 1998/03/19 17:31:43 lea #H Initial version of GUAVA for GAP4. Development still under way. #H Lea Ruscio 19/3/98 #H #H #H Revision 1.2 1997/01/20 15:34:33 werner #H Upgrade from Guava 1.2 to Guava 1.3 for GAP release 3.4.4. #H #H Revision 1.2 1994/11/10 14:34:24 rbaart #H Removed spaces #H #H Revision 1.1 1994/11/10 14:29:23 rbaart #H Initial revision #H ## GUAVA_REF_LIST := rec( ask := ["%T this reference is unknown, for more info", "%T contact A.E. Brouwer (aeb@cwi.nl)"], CLC := ["%A C.L. Chen", "%T On a (145,32) binary cyclic code", "%J IEEE Trans. Inform. Theory", "%V 45", "%P 2546-2547", "%D Nov. 1999"], cy := ["%R Cyclic Code"], cyx := ["%R Construction X applied to cyclic Code"], XBZ := ["%R extended Blokh-Zyablov concatenated code"], XB := ["%R extended Blokh-Zyablov concatenated code"], X := ["%A N.J. Sloane, S.M. Reddy & C.L. Chen", "%T New binary codes", "%J IEEE Trans. Inform. Theory", "%V IT-18", "%P 503-510", "%D Jul. 1972", "%O Construction X"], XX := ["%A W.O. Alltop", "%T A method of extending binary linear codes", "%J IEEE Trans. Inform. Theory", "%V 30", "%P 871-872", "%D Nov. 1984", "%O Construction XX"], FP := ["%A A.B. Fontaine & W.W. Peterson", "%T Group code equivalence and optimum codes", "%J IRE Trans. Inform. Theory (Spec. Suppl.)", "%V IT-5", "%P 60-70", "%D May 1959"], QR := ["%R A quadratic residue code"], Wa := ["%A T.J. Wagner", "%T A remark concerning the minimum distance of binary group codes", "%J IEEE Trans. Inform. Theory", "%V IT-11", "%P 458", "%D July 1965"], HP := ["%A A.A. Hashim & V.S. Pozdniakov", "%T Computerized search for linear binary codes", "%J Electronics Letters", "%V 12", "%P 350-351", "%D July 1976"], YH1 := ["%A yvind Ytrehus & Tor Helleseth", "%T There is no binary [25,8,10] code", "%J IEEE Trans. Inform. Theory", "%V 36", "%P 695-696", "%D May 1990"], Si := ["%A J. Simonis", "%T Binary even [25,15,6] codes do not exist", "%J IEEE Trans. Inform. Theory", "%V IT-33", "%P 151-153", "%D Jan. 1987"], Pi2 := ["%A P. Piret", "%T Good linear codes of lengths 27 and 28", "%J IEEE Trans. Inform. Theory", "%V IT-26", "%P 227", "%D Mar. 1980"], Ch0 := ["%A C.L. Chen", "%T Construction of some binary linear codes of minimum distance five", "%J IEEE Trans. Inform. Theory", "%V 37", "%P 1429", "%D Sep 1991"], Pu2 := ["%A C.L.M. van Pul, [26,13,8] does not exist", "%R priv. comm", "%D 1985"], Ka := ["%A M. Karlin", "%T New binary coding results by circulants", "%J IEEE Trans. Inform. Theory", "%V IT-15", "%P 81-92", "%D Jan. 1969"], DM := ["%A S.M. Dodunekov & N.L. Manev", "%T An improvement of the Griesmer bound for some small minimum distances", "%J Discr. Appl. Math.", "%V 12", "%P 103-114", "%D Oct. 1985"], BM := ["%A L.D. Baumert & R.J. McEliece", "%T A note on the Griesmer bound", "%J IEEE Trans. Inform. Theory", "%V IT-19", "%P 134-135", "%D Jan. 1973"], XBC := ["%R Extended BCH code"], Ja := ["%A D.B. Jaffe", "%T Binary linear codes: new results on nonexistence", "%D 1996", "%O http://www.math.unl.edu/~djaffe/codes/code.ps.gz"], CS := ["%A Y. Cheng & N.J.A. Sloane", "%T Codes from symmetry groups", "%J SIAM J. Discrete Math.", "%V 2", "%P 28-37", "%D 1989"], vT3 := ["%A H.C.A. van Tilborg", "%T The smallest length of binary 7-dimensional linear codes with prescribed minimum distance", "%J Discr. Math.", "%V 33", "%P 197-207", "%D 1981"], HY2 := ["%A T. Helleseth & . Ytrehus", "%T How to find a [33,8,14]-code", "%R Report in Informatics (preliminary version), Dept. of Informatics, Univ. of Bergen, Norway", "%D Nov. 1989"], He := ["%A P.W. Heijnen", "%T Er bestaat geen binaire [33,9,13] code", "%R Afstudeerverslag, T.U. Delft", "%D Oct. 1993"], DHM := ["%A S.M. Dodunekov, T. Helleseth, N. Manev & . Ytrehus", "%T New bounds on binary linear codes of dimension eight", "%J IEEE Trans. Inform. Theory", "%V IT-33", "%P 917-919", "%D Nov. 1987"], Pi := ["%A P. Piret", "%T Good block codes derived from cyclic codes", "%J Electronics Letters", "%V 10", "%P 391-392", "%D Sep. 1974"], BoV := ["%A I.G. Bouyukliev & Z.G. Varbanov", "%T Some results for linear binary codes with minimum distance 5 and 6", "%R email", "%D Oct. 2004"], Mo := ["%A M. Morii", "%R email comm", "%D Sept. 1993"], BE := ["%A J. Bierbrauer & Y. Edel", "%T New code parameters from Reed-Solomon subfield subcodes", "%J IEEE Trans. Inf. Th.", "%V 43", "%P 953-968", "%D 1997"], FB := ["%A P. Farkas & K. Brhl", "%T Three best binary linear block codes of minimum distance fifteen", "%J IEEE Trans. Inf. Th.", "%V 40", "%P 949-951", "%D 1994"], Bou := ["%A I. Boukliev", "%T Some new bounds on minimum length for quaternary codes of dimension five", "%R preprint", "%D July 1994"], RR := ["%A V.V. Rao & S.M. Reddy", "%T A (48,31,8) linear code", "%J IEEE Trans. Inform. Theory", "%V IT-19", "%P 709-711", "%D Sep. 1973"], BJV := ["%A I Bouyukliev, D.B. Jaffe & V. Vavrek", "%T The smallest length of eight-dimensional binary linear codes with prescribed minimum distance", "%R preprint", "%D 1999"], vT1 := ["%A H.C.A. van Tilborg", "%T On quasi-cyclic codes with rate 1/m", "%J IEEE Trans. Inform. Theory", "%V IT-24", "%P 628-630", "%D Sep. 1978"], BZ := ["%A E. L. Blokh & V. V. Zyablov", "%T Coding of generalized concatenated codes", "%J Probl. Inform. Transm.", "%V 10", "%P 218-222", "%D 1974"], Bo0 := ["%A I Boukliev", "%R private comm", "%D 1995-1997"], Bel := ["%R Belov"], Gu9 := ["%A T. A. Gulliver", "%R personal communications", "%D 1993-1998"], DJ := ["%A R. Dougherty & H. Janwa", "%T Covering radius computations for binary cyclic codes", "%J Math. Comput.", "%V 57", "%P 415-434", "%D July 1991"], GB5 := ["%A T. A. Gulliver & V. K. Bhargava", "%T New optimal binary linear codes of dimensions 9 and 10", "%J IEEE Trans. Inform. Theory", "%V 43", "%P 314-316", "%D 1997"], GG := ["%A B. Groneick & S. Grosse", "%T New binary codes", "%J IEEE Trans. Inform. Theory", "%V 40", "%P 510-512", "%D 1994"], EB3 := ["%A Y. Edel & J. Bierbrauer", "%T Inverting Construction Y1", "%R preprint", "%D 1997"], B2x := ["%A See A.E. Brouwer & T. Verhoeff", "%T An updated table of minimum-distance bounds for binary linear codes", "%J IEEE Trans. Inform. Th.", "%V 39", "%P 662-677", "%D 1993"], Pu := ["%A C.L.M. van Pul", "%T On bounds on codes", "%R Master's Thesis, Dept. of Math. and Comp. Sc., Eindhoven Univ. of Techn., The Netherlands", "%D Aug. 1982"], LC := ["%A M. Loeloeian & J. Conan", "%T A [55,16,19] binary Goppa code", "%J IEEE Trans. Inform. Theory", "%V IT-30", "%P 773", "%D Sep. 1984"], Bro := ["%A A.E. Brouwer", "%T The linear programming bound for binary linear codes", "%J IEEE Trans. Inform. Th.", "%V 39", "%P 677-680", "%D 1993"], vT4 := ["%A H.C.A. van Tilborg", "%T A proof of the nonexistence of a binary (55,7,26) code", "%R TH-Report 79-WSK-09, Techn. Hogeschool Eindhoven", "%D Nov. 1979"], Ja2 := ["%A D. Jaffe", "%R email", "%D 970828, 970907, 970923, 971111, 980112, 980323"], MoY := ["%A M. Morii & T. Yoshimura", "%R email comm", "%D Nov 1993-Jan 1994"], BCH := ["%A T. Kasami & N. Tokura", "%T Some remarks on BCH bounds and minimum weights of binary primitive BCH codes", "%J IEEE Trans. Inform. Theory", "%V IT-15", "%P 408-413", "%D May 1969"], SRC := ["%A N.J.A. Sloane, S.M. Reddy & C.L. Chen", "%T New binary codes", "%J IEEE Trans. Inform. Theory", "%V IT-18", "%P 503-510", "%D July 1972"], We := ["%A S. Weijs", "%T A computer search for quasi-cyclic codes", "%R afstudeerverslag (M.Sc. Thesis), Techn. Univ. Eindhoven", "%D June 1997", "%O See also P. Heijnen, H. van Tilborg, T. Verhoeff & S. Weijs, Some new binary, quasi-cyclic codes, IEEE Trans. Inf. Th., to appear"], Ch := ["%A Y. Cheng", "%T New linear codes constructed by concatenating, extending, and shortening methods", "%J IEEE Trans. Inform. Theory", "%V IT-33", "%P 719-721", "%D Sept. 1987"], CDJ := ["%A Huy T. Cao, Randall L. Dougherty & Heeralal Janwa", "%T A [55,16,19] binary Goppa code and related codes, having large minimum distance", "%J IEEE Trans. Inform. Theory", "%V 37", "%P 1432", "%D Sep. 1991"], Hel := ["%A T. Helleseth", "%T A characterization of codes meeting the Griesmer bound", "%J Inform. & Control", "%V 50", "%P 128-159", "%D 1981"], Sa := ["%A Amir Said", "%R private comm", "%D 910510 and 911121"], GW2 := ["%A M. Grassl & G. White", "%T New Codes from Chains of Quasi-cyclic Codes", "%R ISIT", "%D 2005"], GG1 := ["%A B. Groneick & S. Grosse", "%R priv. comm. and comm. via W. Scharlau", "%D 1992-1993"], CZ := ["%A Chen Zhi", "%T Six new binary quasi-cyclic codes", "%J IEEE Trans. Inf. Theory", "%V 40", "%P 1666-1667", "%D 1994"], GB0 := ["%A T. Aaron Gulliver & Vijay K. Bhargava", "%T Nine good rate (m-1)/pm quasi-cyclic codes", "%J IEEE Trans. Inform. Th.", "%V 38", "%P 1366-1369", "%D July 1991"], To := ["%A L.M.G.M. Tolhuizen", "%T On the optimal use and the construction of linear block codes", "%R Master's Thesis, Dept. of Math. and Comp. Sc., Eindhoven Univ. of Techn., The Netherlands", "%D Nov. 1986"], To2 := ["%A Ludo M.G.M. Tolhuizen", "%T Two new binary codes obtained by shortening a generalized concatenated code", "%J IEEE Trans. Inform. Theory", "%V 37", "%P 1705", "%D Nov. 1991"], ZL := ["%A V.A. Zinoviev & S.N. Litsyn", "%T Methods of code lengthening", "%J Problemy Peredachi Informatsii", "%V 18", "%P 29-42", "%D Oct-Dec 1982", "%O (English translation: pp. 244-254)"], EB2 := ["%A Y. Edel & J. Bierbrauer", "%T Twisted BCH codes", "%J J. of Combinatorial Designs", "%V 5", "%P 377-389", "%D 1997"], BEx := ["%A J. Bierbrauer & Y. Edel", "%T New code parameters from Reed-Solomon subfield subcodes", "%J IEEE Trans. Inf. Th.", "%V 43", "%P 953-968", "%D 1997"], JS := ["%A D. Jaffe & J. Simonis", "%R email", "%D 970722, 980217"], GB1 := ["%A T. A. Gulliver & V. K. Bhargava", "%T Two new rate $2/p$ binary quasi-cyclic codes", "%J IEEE Trans. Inf. Theory", "%V 40", "%P 1667-1668", "%D 1994"], BET := ["%A J. Bierbrauer, Y. Edel & L. Tolhuizen", "%T New codes via the lengthening of BCH codes with UEP codes", "%R preprint", "%D 1997"], Hg := ["%A H.J. Helgert", "%T Alternant codes", "%J Inform. Contr.", "%V 26", "%P 369-380", "%D Dec. 1974"], BDH := ["%A I. Boukliev, S. M. Dodunekov, T. Helleseth & . Ytrehus", "%T On the [162,8,80;2] codes", "%R preprint", "%D 1996"], HS := ["%A H.J. Helgert & R.D. Stinaff", "%T Shortened BCH codes", "%J IEEE Trans. Inform. Theory", "%V IT-19", "%P 818-820", "%D Nov. 1973"], BK := ["%A Detlef Berntzen & Peter Kemper", "%R email", "%D Feb. 1993"], LP := ["%R Follows from the linear programming bound"], DMa := ["%A S. M. Dodunekov & N. L. Manev", "%T An improvement of Greismer bound for some classes of distances", "%J Probl. Peredachi Informatsii", "%V 23", "%P 47-56", "%D 1987", "%O (Russian); English transl. in Problems of Inform. Transm. 23 (1987) 38-46"], Jo2 := ["%A S.M. Johnson", "%T On upper bounds for unrestricted binary error-correcting codes", "%J IEEE Trans. Inform. Theory", "%V IT-17", "%P 466-478", "%D July 1971"], DaH := ["%A Rumen Daskalov & Plamen Hristov", "%T New One-Generator Quasi-Cyclic Codes over GF(7)", "%R preprint", "%D Oct 2001", "%O R. Daskalov & P Hristov, New One-Generator Quasi-Twisted Codes over GF(5), (preprint) Oct. 2001. R. Daskalov & P Hristov, New Quasi-Twisted Degenerate Ternary Linear Codes, preprint, Nov 2001. Email, 2002-2003"], AGP := ["%A A.O.L. Atkin, P. Gaborit, V. Pless & P Sole", "%R email", "%D 2001"], Roe := ["%A G. Roelofsen", "%T On Goppa and generalized Srivastava codes", "%R Master's Thesis, Dept. of Math. and Comp. Sc., Eindhoven Univ. of Techn., The Netherlands", "%D Aug. 1982"], Joplus := ["%A A.E. Brouwer", "%T The linear programming bound for binary linear codes", "%J IEEE Trans. Inform. Th.", "%V 39", "%P 677-680", "%D 1993"], Gp := ["%A V. D. Goppa", "%T A new class of linear error-correcting codes", "%J Problems of Info. Transmission", "%V 6", "%P 207-212", "%D 1970"], GB := ["%A T. Aaron Gulliver & Vijay K. Bhargava", "%T Some best rate 1/p and rate (p-1)/p systematic quasi-cyclic codes", "%J IEEE Trans. Inform. Theory", "%V 37", "%P 552-555", "%D May 1991"], QC := ["%A A.E. Brouwer & T. Verhoeff", "%T An updated table of minimum-distance bounds for binary linear codes", "%J IEEE Trans. Inform. Theory", "%V 39", "%P 662-677", "%D 1993"], MMT := ["%A Hideaki TANAKA, Masami MOHRI, Masakatu MORII", "%R email, comm", "%D Feb 2005"], EB1 := ["%A Y. Edel & J. Bierbrauer", "%T Some codes related to BCH codes of low dimension", "%R preprint", "%D 1995"], BJK := ["%A Irina E. Bocharova, Rolf Johannesson, Boris D. Kudryashov & Per Sthl", "%T Tailbiting Codes: Bounds and Search Results", "%O IEEE, to appear"], BHJ := ["%A I. E. Bocharova, M. Handlery, R. Johannesson & B. D. Kudryashov", "%T Tailbiting Codes Obtained via Convolutional Codes with Large Slope", "%O to be submitted to IEEE"], RS := ["%A Rains & Sloane", "%T Self-dual codes", "%O in: Handbook of Coding theory, Table XI, p. 274"], Dup := ["%A Scott Duplichan", "%R email 000517"], Gur := ["%A Sugi Guritman", "%T Restrictions on the weight distribution of linear codes", "%R Thesis, Techn. Univ. Delft", "%D 2000"], BE3 := ["%A J. Bierbrauer & Y. Edel", "%T Extending and lengthening BCH-codes", "%R preprint"], Su := ["%A Y. Sugiyama, M. Kasahara, S. Hirasawa & T. Namekawa", "%T Some efficient binary codes constructed using Srivastava codes", "%J IEEE Trans. Inform. Theory", "%V IT-21", "%P 581-582", "%D Sep. 1975"], Vx := ["%R From the Varshamov-Gilbert bound together with construction X"], Jo := ["%R Follows from the Johnson bound"], GB6 := ["%A T. A. Gulliver & V. K. Bhargava", "%T Improvements to the bounds on optimal binary linear codes of dimensions 11 and 12", "%J Ars Combinatoria", "%V 44", "%P 173-181", "%D 1996"], Kol := ["%A David R. Kohel", "%R email", "%D 1998-11-19"], Gu := ["%A T. A. Gulliver", "%R personal communications", "%D 1993-1998"], HvT := ["%A Tor Helleseth & Henk C.A. van Tilborg", "%T The classification of all (145,7,72) binary linear codes", "%R TH-Report 80-WSK-01, Techn. Hogeschool Eindhoven", "%D April 1980"], TTH := ["%A C. Tjhai, M. Tomlinson, R. Horan, M. Ahmed & M. Ambroze", "%T Linear codes derived from binary cyclic codes of length 151", "%R preprint", "%D 2005"], KSH := ["%A M. Kasahara, Y. Sugiyama, S. Hirasawa & T. Namekawa", "%T A new class of binary codes constructed on the basis of BCH codes", "%J IEEE Trans. Inform. Theory", "%V IT-21", "%P 582-585", "%D Sep. 1975"], BKW := ["%A Michael Braun, Axel Kohnert & Alfred Wassermann", "%T Optimal linear codes from matrix groups", "%R preprint", "%D Mar 2004", "%O and Construction of (sometimes) Optimal Linear Codes, email, Mar 2005"], Zwa := ["%A Johannes Zwanzger", "%R pers.comm", "%D Dec 2005"], BG3 := ["%A M. C. Bhandari & M. S. Garg", "%T A new lower bound on the minimal length of a binary linear code", "%J Europ. J. Combin.", "%V 17", "%P 335-342", "%D 1996"], Sab := ["%A Roberta E. Sabin", "%R email", "%D Aug. 1994"], VE := ["%R From repeated Varshamov-Edel lengthening"], MYI := ["%A M. Morii, T. Yoshimura & Y. Itoh", "%R email comm", "%D Feb-Mar 1995"], PD := ["%A M. Grassl", "%R email", "%D 2001-03-21", "%O by puncturing a GG code at a word of the dual"], Rod := ["%A F. Rodier", "%T On the minimum distance of the duals of 4-error correcting extended BCH codes", "%R preprint", "%D Oct. 1997"], Lun := ["%A Anders Lundqvist", "%R pers.comm", "%D 1997"], HN := ["%A R. Hill & D.E. Newton", "%T Optimal ternary linear codes", "%J Des. Codes Cryptogr.", "%V 2", "%P 137-157", "%D 1992"], KP := ["%A F.R. Kschischang & S. Pasupathy", "%T Some ternary and quaternary codes and associated sphere packings", "%J IEEE Trans. Inform. Theory", "%V 38", "%P 227-246", "%D 1992"], vE2 := ["%A M. van Eupen", "%T Four nonexistence results for ternary linear codes", "%J IEEE Trans. Inform. Theory", "%V 41", "%P 800-805", "%D 1995"], Hi1 := ["%A R. Hill", "%T On the largest size of cap in S(5,3)", "%R Rend. Accad. Naz. Lincei (8) {bf 54}", "%D 1973", "%O 378-384"], Pel := ["%A G. Pellegrino", "%T Sul massimo ordine della calotte in $S_{4,3}$", "%J Matematiche", "%V 25", "%P 149-157", "%D 1971"], Ple := ["%A V. Pless", "%T On a new family of symmetry codes and related new 5-designs", "%J Bull. Amer. Math. Soc.", "%V 75", "%P 1339-1342", "%D 1969"], vE0 := ["%A M. van Eupen", "%T Five new optimal ternary linear codes", "%J IEEE Trans. Inform. Theory", "%V 40", "%P 193", "%D 1994"], HHM := ["%A N. Hamada, T. Helleseth, H.M. Martinsen & . Ytrehus", "%T There is no ternary [28,6,16] code"], GuB := ["%A T. A. Gulliver", "%R personal communications", "%D 1993-1998"], GB4 := ["%A T. A. Gulliver & V. K. Bhargava", "%T New good rate $(m-1)/pm$ ternary and quaternary cyclic codes", "%J Des. Codes Cryptogr.", "%V 7", "%P 223-233", "%D 1996"], BB := ["%A G. T. Bogdanova & I. G. Boukliev", "%T New linear codes of dimension 5 over GF(3)", "%R Proc. 4th Internat. Workshop on Algebraic and Combinatorial Coding Theory, Novgorod, Russia", "%P 41-43", "%D Sept. 1994"], Bo1 := ["%A I. Boukliev", "%T A method for construction of good linear codes", "%R preprint submitted to the International Workshop on Optimal Codes and Related Topics, Bulgaria, Sozopol", "%D 1995"], Be := ["%A G. F. M. Beenker", "%T A note on extended quadratic residue codes over GF(9) and their ternary images", "%J IEEE Trans. Inform. Theory", "%V 30", "%P 403-405", "%D 1984"], vE1 := ["%A M. van Eupen", "%T Some new results for ternary linear codes of dimension $5$ and $6$", "%J IEEE Trans. Inform. Theory", "%V 41", "%P 2048-2051", "%D 1995"], BKn := ["%A Detlef Berntzen & Peter Kemper", "%R email", "%D Feb. 1993"], Glo := ["%A Volker von Gloeden", "%T Kubische Reste Codes", "%R Dipl", "%D marbeit, Dsseldorf, Oktober 2002"], Gu1 := ["%A T. A. Gulliver", "%T New optimal ternary linear codes of dimension 6", "%J Ars Combin.", "%V 40", "%P 97-108", "%D 1995"], HJ := ["%A R. Hill and C. Jones", "%T The non-existence of ternary [47,6,29] codes"], CG := ["%A Y. Cheng & D. J. Guan", "%R pers. comm"], ARS := ["%A Nuh Aydin, Dijen Ray-Chaudhuri, Irfan Siap", "%R email", "%D 1999-2000"], Gu2 := ["%A T. A. Gulliver", "%T New optimal ternary linear codes", "%J IEEE Trans. Inform. Theory", "%V 41", "%P 1182-1185", "%D 1995"], D1 := ["%R Code found by the (u|u+v) construction"], GO := ["%A T. A. Gulliver & P. R. J. stergrd", "%T Improved bounds for ternary linear codes of dimension 7", "%J IEEE Trans. Inform. Theory", "%V 43", "%P 1377-1381", "%D 1997"], Ha := ["%A N. Hamada", "%R pers. comm"], vEH := ["%A M. van Eupen & R. Hill", "%T An optimal ternary $[69,5,45]$ code and related codes", "%J Des. Codes Cryptogr.", "%V 4", "%P 271-282", "%D 1994"], Ma := ["%A T. Maruta", "%T On the nonexistence of linear codes attaining the Griesmer bound", "%J Geom. Dedicata", "%V 60", "%P 1-7", "%D 1996"], ASR := ["%A Nuh Aydin, Irfan Siap & Dijen Ray-Chaudhuri", "%T New ternary quasicyclic codes with improved minimum distances", "%R preprint", "%D 1999"], HW1 := ["%A N. Hamada & Y. Watamori", "%T The nonexistence of $[71,5,46;3]$ codes", "%J J. Statist. Plann. Inf.", "%V 52", "%P 379-394", "%D 1996"], Bo3 := ["%A I. Boukliev", "%T Some new optimal ternary linear codes", "%J Des. Codes Cryptogr.", "%V 12", "%P 5-11", "%D 1997"], Da := ["%A R. N. Daskalov", "%R pers. comm", "%D 1992-2005"], HHY := ["%A N. Hamada, T. Helleseth & . Ytrehus", "%T On the construction of $[q^4+q^2-q,5,q^4-q^3+q^2-2q;q]$-codes meeting the Griesmer bound", "%J Des. Codes Cryptogr.", "%V 2", "%P 225-229", "%D 1992"], dB := ["%A M.A. de Boer", "%T A ternary [91,9,54] code", "%J preprint, 9504; A dual quaternary BCH code, 9502. Codes spanned by quadratic and Hermitian forms, IEEE Trans. Inform. Theory", "%V 42", "%P 1600-1604", "%D 1996"], Ed2 := ["%A Y. Edel", "%T Extending and lengthening BCH-codes", "%R preprint", "%D 9710", "%O 07"], HH := ["%A N. Hamada & T. Helleseth", "%T The nonexistence of some ternary linear codes and update of the bounds for n_3(6,d), 1 <= d <= 243", "%R preprint", "%D 1999"], LX := ["%A San Ling & Chaoping Xing", "%T Polyadic Codes Revisited", "%R preprint", "%D 2003"], GO2 := ["%A T. A. Gulliver & P. R. J. stergrd", "%T Improved bounds for ternary linear codes of dimension 8", "%R preprint", "%D Nov. 1997"], DGM := ["%A R.N. Daskalov, T.A. Gulliver & E. Metodieva", "%T New Ternary Linear Codes", "%R IEEE Trans.Inf.Theory", "%V 45", "%P 1687-1688", "%D 1999", "%O no.5"], DM5 := ["%A R. N. Daskalov & E. Metodieva", "%T The nonexistence of ternary [105,6,68] and [230,6,152] codes", "%O Designs, Codes and Cryptography, submitted"], Ed := ["%A Y. Edel", "%T Eine Verallgemeinerung von BCH-Codes", "%R Ph.D. Thesis, Univ. Heidelberg", "%D 1996"], Var := ["%A R.R. Varshamov", "%T Problems of the general theory of linear coding", "%R Ph.D. thesis, Moscow State Univ", "%D 1959", "%O (Russian) (from the Varshamov-Gilbert bound)"], Br2 := ["%A A. E. Brouwer", "%T Linear spaces of quadrics and new good codes", "%R preprint", "%D 1997"], DG4 := ["%A Rumen N. Daskalov & T. Aaron Gulliver", "%T New Minimum Distance Bounds for Linear Codes over Small Fields", "%R preprint", "%D March 2001"], Da2 := ["%A R.N. Daskalov", "%T The linear programming bound for ternary linear codes", "%R IEEE International Symposium on Information Theory, Trondheim", "%P 423", "%D 1994"], Koh := ["%A Axel Kohnert", "%R email", "%D 2006"], BEH := ["%A J. Barat, Y. Edel, R. Hill & L. Storme", "%T On complete caps in the projective geometriesover F3, II: New improvements.", "%R J. Combin. Math. and Combin. Computing 49", "%P 9-31", "%D 2004"], Lan := ["%A I.N. Landgev", "%T Nonexistence of $[143,5,94]_3$ codes", "%R Proc. Internat. Workshop on Optimal Codes and Related Topics, Sozopol, Bulgaria", "%P 108-116", "%D 1995"], Da9 := ["%A R. N. Daskalov", "%T The sharpened linear programming bound for ternary linear codes", "%R Mathematics and Education in Mathematics, Sofia", "%P 158-166", "%D 1995"], Lg := ["%A I.N. Landgev", "%T The nonexistence of some ternary five-dimensional codes", "%O Des. Codes Cryptogr., to appear"], Da0 := ["%A R. N. Daskalov", "%T New Ternary Linear Codes in Dimensions 18 and 19", "%R preprint", "%D Oct 2001"], Da6 := ["%A R. N. Daskalov", "%T Some nonexistence results for 7-dimensional ternary linear codes", "%R preprint", "%D 1998"], DM4 := ["%A R. N. Daskalov & E. Metodieva", "%T The Linear Programming Bound for Ternary and Quaternary Linear Codes", "%R preprint", "%D Jan 2002"], Da5 := ["%A R. N. Daskalov", "%T The non-existence of ternary linear [158,6,104] and [203,6,134] codes", "%R preprint", "%D 1998"], BvE := ["%A A. E. Brouwer & M. van Eupen", "%T The correspondence between projective codes and 2-weight codes", "%R Designs, Codes and Cryptography 11", "%P 261-266", "%D 1997"], GH := ["%A P.P. Greenough & R. Hill", "%T Optimal linear codes over GF(4)", "%J Discrete Math.", "%V 125", "%P 187-199", "%D 1994"], MOS := ["%A F.J. MacWilliams, A.M. Odlyzko, N.J.A. Sloane & H.N. Ward", "%T Self-dual codes over GF(4)", "%J J. Comb. Th. (A)", "%V 25", "%P 288-318", "%D 1978"], Liz := ["%A P. Lizak", "%T Optimal quaternary linear codes", "%R Ph. D. Thesis, Univ. of Salford", "%D Nov. 1995"], IN := ["%A H. Itoh & M. Nakamichi", "%T SbEC-DbED codes derived from experiments on a computer for semiconductor memory systems", "%R Electronics and Communications in Japan", "%V 66-A", "%D 1983", "%O No.8"], Zi := ["%A Thomas Rehfinger, N. Suresh Babu & Karl-Heinz Zimmermann", "%T New Good Codes via CQuest -- A System for the Silicon Search of Linear Codes", "%R Algebraic Combinatorics and Applications, A. Betten et al., eds, Springer", "%P 294-306", "%D 2001"], Da4 := ["%A R. N. Daskalov", "%T Ten good quasicyclic 10-dimensional quaternary linear codes", "%R Optimal codes and related topics, Proc. Internat. Workshop on Optimal Codes and Related Topics, Sozopol, Bulgaria", "%P 45-49", "%D 1995"], DG5 := ["%A Rumen N. Daskalov & T. Aaron Gulliver", "%T New Quasi-Twisted Quaternary Linear Codes", "%R IEEE Trans. Inf. Theory", "%V 46", "%P 2642-2643", "%O no.7"], Du3 := ["%A I. Duursma", "%R email", "%D 050809"], DG := ["%A R.N. Daskalov & T.A. Gulliver", "%T New good quasi-cyclic ternary and quaternary codes", "%R IEEE Trans.Inf.Th.", "%V 43", "%P 1647-1650", "%D 1997", "%O no.5"], BMP := ["%A J. Bierbrauer, S. Marcugini & F. Pambianco", "%T A family of highly symmetric codes", "%R preprint", "%D 2002"], Ayd := ["%A Nuh Aydin", "%T preprint", "%D 2003"], GW1 := ["%A M. Grassl & G. White", "%T New Good Linear Codes by Special Puncturings", "%R ISIT 2004 Chicago USA", "%D June 27 - July 2 2004"], LMH := ["%A I. Landgev, T. Maruta, R. Hill", "%T On the nonexistence of quaternary [51,4,37] codes", "%J Finite Fields Appl.", "%V 2", "%P 96-110", "%D 1996"], YC := ["%A Ying Cheng", "%R pers. comm. Sloane", "%D Feb. 1993"], HLa := ["%A R. Hill & I. Landgev", "%T On the nonexistence of some quaternary codes", "%R Proc. IMA conf. Finite Fields and their Applications", "%D June 1994"], Tol := ["%A L.M.G.M. Tolhuizen", "%T Cooperating error-correcting codes and their decoding", "%R Ph.D. thesis, Eindhoven Univ. of Techn", "%D June 1996"], Hi := ["%A R. Hill", "%T Caps and Groups", "%J Coll. Intern. Teorie Combin. Acc. Naz. Lincei, Roma 1973, Atti dei convegni Lincei", "%V 17", "%P 389-394", "%D 1976", "%O Rome"], DNX := ["%A Cunsheng Ding, Harald Niederreiter & Chaoping Xing", "%T Some new codes from algebraic curves", "%R IEEE Trans. On Inform. Theory", "%V 46", "%P 2638-2642", "%D 2000"], Gu3 := ["%A T. A. Gulliver", "%T New optimal quaternary linear codes of dimension 5", "%J IEEE Trans. Inform. Theory", "%V 42", "%P 2260-2265", "%D 1996"], BDK := ["%A I. Boukliev, R. Daskalov & S. Kapralov", "%T Optimal quaternary codes of dimension five", "%J IEEE Trans. Inform. Theory", "%V 42", "%P 1228-1235", "%D 1996"], Da1 := ["%A R.N. Daskalov", "%T The linear programming bound for quaternary linear codes", "%R Proceedings ACCT4'94, Novgorod, Russia", "%P 74-77", "%D Sept. 11-17, 1994"], DM3 := ["%A R. N. Daskalov & E. Metodieva", "%T Bounds on minimum length for quaternary linear codes in dimensions six and seven", "%R Mathematics and Education in Mathematics, Sofia", "%P 156-161", "%D 1994"] ); guava-3.6/tbl/codes3.g0000644017361200001450000052730411026723452014470 0ustar tabbottcrontab############################################################################# ## #A codes3.g GUAVA library Reinald Baart #A & Jasper Cramwinckel #A & Erik Roijackers ## #H @(#)$Id: codes3.g,v 1.1.1.1 1998/03/19 17:31:39 lea Exp $ ## #Y Copyright (C) 1994, Vakgroep Algemene Wiskunde, T.U. Delft, Nederland ## #H CJ, 17 May 2006 #H Updated lower- and upper-bounds of minimum distance for GF(2), #H GF(3) and GF(4) codes. (Brouwer's table as of 11 May 2006) #H #H $Log: codes3.g,v $ #H Revision 1.1.1.1 1998/03/19 17:31:39 lea #H Initial version of GUAVA for GAP4. Development still under way. #H Lea Ruscio 19/3/98 #H #H #H Revision 1.2 1997/01/20 15:34:15 werner #H Upgrade from Guava 1.2 to Guava 1.3 for GAP release 3.4.4. #H #H Revision 1.1 1994/11/10 14:29:23 rbaart #H Initial revision #H ## YouWantThisCode := function(n, k, d, ref) if IsList( GUAVA_TEMP_VAR ) and GUAVA_TEMP_VAR[1] = false then Add( GUAVA_TEMP_VAR, [n, k, d, ref] ); fi; return [n, k] = GUAVA_TEMP_VAR; end; if YouWantThisCode( 12, 6, 6, "QR" ) then GUAVA_TEMP_VAR := [ExtendedTernaryGolayCode,[]]; fi; if YouWantThisCode( 14, 7, 6, "QR" ) then GUAVA_TEMP_VAR := [ExtendedCode, [[QRCode, [13, 3]]]]; fi; if YouWantThisCode( 14, 8, 5, "NBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 15, 6, 7, "Li1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 16, 5, 9, "HN" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 23, 7, 12, "Bou" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 24, 12, 9, "QR" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 25, 10, 10, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 27, 16, 7, "EB3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 28, 8, 15, "NBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 28, 14, 9, "KP" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 28, 20, 6, "KP" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 29, 5, 18, "vE0" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 29, 16, 8, "EB3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 30, 10, 13, "GuB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 31, 7, 17, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 31, 9, 15, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 32, 4, 21, "Bel" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 33, 10, 15, "GB4" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 34, 5, 21, "vE0" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 34, 8, 18, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 34, 22, 7, "EB3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 35, 7, 19, "KP" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 35, 21, 8, "EB3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 36, 6, 21, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 36, 9, 18, "KP" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 36, 18, 12, "Ple" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 37, 7, 20, "Bo1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 38, 5, 24, "BB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 40, 10, 19, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 40, 12, 18, "KP" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 40, 20, 12, "Be" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 40, 24, 9, "KP" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 41, 8, 22, "KP" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 41, 9, 21, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 41, 33, 5, "BCH" ) then GUAVA_TEMP_VAR := [BCHCode, [41, 2, 3]]; fi; if YouWantThisCode( 42, 7, 24, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 42, 29, 7, "EB3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 43, 25, 9, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 44, 6, 27, "Bo1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 44, 11, 21, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 44, 29, 8, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 45, 9, 24, "KP" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 46, 7, 26, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 46, 12, 21, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 47, 5, 30, "vE1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 48, 10, 24, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 48, 11, 22, "GB4" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 48, 24, 15, "QR" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 49, 5, 31, "BB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 49, 6, 30, "Gu1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 49, 7, 28, "GuB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 49, 8, 27, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 49, 13, 21, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 49, 14, 20, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 52, 7, 30, "CG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 52, 10, 27, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 52, 26, 15, "GaO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 53, 16, 21, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 53, 17, 20, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 53, 39, 7, "EB3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 54, 8, 30, "GB4" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 54, 9, 28, "GB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 54, 14, 24, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 56, 6, 36, "Gu" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 56, 7, 33, "GB4" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 56, 8, 31, "Gu2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 56, 12, 27, "ARS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 56, 18, 21, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 56, 50, 4, "Hi1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 57, 15, 24, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 57, 16, 23, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 57, 20, 20, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 58, 10, 30, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 59, 16, 24, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 60, 7, 36, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 60, 14, 27, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 60, 30, 18, "QR" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 61, 5, 39, "vE0" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 61, 15, 26, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 61, 17, 24, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 61, 21, 21, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 61, 41, 10, "Glo" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 62, 11, 32, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 62, 12, 30, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 62, 33, 13, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 63, 6, 39, "Gu1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 64, 8, 37, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 64, 32, 18, "Be" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 64, 38, 12, "D1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 65, 5, 42, "HN" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 65, 7, 39, "GO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 65, 9, 36, "Gu" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 65, 17, 27, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 66, 12, 33, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 66, 21, 24, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 67, 6, 42, "Ha" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 68, 16, 30, "ARS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 68, 18, 27, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 68, 23, 23, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 68, 45, 11, "Glo" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 69, 5, 45, "vEH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 69, 11, 36, "Bou" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 70, 7, 42, "Gu2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 70, 9, 39, "GB4" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 70, 23, 24, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 71, 12, 36, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 71, 17, 30, "ASR" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 72, 6, 45, "Gu1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 72, 7, 43, "GO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 72, 8, 42, "Gu2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 72, 36, 18, "QR" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 74, 5, 48, "BB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 74, 37, 18, "QR" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 76, 6, 48, "Bo3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 76, 38, 18, "GaO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 80, 18, 36, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 80, 24, 30, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 81, 7, 51, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 81, 9, 48, "BE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 81, 11, 45, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 81, 20, 32, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 81, 25, 26, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 81, 50, 14, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 81, 56, 11, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 82, 16, 42, "NBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 82, 66, 8, "BE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 83, 56, 12, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 84, 19, 36, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 84, 20, 34, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 84, 25, 28, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 84, 27, 26, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 84, 42, 21, "GaO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 7, 54, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 13, 45, "BEx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 22, 32, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 23, 31, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 50, 15, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 64, 9, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 70, 7, "BE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 85, 74, 6, "BE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 86, 9, 50, "BE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 86, 11, 47, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 86, 15, 44, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 86, 46, 17, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 86, 54, 14, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 86, 55, 13, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 86, 60, 11, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 86, 77, 5, "BE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 87, 5, 57, "HHY" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 87, 18, 38, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 87, 20, 36, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 87, 23, 32, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 87, 58, 12, "X6" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 87, 70, 8, "BE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 88, 15, 45, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 88, 16, 44, "X6a" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 88, 27, 28, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 88, 30, 26, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 88, 31, 25, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 88, 44, 21, "GaO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 88, 49, 16, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 88, 63, 10, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 89, 12, 47, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 89, 23, 33, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 89, 53, 15, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 89, 56, 14, "X6u" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 89, 67, 9, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 6, 57, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 14, 46, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 16, 45, "X6a" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 20, 37, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 22, 36, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 49, 17, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 50, 16, "X6" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 60, 12, "X6" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 63, 11, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 90, 71, 8, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 91, 5, 60, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 91, 9, 54, "dB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 91, 11, 51, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 91, 12, 48, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 91, 19, 38, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 91, 24, 33, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 92, 7, 57, "X3a" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 92, 14, 47, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 92, 15, 46, "X6a" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 92, 18, 42, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 92, 30, 28, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 92, 33, 26, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 92, 55, 15, "X6u" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 92, 66, 10, "Ed2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 92, 69, 9, "X6u" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 92, 76, 7, "EB3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 93, 51, 17, "X6u" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 93, 62, 12, "X6" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 93, 65, 11, "X6u" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 94, 6, 60, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 94, 14, 48, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 94, 15, 47, "X6a" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 94, 23, 36, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 94, 53, 16, "X6" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 94, 56, 15, "X6u" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 95, 12, 51, "X6a" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 95, 20, 40, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 95, 83, 6, "EB3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 7, 60, "X6a" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 8, 57, "GB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 15, 48, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 16, 47, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 19, 41, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 36, 26, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 48, 24, "ACG" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 96, 53, 17, "X6u" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 97, 11, 53, "X6a" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 97, 13, 51, "X6a" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 97, 21, 39, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 97, 22, 38, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 97, 68, 11, "Ed2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 98, 6, 63, "Gu1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 98, 16, 48, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 98, 17, 45, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 98, 19, 42, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 98, 23, 37, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 99, 9, 57, "GB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 99, 11, 54, "X6a" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 99, 50, 19, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 99, 55, 17, "X6u" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 99, 59, 15, "X6u" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 99, 75, 9, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 100, 5, 66, "Bel" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 100, 7, 63, "EB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 100, 8, 60, "GO2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 100, 10, 55, "Gu" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 100, 18, 45, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 100, 24, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 100, 36, 28, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 100, 54, 18, "D1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 100, 58, 16, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 101, 12, 53, "X6a" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 101, 15, 51, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 101, 19, 43, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 101, 50, 20, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 101, 56, 17, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 102, 49, 21, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 103, 10, 57, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 103, 16, 51, "X6a" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 103, 34, 34, "Glo" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 103, 53, 19, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 103, 69, 14, "Glo" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 103, 90, 6, "EB3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 5, 69, "Bel" ) then GUAVA_TEMP_VAR := [BCHCode, [104,0,66,3]]; fi; if YouWantThisCode( 104, 7, 66, "GO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 9, 60, "DGM" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 11, 56, "BET" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 13, 54, "ARS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 18, 48, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 20, 43, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 24, 38, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 27, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 35, 33, "Glo" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 36, 30, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 39, 28, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 43, 26, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 104, 49, 22, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 105, 8, 63, "Gu" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 105, 14, 53, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 105, 19, 45, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 105, 22, 42, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 105, 23, 41, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 105, 51, 21, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 106, 10, 59, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 107, 14, 54, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 107, 15, 53, "X6a" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 107, 17, 49, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 7, 69, "EB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 9, 63, "GB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 11, 58, "GB4" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 12, 57, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 16, 52, "X6a" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 20, 45, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 27, 38, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 30, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 36, 32, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 39, 30, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 46, 26, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 49, 24, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 52, 22, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 56, 20, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 57, 19, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 61, 18, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 65, 16, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 71, 14, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 108, 91, 7, "EB3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 109, 15, 54, "X6a" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 109, 24, 41, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 109, 82, 10, "LX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 110, 8, 66, "GO2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 110, 10, 62, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 110, 21, 45, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 110, 23, 42, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 110, 92, 7, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 111, 16, 54, "X6a" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 111, 18, 51, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 7, 72, "EB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 12, 60, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 13, 58, "ARS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 14, 57, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 19, 50, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 22, 45, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 24, 42, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 25, 41, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 27, 40, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 30, 38, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 33, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 36, 34, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 39, 32, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 42, 30, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 46, 28, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 49, 26, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 52, 24, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 55, 22, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 59, 20, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 71, 15, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 112, 74, 14, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 113, 5, 75, "Bel" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 113, 8, 68, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 113, 23, 43, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 113, 61, 19, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 113, 65, 18, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 113, 80, 12, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 114, 6, 73, "Gu1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 114, 34, 35, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 114, 37, 33, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 114, 43, 30, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 114, 47, 27, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 114, 56, 22, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 114, 72, 15, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 114, 75, 14, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 8, 69, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 11, 63, "Bou" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 24, 43, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 25, 42, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 26, 41, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 28, 40, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 31, 38, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 40, 32, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 44, 29, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 50, 26, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 51, 25, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 53, 24, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 115, 81, 12, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 116, 23, 45, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 116, 47, 28, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 117, 25, 43, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 117, 44, 30, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 117, 49, 27, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 22, 48, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 24, 45, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 27, 42, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 30, 40, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 33, 38, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 36, 36, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 39, 34, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 42, 32, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 46, 29, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 48, 28, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 52, 26, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 53, 25, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 75, 15, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 118, 80, 13, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 119, 25, 44, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 119, 26, 43, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 119, 34, 37, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 119, 40, 33, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 6, 78, "Gu1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 7, 75, "GO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 12, 66, "ARS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 28, 42, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 44, 31, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 46, 30, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 51, 27, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 53, 26, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 120, 57, 24, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 5, 81, "sim" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 10, 72, "dB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 15, 63, "BCH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 20, 57, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 23, 48, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 24, 46, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 25, 45, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 26, 44, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 27, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 34, 38, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 40, 34, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 43, 32, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 48, 29, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 50, 28, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 61, 23, "BCH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 66, 21, "BCH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 81, 14, "BCH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 121, 116, 3, "Ham" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 122, 22, 51, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 122, 29, 42, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 122, 32, 41, "NBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 122, 33, 39, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 122, 36, 37, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 122, 39, 35, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 122, 42, 33, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 122, 56, 25, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 122, 67, 20, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 122, 76, 17, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 122, 92, 11, "NBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 122, 102, 8, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 122, 112, 5, "NBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 123, 16, 63, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 123, 21, 57, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 123, 25, 46, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 123, 26, 45, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 123, 27, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 123, 46, 31, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 124, 6, 81, "Bo1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 124, 8, 75, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 124, 24, 48, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 124, 29, 43, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 124, 36, 38, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 124, 39, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 124, 42, 34, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 124, 54, 27, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 124, 56, 26, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 12, 68, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 26, 46, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 27, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 31, 42, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 33, 41, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 35, 39, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 38, 37, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 41, 35, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 44, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 50, 30, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 51, 29, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 53, 28, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 61, 24, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 68, 21, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 79, 16, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 81, 15, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 125, 97, 10, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 9, 73, "GB1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 11, 72, "Br2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 13, 66, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 25, 48, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 29, 44, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 72, 19, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 78, 17, "BE3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 91, 12, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 126, 101, 9, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 127, 7, 81, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 127, 12, 69, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 127, 15, 65, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 127, 26, 47, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 127, 27, 46, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 127, 31, 43, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 127, 34, 41, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 127, 66, 23, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 127, 71, 20, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 127, 76, 18, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 127, 88, 13, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 8, 78, "GO2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 24, 50, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 29, 45, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 33, 42, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 36, 40, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 37, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 39, 38, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 40, 37, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 42, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 43, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 45, 34, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 49, 32, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 57, 27, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 128, 61, 25, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 129, 16, 65, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 129, 26, 48, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 129, 27, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 129, 31, 44, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 129, 35, 41, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 129, 47, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 129, 67, 23, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 129, 71, 21, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 6, 84, "Bo1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 9, 76, "DGM" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 10, 74, "DG4" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 24, 51, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 25, 50, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 29, 46, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 33, 43, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 54, 30, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 57, 28, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 61, 26, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 65, 24, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 69, 22, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 130, 81, 17, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 131, 20, 63, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 131, 27, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 131, 31, 45, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 131, 84, 16, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 10, 75, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 15, 69, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 21, 60, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 23, 57, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 24, 52, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 25, 51, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 26, 50, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 29, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 33, 44, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 36, 42, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 37, 41, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 39, 40, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 42, 38, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 45, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 46, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 52, 32, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 69, 23, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 132, 80, 18, "Ed" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 133, 7, 84, "GO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 133, 8, 81, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 133, 31, 46, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 133, 35, 43, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 133, 61, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 133, 65, 25, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 133, 74, 21, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 133, 76, 20, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 134, 6, 87, "Bo3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 134, 11, 75, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 134, 16, 69, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 134, 25, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 134, 26, 51, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 134, 27, 50, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 134, 33, 45, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 134, 79, 19, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 9, 78, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 13, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 21, 61, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 22, 60, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 24, 54, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 30, 48, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 31, 47, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 58, 30, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 65, 26, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 135, 69, 24, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 7, 86, "GO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 25, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 26, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 27, 51, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 29, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 33, 46, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 34, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 36, 44, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 37, 43, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 39, 42, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 42, 40, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 45, 38, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 48, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 49, 35, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 52, 34, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 55, 32, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 72, 23, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 74, 22, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 136, 86, 17, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 137, 31, 48, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 137, 32, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 6, 90, "Bo3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 11, 78, "Bou" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 15, 71, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 18, 66, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 24, 55, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 25, 54, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 26, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 27, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 28, 51, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 29, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 138, 78, 21, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 139, 31, 49, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 139, 70, 25, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 139, 86, 18, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 139, 91, 16, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 8, 87, "Koh" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 9, 82, "GB4" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 15, 72, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 25, 55, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 26, 54, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 27, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 28, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 29, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 33, 48, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 34, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 36, 46, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 39, 44, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 42, 42, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 45, 40, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 48, 38, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 55, 34, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 58, 32, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 59, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 62, 30, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 66, 28, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 69, 26, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 73, 24, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 82, 20, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 95, 15, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 140, 111, 10, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 141, 7, 90, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 141, 10, 81, "X" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 141, 16, 71, "X6a" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 141, 19, 66, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 141, 20, 65, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 141, 22, 63, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 141, 23, 60, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 141, 31, 50, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 141, 32, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 141, 76, 23, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 14, 73, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 18, 69, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 25, 56, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 26, 55, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 29, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 63, 30, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 67, 28, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 79, 22, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 142, 86, 19, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 143, 9, 84, "DGM" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 143, 16, 72, "X6a" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 143, 28, 54, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 143, 31, 51, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 6, 93, "Gu1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 8, 90, "GO2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 13, 78, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 15, 73, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 24, 60, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 26, 56, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 27, 55, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 33, 50, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 34, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 36, 48, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 39, 46, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 42, 44, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 45, 42, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 48, 40, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 51, 38, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 55, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 58, 34, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 61, 32, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 66, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 70, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 144, 130, 6, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 14, 75, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 25, 58, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 29, 54, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 31, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 32, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 63, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 73, 26, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 75, 25, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 145, 84, 21, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 9, 85, "Zwa" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 12, 82, "ARS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 15, 74, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 21, 64, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 26, 57, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 27, 56, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 28, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 66, 30, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 70, 28, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 146, 78, 24, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 147, 7, 93, "GO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 147, 16, 73, "X6a" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 147, 30, 54, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 147, 31, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 147, 93, 18, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 6, 96, "Bo3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 14, 77, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 15, 75, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 18, 72, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 27, 57, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 28, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 29, 55, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 33, 52, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 34, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 36, 50, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 39, 48, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 42, 46, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 45, 44, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 48, 42, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 51, 40, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 58, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 61, 34, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 64, 32, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 82, 23, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 148, 89, 20, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 149, 20, 71, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 149, 31, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 149, 32, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 149, 70, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 149, 85, 22, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 149, 100, 16, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 8, 93, "GO2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 9, 88, "GB4" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 10, 87, "Gu" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 11, 84, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 14, 78, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 22, 66, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 26, 60, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 29, 56, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 67, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 69, 30, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 73, 28, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 150, 75, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 151, 31, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 151, 78, 26, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 151, 80, 25, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 151, 94, 19, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 6, 99, "Bo3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 18, 73, "Da0" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 19, 72, "Da0" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 33, 54, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 34, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 36, 52, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 39, 50, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 42, 48, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 45, 46, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 48, 44, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 51, 42, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 54, 40, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 58, 38, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 61, 36, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 64, 34, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 152, 67, 32, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 11, 86, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 13, 84, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 16, 78, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 28, 60, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 40, 49, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 43, 47, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 46, 45, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 49, 43, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 52, 41, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 59, 37, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 84, 24, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 153, 91, 21, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 5, 102, "Bel" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 7, 99, "GO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 33, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 34, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 37, 52, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 38, 51, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 55, 40, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 56, 39, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 63, 35, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 154, 65, 34, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 36, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 40, 50, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 43, 48, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 46, 46, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 49, 44, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 52, 42, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 59, 38, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 71, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 73, 30, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 75, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 155, 88, 23, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 6, 102, "Bo3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 8, 96, "GO2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 12, 87, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 17, 78, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 33, 56, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 34, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 38, 52, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 42, 49, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 45, 47, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 48, 45, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 51, 43, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 54, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 56, 40, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 61, 37, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 63, 36, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 68, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 70, 32, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 78, 28, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 80, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 156, 96, 20, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 22, 72, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 25, 69, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 36, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 40, 51, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 83, 26, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 92, 22, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 157, 102, 18, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 158, 5, 105, "Bel" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 158, 33, 57, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 158, 34, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 158, 38, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 158, 42, 50, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 158, 45, 48, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 158, 48, 46, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 158, 51, 44, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 158, 54, 42, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 158, 59, 39, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 158, 61, 38, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 158, 66, 35, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 158, 68, 34, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 158, 86, 25, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 31, 62, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 36, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 40, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 44, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 47, 47, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 50, 45, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 53, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 58, 40, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 159, 65, 36, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 6, 105, "Gu" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 8, 99, "GO2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 10, 96, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 12, 90, "ARS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 14, 87, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 16, 84, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 19, 78, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 21, 75, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 33, 58, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 34, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 38, 54, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 42, 51, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 57, 41, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 64, 37, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 75, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 160, 90, 24, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 7, 102, "GO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 20, 77, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 23, 73, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 25, 72, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 36, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 40, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 44, 50, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 47, 48, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 50, 46, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 53, 44, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 56, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 63, 38, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 72, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 74, 32, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 78, 30, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 80, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 98, 21, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 161, 103, 19, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 9, 99, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 11, 93, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 13, 90, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 26, 71, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 32, 60, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 33, 59, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 34, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 38, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 42, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 46, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 49, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 52, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 62, 39, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 69, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 71, 34, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 83, 28, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 162, 85, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 163, 24, 73, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 163, 36, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 163, 40, 54, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 163, 44, 51, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 163, 56, 43, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 163, 61, 40, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 163, 68, 36, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 163, 95, 23, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 6, 108, "Bo3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 8, 102, "ARS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 12, 91, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 18, 84, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 20, 78, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 33, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 34, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 38, 56, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 42, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 46, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 49, 48, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 52, 46, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 55, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 60, 41, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 67, 37, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 164, 89, 26, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 14, 89, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 16, 86, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 19, 81, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 22, 75, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 28, 69, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 29, 67, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 36, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 40, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 44, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 48, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 51, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 59, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 66, 38, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 165, 92, 25, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 166, 38, 57, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 166, 42, 54, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 166, 46, 51, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 166, 55, 45, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 166, 65, 39, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 166, 76, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 166, 78, 32, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 166, 80, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 166, 100, 22, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 12, 93, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 14, 90, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 28, 70, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 36, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 40, 56, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 44, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 48, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 51, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 54, 46, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 59, 43, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 64, 40, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 73, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 75, 34, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 83, 30, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 167, 85, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 11, 96, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 23, 74, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 26, 73, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 30, 67, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 38, 58, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 42, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 46, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 58, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 63, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 70, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 72, 36, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 88, 28, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 97, 24, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 168, 153, 6, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 22, 78, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 35, 61, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 36, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 40, 57, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 41, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 44, 54, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 48, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 51, 49, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 54, 47, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 57, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 62, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 69, 38, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 169, 91, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 6, 111, "Bo3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 9, 103, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 10, 99, "Gu" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 11, 97, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 17, 87, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 21, 79, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 28, 72, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 29, 71, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 31, 67, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 38, 59, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 46, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 50, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 53, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 68, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 170, 106, 21, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 16, 90, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 19, 84, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 20, 83, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 34, 65, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 35, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 36, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 40, 58, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 41, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 44, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 48, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 57, 46, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 62, 43, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 67, 40, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 95, 26, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 102, 23, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 171, 112, 19, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 13, 96, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 14, 93, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 18, 87, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 28, 73, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 30, 69, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 38, 60, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 43, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 46, 54, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 50, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 53, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 56, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 61, 44, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 66, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 77, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 79, 34, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 81, 33, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 83, 32, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 172, 85, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 8, 108, "Koh" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 15, 91, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 32, 66, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 35, 63, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 36, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 40, 59, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 41, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 48, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 60, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 65, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 74, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 76, 36, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 88, 30, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 90, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 173, 99, 25, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 6, 114, "Gu1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 11, 100, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 29, 72, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 38, 61, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 43, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 46, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 50, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 53, 50, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 56, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 174, 73, 38, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 9, 106, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 10, 103, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 36, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 40, 60, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 41, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 45, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 48, 54, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 52, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 60, 46, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 65, 43, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 70, 40, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 72, 39, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 94, 28, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 175, 108, 22, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 7, 112, "GO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 11, 101, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 17, 90, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 19, 87, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 23, 81, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 38, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 43, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 50, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 56, 49, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 59, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 64, 44, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 69, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 97, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 176, 104, 24, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 21, 84, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 36, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 40, 61, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 41, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 45, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 48, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 52, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 55, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 63, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 68, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 81, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 83, 34, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 177, 85, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 8, 110, "Koh" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 10, 105, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 38, 63, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 43, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 47, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 50, 54, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 59, 48, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 78, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 80, 36, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 88, 32, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 90, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 178, 101, 26, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 6, 117, "Bo3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 9, 108, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 22, 84, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 32, 69, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 35, 68, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 36, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 40, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 41, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 45, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 52, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 55, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 58, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 63, 46, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 68, 43, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 75, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 77, 38, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 93, 30, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 109, 23, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 179, 114, 21, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 8, 111, "GO2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 16, 96, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 24, 81, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 26, 78, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 27, 75, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 31, 72, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 38, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 43, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 47, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 50, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 54, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 62, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 67, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 74, 40, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 180, 96, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 28, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 36, 66, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 40, 63, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 41, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 45, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 49, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 52, 54, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 58, 50, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 61, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 66, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 73, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 181, 106, 25, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 7, 117, "GO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 10, 108, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 12, 105, "ARS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 13, 102, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 15, 99, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 27, 76, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 32, 71, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 34, 69, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 38, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 43, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 47, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 54, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 57, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 72, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 182, 100, 28, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 36, 67, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 40, 64, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 41, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 45, 60, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 49, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 52, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 61, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 71, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 82, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 84, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 86, 35, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 88, 34, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 90, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 183, 103, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 6, 120, "Gu" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 8, 114, "GO2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 9, 110, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 20, 93, "XX" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 21, 89, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 23, 84, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 32, 72, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 38, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 43, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 47, 59, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 51, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 54, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 57, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 60, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 65, 47, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 67, 46, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 70, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 79, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 81, 38, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 95, 31, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 111, 24, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 184, 116, 22, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 11, 107, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 27, 78, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 40, 65, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 41, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 45, 61, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 49, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 64, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 69, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 185, 78, 40, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 33, 72, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 35, 71, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 37, 68, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 38, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 43, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 47, 60, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 51, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 54, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 57, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 60, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 75, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 77, 41, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 99, 30, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 186, 108, 26, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 187, 31, 76, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 187, 40, 66, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 187, 41, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 187, 45, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 187, 49, 59, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 187, 64, 49, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 187, 74, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 187, 102, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 7, 120, "Koh" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 10, 111, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 11, 109, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 34, 72, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 37, 69, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 38, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 43, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 47, 61, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 51, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 54, 56, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 57, 54, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 60, 52, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 63, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 68, 47, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 70, 46, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 73, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 86, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 88, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 188, 90, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 9, 114, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 12, 108, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 16, 102, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 19, 96, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 22, 90, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 26, 84, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 27, 80, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 31, 77, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 33, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 40, 67, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 41, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 45, 63, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 49, 60, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 53, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 56, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 59, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 72, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 83, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 85, 38, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 93, 34, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 95, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 106, 28, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 189, 113, 25, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 35, 72, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 37, 70, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 38, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 43, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 47, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 51, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 63, 51, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 80, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 190, 82, 40, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 6, 126, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 11, 111, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 23, 86, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 33, 74, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 34, 73, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 40, 68, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 41, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 45, 64, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 49, 61, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 67, 49, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 79, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 191, 110, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 7, 123, "GO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 8, 120, "GO2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 10, 114, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 13, 108, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 20, 95, "X6a" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 25, 85, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 36, 72, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 37, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 38, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 43, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 47, 63, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 51, 60, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 54, 58, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 55, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 57, 56, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 58, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 60, 54, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 63, 52, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 66, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 70, 48, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 71, 47, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 73, 46, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 192, 78, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 9, 116, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 12, 110, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 32, 79, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 33, 75, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 34, 74, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 40, 69, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 41, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 45, 65, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 49, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 53, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 62, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 65, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 77, 44, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 105, 30, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 193, 119, 24, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 20, 96, "X6a" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 36, 73, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 37, 72, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 38, 71, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 43, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 47, 64, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 51, 61, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 71, 48, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 76, 45, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 87, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 89, 38, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 91, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 93, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 95, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 108, 29, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 115, 26, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 194, 125, 22, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 11, 114, "Ma" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 27, 84, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 33, 76, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 34, 75, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 40, 70, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 41, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 45, 66, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 49, 63, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 53, 60, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 56, 58, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 59, 56, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 62, 54, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 65, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 70, 49, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 75, 46, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 84, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 86, 40, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 98, 34, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 195, 100, 33, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 7, 126, "GO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 10, 116, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 31, 82, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 32, 80, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 36, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 37, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 38, 72, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 43, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 47, 65, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 51, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 55, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 58, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 61, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 64, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 69, 50, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 74, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 83, 42, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 196, 112, 28, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 34, 76, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 40, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 41, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 45, 67, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 49, 64, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 53, 61, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 68, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 80, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 197, 82, 43, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 6, 129, "Gu1" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 9, 120, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 12, 114, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 16, 108, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 19, 102, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 20, 99, "X6a" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 22, 96, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 25, 90, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 29, 84, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 33, 78, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 36, 75, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 37, 74, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 38, 73, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 43, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 47, 66, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 51, 63, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 55, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 58, 58, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 61, 56, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 64, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 74, 48, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 79, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 198, 121, 25, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 11, 117, "Ma" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 40, 72, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 41, 71, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 45, 68, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 49, 65, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 53, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 57, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 60, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 63, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 68, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 73, 49, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 78, 46, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 91, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 93, 38, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 199, 117, 27, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 8, 126, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 10, 119, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 26, 90, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 27, 86, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 34, 78, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 35, 77, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 36, 76, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 37, 75, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 43, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 47, 67, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 51, 64, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 55, 61, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 67, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 72, 50, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 77, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 88, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 90, 40, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 96, 37, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 98, 36, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 200, 100, 35, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 7, 129, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 11, 118, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 39, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 40, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 45, 69, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 49, 66, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 53, 63, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 57, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 60, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 63, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 71, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 85, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 87, 42, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 201, 103, 34, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 6, 132, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 9, 122, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 12, 116, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 13, 114, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 33, 80, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 35, 78, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 36, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 37, 76, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 42, 72, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 43, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 47, 68, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 48, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 51, 65, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 55, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 67, 54, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 77, 48, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 84, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 115, 29, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 202, 127, 24, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 32, 85, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 39, 75, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 40, 74, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 45, 70, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 50, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 53, 64, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 57, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 60, 59, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 63, 57, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 66, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 71, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 76, 49, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 83, 45, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 203, 123, 26, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 7, 131, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 34, 80, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 35, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 36, 78, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 37, 77, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 42, 73, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 43, 72, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 47, 69, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 48, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 55, 63, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 59, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 62, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 70, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 75, 50, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 80, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 82, 46, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 204, 119, 28, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 8, 128, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 11, 121, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 39, 76, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 40, 75, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 45, 71, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 50, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 53, 65, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 57, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 66, 56, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 69, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 74, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 92, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 94, 40, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 96, 39, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 98, 38, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 205, 100, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 6, 135, "Bo3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 35, 80, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 36, 79, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 37, 78, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 42, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 43, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 47, 70, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 48, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 52, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 55, 64, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 59, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 62, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 65, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 80, 48, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 89, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 91, 42, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 206, 103, 36, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 12, 120, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 16, 114, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 19, 108, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 22, 102, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 25, 96, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 29, 90, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 33, 84, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 34, 82, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 39, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 40, 76, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 45, 72, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 50, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 57, 63, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 69, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 74, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 79, 49, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 88, 44, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 108, 34, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 207, 129, 25, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 10, 126, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 14, 117, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 36, 80, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 42, 75, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 43, 74, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 47, 71, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 48, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 52, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 55, 65, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 59, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 62, 60, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 65, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 68, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 73, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 78, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 85, 46, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 87, 45, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 208, 125, 27, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 7, 135, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 11, 124, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 20, 105, "DaH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 35, 82, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 38, 79, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 39, 78, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 40, 77, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 45, 73, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 50, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 54, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 57, 64, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 61, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 64, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 72, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 77, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 209, 84, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 8, 132, "Koh" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 34, 84, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 42, 76, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 43, 75, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 47, 72, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 48, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 52, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 59, 63, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 68, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 83, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 96, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 210, 98, 40, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 6, 138, "Bo3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 9, 128, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 12, 122, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 33, 86, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 35, 83, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 36, 82, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 38, 80, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 39, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 40, 78, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 45, 74, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 50, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 54, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 57, 65, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 61, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 64, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 67, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 72, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 77, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 82, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 93, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 95, 42, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 101, 39, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 103, 38, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 211, 105, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 13, 120, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 14, 119, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 34, 85, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 42, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 43, 76, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 47, 73, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 48, 72, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 52, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 56, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 59, 64, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 71, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 76, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 81, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 90, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 92, 44, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 108, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 212, 126, 28, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 11, 127, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 35, 84, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 36, 83, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 37, 82, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 38, 81, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 39, 80, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 40, 79, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 45, 75, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 50, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 54, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 61, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 64, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 67, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 75, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 80, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 213, 89, 46, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 10, 129, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 34, 86, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 42, 78, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 43, 77, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 47, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 48, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 52, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 56, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 59, 65, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 63, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 71, 57, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 214, 88, 47, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 38, 82, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 39, 81, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 45, 76, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 50, 72, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 54, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 58, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 61, 64, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 67, 60, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 70, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 75, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 80, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 85, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 215, 87, 48, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 7, 139, "GO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 8, 135, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 9, 132, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 12, 126, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 16, 120, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 19, 114, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 22, 108, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 33, 90, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 35, 86, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 37, 84, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 41, 80, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 42, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 43, 78, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 47, 75, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 48, 74, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 52, 71, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 56, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 63, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 66, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 74, 56, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 79, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 84, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 97, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 99, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 101, 41, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 216, 103, 40, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 34, 88, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 39, 82, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 45, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 50, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 54, 70, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 58, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 61, 65, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 70, 59, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 73, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 78, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 83, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 94, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 96, 44, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 108, 38, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 110, 37, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 133, 27, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 217, 138, 25, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 10, 132, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 11, 131, "Ma" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 35, 87, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 36, 86, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 38, 84, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 41, 81, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 42, 80, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 47, 76, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 48, 75, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 52, 72, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 56, 69, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 60, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 63, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 66, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 69, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 91, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 93, 46, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 218, 113, 36, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 6, 144, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 34, 89, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 44, 79, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 45, 78, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 50, 74, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 54, 71, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 58, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 73, 58, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 78, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 83, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 219, 90, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 8, 138, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 12, 128, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 15, 122, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 33, 92, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 35, 88, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 36, 87, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 37, 86, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 39, 84, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 41, 82, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 42, 81, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 47, 77, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 48, 76, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 52, 73, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 56, 70, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 60, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 63, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 66, 63, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 69, 61, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 72, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 77, 56, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 82, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 220, 89, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 44, 80, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 45, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 50, 75, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 54, 72, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 58, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 62, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 65, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 68, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 76, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 81, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 88, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 101, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 221, 103, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 7, 144, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 10, 135, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 11, 134, "Ma" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 13, 126, "BY" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 34, 91, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 36, 88, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 37, 87, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 38, 86, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 40, 84, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 41, 83, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 42, 82, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 47, 78, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 48, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 52, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 56, 71, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 60, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 72, 60, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 87, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 98, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 100, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 222, 108, 40, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 33, 94, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 35, 90, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 44, 81, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 45, 80, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 50, 76, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 54, 73, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 58, 70, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 62, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 65, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 68, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 71, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 76, 58, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 81, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 86, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 95, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 223, 97, 46, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 6, 147, "Bo3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 8, 141, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 34, 92, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 37, 88, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 38, 87, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 39, 86, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 40, 85, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 47, 79, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 48, 78, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 52, 75, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 56, 72, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 60, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 75, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 80, 56, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 85, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 94, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 224, 116, 37, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 12, 132, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 19, 120, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 35, 91, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 36, 90, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 42, 84, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 44, 82, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 45, 81, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 50, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 54, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 58, 71, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 62, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 65, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 68, 64, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 71, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 79, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 84, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 91, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 225, 93, 49, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 11, 137, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 16, 126, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 33, 96, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 37, 89, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 38, 88, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 39, 87, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 40, 86, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 41, 85, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 47, 80, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 48, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 52, 76, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 56, 73, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 60, 70, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 64, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 67, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 75, 60, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 90, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 226, 141, 27, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 10, 139, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 34, 94, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 35, 92, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 43, 84, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 44, 83, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 45, 82, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 50, 78, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 54, 75, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 58, 72, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 62, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 71, 63, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 74, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 79, 58, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 84, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 89, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 102, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 104, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 106, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 227, 108, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 6, 150, "Bo3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 7, 146, "GO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 8, 144, "BKW" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 37, 90, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 38, 89, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 39, 88, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 40, 87, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 41, 86, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 42, 85, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 47, 81, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 48, 80, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 52, 77, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 56, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 60, 71, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 64, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 67, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 70, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 78, 59, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 83, 56, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 88, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 99, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 228, 101, 46, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 12, 134, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 15, 128, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 33, 98, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 34, 95, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 36, 92, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 44, 84, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 45, 83, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 50, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 54, 76, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 58, 73, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 62, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 74, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 77, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 82, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 87, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 96, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 229, 98, 48, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 35, 94, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 38, 90, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 39, 89, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 40, 88, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 41, 87, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 47, 82, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 48, 81, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 52, 78, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 56, 75, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 60, 72, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 64, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 67, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 70, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 73, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 81, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 230, 95, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 13, 132, "BY" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 36, 93, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 37, 92, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 43, 86, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 44, 85, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 45, 84, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 50, 80, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 54, 77, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 58, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 62, 71, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 66, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 69, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 77, 61, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 87, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 231, 94, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 6, 153, "BvE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 39, 90, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 40, 89, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 41, 88, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 47, 83, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 48, 82, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 52, 79, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 56, 76, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 60, 73, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 64, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 73, 64, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 76, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 81, 59, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 86, 56, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 232, 93, 52, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 33, 101, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 34, 98, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 37, 93, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 38, 92, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 43, 87, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 44, 86, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 45, 85, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 50, 81, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 54, 78, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 58, 75, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 62, 72, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 66, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 69, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 72, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 80, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 85, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 92, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 103, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 105, 46, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 107, 45, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 109, 44, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 111, 43, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 233, 113, 42, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 12, 138, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 15, 132, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 19, 126, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 35, 97, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 36, 95, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 40, 90, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 41, 89, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 47, 84, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 52, 80, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 56, 77, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 57, 76, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 60, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 64, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 76, 63, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 84, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 91, 54, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 100, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 234, 102, 48, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 34, 99, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 37, 94, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 38, 93, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 39, 92, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 43, 88, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 44, 87, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 49, 83, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 50, 82, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 54, 79, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 55, 78, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 62, 73, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 66, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 69, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 72, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 75, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 80, 61, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 90, 55, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 235, 99, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 6, 156, "Bo3" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 7, 153, "GW2" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 16, 132, "XBZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 33, 103, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 35, 98, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 36, 96, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 46, 86, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 47, 85, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 52, 81, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 57, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 60, 75, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 64, 72, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 79, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 84, 59, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 89, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 96, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 236, 98, 51, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 34, 100, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 37, 95, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 38, 94, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 39, 93, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 40, 92, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 42, 90, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 43, 89, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 44, 88, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 49, 84, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 50, 83, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 54, 80, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 55, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 59, 76, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 62, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 66, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 69, 69, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 72, 67, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 75, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 78, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 83, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 88, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 237, 95, 53, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 12, 140, "XB" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 35, 99, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 36, 97, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 46, 87, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 47, 86, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 52, 82, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 57, 78, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 64, 73, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 68, 70, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 71, 68, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 74, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 82, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 87, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 94, 54, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 107, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 109, 46, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 111, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 238, 113, 44, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 33, 105, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 39, 94, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 40, 93, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 41, 92, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 42, 91, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 43, 90, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 44, 89, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 49, 85, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 50, 84, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 54, 81, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 55, 80, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 59, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 62, 75, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 66, 72, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 78, 64, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 93, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 104, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 106, 48, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 239, 116, 43, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 7, 154, "GO" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 34, 102, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 35, 100, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 36, 98, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 37, 97, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 38, 96, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 46, 88, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 47, 87, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 52, 83, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 57, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 61, 76, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 64, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 68, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 71, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 74, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 82, 62, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 87, 59, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 92, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 101, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 240, 103, 50, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 41, 93, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 42, 92, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 43, 91, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 44, 90, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 49, 86, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 50, 85, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 54, 82, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 55, 81, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 59, 78, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 66, 73, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 78, 65, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 81, 63, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 86, 60, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 91, 57, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 100, 52, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 241, 153, 28, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 15, 138, "MTS" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 16, 135, "Ma" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 33, 107, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 37, 98, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 46, 89, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 47, 88, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 52, 84, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 57, 80, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 61, 77, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 64, 75, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 68, 72, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 71, 70, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 74, 68, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 77, 66, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 85, 61, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 90, 58, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 242, 99, 53, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 7, 156, "Koh" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 11, 153, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 12, 144, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 21, 132, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 22, 128, "NBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 26, 126, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 31, 123, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 32, 122, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 34, 104, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 35, 102, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 36, 100, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 38, 97, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 40, 96, "BZ" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 41, 94, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 42, 93, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 43, 92, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 44, 91, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 45, 90, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 49, 87, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 50, 86, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 51, 85, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 54, 83, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 55, 82, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 56, 81, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 59, 79, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 60, 78, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 63, 76, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 66, 74, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 67, 73, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 70, 71, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 73, 69, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 76, 67, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 79, 65, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 81, 64, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 82, 63, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 84, 62, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 87, 60, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 89, 59, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 92, 57, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 94, 56, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 96, 55, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 98, 54, "VE" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 101, 52, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 103, 51, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 105, 50, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 107, 49, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 109, 48, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 111, 47, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 113, 46, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 115, 45, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 117, 44, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 119, 43, "Var" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 122, 42, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 127, 41, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 132, 39, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 133, 37, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 137, 36, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 142, 35, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 147, 33, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 152, 32, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 153, 29, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 154, 28, "Vx" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 157, 27, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 162, 26, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 163, 25, "BCH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 167, 24, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 172, 23, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 177, 21, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 182, 20, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 183, 19, "BCH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 187, 18, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 192, 17, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 197, 15, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 202, 14, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 203, 13, "BCH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 207, 12, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 212, 11, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 217, 9, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 222, 8, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 223, 7, "BCH" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 227, 6, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 232, 5, "XBC" ) then GUAVA_TEMP_VAR := false; fi; if YouWantThisCode( 243, 237, 3, "Ham" ) then GUAVA_TEMP_VAR := false; fi; guava-3.6/tbl/bdtable2.g0000644017361200001450000122572611026723452014773 0ustar tabbottcrontab#A BOUNDS FOR q = 2 ## ## Each entry [n][k] of one of the tables below contains ## a bound (the first table contains lowerbounds, the ## second upperbounds) for a code with wordlength n and ## dimension k. Each entry contains one of the following ## items: ## ## FOR LOWER- AND UPPERBOUNDSTABLE ## [ 0, , ] from Brouwers table ## ## FOR LOWERBOUNDSTABLE ## empty k= 0, 1, n or d= 2 or (k= 2 and q= 2) ## 1 shortening a [ n + 1, k + 1 ] code ## 2 puncturing a [ n + 1, k ] code ## 3 extending a [ n - 1, k ] code ## [ 4,
] constr. B, of a [ n+dd, k+dd-1, d ] code ## [ 5, ] an UUV-construction with a [ n / 2, k1 ] ## and a [ n / 2, k - k1 ] code ## [ 6, ] concatenation of a [ n1, k ] and a ## [ n - n1, k ] code ## [ 7, ] taking the residue of a [ n1, k + 1 ] code ## 20 taking the subcode of a [ n, k + 1 ] code ## [21,,] constr. B2 of a [ n+s, k+s-2j-1, d+2j] code ## [22,,] an UUAVUVW-construction with a [ n/3, k1 ], ## a [ n/3, k2 ] and a [ n/3, k-(k1+k2) ] code ## ## FOR UPPERBOUNDSTABLE ## empty trivial and Singleton bound ## 11 shortening a [ n + 1, k + 1 ] code ## 12 puncturing a [ n + 1, k ] code ## 13 extending a [ n - 1, k ] code ## [ 14,
] constr. B, with dd = dual distance ## [ 15, ] Griesmer bound ## [ 16, ] One-step Griesmer bound GUAVA_BOUNDS_TABLE[1][2] := [ #V n = 1 [ ], #V n = 2 [ ], #V n = 3 [ ], #V n = 4 [ ,], #V n = 5 [ ,, 20], #V n = 6 [ ,, 1, 20], #V n = 7 [ ,, 1, 2, 20], #V n = 8 [ ,, 20, [5, 3], 20, 20], #V n = 9 [ ,, 20, 1, 1, 20, 20], #V n = 10 [ ,, 1, 20, 1, 1, 20, 20], #V n = 11 [ ,, 1, 2, 20, 1, 1, 20, 20], #V n = 12 [ ,, 20, [5, 3], 20, 20, 1, 1, 20, 20], #V n = 13 [ ,, 1, 1, 1, 20, 20, 1, 1, 20, 20], #V n = 14 [ ,, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20], #V n = 15 [ ,, 20, 1, 2, 1, 1, 20, 20, 1, 2, 20, 20], #V n = 16 [ ,, 20, 20, [5, 4], 20, 1, 1, 20, 20, [5, 7], 20, 20, 20], #V n = 17 [ ,, [6, 3], 20, 1, 1, 20, 1, 2, 20, 1, 1, 20, 20, 20], #V n = 18 [ ,, 3, 20, 20, 1, 1, 20, [0, 6, "QR"], 20, 20, 1, 1, 20, 20, 20], #V n = 19 [ ,, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 20 [ ,, [6, 6], 1, [7, 37], 20, 20, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 21 [ ,, 3, 20, 3, 20, 20, 20, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 22 [ ,, 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 23 [ ,, 20, 1, 2, 1, [0, 9, "HP"], 20, 20, 20, 1, 2, 1, [0, 5, "Wa"], 20, 20, 1, 1, 20, 20, 20], #V n = 24 [ ,, [6, 3], 20, [5, 4], 20, 3, 20, 20, 20, 20, [0, 8, "QR"], 20, 3, 20, 20, 20, 1, 1, 20, 20, 20], #V n = 25 [ ,, 3, 20, 1, 1, 1, 1, 20, 20, 20, 3, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20], #V n = 26 [ ,, 1, 1, 20, 1, 2, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20], #V n = 27 [ ,, [6, 6], 1, 2, 20, [7, 50], 20, 1, [0, 9, "Pi2"], 20, 20, 1, [0, 7, "Ka"], 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20], #V n = 28 [ ,, 3, 20, [5, 4], 20, 1, 1, 20, 3, 20, 20, 20, 3, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20], #V n = 29 [ ,, 1, 1, 1, 2, 20, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20], #V n = 30 [ ,, 20, 1, 1, 2, 20, 20, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20], #V n = 31 [ ,, [6, 3], 20, 1, 2, 1, 20, 20, 1, 2, 1, 2, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 20, 1, 2, 20, 20, 20], #V n = 32 [ ,, 3, 20, 20, [5, 5], 1, 2, 20, 20, [0, 12, "XBC"], 20, [0, 10, "Sh1"], 20, 20, 20, [0, 8, "CS"], 20, 20, 20, 1, 1, 20, 20, 20, [5, 15], 20, 20, 20, 20], #V n = 33 [ ,, 2, 20, 20, 3, 20, [0, 14, "HY2"], 20, 20, 1, 2, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, [0, 5, "Ch0"], 20, 20, 1, 1, 20, 20, 20, 20], #V n = 34 [ ,, [6, 6], [6, 4], 20, 1, 1, 1, 2, 20, 20, [0, 12, "Sh1"], 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 35 [ ,, 3, 3, 20, 20, 1, 2, [0, 14, "Pi"], 20, 20, 1, 1, 20, 1, 2, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 36 [ ,, 3, 1, 1, 20, 20, [0, 16, "DHM"], 1, 1, 20, 20, 1, [0, 11, "Mo"], 20, [0, 10, "Sh1"], 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 37 [ ,, 1, [6, 7], 1, [7, 70], 20, 1, [0, 15, "FB"], 1, 1, 20, 20, 3, 20, 1, 1, 20, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 38 [ ,, [6, 3], 3, 20, 3, 20, 20, 3, 20, 1, 2, 20, 1, 1, 20, 1, 1, 20, 20, 20, [0, 8, "Sh1"], 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 39 [ ,, 3, 1, [6, 15], 1, [0, 17, "vT3"], 20, 1, [0, 15, "X"], 20, [0, 14, "BE"], 20, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 40 [ ,, 2, 20, 3, 20, 3, 20, 20, 3, 20, 3, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 41 [ ,, [6, 6], [6, 11], 1, 1, 1, 2, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 1, 2, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 42 [ ,, 3, 3, 20, 1, [0, 19, "vT1"], [0, 18, "BZ"], 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, [0, 10, "QR"], 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 43 [ ,, 3, 1, 1, 20, 3, 1, 1, 20, 20, 1, 1, 1, [0, 13, "cy"], 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 44 [ ,, 1, [6, 14], 1, [0, 21, "Bel"], 1, 2, 1, 2, 20, 20, 1, 2, 3, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 45 [ ,, [6, 3], 3, 20, 3, 20, [0, 20, "BZ"], 20, [0, 18, "Gu9"], 20, 20, 20, [0, 16, "Bo0"], 1, [0, 13, "DJ"], 20, 20, 20, 20, 1, 1, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 46 [ ,, 3, 1, 1, 1, 1, 1, 1, 1, [0, 17, "GG"], 20, 20, 3, 20, 3, 20, 20, 20, 20, 20, 1, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 47 [ ,, 2, 20, 1, 2, 1, 2, 1, 2, 3, 20, 20, 1, 1, 1, 2, 20, 20, 20, 20, 20, 1, 2, 1, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, [0, 5, "Ch0"], 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 48 [ ,, [6, 6], 20, 20, [5, 5], 20, [0, 22, "BZ"], 20, [0, 20, "GB5"], 1, 1, 20, 20, 1, [0, 15, "FB"], [0, 14, "BZ"], 20, 20, 20, 20, 20, 20, [0, 12, "QR"], 1, 1, 20, 20, 20, 20, [0, 8, "RR"], 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 49 [ ,, 3, [6, 4], 20, 1, 1, 2, 20, 1, [0, 19, "B2x"], 1, [0, 17, "B2x"], 20, 20, 3, 1, 1, 20, 20, 20, 20, 20, 3, 20, 1, [0, 9, "EB3"], 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 50 [ ,, 3, 3, 20, 20, 1, 2, 20, 20, 3, 20, 3, 20, 20, 1, 2, 1, 2, 20, 20, 20, 20, 3, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 51 [ ,, 2, 1, 1, 20, 20, [0, 24, "cy"], 1, 20, 1, 1, 1, 1, 20, 20, [0, 16, "cy"], 20, [0, 14, "cy"], 20, 20, 20, 20, 1, [0, 11, "DJ"], 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 52 [ ,, [6, 3], [6, 7], 1, [7, 101], 20, 3, 1, [0, 21, "Pu"], 20, 1, 1, 1, 1, 20, 1, 1, 1, 1, 20, 20, 20, 20, 3, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 53 [ ,, 3, 3, 20, 3, 20, 3, 20, 3, 20, 20, 1, 1, 1, 2, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 54 [ ,, 2, 1, 1, 2, 20, 1, 1, 1, [0, 21, "GG"], 20, 20, 1, 1, 2, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 55 [ ,, [6, 6], 20, 1, 2, 2, 20, 1, 2, 3, 20, 20, 20, 1, [0, 19, "LC"], 20, 20, 20, 1, [0, 15, "cy"], 1, [0, 13, "GG"], 20, 20, 20, 1, 1, 20, 20, [0, 10, "Sh1"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 56 [ ,, 3, [6, 11], 20, [5, 5], [7, 107], 20, 20, [0, 24, "BZ"], 1, 1, 20, 20, 20, 3, [0, 17, "MoY"], 20, 20, 20, 3, 20, 3, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 57 [ ,, 3, 3, 20, 3, 1, 2, 20, 1, [0, 23, "SRC"], 1, 2, 20, 20, 3, 3, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 58 [ ,, 2, 1, 1, 1, 2, [0, 26, "?"], 20, 20, 3, 20, [0, 22, "GG"], 20, 20, 3, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 59 [ ,, [6, 3], [6, 14], 1, 2, [0, 28, "?"], 1, 1, 20, 1, 1, 1, 1, 20, 1, 2, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 60 [ ,, 3, 3, 20, [5, 5], 1, [0, 27, "Sa"], 1, [0, 25, "Ch"], 20, 1, 1, 1, 1, 20, [0, 20, "CDJ"], 20, 1, [0, 17, "We"], 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 61 [ ,, 2, 1, 1, 1, 2, 3, 20, 3, 20, 20, 1, 1, 1, 1, 1, 1, 20, 3, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 62 [ ,, [6, 6], 20, 1, 1, 2, 1, 1, 1, 2, 20, 20, 1, 1, 1, 1, 1, 2, 1, 1, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20], #V n = 63 [ ,, 3, 20, 20, 1, 2, 20, 1, 2, [0, 26, "BCH"], 20, 20, 20, 1, 2, 1, 2, [0, 20, "GW2"], 20, 1, 1, 20, 20, 20, 20, 1, [0, 15, "B2x"], 1, 2, 20, 20, 20, 20, 1, 2, 20, 1, 1, 20, 20, 20, 20, 20, 1, [0, 7, "cy"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20], #V n = 64 [ ,, 3, [6, 4], 20, 20, [5, 6], 2, 20, [0, 28, "XBC"], 1, 1, 20, 20, 20, [0, 24, "XBC"], 20, [0, 22, "XBC"], 1, 1, 20, 1, 1, 20, 20, 20, 20, 3, 20, [0, 14, "B2x"], 20, 20, 20, 20, 20, [0, 12, "XBC"], 20, 20, 1, 2, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, [5, 31], 20, 20, 20, 20, 20], #V n = 65 [ ,, 2, 3, 20, 20, 3, [0, 30, "DHM"], 20, 1, [0, 27, "X"], 1, [0, 25, "cy"], 20, 20, 1, 1, 2, 20, 1, 2, 20, 1, [0, 17, "GG1"], 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, [0, 10, "BCH"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, [0, 5, "cy"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 66 [ ,, [6, 3], 2, 20, 20, 3, 1, 1, 20, 3, 20, 3, 20, 20, 20, 1, [0, 23, "X"], 20, 20, [0, 20, "CZ"], 20, 20, 3, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 67 [ ,, 3, [6, 7], [6, 5], 20, 1, [0, 31, "X"], 1, [0, 29, "X"], 3, 20, 3, 20, 20, 20, 20, 3, 20, 20, 1, 1, 20, 3, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, [0, 11, "X"], 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 68 [ ,, 2, 3, 3, 20, 20, 3, 20, 3, 1, 1, 1, 1, 20, 20, 20, 3, 2, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 3, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 69 [ ,, [6, 6], 3, 1, 1, 20, 1, 1, 2, 20, 1, 2, 1, 1, 20, 20, 3, [0, 22, "BZ"], 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, [0, 8, "Sh1"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 70 [ ,, 3, 1, [6, 15], 1, [7, 135], 20, 1, [0, 31, "X"], [0, 29, "GG1"], 20, [0, 28, "GB0"], 20, 1, [0, 25, "X"], 20, 3, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 2, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 71 [ ,, 3, [6, 11], 3, 20, 3, 20, 20, 3, 3, 20, 1, 2, 20, 3, 20, 1, 2, 1, 2, 20, 20, 20, 1, 1, 1, [0, 17, "SRC"], 20, 20, 20, 20, 20, 1, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 72 [ ,, 2, 3, 1, [7, 141], 3, 20, 20, 3, 1, [0, 29, "GG1"], 20, [7, 127], 20, 1, [0, 25, "XX"], 20, [0, 24, "BZ"], 20, [0, 22, "BZ"], 20, 20, 20, 20, 1, 2, 3, 20, 20, 20, 20, 20, 20, 1, 2, 1, 20, 20, 20, [0, 12, "To"], 20, 20, 20, 20, 1, [0, 9, "EB3"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 73 [ ,, [6, 3], 2, 20, 3, 1, 2, 20, 1, [0, 31, "GG1"], 3, 20, 1, 1, 20, 3, 20, 1, 1, 1, 1, 20, 20, 20, 20, [0, 20, "cy"], 1, 1, 20, 20, 20, 20, 20, 20, [0, 16, "cy"], 1, [0, 13, "XX"], 20, 20, 1, 1, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 74 [ ,, 3, [6, 14], [6, 15], 1, 2, [0, 34, "?"], 20, 20, 3, 1, 2, 20, 1, [0, 27, "X"], 1, [0, 25, "XX"], 20, 1, 2, 1, 2, 20, 20, 20, 3, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 3, 20, 20, 20, 1, [0, 11, "To"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 75 [ ,, 2, 3, 3, 20, [0, 36, "?"], 1, 2, 20, 1, [0, 31, "GG1"], [0, 30, "To2"], 20, 20, 3, 20, 3, 20, 20, [0, 24, "BZ"], 20, [0, 22, "BZ"], 20, 20, 20, 1, 2, 20, 1, 1, 20, 20, 20, 20, 3, 20, 1, [0, 13, "XX"], 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 76 [ ,, [6, 6], 3, 1, [6, 31], 1, [0, 35, "Sa"], [0, 34, "Bo0"], 20, 20, 3, 1, 1, 20, 1, [0, 27, "XX"], 3, 20, 20, 1, 1, 1, 1, 20, 20, 20, [0, 20, "cyx"], 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 77 [ ,, 3, 1, [6, 15], 3, 20, 3, 1, 2, 20, 1, 2, 1, 1, 20, 3, 2, 20, 20, 20, 1, 2, 1, 2, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, [0, 9, "EB3"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 78 [ ,, 3, 20, 3, 1, [7, 151], 1, 2, [0, 34, "EB2"], 20, 20, [0, 32, "To"], 20, 1, [0, 29, "GG1"], 1, [0, 27, "XX"], 20, 20, 20, 20, [0, 24, "BZ"], 20, [0, 22, "BZ"], 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 2, 20, 20, 20, 20, 1, [0, 11, "ZL"], 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 79 [ ,, 2, [6, 4], 1, [6, 31], 3, 20, [0, 36, "JS"], 2, 20, 20, 1, 2, 20, 3, 20, 3, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 2, 1, 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 80 [ ,, [6, 3], 3, 20, 3, 1, 2, 1, [0, 35, "GB1"], 20, 20, 20, [0, 32, "Pi"], 20, 3, 20, 3, 1, 2, 20, 20, 20, 1, 2, 1, 2, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, [0, 16, "QR"], 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 81 [ ,, 3, 2, 20, 1, [7, 158], [0, 38, "BZ"], 20, 3, 2, 20, 20, 3, 20, 3, 20, 3, 20, [0, 26, "CZ"], 20, 20, 20, 20, [0, 24, "BZ"], 20, [0, 22, "BZ"], 20, 20, 20, [0, 20, "GG"], 20, 20, 20, 20, 1, 1, 20, 20, 3, 20, [0, 14, "BET"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 82 [ ,, 2, [6, 7], [6, 20], 20, 3, 1, 1, 2, 2, 20, 20, 1, 1, 2, 20, 1, 1, 1, 2, 20, 20, 20, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 3, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, [0, 6, "Sh1"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 83 [ ,, [6, 6], 3, 3, 20, 1, 2, 1, 2, 2, 1, 20, 20, 1, [0, 31, "GG1"], [0, 29, "GG1"], 20, 1, 1, 2, 20, 20, 20, 20, 1, 2, 1, 2, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 84 [ ,, 3, 3, 1, [6, 31], 20, [0, 40, "BZ"], 20, [0, 38, "EB2"], [0, 36, "GB0"], 1, 2, 20, 20, 3, 3, 20, 20, 1, [0, 27, "We"], 2, 20, 20, 20, 20, [0, 24, "BZ"], 20, [0, 22, "BZ"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 85 [ ,, 3, 1, [6, 23], 3, 20, 1, 1, 2, 1, 2, [0, 34, "GG"], 20, 20, 3, 3, 20, 20, 20, 3, [0, 26, "GG1"], 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 86 [ ,, 2, [6, 11], 3, 1, [7, 167], 20, 1, 2, 2, [0, 36, "GW2"], 1, 1, 20, 3, 1, [0, 29, "X"], 20, 20, 3, 1, 2, 20, 20, 20, 20, 1, 2, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 87 [ ,, [6, 3], 3, 1, [6, 31], 3, 20, 20, [0, 40, "EB2"], 2, 1, [0, 35, "GG"], 1, 2, 1, 2, 3, 20, 20, 1, 1, 2, 20, 20, 20, 20, 20, [0, 24, "BZ"], 20, [0, 22, "cy"], 20, 20, 20, 20, [0, 20, "GG1"], 20, 20, 20, 20, 20, 1, 1, 1, 2, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 88 [ ,, 3, 2, 20, 3, 1, [0, 41, "GG1"], 20, 1, 2, 2, 3, 20, [0, 34, "GG"], 20, [0, 32, "cyx"], 2, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 1, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 2, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 89 [ ,, 2, [6, 14], [6, 27], 1, 2, 3, 20, 20, [0, 40, "cy"], 2, 1, 1, 2, 20, 1, [0, 31, "BEx"], 1, 20, 20, 20, [0, 28, "HS"], [0, 25, "MoY"], 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, [0, 11, "cy"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, [0, 8, "Sh1"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 90 [ ,, [6, 6], 3, 3, 20, [5, 6], 2, 20, 20, 1, 2, 20, 1, [0, 35, "GG"], 20, 20, 3, 1, 1, 20, 20, 3, 3, 20, 20, 20, 20, 20, 20, [0, 24, "BZ"], [0, 21, "XBZ"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, [0, 18, "QR"], 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 91 [ ,, 3, 3, 1, 1, 1, 2, 1, 20, 20, [0, 40, "Gu9"], 20, 20, 3, [0, 33, "GG1"], 20, 1, 1, 1, 1, 20, 3, 1, 1, 20, 20, 20, 20, 20, 3, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 3, 2, 20, 20, 20, 20, [0, 14, "cy"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, [0, 9, "Hg"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 92 [ ,, 3, 1, [6, 30], 1, [0, 45, "Bel"], [0, 44, "Ja2"], 1, 2, 20, 3, 2, 20, 3, 3, 20, 20, 1, 1, 1, 1, 2, 20, 1, 2, 20, 20, 20, 20, 3, 1, 2, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 3, [0, 16, "AGP"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 93 [ ,, 2, 20, 3, 20, 3, 3, 20, [0, 42, "EB2"], 20, 3, 2, 20, 3, 3, 20, 20, 20, 1, 1, 1, 2, 2, 20, [0, 26, "DaH"], 20, 20, 20, 20, 3, 20, [0, 22, "cy"], 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 3, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 94 [ ,, [6, 3], [6, 4], 1, 1, 2, 1, 1, 2, 20, 1, 2, 1, 2, 2, 20, 20, 20, 20, 1, 1, 2, [0, 28, "GG1"], 20, 3, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 3, 20, 1, [0, 15, "Ch"], 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 95 [ ,, 3, 3, 20, 1, 2, 2, 1, 2, 20, 20, [0, 40, "CZ"], 1, 2, 2, 1, 20, 20, 20, 20, 1, [0, 31, "GG1"], 1, [0, 27, "GG1"], 1, 1, 20, 20, 20, 20, 1, [0, 23, "Ch"], 1, 2, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 3, 20, 20, 20, 20, 20, [0, 14, "cyx"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 96 [ ,, 2, 2, 20, 20, [5, 6], [0, 46, "vT1"], 20, [0, 44, "GB5"], 2, 20, 3, 20, [0, 38, "GG"], [0, 36, "BZ"], 1, 1, 20, 20, 20, 20, 3, 20, 3, 20, 1, 1, 20, 20, 20, 20, 3, 20, [0, 22, "BZ"], 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, [0, 8, "Sh1"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 97 [ ,, [6, 6], [6, 7], 20, 20, 3, 2, 20, 3, [0, 42, "GG1"], 20, 1, 1, 2, 3, 20, 1, 1, 20, 20, 20, 3, 1, 1, 2, 20, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 98 [ ,, 3, 3, [6, 5], 20, 1, 2, 1, 2, 2, 20, 20, 1, [0, 39, "GG"], 1, 1, 20, 1, 2, 20, 20, 3, 1, 1, 2, 20, 20, 1, 1, 20, 20, 20, 1, 2, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 99 [ ,, 3, 3, 3, 20, 20, [0, 48, "DHM"], 1, 2, [0, 43, "GB"], 1, 20, 20, 3, 1, 1, 2, 20, [0, 34, "CZ"], 20, 20, 1, 1, 1, 2, 2, 20, 20, 1, [0, 25, "DaH"], 20, 20, 20, [0, 24, "To"], 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, [0, 11, "Roe"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 100 [ ,, 2, 2, 1, 1, 20, 3, 20, [7, 191], 3, 1, [0, 41, "GG"], 20, 3, 1, 1, 2, 20, 3, 20, 20, 20, 1, 1, 2, 2, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 1, [0, 21, "Ch"], 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 2, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 101 [ ,, [6, 3], [6, 11], [6, 15], 1, [7, 198], 1, 1, 2, 2, 20, 3, 20, 3, 20, 1, [0, 37, "Gra"], 20, 3, 20, 20, 20, 20, 1, 2, 2, 20, 20, 20, 1, 1, 20, 20, 20, 1, 2, 20, 3, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 2, 1, 20, 20, 20, 20, 20, 1, [0, 13, "Roe"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 102 [ ,, 3, 3, 3, 20, 3, 20, 1, [7, 195], 2, 1, 1, 1, 1, 1, 20, 3, 1, 1, 2, 20, 20, 20, 20, [0, 32, "DaH"], [0, 30, "DaH"], 20, 20, 20, 20, 1, 1, 20, 20, 20, [0, 24, "QC"], 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 2, 1, 1, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 103 [ ,, 2, 2, 1, 1, 2, 20, 20, 3, [0, 46, "GG1"], 1, [7, 188], 1, [0, 41, "GG"], 1, 2, 3, 1, 1, 2, 20, 20, 20, 20, 3, 3, 1, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 2, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 104 [ ,, [6, 6], [6, 14], 20, 1, [0, 51, "Bel"], 2, 20, 3, 2, 20, 3, 20, 3, 20, [0, 40, "GW2"], 1, 2, 1, 2, 1, 20, 20, 20, 3, 3, 1, 1, 20, 20, 20, 20, 1, 2, 20, 20, 1, 2, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, [0, 20, "QR"], 1, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 105 [ ,, 3, 3, [6, 15], 20, 3, [0, 50, "JS"], 20, 1, 2, 20, 1, 1, 2, 20, 3, 20, [0, 38, "GW2"], 20, [0, 36, "We"], 1, [0, 33, "GG1"], 20, 20, 3, 1, 1, 1, 1, 20, 20, 20, 20, [0, 26, "GW2"], 20, 20, 20, [0, 24, "QC"], 20, 20, 1, [0, 21, "HS"], 20, 20, 20, 20, 20, 20, 20, 20, 3, 1, 2, 20, 1, [0, 15, "Roe"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 106 [ ,, 3, 3, 3, 20, 3, 2, 20, 20, [0, 48, "GG1"], 20, 20, 1, [7, 191], 20, 3, 20, 3, 20, 3, 20, 3, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 3, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 2, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 107 [ ,, 2, 3, 1, 1, 1, 2, 1, 20, 3, 2, 20, 20, 3, 20, 1, 1, 1, 2, 3, 20, 1, 2, 20, 20, 1, 2, 1, 2, 1, 2, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, [0, 19, "Ka"], 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 108 [ ,, [6, 3], 1, [6, 15], 1, [7, 213], [0, 52, "Ja2"], 1, 2, 3, [0, 46, "GB"], 20, 20, 3, [0, 41, "Ch"], 20, 1, 1, 2, 1, 1, 20, [0, 34, "DaH"], 20, 20, 20, [0, 32, "B2x"], 20, [0, 30, "B2x"], 20, [0, 28, "B2x"], 20, 20, 20, [0, 26, "BJK"], 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 109 [ ,, 3, [6, 4], 3, 20, 3, 3, 20, [0, 50, "EB1"], 3, 1, 2, 20, 3, 3, 20, 20, 1, 2, 20, 1, [0, 35, "GG1"], 1, 1, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 3, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 110 [ ,, 2, 3, 1, 1, 2, 1, 1, 2, 1, 1, 2, 20, 3, 2, 20, 20, 20, [0, 40, "Pi"], 20, 20, 3, 20, 1, 2, 20, 20, 1, 1, 1, 1, 1, 1, 20, 1, 2, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 3, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 111 [ ,, [6, 6], 2, 20, 1, 2, 2, 1, 2, 20, 1, 2, 20, 1, 2, 1, 20, 20, 3, 1, 20, 1, 2, 20, [0, 34, "GW2"], 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, [0, 26, "BJK"], 20, 20, 20, 20, 20, 20, 1, 2, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 112 [ ,, 3, [6, 7], 20, 20, [5, 6], [0, 54, "vT1"], 20, [0, 52, "EB1"], 2, 20, [0, 48, "CZ"], [7, 201], 20, [0, 44, "BZ"], 1, 2, 20, 3, 1, 2, 20, [0, 36, "BZ"], 20, 3, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 20, 20, [0, 24, "B2x"], 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 113 [ ,, 3, 3, [6, 20], 20, 3, 2, 20, 3, [0, 50, "GG1"], 20, 3, 3, 20, 3, 20, [0, 42, "GG"], 20, 3, 20, [0, 38, "GG"], 20, 1, 1, 2, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 114 [ ,, 2, 3, 3, 20, 1, 2, 1, 2, 2, 20, 3, 1, [7, 203], 1, 1, 1, 1, 1, 1, 1, 1, 20, 1, 2, 1, 20, 20, 20, 20, 20, 1, 1, 1, 2, 1, [0, 27, "BHJ"], 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 115 [ ,, [6, 3], 2, 1, 1, 20, [0, 56, "DHM"], 1, 2, 2, 2, 1, 2, 3, 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, [0, 36, "GW2"], 1, 2, 20, 20, 20, 20, 20, 1, 1, 2, 20, 3, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 116 [ ,, 3, [6, 11], [6, 23], 1, [7, 229], 3, 20, [7, 223], [0, 52, "GG1"], [0, 50, "GG"], 20, [0, 48, "GW2"], 1, [0, 45, "Ch"], 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 20, 20, 20, 20, 20, 20, 1, 2, 20, 1, 1, 20, 1, 2, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 117 [ ,, 2, 3, 3, 20, 3, 1, 1, 2, 2, 2, 20, 3, 20, 3, 20, 20, 1, [0, 43, "HS"], 1, 2, 1, 2, 1, 2, 1, 2, 2, 20, 20, 20, 20, 20, 20, [0, 32, "cy"], 2, 20, 1, 1, 20, [0, 26, "cy"], 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 118 [ ,, [6, 6], 2, 1, 1, 2, 20, 1, [7, 227], 2, 2, 1, 1, 1, 2, 20, 20, 20, 3, 20, [0, 42, "GG"], 20, [0, 40, "GG"], 20, [0, 38, "GG"], 20, [0, 36, "GG"], 2, 20, 20, 20, 20, 20, 20, 3, 2, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 119 [ ,, 3, [6, 14], 20, 1, 2, 2, 20, 3, [0, 54, "GG1"], [0, 52, "GG"], 1, 2, 1, 2, [21, 8, 1], 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 120 [ ,, 3, 3, [6, 27], 20, [5, 6], [0, 58, "Bo0"], 20, 3, 2, 1, 1, 2, 20, [0, 48, "BZ"], 3, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 20, 20, 20, 20, 20, [0, 32, "cyx"], 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 121 [ ,, 2, 3, 3, 20, 3, 3, 20, 1, [7, 230], [21, 4, 1], 1, [21, 5, 2], 2, 3, 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 20, 20, 20, 20, 3, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 122 [ ,, [6, 3], 3, 1, 1, 2, 1, 2, 20, 3, 3, 20, 3, 2, 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 123 [ ,, 3, 1, [6, 30], 1, 2, 2, [0, 58, "JS"], 20, 3, 1, 1, 1, 2, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 2, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 124 [ ,, 2, [6, 4], 3, 20, [5, 6], 2, 1, [0, 57, "GG1"], 1, 1, 1, 1, 2, [0, 49, "Ch"], 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 2, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 125 [ ,, [6, 6], 3, 1, 1, 1, 2, 2, 3, 20, 1, 1, 1, 2, 3, 20, 20, 1, 1, 1, 2, 20, 20, 20, 1, 1, 1, 2, 20, 20, 20, 1, 1, 1, 2, 20, 20, 20, 1, 1, 1, 2, 20, 20, 20, 1, 1, 1, 2, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 126 [ ,, 3, 2, 20, 1, 1, 2, [0, 60, "Ja2"], 2, 20, 20, 1, 1, 2, 2, 20, 20, 20, 1, 1, 2, 20, 20, 20, 20, 1, 1, 2, 20, 20, 20, 20, 1, 1, 2, 20, 20, 20, 20, 1, 1, 2, 20, 20, 20, 20, 1, 1, 2, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20], #V n = 127 [ ,, 3, [6, 7], 20, 20, 1, 2, 1, [0, 59, "GG1"], 20, 20, 20, 1, 2, 2, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 1, 2, [0, 37, "MoY"], 20, 20, 20, 20, 1, [0, 35, "cy"], 20, 20, 20, 20, 20, 1, [0, 31, "BCH"], 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 2, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20], #V n = 128 [ ,, 2, 3, 20, 20, 20, [5, 7], 20, 3, 2, 20, 20, 20, [0, 56, "XBC"], [0, 52, "BZ"], 20, 20, 20, 20, 20, [0, 48, "XBC"], 20, 20, 20, 20, 20, 20, [0, 44, "XBC"], 3, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 1, 20, 20, 20, 20, 20, [0, 28, "XBC"], 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, [0, 22, "XBC"], 20, 20, 20, 20, 20, 20, [0, 20, "XBC"], 2, 20, 20, 20, 20, 20, 1, [0, 15, "Gp"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, [0, 11, "Gp"], 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 1, [0, 7, "Gp"], 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, [5, 63], 20, 20, 20, 20, 20, 20], #V n = 129 [ ,, [6, 3], 3, [6, 5], 20, 20, 3, 2, 3, [0, 58, "JS"], 20, 20, 20, 3, 3, 1, 20, 20, 20, 20, 3, 1, 20, 20, 20, 20, 20, 3, 3, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 1, [0, 29, "Dup"], 20, 20, 20, 20, 3, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 3, [0, 18, "BCH"], 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, [0, 13, "MMT"], 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, [0, 10, "BCH"], 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, [0, 6, "BCH"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 130 [ ,, 3, 2, 3, 20, 20, 3, [0, 62, "JS"], 3, 2, 20, 20, 20, 3, 3, 1, 1, 20, 20, 20, 3, 1, 1, 20, 20, 20, 20, 3, 3, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 3, 20, 20, 20, 20, 3, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 3, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 131 [ ,, 2, [6, 11], 2, 20, 20, 3, 2, 1, 2, 20, 20, 20, 3, 1, 2, 1, 1, 20, 20, 1, [0, 47, "BEx"], 1, 1, 20, 20, 20, 3, 1, 1, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 2, 1, 1, 20, 20, 20, 1, [0, 27, "Su"], 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 1, [0, 19, "Su"], 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 132 [ ,, [6, 6], 3, [6, 15], [6, 6], 20, 1, 2, [0, 61, "GG"], [0, 60, "Gu9"], 1, 20, 20, 3, [0, 53, "XB"], [0, 52, "BY"], 20, 1, [0, 49, "XB"], 20, 20, 3, 20, 1, 1, 20, 20, 3, [0, 39, "Vx"], 1, [0, 37, "XB"], 20, 20, 20, 3, [0, 33, "Vx"], 20, 20, 20, 20, 20, 20, [0, 32, "BE3"], 20, 1, 1, 20, 20, 20, 3, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 3, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 133 [ ,, 3, 2, 3, 3, 20, 20, [0, 64, "Ja2"], 3, 3, 1, 1, 20, 3, 3, 1, 1, 20, 3, 20, 20, 1, 1, 20, 1, 1, 20, 3, 3, 20, 3, 20, 20, 20, 3, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 134 [ ,, 3, [6, 14], 3, 1, 1, 20, 3, 2, 3, 20, 1, 1, 2, 2, 20, 1, 1, 1, 1, 20, 20, 1, 1, 20, 1, 1, 2, 1, 1, 2, 20, 20, 20, 3, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 135 [ ,, 2, 3, 1, [6, 31], 1, [0, 65, "X"], 1, [0, 63, "GG"], 1, 2, 20, 1, [0, 57, "X"], 2, 20, 20, 1, 2, 1, [0, 49, "X"], 20, 20, 1, [0, 47, "X"], 20, 1, [0, 45, "X"], 20, 1, 2, 20, 20, 20, 1, [0, 35, "Vx"], 1, 2, 20, 20, 20, 20, 20, 20, 1, 2, 20, 1, [0, 29, "X"], 20, 20, 1, [0, 27, "X"], 20, 1, [0, 25, "X"], 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 2, 20, 1, [0, 21, "X"], 20, 20, 1, [0, 19, "X"], 20, 1, [0, 17, "X"], 20, 20, 20, 20, 20, 1, [0, 15, "X"], 20, 20, 20, 20, 20, 1, [0, 13, "X"], 20, 20, 20, 20, 20, 1, [0, 11, "X"], 20, 20, 20, 20, 20, 1, [0, 9, "X"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 136 [ ,, [6, 3], 3, [6, 15], 3, 20, 3, 20, 3, 20, [7, 255], 20, 20, 3, [0, 56, "BZ"], [0, 53, "BEx"], 20, 20, [0, 52, "BZ"], 20, 3, 20, 20, 20, 3, 20, 20, 3, [0, 41, "Vx"], 20, [0, 40, "BZ"], 20, 20, 20, 20, 3, 20, [0, 34, "BZ"], 20, 20, 20, 20, 20, 20, 20, [0, 32, "BE3"], 20, 20, 3, 20, 20, 20, 3, 20, 20, 3, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, [0, 24, "RS"], 20, 20, 3, 20, 20, 20, 3, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 137 [ ,, 3, 3, 3, 1, 2, 3, 20, 3, [0, 61, "GG1"], 1, 1, 20, 3, 3, 3, 20, 20, 3, 20, 3, 20, 20, 20, 1, 1, 20, 3, 3, 20, 3, 1, 20, 20, 20, 3, 20, 3, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 3, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 3, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 138 [ ,, 2, 2, 2, 20, [0, 68, "vT3"], 2, 20, 3, 3, 20, 1, 1, 2, 3, 1, 1, 20, 1, 1, 2, 20, 20, 20, 20, 1, 1, 2, 2, 20, 3, 1, 1, 20, 20, 1, 1, 2, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 2, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 139 [ ,, [6, 6], [6, 4], [6, 15], [6, 31], 1, [0, 67, "X"], 2, 3, 1, [21, 4, 1], 20, 1, [0, 59, "X"], 1, [0, 55, "BEx"], 1, [0, 53, "X"], 20, 1, [0, 51, "X"], 20, 20, 20, 20, 20, 1, [0, 47, "X"], [0, 43, "Vx"], 20, 1, 1, 1, 2, 20, 20, 1, [0, 35, "XBZ"], 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 2, 1, 20, 20, 20, 20, 1, [0, 27, "X"], 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 3, 20, 20, 20, 20, 20, 1, [0, 19, "X"], 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 140 [ ,, 3, 3, 3, 3, 20, 3, [0, 66, "GB5"], 1, [0, 63, "GB6"], 3, 20, 20, 3, 20, 3, 20, 3, 20, 20, 3, 1, 20, 20, 20, 20, 20, 3, 3, 20, 20, 1, 1, 2, 20, 20, 20, 3, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, [0, 32, "BE3"], 1, 1, 20, 20, 20, 20, 3, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 2, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 141 [ ,, 3, 2, 3, 1, 2, 3, 3, 20, 3, 1, 1, 20, 3, 20, 1, 1, 1, 1, 20, 3, 1, 1, 20, 20, 20, 20, 3, 3, 1, 20, 20, 1, 2, 2, 20, 20, 3, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, [0, 24, "Kol"], 20, 20, 1, 1, 20, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 142 [ ,, 2, [6, 7], 1, [6, 31], [0, 70, "vT3"], 2, 1, [0, 65, "GG"], 1, 1, 1, 1, 2, 20, 20, 1, 1, 1, 1, 2, 20, 1, 2, 20, 20, 20, 3, 3, 1, 2, 20, 20, [0, 40, "DaH"], [0, 38, "DaH"], 20, 20, 3, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 1, [0, 27, "BEx"], 20, 20, 20, 1, [0, 25, "XX"], 20, 20, 20, 20, 20, 1, [0, 23, "XX"], 20, 20, 1, [0, 21, "Su"], 20, 20, 20, 1, [0, 19, "BEx"], 20, 20, 20, 1, [0, 17, "XX"], 20, 20, 20, 20, 20, 1, [0, 15, "XX"], 20, 20, 20, 20, 20, 1, [0, 13, "XX"], 20, 20, 20, 20, 20, 1, [0, 11, "XX"], 20, 20, 20, 20, 20, 1, [0, 9, "XX"], 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 143 [ ,, [6, 3], 3, 20, 3, 1, [0, 69, "X"], 2, 3, 20, 1, [0, 63, "X"], 1, [0, 61, "X"], 20, 20, 20, 1, 2, 1, [0, 53, "X"], 2, 20, [0, 50, "BE3"], 20, 20, 20, 3, 1, 1, 2, 20, 20, 3, 3, 20, 20, 1, 2, 20, 20, [0, 34, "BE3"], 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 144 [ ,, 3, 3, [6, 20], 1, 2, 3, [0, 68, "Gu"], 2, 20, 20, 3, 20, 3, [0, 57, "XB"], 20, 20, 20, [7, 255], 20, 3, [0, 52, "BET"], 20, 1, 1, 20, 20, 3, [0, 45, "Gra"], 1, 2, 20, 20, 3, 1, 1, 20, 20, [0, 36, "BE3"], 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, [0, 27, "BEx"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, [0, 23, "XX"], 20, 20, 1, 1, 20, 20, 20, 1, [0, 19, "BEx"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 145 [ ,, 2, 2, 3, 20, [0, 72, "HvT"], 2, 1, 2, 20, 20, 1, 1, 2, 3, 20, 20, 20, 1, 1, 2, 1, 1, 20, 1, 1, 20, 3, 3, 20, [0, 44, "CLC"], 20, 20, 1, 2, 1, 2, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 146 [ ,, [6, 6], [6, 11], 2, 20, 1, [0, 71, "X"], 2, [0, 68, "Ja"], 2, 20, 20, 1, [0, 63, "X"], 1, [21, 6, 2], 20, 20, 20, 1, [0, 55, "X"], 20, 1, 2, 20, 1, [0, 49, "XX"], 3, 3, 20, 3, 20, 20, 20, [0, 40, "DaH"], 20, [0, 38, "BE3"], 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, [0, 21, "XX"], 20, 20, 1, [0, 19, "BEx"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 147 [ ,, 3, 3, [6, 23], [6, 31], 20, 3, [0, 70, "Ja2"], 3, [0, 66, "GB6"], 20, 20, 20, 3, 2, 3, 20, 20, 20, 20, 3, 20, 20, [0, 52, "BE3"], 20, 20, 3, 2, 3, 20, 3, 1, 20, 20, 1, 1, 1, 1, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 148 [ ,, 3, 2, 3, 3, 20, 3, 2, 2, 2, 20, 20, 20, 3, 2, 1, 2, 20, 20, 20, 3, [0, 53, "BE3"], 20, 1, 1, 20, 1, [0, 49, "XX"], 3, 20, 3, 1, [0, 41, "X"], 20, 20, 1, 1, 1, 1, 20, 20, [0, 36, "BE3"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 2, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, [0, 21, "XX"], 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 149 [ ,, 2, [6, 14], 3, 1, [0, 73, "Bel"], 1, 2, 2, 2, 2, 20, 20, 3, 2, 1, 2, 20, 20, 20, 3, 3, 20, 20, 1, 1, 20, 3, 1, 2, 3, 20, 3, 20, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 2, 1, 20, 20, 20, 20, 20, 1, [0, 25, "Su"], 20, 20, 20, 1, 1, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, [0, 17, "Su"], 20, 20, 20, 20, 20, 1, [0, 15, "Su"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, [0, 11, "Su"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 150 [ ,, [6, 3], 3, 1, [6, 31], 3, 20, [0, 72, "GB5"], [0, 70, "BZ"], [0, 68, "GB6"], [0, 66, "BZ"], 20, 20, 3, [0, 62, "CZ2"], 1, 2, 1, 20, 20, 3, 2, 20, 20, 20, 1, [0, 51, "XX"], 3, 1, 2, 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 1, 2, 20, 20, 20, 1, [0, 33, "BHJ"], 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 2, 1, 1, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 151 [ ,, 3, 3, [6, 27], 3, 1, [0, 73, "BEx"], 3, 2, 3, 1, [0, 65, "GG"], 20, 3, 1, 1, 2, 1, [7, 264], 20, 1, [0, 55, "BE3"], [0, 53, "BEx"], 20, 20, 20, 3, 2, 1, 2, 20, 1, [0, 43, "X"], 1, [0, 41, "BEx"], 20, 20, 20, 1, 2, 1, 2, 20, [0, 36, "Dup"], 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, [0, 31, "MMT"], 20, 1, [0, 27, "Su"], 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, [0, 23, "MMT"], 20, 1, 2, 20, 20, 20, 20, 1, [0, 19, "Su"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, [0, 13, "MMT"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, [0, 5, "GB"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 152 [ ,, 2, 3, 3, 1, [0, 75, "Bel"], 3, 1, 2, 1, 2, 3, 20, 1, 2, 1, 2, 2, 3, 20, 20, 3, 3, 20, 20, 20, 1, [0, 51, "XX"], 20, [0, 48, "Dup"], 2, 20, 3, 20, 3, 20, 20, 20, 20, [0, 40, "BE3"], 20, [0, 38, "BE3"], 20, 1, 1, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, [0, 22, "BE3"], 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 153 [ ,, [6, 6], 2, 2, 20, 3, 2, 20, [0, 72, "BZ"], 2, [0, 68, "BZ"], 1, [0, 65, "XX"], 20, [0, 64, "CZ"], 20, [0, 62, "CZ"], 2, 1, [0, 57, "XX"], 20, 3, 1, [0, 53, "BEx"], 20, 20, 20, 3, 20, 3, [0, 46, "LLX"], 20, 1, 1, 1, 1, 20, 20, 20, 3, 20, 3, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 1, 1, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 3, 20, 20, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 154 [ ,, 3, [6, 4], [6, 30], [6, 31], 1, [0, 75, "X"], 20, 3, 2, 2, 20, 3, 20, 1, 1, 1, 2, 20, 3, 20, 1, [0, 55, "BE3"], 3, 20, 20, 20, 3, 20, 3, 2, 20, 20, 1, [0, 43, "X"], 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, [0, 26, "BET"], 20, 20, 20, 20, 20, 3, 20, 20, 20, [0, 22, "BE3"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 155 [ ,, 3, 3, 3, 3, 20, 3, 2, 1, 2, 2, [0, 67, "GG"], 1, [0, 65, "XX"], 20, 1, [0, 63, "Gra"], [0, 62, "GW2"], [7, 272], 1, [0, 57, "XX"], 20, 3, 1, [0, 53, "BEx"], 20, 20, 3, 20, 1, 2, 20, 20, 20, 3, 20, 1, 2, 20, 20, 1, 2, 1, 2, 20, 20, [0, 36, "BZ"], 20, 20, 20, [0, 34, "BZ"], 20, 20, 20, 20, 20, 20, 20, 20, 3, 2, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, [0, 23, "TTH"], 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 1, [0, 7, "EB3"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 156 [ ,, 2, 2, 3, 1, [6, 63], 3, [0, 74, "GB5"], 20, [0, 72, "JS"], [0, 70, "BZ"], 3, 20, 3, 20, 20, 3, 3, 3, 20, 3, 20, 1, [0, 55, "BE3"], 3, 20, 20, 3, [0, 49, "Gra"], 20, [0, 48, "LLX"], 20, 20, 20, 1, 1, 20, [0, 42, "BE3"], 20, 20, 20, [0, 40, "BE3"], 20, [0, 38, "GW2"], 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 3, 2, 20, 20, 20, 20, 1, [0, 27, "Su"], 20, 20, 1, [0, 25, "Su"], 20, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, [0, 17, "Su"], 20, 20, 20, 20, 20, 1, [0, 15, "Su"], 20, 20, 20, 20, 20, 1, [0, 13, "Su"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 157 [ ,, [6, 3], [6, 7], 1, [6, 31], 3, 2, 2, 20, 3, 2, 1, [0, 67, "XX"], 3, 20, 20, 3, 3, 1, [0, 59, "XX"], 3, 20, 20, 3, 1, [0, 53, "BEx"], 20, 3, 3, 20, 3, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 3, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, [0, 31, "TTH"], 1, 20, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 158 [ ,, 3, 3, 20, 3, 1, 2, 2, 20, 1, 2, 20, 3, 2, 20, 20, 3, 2, 20, 3, 2, 20, 20, 1, [0, 55, "BE3"], 3, 20, 3, 3, 20, 3, 2, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 3, 1, 1, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, [0, 21, "KSH"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 159 [ ,, 2, 3, 20, 1, [6, 63], [0, 78, "BDH"], [0, 76, "Ja2"], 2, 20, [0, 72, "BZ"], [0, 69, "GG"], 1, [0, 67, "XX"], 20, 20, 1, 2, 20, 1, [0, 59, "XX"], 20, 20, 20, 3, 1, [0, 53, "BE3"], 3, 3, 20, 3, [0, 46, "BE3"], 20, 20, 20, 20, 20, 1, 2, 1, 2, 20, 1, 2, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 20, 20, 3, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 160 [ ,, [6, 6], 2, [6, 5], 20, 3, 2, 2, 2, 20, 3, 3, 20, 3, 20, 20, 20, [0, 64, "GW2"], 20, 20, 3, [0, 57, "BE3"], 20, 20, 3, 20, 3, 2, 2, 20, 3, 1, 1, 20, 20, 20, 20, 20, [0, 44, "BE3"], 20, [0, 42, "BE3"], 20, 20, [0, 40, "GW2"], 20, 20, [0, 38, "BZ"], 20, 20, 20, [0, 36, "BZ"], 20, 20, 20, [0, 34, "BZ"], 20, 20, 20, 20, 20, 1, [0, 31, "TTH"], 20, [0, 30, "BZ"], 20, 20, 20, [0, 28, "BZ"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 161 [ ,, 3, [6, 11], 3, 20, 1, 2, 2, 2, 2, 3, 1, [0, 69, "XX"], 3, 2, 20, 20, 3, 20, 20, 3, 3, 20, 20, 1, [0, 55, "BE3"], 1, [0, 53, "BEx"], [0, 51, "Gra"], 20, 3, 20, 1, [0, 45, "XX"], 20, 20, 20, 20, 1, 2, 1, 2, 20, 3, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 162 [ ,, 3, 3, 2, 20, 20, [0, 80, "BDH"], [0, 78, "Ja2"], [0, 76, "Ja2"], [0, 74, "JS"], 1, [0, 71, "GG"], 3, 2, [0, 66, "BZ"], 20, 20, 3, 2, 20, 3, 3, 20, 20, 20, 3, 20, 3, 3, 20, 1, [0, 47, "Vx"], 20, 3, 20, 20, 20, 20, 20, [0, 44, "BE3"], 20, [0, 42, "BE3"], 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 3, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, [0, 26, "BZ"], 20, 20, 20, 20, [0, 24, "BZ"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, [0, 7, "EB3"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 163 [ ,, 2, 2, [6, 15], [6, 37], 20, 3, 2, 2, 2, 20, 3, 1, [0, 69, "XX"], 2, 20, 20, 3, 2, 20, 3, 1, 2, 20, 20, 1, 1, 2, 3, 1, 20, 3, 20, 1, 2, 20, 20, 20, 20, 1, 1, 2, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, [0, 17, "Su"], 20, 20, 20, 20, 20, 1, [0, 15, "Su"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 164 [ ,, [6, 3], [6, 14], 3, 3, 20, 1, 2, 2, 2, 2, 1, [0, 71, "XX"], 3, 2, 1, 20, 1, 2, 2, 1, [0, 59, "BE3"], [0, 58, "BE3"], 20, 20, 20, 1, [0, 55, "BE3"], 3, 1, [0, 49, "XB"], 3, 20, 20, [7, 255], 20, 20, 20, 20, 20, 1, 2, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 165 [ ,, 3, 3, 3, 1, [6, 63], 20, [0, 80, "Ja2"], [0, 78, "GB5"], [0, 76, "Gu9"], [0, 74, "Ja2"], 20, 3, 2, [0, 68, "BZ"], 1, 2, 20, [0, 64, "CZ"], 2, 20, 3, 1, 2, 20, 20, 20, 3, 3, 20, 3, 1, 1, 20, 1, [7, 254], 20, 20, 20, 20, 20, [0, 44, "BE3"], [0, 42, "BZ"], 20, 20, 20, [0, 40, "BZ"], 20, 20, 20, [0, 38, "BZ"], 20, 20, 20, [0, 36, "BZ"], 20, 20, 20, 1, 2, 20, 20, 20, [0, 32, "BZ"], 20, 20, 20, [0, 30, "BZ"], 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 166 [ ,, 2, 3, 1, [6, 47], 3, 20, 3, 2, 3, 2, 20, 1, [0, 71, "XX"], 2, 20, [0, 66, "GW2"], 20, 1, 2, 20, 3, 20, [0, 58, "BE3"], 20, 20, 20, 3, 1, 1, 1, 1, 1, 1, 20, 3, 20, 20, 20, 20, 20, 3, 2, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, [0, 34, "XBZ"], 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 167 [ ,, [6, 6], 3, [6, 15], 3, 1, [0, 81, "BEx"], 1, 2, 1, 2, 20, 20, 3, 2, 2, 1, 2, 20, [0, 64, "GW2"], 2, 1, 2, 1, [0, 57, "BE3"], 20, 20, 3, 20, 1, 2, 1, 1, 1, 2, 1, 1, 20, 20, 20, 20, 1, 2, 1, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 1, 2, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 1, 2, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, [0, 9, "Hg"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 168 [ ,, 3, 2, 3, 1, [6, 63], 3, 20, [0, 80, "Ja2"], [0, 77, "Gu9"], [0, 76, "GB6"], 20, 20, 3, 2, [0, 68, "GG1"], 20, [0, 66, "GG1"], 20, 3, [0, 62, "BE3"], 20, [0, 60, "BZ"], 20, 3, 20, 20, 3, 20, 20, [0, 52, "BZ"], 20, 1, 1, 2, 20, 1, 1, 20, 20, 20, 20, [7, 255], 1, 2, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, [0, 36, "XBZ"], 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, [0, 30, "BZ"], 20, 20, 20, 20, 20, [0, 28, "BZ"], 20, 20, 20, 20, [0, 26, "BZ"], 20, 20, 20, 20, [0, 24, "BZ"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 169 [ ,, 3, [6, 4], 2, 20, 3, 2, 20, 3, 3, 3, 1, 20, 1, 2, 1, 1, 1, 2, 3, 2, 20, 1, 2, 3, 20, 20, 3, 20, 20, 1, 2, 20, 1, 2, 1, 20, 1, 1, 20, 20, 20, 1, 1, 2, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 170 [ ,, 2, 3, [6, 15], [6, 44], 1, [0, 83, "BEx"], 20, 3, 2, 2, 1, 2, 20, [0, 72, "DaH"], 20, 1, 2, [0, 66, "DaH"], 1, [0, 63, "GG"], 20, 20, [0, 60, "BE3"], 1, 1, 20, 3, 1, 20, 20, [0, 52, "DaH"], 20, 20, [0, 50, "DaH"], 1, 2, 20, 1, 1, 20, 20, 20, 1, [7, 255], 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, [0, 17, "Su"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 171 [ ,, [6, 3], 2, 3, 3, 20, 3, [0, 81, "Gu9"], 1, 2, 2, 20, [0, 74, "BZ"], 20, 3, 1, 20, [0, 68, "GG1"], 3, 20, 3, 1, 20, 1, [0, 59, "BE3"], 1, 2, 3, 1, 1, 20, 3, 20, 20, 3, 20, [0, 48, "Dup"], 20, 20, 1, 1, 20, 20, 20, 3, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, [0, 35, "TTH"], 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 172 [ ,, 3, [6, 7], 3, 1, [6, 63], 3, 3, 20, [0, 80, "Ja"], [0, 78, "GW2"], 1, 1, 1, 2, 1, 2, 3, 3, 20, 3, 1, [0, 61, "XB"], 20, 3, 20, [0, 58, "BE3"], 2, 20, 1, [0, 53, "XB"], 3, 20, 20, 1, 2, 3, 20, 20, 20, 1, [0, 45, "Gra"], 20, 20, 3, 1, [0, 41, "XB"], 20, 20, 1, [0, 39, "XB"], 20, 20, 1, [0, 37, "XB"], 20, 20, 20, 3, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 173 [ ,, 2, 3, 1, [6, 47], 3, 2, 1, 2, 3, 2, 1, 2, 1, 2, 20, [0, 70, "GW2"], 3, 2, 20, 3, 20, 3, 20, 3, 20, 1, 2, 1, 20, 3, 1, 1, 20, 20, [0, 50, "GW2"], 3, 20, 20, 20, 20, 3, 20, 20, 3, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 1, [0, 35, "XB"], 20, 20, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 174 [ ,, [6, 6], 3, 20, 3, 1, [0, 85, "X"], 2, [0, 82, "BKW"], 1, 2, 20, [0, 76, "BZ"], 20, [0, 74, "BZ"], 20, 3, 1, 2, 20, 1, 1, 2, 20, 1, 1, 20, [0, 58, "BE3"], 1, 1, 2, 20, 1, 1, 20, 3, 1, 1, 20, 20, 20, 3, 20, 20, 3, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, [0, 34, "BZ"], 20, 20, 20, 20, 20, 1, [0, 31, "TTH"], 20, 20, 1, 1, 20, 20, 20, 20, [0, 28, "BZ"], 20, 20, 20, 20, [0, 26, "BZ"], 20, 20, 20, 20, [0, 24, "BZ"], 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 175 [ ,, 3, 2, [6, 20], 1, [6, 63], 3, [0, 84, "Ja2"], 2, 20, [0, 80, "GW2"], 1, 1, 1, 2, 20, 3, 20, [0, 68, "GW2"], 20, 20, 1, 2, 20, 20, 1, 2, 3, 20, 1, 2, 2, 20, 1, 2, 3, 20, 1, 2, 20, 20, 1, [7, 264], 20, 1, 2, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 176 [ ,, 3, [6, 11], 3, 20, 3, 2, 1, 2, 2, 3, 1, 2, 1, 2, 20, 3, 20, 3, 20, 20, 20, [0, 64, "BZ"], 20, 20, 20, [0, 60, "BZ"], 2, 20, 20, [0, 56, "BZ"], 2, 20, 20, [0, 52, "BZ"], 1, 1, 20, [0, 48, "BZ"], 20, 20, 20, 3, 20, 20, [0, 44, "BZ"], 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 177 [ ,, 2, 3, 2, 20, 1, [0, 87, "X"], [0, 85, "Gra"], [0, 84, "BKW"], [0, 82, "EB2"], 3, 20, [0, 78, "BZ"], 20, [0, 76, "BZ"], 20, 1, [0, 69, "GG1"], 3, 1, 20, 20, 3, 1, 20, 20, 1, 2, 20, 20, 1, 2, 1, 20, 3, 20, 1, 1, 2, 20, 20, 20, 1, [7, 266], 20, 3, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 178 [ ,, [6, 3], 2, [6, 23], [6, 52], 20, 3, 3, 3, 2, 1, 1, 1, 1, 2, 1, 20, 3, 3, 1, 1, 20, 3, 1, 1, 20, 20, [0, 60, "BE3"], 1, 20, 20, [0, 56, "DaH"], 1, 1, 2, 20, 20, 1, 2, 1, 20, 20, 20, 3, 20, 1, 2, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 179 [ ,, 3, [6, 14], 3, 3, 20, 3, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 3, 1, 2, 1, 1, 1, 1, 1, 1, 20, 3, 1, 1, 20, 1, 1, 1, 2, 1, 20, 20, [0, 50, "GW2"], 1, [0, 47, "Gra"], 20, 20, 1, [7, 268], 20, [0, 44, "GW2"], 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 180 [ ,, 2, 3, 3, 1, [6, 63], 1, [0, 87, "Gu9"], 2, [0, 84, "EB2"], [0, 82, "BZ"], 20, [0, 80, "BZ"], 20, [0, 78, "BZ"], 20, [0, 72, "BZ"], 1, [0, 69, "XB"], [0, 68, "BY"], 20, 1, [0, 65, "XB"], 1, 1, 1, [0, 61, "XB"], 3, 20, 1, [0, 57, "XB"], 20, 1, 1, 2, 1, 1, 20, 3, 20, 3, 20, 20, 20, 3, 20, 3, 20, 20, 20, [0, 42, "BZ"], 20, 20, 20, [0, 40, "BZ"], 20, 20, 20, [0, 38, "BZ"], 20, 20, 20, 20, [0, 36, "BZ"], 20, 20, 20, 20, [0, 34, "BZ"], 20, 20, 20, 20, [0, 32, "BZ"], 20, 20, 20, 20, 20, [0, 30, "BZ"], 20, 20, 20, 20, [0, 28, "BZ"], 20, 20, 20, 20, [0, 26, "BZ"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 181 [ ,, [6, 6], 3, 1, [6, 55], 3, 20, 3, [0, 86, "Zwa"], 2, 1, 1, 1, 1, 2, 20, 3, 20, 3, 1, 1, 20, 3, 20, 1, 2, 3, 1, 1, 20, 3, 20, 20, 1, 2, 2, 1, 1, 2, 20, 1, 1, 20, 20, 3, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 182 [ ,, 3, 3, [6, 27], 3, 1, 2, 3, 1, 2, 2, 1, 2, 1, 2, 2, 1, 1, 2, 20, 1, 1, 2, 20, 20, [0, 64, "DaH"], 2, 20, 1, 1, 2, 20, 20, 20, [0, 56, "DaH"], 2, 20, 1, 2, 1, 20, 1, 1, 20, 1, 2, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 183 [ ,, 3, 2, 3, 1, [6, 63], [0, 90, "BZ"], 1, 2, [0, 86, "EB2"], [0, 84, "BZ"], 20, [0, 82, "BZ"], 20, [0, 80, "BZ"], [21, 6, 2], 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, [0, 52, "GW2"], 1, 2, 20, 1, 1, 20, [0, 46, "BZ"], 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 184 [ ,, 2, [6, 4], 2, 20, 3, 2, 20, [0, 88, "Zwa"], 2, 1, 1, 1, 1, 2, 1, 2, 20, [0, 72, "BZ"], 20, 20, 20, [0, 68, "BZ"], 20, 20, 20, [0, 64, "BZ"], 20, 20, 20, [0, 60, "BZ"], 20, 20, 20, 20, [0, 56, "GW2"], 1, 20, 1, 1, 2, 20, 20, 1, 2, 1, 1, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 185 [ ,, [6, 3], 3, [6, 30], [6, 59], 1, 2, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 20, 3, 1, 20, 20, 3, 1, 20, 20, 3, 1, 20, 20, 3, 1, 20, 20, 20, 3, 1, 2, 20, 1, 2, 1, 20, 20, [0, 48, "Gra"], 20, 1, 2, 20, 20, [0, 44, "BZ"], 20, 20, 20, [0, 42, "BZ"], 20, 20, 20, [0, 40, "BZ"], 20, 20, 20, 1, 1, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 186 [ ,, 3, 2, 3, 3, 20, [5, 7], [0, 90, "EB2"], 20, [0, 88, "EB2"], [0, 86, "BZ"], 20, [0, 84, "BZ"], 20, [0, 82, "BZ"], 1, 2, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 20, 3, 20, [0, 54, "GW2"], 20, 20, [0, 52, "GW2"], 1, 1, 20, 3, 20, 20, [0, 46, "BZ"], 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, [0, 36, "BZ"], 20, 20, 20, 20, [0, 34, "BZ"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, [0, 30, "BZ"], 20, 20, 20, 20, [0, 28, "BZ"], 20, 20, 20, 20, [0, 26, "BZ"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 187 [ ,, 2, [6, 7], 3, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 20, 1, 1, 2, 20, 20, 3, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 188 [ ,, [6, 6], 3, 1, [6, 62], 1, [0, 93, "Bel"], 2, 1, 2, 2, 1, 2, 1, 2, 1, [0, 77, "GW2"], 1, [0, 73, "XB"], [0, 72, "BY"], 20, 1, [0, 69, "XB"], [0, 68, "BY"], 20, 1, [0, 65, "XB"], 1, 2, 1, [0, 61, "XB"], [0, 60, "BY"], 20, 1, [0, 57, "XB"], 20, 1, 2, [0, 53, "XB"], 20, 1, 2, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 189 [ ,, 3, 3, 20, 3, 20, 3, [0, 92, "EB2"], 20, [0, 90, "EB2"], [0, 88, "BZ"], 20, [0, 86, "BZ"], 20, [0, 84, "BZ"], 20, 3, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 20, [0, 64, "DaH"], 20, 3, 1, 1, 20, 3, 20, 20, [0, 56, "GW2"], 3, 20, 20, [0, 52, "GW2"], 20, 20, 1, 1, 1, 1, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 190 [ ,, 3, 2, 20, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 20, 3, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 20, 3, 2, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, [0, 46, "BZ"], 20, 20, 20, [0, 44, "BZ"], 20, 20, 20, 1, 1, 20, 20, [0, 40, "BZ"], 20, 20, 20, 20, [0, 38, "BZ"], 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 191 [ ,, 2, [6, 11], [6, 5], 20, 1, 2, 20, 1, 2, 20, 1, 2, 1, 2, 1, 2, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 1, 20, 1, 2, 1, 20, 20, 1, 2, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, [0, 21, "X"], 20, 20, 20, 20, 20, 20, 1, [0, 19, "X"], 20, 20, 1, [0, 17, "X"], 20, 20, 20, 20, 20, 20, 1, [0, 15, "Su"], 20, 20, 20, 20, 20, 20, 1, [0, 13, "X"], 20, 20, 20, 20, 20, 20, 1, [0, 11, "X"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 192 [ ,, [6, 3], 3, 3, 20, 20, [5, 7], 2, 20, [0, 92, "EB2"], 20, 20, [0, 88, "BZ"], 20, [0, 86, "BZ"], 1, 2, 20, [0, 76, "BZ"], 20, 20, 20, [0, 72, "BZ"], 20, 20, 20, [0, 68, "BZ"], 20, 20, 20, [0, 64, "BZ"], 20, 20, 20, [0, 60, "BZ"], 1, 1, 20, [0, 56, "BZ"], 1, 2, 20, 20, [0, 52, "GW2"], 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, [0, 40, "XBZ"], 20, 20, 20, 20, [0, 38, "BZ"], 20, 20, 20, 20, [0, 36, "BZ"], 20, 20, 20, 20, [0, 34, "BZ"], 20, 20, 20, 20, 20, [0, 32, "BZ"], 20, 20, 20, 20, [0, 30, "BZ"], 20, 20, 20, 20, [0, 28, "BZ"], 20, 20, 20, 20, [0, 26, "BZ"], 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 193 [ ,, 3, 2, 2, 20, 20, 3, [0, 94, "B2x"], 20, 3, 20, 20, 1, 1, 2, 20, [0, 80, "GW2"], 20, 3, 1, 20, 20, 3, 1, 20, 20, 3, 1, 20, 20, 3, 1, 20, 20, 3, 20, 1, 1, 1, 1, 2, 20, 20, 3, 20, 20, 20, 20, 1, 1, 1, 1, 1, 2, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 194 [ ,, 2, [6, 14], [6, 15], 20, 20, 3, 1, 1, 2, 20, 20, 20, 1, 2, 20, 3, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 20, 20, 1, 1, 1, 2, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 1, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 1, 2, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 195 [ ,, [6, 6], 3, 3, [6, 6], 20, 1, [0, 95, "B2x"], 1, [0, 93, "B2x"], [0, 89, "GG"], 20, 20, 20, [0, 88, "BZ"], 20, 3, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 20, 20, 1, [0, 57, "Dup"], [0, 56, "Dup"], 1, 20, 3, 20, 20, 20, 20, 20, 20, 1, [0, 49, "MMT"], 1, [0, 47, "MMT"], 20, 20, 20, 20, 1, [0, 43, "MMT"], 20, 20, 20, [0, 42, "MMT"], 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 196 [ ,, 3, 3, 3, 3, 20, 20, 3, 20, 3, 3, 20, 20, 20, 3, 20, 3, 1, [0, 77, "Gra"], [0, 76, "BY"], 20, 1, [0, 73, "XB"], [0, 72, "BY"], 20, 1, [0, 69, "XB"], [0, 68, "BY"], 20, 1, [0, 65, "XB"], [0, 64, "BY"], 20, 1, [0, 61, "XB"], [0, 60, "BY"], 20, 20, 20, 3, 3, 1, [0, 53, "XB"], 3, 20, 20, 20, 20, 20, 20, 20, 3, 20, 3, 20, 20, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 197 [ ,, 3, 3, 2, 1, 1, 20, 1, 1, 2, 1, 1, 20, 20, 3, 20, 3, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 20, 3, 3, 20, 3, 1, 1, 20, 20, 20, 20, 20, 20, 3, 20, 3, [0, 45, "XB"], 20, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 198 [ ,, 2, 2, [6, 15], [6, 31], 1, [0, 97, "XX"], 20, 1, [0, 95, "EB2"], 20, 1, [0, 89, "GG"], 20, 3, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 20, 3, 1, 1, 2, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 3, 3, 20, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, [0, 40, "BZ"], 20, 20, 20, 20, [0, 38, "BZ"], 20, 20, 20, 20, [0, 36, "BZ"], 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, [0, 32, "BZ"], 20, 20, 20, 20, [0, 30, "BZ"], 20, 20, 20, 20, [0, 28, "BZ"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 199 [ ,, [6, 3], [6, 4], 3, 3, 20, 3, 20, 20, 3, [0, 91, "GG"], 20, 3, 20, 3, 1, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 3, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 20, 3, 20, 3, 3, 20, 20, 20, 20, 1, 2, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, [0, 34, "XBZ"], 20, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 200 [ ,, 3, 3, 2, 1, [6, 95], 3, 20, 20, 3, 3, 20, 3, 20, 3, 1, [0, 81, "Gra"], 20, [0, 80, "BZ"], 20, 20, 20, [0, 76, "BZ"], 20, 20, 20, [0, 72, "BZ"], 20, 20, 20, [0, 68, "BZ"], 20, 20, 20, [0, 64, "BZ"], 20, 20, 20, [0, 60, "BZ"], 3, 20, 20, [0, 56, "BZ"], 20, 20, 20, [0, 52, "BZ"], 20, 20, 20, 20, 3, 20, 3, 3, 20, 20, 20, 20, 20, [0, 44, "BZ"], 20, 20, 1, [0, 41, "Gra"], 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 2, 20, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 201 [ ,, 2, 2, [6, 15], 20, 3, 2, 20, 20, 3, 1, 1, 1, 2, 3, 20, 3, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 3, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 3, 20, 3, 1, 1, 20, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, [0, 36, "XBZ"], 20, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, [0, 29, "Ch"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 202 [ ,, [6, 6], [6, 7], 3, [6, 31], 1, [0, 99, "XX"], [0, 97, "EB2"], 20, 3, 20, 1, [0, 91, "GG"], [0, 90, "EB1"], 2, 1, 2, 20, 3, 2, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 3, 20, 20, 3, 1, 20, 20, 20, 1, 1, 20, 20, 3, 20, 3, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 203 [ ,, 3, 3, 3, 3, 20, 3, 3, 20, 3, 1, 20, 3, 1, [0, 89, "GG"], 1, [0, 83, "Gra"], 20, 3, 2, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 1, [0, 57, "VE"], 20, 3, 1, 1, 20, 20, 20, 1, [0, 51, "XBZ"], 20, 3, 20, 3, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 204 [ ,, 3, 3, 3, 1, [6, 92], 3, 3, 20, 3, 1, 2, 3, 20, 3, 20, 3, [0, 81, "CZ"], 1, 2, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 1, 2, 3, 20, 3, 20, 1, 1, 20, 20, 20, 3, 20, 3, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 205 [ ,, 2, 2, 1, [6, 31], 3, 2, 1, 1, 2, 20, [0, 94, "EB1"], 1, 2, 3, 1, 2, 3, 20, [0, 80, "Sab"], 20, 20, 3, 1, 20, 20, 3, 1, 20, 20, 3, 1, 20, 20, 3, 1, 20, 20, 20, [0, 60, "Dup"], 3, 20, 1, [0, 55, "Gra"], 20, 1, 1, 20, 20, 3, 20, 3, 20, 20, [0, 48, "BZ"], 20, 20, 20, [0, 46, "BZ"], 20, 20, 20, 20, [4, 50], 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 206 [ ,, [6, 3], [6, 11], [6, 20], 3, 1, 2, [0, 99, "EB2"], 1, 2, 2, 1, 2, [0, 92, "EB1"], 2, 1, [0, 85, "Gra"], 3, 20, 3, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 20, 3, 3, 20, 20, 3, 20, 20, 1, 2, 20, 1, [0, 51, "Gra"], 3, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, [0, 39, "XB"], 20, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, [0, 31, "XB"], 20, 20, 20, 1, [0, 29, "Ch"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 207 [ ,, 3, 3, 3, 1, [6, 95], [0, 102, "BZ"], 3, 20, [0, 98, "EB1"], [0, 96, "BZ"], 20, [0, 94, "BZ"], 1, [0, 91, "GG"], 20, 3, 3, 20, 3, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 20, 3, 1, 1, 20, 3, 20, 20, 20, [0, 54, "GW2"], 20, 20, 3, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 1, [0, 35, "XB"], 20, 20, 20, 1, [0, 33, "XB"], 20, 20, 20, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, [0, 27, "X"], 20, 20, 20, 20, 20, 20, 1, [0, 25, "X"], 20, 20, 20, 20, 20, 20, 1, [0, 23, "X"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 208 [ ,, 2, 2, 2, 20, 3, 2, 1, 1, 2, 1, 1, 2, 20, 3, 1, 2, 1, [0, 81, "XB"], 1, 1, 1, 2, 1, 20, 1, [0, 73, "XB"], 1, 20, 1, [0, 69, "XB"], 1, 20, 1, [0, 65, "XB"], 1, 20, 1, [0, 61, "XB"], 3, 20, 1, [0, 57, "XB"], 3, 20, 20, 20, 3, 20, 20, 3, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 3, 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, [0, 31, "Gra"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 209 [ ,, [6, 6], [6, 14], [6, 23], 20, 1, 2, 20, 1, 2, 20, 1, 2, 2, 3, 1, [0, 87, "Gra"], 2, 3, 20, 1, 2, [0, 78, "LLX"], 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 20, 1, 2, 20, 3, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 3, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 210 [ ,, 3, 3, 3, [6, 31], 20, [5, 7], [0, 101, "EB2"], 20, [0, 100, "EB1"], 20, 20, [0, 96, "BZ"], [0, 94, "EB1"], 2, 20, 3, [0, 84, "CZ"], 2, 20, 20, [0, 80, "DaH"], 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 20, 20, [0, 54, "GW2"], 20, 3, 20, 20, 20, [0, 50, "BZ"], 20, 20, 20, [0, 48, "BZ"], 20, 20, 20, [0, 46, "BZ"], 20, 20, 20, 20, 1, 1, 20, 20, [0, 42, "BZ"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 3, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 211 [ ,, 3, 3, 3, 3, 20, 3, 3, 20, 3, 20, 20, 3, 1, [0, 93, "GG"], 20, 3, 1, [0, 83, "XB"], 2, 20, 1, [0, 79, "Gra"], 20, 20, 1, [0, 75, "XB"], 20, 20, 1, [0, 71, "XB"], 20, 20, 1, [0, 67, "XB"], 1, 20, 1, [0, 63, "XB"], 20, 20, 1, [0, 59, "XB"], 20, 20, 1, 1, 20, 3, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 212 [ ,, 2, 3, 2, 1, 1, 2, 1, 1, 2, 2, 20, 1, 2, 3, 20, 3, 20, 3, [0, 82, "MTS"], 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 1, 1, 20, 3, 20, 20, 20, 3, [0, 57, "Gra"], 20, 20, 1, 1, 1, 2, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, [0, 29, "Ch"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 213 [ ,, [6, 3], 2, [6, 27], [6, 31], 1, [0, 105, "Bel"], [0, 103, "EB2"], 1, 2, [0, 98, "BZ"], 20, 20, [0, 96, "EB1"], 2, 20, 3, 2, 3, 2, 20, 20, 3, 1, 20, 20, 3, 1, 20, 20, 3, 1, 20, 20, 1, 1, 1, 1, 2, 1, 20, 20, 3, 3, 20, 20, 20, 1, 1, 2, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 214 [ ,, 3, [6, 4], 3, 3, 20, 3, 3, 20, [0, 102, "EB1"], 1, [0, 97, "XB"], 20, 1, [0, 95, "GG"], [0, 89, "XB"], 3, [0, 86, "GW2"], 1, 2, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 20, 1, 1, 1, 2, 1, 1, 20, 3, 1, 1, 20, 20, 20, 1, [0, 55, "XB"], 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 20, 1, 1, 20, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 215 [ ,, 2, 3, 2, 1, 1, 2, 1, 1, 2, 2, 3, 20, 20, 3, 3, 3, 2, 20, [0, 84, "MTS"], 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 20, 20, 1, 1, 2, [0, 63, "Gra"], 1, 1, 1, 1, 1, 1, 20, 20, 20, 3, [0, 54, "BZ"], 20, 20, 20, [0, 52, "BZ"], 20, 20, 20, [0, 50, "BZ"], 20, 20, 20, [0, 48, "BZ"], 20, 20, 20, [0, 46, "BZ"], 20, 20, 20, 20, 20, 1, 1, 20, [0, 42, "BZ"], 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 216 [ ,, [6, 6], 2, [6, 30], 20, 1, [0, 107, "Bel"], 20, 1, 2, [0, 100, "BZ"], 1, [0, 97, "GG"], 20, 3, 2, 1, 2, 1, 2, 20, 1, 2, 1, 20, 1, 2, 1, 20, 1, 2, 1, 20, 1, 2, 20, 20, 1, 2, 3, 20, 1, 2, 1, [0, 59, "Gra"], 1, 2, 20, 20, 3, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, [0, 34, "BZ"], 20, 20, 20, 20, [0, 32, "BZ"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 217 [ ,, 3, [6, 7], 3, [6, 31], 20, 3, 2, 20, [0, 104, "EB1"], 2, 20, 3, 20, 3, [0, 91, "XB"], 20, [0, 88, "GW2"], 1, 2, 1, 20, [0, 82, "LLX"], 1, 1, 20, [0, 78, "LLX"], 1, 1, 20, [0, 74, "LLX"], 1, 1, 20, [0, 70, "LLX"], 20, 20, 20, [0, 68, "Dup"], 1, 1, 20, [0, 62, "LLX"], 20, 3, 20, [0, 58, "LLX"], 20, 20, 3, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 218 [ ,, 3, 3, 3, 3, 20, 3, [0, 106, "JS"], 20, 3, 2, 20, 3, 20, 3, 3, 20, 3, 20, [0, 86, "MTS"], 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 20, 20, 3, 20, 1, 1, 2, 20, 1, 1, 2, 20, 20, 3, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 219 [ ,, 2, 3, 3, 1, 1, 2, 1, 1, 2, [0, 102, "BZ"], 1, 2, 20, 3, 3, 20, 1, 2, 3, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 3, 20, 20, 1, 2, 20, 20, 1, 2, 1, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 220 [ ,, [6, 3], 2, 1, [6, 31], 1, [0, 109, "Bel"], [0, 107, "EB2"], 1, 2, 2, 1, [0, 99, "GG"], 20, 3, 2, 20, 20, [0, 88, "CZ"], 2, 20, 20, [0, 84, "LLX"], 1, 20, 20, [0, 80, "LLX"], 2, 20, 20, [0, 76, "LLX"], 20, 20, 20, [0, 72, "LLX"], 1, 20, 20, 3, 20, 20, 20, [0, 64, "LLX"], 1, 20, 20, [0, 60, "LLX"], 1, 1, 20, [0, 56, "BZ"], 20, 20, 20, [0, 54, "BZ"], 20, 20, 20, [0, 52, "BZ"], 20, 20, 20, [0, 50, "BZ"], 20, 20, 20, [0, 48, "BZ"], 20, 20, 20, [0, 46, "BZ"], 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 221 [ ,, 3, [6, 11], 20, 3, 20, 3, 3, 20, [0, 106, "EB1"], 2, 20, 3, 20, 3, [0, 93, "XB"], 1, 20, 1, 2, 1, 20, 3, 1, 1, 20, 3, 2, 20, 20, 3, 20, 20, 20, 3, 1, 2, 20, 3, 20, 20, 20, 3, 1, 2, 20, 3, 20, 1, 2, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 222 [ ,, 2, 3, [6, 5], 1, 1, 2, 1, 1, 2, [0, 104, "BZ"], 2, 3, 1, 2, 3, 1, 1, 20, [0, 88, "GW2"], 1, [21, 10, 1], 1, [21, 10, 2], 1, [21, 10, 3], 1, [21, 10, 4], 2, 20, 3, 20, 20, 20, 1, 1, 2, 20, 3, 20, 20, 20, 3, 20, [0, 62, "GW2"], 20, 3, 20, 20, [0, 58, "GW2"], 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, [0, 32, "BZ"], 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 223 [ ,, [6, 6], 2, 3, 20, 1, 2, 20, 1, 2, 2, 2, 2, 1, [0, 97, "GG"], 2, 20, 1, 2, 3, 20, 3, 20, 3, 20, 3, 20, 3, 2, 20, 3, 20, 20, 20, 20, 1, [0, 71, "Dup"], 20, 3, [0, 65, "VE"], 20, 20, 3, 20, 3, 20, 3, 20, 20, 3, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 224 [ ,, 3, [6, 14], 2, 20, 20, [5, 7], 2, 20, [0, 108, "EB1"], 2, 2, [0, 101, "GG"], 20, 3, 2, [0, 91, "GG1"], 20, [0, 90, "MTS"], 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 20, 3, 20, 20, 20, 20, 20, 3, 20, 3, 3, 20, 20, 3, 20, 3, 20, 3, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 225 [ ,, 3, 3, [6, 15], 20, 20, 3, [0, 110, "Gu9"], 20, 3, [0, 106, "BZ"], [0, 104, "BZ"], 3, 20, 3, [0, 96, "BZ"], 3, 20, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 20, 3, 1, 20, 20, 20, 20, 3, 20, 3, 2, 20, 20, 3, 20, 3, 20, 1, 2, 20, 20, [0, 58, "BZ"], 20, 20, 20, [0, 56, "BZ"], 20, 20, 20, [0, 54, "BZ"], 20, 20, 20, [0, 52, "BZ"], 20, 20, 20, [0, 50, "BZ"], 20, 20, 20, [0, 48, "BZ"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 226 [ ,, 2, 3, 3, [6, 37], 20, 3, 1, 1, 2, 2, 3, 2, 1, 2, 3, 1, 1, 20, [0, 90, "MTS"], 20, 1, 1, 1, 1, 1, 1, 1, 2, 20, 3, 1, 1, 20, 20, 20, 3, 20, 1, [0, 67, "VE"], 1, 20, 1, [0, 63, "Vx"], 3, 20, 20, [0, 60, "Vx"], 20, 20, 1, 1, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 227 [ ,, [6, 3], 3, 3, 3, 20, 1, [0, 111, "EB2"], 1, 2, 2, 1, [0, 103, "GG"], 1, [0, 99, "GG"], 3, [0, 93, "PD"], 1, 2, 3, 20, 20, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 20, 20, 3, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 20, 20, 20, 1, 2, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 228 [ ,, 3, 2, 2, 1, 1, 20, 3, 20, [0, 110, "EB1"], [0, 108, "BZ"], 20, 3, 20, 3, 2, 3, 20, [0, 92, "MTS"], 2, 20, 20, 20, 1, 1, 1, 1, 1, 2, 1, [0, 77, "XB"], [0, 76, "BY"], 20, 1, [0, 73, "XB"], 20, 3, 1, [0, 69, "XB"], 3, 20, 1, [0, 65, "XB"], 3, 20, 1, [0, 61, "XB"], 3, 20, 20, 20, 20, [0, 58, "GW2"], 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 3, 20, 20, 20, 20, [0, 48, "XBZ"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 229 [ ,, 2, [6, 4], [6, 15], [6, 47], 1, [0, 113, "Bel"], 1, 1, 2, 2, [0, 105, "XB"], 3, 20, 3, [0, 97, "XB"], 1, 1, 1, 2, [0, 89, "XB"], 20, 20, 20, 1, 1, 1, 1, 2, 20, 3, 1, 1, 20, 3, 20, 3, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 20, 20, 3, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 2, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 230 [ ,, [6, 6], 3, 3, 3, 20, 3, 20, 1, 2, 2, 3, 3, 1, 2, 3, 20, 1, 2, [0, 92, "MTS"], 3, 20, 20, 20, 20, 1, 1, 1, 2, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 1, 1, 20, 20, 3, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, [0, 50, "XBZ"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 231 [ ,, 3, 2, 2, 1, 1, 2, 20, 20, [0, 112, "EB1"], [0, 110, "BZ"], 3, 3, 1, [0, 101, "GG"], 2, 1, 20, [0, 94, "MTS"], 2, 3, 20, 20, 20, 20, 20, 1, 1, 2, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 2, [0, 61, "Gra"], 20, 1, 2, 20, 1, 2, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 1, 1, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 232 [ ,, 3, [6, 7], [6, 15], 20, 1, [0, 115, "Bel"], 20, 20, 3, 2, 2, 3, 20, 3, [0, 99, "XB"], 1, 1, 1, 2, 2, 20, 20, 20, 20, 20, 20, 1, 2, 20, [0, 80, "BZ"], 1, 20, 20, [0, 76, "BZ"], 1, 20, 20, [0, 72, "BZ"], 1, 20, 20, [0, 68, "BZ"], 1, 20, 20, [0, 64, "BZ"], 3, 20, 20, [0, 60, "BZ"], 20, 20, [0, 58, "BZ"], 20, 20, 20, [0, 56, "BZ"], 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 233 [ ,, 2, 3, 3, [6, 44], 20, 3, 20, 20, 1, 2, [0, 107, "Gra"], 1, 1, 2, 3, 20, 1, 2, [0, 94, "MTS"], 2, 20, 20, 20, 20, 20, 20, 20, [0, 88, "MYI"], 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 1, 20, 3, 1, 2, 20, 3, 3, 20, 20, 1, 1, 20, 1, 1, 20, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 234 [ ,, [6, 3], 3, 3, 3, 20, 3, [7, 459], 20, 20, [0, 112, "BZ"], 3, 20, 1, [0, 103, "GG"], 3, 2, 20, [0, 96, "MTS"], 2, [0, 92, "BZ"], 2, 20, 20, 20, 20, 20, 20, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 20, 3, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 235 [ ,, 3, 2, 3, 1, 1, 2, 3, 20, 20, 3, 3, [0, 105, "GG"], 20, 3, 2, 2, 20, 1, 2, 2, [0, 90, "B2x"], 20, 20, 20, 20, 20, 20, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 236 [ ,, 2, [6, 11], 1, [6, 47], 1, [0, 117, "Bel"], 2, 20, 20, 3, 2, 3, 20, 3, [0, 101, "XB"], [0, 99, "GG1"], 1, 20, [0, 96, "MTS"], 2, 1, 1, 20, 20, 20, 20, 20, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, [0, 65, "XB"], [0, 64, "BY"], 20, 1, 1, 20, 20, 1, 1, 20, 1, [0, 57, "XB"], 20, [0, 56, "BZ"], 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 237 [ ,, [6, 6], 3, [6, 20], 3, 20, 3, 2, [7, 462], 20, 3, 2, 3, 20, 3, 3, 3, 1, 2, 3, [0, 94, "BZ"], 1, 1, 2, 20, 20, 20, 20, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 3, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 238 [ ,, 3, 2, 3, 1, 1, 2, [0, 116, "GB5"], 3, 20, 3, 2, 2, 20, 3, 2, 1, 1, 2, 2, 2, 1, 1, 2, 20, 20, 20, 20, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 239 [ ,, 3, [6, 14], 2, 20, 1, 2, 3, 1, 2, 1, 2, [0, 107, "GG"], 1, 1, 2, 2, 1, [0, 99, "GG1"], 2, 2, 1, 1, 2, 20, 20, 20, 20, 3, 1, [4, 16], 1, [21, 14, 2], 1, [21, 14, 3], 1, [21, 14, 4], 1, [21, 14, 5], 1, [21, 14, 6], 1, [21, 15, 7], 1, [21, 16, 7], 2, 2, 20, 20, 1, 2, 20, 1, 1, 20, 20, 1, 2, 1, 2, 20, 1, 2, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 240 [ ,, 2, 3, [6, 23], 20, 20, [5, 7], 2, 20, [0, 114, "EB1"], 20, [0, 112, "BZ"], 3, 1, [0, 105, "GG1"], [0, 104, "BZ"], 2, 20, 3, 2, [0, 96, "BZ"], 1, 1, 2, 20, 20, 20, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 2, [0, 68, "BZ"], 20, 20, 20, [0, 64, "BZ"], 20, 20, 1, 1, 20, 20, [0, 60, "BZ"], 20, [0, 58, "BZ"], 20, 20, [0, 56, "BZ"], 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 241 [ ,, [6, 3], 3, 3, [6, 52], 20, 3, 2, 2, 3, 20, 3, 3, 20, 3, 1, [0, 103, "GG1"], 1, 1, 2, 3, 20, 1, [0, 93, "MYI"], 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 20, 20, 3, 20, 20, 20, 1, 1, 20, 3, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 242 [ ,, 3, 3, 3, 3, 20, 3, [0, 118, "Ja2"], [7, 473], 2, 20, 3, 1, 1, 1, [0, 105, "PD"], 3, 1, 2, [0, 100, "MTS"], 3, 20, 20, 3, 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 20, 3, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 243 [ ,, 2, 2, 2, 1, 1, 2, 2, 1, 2, [0, 113, "GG1"], 3, [0, 109, "GG"], 1, [0, 107, "GG1"], 3, 1, 1, 2, 2, 3, 20, 20, 3, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 2, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 244 [ ,, [6, 6], [6, 4], [6, 27], [6, 55], 1, [0, 121, "Bel"], 2, 20, [0, 116, "EB1"], 3, 2, 3, 20, 3, 1, 2, 1, [0, 103, "GG1"], 2, 1, 1, 20, 3, 1, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 69, "XB"], [0, 68, "BY"], 20, 1, [0, 65, "XB"], [0, 64, "BY"], 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, [0, 58, "BZ"], 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 245 [ ,, 3, 3, 3, 3, 20, 3, [0, 120, "JS"], [0, 117, "EB2"], 3, 1, [0, 113, "XB"], 1, 1, 1, 1, 2, 20, 3, [0, 102, "MTS"], 20, 1, [4, 10], 1, [21, 10, 1], 1, [21, 10, 2], 1, [21, 10, 3], 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 20, 3, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 246 [ ,, 3, 2, 2, 1, 1, 2, 3, 3, 3, 20, 3, [0, 111, "GG"], 1, [0, 109, "GG1"], 1, [0, 107, "GG1"], 1, 2, 2, [0, 97, "XB"], 20, 3, 20, 3, 20, 3, 20, 3, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 20, 1, 1, 2, 20, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 247 [ ,, 2, [6, 7], [6, 30], 20, 1, 2, 3, 2, 1, [0, 115, "XB"], 3, 3, 20, 3, 20, 3, 1, 2, 2, 3, 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 248 [ ,, [6, 3], 3, 3, [6, 59], 20, [5, 7], 1, [0, 119, "EB2"], 2, 3, 2, 1, 1, 1, 1, 1, 1, 2, 2, 3, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 72, "BZ"], 20, 20, 20, [0, 68, "BZ"], 20, 20, 20, [0, 64, "BZ"], 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 249 [ ,, 3, 3, 3, 3, 20, 3, 2, 3, [0, 118, "EB1"], 1, [0, 115, "XB"], 20, 1, [4, 6], 1, [21, 6, 1], 1, [21, 6, 2], 2, 2, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 20, 20, 3, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 250 [ ,, 2, 2, 3, 1, 1, 2, 2, 3, 2, 20, 3, 20, 20, 3, 20, 3, 20, 3, 2, [0, 99, "XB"], 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 20, 3, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 251 [ ,, [6, 6], [6, 11], 1, [6, 62], 1, 2, 2, 1, 2, [21, 4, 1], 3, 20, 20, 1, 1, 1, 1, 1, 2, 3, 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 2, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 252 [ ,, 3, 3, 20, 3, 20, [5, 7], 2, 20, [0, 120, "GB6"], 3, 2, 20, 20, 20, 1, 1, 1, 1, 2, 1, 1, 1, 2, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 2, [0, 73, "XB"], [0, 72, "BY"], 20, 1, [0, 69, "XB"], [0, 68, "BY"], 20, 1, [0, 65, "XB"], 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 2, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 253 [ ,, 3, 2, [6, 5], 1, 1, 1, 2, 2, 3, 1, 2, [0, 113, "GG"], 20, 20, 20, 1, 1, 1, 2, 2, 1, 1, 2, 20, 20, 20, 20, 1, 1, 1, 2, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 2, 3, 1, 1, 20, 3, 1, 1, 20, 3, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 2, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 254 [ ,, 2, [6, 14], 3, 20, 1, 1, 2, [7, 497], 1, 1, 2, 3, 20, 20, 20, 20, 1, 1, 2, 2, 20, 1, 2, 2, 20, 20, 20, 20, 1, 1, 2, 20, 1, 1, 1, 2, 20, 20, 20, 20, 1, 1, 1, 1, 2, 2, 20, 1, 1, 2, 20, 1, 1, 2, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 2, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 2, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 2, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 2, 20, 1, 2, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20], #V n = 255 [ ,, [6, 3], 3, 2, 20, 20, 1, 2, 2, 20, 1, 2, 1, 1, 20, 20, 20, 20, 1, 2, 2, 20, 20, [0, 100, "Lun"], [0, 98, "Dup"], 20, 20, 20, 20, 20, 1, 2, 20, 20, 1, 2, [0, 90, "BCH"], 20, 20, 20, 20, 20, 1, 2, 1, 2, 2, 20, 20, 1, 2, 20, 20, 1, 2, [0, 65, "Gra"], 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 1, [0, 61, "BCH"], 1, 2, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 1, 2, 20, 20, [0, 34, "BCH"], 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20], #V n = 256 [ ,, 3, 3, [6, 15], 20, 20, 20, [5, 8], [7, 501], 20, 20, [0, 120, "XBC"], 20, 1, 1, 20, 20, 20, 20, [0, 112, "XBC"], [0, 104, "GW2"], 20, 20, 3, 3, 20, 20, 20, 20, 20, 20, [0, 96, "Rod"], 20, 20, 20, [0, 92, "XBC"], 2, 20, 20, 20, 20, 20, 20, [0, 88, "XBC"], 20, [0, 86, "XBC"], [0, 76, "BZ"], 20, 20, 20, [0, 72, "BZ"], 20, 20, 20, [0, 68, "BZ"], 3, 20, 20, 20, 20, 20, [0, 64, "BZ"], 20, 20, 20, 20, 20, 20, 20, 3, 20, [0, 58, "BZ"], 20, 20, 20, 20, 20, [0, 56, "XBC"], 20, 20, 20, 20, 20, 20, 20, [0, 54, "XBC"], 20, 20, 20, [0, 52, "XBC"], 20, 20, 20, 20, 20, 20, 20, [0, 48, "XBC"], 20, 20, 20, 20, 20, 20, 20, [0, 46, "XBC"], 20, 20, 20, 20, 20, 20, 20, [0, 44, "XBC"], 20, 20, 20, 20, 20, 20, 20, [0, 40, "XBC"], 20, 20, 20, 20, 20, 20, 20, [0, 38, "XBC"], 20, 20, 3, 20, 20, 20, 20, [0, 32, "XBC"], 20, 20, 20, 20, 20, 20, 20, [0, 30, "XBC"], 20, 20, 20, 20, 20, 20, 20, [0, 28, "XBC"], 20, 20, 20, 20, 20, 20, 20, [0, 26, "XBC"], 20, 20, 20, 20, 20, 20, 20, [0, 24, "XBC"], 20, 20, 20, 20, 20, 20, 20, [0, 22, "XBC"], 20, 20, 20, 20, 20, 20, 20, [0, 20, "XBC"], 20, 20, 20, 1, [0, 17, "BCH"], 20, 20, 20, 20, 20, 20, 1, [0, 15, "Gp"], 20, 20, 20, 20, 20, 20, 1, [0, 13, "BCH"], 20, 20, 20, 20, 20, 20, 1, [0, 11, "Gp"], 20, 20, 20, 20, 20, 20, 1, [0, 9, "BCH"], 20, 20, 20, 20, 20, 20, 1, [0, 7, "Gp"], 20, 20, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, [5, 127], 20, 20, 20, 20, 20, 20, 20], #V n = 257 [ ,, 3, 3, 3, 20, 20, 20, 3, 3, [0, 121, "EB1"], 20, 3, 20, 20, 3, [0, 113, "Dup"], 20, 20, 20, 3, 3, 20, 20, 3, 3, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 3, [0, 91, "X"], 20, 20, 20, 20, 20, 20, 3, [0, 87, "X"], 3, 3, 20, 20, 20, 3, 20, 20, 20, 3, 3, 20, 20, 20, 20, 20, 3, [0, 63, "BE3"], 20, 20, 20, 20, 20, 20, 3, 20, 3, [0, 57, "BZ"], 20, 20, 20, 20, 3, [0, 55, "X"], 20, 20, 20, 20, 20, 20, 3, [0, 53, "X"], 20, 20, 3, [0, 49, "X"], 20, 20, 20, 20, 20, 20, 3, [0, 47, "X"], 20, 20, 20, 20, 20, 20, 3, [0, 45, "X"], 20, 20, 20, 20, 20, 20, 3, [0, 41, "X"], 20, 20, 20, 20, 20, 20, 3, [0, 39, "X"], 20, 20, 20, 20, 20, 20, 3, [0, 35, "X"], 20, 3, 20, 20, 20, 20, 3, [0, 31, "X"], 20, 20, 20, 20, 20, 20, 3, [0, 29, "X"], 20, 20, 20, 20, 20, 20, 3, [0, 27, "X"], 20, 20, 20, 20, 20, 20, 3, [0, 25, "X"], 20, 20, 20, 20, 20, 20, 3, [0, 23, "X"], 20, 20, 20, 20, 20, 20, 3, [0, 21, "X"], 20, 20, 20, 20, 20, 20, 3, [0, 19, "X"], 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 20, 20, 20, 20, 20, 3, [0, 5, "GB"], 20, 20, 20, 20, 20, 3, 2, 20, 20, 20, 20, 20, 20, 20], #V n = 258 [ , 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, [5, 128], 3, 3, 3, 3, 3, 3, 3, 3, 3]]; GUAVA_BOUNDS_TABLE[2][2] := [ #V n = 1 [ ], #V n = 2 [ ], #V n = 3 [ ], #V n = 4 [ , [15, 2]], #V n = 5 [ , [15, 3], [15, 2]], #V n = 6 [ , [15, 4], [15, 3], [15, 2]], #V n = 7 [ , [15, 4], [15, 4], [15, 3], [15, 2]], #V n = 8 [ , [15, 5], [15, 4], [15, 4], [14, 4], [15, 2]], #V n = 9 [ , [15, 6], [15, 4], [15, 4], 12, 11, [15, 2]], #V n = 10 [ , [15, 6], [15, 5], [15, 4], [15, 4], 11, 11, [15, 2]], #V n = 11 [ , [15, 7], [15, 6], [15, 5], [15, 4], [15, 4], 11, 11, [15, 2]], #V n = 12 [ , [15, 8], [15, 6], [15, 6], [0, 4, "FP"], [15, 4], [15, 4], 11, 11, [15, 2]], #V n = 13 [ , [15, 8], [15, 7], [15, 6], 12, [16, 4], [15, 4], [15, 4], 11, 11, [15, 2]], #V n = 14 [ , [15, 9], [15, 8], [15, 7], [15, 6], [16, 5], [16, 4], [15, 4], [15, 4], 11, 11, [15, 2]], #V n = 15 [ , [15, 10], [15, 8], [15, 8], [15, 7], [15, 6], [16, 5], [16, 4], [15, 4], [15, 4], 11, 11, [15, 2]], #V n = 16 [ , [15, 10], [15, 8], [15, 8], [15, 8], [16, 6], [15, 6], [16, 5], [16, 4], [15, 4], [15, 4], [14, 8], 11, [15, 2]], #V n = 17 [ , [15, 11], [15, 9], [15, 8], [15, 8], [16, 7], [16, 6], [15, 6], [16, 5], [16, 4], [15, 4], 12, 11, 11, [15, 2]], #V n = 18 [ , [15, 12], [15, 10], [15, 8], [15, 8], [15, 8], [16, 7], [16, 6], [15, 6], 13, [16, 4], [15, 4], 11, 11, 11, [15, 2]], #V n = 19 [ , [15, 12], [15, 10], [15, 9], [15, 8], [15, 8], [15, 8], [16, 7], [16, 6], [14, 6], 11, [16, 4], [15, 4], 11, 11, 11, [15, 2]], #V n = 20 [ , [15, 13], [15, 11], [15, 10], [15, 9], [15, 8], [15, 8], [15, 8], [16, 7], [16, 6], 11, 11, [16, 4], [15, 4], 11, 11, 11, [15, 2]], #V n = 21 [ , [15, 14], [15, 12], [15, 10], [15, 10], [16, 8], [15, 8], [15, 8], [15, 8], [16, 7], [16, 6], 11, [16, 4], [16, 4], [15, 4], 11, 11, 11, [15, 2]], #V n = 22 [ , [15, 14], [15, 12], [15, 11], [15, 10], [16, 9], [16, 8], [15, 8], [15, 8], [15, 8], [16, 7], [16, 6], [16, 5], [16, 4], [16, 4], [15, 4], 11, 11, 11, [15, 2]], #V n = 23 [ , [15, 15], [15, 12], [15, 12], [15, 11], [15, 10], [16, 9], [16, 8], [15, 8], [15, 8], [15, 8], [16, 7], [16, 6], [16, 5], [16, 4], [16, 4], [15, 4], 11, 11, 11, [15, 2]], #V n = 24 [ , [15, 16], [15, 13], [15, 12], [15, 12], [16, 10], [15, 10], 13, [16, 8], [15, 8], [15, 8], [15, 8], [16, 6], [16, 6], 13, [16, 4], [16, 4], [15, 4], 11, 11, 11, [15, 2]], #V n = 25 [ , [15, 16], [15, 14], [15, 12], [15, 12], [16, 11], [16, 10], [0, 9, "YH1"], 11, [16, 8], [15, 8], [15, 8], 13, [16, 6], [0, 5, "Si"], 11, [16, 4], [16, 4], [15, 4], 11, 11, 11, [15, 2]], #V n = 26 [ , [15, 17], [15, 14], [15, 13], [15, 12], [15, 12], [16, 11], [16, 10], 11, 11, [16, 8], [15, 8], [0, 7, "Pu2"], 11, [16, 6], 11, 11, [16, 4], [16, 4], [15, 4], 11, 11, 11, [15, 2]], #V n = 27 [ , [15, 18], [15, 15], [15, 14], [15, 13], [15, 12], [15, 12], 13, [16, 10], 11, [16, 8], [16, 8], [15, 8], 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [15, 4], 11, 11, 11, [15, 2]], #V n = 28 [ , [15, 18], [15, 16], [15, 14], [15, 14], [0, 12, "BM"], [15, 12], [0, 11, "DM"], 11, [16, 10], 13, [16, 8], [16, 8], [15, 8], 13, 11, [16, 6], 11, 11, [16, 4], [16, 4], [15, 4], 11, 11, 11, [15, 2]], #V n = 29 [ , [15, 19], [15, 16], [15, 15], [15, 14], 12, [16, 12], [15, 12], 11, 11, [0, 9, "Ja"], 11, [16, 8], [16, 8], [0, 7, "Ja"], 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [15, 4], 11, 11, 11, [15, 2]], #V n = 30 [ , [15, 20], [15, 16], [15, 16], [15, 15], [15, 14], 13, [16, 12], [15, 12], 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [15, 4], 11, 11, 11, [15, 2]], #V n = 31 [ , [15, 20], [15, 17], [15, 16], [15, 16], [15, 15], [0, 13, "vT3"], 11, [16, 12], [15, 12], [16, 11], [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [15, 4], 11, 11, 11, [15, 2]], #V n = 32 [ , [15, 21], [15, 18], [15, 16], [15, 16], [15, 16], [16, 14], 11, 11, [16, 12], [15, 12], 13, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [15, 4], [14, 16], 11, 11, [15, 2]], #V n = 33 [ , [15, 22], [15, 18], [15, 16], [15, 16], [15, 16], 13, [16, 14], [0, 12, "He"], 11, [16, 12], [0, 11, "Ja"], 11, [16, 10], 11, [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], 12, 11, 11, 11, [15, 2]], #V n = 34 [ , [15, 22], [15, 19], [15, 17], [15, 16], [15, 16], [0, 15, "vT3"], 11, 12, 11, 11, [16, 12], 13, 11, [16, 10], [16, 9], [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], [0, 4, "BoV"], 11, [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 35 [ , [15, 23], [15, 20], [15, 18], [15, 16], [15, 16], [15, 16], 11, 11, 11, 11, 11, [0, 11, "Ja"], 11, 11, [16, 10], [0, 8, "Ja"], [16, 8], [16, 8], [16, 8], 11, 11, 11, 12, 11, 11, [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 36 [ , [15, 24], [15, 20], [15, 18], [15, 17], [15, 16], [15, 16], [15, 16], [0, 14, "Ja"], 11, 11, 11, 11, 11, 11, [16, 10], 12, 11, [16, 8], [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 37 [ , [15, 24], [15, 20], [15, 19], [15, 18], [15, 17], [15, 16], [15, 16], 12, 11, 11, 11, 11, [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], [16, 8], 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 38 [ , [15, 25], [15, 21], [15, 20], [15, 18], [15, 18], [16, 16], [15, 16], [15, 16], 13, 11, 11, 13, [16, 12], [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], [16, 8], 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 39 [ , [15, 26], [15, 22], [15, 20], [15, 19], [15, 18], [16, 17], [16, 16], [15, 16], [0, 15, "Bou"], 11, 11, [0, 13, "Ja"], 11, [16, 12], [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], [16, 8], 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 40 [ , [15, 26], [15, 22], [15, 20], [15, 20], [0, 18, "BM"], [15, 18], 13, [16, 16], [15, 16], 11, 11, 11, 11, 11, [16, 12], [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], [16, 8], 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 41 [ , [15, 27], [15, 23], [15, 21], [15, 20], 12, [16, 18], [0, 17, "BJV"], [16, 16], [16, 16], [15, 16], 11, 11, [16, 14], 11, [16, 12], [16, 12], [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], [16, 8], 13, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 42 [ , [15, 28], [15, 24], [15, 22], [15, 20], [15, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], [15, 16], 13, 11, [16, 14], [16, 13], [16, 12], [16, 12], [16, 12], 13, 11, [16, 10], 11, 11, [16, 8], [16, 8], [0, 7, "Ja"], 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 43 [ , [15, 28], [15, 24], [15, 22], [15, 21], [15, 20], [15, 20], 13, [16, 18], [16, 17], [16, 16], [16, 16], [0, 15, "Ja"], 11, 11, [16, 14], [16, 13], [16, 12], [16, 12], [0, 11, "Ja"], 11, 11, [16, 10], 11, [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 44 [ , [15, 29], [15, 24], [15, 23], [15, 22], [15, 21], [15, 20], [0, 19, "DM"], [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, [16, 14], [16, 14], 13, [16, 12], [16, 12], 11, 11, 11, [16, 10], [16, 9], [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 45 [ , [15, 30], [15, 25], [15, 24], [15, 22], [15, 22], [16, 20], [15, 20], [16, 19], [16, 18], [16, 18], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], [0, 13, "Ja"], 11, [16, 12], [16, 12], 11, 11, 11, [16, 10], [16, 9], [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 46 [ , [15, 30], [15, 26], [15, 24], [15, 23], [15, 22], [16, 21], [16, 20], [15, 20], [16, 19], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, [16, 10], [16, 10], [16, 9], [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 47 [ , [15, 31], [15, 26], [15, 24], [15, 24], [15, 23], [15, 22], [16, 21], [16, 20], [15, 20], 13, [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, [16, 10], [16, 10], [16, 9], [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 48 [ , [15, 32], [15, 27], [15, 24], [15, 24], [15, 24], [16, 22], [15, 22], [16, 20], [16, 20], [0, 19, "Ja"], [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 13, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, [16, 10], [16, 10], [16, 9], [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 49 [ , [15, 32], [15, 28], [15, 25], [15, 24], [15, 24], [16, 23], [16, 22], [0, 20, "Ja"], [16, 20], [16, 20], [16, 19], [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [0, 15, "Ja"], 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, [16, 10], [16, 10], 13, [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 50 [ , [15, 33], [15, 28], [15, 26], [15, 24], [15, 24], [15, 24], [16, 23], 12, 11, [16, 20], [16, 20], [16, 19], [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, [16, 10], [14, 14], 11, [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 51 [ , [15, 34], [15, 28], [15, 26], [15, 25], [15, 24], [15, 24], [15, 24], [16, 22], 11, 11, [16, 20], [16, 20], [0, 18, "Ja"], [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 52 [ , [15, 34], [15, 29], [15, 27], [15, 26], [15, 25], [15, 24], [15, 24], 13, [16, 22], 11, 11, [16, 20], 12, 11, [16, 18], [16, 18], [16, 16], [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 53 [ , [15, 35], [15, 30], [15, 28], [15, 26], [15, 26], [16, 24], [15, 24], [0, 23, "Bro"], 11, [16, 22], 11, [16, 20], [16, 20], 11, 11, [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], [16, 8], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 54 [ , [15, 36], [15, 30], [15, 28], [15, 27], [15, 26], 13, [16, 24], [15, 24], 11, 11, [16, 22], 13, [16, 20], [16, 20], 11, 11, [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, [16, 12], [16, 12], [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], [16, 8], 13, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 55 [ , [15, 36], [15, 31], [15, 28], [15, 28], [15, 27], [0, 25, "vT4"], [16, 24], [16, 24], [15, 24], 11, 11, [0, 21, "Ja"], [16, 20], [16, 20], [16, 20], 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, 11, [16, 14], [16, 13], [16, 12], [16, 12], [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], [0, 7, "Ja"], 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 56 [ , [15, 37], [15, 32], [15, 29], [15, 28], [15, 28], [16, 26], 13, [16, 24], [16, 24], [15, 24], 13, [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], [16, 19], [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, 11, [16, 14], [16, 13], [16, 12], [16, 12], [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 57 [ , [15, 38], [15, 32], [15, 30], [15, 28], [15, 28], 13, [0, 25, "BJV"], 11, [16, 24], [16, 24], [0, 23, "Ja"], 11, [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], [16, 19], [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], [16, 14], [16, 13], [16, 12], [16, 12], [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 58 [ , [15, 38], [15, 32], [15, 30], [15, 29], [15, 28], [0, 27, "vT3"], [16, 26], 11, [16, 24], [16, 24], [16, 24], 11, [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], [16, 19], [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], [16, 14], [16, 13], [16, 12], [16, 12], [16, 12], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 13, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 59 [ , [15, 39], [15, 33], [15, 31], [15, 30], [15, 29], [15, 28], 13, [16, 26], [16, 25], [16, 24], [16, 24], [16, 24], [0, 22, "Ja"], [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], 13, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], [16, 14], [16, 13], [16, 12], [16, 12], [16, 12], [0, 10, "Ja"], 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [14, 24], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 60 [ , [15, 40], [15, 34], [15, 32], [15, 30], [15, 30], [0, 28, "Hel"], [0, 27, "BJV"], 11, [16, 26], 13, [16, 24], [16, 24], 12, 11, [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], [0, 19, "Ja"], 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], [16, 14], [14, 16], [16, 12], [16, 12], 12, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 61 [ , [15, 40], [15, 34], [15, 32], [15, 31], [15, 30], 12, [16, 28], 11, [16, 26], [14, 4], 11, [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], 12, 11, [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 62 [ , [15, 41], [15, 35], [15, 32], [15, 32], [15, 31], [15, 30], [16, 28], [16, 28], [16, 27], [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 63 [ , [15, 42], [15, 36], [15, 32], [15, 32], [15, 32], [15, 31], [0, 28, "BJV"], [16, 28], [16, 28], [0, 26, "Ja"], [16, 26], 11, [16, 24], [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [16, 20], [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, [15, 2]], #V n = 64 [ , [15, 42], [15, 36], [15, 33], [15, 32], [15, 32], [15, 32], 12, 11, [16, 28], 12, 11, [16, 26], [16, 25], [16, 24], [16, 24], [16, 24], [0, 22, "Ja"], 11, [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], [14, 16], 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], [14, 32], 11, 11, 11, [15, 2]], #V n = 65 [ , [15, 43], [15, 36], [15, 34], [15, 32], [15, 32], [15, 32], [16, 30], 11, [16, 28], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], [16, 24], 12, 11, 11, [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], 12, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], 12, 11, 11, 11, 11, [15, 2]], #V n = 66 [ , [15, 44], [15, 37], [15, 34], [15, 32], [15, 32], [15, 32], 13, [16, 30], 13, [16, 28], [16, 28], 11, [16, 26], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [16, 16], [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 67 [ , [15, 44], [15, 38], [15, 35], [15, 33], [15, 32], [15, 32], [0, 31, "DHM"], 11, [0, 29, "Ja"], [16, 28], [16, 28], [16, 28], [16, 27], [16, 26], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], 11, 11, [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, [16, 12], [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, [16, 8], [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 68 [ , [15, 45], [15, 38], [15, 36], [15, 34], [15, 32], [15, 32], [15, 32], 13, [16, 30], [16, 29], [16, 28], [16, 28], [16, 28], [0, 26, "Ja"], [16, 26], [16, 26], [0, 24, "Ja"], [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], 11, 11, [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, 11, [16, 14], [16, 13], [16, 12], [16, 12], [16, 12], 11, 11, 11, [16, 10], [0, 8, "Ja"], [16, 8], [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 69 [ , [15, 46], [15, 39], [15, 36], [15, 34], [15, 33], [15, 32], [15, 32], [0, 31, "BGV"], 11, [16, 30], [16, 29], [16, 28], [16, 28], 12, 11, [16, 26], 12, [16, 24], [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, 11, [16, 14], [16, 13], [16, 12], [16, 12], [16, 12], 11, 11, 11, 12, 11, [16, 8], [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 70 [ , [15, 46], [15, 40], [15, 36], [15, 35], [15, 34], [15, 33], [15, 32], [15, 32], 11, [16, 30], [16, 30], 13, [16, 28], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], [16, 19], [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], [16, 14], [16, 13], [16, 12], [16, 12], [16, 12], [0, 10, "Ja"], 11, [16, 10], 11, 11, [16, 8], [16, 8], [16, 8], [0, 6, "Ja"], 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 71 [ , [15, 47], [15, 40], [15, 37], [15, 36], [15, 34], [15, 34], [16, 32], [15, 32], [15, 32], [16, 31], [16, 30], [0, 29, "Ja"], [16, 28], [16, 28], [16, 28], 11, 11, [16, 26], [16, 25], [16, 24], [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], [16, 19], [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], [16, 14], [16, 13], [16, 12], [16, 12], 12, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 12, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 72 [ , [15, 48], [15, 40], [15, 38], [15, 36], [15, 35], [15, 34], 13, [16, 32], [15, 32], [15, 32], 13, [16, 30], [16, 29], [16, 28], [16, 28], [16, 28], [0, 26, "Ja"], [16, 26], [16, 26], [16, 25], [16, 24], [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], [16, 19], [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], [16, 14], [16, 13], [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 73 [ , [15, 48], [15, 41], [15, 38], [15, 36], [15, 36], [0, 34, "Hel"], [0, 33, "BJV"], [16, 32], [16, 32], [15, 32], [0, 31, "Ja"], 11, [16, 30], [16, 29], [16, 28], [16, 28], 12, 11, [16, 26], [16, 26], [16, 25], [16, 24], [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], 13, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], [16, 14], [16, 13], [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 74 [ , [15, 49], [15, 42], [15, 39], [15, 37], [15, 36], 12, [16, 34], [16, 33], [16, 32], [16, 32], [15, 32], 11, [16, 30], [16, 30], [16, 29], [16, 28], [16, 28], 11, 11, [16, 26], [16, 26], [16, 25], [16, 24], [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [0, 20, "Ja"], [16, 20], [16, 20], [0, 19, "Bro"], 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], [16, 14], [0, 12, "Ja"], [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 75 [ , [15, 50], [15, 42], [15, 40], [15, 38], [15, 36], [15, 36], 13, [16, 34], [16, 33], [16, 32], [16, 32], [15, 32], [16, 31], [16, 30], [16, 30], [16, 29], [16, 28], [16, 28], 11, 11, [16, 26], [16, 26], [16, 25], [16, 24], [16, 24], [16, 24], [0, 22, "Ja"], 11, [16, 22], 12, 11, [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], 12, 11, [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 76 [ , [15, 50], [15, 43], [15, 40], [15, 38], [15, 37], [15, 36], [0, 35, "BJV"], [16, 34], [16, 34], [14, 4], [16, 32], [16, 32], [15, 32], [0, 30, "Ja"], [16, 30], [16, 30], [0, 28, "Ja"], [16, 28], [16, 28], 11, 11, [16, 26], [16, 26], [16, 25], [16, 24], [16, 24], 12, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 77 [ , [15, 51], [15, 44], [15, 40], [15, 39], [15, 38], [16, 36], [15, 36], [16, 35], [16, 34], 12, 11, [16, 32], [16, 32], 12, 11, [16, 30], 12, [16, 28], [16, 28], [16, 28], 11, 11, [16, 26], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 78 [ , [15, 52], [15, 44], [15, 40], [15, 40], [15, 38], [16, 37], [16, 36], [15, 36], [16, 35], [16, 34], 11, [16, 32], [16, 32], [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], [16, 28], [16, 28], 11, 11, [16, 26], [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], [0, 14, "Ja"], 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 79 [ , [15, 52], [15, 44], [15, 41], [15, 40], [15, 39], [15, 38], 13, [16, 36], [15, 36], [0, 34, "Ja"], [16, 34], [16, 33], [16, 32], [16, 32], [16, 32], 11, 11, [16, 30], [16, 29], [16, 28], [16, 28], [16, 28], 11, 11, [16, 26], [16, 26], [0, 24, "Ja"], [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [0, 16, "Ja"], [16, 16], [16, 16], 12, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 80 [ , [15, 53], [15, 45], [15, 42], [15, 40], [15, 40], [16, 38], [0, 37, "BJV"], [16, 36], [16, 36], 12, 11, [16, 34], [16, 33], [16, 32], [16, 32], [16, 32], [0, 30, "Ja"], [16, 30], [16, 30], [16, 29], [16, 28], [16, 28], [16, 28], [0, 26, "Ja"], 11, [16, 26], 12, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, [16, 20], [16, 20], [16, 20], 11, 11, [16, 18], 12, 11, [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], [0, 10, "Ja"], 11, 11, [16, 10], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 81 [ , [15, 54], [15, 46], [15, 42], [15, 40], [15, 40], [16, 39], [16, 38], [16, 37], [16, 36], [16, 36], 11, [16, 34], [16, 34], [16, 33], [16, 32], [16, 32], 12, 11, [16, 30], [16, 30], [16, 29], [16, 28], [16, 28], 12, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], 12, 11, 11, 11, [16, 10], [0, 8, "Ja"], 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 82 [ , [15, 54], [15, 46], [15, 43], [15, 41], [15, 40], [15, 40], 13, [16, 38], 13, [16, 36], [16, 36], [16, 35], [16, 34], [16, 34], 13, [16, 32], [16, 32], 11, 11, [16, 30], [16, 30], [16, 29], [16, 28], [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], [16, 21], [16, 20], [16, 20], [16, 20], [0, 18, "Ja"], 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], 11, 11, 11, 11, 12, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 83 [ , [15, 55], [15, 47], [15, 44], [15, 42], [15, 40], [15, 40], [0, 39, "DHM"], [16, 38], [0, 37, "Ja"], 11, [16, 36], [16, 36], [16, 35], [16, 34], [14, 6], 11, [16, 32], [16, 32], 11, 11, [16, 30], [16, 30], 13, [16, 28], [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], [0, 20, "Ja"], [16, 20], [16, 20], 12, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, [16, 14], [0, 12, "Ja"], [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 84 [ , [15, 56], [15, 48], [15, 44], [15, 42], [15, 41], [15, 40], [15, 40], [16, 39], [16, 38], 11, [16, 36], [16, 36], [16, 36], [0, 34, "Ja"], [16, 34], 11, 11, [16, 32], [16, 32], 11, 11, [16, 30], [0, 29, "Bro"], 11, [16, 28], [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, [16, 22], 12, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, 12, 11, [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 85 [ , [15, 56], [15, 48], [15, 44], [15, 43], [15, 42], [0, 40, "Hel"], [15, 40], [15, 40], [0, 38, "Ja"], [16, 38], [16, 37], [16, 36], [16, 36], 12, 11, [16, 34], 11, [16, 32], [16, 32], [16, 32], 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, 11, [16, 26], 11, [16, 24], [16, 24], [16, 24], 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, [16, 16], [16, 16], [16, 16], 11, 11, 11, 11, 11, [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 86 [ , [15, 57], [15, 48], [15, 45], [15, 44], [15, 42], 12, [16, 40], [15, 40], 12, 11, [16, 38], [0, 36, "Ja"], [16, 36], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], [16, 32], [16, 32], 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, 11, [16, 26], [16, 25], [16, 24], [16, 24], [16, 24], 13, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 87 [ , [15, 58], [15, 49], [15, 46], [15, 44], [15, 43], [15, 42], 13, [16, 40], [15, 40], [0, 38, "Ja"], [16, 38], 12, 11, [16, 36], [16, 36], 11, 11, [16, 34], [16, 33], [16, 32], [16, 32], [16, 32], 13, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, 11, [16, 26], [16, 25], [16, 24], [16, 24], [0, 23, "Bro"], 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 88 [ , [15, 58], [15, 50], [15, 46], [15, 44], [15, 44], [0, 42, "Hel"], [0, 41, "BJV"], 11, [16, 40], 12, 11, [16, 38], 11, [16, 36], [16, 36], [16, 36], 11, [16, 34], [16, 34], [16, 33], [16, 32], [16, 32], [0, 31, "Bro"], 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, [16, 26], [16, 26], 13, [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [16, 16], 13, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 89 [ , [15, 59], [15, 50], [15, 47], [15, 45], [15, 44], 12, [16, 42], 11, [16, 40], [16, 40], 11, 11, [16, 38], [16, 37], [16, 36], [16, 36], [16, 36], 13, [16, 34], [16, 34], [16, 33], [16, 32], [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, [16, 26], [0, 25, "Bro"], 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, [16, 18], [16, 18], [16, 17], [16, 16], [16, 16], [0, 15, "BK"], 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [16, 6], 13, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 90 [ , [15, 60], [15, 51], [15, 48], [15, 46], [15, 44], [15, 44], 13, [16, 42], [16, 40], [16, 40], [16, 40], 11, 11, [16, 38], [16, 37], [16, 36], [16, 36], [0, 35, "LP"], 11, [16, 34], [16, 34], [16, 33], [16, 32], [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 13, 11, [16, 18], [16, 18], 13, [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, [0, 5, "BK"], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 91 [ , [15, 60], [15, 52], [15, 48], [15, 46], [15, 45], [15, 44], [0, 43, "DMa"], 11, [16, 41], [16, 40], [16, 40], [16, 40], 11, [16, 38], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, [16, 34], [16, 34], 13, [16, 32], [16, 32], 11, 11, 11, [16, 30], 13, 11, [16, 28], [16, 28], 13, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, [16, 20], [16, 20], [0, 19, "BK"], 11, 11, [16, 18], [0, 17, "Jo2"], 11, [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], [0, 6, "Joplus"], 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 92 [ , [15, 61], [15, 52], [15, 48], [15, 47], [15, 46], [15, 45], [15, 44], 11, [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 13, [16, 38], [16, 38], 13, [16, 36], [16, 36], 13, 11, [16, 34], [0, 33, "Bro"], 11, [16, 32], [16, 32], 11, 11, 11, [0, 29, "Bro"], 11, 11, [16, 28], [0, 27, "Bro"], 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], [16, 21], [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], 12, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 93 [ , [15, 62], [15, 52], [15, 48], [15, 48], [15, 46], [15, 46], [16, 44], [15, 44], [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], [0, 39, "Bro"], 11, [16, 38], [0, 37, "Bro"], 11, [16, 36], [0, 35, "Bro"], 11, 11, [16, 34], 11, 11, [16, 32], [16, 32], 13, 11, 11, 11, 11, [16, 28], [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], [16, 21], [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 94 [ , [15, 62], [15, 53], [15, 49], [15, 48], [15, 47], [15, 46], 13, [16, 44], [16, 43], [16, 42], [16, 42], [0, 40, "Ja"], [16, 40], [16, 40], 11, 11, [16, 38], 11, 11, [16, 36], 11, 11, 11, [16, 34], 11, 11, [16, 32], [0, 31, "Bro"], 11, 11, 11, 11, 11, [16, 28], [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, [16, 22], [16, 22], 13, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 95 [ , [15, 63], [15, 54], [15, 50], [15, 48], [15, 48], [15, 47], [0, 45, "DHM"], 11, [16, 44], 13, [16, 42], 12, [16, 40], [16, 40], [16, 40], 11, 11, [16, 38], 11, 11, [16, 36], 11, 11, 11, [16, 34], 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, [16, 28], [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 13, 11, [16, 22], [0, 21, "BK"], 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, [16, 14], 11, 11, [16, 12], [16, 12], 13, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 96 [ , [15, 64], [15, 54], [15, 50], [15, 48], [15, 48], [15, 48], [16, 46], [0, 44, "Ja"], [16, 44], [0, 43, "Bro"], 11, [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 11, 11, [16, 38], 13, [16, 36], [16, 36], 11, 11, 11, [16, 34], 13, 11, [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, 11, [16, 26], 13, 11, [16, 24], [0, 23, "LP"], 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, [16, 14], 13, 11, [16, 12], [0, 11, "LP"], 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 97 [ , [15, 64], [15, 55], [15, 51], [15, 48], [15, 48], [15, 48], 13, 12, [16, 44], [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 13, 11, [0, 37, "Bro"], 11, [16, 36], [16, 36], 13, 11, 11, [0, 33, "Bro"], 11, 11, [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 13, 11, 11, [0, 25, "Bro"], 11, 11, [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 13, 11, 11, [0, 13, "BK"], 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 98 [ , [15, 65], [15, 56], [15, 52], [15, 49], [15, 48], [15, 48], [0, 47, "DM"], 11, 13, [16, 44], [16, 44], 11, [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], [0, 39, "Bro"], 11, 11, 11, 11, [16, 36], [0, 35, "Bro"], 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [0, 27, "Bro"], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, [16, 16], [16, 16], [0, 15, "LP"], 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 99 [ , [15, 66], [15, 56], [15, 52], [15, 50], [15, 48], [15, 48], [15, 48], 13, [0, 45, "Ja"], 11, [16, 44], [16, 44], [0, 42, "Ja"], [16, 42], [16, 42], 13, [16, 40], [16, 40], 11, 11, [16, 38], 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, [16, 32], [16, 32], 13, 11, 11, [16, 30], 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 13, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 100 [ , [15, 66], [15, 56], [15, 52], [15, 50], [15, 49], [15, 48], [15, 48], [0, 47, "Bro"], [16, 46], 11, 11, [16, 44], 12, 11, [16, 42], [0, 41, "Bro"], 11, [16, 40], [16, 40], 13, 11, [16, 38], 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, [16, 32], [0, 31, "Bro"], 11, 11, 11, [16, 30], 13, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 13, 11, 11, [16, 18], [16, 17], [16, 16], [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, [0, 9, "LP"], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 101 [ , [15, 67], [15, 57], [15, 53], [15, 51], [15, 50], [15, 49], [15, 48], [15, 48], 13, [16, 46], 11, [16, 44], [16, 44], 11, 11, [16, 42], 11, 11, [16, 40], [0, 39, "Bro"], 11, 11, [16, 38], 13, 11, [16, 36], 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, [0, 29, "Bro"], 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, [16, 20], [16, 20], [0, 19, "Jo2"], 11, 11, [16, 18], [16, 18], 13, [16, 16], [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 102 [ , [15, 68], [15, 58], [15, 54], [15, 52], [15, 50], [15, 50], [16, 48], [15, 48], [0, 47, "Bro"], 11, [16, 46], [0, 44, "Ja"], [16, 44], [16, 44], 11, 11, [16, 42], 11, 11, [16, 40], 11, 11, 11, [0, 37, "Bro"], 11, 11, [16, 36], 11, 11, 11, [16, 34], 13, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], 13, [16, 20], [16, 20], 11, 11, 11, [16, 18], [0, 17, "LP"], 11, [16, 16], [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 103 [ , [15, 68], [15, 58], [15, 54], [15, 52], [15, 51], [15, 50], [16, 48], [16, 48], [15, 48], 13, 11, 12, 11, [16, 44], [16, 44], 13, 11, [16, 42], 13, 11, [16, 40], 11, 11, 11, 11, 11, 11, [16, 36], 13, 11, 11, [0, 33, "Bro"], 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, 11, [0, 21, "BK"], 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 104 [ , [15, 69], [15, 59], [15, 55], [15, 52], [15, 52], [15, 51], [16, 49], [16, 48], [16, 48], [0, 47, "Ja"], 11, [16, 46], 11, [16, 44], [16, 44], [0, 43, "Bro"], 11, 11, [0, 41, "Bro"], 11, [16, 40], [16, 40], 11, 11, 11, 11, 11, 11, [0, 35, "Bro"], 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 13, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, 11, 11, 11, [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 105 [ , [15, 70], [15, 60], [15, 56], [15, 53], [15, 52], [15, 52], [16, 50], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], [16, 45], [16, 44], [16, 44], 11, 11, 11, 11, 11, [16, 40], [16, 40], 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [0, 23, "BK"], 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, 11, 11, 11, [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 106 [ , [15, 70], [15, 60], [15, 56], [15, 54], [15, 52], [15, 52], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], 13, [16, 44], [16, 44], 11, 11, 11, 11, 11, [16, 40], [0, 39, "Bro"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 13, 11, 11, [16, 26], 13, 11, [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, 11, 11, 11, [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 107 [ , [15, 71], [15, 60], [15, 56], [15, 54], [15, 53], [15, 52], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 13, [16, 46], [0, 45, "Bro"], 11, [16, 44], [16, 44], 13, 11, [16, 42], 11, 11, [16, 40], 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 13, 11, [16, 28], [0, 27, "LP"], 11, 11, 11, [0, 25, "BK"], 11, 11, [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, [16, 14], 13, 11, [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 108 [ , [15, 72], [15, 61], [15, 56], [15, 55], [15, 54], [15, 53], [15, 52], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [0, 47, "Ja"], 11, [16, 46], 11, 11, [16, 44], [0, 43, "Bro"], 11, 11, [16, 42], 13, 11, [16, 40], 11, 11, 11, [0, 37, "Bro"], 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, [16, 32], 13, 11, 11, [0, 29, "LP"], 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 13, 11, 11, [0, 13, "BK"], 11, 11, [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 109 [ , [15, 72], [15, 62], [15, 57], [15, 56], [15, 54], [15, 54], [16, 52], [16, 51], [16, 50], [16, 50], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], 11, [16, 44], [16, 44], 11, 11, 11, [0, 41, "Bro"], 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 33, "Bro"], 11, 11, 11, [0, 31, "Bro"], 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [0, 15, "BK"], 11, 11, 11, 11, 11, 11, [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 110 [ , [15, 73], [15, 62], [15, 58], [15, 56], [15, 55], [15, 54], [16, 52], [16, 52], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 13, 11, [16, 46], [16, 45], [16, 44], [16, 44], 11, 11, 11, 11, 11, 11, [16, 40], 13, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], [16, 24], 11, 11, 11, [16, 22], 13, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], [16, 12], [0, 10, "Joplus"], 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 111 [ , [15, 74], [15, 63], [15, 58], [15, 56], [15, 56], [15, 55], [16, 53], [16, 52], [16, 52], [0, 50, "Ja"], [16, 50], [16, 49], [16, 48], [16, 48], [0, 47, "Bro"], 11, 11, [16, 46], 13, [16, 44], [16, 44], 11, 11, 11, 11, 11, 11, [0, 39, "Bro"], 11, 11, 11, 11, 11, 11, [16, 36], 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, 11, [0, 21, "BK"], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 13, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], 12, 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 112 [ , [15, 74], [15, 64], [15, 59], [15, 56], [15, 56], [15, 56], [16, 54], [16, 52], [16, 52], 12, [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, [16, 46], [0, 45, "Bro"], 11, [16, 44], [16, 44], 13, 11, 11, 13, 11, 11, 11, 11, 11, 11, 13, 11, 11, [0, 35, "Bro"], 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, 11, 11, 11, 11, [16, 20], [16, 20], 13, 11, 11, [0, 17, "BK"], 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 113 [ , [15, 75], [15, 64], [15, 60], [15, 57], [15, 56], [15, 56], [16, 54], [16, 53], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, [16, 46], 11, 11, [16, 44], [0, 43, "Bro"], 11, 11, [0, 41, "Bro"], 11, 11, 11, 11, 11, 11, [0, 37, "Bro"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 13, 11, 11, 11, 11, 11, [16, 20], [0, 19, "Jo2"], 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 114 [ , [15, 76], [15, 64], [15, 60], [15, 58], [15, 56], [15, 56], [16, 55], [16, 54], [16, 53], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], 13, [16, 48], [16, 48], 11, 11, [16, 46], 13, 11, [16, 44], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, [16, 26], 13, 11, [16, 24], [0, 23, "BK"], 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], [0, 6, "Joplus"], 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 115 [ , [15, 76], [15, 65], [15, 60], [15, 58], [15, 57], [15, 56], [15, 56], [16, 54], [16, 54], 13, [16, 52], [16, 52], 13, [16, 50], [0, 49, "Bro"], 11, [16, 48], [16, 48], 13, 11, [0, 45, "Bro"], 11, 11, [16, 44], 13, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, [0, 25, "BK"], 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 12, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 116 [ , [15, 77], [15, 66], [15, 61], [15, 59], [15, 58], [15, 57], [15, 56], [16, 55], [16, 54], [0, 53, "Ja"], [16, 52], [16, 52], [0, 51, "Ja"], 11, [16, 50], 11, 11, [16, 48], [0, 47, "Bro"], 11, 11, 11, 11, 11, [0, 43, "Bro"], 11, 11, 11, 11, 11, 11, [16, 40], 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 13, 11, 11, 11, 11, 11, 11, [16, 28], 13, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, [16, 20], [16, 20], 11, 11, 11, 11, 11, 11, [16, 16], [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 117 [ , [15, 78], [15, 66], [15, 62], [15, 60], [15, 58], [15, 58], [16, 56], [15, 56], [16, 55], [16, 54], [16, 53], [16, 52], [16, 52], 11, 11, [16, 50], 11, [16, 48], [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, [0, 39, "Bro"], 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 13, 11, 11, [0, 31, "LP"], 11, 11, 11, 11, 13, 11, [16, 28], [0, 27, "BK"], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, [16, 20], [16, 20], 11, 11, 11, 11, 11, 11, [16, 16], [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 118 [ , [15, 78], [15, 67], [15, 62], [15, 60], [15, 59], [15, 58], 13, [16, 56], [15, 56], 13, [16, 54], 13, [16, 52], [16, 52], 13, 11, [16, 50], [16, 49], [16, 48], [16, 48], 13, 11, 11, 11, 11, 11, 11, 11, 11, [0, 41, "Bro"], 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, [0, 35, "Bro"], 11, 11, 11, [0, 33, "LP"], 11, 11, 11, 11, 11, 11, 11, [0, 29, "BK"], 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, [16, 20], [16, 20], 11, 11, 11, 11, 11, 11, [16, 16], [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 13, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 119 [ , [15, 79], [15, 68], [15, 63], [15, 60], [15, 60], [15, 59], [0, 57, "DMa"], [16, 56], [16, 56], [0, 55, "Bro"], [16, 54], [0, 53, "Ja"], 11, [16, 52], [0, 51, "Bro"], 11, 11, [16, 50], 13, [16, 48], [0, 47, "Bro"], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 37, "Bro"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, [0, 9, "BK"], 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 120 [ , [15, 80], [15, 68], [15, 64], [15, 61], [15, 60], [15, 60], [16, 58], [16, 56], [16, 56], [16, 56], 13, [16, 54], 11, 11, [16, 52], 11, 11, [16, 50], [0, 49, "Bro"], 11, [16, 48], 11, 11, 11, [0, 45, "Bro"], 11, 11, [16, 44], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, [16, 22], 13, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [16, 16], 13, 11, 11, 11, 13, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 121 [ , [15, 80], [15, 68], [15, 64], [15, 62], [15, 60], [15, 60], 13, [16, 57], [16, 56], [16, 56], [0, 55, "Bro"], 11, [16, 54], 11, [16, 52], [16, 52], 13, 11, [16, 50], 13, 11, [16, 48], 11, 11, 11, 11, 11, 11, [16, 44], 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], [16, 24], 13, 11, 11, [0, 21, "BK"], 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], 11, 11, [16, 16], [0, 15, "BK"], 11, 11, 11, [0, 13, "LP"], 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 122 [ , [15, 81], [15, 69], [15, 64], [15, 62], [15, 61], [15, 60], 13, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], 13, [16, 52], [0, 51, "Bro"], 11, 11, [0, 49, "Bro"], 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, [0, 43, "Bro"], 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], [0, 23, "LP"], 11, 11, 11, 11, 11, 11, [16, 20], [16, 20], 11, 11, 11, [16, 18], [0, 16, "Joplus"], 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 123 [ , [15, 82], [15, 70], [15, 64], [15, 63], [15, 62], [15, 61], [0, 59, "BJV"], [16, 58], [16, 58], [16, 56], [16, 56], [16, 56], 13, 11, [0, 53, "Bro"], 11, [16, 52], 11, 11, 11, 11, 11, 11, [16, 48], 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, [0, 39, "Bro"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], [16, 20], 13, 11, 11, 12, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 124 [ , [15, 82], [15, 70], [15, 65], [15, 64], [15, 62], [15, 62], 12, [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], [0, 55, "Ja"], 11, [16, 54], 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, [0, 47, "Bro"], 11, 11, 11, 13, 11, 11, 11, 11, 11, [0, 41, "Bro"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 13, 11, 11, [16, 26], 13, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], [0, 19, "BK"], 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 125 [ , [15, 83], [15, 71], [15, 66], [15, 64], [15, 63], [15, 62], 12, [16, 60], 13, [16, 58], 13, [16, 56], [16, 56], 11, 11, [16, 54], 13, [16, 52], [16, 52], 13, 11, 11, 11, 11, 11, 11, 11, 11, [0, 45, "Bro"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [0, 27, "BK"], 11, 11, 11, [0, 25, "BK"], 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 13, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 13, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 126 [ , [15, 84], [15, 72], [15, 66], [15, 64], [15, 64], [15, 63], [15, 62], [16, 60], [0, 59, "Ja"], [16, 58], [0, 57, "Ja"], 11, [16, 56], [16, 56], 13, 11, [0, 53, "Bro"], 11, [16, 52], [0, 51, "Bro"], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 13, 11, 11, [16, 32], 11, 11, 11, 11, 13, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, [0, 11, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, [0, 5, "BK"], 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 127 [ , [15, 84], [15, 72], [15, 67], [15, 64], [15, 64], [15, 64], [15, 63], [16, 60], [16, 60], [16, 59], [16, 58], 11, [16, 56], [16, 56], [0, 55, "Bro"], 11, 11, 11, 11, [16, 52], 11, 11, 11, [0, 49, "Bro"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 43, "Bro"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 35, "BK"], 11, 11, 11, [0, 33, "LP"], 11, 11, 11, [16, 32], 11, 11, 11, [0, 29, "BK"], 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, [15, 2]], #V n = 128 [ , [15, 85], [15, 72], [15, 68], [15, 64], [15, 64], [15, 64], [15, 64], [16, 61], [16, 60], [16, 60], 13, [16, 58], [16, 57], [16, 56], [16, 56], 11, 11, [16, 54], 11, 11, [16, 52], 13, 11, 11, 11, 11, 11, [16, 48], 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 13, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], [14, 64], 11, 11, 11, 11, [15, 2]], #V n = 129 [ , [15, 86], [15, 73], [15, 68], [15, 65], [15, 64], [15, 64], [15, 64], [16, 62], [16, 60], [16, 60], [0, 59, "Ja"], 11, [16, 58], [16, 57], [16, 56], [16, 56], 13, 11, [16, 54], 13, 11, [0, 51, "BK"], 11, 11, 11, 13, 11, 11, [0, 47, "LP"], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 39, "LP"], 11, 11, 11, [0, 37, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 31, "LP"], 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], 12, 11, 11, 11, 11, 11, [15, 2]], #V n = 130 [ , [15, 86], [15, 74], [15, 68], [15, 66], [15, 64], [15, 64], [15, 64], [16, 62], [16, 61], [16, 60], [16, 60], 11, [16, 58], [16, 58], 13, [16, 56], [0, 55, "BK"], 11, 11, [0, 53, "BK"], 11, 11, 11, 11, 11, [0, 49, "BK"], 11, 11, 11, 11, 11, 11, [0, 45, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [16, 24], 13, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 131 [ , [15, 87], [15, 74], [15, 69], [15, 66], [15, 64], [15, 64], [15, 64], 13, [16, 62], [0, 60, "Ja"], [16, 60], [16, 60], 13, [16, 58], [0, 57, "BK"], 11, [16, 56], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [0, 23, "LP"], 11, 11, 11, 11, 11, 11, [16, 20], [16, 20], 11, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 132 [ , [15, 88], [15, 75], [15, 70], [15, 67], [15, 65], [15, 64], [15, 64], [0, 63, "Gur"], [16, 62], 12, 11, [16, 60], [0, 59, "Ja"], 11, [16, 58], 13, 11, [16, 56], 11, 11, [0, 53, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 47, "LP"], 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, [0, 41, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 13, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], [16, 20], 11, 11, 11, 11, [0, 16, "Jo"], 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 133 [ , [15, 88], [15, 76], [15, 70], [15, 68], [15, 66], [15, 64], [15, 64], [15, 64], [16, 63], [16, 62], [0, 60, "Ja"], [16, 60], [16, 60], 11, 11, [0, 57, "LP"], 11, [16, 56], [16, 56], 13, 11, 11, 11, 11, [16, 52], 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 43, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, [0, 25, "LP"], 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], [16, 20], 11, 11, 11, 12, 11, 11, 11, [16, 16], [0, 14, "Jo"], 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 134 [ , [15, 89], [15, 76], [15, 71], [15, 68], [15, 66], [15, 65], [15, 64], [15, 64], [15, 64], [0, 62, "Ja"], 12, 11, [16, 60], [16, 60], 13, 11, 11, 11, [16, 56], [0, 55, "BK"], 11, 11, 11, 11, 11, [0, 51, "BK"], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 135 [ , [15, 90], [15, 76], [15, 72], [15, 68], [15, 67], [15, 66], [15, 65], [15, 64], [15, 64], 12, 11, 11, 11, [16, 60], [0, 59, "BK"], 11, 11, 11, 11, [16, 56], 13, 11, 11, 11, 11, 11, 11, 11, 11, [0, 49, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, [16, 22], 11, 11, [16, 20], [16, 20], [0, 18, "Jo"], 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 136 [ , [15, 90], [15, 77], [15, 72], [15, 69], [15, 68], [15, 66], [15, 66], [16, 64], [15, 64], [15, 64], [0, 62, "Ja"], [16, 62], 11, 11, [16, 60], 13, 11, [16, 58], 11, 11, [0, 55, "BK"], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, [16, 22], 11, 11, [16, 20], 12, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, [0, 12, "Jo"], 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 137 [ , [15, 91], [15, 78], [15, 72], [15, 70], [15, 68], [15, 67], [15, 66], [16, 64], [16, 64], [15, 64], 12, 11, [16, 62], 11, [16, 60], [0, 59, "BK"], 11, 11, [16, 58], 13, 11, 11, 11, 11, [0, 53, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, [16, 28], [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, [16, 22], 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 12, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 138 [ , [15, 92], [15, 78], [15, 72], [15, 70], [15, 68], [15, 68], [0, 66, "Hel"], [16, 65], [16, 64], [16, 64], [15, 64], 11, 11, [16, 62], 13, [16, 60], 11, 11, 11, [0, 57, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, [16, 28], [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, [16, 22], [0, 20, "Jo"], 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 139 [ , [15, 92], [15, 79], [15, 73], [15, 71], [15, 69], [15, 68], 12, [16, 66], [16, 65], [16, 64], [16, 64], [15, 64], 13, 11, [0, 61, "BK"], 11, [16, 60], 11, 11, 11, 13, 11, 11, 11, 11, 11, 13, 11, 11, [0, 51, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, [16, 28], [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 12, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 140 [ , [15, 93], [15, 80], [15, 74], [15, 72], [15, 70], [15, 68], [15, 68], [16, 66], [16, 66], [16, 65], [16, 64], [16, 64], [0, 63, "Ja"], 11, [16, 62], 13, 11, [16, 60], 11, 11, [0, 57, "BK"], 11, 11, [16, 56], 13, 11, [0, 53, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 141 [ , [15, 94], [15, 80], [15, 74], [15, 72], [15, 70], [15, 69], [15, 68], [16, 67], [16, 66], [16, 66], [16, 64], [16, 64], [16, 64], 11, 11, [0, 61, "BK"], 11, [16, 60], [16, 60], 13, 11, 11, 11, 11, [0, 55, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, [0, 8, "Jo"], 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 142 [ , [15, 94], [15, 80], [15, 75], [15, 72], [15, 71], [15, 70], [16, 68], [15, 68], [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], [16, 64], 13, 11, 11, 11, [16, 60], [0, 59, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 12, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 143 [ , [15, 95], [15, 81], [15, 76], [15, 72], [15, 72], [15, 70], [16, 69], [16, 68], [15, 68], [16, 67], [16, 66], [16, 65], [16, 64], [16, 64], [0, 63, "BK"], 11, 11, 11, 11, [16, 60], 13, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 144 [ , [15, 96], [15, 82], [15, 76], [15, 73], [15, 72], [15, 71], [15, 70], [16, 68], [16, 68], [15, 68], [16, 66], [16, 66], [16, 65], [16, 64], [16, 64], 13, 11, [16, 62], 11, 11, [0, 59, "BK"], 11, 11, 11, 13, 11, [0, 55, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, [16, 32], [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 145 [ , [15, 96], [15, 82], [15, 76], [15, 74], [15, 72], [15, 72], [16, 70], [16, 69], [16, 68], [16, 68], [16, 67], [16, 66], [16, 66], [16, 65], [16, 64], [0, 63, "BK"], 11, 11, [16, 62], 13, 11, 13, 11, 11, [0, 57, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, [16, 32], [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, 11, 11, 11, [16, 24], [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], [0, 18, "Jo"], 11, 11, 11, [0, 16, "Jo"], 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], [0, 10, "Jo"], 11, 11, 11, 11, 11, 11, 11, [16, 8], [16, 8], [0, 6, "Jo"], 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 146 [ , [15, 97], [15, 83], [15, 77], [15, 74], [15, 72], [15, 72], [16, 71], [16, 70], [16, 69], [16, 68], [16, 68], [16, 67], [16, 66], [16, 66], 13, [16, 64], 13, 11, 11, [0, 61, "BK"], 11, [0, 59, "BK"], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, [16, 32], [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, 11, 11, 11, [16, 24], [16, 24], 11, 11, 11, 11, 11, 11, [16, 20], 12, 11, 11, 11, 12, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 12, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 147 [ , [15, 98], [15, 84], [15, 78], [15, 75], [15, 73], [15, 72], [15, 72], [16, 70], [16, 70], [0, 68, "Ja"], [16, 68], [16, 68], [0, 66, "Ja"], [16, 66], [0, 65, "BK"], [16, 64], [0, 63, "BK"], 11, 11, 11, 13, 11, 11, 11, 11, [0, 57, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, [16, 34], 11, 11, [16, 32], [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, 11, 11, 11, [16, 24], [16, 24], 11, 11, 11, 11, [0, 20, "Jo"], 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, 11, [16, 16], [0, 14, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 148 [ , [15, 98], [15, 84], [15, 78], [15, 76], [15, 74], [15, 72], [15, 72], [16, 71], [16, 70], 12, [16, 68], [16, 68], 12, 11, [16, 66], [16, 65], [16, 64], 11, 11, 11, [0, 61, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, [16, 34], 11, 11, [16, 32], [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, 11, 12, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 149 [ , [15, 99], [15, 84], [15, 79], [15, 76], [15, 74], [15, 73], [15, 72], [15, 72], [16, 71], [16, 70], [0, 68, "Ja"], [16, 68], [16, 68], 11, 11, [16, 66], 13, [16, 64], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, [0, 55, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, [16, 36], [16, 36], 11, 11, 11, [16, 34], 11, 11, [16, 32], [16, 32], 11, 11, 11, [16, 30], 11, [16, 28], [16, 28], [16, 28], 11, 11, [16, 26], 11, 11, [16, 24], [16, 24], 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 150 [ , [15, 100], [15, 85], [15, 80], [15, 76], [15, 75], [15, 74], [16, 72], [15, 72], [15, 72], [0, 70, "Ja"], 12, 11, [16, 68], [16, 68], 13, [16, 66], 13, 11, [16, 64], 11, 11, [0, 61, "BK"], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, [16, 36], [16, 36], 11, 11, 11, [16, 34], 11, 11, [16, 32], [16, 32], 11, 11, 11, [16, 30], [16, 29], [16, 28], [16, 28], [16, 28], [0, 26, "Jo"], 11, [16, 26], 11, 11, [16, 24], [16, 24], [0, 22, "Jo"], 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 151 [ , [15, 100], [15, 86], [15, 80], [15, 77], [15, 76], [15, 74], [16, 73], [16, 72], [15, 72], 12, [16, 70], 11, 11, [16, 68], [0, 67, "BK"], 11, [0, 65, "BK"], 11, 11, [16, 64], 13, 11, 11, 11, 11, [0, 59, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, 11, 11, 11, 11, [16, 40], [16, 40], 11, 11, 11, 11, 11, 11, [16, 36], [16, 36], 11, 11, 11, [16, 34], 11, 11, [16, 32], [16, 32], 11, 11, 11, [16, 30], [16, 29], [16, 28], [16, 28], 12, 11, 11, [16, 26], 11, 11, [16, 24], 12, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 152 [ , [15, 101], [15, 86], [15, 80], [15, 78], [15, 76], [15, 75], [15, 74], [16, 72], [16, 72], [15, 72], [0, 70, "Ja"], [16, 70], 11, 11, [16, 68], 13, 11, 11, 11, 11, [0, 63, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], 11, 11, [16, 44], 11, 11, 11, 11, 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], 11, 11, [16, 36], [16, 36], 11, 11, 11, [16, 34], 11, 11, [16, 32], [16, 32], 11, 11, [16, 30], [16, 30], [16, 29], [16, 28], [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 12, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 153 [ , [15, 102], [15, 87], [15, 80], [15, 78], [15, 76], [15, 76], [16, 74], [16, 73], [16, 72], [16, 72], 12, 11, [16, 70], 11, [16, 68], [0, 67, "BK"], 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 13, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, 11, [16, 48], [14, 22], 11, 11, [16, 46], 13, 11, [16, 44], 11, 11, 11, 11, 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], 11, 11, [16, 36], [16, 36], 11, 11, 11, [16, 34], 11, 11, [16, 32], [16, 32], 11, 11, [16, 30], [16, 30], [16, 29], [16, 28], [16, 28], 11, 11, 11, [16, 26], 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 154 [ , [15, 102], [15, 88], [15, 81], [15, 79], [15, 77], [15, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], 13, 11, [16, 70], 13, [16, 68], 13, 11, 11, 11, 11, [0, 63, "BK"], 11, 11, 11, 13, 11, [0, 59, "BK"], 11, 11, 11, 13, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 13, 11, 11, 12, 11, 11, 11, [14, 24], 11, 11, [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], 11, 11, [16, 36], [16, 36], 11, 11, 11, [16, 34], 11, 11, [16, 32], [16, 32], 11, 11, [16, 30], [16, 30], [16, 29], [16, 28], [16, 28], 11, 11, 11, [16, 26], [0, 24, "Jo"], 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 155 [ , [15, 103], [15, 88], [15, 82], [15, 80], [15, 78], [15, 76], [15, 76], [16, 74], [16, 74], [16, 72], [16, 72], [0, 71, "Ja"], 11, 11, [0, 69, "BK"], 11, [0, 67, "BK"], 11, 11, 11, 13, 11, 11, 11, 11, [0, 61, "BK"], 11, 11, 11, 11, 11, [0, 57, "BK"], 11, 11, 11, [0, 55, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, [14, 20], 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], 11, 11, [16, 36], [16, 36], 11, 11, 11, [16, 34], 11, [16, 32], [16, 32], [16, 32], 11, 11, [16, 30], [16, 30], [16, 29], [16, 28], [16, 28], 11, 11, 11, 12, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 156 [ , [15, 104], [15, 88], [15, 82], [15, 80], [15, 78], [15, 77], [15, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, [16, 70], 13, 11, 11, 11, 11, [0, 65, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], 11, 11, [16, 36], [16, 36], 11, 11, 11, [16, 34], [16, 33], [16, 32], [16, 32], [16, 32], 11, 11, [16, 30], [16, 30], [0, 28, "Jo"], [16, 28], [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 157 [ , [15, 104], [15, 89], [15, 83], [15, 80], [15, 79], [15, 78], [16, 76], [15, 76], [16, 75], [16, 74], [0, 72, "Ja"], [16, 72], [16, 72], 11, 11, [0, 69, "BK"], 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 18], 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, 11, [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], 11, 11, [16, 36], [16, 36], 11, 11, 11, [16, 34], [16, 33], [16, 32], [16, 32], [16, 32], 11, 11, [16, 30], 12, 11, [16, 28], [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], [0, 18, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 158 [ , [15, 105], [15, 90], [15, 84], [15, 80], [15, 80], [15, 78], [16, 77], [16, 76], [15, 76], [16, 74], 12, 11, [16, 72], [16, 72], 13, 11, 13, 11, [16, 68], 11, 11, [0, 65, "BK"], 11, 11, 11, 13, 11, [0, 61, "BK"], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, [16, 52], 13, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, [16, 44], [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], 11, 11, [16, 36], [16, 36], 11, 11, [16, 34], [16, 34], [16, 33], [16, 32], [16, 32], [16, 32], 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, [0, 20, "Jo"], 11, 11, 12, 11, 11, 11, 11, [0, 16, "Jo"], 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 159 [ , [15, 106], [15, 90], [15, 84], [15, 80], [15, 80], [15, 79], [15, 78], [16, 76], [16, 76], [16, 75], [16, 74], 11, [16, 72], [16, 72], [0, 71, "BK"], 11, [0, 69, "BK"], 11, 11, [16, 68], 11, 11, 11, 11, 11, [0, 63, "BK"], 11, 11, 11, 11, 11, [0, 59, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], [14, 20], 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, [16, 44], [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], 11, 11, [16, 36], [16, 36], 11, 11, [16, 34], [16, 34], [16, 33], [16, 32], [16, 32], [16, 32], 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], [0, 26, "Jo"], 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 160 [ , [15, 106], [15, 91], [15, 84], [15, 81], [15, 80], [15, 80], [16, 78], [16, 77], [16, 76], [16, 76], 13, [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, 11, 11, 11, [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, [16, 44], [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], 11, [16, 36], [16, 36], [16, 36], 11, 11, [16, 34], [16, 34], [16, 33], [16, 32], [16, 32], [16, 32], 11, 11, [16, 30], 11, 11, [16, 28], 12, 11, 11, 11, 11, 11, 11, [16, 24], [0, 22, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 161 [ , [15, 107], [15, 92], [15, 85], [15, 82], [15, 80], [15, 80], [16, 79], [16, 78], [16, 77], [16, 76], [0, 75, "Ja"], 11, [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, 11, 11, [16, 68], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], 11, 11, [16, 44], [16, 44], 11, 11, 11, [16, 42], 11, [16, 40], [16, 40], [16, 40], 11, 11, 11, [16, 38], [16, 37], [16, 36], [16, 36], [16, 36], 11, 11, [16, 34], [16, 34], [16, 33], [16, 32], [16, 32], [16, 32], [0, 30, "Jo"], 11, [16, 30], 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 16], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 162 [ , [15, 108], [15, 92], [15, 86], [15, 82], [15, 80], [15, 80], [15, 80], [16, 78], [16, 78], [16, 76], [16, 76], [0, 74, "Ja"], [16, 74], [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, 11, 11, [16, 68], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], 11, 11, [16, 44], [16, 44], 13, 11, 11, [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 11, 11, 11, [16, 38], [16, 37], [16, 36], [16, 36], [16, 36], 11, 11, [16, 34], [16, 34], [16, 33], [16, 32], [16, 32], 12, 11, 11, [16, 30], 11, [16, 28], [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 16], [0, 14, "Jo"], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 163 [ , [15, 108], [15, 92], [15, 86], [15, 83], [15, 81], [15, 80], [15, 80], [16, 79], [16, 78], 13, [16, 76], 12, 11, [16, 74], [16, 74], 13, [16, 72], [16, 72], 11, 11, 11, 11, [16, 68], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, [16, 48], [16, 48], 11, 11, 11, [16, 46], 11, 11, [16, 44], [14, 30], 11, 11, 11, [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 11, 11, [16, 38], [16, 38], [16, 37], [16, 36], [16, 36], [16, 36], 11, 11, [16, 34], [16, 34], [16, 33], [16, 32], [16, 32], 11, 11, 11, [16, 30], [0, 28, "Jo"], [16, 28], [16, 28], 11, 11, 11, 11, [0, 24, "Jo"], 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 164 [ , [15, 109], [15, 93], [15, 87], [15, 84], [15, 82], [15, 80], [15, 80], [15, 80], 13, [0, 77, "Ja"], [16, 76], [16, 76], 11, 11, [16, 74], [14, 6], 11, [16, 72], [16, 72], 11, [16, 70], 11, 11, [16, 68], [16, 68], [14, 10], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, [16, 48], [16, 48], 11, 11, 11, [16, 46], 11, 11, [16, 44], 11, 11, 11, [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], [14, 36], 11, [16, 38], [16, 38], [16, 37], [16, 36], [16, 36], [16, 36], 11, 11, [16, 34], [16, 34], [16, 33], [16, 32], [16, 32], 11, 11, 11, 12, 11, [16, 28], [16, 28], 11, 11, 11, 12, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 165 [ , [15, 110], [15, 94], [15, 88], [15, 84], [15, 82], [15, 81], [15, 80], [15, 80], [0, 79, "Gur"], [16, 78], [0, 76, "Ja"], [16, 76], [16, 76], 11, 11, [16, 74], 11, [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], 11, 11, [16, 68], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, 11, 11, 11, [16, 48], [16, 48], 11, 11, 11, [16, 46], 11, 11, [16, 44], 11, 11, 11, [16, 42], [16, 42], [14, 34], [16, 40], [16, 40], 12, 11, 11, [16, 38], [16, 38], [16, 37], [16, 36], [16, 36], [16, 36], 11, 11, [16, 34], [16, 34], [16, 32], [16, 32], [16, 32], 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 166 [ , [15, 110], [15, 94], [15, 88], [15, 84], [15, 83], [15, 82], [16, 80], [15, 80], [15, 80], [0, 78, "Ja"], 12, 11, [16, 76], [16, 76], 11, 11, [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [14, 8], [16, 70], 11, [16, 68], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, [16, 50], 11, 11, [16, 48], [16, 48], 11, 11, 11, [16, 46], 11, [16, 44], [16, 44], 11, 11, 11, [16, 42], 12, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], [16, 38], [14, 38], [16, 36], [16, 36], [16, 36], 13, 11, [16, 34], [16, 33], [16, 32], [16, 32], [16, 32], 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], [0, 10, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 167 [ , [15, 111], [15, 95], [15, 88], [15, 85], [15, 84], [15, 82], [16, 81], [16, 80], [15, 80], 12, [16, 78], 11, 11, [16, 76], [16, 76], 11, 11, [16, 74], [16, 73], [16, 72], [16, 72], 12, 11, [16, 70], [16, 69], [16, 68], [16, 68], 11, 11, 11, 11, 11, [16, 64], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, [16, 50], 11, 11, [16, 48], [16, 48], 11, 11, 11, [16, 46], [16, 45], [16, 44], [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], 12, 11, [16, 36], [16, 36], [14, 40], 11, 11, [16, 34], [16, 33], [16, 32], [16, 32], [16, 32], 11, 11, [16, 30], 11, 11, [16, 28], [16, 28], [0, 26, "Jo"], 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 168 [ , [15, 112], [15, 96], [15, 88], [15, 86], [15, 84], [15, 83], [15, 82], [16, 80], [16, 80], [15, 80], [0, 78, "Ja"], [16, 78], [0, 76, "Ja"], 11, [16, 76], [16, 76], 13, [16, 74], [16, 74], 13, [16, 72], [16, 72], 13, 11, [16, 70], [14, 10], [16, 68], [16, 68], 11, 11, 11, 11, 11, [16, 64], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], 11, 11, 11, [16, 50], 11, 11, [16, 48], [16, 48], 11, 11, 11, [16, 46], [16, 45], [16, 44], [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], 11, 11, [16, 36], [16, 36], 11, 11, [16, 34], [16, 34], [16, 33], [16, 32], [16, 32], [16, 32], [0, 30, "Jo"], 11, [16, 30], 11, 11, [16, 28], 12, 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 8, "Jo"], 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 169 [ , [15, 112], [15, 96], [15, 89], [15, 86], [15, 84], [15, 84], [16, 82], [16, 81], [16, 80], [16, 80], 12, 11, 12, 11, [16, 76], [16, 76], 13, 11, [16, 74], 13, [16, 72], [16, 72], 13, 11, [16, 70], 12, 11, [16, 68], [16, 68], 11, 11, 11, [14, 12], 11, [16, 64], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], [16, 52], 11, 11, 11, [16, 50], 11, 11, [16, 48], [16, 48], 11, 11, [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], 11, 11, [16, 36], [16, 36], 11, 11, [16, 34], [16, 34], [16, 33], [16, 32], [16, 32], 12, 11, 11, [16, 30], 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, [0, 20, "Jo"], 11, 11, [16, 20], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 170 [ , [15, 113], [15, 96], [15, 90], [15, 87], [15, 85], [15, 84], [16, 83], [16, 82], [16, 81], [16, 80], [16, 80], [0, 78, "Ja"], 11, 11, 11, [16, 76], 13, 11, 11, 13, 11, [16, 72], 13, 11, 11, [16, 70], 11, 11, [16, 68], [16, 68], 11, 11, 12, 11, 11, [16, 64], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], [16, 52], 11, 11, 11, [16, 50], 11, 11, [16, 48], [16, 48], 11, 11, [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], 11, 11, [16, 36], [16, 36], 11, 11, [16, 34], [16, 34], [16, 33], [16, 32], [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 12, 11, 11, 11, [16, 20], [0, 18, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 171 [ , [15, 114], [15, 97], [15, 90], [15, 88], [15, 86], [15, 84], [15, 84], [16, 82], [16, 82], [16, 80], [16, 80], 12, 11, 11, 11, 11, [0, 75, "BK"], 11, 11, [0, 73, "BK"], 11, 11, [0, 71, "BK"], 11, 11, 11, [16, 70], 11, 11, [16, 68], [16, 68], 13, 11, 11, 11, 11, [16, 64], 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 52], [16, 52], 11, 11, 11, [16, 50], 11, 11, [16, 48], [16, 48], 11, 11, [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], 11, 11, [16, 36], [16, 36], 11, 11, [16, 34], [16, 34], [16, 33], [16, 32], [16, 32], 11, 11, 11, [16, 30], [0, 28, "Jo"], 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [16, 24], [0, 22, "Jo"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 12, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 172 [ , [15, 114], [15, 98], [15, 91], [15, 88], [15, 86], [15, 85], [15, 84], [16, 83], [16, 82], [16, 81], [16, 80], [16, 80], 11, 11, [16, 78], 13, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], 11, [16, 68], [16, 68], 13, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 52], 11, 11, 11, [16, 50], 11, 11, [16, 48], [16, 48], 11, 11, [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], 11, [16, 36], [16, 36], [16, 36], 11, 11, [16, 34], [16, 34], [16, 33], [16, 32], [16, 32], 11, 11, 11, 12, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 16, "Jo"], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 173 [ , [15, 115], [15, 98], [15, 92], [15, 88], [15, 87], [15, 86], [16, 84], [15, 84], [16, 83], [16, 82], [0, 80, "Ja"], [16, 80], [16, 80], 11, 11, [0, 77, "BK"], 11, [0, 75, "BK"], 11, 11, 11, 13, 11, 11, 13, 11, 11, 11, [16, 70], [16, 69], [16, 68], 13, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 52], 11, 11, 11, [16, 50], 11, [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], [16, 37], [16, 36], [16, 36], [16, 36], 11, 11, [16, 34], [16, 34], [16, 33], [16, 32], [16, 32], 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, [0, 24, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 174 [ , [15, 116], [15, 99], [15, 92], [15, 88], [15, 88], [15, 86], [16, 85], [16, 84], [15, 84], [16, 82], 12, 11, [16, 80], [16, 80], 13, 11, 13, 11, 11, 11, 11, [0, 73, "BK"], 11, 11, [0, 71, "BK"], 11, 11, 11, 11, [16, 70], [16, 69], 13, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, [14, 16], 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 52], 11, 11, 11, [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, 11, [16, 38], [16, 37], [16, 36], [16, 36], [16, 36], 11, 11, [16, 34], [16, 34], [0, 32, "Jo"], [16, 32], [16, 32], 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 175 [ , [15, 116], [15, 100], [15, 92], [15, 89], [15, 88], [15, 87], [15, 86], [16, 84], [16, 84], [16, 83], [16, 82], 13, [16, 80], [16, 80], [0, 79, "BK"], 11, [0, 77, "BK"], 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, [16, 70], [16, 70], [0, 67, "BK"], 11, 11, 11, 11, 11, [0, 63, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 20], 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 52], 11, 11, 11, [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], [16, 46], [16, 44], [16, 44], [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, [16, 38], [16, 38], [16, 37], [16, 36], [16, 36], [16, 36], 11, 11, [16, 34], 12, 11, [16, 32], [16, 32], 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 176 [ , [15, 117], [15, 100], [15, 93], [15, 90], [15, 88], [15, 88], [16, 86], [16, 85], [16, 84], [16, 84], [0, 82, "Ja"], [0, 81, "Ja"], 11, [16, 80], [16, 80], 13, 11, 13, 11, 11, 11, 11, [0, 73, "BK"], 11, 11, 11, 13, 11, 11, 11, [16, 70], 12, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 52], 11, 11, [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, [16, 38], [16, 38], [16, 37], [16, 36], [16, 36], [16, 36], 11, 11, [16, 34], 11, 11, [16, 32], [16, 32], [0, 30, "Jo"], 11, 11, 11, 11, [16, 28], [16, 28], [0, 26, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 177 [ , [15, 118], [15, 100], [15, 94], [15, 90], [15, 88], [15, 88], [16, 87], [16, 86], 13, [16, 84], 12, 11, 11, 11, [16, 80], [0, 79, "BK"], 11, [0, 77, "BK"], 11, 11, [16, 76], 13, 11, 11, 11, 11, [0, 71, "BK"], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, [16, 52], [16, 52], [16, 52], 11, 11, [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, [16, 38], [16, 38], [16, 37], [16, 36], [16, 36], [16, 36], 11, 11, [16, 34], 11, 11, [16, 32], 12, 11, 11, 11, 11, 11, [16, 28], 12, 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 178 [ , [15, 118], [15, 101], [15, 94], [15, 91], [15, 89], [15, 88], [15, 88], [16, 86], [0, 85, "Ja"], [16, 84], [16, 84], [0, 82, "Ja"], [16, 82], 11, 11, [16, 80], 13, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 13, 11, 11, 11, 11, 11, 11, [16, 56], 13, 11, 11, 11, [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], 11, 11, [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, [16, 38], [16, 38], [16, 37], [16, 36], [16, 36], [16, 36], [0, 34, "Jo"], 11, [16, 34], 11, [16, 32], [16, 32], 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 14, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 179 [ , [15, 119], [15, 102], [15, 95], [15, 92], [15, 90], [15, 88], [15, 88], [16, 87], [16, 86], [16, 85], [16, 84], 12, 11, [16, 82], 11, 11, [0, 79, "BK"], 11, 11, 11, 11, [0, 75, "BK"], 11, 11, 11, 13, 11, [0, 71, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 20], 11, 11, 11, 11, 11, 11, 11, [14, 24], 11, 11, 11, 11, [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], 11, 11, [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, 11, 11, [16, 42], 11, [16, 40], [16, 40], [16, 40], 11, 11, [16, 38], [16, 38], [16, 37], [16, 36], [16, 36], 12, 11, 11, [16, 34], [16, 33], [16, 32], [16, 32], 11, 11, 11, [16, 30], 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 180 [ , [15, 120], [15, 102], [15, 96], [15, 92], [15, 90], [15, 89], [15, 88], [15, 88], [0, 86, "Ja"], [16, 86], [16, 84], [16, 84], 11, 11, [16, 82], 13, [16, 80], 13, 11, 11, 13, 11, 11, 11, 11, [0, 73, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], 11, 11, [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, 11, 11, [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 11, 11, [16, 38], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, 11, [16, 34], [16, 33], [16, 32], [16, 32], 11, 11, 11, [16, 30], [0, 28, "Jo"], 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, [0, 4, "Jo"], 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 181 [ , [15, 120], [15, 103], [15, 96], [15, 92], [15, 91], [15, 90], [0, 88, "Hel"], [15, 88], 12, [16, 86], [0, 84, "Ja"], [16, 84], [16, 84], 11, 11, [0, 81, "BK"], 11, [0, 79, "BK"], 11, 11, [0, 77, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], 11, 11, [16, 50], [16, 50], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, 11, 11, [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 11, 11, [16, 38], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, [16, 34], [16, 34], [0, 32, "Jo"], [16, 32], [16, 32], 11, 11, 11, 12, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, [0, 20, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 12, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 182 [ , [15, 121], [15, 104], [15, 96], [15, 93], [15, 92], [15, 90], 12, [16, 88], [15, 88], [0, 86, "Ja"], 12, 11, [16, 84], [16, 84], 13, 11, 13, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], 11, 11, [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, 11, [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 11, 11, [16, 38], [16, 38], [16, 36], [16, 36], [16, 36], 11, 11, [16, 34], 12, 11, [16, 32], [16, 32], 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, [16, 24], [0, 22, "Jo"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 183 [ , [15, 122], [15, 104], [15, 96], [15, 94], [15, 92], [15, 91], [15, 90], [16, 88], [16, 88], 12, [16, 86], 13, 11, [16, 84], [0, 83, "BK"], 11, [0, 81, "BK"], 11, 11, 11, 11, [0, 77, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], 11, 11, [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, 11, [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 11, 11, [16, 38], [16, 37], [16, 36], [16, 36], [16, 36], 11, 11, [16, 34], 11, 11, [16, 32], [16, 32], 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, [0, 24, "Jo"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, [0, 18, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 184 [ , [15, 122], [15, 104], [15, 97], [15, 94], [15, 92], [15, 92], [0, 90, "Hel"], [16, 89], [16, 88], [16, 88], [0, 86, "Ja"], [0, 85, "Ja"], 11, [16, 84], [16, 84], 13, 11, 13, 11, [16, 80], 13, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], 11, [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, 11, [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 11, 11, [16, 38], [16, 37], [16, 36], [16, 36], [16, 36], 11, 11, [16, 34], 11, 11, [16, 32], [16, 32], [0, 30, "Jo"], 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], [0, 6, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 185 [ , [15, 123], [15, 105], [15, 98], [15, 95], [15, 93], [15, 92], 12, [16, 90], [16, 88], [16, 88], 12, 11, 11, 11, [16, 84], [0, 83, "BK"], 11, [0, 81, "BK"], 11, 11, [0, 79, "BK"], 11, [0, 77, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, 11, [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 11, [16, 38], [16, 38], [16, 37], [16, 36], [16, 36], [16, 36], 11, 11, [16, 34], 11, 11, [16, 32], 12, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 186 [ , [15, 124], [15, 106], [15, 98], [15, 96], [15, 94], [15, 92], [15, 92], [16, 90], [16, 89], [16, 88], [16, 88], [0, 86, "Ja"], 11, 11, 11, [16, 84], 13, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], 11, [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, 11, [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], [16, 39], [16, 38], [16, 38], [16, 37], [16, 36], [16, 36], [16, 36], [0, 34, "Jo"], 11, [16, 34], 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], [0, 26, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 187 [ , [15, 124], [15, 106], [15, 99], [15, 96], [15, 94], [15, 93], [15, 92], [0, 90, "Ja"], [16, 90], [16, 88], [16, 88], 12, 11, [16, 86], 11, 11, [0, 83, "BK"], 11, 11, 11, 11, [0, 79, "BK"], 11, 11, 11, 11, 11, 11, [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, 11, [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], [16, 39], [16, 38], [16, 38], [16, 37], [16, 36], [16, 36], 12, 11, 11, [16, 34], 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 16, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 188 [ , [15, 125], [15, 107], [15, 100], [15, 96], [15, 95], [15, 94], [15, 93], 12, [16, 90], [16, 89], [16, 88], [16, 88], [0, 86, "Ja"], 11, [16, 86], 13, [16, 84], 13, 11, 11, 13, 11, 13, 11, 11, 11, 11, 11, 11, [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, 11, [16, 42], [16, 42], [16, 40], [16, 40], [16, 40], [16, 40], [16, 39], [16, 38], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, 11, [16, 34], 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 189 [ , [15, 126], [15, 108], [15, 100], [15, 96], [15, 96], [15, 94], [15, 94], [16, 92], [16, 91], [16, 90], [0, 88, "Ja"], [16, 88], 12, 11, 11, [0, 85, "BK"], 11, [0, 83, "BK"], 11, 11, [0, 81, "BK"], 11, [0, 79, "BK"], 11, 11, 11, 11, 11, 11, 11, [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], [16, 54], 13, [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], [16, 40], [16, 39], [16, 38], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, 11, [16, 34], [0, 32, "Jo"], 11, [16, 32], 11, 11, 11, 11, [0, 28, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 190 [ , [15, 126], [15, 108], [15, 100], [15, 96], [15, 96], [15, 95], [15, 94], [16, 92], [16, 92], [16, 90], 12, 11, [16, 88], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [14, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], [14, 32], 11, [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], [16, 40], [0, 38, "Jo"], [16, 38], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, 11, 12, 11, 11, [16, 32], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 191 [ , [15, 127], [15, 108], [15, 101], [15, 97], [15, 96], [15, 96], [15, 95], [0, 92, "Ja"], [16, 92], [16, 91], [16, 90], [0, 88, "Ja"], [16, 88], [16, 88], 11, 11, [16, 86], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 12, 11, [16, 38], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, 11, 11, 11, [16, 32], [16, 32], 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 192 [ , [15, 128], [15, 109], [15, 102], [15, 98], [15, 96], [15, 96], [15, 96], 12, [16, 92], [16, 92], 13, 12, 11, [16, 88], [16, 88], 11, 11, [16, 86], 13, [16, 84], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], [16, 43], [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 11, 11, [16, 38], [16, 38], [0, 36, "Jo"], [16, 36], [16, 36], 11, 11, 11, 11, 11, [16, 32], [16, 32], 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 12, "Jo"], 11, 11, 11, 11, [0, 10, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 193 [ , [15, 128], [15, 110], [15, 102], [15, 98], [15, 96], [15, 96], [15, 96], [16, 94], [0, 92, "Ja"], [16, 92], [0, 91, "BK"], 11, 11, 11, [16, 88], [16, 88], 13, 11, 13, 11, [16, 84], 13, 11, 13, 11, 11, 13, 11, 11, 11, 13, 11, 11, [16, 76], 11, 11, 11, 11, [14, 14], 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], [16, 43], [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 11, 11, [16, 38], 12, 11, [16, 36], [16, 36], [0, 34, "Jo"], 11, 11, 11, 11, [16, 32], [16, 32], [0, 30, "Jo"], 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, [0, 24, "Jo"], 11, 11, 11, [0, 22, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 194 [ , [15, 129], [15, 110], [15, 103], [15, 99], [15, 96], [15, 96], [15, 96], 13, 12, [16, 92], [16, 92], 13, [16, 90], 11, 11, [16, 88], 13, 11, [0, 85, "BK"], 11, 11, 13, 11, [0, 81, "BK"], 11, 11, [0, 79, "BK"], 11, 11, 11, 13, 11, 11, 11, [16, 76], 11, 11, 11, 12, 11, 11, [16, 72], [14, 16], 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], [14, 20], 11, 11, [16, 66], 11, 11, 11, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], [16, 43], [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 11, 11, [16, 38], 11, [16, 36], [16, 36], 12, 11, 11, [16, 34], 11, 11, [16, 32], 12, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 11, [0, 20, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 195 [ , [15, 130], [15, 111], [15, 104], [15, 100], [15, 97], [15, 96], [15, 96], [0, 95, "BG3"], [16, 94], [16, 93], [16, 92], [0, 90, "Ja"], 11, [16, 90], 11, [16, 88], 13, 11, 11, 11, 11, [0, 83, "BK"], 11, 11, 11, 11, 11, 13, 11, 11, [0, 77, "BK"], 11, 11, 11, 11, [16, 76], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, [16, 70], [16, 70], [16, 68], 12, 11, 11, 11, [16, 66], 11, 11, 11, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 44], [16, 44], [16, 44], [16, 44], [16, 43], [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 11, 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, 11, [16, 34], 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 196 [ , [15, 130], [15, 112], [15, 104], [15, 100], [15, 98], [15, 96], [15, 96], [15, 96], [0, 94, "Ja"], [16, 94], [16, 92], 12, 11, 11, [16, 90], 13, [0, 87, "BK"], 11, 11, 11, 13, 11, 13, 11, 11, 11, 11, [0, 79, "BK"], 11, 11, 11, 13, 11, 11, 11, 11, [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, [16, 66], 11, 11, 11, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 52], [16, 52], 13, [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], [16, 44], [16, 43], [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], [0, 38, "Jo"], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, 11, [16, 34], 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, [16, 28], [0, 26, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 197 [ , [15, 131], [15, 112], [15, 104], [15, 100], [15, 98], [15, 97], [15, 96], [15, 96], 12, [16, 94], [0, 92, "Ja"], [16, 92], 11, 11, 11, [0, 89, "BK"], 11, 11, 11, 11, [0, 85, "BK"], 11, [0, 83, "BK"], 11, 11, 11, 13, 11, 11, 11, 11, [0, 77, "BK"], 11, 11, 11, 11, 11, [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, [16, 66], 11, 11, 11, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 52], [14, 38], 11, [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], 13, [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], [16, 44], [16, 43], [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], 12, 11, [16, 38], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, 11, [16, 34], [0, 32, "Jo"], 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 18, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 14, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 198 [ , [15, 132], [15, 112], [15, 104], [15, 101], [15, 99], [15, 98], [15, 97], [15, 96], [15, 96], [16, 95], 12, 11, [16, 92], 11, 11, [16, 90], 13, 11, 11, 11, 11, 13, 11, 13, 11, 11, [0, 81, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, [16, 66], 11, 11, 13, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 52], 11, 11, [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [14, 44], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], [16, 44], [16, 43], [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], 11, 11, [16, 38], [16, 38], [0, 36, "Jo"], [16, 36], [16, 36], 11, 11, 11, 12, 11, 11, [16, 32], 11, 11, 11, 11, [0, 28, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 199 [ , [15, 132], [15, 113], [15, 105], [15, 102], [15, 100], [15, 98], [15, 98], [16, 96], [15, 96], [15, 96], [16, 94], [0, 92, "Ja"], 11, [16, 92], 11, 11, 13, 11, 11, 13, 11, [0, 85, "BK"], 11, [0, 83, "BK"], 11, 11, 11, 13, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, [16, 66], 11, [14, 24], 11, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 52], 11, 11, [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], [16, 44], [16, 43], [16, 42], [16, 42], [16, 40], [16, 40], [16, 40], 11, 11, [16, 38], 12, 11, [16, 36], [16, 36], 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 200 [ , [15, 133], [15, 114], [15, 106], [15, 102], [15, 100], [15, 99], [15, 98], [16, 96], [16, 96], [15, 96], [0, 94, "Ja"], 12, 11, [16, 92], [16, 92], 13, [0, 89, "BK"], 11, 11, [0, 87, "BK"], 11, 11, 13, 11, 11, 11, 11, [0, 81, "BK"], 11, 11, 11, 11, 11, [0, 77, "BK"], 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, [16, 66], 12, 11, 11, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 52], 11, 11, [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 11, 11, [16, 38], 11, 11, [16, 36], [16, 36], 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 8, "Jo"], 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 201 [ , [15, 134], [15, 114], [15, 106], [15, 103], [15, 100], [15, 100], [0, 98, "Hel"], [16, 97], [16, 96], [16, 96], 12, 11, 11, 11, [16, 92], [0, 91, "BK"], 11, 13, 11, 11, 11, 11, [0, 85, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 52], 11, 11, [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], [16, 44], [16, 43], [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 11, 11, [16, 38], 11, 11, [16, 36], [16, 36], [0, 34, "Jo"], 11, 11, 11, 11, 11, [16, 32], [0, 30, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 202 [ , [15, 134], [15, 115], [15, 107], [15, 104], [15, 101], [15, 100], 12, [16, 98], [16, 96], [16, 96], [16, 96], 13, 11, 11, 11, [16, 92], 13, [0, 89, "BK"], 11, 11, 11, 13, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 52], 11, 11, [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], [16, 44], [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 11, 11, [16, 38], 11, 11, [16, 36], 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 203 [ , [15, 135], [15, 116], [15, 108], [15, 104], [15, 102], [15, 100], [15, 100], [16, 98], [16, 97], [16, 96], [16, 96], [0, 95, "BK"], 11, [16, 94], 11, [16, 92], 13, 11, 11, 11, 11, [0, 87, "BK"], 11, [0, 85, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 62], 13, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], 11, [16, 52], [16, 52], [16, 52], 11, 11, [16, 50], [16, 50], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], [16, 43], [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], 11, 11, [16, 38], 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 204 [ , [15, 136], [15, 116], [15, 108], [15, 104], [15, 102], [15, 101], [15, 100], [16, 99], [16, 98], [16, 97], [16, 96], [16, 96], 13, 11, [16, 94], 13, [0, 91, "BK"], 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 30], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], 11, 11, [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], [16, 43], [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], [0, 38, "Jo"], 11, [16, 38], 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 24, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 16, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 205 [ , [15, 136], [15, 116], [15, 108], [15, 104], [15, 103], [15, 102], [0, 100, "Hel"], [15, 100], [16, 98], [16, 98], [16, 97], [16, 96], [0, 95, "BK"], 11, 11, [0, 93, "BK"], 11, 13, 11, 11, 11, 11, [0, 87, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], [16, 76], 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, 11, [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], 11, 11, [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 44], [16, 44], [16, 44], [16, 44], [16, 43], [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], 12, 11, 11, [16, 38], 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, [0, 22, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 206 [ , [15, 137], [15, 117], [15, 109], [15, 105], [15, 104], [15, 102], 12, [16, 100], [16, 99], [16, 98], [16, 98], [16, 96], [16, 96], 11, 11, [16, 94], 13, [0, 91, "BK"], 11, 11, 11, 13, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], [16, 76], 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], 11, [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], [16, 44], [16, 43], [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], 11, 11, 11, [16, 38], [0, 36, "Jo"], 11, [16, 36], 11, 11, 11, 11, [0, 32, "Jo"], 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, [0, 26, "Jo"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 207 [ , [15, 138], [15, 118], [15, 110], [15, 106], [15, 104], [15, 103], [15, 102], [16, 100], [16, 100], [16, 99], [16, 98], [16, 97], [16, 96], [16, 96], 11, 11, 13, 11, 11, 11, 11, [0, 89, "BK"], 11, [0, 87, "BK"], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], [16, 76], 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], [16, 44], [16, 43], [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], 11, 11, 11, 12, 11, [16, 36], [16, 36], 11, 11, 11, 12, 11, 11, [16, 32], 11, 11, 11, 11, [0, 28, "Jo"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 20, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 208 [ , [15, 138], [15, 118], [15, 110], [15, 106], [15, 104], [15, 104], [0, 102, "Hel"], [16, 101], [16, 100], [16, 100], [16, 99], [16, 98], 13, [16, 96], [16, 96], 13, [0, 93, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 85, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], [16, 76], 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], [16, 44], [0, 42, "Jo"], [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], 11, 11, 11, 11, 11, [16, 36], [16, 36], 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 209 [ , [15, 139], [15, 119], [15, 111], [15, 107], [15, 104], [15, 104], 12, [16, 102], [16, 100], [16, 100], [16, 100], [16, 98], [0, 97, "BK"], 11, [16, 96], [0, 95, "BK"], 11, 13, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], [16, 76], 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 12, 11, [16, 42], [16, 42], [0, 40, "Jo"], [16, 40], [16, 40], 11, 11, 11, 11, 11, [16, 36], [16, 36], [0, 34, "Jo"], 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 210 [ , [15, 140], [15, 120], [15, 112], [15, 108], [15, 105], [15, 104], [15, 104], [16, 102], [16, 101], [16, 100], [16, 100], 13, [16, 98], 11, 11, [16, 96], 13, [0, 93, "BK"], 11, 11, 11, 13, 11, 13, 11, 11, 11, 11, [0, 85, "BK"], 11, 11, 11, 11, 11, [14, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], [16, 76], 13, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, 11, [16, 42], 12, [16, 40], [16, 40], [16, 40], 11, 11, [16, 38], 11, 11, [16, 36], 12, 11, 11, 11, 11, 11, 11, [16, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 211 [ , [15, 140], [15, 120], [15, 112], [15, 108], [15, 106], [15, 104], [15, 104], [16, 103], [16, 102], [16, 101], [16, 100], [0, 99, "BK"], 11, [16, 98], 11, [16, 96], 13, 11, 11, 11, 11, [0, 91, "BK"], 11, [0, 89, "BK"], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, [14, 16], 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], [14, 20], 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 56], 11, 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], [16, 40], [16, 40], [0, 38, "Jo"], 11, [16, 38], 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, [16, 32], [0, 30, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 212 [ , [15, 141], [15, 120], [15, 112], [15, 108], [15, 106], [15, 105], [15, 104], [15, 104], [16, 102], [16, 102], [16, 100], [16, 100], 11, 11, [16, 98], [16, 97], [0, 95, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 87, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 13, 11, 11, [16, 56], 11, 11, 11, [16, 54], [16, 54], [16, 52], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, 11, [16, 42], [16, 41], [16, 40], [16, 40], 12, 11, 11, [16, 38], 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 213 [ , [15, 142], [15, 121], [15, 112], [15, 109], [15, 107], [15, 106], [15, 105], [15, 104], [16, 103], [16, 102], [16, 101], [16, 100], [16, 100], 11, 11, [16, 98], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, [14, 38], 11, 11, [16, 56], [16, 56], 11, 11, 11, [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], 11, 11, 11, [16, 38], 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 18, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 214 [ , [15, 142], [15, 122], [15, 113], [15, 110], [15, 108], [15, 106], [15, 106], [16, 104], [15, 104], [16, 103], [16, 102], [16, 101], [16, 100], [16, 100], 11, [16, 98], 12, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, [16, 56], [16, 56], 11, 11, 11, [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], [0, 42, "Jo"], [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], 11, 11, 11, [16, 38], [0, 36, "Jo"], 11, [16, 36], 11, 11, 11, 11, [0, 32, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 215 [ , [15, 143], [15, 122], [15, 114], [15, 110], [15, 108], [15, 107], [15, 106], [16, 104], [16, 104], [15, 104], [16, 102], [16, 102], 13, [16, 100], [16, 100], 13, [16, 98], 13, 11, 11, 11, 11, 13, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, [16, 56], [16, 56], 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 52], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], 12, 11, [16, 42], [16, 42], [16, 41], [16, 40], [16, 40], 11, 11, 11, 12, 11, 11, [16, 36], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 12, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 216 [ , [15, 144], [15, 123], [15, 114], [15, 111], [15, 108], [15, 108], [15, 107], [16, 105], [16, 104], [16, 104], 13, [16, 102], 13, [16, 100], [16, 100], [0, 99, "BK"], 11, 13, 11, [16, 96], 13, 11, 13, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 13, 11, 11, 11, 11, 11, [16, 56], [16, 56], 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 44], [16, 44], [16, 44], 11, 11, [16, 42], [16, 42], [0, 40, "Jo"], [16, 40], [16, 40], 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 217 [ , [15, 144], [15, 124], [15, 115], [15, 112], [15, 109], [15, 108], [15, 108], [16, 106], [16, 104], [16, 104], [0, 103, "BK"], 11, [0, 101, "BK"], 11, [16, 100], [16, 100], 13, 13, 11, 11, 13, 11, [0, 93, "BK"], 11, [0, 91, "BK"], 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [16, 74], 13, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 38], 11, 11, 11, 11, 11, 11, [16, 56], [16, 56], 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, 11, [16, 42], 12, 11, [16, 40], [16, 40], 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 26, "Jo"], 11, 11, 11, [0, 24, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 14, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 218 [ , [15, 145], [15, 124], [15, 116], [15, 112], [15, 110], [15, 108], [15, 108], [16, 106], [16, 105], [16, 104], [16, 104], 13, 11, 11, 11, [16, 100], 13, [0, 97, "BK"], 11, 11, [0, 95, "BK"], 11, 11, 13, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [14, 24], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], [16, 56], 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], [0, 38, "Jo"], 11, 11, 11, 11, 11, [16, 36], [0, 34, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 28, "Jo"], 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 219 [ , [15, 146], [15, 124], [15, 116], [15, 112], [15, 110], [15, 109], [15, 108], [16, 107], [16, 106], [16, 105], [16, 104], 13, 11, [16, 102], 11, [16, 100], 13, 11, 13, 11, 11, 11, 11, [0, 93, "BK"], 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 20], 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], [16, 56], 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, 11, [16, 42], 11, 11, [16, 40], 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 22, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 220 [ , [15, 146], [15, 125], [15, 116], [15, 112], [15, 111], [15, 110], [15, 109], [15, 108], [16, 106], [16, 106], [16, 104], [0, 103, "BK"], 11, 11, [16, 102], [16, 101], [0, 99, "BK"], 11, [0, 97, "BK"], 11, 11, 11, 13, 11, 13, 11, 11, 11, 11, [0, 89, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], [16, 56], [16, 56], 11, 11, [16, 54], [16, 54], [16, 52], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, 11, [16, 42], 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, [16, 32], [0, 30, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 10, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 221 [ , [15, 147], [15, 126], [15, 117], [15, 112], [15, 112], [15, 110], [15, 110], [16, 108], [16, 107], [16, 106], [16, 105], [16, 104], 11, 11, 11, [16, 102], 12, 13, 11, 11, 11, 11, [0, 95, "BK"], 11, [0, 93, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], [16, 56], [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, 11, [16, 42], 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 222 [ , [15, 148], [15, 126], [15, 118], [15, 113], [15, 112], [15, 111], [15, 110], [16, 108], [16, 108], [16, 107], [16, 106], [16, 105], [16, 104], 11, 11, [16, 102], 12, [0, 99, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, [16, 72], 13, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, [16, 56], [16, 56], [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], [0, 42, "Jo"], 11, [16, 42], 11, [16, 40], [16, 40], 11, 11, 11, 11, [0, 36, "Jo"], 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 20, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 16, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 223 [ , [15, 148], [15, 127], [15, 118], [15, 114], [15, 112], [15, 112], [15, 111], [16, 109], [16, 108], [16, 108], [16, 106], [16, 106], [16, 104], [16, 104], 11, 11, [16, 102], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, [16, 58], 11, 11, [16, 56], [16, 56], [16, 56], 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], 12, 11, 11, [16, 42], [0, 40, "Jo"], [16, 40], [16, 40], 11, 11, 11, 12, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 224 [ , [15, 149], [15, 128], [15, 119], [15, 114], [15, 112], [15, 112], [15, 112], [16, 110], [16, 108], [16, 108], [16, 107], [16, 106], [16, 105], [16, 104], [16, 104], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, [16, 58], 11, 11, [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], 11, 11, 11, 12, 11, [16, 40], [16, 40], 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [0, 32, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 225 [ , [15, 150], [15, 128], [15, 120], [15, 115], [15, 112], [15, 112], [15, 112], [16, 110], [16, 109], [16, 108], [16, 108], [16, 107], [16, 106], [16, 105], [16, 104], [16, 104], [14, 6], [16, 102], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, [14, 16], 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, [16, 58], 11, 11, [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 52], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 226 [ , [15, 150], [15, 128], [15, 120], [15, 116], [15, 113], [15, 112], [15, 112], 13, [16, 110], [16, 109], [16, 108], [16, 108], [16, 106], [16, 106], [16, 105], [16, 104], 12, 11, [16, 102], 11, [16, 100], 11, 11, 11, 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 14], 11, 11, 12, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, [16, 58], 11, 11, [16, 56], [16, 56], [16, 56], [14, 48], [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 48], [0, 46, "Jo"], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], 11, 11, 11, 11, 11, 11, [16, 36], [0, 34, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 227 [ , [15, 151], [15, 129], [15, 120], [15, 116], [15, 114], [15, 112], [15, 112], [0, 111, "BG3"], [16, 110], [16, 110], [16, 108], [16, 108], [16, 107], [16, 106], [16, 106], [16, 104], [16, 104], 11, 11, [16, 102], [16, 101], [16, 100], 11, 11, 11, 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, [16, 58], 11, 11, [16, 56], [16, 56], 12, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 12, 11, [16, 46], [16, 46], [16, 44], [16, 44], [16, 44], 11, 11, [16, 42], 11, 11, [16, 40], [16, 40], [0, 38, "Jo"], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 228 [ , [15, 152], [15, 130], [15, 120], [15, 116], [15, 114], [15, 113], [15, 112], [15, 112], [16, 111], [16, 110], [16, 109], [16, 108], [16, 108], [16, 107], [16, 106], [16, 105], [16, 104], [16, 104], 13, 11, [16, 102], 13, [16, 100], 11, 11, 11, 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, [14, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 62], 11, 11, [16, 60], 11, 11, 11, [16, 58], 11, [16, 56], [16, 56], [16, 56], 11, 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], 11, 11, [16, 42], 11, 11, [16, 40], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 229 [ , [15, 152], [15, 130], [15, 121], [15, 117], [15, 115], [15, 114], [15, 113], [15, 112], [15, 112], 13, [16, 110], [16, 108], [16, 108], [16, 108], 13, [16, 106], 13, [16, 104], 13, 11, [16, 102], 13, [16, 100], [16, 100], [14, 8], 11, [16, 98], [14, 10], 11, [16, 96], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 70], 13, [16, 68], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 62], 11, [16, 60], [16, 60], 11, 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], 11, 11, [16, 54], [16, 54], [16, 52], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], [16, 45], [16, 44], [16, 44], [16, 44], [0, 42, "Jo"], 11, [16, 42], 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 28, "Jo"], 11, 11, 11, [0, 26, "Jo"], 11, 11, 11, [0, 24, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 230 [ , [15, 153], [15, 131], [15, 122], [15, 118], [15, 116], [15, 114], [15, 114], [16, 112], [15, 112], [0, 111, "BK"], [16, 110], 13, [16, 108], [16, 108], 13, [16, 106], 13, [16, 104], 13, 11, 11, 13, 11, [16, 100], 12, 11, 11, 12, 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [14, 34], 11, [16, 68], 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], 12, 11, 11, [16, 42], 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 18, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 231 [ , [15, 154], [15, 132], [15, 122], [15, 118], [15, 116], [15, 115], [15, 114], [16, 112], [16, 112], [15, 112], 13, [0, 109, "BK"], 11, [16, 108], [0, 107, "BK"], 11, 13, 11, 13, 11, 11, 13, 11, 11, [16, 100], 11, 11, 11, 11, 11, [16, 96], [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 20], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], 11, 11, [14, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, [16, 58], [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], 11, 11, [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [16, 47], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], 11, 11, 11, 11, [0, 36, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 30, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 232 [ , [15, 154], [15, 132], [15, 123], [15, 119], [15, 116], [15, 116], [15, 115], [16, 113], [16, 112], [16, 112], 13, [16, 110], 11, [16, 108], [16, 108], 13, [0, 105, "BK"], 11, [0, 103, "BK"], 11, 11, [0, 101, "BK"], 11, 11, 11, [16, 100], 11, 11, 11, 11, 11, [16, 96], [16, 96], [14, 12], 11, [14, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 62], [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, [16, 58], [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], 11, [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 48], [16, 48], [16, 48], [16, 48], [0, 46, "Jo"], [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], 11, 11, 11, [16, 42], [0, 40, "sp"], 11, [16, 40], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 22, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 8], [0, 6, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 233 [ , [15, 155], [15, 132], [15, 124], [15, 120], [15, 117], [15, 116], [15, 116], [16, 114], [16, 112], [16, 112], [0, 111, "BK"], 11, [16, 110], [16, 109], [16, 108], [0, 107, "BK"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 100], 11, 11, 11, 11, 11, [16, 96], 12, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], 11, 11, 11, 11, 11, 11, [16, 66], 11, 11, 11, 11, 11, 11, [16, 62], [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, [16, 58], [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 12, 11, [16, 46], [16, 46], [16, 45], [16, 44], [16, 44], 11, 11, 11, 12, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 32, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 234 [ , [15, 156], [15, 133], [15, 124], [15, 120], [15, 118], [15, 116], [15, 116], [16, 114], [16, 113], [16, 112], [16, 112], 11, 11, [16, 110], [16, 109], [16, 108], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, [16, 98], 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], 11, 11, 11, 11, 11, 11, [16, 66], 11, 11, 11, 11, 11, 11, [16, 62], [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, [16, 58], [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], [16, 46], [0, 44, "Jo"], [16, 44], [16, 44], 11, 11, 11, 11, 11, 11, [16, 40], [0, 38, "Jo"], 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 235 [ , [15, 156], [15, 134], [15, 124], [15, 120], [15, 118], [15, 117], [15, 116], [16, 115], [16, 114], [16, 113], [16, 112], [16, 112], 11, [16, 110], [16, 110], [16, 108], [16, 108], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, [16, 98], 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], 11, [16, 68], 11, 11, 11, 11, [16, 66], 11, 11, 11, 11, 11, 11, [16, 62], [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, [16, 58], [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 52], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], 12, 11, [16, 44], [16, 44], 11, 11, 11, 11, 11, [16, 40], 12, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 236 [ , [15, 157], [15, 134], [15, 125], [15, 120], [15, 119], [15, 118], [15, 117], [15, 116], [16, 114], [16, 114], [16, 112], [16, 112], [16, 112], [16, 111], [16, 110], [16, 109], [16, 108], [16, 108], 11, 11, 11, [16, 104], 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, [16, 98], 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, [16, 66], 11, 11, 11, 11, 11, 11, [16, 62], [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, [16, 58], [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], 11, 11, [16, 44], [16, 44], [0, 42, "Jo"], 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, [16, 36], [0, 34, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 237 [ , [15, 158], [15, 135], [15, 126], [15, 121], [15, 120], [15, 118], [15, 118], [16, 116], [16, 115], [16, 114], [16, 113], [16, 112], [16, 112], [16, 112], [16, 111], [16, 110], 13, [16, 108], [16, 108], 11, [16, 106], [16, 105], [16, 104], 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, [16, 98], 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, [16, 66], 11, 11, 11, 11, 11, 11, [16, 62], [16, 62], [16, 60], [16, 60], [16, 60], 11, 11, [16, 58], [16, 58], [16, 56], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], 11, 11, [16, 44], 12, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 8, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 238 [ , [15, 158], [15, 136], [15, 126], [15, 122], [15, 120], [15, 119], [15, 118], [16, 116], [16, 116], [16, 115], [16, 114], [16, 112], [16, 112], [16, 112], [16, 112], [16, 110], 13, [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 105], [16, 104], 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, [16, 98], 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, [16, 66], 11, 11, 11, 11, 11, 11, [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], 11, [16, 44], [16, 44], 11, 11, 11, [16, 42], 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 20, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 239 [ , [15, 159], [15, 136], [15, 127], [15, 122], [15, 120], [15, 120], [15, 119], [16, 116], [16, 116], [16, 116], [16, 114], 13, [16, 112], [16, 112], [16, 112], 13, 13, 11, [16, 108], [16, 108], [16, 108], [16, 106], [16, 106], [14, 8], [16, 104], 13, 11, 11, 11, 11, [16, 100], [16, 100], [16, 100], 11, 11, [16, 98], 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, [16, 66], 11, [16, 64], 11, 11, 11, 11, [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 54], [16, 52], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], [16, 45], [16, 44], [16, 44], 11, 11, 11, [16, 42], [0, 40, "Jo"], 11, [16, 40], 11, 11, 11, 11, [0, 36, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 240 [ , [15, 160], [15, 136], [15, 128], [15, 123], [15, 120], [15, 120], [15, 120], [16, 117], [16, 116], [16, 116], [16, 115], [0, 113, "BK"], 11, [16, 112], [16, 112], [0, 111, "BK"], [0, 109, "BK"], 11, 11, [16, 108], [16, 108], [16, 107], [16, 106], 12, 11, [14, 8], 11, 11, 11, 11, 11, [16, 100], [16, 100], [16, 100], 11, 11, [16, 98], 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, [16, 66], [16, 65], [16, 64], 11, 11, 11, [16, 62], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], 11, [16, 58], [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [0, 46, "Jo"], 11, [16, 46], [16, 45], [16, 44], [16, 44], 11, 11, 11, 12, 11, 11, [16, 40], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 14, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 241 [ , [15, 160], [15, 137], [15, 128], [15, 124], [15, 121], [15, 120], [15, 120], [16, 118], [16, 117], [16, 116], [16, 116], [16, 114], 11, 11, [16, 112], [16, 112], 12, 11, 11, 11, [16, 108], [16, 108], [16, 107], [16, 106], 11, [16, 104], 11, 11, 11, 11, [14, 10], 11, [16, 100], [16, 100], [16, 100], 13, 11, [16, 98], 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], [16, 76], 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, 11, [16, 66], [16, 65], [16, 64], 11, 11, 11, [16, 62], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], 12, 11, [16, 46], [16, 46], [0, 44, "Jo"], [16, 44], [16, 44], 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 28, "Jo"], 11, 11, 11, [0, 26, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 242 [ , [15, 161], [15, 138], [15, 128], [15, 124], [15, 122], [15, 120], [15, 120], [16, 118], [16, 118], [16, 116], [16, 116], [16, 115], [16, 114], 11, 11, [16, 112], 12, 11, 11, 11, [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 105], [16, 104], 11, 11, 11, 12, 11, 11, [16, 100], [16, 100], [14, 12], 11, 11, [16, 98], 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], [16, 76], 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, [16, 66], [16, 66], [16, 65], [16, 64], 11, 11, 11, [16, 62], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], [16, 56], [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], 12, 11, [16, 44], [16, 44], 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 30, "Jo"], 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 12, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 243 [ , [15, 162], [15, 138], [15, 128], [15, 124], [15, 122], [15, 121], [15, 120], [16, 119], [16, 118], [16, 117], [16, 116], [16, 116], 13, [16, 114], 11, [16, 112], [16, 112], 13, 11, 13, 11, [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 105], [16, 104], 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, 11, [16, 98], 13, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], [16, 76], 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, [16, 66], [16, 66], [16, 65], [16, 64], 11, 11, 11, [16, 62], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], 11, 11, [16, 44], [16, 44], 11, 11, 11, 11, 11, 11, [16, 40], [0, 38, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 32, "Jo"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 24, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 16, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 244 [ , [15, 162], [15, 139], [15, 129], [15, 125], [15, 123], [15, 122], [15, 121], [15, 120], [16, 119], [16, 118], 13, [16, 116], 13, 11, [16, 114], 13, [16, 112], 13, 11, 13, 11, [16, 108], [16, 108], [16, 108], [16, 108], [16, 106], [16, 106], [16, 104], [16, 104], 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, 11, [14, 14], 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], [16, 76], 13, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, [16, 66], [16, 66], [16, 65], [16, 64], 11, 11, 11, [16, 62], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 52], [0, 50, "Jo"], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], 11, 11, [16, 44], [16, 44], [0, 42, "Jo"], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 245 [ , [15, 163], [15, 140], [15, 130], [15, 126], [15, 124], [15, 122], [15, 122], [16, 120], [15, 120], [16, 118], [0, 117, "BK"], [16, 116], [0, 115, "BK"], 11, 11, [0, 113, "BK"], [16, 112], [0, 111, "BK"], 11, [0, 109, "BK"], 11, 11, [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 105], [16, 104], [16, 104], 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, 11, 11, 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], [14, 34], 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, [16, 66], [16, 66], [16, 65], [16, 64], 11, 11, 11, [16, 62], [16, 62], [16, 60], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], 12, [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, 11, [16, 46], 11, 11, [16, 44], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 34, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 246 [ , [15, 164], [15, 140], [15, 130], [15, 126], [15, 124], [15, 123], [15, 122], 13, [16, 120], [16, 119], [16, 118], [16, 117], [16, 116], 11, 11, [16, 114], [16, 113], [16, 112], 11, 11, 11, 11, 11, [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 105], [16, 104], [16, 104], 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, 11, 11, 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], 11, 11, 11, [16, 66], [16, 66], [16, 64], [16, 64], [14, 48], 11, 11, [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 58], [16, 56], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [0, 46, "Jo"], 11, [16, 46], 11, 11, [16, 44], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 247 [ , [15, 164], [15, 140], [15, 131], [15, 127], [15, 124], [15, 124], [15, 123], [0, 121, "DMa"], [16, 120], [16, 120], [16, 119], [16, 118], [16, 117], [16, 116], 11, 11, [16, 114], [16, 113], [16, 112], 11, 11, 11, 11, 11, [16, 108], [16, 108], [16, 108], [16, 106], [16, 106], [16, 105], [16, 104], [16, 104], 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, 11, 11, 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 70], [16, 68], [16, 68], 11, 11, 11, [16, 66], [16, 65], [16, 64], 12, 11, 11, 11, [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], 12, 11, 11, [16, 46], 11, 11, [16, 44], 11, 11, 11, 11, [0, 40, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 22, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 18, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 248 [ , [15, 165], [15, 141], [15, 132], [15, 128], [15, 125], [15, 124], [15, 124], [16, 122], [16, 120], [16, 120], [16, 120], [16, 118], [16, 118], [16, 116], [16, 116], 11, [16, 114], [16, 114], [16, 113], [16, 112], 11, 11, 11, 11, 11, [16, 108], [16, 108], [16, 107], [16, 106], [16, 106], [16, 105], [16, 104], [16, 104], 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, 11, 11, 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 69], [16, 68], [16, 68], 11, 11, 11, [16, 66], [16, 65], [16, 64], 11, 11, 11, [16, 62], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, 11, [16, 46], [0, 44, "Jo"], 11, [16, 44], 11, 11, 11, 12, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 249 [ , [15, 166], [15, 142], [15, 132], [15, 128], [15, 126], [15, 124], [15, 124], 13, [16, 121], [16, 120], [16, 120], [16, 119], [16, 118], [16, 117], [16, 116], [16, 116], [16, 115], [16, 114], [16, 114], [16, 113], [16, 112], 11, 11, 11, 11, [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 106], [16, 105], [16, 104], [16, 104], 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, 11, 11, 11, 11, [16, 96], 11, 11, 11, 11, 11, [14, 20], 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, 11, [16, 70], [16, 69], [16, 68], [16, 68], 11, 11, [16, 66], [16, 66], [16, 65], [16, 64], 11, 11, 11, [16, 62], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 60], [16, 58], [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 54], [16, 52], [16, 52], [16, 52], [16, 52], [16, 51], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, 11, 12, 11, 11, [16, 44], 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, [0, 36, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 250 [ , [15, 166], [15, 142], [15, 132], [15, 128], [15, 126], [15, 125], [15, 124], 13, [16, 122], [16, 120], [16, 120], [16, 120], [16, 119], [16, 118], [16, 117], [16, 116], [16, 116], [14, 6], [16, 114], [16, 114], [16, 112], [16, 112], 11, 11, 11, 11, [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 106], [16, 105], [16, 104], [16, 104], 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, 11, 11, 11, 11, [16, 96], 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 24], 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], [16, 68], 11, 11, [16, 66], [16, 66], [16, 65], [16, 64], 11, 11, 11, [16, 62], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [16, 52], [0, 50, "Jo"], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, 11, 11, 11, [16, 44], [16, 44], 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 251 [ , [15, 167], [15, 143], [15, 133], [15, 128], [15, 127], [15, 126], [15, 125], [0, 123, "Gur"], [16, 122], [16, 121], [16, 120], [16, 120], [16, 120], [16, 118], [16, 118], [16, 116], [16, 116], 12, 11, [16, 114], [16, 113], [16, 112], [16, 112], 11, 11, 11, 11, [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 106], [16, 105], [16, 104], [16, 104], 13, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, 11, 11, 11, [16, 96], [14, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], [16, 68], 11, 11, [16, 66], [16, 66], [16, 65], [16, 64], 11, 11, 11, [16, 62], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], 12, 11, [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, 11, 11, 11, [16, 44], [16, 44], 11, 11, 11, 11, 11, 11, [16, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 252 [ , [15, 168], [15, 144], [15, 134], [15, 128], [15, 128], [15, 126], [15, 126], 12, [16, 123], [16, 122], [16, 120], [16, 120], [16, 120], [16, 119], [16, 118], [16, 117], [16, 116], [16, 116], 11, 11, [16, 114], [16, 112], [16, 112], [16, 112], [14, 8], [16, 110], 11, [16, 108], [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 106], [16, 105], [16, 104], [14, 12], 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, 11, 11, 11, [16, 96], 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], [16, 68], 11, 11, [16, 66], [16, 66], [16, 65], [16, 64], 11, 11, 11, [16, 62], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], [16, 56], [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], 11, 11, [16, 50], [16, 50], [0, 48, "Jo"], [16, 48], [16, 48], 11, 11, 11, 11, 11, [16, 44], [16, 44], [0, 42, "Jo"], 11, 11, 11, 11, 11, [16, 40], [0, 38, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 30, "Jo"], 11, 11, 11, [0, 28, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 253 [ , [15, 168], [15, 144], [15, 134], [15, 129], [15, 128], [15, 127], [15, 126], 12, [16, 124], [16, 122], [16, 121], [16, 120], [16, 120], [16, 120], [16, 119], [16, 118], [16, 116], [16, 116], [16, 116], 11, [16, 114], [16, 113], [16, 112], [16, 112], 12, 11, [16, 110], [16, 109], [16, 108], [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 106], [16, 105], [16, 104], 11, 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, 11, 11, 11, [16, 96], 11, 11, [14, 20], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], [16, 68], 11, 11, [16, 66], [16, 66], [16, 65], [16, 64], 11, 11, 11, [16, 62], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], 11, 11, [16, 50], 12, [16, 48], [16, 48], [16, 48], [0, 46, "Jo"], 11, [16, 46], 11, 11, [16, 44], 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 32, "Jo"], 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 254 [ , [15, 169], [15, 144], [15, 135], [15, 130], [15, 128], [15, 128], [15, 127], [15, 126], [16, 124], [16, 123], [16, 122], [16, 120], [16, 120], [16, 120], [16, 120], [16, 118], [16, 117], [16, 116], [16, 116], [16, 116], [16, 115], [16, 114], [16, 113], [16, 112], [16, 112], 11, 11, [16, 110], [14, 10], [16, 108], [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 106], [16, 105], [16, 104], 11, 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, [16, 98], 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [16, 74], 11, 11, [16, 72], 11, 11, 11, [16, 70], [16, 70], [16, 69], [16, 68], [16, 68], 11, 11, [16, 66], [16, 66], [16, 64], [16, 64], 11, 11, 11, [16, 62], [16, 62], [16, 60], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], 11, 11, [16, 50], [16, 49], [16, 48], [16, 48], 12, 11, 11, [16, 46], 11, 11, [16, 44], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 26, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 10, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 4, "Jo"], 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 255 [ , [15, 170], [15, 145], [15, 136], [15, 130], [15, 128], [15, 128], [15, 128], [15, 127], [16, 124], [16, 124], [16, 122], [16, 121], [16, 120], [16, 120], [16, 120], [16, 119], [16, 118], [16, 117], [16, 116], [16, 116], [16, 116], [16, 114], [16, 114], [16, 113], [16, 112], [16, 112], 11, [16, 110], 12, 11, [16, 108], [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 106], [16, 105], [16, 104], 11, 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, [16, 98], 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [16, 74], 11, [16, 72], [16, 72], 11, 11, 11, [16, 70], [16, 70], [16, 68], [16, 68], [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, 11, [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 58], [16, 56], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], 11, 11, [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, 11, [16, 46], 11, 11, [16, 44], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 20, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], 11, 11, 11, 11, 11, 11, [15, 2]], #V n = 256 [ , [15, 170], [15, 146], [15, 136], [15, 131], [15, 128], [15, 128], [15, 128], [15, 128], [16, 124], [16, 124], [16, 123], [16, 122], [16, 121], [16, 120], [16, 120], [16, 120], [16, 118], [16, 118], [16, 117], [16, 116], [16, 116], [16, 115], [16, 114], [16, 114], [16, 113], [16, 112], [16, 112], [16, 111], [16, 110], 11, 11, [16, 108], [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 106], [16, 105], [16, 104], 11, 11, 11, 11, 11, 11, 11, [16, 100], [16, 100], 11, 11, [16, 98], 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 36], 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, 11, [16, 70], [16, 69], [16, 68], [16, 68], [16, 68], 11, 11, [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, 11, [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], 11, [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, 11, [16, 46], 11, 11, [16, 44], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 34, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], [16, 4], [14, 128], 11, 11, 11, 11, 11, [15, 2]], #V n = 257 [ , [15, 171], [15, 146], [15, 136], [15, 132], [15, 128], [15, 128], [15, 128], [15, 128], [16, 125], [16, 124], [16, 124], [16, 122], [16, 122], [16, 121], [16, 120], [16, 120], [16, 119], [16, 118], [16, 118], [16, 117], [16, 116], [16, 116], [16, 115], [16, 114], [16, 114], [16, 112], [16, 112], [16, 112], [16, 111], [16, 110], 11, [16, 108], [16, 108], [16, 108], [16, 108], [16, 108], [16, 107], [16, 106], [16, 106], [16, 105], [16, 104], 11, 11, 11, 11, [14, 16], 11, 11, [16, 100], [16, 100], 11, 11, [16, 98], 11, 11, [16, 96], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 76], [16, 76], 11, 11, 11, [16, 74], [16, 73], [16, 72], [16, 72], 11, 11, 11, [16, 70], [16, 69], [16, 68], [16, 68], [16, 68], 11, [16, 66], [16, 66], [16, 65], [16, 64], [16, 64], 11, 11, [16, 62], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 56], [16, 56], [16, 56], [16, 55], [16, 54], [16, 54], [16, 53], [16, 52], [16, 52], [16, 52], [0, 50, "Jo"], [16, 50], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, 11, [16, 46], [0, 44, "sp"], 11, [16, 44], 11, 11, 11, 11, [0, 40, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 4], [16, 4], 12, 11, 11, 11, 11, 11, 11, [15, 2]]]; guava-3.6/tbl/upperbd4.g0000644017361200001450000004316511026723452015033 0ustar tabbottcrontab############################################################################# ## #A upperbd4.g GUAVA library Reinald Baart #A & Jasper Cramwinckel #A & Erik Roijackers ## ## This file contains a reference and an upper bound on the minimum distance ## of a linear code over GF(4) of given word length and dimension. ## #H @(#)$Id: upperbd4.g,v 1.1.1.1 1998/03/19 17:31:45 lea Exp $ ## #Y Copyright (C) 1994, Vakgroep Algemene Wiskunde, T.U. Delft, Nederland ## #H CJ, 17 May 2006 #H Updated lower- and upper-bounds of minimum distance for GF(2), #H GF(3) and GF(4) codes. (Brouwer's table as of 11 May 2006) #H #H $Log: upperbd4.g,v $ #H Revision 1.1.1.1 1998/03/19 17:31:45 lea #H Initial version of GUAVA for GAP4. Development still under way. #H Lea Ruscio 19/3/98 #H #H #H Revision 1.2 1997/01/20 15:34:46 werner #H Upgrade from Guava 1.2 to Guava 1.3 for GAP release 3.4.4. #H #H Revision 1.1 1994/11/10 14:29:23 rbaart #H Initial revision #H ## GUAVA_TEMP_VAR := [ [ 10, 3, 6, "GH"], [ 18, 5, 10, "Liz"], [ 18, 14, 3, "cap"], [ 24, 6, 14, "Bou"], [ 27, 5, 17, "Bou"], [ 30, 24, 4, "BK"], [ 31, 5, 20, "Bou"], [ 32, 4, 22, "GH"], [ 39, 10, 22, "Gur"], [ 39, 30, 6, "LP"], [ 41, 6, 27, "Da"], [ 42, 37, 3, "EB4"], [ 45, 5, 31, "Liz"], [ 45, 6, 30, "Da"], [ 48, 36, 8, "LP"], [ 51, 4, 36, "LMH"], [ 51, 10, 31, "Gur"], [ 51, 15, 27, "LP"], [ 52, 35, 12, "LP"], [ 54, 8, 35, "Gur"], [ 54, 9, 34, "Gur"], [ 56, 4, 40, "HLa"], [ 57, 8, 37, "Gur"], [ 57, 42, 10, "LP"], [ 60, 25, 26, "LP"], [ 60, 29, 23, "LP"], [ 60, 53, 4, "LP"], [ 61, 22, 29, "LP"], [ 61, 35, 19, "LP"], [ 61, 40, 15, "LP"], [ 61, 41, 14, "LP"], [ 61, 51, 6, "LP"], [ 62, 15, 35, "LP"], [ 64, 12, 39, "BK"], [ 64, 39, 18, "LP"], [ 66, 9, 43, "Gur"], [ 66, 15, 38, "LP"], [ 66, 20, 34, "LP"], [ 66, 28, 28, "LP"], [ 66, 48, 12, "Jo"], [ 67, 11, 42, "Gur"], [ 67, 25, 31, "LP"], [ 67, 54, 8, "LP"], [ 68, 18, 37, "LP"], [ 69, 40, 21, "LP"], [ 69, 45, 17, "LP"], [ 70, 9, 46, "Gur"], [ 70, 42, 20, "LP"], [ 70, 47, 16, "LP"], [ 71, 11, 45, "LP"], [ 71, 12, 44, "Gur"], [ 71, 26, 33, "LP"], [ 72, 23, 36, "LP"], [ 72, 31, 30, "LP"], [ 72, 35, 27, "LP"], [ 73, 15, 43, "LP"], [ 73, 20, 39, "LP"], [ 74, 7, 51, "BK"], [ 74, 9, 49, "Gur"], [ 74, 42, 23, "LP"], [ 74, 53, 14, "LP"], [ 75, 12, 47, "BK"], [ 75, 13, 46, "Gur"], [ 75, 18, 42, "LP"], [ 75, 48, 19, "LP"], [ 75, 59, 10, "LP"], [ 77, 7, 53, "Gur"], [ 77, 16, 45, "LP"], [ 77, 21, 41, "LP"], [ 77, 25, 38, "LP"], [ 77, 29, 35, "LP"], [ 77, 37, 29, "LP"], [ 77, 41, 26, "LP"], [ 77, 46, 22, "LP"], [ 78, 9, 52, "Gur"], [ 78, 10, 51, "BK"], [ 78, 34, 32, "LP"], [ 79, 12, 50, "BK"], [ 79, 13, 49, "BK"], [ 79, 53, 18, "LP"], [ 80, 15, 48, "LP"], [ 80, 45, 25, "LP"], [ 81, 21, 44, "LP"], [ 81, 51, 21, "LP"], [ 82, 6, 58, "LP"], [ 82, 9, 55, "Gur"], [ 82, 10, 54, "BK"], [ 82, 18, 47, "LP"], [ 82, 23, 43, "LP"], [ 82, 27, 40, "LP"], [ 82, 31, 37, "LP"], [ 82, 63, 12, "LP"], [ 83, 12, 53, "BK"], [ 83, 13, 52, "LP"], [ 83, 36, 34, "LP"], [ 83, 44, 28, "LP"], [ 83, 58, 17, "LP"], [ 83, 59, 16, "LP"], [ 84, 15, 51, "LP"], [ 84, 16, 50, "LP"], [ 84, 21, 46, "LP"], [ 84, 41, 31, "LP"], [ 84, 50, 24, "LP"], [ 85, 6, 60, "Gur"], [ 85, 10, 56, "BK"], [ 86, 5, 62, "Gur"], [ 86, 8, 59, "LP"], [ 86, 9, 58, "Gur"], [ 86, 13, 54, "LP"], [ 86, 19, 49, "LP"], [ 86, 57, 20, "LP"], [ 87, 49, 27, "LP"], [ 88, 16, 53, "LP"], [ 88, 26, 45, "LP"], [ 88, 30, 42, "LP"], [ 88, 34, 39, "LP"], [ 88, 38, 36, "LP"], [ 88, 46, 30, "LP"], [ 88, 55, 23, "LP"], [ 89, 7, 62, "BK"], [ 89, 10, 59, "BK"], [ 89, 18, 52, "LP"], [ 89, 43, 33, "LP"], [ 89, 52, 26, "LP"], [ 90, 9, 61, "Gur"], [ 90, 13, 57, "LP"], [ 90, 24, 48, "LP"], [ 90, 58, 22, "LP"], [ 90, 62, 19, "LP"], [ 90, 68, 14, "LP"], [ 91, 16, 55, "LP"], [ 91, 21, 51, "LP"], [ 91, 30, 44, "LP"], [ 92, 35, 41, "LP"], [ 92, 65, 18, "Jo"], [ 93, 10, 62, "LP"], [ 93, 19, 54, "LP"], [ 93, 24, 50, "LP"], [ 93, 28, 47, "LP"], [ 93, 40, 38, "LP"], [ 94, 6, 67, "Gur"], [ 94, 13, 60, "LP"], [ 95, 16, 58, "LP"], [ 95, 22, 53, "LP"], [ 95, 46, 35, "LP"], [ 95, 50, 32, "LP"], [ 96, 10, 64, "Gur"], [ 96, 82, 8, "sp"], [ 97, 5, 70, "War"], [ 97, 13, 62, "LP"], [ 97, 19, 57, "LP"], [ 97, 33, 46, "LP"], [ 97, 37, 43, "LP"], [ 98, 9, 67, "Gur"], [ 98, 21, 56, "LP"], [ 98, 42, 40, "LP"], [ 99, 16, 61, "LP"], [ 99, 17, 60, "LP"], [ 99, 27, 52, "LP"], [ 99, 31, 49, "LP"], [ 99, 74, 16, "sp"], [ 99, 82, 10, "sp"], [ 99, 88, 6, "sp"], [100, 10, 67, "BK"], [100, 19, 59, "LP"], [100, 24, 55, "LP"], [100, 48, 37, "LP"], [100, 52, 34, "LP"], [100, 56, 31, "LP"], [100, 59, 29, "LP"], [101, 7, 71, "LP"], [101, 13, 65, "LP"], [101, 71, 20, "sp"], [102, 5, 74, "Gur"], [102, 16, 63, "LP"], [102, 22, 58, "LP"], [102, 27, 54, "LP"], [102, 35, 48, "LP"], [103, 32, 51, "LP"], [103, 40, 45, "LP"], [104, 4, 76, "HLa"], [104, 10, 70, "LP"], [104, 19, 62, "LP"], [104, 25, 57, "LP"], [104, 84, 12, "sp"], [105, 7, 74, "BK"], [105, 13, 68, "LP"], [105, 14, 67, "LP"], [105, 22, 60, "LP"], [105, 46, 42, "LP"], [105, 50, 39, "LP"], [106, 16, 66, "LP"], [106, 17, 65, "LP"], [106, 36, 50, "LP"], [106, 71, 24, "sp"], [107, 19, 64, "LP"], [107, 79, 18, "sp"], [108, 10, 73, "LP"], [108, 11, 72, "LP"], [108, 30, 56, "LP"], [108, 34, 53, "LP"], [109, 13, 71, "LP"], [109, 14, 70, "LP"], [109, 22, 63, "LP"], [109, 27, 59, "LP"], [109, 43, 47, "LP"], [109, 47, 44, "LP"], [110, 16, 69, "LP"], [110, 17, 68, "LP"], [110, 77, 22, "sp"], [110, 87, 14, "sp"], [111, 19, 67, "LP"], [111, 20, 66, "LP"], [111, 25, 62, "LP"], [111, 30, 58, "LP"], [111, 34, 55, "LP"], [112, 10, 76, "LP"], [112, 11, 75, "LP"], [112, 14, 72, "LP"], [112, 39, 52, "LP"], [112, 43, 49, "LP"], [112, 72, 28, "Jo"], [113, 13, 74, "LP"], [113, 16, 71, "LP"], [113, 17, 70, "LP"], [113, 23, 65, "LP"], [114, 9, 79, "LP"], [114, 25, 64, "LP"], [114, 29, 61, "LP"], [115, 20, 69, "LP"], [115, 39, 54, "LP"], [115, 77, 26, "sp"], [115, 84, 20, "Jo"], [116, 5, 84, "Ma"], [116, 10, 79, "LP"], [116, 11, 78, "LP"], [116, 13, 76, "LP"], [116, 14, 75, "LP"], [116, 22, 68, "LP"], [116, 28, 63, "LP"], [116, 36, 57, "LP"], [116, 44, 51, "LP"], [117, 7, 83, "LP"], [117, 8, 82, "LP"], [117, 16, 74, "LP"], [117, 17, 73, "LP"], [117, 33, 60, "LP"], [117, 91, 16, "sp"], [118, 19, 72, "LP"], [118, 20, 71, "LP"], [118, 25, 67, "LP"], [118, 82, 24, "Jo"], [119, 11, 80, "LP"], [119, 14, 77, "LP"], [120, 7, 85, "BK"], [120, 10, 82, "BK"], [120, 13, 79, "LP"], [120, 17, 75, "LP"], [120, 23, 70, "LP"], [120, 28, 66, "LP"], [120, 33, 62, "LP"], [120, 37, 59, "LP"], [120, 41, 56, "LP"], [121, 78, 30, "sp"], [121,113, 4, "sp"], [122, 20, 74, "LP"], [122, 26, 69, "LP"], [122, 31, 65, "LP"], [123, 11, 83, "LP"], [123, 14, 80, "LP"], [123, 22, 73, "LP"], [123, 23, 72, "LP"], [123, 28, 68, "LP"], [123, 82, 28, "Jo"], [124, 7, 88, "LP"], [124, 10, 85, "LP"], [124, 13, 82, "LP"], [124, 17, 78, "LP"], [124, 42, 58, "LP"], [124, 90, 22, "sp"], [124, 95, 18, "Jo"], [125, 9, 87, "LP"], [125, 20, 76, "LP"], [125, 26, 71, "LP"], [125, 31, 67, "LP"], [125, 35, 64, "LP"], [125, 39, 61, "LP"], [127, 11, 86, "LP"], [127, 14, 83, "LP"], [127, 17, 80, "LP"], [127, 23, 75, "LP"], [127, 88, 26, "sp"], [128, 7, 91, "LP"], [128, 10, 88, "LP"], [128, 13, 85, "LP"], [129, 9, 90, "LP"], [129, 20, 79, "LP"], [129, 26, 74, "LP"], [129, 31, 70, "LP"], [129, 36, 66, "LP"], [129, 40, 63, "LP"], [129, 44, 60, "LP"], [130, 11, 88, "LP"], [130, 14, 85, "LP"], [130, 23, 77, "LP"], [130,109, 12, "sp"], [130,112, 10, "sp"], [131, 17, 83, "LP"], [131, 29, 73, "LP"], [132, 7, 94, "LP"], [132, 10, 91, "LP"], [132, 20, 81, "LP"], [132, 35, 69, "LP"], [132, 88, 30, "sp"], [132, 95, 24, "sp"], [132,100, 20, "sp"], [134, 11, 91, "Da1"], [134, 14, 88, "Da1"], [134, 23, 80, "Da1"], [134,110, 14, "sp"], [135, 17, 86, "Da1"], [135, 18, 85, "Da1"], [135,120, 8, "sp"], [136, 7, 97, "DM3"], [136, 10, 94, "Da1"], [136, 20, 84, "Da1"], [136, 21, 83, "Da1"], [136, 94, 28, "sp"], [137, 23, 82, "Da1"], [138, 11, 94, "Da1"], [138, 14, 91, "Da1"], [138, 15, 90, "Da1"], [138, 89, 34, "sp"], [139, 17, 89, "Da1"], [139, 18, 88, "Da1"], [139,112, 16, "sp"], [140, 7,100, "DM3"], [140, 8, 99, "Da1"], [140, 10, 97, "Da1"], [140, 20, 87, "Da1"], [140, 21, 86, "Da1"], [140, 93, 32, "Jo"], [140,105, 22, "sp"], [141, 14, 93, "Da1"], [141, 23, 85, "Da1"], [141, 24, 84, "Da1"], [141,101, 26, "sp"], [142, 11, 97, "Da1"], [142, 17, 91, "Da1"], [142, 18, 90, "Da1"], [143, 20, 89, "Da1"], [143, 21, 88, "Da1"], [144, 7,103, "DM3"], [144, 8,102, "Da1"], [144, 10,100, "Da1"], [144, 99, 30, "sp"], [144,114, 18, "Jo"], [145, 11, 99, "Da1"], [145, 14, 96, "Da1"], [145, 24, 87, "Da1"], [145, 91, 38, "sp"], [146, 17, 94, "Da1"], [146, 18, 93, "Da1"], [147, 20, 92, "Da1"], [147, 21, 91, "Da1"], [147, 95, 36, "sp"], [148, 8,105, "Da1"], [148, 10,103, "Da1"], [148, 23, 90, "Da1"], [148, 24, 89, "Da1"], [148,110, 24, "sp"], [149, 7,107, "DM3"], [149, 11,102, "Da1"], [149, 14, 99, "Da1"], [149, 15, 98, "Da1"], [149, 99, 34, "sp"], [149,106, 28, "sp"], [150, 17, 97, "Da1"], [150, 18, 96, "Da1"], [150, 19, 95, "Da1"], [150, 21, 93, "Da1"], [151,118, 20, "sp"], [152, 8,108, "Da1"], [152, 10,106, "Da1"], [152, 22, 93, "Da1"], [152, 24, 92, "Da1"], [153, 11,105, "Da1"], [153, 14,102, "Da1"], [153, 15,101, "Da1"], [153, 18, 98, "Da1"], [153,105, 32, "sp"], [154, 7,111, "DM3"], [154, 17,100, "Da1"], [154, 20, 97, "Da1"], [154, 21, 96, "Da1"], [155,100, 38, "sp"], [156, 7,112, "DM3"], [156, 8,111, "Da1"], [156, 10,109, "Da1"], [156, 15,103, "Da1"], [156, 18,100, "Da1"], [156,115, 26, "sp"], [156,144, 6, "sp"], [157, 11,108, "Da1"], [157, 14,105, "Da1"], [157, 17,102, "Da1"], [157, 21, 98, "Da1"], [157,111, 30, "Jo"], [158,105, 36, "sp"], [158,122, 22, "sp"], [159, 8,113, "Da1"], [159, 24, 97, "Da1"], [160, 7,115, "DM3"], [160, 10,112, "Da1"], [160, 15,106, "Da1"], [160, 18,103, "Da1"], [161, 11,111, "Da1"], [161, 12,110, "Da1"], [161, 14,108, "Da1"], [161, 21,101, "Da1"], [161,110, 34, "sp"], [162, 24, 99, "Da1"], [162,102, 42, "sp"], [162,137, 14, "sp"], [163, 8,116, "Da1"], [163,141, 12, "Jo"], [164, 7,118, "DM3"], [164, 11,113, "Da1"], [164, 14,110, "Da1"], [164, 15,109, "Da1"], [164, 16,108, "Da1"], [164, 18,106, "Da1"], [164, 21,103, "Da1"], [164,106, 40, "sp"], [164,120, 28, "sp"], [164,136, 16, "sp"], [165,126, 24, "sp"], [166, 24,102, "Da1"], [166, 25,101, "Da1"], [166,110, 38, "sp"], [166,117, 32, "sp"], [167, 8,119, "Da1"], [167, 15,111, "Da1"], [167, 18,108, "Da1"], [168, 7,121, "DM3"], [168, 10,118, "Da1"], [168, 11,116, "Da1"], [168, 14,113, "Da1"], [168, 21,106, "Da1"], [168,137, 18, "sp"], [169, 24,104, "Da1"], [169,104, 46, "sp"], [170,116, 36, "sp"], [170,151, 10, "Jo"], [171, 8,122, "Da1"], [171, 15,114, "Da1"], [171, 18,111, "Da1"], [171,108, 44, "sp"], [172, 7,124, "DM3"], [172, 11,119, "Da1"], [172, 12,118, "Da1"], [172, 14,116, "Da1"], [172, 17,113, "Da1"], [172, 21,109, "Da1"], [172, 22,108, "Da1"], [172,111, 42, "Jo"], [172,125, 30, "sp"], [173, 25,106, "Da1"], [173,131, 26, "sp"], [173,139, 20, "sp"], [174, 15,116, "Da1"], [174,122, 34, "sp"], [175, 8,125, "Da1"], [175, 18,114, "Da1"], [175, 19,113, "Da1"], [175, 21,111, "Da1"], [175, 22,110, "Da1"], [175,116, 40, "sp"], [176, 7,127, "DM3"], [176, 10,124, "Da1"], [176, 11,122, "Da1"], [176, 12,121, "Da1"], [176, 14,119, "Da1"], [176, 25,108, "Da1"], [178, 15,119, "Da1"], [178, 18,116, "Da1"], [178,121, 38, "sp"], [178,141, 22, "Jo"], [179, 8,128, "Da1"], [179, 21,114, "Da1"], [179, 22,113, "Da1"], [179,113, 46, "sp"], [180, 7,130, "DM3"], [180, 10,127, "Da1"], [180, 11,125, "Da1"], [180, 12,124, "Da1"], [180, 14,122, "Da1"], [180, 24,112, "Da1"], [180, 25,111, "Da1"], [180,130, 32, "sp"], [180,135, 28, "sp"], [181,117, 44, "sp"], [182, 8,130, "Da1"], [182, 15,122, "Da1"], [182, 18,119, "Da1"], [182, 19,118, "Da1"], [182, 22,115, "Da1"], [182,127, 36, "Jo"], [183, 12,126, "Da1"], [183, 21,117, "Da1"], [183, 25,113, "Da1"], [184, 7,133, "DM3"], [184, 11,128, "Da1"], [184, 14,125, "Da1"], [184,122, 42, "sp"], [185, 15,124, "Da1"], [185,145, 24, "sp"], [186, 8,133, "Da1"], [186, 18,122, "Da1"], [186, 19,121, "Da1"], [186, 22,118, "Da1"], [187, 5,138, "Ma"], [187, 12,129, "Da1"], [187, 21,120, "Da1"], [187, 25,116, "Da1"], [187,127, 40, "sp"], [188, 7,136, "DM3"], [188, 11,131, "Da1"], [188, 14,128, "Da1"], [188,135, 34, "sp"], [188,140, 30, "sp"], [189, 15,127, "Da1"], [189, 18,124, "Da1"], [189, 19,123, "Da1"], [189,122, 46, "Jo"], [190, 5,140, "LaM"], [190, 8,136, "Da1"], [190, 21,122, "Da1"], [190, 22,121, "Da1"], [190, 25,118, "Da1"], [190,174, 8, "Jo"], [191, 12,132, "Da1"], [191, 14,130, "Da1"], [191, 24,120, "Da1"], [191,133, 38, "sp"], [191,148, 26, "sp"], [192, 11,134, "Da1"], [192,127, 44, "sp"], [193, 15,130, "Da1"], [193, 18,127, "Da1"], [193, 22,123, "Da1"], [194, 8,139, "Da1"], [194, 12,134, "Da1"], [194, 20,126, "Da1"], [194, 21,125, "Da1"], [194, 25,121, "Da1"], [195, 11,136, "Da1"], [195, 14,133, "Da1"], [195,132, 42, "sp"], [195,163, 18, "sp"], [195,166, 16, "sp"], [196, 19,128, "Da1"], [196,124, 50, "sp"], [196,145, 32, "sp"], [197, 7,143, "DM3"], [197, 15,133, "Da1"], [197, 16,132, "Da1"], [197, 18,130, "Da1"], [197, 22,126, "Da1"], [197, 25,123, "Da1"], [197,141, 36, "sp"], [197,171, 14, "sp"], [198, 8,142, "Da1"], [198, 12,137, "Da1"], [198,128, 48, "sp"], [198,152, 28, "sp"], [198,163, 20, "sp"], [199, 11,139, "Da1"], [199, 14,136, "Da1"], [199,138, 40, "Jo"], [200, 15,135, "Da1"], [200, 19,131, "Da1"], [200, 22,128, "Da1"], [201, 18,133, "DM4"], [201, 21,130, "DM4"], [201,133, 46, "sp"], [202, 8,145, "DM4"], [202, 12,140, "DM4"], [202,164, 22, "sp"], [203, 10,144, "DM4"], [203, 14,139, "DM4"], [203, 19,133, "DM4"], [203,126, 54, "sp"], [204, 15,138, "DM4"], [204, 16,137, "DM4"], [204, 22,131, "DM4"], [204,129, 52, "Jo"], [204,138, 44, "sp"], [204,150, 34, "sp"], [205, 11,144, "DM4"], [205, 18,136, "DM4"], [205,146, 38, "sp"], [205,156, 30, "Jo"], [205,182, 12, "sp"], [206, 8,148, "DM4"], [206, 12,143, "DM4"], [206,133, 50, "Jo"], [206,165, 24, "Jo"], [207, 10,147, "DM4"], [207, 14,142, "DM4"], [207, 19,136, "DM4"], [207, 22,133, "DM4"], [208, 11,146, "DM4"], [208, 15,141, "DM4"], [208, 16,140, "DM4"], [208, 18,138, "DM4"], [208,144, 42, "sp"], [209, 8,150, "DM4"], [209, 12,145, "DM4"], [209,138, 48, "sp"], [211, 11,148, "DM4"], [211, 19,139, "DM4"], [211, 22,136, "DM4"], [212, 15,144, "DM4"], [212, 16,143, "DM4"], [212, 18,141, "DM4"], [212,143, 46, "sp"], [212,155, 36, "sp"], [212,168, 26, "sp"], [213, 8,153, "DM4"], [213, 12,148, "DM4"], [213,135, 54, "sp"], [213,151, 40, "sp"], [213,161, 32, "sp"], [214, 19,141, "DM4"], [215, 11,151, "DM4"], [215, 16,145, "DM4"], [215, 22,139, "DM4"], [215, 23,138, "DM4"], [215,139, 52, "sp"], [216, 15,147, "DM4"], [216, 18,144, "DM4"], [216,149, 44, "sp"], [217, 8,156, "DM4"], [217, 12,151, "DM4"], [218, 19,144, "DM4"], [218, 22,141, "DM4"], [218,144, 50, "sp"], [218,171, 28, "sp"], [219, 11,154, "DM4"], [219, 15,149, "DM4"], [219, 16,148, "DM4"], [220, 18,147, "DM4"], [220,137, 58, "sp"], [220,160, 38, "sp"], [220,165, 34, "sp"], [221, 8,159, "DM4"], [221, 12,154, "DM4"], [221,149, 48, "sp"], [221,156, 42, "Jo"], [222, 14,153, "DM4"], [222, 19,147, "DM4"], [222, 22,144, "DM4"], [222, 23,143, "DM4"], [223, 11,157, "DM4"], [223, 15,152, "DM4"], [223, 16,151, "DM4"], [223, 18,149, "DM4"], [224, 12,156, "DM4"], [224,145, 54, "sp"], [224,204, 10, "sp"], [225, 8,162, "DM4"], [225, 19,149, "DM4"], [225,155, 46, "sp"], [225,175, 30, "sp"], [226, 16,153, "DM4"], [226, 22,147, "DM4"], [226, 23,146, "DM4"], [226,149, 52, "sp"], [226,190, 20, "Jo"], [227, 11,160, "DM4"], [227, 15,155, "DM4"], [227, 18,152, "DM4"], [227,194, 18, "sp"], [228, 12,159, "DM4"], [228,165, 40, "sp"], [228,170, 36, "sp"], [228,189, 22, "sp"], [229, 8,165, "DM4"], [229, 19,152, "DM4"], [229, 22,149, "DM4"], [229, 23,148, "DM4"], [229,154, 50, "sp"], [230, 16,156, "DM4"], [230,146, 58, "sp"], [230,162, 44, "sp"], [231, 11,163, "DM4"], [231, 15,158, "DM4"], [231, 18,155, "DM4"], [231,178, 32, "sp"], [231,189, 24, "sp"], [231,201, 16, "sp"], [232, 12,162, "DM4"], [232,150, 56, "sp"], [233, 8,168, "DM4"], [233, 16,158, "DM4"], [233, 19,155, "DM4"], [233, 20,154, "DM4"], [233, 22,152, "DM4"], [233, 23,151, "DM4"], [233,160, 48, "sp"], [235, 11,166, "DM4"], [235, 15,161, "DM4"], [235,155, 54, "sp"], [235,190, 26, "sp"], [236, 12,165, "DM4"], [236, 19,157, "DM4"], [236, 23,153, "DM4"], [236,170, 42, "sp"], [236,175, 38, "sp"], [237, 8,171, "DM4"], [237, 16,161, "DM4"], [237, 22,155, "DM4"], [237,148, 62, "sp"], [238,151, 60, "sp"], [238,160, 52, "sp"], [238,167, 46, "sp"], [238,182, 34, "sp"], [239, 5,177, "LaM"], [239, 11,169, "DM4"], [239, 12,167, "DM4"], [239, 15,164, "DM4"], [240, 19,160, "DM4"], [240, 20,159, "DM4"], [240, 23,156, "DM4"], [240,192, 28, "sp"], [240,213, 14, "sp"], [241, 8,174, "DM4"], [241, 16,164, "DM4"], [241, 22,158, "DM4"], [241,156, 58, "sp"], [241,165, 50, "Jo"], [242, 15,166, "DM4"], [242, 18,163, "DM4"], [242,233, 4, "sp"], [243, 5,180, "Ha"], [243, 11,172, "DM4"], [243, 12,170, "DM4"], [243, 23,158, "DM4"], [243,160, 56, "sp"], [243,179, 40, "sp"], [244, 16,166, "DM4"], [244, 19,163, "DM4"], [244, 20,162, "DM4"], [244, 22,160, "DM4"], [244,175, 44, "sp"], [245, 8,177, "DM4"], [245, 9,176, "DM4"], [245,186, 36, "Jo"], [246, 15,169, "DM4"], [246,165, 54, "sp"], [246,172, 48, "sp"], [246,195, 30, "sp"], [247, 11,175, "DM4"], [247, 12,173, "DM4"], [247, 23,161, "DM4"], [247,157, 62, "sp"], [247,234, 6, "sp"], [248, 5,184, "Ha"], [248, 16,169, "DM4"], [248, 19,166, "DM4"], [248, 20,165, "DM4"], [248, 21,164, "DM4"], [248, 22,163, "DM4"], [249, 8,180, "DM4"], [249,161, 60, "sp"], [250, 15,172, "DM4"], [250, 23,163, "DM4"], [250,171, 52, "sp"], [251,184, 42, "sp"], [252,166, 58, "sp"], [252,180, 46, "sp"], [252,198, 32, "sp"], [253,191, 38, "sp"], [254,159, 66, "sp"], [255,162, 64, "sp"], [255,171, 56, "sp"], [255,178, 50, "sp"]]; guava-3.6/tbl/bdtable3.g0000644017361200001450000111225211026723452014761 0ustar tabbottcrontab#A BOUNDS FOR q = 3 ## ## Each entry [n][k] of one of the tables below contains ## a bound (the first table contains lowerbounds, the ## second upperbounds) for a code with wordlength n and ## dimension k. Each entry contains one of the following ## items: ## ## FOR LOWER- AND UPPERBOUNDSTABLE ## [ 0, , ] from Brouwers table ## ## FOR LOWERBOUNDSTABLE ## empty k= 0, 1, n or d= 2 or (k= 2 and q= 2) ## 1 shortening a [ n + 1, k + 1 ] code ## 2 puncturing a [ n + 1, k ] code ## 3 extending a [ n - 1, k ] code ## [ 4,
] constr. B, of a [ n+dd, k+dd-1, d ] code ## [ 5, ] an UUV-construction with a [ n / 2, k1 ] ## and a [ n / 2, k - k1 ] code ## [ 6, ] concatenation of a [ n1, k ] and a ## [ n - n1, k ] code ## [ 7, ] taking the residue of a [ n1, k + 1 ] code ## 20 taking the subcode of a [ n, k + 1 ] code ## [21,,] constr. B2 of a [ n+s, k+s-2j-1, d+2j] code ## [22,,] an UUAVUVW-construction with a [ n/3, k1 ], ## a [ n/3, k2 ] and a [ n/3, k-(k1+k2) ] code ## ## FOR UPPERBOUNDSTABLE ## empty trivial and Singleton bound ## 11 shortening a [ n + 1, k + 1 ] code ## 12 puncturing a [ n + 1, k ] code ## 13 extending a [ n - 1, k ] code ## [ 14,
] constr. B, with dd = dual distance ## [ 15, ] Griesmer bound ## [ 16, ] One-step Griesmer bound GUAVA_BOUNDS_TABLE[1][3] := [ #V n = 1 [ ], #V n = 2 [ ], #V n = 3 [ ], #V n = 4 [ , [7, 11]], #V n = 5 [ , 1, 20], #V n = 6 [ , 1, 1, 20], #V n = 7 [ , 1, 1, 1, 20], #V n = 8 [ , 1, 1, 1, 1, 20], #V n = 9 [ , 20, 1, 1, 1, 1, 20], #V n = 10 [ , 1, 20, 1, 1, 2, 1, 20], #V n = 11 [ , 1, 2, 20, 1, 2, 20, 1, 20], #V n = 12 [ , 1, 2, 20, 20, [0, 6, "QR"], 1, 20, 1, 20], #V n = 13 [ , 20, [7, 38], 1, 20, 1, 1, 1, 20, [4, 24], 20], #V n = 14 [ , 2, 1, 1, 1, 20, [0, 6, "QR"], [0, 5, "NBC"], 1, 1, 20, 20], #V n = 15 [ , 2, 20, 1, 2, [0, 7, "Li1"], 1, 1, 20, 1, 1, 20, 20], #V n = 16 [ , [6, 4], 1, 20, [0, 9, "HN"], 1, 20, 1, 1, 20, 1, 1, 20, 20], #V n = 17 [ , 1, 1, 1, 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20], #V n = 18 [ , 2, 1, 1, 2, 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20], #V n = 19 [ , 2, 20, 1, 2, 20, 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20], #V n = 20 [ , [6, 4], 2, 20, [7, 54], 1, 20, 1, 1, 1, 20, 1, 1, 20, [5, 9], 1, 20, 20], #V n = 21 [ , 1, 2, 20, 1, 1, 2, 20, 1, 1, 1, 20, 1, 1, 1, 20, 1, 20, 20], #V n = 22 [ , 2, [6, 9], 1, 20, 1, 2, 20, 20, 1, 1, 2, 20, 1, 1, 1, 20, 1, 20, 20], #V n = 23 [ , 2, 1, 1, 1, 20, [0, 12, "Bou"], 1, 20, 20, 1, 2, 20, 20, 1, 1, 1, 20, 1, 20, 20], #V n = 24 [ , [6, 4], 1, 1, 1, 1, 1, 2, 1, 20, 20, [0, 9, "QR"], 1, 20, 20, 1, 1, 1, 20, 1, 20, 20], #V n = 25 [ , 1, 1, 2, 1, 1, 1, 2, 20, [0, 10, "BE3"], 20, 3, 20, 1, 20, 20, 1, 1, 1, 20, 1, 20, 20], #V n = 26 [ , 2, 1, 2, 20, 1, 1, 2, 1, 1, 20, 1, 1, 20, 1, 20, 20, 1, 1, 1, 20, 1, 20, 20], #V n = 27 [ , 2, 20, [22, 3, 1], 2, 20, 1, 2, 1, 1, 1, 20, 1, 1, 20, [0, 7, "EB3"], 20, 20, 1, 2, 1, 20, 1, 20, 20], #V n = 28 [ , [6, 4], 20, 1, 2, 20, 20, [0, 15, "NBC"], 20, 1, 1, 1, 20, [0, 9, "KP"], 1, 1, 20, 20, 20, [0, 6, "KP"], 20, 1, 20, 1, 20, 20], #V n = 29 [ , 2, 1, 20, [0, 18, "vE0"], 1, 20, 3, 1, 20, 1, 1, 1, 1, 20, [0, 8, "EB3"], 1, 20, 20, 3, 1, 20, 1, 20, 1, 20, 20], #V n = 30 [ , 2, 1, 2, 1, 1, 2, 1, 2, [0, 13, "GuB"], 20, 1, 1, 1, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20], #V n = 31 [ , 2, 1, 2, 20, [7, 83], [0, 17, "XX"], 20, [0, 15, "DaH"], 2, 20, 20, 1, 1, 1, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20], #V n = 32 [ , [6, 4], 20, [0, 21, "Bel"], 2, 1, 1, 2, 1, 2, 20, 20, 20, 1, 1, 1, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20], #V n = 33 [ , 2, 1, 1, 2, 20, 1, 2, 20, [0, 15, "GB4"], 1, 20, 20, 20, 1, 1, 1, 2, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20], #V n = 34 [ , 2, 1, 2, [0, 21, "vE0"], 1, 20, [0, 18, "DaH"], 2, 1, 1, 1, 20, 20, 20, 1, 1, 2, 20, 1, 20, [0, 7, "EB3"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20], #V n = 35 [ , 2, 1, 2, 1, 2, [0, 19, "KP"], 1, 2, 20, 1, 1, 1, 20, 20, 20, 1, 2, 1, 20, [0, 8, "EB3"], 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20], #V n = 36 [ , [6, 4], 20, [22, 3, 1], 2, [0, 21, "BZ"], 2, 20, [0, 18, "KP"], 1, 20, 1, 1, 1, 20, 20, 20, [0, 12, "Ple"], 20, 1, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20], #V n = 37 [ , 2, 1, 1, 2, 2, [0, 20, "Bo1"], 20, 1, 1, 1, 20, 1, 1, 1, 20, 20, 3, 1, 20, 1, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20], #V n = 38 [ , 2, 1, 2, [0, 24, "BB"], 2, 1, 1, 20, 1, 1, 2, 20, 1, 1, 1, 20, 1, 1, 2, 20, 1, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20], #V n = 39 [ , 2, 1, 2, 1, 2, 1, 1, 1, 20, 1, 2, 20, 20, 1, 1, 1, 20, 1, 2, 20, 20, 1, 1, 20, 1, 20, 20, [0, 6, "B"], 20, 1, 20, 1, 20, 1, 20, 20], #V n = 40 [ , [6, 4], 20, [7, 119], 20, [7, 110], 1, 1, 2, [0, 19, "DaH"], 20, [0, 18, "KP"], 2, 20, 20, 1, 1, 1, 20, [0, 12, "Be"], 1, 20, 20, [0, 9, "KP"], 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, [4, 78], 20, 20], #V n = 41 [ , 2, 20, 3, 1, 1, 2, [0, 22, "KP"], [0, 21, "DaH"], 1, 20, 1, 2, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 3, 20, 1, 20, 1, 20, 1, 20, 20, [0, 5, "BCH"], 20, 1, 1, 20, 20, 20], #V n = 42 [ , 2, 2, 1, 1, 2, [0, 24, "X"], 1, 1, 1, 2, 20, [0, 18, "B"], 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 20, 20, 1, 20, [0, 7, "EB3"], 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 43 [ , 2, 2, 20, 1, 2, 1, 1, 2, 1, 2, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 2, [0, 9, "Vx"], 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 44 [ , [6, 4], [6, 9], 1, 20, [0, 27, "Bo1"], 20, 1, 2, 20, [0, 21, "DaH"], 2, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 2, 1, 20, 20, 20, [0, 8, "BE3"], 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 45 [ , 2, 1, 1, 2, 3, 2, 20, [0, 24, "KP"], 20, 1, 2, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 2, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 46 [ , 2, 2, 1, 2, 2, [0, 26, "BKW"], 20, 3, 2, 20, [0, 21, "DaH"], 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 2, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 47 [ , 2, 2, 20, [0, 30, "vE1"], 2, 1, 2, 1, 2, 20, 3, 1, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 2, 1, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 48 [ , [6, 4], [6, 9], 1, 1, 2, 1, 2, 20, [0, 24, "DaH"], [0, 22, "GB4"], 1, 1, 2, 20, 20, 20, 1, 1, 1, 20, 20, 20, [0, 15, "QR"], 1, 2, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 49 [ , 2, 1, 2, [0, 31, "BB"], [0, 30, "Gu1"], [0, 28, "GuB"], [0, 27, "DaH"], 1, 2, 1, 20, [0, 21, "DaH"], [0, 20, "DaH"], 20, 20, 20, 20, 1, 1, 1, 20, 20, 3, 1, 2, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 50 [ , 2, 2, [6, 10], 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 1, 20, 1, 1, 2, 1, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 51 [ , 2, 2, 1, 1, 2, 2, 20, 1, 2, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 1, 20, 1, 2, 1, 1, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 52 [ , [6, 4], [4, 2], 1, 1, 2, [0, 30, "CG"], 2, 20, [0, 27, "DaH"], 20, 1, 1, 2, 1, 1, 2, 20, 20, 20, 20, 1, 1, 1, 20, [0, 15, "GaO"], 1, 1, 1, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 53 [ , 2, 1, 1, 1, 2, 1, 2, 20, 3, 1, 20, 1, 2, 20, [0, 21, "DaH"], [0, 20, "DaH"], 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 20, 20, 1, 20, [0, 7, "EB3"], 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 54 [ , 2, 20, 1, 1, 2, 2, [0, 30, "GB4"], [0, 28, "GB1"], 1, 1, 2, 20, [0, 24, "DaH"], 20, 1, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 2, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 55 [ , 2, 2, 20, 1, 2, 2, 2, 1, 20, 1, 2, 20, 3, 1, 20, 1, 1, 1, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 2, 20, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20], #V n = 56 [ , [6, 4], 2, 20, 20, [0, 36, "Gu"], [0, 33, "GB4"], [0, 31, "Gu2"], 1, 2, 20, [0, 27, "ARS"], 20, 1, 1, 2, 20, [0, 21, "DaH"], 1, 2, 20, 20, 20, 20, 20, 1, 1, 1, 1, 2, 20, 20, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 20, [0, 4, "Hi1"], 1, 20, 20, 20], #V n = 57 [ , 2, [6, 9], 2, 20, 3, 2, 3, 1, 2, 20, 3, 1, 20, [0, 24, "DaH"], [0, 23, "DaH"], 20, 3, 20, [0, 20, "DaH"], 20, 20, 20, 20, 20, 20, 1, 1, 1, 2, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 58 [ , 2, 1, 2, 20, 3, 2, 1, 20, [0, 30, "XX"], 2, 1, 1, 2, 1, 2, 20, 1, 20, 3, 20, 20, 20, 20, 20, 20, 20, 1, 1, 2, 1, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 59 [ , 2, 2, [6, 19], 2, 1, 2, 1, 1, 1, 2, 20, 1, 2, 20, [0, 24, "GW2"], 2, 20, 1, 1, 2, 20, 20, 20, 20, 20, 20, 20, 1, 2, 1, 2, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 60 [ , [6, 4], 2, 1, 2, 20, [0, 36, "BKW"], 2, 1, 1, 2, 2, 20, [0, 27, "GW2"], 2, 1, 2, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 20, 20, [0, 18, "QR"], 1, 2, 20, 1, 20, 20, 1, 20, 20, 1, 2, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 61 [ , 2, [4, 2], 2, [0, 39, "vE0"], 2, 3, 2, 20, 1, 2, 2, 20, 3, [0, 26, "DaH"], 20, [0, 24, "DaH"], 1, 20, 20, [0, 21, "DaH"], 20, 20, 20, 20, 20, 20, 20, 20, 3, 1, 2, 20, 20, 1, 20, 20, 1, 20, 20, [0, 10, "Glo"], 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 62 [ , 2, 1, 2, 1, 2, 1, 2, 2, 20, [0, 32, "DaH"], [0, 30, "DaH"], 20, 1, 1, 1, 1, 1, 1, 20, 3, 1, 20, 20, 20, 20, 20, 20, 20, 1, 1, 2, [0, 13, "Vx"], 20, 20, 1, 20, 20, 1, 20, 3, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 63 [ , 2, 2, [22, 3, 1], 2, [0, 39, "Gu1"], 1, 2, 2, 20, 3, 2, 1, 20, 1, 1, 2, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 20, 20, 20, 1, 2, 1, 20, 20, 20, 1, 20, 20, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 64 [ , [6, 4], 2, 1, 2, 1, 2, [0, 37, "BKW"], 2, 1, 1, 2, 1, 1, 20, 1, 2, 20, 1, 1, 2, 1, 1, 1, 20, 20, 20, 20, 20, 20, 20, [0, 18, "Be"], 1, 1, 20, 20, 20, [0, 12, "D1"], 20, 20, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 65 [ , 2, [6, 13], 2, [0, 42, "HN"], 2, [0, 39, "GO"], 3, [0, 36, "Gu"], 20, 1, 2, 1, 1, 1, 20, [0, 27, "DaH"], 20, 20, 1, 2, 20, 1, 1, 1, 20, 20, 20, 20, 20, 20, 3, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 66 [ , 2, 1, 2, 1, 2, 3, 3, 3, 1, 20, [0, 33, "DaH"], 20, 1, 1, 2, 3, 2, 20, 20, [0, 24, "DaH"], 1, 20, 1, 1, 1, 20, 20, 20, 20, 20, 3, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 67 [ , 2, 20, [6, 27], 2, [0, 42, "Ha"], 2, 1, 1, 1, 2, 3, 20, 20, 1, 2, 1, 2, 20, 20, 3, 1, 2, 20, 1, 1, 1, 20, 20, 20, 20, 3, 1, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 1, 2, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 68 [ , [6, 4], 2, 1, 2, 3, 2, 1, 2, 1, 2, 2, 1, 20, 20, [0, 30, "ARS"], 20, [0, 27, "DaH"], 20, 20, 1, 20, [0, 23, "DaH"], 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, [0, 11, "Glo"], 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 69 [ , 2, 2, 20, [0, 45, "vEH"], 1, 2, 1, 2, 20, [0, 36, "Bou"], 2, 1, 1, 20, 3, 2, 3, 20, 20, 20, 1, 2, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 2, 20, 1, 1, 20, 20, 1, 20, 20, 3, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 70 [ , 2, [4, 2], 2, 3, 2, [0, 42, "Gu2"], 2, [0, 39, "GB4"], 20, 1, 2, 1, 1, 1, 1, 2, 3, 1, 20, 20, 20, [0, 24, "DaH"], 1, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 2, 20, 20, 1, 1, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 71 [ , 2, 1, 2, 1, 2, 1, 2, 2, 1, 20, [0, 36, "GW2"], 1, 1, 1, 2, [0, 30, "ASR"], 1, 1, 1, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 2, 2, 20, 20, 1, 1, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 72 [ , [6, 4], 2, [22, 3, 1], 2, [0, 45, "Gu1"], [0, 43, "GO"], [0, 42, "Gu2"], 2, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 20, [0, 18, "QR"], 2, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 73 [ , 2, 2, 1, 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 1, 2, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 74 [ , 2, [6, 9], 2, [0, 48, "BB"], 2, 2, 20, [0, 42, "B"], 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, [0, 18, "QR"], 2, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 75 [ , 2, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 20, 1, 2, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 76 [ , [6, 4], 2, [6, 36], 2, [0, 48, "Bo3"], 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 20, 1, 1, 1, 1, 2, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 20, [0, 18, "GaO"], 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 77 [ , 2, 2, 1, 2, 1, 2, 1, 2, 20, 1, 1, 1, 1, 1, 2, 1, 2, 20, 20, 1, 1, 1, 2, 20, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 78 [ , 2, [6, 13], 1, 2, 1, 2, 1, 2, 1, 20, 1, 1, 1, 1, 2, 1, 2, 20, 20, 20, 1, 1, 2, 20, 20, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 79 [ , 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 20, 1, 1, 1, 2, 1, 2, 1, 20, 20, 20, 1, 2, 20, 20, 20, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 1, 2, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 80 [ , [6, 4], 20, 1, 2, 1, 2, 1, 2, 1, 2, 20, 20, 1, 1, 2, 20, [0, 36, "DaH"], 1, 2, 20, 20, 20, [0, 30, "DaH"], 2, 20, 20, 20, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 1, 2, 20, 20, 1, 20, 20, 20, 1, 2, 20, 20, 1, 20, 1, 2, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 81 [ , 2, 2, 20, [22, 4, 1], 20, [0, 51, "XBC"], 20, [0, 48, "BE"], 20, [0, 45, "XBC"], 20, 20, 20, 1, 2, 20, 3, 2, [0, 32, "DaH"], 20, 20, 20, 3, [0, 26, "BZ"], 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 1, 2, 20, 20, 20, 1, 20, 20, 20, [0, 14, "XBC"], 20, 20, 20, 1, 20, [0, 11, "XBC"], 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 82 [ , 2, 2, 20, 3, 1, 2, 20, 3, 20, 3, 1, 20, 20, 20, [0, 42, "NBC"], 20, 3, 2, 2, 20, 20, 20, 3, 1, 1, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 2, 1, 20, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, [0, 8, "BE"], 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 83 [ , 2, [6, 9], 20, 1, 1, 2, 20, 3, 20, 1, 1, 1, 20, 20, 3, 20, 1, 2, 2, 1, 20, 20, 3, 2, 1, 2, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 2, 1, 1, 20, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20, [0, 12, "XX"], 1, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 84 [ , [6, 4], 2, 1, 20, 1, 2, 1, 2, 1, 20, 1, 1, 1, 20, 3, 20, 20, [0, 36, "DaH"], [0, 34, "DaH"], 1, 1, 20, 3, [0, 28, "BZ"], 20, [0, 26, "BZ"], 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 20, 20, 20, [0, 21, "GaO"], 1, 1, 1, 20, 20, 20, 1, 20, 20, 1, 1, 20, 20, 3, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 85 [ , 2, 2, 1, 2, 20, [0, 54, "XX"], 1, 2, 1, 2, 20, [0, 45, "BEx"], 1, 2, 3, 1, 20, 3, 2, 20, [0, 32, "DaH"], [0, 31, "DaH"], 3, 3, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 20, 20, 3, 1, 2, 1, 1, 20, 20, 20, [0, 15, "XX"], 20, 20, 1, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, [0, 9, "XX"], 20, 20, 20, 1, 20, [0, 7, "BE"], 20, 20, 20, [0, 6, "BE"], 20, 1, 20, 1, 20, 1, 20, 20, 20], #V n = 86 [ , 2, 2, 1, 2, 20, 3, 20, [0, 50, "BE"], 20, [0, 47, "XX"], 20, 1, 20, [0, 44, "XX"], 2, 1, 2, 1, 2, 1, 1, 2, 3, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 20, 1, 1, 2, 20, [0, 17, "XX"], 1, 20, 20, 1, 20, 20, 20, [0, 14, "XX"], [0, 13, "XX"], 20, 1, 20, 20, [0, 11, "XX"], 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, [0, 5, "BE"], 20, 1, 20, 1, 20, 20, 20], #V n = 87 [ , 2, [6, 9], 20, [0, 57, "HHY"], 20, 3, 1, 2, 1, 2, 20, 20, 1, 1, 2, 20, [0, 38, "DaH"], 20, [0, 36, "DaH"], 1, 2, [0, 32, "DaH"], 3, 20, 1, 2, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 20, 1, 2, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, [0, 12, "X6"], 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, [0, 8, "BE"], 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 88 [ , [6, 4], 2, 1, 2, 2, 3, 1, 2, 1, 2, 1, 20, 20, [0, 45, "XX"], [0, 44, "X6a"], 1, 2, 20, 1, 1, 2, 2, 2, 20, 20, [0, 28, "BZ"], 20, 20, [0, 26, "BZ"], [0, 25, "XX"], 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 20, [0, 21, "GaO"], 1, 1, 1, 20, [0, 16, "XX"], 20, 20, 1, 20, 20, 1, 2, 20, 1, 20, 20, 1, 20, [0, 10, "XX"], 20, 20, 1, 20, 20, 20, 3, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 89 [ , 2, 2, 1, 2, 2, 1, 1, 2, 1, 2, [0, 47, "BE3"], 1, 20, 1, 2, 1, 2, 1, 20, 1, 2, [0, 33, "DaH"], 2, 1, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 20, 20, [0, 15, "XX"], 20, 20, [0, 14, "X6u"], 20, 20, 1, 20, 20, 1, 1, 20, 20, 20, [0, 9, "XX"], 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 90 [ , 2, 2, 1, 2, [0, 57, "X"], 2, 1, 2, 1, 2, 1, 20, [0, 46, "XX"], 20, [0, 45, "X6a"], 1, 2, 20, [0, 37, "DaH"], 20, [0, 36, "DaH"], 1, 2, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 2, [0, 17, "XX"], [0, 16, "X6"], 20, 20, 1, 20, 20, 1, 1, 20, 20, [0, 12, "X6"], 20, 20, [0, 11, "XX"], 1, 20, 20, 1, 20, 20, 20, [0, 8, "XX"], 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 91 [ , 2, [6, 13], 20, [0, 60, "XX"], 1, 2, 20, [0, 54, "dB"], 20, [0, 51, "XX"], [0, 48, "BE3"], 1, 1, 20, 3, 1, 2, [0, 38, "DaH"], 3, 20, 3, 20, [0, 33, "DaH"], 1, 1, 1, 20, 1, 2, 20, 1, 2, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 2, 1, 1, 20, 20, 20, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 92 [ , [6, 4], 3, 2, 3, 2, [0, 57, "X3a"], 20, 3, 20, 3, 1, 20, [0, 47, "XX"], [0, 46, "X6a"], 3, 20, [0, 42, "DaH"], 1, 2, 20, 3, 1, 1, 1, 1, 1, 1, 20, [0, 28, "BZ"], 20, 20, [0, 26, "BZ"], 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 1, 2, 20, 1, 1, 20, 20, 20, [0, 15, "X6u"], 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, [0, 10, "Ed2"], 20, 20, [0, 9, "X6u"], 20, 20, 1, 20, 20, 20, [0, 7, "EB3"], 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 93 [ , 2, 1, 2, 1, 2, 2, 20, 3, 20, 3, 2, 1, 1, 2, 3, 20, 3, 1, 2, 20, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 1, 2, 20, 20, [0, 17, "X6u"], 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, [0, 12, "X6"], 20, 20, [0, 11, "X6u"], 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 94 [ , 2, 2, [6, 27], 2, [0, 60, "XX"], 2, 2, 3, 2, 1, 2, 20, [0, 48, "X"], [0, 47, "X6a"], 2, 20, 3, 1, 2, 20, 20, [0, 36, "DaH"], 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 1, 2, 20, 20, 1, 20, [0, 16, "X6"], 20, 20, [0, 15, "X6u"], 20, 20, 20, 1, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 95 [ , 2, 2, 1, 2, 1, 2, 2, 3, [7, 252], 20, [0, 51, "X6a"], 2, 1, 1, 2, 20, 3, 20, [0, 40, "DaH"], 1, 20, 3, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 20, 1, 2, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 1, 2, 1, 20, 20, 1, 1, 20, 20, 3, 20, 20, 20, 20, 1, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 20, [0, 6, "EB3"], 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 96 [ , [6, 4], [6, 9], 20, [22, 4, 1], 2, [0, 60, "X6a"], [0, 57, "GB1"], 1, 1, 2, 1, 2, 20, [0, 48, "X"], [0, 47, "X"], 2, 3, [0, 41, "DaH"], 3, 1, 2, 3, 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 2, 20, [0, 26, "BZ"], 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, [0, 24, "ACG"], 20, 1, 20, 20, [0, 17, "X6u"], 1, 20, 1, 20, 20, 20, 20, 20, 1, 1, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 97 [ , 2, 2, 1, 1, 2, 2, 2, 2, [7, 257], [0, 53, "X6a"], 20, [0, 51, "X6a"], 20, 1, 2, 2, 1, 2, 3, [0, 39, "DaH"], [0, 38, "GW2"], 2, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 2, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 3, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 20, 20, 1, 1, 1, 20, 20, [0, 11, "Ed2"], 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 98 [ , 2, 2, 1, 2, [0, 63, "Gu1"], 2, 2, 2, 1, 2, 20, 3, 1, 20, [0, 48, "X"], [0, 45, "DaH"], 2, [0, 42, "DaH"], 3, 3, 3, [0, 37, "GW2"], 20, 20, 20, 20, 20, 1, 1, 1, 1, 1, 2, 1, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 3, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 20, 20, 1, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 99 [ , 2, 2, 1, 2, 1, 2, 2, [0, 57, "GB1"], 20, [0, 54, "X6a"], 20, 1, 1, 2, 3, 1, 2, 3, 3, 3, 3, 3, 2, 20, 20, 20, 20, 20, 1, 1, 1, 1, 2, 1, 2, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 20, 3, 20, [0, 19, "VE"], 20, 20, 1, 20, [0, 17, "X6u"], 20, 1, 20, [0, 15, "X6u"], 20, 20, 20, 20, 20, 1, 1, 1, 20, 1, 20, 20, 1, 20, 20, [0, 9, "XB"], 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 100 [ , [6, 4], [6, 9], 20, [0, 66, "Bel"], 20, [0, 63, "EB1"], [0, 60, "GO2"], 3, [0, 55, "Gu"], 3, 2, 20, 1, 2, 2, 20, [0, 45, "DaH"], 2, 3, 3, 3, 3, [0, 36, "BZ"], 20, 20, 20, 20, 20, 20, 1, 1, 1, 2, 2, [0, 28, "BZ"], 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 20, 3, 1, 1, 20, 20, 20, [0, 18, "D1"], 1, 20, 20, [0, 16, "BZ"], 1, 20, 20, 20, 20, 20, 20, 1, 1, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 101 [ , 2, 2, 1, 2, 1, 2, 3, 2, 2, 3, [0, 53, "X6a"], 20, 20, [0, 51, "XX"], 2, 1, 2, [0, 43, "GW2"], 1, 1, 1, 2, 1, 1, 20, 20, 20, 20, 20, 20, 1, 1, 2, 2, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 20, 3, 20, [0, 20, "VE"], 1, 20, 20, 1, 20, [0, 17, "Vx"], 20, 1, 20, 1, 20, 20, 20, 20, 20, 20, 1, 1, 2, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 102 [ , 2, 2, 1, 2, 1, 2, 2, 2, 2, 1, 1, 2, 20, 1, 2, 1, 2, 3, 1, 1, 1, 2, 20, 1, 1, 20, 20, 20, 20, 20, 20, 1, 2, 2, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 20, 20, 3, [0, 21, "VE"], 1, 20, 1, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 20, 20, 1, 2, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 103 [ , 2, 2, 1, 2, 1, 2, 2, 2, [0, 57, "MTS"], 2, 1, 2, 20, 20, [0, 51, "X6a"], 1, 2, 1, 1, 1, 1, 2, 2, 20, 1, 2, 20, 20, 20, 20, 20, 20, [0, 34, "Glo"], 2, 2, 20, 1, 2, 20, 20, 1, 2, 20, 20, 20, 20, 3, 1, 20, 1, 20, [0, 19, "VE"], 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 20, 20, [0, 14, "Glo"], 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 20, [0, 6, "EB3"], 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 104 [ , [6, 4], [6, 13], 20, [0, 69, "Bel"], 20, [0, 66, "GO"], 2, [0, 60, "DGM"], 2, [0, 56, "BET"], 20, [0, 54, "ARS"], 2, 20, 3, 20, [0, 48, "DaH"], 2, [0, 43, "DaH"], 1, 1, 2, [0, 38, "BZ"], 20, 20, [0, 36, "BZ"], 20, 20, 20, 20, 20, 20, 3, [0, 33, "Glo"], [0, 30, "BZ"], 20, 20, [0, 28, "BZ"], 20, 20, 20, [0, 26, "BZ"], 20, 20, 20, 20, 3, [0, 22, "BZ"], 1, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 20, 3, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 105 [ , 2, 3, 1, 2, 1, 2, [0, 63, "Gu"], 2, 2, 3, 20, 3, [0, 53, "XX"], 20, 3, 20, 3, [0, 45, "DaH"], 3, 20, [0, 42, "DaH"], [0, 41, "DaH"], 1, 1, 20, 1, 1, 20, 20, 20, 20, 20, 3, 3, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 3, 1, 20, [0, 21, "VE"], 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 3, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 106 [ , 2, 1, 1, 2, 1, 2, 3, 2, [0, 59, "MTS"], 1, 2, 1, 1, 2, 3, 20, 3, 3, 2, 20, 3, 3, 20, 1, 1, 20, 1, 1, 20, 20, 20, 20, 3, 3, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 20, 3, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 107 [ , 2, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 20, [0, 54, "XX"], [0, 53, "X6a"], 2, [0, 49, "GW2"], 3, 1, 2, 20, 3, 3, 2, 20, 1, 2, 20, 1, 2, 20, 20, 20, 3, 3, 2, 20, 1, 2, 20, 1, 1, 20, 20, 1, 2, 20, 1, 2, 20, 1, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 2, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 108 [ , [6, 4], 2, 20, [22, 4, 1], 20, [0, 69, "EB1"], 2, [0, 63, "GB1"], 2, [0, 58, "GB4"], [0, 57, "BZ"], 20, 1, 2, [0, 52, "X6a"], 1, 2, 2, [0, 45, "BZ"], 2, 3, 1, 2, 20, 20, [0, 38, "BZ"], 20, 20, [0, 36, "BZ"], 20, 20, 20, 3, 3, [0, 32, "BZ"], 20, 20, [0, 30, "BZ"], 20, 20, 1, 1, 20, 20, [0, 26, "BZ"], 20, 20, [0, 24, "BZ"], 20, 20, [0, 22, "BZ"], 1, 20, 20, [0, 20, "BZ"], [0, 19, "VE"], 20, 20, 20, [0, 18, "BZ"], 1, 20, 20, [0, 16, "BZ"], 20, 1, 20, 20, 20, [0, 14, "BZ"], 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 20, 20, [0, 7, "EB3"], 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 109 [ , 2, [6, 9], 20, 3, 1, 2, 2, 3, 2, 1, 2, 1, 20, [0, 54, "X6a"], 2, 1, 2, 2, 1, 2, 1, 20, [0, 41, "XX"], 1, 20, 1, 1, 20, 1, 1, 20, 20, 3, 3, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, [0, 10, "LX"], 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 110 [ , 2, 2, 1, 1, 1, 2, [0, 66, "GO2"], 3, [0, 62, "MTS"], 1, 2, 1, 2, 1, 2, 1, 2, 2, 2, [0, 45, "DaH"], 2, [0, 42, "BZ"], 3, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 20, [0, 7, "Vx"], 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 111 [ , 2, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 20, [0, 54, "X6a"], 20, [0, 51, "DaH"], 2, 2, 1, 2, 1, 1, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 20, 1, 20, 1, 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 2, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20], #V n = 112 [ , [6, 4], 2, 1, 2, 20, [0, 72, "EB1"], 2, 1, 2, 20, [0, 60, "BZ"], [0, 58, "ARS"], [0, 57, "BZ"], 20, 3, 20, 3, [0, 50, "DaH"], 2, 2, [0, 45, "BZ"], 20, [0, 42, "BZ"], [0, 41, "Vx"], 20, [0, 40, "BZ"], 20, 20, [0, 38, "BZ"], 20, 20, [0, 36, "BZ"], 20, 20, [0, 34, "BZ"], 20, 20, [0, 32, "BZ"], 20, 20, [0, 30, "BZ"], 20, 20, 20, [0, 28, "BZ"], 20, 20, [0, 26, "BZ"], 20, 20, [0, 24, "BZ"], 20, 20, [0, 22, "BZ"], 20, 1, 20, [0, 20, "BZ"], 1, 20, 20, 20, 1, 20, 1, 20, 1, 20, 20, [0, 15, "BZ"], 20, 20, [0, 14, "BZ"], 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, [5, 55], 20, 1, 20, 20, 20], #V n = 113 [ , 2, [6, 9], 20, [0, 75, "Bel"], 20, 3, [0, 68, "GW2"], 1, 2, 2, 3, 3, 3, 2, 3, 1, 1, 1, 2, 2, 3, [0, 43, "Vx"], 3, 3, 20, 3, 20, 20, 3, 20, 20, 3, 20, 20, 3, 20, 20, 3, 20, 20, 1, 2, 20, 20, 3, 20, 20, 3, 20, 20, 3, 1, 20, 1, 20, 20, 1, 1, 20, [0, 19, "VE"], 20, 20, 20, [0, 18, "BZ"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 20, [0, 12, "BZ"], 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20], #V n = 114 [ , 2, 2, 1, 2, [0, 73, "Gu1"], 3, 2, 1, 2, 2, 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 3, 1, 1, 1, 20, 1, 2, 20, 1, 2, 20, 3, [0, 35, "Vx"], 20, 3, [0, 33, "Vx"], 20, 1, 2, 20, 20, [0, 30, "XBZ"], 20, 20, 3, [0, 27, "Vx"], 20, 1, 1, 20, 1, 20, 1, 20, [0, 22, "XBZ"], 20, 20, 1, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, [0, 15, "Vx"], 20, 20, [0, 14, "Vx"], 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20], #V n = 115 [ , 2, 2, 1, 2, 2, 3, [0, 69, "GW2"], 1, 2, [0, 63, "Bou"], 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 2, [0, 43, "Ed"], [0, 42, "Vx"], [0, 41, "Vx"], 20, [0, 40, "Vx"], 20, 20, [0, 38, "Vx"], 20, 1, 1, 20, 1, 1, 20, 20, [0, 32, "Vx"], 20, 20, 3, [0, 29, "Vx"], 20, 1, 1, 20, 20, [0, 26, "Vx"], [0, 25, "Ed"], 20, [0, 24, "Vx"], 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 1, 20, 20, 1, 20, 1, 20, 20, 20, [0, 12, "Vx"], 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20], #V n = 116 [ , [6, 4], 2, 1, 2, 2, 2, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 2, [0, 45, "Vx"], 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, [0, 28, "Vx"], 1, 20, 1, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 20, 20, 1, 20, [5, 42], 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20], #V n = 117 [ , 2, [6, 13], 20, [22, 4, 1], 2, 2, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 2, 1, 2, [0, 43, "Ed"], 1, 1, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, [0, 30, "Vx"], 1, 20, 1, 20, [0, 27, "XB"], 20, 1, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20], #V n = 118 [ , 2, 3, 1, 2, 2, [7, 338], 1, 1, 2, 1, 2, 1, 1, 2, 2, 1, 1, 1, 2, 2, [0, 48, "XB"], 20, [0, 45, "XB"], 1, 20, [0, 42, "XB"], 1, 20, [0, 40, "XB"], 20, 20, [0, 38, "XB"], 20, 20, [0, 36, "XB"], 20, 20, [0, 34, "XB"], 20, 20, [0, 32, "XB"], 20, 1, 20, [0, 29, "XB"], 20, [0, 28, "Vx"], 1, 20, 20, [0, 26, "XB"], [0, 25, "Ed"], 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 20, 1, 20, 20, 1, 1, 20, [0, 15, "Ed"], 20, 20, 1, 20, [0, 13, "Ed"], 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20], #V n = 119 [ , 2, 1, 1, 2, 2, 2, 1, 1, 2, 1, 2, 1, 1, 2, 2, 20, 1, 1, 2, 2, 2, 2, 3, [0, 44, "Vx"], [0, 43, "Ed"], 1, 20, 1, 1, 1, 20, 3, [0, 37, "Vx"], 20, 1, 2, 20, 3, [0, 33, "Vx"], 20, 3, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 2, 20, 20, 20, 1, 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20], #V n = 120 [ , [6, 4], 2, 1, 2, [0, 78, "Gu1"], [0, 75, "GO"], 20, 1, 2, 20, [0, 66, "ARS"], 20, 1, 2, 2, 20, 20, 1, 2, 2, 2, 2, 1, 1, 1, 20, [0, 42, "Vx"], 20, 1, 1, 2, 1, 1, 20, 20, [5, 30], 20, 1, 1, 20, 1, 20, [0, 31, "Ed"], 20, [0, 30, "BZ"], 1, 20, 1, 20, [0, 27, "Ed"], 20, [0, 26, "Vx"], 1, 20, 20, [0, 24, "BZ"], 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 20, [5, 41], 20, 20, 1, 1, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20], #V n = 121 [ , 2, 2, 20, [0, 81, "sim"], 2, 2, 20, 20, [0, 72, "dB"], 2, 3, 20, 20, [0, 63, "BCH"], 2, 20, 20, 20, [0, 57, "DaH"], 2, 2, [0, 48, "BZ"], [0, 46, "Vx"], [0, 45, "Vx"], [0, 44, "Vx"], [0, 43, "Var"], 1, 20, 20, 1, 2, 20, [0, 38, "Vx"], 1, 20, 3, 1, 20, [0, 34, "Vx"], 1, 20, [0, 32, "XB"], 1, 20, 1, 20, [0, 29, "Ed"], 20, [0, 28, "Ed"], 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, [0, 23, "BCH"], 20, 20, 20, 20, [0, 21, "BCH"], 1, 20, 20, 20, 3, 20, 20, 20, 1, 2, 1, 20, 20, 20, [0, 14, "BCH"], 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 2, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, [0, 3, "Ham"], 20, 20, 20], #V n = 122 [ , 2, [6, 9], 20, 3, 2, 2, 2, 20, 3, 2, 3, 20, 20, 1, 2, 20, 20, 20, 1, 2, [0, 51, "DaH"], 3, 1, 1, 1, 1, 20, [0, 42, "Vx"], 20, 20, [0, 41, "NBC"], [0, 39, "Vx"], 1, 20, [0, 37, "Ed"], 1, 20, [0, 35, "Ed"], 1, 20, [0, 33, "Ed"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 25, "Ed"], 20, 1, 20, 20, 1, 1, 20, 20, 20, 3, [0, 20, "Vx"], 1, 20, 20, 1, 20, 20, 20, 20, [0, 17, "XBC"], 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 20, [0, 11, "NBC"], 20, 1, 20, 20, 1, 20, 20, 20, 20, [0, 8, "DaH"], 20, 20, 20, 20, 20, 1, 20, 20, 20, [0, 5, "NBC"], 20, 1, 20, 1, 20, 20, 20, 20], #V n = 123 [ , 2, 2, 20, 1, 2, 2, 2, 20, 3, 2, 2, 20, 20, 20, [0, 63, "X"], 1, 20, 20, 20, [0, 57, "DaH"], 3, 1, 2, [0, 46, "Vx"], [0, 45, "Vx"], [0, 44, "Var"], 1, 1, 20, 20, 3, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 31, "Ed"], 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 20, 3, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 124 [ , [6, 4], 2, 2, 20, [0, 81, "Bo1"], 2, [0, 75, "BZ"], 20, 3, 2, 2, 1, 20, 20, 3, 1, 1, 20, 20, 3, 3, 2, [0, 48, "Vx"], 1, 1, 1, 20, [0, 43, "Ed"], 1, 20, 1, 2, 1, 20, [0, 38, "BZ"], 1, 20, [0, 36, "BZ"], 1, 20, [0, 34, "BZ"], 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, [0, 27, "Ed"], 20, [0, 26, "Ed"], 1, 20, 20, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 125 [ , 2, 2, 2, 20, 3, 2, 2, 20, 1, 2, [0, 68, "GW2"], 1, 1, 20, 3, 1, 1, 1, 20, 3, 1, 2, 1, 2, [0, 46, "Vx"], [0, 45, "Var"], 1, 1, 20, [0, 42, "Ed"], 20, [0, 41, "Vx"], 20, [0, 39, "Ed"], 1, 20, [0, 37, "Ed"], 1, 20, [0, 35, "Ed"], 1, 20, [0, 33, "Var"], 20, 1, 1, 20, 20, [0, 30, "BZ"], [0, 29, "Ed"], 20, [0, 28, "BZ"], 1, 20, 1, 20, 1, 20, 20, [0, 24, "BZ"], 20, 20, 1, 1, 20, 20, [0, 21, "X"], 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, [0, 16, "Ed"], 20, [0, 15, "Ed"], 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, [0, 10, "BZ"], 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 126 [ , 2, [6, 9], [22, 3, 1], 2, 1, 2, 2, [0, 73, "GB1"], 20, [0, 72, "Br2"], 2, [0, 66, "BZ"], 1, 2, 3, 1, 1, 1, 2, 3, 1, 2, 20, [0, 48, "BZ"], 1, 1, 20, [0, 44, "Ed"], 1, 1, 20, 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 2, 20, 1, 20, 1, 20, [0, 19, "Var"], 20, 20, 1, 20, 20, [0, 17, "BE3"], 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 20, [0, 12, "X"], 20, 20, 20, 1, 20, 1, 20, 20, 20, [0, 9, "X"], 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 127 [ , 2, 2, 1, 2, 20, [0, 81, "GW2"], 2, 2, 20, 3, [0, 69, "GW2"], 1, 20, [0, 65, "X"], 1, 1, 1, 1, 2, 3, 1, 2, 2, 3, [0, 47, "Vx"], [0, 46, "Var"], 1, 1, 20, [0, 43, "Ed"], 1, 20, [0, 41, "Vx"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 2, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, [0, 23, "X"], 20, 20, 1, 20, [0, 20, "X"], 1, 20, 20, 20, [0, 18, "X"], 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 20, [0, 13, "Ed"], 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 128 [ , [6, 4], 2, 2, [6, 11], 2, 3, [0, 78, "GO2"], 2, 20, 3, 3, 1, 1, 1, 2, 1, 1, 1, 2, 3, 1, 2, [0, 50, "VE"], 1, 1, 1, 20, [0, 45, "Ed"], 1, 1, 20, [0, 42, "BZ"], 1, 20, [0, 40, "BZ"], [0, 39, "Var"], 20, [0, 38, "BZ"], [0, 37, "Ed"], 20, [0, 36, "BZ"], [0, 35, "Var"], 20, [0, 34, "BZ"], 1, 20, 20, [0, 32, "BZ"], 20, 20, 1, 1, 20, 1, 20, [0, 27, "Ed"], 20, 1, 20, [0, 25, "XB"], 20, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 129 [ , 2, 2, 2, 1, 2, 3, 3, 2, 2, 3, 1, 1, 1, 2, [0, 65, "XX"], 20, 1, 1, 2, 2, 1, 2, 1, 2, [0, 48, "Vx"], [0, 47, "Var"], 1, 1, 20, [0, 44, "Ed"], 1, 1, 20, [0, 41, "Vx"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 33, "Var"], 20, 1, 1, 20, 20, 1, 2, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 20, 20, [0, 23, "Vx"], 1, 20, 20, [0, 21, "X"], 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 130 [ , 2, [6, 13], [6, 10], 2, [0, 84, "Bo1"], 2, 2, [0, 76, "DGM"], [0, 74, "DG4"], 3, 20, 1, 1, 2, 2, 20, 20, 1, 2, 2, 1, 2, [0, 51, "VE"], [0, 50, "VE"], 1, 1, 20, [0, 46, "Ed"], 1, 1, 20, [0, 43, "Ed"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 20, [0, 30, "BZ"], 20, 20, [0, 28, "BZ"], 1, 20, 20, [0, 26, "BZ"], 1, 20, 20, [0, 24, "BZ"], 20, 1, 20, [0, 22, "Ed"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, [0, 17, "XX"], 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 131 [ , 2, 3, 1, 2, 2, 2, 2, 3, 2, 2, 20, 20, 1, 2, 2, 20, 20, 20, [0, 63, "DaH"], 2, 1, 2, 1, 1, 2, [0, 48, "Var"], 1, 1, 20, [0, 45, "VE"], 1, 1, 20, 1, 1, 20, 1, 2, 20, 1, 2, 20, 1, 1, 20, 1, 1, 20, 20, 1, 2, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, [0, 16, "Ed"], 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 132 [ , [6, 4], 2, 2, [6, 11], 2, 2, 2, 3, [0, 75, "X"], 2, 1, 20, 20, [0, 69, "X"], 2, 20, 20, 20, 3, [0, 60, "DaH"], 20, [0, 57, "DaH"], [0, 52, "Vx"], [0, 51, "VE"], [0, 50, "VE"], 1, 20, [0, 47, "Var"], 1, 1, 20, [0, 44, "BZ"], 1, 20, [0, 42, "BZ"], [0, 41, "VE"], 20, [0, 40, "BZ"], 20, 20, [0, 38, "BZ"], 20, 20, [0, 36, "BZ"], [0, 35, "Var"], 20, 1, 1, 20, 20, [0, 32, "BZ"], 20, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 23, "VE"], 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, [0, 18, "Ed"], 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 133 [ , 2, 2, 2, 1, 2, [0, 84, "GO"], [0, 81, "GW2"], 2, 1, 2, 1, 2, 20, 1, 2, 20, 20, 20, 3, 3, 2, 3, 1, 1, 1, 2, 1, 1, 20, [0, 46, "VE"], 1, 1, 20, [0, 43, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, [0, 27, "Var"], 20, 1, 20, [0, 25, "XB"], 20, 1, 20, 1, 20, 1, 20, 20, [0, 21, "VE"], 20, [0, 20, "XX"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 134 [ , 2, 2, [6, 27], 2, [0, 87, "Bo3"], 2, 2, 2, 20, [0, 75, "XX"], 1, 2, 20, 20, [0, 69, "XX"], 20, 20, 20, 3, 1, 2, 3, 2, [0, 52, "VE"], [0, 51, "VE"], [0, 50, "VE"], 20, 1, 1, 1, 20, [0, 45, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 20, 1, 2, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 19, "Var"], 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 135 [ , 2, [6, 9], 1, 2, 2, 2, 2, [0, 78, "BZ"], 1, 2, 20, [0, 72, "BZ"], 20, 20, 3, 1, 20, 20, 3, [0, 61, "DaH"], [0, 60, "DaH"], 3, [0, 54, "BZ"], 1, 1, 2, 1, 20, [0, 48, "BZ"], [0, 47, "VE"], 1, 1, 20, 1, 1, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 1, 20, 20, 1, 2, 20, 1, 2, 20, 20, [0, 30, "BZ"], 20, 20, 1, 1, 20, 20, [0, 26, "BZ"], 1, 20, 20, [0, 24, "BZ"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 136 [ , [6, 4], 2, 20, [6, 55], 2, [0, 86, "GO"], 2, 1, 1, 2, 20, 3, 1, 20, 3, 1, 2, 20, 3, 3, 3, 3, 3, [0, 53, "VE"], [0, 52, "VE"], [0, 51, "VE"], 20, [0, 49, "Var"], 1, 1, 20, [0, 46, "BZ"], [0, 45, "Var"], 20, [0, 44, "BZ"], [0, 43, "VE"], 20, [0, 42, "BZ"], 20, 20, [0, 40, "BZ"], 20, 20, [0, 38, "BZ"], 20, 20, [0, 36, "BZ"], [0, 35, "VE"], 20, 20, [0, 34, "BZ"], 20, 20, [0, 32, "BZ"], 20, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 23, "VE"], 20, [0, 22, "VE"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, [0, 17, "VE"], 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 137 [ , 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 3, 1, 2, 3, 1, 2, 20, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 20, [0, 48, "Vx"], [0, 47, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 138 [ , 2, 2, 2, 20, [0, 90, "Bo3"], 2, 2, 2, 20, [0, 78, "Bou"], 2, 1, 20, [0, 71, "XX"], 3, 20, [0, 66, "DaH"], 20, 3, 1, 2, 2, [0, 55, "Vx"], [0, 54, "Vx"], [0, 53, "VE"], [0, 52, "VE"], [0, 51, "VE"], [0, 50, "Var"], 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 21, "VE"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 139 [ , 2, [6, 9], [6, 19], 2, 3, 2, 2, 2, 2, 3, 2, 2, 1, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 20, [0, 49, "VE"], 1, 1, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 1, 20, 20, 1, 2, 20, 1, 1, 20, 20, 1, 2, 20, 20, 1, 2, 20, 1, 20, [0, 25, "VE"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, [0, 18, "VE"], 20, 1, 20, 20, [0, 16, "VE"], 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 140 [ , [6, 4], 2, 1, 2, 1, 2, [0, 87, "Koh"], [0, 82, "GB4"], 2, 3, 2, 2, 20, [0, 72, "XX"], 2, 1, 2, 1, 2, 1, 2, 2, 2, [0, 55, "Vx"], [0, 54, "BZ"], [0, 53, "VE"], [0, 52, "VE"], [0, 51, "Var"], 1, 1, 20, [0, 48, "BZ"], [0, 47, "Var"], 20, [0, 46, "BZ"], 20, 20, [0, 44, "BZ"], 20, 20, [0, 42, "BZ"], 20, 20, [0, 40, "BZ"], 20, 20, [0, 38, "BZ"], 20, 20, 1, 1, 20, 20, [0, 34, "BZ"], 20, 20, [0, 32, "BZ"], [0, 31, "Var"], 20, 20, [0, 30, "BZ"], 20, 20, 20, [0, 28, "BZ"], 20, 20, [0, 26, "BZ"], 1, 20, 20, [0, 24, "VE"], 20, 1, 20, 1, 20, 1, 20, 20, [0, 20, "VE"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, [0, 15, "BZ"], 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, [0, 10, "BZ"], 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 141 [ , 2, 2, 2, [6, 20], 20, [0, 90, "GW2"], 2, 2, [0, 81, "X"], 1, 2, 2, 20, 3, [0, 71, "X6a"], 1, 2, [0, 66, "DaH"], [0, 65, "DaH"], 20, [0, 63, "DaH"], [0, 60, "DaH"], 2, 1, 1, 1, 1, 1, 20, [0, 50, "VE"], [0, 49, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 23, "VE"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 142 [ , 2, 2, 2, 3, 2, 3, 2, 2, 3, 1, 2, 2, [0, 73, "MTS"], 1, 2, 20, [0, 69, "DaH"], 3, 3, 20, 3, 3, 2, [0, 56, "Vx"], [0, 55, "Vx"], 1, 2, [0, 52, "Var"], 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, [0, 30, "XBZ"], 1, 20, 20, [0, 28, "Vx"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 22, "Var"], 20, 1, 20, 1, 20, 20, [0, 19, "Var"], 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 143 [ , 2, [6, 13], [6, 27], 1, 2, 1, 2, [0, 84, "DGM"], 1, 1, 2, 2, 1, 20, [0, 72, "X6a"], 20, 3, 1, 2, 20, 3, 1, 2, 1, 1, 20, [0, 54, "BZ"], 1, 20, [0, 51, "VE"], 1, 1, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 20, 1, 2, 20, 1, 2, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 144 [ , [6, 4], 3, 2, 2, [0, 93, "Gu1"], 20, [0, 90, "GO2"], 3, 1, 1, 2, [0, 78, "BZ"], 2, [0, 73, "XX"], 3, 20, 3, 1, 2, 20, 3, 20, [0, 60, "BZ"], 2, [0, 56, "Vx"], [0, 55, "Vx"], 1, 2, 1, 1, 20, [0, 50, "BZ"], [0, 49, "Var"], 20, [0, 48, "BZ"], 20, 20, [0, 46, "BZ"], 20, 20, [0, 44, "BZ"], 20, 20, [0, 42, "BZ"], 20, 20, [0, 40, "BZ"], 20, 20, [0, 38, "BZ"], 20, 20, 20, [0, 36, "BZ"], 20, 20, [0, 34, "BZ"], 20, 20, [0, 32, "BZ"], 1, 20, 1, 20, [0, 29, "Var"], 20, 1, 20, [0, 27, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 20, [0, 6, "BZ"], 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 145 [ , 2, 2, 2, 2, 2, 2, 3, 2, 20, 1, 2, 3, [0, 75, "MTS"], 2, 3, 1, 1, 1, 2, 20, 3, 20, 3, [0, 58, "Vx"], 1, 1, 20, [0, 54, "Vx"], 20, [0, 52, "VE"], [0, 51, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 31, "Var"], 20, 1, 1, 20, 20, 1, 1, 20, 20, [0, 26, "VE"], 20, [0, 25, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, [0, 21, "VE"], 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 146 [ , 2, 2, 2, [6, 25], 2, 2, 3, [0, 85, "Zwa"], 2, 20, [0, 82, "ARS"], 3, 2, [0, 74, "XX"], 1, 1, 1, 1, 2, [0, 64, "DaH"], 3, 20, 3, 2, [0, 57, "Vx"], [0, 56, "Vx"], [0, 55, "Var"], 1, 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, [0, 30, "VE"], 1, 20, 20, [0, 28, "VE"], 1, 20, 1, 20, 1, 20, 20, [0, 24, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 147 [ , 2, 2, [6, 27], 1, 2, [0, 93, "GO"], 2, 1, 2, 20, 3, 2, 2, 2, [0, 73, "X6a"], 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 20, [0, 54, "Vx"], [0, 53, "VE"], 1, 1, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 1, 20, 20, 1, 2, 20, 1, 2, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, [0, 18, "VE"], 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 148 [ , [6, 4], [6, 9], 3, 2, [0, 96, "Bo3"], 2, 2, 1, 2, 20, 3, 2, [0, 77, "MTS"], [0, 75, "XX"], 2, 20, [0, 72, "DaH"], 1, 2, 1, 2, 1, 1, 2, 2, [0, 57, "Vx"], [0, 56, "Var"], [0, 55, "Vx"], 1, 1, 20, [0, 52, "BZ"], [0, 51, "Var"], 20, [0, 50, "BZ"], 20, 20, [0, 48, "BZ"], 20, 20, [0, 46, "BZ"], 20, 20, [0, 44, "BZ"], 20, 20, [0, 42, "BZ"], 20, 20, [0, 40, "BZ"], 20, 20, 1, 1, 20, 20, [0, 36, "BZ"], 20, 20, [0, 34, "BZ"], 20, 20, [0, 32, "BZ"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 23, "VE"], 20, 1, 20, 1, 20, 20, [0, 20, "VE"], 20, 1, 20, 1, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 149 [ , 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 3, 2, 2, 1, 2, 20, 3, 20, [0, 71, "DaH"], 1, 2, 1, 1, 2, 2, 1, 1, 1, 20, [0, 54, "Var"], [0, 53, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 29, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 22, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 20, [0, 16, "VE"], 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 150 [ , 2, 2, 2, [22, 4, 1], 2, 2, [0, 93, "GO2"], [0, 88, "GB4"], [0, 87, "Gu"], [0, 84, "MTS"], 1, 2, [0, 78, "MTS"], 1, 2, 20, 3, 20, 3, 20, [0, 66, "GW2"], 1, 1, 2, [0, 60, "BZ"], 1, 2, [0, 56, "Vx"], 1, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 31, "Var"], 20, [0, 30, "VE"], 1, 20, 20, [0, 28, "VE"], 20, [0, 27, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 151 [ , 2, 2, 2, 1, 2, 2, 3, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 20, 3, 1, 1, 1, 1, 2, 1, 1, 2, 1, 20, [0, 55, "Var"], 1, 1, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 20, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 26, "VE"], 20, [0, 25, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, [0, 19, "Var"], 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 152 [ , [6, 4], [6, 9], [6, 32], 2, [0, 99, "Bo3"], 2, 3, 1, 2, 2, 1, 2, 2, 1, 2, 2, [0, 73, "Da0"], [0, 72, "Da0"], 3, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 20, [0, 54, "BZ"], [0, 53, "Var"], 20, [0, 52, "BZ"], 20, 20, [0, 50, "BZ"], 20, 20, [0, 48, "BZ"], 20, 20, [0, 46, "BZ"], 20, 20, [0, 44, "BZ"], 20, 20, [0, 42, "BZ"], 20, 20, [0, 40, "BZ"], 20, 20, 20, [0, 38, "BZ"], 20, 20, [0, 36, "BZ"], 20, 20, [0, 34, "BZ"], 20, 20, [0, 32, "BZ"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 153 [ , 2, 2, 1, 2, 1, 2, 2, 1, 2, [0, 86, "MTS"], 20, [0, 84, "BZ"], 2, 20, [0, 78, "BZ"], 2, 2, 3, 3, 1, 1, 1, 1, 2, 2, 20, [0, 60, "BZ"], 1, 1, 2, 1, 1, 1, 20, 1, 1, 20, 3, [0, 49, "Vx"], 20, 3, [0, 47, "Vx"], 20, 3, [0, 45, "Vx"], 20, 3, [0, 43, "Vx"], 20, 3, [0, 41, "Vx"], 20, 1, 1, 20, 20, 3, [0, 37, "Vx"], 20, 3, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 24, "Var"], 20, 1, 20, 1, 20, 20, [0, 21, "VE"], 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 154 [ , 2, 2, 2, [0, 102, "Bel"], 2, [0, 99, "GO"], 2, 1, 2, 1, 2, 3, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 20, [0, 55, "VE"], [0, 54, "Var"], 1, 20, [0, 52, "Vx"], [0, 51, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 20, [0, 40, "XBZ"], [0, 39, "VE"], 20, 1, 1, 20, 1, 20, [0, 35, "VE"], 20, [0, 34, "Vx"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 155 [ , 2, 2, 2, 1, 2, 3, 2, 1, 2, 1, 2, 3, 2, 1, 2, 2, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 20, [0, 53, "Var"], 1, 1, 20, [0, 50, "Vx"], 1, 20, [0, 48, "Vx"], 1, 20, [0, 46, "Vx"], 1, 20, [0, 44, "Vx"], 1, 20, [0, 42, "Vx"], 1, 20, 1, 1, 20, 20, [0, 38, "Vx"], 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 31, "Var"], 20, [0, 30, "Var"], 20, [0, 29, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 23, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 156 [ , [6, 4], [6, 13], [6, 36], 2, [0, 102, "Bo3"], 3, [0, 96, "GO2"], 1, 2, 20, [0, 87, "DaH"], 1, 2, 1, 2, [0, 78, "DaH"], 2, 2, 20, 1, 2, 20, 1, 2, 2, 20, 1, 1, 1, 2, 20, [0, 56, "VE"], [0, 55, "Var"], 1, 1, 20, [0, 52, "Vx"], 1, 1, 20, [0, 49, "VE"], 1, 20, [0, 47, "VE"], 1, 20, [0, 45, "VE"], 1, 20, [0, 43, "VE"], 1, 20, [0, 41, "Var"], 20, [0, 40, "Vx"], 1, 20, 1, 20, [0, 37, "VE"], 20, [0, 36, "VE"], 1, 20, 1, 20, [0, 33, "Var"], 20, [0, 32, "VE"], 1, 20, 1, 20, 1, 20, 20, [0, 28, "VE"], 20, [0, 27, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, [0, 20, "Var"], 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 157 [ , 2, 3, 1, 2, 2, 3, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 20, [0, 72, "GW2"], 1, 20, [0, 69, "GW2"], 2, 20, 20, 1, 1, 2, 1, 1, 1, 20, [0, 54, "Var"], 1, 1, 20, [0, 51, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 26, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, [0, 22, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 20, [0, 18, "VE"], 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 158 [ , 2, 2, 2, [0, 105, "Bel"], 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1, 20, 20, 1, 2, 20, [0, 57, "VE"], [0, 56, "Var"], 1, 1, 20, [0, 53, "VE"], 1, 1, 20, [0, 50, "XB"], 1, 20, [0, 48, "XB"], 1, 20, [0, 46, "XB"], 1, 20, [0, 44, "XB"], 1, 20, [0, 42, "XB"], 1, 20, 1, 20, [0, 39, "VE"], 20, [0, 38, "VE"], 1, 20, 1, 20, [0, 35, "VE"], 20, [0, 34, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 25, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 159 [ , 2, 2, 2, 1, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 20, 1, 1, 2, 2, 1, 2, 20, 20, [0, 62, "GW2"], 1, 1, 1, 20, [0, 55, "Var"], 1, 1, 20, [0, 52, "VE"], 1, 1, 20, [0, 49, "Var"], 1, 20, [0, 47, "VE"], 1, 20, [0, 45, "VE"], 1, 20, [0, 43, "Var"], 1, 20, 1, 20, [0, 40, "VE"], 1, 20, 1, 20, 1, 20, [0, 36, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 160 [ , [6, 4], 2, [4, 2], 2, [0, 105, "Gu"], 2, [0, 99, "GO2"], 2, [0, 96, "DaH"], 2, [0, 90, "ARS"], 2, [0, 87, "DaH"], 20, [0, 84, "DaH"], 1, 2, [0, 78, "DaH"], 2, [0, 75, "DaH"], 1, 20, 1, 2, 2, 1, 2, 20, 20, 3, 20, [0, 58, "VE"], [0, 57, "Var"], 1, 1, 20, [0, 54, "VE"], 1, 1, 20, [0, 51, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 41, "VE"], 1, 20, 1, 20, 1, 20, [0, 37, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 31, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 24, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 161 [ , 2, [6, 9], 1, 2, 2, [0, 102, "GO"], 1, 2, 3, 2, 1, 2, 3, 20, 3, 1, 2, 3, [0, 77, "DaH"], 3, 20, [0, 73, "GW2"], 20, [0, 72, "GW2"], 2, 1, 2, 2, 20, 3, 1, 1, 1, 20, [0, 56, "Var"], 1, 1, 20, [0, 53, "VE"], 1, 1, 20, [0, 50, "VE"], 1, 20, [0, 48, "VE"], 1, 20, [0, 46, "VE"], 1, 20, [0, 44, "VE"], 1, 20, [0, 42, "Var"], 1, 20, 1, 20, 1, 20, [0, 38, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 33, "Var"], 20, [0, 32, "VE"], 1, 20, 20, [0, 30, "VE"], 20, [0, 29, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, [0, 21, "VE"], 20, 1, 20, 20, [0, 19, "VE"], 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 162 [ , 2, 2, 20, [22, 4, 1], 2, 2, 2, [0, 99, "DaH"], 3, [0, 93, "DaH"], 20, [0, 90, "BZ"], 3, 20, 1, 1, 2, 2, 3, 3, 20, 1, 20, 3, [0, 71, "GW2"], 1, 2, 2, 20, 3, [0, 60, "Vx"], [0, 59, "VE"], [0, 58, "Var"], 1, 1, 20, [0, 55, "VE"], 1, 1, 20, [0, 52, "VE"], 1, 1, 20, [0, 49, "Var"], 1, 20, [0, 47, "Var"], 1, 20, [0, 45, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 39, "VE"], 1, 20, 1, 20, 1, 20, [0, 35, "Var"], 20, [0, 34, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 28, "VE"], 20, [0, 27, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 163 [ , 2, 2, 20, 1, 2, 2, 2, 3, 3, 3, 20, 3, 2, 1, 20, 1, 2, 2, 2, 3, 20, 20, [0, 73, "GW2"], 3, 3, 1, 2, 2, 20, 3, 1, 1, 1, 20, [0, 57, "Var"], 1, 1, 20, [0, 54, "VE"], 1, 1, 20, [0, 51, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 43, "VE"], 1, 20, 1, 20, [0, 40, "VE"], 1, 20, 1, 20, 1, 20, [0, 36, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, [0, 23, "VE"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 164 [ , [6, 4], 2, 2, 20, [0, 108, "Bo3"], 2, [0, 102, "ARS"], 3, 3, 3, [0, 91, "MTS"], 3, 2, 1, 2, 20, [0, 84, "DaH"], 2, [0, 78, "GW2"], 1, 2, 20, 3, 3, 3, 1, 2, 2, 2, 3, 20, [0, 60, "Var"], [0, 59, "Var"], 1, 1, 20, [0, 56, "VE"], 1, 1, 20, [0, 53, "VE"], 1, 1, 20, [0, 50, "Var"], 1, 20, [0, 48, "VE"], 1, 20, [0, 46, "VE"], 1, 20, [0, 44, "Var"], 1, 20, 1, 20, [0, 41, "VE"], 1, 20, 1, 20, 1, 20, [0, 37, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 26, "VE"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 165 [ , 2, [6, 9], 2, 20, 3, 2, 3, 3, 3, 2, 2, 3, [0, 89, "GW2"], 20, [0, 86, "DaH"], 20, 3, [0, 81, "DaH"], 3, 20, [0, 75, "GW2"], 20, 3, 3, 3, 20, [0, 69, "GW2"], [0, 67, "GW2"], 2, 1, 1, 1, 1, 20, [0, 58, "Var"], 1, 1, 20, [0, 55, "VE"], 1, 1, 20, [0, 52, "VE"], 1, 1, 20, [0, 49, "Var"], 1, 20, [0, 47, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 20, 1, 20, [0, 38, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 25, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 166 [ , 2, 2, [6, 10], 2, 3, 2, 3, 2, 3, 2, 2, 1, 2, 20, 3, 20, 3, 3, 2, 1, 2, 20, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 2, 1, 1, 20, [0, 57, "VE"], 1, 1, 20, [0, 54, "VE"], 1, 1, 20, [0, 51, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 45, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 39, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 33, "Var"], 20, [0, 32, "Var"], 20, [0, 31, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, [0, 22, "VE"], 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 167 [ , 2, 2, 1, 2, 1, 2, 2, 2, 1, 2, [0, 93, "MTS"], 2, [0, 90, "GW2"], 1, 2, 20, 3, 3, 2, 1, 2, 20, 20, 1, 2, 20, [0, 70, "GW2"], 2, 2, 1, 1, 1, 2, 20, [0, 59, "Var"], 1, 1, 20, [0, 56, "VE"], 1, 1, 20, [0, 53, "VE"], 1, 1, 20, [0, 50, "Var"], 1, 20, [0, 48, "Var"], 1, 20, [0, 46, "Var"], 1, 20, 1, 20, [0, 43, "VE"], 1, 20, 1, 20, [0, 40, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 35, "Var"], 20, [0, 34, "VE"], 1, 20, 1, 20, 1, 20, 20, [0, 30, "VE"], 20, [0, 29, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, 1, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 168 [ , [6, 4], 2, 2, [6, 47], 2, [22, 6, 1], 2, 2, 2, [0, 96, "GW2"], 1, 2, 3, 1, 2, 2, 3, 1, 2, 1, 2, [0, 74, "GW2"], 20, 20, [0, 73, "GW2"], 1, 1, 2, [0, 67, "GW2"], 1, 1, 1, 2, 1, 1, 20, [0, 58, "VE"], 1, 1, 20, [0, 55, "VE"], 1, 1, 20, [0, 52, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 44, "Var"], 1, 20, 1, 20, [0, 41, "Var"], 1, 20, 1, 20, 1, 20, [0, 37, "Var"], 20, [0, 36, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 28, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, [0, 24, "VE"], 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 20, [0, 6, "BZ"], 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 169 [ , 2, [6, 13], 2, 1, 2, 3, 2, 2, 2, 2, 1, 2, 1, 1, 2, 2, 2, 1, 2, 20, [0, 78, "GW2"], 2, 20, 20, 3, 1, 1, 2, 1, 2, 1, 1, 2, [0, 61, "VE"], [0, 60, "Var"], 1, 1, 20, [0, 57, "VE"], [0, 56, "Var"], 1, 20, [0, 54, "VE"], 1, 1, 20, [0, 51, "Var"], 1, 20, [0, 49, "VE"], 1, 20, [0, 47, "VE"], 1, 20, [0, 45, "Var"], 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 20, 1, 20, [0, 38, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 27, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 170 [ , 2, 3, [6, 10], 2, [0, 111, "Bo3"], 3, 2, [0, 103, "GW2"], [0, 99, "Gu"], [0, 97, "MTS"], 1, 2, 2, 1, 2, [0, 87, "DaH"], 2, 1, 2, [0, 79, "GW2"], 3, 2, 20, 20, 1, 20, [0, 72, "GW2"], [0, 71, "GW2"], 20, [0, 67, "GW2"], 20, 1, 2, 1, 1, 20, [0, 59, "VE"], 1, 1, 1, 20, 1, 1, 20, [0, 53, "VE"], 1, 1, 20, [0, 50, "Var"], 1, 20, [0, 48, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 39, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, [0, 21, "VE"], 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 171 [ , 2, 2, 1, 2, 2, 3, 2, 3, 2, 2, 1, 2, 2, 20, [0, 90, "BZ"], 1, 2, [0, 84, "BZ"], [0, 83, "DaH"], 3, 3, 2, 20, 20, 20, 1, 2, 3, 2, 3, 20, 20, [0, 65, "GW2"], [0, 62, "VE"], [0, 61, "Var"], 1, 1, 20, [0, 58, "VE"], [0, 57, "Var"], 1, 20, [0, 55, "VE"], 1, 1, 20, [0, 52, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 46, "Var"], 1, 20, 1, 20, [0, 43, "VE"], 1, 20, 1, 20, [0, 40, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 26, "Var"], 20, 1, 20, 1, 20, 20, [0, 23, "VE"], 20, 1, 20, 1, 20, 20, 20, 1, 20, [0, 19, "Var"], 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 172 [ , [6, 4], 2, 2, [6, 55], 2, 1, 2, 2, 2, 2, 20, [0, 96, "XBZ"], [0, 93, "GW2"], 20, 3, 20, [0, 87, "DaH"], 3, 3, 1, 1, 2, 20, 20, 20, 20, [0, 73, "GW2"], 3, [0, 69, "GW2"], 3, 20, 20, 3, 1, 1, 20, [0, 60, "VE"], 1, 1, 1, 20, [0, 56, "Var"], 1, 20, [0, 54, "VE"], 1, 1, 20, [0, 51, "Var"], 1, 20, [0, 49, "Var"], 1, 20, [0, 47, "Var"], 1, 20, 1, 20, [0, 44, "VE"], 1, 20, 1, 20, [0, 41, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 35, "Var"], 20, [0, 34, "VE"], 20, [0, 33, "VE"], 20, [0, 32, "VE"], 20, [0, 31, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 173 [ , 2, 2, 2, 1, 2, 2, [0, 108, "Koh"], 2, 2, 2, 20, 3, 3, [0, 91, "GW2"], 3, 20, 3, 2, 3, 1, 1, 2, 2, 20, 20, 20, 3, 2, 3, 3, [0, 66, "Vx"], 20, 3, [0, 63, "VE"], [0, 62, "Var"], 1, 1, 20, [0, 59, "VE"], [0, 58, "Var"], 1, 1, 20, 1, 1, 20, [0, 53, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 45, "Var"], 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 37, "Var"], 20, [0, 36, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 30, "VE"], 20, [0, 29, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, [0, 25, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 174 [ , 2, [6, 9], [6, 27], 2, [0, 114, "Gu1"], 2, 3, 2, 2, [0, 100, "MTS"], 2, 3, 3, 1, 2, 2, 3, 2, 2, 1, 1, 2, 2, 20, 20, 20, 3, [0, 72, "GW2"], 3, 1, 1, 20, 3, 1, 1, 20, [0, 61, "VE"], 1, 1, 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "VE"], 1, 1, 20, [0, 52, "Var"], 1, 20, [0, 50, "VE"], 1, 20, [0, 48, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 38, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 175 [ , 2, 2, 1, 2, 3, 2, 3, [0, 106, "GW2"], [0, 103, "GW2"], 2, 2, 3, 1, 1, 2, 2, 1, 2, 2, 2, 1, 2, 2, 1, 20, 20, 3, 3, 3, 1, 1, 1, 1, 2, [0, 63, "Var"], 1, 1, 20, [0, 60, "VE"], [0, 59, "Var"], 1, 1, 20, [0, 56, "Var"], 1, 20, [0, 54, "VE"], 1, 1, 20, [0, 51, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 46, "VE"], 1, 20, 1, 20, [0, 43, "VE"], 1, 20, 1, 20, [0, 40, "Var"], 20, [0, 39, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 28, "VE"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, [0, 22, "VE"], 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 176 [ , [6, 4], 2, 20, [6, 55], 2, [0, 112, "GO"], 2, 3, 2, [0, 101, "MTS"], 2, 2, 1, 1, 2, [0, 90, "DaH"], 20, [0, 87, "DaH"], 2, 2, 20, [0, 81, "DaH"], 2, 1, 2, 20, 3, 3, 1, 20, 1, 1, 1, 2, 1, 20, [0, 62, "VE"], 1, 1, 1, 20, [0, 58, "Var"], 1, 1, 20, 1, 1, 20, [0, 53, "VE"], 1, 1, 20, 1, 20, [0, 49, "VE"], 1, 20, [0, 47, "Var"], 1, 20, 1, 20, [0, 44, "BZ"], 1, 20, 1, 20, [0, 41, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 27, "Var"], 20, 1, 20, 1, 20, 20, [0, 24, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 177 [ , 2, 2, 2, 3, 2, 2, 2, 2, 2, 1, 2, 2, 1, 1, 2, 3, 1, 1, 2, [0, 84, "DaH"], 2, 3, 2, 1, 2, 20, 3, 3, 1, 2, 20, 1, 1, 2, [0, 64, "Var"], 1, 1, 20, [0, 61, "VE"], [0, 60, "Var"], 1, 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "VE"], 1, 1, 20, [0, 52, "Var"], 1, 20, [0, 50, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 45, "Var"], 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 35, "Var"], 20, [0, 34, "Var"], 20, [0, 33, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 178 [ , 2, [6, 9], 2, 1, 2, 2, [0, 110, "Koh"], 2, [0, 105, "GW2"], 1, 2, 2, 1, 1, 2, 1, 1, 1, 2, 1, 2, 3, 2, 1, 2, 20, 3, 1, 1, 2, 20, 20, 1, 2, 1, 20, [0, 63, "VE"], 1, 1, 1, 20, [0, 59, "Var"], 1, 1, 20, [0, 56, "Var"], 1, 20, [0, 54, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 48, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 37, "Var"], 20, [0, 36, "VE"], 1, 20, 1, 20, 1, 20, 20, [0, 32, "VE"], 20, [0, 31, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 26, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 179 [ , 2, 2, [6, 19], 2, [0, 117, "Bo3"], 2, 2, [0, 108, "GW2"], 2, 1, 2, 2, 1, 1, 2, 1, 1, 1, 2, 20, [0, 84, "GW2"], 1, 2, 1, 2, 2, 3, 20, 1, 2, [0, 69, "Vx"], 20, 20, [0, 68, "GW2"], [0, 65, "Var"], 1, 1, 20, [0, 62, "VE"], [0, 61, "Var"], 1, 1, 20, [0, 58, "Var"], 1, 1, 20, 1, 1, 20, [0, 53, "Var"], 1, 20, [0, 51, "Var"], 1, 20, [0, 49, "Var"], 1, 20, 1, 20, [0, 46, "VE"], 1, 20, 1, 20, [0, 43, "VE"], 1, 20, 1, 20, 1, 20, [0, 39, "Var"], 20, [0, 38, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 30, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, [0, 23, "Var"], 20, 1, 20, 20, [0, 21, "Var"], 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 180 [ , [6, 4], 2, 1, 2, 3, 2, [0, 111, "GO2"], 3, 2, 1, 2, 2, 1, 2, [0, 96, "BZ"], 1, 1, 1, 2, 2, 3, 20, [0, 81, "GW2"], 20, [0, 78, "BZ"], [0, 75, "BZ"], 2, 20, 20, [0, 72, "BZ"], 1, 20, 20, 3, 1, 20, [0, 64, "Var"], 1, 1, 1, 20, [0, 60, "Var"], 1, 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "VE"], 1, 1, 20, [0, 52, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 47, "Var"], 1, 20, 1, 20, [0, 44, "Var"], 1, 20, 1, 20, 1, 20, [0, 40, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 29, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 181 [ , 2, 2, 2, [6, 81], 1, 2, 2, 1, 2, 1, 2, 2, 1, 2, 3, 1, 1, 1, 2, 2, 3, 20, 3, 20, 3, 2, [0, 74, "VE"], 20, 20, 3, 2, 1, 20, 3, [0, 66, "Vx"], 1, 1, 20, [0, 63, "VE"], [0, 62, "Var"], 1, 1, 20, [0, 59, "Var"], 1, 1, 20, [0, 56, "Var"], 1, 20, [0, 54, "VE"], 1, 1, 20, 1, 20, [0, 50, "VE"], 1, 20, [0, 48, "Var"], 1, 20, 1, 20, [0, 45, "Var"], 1, 20, 1, 20, 1, 20, [0, 41, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, [0, 25, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 182 [ , 2, [6, 13], 2, 2, 2, [0, 117, "GO"], 2, 20, [0, 108, "DaH"], 20, [0, 105, "ARS"], [0, 102, "XBZ"], 20, [0, 99, "DaH"], 3, 20, 1, 1, 2, 2, 3, 2, 3, 20, 3, [0, 76, "Vx"], 1, 1, 20, 3, [0, 71, "Vx"], 20, [0, 69, "GW2"], 3, 1, 20, [0, 65, "Var"], 1, 1, 1, 20, [0, 61, "Var"], 1, 1, 20, [0, 58, "Var"], 1, 1, 20, 1, 1, 20, [0, 53, "Var"], 1, 20, [0, 51, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 28, "VE"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 183 [ , 2, 3, [6, 27], 2, 2, 3, 2, 2, 3, 20, 3, 3, 20, 3, 2, 20, 20, 1, 2, 2, 1, 2, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 67, "Vx"], 1, 1, 20, [0, 64, "VE"], [0, 63, "Var"], 1, 1, 20, [0, 60, "VE"], 1, 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 49, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, [0, 43, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 37, "Var"], 20, [0, 36, "Var"], 20, [0, 35, "VE"], 20, [0, 34, "Var"], 20, [0, 33, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 27, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 184 [ , [6, 4], 2, 1, 2, [0, 120, "Gu"], 3, [0, 114, "GO2"], [0, 110, "XB"], 3, 2, 3, 3, 20, 3, 2, 20, 20, 20, [0, 93, "XX"], [0, 89, "DaH"], 2, [0, 84, "XBZ"], 1, 1, 2, 2, 1, 1, 1, 2, [0, 72, "Vx"], 1, 1, 2, 1, 20, [0, 66, "Var"], 1, 1, 1, 20, [0, 62, "Var"], 1, 1, 20, [0, 59, "VE"], 1, 1, 20, [0, 56, "Var"], 1, 20, [0, 54, "Var"], 1, 20, [0, 52, "Var"], 1, 20, [0, 50, "Var"], 1, 20, 1, 20, [0, 47, "VE"], 20, [0, 46, "BZ"], 1, 20, [0, 44, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 39, "Var"], 20, [0, 38, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, [0, 31, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, [0, 24, "Var"], 20, 1, 20, 20, [0, 22, "Var"], 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 185 [ , 2, 2, 2, [6, 81], 2, 2, 3, 2, 2, [0, 107, "MTS"], 3, 3, 1, 1, 2, 1, 20, 20, 3, 3, 2, 3, 1, 1, 2, [0, 78, "Vx"], 20, 1, 1, 2, 1, 20, 1, 2, 1, 1, 1, 20, [0, 65, "VE"], [0, 64, "Var"], 1, 1, 20, [0, 61, "VE"], 1, 1, 20, [0, 58, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 48, "Var"], 1, 20, 1, 20, [0, 45, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 40, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 186 [ , 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 1, 1, 20, 3, 3, 2, 1, 1, 1, 2, 3, 1, 20, 1, 2, 20, [0, 72, "Vx"], 20, [0, 71, "GW2"], 20, [0, 68, "VE"], [0, 67, "Var"], 1, 1, 1, 20, [0, 63, "Var"], 1, 1, 20, [0, 60, "VE"], 1, 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "VE"], 1, 20, [0, 53, "VE"], 1, 20, [0, 51, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 42, "Var"], 20, [0, 41, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, [0, 30, "VE"], 20, 1, 20, 1, 20, 1, 20, 20, [0, 26, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 187 [ , 2, [6, 9], [4, 2], 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 1, 2, 3, 1, 2, 20, 1, 1, 2, 1, 20, 1, 20, [0, 76, "GW2"], 2, 1, 20, 3, 1, 1, 1, 20, [0, 66, "VE"], [0, 65, "Var"], 1, 1, 20, [0, 62, "VE"], 1, 1, 20, [0, 59, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 49, "VE"], 1, 20, 1, 20, 1, 1, 20, 1, 20, [0, 43, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 1, 20, 20, [0, 29, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 188 [ , [6, 4], 2, 1, 2, 2, [0, 120, "Koh"], 2, 2, [0, 111, "BZ"], [0, 109, "MTS"], 2, 2, 20, 1, 2, 20, 1, 2, 3, 1, 2, 20, 20, 1, 2, 1, 1, 20, 1, 2, 2, 20, [0, 72, "Vx"], 3, 20, [0, 69, "VE"], [0, 68, "Var"], 1, 1, 1, 20, [0, 64, "Var"], 1, 1, 20, [0, 61, "VE"], 1, 1, 20, [0, 58, "Var"], 1, 20, [0, 56, "BZ"], 1, 20, [0, 54, "BZ"], 1, 20, [0, 52, "BZ"], 1, 20, [0, 50, "Var"], 1, 20, 1, 20, [0, 47, "VE"], 20, [0, 46, "BZ"], 1, 20, [0, 44, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 37, "Var"], 20, [0, 36, "Var"], 20, [0, 35, "Var"], 20, 1, 20, 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 189 [ , 2, 2, 20, [22, 4, 1], 2, 2, 2, [0, 114, "BZ"], 2, 2, [0, 108, "BZ"], 2, 20, 20, [0, 102, "BZ"], 20, 20, [0, 96, "BZ"], 3, 20, [0, 90, "BZ"], 20, 20, 20, [0, 84, "BZ"], [0, 80, "Vx"], 1, 1, 20, [0, 77, "GW2"], 2, [0, 73, "Var"], 1, 2, 1, 1, 1, 20, [0, 67, "VE"], [0, 66, "Var"], 1, 1, 20, [0, 63, "VE"], 1, 1, 20, [0, 60, "VE"], 1, 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "Var"], 1, 20, [0, 53, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, [0, 45, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 39, "Var"], 20, [0, 38, "VE"], 1, 20, 1, 20, 1, 20, 20, [0, 34, "VE"], 20, [0, 33, "Var"], 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, [0, 28, "Var"], 20, 1, 20, 1, 20, 20, [0, 25, "Var"], 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 190 [ , 2, 2, 2, 1, 2, 2, 2, 3, 2, 2, 3, 2, 20, 20, 3, 20, 20, 3, 2, 20, 3, 1, 20, 20, 3, 1, 20, 1, 1, 1, 2, 1, 20, [0, 72, "Vx"], 20, [0, 70, "VE"], [0, 69, "Var"], 1, 1, 1, 20, [0, 65, "Var"], 1, 1, 20, [0, 62, "VE"], 1, 1, 20, [0, 59, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 51, "VE"], 1, 20, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 41, "Var"], 20, [0, 40, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 191 [ , 2, [6, 9], 2, 20, [0, 126, "BKW"], 2, 2, 1, 2, [0, 111, "MTS"], 1, 2, 1, 20, 3, 1, 20, 3, 2, 20, 3, [0, 86, "Vx"], 1, 20, 3, 1, 1, 20, 1, 1, 2, [0, 74, "Var"], [0, 73, "Vx"], 1, 1, 1, 1, 20, [0, 68, "VE"], [0, 67, "Var"], 1, 1, 20, [0, 64, "VE"], 1, 1, 20, [0, 61, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 49, "VE"], 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 42, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 27, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 192 [ , [6, 4], 2, [6, 32], 2, 3, [0, 123, "GO"], [0, 120, "GO2"], 2, [0, 114, "BZ"], 2, 2, [0, 108, "XBZ"], 1, 1, 2, 1, 1, 2, [0, 95, "X6a"], 1, 2, 1, 20, [0, 85, "BZ"], 3, 1, 1, 1, 20, 1, 2, 1, 1, 20, [0, 72, "Vx"], [0, 71, "Var"], [0, 70, "Var"], 1, 1, 1, 20, [0, 66, "Var"], 1, 1, 20, [0, 63, "VE"], 1, 1, 20, [0, 60, "BZ"], 1, 20, [0, 58, "BZ"], [0, 57, "Var"], 20, [0, 56, "BZ"], [0, 55, "Var"], 20, [0, 54, "BZ"], 1, 20, [0, 52, "BZ"], 1, 20, [0, 50, "Var"], 1, 20, 20, [0, 48, "BZ"], [0, 47, "VE"], 20, [0, 46, "BZ"], 1, 20, 1, 20, [0, 43, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 193 [ , 2, 2, 1, 2, 3, 2, 3, [0, 116, "XB"], 3, 2, [0, 110, "XB"], 3, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 3, 20, 1, 1, 1, 20, [0, 79, "GW2"], [0, 75, "Var"], [0, 74, "Vx"], 1, 1, 1, 1, 20, [0, 69, "VE"], [0, 68, "Var"], 1, 1, 20, [0, 65, "VE"], 1, 1, 20, [0, 62, "VE"], 1, 1, 20, [0, 59, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 53, "VE"], 1, 20, [0, 51, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 44, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, [0, 30, "VE"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, [0, 24, "Var"], 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 194 [ , 2, 2, 2, [6, 81], 3, 2, 2, 2, 1, 2, 2, 3, 1, 1, 2, 1, 1, 2, [0, 96, "X6a"], 1, 2, 1, 1, 2, 1, 2, 20, 1, 1, 2, 3, 1, 1, 20, [0, 73, "VE"], [0, 72, "Var"], [0, 71, "Vx"], 1, 1, 1, 20, [0, 67, "Var"], 1, 1, 20, [0, 64, "VE"], 1, 1, 20, [0, 61, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 48, "Vx"], 1, 20, 1, 20, [0, 45, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 39, "Var"], 20, [0, 38, "Var"], 20, [0, 37, "Var"], 20, [0, 36, "Var"], 20, [0, 35, "Var"], 20, 1, 20, 1, 20, 20, 20, 1, 1, 1, 20, 20, [0, 29, "Var"], 20, 1, 20, 1, 20, 20, [0, 26, "Var"], 20, 1, 20, 1, 20, 20, 20, 1, 20, [0, 22, "VE"], 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 195 [ , 2, [6, 13], 2, 2, 1, 2, 2, 2, 2, [0, 114, "Ma"], 2, 1, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 2, [0, 84, "Vx"], 20, 20, 1, 2, 2, [0, 76, "Vx"], [0, 75, "Vx"], 1, 1, 1, 1, 20, [0, 70, "VE"], [0, 69, "Var"], 1, 1, 20, [0, 66, "VE"], 1, 1, 20, [0, 63, "VE"], 1, 1, 20, [0, 60, "VE"], 1, 20, [0, 58, "VE"], 1, 20, [0, 56, "VE"], 1, 20, [0, 54, "VE"], 1, 20, [0, 52, "VE"], 1, 20, 1, 20, [0, 49, "VE"], 1, 20, 1, 20, [0, 46, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 41, "Var"], 20, [0, 40, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 34, "VE"], 20, [0, 33, "Var"], 20, 20, 20, 1, 1, 1, 20, 1, 20, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 196 [ , [6, 4], 3, [6, 36], 2, 2, [0, 126, "GO"], 2, 2, [0, 116, "MTS"], 2, 2, 20, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 2, 1, 1, 20, 20, [0, 82, "GW2"], [0, 80, "GW2"], 1, 1, 20, [0, 74, "VE"], [0, 73, "Var"], [0, 72, "Vx"], 1, 1, 1, 20, [0, 68, "Var"], 1, 1, 20, [0, 65, "VE"], 1, 1, 20, [0, 62, "VE"], 1, 1, 20, [0, 59, "Var"], 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "Var"], 1, 20, [0, 53, "Var"], 1, 20, 1, 20, [0, 50, "VE"], 1, 20, 1, 20, [0, 47, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 42, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 1, 20, 1, 20, 20, [0, 28, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 197 [ , 2, 2, 1, 2, 2, 3, 2, 2, 1, 2, 2, 2, 20, 1, 2, 20, 1, 2, 2, 1, 2, 20, 1, 2, 2, 20, 1, 2, 20, 3, 3, 2, [0, 76, "Vx"], 1, 1, 1, 1, 20, [0, 71, "Var"], [0, 70, "Var"], 1, 1, 20, [0, 67, "VE"], 1, 1, 20, [0, 64, "VE"], 1, 1, 20, [0, 61, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 51, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 44, "Var"], 20, [0, 43, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 198 [ , 2, 2, 2, [22, 4, 1], [0, 129, "Gu1"], 2, 2, [0, 120, "BZ"], 1, 2, [0, 114, "BZ"], 2, 20, 20, [0, 108, "BZ"], 20, 20, [0, 102, "BZ"], [0, 99, "X6a"], 20, [0, 96, "BZ"], 20, 20, [0, 90, "BZ"], 2, 1, 20, [0, 84, "BZ"], 20, 3, 2, [0, 78, "BZ"], 1, 20, [0, 75, "VE"], [0, 74, "Var"], [0, 73, "Vx"], 1, 1, 1, 20, [0, 69, "Var"], 1, 1, 20, [0, 66, "VE"], 1, 1, 20, [0, 63, "VE"], 1, 1, 20, [0, 60, "Var"], 1, 20, [0, 58, "VE"], 1, 20, [0, 56, "VE"], 1, 20, [0, 54, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 48, "VE"], 1, 20, 1, 20, [0, 45, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, [0, 25, "Var"], 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 199 [ , 2, 2, 2, 2, 2, 2, 2, 3, 2, [0, 117, "Ma"], 3, 2, 20, 20, 3, 20, 20, 3, 3, 20, 3, 20, 20, 1, 2, 20, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 20, [0, 72, "Var"], [0, 71, "Vx"], 1, 1, 20, [0, 68, "VE"], 1, 1, 20, [0, 65, "VE"], 1, 1, 20, [0, 62, "VE"], 1, 1, 20, [0, 59, "Var"], 1, 20, [0, 57, "Var"], 1, 20, [0, 55, "Var"], 1, 20, 1, 20, [0, 52, "VE"], 1, 20, 1, 20, [0, 49, "VE"], 1, 20, 1, 20, [0, 46, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 39, "Var"], 20, [0, 38, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 1, 20, 1, 20, 1, 20, 20, [0, 27, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 200 [ , [6, 4], [6, 9], [6, 40], 2, 2, 2, [0, 126, "BKW"], 2, [0, 119, "MTS"], 2, 2, 2, 1, 20, 3, 1, 20, 3, 3, 20, 3, 1, 20, 20, [0, 90, "XBZ"], [0, 86, "Vx"], 20, 1, 1, 1, 2, 20, [0, 78, "BZ"], [0, 77, "VE"], [0, 76, "Var"], [0, 75, "Var"], 1, 1, 1, 1, 20, [0, 70, "Var"], 1, 1, 20, [0, 67, "VE"], 1, 1, 20, [0, 64, "VE"], 1, 1, 20, [0, 61, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 53, "Var"], 1, 20, 1, 20, [0, 50, "VE"], 1, 20, 1, 20, [0, 47, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 41, "Var"], 20, [0, 40, "VE"], 1, 20, 1, 20, 20, [0, 37, "VE"], 20, [0, 36, "VE"], 20, [0, 35, "Var"], 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 201 [ , 2, 2, 1, 2, 2, [0, 129, "GW2"], 3, 2, 2, [0, 118, "MTS"], 2, 2, 1, 1, 2, 1, 1, 2, 3, 1, 2, 1, 1, 20, 3, 1, 20, 20, 1, 1, 2, 2, 1, 1, 1, 1, 20, [0, 74, "VE"], [0, 73, "Var"], 1, 1, 1, 20, [0, 69, "VE"], 1, 1, 20, [0, 66, "VE"], 1, 1, 20, [0, 63, "VE"], 1, 1, 20, [0, 60, "Var"], 1, 20, [0, 58, "Var"], 1, 20, [0, 56, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 51, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 43, "Var"], 20, [0, 42, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 34, "Var"], 20, 1, 20, 20, 20, 20, 1, 1, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 202 [ , 2, 2, 20, [6, 81], [0, 132, "BKW"], 2, 3, [0, 122, "XB"], 2, 2, [0, 116, "XB"], [0, 114, "XBZ"], 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 3, 1, 1, 20, 20, 1, 2, [0, 80, "Vx"], 20, [0, 78, "Vx"], [0, 77, "Var"], [0, 76, "Vx"], 1, 1, 1, 20, [0, 72, "VE"], [0, 71, "Var"], 1, 1, 20, [0, 68, "VE"], [0, 67, "Var"], 1, 20, [0, 65, "VE"], 1, 1, 20, [0, 62, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 54, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 48, "VE"], 1, 20, 1, 20, 1, 20, [0, 44, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 20, [0, 29, "VE"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, [0, 24, "Var"], 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 203 [ , 2, 2, 20, 3, 2, 2, 2, 1, 2, 2, 2, 3, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 3, 1, 1, 2, 20, 20, [0, 85, "GW2"], 1, 1, 1, 1, 1, 20, [0, 75, "VE"], [0, 74, "Var"], 1, 1, 1, 20, [0, 70, "VE"], 1, 1, 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "VE"], 1, 1, 20, [0, 61, "Var"], 1, 20, [0, 59, "VE"], 1, 20, [0, 57, "VE"], 1, 20, [0, 55, "Var"], 1, 20, 1, 20, [0, 52, "VE"], 1, 20, 1, 20, [0, 49, "VE"], 1, 20, 1, 20, 1, 20, [0, 45, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, 1, 20, 1, 20, 20, [0, 26, "VE"], 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 204 [ , [6, 4], [6, 9], 2, 3, 2, [0, 131, "GW2"], 2, 1, 2, 2, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 20, 20, 3, 2, [0, 80, "Vx"], [0, 79, "Var"], [0, 78, "Var"], [0, 77, "Vx"], 1, 1, 1, 20, [0, 73, "VE"], [0, 72, "Var"], 1, 1, 20, [0, 69, "VE"], [0, 68, "Var"], 1, 1, 20, 1, 1, 20, [0, 63, "VE"], 1, 1, 20, [0, 60, "Var"], 1, 20, [0, 58, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 53, "VE"], 1, 20, 1, 20, [0, 50, "VE"], 1, 20, 1, 20, [0, 47, "Var"], 20, [0, 46, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 20, 20, [0, 28, "Var"], 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 205 [ , 2, 2, 2, 1, 2, 2, [0, 128, "BKW"], 1, 2, [0, 121, "MTS"], 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 20, 1, 1, 2, 1, 20, 3, 2, 1, 1, 1, 1, 20, [0, 76, "VE"], [0, 75, "Var"], 1, 1, 1, 20, [0, 71, "VE"], 1, 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "VE"], 1, 1, 20, [0, 62, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 56, "VE"], 1, 20, [0, 54, "Var"], 1, 20, 1, 20, [0, 51, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 41, "Var"], 20, [0, 40, "Var"], 20, [0, 39, "Var"], 20, [0, 38, "Var"], 20, [0, 37, "Var"], 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 206 [ , 2, 2, [6, 10], 2, [0, 135, "Bo3"], 2, 2, 1, 2, 2, 2, 1, 2, 1, 2, 20, 1, 2, 20, 1, 2, 20, 1, 2, 1, 20, 1, 2, 1, 1, 2, 2, 2, [0, 80, "Var"], [0, 79, "Vx"], [0, 78, "Vx"], 1, 1, 1, 20, [0, 74, "VE"], [0, 73, "Var"], 1, 1, 20, [0, 70, "VE"], [0, 69, "Var"], 1, 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "VE"], 1, 1, 20, [0, 61, "Var"], 1, 20, [0, 59, "Var"], 1, 20, [0, 57, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 48, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 43, "Var"], 20, [0, 42, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 36, "VE"], 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 207 [ , 2, 2, 1, 2, 3, 2, 2, 1, 2, 2, [0, 120, "BZ"], 1, 2, 20, [0, 114, "BZ"], 20, 20, [0, 108, "BZ"], 2, 20, [0, 102, "BZ"], 20, 20, [0, 96, "BZ"], 1, 1, 20, [0, 90, "BZ"], 1, 1, 2, [0, 84, "BZ"], [0, 82, "Vx"], 1, 1, 1, 20, [0, 77, "Var"], [0, 76, "Var"], 1, 1, 1, 20, [0, 72, "VE"], 1, 1, 1, 20, [0, 68, "Var"], 1, 1, 20, 1, 1, 20, [0, 63, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 55, "VE"], 1, 20, 1, 20, [0, 52, "VE"], 1, 20, 1, 20, [0, 49, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 44, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, [0, 34, "Var"], 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, [0, 25, "Var"], 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 208 [ , [6, 4], [6, 13], 2, [6, 87], 1, 2, 2, 20, [0, 126, "DaH"], 2, 3, 20, [0, 117, "DaH"], 20, 3, 20, 20, 3, 2, 20, 3, 20, 20, 3, 1, 1, 1, 1, 1, 1, 2, 3, 1, 2, [0, 80, "Vx"], 1, 1, 1, 1, 20, [0, 75, "VE"], [0, 74, "Var"], 1, 1, 20, [0, 71, "VE"], [0, 70, "Var"], 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "VE"], 1, 1, 20, [0, 62, "Var"], 1, 20, [0, 60, "VE"], 1, 20, [0, 58, "Var"], 1, 20, [0, 56, "Var"], 1, 20, 1, 20, [0, 53, "VE"], 1, 20, 1, 20, [0, 50, "Var"], 1, 20, 1, 20, 1, 20, [0, 46, "Var"], 20, [0, 45, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 20, 20, [0, 27, "VE"], 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 209 [ , 2, 3, 2, 2, 2, [0, 135, "GW2"], 2, 20, 3, [0, 124, "MTS"], 2, 20, 3, 20, 3, 1, 20, 3, [0, 105, "DaH"], 20, 3, 1, 20, 3, 1, 1, 1, 1, 1, 1, 2, 1, 2, [0, 82, "Vx"], 1, 20, [0, 79, "VE"], [0, 78, "Var"], [0, 77, "Vx"], 1, 1, 1, 20, [0, 73, "VE"], 1, 1, 1, 20, [0, 69, "Var"], 1, 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "VE"], 1, 1, 20, [0, 61, "Var"], 1, 20, [0, 59, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 54, "Var"], 1, 20, 1, 20, [0, 51, "Var"], 1, 20, 1, 20, 1, 20, [0, 47, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 210 [ , 2, 2, [6, 10], 2, 2, 3, [0, 132, "Koh"], 2, 3, 2, 2, 1, 2, 1, 2, 1, 1, 2, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, [0, 84, "BZ"], 1, 2, 1, 1, 1, 1, 20, [0, 76, "VE"], [0, 75, "Var"], 1, 1, 20, [0, 72, "VE"], [0, 71, "Var"], 1, 1, 20, [0, 68, "Var"], 1, 1, 20, 1, 1, 20, [0, 63, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 57, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 48, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 41, "Var"], 20, [0, 40, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 211 [ , 2, 2, 1, 2, [0, 138, "Bo3"], 3, 3, [0, 128, "XB"], 1, 2, [0, 122, "XB"], 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 86, "Vx"], 2, [0, 83, "Vx"], [0, 82, "Vx"], 20, [0, 80, "VE"], [0, 79, "Var"], [0, 78, "Vx"], 1, 1, 1, 20, [0, 74, "Var"], 1, 1, 1, 20, [0, 70, "Var"], 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "VE"], 1, 1, 20, [0, 62, "Var"], 1, 20, [0, 60, "Var"], 1, 20, [0, 58, "Var"], 1, 20, 1, 20, [0, 55, "VE"], 1, 20, 1, 20, [0, 52, "VE"], 1, 20, 1, 20, [0, 49, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 43, "Var"], 20, [0, 42, "VE"], 1, 20, 1, 20, 20, [0, 39, "VE"], 20, [0, 38, "VE"], 20, [0, 37, "Var"], 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 20, 1, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 212 [ , [6, 4], 2, 2, [6, 91], 3, 2, 3, 1, 1, 2, 2, [0, 120, "XBZ"], [0, 119, "GW2"], 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, [0, 85, "Vx"], 1, 1, 1, 1, 1, 1, 20, [0, 77, "Var"], [0, 76, "Var"], 1, 1, 20, [0, 73, "VE"], [0, 72, "Var"], 1, 1, 20, [0, 69, "Var"], 1, 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 56, "Var"], 1, 20, 1, 20, [0, 53, "VE"], 1, 20, 1, 20, [0, 50, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 45, "Var"], 20, [0, 44, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 36, "Var"], 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 20, [0, 28, "Var"], 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 213 [ , 2, [6, 9], 2, 2, 2, 2, 2, 1, 2, [0, 127, "MTS"], 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, [0, 84, "Vx"], [0, 83, "Vx"], [0, 82, "Vx"], [0, 81, "Var"], [0, 80, "Var"], [0, 79, "Vx"], 1, 1, 1, 20, [0, 75, "Var"], 1, 1, 1, 20, [0, 71, "Var"], 1, 1, 20, [0, 68, "Var"], 1, 1, 20, 1, 1, 20, [0, 63, "Var"], 1, 20, [0, 61, "Var"], 1, 20, [0, 59, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 54, "Var"], 1, 20, 1, 20, [0, 51, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 46, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 214 [ , 2, 2, [4, 2], 2, 2, 2, 2, 2, [0, 129, "MTS"], 2, 2, 20, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, [0, 86, "Vx"], 1, 1, 1, 1, 1, 1, 20, [0, 78, "Var"], [0, 77, "Vx"], 1, 1, 20, [0, 74, "VE"], [0, 73, "Var"], 1, 1, 20, [0, 70, "Var"], 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "VE"], 1, 1, 20, [0, 62, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 57, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 47, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 215 [ , 2, 2, 1, 2, 2, 2, 2, 2, 1, 2, 2, 20, 20, 1, 2, 20, 1, 2, 20, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, [0, 82, "Var"], [0, 81, "Vx"], 1, 1, 1, 1, 20, [0, 76, "Var"], 1, 1, 1, 20, [0, 72, "Var"], 1, 1, 20, [0, 69, "Var"], 1, 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "VE"], 1, 1, 20, 1, 20, [0, 60, "VE"], 1, 20, [0, 58, "Var"], 1, 20, 1, 20, [0, 55, "VE"], 1, 20, 1, 20, [0, 52, "VE"], 1, 20, 1, 20, [0, 49, "Var"], 20, [0, 48, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 216 [ , [6, 4], 2, 20, [22, 4, 1], 2, [0, 139, "GO"], [0, 135, "BZ"], [0, 132, "BZ"], 1, 2, [0, 126, "BZ"], 20, 20, 20, [0, 120, "BZ"], 20, 20, [0, 114, "BZ"], 20, 20, [0, 108, "BZ"], 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 90, "BZ"], 2, [0, 86, "VE"], 20, [0, 84, "BZ"], 1, 1, 20, [0, 80, "VE"], [0, 79, "Var"], [0, 78, "Vx"], 1, 1, 20, [0, 75, "VE"], [0, 74, "Var"], 1, 1, 20, [0, 71, "VE"], 1, 1, 20, [0, 68, "Var"], 1, 1, 20, 1, 1, 20, [0, 63, "Var"], 1, 20, [0, 61, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 56, "VE"], 1, 20, 1, 20, [0, 53, "VE"], 1, 20, 1, 20, [0, 50, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 43, "Var"], 20, [0, 42, "Var"], 20, [0, 41, "Var"], 20, [0, 40, "Var"], 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 217 [ , 2, [6, 9], 2, 3, 2, 2, 2, 1, 1, 2, 3, 1, 20, 20, 3, 20, 20, 3, 20, 20, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, [0, 88, "VE"], 1, 2, 1, 2, [0, 82, "Vx"], 1, 1, 1, 1, 20, [0, 77, "Var"], 1, 1, 1, 20, [0, 73, "Var"], 1, 1, 20, [0, 70, "VE"], 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "VE"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 59, "VE"], 1, 20, [0, 57, "Var"], 1, 20, 1, 20, [0, 54, "Var"], 1, 20, 1, 20, [0, 51, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 45, "Var"], 20, [0, 44, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, [0, 38, "VE"], 20, [0, 37, "Var"], 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 20, 20, [0, 27, "VE"], 20, 20, 1, 20, [0, 25, "VE"], 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 218 [ , 2, 2, 2, 1, 2, 2, 2, 20, [0, 132, "MTS"], [0, 131, "Ma"], 2, 1, 1, 20, 3, 1, 20, 3, 1, 20, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, [0, 87, "VE"], [0, 86, "VE"], 20, [0, 84, "Vx"], 1, 20, [0, 81, "VE"], [0, 80, "Var"], 1, 1, 1, 20, [0, 76, "VE"], [0, 75, "Var"], 1, 1, 20, [0, 72, "VE"], 1, 1, 20, [0, 69, "VE"], 1, 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "Var"], 1, 20, [0, 62, "Var"], 1, 20, [0, 60, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 47, "Var"], 20, [0, 46, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 1, 20, 20, [0, 36, "Var"], 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 219 [ , 2, 2, [6, 19], 2, [0, 144, "BKW"], 2, 2, 1, 1, 2, 2, 2, 1, 2, 3, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, [0, 89, "Vx"], 1, 1, 2, 1, 2, 1, 1, 1, 20, [0, 79, "VE"], [0, 78, "Var"], 1, 1, 1, 20, [0, 74, "Var"], 1, 1, 20, [0, 71, "VE"], 1, 1, 20, [0, 68, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 58, "VE"], 1, 20, 1, 20, [0, 55, "VE"], 1, 20, 1, 20, [0, 52, "VE"], 1, 20, 1, 20, 1, 20, [0, 48, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 220 [ , [6, 4], 2, 1, 2, 3, 2, [0, 138, "BZ"], 1, 1, 2, [0, 128, "XB"], 2, 20, [0, 122, "XB"], 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 92, "Vx"], 2, [0, 88, "Vx"], [0, 87, "VE"], [0, 86, "VE"], 20, [0, 84, "Vx"], 20, [0, 82, "VE"], [0, 81, "Var"], 1, 1, 1, 20, [0, 77, "VE"], [0, 76, "Var"], 1, 1, 20, [0, 73, "VE"], 1, 1, 20, [0, 70, "VE"], 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "Var"], 1, 20, [0, 63, "VE"], 1, 20, [0, 61, "VE"], 1, 20, [0, 59, "Var"], 1, 20, 1, 20, [0, 56, "VE"], 1, 20, 1, 20, [0, 53, "VE"], 1, 20, 1, 20, 1, 20, [0, 49, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 221 [ , 2, [6, 13], 2, [6, 100], 1, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 1, 1, 1, 1, 20, [0, 80, "VE"], [0, 79, "Var"], 1, 1, 1, 20, [0, 75, "Var"], 1, 1, 20, [0, 72, "VE"], 1, 1, 20, [0, 69, "Var"], 1, 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "Var"], 1, 20, [0, 62, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 57, "Var"], 1, 20, 1, 20, [0, 54, "Var"], 1, 20, 1, 20, 1, 20, [0, 50, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 43, "Var"], 20, [0, 42, "Var"], 20, 1, 20, 1, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 222 [ , 2, 3, 2, 2, 2, [0, 144, "BKW"], 2, 20, [0, 135, "MTS"], [0, 134, "Ma"], 2, [0, 126, "BY"], 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, [0, 91, "Vx"], 2, [0, 88, "Vx"], [0, 87, "VE"], [0, 86, "VE"], 20, [0, 84, "Vx"], [0, 83, "Var"], [0, 82, "Var"], 1, 1, 1, 20, [0, 78, "VE"], [0, 77, "Var"], 1, 1, 20, [0, 74, "VE"], 1, 1, 20, [0, 71, "VE"], 1, 1, 20, [0, 68, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 60, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 51, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 45, "Var"], 20, [0, 44, "Var"], 1, 20, 1, 20, 20, 1, 20, [0, 40, "Var"], 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 223 [ , 2, 2, [6, 27], 2, 2, 3, 2, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 94, "Vx"], 2, [0, 90, "Vx"], 1, 1, 1, 1, 1, 1, 1, 20, [0, 81, "VE"], [0, 80, "Var"], 1, 1, 1, 20, [0, 76, "Var"], 1, 1, 20, [0, 73, "VE"], 1, 1, 20, [0, 70, "VE"], 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "Var"], 1, 20, [0, 63, "Var"], 1, 20, [0, 61, "Var"], 1, 20, 1, 20, [0, 58, "VE"], 1, 20, 1, 20, [0, 55, "VE"], 1, 20, 1, 20, [0, 52, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 47, "Var"], 20, [0, 46, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, 1, 20, 1, 20, 20, 20, 20], #V n = 224 [ , [6, 4], 2, 1, 2, [0, 147, "Bo3"], 3, [0, 141, "BKW"], 1, 1, 2, 2, 20, 1, 1, 2, 20, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, [0, 92, "Vx"], 1, 2, [0, 88, "Vx"], [0, 87, "VE"], [0, 86, "VE"], [0, 85, "VE"], 1, 2, 1, 1, 1, 20, [0, 79, "VE"], [0, 78, "Var"], 1, 1, 20, [0, 75, "VE"], 1, 1, 20, [0, 72, "VE"], 1, 1, 20, [0, 69, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 59, "Var"], 1, 20, 1, 20, [0, 56, "VE"], 1, 20, 1, 20, [0, 53, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 48, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 20, [0, 37, "VE"], 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 20, [5, 111], 20, 1, 20, 20, 20, 20], #V n = 225 [ , 2, 2, 2, [22, 4, 1], 2, 3, 2, 1, 1, 2, [0, 132, "BZ"], 20, 20, 1, 2, 20, 20, [0, 120, "BZ"], 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, [0, 91, "Vx"], [0, 90, "BZ"], 1, 1, 1, 1, 20, [0, 84, "BZ"], 20, [0, 82, "VE"], [0, 81, "Var"], 1, 1, 1, 20, [0, 77, "Var"], 1, 1, 20, [0, 74, "VE"], 1, 1, 20, [0, 71, "VE"], 1, 1, 20, [0, 68, "Var"], 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "VE"], 1, 20, [0, 62, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 57, "Var"], 1, 20, 1, 20, [0, 54, "Var"], 1, 20, 1, 20, 1, 20, [0, 50, "Var"], 20, [0, 49, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20], #V n = 226 [ , 2, [6, 9], 2, 2, 2, 2, 2, 1, 2, [0, 137, "MTS"], 3, 1, 20, 20, [0, 126, "XBZ"], 1, 20, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 96, "Vx"], 2, 2, 3, [0, 89, "Vx"], [0, 88, "Vx"], [0, 87, "Vx"], [0, 86, "Var"], [0, 85, "Var"], 1, 1, 1, 1, 20, [0, 80, "VE"], [0, 79, "Var"], 1, 1, 20, [0, 76, "VE"], 1, 1, 20, [0, 73, "VE"], 1, 1, 20, [0, 70, "VE"], 1, 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 60, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 51, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 20, [0, 27, "VE"], 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20], #V n = 227 [ , 2, 2, [6, 27], 2, 2, 2, 2, 20, [0, 139, "MTS"], 2, 2, 1, 1, 20, 3, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, [0, 94, "VE"], [0, 92, "Vx"], 1, 1, 1, 1, 1, 1, 20, [0, 84, "Vx"], [0, 83, "Var"], [0, 82, "Var"], 1, 1, 1, 20, [0, 78, "Var"], 1, 1, 20, [0, 75, "VE"], 1, 1, 20, [0, 72, "VE"], 1, 1, 20, [0, 69, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 63, "VE"], 1, 20, [0, 61, "Var"], 1, 20, 1, 20, [0, 58, "VE"], 1, 20, 1, 20, [0, 55, "VE"], 1, 20, 1, 20, [0, 52, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 45, "Var"], 20, [0, 44, "Var"], 20, [0, 43, "Var"], 20, [0, 42, "Var"], 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20], #V n = 228 [ , [6, 4], 2, 1, 2, [0, 150, "Bo3"], [0, 146, "GO"], [0, 144, "BKW"], 1, 1, 2, 2, 2, 1, 2, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, [0, 90, "Vx"], [0, 89, "Vx"], [0, 88, "Vx"], [0, 87, "Var"], [0, 86, "Vx"], [0, 85, "Vx"], 1, 1, 1, 20, [0, 81, "VE"], [0, 80, "Var"], 1, 1, 20, [0, 77, "VE"], 1, 1, 20, [0, 74, "VE"], 1, 1, 20, [0, 71, "VE"], 1, 1, 20, [0, 68, "Var"], 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 59, "VE"], 1, 20, 1, 20, [0, 56, "VE"], 1, 20, 1, 20, [0, 53, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 47, "Var"], 20, [0, 46, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20], #V n = 229 [ , 2, 2, 20, [6, 108], 2, 2, 3, 1, 1, 2, [0, 134, "XB"], 2, 20, [0, 128, "XB"], 3, 20, [4, 14], 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 98, "Vx"], [0, 95, "Vx"], 2, [0, 92, "Vx"], 1, 1, 1, 1, 1, 1, 20, [0, 84, "Var"], [0, 83, "Vx"], 1, 1, 1, 20, [0, 79, "Var"], 1, 1, 20, [0, 76, "VE"], 1, 1, 20, [0, 73, "VE"], 1, 1, 20, [0, 70, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 62, "VE"], 1, 20, [0, 60, "Var"], 1, 20, 1, 20, [0, 57, "Var"], 1, 20, 1, 20, [0, 54, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 49, "Var"], 20, [0, 48, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20], #V n = 230 [ , 2, [6, 9], 2, 3, 2, 2, 3, 1, 1, 2, 2, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, [0, 94, "Vx"], 1, 2, [0, 90, "Vx"], [0, 89, "Vx"], [0, 88, "Vx"], [0, 87, "Vx"], 1, 1, 1, 1, 20, [0, 82, "Var"], [0, 81, "Var"], 1, 1, 20, [0, 78, "VE"], 1, 1, 20, [0, 75, "VE"], 1, 1, 20, [0, 72, "VE"], 1, 1, 20, [0, 69, "Var"], 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "Var"], 1, 20, [0, 63, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 58, "Var"], 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, 1, 20, [0, 50, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20], #V n = 231 [ , 2, 2, 2, 1, 2, 2, 1, 1, 1, 2, 2, [0, 132, "BY"], 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, [0, 93, "Vx"], [0, 92, "VE"], 1, 1, 1, 1, 20, [0, 86, "VE"], [0, 85, "Var"], [0, 84, "Vx"], 1, 1, 1, 20, [0, 80, "Var"], 1, 1, 20, [0, 77, "VE"], 1, 1, 20, [0, 74, "VE"], 1, 1, 20, [0, 71, "VE"], 1, 1, 20, [0, 68, "Var"], 1, 20, [0, 66, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 61, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 55, "VE"], 1, 20, 1, 20, 1, 20, [0, 51, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20], #V n = 232 [ , [6, 4], 2, [6, 32], 2, [0, 153, "BvE"], 2, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 2, [0, 90, "Vx"], [0, 89, "Vx"], [0, 88, "Vx"], 1, 1, 1, 1, 20, [0, 83, "Var"], [0, 82, "Vx"], 1, 1, 20, [0, 79, "VE"], 1, 1, 20, [0, 76, "VE"], 1, 1, 20, [0, 73, "VE"], 1, 1, 20, [0, 70, "Var"], 1, 1, 20, 1, 1, 20, 1, 20, [0, 64, "VE"], 1, 20, [0, 62, "Var"], 1, 20, 1, 20, [0, 59, "VE"], 1, 20, 1, 20, [0, 56, "VE"], 1, 20, 1, 20, 1, 20, [0, 52, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20], #V n = 233 [ , 2, 2, 1, 2, 2, 2, 1, 1, 1, 2, 2, 20, 1, 2, 2, 20, 1, 2, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 101, "Vx"], [0, 98, "Vx"], 2, 2, [0, 93, "VE"], [0, 92, "VE"], 1, 1, 1, 20, [0, 87, "VE"], [0, 86, "Var"], [0, 85, "Vx"], 1, 1, 1, 20, [0, 81, "Var"], 1, 1, 20, [0, 78, "VE"], 1, 1, 20, [0, 75, "VE"], 1, 1, 20, [0, 72, "VE"], 1, 1, 20, [0, 69, "Var"], 1, 20, [0, 67, "Var"], 1, 20, [0, 65, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 60, "Var"], 1, 20, 1, 20, [0, 57, "Var"], 1, 20, 1, 20, 1, 20, [0, 53, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 47, "Var"], 20, [0, 46, "Var"], 20, [0, 45, "VE"], 20, [0, 44, "VE"], 20, [0, 43, "VE"], 20, [0, 42, "Var"], 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20], #V n = 234 [ , 2, [6, 13], 2, [22, 4, 1], 2, 2, 1, 1, 1, 2, [0, 138, "BZ"], 20, 20, [0, 132, "BZ"], 2, 1, 20, [0, 126, "BZ"], 1, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, [0, 97, "Vx"], [0, 95, "BZ"], 1, 1, 2, [0, 90, "Vx"], [0, 89, "Vx"], 1, 1, 1, 1, 20, [0, 84, "Var"], 1, 1, 1, 20, [0, 80, "VE"], 1, 1, 20, [0, 77, "VE"], [0, 76, "Var"], 1, 20, [0, 74, "VE"], 1, 1, 20, [0, 71, "Var"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 63, "VE"], 1, 20, 1, 1, 20, 1, 20, [0, 58, "Var"], 1, 20, 1, 20, 1, 20, [0, 54, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 49, "Var"], 20, [0, 48, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20], #V n = 235 [ , 2, 3, 2, 1, 2, 2, 1, 1, 1, 2, 3, 1, 20, 1, 2, 1, 1, 1, 1, 2, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, [0, 99, "Vx"], 2, 2, [0, 94, "Vx"], [0, 93, "VE"], [0, 92, "Vx"], 1, 1, 20, [0, 88, "Var"], [0, 87, "Var"], 1, 1, 1, 20, [0, 83, "VE"], [0, 82, "Var"], 1, 1, 20, [0, 79, "VE"], [0, 78, "Var"], 1, 1, 20, 1, 1, 20, [0, 73, "VE"], 1, 1, 20, [0, 70, "Var"], 1, 20, [0, 68, "Var"], 1, 20, [0, 66, "Var"], 1, 20, [0, 64, "Var"], 1, 20, 1, 20, [0, 61, "VE"], 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 55, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 50, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20], #V n = 236 [ , [6, 4], 2, [6, 36], 2, [0, 156, "Bo3"], [0, 153, "GW2"], 1, 1, 1, 2, 2, 1, 1, 20, [0, 132, "XBZ"], 1, 1, 1, 1, 2, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 2, [0, 103, "Vx"], 2, [0, 98, "Vx"], [0, 96, "Vx"], 1, 1, 1, 2, 1, 1, 1, 1, 20, [0, 86, "VE"], [0, 85, "Var"], 1, 1, 1, 20, [0, 81, "VE"], 1, 1, 1, 20, [0, 77, "Var"], 1, 20, [0, 75, "VE"], 1, 1, 20, [0, 72, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 62, "Var"], 1, 20, 1, 20, [0, 59, "VE"], 1, 20, 1, 20, [0, 56, "Var"], 1, 20, 1, 20, 1, 20, [0, 52, "Var"], 20, [0, 51, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20], #V n = 237 [ , 2, 2, 1, 2, 2, 3, 1, 1, 1, 2, 2, 1, 1, 2, 3, 1, 1, 1, 1, 2, 1, 20, 20, 1, 1, 1, 1, 1, 1, 1, 2, 2, [0, 100, "Vx"], 2, 2, [0, 95, "Vx"], [0, 94, "Vx"], [0, 93, "Vx"], [0, 92, "Vx"], 20, [0, 90, "VE"], [0, 89, "Var"], [0, 88, "Vx"], 1, 1, 1, 20, [0, 84, "VE"], [0, 83, "Var"], 1, 1, 20, [0, 80, "VE"], [0, 79, "Var"], 1, 1, 20, [0, 76, "Var"], 1, 20, [0, 74, "VE"], 1, 1, 20, [0, 71, "Var"], 1, 20, [0, 69, "VE"], 1, 20, [0, 67, "VE"], 1, 20, [0, 65, "Var"], 1, 20, [0, 63, "Var"], 1, 20, 1, 20, [0, 60, "Var"], 1, 20, 1, 20, [0, 57, "Var"], 1, 20, 1, 20, 1, 20, [0, 53, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20], #V n = 238 [ , 2, 2, 2, [6, 117], 2, 3, 1, 1, 1, 2, [0, 140, "XB"], 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 20, 20, 1, 1, 1, 1, 1, 1, 2, 2, 2, [0, 99, "Vx"], [0, 97, "Vx"], 1, 1, 1, 1, 1, 1, 1, 1, 20, [0, 87, "VE"], [0, 86, "Var"], 1, 1, 1, 20, [0, 82, "VE"], 1, 1, 1, 20, [0, 78, "Var"], 1, 1, 20, 1, 1, 20, [0, 73, "VE"], 1, 1, 20, [0, 70, "Var"], 1, 20, [0, 68, "Var"], 1, 20, [0, 66, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 61, "Var"], 1, 20, 1, 20, [0, 58, "Var"], 1, 20, 1, 20, 1, 20, [0, 54, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 47, "Var"], 20, [0, 46, "Var"], 20, [0, 45, "Var"], 20, [0, 44, "Var"], 20, 1, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20], #V n = 239 [ , 2, [6, 9], 2, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 2, 20, 1, 1, 1, 1, 2, 1, 1, 1, 20, 20, 1, 1, 1, 1, 1, 2, [0, 105, "Vx"], 2, 2, 1, 1, 2, [0, 94, "Vx"], [0, 93, "Vx"], [0, 92, "Vx"], [0, 91, "VE"], [0, 90, "Var"], [0, 89, "Vx"], 1, 1, 1, 20, [0, 85, "VE"], [0, 84, "Var"], 1, 1, 20, [0, 81, "VE"], [0, 80, "Var"], 1, 1, 20, [0, 77, "Var"], 1, 20, [0, 75, "VE"], 1, 1, 20, [0, 72, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 64, "Var"], 1, 20, 1, 1, 20, 1, 20, 1, 1, 20, 1, 20, 1, 20, [0, 55, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, [0, 49, "Var"], 20, [0, 48, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 20, [0, 43, "VE"], 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 1, 2, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20], #V n = 240 [ , [6, 4], 2, [6, 40], 1, 2, [0, 154, "GO"], 1, 1, 1, 2, 2, 1, 1, 2, 2, 20, 1, 1, 1, 2, 20, 1, 1, 1, 20, 20, 1, 1, 1, 1, 2, 2, [0, 102, "Vx"], [0, 100, "Vx"], [0, 98, "Vx"], [0, 97, "Vx"], [0, 96, "BZ"], 1, 1, 1, 1, 1, 1, 20, [0, 88, "VE"], [0, 87, "Var"], 1, 1, 1, 20, [0, 83, "VE"], 1, 1, 1, 20, [0, 79, "Var"], 1, 1, 20, [0, 76, "Var"], 1, 20, [0, 74, "VE"], 1, 1, 20, [0, 71, "Var"], 1, 20, [0, 69, "Var"], 1, 20, [0, 67, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 62, "VE"], 1, 20, 1, 20, [0, 59, "VE"], 1, 20, 1, 20, [0, 56, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 51, "Var"], 20, [0, 50, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 1, 2, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20], #V n = 241 [ , 2, 2, 1, 1, 2, 2, 20, 1, 1, 2, 2, 20, 1, 2, 2, 20, 20, 1, 1, 2, 20, 20, 1, 1, 2, 20, 20, 1, 1, 1, 2, 2, 2, 2, 1, 2, 1, 1, 2, [0, 93, "VE"], [0, 92, "Var"], [0, 91, "Var"], [0, 90, "Vx"], 1, 1, 1, 20, [0, 86, "VE"], [0, 85, "Var"], 1, 1, 20, [0, 82, "VE"], [0, 81, "Var"], 1, 1, 20, [0, 78, "Var"], 1, 1, 20, 1, 1, 20, [0, 73, "VE"], 1, 1, 20, 1, 1, 20, 1, 1, 20, 1, 20, [0, 65, "VE"], 1, 20, [0, 63, "Var"], 1, 20, 1, 20, [0, 60, "Var"], 1, 20, 1, 20, [0, 57, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 52, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 1, 2, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 2, [0, 28, "Vx"], 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20], #V n = 242 [ , 2, 2, 20, 1, 2, 2, 20, 20, 1, 2, 2, 20, 20, [0, 138, "MTS"], [0, 135, "Ma"], 20, 20, 20, 1, 2, 2, 20, 20, 1, 2, 20, 20, 20, 1, 1, 2, [0, 107, "Vx"], 2, 2, 2, [0, 98, "Vx"], 20, 1, 2, 1, 1, 1, 1, 20, [0, 89, "Var"], [0, 88, "Var"], 1, 1, 1, 20, [0, 84, "VE"], 1, 1, 1, 20, [0, 80, "Var"], 1, 1, 20, [0, 77, "Var"], 1, 20, [0, 75, "VE"], 1, 1, 20, [0, 72, "Var"], 1, 20, [0, 70, "VE"], 1, 20, [0, 68, "VE"], 1, 20, [0, 66, "Var"], 1, 20, 1, 1, 20, 1, 20, [0, 61, "Var"], 1, 20, 1, 20, [0, 58, "Var"], 1, 20, 1, 20, 1, 20, 1, 20, [0, 53, "VE"], 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 2, 20, 20, 20, 1, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 20, 20, 20, 20, 1, 2, 1, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 2, 20, 20, 20, 1, 20, 20, 20, 20, 1, 1, 20, 20, 20, 1, 20, 20, 20, 20, 1, 20, 1, 20, 20, 1, 20, 20, 20, 20], #V n = 243 [ , [6, 3], [6, 9], 20, 20, [22, 5, 1], [0, 156, "Koh"], 20, 20, 20, [0, 153, "XBC"], [0, 144, "BZ"], 20, 20, 3, 3, 20, 20, 20, 20, [0, 132, "XBC"], [0, 128, "NBC"], 20, 20, 20, [0, 126, "XBC"], 20, 20, 20, 20, [0, 123, "XBC"], [0, 122, "XBC"], 3, [0, 104, "Vx"], [0, 102, "BZ"], [0, 100, "BZ"], 3, [0, 97, "Vx"], 20, [0, 96, "BZ"], [0, 94, "Vx"], [0, 93, "Var"], [0, 92, "Vx"], [0, 91, "Vx"], [0, 90, "Vx"], 3, 3, 20, [0, 87, "VE"], [0, 86, "Var"], [0, 85, "Vx"], 3, 20, [0, 83, "VE"], [0, 82, "Var"], [0, 81, "Vx"], 3, 20, [0, 79, "Var"], [0, 78, "Vx"], 3, 20, [0, 76, "Var"], 3, 20, [0, 74, "VE"], [0, 73, "Var"], 3, 20, [0, 71, "Var"], 3, 20, [0, 69, "Var"], 3, 20, [0, 67, "Var"], 3, 20, [0, 65, "Var"], 20, [0, 64, "VE"], [0, 63, "Vx"], 20, [0, 62, "Var"], 3, 20, [0, 60, "Vx"], 20, [0, 59, "Var"], 3, 20, [0, 57, "Vx"], 20, [0, 56, "Var"], 20, [0, 55, "Var"], 20, [0, 54, "VE"], 3, 20, [0, 52, "Vx"], 20, [0, 51, "Var"], 20, [0, 50, "Var"], 20, [0, 49, "Var"], 20, [0, 48, "Var"], 20, [0, 47, "Var"], 20, [0, 46, "Var"], 20, [0, 45, "Var"], 20, [0, 44, "XBC"], 20, [0, 43, "Var"], 20, 20, [0, 42, "XBC"], 20, 20, 20, 20, [0, 41, "XBC"], 20, 20, 20, 20, [0, 39, "XBC"], [0, 37, "Vx"], 20, 20, 20, [0, 36, "XBC"], 20, 20, 20, 20, [0, 35, "XBC"], 20, 20, 20, 20, [0, 33, "XBC"], 20, 20, 20, 20, [0, 32, "XBC"], [0, 29, "Vx"], [0, 28, "Vx"], 20, 20, [0, 27, "XBC"], 20, 20, 20, 20, [0, 26, "XBC"], [0, 25, "BCH"], 20, 20, 20, [0, 24, "XBC"], 20, 20, 20, 20, [0, 23, "XBC"], 20, 20, 20, 20, [0, 21, "XBC"], 20, 20, 20, 20, [0, 20, "XBC"], [0, 19, "BCH"], 20, 20, 20, [0, 18, "XBC"], 20, 20, 20, 20, [0, 17, "XBC"], 20, 20, 20, 20, [0, 15, "XBC"], 20, 20, 20, 20, [0, 14, "XBC"], [0, 13, "BCH"], 20, 20, 20, [0, 12, "XBC"], 20, 20, 20, 20, [0, 11, "XBC"], 20, 20, 20, 20, [0, 9, "XBC"], 20, 20, 20, 20, [0, 8, "XBC"], [0, 7, "BCH"], 20, 20, 20, [0, 6, "XBC"], 20, 20, 20, 20, [0, 5, "XBC"], 20, 1, 20, 20, [0, 3, "Ham"], 20, 20, 20, 20], #V n = 244 [ , 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, [5, 121], 3, 3, 3, 3, 3, 3, 3, 3]]; GUAVA_BOUNDS_TABLE[2][3] := [ #V n = 1 [ ], #V n = 2 [ ], #V n = 3 [ ], #V n = 4 [ ,], #V n = 5 [ , [15, 3], [14, 3]], #V n = 6 [ , [15, 4], [15, 3], 11], #V n = 7 [ , [15, 5], [15, 4], [15, 3], 11], #V n = 8 [ , [15, 6], [15, 5], [15, 4], [15, 3], 11], #V n = 9 [ , [15, 6], [15, 6], [15, 5], [15, 4], [15, 3], 11], #V n = 10 [ , [15, 7], [15, 6], [15, 6], [15, 5], [15, 4], [15, 3], 11], #V n = 11 [ , [15, 8], [15, 7], [15, 6], [15, 6], [15, 5], [14, 6], [15, 3], 11], #V n = 12 [ , [15, 9], [15, 8], [16, 6], [15, 6], [15, 6], 12, 11, [15, 3], 11], #V n = 13 [ , [15, 9], [15, 9], [16, 7], [16, 6], [15, 6], 12, 11, 11, [15, 3], 11], #V n = 14 [ , [15, 10], [15, 9], [16, 8], [16, 7], [16, 6], [15, 6], 11, 11, 11, [14, 9], 11], #V n = 15 [ , [15, 11], [15, 9], [15, 9], [16, 8], [16, 7], [16, 6], [0, 5, "vE2"], [0, 4, "vE2"], 11, 11, 11, 11], #V n = 16 [ , [15, 12], [15, 10], [15, 9], [15, 9], [0, 7, "vE2"], [0, 6, "vE2"], [16, 6], 11, 11, 11, 11, 11, 11], #V n = 17 [ , [15, 12], [15, 11], [15, 10], [15, 9], 12, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11], #V n = 18 [ , [15, 13], [15, 12], [15, 11], [15, 10], [15, 9], 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11], #V n = 19 [ , [15, 14], [15, 12], [15, 12], [15, 11], [14, 4], [15, 9], 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11], #V n = 20 [ , [15, 15], [15, 13], [15, 12], [15, 12], 12, 11, [15, 9], 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11], #V n = 21 [ , [15, 15], [15, 14], [0, 12, "HN"], [15, 12], 12, 11, [16, 9], [15, 9], 11, 11, [16, 6], [16, 6], 11, 11, [0, 3, "Pel"], 11, 11, 11], #V n = 22 [ , [15, 16], [15, 15], 12, 11, [15, 12], 11, [16, 10], [16, 9], [15, 9], 11, [16, 7], [16, 6], [16, 6], 11, 11, 11, 11, 11, 11], #V n = 23 [ , [15, 17], [15, 15], 12, 11, 11, [15, 12], [16, 11], [16, 10], [16, 9], [15, 9], [16, 8], [16, 7], [16, 6], [16, 6], 11, 11, 11, 11, 11, 11], #V n = 24 [ , [15, 18], [15, 16], [15, 15], 11, 11, 11, [0, 11, "BS"], [16, 11], [16, 10], [16, 9], [15, 9], [16, 8], [16, 7], [16, 6], [16, 6], 11, 11, 11, 11, 11, 11], #V n = 25 [ , [15, 18], [15, 17], [15, 16], [15, 15], 11, 11, [16, 12], 11, [16, 11], [16, 10], [16, 9], [0, 8, "LP"], [16, 8], [16, 7], [16, 6], [16, 6], 11, 11, 11, 11, 11, 11], #V n = 26 [ , [15, 19], [15, 18], [15, 17], [14, 3], [15, 15], 11, [16, 13], [16, 12], 11, [16, 11], [16, 10], [16, 9], 11, [16, 8], [16, 7], [16, 6], [16, 6], 11, 11, 11, 11, 11, 11], #V n = 27 [ , [15, 20], [15, 18], [15, 18], 12, 11, [15, 15], [16, 14], [14, 6], [16, 12], 11, [16, 11], [16, 10], [16, 9], 11, [14, 11], [16, 7], [16, 6], [16, 6], 11, 11, 11, 11, 11, 11], #V n = 28 [ , [15, 21], [15, 18], [15, 18], 12, [0, 15, "HHM"], 11, [15, 15], 12, [16, 12], [16, 12], 11, [16, 11], [16, 10], [16, 9], 11, 11, [14, 12], [16, 6], [16, 6], 11, 11, 11, 11, 11, 11], #V n = 29 [ , [15, 21], [15, 19], [15, 18], [15, 18], 12, 11, [16, 15], 12, [16, 13], [16, 12], [16, 12], 11, [16, 11], [16, 10], [16, 9], 11, 11, 11, [16, 6], [16, 6], 11, 11, 11, 11, 11, 11], #V n = 30 [ , [15, 22], [15, 20], [15, 19], [15, 18], 12, 11, 11, [16, 15], [16, 14], [16, 13], [16, 12], [16, 12], 11, [16, 11], [14, 11], [16, 9], 11, 11, 11, [16, 6], [14, 15], 11, 11, 11, 11, 11, 11], #V n = 31 [ , [15, 23], [15, 21], [15, 20], [16, 18], [15, 18], 11, 11, [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], [16, 12], 11, 12, [16, 9], [16, 9], 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11], #V n = 32 [ , [15, 24], [15, 21], [15, 21], [16, 19], [16, 18], [15, 18], 11, [16, 16], [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], [16, 12], 11, [16, 10], [16, 9], [16, 9], 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11], #V n = 33 [ , [15, 24], [15, 22], [15, 21], [16, 20], [16, 19], [16, 18], [15, 18], [16, 17], [16, 16], [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], [16, 12], [16, 11], [0, 9, "LP"], [16, 9], [16, 9], 11, 11, 11, [16, 6], 11, [14, 18], 11, 11, 11, 11, 11], #V n = 34 [ , [15, 25], [15, 23], [15, 22], [15, 21], [16, 20], [16, 19], [16, 18], [15, 18], [16, 17], [16, 16], [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], [16, 12], 12, 11, [16, 9], [16, 9], 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11], #V n = 35 [ , [15, 26], [15, 24], [15, 23], [16, 21], [0, 20, "Bou"], [16, 20], [16, 18], [16, 18], [15, 18], [16, 17], [16, 16], [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], 12, 11, 11, [16, 9], [16, 9], 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11], #V n = 36 [ , [15, 27], [15, 24], [15, 24], [16, 22], [16, 21], 11, [16, 19], [16, 18], [16, 18], [15, 18], [16, 17], [16, 16], [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, 11, [16, 9], [16, 9], 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11], #V n = 37 [ , [15, 27], [15, 25], [15, 24], [16, 23], [0, 21, "Bou"], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], [0, 17, "LP"], [16, 17], [14, 9], [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, 11, [16, 9], [16, 9], 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11], #V n = 38 [ , [15, 28], [15, 26], [15, 25], [15, 24], 12, [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], 11, 12, 11, [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, 11, [16, 9], [16, 9], 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11], #V n = 39 [ , [15, 29], [15, 27], [15, 26], [16, 24], 12, [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 11, [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, 11, [16, 9], [16, 9], 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11], #V n = 40 [ , [15, 30], [15, 27], [15, 27], [0, 24, "vE1"], [16, 24], [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 11, [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, 11, [16, 9], [0, 8, "LP"], 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11], #V n = 41 [ , [15, 30], [15, 27], [15, 27], 12, 11, [16, 24], [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 11, [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], 11, 11, 11, [16, 9], 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, [14, 27], 11, 11], #V n = 42 [ , [15, 31], [15, 28], [15, 27], 12, 11, [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 11, [16, 15], [0, 14, "BKn"], [16, 14], [14, 15], [16, 12], 11, 11, 11, [16, 9], 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11], #V n = 43 [ , [15, 32], [15, 29], [15, 27], [15, 27], 11, [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [14, 8], [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 11, [16, 15], 11, 12, 11, [16, 12], 11, 11, 11, [16, 9], 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11], #V n = 44 [ , [15, 33], [15, 30], [15, 28], [15, 27], [15, 27], [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], 11, [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 11, [16, 15], 11, 11, 11, [16, 12], 11, 11, 11, [16, 9], 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11], #V n = 45 [ , [15, 33], [15, 30], [15, 29], [15, 28], [15, 27], [15, 27], [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [14, 8], [16, 21], 11, [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 11, [16, 15], 11, 11, 11, [16, 12], 11, 11, 11, [16, 9], 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11], #V n = 46 [ , [15, 34], [15, 31], [15, 30], [15, 29], [15, 28], [15, 27], [0, 26, "Gur"], [16, 26], [14, 6], [16, 24], [16, 24], 12, 11, [16, 21], 11, [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, [16, 15], [16, 15], 11, 11, [16, 12], [16, 12], 11, 11, 11, [16, 9], 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11], #V n = 47 [ , [15, 35], [15, 32], [15, 30], [15, 30], [0, 28, "HJ"], [16, 27], [15, 27], 11, 12, 11, [16, 24], 12, 11, 11, [16, 21], 11, [16, 20], [16, 18], [16, 18], [16, 18], 11, [16, 16], [16, 15], [16, 15], 11, [16, 13], [16, 12], [16, 12], 11, 11, 11, [16, 9], 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11], #V n = 48 [ , [15, 36], [15, 33], [15, 31], [15, 30], 12, [16, 28], [16, 27], [15, 27], 11, 11, 11, [16, 24], 11, 11, 11, [16, 21], 11, [16, 19], [16, 18], [16, 18], [16, 18], [16, 17], [16, 16], [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], [16, 12], 11, 11, 11, [16, 9], 11, 11, 11, [16, 6], [16, 6], 11, 11, 11, 11, 11, 11, 11], #V n = 49 [ , [15, 36], [15, 33], [15, 32], [15, 31], [15, 30], [16, 29], [16, 28], [16, 27], [15, 27], 11, 11, 11, [16, 24], 11, 11, [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], [16, 18], [16, 17], [16, 16], [16, 15], [16, 15], [16, 14], [16, 13], [16, 12], [16, 12], 11, 11, 11, [16, 9], 11, 11, [16, 7], [16, 6], [16, 6], 11, 11, 11, 11, 11, 11, 11], #V n = 50 [ , [15, 37], [15, 34], [15, 33], [0, 31, "EHW"], [0, 30, "HJL"], [15, 30], [16, 29], [16, 28], [16, 27], [15, 27], 11, 11, [16, 24], [16, 24], 11, [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], [16, 18], [16, 17], [16, 16], [16, 15], [0, 14, "BKn"], [16, 14], [16, 13], [16, 12], [16, 12], 11, 11, 11, [16, 9], 11, [16, 8], [16, 7], [16, 6], [16, 6], 11, 11, 11, 11, 11, 11, 11], #V n = 51 [ , [15, 38], [15, 35], [15, 33], 12, 11, [16, 30], [15, 30], [16, 29], [16, 28], [16, 27], [15, 27], 11, [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], [16, 18], [16, 17], [16, 16], [16, 15], 11, [16, 14], [16, 13], [16, 12], [16, 12], 11, 11, 11, [16, 9], 11, [16, 8], [0, 6, "BKn"], [16, 6], [16, 6], 11, 11, 11, 11, 11, 11, 11], #V n = 52 [ , [15, 39], [15, 36], [15, 34], [15, 33], 11, [16, 31], [16, 30], [15, 30], [16, 29], [16, 28], [16, 27], [15, 27], [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], [16, 18], [16, 17], [16, 16], [16, 15], 11, [16, 14], [16, 13], [16, 12], [16, 12], 11, 11, 11, [16, 9], 11, 12, 11, [16, 6], [16, 6], 11, 11, 11, 11, 11, 11, 11], #V n = 53 [ , [15, 39], [15, 36], [15, 35], [15, 34], [15, 33], [16, 32], [16, 31], [16, 30], [15, 30], [14, 6], [16, 28], [16, 27], [15, 27], [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], [16, 18], [16, 17], [16, 16], [16, 15], 11, [16, 14], [16, 13], [16, 12], [16, 12], 11, 11, 11, [0, 8, "sp"], 11, 11, 11, [16, 6], [16, 6], 11, 11, 11, 11, 11, 11, 11], #V n = 54 [ , [15, 40], [15, 36], [15, 36], [15, 35], [15, 34], [15, 33], [16, 32], [16, 31], [16, 30], 12, 11, [16, 28], [16, 27], [15, 27], [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], [0, 17, "LP"], [16, 17], [16, 16], [16, 15], 11, [16, 14], [16, 13], [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 6], [16, 6], 11, 11, 11, 11, 11, 11, 11], #V n = 55 [ , [15, 41], [15, 37], [15, 36], [15, 36], [15, 35], [16, 33], [0, 32, "Gur"], [0, 31, "Gur"], [16, 31], [16, 30], 11, 11, [14, 8], [16, 27], [0, 26, "BKn"], [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], 11, [0, 16, "BKn"], [16, 16], [16, 15], 11, [16, 14], [16, 13], [16, 12], [16, 12], 11, 11, 11, 11, 11, 11, 11, [16, 6], [16, 6], 11, 11, 11, 11, 11, 11, 11], #V n = 56 [ , [15, 42], [15, 38], [15, 36], [15, 36], [15, 36], [16, 34], [16, 33], 11, 11, [14, 6], [16, 30], 11, 11, 11, [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, [16, 16], [16, 15], 11, [16, 14], [16, 13], [16, 12], [16, 12], [0, 10, "LP"], 11, 11, 11, 11, 11, 11, [16, 6], [16, 6], 11, 11, 11, 11, 11, 11, 11], #V n = 57 [ , [15, 42], [15, 39], [15, 37], [15, 36], [15, 36], [16, 35], [16, 34], [16, 33], 11, 11, 11, [16, 30], 11, 11, 11, [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, [16, 16], [16, 15], 11, [16, 14], [16, 13], [16, 12], 12, 11, 11, 11, 11, 11, 11, 11, [16, 6], [16, 6], [0, 4, "Jo"], 11, [14, 36], 11, 11, 11, 11], #V n = 58 [ , [15, 43], [15, 39], [15, 38], [16, 36], [15, 36], [0, 35, "BKn"], [16, 35], [16, 33], [16, 33], 11, 11, 11, [16, 30], 11, 11, [16, 27], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, [16, 16], [16, 15], 11, [16, 14], [16, 13], [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 12, 11, 11, 11, 11, 11, 11, 11], #V n = 59 [ , [15, 44], [15, 40], [15, 39], [16, 37], [16, 36], [15, 36], 11, [16, 34], [16, 33], [16, 33], 11, 11, 11, [16, 30], 11, [16, 28], [16, 27], [16, 27], 11, [16, 26], [16, 25], [16, 24], [0, 23, "BKn"], [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, [16, 16], [16, 15], 11, [16, 14], [16, 13], [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 60 [ , [15, 45], [15, 41], [15, 39], [16, 38], [16, 37], [16, 36], [15, 36], [16, 35], [16, 34], [16, 33], [16, 33], 11, 11, 11, [16, 30], [16, 29], [16, 28], [16, 27], [16, 27], 11, [0, 25, "BKn"], [16, 25], [16, 24], 11, [16, 23], [16, 22], [16, 21], [16, 21], [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, [16, 16], [16, 15], 11, [16, 14], [0, 12, "BKn"], [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 61 [ , [15, 45], [15, 42], [15, 40], [15, 39], [16, 38], [16, 37], [16, 36], [15, 36], [16, 35], [16, 34], [16, 33], [16, 33], 11, 11, 11, [0, 29, "BKn"], [16, 29], [16, 27], [16, 27], [16, 27], 11, 11, [16, 25], [16, 24], 11, [16, 23], [16, 22], [16, 21], [0, 20, "LP"], [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, [16, 16], [16, 15], 11, 12, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 62 [ , [15, 46], [15, 42], [15, 41], [16, 39], [15, 39], [16, 38], [14, 4], [16, 36], [0, 35, "Gur"], [16, 35], [16, 34], [16, 33], [0, 32, "BKn"], 11, 11, [16, 30], 11, [16, 28], [16, 27], [16, 27], [16, 27], 11, 11, [14, 16], [16, 24], 11, [16, 23], [16, 22], [16, 21], 11, [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, [14, 25], [16, 15], 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 63 [ , [15, 47], [15, 43], [15, 42], [16, 40], [16, 39], [15, 39], 12, 11, [16, 36], 11, [16, 35], [16, 34], [16, 33], 11, 11, [16, 31], [16, 30], [16, 29], [16, 28], [16, 27], [16, 27], [16, 27], 11, 11, 11, [16, 24], 11, [16, 23], [16, 22], [16, 21], 11, [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 11, [16, 15], 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 64 [ , [15, 48], [15, 44], [15, 42], [16, 41], [16, 40], [16, 39], 12, 11, [16, 36], [16, 36], 11, [16, 35], [16, 34], [16, 33], 11, [0, 31, "BKn"], [16, 31], [16, 30], [16, 29], [16, 28], [16, 27], [16, 27], [16, 27], 11, 11, 11, [16, 24], 11, [0, 22, "BKn"], [16, 22], [16, 21], 11, [16, 20], [16, 19], [16, 18], [16, 18], [0, 16, "BKn"], 11, 11, [16, 15], 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 65 [ , [15, 48], [15, 45], [15, 43], [15, 42], [16, 41], [16, 40], [16, 39], 11, [16, 37], [16, 36], [16, 36], 11, [0, 34, "BKn"], [16, 34], [16, 33], 11, 11, [16, 30], [16, 30], [16, 29], [16, 28], [16, 27], [16, 27], [16, 27], 11, 11, [16, 24], [16, 24], 11, 11, [16, 22], [16, 21], 11, [16, 20], [16, 19], [16, 18], 12, 11, 11, 11, [0, 14, "sp"], 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 66 [ , [15, 49], [15, 45], [15, 44], [16, 42], [15, 42], [16, 41], [14, 4], [16, 39], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, [16, 34], [16, 33], 11, [16, 31], [16, 30], [16, 30], [16, 29], [16, 28], [16, 27], [16, 27], [0, 26, "BKn"], 11, [16, 25], [16, 24], [16, 24], 11, 11, [16, 22], [16, 21], 11, [16, 20], [16, 19], [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 67 [ , [15, 50], [15, 45], [15, 45], [16, 43], [16, 42], [0, 41, "BKn"], 12, 11, [16, 39], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, [0, 33, "BKn"], [16, 33], [16, 32], [16, 31], [16, 30], [16, 30], [16, 29], [16, 28], [16, 27], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, [14, 22], [16, 21], 11, [16, 20], [0, 18, "BKn"], [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, [14, 34], [16, 9], 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 68 [ , [15, 51], [15, 46], [15, 45], [16, 44], [16, 43], [16, 42], 11, 11, [16, 39], [0, 38, "Gur"], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, 11, [16, 33], [16, 32], [16, 31], [16, 30], [16, 30], [16, 29], [16, 28], [16, 27], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, [16, 21], 11, 12, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, [16, 9], 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 69 [ , [15, 51], [15, 47], [15, 45], [15, 45], [0, 43, "Ma"], [0, 42, "Gur"], [16, 42], 11, [16, 40], [16, 39], 11, [16, 38], [16, 37], [16, 36], [0, 35, "LP"], 11, 11, [16, 33], [0, 32, "BKn"], [16, 32], [16, 31], [16, 30], [16, 30], [16, 29], [16, 28], [16, 27], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, [16, 21], 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], [0, 10, "BKn"], 11, 11, [0, 8, "BKn"], 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 70 [ , [15, 52], [15, 48], [15, 46], [15, 45], 12, 11, 11, [16, 42], [16, 41], [16, 40], [16, 39], 11, [0, 37, "BKn"], [14, 8], [16, 36], 11, 11, [16, 34], [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], [16, 29], [16, 28], [16, 27], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, [16, 21], 11, 11, [16, 18], [16, 18], 11, 11, 11, 11, 11, 11, 11, [16, 12], 12, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 71 [ , [15, 53], [15, 48], [15, 47], [0, 45, "HW1"], [15, 45], 11, 11, 11, [16, 42], [0, 40, "Gur"], [16, 40], [16, 39], 11, 11, 11, [16, 36], 11, [16, 35], [16, 34], [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], [16, 29], [16, 28], [16, 27], [16, 27], 11, [16, 26], [16, 25], [16, 24], [0, 23, "LP"], 11, 11, 11, [0, 20, "BKn"], 11, [16, 19], [16, 18], [16, 18], 11, 11, 11, 11, 11, 11, [0, 12, "BKn"], [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 72 [ , [15, 54], [15, 49], [15, 48], 12, [16, 45], [15, 45], 11, 11, [16, 42], 12, 11, [16, 40], [16, 39], 11, 11, 11, [16, 36], 11, [0, 34, "BKn"], [16, 34], [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], [16, 29], [16, 28], [16, 27], [16, 27], 11, [0, 25, "LP"], [16, 25], [16, 24], 11, 11, 11, 11, 11, [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 11, 11, 11, 12, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 73 [ , [15, 54], [15, 50], [15, 48], 12, [16, 46], [16, 45], [0, 44, "LP"], 11, [16, 43], [16, 42], 11, 11, [0, 39, "BKn"], [16, 39], 11, 11, 11, [16, 36], 11, 11, [16, 34], [16, 33], 11, [16, 32], [16, 31], [16, 30], [0, 29, "BKn"], [16, 29], [16, 28], [16, 27], [16, 27], 11, 11, [16, 25], [16, 24], 11, [0, 22, "LP"], 11, 11, 11, [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 74 [ , [15, 55], [15, 51], [15, 49], [15, 48], [16, 47], [16, 45], [16, 45], 11, [16, 44], [0, 42, "Da"], [16, 42], 11, 11, 11, [16, 39], 11, 11, 11, [16, 36], 11, 11, [0, 33, "BKn"], [16, 33], 11, [0, 31, "BKn"], [16, 31], [16, 30], 11, [16, 29], [16, 28], [16, 27], [16, 27], 11, 11, [16, 25], [16, 24], 11, 11, 11, [16, 21], 11, [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 11, [16, 15], 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, [0, 6, "Jo"], 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 75 [ , [15, 56], [15, 51], [15, 50], [0, 48, "HN"], [15, 48], [16, 46], [16, 45], [16, 45], 11, 12, 11, [16, 42], 11, 11, 11, [0, 38, "Da"], 11, 11, 11, [16, 36], 11, 11, 11, [16, 33], 11, 11, [16, 31], [16, 30], 11, [16, 29], [16, 28], [16, 27], [16, 27], 11, 11, [16, 25], [16, 24], 11, 11, [16, 22], [16, 21], 11, [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, [16, 16], [0, 14, "BKn"], 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 12, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 76 [ , [15, 57], [15, 52], [15, 51], 12, [16, 48], [16, 47], [16, 46], [16, 45], [16, 45], 11, 11, 11, [0, 41, "BKn"], 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, [16, 33], 11, 11, [16, 31], [16, 30], 11, [16, 29], [16, 28], [16, 27], [16, 27], 11, 11, [16, 25], [16, 24], 11, 11, [16, 22], [16, 21], 11, [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 12, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 77 [ , [15, 57], [15, 53], [15, 51], 12, [16, 49], [16, 48], [16, 47], [16, 46], [16, 45], [0, 44, "BKn"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 35, "Da"], 11, 11, 11, [16, 33], 11, 11, [16, 31], [16, 30], 11, [16, 29], [16, 28], [16, 27], [16, 27], 11, 11, [0, 24, "LP"], [16, 24], 11, 11, [16, 22], [16, 21], 11, [16, 20], [16, 19], [16, 18], [16, 18], 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 78 [ , [15, 58], [15, 54], [15, 52], [15, 51], [16, 50], [16, 48], [16, 48], [16, 47], [16, 46], [16, 45], 11, 11, 11, 11, 11, [0, 40, "Da"], 11, 11, 11, [0, 37, "LP"], 11, 11, 11, 11, 11, 11, [16, 33], 11, 11, [0, 30, "LP"], [16, 30], 11, [16, 29], [16, 28], [16, 27], [0, 26, "LP"], 11, 11, [16, 24], [16, 24], 11, 11, [16, 22], [16, 21], 11, [0, 19, "LP"], [0, 18, "LP"], [16, 18], [16, 18], [0, 16, "LP"], 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 79 [ , [15, 59], [15, 54], [15, 53], [15, 52], [15, 51], [16, 49], [16, 48], [16, 48], [16, 47], [16, 46], [16, 45], 11, [0, 43, "BKn"], [0, 42, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, 11, 11, [16, 30], 11, [0, 28, "LP"], [16, 28], [16, 27], 11, 11, [16, 25], [16, 24], [16, 24], 11, 11, [16, 22], [16, 21], 11, 11, 11, [16, 18], 12, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 80 [ , [15, 60], [15, 54], [15, 54], [15, 53], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], [0, 46, "BKn"], [14, 6], [16, 45], 11, 11, 11, 11, 11, 11, [0, 39, "Da"], 11, 11, 11, [16, 37], [16, 36], 11, 11, 11, 11, [0, 32, "LP"], 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, [16, 22], [0, 20, "LP"], 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 81 [ , [15, 60], [15, 55], [15, 54], [15, 54], [0, 51, "Ma"], [16, 51], [16, 50], [16, 49], [16, 48], 12, 11, 11, [16, 45], 11, 11, 11, [0, 41, "Da"], 11, 11, 11, 11, 11, 11, [16, 37], [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 12, 11, 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 82 [ , [15, 61], [15, 56], [15, 54], [15, 54], 12, [16, 51], [0, 50, "BKn"], [16, 50], [16, 49], [16, 48], 11, 11, 11, [0, 44, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 36, "Da"], [16, 36], 11, [0, 34, "LP"], 11, 11, 11, 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 83 [ , [15, 62], [15, 57], [15, 54], [15, 54], 12, [16, 52], [16, 51], 11, [16, 50], [0, 48, "BKn"], [16, 48], 11, 11, [16, 45], 11, 11, 11, 11, 11, [0, 40, "Da"], 11, 11, [0, 38, "Da"], 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [0, 23, "LP"], 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 84 [ , [15, 63], [15, 57], [15, 55], [15, 54], [15, 54], [16, 53], [16, 52], [16, 51], 11, 12, 11, [0, 47, "LP"], 11, [16, 46], [16, 45], 11, [0, 43, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 27], 11, [0, 25, "LP"], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 85 [ , [15, 63], [15, 58], [15, 56], [15, 55], [15, 54], [15, 54], [0, 52, "BKn"], [16, 52], [16, 51], 11, 11, 11, 11, 13, [16, 46], [16, 45], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, [0, 33, "LP"], 11, 11, [0, 31, "LP"], 11, 11, [0, 29, "LP"], 11, 11, [0, 27, "LP"], [16, 27], 11, 11, [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 86 [ , [15, 64], [15, 59], [15, 57], [15, 56], [16, 54], [15, 54], 12, 11, [16, 52], [0, 50, "BKn"], [0, 49, "Da"], 11, 11, [0, 46, "Da"], 11, [16, 46], [16, 45], 11, 11, [0, 42, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 27], 11, 11, [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, [0, 12, "Jo"], 11, [16, 12], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 87 [ , [15, 65], [15, 60], [15, 57], [15, 57], [16, 55], [16, 54], [15, 54], 11, 11, 12, 11, 11, 11, 12, 11, 11, [0, 45, "Da"], [16, 45], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 35, "LP"], 11, 11, 11, 11, 11, 11, 11, [16, 30], 11, 11, 11, 11, [16, 27], 11, 11, [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 12, 11, 11, [16, 12], [0, 10, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 88 [ , [15, 66], [15, 60], [15, 58], [15, 57], [16, 56], [16, 55], [16, 54], [15, 54], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, [16, 45], 11, 11, 11, 11, 11, 11, [0, 39, "Da"], 11, 11, [0, 37, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 31], [16, 30], 11, 11, 11, 11, [16, 27], 11, 11, [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 11, [0, 14, "sp"], 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 89 [ , [15, 66], [15, 61], [15, 59], [15, 58], [15, 57], [16, 56], [16, 55], [16, 54], [15, 54], [0, 52, "BKn"], [0, 51, "BKn"], [16, 51], 11, 11, 11, 11, 11, 11, 11, [0, 44, "Da"], 11, 11, 11, [0, 41, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 31], [16, 30], 11, 11, 11, 11, [0, 26, "LP"], 11, 11, [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 90 [ , [15, 67], [15, 62], [15, 60], [15, 59], [16, 57], [15, 57], [16, 56], [16, 54], [16, 54], 12, 11, 11, [16, 51], [0, 49, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 31], [16, 30], 11, 11, 11, 11, 11, 11, 11, [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 91 [ , [15, 68], [15, 63], [15, 60], [15, 60], [16, 58], [16, 57], [0, 56, "BKn"], [16, 55], [16, 54], [16, 54], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, [0, 43, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 34, "LP"], 11, 11, [0, 32, "LP"], 11, 11, [16, 31], [16, 30], 11, [0, 28, "LP"], 11, 11, 11, 11, 11, [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, [16, 18], [0, 16, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 8, "sp"], 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 92 [ , [15, 69], [15, 63], [15, 61], [15, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 55], [16, 54], [0, 53, "Da"], 11, 11, 11, 11, 11, [0, 48, "Da"], 11, 11, 11, [0, 45, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 36, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [16, 31], [16, 30], 11, 11, 11, 11, 11, 11, 11, [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 93 [ , [15, 69], [15, 63], [15, 62], [0, 60, "HH"], [15, 60], [16, 59], [16, 58], [16, 57], [16, 56], [16, 55], [16, 54], 11, 11, [0, 51, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 40, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 30, "LP"], [16, 30], 11, 11, 11, 11, 11, 11, 11, [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 94 [ , [15, 70], [15, 64], [15, 63], 12, [16, 60], [15, 60], [0, 58, "BKn"], [16, 57], [16, 57], [16, 56], [16, 55], [16, 54], 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 42, "Da"], 11, 11, 11, 11, 11, [0, 38, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 30], 11, 11, 11, 11, 11, 11, 11, [16, 24], [16, 24], 11, [0, 22, "sp"], 11, 11, 11, 11, [16, 19], [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 95 [ , [15, 71], [15, 65], [15, 63], 12, [16, 61], [16, 60], 12, [16, 58], [16, 57], [0, 56, "BKn"], [0, 55, "BKn"], [16, 55], [16, 54], 11, 11, 11, [0, 50, "Da"], 11, 11, 11, [0, 47, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 30], 11, 11, 11, [16, 27], 11, 11, [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, 11, [16, 20], [0, 18, "sp"], [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 96 [ , [15, 72], [15, 66], [15, 63], [15, 63], [0, 61, "Gur"], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], 11, 11, [16, 55], [0, 53, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 44, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, 11, 12, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 97 [ , [15, 72], [15, 66], [15, 64], [15, 63], 12, [16, 61], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], 11, 11, 12, 11, 11, 11, 11, 11, [0, 49, "Da"], 11, 11, 11, [0, 46, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, [16, 21], 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 98 [ , [15, 73], [15, 67], [15, 65], [15, 64], [15, 63], [16, 62], [16, 61], [16, 60], [0, 59, "LP"], [0, 58, "BKn"], [0, 57, "BKn"], [16, 57], 11, 11, 11, 11, [0, 52, "Da"], [0, 51, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 37, "LP"], 11, 11, [0, 35, "LP"], 11, 11, [0, 33, "LP"], 11, 11, 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, [16, 22], [16, 21], 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 99 [ , [15, 74], [15, 68], [15, 66], [15, 65], [16, 63], [15, 63], [16, 62], [16, 61], [16, 60], 11, 11, 11, [16, 57], [0, 55, "Da"], [0, 54, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 43, "LP"], 11, 11, [0, 41, "LP"], 11, 11, [0, 39, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, [16, 22], [0, 20, "sp"], 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], [0, 4, "Jo"], 11, 11, 11, 11, 11, 11, 11], #V n = 100 [ , [15, 75], [15, 69], [15, 66], [15, 66], [16, 64], [16, 63], [0, 62, "BKn"], [14, 4], [16, 61], [16, 60], [0, 58, "BKn"], 11, 11, 12, 11, 11, 11, 11, 11, 11, [0, 50, "Da"], 11, 11, [0, 48, "Da"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 12, 11, 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 101 [ , [15, 75], [15, 69], [15, 67], [15, 66], [16, 65], [16, 63], [16, 63], 11, 11, [0, 60, "BKn"], 12, 11, 11, 11, 11, 11, 11, [0, 53, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 45, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 102 [ , [15, 76], [15, 70], [15, 68], [15, 67], [15, 66], [16, 64], [16, 63], [16, 63], 11, 11, 11, 11, 11, [0, 57, "LP"], [0, 56, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 47, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 103 [ , [15, 77], [15, 71], [15, 69], [15, 68], [16, 66], [16, 65], [16, 64], [16, 63], [16, 63], 11, [0, 60, "BKn"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 52, "LP"], 11, 11, 11, [0, 49, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], 11, 11, 11, 11, 11, 11, 11, [16, 18], 11, 11, 11, [0, 14, "sp"], 11, 11, [0, 12, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 104 [ , [15, 78], [15, 72], [15, 69], [15, 69], [16, 67], [16, 66], [16, 65], [16, 64], [16, 63], [0, 62, "BKn"], 12, 11, [16, 60], 11, 11, 11, 11, [0, 55, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 42, "LP"], 11, 11, [0, 40, "LP"], 11, 11, [0, 38, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], [16, 24], [0, 22, "sp"], 11, 11, 11, 11, 11, 11, [16, 18], [0, 16, "sp"], 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 105 [ , [15, 78], [15, 72], [15, 70], [15, 69], [0, 67, "DM5"], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], 11, 11, 11, [0, 59, "BKn"], [0, 58, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 51, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 44, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 36, "LP"], 11, 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 106 [ , [15, 79], [15, 72], [15, 71], [15, 70], 12, [16, 67], [16, 66], [16, 66], [16, 65], [16, 64], [0, 62, "BKn"], 11, 11, 11, 11, 11, 11, [0, 56, "LP"], 11, 11, [0, 54, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 107 [ , [15, 80], [15, 73], [15, 72], [15, 71], [16, 69], [16, 68], [16, 67], [16, 66], [0, 65, "LP"], [0, 64, "BKn"], 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 48, "LP"], 11, 11, [0, 46, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, [0, 18, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 10, "Jo"], 11, 11, 11, 11, 11, 11, [0, 6, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 108 [ , [15, 81], [15, 74], [15, 72], [15, 72], [0, 69, "Ma"], [16, 69], [16, 68], [16, 67], [16, 66], 11, 11, 11, 11, [0, 61, "LP"], [0, 60, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 53, "LP"], 11, 11, 11, [0, 50, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, [16, 26], [0, 24, "sp"], [16, 24], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 109 [ , [15, 81], [15, 75], [15, 72], [15, 72], 12, [16, 69], [0, 68, "BKn"], [0, 67, "BKn"], [16, 67], [16, 66], [0, 64, "BKn"], 11, [16, 63], 11, 11, 11, 11, [0, 58, "LP"], 11, 11, 11, [0, 55, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, 12, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 110 [ , [15, 82], [15, 75], [15, 73], [15, 72], 12, [16, 70], [16, 69], 11, 11, [0, 66, "BKn"], 12, 11, [16, 64], [16, 63], [0, 61, "LP"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, [0, 52, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 45, "LP"], 11, 11, [0, 43, "LP"], 11, 11, 11, 11, 11, [0, 39, "LP"], 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, 11, 11, [16, 24], 11, 11, 11, [0, 20, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 111 [ , [15, 83], [15, 76], [15, 74], [15, 73], [15, 72], [16, 71], [16, 70], [16, 69], 11, 11, 11, 11, 11, [0, 63, "LP"], 12, 11, 11, 11, 11, 11, [0, 57, "LP"], 11, 11, 11, [0, 54, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, 11, 11, [16, 24], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 112 [ , [15, 84], [15, 77], [15, 75], [15, 74], [16, 72], [15, 72], [0, 70, "LP"], [0, 69, "LP"], [16, 69], 11, [0, 66, "LP"], 11, 11, 11, 11, 11, 11, [0, 60, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 49, "LP"], 11, 11, [0, 47, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 41, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 113 [ , [15, 84], [15, 78], [15, 75], [15, 75], [16, 72], [16, 72], 12, 11, 11, [0, 68, "LP"], 12, 11, [0, 65, "LP"], [0, 64, "LP"], [0, 63, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 53, "LP"], 11, 11, [0, 51, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [0, 26, "sp"], 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 114 [ , [15, 85], [15, 78], [15, 76], [15, 75], [16, 73], [16, 72], [16, 72], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 59, "LP"], [0, 58, "LP"], 11, 11, [0, 56, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, 12, 11, 11, 11, 11, [16, 24], [0, 22, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 115 [ , [15, 86], [15, 79], [15, 77], [15, 76], [16, 74], [16, 73], [16, 72], [0, 71, "LP"], 11, 11, [0, 68, "LP"], [0, 67, "LP"], 11, 11, 11, 11, 11, [0, 62, "LP"], [0, 61, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 46, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 116 [ , [15, 87], [15, 80], [15, 78], [15, 77], [16, 75], [16, 74], [16, 73], [16, 72], 11, [0, 70, "LP"], 12, 11, 11, [0, 66, "LP"], [0, 65, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 57, "LP"], 11, 11, [0, 55, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 44, "LP"], 11, 11, 11, 11, 11, [0, 40, "LP"], 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 117 [ , [15, 87], [15, 81], [15, 78], [15, 78], [16, 75], [16, 75], [16, 74], [14, 4], [16, 72], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 60, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 50, "LP"], 11, 11, [0, 48, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, 11, 11, 11, [16, 25], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 118 [ , [15, 88], [15, 81], [15, 79], [15, 78], [16, 76], [16, 75], [0, 74, "LP"], 12, 11, [16, 72], [0, 70, "LP"], [0, 69, "LP"], 11, 11, 11, 11, 11, [0, 64, "LP"], [0, 63, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 54, "LP"], 11, 11, [0, 52, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, [16, 32], [16, 30], [16, 30], [16, 30], [0, 28, "sp"], 11, 11, 11, [16, 26], [0, 24, "sp"], [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 119 [ , [15, 89], [15, 81], [15, 80], [15, 79], [16, 77], [16, 76], [16, 75], 11, 11, [16, 72], 12, 11, 11, [0, 68, "LP"], [0, 67, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 59, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 42, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], 11, [16, 31], [16, 30], [16, 30], 12, 11, 11, 11, 11, 12, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 16, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 8, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 120 [ , [15, 90], [15, 82], [15, 81], [15, 80], [16, 78], [16, 77], [16, 76], [0, 74, "Gur"], 11, [16, 73], [16, 72], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 62, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, 11, [16, 27], 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, [0, 18, "sp"], 11, 12, 11, 11, 11, [0, 14, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 121 [ , [15, 90], [15, 83], [15, 81], [15, 81], [16, 78], [16, 78], [0, 76, "LP"], 12, 11, [16, 74], [0, 72, "LP"], [0, 71, "LP"], 11, 11, 11, 11, 11, [0, 66, "LP"], [0, 65, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 58, "LP"], 11, 11, [0, 56, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 47, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, 11, [16, 33], [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [16, 27], 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 122 [ , [15, 91], [15, 84], [15, 81], [15, 81], [16, 79], [16, 78], 12, 11, 11, 11, 12, 11, 11, [0, 70, "LP"], [0, 69, "LP"], [0, 68, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 61, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 51, "LP"], 11, 11, [0, 49, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], 11, 11, 11, [16, 33], [16, 33], [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, [16, 28], [0, 26, "Jo"], 11, 11, 11, [16, 24], 11, 11, 11, [0, 20, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 81], 11, 11, 11], #V n = 123 [ , [15, 92], [15, 84], [15, 81], [15, 81], [16, 80], [16, 79], [16, 78], 11, 11, [16, 75], 11, 11, 11, 11, 11, 11, 11, [0, 67, "LP"], 11, 11, 11, [0, 64, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 53, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 36], [16, 36], 11, 11, [16, 34], [16, 33], [16, 33], [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, 12, 11, 11, 11, 11, [16, 24], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 12, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 124 [ , [15, 93], [15, 85], [15, 82], [15, 81], [15, 81], [16, 80], [0, 78, "LP"], [0, 77, "LP"], [0, 76, "LP"], [16, 76], [0, 74, "LP"], [0, 73, "LP"], 11, 11, [0, 70, "LP"], 11, 11, 11, 11, [0, 66, "LP"], 11, 11, 11, 11, 11, 11, 11, [0, 60, "LP"], 11, 11, 11, 11, 11, 11, [0, 55, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 37], [16, 36], [16, 36], 11, [16, 35], [16, 34], [16, 33], [16, 33], [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 125 [ , [15, 93], [15, 86], [15, 83], [15, 81], [15, 81], [15, 81], 12, [16, 78], 11, 11, 12, 11, 11, [0, 72, "LP"], 12, 11, 11, 11, 11, 11, 11, [0, 65, "LP"], 11, 11, [0, 63, "LP"], [0, 62, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, [16, 35], [16, 34], [16, 33], [16, 33], [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, 11, 11, 11, 11, 11, [16, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 126 [ , [15, 94], [15, 87], [15, 84], [15, 82], [15, 81], [15, 81], 12, [16, 79], [16, 78], 11, [0, 75, "LP"], 11, 11, 11, 11, 11, 11, [0, 69, "LP"], [0, 68, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 59, "LP"], 11, 11, [0, 57, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, [16, 35], [16, 34], [16, 33], [16, 33], [16, 32], [16, 31], [16, 30], [16, 30], 11, 11, 11, 11, 11, 11, 11, [16, 24], [0, 22, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 127 [ , [15, 95], [15, 87], [15, 84], [15, 83], [15, 82], [15, 81], [0, 80, "LP"], [0, 79, "LP"], [0, 78, "LP"], [16, 78], 12, 11, 11, 11, [0, 72, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 64, "LP"], 11, 11, 11, [0, 61, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 52, "LP"], 11, 11, [0, 50, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, [16, 35], [16, 34], [16, 33], [16, 33], [16, 32], [16, 31], [16, 30], [16, 30], [0, 28, "sp"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 128 [ , [15, 96], [15, 88], [15, 85], [15, 84], [15, 83], [15, 82], [15, 81], 11, 11, 11, 12, 11, 11, [0, 74, "LP"], 12, 11, 11, 11, 11, 11, 11, [0, 67, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 54, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, [0, 48, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, [16, 35], [16, 34], [16, 33], [0, 32, "sp"], [16, 32], [16, 31], [16, 30], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 129 [ , [15, 96], [15, 89], [15, 86], [15, 84], [15, 84], [15, 83], [16, 81], [15, 81], 11, 11, [0, 77, "LP"], [0, 76, "LP"], 11, 11, 11, 11, 11, [0, 71, "LP"], [0, 70, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 58, "LP"], 11, 11, [0, 56, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, [16, 35], [16, 34], [16, 33], 11, [16, 32], [16, 31], [16, 30], 11, 11, 11, 11, 11, 11, [0, 24, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 130 [ , [15, 97], [15, 90], [15, 87], [15, 85], [15, 84], [15, 84], [16, 82], [16, 81], [0, 80, "LP"], 11, 12, 11, 11, 11, [0, 74, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 66, "LP"], [0, 65, "LP"], 11, 11, [0, 63, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, [16, 35], [16, 34], [16, 33], 11, [16, 32], [16, 31], [16, 30], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 131 [ , [15, 98], [15, 90], [15, 87], [15, 86], [15, 85], [15, 84], [16, 83], [16, 82], [16, 81], 11, 12, 11, 11, 11, 12, 11, [0, 73, "Gur"], 11, 11, 11, 11, [0, 69, "LP"], [0, 68, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, [16, 35], [16, 34], [16, 33], 11, [16, 32], [16, 31], [16, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 132 [ , [15, 99], [15, 90], [15, 88], [15, 87], [15, 86], [16, 84], [15, 84], [16, 83], [16, 82], [16, 81], [0, 79, "LP"], [0, 78, "LP"], 11, 11, 11, 11, 11, 11, [0, 72, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 62, "LP"], 11, 11, [0, 60, "LP"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, [16, 35], [16, 34], [16, 33], 11, [16, 32], [0, 30, "sp"], [16, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 133 [ , [15, 99], [15, 91], [15, 89], [15, 87], [15, 87], [16, 85], [16, 84], [0, 83, "Da2"], [16, 83], [16, 82], 12, 11, 11, 11, [0, 76, "Gur"], [0, 75, "Gur"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, [0, 34, "Jo"], [16, 34], [16, 33], 11, 12, 11, [16, 30], 11, 11, 11, [0, 26, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 10, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 134 [ , [15, 100], [15, 92], [15, 90], [15, 88], [15, 87], [16, 86], [16, 85], [16, 84], 11, [0, 82, "Da2"], 12, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, [0, 71, "Da2"], [0, 70, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, [16, 34], [16, 33], 11, 11, 11, [16, 30], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 135 [ , [15, 101], [15, 93], [15, 90], [15, 89], [15, 88], [15, 87], [16, 86], [0, 84, "Gur"], [16, 84], 11, [0, 81, "Gur"], [0, 80, "Gur"], 11, 11, 11, 11, 11, 11, [0, 74, "Da2"], [0, 73, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, [16, 34], [16, 33], 11, 11, 11, [16, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 18, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 136 [ , [15, 102], [15, 93], [15, 90], [15, 90], [0, 88, "Ha"], [16, 87], [0, 86, "Gur"], 12, 11, [16, 84], 12, 11, 11, 11, [0, 78, "Gur"], [0, 77, "Gur"], 11, 11, 11, 11, 11, [0, 72, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, [16, 34], [16, 33], 11, 11, 11, [16, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 20, "sp"], 11, 12, 11, 11, 11, [0, 16, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 137 [ , [15, 102], [15, 94], [15, 91], [15, 90], 12, [16, 88], [16, 87], 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, [0, 75, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, [16, 34], [0, 32, "sp"], 11, 11, 11, [16, 30], [0, 28, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, [0, 3, "BEH"], 11, 11, 11, 11, 11], #V n = 138 [ , [15, 103], [15, 95], [15, 92], [15, 90], [15, 90], [16, 89], [16, 88], [0, 86, "Gur"], 11, 11, [0, 83, "Da2"], [0, 82, "Gur"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, 12, 11, 11, 11, [16, 30], 12, 11, 11, 11, 11, 11, 11, 11, 11, [0, 22, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 139 [ , [15, 104], [15, 96], [15, 93], [15, 91], [15, 90], [15, 90], [0, 88, "Da2"], 12, 11, 11, 12, 11, 11, 11, [0, 80, "Gur"], [0, 79, "Gur"], 11, 11, 11, 11, 11, [0, 74, "Da2"], [0, 73, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, 11, 11, 11, [16, 31], [16, 30], 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 140 [ , [15, 105], [15, 96], [15, 93], [15, 92], [15, 91], [15, 90], 12, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, [0, 77, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], 11, [16, 38], [16, 36], [16, 36], [16, 36], 11, 11, 11, 11, [16, 32], [16, 31], [16, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 14, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 141 [ , [15, 105], [15, 97], [15, 94], [15, 93], [15, 92], [16, 90], [15, 90], [0, 88, "Gur"], 11, 11, [0, 85, "Gur"], [0, 84, "Gur"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], 11, [16, 37], [16, 36], [16, 36], [16, 36], 11, 11, 11, 11, [16, 32], [0, 30, "Jo"], [16, 30], 11, 11, 11, 11, 11, 11, [0, 24, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 142 [ , [15, 106], [15, 98], [15, 95], [15, 93], [15, 93], [16, 91], [16, 90], 12, 11, 11, 12, 11, 11, 11, [0, 82, "Gur"], [0, 81, "Gur"], 11, 11, 11, 11, 11, [0, 76, "Da2"], [0, 75, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], [16, 38], [16, 37], [16, 36], [16, 36], [16, 36], [0, 34, "sp"], 11, [16, 33], 11, 12, 11, [16, 30], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 143 [ , [15, 107], [15, 99], [15, 96], [0, 93, "Lan"], [15, 93], [16, 92], [16, 91], [16, 90], 11, 11, 12, 11, 11, 11, 12, 11, 11, [0, 80, "Da2"], 11, [0, 78, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, 11, [16, 39], [16, 38], [16, 37], [16, 36], [16, 36], 12, 11, [16, 34], [16, 33], 11, 11, 11, [16, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 144 [ , [15, 108], [15, 99], [15, 96], 12, [16, 93], [15, 93], [16, 92], [0, 90, "Gur"], [16, 90], 11, [0, 87, "Gur"], [0, 86, "Da2"], 11, 11, 11, [0, 82, "Gur"], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, 11, [16, 39], [16, 39], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, [16, 34], [16, 33], 11, 11, 11, [16, 30], 11, 11, 11, [0, 26, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 145 [ , [15, 108], [15, 99], [15, 97], 12, [16, 94], [16, 93], [0, 92, "Gur"], 12, 11, [16, 90], 12, 11, 11, [0, 85, "Da9"], [0, 84, "Gur"], 12, 11, 11, 11, 11, 11, 11, [0, 77, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], 11, 11, [16, 40], [16, 39], [16, 39], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, [16, 34], [16, 33], 11, 11, 11, [16, 30], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 146 [ , [15, 109], [15, 100], [15, 98], [15, 96], [16, 95], [14, 3], [16, 93], 11, 11, 11, 12, [0, 87, "Gur"], 11, 11, 11, 11, 11, 11, [0, 81, "Da2"], [0, 80, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 42], [16, 42], 11, 11, [16, 40], [16, 39], [16, 39], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, [16, 34], [0, 32, "sp"], 11, 11, 11, [16, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 147 [ , [15, 110], [15, 101], [15, 99], [0, 96, "Lg"], [15, 96], 12, 11, [0, 92, "Gur"], 11, 11, [0, 89, "Gur"], 12, 11, 11, [0, 85, "Gur"], [0, 84, "Gur"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 43], [16, 42], [16, 42], 11, 11, [16, 40], [16, 39], [16, 39], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, 12, 11, 11, 11, 11, [16, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 148 [ , [15, 111], [15, 102], [15, 99], 12, [16, 96], 12, 11, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, [0, 78, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, [16, 40], [16, 39], [16, 39], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, 11, 11, 11, 11, 11, [16, 30], [0, 28, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 12, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 149 [ , [15, 111], [15, 102], [15, 99], 12, [16, 97], [16, 96], 11, 11, [16, 93], 11, 12, [0, 89, "Gur"], 11, 11, 11, 11, 11, 11, [0, 83, "Da2"], [0, 82, "Da2"], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, [16, 40], [16, 39], [16, 39], [16, 38], [16, 37], [16, 36], [16, 36], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 150 [ , [15, 112], [15, 103], [15, 100], [15, 99], [16, 98], [14, 3], [16, 96], [0, 94, "Da2"], [16, 94], [16, 93], [0, 91, "Gur"], 12, 11, 11, [0, 87, "Gur"], [0, 86, "Gur"], 11, 11, 11, 11, 11, [0, 81, "Da2"], [0, 80, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 45], 11, [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, [16, 40], [16, 39], [16, 39], [16, 38], [16, 37], [16, 36], [16, 36], [0, 34, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 151 [ , [15, 113], [15, 104], [15, 101], [15, 99], [15, 99], 12, 11, 12, 11, [16, 94], 12, 11, 11, 11, 12, 11, 11, 11, [0, 84, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, [16, 40], [16, 39], [16, 39], [16, 38], [16, 37], [16, 36], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 20, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 152 [ , [15, 114], [15, 105], [15, 102], [15, 100], [15, 99], 12, 11, [16, 96], 11, 11, 12, [0, 91, "Gur"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, [16, 40], [16, 39], [0, 38, "sp"], [16, 38], [16, 37], [16, 36], 11, 11, 11, 11, 11, 11, [0, 30, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 22, "sp"], 11, 12, 11, 11, 11, [0, 18, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 153 [ , [15, 114], [15, 105], [15, 102], [15, 101], [15, 100], [15, 99], 11, [0, 96, "Gur"], [16, 96], 11, [0, 93, "Gur"], 12, 11, 11, [0, 89, "Gur"], [0, 88, "Gur"], 11, 11, 11, 11, 11, [0, 83, "Da2"], [0, 82, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, [16, 40], [16, 39], 11, [16, 38], [16, 37], [16, 36], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 154 [ , [15, 115], [15, 106], [15, 103], [15, 102], [0, 100, "Ha"], [14, 3], [0, 98, "Gur"], 12, 11, [16, 96], 12, 11, 11, 11, 12, 11, 11, 11, [0, 86, "Da2"], [0, 85, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, [16, 40], [16, 39], 11, [16, 38], [16, 37], [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 24, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 6, "sp"], 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 155 [ , [15, 116], [15, 107], [15, 104], [15, 102], 12, 11, [16, 99], 11, 11, 11, 12, [0, 93, "Gur"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, [16, 40], [16, 39], 11, [16, 38], [0, 36, "Jo"], [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 156 [ , [15, 117], [15, 108], [15, 105], [15, 103], [15, 102], 11, [16, 100], [0, 98, "Gur"], 11, 11, [0, 95, "Gur"], 12, 11, 11, [0, 91, "Gur"], [0, 90, "Gur"], 11, 11, 11, 11, 11, 11, [0, 84, "Da9"], [0, 83, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, [16, 40], [16, 39], 11, 12, 11, [16, 36], 11, 11, 11, [0, 32, "sp"], 11, 11, 11, 11, 11, 11, 11, [0, 26, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 16, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 8, "Jo"], 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 157 [ , [15, 117], [15, 108], [15, 105], [15, 104], [0, 102, "Ma"], [15, 102], [0, 100, "Da2"], 12, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, [0, 88, "Da2"], [0, 87, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, [16, 40], [16, 39], 11, 11, 11, [16, 36], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 158 [ , [15, 118], [15, 108], [15, 106], [15, 105], 12, 11, 12, 11, [16, 99], 11, 12, [0, 95, "Gur"], 11, 11, 11, [0, 91, "Gur"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, [16, 40], [16, 39], 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 159 [ , [15, 119], [15, 109], [15, 107], [15, 105], 12, 11, [16, 102], [0, 100, "Da2"], [16, 100], [16, 99], [0, 97, "Gur"], 12, 11, [0, 94, "Gur"], [0, 93, "Gur"], 12, 11, 11, 11, 11, 11, 11, [0, 86, "Da9"], [0, 85, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, [16, 40], [16, 39], 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, [0, 28, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 160 [ , [15, 120], [15, 110], [15, 108], [15, 106], [15, 105], 11, [0, 102, "Gur"], 12, 11, [16, 100], 12, 11, 11, 11, 11, 11, 11, 11, [0, 90, "Da2"], [0, 89, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, [16, 40], [0, 38, "sp"], 11, 11, [16, 36], [16, 36], [0, 34, "sp"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 161 [ , [15, 120], [15, 111], [15, 108], [15, 107], [0, 105, "Gur"], [15, 105], 12, 11, 11, 11, 12, [0, 97, "Gur"], [0, 96, "Da2"], 11, 11, [0, 93, "Gur"], 11, 11, 11, 11, 11, 11, [0, 87, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, 12, 11, 11, [16, 37], [16, 36], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 162 [ , [15, 121], [15, 111], [15, 108], [15, 108], 12, 11, 12, [0, 102, "Gur"], [16, 102], 11, [0, 99, "Gur"], 12, 11, 11, [0, 95, "Gur"], 12, 11, 11, 11, [0, 90, "Da2"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, 11, 11, [16, 38], [16, 37], [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 163 [ , [15, 122], [15, 112], [15, 108], [15, 108], 12, 11, [0, 104, "Gur"], 12, 11, [0, 101, "Gur"], 12, 11, 11, 11, 11, 11, 11, 11, [0, 92, "Da2"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 32], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], 11, [16, 44], [16, 42], [16, 42], [16, 42], 11, 11, 11, 11, [16, 38], [16, 37], [16, 36], 11, 11, 11, 11, 11, 11, [0, 30, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 14, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 164 [ , [15, 123], [15, 113], [15, 109], [15, 108], [15, 108], 11, [16, 105], 11, 11, 11, 11, [0, 99, "Gur"], [0, 98, "Gur"], 11, 11, [0, 95, "Gur"], 11, 11, 11, 11, 11, 11, [0, 89, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, [14, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], 11, [16, 43], [16, 42], [16, 42], [16, 42], 11, 11, [16, 39], 11, [16, 38], [16, 37], [16, 36], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 165 [ , [15, 123], [15, 114], [15, 110], [15, 108], [15, 108], [0, 107, "Da6"], [16, 106], [0, 104, "Gur"], 11, 11, [0, 101, "Gur"], 12, 11, 11, [0, 97, "Gur"], 12, 11, 11, 11, [0, 92, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 38], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], [16, 44], [16, 43], [16, 42], [16, 42], [16, 42], [0, 40, "sp"], [16, 40], [16, 39], 11, [16, 38], [0, 36, "sp"], [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 166 [ , [15, 124], [15, 114], [15, 111], [15, 109], [15, 108], [15, 108], [0, 106, "Da2"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, [0, 94, "Da2"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 46], [16, 45], [16, 44], [16, 43], [16, 42], [16, 42], 12, 11, [16, 40], [16, 39], 11, 12, 11, [16, 36], 11, 11, 11, [0, 32, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 10, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 167 [ , [15, 125], [15, 115], [15, 111], [15, 110], [16, 108], [15, 108], 12, 11, 11, 11, 12, [0, 101, "Da2"], [0, 100, "Da2"], 11, 11, [0, 97, "Gur"], [0, 96, "Da2"], 11, 11, 11, 11, 11, [0, 91, "Da9"], [0, 90, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, 11, 11, 11, 11, 11, 11, [16, 48], 11, 11, 11, [16, 45], [16, 45], [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, [16, 40], [16, 39], 11, 11, 11, [16, 36], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 168 [ , [15, 126], [15, 116], [15, 112], [15, 111], [16, 109], [16, 108], [15, 108], [0, 106, "Da2"], 11, [16, 105], [0, 103, "Gur"], 12, 11, 11, [0, 99, "Gur"], 12, 11, 11, 11, [0, 94, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, 11, 11, 11, 11, 11, [16, 48], [16, 48], 11, 11, [16, 46], [16, 45], [16, 45], [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, [16, 40], [16, 39], 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 24, "sp"], 11, 11, [0, 22, "sp"], 11, 11, [0, 20, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 169 [ , [15, 126], [15, 117], [15, 113], [15, 111], [16, 110], [16, 109], [16, 108], 12, 11, [16, 106], 12, [0, 102, "Gur"], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, 11, 11, 11, 11, [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 45], [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, [16, 40], [0, 38, "sp"], 11, 11, 11, [16, 36], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 170 [ , [15, 127], [15, 117], [15, 114], [15, 112], [15, 111], [16, 110], [16, 109], [0, 107, "Gur"], 11, 11, 12, 12, 11, 11, 11, [0, 99, "Gur"], [0, 98, "Da2"], 11, 11, 11, 11, 11, [0, 93, "Da9"], [0, 92, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 40], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, 11, 11, 11, [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 45], [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, 12, 11, 11, 11, 11, [16, 36], [0, 34, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 26, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 171 [ , [15, 128], [15, 117], [15, 114], [15, 113], [16, 111], [15, 111], [16, 110], [16, 108], 11, 11, [0, 105, "Gur"], 12, 11, 11, [0, 101, "Gur"], 12, 11, 11, [0, 97, "Da2"], [0, 96, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, 11, 11, 11, [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 45], [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, [0, 28, "Jo"], 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 172 [ , [15, 129], [15, 118], [15, 115], [15, 114], [16, 112], [16, 111], [0, 110, "Gur"], [16, 109], [16, 108], 11, 12, [0, 104, "Gur"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 93, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, 11, [16, 51], 11, [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 45], [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 18, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 6], [0, 4, "sp"], 11, 11, 11, 11, 11, 11, 11, 11], #V n = 173 [ , [15, 129], [15, 119], [15, 116], [15, 114], [16, 113], [16, 112], [16, 111], [0, 109, "Gur"], [16, 109], [16, 108], 11, 12, 11, [0, 103, "Gur"], 11, [0, 101, "Gur"], [0, 100, "Da2"], 11, 11, 11, 11, 11, [0, 95, "Da9"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 51], 11, [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 45], [16, 44], [16, 43], [16, 42], [16, 42], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 174 [ , [15, 130], [15, 120], [15, 117], [15, 115], [15, 114], [16, 113], [16, 112], 12, 11, [16, 109], [0, 107, "Gur"], 12, 11, 11, 11, 12, 11, 11, [0, 99, "Da2"], [0, 98, "Da2"], [0, 97, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 47], 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, 11, [16, 54], 11, 11, [16, 52], [16, 51], 11, [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [16, 45], [16, 44], [16, 43], [16, 42], [16, 42], [0, 40, "sp"], 11, 11, 11, 11, [0, 36, "Jo"], 11, 11, 11, 11, 11, 11, 11, [0, 30, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 175 [ , [15, 131], [15, 120], [15, 117], [15, 116], [16, 114], [15, 114], [0, 112, "Da2"], [16, 111], 11, 11, 12, [0, 106, "Gur"], 11, 11, 11, [0, 102, "Da2"], 11, 11, 11, 11, 11, 11, [0, 96, "Da2"], [0, 95, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, 11, 11, [16, 54], [16, 54], 11, 11, [16, 52], [16, 51], 11, [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], [0, 44, "Jo"], [16, 44], [16, 43], [16, 42], 12, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 176 [ , [15, 132], [15, 121], [15, 117], [15, 117], [16, 115], [16, 114], 12, [0, 111, "Gur"], [16, 111], 11, 11, 12, 11, [0, 105, "Gur"], 11, 12, 11, 11, 11, [0, 99, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 50], 11, 11, 11, 11, 11, 11, [16, 55], [16, 54], [16, 54], 11, 11, [16, 52], [16, 51], 11, [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], 11, [16, 44], [16, 43], [16, 42], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 177 [ , [15, 132], [15, 122], [15, 118], [15, 117], [16, 116], [16, 115], [16, 114], 12, 11, [16, 111], [0, 109, "Gur"], 12, 11, 11, 11, 12, 11, 11, [0, 101, "Da2"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 47], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], [16, 55], [16, 54], [16, 54], 11, 11, [16, 52], [16, 51], 11, [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], 11, [16, 44], [16, 43], [16, 42], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 32, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 12, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 178 [ , [15, 133], [15, 123], [15, 119], [15, 117], [15, 117], [16, 116], [0, 114, "Gur"], 12, 11, 11, 12, [0, 108, "Gur"], [0, 107, "Gur"], 11, 11, [0, 104, "Da2"], [0, 103, "Da2"], 11, 11, 11, 11, 11, [0, 98, "Da9"], [0, 97, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, [14, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 56], [16, 55], [16, 54], [16, 54], 11, 11, [16, 52], [16, 51], 11, [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], 11, [16, 44], [16, 43], [16, 42], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 16, "sp"], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 179 [ , [15, 134], [15, 123], [15, 120], [15, 118], [15, 117], [15, 117], 12, [0, 113, "Gur"], 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, [0, 101, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 57], 11, [16, 56], [16, 55], [16, 54], [16, 54], 11, 11, [16, 52], [16, 51], 11, [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], 11, [16, 44], [0, 42, "sp"], [16, 42], 11, 11, 11, [0, 38, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 180 [ , [15, 135], [15, 124], [15, 120], [15, 119], [16, 117], [15, 117], 12, 12, 11, 11, [0, 111, "Gur"], 12, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 58], [16, 57], 11, [16, 56], [16, 55], [16, 54], [16, 54], 11, 11, [16, 52], [16, 51], 11, [16, 50], [16, 49], [16, 48], [16, 48], 11, [16, 47], [16, 46], [16, 45], 11, 12, 11, [16, 42], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 181 [ , [15, 135], [15, 125], [15, 121], [15, 120], [16, 118], [16, 117], [0, 116, "Da9"], 12, 11, 11, 12, [0, 110, "Gur"], [0, 109, "Gur"], 11, 11, [0, 106, "Da2"], [0, 105, "Da2"], 11, 11, 11, 11, 11, [0, 100, "Da9"], [0, 99, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 58], [16, 57], 11, [16, 56], [16, 55], [16, 54], [16, 54], 11, 11, [16, 52], [16, 51], 11, [16, 50], [16, 49], [16, 48], [16, 48], 11, [0, 46, "sp"], [16, 46], [16, 45], 11, 11, 11, [16, 42], 11, 11, 11, 11, 11, 11, 11, 11, [0, 34, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 182 [ , [15, 136], [15, 126], [15, 122], [15, 120], [16, 119], [16, 118], [16, 117], 13, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, [0, 103, "Da2"], [0, 102, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 56], [16, 57], 11, [14, 58], [16, 55], [16, 54], [16, 54], 11, 11, [16, 52], [16, 51], 11, [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, [16, 46], [16, 45], 11, 11, 11, [16, 42], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 183 [ , [15, 137], [15, 126], [15, 123], [15, 121], [15, 120], [16, 119], [16, 118], [0, 115, "Gur"], 11, [0, 114, "Gur"], [0, 113, "Gur"], 12, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, [0, 100, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, [16, 57], 11, 11, [16, 55], [16, 54], [16, 54], 11, 11, [16, 52], [16, 51], 11, [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, [16, 46], [16, 45], 11, 11, [16, 42], [16, 42], [0, 40, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 184 [ , [15, 138], [15, 126], [15, 123], [15, 122], [16, 120], [15, 120], [0, 118, "Da2"], 12, 11, 11, 11, [0, 112, "Gur"], [0, 111, "Gur"], 11, 11, [0, 108, "Da2"], [0, 107, "Da2"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 52], 11, 11, [16, 61], [16, 60], 11, 11, 11, 11, [16, 57], 11, 11, [16, 55], [16, 54], [14, 61], 11, 11, [16, 52], [16, 51], 11, [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, [16, 46], [0, 44, "sp"], 11, [16, 43], [16, 42], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 26, "sp"], 11, 11, [0, 24, "sp"], 11, 11, [0, 22, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 185 [ , [15, 138], [15, 127], [15, 124], [15, 123], [16, 121], [16, 120], 12, 12, 11, 11, 11, 12, 11, 11, [0, 110, "Gur"], 12, 11, 11, 11, [0, 105, "Da2"], [0, 104, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 61], [16, 60], 11, 11, 11, 11, [16, 57], 11, 11, [16, 55], [16, 54], 11, 11, 11, [16, 52], [16, 51], 11, [16, 50], [16, 48], [16, 48], [16, 48], 11, 11, 12, 11, [16, 44], [16, 43], [16, 42], 11, 11, 11, 11, 11, 11, [0, 36, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 28, "sp"], 11, 12, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 186 [ , [15, 139], [15, 128], [15, 125], [15, 123], [16, 122], [16, 121], [16, 120], 12, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, [0, 102, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 30], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 61], [16, 60], 11, [14, 57], 11, 11, [16, 57], 11, 11, [16, 55], [16, 54], 11, 11, 11, [16, 52], [16, 51], 11, [16, 49], [16, 48], [16, 48], [16, 48], 11, 11, 11, 11, [16, 44], [16, 43], [16, 42], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 187 [ , [15, 140], [15, 129], [15, 126], [15, 124], [15, 123], [16, 122], [0, 120, "Gur"], 12, 11, 11, 11, [0, 114, "Gur"], [0, 113, "Gur"], 11, 11, [0, 110, "Gur"], [0, 109, "Da2"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, [14, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 61], [16, 60], 11, 11, 11, 11, [16, 57], 11, 11, [16, 55], [16, 54], 11, 11, 11, [14, 65], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, 11, [16, 45], 11, [16, 44], [16, 43], [16, 42], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 30, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 188 [ , [15, 141], [15, 129], [15, 126], [15, 125], [16, 123], [15, 123], 12, [0, 119, "Gur"], 11, 11, 11, 12, 11, 11, [0, 112, "Da2"], 12, 11, 11, 11, [0, 107, "Da2"], [0, 106, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 61], [16, 60], 11, 11, 11, 11, [16, 57], 11, 11, [16, 55], [16, 54], 11, 11, 11, 11, [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], 11, [16, 46], [16, 45], 11, [16, 44], [0, 42, "sp"], [16, 42], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 20, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 189 [ , [15, 141], [15, 130], [15, 126], [15, 126], [16, 124], [16, 123], 12, 12, 11, 11, [0, 117, "Gur"], 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, [0, 104, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 57], [16, 60], 11, 11, 11, 11, [16, 57], 11, 11, [16, 55], [16, 54], 11, 11, 11, [16, 51], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], [16, 48], [0, 46, "sp"], [16, 46], [16, 45], 11, 12, 11, [16, 42], 11, 11, 11, [0, 38, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 190 [ , [15, 142], [15, 131], [15, 127], [15, 126], [16, 125], [16, 124], [16, 123], 12, 11, 11, 12, [0, 116, "Gur"], [0, 115, "Gur"], [0, 114, "Gur"], 11, [0, 112, "Gur"], [0, 111, "Da2"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, [16, 57], 11, 11, [16, 54], [16, 54], 11, 11, [16, 52], [16, 51], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 12, 11, [16, 46], [16, 45], 11, 11, 11, [16, 42], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, [0, 32, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 14, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 191 [ , [15, 143], [15, 132], [15, 128], [15, 126], [15, 126], [0, 124, "Da6"], [16, 123], 12, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, [0, 110, "Da2"], [0, 109, "Da2"], [0, 108, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, [14, 62], 11, [16, 55], [16, 54], [16, 54], 11, [16, 53], [16, 52], [16, 51], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, [16, 46], [16, 45], 11, 11, 11, [16, 42], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 192 [ , [15, 144], [15, 132], [15, 129], [15, 127], [15, 126], 12, [16, 124], [0, 122, "Da2"], [0, 121, "Da2"], 11, [0, 119, "Gur"], 12, [0, 116, "Gur"], 11, 11, 11, [0, 112, "Da2"], 11, 11, 11, 11, 11, [0, 107, "Da9"], [0, 106, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, [16, 56], [16, 55], [16, 54], [16, 54], 11, [16, 53], [16, 52], [16, 51], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, [16, 46], [0, 44, "Jo"], 11, 11, 11, [16, 42], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 193 [ , [15, 144], [15, 133], [15, 129], [15, 128], [16, 126], [15, 126], [16, 125], 12, 11, 11, 12, [0, 118, "Gur"], 12, 11, 11, [0, 114, "Gur"], 12, 11, 11, 11, [0, 109, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, 11, 11, 11, [16, 66], 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, 11, 11, [16, 56], [16, 55], [16, 54], [16, 54], 11, [16, 53], [16, 52], [16, 51], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, 12, 11, 11, 11, 11, [16, 42], [0, 40, "sp"], 11, 11, 11, 11, 11, 11, 11, [0, 34, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 18, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 194 [ , [15, 145], [15, 134], [15, 130], [15, 129], [16, 127], [16, 126], [0, 125, "Gur"], [0, 123, "Gur"], 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, [0, 111, "Da2"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, 11, 11, [16, 67], [16, 66], 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, 11, [16, 57], 11, [16, 56], [16, 55], [16, 54], [16, 54], 11, [16, 53], [16, 52], [16, 51], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 195 [ , [15, 146], [15, 135], [15, 131], [15, 129], [16, 128], [16, 127], [16, 126], 12, 11, [0, 122, "Gur"], [0, 121, "Gur"], 12, [0, 118, "Gur"], 11, 11, 11, [0, 114, "Da2"], 11, 11, 11, 11, 11, 11, [0, 108, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, 11, [16, 68], [16, 67], [16, 66], 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], 11, [16, 56], [16, 55], [16, 54], [16, 54], 11, [16, 53], [16, 52], [16, 51], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 196 [ , [15, 147], [15, 135], [15, 132], [15, 130], [15, 129], [16, 128], [16, 126], 12, 11, 11, 11, [0, 120, "Gur"], 12, 11, 11, [0, 116, "Gur"], 12, 11, 11, [0, 112, "Da2"], [0, 111, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, 11, 11, [16, 68], [16, 67], [16, 66], 11, 11, 11, 11, 11, 11, 11, 11, [16, 60], 11, 11, [16, 58], [16, 57], 11, [16, 56], [16, 55], [16, 54], [16, 54], 11, [16, 53], [16, 52], [16, 51], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 36, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 197 [ , [15, 147], [15, 135], [15, 132], [15, 131], [16, 129], [15, 129], [16, 127], [0, 125, "Gur"], [0, 124, "Da2"], 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, [0, 109, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, 11, [16, 69], 11, [16, 68], [16, 67], [16, 66], 11, 11, 11, 11, 11, 11, 11, [16, 60], [16, 60], 11, 11, [16, 58], [16, 57], 11, [16, 56], [16, 55], [16, 54], [16, 54], 11, [16, 53], [16, 52], [16, 51], [16, 51], [16, 50], [16, 49], [16, 48], [16, 48], [0, 46, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 198 [ , [15, 148], [15, 136], [15, 133], [15, 132], [16, 130], [16, 129], [16, 128], 12, 11, 11, [0, 123, "Gur"], 12, [0, 120, "Gur"], 11, 11, 11, [0, 116, "Da2"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, [16, 70], [16, 69], 11, [16, 68], [16, 67], [16, 66], 11, 11, 11, 11, 11, 11, [16, 61], [16, 60], [16, 60], 11, 11, [16, 58], [16, 57], 11, [16, 56], [16, 55], [16, 54], [16, 54], 11, [16, 53], [16, 52], [16, 51], [16, 51], [16, 50], [16, 49], [16, 48], 12, 11, 11, 11, 11, 11, [0, 42, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 199 [ , [15, 149], [15, 137], [15, 134], [15, 132], [16, 131], [16, 129], [16, 129], 12, 11, 11, 11, [0, 122, "Gur"], 12, 11, 11, [0, 118, "Gur"], 12, 11, 11, [0, 114, "Da2"], [0, 113, "Da2"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, [16, 70], [16, 69], 11, [16, 68], [16, 67], [16, 66], 11, 11, 11, 11, 11, [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, [16, 58], [16, 57], 11, [16, 56], [16, 55], [16, 54], [16, 54], 11, [14, 72], [16, 52], [16, 51], [0, 50, "sp"], [16, 50], [16, 49], [16, 48], 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 200 [ , [15, 150], [15, 138], [15, 135], [15, 133], [15, 132], [16, 130], [16, 129], 12, [0, 126, "Da2"], 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, [0, 111, "Da9"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 28], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, [16, 70], [16, 69], 11, [16, 68], [16, 67], [16, 66], 11, 11, 11, 11, 11, [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, [16, 58], [16, 57], 11, [16, 56], [16, 55], [16, 54], [16, 54], 11, 11, [16, 52], [16, 51], 11, [16, 50], [16, 49], [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 38, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 28, "sp"], 11, 11, [0, 26, "sp"], 11, 11, [0, 24, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 201 [ , [15, 150], [15, 138], [15, 135], [15, 134], [16, 132], [16, 131], [16, 130], [16, 129], 12, 11, [0, 125, "Gur"], 12, [0, 122, "Gur"], 11, 11, [0, 119, "Gur"], [0, 118, "DM4"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], [14, 26], 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], 11, 11, [16, 70], [16, 69], 11, [16, 68], [16, 67], [16, 66], 11, 11, 11, [16, 63], 11, [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, [16, 58], [16, 57], 11, [16, 56], [16, 55], [16, 54], [16, 54], 11, 11, [16, 52], [16, 51], 11, [16, 50], [16, 49], [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 30, "sp"], 11, 12, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 202 [ , [15, 151], [15, 139], [15, 135], [15, 135], [16, 133], [16, 132], [16, 131], 13, 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 72], [16, 72], 11, 11, [16, 70], [16, 69], 11, [16, 68], [16, 67], [16, 66], 11, 11, [16, 64], [16, 63], 11, [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, [16, 58], [16, 57], 11, [16, 56], [16, 55], [16, 54], [16, 54], 11, 11, [16, 52], [16, 51], 11, [16, 50], [0, 48, "sp"], [16, 48], 11, 11, 11, [0, 44, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 32, "Jo"], 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 203 [ , [15, 152], [15, 140], [15, 135], [15, 135], [0, 133, "Da5"], [16, 132], [0, 131, "Gur"], [0, 129, "Gur"], [0, 128, "Gur"], 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 73], [16, 72], [16, 72], 11, 11, [16, 70], [16, 69], 11, [16, 68], [16, 67], [16, 66], 11, [16, 65], [16, 64], [16, 63], 11, [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, [16, 58], [16, 57], 11, [16, 56], [16, 55], [16, 54], [16, 54], 11, 11, [16, 52], [16, 51], 11, 12, 11, [16, 48], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 204 [ , [15, 153], [15, 141], [15, 136], [15, 135], 12, [16, 133], [16, 132], 12, 11, 11, [0, 127, "Gur"], 11, [0, 124, "Gur"], 11, 11, [0, 121, "Gur"], 11, 11, 11, [0, 117, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 73], [16, 72], [16, 72], 11, 11, [16, 70], [16, 69], 11, [16, 68], [16, 67], [16, 66], 11, [16, 65], [16, 64], [16, 63], 11, [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, [16, 58], [16, 57], 11, [16, 56], [16, 55], [16, 54], [16, 54], 11, 11, [16, 52], [16, 51], 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, [0, 40, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 22, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 16, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 205 [ , [15, 153], [15, 141], [15, 137], [15, 135], [15, 135], [16, 134], [16, 133], 12, 11, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 73], [16, 72], [16, 72], 11, 11, [16, 70], [16, 69], 11, [16, 68], [16, 66], [16, 66], 11, [16, 65], [16, 64], [16, 63], 11, [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, [16, 58], [16, 57], 11, [16, 56], [16, 55], [16, 54], [16, 54], 11, 11, [16, 52], [16, 51], 11, 11, [16, 48], [16, 48], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, [0, 34, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 206 [ , [15, 154], [15, 142], [15, 138], [15, 136], [15, 135], [15, 135], [16, 134], [0, 131, "Gur"], 11, 11, 11, 13, 12, 11, 11, 12, [0, 121, "DM4"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 75], 11, 11, [16, 73], [16, 72], [16, 72], 11, 11, [16, 70], [16, 69], 11, [16, 67], [16, 66], [16, 66], 11, [16, 65], [16, 64], [16, 63], 11, [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, [16, 58], [16, 57], 11, [16, 56], [16, 55], [16, 54], [16, 54], 11, 11, [16, 52], [16, 51], 11, [16, 49], [16, 48], [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 10, "sp"], 11, 11, 11, [0, 8, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 207 [ , [15, 155], [15, 143], [15, 138], [15, 137], [16, 135], [15, 135], [15, 135], 12, 11, 11, [0, 129, "Gur"], [0, 127, "Gur"], [0, 126, "Gur"], 11, 11, [0, 123, "Gur"], 12, 11, 11, 12, [0, 118, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 75], 11, 11, [16, 73], [16, 72], [16, 72], 11, 11, [16, 70], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], 11, [16, 65], [16, 64], [16, 63], 11, [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, [16, 58], [16, 57], 11, [16, 56], [16, 54], [16, 54], [16, 54], 11, 11, [16, 52], [0, 50, "sp"], [16, 50], [16, 49], [16, 48], [16, 48], [0, 46, "sp"], 11, 11, 11, 11, [0, 42, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 208 [ , [15, 156], [15, 144], [15, 139], [15, 138], [16, 136], [16, 135], [15, 135], 12, 11, 11, 12, 12, 11, 11, 11, 12, 11, 11, 11, [0, 120, "DM4"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 75], 11, 11, [16, 73], [16, 72], [16, 72], 11, 11, [16, 70], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], 11, [16, 65], [16, 64], [16, 63], 11, [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, [16, 58], [16, 57], 11, [16, 55], [16, 54], [16, 54], [16, 54], 11, 11, 12, 11, [16, 50], [16, 49], [16, 48], 12, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, [0, 36, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 209 [ , [15, 156], [15, 144], [15, 140], [15, 138], [16, 137], [16, 136], [16, 135], 12, 11, 11, 11, 12, 11, 11, 11, 12, [0, 123, "DM4"], 11, 11, 11, 11, [0, 118, "DM4"], 11, [0, 117, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 75], 11, 11, [16, 73], [16, 72], [16, 72], 11, 11, [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], 11, [16, 65], [16, 64], [16, 63], 11, [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 55], [16, 54], [16, 54], [16, 54], 11, 11, [16, 51], 11, [16, 50], [16, 49], [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 20, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 210 [ , [15, 157], [15, 144], [15, 141], [15, 139], [15, 138], [16, 137], [16, 135], [16, 135], 11, 11, [16, 132], [0, 129, "Gur"], 11, 11, 11, [0, 125, "Gur"], 12, 11, 11, 11, [0, 120, "DM4"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 75], 11, 11, [16, 73], [16, 72], [16, 72], 11, [16, 70], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], 11, [16, 65], [16, 64], [16, 63], 11, [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 55], [16, 54], [16, 54], [16, 54], 11, [16, 52], [16, 51], 11, [16, 50], [16, 49], [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 211 [ , [15, 158], [15, 145], [15, 141], [15, 140], [16, 138], [15, 138], [16, 136], [16, 135], 13, 13, [16, 133], 12, 11, 11, 11, 12, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 75], 11, 11, [16, 73], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], 11, [16, 65], [16, 64], [16, 63], 11, [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, [16, 57], [16, 57], [16, 56], [16, 55], [16, 54], [16, 54], [16, 54], [16, 53], [16, 52], [16, 51], 11, [16, 50], [0, 48, "sp"], [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 38, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 212 [ , [15, 159], [15, 146], [15, 142], [15, 141], [16, 139], [16, 138], [16, 137], [0, 135, "Gur"], [0, 134, "Gur"], [0, 133, "Gur"], 11, 12, [0, 129, "Gur"], 11, 11, 12, [0, 125, "DM4"], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 78], 11, 11, 11, 11, [16, 75], 11, 11, [16, 73], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], 11, [16, 65], [16, 64], [16, 63], 11, [16, 62], [16, 60], [16, 60], [16, 60], 11, [16, 58], [16, 57], [16, 57], [16, 56], [16, 55], [16, 54], [16, 54], [16, 54], [0, 52, "sp"], [16, 52], [16, 51], 11, 12, 11, [16, 48], 11, 11, 11, [0, 44, "sp"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 12, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 213 [ , [15, 159], [15, 147], [15, 143], [15, 141], [16, 140], [16, 139], [16, 138], 12, 11, 11, 11, [0, 131, "Gur"], 12, 11, 11, [0, 127, "Gur"], 12, 11, 11, 11, [0, 122, "DM4"], [0, 121, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 78], 11, 11, 11, 11, [16, 75], 11, 11, [16, 73], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], 11, [16, 65], [16, 64], [16, 63], 11, [16, 61], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 57], [16, 56], [16, 55], [16, 54], [16, 54], 12, 11, [16, 52], [16, 51], 11, 11, 11, [16, 48], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 214 [ , [15, 160], [15, 147], [15, 144], [15, 142], [15, 141], [16, 140], [16, 138], 12, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, [0, 124, "DM4"], 12, 11, 11, [0, 120, "DM4"], 11, 11, 11, 11, 11, 11, 11, [14, 16], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 78], 11, 11, 11, 11, [16, 75], 11, 11, [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], 11, [16, 65], [16, 64], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 57], [16, 56], [16, 55], [16, 54], [16, 54], 11, 11, [16, 52], [16, 51], 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, 11, 11, [0, 40, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 215 [ , [15, 161], [15, 148], [15, 144], [15, 143], [16, 141], [15, 141], [16, 139], [0, 137, "Gur"], 11, 11, 11, 12, [0, 131, "Gur"], 11, 11, 11, [0, 127, "DM4"], 11, 11, 11, [0, 123, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 78], 11, 11, 11, 11, [16, 75], 11, [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], 11, [16, 65], [16, 64], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 57], [16, 56], [16, 55], [16, 54], [16, 54], 11, 11, [16, 52], [16, 51], 11, 11, 11, [16, 48], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 28, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 216 [ , [15, 162], [15, 149], [15, 144], [15, 144], [16, 142], [16, 141], [16, 140], 12, 11, 11, 11, [0, 133, "Gur"], 12, 11, 11, [0, 129, "Gur"], 12, 11, 11, 13, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 24], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 78], 11, 11, 11, 11, [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], 11, [16, 65], [16, 63], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 57], [16, 56], [16, 55], [16, 54], [16, 54], 11, 11, [16, 52], [0, 50, "sp"], 11, 11, 11, [16, 48], [0, 46, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 30, "sp"], 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 217 [ , [15, 162], [15, 150], [15, 145], [15, 144], [16, 143], [16, 142], [16, 141], 12, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, 13, 11, 11, 11, [0, 122, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 78], 11, 11, 11, 11, [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], 11, [16, 64], [16, 63], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 57], [16, 56], [16, 55], [16, 54], [16, 54], 11, 11, 12, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 32, "sp"], 11, 12, 11, 11, 11, 11, 11, 11, [0, 26, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 218 [ , [15, 163], [15, 150], [15, 146], [15, 144], [15, 144], [16, 143], [16, 141], 12, 11, [0, 137, "Gur"], 11, 12, [0, 133, "Gur"], 11, 11, 11, [0, 129, "DM4"], [0, 128, "DM4"], 11, [0, 125, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 26], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 78], 11, 11, 11, [16, 75], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 57], [16, 56], [16, 55], [16, 54], [16, 54], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 42, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 34, "sp"], 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 18, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 219 [ , [15, 164], [15, 151], [15, 147], [15, 145], [15, 144], [15, 144], [16, 142], [16, 141], 11, 12, 11, [0, 135, "Gur"], 12, 11, 11, [0, 131, "Gur"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 20], [14, 20], 11, 11, 11, 11, 11, 11, [14, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 78], 11, 11, [16, 76], [16, 75], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 68], [16, 66], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 57], [16, 56], [16, 55], [16, 54], [16, 54], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 24, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 220 [ , [15, 165], [15, 152], [15, 147], [15, 146], [16, 144], [15, 144], [16, 143], 13, 13, 12, 11, 12, 11, 11, 11, 12, 11, 11, 11, 12, 11, 11, 11, [0, 124, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 78], 11, [16, 77], [16, 76], [16, 75], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 67], [16, 66], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 57], [16, 56], [16, 55], [16, 54], [16, 54], 11, 11, 11, 11, 11, [0, 48, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 36, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 221 [ , [15, 165], [15, 153], [15, 148], [15, 147], [16, 145], [16, 144], [0, 143, "Gur"], [0, 141, "Gur"], [0, 140, "Gur"], 11, 11, 12, [0, 135, "Gur"], 11, 11, 11, [0, 131, "DM4"], [0, 130, "DM4"], 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 78], 11, [16, 77], [16, 76], [16, 75], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [16, 57], [16, 56], [16, 55], [16, 54], [16, 54], [0, 52, "sp"], 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 222 [ , [15, 166], [15, 153], [15, 149], [15, 147], [16, 146], [16, 145], [16, 144], 12, 11, 11, 11, [0, 137, "Gur"], 12, 11, [0, 134, "Gur"], [0, 133, "Gur"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 78], 11, [16, 77], [16, 76], [16, 75], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], [0, 56, "sp"], [16, 56], [16, 55], [16, 54], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 44, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 14, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 6, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 223 [ , [15, 167], [15, 153], [15, 150], [15, 148], [15, 147], [16, 146], [16, 144], 12, 11, 11, 11, 12, 11, 11, 11, 11, [0, 132, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 78], [16, 78], 11, [16, 77], [16, 76], [16, 75], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], 11, [16, 56], [16, 55], [16, 54], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, [0, 38, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 224 [ , [15, 168], [15, 154], [15, 150], [15, 149], [16, 147], [15, 147], [16, 145], [0, 143, "Gur"], 11, 11, 11, 12, [0, 137, "Gur"], 11, 11, 11, 12, 11, 11, 11, [0, 129, "DM4"], [0, 128, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 79], [16, 78], [16, 78], 11, [16, 77], [16, 76], [16, 75], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 70], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], 11, [16, 56], [16, 55], [16, 54], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 22, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 225 [ , [15, 168], [15, 155], [15, 151], [15, 150], [16, 148], [16, 147], [16, 146], 12, 11, 11, 11, [0, 139, "Gur"], 12, 11, [0, 136, "Gur"], [0, 135, "Gur"], 12, 11, 11, [0, 131, "DM4"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], [16, 79], [16, 78], [16, 78], 11, [16, 77], [16, 76], [16, 75], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], 11, [16, 56], [16, 55], [16, 54], 11, 11, 11, [0, 50, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 226 [ , [15, 169], [15, 156], [15, 152], [15, 150], [16, 149], [16, 148], [16, 147], 12, [0, 143, "Gur"], 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 80], [16, 79], [16, 78], [16, 78], 11, [16, 77], [16, 76], [16, 75], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], 11, [16, 56], [0, 54, "sp"], [16, 54], 11, 11, 12, 11, 11, 11, 11, 11, [0, 46, "sp"], 11, 11, 11, 11, 11, 11, 11, [0, 40, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 227 [ , [15, 170], [15, 156], [15, 153], [15, 151], [15, 150], [16, 149], [16, 147], 12, 12, 11, 11, 12, [0, 139, "Gur"], 11, 11, 11, 11, 11, 11, 11, [0, 131, "DM4"], [0, 130, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 81], 11, [16, 80], [16, 79], [16, 78], [16, 78], 11, [16, 77], [16, 76], [16, 75], [16, 75], [16, 74], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [0, 58, "sp"], [16, 58], [16, 57], 11, 12, [16, 54], [16, 54], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 228 [ , [15, 171], [15, 157], [15, 153], [15, 152], [16, 150], [15, 150], [16, 148], [16, 147], 12, 11, 11, [0, 141, "Gur"], 12, 11, 11, [0, 137, "Gur"], 13, 13, 11, [0, 133, "DM4"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 82], [16, 81], 11, [16, 80], [16, 79], [16, 78], [16, 78], 11, [16, 77], [16, 76], [16, 75], [16, 75], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], 12, 11, [16, 58], [16, 57], 11, [16, 55], [16, 54], [16, 54], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 229 [ , [15, 171], [15, 158], [15, 153], [15, 153], [16, 151], [16, 150], [16, 149], 13, [0, 145, "Gur"], 11, 11, 12, 11, 11, 11, 12, [0, 136, "DM4"], [0, 135, "DM4"], 11, 12, [0, 132, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 82], [16, 81], 11, [16, 80], [16, 79], [16, 78], [16, 78], 11, [16, 77], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], [16, 63], [16, 62], [16, 60], [16, 60], [16, 60], 11, 11, [16, 58], [16, 57], [16, 56], [16, 55], [16, 54], [16, 54], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 42, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 230 [ , [15, 172], [15, 159], [15, 154], [15, 153], [0, 151, "DM5"], [16, 151], [16, 150], [0, 147, "Gur"], 12, 11, 11, 12, [0, 141, "Gur"], [0, 140, "Gur"], 11, 11, 12, 11, 11, 13, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 82], [16, 81], 11, [16, 80], [16, 79], [16, 78], [16, 78], 11, [16, 77], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], [16, 63], [16, 61], [16, 60], [16, 60], [16, 60], 11, 11, [16, 58], [0, 56, "Jo"], [16, 56], [16, 55], [16, 54], [16, 54], [0, 52, "sp"], 11, 11, 11, 11, [0, 48, "Jo"], 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 231 [ , [15, 173], [15, 159], [15, 155], [15, 153], 12, 11, [16, 150], 12, 11, 11, 11, [0, 143, "Gur"], 12, 11, 11, [0, 139, "Gur"], 12, 11, 11, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 22], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 82], [16, 81], 11, [16, 80], [16, 79], [16, 78], [16, 78], 11, [16, 77], [16, 75], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], 11, 11, [16, 57], 11, [16, 56], [16, 55], [16, 54], 12, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 232 [ , [15, 174], [15, 160], [15, 156], [15, 154], [15, 153], 11, [16, 151], 12, [0, 147, "Gur"], 11, 11, 12, [0, 142, "Gur"], 11, 11, 11, [0, 138, "DM4"], [0, 137, "DM4"], 11, [0, 134, "DM4"], 11, [0, 133, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 82], [16, 81], 11, [16, 80], [16, 79], [16, 78], [16, 78], 11, [16, 76], [16, 75], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], 11, [16, 58], [16, 57], 11, [16, 56], [16, 55], [16, 54], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 34, "sp"], 11, 11, [0, 32, "sp"], 11, 11, [0, 30, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 233 [ , [15, 174], [15, 161], [15, 156], [15, 155], [15, 154], [15, 153], [16, 152], [0, 149, "Gur"], 12, 11, 11, 12, 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 20], 11, 11, 11, 11, 11, [14, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 84], 11, 11, 11, [16, 82], [16, 81], 11, [16, 80], [16, 79], [16, 78], [16, 78], [16, 77], [16, 76], [16, 75], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], [16, 66], [16, 65], [16, 63], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], 11, [16, 56], [16, 55], [16, 54], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 44, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 12, 11, 11, 12, 11, 11, 11, [0, 28, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 20, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 234 [ , [15, 175], [15, 162], [15, 157], [15, 156], [15, 155], [16, 153], [15, 153], 12, 11, 11, 11, [0, 145, "Gur"], 12, 11, 11, [0, 141, "Gur"], 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 85], [16, 84], 11, 11, 11, [16, 82], [16, 81], 11, [16, 80], [16, 79], [16, 78], [16, 78], [16, 77], [16, 76], [16, 75], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], [16, 66], [16, 64], [16, 63], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [16, 59], [16, 58], [16, 57], 11, [16, 56], [0, 54, "Jo"], [16, 54], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 36, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, [0, 16, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 235 [ , [15, 176], [15, 162], [15, 158], [15, 156], [0, 155, "Gur"], [16, 153], [16, 153], 12, [0, 149, "Gur"], 11, 11, 12, [0, 144, "Gur"], 11, 11, 11, [0, 140, "DM4"], [0, 139, "DM4"], 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 20], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 85], [16, 84], 11, 11, 11, [16, 82], [16, 81], 11, [16, 80], [16, 78], [16, 78], [16, 78], [16, 77], [16, 76], [16, 75], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 68], [16, 66], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], [16, 60], [0, 58, "Jo"], [16, 58], [16, 57], 11, 12, 11, [16, 54], 11, 11, 11, [0, 50, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 26, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 236 [ , [15, 177], [15, 162], [15, 159], [15, 157], [15, 156], [16, 154], [16, 153], 12, 12, 11, 11, 12, 12, 11, 11, 11, 12, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 18], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 85], [16, 84], 11, 11, 11, [16, 82], [16, 81], 11, [16, 79], [16, 78], [16, 78], [16, 78], [16, 77], [16, 76], [16, 75], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 67], [16, 66], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], 12, 11, [16, 58], [16, 57], 11, 11, 11, [16, 54], 11, 11, 12, 11, 11, 11, 11, 11, [0, 46, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 38, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 237 [ , [15, 177], [15, 163], [15, 159], [15, 158], [0, 156, "Gur"], [16, 155], [16, 154], [16, 153], 12, 11, 11, [0, 147, "Gur"], 12, 11, 11, [0, 143, "Gur"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 87], 11, 11, [16, 85], [16, 84], 11, 11, 11, [16, 82], [16, 81], [16, 80], [16, 79], [16, 78], [16, 78], [16, 78], [16, 77], [16, 76], [16, 75], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, [16, 58], [16, 57], 11, 11, 11, [16, 54], 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 238 [ , [15, 178], [15, 164], [15, 160], [15, 159], 12, [16, 156], [16, 155], 13, [0, 151, "Gur"], 11, 11, 12, [0, 146, "Gur"], 11, 11, 11, [0, 142, "DM4"], [0, 141, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 87], 11, 11, [16, 85], [16, 84], 11, 11, 11, [16, 82], [16, 81], [16, 80], [16, 79], [16, 78], [16, 78], [16, 78], [16, 77], [16, 76], [16, 75], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, [16, 58], [16, 57], 11, 11, 11, [16, 54], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 40, "Jo"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 239 [ , [15, 179], [15, 165], [15, 161], [15, 159], 12, [16, 156], [16, 156], [0, 153, "Gur"], 12, 11, 11, 12, 12, 11, [0, 145, "Gur"], [0, 144, "Gur"], 12, 11, 11, [0, 140, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 87], 11, 11, [16, 85], [16, 84], 11, 11, 11, [16, 81], [16, 81], [16, 80], [16, 79], [16, 78], [16, 78], [16, 78], [16, 77], [16, 76], [16, 75], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, [16, 58], [0, 56, "sp"], 11, 11, 11, [16, 54], [0, 52, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 240 [ , [15, 180], [15, 165], [15, 162], [15, 160], [15, 159], [16, 157], [16, 156], 12, 11, 11, 11, [0, 149, "Gur"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 87], 11, 11, [16, 85], [16, 84], 11, 11, [16, 82], [16, 81], [16, 81], [16, 80], [16, 79], [16, 78], [16, 78], [16, 78], [16, 77], [16, 76], [16, 75], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 70], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, 12, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 24, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 241 [ , [15, 180], [15, 166], [15, 162], [15, 161], [15, 160], [16, 158], [16, 157], 12, [0, 153, "Gur"], 11, 11, 12, [0, 148, "Gur"], 11, 11, 11, [0, 144, "DM4"], [0, 143, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [14, 24], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 87], 11, 11, [16, 85], [16, 84], 11, [16, 83], [16, 82], [16, 81], [16, 81], [16, 80], [16, 79], [16, 78], [16, 78], [16, 78], [16, 77], [16, 76], [16, 75], [16, 75], [16, 74], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [0, 48, "sp"], 11, 11, 11, 11, 11, 11, 11, [0, 42, "sp"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 242 [ , [15, 181], [15, 167], [15, 162], [15, 162], [15, 161], [16, 159], [16, 158], [16, 156], 12, 11, 11, 12, 12, 11, [0, 147, "Gur"], [0, 146, "Gur"], 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 87], 11, 11, [16, 85], [16, 84], 11, [16, 83], [16, 82], [16, 81], [16, 81], [16, 80], [16, 79], [16, 78], [16, 78], [16, 78], [16, 77], [16, 76], [16, 75], [16, 75], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], #V n = 243 [ , [15, 182], [15, 168], [15, 162], [15, 162], [15, 162], [16, 159], [0, 158, "Gur"], [16, 157], 12, 11, 11, [0, 151, "Gur"], 12, 11, 11, 11, 11, [0, 144, "DM4"], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, [16, 90], 11, 11, 11, 11, [16, 87], 11, 11, [16, 85], [16, 84], 11, [16, 83], [16, 82], [16, 81], [16, 81], [16, 80], [16, 79], [16, 78], [16, 78], [16, 78], [16, 77], [16, 76], [16, 75], [16, 74], [16, 73], [16, 72], [16, 72], [16, 72], [16, 71], [16, 70], [16, 69], [16, 69], [16, 68], [16, 67], [16, 66], [16, 66], [16, 66], [16, 65], [16, 64], [16, 63], [16, 63], [16, 62], [16, 61], [16, 60], [16, 60], 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11]]; guava-3.6/tbl/upperbd3.g0000644017361200001450000004714311026723452015032 0ustar tabbottcrontab############################################################################# ## #A upperbd3.g GUAVA library Reinald Baart #A & Jasper Cramwinckel #A & Erik Roijackers ## ## This file contains a reference and an upper bound on the minimum distance ## of a linear code over GF(3) of given word length and dimension. ## #H @(#)$Id: upperbd3.g,v 1.1.1.1 1998/03/19 17:31:45 lea Exp $ ## #Y Copyright (C) 1994, Vakgroep Algemene Wiskunde, T.U. Delft, Nederland ## #H CJ, 17 May 2006 #H Updated lower- and upper-bounds of minimum distance for GF(2), #H GF(3) and GF(4) codes. (Brouwer's table as of 11 May 2006) #H #H $Log: upperbd3.g,v $ #H Revision 1.1.1.1 1998/03/19 17:31:45 lea #H Initial version of GUAVA for GAP4. Development still under way. #H Lea Ruscio 19/3/98 #H #H #H Revision 1.2 1997/01/20 15:34:43 werner #H Upgrade from Guava 1.2 to Guava 1.3 for GAP release 3.4.4. #H #H Revision 1.1 1994/11/10 14:29:23 rbaart #H Initial revision #H ## GUAVA_TEMP_VAR := [ [ 15, 8, 5, "vE2"], [ 15, 9, 4, "vE2"], [ 16, 6, 7, "vE2"], [ 16, 7, 6, "vE2"], [ 21, 4, 12, "HN"], [ 21, 16, 3, "Pel"], [ 24, 8, 11, "BS"], [ 25, 13, 8, "LP"], [ 28, 6, 15, "HHM"], [ 33, 18, 9, "LP"], [ 35, 6, 20, "Bou"], [ 37, 6, 21, "Bou"], [ 37, 12, 17, "LP"], [ 40, 5, 24, "vE1"], [ 40, 27, 8, "LP"], [ 42, 21, 14, "BKn"], [ 46, 8, 26, "Gur"], [ 47, 6, 28, "HJ"], [ 50, 5, 31, "EHW"], [ 50, 6, 30, "HJL"], [ 50, 28, 14, "BKn"], [ 51, 40, 6, "BKn"], [ 53, 39, 8, "sp"], [ 54, 28, 17, "LP"], [ 55, 8, 32, "Gur"], [ 55, 9, 31, "Gur"], [ 55, 16, 26, "BKn"], [ 55, 30, 16, "BKn"], [ 56, 39, 10, "LP"], [ 57, 49, 4, "Jo"], [ 58, 7, 35, "BKn"], [ 59, 24, 23, "BKn"], [ 60, 22, 25, "BKn"], [ 60, 40, 12, "BKn"], [ 61, 17, 29, "BKn"], [ 61, 30, 20, "LP"], [ 62, 10, 35, "Gur"], [ 62, 14, 32, "BKn"], [ 64, 17, 31, "BKn"], [ 64, 30, 22, "BKn"], [ 64, 38, 16, "BKn"], [ 65, 14, 34, "BKn"], [ 65, 42, 14, "sp"], [ 66, 26, 26, "BKn"], [ 67, 7, 41, "BKn"], [ 67, 17, 33, "BKn"], [ 67, 38, 18, "BKn"], [ 68, 11, 38, "Gur"], [ 69, 6, 43, "Ma"], [ 69, 7, 42, "Gur"], [ 69, 16, 35, "LP"], [ 69, 20, 32, "BKn"], [ 69, 51, 10, "BKn"], [ 69, 54, 8, "BKn"], [ 70, 14, 37, "BKn"], [ 71, 5, 45, "HW1"], [ 71, 11, 40, "Gur"], [ 71, 35, 23, "LP"], [ 71, 39, 20, "BKn"], [ 71, 50, 12, "BKn"], [ 72, 20, 34, "BKn"], [ 72, 33, 25, "LP"], [ 73, 8, 44, "LP"], [ 73, 14, 39, "BKn"], [ 73, 28, 29, "BKn"], [ 73, 38, 22, "LP"], [ 74, 11, 42, "Da"], [ 74, 23, 33, "BKn"], [ 74, 26, 31, "BKn"], [ 74, 62, 6, "Jo"], [ 75, 5, 48, "HN"], [ 75, 17, 38, "Da"], [ 75, 51, 14, "BKn"], [ 76, 14, 41, "BKn"], [ 77, 11, 44, "BKn"], [ 77, 23, 35, "Da"], [ 77, 39, 24, "LP"], [ 78, 17, 40, "Da"], [ 78, 21, 37, "LP"], [ 78, 31, 30, "LP"], [ 78, 37, 26, "LP"], [ 78, 47, 19, "LP"], [ 78, 48, 18, "LP"], [ 78, 51, 16, "LP"], [ 79, 14, 43, "BKn"], [ 79, 15, 42, "Da"], [ 79, 35, 28, "LP"], [ 80, 11, 46, "BKn"], [ 80, 20, 39, "Da"], [ 80, 30, 32, "LP"], [ 80, 47, 20, "LP"], [ 81, 6, 51, "Ma"], [ 81, 18, 41, "Da"], [ 82, 8, 50, "BKn"], [ 82, 15, 44, "Da"], [ 82, 26, 36, "Da"], [ 82, 29, 34, "LP"], [ 83, 11, 48, "BKn"], [ 83, 21, 40, "Da"], [ 83, 24, 38, "Da"], [ 83, 46, 23, "LP"], [ 84, 13, 47, "LP"], [ 84, 18, 43, "Da"], [ 84, 44, 25, "LP"], [ 85, 8, 52, "BKn"], [ 85, 33, 33, "LP"], [ 85, 36, 31, "LP"], [ 85, 39, 29, "LP"], [ 85, 42, 27, "LP"], [ 86, 11, 50, "BKn"], [ 86, 12, 49, "Da"], [ 86, 15, 46, "Da"], [ 86, 21, 42, "Da"], [ 86, 64, 12, "Jo"], [ 87, 18, 45, "Da"], [ 87, 32, 35, "LP"], [ 87, 68, 10, "sp"], [ 88, 27, 39, "Da"], [ 88, 30, 37, "LP"], [ 88, 63, 14, "sp"], [ 89, 11, 52, "BKn"], [ 89, 12, 51, "BKn"], [ 89, 21, 44, "Da"], [ 89, 25, 41, "Da"], [ 89, 47, 26, "LP"], [ 90, 15, 49, "Da"], [ 91, 8, 56, "BKn"], [ 91, 24, 43, "Da"], [ 91, 37, 34, "LP"], [ 91, 40, 32, "LP"], [ 91, 46, 28, "LP"], [ 91, 63, 16, "Jo"], [ 91, 75, 8, "sp"], [ 92, 12, 53, "Da"], [ 92, 18, 48, "Da"], [ 92, 22, 45, "Da"], [ 92, 35, 36, "LP"], [ 93, 5, 60, "HH"], [ 93, 15, 51, "Da"], [ 93, 30, 40, "LP"], [ 93, 45, 30, "LP"], [ 94, 8, 58, "BKn"], [ 94, 28, 42, "Da"], [ 94, 34, 38, "LP"], [ 94, 58, 22, "sp"], [ 95, 11, 56, "BKn"], [ 95, 12, 55, "BKn"], [ 95, 18, 50, "Da"], [ 95, 22, 47, "Da"], [ 95, 64, 18, "sp"], [ 96, 6, 61, "Gur"], [ 96, 15, 53, "Da"], [ 96, 27, 44, "Da"], [ 97, 21, 49, "Da"], [ 97, 25, 46, "Da"], [ 98, 10, 59, "LP"], [ 98, 11, 58, "BKn"], [ 98, 12, 57, "BKn"], [ 98, 18, 52, "Da"], [ 98, 19, 51, "Da"], [ 98, 39, 37, "LP"], [ 98, 42, 35, "LP"], [ 98, 45, 33, "LP"], [ 99, 15, 55, "Da"], [ 99, 16, 54, "Da"], [ 99, 31, 43, "LP"], [ 99, 34, 41, "LP"], [ 99, 37, 39, "LP"], [ 99, 65, 20, "sp"], [ 99, 90, 4, "Jo"], [100, 8, 62, "BKn"], [100, 12, 58, "BKn"], [100, 22, 50, "Da"], [100, 25, 48, "Da"], [101, 11, 60, "BKn"], [101, 19, 53, "LP"], [101, 30, 45, "LP"], [102, 15, 57, "LP"], [102, 16, 56, "LP"], [102, 28, 47, "LP"], [103, 12, 60, "BKn"], [103, 22, 52, "LP"], [103, 26, 49, "LP"], [103, 77, 14, "sp"], [103, 80, 12, "sp"], [104, 11, 62, "BKn"], [104, 19, 55, "LP"], [104, 37, 42, "LP"], [104, 40, 40, "LP"], [104, 43, 38, "LP"], [104, 67, 22, "sp"], [104, 75, 16, "sp"], [105, 6, 67, "DM5"], [105, 15, 59, "BKn"], [105, 16, 58, "LP"], [105, 25, 51, "LP"], [105, 35, 44, "LP"], [105, 47, 36, "LP"], [106, 12, 62, "BKn"], [106, 19, 56, "LP"], [106, 22, 54, "LP"], [107, 10, 65, "LP"], [107, 11, 64, "BKn"], [107, 31, 48, "LP"], [107, 34, 46, "LP"], [107, 75, 18, "sp"], [107, 87, 10, "Jo"], [107, 94, 6, "sp"], [108, 6, 69, "Ma"], [108, 15, 61, "LP"], [108, 16, 60, "LP"], [108, 25, 53, "LP"], [108, 29, 50, "LP"], [108, 68, 24, "sp"], [109, 8, 68, "BKn"], [109, 9, 67, "BKn"], [109, 12, 64, "BKn"], [109, 19, 58, "LP"], [109, 23, 55, "LP"], [110, 11, 66, "BKn"], [110, 16, 61, "LP"], [110, 28, 52, "LP"], [110, 38, 45, "LP"], [110, 41, 43, "LP"], [110, 47, 39, "LP"], [110, 75, 20, "sp"], [111, 15, 63, "LP"], [111, 22, 57, "LP"], [111, 26, 54, "LP"], [112, 8, 70, "LP"], [112, 9, 69, "LP"], [112, 12, 66, "LP"], [112, 19, 60, "LP"], [112, 34, 49, "LP"], [112, 37, 47, "LP"], [112, 46, 41, "LP"], [113, 11, 68, "LP"], [113, 14, 65, "LP"], [113, 15, 64, "LP"], [113, 16, 63, "LP"], [113, 29, 53, "LP"], [113, 32, 51, "LP"], [113, 70, 26, "sp"], [114, 22, 59, "LP"], [114, 23, 58, "LP"], [114, 26, 56, "LP"], [114, 76, 22, "sp"], [115, 9, 71, "LP"], [115, 12, 68, "LP"], [115, 13, 67, "LP"], [115, 19, 62, "LP"], [115, 20, 61, "LP"], [115, 41, 46, "LP"], [116, 11, 70, "LP"], [116, 15, 66, "LP"], [116, 16, 65, "LP"], [116, 26, 57, "LP"], [116, 29, 55, "LP"], [116, 45, 44, "LP"], [116, 51, 40, "LP"], [117, 23, 60, "LP"], [117, 37, 50, "LP"], [117, 40, 48, "LP"], [118, 8, 74, "LP"], [118, 12, 70, "LP"], [118, 13, 69, "LP"], [118, 19, 64, "LP"], [118, 20, 63, "LP"], [118, 32, 54, "LP"], [118, 35, 52, "LP"], [118, 72, 28, "sp"], [118, 77, 24, "sp"], [119, 15, 68, "LP"], [119, 16, 67, "LP"], [119, 26, 59, "LP"], [119, 51, 42, "LP"], [119, 89, 16, "sp"], [119,102, 8, "sp"], [120, 9, 74, "Gur"], [120, 23, 62, "LP"], [120, 87, 18, "sp"], [120, 93, 14, "sp"], [121, 8, 76, "LP"], [121, 12, 72, "LP"], [121, 13, 71, "LP"], [121, 19, 66, "LP"], [121, 20, 65, "LP"], [121, 29, 58, "LP"], [121, 32, 56, "LP"], [121, 45, 47, "LP"], [122, 15, 70, "LP"], [122, 16, 69, "LP"], [122, 17, 68, "LP"], [122, 26, 61, "LP"], [122, 40, 51, "LP"], [122, 43, 49, "LP"], [122, 78, 26, "Jo"], [122, 86, 20, "Jo"], [123, 19, 67, "LP"], [123, 23, 64, "LP"], [123, 38, 53, "LP"], [123, 99, 12, "Jo"], [124, 8, 78, "LP"], [124, 9, 77, "LP"], [124, 10, 76, "LP"], [124, 12, 74, "LP"], [124, 13, 73, "LP"], [124, 16, 70, "LP"], [124, 21, 66, "LP"], [124, 29, 60, "LP"], [124, 36, 55, "LP"], [125, 15, 72, "LP"], [125, 23, 65, "LP"], [125, 26, 63, "LP"], [125, 27, 62, "LP"], [126, 12, 75, "LP"], [126, 19, 69, "LP"], [126, 20, 68, "LP"], [126, 32, 59, "LP"], [126, 35, 57, "LP"], [126, 87, 22, "sp"], [127, 8, 80, "LP"], [127, 9, 79, "LP"], [127, 10, 78, "LP"], [127, 16, 72, "LP"], [127, 26, 64, "LP"], [127, 30, 61, "LP"], [127, 43, 52, "LP"], [127, 46, 50, "LP"], [127, 80, 28, "sp"], [128, 15, 74, "LP"], [128, 23, 67, "LP"], [128, 41, 54, "LP"], [128, 50, 48, "LP"], [128, 76, 32, "sp"], [129, 12, 77, "LP"], [129, 13, 76, "LP"], [129, 19, 71, "LP"], [129, 20, 70, "LP"], [129, 36, 58, "LP"], [129, 39, 56, "LP"], [129, 87, 24, "sp"], [130, 10, 80, "LP"], [130, 16, 74, "LP"], [130, 26, 66, "LP"], [130, 27, 65, "LP"], [130, 30, 63, "LP"], [131, 18, 73, "Gur"], [131, 23, 69, "LP"], [131, 24, 68, "LP"], [132, 12, 79, "LP"], [132, 13, 78, "LP"], [132, 20, 72, "LP"], [132, 33, 62, "LP"], [132, 36, 60, "LP"], [132, 82, 30, "sp"], [133, 9, 83, "Da2"], [133, 16, 76, "Gur"], [133, 17, 75, "Gur"], [133, 78, 34, "Jo"], [133, 88, 26, "sp"], [133,112, 10, "sp"], [134, 11, 82, "Da2"], [134, 23, 71, "Da2"], [134, 24, 70, "Da2"], [135, 9, 84, "Gur"], [135, 12, 81, "Gur"], [135, 13, 80, "Gur"], [135, 20, 74, "Da2"], [135, 21, 73, "Da2"], [135,101, 18, "Jo"], [136, 6, 88, "Ha"], [136, 8, 86, "Gur"], [136, 16, 78, "Gur"], [136, 17, 77, "Gur"], [136, 23, 72, "Da2"], [136, 99, 20, "sp"], [136,105, 16, "sp"], [137, 20, 75, "Da2"], [137, 84, 32, "sp"], [137, 89, 28, "sp"], [137,130, 3, "BEH"], [138, 9, 86, "Gur"], [138, 12, 83, "Da2"], [138, 13, 82, "Gur"], [138, 98, 22, "sp"], [139, 8, 88, "Da2"], [139, 16, 80, "Gur"], [139, 17, 79, "Gur"], [139, 23, 74, "Da2"], [139, 24, 73, "Da2"], [140, 20, 77, "Da2"], [140,112, 14, "sp"], [141, 9, 88, "Gur"], [141, 12, 85, "Gur"], [141, 13, 84, "Gur"], [141, 90, 30, "Jo"], [141, 98, 24, "sp"], [142, 16, 82, "Gur"], [142, 17, 81, "Gur"], [142, 23, 76, "Da2"], [142, 24, 75, "Da2"], [142, 86, 34, "sp"], [143, 5, 93, "Lan"], [143, 19, 80, "Da2"], [143, 21, 78, "Da2"], [144, 9, 90, "Gur"], [144, 12, 87, "Gur"], [144, 13, 86, "Da2"], [144, 17, 82, "Gur"], [144, 98, 26, "sp"], [145, 8, 92, "Gur"], [145, 15, 85, "Da9"], [145, 16, 84, "Gur"], [145, 24, 77, "Da9"], [146, 13, 87, "Gur"], [146, 20, 81, "Da2"], [146, 21, 80, "Da2"], [146, 92, 32, "sp"], [147, 5, 96, "Lg"], [147, 9, 92, "Gur"], [147, 12, 89, "Gur"], [147, 16, 85, "Gur"], [147, 17, 84, "Gur"], [148, 25, 78, "Da9"], [148, 99, 28, "sp"], [148,123, 12, "sp"], [149, 13, 89, "Gur"], [149, 20, 83, "Da2"], [149, 21, 82, "Da2"], [150, 9, 94, "Da2"], [150, 12, 91, "Gur"], [150, 16, 87, "Gur"], [150, 17, 86, "Gur"], [150, 23, 81, "Da2"], [150, 24, 80, "Da9"], [150, 93, 34, "Jo"], [151, 20, 84, "Da2"], [151,113, 20, "Jo"], [152, 13, 91, "Gur"], [152, 90, 38, "sp"], [152,100, 30, "sp"], [152,111, 22, "sp"], [152,117, 18, "Jo"], [153, 9, 96, "Gur"], [153, 12, 93, "Gur"], [153, 16, 89, "Gur"], [153, 17, 88, "Gur"], [153, 23, 83, "Da2"], [153, 24, 82, "Da9"], [154, 6,100, "Ha"], [154, 8, 98, "Gur"], [154, 20, 86, "Da2"], [154, 21, 85, "Da2"], [154,110, 24, "sp"], [154,140, 6, "sp"], [155, 13, 93, "Gur"], [155, 95, 36, "Jo"], [156, 9, 98, "Gur"], [156, 12, 95, "Gur"], [156, 16, 91, "Gur"], [156, 17, 90, "Gur"], [156, 24, 84, "Da9"], [156, 25, 83, "Da9"], [156,101, 32, "sp"], [156,109, 26, "sp"], [156,124, 16, "sp"], [156,138, 8, "Jo"], [157, 6,102, "Ma"], [157, 8,100, "Da2"], [157, 20, 88, "Da2"], [157, 21, 87, "Da2"], [158, 13, 95, "Gur"], [158, 17, 91, "Gur"], [159, 9,100, "Da2"], [159, 12, 97, "Gur"], [159, 15, 94, "Gur"], [159, 16, 93, "Gur"], [159, 24, 86, "Da9"], [159, 25, 85, "Da9"], [159,109, 28, "sp"], [160, 8,102, "Gur"], [160, 20, 90, "Da2"], [160, 21, 89, "Da2"], [160, 97, 38, "sp"], [160,102, 34, "sp"], [161, 6,105, "Gur"], [161, 13, 97, "Gur"], [161, 14, 96, "Da2"], [161, 17, 93, "Gur"], [161, 24, 87, "Da9"], [162, 9,102, "Gur"], [162, 12, 99, "Gur"], [162, 16, 95, "Gur"], [162, 21, 90, "Da2"], [163, 8,104, "Gur"], [163, 11,101, "Gur"], [163, 20, 92, "Da2"], [163,110, 30, "sp"], [163,134, 14, "sp"], [164, 13, 99, "Gur"], [164, 14, 98, "Gur"], [164, 17, 95, "Gur"], [164, 24, 89, "Da9"], [165, 7,107, "Da6"], [165, 9,104, "Gur"], [165, 12,101, "Gur"], [165, 16, 97, "Gur"], [165, 21, 92, "Da2"], [165, 99, 40, "sp"], [165,104, 36, "sp"], [166, 8,106, "Da2"], [166, 20, 94, "Da2"], [166,110, 32, "Jo"], [166,144, 10, "sp"], [167, 13,101, "Da2"], [167, 14,100, "Da2"], [167, 17, 97, "Gur"], [167, 18, 96, "Da2"], [167, 24, 91, "Da9"], [167, 25, 90, "Da9"], [168, 9,106, "Da2"], [168, 12,103, "Gur"], [168, 16, 99, "Gur"], [168, 21, 94, "Da2"], [168,123, 24, "sp"], [168,126, 22, "sp"], [168,129, 20, "Jo"], [169, 13,102, "Gur"], [169,105, 38, "sp"], [170, 9,107, "Gur"], [170, 17, 99, "Gur"], [170, 18, 98, "Da2"], [170, 24, 93, "Da9"], [170, 25, 92, "Da9"], [170,111, 34, "Jo"], [170,122, 26, "sp"], [171, 12,105, "Gur"], [171, 16,101, "Gur"], [171, 20, 97, "Da2"], [171, 21, 96, "Da2"], [171,120, 28, "Jo"], [172, 8,110, "Gur"], [172, 13,104, "Gur"], [172, 25, 93, "Da9"], [172,136, 18, "sp"], [172,162, 4, "sp"], [173, 9,109, "Gur"], [173, 15,103, "Gur"], [173, 17,101, "Gur"], [173, 18,100, "Da2"], [173, 24, 95, "Da9"], [174, 12,107, "Gur"], [174, 20, 99, "Da2"], [174, 21, 98, "Da2"], [174, 22, 97, "Da2"], [174,107, 40, "sp"], [174,112, 36, "Jo"], [174,120, 30, "Jo"], [175, 8,112, "Da2"], [175, 13,106, "Gur"], [175, 17,102, "Da2"], [175, 24, 96, "Da2"], [175, 25, 95, "Da9"], [175,103, 44, "Jo"], [176, 9,111, "Gur"], [176, 15,105, "Gur"], [176, 21, 99, "Da2"], [177, 12,109, "Gur"], [177, 20,101, "Da2"], [177,120, 32, "Jo"], [177,151, 12, "sp"], [178, 8,114, "Gur"], [178, 13,108, "Gur"], [178, 14,107, "Gur"], [178, 17,104, "Da2"], [178, 18,103, "Da2"], [178, 24, 98, "Da9"], [178, 25, 97, "Da9"], [178,145, 16, "sp"], [179, 9,113, "Gur"], [179, 21,101, "Da2"], [179,109, 42, "sp"], [179,114, 38, "sp"], [180, 12,111, "Gur"], [181, 8,116, "Da9"], [181, 13,110, "Gur"], [181, 14,109, "Gur"], [181, 17,106, "Da2"], [181, 18,105, "Da2"], [181, 24,100, "Da9"], [181, 25, 99, "Da9"], [181,106, 46, "sp"], [181,121, 34, "sp"], [182, 21,103, "Da2"], [182, 22,102, "Da2"], [183, 9,115, "Gur"], [183, 11,114, "Gur"], [183, 12,113, "Gur"], [183, 25,100, "Da9"], [183,115, 40, "Jo"], [184, 8,118, "Da2"], [184, 13,112, "Gur"], [184, 14,111, "Gur"], [184, 17,108, "Da2"], [184, 18,107, "Da2"], [184,111, 44, "sp"], [184,135, 26, "sp"], [184,138, 24, "sp"], [184,141, 22, "Jo"], [185, 16,110, "Gur"], [185, 21,105, "Da2"], [185, 22,104, "Da2"], [185,122, 36, "sp"], [185,133, 28, "sp"], [186, 25,102, "Da9"], [187, 8,120, "Gur"], [187, 13,114, "Gur"], [187, 14,113, "Gur"], [187, 17,110, "Gur"], [187, 18,109, "Da2"], [187,132, 30, "sp"], [188, 9,119, "Gur"], [188, 16,112, "Da2"], [188, 21,107, "Da2"], [188, 22,106, "Da2"], [188,117, 42, "sp"], [188,148, 20, "sp"], [189, 12,117, "Gur"], [189, 25,104, "Da9"], [189,113, 46, "sp"], [189,123, 38, "sp"], [190, 13,116, "Gur"], [190, 14,115, "Gur"], [190, 15,114, "Gur"], [190, 17,112, "Gur"], [190, 18,111, "Da2"], [190,132, 32, "sp"], [190,160, 14, "sp"], [191, 7,124, "Da6"], [191, 20,110, "Da2"], [191, 21,109, "Da2"], [191, 22,108, "Da2"], [192, 9,122, "Da2"], [192, 10,121, "Da2"], [192, 12,119, "Gur"], [192, 14,116, "Gur"], [192, 18,112, "Da2"], [192, 24,107, "Da9"], [192, 25,106, "Da9"], [192,118, 44, "Jo"], [193, 13,118, "Gur"], [193, 17,114, "Gur"], [193, 22,109, "Da2"], [193,124, 40, "sp"], [193,132, 34, "sp"], [193,156, 18, "Jo"], [194, 8,125, "Gur"], [194, 9,123, "Gur"], [194, 21,111, "Da2"], [195, 11,122, "Gur"], [195, 12,121, "Gur"], [195, 14,118, "Gur"], [195, 18,114, "Da2"], [195, 25,108, "Da9"], [196, 13,120, "Gur"], [196, 17,116, "Gur"], [196, 21,112, "Da2"], [196, 22,111, "Da2"], [196,132, 36, "sp"], [197, 9,125, "Gur"], [197, 10,124, "Da2"], [197, 25,109, "Da9"], [197,120, 46, "Jo"], [198, 12,123, "Gur"], [198, 14,120, "Gur"], [198, 18,116, "Da2"], [198,126, 42, "sp"], [199, 13,122, "Gur"], [199, 17,118, "Gur"], [199, 21,114, "Da2"], [199, 22,113, "Da2"], [199,117, 50, "sp"], [200, 10,126, "Da2"], [200, 25,111, "Da9"], [200,133, 38, "sp"], [200,147, 28, "sp"], [200,150, 26, "sp"], [200,153, 24, "Jo"], [201, 12,125, "Gur"], [201, 14,122, "Gur"], [201, 17,119, "Gur"], [201, 18,118, "DM4"], [201,145, 30, "sp"], [202,122, 48, "sp"], [202,127, 44, "sp"], [202,143, 32, "Jo"], [203, 6,133, "Da5"], [203, 8,131, "Gur"], [203, 9,129, "Gur"], [203, 10,128, "Gur"], [204, 12,127, "Gur"], [204, 14,124, "Gur"], [204, 17,121, "Gur"], [204, 21,117, "DM4"], [204,134, 40, "sp"], [204,160, 22, "sp"], [204,170, 16, "sp"], [205,143, 34, "sp"], [206, 9,131, "Gur"], [206, 18,121, "DM4"], [206,183, 10, "sp"], [206,187, 8, "sp"], [207, 12,129, "Gur"], [207, 13,127, "Gur"], [207, 14,126, "Gur"], [207, 17,123, "Gur"], [207, 22,118, "DM4"], [207,124, 50, "sp"], [207,129, 46, "sp"], [207,134, 42, "Jo"], [208, 21,120, "DM4"], [208,143, 36, "sp"], [209, 18,123, "DM4"], [209, 23,118, "DM4"], [209, 25,117, "DM4"], [209,168, 20, "sp"], [210, 13,129, "Gur"], [210, 17,125, "Gur"], [210, 22,120, "DM4"], [211,130, 48, "sp"], [211,143, 38, "sp"], [212, 9,135, "Gur"], [212, 10,134, "Gur"], [212, 11,133, "Gur"], [212, 14,129, "Gur"], [212, 18,125, "DM4"], [212,126, 52, "sp"], [212,136, 44, "sp"], [212,185, 12, "Jo"], [213, 13,131, "Gur"], [213, 17,127, "Gur"], [213, 22,122, "DM4"], [213, 23,121, "DM4"], [214, 21,124, "DM4"], [214, 25,120, "DM4"], [214,143, 40, "Jo"], [215, 9,137, "Gur"], [215, 14,131, "Gur"], [215, 18,127, "DM4"], [215, 22,123, "DM4"], [215,161, 28, "Jo"], [216, 13,133, "Gur"], [216, 17,129, "Gur"], [216,132, 50, "sp"], [216,137, 46, "sp"], [216,159, 30, "sp"], [217, 25,122, "DM4"], [217,157, 32, "sp"], [217,166, 26, "sp"], [218, 11,137, "Gur"], [218, 14,133, "Gur"], [218, 18,129, "DM4"], [218, 19,128, "DM4"], [218, 21,125, "DM4"], [218,144, 42, "sp"], [218,155, 34, "sp"], [218,180, 18, "sp"], [219, 13,135, "Gur"], [219, 17,131, "Gur"], [219,171, 24, "Jo"], [220, 25,124, "DM4"], [220,138, 48, "Jo"], [220,154, 36, "Jo"], [221, 8,143, "Gur"], [221, 9,141, "Gur"], [221, 10,140, "Gur"], [221, 14,135, "Gur"], [221, 18,131, "DM4"], [221, 19,130, "DM4"], [221,134, 52, "sp"], [222, 13,137, "Gur"], [222, 16,134, "Gur"], [222, 17,133, "Gur"], [222,130, 56, "sp"], [222,145, 44, "sp"], [222,191, 14, "sp"], [222,207, 6, "sp"], [223, 18,132, "DM4"], [223,154, 38, "sp"], [224, 9,143, "Gur"], [224, 14,137, "Gur"], [224, 22,129, "DM4"], [224, 23,128, "DM4"], [224,179, 22, "Jo"], [225, 13,139, "Gur"], [225, 16,136, "Gur"], [225, 17,135, "Gur"], [225, 21,131, "DM4"], [225,140, 50, "sp"], [226, 10,143, "Gur"], [226,136, 54, "sp"], [226,146, 46, "sp"], [226,154, 40, "sp"], [227, 14,139, "Gur"], [227, 22,131, "DM4"], [227, 23,130, "DM4"], [227,132, 58, "sp"], [228, 13,141, "Gur"], [228, 17,137, "Gur"], [228, 21,133, "DM4"], [229, 10,145, "Gur"], [229, 18,136, "DM4"], [229, 19,135, "DM4"], [229, 22,132, "DM4"], [229,154, 42, "Jo"], [230, 6,151, "DM5"], [230, 9,147, "Gur"], [230, 14,141, "Gur"], [230, 15,140, "Gur"], [230,137, 56, "Jo"], [230,142, 52, "sp"], [230,147, 48, "Jo"], [231, 13,143, "Gur"], [231, 17,139, "Gur"], [232, 10,147, "Gur"], [232, 14,142, "Gur"], [232, 18,138, "DM4"], [232, 19,137, "DM4"], [232, 21,134, "DM4"], [232, 23,133, "DM4"], [232,168, 34, "sp"], [232,171, 32, "sp"], [232,174, 30, "sp"], [233, 9,149, "Gur"], [233,155, 44, "sp"], [233,178, 28, "sp"], [233,191, 20, "sp"], [234, 13,145, "Gur"], [234, 17,141, "Gur"], [234,143, 54, "Jo"], [234,167, 36, "sp"], [234,199, 16, "sp"], [235, 6,155, "Gur"], [235, 10,149, "Gur"], [235, 14,144, "Gur"], [235, 18,140, "DM4"], [235, 19,139, "DM4"], [235,139, 58, "Jo"], [235,149, 50, "sp"], [235,183, 26, "Jo"], [236,155, 46, "Jo"], [236,166, 38, "sp"], [237, 6,156, "Gur"], [237, 13,147, "Gur"], [237, 17,143, "Gur"], [238, 10,151, "Gur"], [238, 14,146, "Gur"], [238, 18,142, "DM4"], [238, 19,141, "DM4"], [238,165, 40, "Jo"], [239, 9,153, "Gur"], [239, 16,145, "Gur"], [239, 17,144, "Gur"], [239, 21,140, "DM4"], [239,145, 56, "sp"], [239,150, 52, "sp"], [240, 13,149, "Gur"], [240,191, 24, "sp"], [241, 10,153, "Gur"], [241, 14,148, "Gur"], [241, 18,144, "DM4"], [241, 19,143, "DM4"], [241,157, 48, "sp"], [241,165, 42, "sp"], [242, 16,147, "Gur"], [242, 17,146, "Gur"], [243, 8,158, "Gur"], [243, 13,151, "Gur"], [243, 19,144, "DM4"]]; guava-3.6/guava_gapdoc.gap0000644017361200001450000000113411026723452015454 0ustar tabbottcrontab############################################################ # # commands to create GUAVA documentation using GAPDoc 0.99 # ########################################################### path := Directory("doc"); ## edit this path if needed main:="guava.xml"; files:=[]; bookname:="guava"; #str := ComposedXMLString(path, main, files);; #r := ParseTreeXMLString(str);; ######### with break here if there is an xml compiling error ######### #CheckAndCleanGapDocTree(r); #l := GAPDoc2LaTeX(r);; #FileString(Filename(path, Concatenation(bookname, ".tex")), l); MakeGAPDocDoc( path, main, files, bookname); guava-3.6/init.g0000644017361200001450000000465111026725155013467 0ustar tabbottcrontab############################################################################# ## #A init.g GUAVA library Reinald Baart #A Jasper Cramwinckel #A Erik Roijackers #A Eric Minkes #A Lea Ruscio #A David Joyner #A CJ, Tjhai ## #H @(#)$Id: init.g,v 2.0 2003/02/27 22:45:16 gap Exp $ ## added read curves.gd 5-2005 ## added existence check for minimum-weight ## ## ## Announce the package version and test for the existence of the binary. ## DeclarePackage( "guava", "3.6", function() local path; if not CompareVersionNumbers( VERSION, "4.4.5" ) then Info( InfoWarning, 1, "Package ``GUAVA'': requires at least GAP 4.4.5" ); return fail; fi; # Test for existence of the compiled binary path := DirectoriesPackagePrograms( "guava" ); if ForAny( ["desauto", "leonconv", "wtdist", "minimum-weight"], f -> Filename( path, f ) = fail ) then Info( InfoWarning, 1, "Package ``GUAVA'': the C code programs are not compiled." ); Info( InfoWarning, 1, "Some GUAVA functions, e.g. `ConstantWeightSubcode' and MinimumWeight, ", "will be unavailable. "); Info( InfoWarning, 1, "See ?Installing GUAVA" ); fi; return true; end ); DeclarePackageAutoDocumentation( "GUAVA", "doc", "GUAVA", "GUAVA Coding Theory Package" ); ReadPkg("guava", "lib/util2.gd"); ReadPkg("guava", "lib/codeword.gd"); ReadPkg("guava", "lib/codegen.gd"); ReadPkg("guava", "lib/matrices.gd"); ReadPkg("guava", "lib/codeman.gd"); ReadPkg("guava", "lib/nordrob.gd"); ReadPkg("guava", "lib/util.gd"); ReadPkg("guava", "lib/curves.gd"); ReadPkg("guava", "lib/codeops.gd"); ReadPkg("guava", "lib/bounds.gd"); ReadPkg("guava", "lib/codefun.gd"); ReadPkg("guava", "lib/decoders.gd"); ReadPkg("guava", "lib/codecr.gd"); ReadPkg("guava", "lib/codecstr.gd"); ReadPkg("guava", "lib/codemisc.gd"); ReadPkg("guava", "lib/codenorm.gd"); ReadPkg("guava", "lib/tblgener.gd"); ReadPkg("guava", "lib/toric.gd"); guava-3.6/lib/0000755017361200001450000000000011027007703013105 5ustar tabbottcrontabguava-3.6/lib/codeops.gi0000644017361200001450000024322011026723452015072 0ustar tabbottcrontab############################################################################# ## #A codeops.gi GUAVA Reinald Baart #A &Jasper Cramwinckel #A &Erik Roijackers ## &David Joyner ## ## All the code operations ## #H @(#)$Id: codeops.gi,v 1.11 2004/09/29 03:49:17 gap Exp $ ## ## changes 2003-2004 to MinimumDistance by David Joyner, Aron Foster ## bug in MinimumDistance corrected 9-29-2004 by wdj ## moved Decode and PermutationDecode to decoders.gi on 10-2004 ## added HasGeneratorMat to GeneratorMat function 11-2-2004 ## another bug in MinimumDistance (discovered by Jason McGowan) ## corrected 11-9-2004 by wdj ## slight changes to MinimumWeightWords (11-26-2005) ## wdj (9-14-2007): bug fix to MinimumDistance ## added MinimumDistanceCodeword ## 20 Dec 07 14:24 (CJ) added IsDoublyEvenCode, IsSinglyEvenCode ## and IsEvenCode functions ## Revision.("guava/lib/codeops_gi") := "@(#)$Id: codeops.gi,v 1.11 2004/09/29 03:49:17 gap Exp $"; ############################################################################# ## #F WordLength( ) . . . . . . . . . . . . length of the codewords of ## InstallOtherMethod(WordLength, "generic code", true, [IsCode], 0, function(C) return WordLength(AsSSortedList(C)[1]) ; end); # This comment from GAP3 version. #In a linear code, the wordlength must always be included #because the wordlength cannot always be calculated (NullCode) # #InstallOtherMethod(WordLength, "method for linear codes", true, # [IsLinearCode], 0, #function(C) # if HasGeneratorMat(C) then # return Length( GeneratorMat(C)[1] ); # else # return Length( CheckMat(C)[1] ); # fi; #end); ############################################################################# ## #F IsLinearCode( ) . . . . . . . . . . . . . . . checks if is linear ## ## If so, the record fields will be adjusted to the linear type ## InstallMethod(IsLinearCode, "method for unrestricted codes", true, [IsCode], 0, function(C) local gen, k, F, q; F := LeftActingDomain(C); q := Size(F); k := LogInt(Size(C),q); # first the trivial cases: if ( HasWeightDistribution(C) and HasInnerDistribution(C) and (WeightDistribution(C) <> InnerDistribution(C)) ) or ( q^k <> Size(C) ) or (not NullWord(WordLength(C), F) in C) then return false; #is cool else gen:=BaseMat(VectorCodeword(AsSSortedList(C))); if Length(gen) <> k then return false; # is cool as ice else SetFilterObj(C, IsLinearCodeRep); SetGeneratorMat(C, gen); if Length(gen) = 0 then # special case for Nullcode SetGeneratorsOfLeftModule(C, [AsSSortedList(C)[1]]); else SetGeneratorsOfLeftModule(C, AsList(Codeword(gen,F))); fi; if HasInnerDistribution(C) then SetWeightDistribution(C, InnerDistribution(C)); fi; return true; fi; fi; end); InstallOtherMethod(IsLinearCode, "method for generic object", true, [IsObject], 0, function(obj) return IsCode(obj) and IsLinearCode(obj); end); ############################################################################# ## #F IsFinite( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . ## ## InstallTrueMethod(IsFinite, IsCode); ############################################################################# ## #F Dimension( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . ## ## InstallOtherMethod(Dimension, "method for unrestricted codes", true, [IsCode], 0, function(C) if IsLinearCode(C) then return Dimension(C); else Error("dimension is only defined for linear codes"); fi; end); InstallOtherMethod(Dimension, "method for cyclic codes", true, [IsCyclicCode], 0, function(C) if HasGeneratorPol(C) then return WordLength(C) - DegreeOfLaurentPolynomial( GeneratorPol(C)); else return DegreeOfLaurentPolynomial(CheckPol(C)); fi; end); ############################################################################# ## #F Size( ) . . . . . . . . . . . returns the number of codewords of ## ## InstallMethod(Size, "method for unrestricted codes", true, [IsCode], 0, function(C) return Length(AsSSortedList(C)); end); ############################################################################# ## #F AsSSortedList( ) . . . . . . . . returns the list of codewords of ## AsList( ) ## ## Codes created with ElementsCode must have AsSSortedList set. ## Linear codes use the vector space / FLM method to calculate. ## AsList defaults to AsSSortedList. InstallMethod(AsList, "method for unrestricted codes", true, [IsCode], 0, function(C) return AsSSortedList(C); end); ############################################################################# ## #F Redundancy( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . ## ## InstallMethod(Redundancy, "method for unrestricted codes", true, [IsCode], 0, function(C) if IsLinearCode(C) then return Redundancy(C); else Error("redundancy is only defined for linear codes"); fi; end); InstallMethod(Redundancy, "method for linear codes", true, [IsLinearCode], 0, function(C) return WordLength(C) - Dimension(C); end); ############################################################################# ## #F GeneratorMat(C) . . . . . finds the generator matrix belonging to code C ## ## Pre: C should contain a generator or check matrix ## InstallMethod(GeneratorMat, "method for unrestricted code", true, [IsCode], 0, function(C) if IsLinearCode(C) then return GeneratorMat(C); else Error("non-linear codes don't have a generator matrix"); fi; end); InstallMethod(GeneratorMat, "method for linear code", true, [IsLinearCode], 0, function(C) local G; if HasGeneratorMat(C) then return C!.GeneratorMat; fi; if not HasCheckMat( C ) then return List( BasisVectors( Basis( C ) ), x -> VectorCodeword( x ) ); fi; if CheckMat(C) = [] then G := IdentityMat(Dimension(C), LeftActingDomain(C)); elif IsInStandardForm(CheckMat(C), false) then G := TransposedMat(Concatenation(IdentityMat( Dimension(C), LeftActingDomain(C) ), List(-CheckMat(C), x->x{[1..Dimension(C) ]}))); else G := NullspaceMat(TransposedMat(CheckMat(C))); fi; return ShallowCopy(G); end); InstallMethod(GeneratorMat, "method for cyclic code", true, [IsCyclicCode], 0, function(C) local F, G, p, n, i, R, zero, coeffs; if HasGeneratorMat(C) then return C!.GeneratorMat; fi; #To be inspected: #if HasCheckMat(C) and IsInStandardForm(CheckMat(C), false) then # G := TransposedMat(Concatenation(IdentityMat(Dimension(C), # LeftActingDomain(C)), # List(-CheckMat(C), x->x{[1..Dimension(C)]}))); #else F := LeftActingDomain(C); p := GeneratorPol(C); n := WordLength(C); G := []; zero := Zero(F); coeffs := CoefficientsOfLaurentPolynomial(p); coeffs := ShiftedCoeffs(coeffs[1], coeffs[2]); for i in [1..Dimension(C)] do R := NullVector(i-1, F); Append(R, coeffs); Append(R, NullVector(n-Length(R), F)); G[i] := R; od; #fi; return ShallowCopy(G); end); ############################################################################# ## #F CheckMat( ) . . . . . . . finds the check matrix belonging to code C ## ## Pre: should be a linear code ## InstallMethod(CheckMat, "method for unrestricted codes", true, [IsCode], 0, function(C) if IsLinearCode(C) then return CheckMat(C); else Error("non-linear codes don't have a check matrix"); fi; end); InstallMethod(CheckMat, "method for linear code", true, [IsLinearCode], 0, function(C) local H; if GeneratorMat(C) = [] then H := IdentityMat(WordLength(C), LeftActingDomain(C)); elif IsInStandardForm(GeneratorMat(C), true) then H := TransposedMat(Concatenation(List(-GeneratorMat(C), x-> x{[Dimension(C)+1 .. WordLength(C) ]}), IdentityMat(Redundancy(C), LeftActingDomain(C) ))); else H := NullspaceMat(TransposedMat(GeneratorMat(C))); fi; return ShallowCopy(H); end); InstallMethod(CheckMat, "method for cyclic code", true, [IsCyclicCode], 0, function(C) local F, H, p, n, i, R, zero, coeffs; #if HasGeneratorMat(C) and IsInStandardForm(GeneratorMat(C), true) then # H := TransposedMat(Concatenation(List(-GeneratorMat(C), x-> # x{[Dimension(C)+1..WordLength(C)]}), # IdentityMat(Redundancy(C), LeftActingDomain(C)))); #else F := LeftActingDomain(C); H := []; p := CheckPol(C); p := Indeterminate(F)^Dimension(C)*Value(p,Indeterminate(F)^-1); n := WordLength(C); zero := Zero(F); coeffs := CoefficientsOfLaurentPolynomial(p); coeffs := ShiftedCoeffs(coeffs[1], coeffs[2]); for i in [1..Redundancy(C)] do R := NullVector(i-1, F); Append(R, coeffs); Append(R, NullVector(n-Length(R), F)); H[i] := R; od; #fi; return ShallowCopy(H); end); ############################################################################# ## #F IsCyclicCode( ) . . . . . . . . . . . . . . . . . . . . . . . . . . ## InstallOtherMethod(IsCyclicCode, "method for unrestricted codes", true, [IsCode], 0, function(C) if IsLinearCode(C) then return IsCyclicCode(C); else return false; fi; end); InstallMethod(IsCyclicCode, "method for linear codes", true, [IsLinearCode], 0, function(C) local C1, F, L, Gp; F := LeftActingDomain(C); L := List(GeneratorMat(C), g->LaurentPolynomialByCoefficients( ElementsFamily(FamilyObj(F)),One(F)*g, 0 )); Add(L, Indeterminate(F)^WordLength(C) - One(F)); Gp := Gcd(L); if Redundancy(C) = DegreeOfLaurentPolynomial(Gp) then SetGeneratorPol(C, Gp); return true; else return false; #so the code is not cyclic fi; end); InstallOtherMethod(IsCyclicCode, "method for generic objects", true, [IsObject], 0, function(obj) return IsCode(obj) and IsLinearCode(obj) and IsCyclicCode(obj); end); ############################################################################# ## #F GeneratorPol( ) . . . . . . . . returns the generator polynomial of C ## ## Pre: C must have a generator or check polynomial ## InstallMethod(GeneratorPol, "method for unrestricted codes", true, [IsCode], 0, function(C) if IsCyclicCode(C) then return GeneratorPol(C); else Error("generator polynomial is only defined for cyclic codes"); fi; end); InstallMethod(GeneratorPol, "method for cyclic codes", true, [IsCyclicCode], 0, function(C) local F, n; F := LeftActingDomain(C); n := WordLength(C); return EuclideanQuotient(One(F)*(Indeterminate(F)^n-1),CheckPol(C)); end); ############################################################################# ## #F CheckPol( ) . . . . . . . . returns the parity check polynomial of C ## ## Pre: C must have a generator or check polynomial ## InstallMethod(CheckPol, "method for unrestricted codes", true, [IsCode], 0, function(C) if IsCyclicCode(C) then return CheckPol(C); else Error("generator polynomial is only defined for cyclic codes"); fi; end); InstallMethod(CheckPol, "method for cyclic codes", true, [IsCyclicCode], 0, function(C) local F, n; F := LeftActingDomain(C); n := WordLength(C); return EuclideanQuotient((Indeterminate(F)^n-One(F)),GeneratorPol(C)); end); ############################################################################# ## #F MinimumDistanceCodeword( [, ] ) . . . . determines a codeword ## having minimum distance to w ## (w= zero vector is the default) ## ##wdj,9-14-2007 InstallMethod(MinimumDistanceCodeword, "attribute method for linear codes", true, [IsLinearCode], 0, function(C) local k, i, j, G, F, zero, AClosestVec, minwt, num, n, closestvec; F := LeftActingDomain(C); n := WordLength(C); zero := Zero(F)*NullVector(n); G := GeneratorMat(C); minwt:=n; closestvec := zero; for i in [1..Length(G)] do AClosestVec:=AClosestVectorCombinationsMatFFEVecFFE(G, F, zero, i, 1); if WeightVecFFE(AClosestVec) [, ] ) . . . . determines the minimum distance ## ## MinimumDistance( ) determines the minimum distance of ## MinimumDistance( , ) determines the minimum distance to a word ## InstallMethod(MinimumDistance, "attribute method for unrestricted codes", true, [IsCode], 0, function(C) local W, El, F, n, zero, d, DD, w; #Print("unrestricted code\n"); if IsBound(C!.upperBoundMinimumDistance) and IsBound(C!.lowerBoundMinimumDistance) and C!.upperBoundMinimumDistance = C!.lowerBoundMinimumDistance then return C!.lowerBoundMinimumDistance; elif IsCyclicCode(C) or IsLinearCode(C) then return MinimumDistance(C); fi; W := VectorCodeword(AsSSortedList(C)); El := W; # so not a copy! F := LeftActingDomain(C); n := WordLength(C); zero := Zero(F); d := n; DD := NullVector(n+1); for w in W do DD := DD + DistancesDistributionVecFFEsVecFFE(El, w); od; d := PositionProperty([2..n+1], i->DD[i] <> 0); C!.lowerBoundMinimumDistance := d; C!.upperBoundMinimumDistance := d; return d; end); InstallMethod(MinimumDistance, "attribute method for linear codes", true, [IsLinearCode], 0, function(C) local k, i, j, G, F, zero, AClosestVec, minwt, num, n; if IsBound(C!.upperBoundMinimumDistance) and IsBound(C!.lowerBoundMinimumDistance) and C!.upperBoundMinimumDistance = C!.lowerBoundMinimumDistance then return C!.lowerBoundMinimumDistance; fi; F := LeftActingDomain(C); n := WordLength(C); zero := Zero(F)*NullVector(n); G := GeneratorMat(C); minwt:=n; for i in [1..Length(G)] do AClosestVec:=AClosestVectorCombinationsMatFFEVecFFE(G, F, zero, i, 1); if WeightVecFFE(AClosestVec)DD[i] <> 0); return d; end); InstallOtherMethod(MinimumDistance, "linear code, word", true, [IsLinearCode, IsCodeword], 0, function(C, word) local Mat, n, k, zero, UP, G, W, multiple, weight, ThisGIsDone, #is true as the latest matrix is converted Icount, #number of corrected generatormatrices i, #first rownumber which could be added to I l, #columnnumber which could be used IdentityColumns, j, CurW, UMD, w, q, tmp, F; #Print("linear code, vector\n"); k := Dimension(C); n := WordLength(C); zero := Zero(LeftActingDomain(C)); q := Size(LeftActingDomain(C)); F := LeftActingDomain(C); w := VectorCodeword(word); if w in C then return 0; elif k = 0 then return Weight(Codeword(w)); elif HasSyndromeTable(C) then j := 1; w := VectorCodeword( Syndrome(C, w) ); for i in [ 0 .. k - 1 ] do if w[ k - i ] <> zero then j := j + q^i * ( LogFFE( w[ k - i ] ) + 1 ); fi; od; return Weight(SyndromeTable(C)[j][1]); fi; UMD := Weight(Codeword(w)); #this must be so, because the kernel function #can not find this distance CurW := 0; Mat := ShallowCopy(GeneratorMat(C)); i := 1; ## The next lines could go etwas faster for cyclic codes by weighting the ## generator polynomial, but a copy of this function must be made in the ## CycCodeOps, which makes it harder to make changes. if q = 2 then multiple := 2; repeat weight := 0; for j in Mat[i] do if not j = zero then weight := weight + 1; fi; od; multiple := Gcd( multiple, weight ); i := i + 1; until multiple = 1 or i > k; else multiple := 1; fi; # we now know that the weight of all the elements are a multiple of multiple UP := List([1..n], i->false); #which columns are already used G := []; W := []; Icount := 0; repeat ThisGIsDone := false; i := 1; # i is the row of the identitymatrix it l := 1; # is trying to make IdentityColumns := []; while not ThisGIsDone and (l <= n) do if not UP[l] then # try this column if it is not already used j := i; while (j <= k) and (Mat[j][l] = zero) do j := j + 1; # go down in the matrix until a nonzero od; # entry is found if j <= k then if j > i then tmp := Mat[i]; Mat[i] := Mat[j]; Mat[j] := tmp; fi; Mat[i] := Mat[i]/Mat[i][l]; for j in Concatenation([1..i-1], [i+1..k]) do if Mat[j][l] <> zero then Mat[j] := Mat[j] - Mat[j][l]*Mat[i]; fi; od; UP[l] := true; Add(IdentityColumns, l); i := i + 1; ThisGIsDone := ( i > k ); fi; fi; l := l + 1; od; if ThisGIsDone then Icount := Icount + 1; Add( G, Mat{[1..k]}{Difference([1..n],IdentityColumns)} ); w := w-w{IdentityColumns}*Mat; Add(W,w{Difference([1..n], IdentityColumns)} ); UMD := Minimum( UMD, WeightCodeword( Codeword( w ) ) ); ## G_i is generator matrix i ## W_i has zeros in IdentityColumns, ## but has same distance to code because ## only a codeword is added fi; until not ThisGIsDone or ( Icount = Int( n / k ) ); while CurW <= ( UMD - multiple ) / Icount do i := 0; repeat i := i + 1; UMD := Minimum( UMD, DistanceVecFFE( W[i], AClosestVectorCombinationsMatFFEVecFFE( G[i], F, W[i], CurW, CurW*(Icount-1) ) ) + CurW ); until (i = Length(G)) or (UMD = CurW*Icount); CurW := CurW + 1; od; return UMD; end); InstallMethod(MinimumDistanceLeon, "attribute method for linear codes", true, [IsLinearCode], 0, function(C) local majority,G0, Gp, Gpt, Gt, L, k, i, j, dimMat, Grstr, J, d1, arrayd1, Combo, rows, row, rowSum, G, F, zero, AClosestVec, s, p, num; G0 := GeneratorMat(C); if (IsInStandardForm(G0)=false) then G := List(G0,ShallowCopy); PutStandardForm(G); fi; F:=LeftActingDomain(C); if F<>GF(2) then Print("Code must be binary. Quitting. \n"); return(0); fi; p:=5; #these seem to be optimal values num:=8; #these seem to be optimal values dimMat := DimensionsMat(G); s := dimMat[2]-dimMat[1]; arrayd1:=[]; for k in [1..num] do ##Permute the columns randomly Gt := TransposedMat(G); Gp := NullMat(dimMat[2],dimMat[1]); L := SymmetricGroup(dimMat[2]); L := Random(L); L:=List([1..dimMat[2]],i->OnPoints(i,L)); for i in [1..dimMat[2]] do Gp[i] := Gt[L[i]]; od; Gp := TransposedMat(Gp); Gp := ShallowCopy(Gp); ##Use gaussian elimination on the new matrix TriangulizeMat(Gp); ##generate the restricted code (I|Z) from Gp=(I|Z|B) Gpt := TransposedMat(Gp); Grstr := NullMat(s,dimMat[1]); for i in [dimMat[1]+1..dimMat[1]+s] do Grstr[i-dimMat[1]] := Gpt[i]; od; Grstr := TransposedMat(Grstr); zero := Zero(F)*Grstr[1]; ##search for all rows of weight p J := []; #col number of codewords to compute the length of for i in [1..p] do AClosestVec:=AClosestVectorCombinationsMatFFEVecFFE(Grstr, F, zero, i, 1); if WeightVecFFE(AClosestVec) > 0 then Add(J, [AClosestVec,i]); fi; od; d1:=dimMat[2]; for rows in J do d1:=Minimum(WeightVecFFE(rows[1])+rows[2],d1); od; arrayd1[k]:=d1; od; if AbsoluteValue(Sum(arrayd1)/Length(arrayd1)-Int(Sum(arrayd1)/Length(arrayd1)))<1/2 then majority:=Int(Sum(arrayd1)/Length(arrayd1)); else majority:=Int(Sum(arrayd1)/Length(arrayd1))+1; fi; return(majority); end); ############################################################################# ## #F LowerBoundMinimumDistance( arg ) . . . . . . . . . . . . . . . . . . . ## ##LR - Is there a better way to handle HasMD case, without reset? InstallMethod(LowerBoundMinimumDistance, "method for unrestricted codes", true, [IsCode], 0, function(C) if HasMinimumDistance(C) then C!.lowerBoundMinimumDistance := MinimumDistance(C); elif not IsBound(C!.lowerBoundMinimumDistance) then if Size(C) = 1 then C!.lowerBoundMinimumDistance := WordLength(C); else C!.lowerBoundMinimumDistance := 1; fi; fi; return C!.lowerBoundMinimumDistance; end); InstallMethod(LowerBoundMinimumDistance, "method for linear code", true, [IsLinearCode], 0, function(C) if HasMinimumDistance(C) then C!.lowerBoundMinimumDistance := MinimumDistance(C); elif not IsBound(C!.lowerBoundMinimumDistance) then if Dimension(C) = 0 then C!.lowerBoundMinimumDistance := WordLength(C); elif Dimension(C) = 1 then C!.lowerBoundMinimumDistance:= Weight(Codeword(GeneratorMat(C)[1])); else C!.lowerBoundMinimumDistance := 1; fi; fi; return C!.lowerBoundMinimumDistance; end); InstallMethod(LowerBoundMinimumDistance, "method for cyclic codes", true, [IsCyclicCode], 0, function(C) if HasMinimumDistance(C) then C!.lowerBoundMinimumDistance := MinimumDistance(C); elif not IsBound(C!.lowerBoundMinimumDistance) then if Dimension(C) = 0 then C!.lowerBoundMinimumDistance := WordLength(C); elif Dimension(C) = 1 then C!.lowerBoundMinimumDistance := Weight(Codeword(GeneratorPol(C))); else C!.lowerBoundMinimumDistance := 1; fi; fi; return C!.lowerBoundMinimumDistance; end); InstallOtherMethod(LowerBoundMinimumDistance, "n, k, q", true, [IsInt, IsInt, IsInt], 0, function(n, k, q) local r; r := BoundsMinimumDistance(n, k, q, true); return r.lowerBound; end); InstallOtherMethod(LowerBoundMinimumDistance, "n, k", true, [IsInt, IsInt], 0, function(n, k) local r; r := BoundsMinimumDistance(n, k, 2, true); return r.lowerBound; end); InstallOtherMethod(LowerBoundMinimumDistance, "n, k, F", true, [IsInt, IsInt, IsField], 0, function(n, k, F) local r; r := BoundsMinimumDistance(n, k, Size(F), true); return r.lowerBound; end); ############################################################################# ## #F UpperBoundMinimumDistance( arg ) . . . . . . . . . . . . . . . . . . . ## ##LR - is there a better way to handle HasMD case, without reset? InstallMethod(UpperBoundMinimumDistance, "method for unrestricted codes", true, [IsCode], 0, function(C) if HasMinimumDistance(C) then C!.upperBoundMinimumDistance := MinimumDistance(C); elif not IsBound(C!.upperBoundMinimumDistance) then C!.upperBoundMinimumDistance := WordLength(C); fi; return C!.upperBoundMinimumDistance; end); InstallMethod(UpperBoundMinimumDistance, "method for linear codes", true, [IsLinearCode], 0, function(C) local ubmd; if HasMinimumDistance(C) then C!.upperBoundMinimumDistance := MinimumDistance(C); else if not IsBound(C!.upperBoundMinimumDistance) then ubmd := WordLength(C); else ubmd := C!.upperBoundMinimumDistance; fi; if MinimumWeightOfGenerators(C) < ubmd then ubmd := MinimumWeightOfGenerators(C); fi; if UpperBoundOptimalMinimumDistance(C) < ubmd then ubmd := UpperBoundOptimalMinimumDistance(C); fi; C!.upperBoundMinimumDistance := ubmd; fi; return C!.upperBoundMinimumDistance; end); InstallOtherMethod(UpperBoundMinimumDistance, "n, k, q", true, [IsInt, IsInt, IsInt], 0, function(n, k, q) local r; r := BoundsMinimumDistance(n, k, q, false); return r.upperBound; end); InstallOtherMethod(UpperBoundMinimumDistance, "n,k", true, [IsInt, IsInt], 0, function(n, k) local r; r := BoundsMinimumDistance(n, k, 2, false); return r.upperBound; end); InstallOtherMethod(UpperBoundMinimumDistance, "n,k,F", true, [IsInt, IsInt, IsField], 0, function(n, k, F) local r; r := BoundsMinimumDistance(n, k, Size(F), false); return r.upperBound; end); ############################################################################# ## #F UpperBoundOptimalMinimumDistance( arg ) . . . . . . . . . . . . . . . . ## ## UpperBoundMinimumDistance of optimal code with given parameters ## InstallMethod(UpperBoundOptimalMinimumDistance, "method for unrestricted code", true, [IsCode], 0, function(C) local r; r := BoundsMinimumDistance(WordLength(C), Dimension(C), Size(LeftActingDomain(C)), false); return r.upperBound; end); ############################################################################# ## #F MinimumWeightOfGenerators( arg ) . . . . . . . . . . . . . . . . . . . . ## ## InstallMethod(MinimumWeightOfGenerators, "linear codes", true, [IsLinearCode], 0, function(C) local zero, mwg, sum, element, row; zero := Zero(LeftActingDomain(C)); mwg := WordLength(C); if Dimension(C) > 0 then # minimumWeightOfGenerators for null codes is n for row in GeneratorMat(C) do sum := 0; for element in row do if element <> zero then sum := sum + 1; fi; od; if sum < mwg then mwg := sum; fi; od; fi; return mwg; end); InstallMethod(MinimumWeightOfGenerators, "method for cyclic codes", true, [IsCyclicCode], 0, function(C) if Dimension(C) > 0 then # minimumWeightOfGenerators of null codes is n return Weight(Codeword(GeneratorPol(C))); else return WordLength(C); fi; end); ############################################################################# ## #F MinimumWeightWords( ) . . . returns the code words of minimum weight ## InstallMethod(MinimumWeightWords, "method for unrestricted code", true, [IsCode], 0, function(C) local curmin, res, e, w, zerovec, d; if IsLinearCode(C) then return MinimumWeightWords(C); fi; curmin := WordLength(C); if not HasWeightDistribution(C) then res := []; for e in AsSSortedList(C) do w := Weight(e); if w < curmin and w <> 0 then # New minimum weight found curmin := w; res := [ e ]; elif w = curmin then Add(res, e); fi; od; return res; else # Find the minimum weight d := MinimumDistance(C); return Filtered(AsSSortedList(C), e -> Weight(e) = d); fi; end); InstallMethod(MinimumWeightWords, "method for linear code", true, [IsLinearCode], 0, function(C) local d, G, res, vector, count, i, t, k, q, M, zerovec; d := MinimumDistance(C); # Equal to minimum weight G := GeneratorMat(C); k := Dimension(C); q := Size(LeftActingDomain(C)); M := Size(C); res := []; vector := NullVector(WordLength(C), LeftActingDomain(C)); zerovec := ShallowCopy(vector); count := 1; while count < M do # Calculate next word in the code i := k; t := count; while t mod q = 0 do t := t / q; i := i - 1; od; vector := vector + G[i]; if DistanceVecFFE(vector, zerovec) = d then # This word has minimum weight Add(res, Codeword(vector)); fi; count := count + 1; od; return res; end); ############################################################################# ## #F WeightDistribution( ) . . . returns the weight distribution of a code ## InstallMethod(WeightDistribution, "method for unrestricted code", true, [IsCode], 0, function (C) local El, nl, newwd; if IsLinearCode(C) then return WeightDistribution(C); fi; El := VectorCodeword(AsSSortedList(C)); nl := VectorCodeword(NullWord(C)); newwd := DistancesDistributionVecFFEsVecFFE(El, nl); return newwd; end); InstallMethod(WeightDistribution, "method for linear code", true, [IsLinearCode], 0, function(C) local G, nl, k, n, q, F, wd, newwd, oldrow, newrow, i, j; n := WordLength(C); k := Dimension(C); q := Size(LeftActingDomain(C)); F := LeftActingDomain(C); nl := VectorCodeword(NullWord(C)); if k = 0 then G := NullVector(n+1); G[1] := 1; newwd := G; elif k = n then newwd := List([0..n], i->Binomial(n, i)); elif k <= Int(n/2) then G := ShallowCopy(GeneratorMat(C)); newwd := DistancesDistributionMatFFEVecFFE(G, F, nl); else G := ShallowCopy(CheckMat(C)); wd := DistancesDistributionMatFFEVecFFE(G, F, nl); newwd := [Sum(wd)]; oldrow := List([1..n+1], i->1); newrow := []; for i in [2..n+1] do newrow[1] := Binomial(n, i-1) * (q-1)^(i-1); for j in [2..n+1] do newrow[j] := newrow[j-1] - (q-1) * oldrow[j] - oldrow[j-1]; od; newwd[i] := newrow * wd; oldrow := ShallowCopy(newrow); od; newwd:= newwd / (q ^ Redundancy(C)); fi; return newwd; end); ############################################################################# ## #F InnerDistribution( ) . . . . . . the inner distribution of the code ## ## The average distance distribution of distances between all codewords ## InstallMethod(InnerDistribution, "method for unrestricted code", true, [IsCode], 0, function (C) local ID, c, El; El := VectorCodeword(AsSSortedList(C)); ID := List([1..WordLength(C)+1], i->0); for c in El do ID := ID + DistancesDistributionVecFFEsVecFFE(El, c); od; return ID/Size(C); end); InstallMethod(InnerDistribution, "method for linear codes", true, [IsLinearCode], 0, function (C) return WeightDistribution(C); end); ############################################################################# ## #F OuterDistribution( ) . . . . . . . . . . . . . . . . . . . . . . . ## ## the number of codewords on a distance i from all elements of GF(q)^n ## InstallOtherMethod(OuterDistribution, "method for unrestricted code", true, [IsCode], 0, function (C) local gen, q, n, F, zero, Els, res, vector, t, large, count, dd; if IsLinearCode(C) then return OuterDistribution(C); fi; q := Size(LeftActingDomain(C)); n := WordLength(C); F := LeftActingDomain(C); zero := Zero(F); Els := VectorCodeword(AsSSortedList(C)); res := [[NullWord(C),WeightDistribution(C)]]; vector := NullVector(n, F); t := n; gen := Z(q); large := One(F); for count in [2..q^n] do t := n; while vector[t] = large do vector[t] := zero; t := t-1; od; if vector[t] = zero then vector[t] := gen; else vector[t] := vector[t] * gen; fi; dd := DistancesDistributionVecFFEsVecFFE(Els, vector); Add(res, [Codeword(vector), dd]); od; return res; end); InstallMethod(OuterDistribution, "method for linear codes", true, [IsLinearCode], 0, function(C) local STentry, dtw, E, res, i; E := AsSSortedList(C); res := []; for STentry in List(SyndromeTable(C), i -> i[1]) do dtw := DistancesDistribution(C, STentry); for i in E do Add(res, [VectorCodeword(STentry) + i, dtw]); od; od; return res; end); ############################################################################# ## #F InformationWord( Code, c ) . . . "decodes" a codeword c in C to the ## information "message" word m, so m*C=c InstallMethod(InformationWord, "code, codeword", true, [IsCode, IsCodeword], 1, function(C, c) local m; if not(c in C) then return "ERROR: codeword must belong to code"; fi; if not(IsLinearCode(C)) then return "ERROR: code must be linear"; fi; m := SolutionMat(List(GeneratorMat(C),List), VectorCodeword(c)); return Codeword(m); end); ############################################################################# ## #F IsSelfDualCode( ) . . . . . . . . . determines whether C is self dual ## ## i.o.w. each codeword is orthogonal to all codewords (including itself) ## InstallMethod(IsSelfDualCode, "method for unrestricted code", true, [IsCode], 0, function(C) if IsCyclicCode(C) or IsLinearCode(C) then return IsSelfDualCode(C); else return false; fi; end); InstallMethod(IsSelfDualCode, "method for linear code", true, [IsLinearCode], 0, function(C) if IsCyclicCode(C) then return IsSelfDualCode(C); elif Redundancy(C) <> Dimension(C) then return false; #so the code is not self dual else return (GeneratorMat(C)*TransposedMat(GeneratorMat(C)) = NullMat(Dimension(C),Dimension(C),LeftActingDomain(C))); fi; end); InstallMethod(IsSelfDualCode, "method for cyclic codes", true, [IsCyclicCode], 0, function(C) local r; if Redundancy(C) <> Dimension(C) then return false; #so the code is not self dual else r := ReciprocalPolynomial(GeneratorPol(C),Redundancy(C)); r := r/LeadingCoefficient(r); return CheckPol(C) = r; fi; end); ############################################################################# ## #F CodewordVector( , ) ## ## only valid if C is linear! ## InstallOtherMethod(CodewordVector,"vector and unrestricted code", true, [IsList, IsCode], 0, function(l, C) if IsLinearCode(C) then return CodewordVector(l,C); else Error(" is a non-linear code");# encoding not possible fi; end); InstallOtherMethod(CodewordVector,"vector and linear code", true, [IsList, IsLinearCode], 0, function(l, C) local s, i, k; if IsCyclicCode(C) then return CodewordVector(l,C); else l := VectorCodeword(Codeword(l, Dimension(C), LeftActingDomain(C))); if GeneratorMat(C) = [] then return NullMat(Length(l), WordLength(C), LeftActingDomain(C)); else return Codeword(l*GeneratorMat(C), C); fi; fi; end); InstallOtherMethod(CodewordVector, ",cyclic code", true, [IsList, IsCyclicCode], 0, function(l, C) local F, p; F := LeftActingDomain(C); l := Codeword(l, Dimension(C), F); if IsList(l) and not IsCodeword(l) then return List(l, i->CodewordVector(i,C)); else return Codeword(PolyCodeword(l) * GeneratorPol(C), C); fi; end); InstallOtherMethod(CodewordVector, "method for poly and cyclic code", true, [IsUnivariatePolynomial, IsCyclicCode], 0, function(p, C) local F, w; F := LeftActingDomain(C); w := Codeword(p, Dimension(C), F); return Codeword(PolyCodeword(w) * GeneratorPol(C), C); end); InstallOtherMethod(\*, "list with code", true, [IsList, IsCode], 0, CodewordVector); InstallOtherMethod(\*, "poly with code", true, [IsUnivariatePolynomial, IsCode], 0, CodewordVector); InstallOtherMethod(\*, "method for two codes", true, [IsCode, IsCode], 0, function(C1, C2) return DirectProductCode(C1, C2); end); ############################################################################# ## #F \+( , ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . ## ## InstallOtherMethod(\+, "method for codeword+code", true, [IsCodeword, IsCode], 0, function(w, C) return CosetCode(C, w); end); InstallOtherMethod(\+, "method for code+codeword", true, [IsCode, IsCodeword], 0, function(C, w) return CosetCode(C, w); end); InstallOtherMethod(\+, "method for two codes", true, [IsCode, IsCode], 0, function(C1, C2) return DirectSumCode(C1, C2); end); ############################################################################# ## #F \in( , ) . . . . . . true if the vector is an element of the code ## ## InstallMethod(\in, "method for codeword in unrestricted code", true, [IsCodeword, IsCode], 0, function(w, C) if WordLength(w) <> WordLength(C) then return false; else return w in AsSSortedList(C); fi; end); InstallMethod(\in, "method for list of codewords in unrestricted code", true, [IsList, IsCode], 0, function(l, C) return ForAll(l, w->w in C); end); InstallMethod(\in, "method for unrestricted code in unrestricted code", true, [IsCode, IsCode], 0, function(C1, C2) local l; l := ShallowCopy(AsSSortedList(C1)); return ForAll(l, w->w in C2); end); InstallMethod(\in, "method for codeword in linear code", true, [IsCodeword, IsLinearCode], 0, function(w, C) if WordLength(w) <> WordLength(C) then return false; elif GeneratorMat(C) = [] then return w = 0*w; elif CheckMat(C) = [] then #Code is WholeSpace, just check field. return ForAll(VectorCodeword(w), x->x in LeftActingDomain(C)); else return CheckMat(C)*w = 0*w; fi; end); InstallMethod(\in, "method for linear code in linear code", true, [IsLinearCode, IsLinearCode], 0, function(C1, C2) local l; l := ShallowCopy(GeneratorMat(C1)); return ForAll(l, w-> Codeword(w) in C2); end); InstallMethod(\in, "method for codeword in cyclic code", true, [IsCodeword, IsCyclicCode], 0, function(w, C) return PolyCodeword(w) mod GeneratorPol(C) = 0 * Indeterminate(LeftActingDomain(C)); end); InstallMethod(\in, "method for cyclic code in cyclic code", true, [IsCyclicCode, IsCyclicCode], 0, function(C1, C2) return GeneratorPol(C1) mod GeneratorPol(C2) = 0 * Indeterminate(LeftActingDomain(C2)); end); ############################################################################# ## #F \=( , ) . . . . . tests if Set(AsList(C1))=Set(AsList(C2)) ## ## Post: returns a boolean ## InstallMethod(\=, "method for unrestricted code = unrestricted code", true, [IsCode, IsCode], 0, function(C1, C2) local field, fields; if (IsLinearCode(C1) and IsLinearCode(C2)) or (IsCyclicCode(C1) and IsCyclicCode(C2)) then return C1 = C2; elif IsLinearCode(C1) or IsLinearCode(C2) then return false; ##one is linear, the other is not, so not equal fi; if Set(AsSSortedList(C1)) = Set(AsSSortedList(C2)) then fields := [WeightDistribution, InnerDistribution, IsLinearCode, IsPerfectCode, IsSelfDualCode, OuterDistribution, IsCyclicCode, AutomorphismGroup, MinimumDistance, CoveringRadius]; for field in fields do if not Tester(field)(C1) then if Tester(field)(C2) then Setter(field)(C1, field(C2)); fi; else if not Tester(field)(C2) then Setter(field)(C2, field(C1)); fi; fi; od; if not IsBound(C1!.boundsCoveringRadius) then if IsBound(C2!.boundsCoveringRadius) then C1!.boundsCoveringRadius := C2!.boundsCoveringRadius; fi; else if not IsBound(C2!.boundsCoveringRadius) then C2!.boundsCoveringRadius := C1!.boundsCoveringRadius; fi; fi; C1!.lowerBoundMinimumDistance := Maximum(LowerBoundMinimumDistance(C1), LowerBoundMinimumDistance(C2)); C2!.lowerBoundMinimumDistance := C1!.lowerBoundMinimumDistance; C1!.upperBoundMinimumDistance := Minimum(UpperBoundMinimumDistance(C1), UpperBoundMinimumDistance(C2)); C2!.upperBoundMinimumDistance := C1!.upperBoundMinimumDistance; return true; else return false; #so C1 is not equal to C2 fi; end); InstallMethod(\=, "method for linear code = linear code", true, [IsLinearCode, IsLinearCode], 0, function(C1, C2) local field, fields; if IsCyclicCode(C1) and IsCyclicCode(C2) then return C1 = C2; elif IsCyclicCode(C1) or IsCyclicCode(C2) then return false; ##one is cyclic, the other is not, so not equal. fi; if BaseMat(GeneratorMat(C1))=BaseMat(GeneratorMat(C2)) then fields := [WeightDistribution, InnerDistribution, IsLinearCode, IsPerfectCode, IsSelfDualCode, OuterDistribution, IsCyclicCode, AutomorphismGroup, MinimumDistance, CoveringRadius]; for field in fields do if not Tester(field)(C1) then if Tester(field)(C2) then Setter(field)(C1, field(C2)); fi; else if not Tester(field)(C2) then Setter(field)(C2, field(C1)); fi; fi; od; if not IsBound(C1!.boundsCoveringRadius) then if IsBound(C2!.boundsCoveringRadius) then C1!.boundsCoveringRadius := C2!.boundsCoveringRadius; fi; else if not IsBound(C2!.boundsCoveringRadius) then C2!.boundsCoveringRadius := C1!.boundsCoveringRadius; fi; fi; C1!.lowerBoundMinimumDistance := Maximum(LowerBoundMinimumDistance(C1), LowerBoundMinimumDistance(C2)); C2!.lowerBoundMinimumDistance := C1!.lowerBoundMinimumDistance; C1!.upperBoundMinimumDistance := Minimum(UpperBoundMinimumDistance(C1), UpperBoundMinimumDistance(C2)); C2!.upperBoundMinimumDistance := C1!.upperBoundMinimumDistance; return true; else return false; #so l is not equal to r fi; end); InstallMethod(\=, "method for cyclic code = cyclic code", true, [IsCyclicCode, IsCyclicCode], 0, function(C1, C2) local field, fields, bmdl, bmdr; if GeneratorPol(C1) = GeneratorPol(C2) then fields := [WeightDistribution, InnerDistribution, IsLinearCode, IsPerfectCode, IsSelfDualCode, OuterDistribution, IsCyclicCode, AutomorphismGroup, MinimumDistance, CoveringRadius, RootsOfCode]; for field in fields do if not Tester(field)(C1) then if Tester(field)(C2) then Setter(field)(C1, field(C2)); fi; else if not Tester(field)(C2) then Setter(field)(C2, field(C1)); fi; fi; od; if not IsBound(C1!.boundsCoveringRadius) then if IsBound(C2!.boundsCoveringRadius) then C1!.boundsCoveringRadius := C2!.boundsCoveringRadius; fi; else if not IsBound(C2!.boundsCoveringRadius) then C2!.boundsCoveringRadius := C1!.boundsCoveringRadius; fi; fi; C1!.lowerBoundMinimumDistance := Maximum(LowerBoundMinimumDistance(C1), LowerBoundMinimumDistance(C2)); C2!.lowerBoundMinimumDistance := C1!.lowerBoundMinimumDistance; C1!.upperBoundMinimumDistance := Minimum(UpperBoundMinimumDistance(C1), UpperBoundMinimumDistance(C2)); C2!.upperBoundMinimumDistance := C1!.upperBoundMinimumDistance; return true; else return false; #so l is not equal to r fi; end); ############################################################################# ## #F SyndromeTable ( ) . . . . . . . . . . . . . . . a Syndrome table of C ## InstallMethod(SyndromeTable, "method for unrestricted code", true, [IsCode], 0, function(C) if IsLinearCode(C) then return SyndromeTable(C); else Error("the syndrome table is not defined for non-linear codes"); fi; end); InstallMethod(SyndromeTable, "method for linear code", true, [IsLinearCode], 0, function(C) local H, L, F; H := CheckMat(C); if H = [] then return []; fi; F := LeftActingDomain(C); L := CosetLeadersMatFFE(List(H,List), F); H := TransposedMat(H); return Codeword(List(L, l-> [l, l*H]), F); end); ############################################################################# ## #F StandardArray( ) . . . . . . . . . . . . a standard array for code C ## ## Post: returns a 3D-matrix. The first row contains all the codewords of C. ## The other rows contain the cosets, preceded by their coset leaders. ## InstallMethod(StandardArray, "method for unrestricted code", true, [IsCode], 0, function(C) if IsLinearCode(C) then return StandardArray(C); else Error("a standard array is not defined for non-linear codes"); fi; end); InstallMethod(StandardArray, "method for linear code", true, [IsLinearCode], 0, function(C) local Els; Els := AsSSortedList(C); if CheckMat(C) = [] then return [Els]; fi; return List(Set(CosetLeadersMatFFE(CheckMat(C), LeftActingDomain(C))), row -> List(Els, column -> row + column)); end); ############################################################################# ## #F AutomorphismGroup( ) . . . . . . . . the automorphism group of code ## ## The automorphism group is the largest permutation group of degree n such ## that for each permutation in the group C' = C ## InstallOtherMethod(AutomorphismGroup, "method for unrestricted codes", true, [IsCode], 0, function(C) local path; path := DirectoriesPackagePrograms( "guava" ); if ForAny( ["desauto", "leonconv", "wtdist"], f -> Filename( path, f ) = fail ) then Print("desauto not loaded ... switching to PermutationGroup ...\n"); return PermutationGroup(C); fi; if Size(LeftActingDomain(C)) > 2 then Print("This command calculates automorphism groups for binary codes only\n"); Print("... automatically switching to PermutationGroup ...\n"); return PermutationGroup(C); elif IsLinearCode(C) then return AutomorphismGroup(C); else return MatrixAutomorphisms(VectorCodeword(AsSSortedList(C)), [], Group( () )); fi; end); InstallOtherMethod(AutomorphismGroup, "method for linear codes", true, [IsLinearCode], 0, function(C) local incode, inV, outgroup, infile,Ccalc,path; path := DirectoriesPackagePrograms( "guava" ); if ForAny( ["desauto", "leonconv", "wtdist"], f -> Filename( path, f ) = fail ) then Print("desauto not loaded ... switching to PermutationGroup ...\n"); return PermutationGroup(C); fi; if Size(LeftActingDomain(C)) > 2 then Print("This command calculates automorphism groups for binary codes only\n"); Print("... automatically switching to PermutationGroup ...\n"); return PermutationGroup(C); fi; incode := TmpName(); PrintTo( incode, "\n" ); inV := TmpName(); PrintTo( inV, "\n" ); outgroup := TmpName(); PrintTo( outgroup, "\n" ); infile := TmpName(); PrintTo( infile, "\n" ); # Calculate with dual code if it is smaller: if Dimension(C) > QuoInt(WordLength(C), 2) then Ccalc := DualCode(C); else Ccalc := ShallowCopy(C); fi; GuavaToLeon(Ccalc, incode); Exec(Filename(DirectoriesPackagePrograms("guava"), "wtdist"), Concatenation("-q ",incode,"::code ", String(MinimumDistance(Ccalc))," ",inV,"::code")); Exec(Filename(DirectoriesPackagePrograms("guava"), "desauto"), Concatenation("-code -q ", incode,"::code ",inV,"::code ",outgroup)); Exec(Filename(DirectoriesPackagePrograms("guava"), "leonconv"), Concatenation("-a ",outgroup," ", infile)); Read(infile); RemoveFiles(incode,inV,outgroup,infile); return GUAVA_TEMP_VAR; end); ## If the new partition backtrack algorithms are implemented, the previous ## function can be replaced by the next: #InstallOtherMethod(AutomorphismGroup, "method for linear code", true, # [IsLinearCode], 0, #function(C) # local Ccalc, InvSet; # if Dimension(C) > QuoInt(WordLength(C), 2) then # Ccalc := DualCode(C); # else # Ccalc := ShallowCopy(C); # fi; # InvSet := VectorCodeword(MinimumWeightWords(Ccalc)); # return AutomorphismGroupBinaryLinearCode(Ccalc, InvSet); #end); ############################################################################# ## ## PermutationGroup( ) . . . . . . PermutationGroup of non-binary code ## ## confusing name? InstallMethod(PermutationGroup, "attribute method for linear codes", true, [IsLinearCode], 0, function(C) local G0, Gell, G1, G2, Gt, L, k, i, j, G, F, A, aut, n, Sn, ell; Print("\n To be deprecated. Please use PermutationAutomorphismGroup.\n"); F:=LeftActingDomain(C); G1 := GeneratorMat(C); G := List(G1,ShallowCopy); k:=DimensionsMat(G)[1]; n:=DimensionsMat(G)[2]; TriangulizeMat(G); Gt := TransposedMat(G); Sn := SymmetricGroup(n); A:=[]; for ell in Sn do G2:= NullMat(n,k); for j in [1..n] do G2[j]:=Gt[OnPoints(j,ell)]; od; # j Gell := TransposedMat(G2); G0 := List(Gell,ShallowCopy); TriangulizeMat(G0); if G = G0 then Add(A, ell); fi; od; # ell if Length(A)>0 then aut := Group(A); else aut:=Group(()); fi; return(aut); end); ############################################################################# ## ## PermutationAutomorphismGroup( ) . . Permutation automorphism ## group of linear (possibly non-binary) code ## ## InstallMethod(PermutationAutomorphismGroup, "attribute method for linear codes", true, [IsLinearCode], 0, function(C) local G0, Gell, G1, G2, Gt, L, k, i, j, G, F, A, aut, n, Sn, ell; F:=LeftActingDomain(C); G1 := GeneratorMat(C); G := List(G1,ShallowCopy); k:=DimensionsMat(G)[1]; n:=DimensionsMat(G)[2]; TriangulizeMat(G); Gt := TransposedMat(G); Sn := SymmetricGroup(n); A:=[]; for ell in Sn do G2:= NullMat(n,k); for j in [1..n] do G2[j]:=Gt[OnPoints(j,ell)]; od; # j Gell := TransposedMat(G2); G0 := List(Gell,ShallowCopy); TriangulizeMat(G0); if G = G0 then Add(A, ell); fi; od; # ell if Length(A)>0 then aut := Group(A); else aut:=Group(()); fi; return(aut); end); ############################################################################# ## #F IsSelfOrthogonalCode( ) . . . . . . . . . . . . . . . . . . . . . . ## InstallTrueMethod(IsSelfOrthogonalCode, IsSelfDualCode); InstallMethod(IsSelfOrthogonalCode, "method for unrestricted code", true, [IsCode], 0, function(C) local El, M, zero, i, j, IsSO; if IsLinearCode(C) then return IsSelfOrthogonalCode(C); fi; El := AsSSortedList(C); M := Size(C); zero := Zero(LeftActingDomain(C)); i := 1; IsSO := true; while (i <= M-1) and IsSO do j := i+1; while (j <= M) and (El[i]*El[j] = zero) do j := j + 1; od; if j <= M then IsSO := false; fi; i := i + 1; od; return IsSO; end); InstallMethod(IsSelfOrthogonalCode, "method for linear code", true, [IsLinearCode], 0, function(C) local G, k; G := GeneratorMat(C); k := Dimension(C); return G*TransposedMat(G) = NullMat(k,k,LeftActingDomain(C)); end); ############################################################################# ## #F IsDoublyEvenCode( ) . . . . . . . . . . . . . . . . . . . . . . . . ## ## Return true if and only if the code C is a binary linear code which has ## all codewords of weight divisible by 4 only. ## ## If a binary linear code is self-orthogonal and the weight of each row ## in its generator matrix is divisibly by 4, the code is doubly-even ## (see Theorem 1.4.8 in W. C. Huffman and V. Pless, "Fundamentals of ## error-correcting codes", Cambridge Univ. Press, 2003.) ## InstallMethod(IsDoublyEvenCode, "method for binary linear code", true, [IsLinearCode], 0, function(C) local G, i; if LeftActingDomain(C)<>GF(2) then Error("Code must be binary\n"); fi; G:=GeneratorMat(C); for i in [1..Size(G)] do; if Weight(Codeword(G[i])) mod 4 <> 0 then return false; fi; od; return IsSelfOrthogonalCode(C); end); ############################################################################# ## #F IsSinglyEvenCode( ) . . . . . . . . . . . . . . . . . . . . . . . . ## ## Return true if and only if the code C is a self-orthogonal binary linear ## code which is not doubly-even. ## InstallMethod(IsSinglyEvenCode, "method for binary linear code", true, [IsLinearCode], 0, function(C) if LeftActingDomain(C)<>GF(2) then Error("Code must be binary\n"); fi; return (IsSelfOrthogonalCode(C)) and (not IsDoublyEvenCode(C)); end); ############################################################################# ## #F IsEvenCode( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . ## ## Return true if and only if the code C is a binary linear code which has ## even weight codewords--regardless whether or not it is self-orgthogonal. ## InstallMethod(IsEvenCode, "method for binary linear code", true, [IsLinearCode], 0, function(C) if LeftActingDomain(C)<>GF(2) then Error("Code must be binary\n"); fi; return (C = EvenWeightSubcode(C)); end); ############################################################################# ## #F CodeIsomorphism( , ) . . the permutation that translates C1 into #F C2 if C1 and C2 are equivalent, or false otherwise ## InstallMethod(CodeIsomorphism, "method for two unrestricted codes", true, [IsCode, IsCode], 0, function(C1, C2) local tp, field; if WordLength(C1) <> WordLength(C2) or Size(C1) <> Size(C2) or MinimumDistance(C1) <> MinimumDistance(C2) or LeftActingDomain(C1) <> LeftActingDomain(C2) then return false; #I think this is what we want (see IsEquivalentCode) elif C1=C2 then return (); elif IsLinearCode(C1) and IsLinearCode(C2) then return CodeIsomorphism(C1, C2 ); fi; tp := TransformingPermutations(VectorCodeword(AsSSortedList(C1)), VectorCodeword(AsSSortedList(C2))); if tp <> false then for field in [WeightDistribution, InnerDistribution, IsPerfectCode, IsSelfDualCode] do if not Tester(field)(C1) then if Tester(field)(C2) then Setter(field)(C1, field(C2)); fi; else if not Tester(field)(C2) then Setter(field)(C2, field(C1)); fi; fi; od; if not IsBound(C1!.boundsCoveringRadius) then if IsBound(C2!.boundsCoveringRadius) then C1!.boundsCoveringRadius := C2!.boundsCoveringRadius; fi; else if not IsBound(C2!.boundsCoveringRadius) then C2!.boundsCoveringRadius := C1!.boundsCoveringRadius; fi; fi; C1!.lowerBoundMinimumDistance := Maximum(LowerBoundMinimumDistance(C1), LowerBoundMinimumDistance(C2)); C2!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C1); C1!.upperBoundMinimumDistance := Minimum(UpperBoundMinimumDistance(C1), UpperBoundMinimumDistance(C2)); C2!.upperBoundMinimumDistance := UpperBoundMinimumDistance(C1); return tp.columns; else return false; #yes, this is right fi; end); InstallMethod(CodeIsomorphism, "method for two linear codes", true, [IsLinearCode, IsLinearCode], 0, function(C1, C2) local code1,code2,cwcode1,cwcode2,output,infile, field; if WordLength(C1) <> WordLength(C2) or Size(C1) <> Size(C2) or MinimumDistance(C1) <> MinimumDistance(C2) or LeftActingDomain(C1) <> LeftActingDomain(C2) then return false; #I think this is what we want (see IsEquivalentCode) elif C1=C2 then return (); elif LeftActingDomain(C1) <> GF(2) then Error("GUAVA can only calculate equivalence over GF(2)"); fi; code1 := TmpName(); PrintTo( code1, "\n" ); code2 := TmpName(); PrintTo( code2, "\n" ); cwcode1 := TmpName(); PrintTo( cwcode1, "\n" ); cwcode2 := TmpName(); PrintTo( cwcode2, "\n" ); output := TmpName(); PrintTo( output, "\n" ); infile := TmpName(); PrintTo( infile, "\n" ); GuavaToLeon(C1, code1); GuavaToLeon(C2, code2); Exec(Filename(DirectoriesPackagePrograms("guava"), "wtdist"), Concatenation("-q ",code1,"::code ", String(MinimumDistance(C1))," ",cwcode1,"::code")); Exec(Filename(DirectoriesPackagePrograms("guava"), "wtdist"), Concatenation("-q ",code2,"::code ", String(MinimumDistance(C2))," ",cwcode2,"::code")); Exec(Filename(DirectoriesPackagePrograms("guava"), "desauto"), Concatenation("-iso -code -q ", code1,"::code ",code2,"::code ",cwcode1,"::code ", cwcode2,"::code ",output)); Exec(Filename(DirectoriesPackagePrograms("guava"), "leonconv"), Concatenation("-e ",output," ", infile)); Read(infile); RemoveFiles(code1,code2,cwcode1,cwcode2,output,infile); if not IsPerm(GUAVA_TEMP_VAR) then return false; #it is good that false is returned else for field in [WeightDistribution, IsPerfectCode, IsSelfDualCode] do if not Tester(field)(C1) then if Tester(field)(C2) then Setter(field)(C1, field(C2)); fi; else if not Tester(field)(C2) then Setter(field)(C2, field(C1)); fi; fi; od; if not IsBound(C1!.boundsCoveringRadius) then if IsBound(C2!.boundsCoveringRadius) then C1!.boundsCoveringRadius := C2!.boundsCoveringRadius; fi; else if not IsBound(C2!.boundsCoveringRadius) then C2!.boundsCoveringRadius := C1!.boundsCoveringRadius; fi; fi; C1!.lowerBoundMinimumDistance := Maximum(LowerBoundMinimumDistance(C1), LowerBoundMinimumDistance(C2)); C2!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C1); C1!.upperBoundMinimumDistance := Minimum(UpperBoundMinimumDistance(C1), UpperBoundMinimumDistance(C2)); C2!.upperBoundMinimumDistance := UpperBoundMinimumDistance(C1); return GUAVA_TEMP_VAR; fi; end); ## If the new partition backtrack algorithms are implemented, the previous ## function can be replaced by the next: #InstallMethod(CodeIsomorphism, "method for linear codes", true, # [IsLinearCode, IsLinearCode], 0, #function (C1, C2) # local field, InvSet1, InvSet2, P; # if WordLength(C1) <> WordLength(C2) or Size(C1) <> Size(C2) # or MinimumDistance(C1) <> MinimumDistance(C2) # or LeftActingDomain(C1) <> LeftActingDomain(C2) then # return false; #I think this is what we want (see IsEquivalentCode) # elif C1=C2 then # return (); # elif LeftActingDomain(C1) <> GF(2) then # Error("GUAVA can only calculate equivalence over GF(2)"); # fi; # InvSet1 := VectorCodeword(MinimumWeightWords(C1)); # InvSet2 := VectorCodeword(MinimumWeightWords(C2)); # P := AutomorphismGroupBinaryLinearCode(C1, InvSet1, C2, InvSet2); # if not IsPerm(P) then # return false; #it is good that false is returned # else # for field in [WeightDistribution, # IsPerfectCode, # IsSelfDualCode] do # if not Tester(field)(C1) then # if Tester(field)(C2) then # Setter(field)(C1, field(C2)); # fi; # else # if not Tester(field)(C2) then # Setter(field)(C2, field(C1)); # fi; # fi; # od; # # if not IsBound(C1!.boundsCoveringRadius) then # if IsBound(C2!.boundsCoveringRadius) then # C1!.boundsCoveringRadius := C2!.boundsCoveringRadius; # fi; # else # if not IsBound(C2!.boundsCoveringRadius) then # C2!.boundsCoveringRadius := C1!.boundsCoveringRadius; # fi; # fi; # C1!.lowerBoundMinimumDistance := Maximum(LowerBoundMinimumDistance(C1), # LowerBoundMinimumDistance(C2)); # C2!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C1); # C1!.upperBoundMinimumDistance := Minimum(UpperBoundMinimumDistance(C1), # UpperBoundMinimumDistance(C2)); # C2!.upperBoundMinimumDistance := UpperBoundMinimumDistance(C1); # return P; # fi; #end); ############################################################################# ## #F IsEquivalent( , ) . . . . . . true if C1 and C2 are equivalent ## ## that is if there exists a permutation that transforms C1 into C2. ## If returnperm is true, this permutation (if it exists) is returned; ## else the function only returns true or false. Has a global dispatcher. ## InstallMethod(IsEquivalent, "method for unrestricted codes", true, [IsCode, IsCode], 0, function (C1, C2 ) return not IsBool( CodeIsomorphism( C1, C2 ) ); end); ############################################################################# ## #F RootsOfCode( ) . . . . the roots of the generator polynomial of ## ## It finds the roots by trying all elements of the extension field ## InstallMethod(RootsOfCode, "method for unrestricted code", true, [IsCode], 0, function(C) if IsCyclicCode(C) then return RootsOfCode(C); else Error("the roots of a code are only defined for cyclic codes"); fi; end); InstallMethod(RootsOfCode, "method for cyclic code", true, [IsCyclicCode], 0, function(C) local a, roots, zero, i, t, G; G := GeneratorPol(C); a := PrimitiveUnityRoot(Size(LeftActingDomain(C)), WordLength(C)); roots := []; zero := 0*a; t := a^0; for i in [0..WordLength(C)-1] do if Value(G, t) = zero then Add(roots, t); fi; t := t * a; od; return(Set(roots)); end); ############################################################################# ## #F DistancesDistribution( , ) . . . distribution of distances from a #F word w to all codewords of C ## InstallMethod(DistancesDistribution, "method for unrestricted code and codeword", true, [IsCode, IsCodeword], 0, function(C, w) local El; if IsLinearCode(C) then return DistancesDistribution(C,w); fi; El := VectorCodeword(AsSSortedList(C)); w := VectorCodeword(w); return DistancesDistributionVecFFEsVecFFE(El,w); end); InstallMethod(DistancesDistribution, "method for linear code and codeword", true, [IsLinearCode, IsCodeword], 0, function(C, w) local G; G := ShallowCopy(GeneratorMat(C)); w := VectorCodeword(w); return DistancesDistributionMatFFEVecFFE(G, LeftActingDomain(C), w); end); ############################################################################# ## #F Syndrome( , ) . . . . . . . the syndrome of word in code ## InstallMethod(Syndrome, "method for unrestricted code and codeword", true, [IsCode, IsCodeword], 0, function(C, c) if not IsLinearCode(C) then Error("argument must be a linear code"); else return Syndrome(C,c); fi; end); InstallMethod(Syndrome, "method for linear code and codeword", true, [IsLinearCode, IsCodeword], 0, function(C, c) if CheckMat(C) = [] then return [Zero(LeftActingDomain(C))]; else return CheckMat(C) * Codeword(c,C); fi; end); ############################################################################# ## #F CodewordNr( , ) . . . . . . . . . . . . . . . . . elements(C)[i] ## InstallMethod(CodewordNr, "method for unrestricted code and position list", true, [IsCode, IsList], 0, function(C, l) local returnlist; if IsLinearCode(C) then return CodewordNr(C,l); fi; l := Set(l); returnlist := (Length(l) > 1); if (l[1] < 1) or (l[Length(l)] > Size(C)) then Error("range: 1..", String(Size(C))); fi; if returnlist then return AsSSortedList(C){l}; else return Flat(AsSSortedList(C){l})[1]; fi; end); DoCodewordNr:=function(C, l) local index, source, i, result, q, returnlist, F, kmin; if IsList(l) then l := Set(l); returnlist:=true; else l:=[l]; returnlist:=false; fi; if (l[1] < 1) or (l[Length(l)] > Size(C)) then Error("range: 1..", String(Size(C))); fi; if HasAsSSortedList(C) then if returnlist then return AsSSortedList(C){l}; else return AsSSortedList(C)[l[1]]; fi; else result := []; q := Size(LeftActingDomain(C)); F := LeftActingDomain(C); kmin := Dimension(C) - 1; for index in l do source := []; i := index-1; while i >= 1 do Add(source, i mod q); i := Int(i / q); od; for i in [Length(source)..kmin] do Add(source, 0); od; Add(result, CodewordVector(Reversed(source),C)); od; if returnlist then return result; else return result[1]; fi; fi; end; InstallOtherMethod(CodewordNr, "method for unrestricted code and int position", true, [IsCode, IsInt], 0,DoCodewordNr); InstallMethod(CodewordNr, "method for linear code and position list", true, [IsLinearCode, IsList], 0, DoCodewordNr); ############################################################################# ## #F String( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ## ## InstallMethod(String, "method for code", true, [IsCode], 0, function(C) return CodeDescription(C); end); ############################################################################# ## #F CodeDescription( ) . . . . . . . . . . . . . . . . . . . . . . . . . ## ## InstallMethod(CodeDescription, "method for an unrestricted code", true, [IsCode], 0, function(C) local n, x, lbmd, ubmd, line; line := "a"; if Int(WordLength(C)/(10^LogInt(WordLength(C),10))) = 8 or WordLength( C ) = 11 or WordLength( C ) = 18 then Append(line, "n"); fi; Append(line,Concatenation(" (",String(WordLength(C)),",", String(Size(C)),",")); lbmd := String( LowerBoundMinimumDistance(C)); ubmd := String( UpperBoundMinimumDistance(C)); if lbmd = ubmd then Append(line, lbmd ); else Append( line, Concatenation( lbmd, "..", ubmd ) ); fi; Append( line, ")" ); # Call to BoundsCoveringRadius checks HasCoveringRadius first. # No need to repeat here. Similar for LBMD, UBMD, above. if Length( BoundsCoveringRadius( C ) ) = 1 then SetCoveringRadius(C, BoundsCoveringRadius(C)[1]); Append( line, String( BoundsCoveringRadius(C)[ 1 ] ) ); else Append( line, Concatenation( String( BoundsCoveringRadius(C)[ 1 ] ), "..", String( BoundsCoveringRadius(C)[ Length( BoundsCoveringRadius(C) ) ] ) ) ); fi; Append( line, " " ); if not IsBound( C!.name ) then C!.name := "unknown unrestricted code"; fi; Append( line, C!.name ); if not IsBound( C!.history ) then Append(line,Concatenation(" over GF(", String(Size(LeftActingDomain(C))),")")); fi; IsString( line ); return line; end); InstallMethod(CodeDescription, "method for linear code", true, [IsLinearCode], 0, function(C) local lbmd, ubmd, line; line := "a linear ["; line := Concatenation( line, String(WordLength(C)), ",", String(Dimension(C)), "," ); lbmd := String( LowerBoundMinimumDistance(C) ); ubmd := String( UpperBoundMinimumDistance(C) ); if lbmd = ubmd then Append(line, lbmd ); else Append(line,Concatenation( lbmd, "..", ubmd ) ); fi; Append( line, "]" ); if Length( BoundsCoveringRadius( C ) ) = 1 then Append( line, String( BoundsCoveringRadius(C)[ 1 ] ) ); else Append( line, Concatenation( String( BoundsCoveringRadius(C)[ 1 ] ), "..", String( Maximum( BoundsCoveringRadius(C) ) ) ) ); fi; Append( line, " " ); if not IsBound( C!.name ) then C!.name := "unknown linear code"; fi; Append( line, C!.name ); if not IsBound( C!.history ) then Append(line,Concatenation(" over GF(", String(Size(LeftActingDomain(C))),")")); fi; IsString( line ); return line; end); InstallMethod(CodeDescription, "method for cyclic codes", true, [IsCyclicCode], 0, function(C) local n, x, lbmd, ubmd, line; line:="a cyclic ["; Append( line, Concatenation( String(WordLength(C)), ",", String(Dimension(C)), "," )); lbmd := String( LowerBoundMinimumDistance(C) ); ubmd := String( UpperBoundMinimumDistance(C) ); if lbmd = ubmd then Append(line, lbmd ); else Append(line,Concatenation( lbmd, "..", ubmd ) ); fi; Append( line, "]" ); if Length( BoundsCoveringRadius( C ) ) = 1 then Append( line, String( BoundsCoveringRadius(C)[ 1 ] ) ); else Append( line, Concatenation( String( BoundsCoveringRadius(C)[ 1 ] ), "..", String( BoundsCoveringRadius(C)[ Length( BoundsCoveringRadius(C) ) ] ) ) ); fi; Append( line, " " ); if not IsBound( C!.name ) then C!.name := "unknown cyclic code"; fi; Append( line, C!.name ); if not IsBound( C!.history ) then Append(line,Concatenation(" over GF(", String(Size(LeftActingDomain(C))),")")); fi; IsString( line ); return line; end); ############################################################################# ## #F Print( ) . . . . . . . . . . . . . prints short information about C ## ## InstallMethod(PrintObj, "method for codes", true, [IsCode], 0, function(C) if HasCoveringRadius(C) and HasMinimumDistance(C) then Print(String(C)); # sets for future use else Print(CodeDescription(C)); # allows to change as bmd, bcr updated fi; end); InstallMethod(PrintObj, "method for linear code", true, [IsFreeLeftModule and IsLinearCodeRep], 0, function(C) if HasCoveringRadius(C) and HasMinimumDistance(C) then Print(String(C)); #sets for future use else Print(CodeDescription(C)); # allows to change as bcr, bmd updated fi; end); InstallMethod(ViewObj, "method for codes", true, [IsCode], 0, function(C) if HasCoveringRadius(C) and HasMinimumDistance(C) then Print(String(C)); # sets for future use else Print(CodeDescription(C)); # allows to change as bcr, bmd updated fi; end); InstallMethod(ViewObj, "method for linear code", true, [IsFreeLeftModule and IsLinearCodeRep], 0, function(C) local line; if HasCoveringRadius(C) and HasMinimumDistance(C) then Print(String(C)); #sets for future use elif (IsBound(C!.name) and C!.name="random linear code") then line := Concatenation( "a [", String(WordLength(C)), ",",String(Dimension(C)), "," ); Append(line,Concatenation( "?] randomly generated code over GF(",String(Size(LeftActingDomain(C))),")") ); Print(line); elif (IsBound(C!.name) and C!.name="code defined by generator matrix, NC") then line := Concatenation( "a [", String(WordLength(C)), ",",String(Dimension(C)), "," ); Append(line,Concatenation( "?] randomly generated code over GF(",String(Size(LeftActingDomain(C))),")") ); Print(line); else Print(CodeDescription(C)); # allows to change as bcr, bmd updated fi; end); ############################################################################# ## #F Display( ) . . . . . . . . . . . . prints the history of the code C ## ## InstallMethod(Display, "method for codes", true, [IsCode], 0, function(C) local d; for d in History(C) do Print(d,"\n"); od; end); ############################################################################# ## #F Save( , , ) . . . . . writes the code C to a file ## ## with variable name var-name. It can be read back by calling ## Read (filename); the code then has the name var-name. ## All fields of the code record are stored except for the operations field ## and, in case of a linear or cyclic code, the elements. ## Pre: filename is accessible for writing ## InstallMethod(Save, "method for unrestricted code", true, [IsString, IsCode, IsString], 0, function(filename, C, codename) local fld, attr_list, attr; PrintTo(filename, "\n# GUAVA code #\n"); ##LR - need proper code creation statement here! AppendTo(filename, codename, " := rec(\n"); attr_list := [CheckMat, CheckPol, CodeDensity, CodeNorm, CoordinateNorm, CoveringRadius, DesignedDistance, Dimension, GeneratorMat, GeneratorPol, GeneratorsOfLeftModule, InnerDistribution, IsAffineCode, IsAlmostAffineCode, IsCyclicCode, IsGriesmerCode, IsLinearCode, IsMDSCode, IsNormalCode, IsPerfectCode, IsSelfComplementaryCode, IsSelfDualCode, IsSelfOrthogonalCode, LeftActingDomain, MinimumDistance, MinimumWeightOfGenerators, MinimumWeightWords, OuterDistribution, Redundancy, RootsOfCode, SpecialCoveringRadius, SpecialDecoder, StandardArray, SyndromeTable, UpperBoundOptimalMinimumDistance, WeightDistribution, WordLength ]; for attr in attr_list do if Tester(attr)(C) then AppendTo(filename, "Set", NameFunction(attr), "(", codename, ", ", attr(C), ");\n"); fi; od; for fld in ["boundsCoveringRadius", "lowerBoundMinimumDistance", "upperBoundMinimumDistance"] do if IsBound(C!.(fld)) then AppendTo(filename, codename, "!.", fld, ":=", C!.(fld), ";\n" ); fi; od; if (not HasIsLinearCode(C)) or (not IsLinearCode(C)) then AppendTo(filename, "SetAsSSortedList(", codename, ", ", "Codeword(", VectorCodeword(AsSSortedList(C)),");\n"); fi; AppendTo(filename, "C!.name := \"", C!.name,"\";\n"); end); ############################################################################# ## #F History( ) . . . . . . . . . . . . . . . shows the history of a code ## InstallMethod(History, "method for codes", true, [IsCode], 0, function(C) local s; if not IsBound(C!.history) then return [CodeDescription(C)]; else s := String(Concatenation(CodeDescription(C), " of")); return Concatenation( [s], C!.history); fi; end); ###################################################################################### ## #F MinimumDistanceRandom( , , ) ## ## This is a simpler version than Leon's method, which does not put G in st form. ## (this works welland is in some cases faster than the st form one) ## Input: C is a linear code ## num is an integer >0 which represents the number of iterations ## s is an integer between 1 and n which represents the columns considered ## in the algorithm. ## Output: an integer >= min dist(C), and hopefully equal to it! ## a codework of that weight ## ## Algorithm: randomly permute the columns of the gen mat G of C ## by a permutation rho - call new mat Gp ## break Gp into (A,B), where A is kxs and B is kx(n-s) ## compute code C_A generated by rows of A ## find min weight codeword c_A of C_A and w_A=wt(c_A) ## using AClosestVectorCombinationsMatFFEVecFFECoords ## extend c_A to a corresponding codeword c_p in C_Gp ## return c=rho^(-1)(c_p) and wt=wt(c_p)=wt(c) ## InstallMethod(MinimumDistanceRandom, "attribute method for linear codes", true, [IsLinearCode,IsInt,IsInt], 0, function(C,num,s) local A,HasZeroRow,majority,G0, Gp, Gpt, Gt, L, k, n, i, j, m, dimMat, J, d1,M, arrayd1, Combo, rows, row, rowSum, G, F, zero, AClosestVec, B, ZZ, p, numrow0, bigwtrow,bigwtvec, x, d, v, ds, vecs,rho,perms,g,newv,pos,rowcombos,v1,v2; # returns the estimated distance, and corresponding vector of that weight Print("\n This is a probabilistic algorithm which may return the wrong answer.\n"); G0 := GeneratorMat(C); p:=5; #this seems to be an optimal value # it's the max number of rows used in Z to find a small # codewd in C_Z G := List(G0,ShallowCopy); F:=LeftActingDomain(C); dimMat := DimensionsMat(G); n:=dimMat[2]; k:=dimMat[1]; if n=k then C!.lowerBoundMinimumDistance := 1; C!.upperBoundMinimumDistance := 1; return 1; fi; # added 11-2004 if s > n-1 then Print("Resetting s to ",n-2," ... \n"); s:=n-k; fi; arrayd1:=[n]; numrow0:=0; # initialize perms:=[]; # initialize for m in [1..num] do ##Permute the columns of C randomly Gt := TransposedMat(G); Gp := NullMat(n,k); L := SymmetricGroup(n); rho := Random(L); L:=List([1..n],i->OnPoints(i,rho)); for i in [1..n] do Gp[i] := Gt[L[i]]; od; Gp := TransposedMat(Gp); Gp := List(Gp,ShallowCopy); ##generate the matrix A from Gp=(A|B) Gpt := TransposedMat(Gp); A := NullMat(s,k); for i in [1..s] do A[i] := Gpt[i]; od; A := TransposedMat(A); ##generate the matrix B from Gp=(A|B) Gpt := TransposedMat(Gp); B := NullMat(n-s,k); for i in [s+1..n] do B[i-s] := Gpt[i]; od; B := TransposedMat(B); zero := Zero(F)*A[1]; if (sx[1]); vecs:=List(J,x->x[2]); rowcombos:=List(J,x->x[3]); d:=Minimum(ds); i:=Position(ds,d); arrayd1[m]:=[d,vecs[i],rowcombos[i]]; perms[m]:=rho; od; ## m ds:=List(arrayd1,x->x[1]); vecs:=List(arrayd1,x->x[2]); rowcombos:=List(arrayd1,x->x[3]); d:=MostCommonInList(ds); pos:=Position(ds,d); v:=vecs[pos]; L:=List([1..n],i->OnPoints(i,perms[pos]^(-1))); newv:=Codeword(List(L,i->v[L[i]])); return([d,newv]); end); ############################################################################ #F MinimumWeight( ) ## ## This function calls an external C program to compute the minimum Hamming ## weight of a linear code over GF(2) and GF(3). The external program is ## "minimum-weight" ## ## Author: CJ, Tjhai ## InstallMethod(MinimumWeight, "attribute method for linear codes", true, [IsLinearCode], 0, function(C) ## Since this function calls an external program, we need to write the code ## into a generator matrix format recognised by this external program local r, c, q, k, n, G, path, param, tmpFile, tmpOutFile; path := DirectoriesPackagePrograms( "guava" ); if ForAny( ["minimum-weight"], f->Filename( path, f ) = fail ) then Print("minimum-weight is not loaded ... switching to MinimumDistance ...\n"); return MinimumDistance(C); fi; if Size(LeftActingDomain(C)) > 3 then Print("Code must either be binary or ternary. Quitting. \n"); return(0); fi; G := GeneratorMat(C);; G := ShallowCopy(G); TriangulizeMat(G); k := DimensionsMat(G)[1]; n := DimensionsMat(G)[2]; path := DirectoriesPackagePrograms( "guava" );; tmpFile := TmpName(); tmpOutFile := TmpName(); PrintTo(tmpFile, k, " ", n, " ", Size(LeftActingDomain(C)), "\n"); for r in [1..k] do; for c in [1..n] do; AppendTo(tmpFile, IntFFE(G[r][c]), " "); od; AppendTo(tmpFile, "\n"); od; # Build the parameters required for the external program param := ""; param := Concatenation(param, " --out ", tmpOutFile); if IsCyclicCode(C) then param := Concatenation(param, " --cyclic"); fi; if IsBound(C!.lowerBoundMinimumDistance) then param := Concatenation(param, " --lower-bound ", String(C!.lowerBoundMinimumDistance)); fi; if LeftActingDomain(C) = GF(2) then if IsSelfOrthogonalCode(C) then param := Concatenation(param, " --mod 4"); elif IsEvenCode(C) then param := Concatenation(param, " --mod 1"); fi; elif LeftActingDomain(C) = GF(3) then if IsSelfOrthogonalCode(C) then param := Concatenation(param, " --mod 5"); fi; fi; ## Now call the external program Exec(Filename(path, "minimum-weight"), Concatenation(" ", param, " ", tmpFile)); Read(tmpOutFile); RemoveFiles(tmpFile, tmpOutFile); C!.lowerBoundMinimumDistance := GUAVA_TEMP_VAR; C!.upperBoundMinimumDistance := GUAVA_TEMP_VAR; return GUAVA_TEMP_VAR; end); guava-3.6/lib/codecstr.gd0000644017361200001450000000771511026723452015246 0ustar tabbottcrontab############################################################################# ## #A codecstr.gd GUAVA library Reinald Baart #A Jasper Cramwinckel #A Erik Roijackers #A Eric Minkes #A David Joyner ## ## This file contains functions for constructing codes ## #H @(#)$Id: codecstr.gd,v 1.2 2003/02/12 03:36:54 gap Exp $ ## Revision.("guava/lib/codecstr_gd") := "@(#)$Id: codecstr.gd,v 1.2 2003/02/12 03:36:54 gap Exp $"; ######################################################################## ## #F AmalgamatedDirectSumCode( , , [, ] ) ## ## Return the amalgamated direct sum code of C en D. ## ## This construction is derived from the direct sum construction, ## but it saves one coordinate over the direct sum. ## ## The amalgamated direct sum construction goes as follows: ## ## Put the generator matrices G and H of C respectively D ## in standard form as follows: ## ## G => [ G' | I ] and H => [ I | H' ] ## ## The generator matrix of the new code then has the following form: ## ## [ 1 0 ... 0 0 | 0 0 ............ 0 ] ## [ 0 1 ... 0 0 | 0 0 ............ 0 ] ## [ ......... . | .................. ] ## [ G' 0 0 ... 1 0 | 0 0 ............ 0 ] ## [ |---------------|--------] ## [ 0 0 ... 0 | 1 | 0 ... 0 0 ] ## [--------|-----------|---| ] ## [ 0 0 ............ 0 | 0 1 ... 0 0 H' ] ## [ .................. | 0 ......... ] ## [ 0 0 ............ 0 | 0 0 ... 1 0 ] ## [ 0 0 ............ 0 | 0 0 ... 0 1 ] ## ## The codes resulting from [ G' | I ] and [ I | H' ] must ## be acceptable in the last resp. the first coordinate. ## Checking whether this is true takes a lot of time, however, ## and is only performed when the boolean variable check is true. ## DeclareOperation("AmalgamatedDirectSumCode", [IsCode, IsCode, IsBool]); ######################################################################## ## #F BlockwiseDirectSumCode( , , , ) ## ## Return the blockwise direct sum of C1 and C2 with respect to ## the cosets defined by the codewords in L1 and L2. ## DeclareOperation("BlockwiseDirectSumCode", [IsCode, IsList, IsCode, IsList]); ######################################################################## ## #F ExtendedDirectSumCode( , , m ) ## ## The construction as described in the article of Graham and Sloane, ## section V. ## ("On the Covering Radius of Codes", R.L. Graham and N.J.A. Sloane, ## IEEE Information Theory, 1985 pp 385-401) ## DeclareOperation("ExtendedDirectSumCode", [IsCode, IsCode, IsInt]); ######################################################################## ## #F PiecewiseConstantCode( , [, ] ) ## DeclareGlobalFunction("PiecewiseConstantCode"); ######################################################################## ## #F GabidulinCode( ); ## DeclareOperation("GabidulinCode", [IsInt, IsFFE, IsFFE, IsBool]); ######################################################################## ## #F EnlargedGabidulinCode( ); ## DeclareOperation("EnlargedGabidulinCode", [IsInt, IsFFE, IsFFE, IsFFE]); ######################################################################## ## #F DavydovCode( ); ## DeclareOperation("DavydovCode", [IsInt, IsInt, IsFFE, IsFFE]); ######################################################################## ## #F TombakCode( ); ## DeclareGlobalFunction("TombakCode"); ######################################################################## ## #F EnlargedTombakCode( ); ## DeclareGlobalFunction("EnlargedTombakCode"); guava-3.6/lib/codenorm.gi0000644017361200001450000002202111026723452015236 0ustar tabbottcrontab############################################################################# ## #A codenorm.gi GUAVA library Reinald Baart #A Jasper Cramwinckel #A Erik Roijackers #A Eric Minkes ## ## This file contains functions for calculating code norms ## #H @(#)$Id: codenorm.gi,v 1.3 2003/02/12 03:49:16 gap Exp $ ## Revision.("guava/lib/codenorm_gi") := "@(#)$Id: codenorm.gi,v 1.3 2003/02/12 03:49:16 gap Exp $"; ######################################################################## ## #F CoordinateSubCode( , , ) ## ## Return the subcode of , that has elements ## with an in coordinate position . ## If no elements have an in position , return false. ## InstallMethod(CoordinateSubCode, "method for unrestricted code, position, FFE", true, [IsCode, IsInt, IsFFE], 0, function ( code, i, element ) local els; if i < 1 or i > WordLength( code ) then Error( "CoordinateSubCode: must lie in the range [ 1 .. n ]" ); fi; if not ( element in AsSSortedList( LeftActingDomain( code ) ) ) then Error( "CoordinateSubCode: must be an element of ", LeftActingDomain( code ) ); fi; els := AsSSortedList( code ); els := VectorCodeword( els ); els := Filtered( els, x -> x[ i ] = element ); if Length( els ) = 0 then return false; else return ElementsCode( els, "subcoordinate code", LeftActingDomain( code ) ); fi; end); ######################################################################## ## #F CoordinateNorm( , ) ## ## Returns the norm of code with respect to coordinate i. ## InstallMethod(CoordinateNorm, "attribute method for unrestricted code", true, [IsCode], 0, function( code ) # This is a mutable attribute. Initial value is all -1, updated as # other method of CoordinateNorm is called. return List( [ 1 .. WordLength( code ) ], x -> -1 ); end); InstallOtherMethod(CoordinateNorm, "method for unrestricted code, coordinate", true, [IsCode, IsInt], 0, function ( code, i ) local max, els, subcode, f, j, w, n, c; if i < 1 or i > WordLength( code ) then Error( "CoordinateNorm: must lie in the range [ 1 .. n ]" ); fi; if CoordinateNorm( code )[ i ] = -1 then max := -1; els := AsSSortedList( LeftActingDomain( code ) ); subcode := [ 1 .. Length( els ) ]; f := [ 1 .. Length( els ) ]; for j in [ 1 .. Length( els ) ] do subcode[ j ] := CoordinateSubCode( code, j, els[ j ] ); od; for w in Codeword( CosetLeadersMatFFE( CheckMat( code ), LeftActingDomain( code ) ) ) do for j in [ 1 .. Length( els ) ] do if subcode[ j ] = false then f[ j ] := WordLength( code ); else f[ j ] := MinimumDistance( subcode[ j ], w ); fi; od; n := Sum( f ); if n > max then max := n; fi; od; c := CoordinateNorm( code ); c[ i ] := max; fi; return CoordinateNorm(code)[i]; end); ######################################################################## ## #F CodeNorm( ) ## ## Return the norm of code. ## The norm of code is the minimum of the coordinate norms ## of code with respect to i = 1, ..., n. ## InstallMethod(CodeNorm, "method for unrestricted code", true, [IsCode], 0, function( code ) return Minimum( List( [ 1 .. WordLength( code ) ], x -> CoordinateNorm( code, x ) ) ); end); ######################################################################## ## #F IsCoordinateAcceptable( , ) ## ## Test whether coordinate i of is acceptable. ## (a coordinate is acceptable if the norm of code with respect to ## that coordinate is less than or equal to one plus two times the ## covering radius of code). InstallMethod(IsCoordinateAcceptable, "method for unrestricted code, position", true, [IsCode, IsInt], 0, function ( code, i ) local cr; cr := CoveringRadius( code ); if IsInt( cr ) then if CoordinateNorm( code, i ) <= 2 * cr + 1 then return true; else return false; fi; else Error( "IsCoordinateAcceptable: Sorry, the covering radius is ", "not known and not easy to compute." ); fi; end); ######################################################################## ## #F IsNormalCode( ) ## ## Return true if code is a normal code, false otherwise. ## A code is called normal if its norm is smaller than or ## equal to two times its covering radius + one. ## InstallMethod(IsNormalCode, "method for unrestricted code", true, [IsCode], 0, function( code ) local n, k, d, r, i, isnormal; if LeftActingDomain( code ) <> GF(2) then Error( "IsNormalCode: must be a binary code" ); elif IsLinearCode( code ) then return IsNormalCode( code ); else n := WordLength( code ); k := Dimension( code ); d := MinimumDistance( code ); r := CoveringRadius( code ); if not IsInt( r ) then r := -1; fi; if d = 2 * r or ( d = 2 * r - 1 and EuclideanRemainder( n, r ) <> 0 ) or ( r = 1 and n <= 9 ) or ( r = 1 and Size( code ) <= 95 ) then return true; else if r >= 0 then i := 1; isnormal := false; while i <= n and not isnormal do isnormal := IsCoordinateAcceptable( code, i ); i := i + 1; od; return isnormal; else Error( "IsNormalCode: sorry, the covering radius for ", "this code has not yet been computed." ); fi; fi; fi; end); InstallMethod(IsNormalCode, "method for linear code", true, [IsLinearCode], 0, function( code ) local n, k, d, r, i, isnormal; if LeftActingDomain( code ) <> GF(2) then Error("IsNormalCode: must be a binary code"); fi; n := WordLength( code ); k := Dimension( code ); d := MinimumDistance( code ); r := CoveringRadius( code ); if not IsInt( r ) then r := -1; fi; if d = 2 * r or ( d = 2 * r - 1 and EuclideanRemainder( n, r ) <> 0 ) or ( r = 1 and n <= 9 ) or ( r = 1 and Size( code ) <= 95 ) # the following conditions are only valid for linear codes or ( n <= 15 ) or ( k <= 5 ) or ( n-k <= 7 ) or ( d <= 4 ) or ( r >= 0 and r <= 3 ) or ( IsPerfectCode( code ) ) then return true; else if r >= 0 then # a code is normal if one of the coordinates is acceptable i := 1; isnormal := false; while i <= n and not isnormal do isnormal := IsCoordinateAcceptable( code, i ); i := i + 1; od; return isnormal; else Error( "IsNormalCode: sorry, the covering radius for ", "this code has not yet been computed." ); fi; fi; end); ######################################################################## ## #F GeneralizedCodeNorm( , , , ... , ) ## ## Compute the k-norm of code with respect to the k subcode ## code1, code2, ... , codek. ## InstallGlobalFunction(GeneralizedCodeNorm, function ( arg ) local i, mindist, min, max, globalmax, x, union,word; if Length( arg ) < 2 then Error( "GeneralizedCodeNorm: no subcodes are specified" ); fi; if not IsCode( arg[ 1 ] ) then Error( "GeneralizedCodeNorm: must be a code" ); fi; union := arg[ 2 ]; for i in [ 1 .. Length( arg ) - 1 ] do if WordLength( arg[ i + 1 ] ) <> WordLength( arg[ 1 ] ) then Error( "GeneralizedCodeNorm: length of code ", i, " is not equal to the length of " ); fi; if not ( arg[ i + 1 ] in arg[ 1 ] ) then Error( "GeneralizedCodeNorm: code ", i, " is not a subcode of code." ); fi; if i > 1 then union := AddedElementsCode( union, AsSSortedList( arg[ i + 1 ] ) ); fi; od; if arg[ 1 ] <> union then Error( "GeneralizedCodeNorm: is not the union of the ", "subcodes" ); fi; globalmax := -1; for word in AsSSortedList( arg[ 1 ] ) do mindist := List( [ 2 .. Length( arg ) ], x -> MinimumDistance( arg[ x ], word ) ); min := Minimum( mindist ); max := Maximum( mindist ); if min + max > globalmax then globalmax := min + max; fi; od; return globalmax; end); guava-3.6/lib/matrices.gi~0000644017361200001450000003675111026723452015454 0ustar tabbottcrontab############################################################################# ## #A matrices.gi GUAVA library Reinald Baart #A &Jasper Cramwinckel #A &Erik Roijackers ## ## This file contains functions for generating matrices ## #H @(#)$Id: matrices.gi,v 1.4 2003/02/12 03:49:19 gap Exp $ ## Revision.("guava/lib/matrices_gi") := "@(#)$Id: matrices.gi,v 1.4 2003/02/12 03:49:19 gap Exp $"; ############################################################################# ## #F KrawtchoukMat( [, ] ) . . . . . . . matrix of Krawtchouk numbers ## InstallMethod(KrawtchoukMat, "n,q", true, [IsInt, IsInt], 0, function(n,q) local res,i,k; if not IsPrimePowerInt(q) then Error("q must be a prime power int"); fi; res := MutableNullMat(n+1,n+1); for k in [0..n] do res[1][k+1]:=1; od; for k in [0..n] do res[k+1][1] := Binomial(n,k)*(q-1)^k; od; for i in [2..n+1] do for k in [2..n+1] do res[k][i] := res[k][i-1] - (q-1)*res[k-1][i] - res[k-1][i-1]; od; od; return res; end); InstallOtherMethod(KrawtchoukMat, "n", true, [IsInt], 0, function(n) return KrawtchoukMat(n, 2); end); ############################################################################# ## #F GrayMat( [, ] ) . . . . . . . . . matrix of Gray-ordered vectors ## ## GrayMat(n [, F]) returns a matrix in which rows a(i) have the property ## d( a(i), a(i+1) ) = 1 and a(1) = 0. ## InstallMethod(GrayMat, "n,Field", true, [IsInt, IsField], 0, function(n, F) local M, result, row, series, column, elem, q, elementnr, line, goingup; elem := AsSSortedList(F); q := Length(elem); M := q^n; result := MutableNullMat(M,n); for column in [1..n] do goingup := true; row:=0; for series in [1..q^(column-1)] do for elementnr in [1..q] do for line in [1..q^(n-column)] do row:=row+1; if goingup then result[row][column]:= elem[elementnr]; else result[row][column]:= elem[q+1-elementnr]; fi; od; od; goingup:= not goingup; od; od; return result; end); InstallOtherMethod(GrayMat, "n", true, [IsInt], 0, function(n) return GrayMat(n, GF(2)); end); ############################################################################# ## #F SylvesterMat( ) . . . . . . . . . . . . Sylvester matrix of order ## InstallMethod(SylvesterMat, "order", true, [IsInt], 0, function(n) local result, syl; if n = 1 then return [[1]]; elif (n mod 2)=0 then syl:=SylvesterMat(n/2); result:=List(syl, x->Concatenation(x,x)); Append(result,List(syl,x->Concatenation(x,-x))); return result; else Error("n must be a power of 2"); fi; end); ############################################################################# ## #F HadamardMat( ) . . . . . . . . . . . . Hadamard matrix of order ## InstallMethod(HadamardMat, "order", true, [IsInt], 0, function(n) local result, had, i, j; if n = 1 then return [[1]]; elif (n=2) or (n=4) or ((n mod 8)=0) then had:=HadamardMat(n/2); result:=List(had, x->Concatenation(x,x)); Append(result,List(had,x->Concatenation(x,-x))); return result; elif IsPrimeInt(n-1) and (n mod 4)=0 then result := List(MutableNullMat(n,n)+1, x->ShallowCopy(x)); for i in [2..n] do result[i][i]:=-1; for j in [i+1..n] do result[i][j]:=Legendre(j-i,n-1); result[j][i]:=-result[i][j]; od; od; return result; elif (n mod 4)=0 then Error("The Hadamard matrix of order ",n," is not yet implemented"); else Error("The Hadamard matrix of order ",n," does not exist"); fi; end); ############################################################################# ## #F IsLatinSquare( ) . . . . . . . determines if matrix is latin square ## ## IsLatinSquare determines if M is a latin square, that is a q*q array whose ## entries are from a set of q distinct symbols such that each row and each ## column of the array contains each symbol exactly once ## InstallMethod(IsLatinSquare, "method for matrix", true, [IsMatrix], 0, function(M) local i, j, s, n, isLS, MT; n:=Length(M); s:=Set(M[1]); isLS:= (Length(s) = n and Length(s) = Length(M[1]) ); i:=2; if isLS then MT:=TransposedMat(M); fi; while isLS and i<=n do isLS:= (Set(M[i]) = s); i:=i+1; od; i := 1; while isLS and i<=n do isLS:= (Set(MT[i]) = s); i:=i+1; od; return isLS; end); InstallOtherMethod(IsLatinSquare, "generic method, any object", true, [IsObject], 0, function(obj) if IsMatrix(obj) then TryNextMethod(); fi; return false; end); ############################################################################# ## #F AreMOLS( ) . . . . . . . . . determines if arguments are MOLS ## ## AreMOLS(M1, M2, ...) determines if the arguments are mutually orthogonal ## latin squares. ## ##LR - doesn't handle case where arg is list of one matrix. Is this a prob? InstallGlobalFunction(AreMOLS, function(arg) local i, j, s, M, n, q2, first, second, max, fast; if Length(arg) = 1 then M:=arg[1]; else M:=List([1..Length(arg)],i->arg[i]); fi; n:=Length(M); if ( n >= Length(M[1]) ) or not ForAll(M, i-> IsLatinSquare(i)) then return false; #this is right fi; q2 := Length(M[1])^2; max := Maximum(M[1][1]) + 1; M := List(M, i -> Flat(i)); fast := (DefaultField(Flat(M)) = Rationals); first := 1; repeat second := first+1; if fast then repeat s := Set( M[first] * max + M[second] ); second := second + 1; until (Length(s) < q2) or (second > n); else repeat s:=Set([]); for i in [1 .. q2] do AddSet(s, [ M[first][i], M[second][i] ]); od; second := second + 1; until (Length(s) < q2) or (second > n); fi; first:=first + 1; until (Length(s) < q2) or (first >= n); return Length(s) = q2; end); ############################################################################# ## #F MOLS( [, ] ) . . . . . . . . . . list of MOLS of size * ## ## MOLS( q [, n]) returns a list of n Mutually Orthogonal Latin ## Squares of size q * q. If n is omitted, MOLS will return a list ## of two MOLS. If it is not possible to return n MOLS of size q, ## MOLS will return a boolean false. ## InstallMethod(MOLS, "size, number", true, [IsInt, IsInt], 0, function(q, n) local facs, res, Merged, Squares, nr, S, ToInt; ToInt := function(M) local res, els, q, i, j; q:=Length(M); els:=AsSSortedList(GF(q)); res := MutableNullMat(q,q)+1; for i in [1..q] do for j in [1..q] do while els[res[i][j]] <> M[i][j] do res[i][j]:=res[i][j]+1; od; od; od; return res-1; end; Squares := function(q, n) local els, res, i, j, k; els:=AsSSortedList(GF(q)); res:=List([1..n], x-> MutableNullMat(q,q,GF(q))); for i in [1..q] do for j in [1..q] do for k in [1..n] do res[k][i][j] := els[i] + els[k+1] * els[j]; od; od; od; return List([1..n],x -> ToInt(res[x])); end; Merged := function(A, B) local i, j, q1, q2, res; q1:=Length(A); q2:=Length(B); res:=KroneckerProduct(A,NullMat(q2,q2)+1); for i in [1 .. q1*q2] do for j in [1 .. q1*q2] do res[i][j]:= res[i][j] + q1 * B[((i-1) mod q2)+1][((j-1) mod q2)+1]; od; od; return res; end; if n <= 0 then return false; elif (q < 3) or (q = 6) or (q mod 4) = 2 then return false; #this must be so elif n <> 2 then if (not IsPrimePowerInt(q)) or (n >= q) then return false; #this is right elif IsPrimeInt(q) then return List([1..n],i -> List([0..q-1], y -> List([0..q-1], x -> (x+i*y) mod q))); else return Squares(q,n); fi; else res:=[[[0]],[[0]]]; facs:=Collected(Factors(q)); for nr in facs do if nr[2] = 1 then S:= List([1..2], i -> List([0..nr[1]-1],y -> List([0..nr[1]-1], x -> (x+i*y) mod nr[1]))); else S:=Squares(nr[1]^nr[2],2); fi; res:=[Merged(res[1],S[1]),Merged(res[2],S[2])]; od; return res; fi; end); InstallOtherMethod(MOLS, "size", true, [IsInt], 0, function(q) return MOLS(q, 2); end); ############################################################################# ## #F VerticalConversionFieldMat( ) . . . . . . . converts matrix to GF(q) ## ## VerticalConversionFieldMat (M) converts a matrix over GF(q^m) to a matrix ## over GF(q) with vertical orientation of the tuples ## InstallMethod(VerticalConversionFieldMat, "method for matrix and field", true, [IsMatrix, IsField], 0, function(M, F) local res, q, Fq, m, n, r, ConvTable, x, temp, i, j, k, zero; q := Characteristic(F); Fq := GF(q); zero := Zero(Fq); m := Dimension(F); n := Length(M[1]); r := Length(M); ConvTable := []; x := Indeterminate(Fq); temp := MinimalPolynomial(Fq, Z(q^m)); for i in [1.. q^m - 1] do ConvTable[i] := VectorCodeword(Codeword(x^(i-1) mod temp, m+1)); od; res := MutableNullMat(r * m, n, Fq); for i in [1..r] do for j in [1..n] do if M[i][j] <> zero then temp := ConvTable[LogFFE(M[i][j], Z(q^m)) + 1]; for k in [1..m] do res[(i-1)*m + k][j] := temp[k]; od; fi; od; od; return res; end); InstallOtherMethod(VerticalConversionFieldMat, "method for matrix", true, [IsMatrix], 0, function(M) return VerticalConversionFieldMat(M, DefaultField(Flat(M))); end); ############################################################################# ## #F HorizontalConversionFieldMat( , ) . . . converts matrix to GF(q) ## ## HorizontalConversionFieldMat (M, F) converts a matrix over GF(q^m) to a ## matrix over GF(q) with horizontal orientation of the tuples ## InstallMethod(HorizontalConversionFieldMat, "method for matrix and field", true, [IsMatrix, IsField], 0, function(M, F) local res, vec, k, n, coord, i, p, q, m, zero, g, Nul, ConvTable, x; q := Characteristic(F); m := Dimension(F); zero := Zero(F); g := MinimalPolynomial(GF(q), Z(q^m)); Nul := List([1..m], i -> zero); ConvTable := []; x := Indeterminate(GF(q)); for i in [1..Size(F) - 1] do ConvTable[i] := VectorCodeword(Codeword(x^(i-1) mod g, m)); od; res := []; n := Length(M[1]); k := Length(M); for vec in [0..k-1] do for i in [1..m] do res[m*vec+i] := []; od; for coord in [1..n] do if M[vec+1][coord] <> zero then p := LogFFE(M[vec+1][coord], Z(q^m)); for i in [1..m] do if (p+i) mod q^m = 0 then p := p+1; fi; Append(res[m*vec+i], ConvTable[(p + i) mod (q^m)]); od; else for i in [1..m] do Append(res[m*vec+i], Nul); od; fi; od; od; return res; end); InstallOtherMethod(HorizontalConversionFieldMat, "method for matrix", true, [IsMatrix], 0, function(M) return HorizontalConversionFieldMat(M, DefaultField(Flat(M))); end); ############################################################################# ## #F IsInStandardForm( [, ] ) . . . . is matrix in standard form? ## ## IsInStandardForm(M [, identityleft]) determines if M is in standard form; ## if identityleft = false, the identitymatrix must be at the right side ## of M; otherwise at the left side. ## InstallMethod(IsInStandardForm, "method for matrix and boolean", true, [IsMatrix, IsBool], 0, function(M, identityleft) local l; l := Length(M); if identityleft = false then return IdentityMat(l, DefaultField(Flat(M))) = M{[1..l]}{[Length(M[1])-l+1..Length(M[1])]}; else return IdentityMat(l, DefaultField(Flat(M))) = M{[1..l]}{[1..l]}; fi; end); InstallOtherMethod(IsInStandardForm, "method for matrix", true, [IsMatrix], 0, function(M) return IsInStandardForm(M, true); end); ############################################################################# ## #F PutStandardForm( [, ] [, ] ) . put in standard form ## ## PutStandardForm(Mat [, idleft] [, F]) puts matrix Mat in standard form, ## the size of Mat being (n x m). If idleft is true or is omitted, the ## the identity matrix is put left, else right. The permutation is returned. ## InstallMethod(PutStandardForm, "method for matrix, idleft and field", true, [IsMatrix, IsBool, IsField], 0, function(Mat, idleft, F) local n, m, row, i, j, h, hp, s, zero, P; n := Length(Mat); # not the word length! m := Length(Mat[1]); if idleft then return PutStandardForm(Mat,F); else s := m-n; fi; zero := Zero(F); P := (); for j in [1..n] do if Mat[j][j+s] =zero then i := j+1; while (i <= n) and (Mat[i][j+s] = zero) do i := i + 1; od; if i <= n then row := Mat[j]; Mat[j] := Mat[i]; Mat[i] := row; else h := j+s; while Mat[j][h] = zero do h := h + 1; if h > m then h := 1; fi; od; for i in [1..n] do Mat[i] := Permuted(Mat[i],(j+s,h)); od; P := P*(j+s,h); fi; fi; Mat[j] := Mat[j]/Mat[j][j+s]; for i in [1..n] do if i <> j then if Mat[i][j+s] <> zero then Mat[i] := Mat[i]-Mat[i][j+s]*Mat[j]; fi; fi; od; od; return P; end); ## ##Thanks to Frank Luebeck for this code: ## InstallOtherMethod(PutStandardForm, "method for matrix and Field", true, [IsMatrix, IsField], 0, function(mat, F) local perm, k, i, j, d ; d := Length(mat[1]); TriangulizeMat(mat); perm := (); k := Length(mat[1]); for i in [1..Length(mat)] do j := PositionNonZero(mat[i]); if (j <= d and i <> j) then perm := perm * (i,j); fi; od; if perm <> () then for i in [1..Length(mat)] do mat[i] := Permuted(mat[i], perm); od; fi; return perm; end); InstallOtherMethod(PutStandardForm, "method for matrix and idleft", true, [IsMatrix, IsBool], 0, function(M, idleft) return PutStandardForm(M, idleft, DefaultField(Flat(M))); end); InstallOtherMethod(PutStandardForm, "method for matrix", true, [IsMatrix], 0, function(M) return PutStandardForm(M, true, DefaultField(Flat(M))); end); guava-3.6/lib/codeword.gd0000644017361200001450000000725411026723452015244 0ustar tabbottcrontab############################################################################# ## #A codeword.gd GUAVA library Reinald Baart #A &Jasper Cramwinckel #A &Erik Roijackers ## ## This file contains functions for working with codewords ## #H @(#)$Id: codeword.gd,v 1.5 2003/02/12 03:49:18 gap Exp $ ## Revision.("guava/lib/codeword_gd") := "@(#)$Id: codeword.gd,v 1.5 2003/02/12 03:49:18 gap Exp $"; ############################################################################# ## #F IsCodeword( ) . . . . . . . . . . . . . . . . codeword category ## DeclareCategory("IsCodeword", IsRowVector); DeclareCategoryCollections("IsCodeword"); ############################################################################# ## #F Codeword( [, ] or . . . . . . . . . . . . creates new codeword #F Codeword(

[, ] [, ] ) . . . . . . . . . . . . . . . . . . . . . ## Codeword(

, Code) . . . . . . . . . . . . . . . . . . . . . . . . . . ## DeclareOperation("Codeword", [IsObject, IsInt, IsFFE]); ############################################################################# ## #F Support( ) . . . . . . . set of coordinates in which is not zero ## DeclareAttribute("Support", IsCodeword); ############################################################################# ## #F TreatAsPoly( ) . . . . . . . . . . . . treat codeword as polynomial ## ## The codeword will be treated as a polynomial ## DeclareOperation("TreatAsPoly", [IsCodeword]); ############################################################################# ## #F TreatAsVector( ) . . . . . . . . . . . . treat codeword as a vector ## ## The codeword will be treated as a vector ## DeclareOperation("TreatAsVector", [IsCodeword]); ############################################################################# ## #F PolyCodeword( ) . . . . . . . . . . converts input to polynomial(s) ## ## Input may be codeword, polynomial, vector or a list of those ## DeclareAttribute("PolyCodeword", IsCodeword); ############################################################################# ## #F VectorCodeword( ) . . . . . . . . . . . . converts input to vector ## ## Input may be codeword, polynomial, vector or a list of those ## DeclareAttribute("VectorCodeword", IsCodeword); ############################################################################# ## #F Weight( ) . . . . . . . . . . . calculates the weight of codeword ## DeclareAttribute("Weight", IsCodeword); ############################################################################# ## #F WeightCodeword( ) . . . . . . . calculates the weight of codeword ## DeclareSynonymAttr("WeightCodeword", Weight); ############################################################################# ## #F DistanceCodeword( , ) . the distance between codeword and ## DeclareOperation("DistanceCodeword", [IsCodeword, IsCodeword]); ############################################################################# ## #F NullWord( ) or NullWord( , ) . . . . . . . . . . all zero word ## DeclareOperation("NullWord", [IsInt, IsFFE]); ############################################################################# ## ## Zero() . . . . . . . . . . . . . . . . . zero codeword ## ############################################################################# ## #F WordLength( ) . . . . . . . . . stores the wordlength of codeword ## Currently no method to calculate. Assumed to be set at creation. DeclareAttribute("WordLength", IsCodeword); guava-3.6/lib/nordrob.gi0000644017361200001450000011153711026723452015110 0ustar tabbottcrontab############################################################################# ## #A nordrob.gi GUAVA Code library Reinald Baart #A &Jasper Cramwinckel #A &Erik Roijackers ## ## This file contains the complete Nordstrom-Robinson code ## #H @(#)$Id: nordrob.gi,v 1.3 2003/02/12 03:49:20 gap Exp $ ## Revision.("guava/lib/nordrob_gi") := "@(#)$Id: nordrob.gi,v 1.3 2003/02/12 03:49:20 gap Exp $"; ############################################################################# ## #F NordstromRobinsonCode( ) . . . . . . . . . . . . Nordstrom-Robinson code ## InstallMethod(NordstromRobinsonCode, true, [], 0, function() local C, elements; elements := Codeword( [ [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ] ]); C := ElementsCode(elements, "Nordstrom-Robinson code", GF(2)); SetWordLength(C, 16); SetSize(C, 256); SetIsLinearCode(C, false); SetIsCyclicCode(C, false); C!.lowerBoundMinimumDistance := 6; C!.upperBoundMinimumDistance := 6; SetMinimumDistance(C, 6); SetWeightDistribution(C, [ 1, 0, 0, 0, 0, 0, 112, 0, 30, 0, 112, 0, 0, 0, 0, 0, 1 ]); SetInnerDistribution(C, [ 1, 0, 0, 0, 0, 0, 112, 0, 30, 0, 112, 0, 0, 0, 0, 0, 1 ]); C!.boundsCoveringRadius := [ 4 ]; SetCoveringRadius(C, 4); return C; end); guava-3.6/lib/codefun.gi0000644017361200001450000001115311026723452015057 0ustar tabbottcrontab############################################################################# ## #A codefun.gi GUAVA Reinald Baart #A &Jasper Cramwinckel #A &Erik Roijackers ## ## This file contains non-dispatched functions to get info of codes ## #H @(#)$Id: codefun.gi,v 1.2 2003/02/12 03:49:16 gap Exp $ ## Revision.("guava/lib/codefun_gi") := "@(#)$Id: codefun.gi,v 1.2 2003/02/12 03:49:16 gap Exp $"; ############################################################################# ## #F GuavaToLeon( , ) . converts a code to a form Leon can read it ## ## converts a code in Guava format to a library in a format that is readable ## by Leon's programs. ## InstallMethod(GuavaToLeon, "method for unrestricted code, filename", true, [IsCode, IsString], 0, function (C, file) local w, vector, G, coord, n, k, TheMat, IR1SAVE, IR2SAVE; G := GeneratorMat(C); k := Dimension(C); n := WordLength(C); PrintTo(file, "LIBRARY code;\n"); # using "String" here causes problems when this function # is run before the string library is loaded *and* InfoRead1 # and/or InfoRead2 is set to "Print". ##LR - is this still needed? # ugly hack: temporarily disable InfoRead1 and InfoRead2 IR1SAVE := InfoRead1; InfoRead1 := Ignore; IR2SAVE := InfoRead2; InfoRead2 := Ignore; AppendTo(file,"code=seq(",String(Size(LeftActingDomain(C))),",",String(k), ",",String(n),",seq(\n"); InfoRead1 := IR1SAVE; InfoRead2 := IR2SAVE; # end of ugly hack. for vector in [1..k] do for coord in [1..n-1] do AppendTo(file,IntFFE(G[vector][coord]),","); od; AppendTo(file, IntFFE(G[vector][n])); if vector < k then AppendTo(file,",\n"); fi; od; AppendTo(file, "\n));\nFINISH;"); end); ############################################################################# ## #F WeightHistogram ( [, ] ) . . . . . plots the weights of ## ## The maximum length of the columns is . Default height is one ## third of the screen size. ## InstallMethod(WeightHistogram, "method for unrestricted code and screen height", true, [IsCode, IsInt], 0, function(C, height) local wd, max, data, i, j, n, spaces, nr, Scr, char; Scr := SizeScreen(); char := "*"; n := WordLength(C); if n+2 >= Scr[1] then Error("histogram does not fit on screen"); elif n+2 > Int(Scr[1] / 2) then spaces := ""; nr := 0; elif n+2 > Int(Scr[1] / 4) then spaces := " "; nr := 1; else spaces := " "; nr := 2; fi; wd := WeightDistribution(C); max := Maximum(wd); if max < height then height := max; fi; data := List(wd, w -> Int(w/max*height)); Print(max); for i in [0..n*(nr+1)-Length(String(max))] do Print("-"); od; Print("\n"); for i in height - [0..height-1] do for j in data do if j >= i then Print(Concatenation(char,spaces)); else Print(Concatenation(" ",spaces)); fi; od; Print("\n"); od; for i in [0..n] do if wd[i+1] = 0 then Print("-"); else Print("+"); fi; for j in [2..nr+1] do Print("-"); od; #Print("-"); od; Print("\n"); for i in [0..n] do Print(i mod 10,spaces); od; Print("\n ",spaces); for i in [1..n] do if i mod 10 = 0 then Print(Int(i / 10),spaces); else Print(" ",spaces); fi; od; Print("\n"); end); InstallOtherMethod(WeightHistogram, "method for unrestricted code", true, [IsCode], 0, function(C) local Scr; Scr := SizeScreen(); WeightHistogram(C, Int(Scr[2]/3)); end); ############################################################################# ## #F MergeHistories( , [, .. ] ) . . . . . . list of strings ## ## InstallGlobalFunction(MergeHistories, function(arg) local i, his, names; if Length( arg ) > 1 then names := "UVWXYZ"; his := []; for i in [1..Length(arg)] do Add(his, Concatenation( [ names[i] ], ": ", arg[i][1]) ); Append( his, List( arg[i]{[2..Length(arg[i])]}, line -> Concatenation(" ", line ) ) ); od; return his; else Error("usage: MergeHistories( , [, .. ] )"); fi; end); guava-3.6/lib/codecr.gd0000644017361200001450000001351611026723452014673 0ustar tabbottcrontab############################################################################# ## #A codecr.gd GUAVA library Reinald Baart #A Jasper Cramwinckel #A Erik Roijackers #A Eric Minkes ## ## This file contains functions for calculating with code covering radii ## #H @(#)$Id: codecr.gd,v 1.3 2003/02/12 03:49:16 gap Exp $ ## Revision.("guava/lib/codecr_gd") := "@(#)$Id: codecr.gd,v 1.3 2003/02/12 03:49:16 gap Exp $"; ######################################################################## ## #F CoveringRadius( ) ## ## Return the covering radius of ## In case a special algorithm for this code exist, call ## it first. ## ## Not useful for large codes. ## ## That's why I changed it, see the manual for more details ## -- eric minkes. ## DeclareAttribute("CoveringRadius", IsCode); ######################################################################## ## #F SpecialCoveringRadius( ) ## ## Special function to calculate the covering radius of a code ## None implemented yet. ## DeclareAttribute("SpecialCoveringRadius", IsCode); ######################################################################## ## #F BoundsCoveringRadius( ) ## ## Find a lower and an upper bound for the covering radius of code. ## DeclareOperation("BoundsCoveringRadius", [IsCode]); ######################################################################## ## #F SetBoundsCoveringRadius( , ) ## SetBoundsCoveringRadius( , ) ## ## Enable the user to set the covering radius (or bounds) him/herself. ## Was SetCoveringRadius in GAP3 version of GUAVA. ## DeclareOperation("SetBoundsCoveringRadius", [IsCode, IsVector]); ######################################################################## ## #F IncreaseCoveringRadiusLowerBound( ## [, ] [, ] ) ## DeclareOperation("IncreaseCoveringRadiusLowerBound", [IsCode, IsInt, IsVector]); ######################################################################## ## #F ExhaustiveSearchCoveringRadius( ) ## ## Try to compute the covering radius. Don't compute all coset ## leaders, but increment the lower bound as soon as a coset leader ## is found. ## DeclareOperation("ExhaustiveSearchCoveringRadius", [IsCode, IsBool]); ######################################################################## ## #F CoveringRadiusLowerBoundTable ## ######################################################################## ## #F GeneralLowerBoundCoveringRadius( , [, ] ) ## GeneralLowerBoundCoveringRadius( ) ## DeclareOperation("GeneralLowerBoundCoveringRadius", [IsCode]); ######################################################################## ## #F LowerBoundCoveringRadiusSphereCovering( , [, ] [, true ] ) ## DeclareOperation("LowerBoundCoveringRadiusSphereCovering", [IsInt, IsInt, IsInt, IsBool]); ######################################################################## ## #F LowerBoundCoveringRadiusVanWee1( ... ) ## DeclareOperation("LowerBoundCoveringRadiusVanWee1", [IsInt, IsInt, IsInt, IsBool]); ############################################################################# ## #F LowerBoundCoveringRadiusVanWee2( , ) Counting Excess bound ## DeclareOperation("LowerBoundCoveringRadiusVanWee2", [IsInt, IsInt, IsBool]); ############################################################################# ## #F LowerBoundCoveringRadiusCountingExcess( , ) ## DeclareOperation("LowerBoundCoveringRadiusCountingExcess", [IsInt, IsInt, IsBool]); ######################################################################## ## #F LowerBoundCoveringRadiusEmbedded1( , [, ] ) ## DeclareOperation("LowerBoundCoveringRadiusEmbedded1", [IsInt, IsInt, IsInt, IsBool]); ######################################################################## ## #F LowerBoundCoveringRadiusEmbedded2( , [, ] ) ## DeclareOperation("LowerBoundCoveringRadiusEmbedded2", [IsInt, IsInt, IsInt, IsBool]); ############################################################################# ## #F LowerBoundCoveringRadiusInduction( , ) Induction bound ## DeclareOperation("LowerBoundCoveringRadiusInduction", [IsInt, IsInt]); ######################################################################## ## #F GeneralUpperBoundCoveringRadius( ) ## DeclareOperation("GeneralUpperBoundCoveringRadius", [IsCode]); ######################################################################## ## #F UpperBoundCoveringRadiusRedundancy( ) ## ## Return the redundancy of the code as an upper bound for ## the covering radius. ## ## Only for linear codes. ## DeclareOperation("UpperBoundCoveringRadiusRedundancy", [IsCode]); ######################################################################## ## #F UpperBoundCoveringRadiusDelsarte( ) ## DeclareOperation("UpperBoundCoveringRadiusDelsarte", [IsCode]); ######################################################################## ## #F UpperBoundCoveringRadiusStrength( ) ## ## Return (q-1)n/q as an upper bound for , if it ## has strength 1 (i.e. every coordinate contains each element ## of the field the same number of times). ## DeclareOperation("UpperBoundCoveringRadiusStrength", [IsCode]); ######################################################################## ## #F UpperBoundCoveringRadiusGriesmerLike( ) ## DeclareOperation("UpperBoundCoveringRadiusGriesmerLike", [IsCode]); ######################################################################## ## #F UpperBoundCoveringRadiusCyclicCode( ) ## DeclareOperation("UpperBoundCoveringRadiusCyclicCode", [IsCode]); guava-3.6/lib/nordrob.gd0000644017361200001450000000134211026723452015073 0ustar tabbottcrontab############################################################################# ## #A nordrob.gd GUAVA Code library Reinald Baart #A &Jasper Cramwinckel #A &Erik Roijackers ## ## The complete Nordstrom-Robinson Code ## #H @(#)$Id: nordrob.gd,v 1.2 2003/02/12 03:49:20 gap Exp $ ## Revision.("guava/lib/nordrob_gd") := "@(#)$Id: nordrob.gd,v 1.2 2003/02/12 03:49:20 gap Exp $"; ############################################################################# ## #F NordstromRobinsonCode( ) . . . . . . . . . . . . Nordstrom-Robinson code ## DeclareOperation("NordstromRobinsonCode", []); guava-3.6/lib/tblgener.gd0000644017361200001450000000145611026723452015236 0ustar tabbottcrontab############################################################################# ## #A tblgener.gd GUAVA library Reinald Baart #A Jasper Cramwinckel #A Erik Roijackers #A Eric Minkes ## ## Table generation ## #H @(#)$Id: tblgener.gd,v 1.2 2003/02/12 03:49:21 gap Exp $ ## Revision.("guava/lib/tblgener_gd") := "@(#)$Id: tblgener.gd,v 1.2 2003/02/12 03:49:21 gap Exp $"; ############################################################################# ## #F CreateBoundsTable( , [, ] ) . . constructs table of bounds ## DeclareOperation("CreateBoundsTable", [IsInt, IsInt, IsBool]); guava-3.6/lib/util.gi0000644017361200001450000001547511026723452014424 0ustar tabbottcrontab############################################################################# ## #A util.gi GUAVA library Reinald Baart #A &Jasper Cramwinckel #A &Erik Roijackers ## ## This file contains miscellaneous functions ## #H @(#)$Id: util.gi,v 1.5 2003/02/12 03:49:21 gap Exp $ ## Revision.("guava/lib/util_gi") := "@(#)$Id: util.gi,v 1.5 2003/02/12 03:49:21 gap Exp $"; ############################################################################# ## #F SphereContent( , [, ] ) . . . . . . . . . . . contents of ball ## ## SphereContent(n, e [, F]) calculates the contents of a ball of radius e in ## the space (GF(q))^n ## InstallMethod(SphereContent, "n, radius, fieldsize", true, [IsInt, IsInt, IsInt], 0, function(n, e, q) local res, num, den, i, q_1; q_1 := q - 1; res := 0; num := 1; den := 1; for i in [0..e] do res := res + (num * den); num := num * q_1; den := (den * (n-i)) / (i+1); od; return res; end); InstallOtherMethod(SphereContent, "n, radius, field", true, [IsInt, IsInt, IsField], 0, function(n,e,F) return SphereContent(n, e, Size(F)); end); InstallOtherMethod(SphereContent, "n, radius", true, [IsInt, IsInt], 0, function(n, e) return SphereContent(n, e, 2); end); ############################################################################# ## #F Krawtchouk( , , [, ] ) . . . . . . Krwatchouk number K_k(i) ## ## Krawtchouk(k, i, n [, F]) calculates the Krawtchouk number K_k(i) ## over field of size q (or 2), wordlength n. ## Pre: 0 <= k <= n ## InstallMethod(Krawtchouk, "k, i, wordlength, fieldsize", true, [IsInt, IsInt, IsInt, IsInt], 0, function(k, i, n, q) local q_1; q_1 := q - 1; if k > n or k < 0 then Error("0 <= k <= n"); elif not IsPrimePowerInt(q+1) then Error("q must be a prime power"); fi; return Sum([0..k],j->Binomial(i,j)*Binomial(n-i,k-j)*(-1)^j*q_1^(k-j)); end); InstallOtherMethod(Krawtchouk, "k, i, wordlength, field", true, [IsInt, IsInt, IsInt, IsField], 0, function(k, i, n, F) return Krawtchouk(k, i, n, Size(F)); end); InstallOtherMethod(Krawtchouk, "k, i, wordlength", true, [IsInt, IsInt, IsInt], 0, function(k, i, n) return Krawtchouk(k, i, n, 2); end); ############################################################################# ## #F PermutedCols( ,

) . . . . . . . . . . permutes columns of matrix ## InstallMethod(PermutedCols, "matrix, permutation", true, [IsMatrix, IsPerm], 0, function(M, P) if P = () then return M; else return List(M, i -> Permuted(i,P)); fi; end); ############################################################################# ## #F ReciprocalPolynomial(

[, ] ) . . . . . . reciprocal of polynomial ## InstallMethod(ReciprocalPolynomial, "poly, wordlength", true, [IsUnivariatePolynomial, IsInt], 0, function(p, n) local cl, F, fam, w; w := Codeword(p, n+1); cl := VectorCodeword(w); F := CoefficientsRing(DefaultRing(PolyCodeword(w))); fam := ElementsFamily(FamilyObj(F)); return LaurentPolynomialByCoefficients(fam, Reversed(cl), 0); end); InstallOtherMethod(ReciprocalPolynomial, "poly", true, [IsUnivariatePolynomial], 0, function(p) local cl, F, fam, w; w := Codeword(p); cl := VectorCodeword(w); F := CoefficientsRing(DefaultRing(PolyCodeword(w))); fam := ElementsFamily(FamilyObj(F)); return LaurentPolynomialByCoefficients(fam, Reversed(cl), 0); end); ############################################################################# ## #F CyclotomicCosets( [, ] ) . . . . cyclotomic cosets of mod ## InstallMethod(CyclotomicCosets, "cyclotomic cosets of q mod n", true, [IsInt,IsInt], 0, function(q, n) local addel, set, res, nrelements, elements, start; if Gcd(q,n) <> 1 then Error("q and n must be relative primes"); fi; res := [[0]]; nrelements := 1; elements := Set([1..n-1]); repeat start := elements[1]; addel := start; set := []; repeat Add(set, addel); RemoveSet(elements, addel); addel := addel * q mod n; nrelements := nrelements + 1; until addel = start; Add(res, set); until nrelements >= n; return res; end); InstallOtherMethod(CyclotomicCosets, "cyclotomic cosets of 2 mod n", true, [IsInt], 0, function(n) return CyclotomicCosets(2, n); end); ############################################################################# ## #F PrimitiveUnityRoot( [, ] ) . . primitive n'th power root of unity ## InstallMethod(PrimitiveUnityRoot, "method for fieldsize, n (th power)", true, [IsInt, IsInt], 0, function(q,n) local qm; qm := q ^ OrderMod(q,n); if not qm in [2..65536] then Error("GUAVA cannot compute in a finite field of size larger than 2^16"); fi; return Z(qm)^((qm - 1) / n); end); InstallOtherMethod(PrimitiveUnityRoot, "method for field, n (th power)", true, [IsField, IsInt], 0, function(F, n) return PrimitiveUnityRoot(Size(F), n); end); InstallOtherMethod(PrimitiveUnityRoot, "method for n (th power)", true, [IsInt], 0, function(n) return PrimitiveUnityRoot(2, n); end); ############################################################################# ## #F RemoveFiles( ) . . . . . . . . removes all files in ## ## used for functions which use external programs (like Leons stuff) ## InstallGlobalFunction(RemoveFiles, function(arg) local f; for f in arg do Exec(Concatenation("rm -f ",f)); od; end); ############################################################################# ## #F NullVector( [, ] ) . . vector consisting of coordinates ## InstallMethod(NullVector, "length", true, [IsInt], 0, function(n) return List([1..n], i->0); end); InstallOtherMethod(NullVector, "length, field", true, [IsInt, IsField], 0, function(n, F) return List([1..n], i->Zero(F)); end); ############################################################################# ## #F TransposedPolynomial(

, ) . . . . . . . . . tranpose of polynomial ## ## Returns the transpose of polynomial px mod (x^m-1) ## InstallMethod(TransposedPolynomial, "poly, length", true, [IsUnivariatePolynomial, IsInt], 0, function(p, m) local i, c, v, F, fam; c := CoefficientsOfLaurentPolynomial(p)[1]; c := MutableCopyMat(c); if Length(c) <> m then Append(c, List( [1..(m-Length(c))], i->Zero(c[1]) )); fi; v := [c[1]]; i := Length(c); while (i > 1) do v := Concatenation(v, [ c[i] ]); i := i-1; od; F := CoefficientsRing(DefaultRing(PolyCodeword(Codeword(v, m)))); fam := ElementsFamily(FamilyObj(F)); return LaurentPolynomialByCoefficients(fam, v, 0); end); guava-3.6/lib/util.gd0000644017361200001450000000552211026723452014407 0ustar tabbottcrontab############################################################################# ## #A util.gd GUAVA library Reinald Baart #A &Jasper Cramwinckel #A &Erik Roijackers ## ## This file contains miscellaneous functions ## #H @(#)$Id: util.gd,v 1.4 2003/02/12 03:49:21 gap Exp $ ## Revision.("guava/lib/util_gd") := "@(#)$Id: util.gd,v 1.4 2003/02/12 03:49:21 gap Exp $"; ############################################################################# ## #F SphereContent( , [, ] ) . . . . . . . . . . . contents of ball ## ## SphereContent(n, e [, F]) calculates the contents of a ball of radius e in ## the space (GF(q))^n ## DeclareOperation("SphereContent", [IsInt, IsInt, IsInt]); ############################################################################# ## #F Krawtchouk( , , [, ] ) . . . . . . Krwatchouk number K_k(i) ## ## Krawtchouk(k, i, n [, F]) calculates the Krawtchouk number K_k(i) ## over field of size q (or 2), wordlength n. ## Pre: 0 <= k <= n ## DeclareOperation("Krawtchouk", [IsInt, IsInt, IsInt, IsInt]); ############################################################################# ## #F PermutedCols( ,

) . . . . . . . . . . permutes columns of matrix ## DeclareOperation("PermutedCols", [IsMatrix, IsPerm]); ############################################################################# ## #F ReciprocalPolynomial(

[, ] ) . . . . . . reciprocal of polynomial ## DeclareOperation("ReciprocalPolynomial",[IsUnivariatePolynomial, IsInt]); ############################################################################# ## #F CyclotomicCosets( [, ] ) . . . . cyclotomic cosets of mod ## DeclareOperation("CyclotomicCosets", [IsInt, IsInt]); ############################################################################# ## #F PrimitiveUnityRoot( [, ] ) . . primitive n'th power root of unity ## DeclareOperation("PrimitiveUnityRoot", [IsInt, IsInt]); ############################################################################# ## #F RemoveFiles( ) . . . . . . . . removes all files in ## ## used for functions which use external programs (like Leons stuff) ## DeclareGlobalFunction("RemoveFiles"); ############################################################################# ## #F NullVector( [, ] ) . . vector consisting of coordinates ## DeclareOperation("NullVector", [IsInt]); ############################################################################# ## #F TransposedPolynomial(

, ) . . . . . . . . . tranpose of polynomial ## ## Returns the transpose of polynomial px mod (x^m-1) ## DeclareOperation("TransposedPolynomial", [IsUnivariatePolynomial, IsInt]); guava-3.6/lib/toric.gd0000644017361200001450000000251311026723452014547 0ustar tabbottcrontab############################################################################# ## #A toric.gd GUAVA library David Joyner ## ## this file contains declarations for toric codes ## #H @(#)$Id: toric.gd,v 1.1 2003/02/27 22:45:16 gap Exp $ ## Revision.("guava/lib/toric_gd") := "@(#)$Id: toric.gd,v 1.1 2003/02/27 22:45:16 gap Exp $"; ############################################################################# ## #F ToricPoints(,) ## ## returns the points in $(F^*)^n$. ## DeclareGlobalFunction("ToricPoints"); ############################################################################# ## #F ToricCode(,) ## ## This function returns the same toric code as in J. P. Hansen, "Toric ## surfaces and error-correcting codes", except that the polytope can be ## more general This is a truncated RS code. is a list of integral ## vectors (in Hansen's case, is the list of integral vectors in a ## polytope) and is the finite field. The characteristic of must ## be different from 2. ## DeclareGlobalFunction("ToricCode"); ############################################################################# ## #F GeneralizedReedMullerCode(, , ) #F GeneralizedReedMullerCode(, , ) ## ## DeclareOperation("GeneralizedReedMullerCode",[IsList,IsInt,IsField]); guava-3.6/lib/codefun.gd0000644017361200001450000000260011026723452015047 0ustar tabbottcrontab############################################################################# ## #A codefun.gd GUAVA Reinald Baart #A &Jasper Cramwinckel #A &Erik Roijackers ## ## This file contains non-dispatched functions to get info of codes ## #H @(#)$Id: codefun.gd,v 1.3 2003/02/12 03:49:16 gap Exp $ ## Revision.("guava/lib/codefun_gd") := "@(#)$Id: codefun.gd,v 1.3 2003/02/12 03:49:16 gap Exp $"; ############################################################################# ## #F GuavaToLeon( , ) . converts a code to a form Leon can read it ## ## converts a code in Guava format to a library in a format that is readable ## by Leon's programs. ## DeclareOperation("GuavaToLeon", [IsCode, IsString]); ############################################################################# ## #F WeightHistogram ( [, ] ) . . . . . plots the weights of ## ## The maximum length of the columns is . Default height is one ## third of the screen size. ## DeclareOperation("WeightHistogram", [IsCode, IsInt]); ############################################################################# ## #F MergeHistories( , [, .. ] ) . . . . . . list of strings ## ## DeclareGlobalFunction("MergeHistories"); guava-3.6/lib/matrices.gi0000644017361200001450000004147211027007703015245 0ustar tabbottcrontab############################################################################# ## #A matrices.gi GUAVA library Reinald Baart #A &Jasper Cramwinckel #A &Erik Roijackers ## ## This file contains functions for generating matrices ## #H @(#)$Id: matrices.gi,v 1.4 2003/02/12 03:49:19 gap Exp $ ## Revision.("guava/lib/matrices_gi") := "@(#)$Id: matrices.gi,v 1.4 2003/02/12 03:49:19 gap Exp $"; ############################################################################# ## #F KrawtchoukMat( [, ] ) . . . . . . . matrix of Krawtchouk numbers ## InstallMethod(KrawtchoukMat, "n,q", true, [IsInt, IsInt], 0, function(n,q) local res,i,k; if not IsPrimePowerInt(q) then Error("q must be a prime power int"); fi; res := MutableNullMat(n+1,n+1); for k in [0..n] do res[1][k+1]:=1; od; for k in [0..n] do res[k+1][1] := Binomial(n,k)*(q-1)^k; od; for i in [2..n+1] do for k in [2..n+1] do res[k][i] := res[k][i-1] - (q-1)*res[k-1][i] - res[k-1][i-1]; od; od; return res; end); InstallOtherMethod(KrawtchoukMat, "n", true, [IsInt], 0, function(n) return KrawtchoukMat(n, 2); end); ############################################################################# ## #F GrayMat( [, ] ) . . . . . . . . . matrix of Gray-ordered vectors ## ## GrayMat(n [, F]) returns a matrix in which rows a(i) have the property ## d( a(i), a(i+1) ) = 1 and a(1) = 0. ## InstallMethod(GrayMat, "n,Field", true, [IsInt, IsField], 0, function(n, F) local M, result, row, series, column, elem, q, elementnr, line, goingup; elem := AsSSortedList(F); q := Length(elem); M := q^n; result := MutableNullMat(M,n); for column in [1..n] do goingup := true; row:=0; for series in [1..q^(column-1)] do for elementnr in [1..q] do for line in [1..q^(n-column)] do row:=row+1; if goingup then result[row][column]:= elem[elementnr]; else result[row][column]:= elem[q+1-elementnr]; fi; od; od; goingup:= not goingup; od; od; return result; end); InstallOtherMethod(GrayMat, "n", true, [IsInt], 0, function(n) return GrayMat(n, GF(2)); end); ############################################################################# ## #F SylvesterMat( ) . . . . . . . . . . . . Sylvester matrix of order ## InstallMethod(SylvesterMat, "order", true, [IsInt], 0, function(n) local result, syl; if n = 1 then return [[1]]; elif (n mod 2)=0 then syl:=SylvesterMat(n/2); result:=List(syl, x->Concatenation(x,x)); Append(result,List(syl,x->Concatenation(x,-x))); return result; else Error("n must be a power of 2"); fi; end); HadamardMat_paleyI := function(n) local p,N,i,j,H1,H2,L,S,I; if IsPrime(n-1) and (n-1) mod 4=3 then p := n-1; else Print("The order ",n," is not covered by the Paley type I construction.\n"); return(0); fi; H1 := function(i,j) if i=0 then return(1); fi; if j=0 then return(-1); fi; if i=j then return(1); fi; return Legendre(i-j,p); end; L := List([0..p],j->List([0..p], i->H1(i,j))); return L; end; HadamardMat_paleyII := function(n) local p,N,i,j,H1,H2,L,S,I,B; N := n/2; if IsPrime(N-1) and (N-1) mod 4=1 then p := N-1; else Print("The order ",n," is not covered by the Paley type II construction.\n"); return(0); fi; H2 := function(i,j) if (i=0 and j=0) then return(0); fi; if i=0 or j=0 then return(1); fi; if i=j then return(0); fi; return Legendre(i-j,p); end; S := List([0..p],j->List([0..p], i->H2(i,j))); I := IdentityMat(N,Integers); Display(S); Print(S,"\n",I,"\n"); B := BlockMatrix([[1,1,S+I],[1,2,S-I],[2,1,S-I],[2,2,-S-I]],2,2); return MatrixByBlockMatrix(B); end; ############################################################################# ## #F HadamardMat( ) . . . . . . . . . . . . Hadamard matrix of order ## InstallMethod(HadamardMat, "order", true, [IsInt], 0, function(n) local result, had, i, j, N; if n mod 2 = 0 then N:=n/2; else Error("The Hadamard matrix of order ",n," does not exist"); fi; if n = 1 then return [[1]]; elif IsPrimeInt(N-1) and ((N-1) mod 4)=1 then Print("Type II\n"); return HadamardMat_paleyII(n); elif (n=2) or (n=4) or ((n mod 8)=0) then had:=HadamardMat(n/2); result:=List(had, x->Concatenation(x,x)); Append(result,List(had,x->Concatenation(x,-x))); return result; elif IsPrimeInt(n-1) and (n mod 4)=0 then result := List(MutableNullMat(n,n)+1, x->ShallowCopy(x)); for i in [2..n] do result[i][i]:=-1; for j in [i+1..n] do result[i][j]:=Legendre(j-i,n-1); result[j][i]:=-result[i][j]; od; od; return result; elif (n mod 4)=0 then Error("The Hadamard matrix of order ",n," is not yet implemented"); else Error("The Hadamard matrix of order ",n," does not exist"); fi; end); ############################################################################# ## #F IsLatinSquare( ) . . . . . . . determines if matrix is latin square ## ## IsLatinSquare determines if M is a latin square, that is a q*q array whose ## entries are from a set of q distinct symbols such that each row and each ## column of the array contains each symbol exactly once ## InstallMethod(IsLatinSquare, "method for matrix", true, [IsMatrix], 0, function(M) local i, j, s, n, isLS, MT; n:=Length(M); s:=Set(M[1]); isLS:= (Length(s) = n and Length(s) = Length(M[1]) ); i:=2; if isLS then MT:=TransposedMat(M); fi; while isLS and i<=n do isLS:= (Set(M[i]) = s); i:=i+1; od; i := 1; while isLS and i<=n do isLS:= (Set(MT[i]) = s); i:=i+1; od; return isLS; end); InstallOtherMethod(IsLatinSquare, "generic method, any object", true, [IsObject], 0, function(obj) if IsMatrix(obj) then TryNextMethod(); fi; return false; end); ############################################################################# ## #F AreMOLS( ) . . . . . . . . . determines if arguments are MOLS ## ## AreMOLS(M1, M2, ...) determines if the arguments are mutually orthogonal ## latin squares. ## ##LR - doesn't handle case where arg is list of one matrix. Is this a prob? InstallGlobalFunction(AreMOLS, function(arg) local i, j, s, M, n, q2, first, second, max, fast; if Length(arg) = 1 then M:=arg[1]; else M:=List([1..Length(arg)],i->arg[i]); fi; n:=Length(M); if ( n >= Length(M[1]) ) or not ForAll(M, i-> IsLatinSquare(i)) then return false; #this is right fi; q2 := Length(M[1])^2; max := Maximum(M[1][1]) + 1; M := List(M, i -> Flat(i)); fast := (DefaultField(Flat(M)) = Rationals); first := 1; repeat second := first+1; if fast then repeat s := Set( M[first] * max + M[second] ); second := second + 1; until (Length(s) < q2) or (second > n); else repeat s:=Set([]); for i in [1 .. q2] do AddSet(s, [ M[first][i], M[second][i] ]); od; second := second + 1; until (Length(s) < q2) or (second > n); fi; first:=first + 1; until (Length(s) < q2) or (first >= n); return Length(s) = q2; end); ############################################################################# ## #F MOLS( [, ] ) . . . . . . . . . . list of MOLS of size * ## ## MOLS( q [, n]) returns a list of n Mutually Orthogonal Latin ## Squares of size q * q. If n is omitted, MOLS will return a list ## of two MOLS. If it is not possible to return n MOLS of size q, ## MOLS will return a boolean false. ## InstallMethod(MOLS, "size, number", true, [IsInt, IsInt], 0, function(q, n) local facs, res, Merged, Squares, nr, S, ToInt; ToInt := function(M) local res, els, q, i, j; q:=Length(M); els:=AsSSortedList(GF(q)); res := MutableNullMat(q,q)+1; for i in [1..q] do for j in [1..q] do while els[res[i][j]] <> M[i][j] do res[i][j]:=res[i][j]+1; od; od; od; return res-1; end; Squares := function(q, n) local els, res, i, j, k; els:=AsSSortedList(GF(q)); res:=List([1..n], x-> MutableNullMat(q,q,GF(q))); for i in [1..q] do for j in [1..q] do for k in [1..n] do res[k][i][j] := els[i] + els[k+1] * els[j]; od; od; od; return List([1..n],x -> ToInt(res[x])); end; Merged := function(A, B) local i, j, q1, q2, res; q1:=Length(A); q2:=Length(B); res:=KroneckerProduct(A,NullMat(q2,q2)+1); for i in [1 .. q1*q2] do for j in [1 .. q1*q2] do res[i][j]:= res[i][j] + q1 * B[((i-1) mod q2)+1][((j-1) mod q2)+1]; od; od; return res; end; if n <= 0 then return false; elif (q < 3) or (q = 6) or (q mod 4) = 2 then return false; #this must be so elif n <> 2 then if (not IsPrimePowerInt(q)) or (n >= q) then return false; #this is right elif IsPrimeInt(q) then return List([1..n],i -> List([0..q-1], y -> List([0..q-1], x -> (x+i*y) mod q))); else return Squares(q,n); fi; else res:=[[[0]],[[0]]]; facs:=Collected(Factors(q)); for nr in facs do if nr[2] = 1 then S:= List([1..2], i -> List([0..nr[1]-1],y -> List([0..nr[1]-1], x -> (x+i*y) mod nr[1]))); else S:=Squares(nr[1]^nr[2],2); fi; res:=[Merged(res[1],S[1]),Merged(res[2],S[2])]; od; return res; fi; end); InstallOtherMethod(MOLS, "size", true, [IsInt], 0, function(q) return MOLS(q, 2); end); ############################################################################# ## #F VerticalConversionFieldMat( ) . . . . . . . converts matrix to GF(q) ## ## VerticalConversionFieldMat (M) converts a matrix over GF(q^m) to a matrix ## over GF(q) with vertical orientation of the tuples ## InstallMethod(VerticalConversionFieldMat, "method for matrix and field", true, [IsMatrix, IsField], 0, function(M, F) local res, q, Fq, m, n, r, ConvTable, x, temp, i, j, k, zero; q := Characteristic(F); Fq := GF(q); zero := Zero(Fq); m := Dimension(F); n := Length(M[1]); r := Length(M); ConvTable := []; x := Indeterminate(Fq); temp := MinimalPolynomial(Fq, Z(q^m)); for i in [1.. q^m - 1] do ConvTable[i] := VectorCodeword(Codeword(x^(i-1) mod temp, m+1)); od; res := MutableNullMat(r * m, n, Fq); for i in [1..r] do for j in [1..n] do if M[i][j] <> zero then temp := ConvTable[LogFFE(M[i][j], Z(q^m)) + 1]; for k in [1..m] do res[(i-1)*m + k][j] := temp[k]; od; fi; od; od; return res; end); InstallOtherMethod(VerticalConversionFieldMat, "method for matrix", true, [IsMatrix], 0, function(M) return VerticalConversionFieldMat(M, DefaultField(Flat(M))); end); ############################################################################# ## #F HorizontalConversionFieldMat( , ) . . . converts matrix to GF(q) ## ## HorizontalConversionFieldMat (M, F) converts a matrix over GF(q^m) to a ## matrix over GF(q) with horizontal orientation of the tuples ## InstallMethod(HorizontalConversionFieldMat, "method for matrix and field", true, [IsMatrix, IsField], 0, function(M, F) local res, vec, k, n, coord, i, p, q, m, zero, g, Nul, ConvTable, x; q := Characteristic(F); m := Dimension(F); zero := Zero(F); g := MinimalPolynomial(GF(q), Z(q^m)); Nul := List([1..m], i -> zero); ConvTable := []; x := Indeterminate(GF(q)); for i in [1..Size(F) - 1] do ConvTable[i] := VectorCodeword(Codeword(x^(i-1) mod g, m)); od; res := []; n := Length(M[1]); k := Length(M); for vec in [0..k-1] do for i in [1..m] do res[m*vec+i] := []; od; for coord in [1..n] do if M[vec+1][coord] <> zero then p := LogFFE(M[vec+1][coord], Z(q^m)); for i in [1..m] do if (p+i) mod q^m = 0 then p := p+1; fi; Append(res[m*vec+i], ConvTable[(p + i) mod (q^m)]); od; else for i in [1..m] do Append(res[m*vec+i], Nul); od; fi; od; od; return res; end); InstallOtherMethod(HorizontalConversionFieldMat, "method for matrix", true, [IsMatrix], 0, function(M) return HorizontalConversionFieldMat(M, DefaultField(Flat(M))); end); ############################################################################# ## #F IsInStandardForm( [, ] ) . . . . is matrix in standard form? ## ## IsInStandardForm(M [, identityleft]) determines if M is in standard form; ## if identityleft = false, the identitymatrix must be at the right side ## of M; otherwise at the left side. ## InstallMethod(IsInStandardForm, "method for matrix and boolean", true, [IsMatrix, IsBool], 0, function(M, identityleft) local l; l := Length(M); if identityleft = false then return IdentityMat(l, DefaultField(Flat(M))) = M{[1..l]}{[Length(M[1])-l+1..Length(M[1])]}; else return IdentityMat(l, DefaultField(Flat(M))) = M{[1..l]}{[1..l]}; fi; end); InstallOtherMethod(IsInStandardForm, "method for matrix", true, [IsMatrix], 0, function(M) return IsInStandardForm(M, true); end); ############################################################################# ## #F PutStandardForm( [, ] [, ] ) . put in standard form ## ## PutStandardForm(Mat [, idleft] [, F]) puts matrix Mat in standard form, ## the size of Mat being (n x m). If idleft is true or is omitted, the ## the identity matrix is put left, else right. The permutation is returned. ## InstallMethod(PutStandardForm, "method for matrix, idleft and field", true, [IsMatrix, IsBool, IsField], 0, function(Mat, idleft, F) local n, m, row, i, j, h, hp, s, zero, P; n := Length(Mat); # not the word length! m := Length(Mat[1]); if idleft then return PutStandardForm(Mat,F); else s := m-n; fi; zero := Zero(F); P := (); for j in [1..n] do if Mat[j][j+s] =zero then i := j+1; while (i <= n) and (Mat[i][j+s] = zero) do i := i + 1; od; if i <= n then row := Mat[j]; Mat[j] := Mat[i]; Mat[i] := row; else h := j+s; while Mat[j][h] = zero do h := h + 1; if h > m then h := 1; fi; od; for i in [1..n] do Mat[i] := Permuted(Mat[i],(j+s,h)); od; P := P*(j+s,h); fi; fi; Mat[j] := Mat[j]/Mat[j][j+s]; for i in [1..n] do if i <> j then if Mat[i][j+s] <> zero then Mat[i] := Mat[i]-Mat[i][j+s]*Mat[j]; fi; fi; od; od; return P; end); ## ##Thanks to Frank Luebeck for this code: ## InstallOtherMethod(PutStandardForm, "method for matrix and Field", true, [IsMatrix, IsField], 0, function(mat, F) local perm, k, i, j, d ; d := Length(mat[1]); TriangulizeMat(mat); perm := (); k := Length(mat[1]); for i in [1..Length(mat)] do j := PositionNonZero(mat[i]); if (j <= d and i <> j) then perm := perm * (i,j); fi; od; if perm <> () then for i in [1..Length(mat)] do mat[i] := Permuted(mat[i], perm); od; fi; return perm; end); InstallOtherMethod(PutStandardForm, "method for matrix and idleft", true, [IsMatrix, IsBool], 0, function(M, idleft) return PutStandardForm(M, idleft, DefaultField(Flat(M))); end); InstallOtherMethod(PutStandardForm, "method for matrix", true, [IsMatrix], 0, function(M) return PutStandardForm(M, true, DefaultField(Flat(M))); end); guava-3.6/lib/codegen.gd0000644017361200001450000003752011026723452015041 0ustar tabbottcrontab############################################################################# ## #A codegen.gd GUAVA library Reinald Baart #A &Jasper Cramwinckel #A &Erik Roijackers ## ## This file contains info/functions for generating codes ## #H @(#)$Id: codegen.gd,v 1.3 2003/02/12 03:49:16 gap Exp $ ## Revision.("guava/lib/codegen_gd") := "@(#)$Id: codegen.gd,v 1.3 2003/02/12 03:49:16 gap Exp $"; ############################################################################# ## #F IsCode( ) . . . . . . . . . . . . . . . . . . . . . . code category ## DeclareCategory("IsCode", IsListOrCollection); ############################################################################# ## #F ElementsCode( [, ], ) . . . . . . code from list of words ## DeclareOperation("ElementsCode", [IsList,IsString,IsField]); ############################################################################# ## #F RandomCode( , [, ] ) . . . . . . . . random unrestricted code ## DeclareOperation("RandomCode", [IsInt, IsInt, IsField]); ############################################################################# ## #F HadamardCode( [, ] ) . Hadamard code of 'th kind, order ## DeclareOperation("HadamardCode", [IsMatrix, IsInt]); ############################################################################# ## #F ConferenceCode( ) . . . . . . . . . . code from conference matrix ## DeclareOperation("ConferenceCode", [IsMatrix]); ############################################################################# ## #F MOLSCode( [ , ] ) . . . . . . . . . . . . . . . . code from MOLS ## ## MOLSCode([n, ] q) returns a (n, q^2, n-1) code over GF(q) ## by creating n-2 mutually orthogonal latin squares of size q. ## If n is omitted, a wordlength of 4 will be set. ## If there are no n-2 MOLS known, the code will return an error ## DeclareOperation("MOLSCode", [IsInt, IsInt]); ############################################################################# ## #F QuadraticCosetCode( ) . . . . . . . . . . coset of RM(1,m) in R(2,m) ## ## QuadraticCosetCode(Q) returns a coset of the ReedMullerCode of ## order 1 (R(1,m)) in R(2,m) where m is the size of square matrix Q. ## Q is the upper triangular matrix that defines the quadratic part of ## the boolean functions that are in the coset. ## #QuadraticCosetCode := function(arg) ############################################################################# ## #F GeneratorMatCode( [, ], ) . . code from generator matrix ## DeclareOperation("GeneratorMatCode", [IsMatrix, IsString, IsField]); ############################################################################# ## #F GeneratorMatCodeNC( [, ], ) . . code from generator matrix ## ## same as GeneratorMatCode but does not compute upper + lower bounds ## for the minimum distance or covering radius DeclareOperation("GeneratorMatCodeNC", [IsMatrix, IsField]); ############################################################################# ## #F CheckMatCodeMutable( [, ], ) . . . . . . code from check matrix ## DeclareOperation("CheckMatCodeMutable", [IsMatrix, IsString, IsField]); ############################################################################# ## #F CheckMatCode( [, ], ) . . . . . . code from check matrix ## DeclareOperation("CheckMatCode", [IsMatrix, IsString, IsField]); ############################################################################# ## #F RandomLinearCode( , [, ] ) . . . . . . . . random linear code ## DeclareOperation("RandomLinearCode", [IsInt, IsInt, IsField]); ############################################################################# ## #F HammingCode( [, ] ) . . . . . . . . . . . . . . . . Hamming code ## DeclareOperation("HammingCode", [IsInt, IsField]); ############################################################################# ## #F SimplexCode( , ) . The SimplexCode is the Dual of the HammingCode ## DeclareOperation("SimplexCode", [IsInt, IsField]); ############################################################################# ## #F ReedMullerCode( , ) . . . . . . . . . . . . . . Reed-Muller code ## ## ReedMullerCode(r, k) creates a binary Reed-Muller code of dimension k, ## order r; 0 <= r <= k ## DeclareOperation("ReedMullerCode", [IsInt, IsInt]); ############################################################################# ## #F LexiCode( , , ) . . . . . Greedy code with standard basis ## DeclareOperation("LexiCode", [IsMatrix,IsInt,IsField]); ############################################################################# ## #F GreedyCode( , [, ] ) . . . . Greedy code from list of elements ## DeclareOperation("GreedyCode", [IsMatrix,IsInt,IsField]); ############################################################################# ## #F AlternantCode( , [, ], ) . . . . . . . Alternant code ## DeclareOperation("AlternantCode", [IsInt, IsList, IsList, IsField]); ############################################################################# ## #F GoppaCode( , ) . . . . . . . . . . . . . . . . . . Goppa code ## DeclareGlobalFunction("GoppaCode"); ############################################################################# ## #F CordaroWagnerCode( ) . . . . . . . . . . . . . . Cordaro-Wagner code ## DeclareOperation("CordaroWagnerCode", [IsInt]); ############################################################################# ## #F GeneralizedSrivastavaCode( , , [, ] [, ] ) . . . . . . ## DeclareOperation("GeneralizedSrivastavaCode",[IsList, IsList, IsList, IsInt, IsField]); ############################################################################# ## #F SrivastavaCode( , [, ] [, ] ) . . . . . . . Srivastava code ## DeclareOperation("SrivastavaCode",[IsList, IsList, IsInt, IsField]); ############################################################################# ## #F ExtendedBinaryGolayCode( ) . . . . . . . . . extended binary Golay code ## DeclareOperation("ExtendedBinaryGolayCode", []); ############################################################################# ## #F ExtendedTernaryGolayCode( ) . . . . . . . . . extended ternary Golay code ## DeclareOperation("ExtendedTernaryGolayCode", []); ############################################################################# ## #F BestKnownLinearCode( , [, ] ) . returns best known linear code #F BestKnownLinearCode( ) ## DeclareOperation("BestKnownLinearCode", [IsRecord]); ############################################################################# ## #F GeneratorPolCode( , [, ], ) . code from generator poly ## DeclareOperation("GeneratorPolCode", [IsUnivariatePolynomial, IsInt, IsString, IsField]); ############################################################################# ## #F CheckPolCode( , [, ], ) . . code from check polynomial ## DeclareOperation("CheckPolCode", [IsUnivariatePolynomial, IsInt, IsString, IsField]); ############################################################################# ## #F RepetitionCode( [, ] ) . . . . . . . repetition code of length ## DeclareOperation("RepetitionCode", [IsInt, IsField]); ############################################################################# ## #F WholeSpaceCode( [, ] ) . . . . . . . . . . returns ^ as code ## DeclareOperation("WholeSpaceCode", [IsInt, IsField]); ############################################################################# ## #F CyclicCodes( ) . . returns a list of all cyclic codes of length ## DeclareOperation("CyclicCodes", [IsInt,IsField]); ############################################################################# ## #F NrCyclicCodes( , ) . . . number of cyclic codes of length ## DeclareOperation("NrCyclicCodes", [IsInt, IsField]); ############################################################################# ## #F BCHCode( [, ], [, ] ) . . . . . . . . . . . . BCH code ## DeclareOperation("BCHCode", [IsInt, IsInt, IsInt, IsInt]); ############################################################################# ## #F ReedSolomonCode( , ) . . . . . . . . . . . . . . Reed-Solomon code ## ## ReedSolomonCode (n, d) returns a primitive narrow sense BCH code with ## wordlength n, over alphabet q = n+1, designed distance d DeclareOperation("ReedSolomonCode", [IsInt, IsInt]); ############################################################################# ## #F Extended ReedSolomonCode( , ) . . . . . Extended Reed-Solomon code ## ## ExtendedReedSolomonCode (n, d) returns a Reed Solomon code extended by ## an overall parity-check symbol. Note that wordlength n = q, d is the ## designed distance. DeclareOperation("ExtendedReedSolomonCode", [IsInt, IsInt]); ############################################################################# ## #F RootsCode( , ) . . . code constructed from roots of polynomial ## ## RootsCode (n, rootlist) or RootsCode (n, , F) returns the ## code with generator polynomial equal to the least common multiplier of ## the minimal polynomials of the n'th roots of unity in the list. ## The code has wordlength n ## DeclareOperation("RootsCode", [IsInt, IsList, IsField]); ############################################################################# ## #F QRCode( [, ] ) . . . . . . . . . . . . . . quadratic residue code ## DeclareOperation("QRCode", [IsInt, IsInt]); ############################################################################# ## #F QQRCode( [, ] ) . . . . . . . . binary quasi-quadratic residue code ## ## Code of Bazzi-Mittel (see Bazzi, L. and Mitter, S.K. "Some constructions of ## codes from group actions" preprint March 2003 (submitted to IEEE IT) ## DeclareOperation("QQRCode", [IsInt]); ############################################################################# ## #F QQRCodeNC( [, ] ) . . . . . . . . binary quasi-quadratic residue code ## ## Code of Bazzi-Mittel (see Bazzi, L. and Mitter, S.K. "Some constructions of ## codes from group actions" preprint March 2003 (submitted to IEEE IT) ## Uses GeneratorMatCodeNC ## DeclareOperation("QQRCodeNC", [IsInt]); ############################################################################# ## #F NullCode( [, ] ) . . . . . . . . . . . code consiting only of <0> ## DeclareOperation("NullCode", [IsInt, IsField]); ############################################################################# ## #F FireCode( , ) . . . . . . . . . . . . . . . . . . . . . Fire code ## ## FireCode (G, b) constructs the Fire code that is capable of correcting any ## single error burst of length b or less. ## G is a primitive polynomial of degree m ## DeclareOperation("FireCode", [IsUnivariatePolynomial, IsInt]); ############################################################################# ## #F BinaryGolayCode( ) . . . . . . . . . . . . . . . . . . binary Golay code ## DeclareOperation("BinaryGolayCode", []); ############################################################################# ## #F TernaryGolayCode( ) . . . . . . . . . . . . . . . . . ternary Golay code ## DeclareOperation("TernaryGolayCode", []); ############################################################################# ## #F EvaluationCode(

, , ) ## ## P is a list of n points in F^r ## L is a list of rational functions in r variables ## EvaluationCode returns the image of the evaluation map f->[f(P1),...,f(Pn)], ## as f ranges over the vector space of functions spanned by L. ## The output is the code whose generator matrix has rows (f(P1)...f(Pn)) where ## f is in L and P={P1,..,Pn} ## DeclareOperation("EvaluationCode",[IsList, IsList, IsRing]); ############################################################################# ## #F GeneralizedReedSolomonCode(

, , ) ## ## P is a list of n points in F ## k is an integer ## GRSCode returns the image of the evaluation map f->[f(P1),...,f(Pn)], ## as f ranges over the vector space of polynomials in 1 variable ## of degree < k in the ring R. ## The output is the code whose generator matrix has rows (f(P1)...f(Pn)) where ## f = x^j, j, , , ) ## ## R = F[x,y] is a polynomial ring over a finite field F ## crv is a polynomial in R representing a plane curve ## pts is a list of points on the curve ## Computes the AG codes associated to the RR space ## L(m*infinity) using Proposition VI.4.1 in Stichtenoth ## ## DeclareOperation("OnePointAGCode",[IsPolynomial,IsList, IsInt, IsRing]); ############################################################################# ## #F FerreroDesignCode(

, ) ... code from a Ferrero design ## ## #DeclareOperation("FerreroDesignCode",[IsList, IsInt]); ############################################################################# ## #F QuasiCyclicCode( , , ) . . . . . . . . . . . quasi cyclic code ## ## QuasiCyclicCode ( , , ) generates a rate 1/m quasi-cyclic ## codes. Note that is a list of univariate polynomial and m is the ## cardinality of this list. The integer s is the size of the circulant ## and the associated field is . ## DeclareOperation("QuasiCyclicCode", [IsList, IsInt, IsField]); ##################################################################### ## #F CyclicMDSCode( , , ) . . . . . . . . . cyclic MDS code ## ## Construct a [q^m + 1, k, q^m - k + 2] cyclic MDS code over GF(q^m) ## DeclareOperation("CyclicMDSCode", [IsInt, IsInt, IsInt]); ####################################################################### ## #F FourNegacirculantSelfDualCode( , , ) . . self-dual code ## ## Construct a [2*k, k, d] self-dual code over F using Harada's ## construction. See: ## ## 1. M. Harada and T. Nishimura, "An extremal singly even self ## dual code of length 88", Advances in Mathematics of ## Communications, vol 1, no. 2, pp. 261--267, 2007 ## ## 2. M. Harada, W. Holzmann, H. Kharaghani and M. Khorvash, ## "Extremal ternary self-dual codes constructed from ## negacirculant matrices", Graph and Combinatorics, vol 23, ## pp. 401--417, 2007 ## ## 3. M. Harada, "An extremal doubly even self-dual code of ## length 112", preprint ## ## The generator matrix of the code has the following form: ## ## - - ## | : A : B | ## G = | I :-----:-----| ## | : B^T : A^T | ## - - ## ## Note that the matrices A, B, A^T and B^T are k/2 * k/2 ## negacirculant matrices. ## DeclareOperation("FourNegacirculantSelfDualCode", [IsUnivariatePolynomial, IsUnivariatePolynomial, IsInt]); DeclareOperation("FourNegacirculantSelfDualCodeNC", [IsUnivariatePolynomial, IsUnivariatePolynomial, IsInt]); ########################################################################### ## #F QCLDPCCodeFromGroup( , , ) . . Regular quasi-cyclic LDPC code ## ## Construct a regular (j,k) quasi-cyclic low-density parity-check (LDPC) ## code over GF(2) based on the multiplicative group of integer modulo m. ## If m is a prime, the size of the group is equal to Phi(m) = m - 1, ## otherwise it is equal to Phi(m). For details, refer to the paper by: ## ## R. Tanner, D. Sridhara, A. Sridharan, T. Fuja and D. Costello, ## "LDPC block and convolutional codes based on circulant matrices", ## IEEE Trans. Inform. Theory, vol. 50, no. 12, pp. 2966--2984, 2004 ## ## NOTE that j and k must divide Phi(m). ## DeclareOperation("QCLDPCCodeFromGroup", [IsInt, IsInt, IsInt]); guava-3.6/lib/matrices.gd0000644017361200001450000001035311026723452015237 0ustar tabbottcrontab############################################################################# ## #A matrices.gd GUAVA library Reinald Baart #A &Jasper Cramwinckel #A &Erik Roijackers ## ## This file contains functions for generating matrices ## #H @(#)$Id: matrices.gd,v 1.2 2003/02/12 03:49:19 gap Exp $ ## Revision.("guava/lib/matrices_gd") := "@(#)$Id: matrices.gd,v 1.2 2003/02/12 03:49:19 gap Exp $"; ############################################################################# ## #F KrawtchoukMat( [, ] ) . . . . . . . matrix of Krawtchouk numbers ## DeclareOperation("KrawtchoukMat", [IsInt, IsInt]); ############################################################################# ## #F GrayMat( [, ] ) . . . . . . . . . matrix of Gray-ordered vectors ## ## GrayMat(n [, F]) returns a matrix in which rows a(i) have the property ## d( a(i), a(i+1) ) = 1 and a(1) = 0. ## DeclareOperation("GrayMat", [IsInt, IsField]); ############################################################################# ## #F SylvesterMat( ) . . . . . . . . . . . . Sylvester matrix of order ## DeclareOperation("SylvesterMat", [IsInt]); ############################################################################# ## #F HadamardMat( ) . . . . . . . . . . . . Hadamard matrix of order ## DeclareOperation("HadamardMat", [IsInt]); ############################################################################# ## #F IsLatinSquare( ) . . . . . . . determines if matrix is latin square ## ## IsLatinSquare determines if M is a latin square, that is a q*q array whose ## entries are from a set of q distinct symbols such that each row and each ## column of the array contains each symbol exactly once ## DeclareOperation("IsLatinSquare", [IsMatrix]); ############################################################################# ## #F AreMOLS( ) . . . . . . . . . determines if arguments are MOLS ## ## AreMOLS(M1, M2, ...) determines if the arguments are mutually orthogonal ## latin squares. ## DeclareGlobalFunction("AreMOLS"); ############################################################################# ## #F MOLS( [, ] ) . . . . . . . . . . list of MOLS of size * ## ## MOLS( q [, n]) returns a list of n Mutually Orthogonal Latin ## Squares of size q * q. If n is omitted, MOLS will return a list ## of two MOLS. If it is not possible to return n MOLS of size q, ## MOLS will return a boolean false. ## DeclareOperation("MOLS", [IsInt, IsInt]); ############################################################################# ## #F VerticalConversionFieldMat( ) . . . . . . . converts matrix to GF(q) ## ## VerticalConversionFieldMat (M) converts a matrix over GF(q^m) to a matrix ## over GF(q) with vertical orientation of the tuples ## DeclareOperation("VerticalConversionFieldMat", [IsMatrix, IsField]); ############################################################################# ## #F HorizontalConversionFieldMat( , ) . . . converts matrix to GF(q) ## ## HorizontalConversionFieldMat (M, F) converts a matrix over GF(q^m) to a ## matrix over GF(q) with horizontal orientation of the tuples ## DeclareOperation("HorizontalConversionFieldMat", [IsMatrix, IsField]); ############################################################################# ## #F IsInStandardForm( [, ] ) . . . . is matrix in standard form? ## ## IsInStandardForm(M [, identityleft]) determines if M is in standard form; ## if identityleft = false, the identitymatrix must be at the right side ## of M; otherwise at the left side. ## DeclareOperation("IsInStandardForm", [IsMatrix, IsBool]); ############################################################################# ## #F PutStandardForm( [, ] [, ] ) . put in standard form ## ## PutStandardForm(Mat [, idleft] [, F]) puts matrix Mat in standard form, ## the size of Mat being (n x m). If idleft is true or is omitted, the ## the identity matrix is put left, else right. The permutation is returned. ## DeclareOperation("PutStandardForm", [IsMatrix, IsBool, IsField]); guava-3.6/lib/decoders.gi0000644017361200001450000006043511026723452015233 0ustar tabbottcrontab############################################################################# ## #A decoders.gi GUAVA library Reinald Baart #A &Jasper Cramwinckel #A &Erik Roijackers ## &David Joyner ## This file contains functions for decoding codes ## #H @(#)$Id: decoders.gi,v 1.4 2003/02/12 03:49:19 gap Exp $ ## ## Decodeword (unrestricted) modified 11-3-2004 ## Decodeword (linear) created 10-2004 ## Hamming, permutation, and BCH decoders moved into this file 10-2004 ## GeneralizedReedSolomonDecoderGao added 11-2004 ## GeneralizedReedSolomonDecoder added 11-2004 ## bug fix in GRS decoder 11-29-2004 ## added GeneralizedReedSolomonListDecoder and GRS, 12-2004 ## added PermutationDecodeNC, CyclicDecoder 5-2005 ## revisions to Decodeword, 11-2005 (fixed bug spotted by Cayanne McFarlane) ## 1-2006: added bit flip decoder ## 7-2007: Fixed several bugs in CyclicDecoder found by ## Punarbasu Purkayastha ## Revision.("guava/lib/decoders_gi") := "@(#)$Id: decoders.gi,v 1.4 2003/02/12 03:49:19 gap Exp $"; ############################################################################# ## #F Decode( , ) . . . . . . . . . decodes the vector(s) v from ## ## v can be a "codeword" or a list of "codeword"s ## InstallMethod(Decode, "method for unrestricted code, codeword", true, [IsCode, IsCodeword], 0, function(C, v) local c; c := Codeword(v, C); if HasSpecialDecoder(C) then return SpecialDecoder(C)(C, c); elif IsCyclicCode(C) or IsLinearCode(C) then return Decode(C, c); else Error("no decoder present"); fi; end); InstallOtherMethod(Decode, "method for unrestricted code, list of codewords", true, [IsCode, IsList], 0, function(C, L) local i; return List(L, i->Decode(C, i)); end); InstallMethod(Decode, "method for linear code, codeword", true, [IsLinearCode, IsCodeword], 0, function(C, c) local S, syn, index, corr, Gt, i, x, F; c := Codeword(c, C); if HasSpecialDecoder(C) then return SpecialDecoder(C)(C, c); fi; F := LeftActingDomain(C); S := SyndromeTable(C); syn := Syndrome(C, c); index := 0; repeat index := index + 1; until S[index][2] = syn; corr := VectorCodeword(c - S[index][1]); # correct codeword x := SolutionMat(GeneratorMat(C), corr); return Codeword(x,LeftActingDomain(C)); # correct "message" end); ############################################################################# ## #F Decodeword( , ) . . . . . . . . . decodes the vector(s) v from ## ## v can be a "codeword" or a list of "codeword"s ## #nearest neighbor InstallMethod(Decodeword, "method for unrestricted code, codeword", true, [IsCode, IsCodeword], 0, function(C, v) local r, c, Cwords, NearbyWords, dist; r := Codeword(v, C); if r in C then return r; fi; if HasSpecialDecoder(C) then return SpecialDecoder(C)(C, r)*C; elif IsCyclicCode(C) or IsLinearCode(C) then return Decodeword(C, r); else dist:=Int((MinimumDistance(C)-1)/2); Cwords:=Elements(C); NearbyWords:=[]; for c in Cwords do if WeightCodeword(r-c) <= dist then NearbyWords:=Concatenation(NearbyWords,[r]); fi; od; return NearbyWords; fi; end); InstallOtherMethod(Decodeword, "method for unrestricted code, list of codewords", true, [IsCode, IsList], 0, function(C, L) local i; return List(L, i->Decodeword(C, i)); end); #syndrome decoding InstallMethod(Decodeword, "method for linear code, codeword", true, [IsLinearCode, IsCodeword], 0, function(C, v) local c, c0, S, syn, index, corr, Gt, i, x, F; c := Codeword(v, C); if HasSpecialDecoder(C) then c0:=SpecialDecoder(C)(C, c); return c0*C; fi; F := LeftActingDomain(C); S := SyndromeTable(C); syn := Syndrome(C, c); index := 0; repeat index := index + 1; until S[index][2] = syn; corr := VectorCodeword(c - S[index][1]); # correct codeword return Codeword(corr,F); end); ################################################################## ## ## PermutationDecode( , ) - decodes the vector v to ## ## Uses Leon's AutomorphismGroup in the binary case, ## PermutationAutomorphismGroup in the non-binary case, ## performs permutation decoding when possible. ## Returns original vector and prints "fail" when not possible. ## InstallMethod(PermutationDecode, "attribute method for linear codes", true, [IsLinearCode,IsList], 0, function(C,v) #C is a linear [n,k,d] code, #v is a vector with <=(d-1)/2 errors local M,G,perm,F,P,t,p0,p,pc,i,k,pv,c,H,d,G0,H0; G:=GeneratorMat(C); H:=CheckMat(C); d:=MinimumDistance(C); k:=Dimension(C); G0 := List(G, ShallowCopy); perm:=PutStandardForm(G0); H0 := List(H, ShallowCopy); PutStandardForm(H0,false); F:=LeftActingDomain(C); if F=GF(2) then P:=AutomorphismGroup(C); else P:=PermutationAutomorphismGroup(C); fi; t:=Int((d-1)/2); p0:=0; if WeightCodeword(H0*v)=0 then return(v); fi; for p in P do pv:=Permuted(v,p); if WeightCodeword(Codeword(H0*pv))<=t then p0:=p; break; fi; od; if p0=0 then Print("fail \n"); return(v); fi; pc:=TransposedMat(G0)*List([1..k],i->pv[i]); c:=Permuted(pc,p0^(-1)); return Codeword(Permuted(c,perm)); end); ################################################################## ## ## ## PermutationDecodeNC( , ,

) - decodes the ## vector v to ## ## Performs permutation decoding when possible. ## Returns original vector and prints "fail" when not possible. ## NC version does Not Compute the aut gp so one must ## input the permutation automorphism group ##

subset SymmGp(n), n=wordlength() ## #### wdj,2-7-2005 InstallMethod(PermutationDecodeNC, "attribute method for linear codes", true, [IsLinearCode,IsCodeword,IsGroup], 0, function(C,v,P) #C is a linear [n,k,d] code, #v is a vector with <=(d-1)/2 errors local M,G,G0, perm,F,t,p0,p,pc,i,k,pv,c,H,H0, d; G:=GeneratorMat(C); H:=CheckMat(C); d:=MinimumDistance(C); k:=Dimension(C); G0 := List(G, ShallowCopy); perm:=PutStandardForm(G0); H0 := List(H, ShallowCopy); PutStandardForm(H0,false); F:=LeftActingDomain(C); t:=Int((d-1)/2); p0:=0; if WeightCodeword(H0*v)=0 then return(v); fi; for p in P do pv:=Permuted(v,p); if WeightCodeword(Codeword(H0*pv))<=t then p0:=p; # Print(p0," = p0 \n",pv,"\n",H*pv,"\n"); break; fi; od; if p0=0 then Print("fail \n"); return(v); fi; pc:=TransposedMat(G0)*List([1..k],i->pv[i]); c:=Permuted(pc,p0^(-1)); return Codeword(Permuted(c,perm)); end); ############################################################################# ## #F CyclicDecoder( , ) . . . . . . . . . . . . decodes cyclic codes ## InstallMethod(CyclicDecoder, "method for cyclic code, codeword", true, [IsCode, IsCodeword], 0, function(C,w) local d, g, wpol, s, ds, cpol, cc, c, i, m, e, x, n, ccc, r; if not(IsCyclicCode(C)) then Error("\n\n Code must be cyclic"); fi; if Codeword(w) in C then return Codeword(w); fi; ## bug fix 7-6-2007 n:=WordLength(C); d:=MinimumDistance(C); g:=GeneratorPol(C); x:=IndeterminateOfUnivariateRationalFunction(g); wpol:=PolyCodeword(w); s:=wpol mod g; ds:=DegreeOfLaurentPolynomial(s); if ds<=Int((d-1)/2) then cpol:=wpol-s; cc:=CoefficientsOfUnivariatePolynomial(cpol); r:=Length(cc); ccc:=Concatenation(cc,List([1..(n-r)],k->0*cc[1])); c:=Codeword(ccc); return InformationWord( c, C ); fi; for i in [1..(n-1)] do s:=x^i*wpol mod g; ds:=DegreeOfLaurentPolynomial(s); if ds<=Int((d-1)/2) then m:=i; e:=x^(n-m)*s mod (x^n-1); cpol:=wpol-e; cc:=CoefficientsOfUnivariatePolynomial(cpol); r:=Length(cc); ccc:=Concatenation(cc,List([1..(n-r)],k->0*cc[1])); c:=Codeword(ccc); return InformationWord( c, C ); fi; od; return "fail"; end); ############################################################################# ## #F BCHDecoder( , ) . . . . . . . . . . . . . . . . decodes BCH codes ## InstallMethod(BCHDecoder, "method for code, codeword", true, [IsCode, IsCodeword], 0, function (C, r) local F, q, n, m, ExtF, x, a, t, ri_1, ri, rnew, si_1, si, snew, ti_1, ti, qi, sigma, i, cc, cl, mp, ErrorLocator, zero, Syndromes, null, pol, ExtSize, ErrorEvaluator, Fp; F := LeftActingDomain(C); q := Size(F); n := WordLength(C); m := OrderMod(q,n); t := QuoInt(DesignedDistance(C) - 1, 2); ExtF := GF(q^m); x := Indeterminate(ExtF); a := PrimitiveUnityRoot(q,n); zero := Zero(ExtF); r := PolyCodeword(Codeword(r, n, F)); if Value(GeneratorPol(C), a) <> zero then return Decode(C, r); ##LR - inf loop !!! fi; # Calculate syndrome: this simple line is faster than using minimal pols. Syndromes := List([1..2*QuoInt(DesignedDistance(C) - 1,2)], i->Value(r, a^i)); if Maximum(Syndromes) = Zero(F) then # no errors return Codeword(r / GeneratorPol(C), C); fi; # Use Euclidean algorithm: ri_1 := x^(2*t); ri := LaurentPolynomialByCoefficients( ElementsFamily(FamilyObj(ExtF)), Syndromes, 0); rnew := ShallowCopy(ri); si_1 := x^0; si := 0*x; snew := 0*x; ti_1 := 0*x; ti := x^0; sigma := x^0; while Degree(rnew) >= t do rnew := (ri_1 mod ri); qi := (ri_1 - rnew) / ri; snew := si_1 - qi*si; sigma := ti_1 - qi*ti; ri_1 := ri; ri := rnew; si_1 := si; si := snew; ti_1 := ti; ti := sigma; od; # Chien search for the zeros of error locator polynomial: ErrorLocator := []; null := a^0; ExtSize := q^m-1; for i in [0..ExtSize-1] do if Value(sigma, null) = zero then AddSet(ErrorLocator, (ExtSize-i) mod n); fi; null := null * a; od; # And decode: if Length(ErrorLocator) = 0 then Error("not decodable"); fi; x := Indeterminate(F); if q = 2 then # error locator is not necessary pol := Sum(List([1..Length(ErrorLocator)], i->x^ErrorLocator[i])); return Codeword((r - pol) / GeneratorPol(C), C); else pol := Derivative(sigma); Fp := One(F)*(x^n-1); ErrorEvaluator := List(ErrorLocator,i-> Value(rnew,a^-i)/Value(pol, a^-i)); pol := Sum(List([1..Length(ErrorLocator)], i-> -ErrorEvaluator[i]*x^ErrorLocator[i])); return Codeword((r - pol) / GeneratorPol(C), C); fi; end); ############################################################################# ## #F HammingDecoder( , ) . . . . . . . . . . . . decodes Hamming codes ## ## Generator matrix must have all unit columns ## InstallMethod(HammingDecoder, "method for code, codeword", true, [IsCode, IsCodeword], 0, function(C, r) local H, S,p, F, fac, e,z,x,ind, i,Sf; S := VectorCodeword(Syndrome(C,r)); r := ShallowCopy(VectorCodeword(r)); F := LeftActingDomain(C); p := PositionProperty(S, s->s<>Zero(F)); if p <> fail then z := Z(Characteristic(S[p]))^0; if z = S[p] then fac := One(F); else fac := S[p]/z; fi; Sf := S/fac; H := CheckMat(C); ind := [1..WordLength(C)]; for i in [1..Redundancy(C)] do ind := Filtered(ind, j-> H[i][j] = Sf[i]); od; e := ind[1]; r[e] := r[e]-fac; # correct error fi; x := SolutionMat(GeneratorMat(C), r); return Codeword(x); end); ############################################################################# ## #F GeneralizedReedSolomonDecoderGao( , ) . . decodes ## generalized Reed-Solomon codes ## using S. Gao's method ## InstallMethod(GeneralizedReedSolomonDecoderGao,"method for code, codeword", true, [IsCode, IsCodeword], 0, function(C,vec) local vars,a,b,n,i,g0,g1,geea,u,q,v,r,g,f,F,R,x,k,GcdExtEuclideanUntilBound; if C!.name<>" generalized Reed-Solomon code" then Error("\N This method only applies to GRS codes.\n"); fi; GcdExtEuclideanUntilBound:=function(F,f,g,d,R) ## S Gao's version ## R is a poly ring local vars,u,v,r,q,i,num,x; vars:=IndeterminatesOfPolynomialRing(R); x:=vars[1]; # define local x u:=List([1..3],i->Zero(F)); ## Need u[3] as a temporary variable v:=List([1..3],i->Zero(F)); r:=List([1..3],i->Zero(F)); q:=Zero(F); u[1]:=One(F); u[2]:=Zero(F); v[1]:=Zero(F); v[2]:=One(F); r[2]:=f; r[1]:=g; ### applied with r2=f=g1, r1=g=g0 while DegreeIndeterminate(r[2],x)> d-1 do ### assume Degree(0) < 0. q := EuclideanQuotient(R,r[1],r[2]); r[3]:=EuclideanRemainder(R,r[1],r[2]); u[3]:=u[1] - q*u[2]; v[3]:=v[1] - q*v[2]; r[1]:=r[2]; r[2] :=r[3]; u[1]:=u[2]; u[2] :=u[3]; v[1]:=v[2]; v[2] :=v[3]; od; return([r[2],u[2],v[2]]); end; a:=C!.points; R:=C!.ring; k:=C!.degree; F:=CoefficientsRing(R); b:=VectorCodeword(vec); vars:=IndeterminatesOfPolynomialRing(R); x:=vars[1]; # define local x n:=Length(a); if Size(Set(a)) < n then Error("`Points in 1st vector must be distinct.`\n\n"); fi; g0:=One(F)*Product([1..n],i->x-a[i]); g1:=InterpolatedPolynomial(F,a,b); geea:=GcdExtEuclideanUntilBound(F,g1,g0,(n+k)/2,R); u:=geea[2]; v:=geea[3]; g:=geea[1]; if v=Zero(F) then return("fail"); fi; if v=One(F) then q:=g; r:=Zero(F); else q:=EuclideanQuotient(R,g,v); r:=EuclideanRemainder(R,g,v); fi; if ((r=Zero(F) or LeadingCoefficient(r)=Zero(F)) and (Degree(q) < k)) then f:=q; else f:="fail"; ## this does not occur if num errors < (mindist - 1)/2 fi; if f="fail" then return(f); else return Codeword(List(a,i->Value(f,i)),C); fi; end); ########################################################## # # Input: Pts=[x1,..,xn], l = highest power, # L=[h_1,...,h_ell] is list of powers # r=[r1,...,rn] is received vector # Output: Computes matrix described in Algor. 12.1.1 in [JH] # GRSLocatorMat:=function(r,Pts,L) local a,j,b,ell,DiagonalPower,add_col_mat,add_row_mat,block_matrix; add_col_mat:=function(M,N) ## "AddColumnsToMatrix" #N is a matrix with same rowdim as M #the fcn adjoins N to the end of M local i,j,S,col,NT; col:=MutableTransposedMat(M); #preserves M NT:=MutableTransposedMat(N); #preserves N for j in [1..DimensionsMat(N)[2]] do Add(col,NT[j]); od; return MutableTransposedMat(col); end; add_row_mat:=function(M,N) ## "AddRowsToMatrix" #N is a matrix with same coldim as M #the fcn adjoins N to the bottom of M local i,j,S,row; row:=ShallowCopy(M);#to preserve M; for j in [1..DimensionsMat(N)[1]] do Add(row,N[j]); od; return row; end; block_matrix:=function(L) ## slightly simpler syntax IMHO than "BlockMatrix" # L is an array of matrices of the form # [[M1,...,Ma],[N1,...,Na],...,[P1,...,Pa]] # returns the associated block matrix local A,B,i,j,m,n; n:=Length(L[1]); m:=Length(L); A:=[]; if n=1 then if m=1 then return L[1][1]; fi; A:=L[1][1]; for i in [2..m] do A:=add_row_mat(A,L[i][1]); od; return A; fi; for j in [1..m] do A[j]:=L[j][1]; od; for j in [1..m] do for i in [2..n] do A[j]:=add_col_mat(A[j],L[j][i]); od; od; B:=A[1]; for j in [2..m] do B:= add_row_mat(B,A[j]); od; return B; end; DiagonalPower:=function(r,j) local R,n,i; n:=Length(r); R:=DiagonalMat(List([1..n],i->r[i]^j)); return R; end; ell:=Length(L); a:=List([1..ell],j->DiagonalPower(r,(j-1))*VandermondeMat(Pts,L[j])); b:=List([1..ell],j->[1,j,a[j]]); return (block_matrix([a])); end; ############################################################## # # # Input: Pts=[x1,..,xn], # L=[h_1,...,h_ell] is list of powers # r=[r1,...,rn] is received vector # # Compute kernel of matrix in alg 12.1.1 in [JH]. # Choose a basis vector in kernel. # Output: the lists of coefficients of the polynomial Q(x,y) in alg 12.1.1. # GRSErrorLocatorCoeffs:=function(r,Pts,L) local a,j,b,vec,e,QC,i,lengths,ker,ell; ell:=Length(L); e:=GRSLocatorMat(r,Pts,L); ker:=TriangulizedNullspaceMat(TransposedMat(e)); if ker=[] then Print("Decoding fails.\n"); return []; fi; vec:=ker[Length(ker)]; QC:=[]; lengths:=List([1..ell],i->Sum(List([1..i],j->1+L[j]))); QC[1]:=List([1..lengths[1]],j->vec[j]); for i in [2..ell] do QC[i]:=List([(lengths[i-1]+1)..lengths[i]],j->vec[j]); od; return QC; end; ####################################################### # # Input: List L of coefficients ell, R = F[x] # Pts=[x1,..,xn], # Output: list of polynomials Qi as in Algor. 12.1.1 in [JH] # GRSErrorLocatorPolynomials:=function(r,Pts,L,R) local q,p,i,ell; ell:=Length(L)+1; ## ?? Length(L) instead ?? q:=GRSErrorLocatorCoeffs(r,Pts,L); if q=[] then Print("Decoding fails.\n"); return []; fi; p:=[]; for i in [1..Length(q)] do p:=Concatenation(p,[CoefficientToPolynomial(q[i],R)]); od; return p; end; ########################################################## # # Input: List L of coefficients ell, R = F[x] # Pts=[x1,..,xn], # Output: interpolating polynomial Q as in Algor. 12.1.1 in [JH] # GRSInterpolatingPolynomial:=function(r,Pts,L,R) local poly,i,Ry,F,y,Q,ell; ell:=Length(L)+1; ## ?? Length(L) instead ?? ##### not used ??? Q:=GRSErrorLocatorPolynomials(r,Pts,L,R); if Q=[] then Print("Decoding fails.\n"); return 0; fi; F:=CoefficientsRing(R); y:=IndeterminatesOfPolynomialRing(R)[2]; # Ry:=PolynomialRing(F,[y]); # poly:=CoefficientToPolynomial(Q,Ry); poly:=Sum(List([1..Length(Q)],i->Q[i]*y^(i-1))); return poly; end; ############################################################################# ## #F GeneralizedReedSolomonDecoder( , ) . . decodes ## generalized Reed-Solomon codes ## using the interpolation algorithm ## InstallMethod(GeneralizedReedSolomonDecoder,"method for code, codeword", true, [IsCode, IsCodeword], 0, function(C,vec) local v,R,k,P,z,F,f,s,t,L,n,Qpolys,vars,x,c,y; v:=VectorCodeword(vec); R:=C!.ring; P:=C!.points; k:=C!.degree; F:=CoefficientsRing(R); vars:=IndeterminatesOfPolynomialRing(R); x:=vars[1]; #y:=vars[2]; n:=Length(v); t:=Int((n-k)/2); L:=[n-1-t,n-t-k]; Qpolys:=GRSErrorLocatorPolynomials(v,P,L,R); f:=-Qpolys[2]/Qpolys[1]; c:=List(P,s->Value(f,[x],[s])); return Codeword(c,n,F); end); ############################################################################# ## #F GeneralizedReedSolomonListDecoder( , , ) . . ell-list decodes ## generalized Reed-Solomon codes ## using M. Sudan's algorithm ## ## ## Input: v is a received vector (a GUAVA codeword) ## C is a GRS code ## ell>0 is the length of the decoded list (should be at least ## 2 to beat GeneralizedReedSolomonDecoder ## or Decoder with the special method of interpolation decoding) ## InstallMethod(GeneralizedReedSolomonListDecoder,"method for code, codeword, integer", true, [IsCode, IsCodeword, IsInt], 0, function(C,v,ell) local f,h,g,x,R,R2,L,F,t,i,c,Pts,k,n,tau,Q,divisorsf,div, CodewordList,p,vars,y,degy, divisorsdeg1; R:=C!.ring; F:=CoefficientsRing(R); vars:=IndeterminatesOfPolynomialRing(R); x:=vars[1]; Pts:=C!.points; n:=Length(Pts); k:=C!.degree; tau:=Int((n-k)/2); L:=List([0..ell],i->n-tau-1-i*(k-1)); y:=X(F,vars);; R2:=PolynomialRing(F,[x,y]); vars:=IndeterminatesOfPolynomialRing(R2); Q:=GRSInterpolatingPolynomial(v,Pts,L,R2); divisorsf:=DivisorsMultivariatePolynomial(Q,R2); divisorsdeg1:=[]; CodewordList:=[]; for div in divisorsf do degy:=DegreeIndeterminate(div,y); if degy=1 then ######### div=h*y+g g:=Value(div,vars,[x,Zero(F)]); h:=Derivative(div,y); if DegreeIndeterminate(h,x)=0 then f:= -h^(-1)*g*y^0; divisorsdeg1:=Concatenation(divisorsdeg1,[f]); if g=Zero(F)*x then c:=List(Pts,p->Zero(F)); else c:=List(Pts,p->Value(f,[x,y],[p,Zero(F)])); fi; CodewordList:=Concatenation(CodewordList,[Codeword(c,C)]); fi; fi; od; return CodewordList; end); ############################################################################# ## #F NearestNeighborGRSDecodewords( , , ) . . . finds all ## generalized Reed-Solomon codewords ## within distance from v ## *and* the associated polynomial, ## using "brute force" ## ## Input: v is a received vector (a GUAVA codeword) ## C is a GRS code ## dist>0 is the distance from v to search ## Output: a list of pairs [c,f(x)], where wt(c-v)Value(f,[x],[p]))); if WeightCodeword(r-c) <= dist then NearbyWords:=Concatenation(NearbyWords,[[c,f]]); fi; od; return NearbyWords; end); ############################################################################# ## #F NearestNeighborDecodewords( , , ) . . . finds all ## codewords in a linear code C ## within distance from v ## using "brute force" ## ## Input: v is a received vector (a GUAVA codeword) ## C is a linear code ## dist>0 is the distance from v to search ## Output: a list of c in C, where wt(c-v), ) . . . decodes *binary* LDPC codes using bit-flipping ## or Gallager hard-decision ## ** often fails to work if C is not LDPC ** ## ## Input: v is a received vector (a GUAVA codeword) ## C is a binary LDPC code ## Output: a c in C, where wt(c-v)0*Z(2) then I:=Concatenation(I,[i]); fi; od; return I; end; checksetI:=function(H,u) return checksetJ(TransposedMat(H),u); end; BFcounter:=function(I,s) local S,i; S:=Codeword(List(I, i -> List(s)[i])); return WeightCodeword(S); end; bit_flip:=function(H,v) local i,j,s,q,n,k,rho,gamma,I_j,tH; tH:=TransposedMat(H); q:=ShallowCopy(v); s:=H*q; n:=Length(H[1]); k:=n-Length(H); rho:=Length(Support(Codeword(H[1]))); #gamma:= Length(Support(Codeword(TransposedMat(H)[1]))); for j in [1..n] do gamma:= Length(Support(Codeword(tH[j]))); I_j:=checksetI(H,j); if BFcounter(I_j,s)>gamma/2 then q[j]:=q[j]+Z(2); break; fi; od; return Codeword(q); end; InstallMethod(BitFlipDecoder,"method for code, codeword, integer", true, [IsCode, IsCodeword], 0, function(C,v) local H,r,qnew,q; H:=CheckMat(C); r:=ShallowCopy(v); if Length(Support(Codeword(H*v)))=0 then return v; fi; q:=bit_flip(H,r); if Length(Support(Codeword(H*q)))=0 then return Codeword(q); fi; while Length(Support(Codeword(H*q)))r do qnew:=q; r:=q; q:=bit_flip(H,qnew); Print(" ",Length(Support(Codeword(H*q)))," ",Length(Support(Codeword(H*r))),"\n"); od; return Codeword(r); end); guava-3.6/lib/codecr.gi0000644017361200001450000020405011026723452014673 0ustar tabbottcrontab############################################################################# ## #A codecr.gi GUAVA library Reinald Baart #A Jasper Cramwinckel #A Erik Roijackers #A Eric Minkes ## ## This file contains functions for calculating with code covering radii ## #H @(#)$Id: codecr.gi,v 1.6 2003/02/12 03:49:16 gap Exp $ ## ## changes 10-2004: ## 1. CalculateLinearCodeCoveringRadius changed to a slightly faster ## algorithm. ## 2. minor bug fix for ExhaustiveSearchCoveringRadius ## 2. minor bug fix for IncreaseCoveringRadiusLowerBound ## Revision.("guava/lib/codecr_gi") := "@(#)$Id: codecr.gi,v 1.6 2003/02/12 03:49:16 gap Exp $"; ######################################################################## ## #F CoveringRadius( ) ## ## Return the covering radius of ## In case a special algorithm for this code exist, call ## it first. ## ## Not useful for large codes. ## ## That's why I changed it, see the manual for more details ## -- eric minkes. ## ## Calculation is done in this function, instead of in the method, so that ## users can override the redundancy restriction if desired. Note that ## this does not check the trivial cases checked in the method, CalculateLinearCodeCoveringRadius := function( code ) local H, wts,CLs,i,rho; if Redundancy(code) = 0 then return 0; else # #return Maximum( List( SyndromeTable( code ), i -> Weight( i[ 1 ] ) ) ); # (old version had line above in place of next 5) H:=CheckMat(code); CLs:=CosetLeadersMatFFE(H,LeftActingDomain(code)); wts:=List([1..Length(CLs)],i->WeightVecFFE(CLs[i])); rho:=Maximum(wts); return rho; fi; end; InstallMethod(CoveringRadius, "method for linear code", true, [IsLinearCode], 0, function( code ) # call the special algorithm for this code, if it exists if HasSpecialCoveringRadius( code ) then code!.boundsCoveringRadius := SpecialCoveringRadius( code ) ( code ); fi; if Length( BoundsCoveringRadius( code ) ) = 1 then return code!.boundsCoveringRadius[ 1 ]; else if Redundancy( code ) < 20 then code!.boundsCoveringRadius := [ CalculateLinearCodeCoveringRadius( code ) ]; else ##LR - this sets CR to an interval InfoCoveringRadius( "CoveringRadius: warning, the covering radius of \n", "this code cannot be computed straightforward. \n", "Try to use IncreaseCoveringRadiusLowerBound( ).\n", "(see the manual for more details).\n", "The covering radius of lies in the interval:\n" ); return BoundsCoveringRadius( code ); fi; fi; return code!.boundsCoveringRadius[ 1 ]; end); # For small codes in large spaces, this may take a very long time InstallMethod(CoveringRadius, "method for unrestricted code", true, [IsCode], 0, function( code ) local Code, vector, d, curmax, n, q, one, count, size, t, i, j, zero, large, gen; if IsLinearCode( code ) then return CoveringRadius( code ); elif Length(code!.boundsCoveringRadius) = 1 then return code!.boundsCoveringRadius[1]; elif HasSpecialCoveringRadius( code ) then code!.boundsCoveringRadius := SpecialCoveringRadius( code ) ( code ); else q := Size(LeftActingDomain(code)); n := WordLength(code); size := Size(code); one := One(LeftActingDomain(code)); zero := Zero(LeftActingDomain(code)); Code := VectorCodeword(AsSSortedList(code)); vector := List([1..n], i-> zero); large := one; gen := Z(q); curmax := n; for t in Code do d := DistanceVecFFE(t, vector); if d < curmax then curmax := d; fi; od; for count in [2..q^n] do t := n; while vector[t] = large do vector[t] := zero; t := t - 1; od; if vector[t] = zero then vector[t] := gen; else vector[t] := vector[t] * gen; fi; t := 1; repeat d := DistanceVecFFE(Code[t], vector); t := t + 1; until d <= curmax or t > size; if d > curmax then curmax := n; for t in Code do d := DistanceVecFFE(t, vector); if d < curmax then curmax := d; fi; od; fi; od; code!.boundsCoveringRadius := [curmax]; fi; return code!.boundsCoveringRadius[1]; end); ######################################################################## ## #F BoundsCoveringRadius( ) ## ## Find a lower and an upper bound for the covering radius of code. ## InstallMethod(BoundsCoveringRadius, "method for unrestricted code", true, [IsCode], 0, function(code) local bcr; if HasCoveringRadius(code) then code!.boundsCoveringRadius := [CoveringRadius(code)]; elif not IsBound(code!.boundsCoveringRadius) then bcr := [GeneralLowerBoundCoveringRadius(code) .. GeneralUpperBoundCoveringRadius(code)]; if Length(bcr) = 0 then code!.boundsCoveringRadius := [0,WordLength(code)]; else code!.boundsCoveringRadius := bcr; fi; fi; return code!.boundsCoveringRadius; end); ######################################################################## ## #F SetBoundsCoveringRadius( , ) ## SetBoundsCoveringRadius( , ) ## ## Enable the user to set the covering radius (or bounds) him/herself. ## Used to be SetCoveringRadius, before GAP4. InstallOtherMethod(SetBoundsCoveringRadius, "method for unrestricted code, integer", true, [IsCode, IsInt], 0, function(code, cr) SetCoveringRadius(code, cr); code!.boundsCoveringRadius := [cr]; end); InstallMethod(SetBoundsCoveringRadius, "method for unrestricted code, interval", true, [IsCode, IsVector], 0, function(code, cr) code!.boundsCoveringRadius := IntersectionSet( BoundsCoveringRadius( code ), cr ); if Length( code!.boundsCoveringRadius ) = 0 then code!.boundsCoveringRadius := cr; fi; IsRange( code!.boundsCoveringRadius ); if Length(code!.boundsCoveringRadius) = 1 then SetCoveringRadius(code, code!.boundsCoveringRadius[1]); fi; end); ######################################################################## ## #F IncreaseCoveringRadiusLowerBound( ## [, ] [, ] ) ## ## small bug fix 10-2004 ## InstallMethod(IncreaseCoveringRadiusLowerBound, "method for unrestricted code, stop distance, start vector", true, [IsCode, IsInt, IsVector], 0, function ( code, stopdistance, startvector ) local n, # length of the code k, # dimension of the code genmat, # generator matrix of the code field, # field of the code q, # the size of field fieldels, # elements of field fieldzero, # zero element of field nonzeroels, # non-zero elements of field boundscr, # current bounds on the covering radius lb, # current achieved lower bound current, # the element of field^n that we are # currently checking cwcurrent, # current in Codeword form distcurrenttocode, # the distance of current to the code currentchanged, # did we change current during the loop ? counterchanged, # number of changes we have made so far countertotal, # number of iterations we have made so far h, i, j, # indexes to make the first slice slice, # the number of the current slice numberofslices, # the elements of the code are handled in # slices of 2^10 elements slicedim, # the dimension of a slice slicesize, # the size of a slice ( q^slicedim ) index, # to enumerate the codewords, the # correct generator must be added # index contains the generator number satisfied, # are we satisfied with the results ? words, # a list of codewords in the current slice wordslist0, # a list of codewords with distance # distcurrentocode + 0 from current wordslist1, # a list of codewords with distance # distcurrentocode + 1 from current word, # a index for wordslist* coord, # the coordinate where current will # be changed staychance, # chance that we stay at the same distance downchance, # chance that we move closer to the code bestdist, # best distance reached so far bestword, # the corresponding word newelement, # the new element for current[ coord ] newdist; # the new distance of the changed current # to the code # extract some code parameters n := WordLength( code ); if IsLinearCode( code ) then k := Dimension( code ); fi; field := LeftActingDomain( code ); q := Size( field ); # if we cannot compute the minimum distance of the code, # this algorithm will not be of much help either. # is a safe place to start searching lb := IntFloor( MinimumDistance( code ) / 2 ); boundscr := BoundsCoveringRadius( code ); if lb > boundscr[ 1 ] then code!.boundsCoveringRadius := Filtered( boundscr, n -> lb <= n ); IsRange( code!.boundsCoveringRadius ); boundscr := code!.boundsCoveringRadius; fi; if Length( boundscr ) = 1 then # if there is nothing to compute, # then just return the covering radius return boundscr[ 1 ]; fi; # starting vector # current := ShallowCopy(VectorCodeword( Codeword( startvector ) )); # (old version has above in place of below) # current := Codeword( startvector ); distcurrenttocode := MinimumDistance( code, Codeword( current) ); bestdist := distcurrenttocode; bestword := ShallowCopy( current ); # initialise some parameters and useful variables fieldels := AsSSortedList( field ); fieldzero := Zero(field); nonzeroels := Difference( fieldels, [ fieldzero ] ); if IsLinearCode( code ) then genmat := GeneratorMat( code ); # try to make the size of a group codewords to be about # CRMemSize slicedim := LogInt( CRMemSize, q ); numberofslices := Maximum( 1, q^( k-slicedim ) ); slicesize := q^slicedim; fi; satisfied := false; currentchanged := true; counterchanged := 0; countertotal := 0; staychance := 10; # maybe make arguments of these downchance := 1; # the words array contains all codewords generated by # genmat[ 1 ] ... genmat[ slicedim ] ( or genmat[ k ], if # slicedim > k ) if IsLinearCode( code ) then words := [ NullVector( n, field ) ]; for i in [ 1 .. Minimum( slicedim, k ) ] do for j in [ 1 .. q^( i-1 ) ] do for h in [ 1 .. q-1 ] do Add( words, words[ j ] + genmat[ i ] * nonzeroels[ h ] ); od; od; od; else # if the code is non-linear, the # elements field is obligatory, # so it fits in memory. # no need for all the hassle as in the linear case, # but the disadvantage is that we can't handle # large non-linear codes. # but then again, GUAVA can't handle these anyway. words := VectorCodeword( AsSSortedList( code ) ); fi; # start algorithm, stop when we are satisfied with the results # (either we have a coset leader of weigth , # or lb = ub) while not satisfied do countertotal := countertotal + 1; if countertotal mod 1000 = 0 then InfoCoveringRadius( "Number of runs: ", countertotal, " best distance so far: ", bestdist, "\n" ); fi; if currentchanged then # current word has changed, generate three lists of # codewords that have distance distcurrenttocode, # distcurrenttocode + 1 and distcurrenttocode + 2 cwcurrent := Codeword( current ); if distcurrenttocode > bestdist then bestdist := distcurrenttocode; bestword := ShallowCopy( current ); InfoCoveringRadius( "New best distance: ", bestdist, "\n" ); fi; wordslist0 := []; wordslist1 := []; if IsLinearCode( code ) then for slice in [ 0 .. numberofslices-1 ] do if slice > 0 then i := k - slicedim - 1; while EuclideanRemainder( slice, q^i ) <> 0 do i := i - 1; od; index := slicedim + i + 1; words := List( words, x -> x + genmat[ index ] ); fi; Append( wordslist0, Filtered( words, x -> DistanceVecFFE( x, current ) = distcurrenttocode ) ); Append( wordslist1, Filtered( words, x -> DistanceVecFFE( x, current ) = distcurrenttocode + 1 ) ); od; else wordslist0 := Filtered( words, x-> DistanceVecFFE( x, current ) = distcurrenttocode ); wordslist1 := Filtered( words, x-> DistanceVecFFE( x, current ) = distcurrenttocode + 1 ); fi; currentchanged := false; counterchanged := counterchanged + 1; if EuclideanRemainder( counterchanged, 100 ) = 0 then InfoCoveringRadius( "Number of changes: ", counterchanged, "\n" ); fi; fi; # pick a coordinate # the algorithm will look what happens if we change this coordinate coord := Random( [ 1 .. n ] ); # the possible new element for this coordinate # is picked at random from the field elements newelement := Random( Difference( fieldels, [ current[ coord ] ] ) ); # check the new word against the codewords that are # at distance distcurrenttocode + 0 from current # the result can be: # 1) the distance to all words in wordslist0 is # one more than distcurrenttocode # (this is the situation that we hope for) # 2) there is at least one word in wordslist0 that # has distance distcurrenttocode - 1 to the # new current # 3) if the field is not GF(2): # there is a word in wordslist0 that stays # at the same distance newdist := distcurrenttocode + 1; for word in wordslist0 do if word[ coord ] <> current[ coord ] then if word[ coord ] = newelement then newdist := distcurrenttocode - 1; else newdist := distcurrenttocode; fi; fi; od; # only check against other words if the previous tests # did not fail if newdist > distcurrenttocode then # check the new word against the codewords that are at # distance distcurrenttocode + 1 from current # again, two results are possible # 1) all words in wordslist1 are at distance # distcurrenttocode + 1 or + 2 (this is good) # 2) there is a word in wordslist1 that now has # distance distcurrenttocode to current # this means we did not find an improvement for word in wordslist1 do if word[ coord ] = newelement then newdist := distcurrenttocode; fi; od; fi; if newdist > distcurrenttocode then # we found a new coset leader with larger weight # now change current current[ coord ] := newelement; currentchanged := true; distcurrenttocode := newdist; # also check whether the covering radius lower bound # can be increased, this is what the whole # algorithm is about ! if distcurrenttocode > boundscr[ 1 ] then # write directly to the code to make the change # permanent, even if the user interrupted us code!.boundsCoveringRadius := Filtered( boundscr, x -> x >= distcurrenttocode ); # make it a range together if possible IsRange( code!.boundsCoveringRadius ); boundscr := code!.boundsCoveringRadius; # maybe we have reached the upper bound # then we can stop altogether ! if Length( boundscr ) = 1 then satisfied := true; fi; fi; elif newdist = distcurrenttocode then # the change to the word did not change the # distance to the code if Random( [ 1 .. 100 ] ) <= staychance then current[ coord ] := newelement; currentchanged := true; fi; else # make it a 1 in 100 chance to get closer anyway # because we do not want to get stuck in a # suboptimal coset if Random( [ 1 .. 100 ] ) <= downchance then current[ coord ] := newelement; currentchanged := true; distcurrenttocode := newdist; fi; fi; # maybe the distance of current to the code # is high enough for the user # then we should stop if distcurrenttocode = stopdistance then satisfied := true; fi; od; # return the new covering radius bounds, and a coset leader # that has weight equal to the lower bound return rec( boundsCoveringRadius := code!.boundsCoveringRadius, cosetLeader := Codeword( current ) ); end); InstallOtherMethod(IncreaseCoveringRadiusLowerBound, "method for unrestricted code, starting vector", true, [IsCode, IsVector], 0, function( code, startvector ) # stopdistance = -1 is the default: never stop, unless the lower # bound meets the upper bound return IncreaseCoveringRadiusLowerBound( code, -1, startvector ); end); InstallOtherMethod(IncreaseCoveringRadiusLowerBound, "method for unrestricted code, stopdistance", true, [IsCode, IsInt], 0, function( code, stopdistance ) local lb, current, distcurrenttocode; lb := IntFloor( MinimumDistance( code ) / 2 ); current := RandomVector( WordLength( code ), Random( [0..WordLength( code )] ), LeftActingDomain( code )); distcurrenttocode := MinimumDistance( code, Codeword(current) ); while distcurrenttocode < lb do current := RandomVector( WordLength( code ), Random( [0..WordLength( code )] ), LeftActingDomain( code )); distcurrenttocode := MinimumDistance( code, Codeword(current) ); od; return IncreaseCoveringRadiusLowerBound( code, -1, current); end); InstallOtherMethod(IncreaseCoveringRadiusLowerBound, "method for unrestricted code", true, [IsCode], 0, function( code ) local lb, current, distcurrenttocode; lb := IntFloor( MinimumDistance( code ) / 2 ); current := RandomVector( WordLength( code ), Random( [0..WordLength( code )] ), LeftActingDomain( code )); # distcurrenttocode := MinimumDistance( code, current ); # (old version had above line) distcurrenttocode := MinimumDistance( code, Codeword(current) ); while distcurrenttocode < lb do current := RandomVector( WordLength( code ), Random( [0..WordLength( code )] ), LeftActingDomain( code )); distcurrenttocode := MinimumDistance( code, Codeword(current) ); od; return IncreaseCoveringRadiusLowerBound( code, -1, current); end); ######################################################################## ## #F ExhaustiveSearchCoveringRadius( ) ## ## Try to compute the covering radius. Don't compute all coset ## leaders, but increment the lower bound as soon as a coset leader ## is found. ## InstallMethod(ExhaustiveSearchCoveringRadius, "unrestricted code, boolean stopsoon", true, [IsCode,IsBool], 0, function(C, stopsoon) if IsLinearCode(C) then return ExhaustiveSearchCoveringRadius(C, stopsoon); else Error("ExhaustiveSearchCoveringRadius: must be a linear code"); fi; end); InstallMethod(ExhaustiveSearchCoveringRadius, "linear code, boolean stopsoon", true, [IsLinearCode, IsBool], 0, function(code, stopsoon) local k, n, i, j, lastone, zerofound, IsCosetLeader, lb, we, wd, vc, cont, codewords, leaderfound, allexamined, supp, elmsC, elms, len, one, zero, boundscr; IsCosetLeader := function( codewords, len, word, wt, one ) local i, check, cw, wcw, j; check := true; i := 1; while i <= len and check do cw := codewords[ i ] + word; wcw := 0; for j in [ 1 .. Length( cw ) ] do if cw[ j ] = one then wcw := wcw + 1; fi; od; if wcw < wt then check := false; fi; i := i + 1; od; return check; end; if Size( LeftActingDomain( code ) ) <> 2 then Error( "CoveringRadiusSearch: must be a binary code" ); fi; boundscr := BoundsCoveringRadius( code ); if Length( boundscr ) = 1 then return boundscr[ 1 ]; fi; lb := boundscr[ 1 ]; n := WordLength( code ); wd := WeightDistribution( code ); elms := []; for i in [ 0 .. n ] do if wd[ i + 1 ] > 0 then elms[ i + 1 ] := ShallowCopy(AsSSortedList( ConstantWeightSubcode( code, i ) )); fi; od; for i in [ 1 .. n+1 ] do if IsBound( elms[ i ] ) then for j in [ 1 .. Length( elms[ i ] ) ] do elms[ i ][ j ] := VectorCodeword( elms[ i ][ j ] ); #mutable error on: # C:=RandomLinearCode(10,5,GF(2)); # ExhaustiveSearchCoveringRadius(C,true); od; fi; od; # try to find a coset leader with weight > lb # if found, increase lb one := One(GF(2)); zero := Zero(GF(2)); cont := true; while cont do k := BoundsCoveringRadius(code)[ 1 ] + 1; InfoCoveringRadius( "Trying ", k, " ...\n" ); codewords := [ NullVector(n, GF(2) ) ]; for i in [ 1 .. Minimum( n, 2 * k - 1) ] do if wd[ i + 1 ] <> 0 then Append( codewords, elms[ i + 1 ] ); fi; od; len := Length( codewords ); vc := NullVector( n, GF(2) ); for i in [ 1 .. k ] do vc[ i ] := one; od; lastone := k; allexamined := false; leaderfound := false; while not leaderfound and not allexamined do if not IsCosetLeader( codewords, len, vc, k, one ) then if lastone = n then zerofound := false; i := lastone - 1; while i > n - k and vc[ i ] = one do i := i - 1; od; if i = n - k then allexamined := true; else j := i; i := i + 1; while vc[ j ] = zero do j := j - 1; od; vc[ j ] := zero; vc[ j + 1 ] := one; j := j + 2; if i <> j then while i <= lastone do vc[ j ] := one; vc[ i ] := zero; i := i + 1; j := j + 1; od; lastone := j - 1; else lastone := n; fi; fi; else vc[ lastone ] := zero; lastone := lastone + 1; vc[ lastone ] := one; fi; else leaderfound := true; fi; od; if leaderfound then code!.boundsCoveringRadius := Filtered( code!.boundsCoveringRadius, x -> x >= k ); if stopsoon then cont := false; fi; else code!.boundsCoveringRadius := [ code!.boundsCoveringRadius[ 1 ] ]; cont := false; fi; od; IsRange( code!.boundsCoveringRadius ); return( code!.boundsCoveringRadius ); end); InstallOtherMethod(ExhaustiveSearchCoveringRadius, "unrestricted code", true, [IsCode], 0, function(C) return ExhaustiveSearchCoveringRadius(C, true); end); ######################################################################## ## #F CoveringRadiusLowerBoundTable ## CoveringRadiusLowerBoundTable := [ [ 3, 2, , , , , , , , , # n = 13 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 3, 3, , , , , , , , , # n = 14 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 4, 3, 3, , , , , , , , # n = 15 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 4, 4, 3, 3, , , , , , , # n = 16 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 4, 4, 3, 3, 3, , , , , , # n = 17 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 5, 4, 4, 3, 3, 3, , , , , # n = 18 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 5, 4, 4, 4, 3, 3, 2, , , , # n = 19 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 6, 5, 4, 4, 4, 3, 3, 2, , , # n = 20 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 6, 5, 5, 4, 4, 3, 3, 3, , , # n = 21 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 6, 6, 5, 5, 4, 4, 3, 3, 3, , # n = 22 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 7, 6, 5, 5, 4, 4, 3, 3, 3, 3, # n = 23 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 7, 6, 6, 5, 5, 4, 4, 3, 3, 3, # n = 24 3, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, # n = 25 3, 2, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 8, 7, 7, 6, 6, 5, 5, 4, 4, 3, # n = 26 3, 3, 2, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 8, 8, 7, 6, 6, 5, 5, 4, 4, 4, # n = 27 3, 3, 3, 2, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 9, 8, 7, 7, 6, 6, 5, 5, 4, 4, # n = 28 4, 3, 3, 3, 2, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 9, 8, 8, 7, 7, 6, 6, 5, 5, 4, # n = 29 4, 4, 3, 3, 3, 2, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 9, 9, 8, 7, 7, 6, 6, 5, 5, 5, # n = 30 4, 4, 4, 3, 3, 3, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 10, 9, 8, 8, 7, 7, 6, 6, 5, 5, # n = 31 5, 4, 4, 3, 3, 3, 3, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 10, 9, 9, 8, 8, 7, 7, 6, 6, 5, # n = 32 5, 4, 4, 4, 3, 3, 3, 3, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 11, 10, 9, 9, 8, 7, 7, 6, 6, 6, # n = 33 5, 5, 4, 4, 4, 3, 3, 3, 3, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 11, 10, 10, 9, 8, 8, 7, 7, 6, 6, # n = 34 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, , , , , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 11, 11, 10, 9, 9, 8, 8, 7, 7, 6, # n = 35 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, , , , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 12, 11, 10, 10, 9, 9, 8, 8, 7, 7, # n = 36 6, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, , , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 12, 11, 11, 10, 9, 9, 8, 8, 7, 7, # n = 37 6, 6, 6, 5, 5, 4, 4, 4, 4, 3, 3, 3, 2, , , , , , , , , , , , , , , , , , , , , , , , , , ], [ 13, 12, 11, 10, 10, 9, 9, 8, 8, 7, # n = 38 7, 6, 6, 6, 5, 5, 4, 4, 4, 3, 3, 3, 3, 2, , , , , , , , , , , , , , , , , , , , , , , , , ], [ 13, 12, 12, 11, 10, 10, 9, 9, 8, 8, # n = 39 7, 7, 6, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3, 2, , , , , , , , , , , , , , , , , , , , , , , , ], [ 14, 13, 12, 11, 11, 10, 9, 9, 8, 8, # n = 40 7, 7, 7, 6, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3, 2, , , , , , , , , , , , , , , , , , , , , , , ], [ 14, 13, 12, 12, 11, 10, 10, 9, 9, 8, # n = 41 8, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3, 2, , , , , , , , , , , , , , , , , , , , , , ], [ 14, 14, 13, 12, 11, 11, 10, 10, 9, 9, # n = 42 8, 8, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3, 2, , , , , , , , , , , , , , , , , , , , , ], [ 15, 14, 13, 12, 12, 11, 10, 10, 9, 9, # n = 43 8, 8, 7, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3, 2, , , , , , , , , , , , , , , , , , , , ], [ 15, 14, 14, 13, 12, 11, 11, 10, 10, 9, # n = 44 9, 8, 8, 7, 7, 7, 6, 6, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, , , , , , , , , , , , , , , , , , , , ], [ 16, 15, 14, 13, 12, 12, 11, 11, 10, 10, # n = 45 9, 9, 8, 8, 7, 7, 7, 6, 6, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, , , , , , , , , , , , , , , , , , , ], [ 16, 15, 14, 14, 13, 12, 12, 11, 11, 10, # n = 46 9, 9, 8, 8, 8, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, , , , , , , , , , , , , , , , , , ], [ 16, 16, 15, 14, 13, 13, 12, 11, 11, 10, # n = 47 10, 9, 9, 8, 8, 8, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3, 2, , , , , , , , , , , , , , , , , ], [ 17, 16, 15, 14, 14, 13, 12, 12, 11, 11, # n = 48 10, 10, 9, 9, 8, 8, 7, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3, 2, , , , , , , , , , , , , , , , ], [ 17, 16, 16, 15, 14, 13, 13, 12, 12, 11, # n = 49 11, 10, 9, 9, 9, 8, 8, 7, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3, 2, , , , , , , , , , , , , , , ], [ 18, 17, 16, 15, 14, 14, 13, 13, 12, 11, # n = 50 11, 10, 10, 9, 9, 8, 8, 8, 7, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3, 2, , , , , , , , , , , , , , ], [ 18, 17, 16, 16, 15, 14, 13, 13, 12, 12, # n = 51 11, 11, 10, 10, 9, 9, 8, 8, 8, 7, 7, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3, 2, , , , , , , , , , , , , ], [ 19, 18, 17, 16, 15, 15, 14, 13, 13, 12, # n = 52 12, 11, 11, 10, 10, 9, 9, 8, 8, 8, 7, 7, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3, 2, , , , , , , , , , , , ], [ 19, 18, 17, 16, 16, 15, 14, 14, 13, 12, # n = 53 12, 11, 11, 10, 10, 9, 9, 9, 8, 8, 7, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, , , , , , , , , , , ], [ 19, 18, 18, 17, 16, 15, 15, 14, 13, 13, # n = 54 12, 12, 11, 11, 10, 10, 9, 9, 9, 8, 8, 7, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, , , , , , , , , , ], [ 20, 19, 18, 17, 16, 16, 15, 14, 14, 13, # n = 55 13, 12, 12, 11, 11, 10, 10, 9, 9, 8, 8, 8, 7, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, , , , , , , , , ], [ 20, 19, 18, 18, 17, 16, 15, 15, 14, 14, # n = 56 13, 12, 12, 11, 11, 10, 10, 10, 9, 9, 8, 8, 8, 7, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, , , , , , , , ], [ 21, 20, 19, 18, 17, 16, 16, 15, 14, 14, # n = 57 13, 13, 12, 12, 11, 11, 10, 10, 9, 9, 9, 8, 8, 7, 7, 7, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, , , , , , , ], [ 21, 20, 19, 18, 18, 17, 16, 15, 15, 14, # n = 58 14, 13, 13, 12, 12, 11, 11, 10, 10, 9, 9, 9, 8, 8, 7, 7, 7, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, , , , , , ], [ 22, 21, 20, 19, 18, 17, 17, 16, 15, 15, # n = 59 14, 14, 13, 12, 12, 11, 11, 11, 10, 10, 9, 9, 8, 8, 8, 7, 7, 7, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, , , , , ], [ 22, 21, 20, 19, 18, 18, 17, 16, 16, 15, # n = 60 14, 14, 13, 13, 12, 12, 11, 11, 10, 10, 10, 9, 9, 8, 8, 8, 7, 7, 7, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3, 3, 2, , , , ], [ 23, 21, 20, 20, 19, 18, 17, 17, 16, 15, # n = 61 15, 14, 14, 13, 13, 12, 12, 11, 11, 10, 10, 10, 9, 9, 8, 8, 8, 7, 7, 7, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3, 3, 2, , , ], [ 23, 22, 21, 20, 19, 18, 18, 17, 16, 16, # n = 62 15, 15, 14, 14, 13, 12, 12, 12, 11, 11, 10, 10, 9, 9, 9, 8, 8, 8, 7, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 3, 2, , ], [ 23, 22, 21, 20, 20, 19, 18, 17, 17, 16, # n = 63 16, 15, 14, 14, 13, 13, 12, 12, 11, 11, 11, 10, 10, 9, 9, 9, 8, 8, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 3, 2, ], [ 24, 23, 22, 21, 20, 19, 18, 18, 17, 16, # n = 64 16, 15, 15, 14, 14, 13, 13, 12, 12, 11, 11, 10, 10, 10, 9, 9, 8, 8, 8, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 3, 2 ] ]; ######################################################################## ## #F GeneralLowerBoundCoveringRadius( , [, ] ) ## GeneralLowerBoundCoveringRadius( ) ## InstallMethod(GeneralLowerBoundCoveringRadius, "unrestricted code", true, [IsCode], 0, function(code) local n, size, field, listofbounds, max; if IsLinearCode(code) then return GeneralLowerBoundCoveringRadius(code); fi; n := WordLength( code ); size := Size( code ); field := LeftActingDomain( code ); listofbounds := [ LowerBoundCoveringRadiusSphereCovering( n, size, field, false ), ]; if field = GF(2) then Append( listofbounds, [ LowerBoundCoveringRadiusVanWee1( n, size, field, false ), LowerBoundCoveringRadiusVanWee2( n, size, false ), LowerBoundCoveringRadiusCountingExcess( n, size, false ) ] ); if n <= 200 then Append( listofbounds, [ LowerBoundCoveringRadiusEmbedded1( n, size, field, false ), LowerBoundCoveringRadiusEmbedded2( n, size, field, false ) ] ); fi; fi; max := Maximum( listofbounds ); if IsBound(code!.boundsCoveringRadius) then return Maximum ([ max, code!.boundsCoveringRadius[1] ]); else return max; fi; end); InstallMethod(GeneralLowerBoundCoveringRadius, "linear code", true, [IsLinearCode], 0, function (code) local n, size, field, k, listofbounds, return_value; n := WordLength(code); size := Size(code); field := LeftActingDomain(code); listofbounds := [ LowerBoundCoveringRadiusSphereCovering( n, size, field, false ), ]; return_value := -99; # Allows to check whether next set of if # statements actually assign a value if field = GF(2) then k := Dimension( code ); # small codimensions (n-k) if k = n then return_value := 0; elif k = n - 1 then return_value := 1; elif k = n - 2 then return_value := 1; elif k = n - 3 and n >= 7 then return_value := 1; elif k = n - 4 and n >= 5 then if n >= 15 then return_value := 1; else return_value := 2; fi; elif k = n - 5 and n >= 9 then if n >= 31 then return_value := 1; else return_value := 2; fi; elif k = n - 6 then if n >= 63 then return_value := 1; elif n >= 14 then return_value := 2; elif n = 12 then return_value := 3; fi; elif k = n - 7 and n >= 21 and n <= 64 then return_value := 2; elif k = n - 8 and n >= 30 and n <= 64 then return_value := 2; elif k = n - 9 and n >= 44 and n <= 64 then return_value := 2; elif k = 1 then return_value := IntFloor( n/2 ); elif k = 2 then return_value := IntFloor( (n-1)/2 ); elif k = 3 then return_value := IntFloor( (n-2)/2 ); elif k = 4 then return_value := IntFloor( (n-4)/2 ); elif k = 5 then return_value := IntFloor( (n-5)/2 ); fi; # use the table of Cohen, Litsyn, Lobstein and Mattson if return_value < 0 and n >= 13 and n <= 64 and k>=6 and k<= 64 then if IsBound( CoveringRadiusLowerBoundTable[ n - 12 ][ k - 5 ] ) then return_value := CoveringRadiusLowerBoundTable[ n - 12 ][ k - 5 ]; fi; fi; if return_value < 0 then # not in the table. use the bounds listofbounds := [ LowerBoundCoveringRadiusSphereCovering( n, size, field, false ), LowerBoundCoveringRadiusVanWee1( n, size, field, false ), LowerBoundCoveringRadiusVanWee2( n, size, false ), LowerBoundCoveringRadiusCountingExcess( n, size, false ) ]; if n <= 200 then Append( listofbounds, [ LowerBoundCoveringRadiusEmbedded1( n, size, field, false ), LowerBoundCoveringRadiusEmbedded2( n, size, field, false ), ] ); fi; return_value := Maximum( listofbounds ); fi; else # field is not GF(2) listofbounds := [ LowerBoundCoveringRadiusSphereCovering( n, size, field, false ), ]; return_value := Maximum( listofbounds ); fi; if IsBound(code!.boundsCoveringRadius) then return Maximum([return_value, code!.boundsCoveringRadius[1]]); else return return_value; fi; end); InstallOtherMethod(GeneralLowerBoundCoveringRadius, "n, k, field", true, [IsInt, IsInt, IsField], 0, function(n, size, field) local listofbounds; if n < 1 or size < 1 then Error("GeneralLBCR: and must be positive"); fi; listofbounds := [ LowerBoundCoveringRadiusSphereCovering( n, size, field, false ), LowerBoundCoveringRadiusVanWee1( n, size, field, false ), LowerBoundCoveringRadiusEmbedded1( n, size, field, false ), LowerBoundCoveringRadiusEmbedded2( n, size, field, false ) ]; if field = GF(2) then Append( listofbounds, [ LowerBoundCoveringRadiusVanWee2( n, size, false ), LowerBoundCoveringRadiusCountingExcess( n, size, false ) ] ); fi; return Maximum( listofbounds ); end); InstallOtherMethod(GeneralLowerBoundCoveringRadius, "n, size", true, [IsInt, IsInt], 0, function(n, size) return GeneralLowerBoundCoveringRadius(n, size, GF(2)); end); ######################################################################## ## #F LowerBoundCoveringRadiusSphereCovering( , [, ] [, true ] ) ## InstallMethod(LowerBoundCoveringRadiusSphereCovering, "n, r, fieldsize, usage", true, [IsInt, IsInt, IsInt, IsBool], 0, function(n, r, q, usage) local m, lb, ub, tmpcr, tmpsize, t; if n <= 0 then Error("LBCRSphereCovering: must be positive"); fi; if usage = false then # last argument is false, try to find a lower bound for # the covering radius, given length and size of the code, and field m := r; if m <= 0 or m > q^n then Error( "LBCRSphereCovering: must be > 0 and <= q^n" ); fi; # everything is set up. now compute the bound lb := 0; ub := n; while lb <> ub do tmpcr := IntFloor( ( lb + ub ) / 2 ); tmpsize := IntCeiling( q^n / SphereContent( n, tmpcr, q ) ); if tmpsize > m then lb := tmpcr + 1; else ub := tmpcr; fi; od; return ub; else # the last argument is not false # now it is assumed that the first argument is the length # of the code and the second argument is the covering radius # of the code. a lower bound for the minimal size of the # code is returned t := r; if t < 0 or t > n then Error( "LBCRSphereCovering: must be >= 0 and <= " ); fi; return IntCeiling( q^n / SphereContent( n, t, q ) ); fi; end); InstallOtherMethod(LowerBoundCoveringRadiusSphereCovering, "n, r, field, usage", true, [IsInt, IsInt, IsField, IsBool], 0, function(n, r, F, usage) if not IsFinite(F) then Error("LBCRSphereCovering: must be a finite field"); else return LowerBoundCoveringRadiusSphereCovering(n, r, Size(F), usage); fi; end); InstallOtherMethod(LowerBoundCoveringRadiusSphereCovering, "n, r, fieldsize", true, [IsInt, IsInt, IsInt], 0, function(n, r, q) return LowerBoundCoveringRadiusSphereCovering(n, r, q, true); end); InstallOtherMethod(LowerBoundCoveringRadiusSphereCovering, "n, r, field", true, [IsInt, IsInt, IsField], 0, function(n, r, F) if not IsFinite(F) then Error("LBCRSphereCovering: must be a finite field"); else return LowerBoundCoveringRadiusSphereCovering(n, r, Size(F), true); fi; end); InstallOtherMethod(LowerBoundCoveringRadiusSphereCovering, "n, r, usage", true, [IsInt, IsInt, IsBool], 0, function(n, r, usage) return LowerBoundCoveringRadiusSphereCovering(n, r, 2, usage); end); InstallOtherMethod(LowerBoundCoveringRadiusSphereCovering, "n, r", true, [IsInt, IsInt], 0, function(n, r) return LowerBoundCoveringRadiusSphereCovering(n, r, 2, true); end); ######################################################################## ## #F LowerBoundCoveringRadiusVanWee1( ... ) ## InstallMethod(LowerBoundCoveringRadiusVanWee1, "n, r, fieldsize, usage", true, [IsInt, IsInt, IsInt, IsBool], 0, function(n, r, q, usage) local m, lb, ub, tmpcr, tmpsize, t, tmp; if n <= 0 then Error("LBCRVanWee1: must be positive"); fi; if usage = false then # last argument is false, try to find a lower bound for # the covering radius, given length and size of the code, and field m := r; if m <= 0 or m > q^n then Error( "LBCRVanWee1: must be > 0 and <= q^n" ); fi; # everything is set up. now compute the bound lb := 0; ub := n; while lb <> ub do tmpcr := IntFloor( (ub+lb) / 2 ); tmpsize := LowerBoundCoveringRadiusVanWee1( n, tmpcr, q ); if tmpsize > m then lb := tmpcr + 1; else ub := tmpcr; fi; od; return ub; else # the last argument is not false # now it is assumed that the first argument is the length # of the code and the second argument is the covering radius # of the code. a lower bound for the minimal size of the # code is returned t := r; if t < 0 or t > n then Error( "LBCRVanWee1: must be >= 0 and <= " ); fi; if t = n then return 1; fi; tmp := (Binomial(n,t))/(IntCeiling((n-t)/(t+1))); tmp := tmp * (IntCeiling((t+1)/(t+1)) - (t+1)/(t+1)); tmp := SphereContent( n, t, q ) - tmp; return IntCeiling( q^n / tmp ); fi; end); InstallOtherMethod(LowerBoundCoveringRadiusVanWee1, "n, r, field, usage", true, [IsInt, IsInt, IsField, IsBool], 0, function(n, r, F, usage) if not IsFinite(F) then Error("LBCRVanWee1: must be a finite field"); else return LowerBoundCoveringRadiusVanWee1(n, r, Size(F), usage); fi; end); InstallOtherMethod(LowerBoundCoveringRadiusVanWee1, "n,r,fieldsize", true, [IsInt, IsInt, IsInt], 0, function(n, r, q) return LowerBoundCoveringRadiusVanWee1(n, r, q, true); end); InstallOtherMethod(LowerBoundCoveringRadiusVanWee1, "n, r, field", true, [IsInt, IsInt, IsField], 0, function(n, r, F) if not IsFinite(F) then Error("LBCRVanWee1: must be a finite field"); else return LowerBoundCoveringRadiusVanWee1(n, r, Size(F), true); fi; end); InstallOtherMethod(LowerBoundCoveringRadiusVanWee1, "n, r, usage", true, [IsInt, IsInt, IsBool], 0, function(n, r, usage) return LowerBoundCoveringRadiusVanWee1(n, r, 2, usage); end); InstallOtherMethod(LowerBoundCoveringRadiusVanWee1, "n, r", true, [IsInt, IsInt], 0, function(n, r) return LowerBoundCoveringRadiusVanWee1(n, r, 2, true); end); ############################################################################# ## #F LowerBoundCoveringRadiusVanWee2( , ) Counting Excess bound ## InstallMethod(LowerBoundCoveringRadiusVanWee2, "code length, code size or covering radius, usage", true, [IsInt, IsInt, IsBool], 0, function(n, r, usage) local m, lb, ub, tmpcr, eps, tmpsize, t, tmpb1, tmpb2; if n<=0 then Error( "LBCRVanWee2: must be positive" ); fi; if usage = false then m := r; if m <= 0 or m > 2^n then Error( "LBCRVanWee2: must be > 0 and <= 2^n" ); fi; lb := 0; ub := IntFloor( n/2 ); while lb <> ub do tmpcr := IntFloor( ( ub + lb ) / 2 ); tmpb1 := (tmpcr+2)*(tmpcr+1)/2; # Binomial(tmpcr+2,2) tmpb2 := (n-tmpcr+1)*(n-tmpcr)/2; # Binomial(n-tmpcr+1,2) eps := tmpb1 * IntCeiling( tmpb2/tmpb1 ) - tmpb2; tmpsize := 2^n * ( SphereContent( n, 2, 2 ) + eps - 1/2*( tmpcr + 2 )*( tmpcr - 1 ) ); tmpsize := tmpsize / ( SphereContent( n, tmpcr, 2 ) * ( SphereContent( n, 2, 2 ) - 1/2*( tmpcr + 2 )*( tmpcr - 1 ) ) + eps * SphereContent( n, tmpcr - 2 ) ); if tmpsize > m then lb := tmpcr + 1; else ub := tmpcr; fi; od; return ub; else t := r; if t < 0 or t > n then Error( "LBCRVanWee2: must be >= 0 and <= " ); fi; if 2 * t > n then return 0; fi; tmpb1 := (t+2)*(t+1)/2; tmpb2 := (n-t+1)*(n-t)/2; eps := tmpb1 * IntCeiling( tmpb2/tmpb1 ) - tmpb2; tmpsize := 2^n * ( SphereContent( n, 2, 2 ) + eps - 1/2*( t + 2 )*( t - 1 ) ); tmpsize := tmpsize / ( SphereContent( n, t, 2 ) * ( SphereContent( n, 2, 2 ) - 1/2*( t + 2 )*( t - 1 ) ) + eps * SphereContent( n, t-2, 2 ) ); return IntCeiling(tmpsize); fi; end); InstallOtherMethod(LowerBoundCoveringRadiusVanWee2, "code length, code covering radius", true, [IsInt, IsInt], 0, function(n, r) return LowerBoundCoveringRadiusVanWee2(n, r, true); end); ############################################################################# ## #F LowerBoundCoveringRadiusCountingExcess( , ) ## InstallMethod(LowerBoundCoveringRadiusCountingExcess, "code length, code size or covering radius, usage", true, [IsInt, IsInt, IsBool], 0, function(n, r, usage) local m, lb, ub, tmpcr, tmpsize, t, rho, eps; if n<=0 then Error( "LBCRCountingExcess: must be positive" ); fi; if usage = false then m := r; if m<=0 or m > 2^n then Error( "LBCRCountingExcess: must be > 0 and <= 2^n" ); fi; lb := 0; ub := IntFloor( ( n-1 ) / 2 ); while lb <> ub do tmpcr := IntFloor( ( ub + lb ) / 2 ); tmpsize := LowerBoundCoveringRadiusCountingExcess( n, tmpcr, true ); if tmpsize > m then lb := tmpcr + 1; else ub := tmpcr; fi; od; return ub; else t := r; if t < 0 or t > n then Error( "LBCRCountingExcess: must be >=0 and <= " ); fi; if t < 2 or 2 * t + 1 > n then return 0; fi; if t = 2 then rho := n - 3 + 2/n; else rho := n - t - 1; fi; eps := ( t+1 ) * IntCeiling( ( n+1 ) / ( t+1 ) ) - ( n+1 ); if eps > t then return 0; fi; tmpsize := 2^n * ( rho + eps ); tmpsize := tmpsize / ( rho * SphereContent( n, t ) + eps * SphereContent( n, t-1 ) ); return IntCeiling( tmpsize ); fi; end); InstallOtherMethod(LowerBoundCoveringRadiusCountingExcess, "code length, code covering radius", true, [IsInt, IsInt], 0, function(n, r) return LowerBoundCoveringRadiusCountingExcess(n, r, true); end); ######################################################################## ## #F LowerBoundCoveringRadiusEmbedded1( , [, ] ) ## InstallMethod(LowerBoundCoveringRadiusEmbedded1, "code length, code size or covering radius, field size, usage", true, [IsInt, IsInt, IsInt, IsBool], 0, function(n, r, q, usage) local m, lb, ub, tmpcr, tmpsize, t, upperb; if n <= 0 then Error("LBCREmbedded1: must be positive"); fi; if usage = false then # last argument is false, try to find a lower bound for # the covering radius, given length and size of the code, and field m := r; if m <= 0 or m > q^n then Error( "LBCREmbedded1: must be > 0 and <= q^n" ); fi; # everything is set up. now compute the bound if m = q^n then return 0; fi; if n = 1 then return 0; fi; lb := 1; ub := n; while lb <> ub do tmpcr := IntFloor( (ub+lb) / 2 ); tmpsize := SphereContent( n, tmpcr, q ) - Binomial( 2*tmpcr, tmpcr ); if tmpsize = 0 then lb := lb + 1; elif tmpsize < 0 then ub := tmpcr; else if 2*tmpcr+1 > n then upperb := 1; else upperb := UpperBound( n, 2*tmpcr+1, q ); fi; tmpsize := IntCeiling( ( q^n - upperb * Binomial( 2 * tmpcr, tmpcr ) ) / tmpsize ); if tmpsize > m then lb := tmpcr + 1; else ub := tmpcr; fi; fi; od; return ub; else # the last argument is not false # now it is assumed that the first argument is the length # of the code and the second argument is the covering radius # of the code. a lower bound for the minimal size of the # code is returned t := r; if t < 0 or t > n then Error( "LBCREmbedded1: must be >= 0 and <= " ); fi; tmpsize := SphereContent( n, t, q ) - Binomial( 2*t, t ); if tmpsize <= 0 then return 0; else if 2 * t + 1 > n then upperb := 1; else upperb := UpperBound( n, 2*t+1, q ); fi; return IntCeiling( ( q^n - upperb * Binomial( 2*t, t ) ) / tmpsize ); fi; fi; end); InstallOtherMethod(LowerBoundCoveringRadiusEmbedded1, "code length, code size or covering radius, field, usage", true, [IsInt, IsInt, IsField, IsBool], 0, function(n, r, F, usage) if not IsFinite(F) then Error("LBCREmbedded1: must be a finite field"); else return LowerBoundCoveringRadiusEmbedded1(n, r, Size(F), usage); fi; end); InstallOtherMethod(LowerBoundCoveringRadiusEmbedded1, "code length, code size or covering radius, usage", true, [IsInt, IsInt, IsBool], 0, function(n, r, usage) return LowerBoundCoveringRadiusEmbedded1(n, r, 2, usage); end); InstallOtherMethod(LowerBoundCoveringRadiusEmbedded1, "code length, code covering radius, field size", true, [IsInt, IsInt, IsInt], 0, function(n, r, q) return LowerBoundCoveringRadiusEmbedded1(n, r, q, true); end); InstallOtherMethod(LowerBoundCoveringRadiusEmbedded1, "code length, code covering radius, field", true, [IsInt, IsInt, IsField], 0, function(n, r, F) if not IsFinite(F) then Error("LBCREmbedded1: must be a finite field"); else return LowerBoundCoveringRadiusEmbedded1(n, r, Size(F), true); fi; end); InstallOtherMethod(LowerBoundCoveringRadiusEmbedded1, "code length, code covering radius", true, [IsInt, IsInt], 0, function(n, r) return LowerBoundCoveringRadiusEmbedded1(n, r, 2, true); end); ######################################################################## ## #F LowerBoundCoveringRadiusEmbedded2( , [, ] ) ## InstallMethod(LowerBoundCoveringRadiusEmbedded2, "code length, code size or covering radius, field size, usage", true, [IsInt, IsInt, IsInt, IsBool], 0, function(n, r, q, usage) local m, lb, ub, tmpcr, tmpsize, t, upperb; if n <= 0 then Error("LBCREmbedded2: must be positive"); fi; if usage = false then # last argument is false, try to find a lower bound for # the covering radius, given length and size of the code, and field m := r; if m <= 0 or m > q^n then Error( "LBCREmbedded2: must be > 0 and <= q^n" ); fi; # everything is set up. now compute the bound if m = q^n then return 0; fi; if n = 1 or n = 2 then return 0; fi; lb := 1; ub := n; while lb <> ub do tmpcr := IntFloor( (ub+lb) / 2 ); tmpsize := SphereContent( n, tmpcr, q ) - 3/2 * Binomial( 2*tmpcr, tmpcr ); if tmpsize = -1/2 then lb := lb + 1; elif tmpsize <= 0 then ub := tmpcr; else if 2*tmpcr+1 > n then upperb := 1; else upperb := UpperBound( n, 2*tmpcr+1, q ); fi; tmpsize := IntCeiling( ( q^n - 2 * upperb * Binomial( 2*tmpcr, tmpcr ) ) / tmpsize ); if tmpsize > m then lb := tmpcr + 1; else ub := tmpcr; fi; fi; od; return ub; else # the last argument is not false # now it is assumed that the first argument is the length # of the code and the second argument is the covering radius # of the code. a lower bound for the minimal size of the # code is returned t := r; if t < 0 or t > n then Error( "LBCREmbedded2: must be >= 0 and <= " ); fi; tmpsize := SphereContent( n, t, q ) - 3/2*Binomial( 2*t, t ); if tmpsize <= 0 then return 0; else if 2*t+1 > n then upperb := 1; else upperb := UpperBound( n, 2*t+1, q ); fi; return IntCeiling( ( q^n - 2*upperb * Binomial( 2*t, t ) ) / tmpsize ); fi; fi; end); InstallOtherMethod(LowerBoundCoveringRadiusEmbedded2, "code length, code size or covering radius, field, usage", true, [IsInt, IsInt, IsField, IsBool], 0, function(n, r, F, usage) if not IsFinite(F) then Error("LBCREmbedded2: must be a finite field"); else return LowerBoundCoveringRadiusEmbedded2(n, r, Size(F), usage); fi; end); InstallOtherMethod(LowerBoundCoveringRadiusEmbedded2, "code length, code size or covering radius, usage", true, [IsInt, IsInt, IsBool], 0, function(n, r, usage) return LowerBoundCoveringRadiusEmbedded2(n, r, 2, usage); end); InstallOtherMethod(LowerBoundCoveringRadiusEmbedded2, "code length, code covering radius, field size", true, [IsInt, IsInt, IsInt], 0, function(n, r, q) return LowerBoundCoveringRadiusEmbedded2(n, r, q, true); end); InstallOtherMethod(LowerBoundCoveringRadiusEmbedded2, "code length, code covering radius, field", true, [IsInt, IsInt, IsField], 0, function(n, r, F) if not IsFinite(F) then Error("LBCREmbedded2: must be a finite field"); else return LowerBoundCoveringRadiusEmbedded2(n, r, Size(F), true); fi; end); InstallOtherMethod(LowerBoundCoveringRadiusEmbedded2, "code length, code covering radius", true, [IsInt, IsInt], 0, function(n, r) return LowerBoundCoveringRadiusEmbedded2(n, r, 2, true); end); ############################################################################# ## #F LowerBoundCoveringRadiusInduction( , ) Induction bound ## InstallMethod(LowerBoundCoveringRadiusInduction, "method for two integers", true, [IsInt, IsInt], 0, function(n, t) if n <= 0 then Error( "LBCRInduction: must be positive" ); fi; if t < 0 or t > n then Error( "LBCRInduction: must be >= 0 and <= " ); fi; if n = 2 * t + 2 and t >= 1 then return 4; elif n = 2 * t + 3 and t >= 1 then return 7; elif n = 2 * t + 4 and t >= 4 then return 8; else return 0; fi; end); ######################################################################## ## #F GeneralUpperBoundCoveringRadius( ) ## InstallMethod(GeneralUpperBoundCoveringRadius, "unrestricted code", true, [IsCode], 0, function(code) local listofbounds; listofbounds := [ UpperBoundCoveringRadiusStrength( code ) ]; if WordLength( code ) <= 100 then Append( listofbounds, [ UpperBoundCoveringRadiusDelsarte( code ) ] ); fi; if IsLinearCode( code ) then Append( listofbounds, [ UpperBoundCoveringRadiusRedundancy( code ), ] ); if LeftActingDomain( code ) = GF(2) then if ( IsBound( code!.lowerBoundMinimumDistance ) and IsBound( code!.upperBoundMinimumDistance ) ) and LowerBoundMinimumDistance( code ) = UpperBoundMinimumDistance (code ) then Append( listofbounds, [ UpperBoundCoveringRadiusGriesmerLike( code ) ] ); fi; fi; fi; if IsCyclicCode( code ) and LeftActingDomain( code ) = GF(2) then Append( listofbounds, [ UpperBoundCoveringRadiusCyclicCode( code ) ] ); fi; if IsBound( code!.boundsCoveringRadius ) then Add( listofbounds, Maximum( code!.boundsCoveringRadius ) ); fi; return Minimum( listofbounds ); end); ######################################################################## ## #F UpperBoundCoveringRadiusRedundancy( ) ## ## Return the redundancy of the code as an upper bound for ## the covering radius. ## ## Only for linear codes. ## InstallMethod(UpperBoundCoveringRadiusRedundancy, "unrestricted code", true, [IsCode], 0, function( code ) if IsLinearCode( code ) then return UpperBoundCoveringRadiusRedundancy( code ); else Error("UBCRRedundancy: must be a linear code"); fi; end); InstallMethod(UpperBoundCoveringRadiusRedundancy, "linear code", true, [IsLinearCode], 0, function( code) return Redundancy(code); end); ######################################################################## ## #F UpperBoundCoveringRadiusDelsarte( ) ## InstallMethod(UpperBoundCoveringRadiusDelsarte, "method for unrestricted codes", true, [IsCode], 0, function(code) local p; p := CodeMacWilliamsTransform(code); p := CoefficientsOfLaurentPolynomial(p); p := ShiftedCoeffs(p[1], p[2]); return WeightVector(p) - 1; end); InstallMethod(UpperBoundCoveringRadiusDelsarte, "method for linear codes", true, [IsLinearCode], 0, function(code) local dual, wddual; if not IsBound(code!.boundsCoveringRadius) then # avoid recursion code!.boundsCoveringRadius := [ 0 .. WordLength( code ) ]; fi; dual := DualCode( code ); wddual := WeightDistribution( dual ); return WeightVector( wddual ) - 1; end); ######################################################################## ## #F UpperBoundCoveringRadiusStrength( ) ## ## Return (q-1)n/q as an upper bound for , if it ## has strength 1 (i.e. every coordinate contains each element ## of the field the same number of times). ## InstallMethod(UpperBoundCoveringRadiusStrength, "method for unrestricted codes", true, [IsCode], 0, function(code) local q, n, stris1, i, j, els, fieldels, coordlist, number, zerocols; if IsLinearCode(code) then return UpperBoundCoveringRadiusStrength(code); fi; q := Size( LeftActingDomain( code ) ); n := WordLength( code ); stris1 := true; i := 1; els := VectorCodeword( AsSSortedList( code ) ); if not ( Length( els ) in List( [ 1 .. n ], x -> q^x ) ) then stris1 := false; fi; fieldels := AsSSortedList(LeftActingDomain( code ) ); zerocols := 0; while stris1 and i <= n do coordlist := List( els, x -> x[ i ] ); for j in fieldels do number := Length( Filtered( coordlist, x -> x = j ) ); if number = Length( els ) then zerocols := zerocols + 1; elif number <> Length( els ) / q then stris1 := false; fi; od; i := i + 1; od; if stris1 then return IntFloor((q-1)*(n-zerocols)/q)+zerocols; else return n; fi; end); InstallMethod(UpperBoundCoveringRadiusStrength, "method for linear code", true, [IsLinearCode], 0, function(code) local q, zerocols, i, j, genmat, n, k, zero, onlyzeroes; if Dimension(code) = 0 then return WordLength(code); fi; q := Size(LeftActingDomain(code)); genmat := GeneratorMat( code ); n := WordLength( code ); k := Dimension( code ); zerocols := 0; zero := Zero(LeftActingDomain(code)); for i in [ 1 .. n ] do onlyzeroes := true; j := 1; while onlyzeroes and j <= k do onlyzeroes := ( genmat[ j ][ i ] = zero ); j := j + 1; od; if onlyzeroes then zerocols := zerocols + 1; fi; od; return IntFloor((q-1)*(n-zerocols)/q) + zerocols; end); ######################################################################## ## #F UpperBoundCoveringRadiusGriesmerLike( ) ## InstallMethod(UpperBoundCoveringRadiusGriesmerLike, "unrestrictred code", true, [IsCode], 0, function( code ) if IsLinearCode( code ) then return UpperBoundCoveringRadiusGriesmerLike(code); else Error("UBCRGriesmerLike: must be a linear code"); fi; end); InstallMethod(UpperBoundCoveringRadiusGriesmerLike, "linear codes", true, [IsLinearCode], 0, function(code) local q; q := Size( LeftActingDomain( code ) ); return WordLength( code ) - Sum( [ 1 .. Dimension( code ) ], x -> IntCeiling( MinimumDistance( code ) / q^x ) ); end); ######################################################################## ## #F UpperBoundCoveringRadiusCyclicCode( ) ## InstallMethod(UpperBoundCoveringRadiusCyclicCode, "unrestricted code", true, [IsCode], 0, function( code ) if IsCyclicCode( code ) then return UpperBoundCoveringRadiusCyclicCode( code ); else Error("UBCRCyclicCode: must be a cyclic code"); fi; end); InstallMethod(UpperBoundCoveringRadiusCyclicCode, "cyclic codes", true, [IsCyclicCode], 0, function(code) return WordLength( code ) - Dimension( code ) + 1 - IntCeiling( Weight( Codeword( GeneratorPol( code ) ) ) / 2 ); end); guava-3.6/lib/setup.g0000644017361200001450000000242011026723452014420 0ustar tabbottcrontab############################################################################# ## #A setup.g GUAVA library Reinald Baart #A &Jasper Cramwinckel #A &Erik Roijackers ## ## This file sets some startup variables ## #H @(#)$Id: setup.g,v 1.5 2003/02/13 11:57:58 gap Exp $ ## Revision.("guava/lib/setup_g") := "@(#)$Id: setup.g,v 1.5 2003/02/13 11:57:58 gap Exp $"; if not IsBound( InfoCoveringRadius ) then InfoCoveringRadius := Print; fi; if not IsBound( InfoMinimumDistance ) then InfoMinimumDistance := Ignore; fi; if not IsBound( CRMemSize ) then CRMemSize := 2^15; fi; ############################################################################# ## #V GUAVA_TEMP_VAR . . . . . . . . variable for interfacing external programs ## GUAVA_TEMP_VAR := 0; ############################################################################# ## #V GUAVA_BOUNDS_TABLE . . . . . . . . . contains a list of tables of bounds ## GUAVA_BOUNDS_TABLE := [ [], [] ]; ############################################################################# ## #V GUAVA_REF_LIST . . . contains a record of references for bounds on codes ## GUAVA_REF_LIST := rec(); guava-3.6/lib/codenorm.gd0000644017361200001450000000473511026723452015245 0ustar tabbottcrontab############################################################################# ## #A codenorm.gd GUAVA library Reinald Baart #A Jasper Cramwinckel #A Erik Roijackers #A Eric Minkes ## ## This file contains functions for calculating code norms ## #H @(#)$Id: codenorm.gd,v 1.2 2003/02/12 03:49:16 gap Exp $ ## Revision.("guava/lib/codenorm_gd") := "@(#)$Id: codenorm.gd,v 1.2 2003/02/12 03:49:16 gap Exp $"; ######################################################################## ## #F CoordinateSubCode( , , ) ## ## Return the subcode of , that has elements ## with an in coordinate position . ## If no elements have an in position , return false. ## DeclareOperation("CoordinateSubCode", [IsCode, IsInt, IsFFE]); ######################################################################## ## #F CoordinateNorm( , ) ## ## Returns the norm of code with respect to coordinate i. ## DeclareAttribute("CoordinateNorm", IsCode, "mutable"); ######################################################################## ## #F CodeNorm( ) ## ## Return the norm of code. ## The norm of code is the minimum of the coordinate norms ## of code with respect to i = 1, ..., n. ## DeclareAttribute("CodeNorm", IsCode); ######################################################################## ## #F IsCoordinateAcceptable( , ) ## ## Test whether coordinate i of is acceptable. ## (a coordinate is acceptable if the norm of code with respect to ## that coordinate is less than or equal to one plus two times the ## covering radius of code). DeclareOperation("IsCoordinateAcceptable", [IsCode, IsInt]); ######################################################################## ## #F IsNormalCode( ) ## ## Return true if code is a normal code, false otherwise. ## A code is called normal if its norm is smaller than or ## equal to two times its covering radius + one. ## DeclareProperty("IsNormalCode", IsCode); ######################################################################## ## #F GeneralizedCodeNorm( , , , ... , ) ## ## Compute the k-norm of code with respect to the k subcode ## code1, code2, ... , codek. ## DeclareGlobalFunction("GeneralizedCodeNorm"); guava-3.6/lib/util2.gd0000644017361200001450000000644011026723452014471 0ustar tabbottcrontab############################################################################# ## #A util2.gd GUAVA library Reinald Baart #A &Jasper Cramwinckel #A &Erik Roijackers #A &David Joyner ## ## This file contains miscellaneous functions ## #H @(#)$Id: util2.gd,v 1.3 2003/02/12 03:49:21 gap Exp $ ## ## several functions added 12-16-2005 ## Revision.("guava/lib/util2_gd") := "@(#)$Id: util2.gd,v 1.3 2003/02/12 03:49:21 gap Exp $"; ######################################################################## ## #F AllOneVector( [, ] ) ## ## Return a vector with all ones. ## DeclareOperation("AllOneVector", [IsInt, IsField]); ######################################################################## ## #F AllOneCodeword( , ) ## ## Return a codeword with ones. ## DeclareOperation("AllOneCodeword", [IsInt, IsField]); ############################################################################# ## #F IntCeiling( ) ## ## Return the smallest integer greater than or equal to r. ## 3/2 => 2, -3/2 => -1. ## DeclareOperation("IntCeiling", [IsRat]); ######################################################################## ## #F IntFloor( ) ## ## Return the greatest integer smaller than or equal to r. ## 3/2 => 1, -3/2 => -2. ## DeclareOperation("IntFloor", [IsRat]); ######################################################################## ## #F KroneckerDelta( , ) ## ## Return 1 if i = j, ## 0 otherwise ## DeclareOperation("KroneckerDelta", [IsInt, IsInt]); ######################################################################## ## #F BinaryRepresentation( , ) ## ## Return a binary representation of an element ## of GF( 2^k ), where k <= length. ## ## If elements is a list, then return the binary ## representation of every element of the list. ## ## This function is used to make to Gabidulin codes. ## It is not intended to be a global function, but including ## it in all five Gabidulin codes is a bit over the top ## ## Therefore, no error checking is done. ## ######################################################################## ## #F SortedGaloisFieldElements( ) ## ## Sort the field elements of size according to ## their log. ## ## This function is used to make to Gabidulin codes. ## It is not intended to be a global function, but including ## it in all five Gabidulin codes is not a good idea. ## ######################################################################## ## #F VandermondeMat( , ) ## ## Input: Pts=[x1,..,xn], a >0 an integer ## Output: Vandermonde matrix (xi^j), ## for xi in Pts and 0 <= j <= a ## (an nx(a+1) matrix) ## DeclareOperation("VandermondeMat", [IsList, IsInt]); ########################################################### ## #F MultiplicityInList(L,a) ## ## Input: a list L ## an element a of L ## Output: the multiplicity a occurs in L ## ########################################################### ## #F MostCommonInList(L,a) ## ## Input: a list L ## Output: an a in L which occurs at least as much as any other in L ##guava-3.6/lib/toric.gi0000644017361200001450000000567611026723452014571 0ustar tabbottcrontab############################################################################# ## #A toric.gi GUAVA library David Joyner ## ## this file contains implementations for toric codes ## #H @(#)$Id: toric.gi,v 1.1 2003/02/27 22:45:16 gap Exp $ ## ## added 11-2004: ## GeneralizedReedMullerCode with "record" components ## points, degree, GeneratorMat ## added "record" components exponents, GeneratorMat to ToricCode ## Revision.("guava/lib/toric_gi") := "@(#)$Id: toric.gi,v 1.1 2003/02/27 22:45:16 gap Exp $"; ############################################################################# ## #F ToricPoints(,) ## InstallGlobalFunction(ToricPoints,function(n,F) local T,L,i,x0; T:=[]; for x0 in AsList(F ) do if x0<>Zero(F) then Add(T,x0); fi; od; L:=Cartesian(List([1..n],i->T)); return L; end); ############################################################################# ## #F ToricCode(,) ## InstallGlobalFunction(ToricCode,function(L,F) local u,gens,d,V,n,i,Z,v,B0,B,C,C1,t,e,tmpvar; gens:=L; d:=Size(gens[1]); n:=Size(ToricPoints(d,F)); V:=F^n; # VectorSpace(F,n); Z:=Integers; B0:=[]; e:=gens[1]; for e in gens do tmpvar:=List(ToricPoints(d,F),t->Product([1..d],i->t[i]^e[i])); Add(B0,tmpvar); od; B:=One(F)*AsList(B0); C:=GeneratorMatCode(B,F); ##uses guava command C!.GeneratorMat:=ShallowCopy(B); C!.exponents:=L; C!.name:=" toric code"; return C; end); # for compatibility ... BindGlobal("ToricCodewords",function(L,F) return Elements(ToricCode(L,F)); end); InstallMethod(GeneralizedReedMullerCode, "list of points,order,field,name", true, [IsList,IsInt,IsField], 0, function(Pts,r,F) ## Pts=[p1,...,pn] are points in F^d ## for usual GRM code, take ## pts:=Cartesian(List([1..d],i->Elements(F))); ## for some d>1. ## r is the degree of the polys in x1, ..., xd ## returns code with gen mat having rows ## (f(p1),...,f(pn)) with f a monomial x1^e1...xd^ed ## with e1+...+ed<=r ## local C, B, q, n, row, B0, L, exps, Ld, i, x, e, d, t; q:=Size(F); d:=Length(Pts[1]); L:=[0..Minimum(q-1,r)]; Ld:=Cartesian(List([1..d],i->L)); exps:=Filtered(Ld,x->Sum(x)<=r); n:=Size(Pts); B0:=[]; for e in exps do row:=List(Pts,t->Product([1..d],i->t[i]^e[i])); Add(B0,row); od; B:=One(F)*AsList(B0); C:=GeneratorMatCode(B," generalized Reed-Muller code",F); C!.GeneratorMat:=ShallowCopy(B); C!.points:=Pts; C!.degree:=r; return C; end); InstallOtherMethod(GeneralizedReedMullerCode, "number of vars,order,field", true, [IsInt,IsInt,IsField], 0, function(d,r,F) ## Pts=[p1,...,pn] are *all* points in F^d ## take ## pts:=Cartesian(List([1..d],i->Elements(F))); ## r is the degree of the polys in x1, ..., xd ## returns code with gen mat having rows ## (f(p1),...,f(pn)) with f a monomial x1^e1...xd^ed ## with e1+...+ed<=r ## local pts, i; pts:=Cartesian(List([1..d],i->Elements(F))); return GeneralizedReedMullerCode(pts,r,F); end);guava-3.6/lib/codemisc.gd0000644017361200001450000000742311026723452015222 0ustar tabbottcrontab############################################################################# ## #A codemisc.gd GUAVA library Reinald Baart #A Jasper Cramwinckel #A Erik Roijackers #A Eric Minkes ## ## This file contains miscellaneous functions for codes ## #H @(#)$Id: codemisc.gd,v 1.2 2003/02/12 03:49:16 gap Exp $ ## Revision.("guava/lib/codemisc_gd") := "@(#)$Id: codemisc.gd,v 1.2 2003/02/12 03:49:16 gap Exp $"; ######################################################################## ## #F CodeWeightEnumerator( ) ## ## Returns a polynomial over the rationals ## with degree not greater than the length of the code. ## The coefficient of x^i equals ## the number of codewords of weight i. ## DeclareOperation("CodeWeightEnumerator", [IsCode]); ######################################################################## ## #F CodeDistanceEnumerator( , ) ## ## Returns a polynomial over the rationals ## with degree not greater than the length of the code. ## The coefficient of x^i equals ## the number of codewords with distance i to . DeclareOperation("CodeDistanceEnumerator", [IsCode, IsCodeword]); ######################################################################## ## #F CodeMacWilliamsTransform( ) ## ## Returns a polynomial with the weight ## distribution of the dual code as ## coefficients. ## DeclareOperation("CodeMacWilliamsTransform", [IsCode]); ######################################################################## ## #F WeightVector( ) ## ## Returns the number of non-zeroes in a vector. DeclareOperation("WeightVector", [IsVector]); ######################################################################## ## #F RandomVector( [, [, ] ] ) ## DeclareOperation("RandomVector", [IsInt, IsInt, IsField]); ######################################################################## ## #F IsSelfComplementaryCode( ) ## ## Return true if is a complementary code, false otherwise. ## A code is called complementary if for every v \in ## also 1 - v \in (where 1 is the all-one word). ## DeclareProperty("IsSelfComplementaryCode", IsCode); ######################################################################## ## #F IsAffineCode( ) ## ## Return true if is affine, i.e. a linear code or ## a coset of a linear code, false otherwise. ## DeclareProperty("IsAffineCode", IsCode); ######################################################################## ## #F IsAlmostAffineCode( ) ## ## Return true if is almost affine, false otherwise. ## A code is called almost affine if the size of any punctured ## code is equal to q^r for some integer r, where q is the ## size of the alphabet of the code. ## DeclareProperty("IsAlmostAffineCode", IsCode); ######################################################################## ## #F IsGriesmerCode( ) ## ## Return true if is a Griesmer code, i.e. if ## n = \sum_{i=0}^{k-1} d/(q^i), false otherwise. ## DeclareProperty("IsGriesmerCode", IsCode); ######################################################################## ## #F CodeDensity( ) ## ## Return the density of , i.e. M*V_q(n,r)/(q^n). ## DeclareAttribute("CodeDensity", IsCode); ######################################################################## ## #F DecreaseMinimumDistanceUpperBound( , , ) ## ## Tries to compute the minimum distance of C. ## The algorithm is Leon's, see for more ## information his article. DeclareOperation("DecreaseMinimumDistanceUpperBound", [IsCode, IsInt, IsInt]); guava-3.6/lib/codegen.gi0000644017361200001450000025051011026723452015042 0ustar tabbottcrontab############################################################################# ## #A codegen.gi GUAVA library Reinald Baart #A &Jasper Cramwinckel #A &Erik Roijackers ## &David Joyner ## ## This file contains info/functions for generating codes ## #H @(#)$Id: codegen.gi,v 1.99 2004/09/22 03:49:16 gap Exp $ ## ## BCHCode modified 9-2004 ## added 11-2004: ## comment in GoppaCode ## GeneralizedReedSolomonCode and record fields ## points, degree, ring, ## (added SpecialDecoder field later: SetSpecialDecoder(C, GRSDecoder);) ## EvaluationCode and record fields ## points, basis, ring, ## OnePointAGCode and record fields ## points, curve, multiplicity, ring ## weighted option for GeneralizedReedSolomonCode and record fields ## points, degree, ring, weights ## minor bug in EvaluationCode fixed 11-26-2004 ## GeneratorMatCodeNC added 12-18-2004 (after release of guava 2.0) ## added 5-10-2005: SetSpecialDecoder(C, CyclicDecoder); to ## the cyclic codes which are not BCH codes ## in codegen.gi, line 2066, replace C.GeneratorMat ## by C.EvaluationMat ## added 5-13-2005: QQRCode ## added 11-27-2005: CheckMatCodeMutable with *mutable* ## generator and check matrices ## added 1-10-2006: QQRCodeNC Greg Coy and David Joyner ## added 1-2006: FerreroDesignCode, written with Peter Mayr ## added 12-2007 (CJ): ExtendedReedSolomonCode, QuasiCyclicCode, ## CyclicMDSCode, FourNegacirculantSelfDualCode functions. ## added 06-2008 (CJ): QCLDPCFromGroup function ## Revision.("guava/lib/codegen_gi") := "@(#)$Id: codegen.gi,v 1.99 2004/09/22 03:49:16 gap Exp $"; DeclareRepresentation( "IsCodeDefaultRep", IsAttributeStoringRep and IsComponentObjectRep and IsCode, ["name", "history", "lowerBoundMinimumDistance", "upperBoundMinimumDistance", "boundsCoveringRadius"]); DeclareHandlingByNiceBasis( "IsLinearCodeRep", "for linear codes" ); InstallTrueMethod( IsCodeDefaultRep, IsLinearCodeRep ); InstallTrueMethod( IsLinearCode, IsLinearCodeRep ); #T The following is of course a hack, as is much of the #T ``pretend as if you were a vector space'' stuff. #T (`IsLinearCode' changes harmless codes into vector spaces; #T `AsLinearCode' would be clean, but now it is too late ...) InstallTrueMethod( IsFreeLeftModule, IsLinearCodeRep ); ### functions to work with NiceBasis functionality for Linear Codes. InstallHandlingByNiceBasis( "IsLinearCodeRep", rec( detect:= function( R, gens, V, zero ) return IsCodewordCollection( V ); end, NiceFreeLeftModuleInfo:= ReturnFalse, NiceVector:= function( C, w ) return VectorCodeword( w ); end, UglyVector:= function( C, v ) return Codeword( v, Length( v ), LeftActingDomain( C ) ); end ) ); ############################################################################# ## #F ElementsCode( [, ], ) . . . . . . code from list of words ## InstallMethod(ElementsCode, "list,name,Field", true, [IsList,IsString,IsField], 0, function(L, name, F) local test, C; L := Codeword(L, F); test := WordLength(L[1]); if ForAny(L, i->WordLength(i) <> test) then Error("All elements must have the same length"); fi; test := FamilyObj(L[1]); if ForAny(L, i->FamilyObj(i) <> test) then Error ("All elements must have the same family"); fi; L := Set(L); C := Objectify(NewType(CollectionsFamily(test), IsCodeDefaultRep), rec()); SetLeftActingDomain(C, F); SetAsSSortedList(C, L); C!.name := name; return C; end); InstallOtherMethod(ElementsCode, "list,Field", true, [IsList, IsField], 0, function(L,F) return ElementsCode(L, "user defined unrestricted code", F); end); InstallOtherMethod(ElementsCode, "list,name,fieldsize", true, [IsList, IsString, IsInt], 0, function(L, name, q) return ElementsCode(L, name, GF(q)); end); InstallOtherMethod(ElementsCode, "list,size of field", true, [IsList,IsInt], 0, function(L, q) return ElementsCode(L, "user defined unrestricted code", GF(q)); end); ##Create a linear code from a list of Codeword generators LinearCodeByGenerators := function(F, gens) local V; V:= Objectify( NewType( FamilyObj( gens ), IsLeftModule and IsLinearCodeRep ), rec() ); SetLeftActingDomain( V, F ); SetGeneratorsOfLeftModule( V, AsList( gens ) ); SetIsLinearCode(V, true); SetWordLength(V, WordLength(gens[1])); return V; end; ############################################################################# ## #F RandomCode( , [, ] ) . . . . . . . . random unrestricted code ## InstallMethod(RandomCode, "wordlength,codesize,field", true, [IsInt, IsInt, IsField], 0, function(n, M, F) local L; if Size(F)^n < M then Error(Size(F),"^",n," < ",M); fi; L := []; while Length(L) < M do AddSet(L, List([1..n], i -> Random(F))); od; return ElementsCode(L, "random unrestricted code", F); end); InstallOtherMethod(RandomCode, "wordlength,codesize", true, [IsInt, IsInt], 0, function(n, M) return RandomCode(n, M, GF(2)); end); InstallOtherMethod(RandomCode, "wordlength,codesize,fieldsize", true, [IsInt, IsInt, IsInt], 0, function(n, M, q) return RandomCode(n, M, GF(q)); end); ############################################################################# ## #F HadamardCode( [, ] ) . Hadamard code of 'th kind, order ## InstallMethod(HadamardCode, "matrix, kind (int)", true, [IsMatrix, IsInt], 0, function(H, t) local n, vec, C; n := Length(H); if H * TransposedMat(H) <> n * IdentityMat(n,n) then Error("The matrix is not a Hadamard matrix"); fi; H := (H-1)/(-2); if t = 1 then H := TransposedMat(TransposedMat(H){[2..n]}); C := ElementsCode(H, Concatenation("Hadamard code of order ", String(n)), GF(2) ); C!.lowerBoundMinimumDistance := n/2; C!.upperBoundMinimumDistance := n/2; vec := NullVector(n); # this was ... := NullVector(n+1); # but this seems to be wrong -- Eric Minkes vec[1] := 1; vec[n/2+1] := Size(C) - 1; SetInnerDistribution(C, vec); elif t = 2 then H := ShallowCopy( TransposedMat(TransposedMat(H){[2..n]}) ); Append(H, 1 - H); C := ElementsCode(H, Concatenation("Hadamard code of order ", String(n)), GF(2) ); C!.lowerBoundMinimumDistance := n/2 - 1; C!.upperBoundMinimumDistance := n/2 - 1; vec := NullVector(n); vec[1] := 1; vec[n] := 1; # this was ... [n+1]... # but this seems to be wrong -- Eric Minkes vec[n/2] := Size(C)/2 - 1; vec[n/2+1] := Size(C)/2 - 1; SetInnerDistribution(C, vec); else Append(H, 1 - H); C := ElementsCode( H, Concatenation("Hadamard code of order ", String(n)), GF(2) ); C!.lowerBoundMinimumDistance := n/2; C!.upperBoundMinimumDistance := n/2; vec := NullVector(n); vec[1] := 1; vec[n+1] := 1; vec[n/2+1] := Size(C) - 2; SetInnerDistribution(C, vec); fi; return(C); end); InstallOtherMethod(HadamardCode, "order, kind (int)", true, [IsInt, IsInt], 0, function(n, t) return HadamardCode(HadamardMat(n), t); end); InstallOtherMethod(HadamardCode, "matrix", true, [IsMatrix], 0, function(H) return HadamardCode(H, 3); end); InstallOtherMethod(HadamardCode, "order", true, [IsInt], 0, function(n) return HadamardCode(HadamardMat(n), 3); end); InstallOtherMethod(HadamardCode, "matrix, kind (string)", true, [IsMatrix, IsString], 0, function(H, t) if t in ["a", "A", "1"] then return HadamardCode(H, 1); elif t in ["b", "B", "2"] then return HadamardCode(H, 2); else return HadamardCode(H, 3); fi; end); InstallOtherMethod(HadamardCode, "order, kind (string)", true, [IsInt, IsString], 0, function(n, t) if t in ["a", "A", "1"] then return HadamardCode(HadamardMat(n), 1); elif t in ["b", "B", "2"] then return HadamardCode(HadamardMat(n), 2); else return HadamardCode(HadamardMat(n), 3); fi; end); ############################################################################# ## #F ConferenceCode( ) . . . . . . . . . . code from conference matrix ## InstallMethod(ConferenceCode, "matrix", true, [IsMatrix], 0, function(S) local n, I, J, F, els, w, wd, C; n := Length(S); if S*TransposedMat(S) <> (n-1)*IdentityMat(n) or TransposedMat(S) <> S then Error("argument must be a symmetric conference matrix"); fi; # Normalize S by multiplying rows and columns: for I in [2..n] do if S[I][1] <> 1 then for J in [1..n] do S[I][J] := S[I][J] * -1; od; fi; od; for J in [2..n] do if S[1][J] <> 1 then for I in [1..n] do S[I][J] := S[I][J] * -1; od; fi; od; # Strip first row and first column: S := List([2..n], i-> S[i]{[2..n]}); n := n - 1; F := GF(2); els := [NullWord(n, F)]; I := IdentityMat(n); J := NullMat(n,n) + 1; Append(els, Codeword(1/2 * (S+I+J), F)); Append(els, Codeword(1/2 * (-S+I+J), F)); Add( els, Codeword( List([1..n], x -> One(F) ), n, One(F) ) ); C := ElementsCode( els, "conference code", F); w := Weight(AsSSortedList(C)[2]); wd := List([1..n+1], x -> 0); wd[1] := 1; wd[n+1] := 1; wd[w+1] := Size(C) - 2; SetWeightDistribution(C, wd); C!.lowerBoundMinimumDistance := (n-1)/2; C!.upperBoundMinimumDistance := (n-1)/2; return C; end); InstallOtherMethod(ConferenceCode, "integer", true, [IsInt], 0, function(n) local LegendreSym, zero, QRes, E, I, S, F, els, J, w, wd, C; LegendreSym := function(i) if i = zero then return 0; elif i in QRes then return 1; else return -1; fi; end; if (not IsPrimePowerInt(n)) or (n mod 4 <> 1) then Error ("n must be a primepower and n mod 4 = 1"); fi; E := AsSSortedList(GF(n)); zero := E[1]; QRes := []; for I in E do AddSet(QRes, I^2); od; S := List(E, i->List(E, j->LegendreSym(j-i))); F := GF(2); els := [NullWord(n, F)]; I := IdentityMat(n); J := NullMat(n,n) + 1; Append(els, Codeword(1/2 * (S+I+J), F)); Append(els, Codeword(1/2 * (-S+I+J), F)); Add( els, Codeword( List([1..n], x -> One(F) ), n, One(F) ) ); C := ElementsCode( els, "conference code", F); w := Weight(AsSSortedList(C)[2]); wd := List([1..n+1], x -> 0); wd[1] := 1; wd[n+1] := 1; wd[w+1] := Size(C) - 2; SetWeightDistribution(C, wd); C!.lowerBoundMinimumDistance := (n-1)/2; C!.upperBoundMinimumDistance := (n-1)/2; return C; end); ############################################################################# ## #F MOLSCode( [ , ] ) . . . . . . . . . . . . . . . . code from MOLS ## ## MOLSCode([n, ] q) returns a (n, q^2, n-1) code over GF(q) ## by creating n-2 mutually orthogonal latin squares of size q. ## If n is omitted, a wordlength of 4 will be set. ## If there are no n-2 MOLS known, the code will return an error ## InstallMethod(MOLSCode, "wordlength,size of field", true, [IsInt, IsInt], 0, function(n,q) local M, els, i, j, k, wd, C; M := MOLS(q, n-2); if M = false then Error("No ", n-2, " MOLS of order ", q, " are known"); else els := []; for i in [1..q] do for j in [1..q] do els[(i-1)*q+j] := []; els[(i-1)*q+j][1] := i-1; els[(i-1)*q+j][2]:= j-1; for k in [3..n] do els[(i-1)*q+j][k]:= M[k-2][i][j]; od; od; od; C := ElementsCode( els, Concatenation("code generated by ", String(n-2), " MOLS of order ", String(q)), GF(q) ); C!.lowerBoundMinimumDistance := n - 1; C!.upperBoundMinimumDistance := n - 1; wd := List( [1..n+1], x -> 0 ); wd[1] := 1; wd[n] := (q-1) * n; wd[n+1] := (q-1) * (q + 1 - n); SetWeightDistribution(C, wd); return C; fi; end); InstallOtherMethod(MOLSCode, "wordlength,field", true, [IsInt, IsField], 0, function(n, F) return MOLSCode(n, Size(F)); end); InstallOtherMethod(MOLSCode, "fieldsize", true, [IsInt], 0, function(q) return MOLSCode(4, q); end); InstallOtherMethod(MOLSCode, "field", true, [IsField], 0, function(F) return MOLSCode(4, Size(F)); end); ## Was commented out in gap 3.4.4 Guava version. ############################################################################# ## #F QuadraticCosetCode( ) . . . . . . . . . . coset of RM(1,m) in R(2,m) ## ## QuadraticCosetCode(Q) returns a coset of the ReedMullerCode of ## order 1 (R(1,m)) in R(2,m) where m is the size of square matrix Q. ## Q is the upper triangular matrix that defines the quadratic part of ## the boolean functions that are in the coset. ## #QuadraticCosetCode := function(arg) # local Q, m, V, R, RM1, k, f, C, h, wd; # if Length(arg) = 1 and IsMat(arg[1]) then # Q := arg[1]; # else # Error("usage: QuadraticCosetCode( )"); # fi; # m := Length(Q); # V := Tuples(Elements(GF(2)), m); # R := V*Q*TransposedMat(V); # f := List([1..2^m], i->R[i][i]); # RM1 := Concatenation(NullMat(1,2^m,GF(2))+GF(2).one, # TransposedMat(Tuples(Elements(GF(2)), m))); # k := Length(RM1); # C := rec( # isDomain := true, # isCode := true, # operations := CodeOps, # baseField := GF(2), # wordLength := 2^m, # elements := Codeword(List(Tuples(Elements(GF(2)), k) * RM1, t-> t+f)), # lowerBoundMinimumDistance := 2^(m-1), # upperBoundMinimumDistance := 2^(m-1) # ); # h := RankMat(Q + TransposedMat(Q))/2; # wd := NullMat(1, 2^m+1)[1]; # wd[2^(m-1) - 2^(m-h-1) + 1] := 2^(2*h); # wd[2^(m-1) + 1] := 2^(m+1) - 2^(2*h + 1); # wd[2^(m-1) + 2^(m-h-1) + 1] := 2^(2*h); # C.weightDistribution := wd; # C.name := "quadratic coset code"; # return C; #end; ############################################################################# ## #F GeneratorMatCode( [, ], ) . . code from generator matrix ## InstallMethod(GeneratorMatCode, "generator matrix, name, field", true, [IsMatrix, IsString, IsField], 0, function(G, name, F) local C; if (Length(G) = 0) or (Length(G[1]) = 0) then Error("Use NullCode to generate a code with dimension 0"); fi; G:=G*One(F); G := BaseMat(G); C := LinearCodeByGenerators(F, Codeword(G,F)); SetGeneratorMat(C, G); SetWordLength(C, Length(G[1])); C!.name := name; return C; end); InstallOtherMethod(GeneratorMatCode, "generator matrix, field", true, [IsMatrix, IsField], 0, function(G, F) return GeneratorMatCode(G, "code defined by generator matrix", F); end); InstallOtherMethod(GeneratorMatCode, "generator matrix, name, size of field", true, [IsMatrix, IsString, IsInt], 0, function(G, name, q) return GeneratorMatCode(G, name, GF(q)); end); InstallOtherMethod(GeneratorMatCode, "generator matrix, size of field", true, [IsMatrix, IsInt], 0, function(G, q) return GeneratorMatCode(G, "code defined by generator matrix", GF(q)); end); ############################################################################# ## #F GeneratorMatCodeNC( , ) . . code from generator matrix ## ## same as GeneratorMatCode but does not compute upper + lower bounds ## for the minimum distance or covering radius ## InstallMethod(GeneratorMatCodeNC, "generator matrix, field", true, [IsMatrix, IsField], 0, function(G, F) return GeneratorMatCode(G, "code defined by generator matrix, NC", F); end); ############################################################################# ## #F CheckMatCodeMutable( [, ], ) . . code from check matrix ## The generator matrix is mutable ## InstallMethod(CheckMatCodeMutable, "check matrix, name, field", true, [IsMatrix, IsString, IsField], 0, function(H, name, F) local G, H2, C, dimC; if (Length(H) = 0) or (Length(H[1]) = 0) then Error("use WholeSpaceCode to generate a code with redundancy 0"); fi; H := VectorCodeword(Codeword(H, F)); H2 := BaseMat(H); if Length(H2) < Length(H) then H := H2; fi; # Get generator matrix from H if IsInStandardForm(H, false) then dimC := Length(H[1]) - Length(H); if dimC = 0 then G := []; else G := TransposedMat(Concatenation(IdentityMat( dimC, F ), List(-H, x->x{[1..dimC]}))); fi; else G := NullspaceMat(TransposedMat(H)); fi; if Length(G) = 0 then # Call NullCode. Length(H=I) = n-k, in this case. # Length(G) = k = 0 => n = Length(H). C := NullCode(Length(H), F); C!.name := name; return C; fi; C := LinearCodeByGenerators(F,Codeword(G, F)); SetGeneratorMat(C, ShallowCopy(G)); SetCheckMat(C, ShallowCopy(H)); SetWordLength(C, Length(G[1])); C!.name := name; return C; end); InstallOtherMethod(CheckMatCodeMutable, "check matrix, field", true, [IsMatrix, IsField], 0, function(H, F) return CheckMatCode(H, "code defined by check matrix", F); end); InstallOtherMethod(CheckMatCodeMutable, "check matrix, name, size of field", true, [IsMatrix, IsString, IsInt], 0, function(H, name, q) return CheckMatCode(H, name, GF(q)); end); InstallOtherMethod(CheckMatCodeMutable, "check matrix, size of field", true, [IsMatrix, IsInt], 0, function(H, q) return CheckMatCodeMutable(H, "code defined by check matrix", GF(q)); end); ############################################################################# ## #F CheckMatCode( [, ], ) . . . . . . code from check matrix ## InstallMethod(CheckMatCode, "check matrix, name, field", true, [IsMatrix, IsString, IsField], 0, function(H, name, F) local G, H2, C, dimC; if (Length(H) = 0) or (Length(H[1]) = 0) then Error("use WholeSpaceCode to generate a code with redundancy 0"); fi; H := VectorCodeword(Codeword(H, F)); H2 := BaseMat(H); if Length(H2) < Length(H) then H := H2; fi; # Get generator matrix from H if IsInStandardForm(H, false) then dimC := Length(H[1]) - Length(H); if dimC = 0 then G := []; else G := TransposedMat(Concatenation(IdentityMat( dimC, F ), List(-H, x->x{[1..dimC]}))); fi; else G := NullspaceMat(TransposedMat(H)); fi; if Length(G) = 0 then # Call NullCode. Length(H=I) = n-k, in this case. # Length(G) = k = 0 => n = Length(H). C := NullCode(Length(H), F); C!.name := name; return C; fi; C := LinearCodeByGenerators(F,Codeword(G, F)); SetGeneratorMat(C, G); SetCheckMat(C, H); SetWordLength(C, Length(G[1])); C!.name := name; return C; end); InstallOtherMethod(CheckMatCode, "check matrix, field", true, [IsMatrix, IsField], 0, function(H, F) return CheckMatCode(H, "code defined by check matrix", F); end); InstallOtherMethod(CheckMatCode, "check matrix, name, size of field", true, [IsMatrix, IsString, IsInt], 0, function(H, name, q) return CheckMatCode(H, name, GF(q)); end); InstallOtherMethod(CheckMatCode, "check matrix, size of field", true, [IsMatrix, IsInt], 0, function(H, q) return CheckMatCode(H, "code defined by check matrix", GF(q)); end); ############################################################################# ## #F RandomLinearCode( , [, ] ) . . . . . . . . random linear code ## InstallMethod(RandomLinearCode, "n,k,field", true, [IsInt, IsInt, IsField], 0, function(n, k, F) if k = 0 then return NullCode( n, F ); else return GeneratorMatCode(PermutedCols(List(IdentityMat(k,F), i -> Concatenation(i,List([k+1..n],j->Random(F)))), Random(SymmetricGroup(n))), "random linear code", F); fi; end); InstallOtherMethod(RandomLinearCode, "n,k,size of field", true, [IsInt, IsInt, IsInt], 0, function(n, k, q) return RandomLinearCode(n, k, GF(q)); end); InstallOtherMethod(RandomLinearCode, "n,k", true, [IsInt, IsInt], 0, function(n, k) return RandomLinearCode(n, k, GF(2)); end); ############################################################################# ## #F HammingCode( [, ] ) . . . . . . . . . . . . . . . . Hamming code ## InstallMethod(HammingCode, "r,F", true, [IsInt, IsField], 0, function(r, F) local q, H, H2, C, i, j, n, TupAllow, wd; TupAllow := function(W) local l; l := 1; while (W[l] = Zero(F)) and l < Length(W) do l := l + 1; od; return (W[l] = One(F)); end; q := Size(F); if not IsPrimePowerInt(q) then Error("q must be prime power"); fi; H := Tuples(AsSSortedList(F), r); H2 := []; j := 1; for i in [1..Length(H)] do if TupAllow(H[i]) then H2[j] := H[i]; j := j + 1; fi; od; n := (q^r-1)/(q-1); C := CheckMatCode(TransposedMat(H2), Concatenation("Hamming (", String(r), ",", String(q), ") code"), F); C!.lowerBoundMinimumDistance := 3; C!.upperBoundMinimumDistance := 3; C!.boundsCoveringRadius := [ 1 ]; SetIsPerfectCode(C, true); SetIsSelfDualCode(C, false); SetSpecialDecoder(C, HammingDecoder); if q = 2 then SetIsNormalCode(C, true); wd := [1, 0]; for i in [2..n] do Add(wd, 1/i * (Binomial(n, i-1) - wd[i] - (n-i+2)*wd[i-1])); od; SetWeightDistribution(C, wd); fi; return C; end); InstallOtherMethod(HammingCode, "r,size of field", true, [IsInt, IsInt], 0, function(r, q) return HammingCode(r, GF(q)); end); InstallOtherMethod(HammingCode, "r", true, [IsInt], 0, function(r) return HammingCode(r, GF(2)); end); ############################################################################# ## #F SimplexCode( , ) . The SimplexCode is the Dual of the HammingCode ## InstallMethod(SimplexCode, "redundancy, field", true, [IsInt, IsField], 0, function(r, F) local C; C := DualCode( HammingCode(r,F) ); C!.name := "simplex code"; if F = GF(2) then SetIsNormalCode(C, true); C!.boundsCoveringRadius := [ 2^(r-1) - 1 ]; fi; return C; end); InstallOtherMethod(SimplexCode, "redundancy, fieldsize", true,[IsInt,IsInt],0, function(r, q) return SimplexCode(r, GF(q)); end); InstallOtherMethod(SimplexCode, "redundancy", true, [IsInt], 0, function(r) return SimplexCode(r, GF(2)); end); ############################################################################# ## #F ReedMullerCode( , ) . . . . . . . . . . . . . . Reed-Muller code ## ## ReedMullerCode(r, k) creates a binary Reed-Muller code of dimension k, ## order r; 0 <= r <= k ## InstallMethod(ReedMullerCode, "dimension, order", true, [IsInt,IsInt], 0, function(r,k) local mat,c,src,dest,index,num,dim,C,wd, h,t,A, bcr; if r > k then return ReedMullerCode(k, r); #for compatibility with older versions #of guava, It used to be #ReedMullerCode(k, r); fi; mat := [ [] ]; num := 2^k; dim := Sum(List([0..r], x->Binomial(k,x))); for t in [1..num] do mat[1][t] := Z(2)^0; od; if r > 0 then Append(mat, TransposedMat(Tuples ([0*Z(2), Z(2)^0], k))); for t in [2..r] do for index in Combinations([1..k], t) do dest := List([1..2^k], i->Product(index, j->mat[j+1][i])); Append(mat, [dest]); od; od; fi; C := GeneratorMatCode( mat, Concatenation("Reed-Muller (", String(r), ",", String(k), ") code"), GF(2) ); C!.lowerBoundMinimumDistance := 2^(k-r); C!.upperBoundMinimumDistance := 2^(k-r); SetIsPerfectCode(C, false); SetIsSelfDualCode(C, (2*r = k-1)); if r = 0 then wd := List([1..num + 1], x -> 0); wd[1] := 1; wd[num+1] := 1; SetWeightDistribution(C, wd); elif r = 1 then wd := List([1..num + 1], x -> 0); wd[1] := 1; wd[num + 1] := 1; wd[num / 2 + 1] := Size(C) - 2; SetWeightDistribution(C, wd); elif r = 2 then wd := List([1..num + 1], x -> 0); wd[1] := 1; wd[num + 1] := 1; for h in [1..QuoInt(k,2)] do A := 2^(h*(h+1)); for t in [0..2*h-1] do A := A*(2^(k-t)-1); od; for t in [1..h] do A := A/(2^(2*t)-1); od; wd[2^(k-1)+2^(k-1-h)+1] := A; wd[2^(k-1)-2^(k-1-h)+1] := A; od; wd[2^(k-1)+1] := Size(C)-Sum(wd); SetWeightDistribution(C, wd); fi; bcr := BoundsCoveringRadius( C ); if 0 <= r and r <= k-3 then if IsEvenInt( r ) then C!.boundsCoveringRadius := [ Maximum( 2^(k-r-3)*(r+4), bcr[1] ) .. Maximum( bcr ) ]; else C!.boundsCoveringRadius := [ Maximum( 2^(k-r-3)*(r+5), bcr[ 1 ] ) .. Maximum( bcr ) ]; fi; fi; if r = k then SetCoveringRadius(C, 0); C!.boundsCoveringRadius := [ 0 ]; elif r = k - 1 then SetCoveringRadius(C, 1); C!.boundsCoveringRadius := [ 1 ]; elif r = k - 2 then SetCoveringRadius(C, 2); C!.boundsCoveringRadius := [ 2 ]; elif r = k - 3 then if IsEvenInt( k ) then SetCoveringRadius(C, k + 2 ); C!.boundsCoveringRadius := [ k + 2 ]; else SetCoveringRadius(C, k + 1 ); C!.boundsCoveringRadius := [ k + 1 ]; fi; elif r = 0 then SetCoveringRadius(C, 2^(k-1) ); C!.boundsCoveringRadius := [ 2^(k-1) ]; elif r = 1 then if IsEvenInt( k ) then SetCoveringRadius(C, 2^(k-1) - 2^(k/2-1) ); C!.boundsCoveringRadius := [ 2^(k-1) - 2^(k/2-1) ]; elif k = 5 then SetCoveringRadius(C, 12 ); C!.boundsCoveringRadius := [ 12 ]; elif k = 7 then SetCoveringRadius(C, 56 ); C!.boundsCoveringRadius := [ 56 ]; elif k >= 15 then C!.boundsCoveringRadius := [ 2^(k-1) - 2^((k+1)/2)*27/64 .. 2^(k-1) - 2^( QuoInt(k,2)-1 ) ]; else C!.boundsCoveringRadius := [ 2^(k-1) - 2^((k+1)/2)/2 .. 2^(k-1) - 2^( QuoInt(k,2)-1 ) ]; fi; elif r = 2 then if k = 6 then SetCoveringRadius(C, 18 ); C!.boundsCoveringRadius := [ 18 ]; elif k = 7 then C!.boundsCoveringRadius := [ 40 .. 44 ]; elif k = 8 then C!.boundsCoveringRadius := [ 84 .. Maximum( bcr ) ]; fi; elif r = 3 then if k = 7 then C!.boundsCoveringRadius := [ 20 .. 23 ]; fi; elif r = 4 then if k = 8 then C!.boundsCoveringRadius := [ 22 .. Maximum( bcr ) ]; fi; fi; if r = 1 and ( IsEvenInt( k ) or k = 3 or k = 5 or k = 7 ) then SetIsNormalCode(C, true); fi; return C; end); ############################################################################# ## #F LexiCode( , , ) . . . . . Greedy code with standard basis ## InstallMethod(LexiCode, "basis,distance,field", true, [IsMatrix, IsInt, IsField], 0, function(M, d, F) local base, n, k, one, zero, elms, Sz, vec, word, i, dist, carry, pos, C; base := VectorCodeword(Codeword(M, F)); n := Length(base[1]); k := Length(base); one := One(F); zero := Zero(F); elms := []; Sz := 0; vec := NullVector(k,F); repeat word := vec * base; i := 1; dist := d; while (dist>=d) and (i <= Sz) do dist := DistanceVecFFE(word, elms[i]); i := i + 1; od; if dist >= d then Add(elms,ShallowCopy(word)); Sz := Sz + 1; fi; # generate the (lexicographical) next word in F^k carry := true; pos := k; while carry and (pos > 0) do if vec[pos] = zero then carry := false; vec[pos] := one; else vec[pos] := PrimitiveRoot(F)^(LogFFE(vec[pos],PrimitiveRoot(F))+1); if vec[pos] = one then vec[pos] := zero; else carry := false; fi; fi; pos := pos - 1; od; until carry; if Size(F) = 2 then # or even (2^(2^LogInt(LogInt(q,2),2)) = q) ? C := GeneratorMatCode(elms, "lexicode", F); else C := ElementsCode(elms, "lexicode", F); fi; C!.lowerBoundMinimumDistance := d; return C; end); InstallOtherMethod(LexiCode, "basis,distance,size of field", true, [IsMatrix, IsInt, IsInt], 0, function(M, d, q) return LexiCode(M, d, GF(q)); end); InstallOtherMethod(LexiCode, "wordlength,distance,field", true, [IsInt, IsInt, IsField], 0, function(n, d, F) return LexiCode(IdentityMat(n,F), d, F); end); InstallOtherMethod(LexiCode, "wordlength,distance,size of field", true, [IsInt, IsInt, IsInt], 0, function(n, d, q) return LexiCode(IdentityMat(n, GF(q)), d, GF(q)); end); ############################################################################# ## #F GreedyCode( , [, ] ) . . . . Greedy code from list of elements ## InstallMethod(GreedyCode, "matrix,design distance,Field", true, [IsMatrix, IsInt, IsField], 0, function(M,d,F) local space, n, word, elms, Sz, i, dist, C; space := VectorCodeword(Codeword(M,F)); n := Length(space[1]); elms := [space[1]]; Sz := 1; for word in space do i := 1; repeat dist := DistanceVecFFE(word, elms[i]); i := i + 1; until dist < d or i > Sz; if dist >= d then Add(elms, word); Sz := Sz + 1; fi; od; C := ElementsCode(elms, "Greedy code, user defined basis", F); C!.lowerBoundMinimumDistance := d; return C; end); InstallOtherMethod(GreedyCode, "matrix,design distance,size of field", true, [IsMatrix, IsInt, IsInt], 0, function(M,d,q) return GreedyCode(M,d,GF(q)); end); InstallOtherMethod(GreedyCode, "matrix,design distance", true, [IsMatrix,IsInt], 0, function(M,d) return GreedyCode(M,d,DefaultField(Flat(M))); end); ############################################################################# ## #F AlternantCode( , [, ], ) . . . . . . . Alternant code ## InstallMethod(AlternantCode, "redundancy, Y, alpha, field", true, [IsInt, IsList, IsList, IsField], 0, function(r, Y, els, F) local C, n, q, i, temp; n := Length(Y); els := Set(VectorCodeword(Codeword(els, F))); Y := VectorCodeword(Codeword(Y, F) ); if ForAny(Y, i-> i = Zero(F)) then Error("Y contains zero"); elif Length(els) <> Length(Y) then Error(" and have inequal length or is not distinct"); fi; q := Characteristic(F); temp := MutableNullMat(n, n, F); for i in [1..n] do temp[i][i] := Y[i]; od; Y := temp; C := CheckMatCode( BaseMat(VerticalConversionFieldMat( List([0..r-1], i -> List([1..n], j-> els[j]^i)) * Y)), "alternant code", F ); C!.lowerBoundMinimumDistance := r + 1; return C; end); InstallOtherMethod(AlternantCode, "redundancy, Y, alpha, fieldsize", true, [IsInt, IsList, IsList, IsInt], 0, function(r, Y, a, q) return AlternantCode(r, Y, a, GF(q)); end); InstallOtherMethod(AlternantCode, "redundancy, Y, field", true, [IsInt, IsList, IsField], 0, function(r, Y, F) return AlternantCode(r, Y, AsSSortedList(F){[2..Length(Y)+1]}, F); end); InstallOtherMethod(AlternantCode, "redundancy, Y, fieldsize", true, [IsInt, IsList, IsInt], 0, function(r, Y, q) return AlternantCode(r, Y, AsSSortedList(GF(q)){[2..Length(Y)+1]}, GF(q)); end); ############################################################################# ## #F GoppaCode( , ) . . . . . . . . . . . . . . classical Goppa code ## InstallGlobalFunction(GoppaCode, function(arg) local C, GP, F, L, n, q, m, r, zero, temp; GP := PolyCodeword(Codeword(arg[1])); F := CoefficientsRing(DefaultRing(GP)); q := Characteristic(F); m := Dimension(F); F := GF(q); zero := Zero(F); r := DegreeOfLaurentPolynomial(GP); # find m if IsInt(arg[2]) then n := arg[2]; m := Maximum(m, LogInt(n,q)); repeat L := Filtered(AsSSortedList(GF(q^m)),i -> Value(GP,i) <> zero); m := m + 1; until Length(L) >= n; m := m - 1; L := L{[1..n]}; else L := arg[2]; n := Length(L); m := Maximum(m, Dimension(DefaultField(L))); fi; C := CheckMatCode( BaseMat(VerticalConversionFieldMat( List([0..r-1], i-> List(L, j-> (j)^i / Value(GP, j) )) )), "classical Goppa code", F); # Make the code temp := Factors(GP); if (q = 2) and (Length(temp) = Length(Set(temp))) then # second condition checks if the roots of G are distinct C!.lowerBoundMinimumDistance := Minimum(n, 2*r + 1); else C!.lowerBoundMinimumDistance := Minimum(n, r + 1); fi; return C; end); ############################################################################# ## #F CordaroWagnerCode( ) . . . . . . . . . . . . . . Cordaro-Wagner code ## InstallMethod(CordaroWagnerCode, "length", true, [IsInt], 0, function(n) local r, C, zero, one, F, d, wd; if n < 2 then Error("n must be 2 or more"); fi; r := Int((n+1)/3); d := (2 * r - Int( (n mod 3) / 2) ); F := GF(2); zero := Zero(F); one := One(F); C := GeneratorMatCode( [Concatenation(List([1..r],i -> zero), List([r+1..n],i -> one)), Concatenation(List([r+1..n],i -> one), List([1..r], i -> zero))], "Cordaro-Wagner code", F ); C!.lowerBoundMinimumDistance := d; C!.upperBoundMinimumDistance := d; wd := List([1..n+1], i-> 0); wd[1] := 1; wd[2*r+1] := 1; wd[n-r+1] := wd[n-r+1] + 2; SetWeightDistribution(C, wd); return C; end); ############################################################################# ## #F GeneralizedSrivastavaCode( , , [, ] [, ] ) . . . . . . ## InstallMethod(GeneralizedSrivastavaCode, "a,w,z,t,F", true, [IsList, IsList, IsList, IsInt, IsField], 0, function(a,w,z,t,F) local C, n, s, i, H; a := VectorCodeword(Codeword(a, F)); w := VectorCodeword(Codeword(w, F)); z := VectorCodeword(Codeword(z, F)); n := Length(a); s := Length(w); if Length(Set(Concatenation(a,w))) <> n + s then Error(" and w are not distinct"); fi; if ForAny(z,i -> i = Zero(F)) then Error(" must be nonzero"); fi; H := []; for i in List([1..s], index -> List([1..t], vert -> List([1..n], hor -> z[hor]/(a[hor] - w[index])^vert))) do Append(H, i); od; C := CheckMatCode( BaseMat(VerticalConversionFieldMat(H)), "generalized Srivastava code", GF(Characteristic(F)) ); C!.lowerBoundMinimumDistance := s + 1; return C; end); InstallOtherMethod(GeneralizedSrivastavaCode, "a,w,z,t,q", true, [IsList, IsList, IsList, IsInt, IsInt], 0, function(a, w, z, t, q) return GeneralizedSrivastavaCode(a, w, z, t, GF(q)); end); InstallOtherMethod(GeneralizedSrivastavaCode, "a,w,z,t", true, [IsList, IsList, IsList, IsInt], 0, function(a, w, z, t) return GeneralizedSrivastavaCode(a, w, z, t, DefaultField(Concatenation(a,w,z))); end); InstallOtherMethod(GeneralizedSrivastavaCode, "a,w,z,F", true, [IsList, IsList, IsList, IsField], 0, function(a, w, z, F) return GeneralizedSrivastavaCode(a, w, z, 1, F); end); InstallOtherMethod(GeneralizedSrivastavaCode, "a, w, z", true, [IsList, IsList, IsList], 0, function(a, w, z) return GeneralizedSrivastavaCode(a, w, z, 1, DefaultField(Concatenation(a, w, z))); end); ############################################################################# ## #F SrivastavaCode( , [, ] [, ] ) . . . . . . . Srivastava code ## InstallMethod(SrivastavaCode, "a,w,mu,F", true, [IsList,IsList,IsInt, IsField], 0, function(a, w, mu, F) local C, n, s, i, zero, TheMat; a := VectorCodeword(Codeword(a, F)); w := VectorCodeword(Codeword(w, F)); n := Length(a); s := Length(w); if Length(Set(Concatenation(a,w))) <> n + s then Error("the elements of and w are not distinct"); fi; zero := Zero(F); for i in [1.. n] do if a[i]^mu = zero then Error("z[",i,"] = ",a[i],"^",mu," = ",zero); fi; od; TheMat := List([1..s], j -> List([1..n], i -> a[i]^mu/(a[i] - w[j]) )); C := CheckMatCode( BaseMat(VerticalConversionFieldMat(TheMat)), "Srivastava code", GF(Characteristic(F)) ); C!.lowerBoundMinimumDistance := s + 1; return C; end); InstallOtherMethod(SrivastavaCode, "a,w,mu,q", true, [IsList,IsList,IsInt,IsInt], 0, function(a, w, mu, q) return SrivastavaCode(a, w, mu, GF(q)); end); InstallOtherMethod(SrivastavaCode, "a,w,mu", true, [IsList,IsList,IsInt], 0, function(a, w, mu) return SrivastavaCode(a, w, mu, DefaultField(Concatenation(a,w))); end); InstallOtherMethod(SrivastavaCode, "a,w,F", true, [IsList,IsList,IsField], 0, function(a, w, F) return SrivastavaCode(a, w, 1, F); end); InstallOtherMethod(SrivastavaCode, "a,w", true, [IsList,IsList], 0, function(a, w) return SrivastavaCode(a, w, 1, DefaultField(Concatenation(a,w))); end); ############################################################################# ## #F ExtendedBinaryGolayCode( ) . . . . . . . . . extended binary Golay code ## InstallMethod(ExtendedBinaryGolayCode, "only method", true, [], 0, function() local C; C := ExtendedCode(BinaryGolayCode()); C!.name := "extended binary Golay code"; Unbind( C!.history ); SetIsCyclicCode(C, false); SetIsPerfectCode(C, false); SetIsSelfDualCode(C, true); C!.boundsCoveringRadius := [ 4 ]; SetIsNormalCode(C, true); SetWeightDistribution(C, [1,0,0,0,0,0,0,0,759,0,0,0,2576,0,0,0,759,0,0,0,0,0,0,0,1]); #SetAutomorphismGroup(C, M24); C!.lowerBoundMinimumDistance := 8; C!.upperBoundMinimumDistance := 8; return C; end); ############################################################################# ## #F ExtendedTernaryGolayCode( ) . . . . . . . . . extended ternary Golay code ## InstallMethod(ExtendedTernaryGolayCode, "only method", true, [], 0, function() local C; C := ExtendedCode(TernaryGolayCode()); SetIsCyclicCode(C, false); SetIsPerfectCode(C, false); SetIsSelfDualCode(C, true); C!.boundsCoveringRadius := [ 3 ]; SetIsNormalCode(C, true); C!.name := "extended ternary Golay code"; Unbind( C!.history ); SetWeightDistribution(C, [1,0,0,0,0,0,264,0,0,440,0,0,24]); #SetAutomorphismGroup(C, M12); C!.lowerBoundMinimumDistance := 6; C!.upperBoundMinimumDistance := 6; return C; end); ############################################################################# ## #F BestKnownLinearCode( , [, ] ) . returns best known linear code #F BestKnownLinearCode( ) ## ## L describs how to create a code. L is a list with two elements: ## L[1] is a function and L[2] is a list of arguments for L[1]. ## One or more of the argumenst of L[2] may again be such descriptions and ## L[2] can be an empty list. ## The field .construction contains such a list or false if the code is not ## yet in the apropiatelibrary file (/tbl/codeq.g) ## InstallMethod(BestKnownLinearCode, "method for bounds/construction record", true, [IsRecord], 0, function(bds) local MakeCode, C; # L describs how to create a code. L is a list with two elements: # L[1] is a function and L[2] is a list of arguments for L[1]. # One or more of the argumenst of L[2] may again be such descriptions and # L[2] can be an empty list. MakeCode := function(L) #beware: this is the most beautiful function in GUAVA (according to J) if IsList(L) and IsBound(L[1]) and IsFunction(L[1]) then return CallFuncList( L[1], List( L[2], i -> MakeCode(i) ) ); else return L; fi; end; if not IsBound(bds.construction) then bds := BoundsMinimumDistance(bds.n, bds.k, bds.q); fi; if bds.construction = false then Error("code not yet in library"); else C := MakeCode(bds.construction); if LowerBoundMinimumDistance(C) > bds.lowerBound then Print("New table entry found!\n"); fi; C!.lowerBoundMinimumDistance := Maximum(bds.lowerBound, LowerBoundMinimumDistance(C)); C!.upperBoundMinimumDistance := Minimum(bds.upperBound, UpperBoundMinimumDistance(C)); return C; fi; end); InstallOtherMethod(BestKnownLinearCode, "n, k, q", true, [IsInt, IsInt, IsInt], 0, function(n, k, q) local r; r := BoundsMinimumDistance(n, k, q); return BestKnownLinearCode(r); end); InstallOtherMethod(BestKnownLinearCode, "n, k, F", true, [IsInt, IsInt, IsField], 0, function(n, k, F) local r; r := BoundsMinimumDistance(n, k, Size(F)); return BestKnownLinearCode(r); end); InstallOtherMethod(BestKnownLinearCode, "n, k", true, [IsInt, IsInt], 0, function(n, k) local r; r := BoundsMinimumDistance(n, k); return BestKnownLinearCode(r); end); ## Helper functions for cyclic code creation GeneratorMatrixFromPoly := function(p,n) local coeffs, j, res, r, zero; coeffs := CoefficientsOfLaurentPolynomial(p); coeffs := ShiftedCoeffs(coeffs[1], coeffs[2]); r := DegreeOfLaurentPolynomial(p); zero := Zero(Field(coeffs)); res := []; res[1] := []; # first row Append(res[1], coeffs); Append(res[1], List([r+2..n], i->zero)); # 2..last-1 if n-r > 2 then for j in [2..(n-r-1)] do res[j] := []; Append(res[j], List([1..j-1], i->zero)); Append(res[j], coeffs); Append(res[j], List([r+1+j..n], i->zero)); od; fi; # last row if n-r > 1 then res[n-r] := []; Append(res[n-r], List([1..n-r-1], i->zero)); Append(res[n-r], coeffs); fi; return res; end; CyclicCodeByGenerator := function(F, n, G) local C, GM; ## for now, using linear code representation. ## Get generator matrix and call linear code creation function ## Note input is a codeword, for consistency. ## Further note GenMatFromPoly doesn't handle NullPoly case well, ## so calling NullMat instead. Once using poly rep, this should be ## unnecessary. ## And GMFP doesn't handle p = x^n-1 case. if (G = NullWord(n,F)) or (VectorCodeword(G) = []) or (G = Codeword(Indeterminate(F)^n-One(F), F)) then GM := NullMat(1,n,F); else GM := GeneratorMatrixFromPoly(PolyCodeword(G), n); fi; C := LinearCodeByGenerators(F, Codeword(GM, F)); SetGeneratorMat(C, GM); SetIsCyclicCode(C, true); SetSpecialDecoder(C, CyclicDecoder); return C; end; ############################################################################# ## #F GeneratorPolCode( , [, ], ) . code from generator poly ## InstallMethod(GeneratorPolCode, "Poly, wordlength,name,field", true, [IsUnivariatePolynomial, IsInt, IsString, IsField], 0, function(G, n, name, F) local R; G := PolyCodeword( Codeword(G, F) ); if not IsZero(G) then G := Gcd(G,(Indeterminate(F)^n-One(F))); fi; R := CyclicCodeByGenerator(F, n, Codeword(G, F)); SetGeneratorPol(R, G); R!.name := name; return R; end); InstallOtherMethod(GeneratorPolCode, "Poly,wordlength,field", true, [IsUnivariatePolynomial, IsInt, IsField], 0, function(G, n, F) return GeneratorPolCode(G,n,"code defined by generator polynomial", F); end); InstallOtherMethod(GeneratorPolCode, "Poly,wordlength,name,fieldsize", true, [IsUnivariatePolynomial, IsInt, IsString, IsInt], 0, function(G, n, name, q) return GeneratorPolCode(G, n, name, GF(q)); end); InstallOtherMethod(GeneratorPolCode, "Poly, wordlength, fieldsize", true, [IsUnivariatePolynomial, IsInt, IsInt], 0, function(G, n, q) return GeneratorPolCode(G, n, "code defined by generator polynomial", GF(q)); end); ############################################################################# ## #F CheckPolCode( , [, ], ) . . code from check polynomial ## InstallMethod(CheckPolCode, "check poly, wordlength, name, field", true, [IsUnivariatePolynomial, IsInt, IsString, IsField], 0, function(H, n, name, F) local R,G; H := PolyCodeword( Codeword(H, F) ); H := Gcd(H, (Indeterminate(F)^n-One(F))); # Get generator pol G := EuclideanQuotient((Indeterminate(F)^n-One(F)), H); R := CyclicCodeByGenerator(F, n, Codeword(G,F)); SetCheckPol(R, H); SetGeneratorPol(R, G); R!.name := name; return R; end); InstallOtherMethod(CheckPolCode, "check poly, wordlength, field", true, [IsUnivariatePolynomial, IsInt, IsField], 0, function(H, n, F) return CheckPolCode(H, n, "code defined by check polynomial", F); end); InstallOtherMethod(CheckPolCode, "check poly, wordlength, name, fieldsize", true, [IsUnivariatePolynomial, IsInt, IsString, IsInt], 0, function(H, n, name, q) return CheckPolCode(H, n, name, GF(q)); end); InstallOtherMethod(CheckPolCode, "check poly, wordlength, fieldsize", true, [IsUnivariatePolynomial, IsInt, IsInt], 0, function(H, n, q) return CheckPolCode(H, n, "code defined by check polynomial", GF(q)); end); ############################################################################# ## #F RepetitionCode( [, ] ) . . . . . . . repetition code of length ## InstallMethod( RepetitionCode, "wordlength, Field", true, [IsInt, IsField], 0, function(n, F) local C, q, wd, p; q :=Size(F); p := LaurentPolynomialByCoefficients( ElementsFamily(FamilyObj(F)), List([1..n], t->One(F)), 0); C := GeneratorPolCode(p, n, "repetition code", F); C!.lowerBoundMinimumDistance := n; C!.upperBoundMinimumDistance := n; if n = 2 and q = 2 then SetIsSelfDualCode(C, true); else SetIsSelfDualCode(C, false); fi; wd := NullVector(n+1); wd[1] := 1; wd[n+1] := q-1; SetWeightDistribution(C, wd); if n < 260 then SetAutomorphismGroup(C, SymmetricGroup(n)); fi; if F = GF(2) then SetIsNormalCode(C, true); fi; if (n mod 2 = 0) or (F <> GF(2)) then SetIsPerfectCode(C, false); C!.boundsCoveringRadius := [ Minimum(n-1,QuoInt((q-1)*n,q)) ]; else C!.boundsCoveringRadius := [ QuoInt(n,2) ]; SetIsPerfectCode(C, true); fi; return C; end); InstallOtherMethod(RepetitionCode, "wordlength, fieldsize", true, [IsInt, IsInt], 0, function(n, q) return RepetitionCode(n, GF(q)); end); InstallOtherMethod(RepetitionCode, "wordlength", true, [IsInt], 0, function(n) return RepetitionCode(n, GF(2)); end); ############################################################################# ## #F WholeSpaceCode( [, ] ) . . . . . . . . . . returns ^ as code ## InstallMethod(WholeSpaceCode, "wordlength, Field", true, [IsInt, IsField], 0, function(n, F) local C, index, q; C := GeneratorPolCode( Indeterminate(F)^0, n, "whole space code", F); C!.lowerBoundMinimumDistance := 1; C!.upperBoundMinimumDistance := 1; SetAutomorphismGroup(C, SymmetricGroup(n)); C!.boundsCoveringRadius := [ 0 ]; if F = GF(2) then SetIsNormalCode(C, true); fi; SetIsPerfectCode(C, true); SetIsSelfDualCode(C, false); q := Size(F) - 1; SetWeightDistribution(C, List([0..n], i-> q^i*Binomial(n, i)) ); return C; end); InstallOtherMethod(WholeSpaceCode, "wordlength, fieldsize", true, [IsInt, IsInt], 0, function(n, q) return WholeSpaceCode(n, GF(q)); end); InstallOtherMethod(WholeSpaceCode, "wordlength", true, [IsInt], 0, function(n) return WholeSpaceCode(n, GF(2)); end); ############################################################################# ## #F CyclicCodes( ) . . returns a list of all cyclic codes of length ## InstallMethod(CyclicCodes, "wordlength, Field", true, [IsInt, IsField], 0, function(n, F) local f, Pl; f := Factors(Indeterminate(F) ^ n - One(F)); Pl := List(Combinations(f), c->Product(c)*Indeterminate(F)^0); return List(Pl, p->GeneratorPolCode(p, n, "enumerated code", F)); end); InstallOtherMethod(CyclicCodes, "wordlength, k, Field", true, [IsInt, IsInt, IsField], 0, function(n, k, F) local r, f, Pl, codes; r := n - k; f := Factors(Indeterminate(F)^n-One(F)); Pl := []; codes := function(f, g) local i, tempf; if Degree(g) < r then i := 1; while i <= Length(f) and Degree(g)+Degree(f[i][1]) <= r do if f[i][2] = 1 then tempf := f{[ i+1 .. Length(f) ]}; else tempf := ShallowCopy( f ); tempf[i][2] := f[i][2] - 1; fi; codes( tempf, g * f[i][1] ); i := i + 1; od; elif Degree(g) = r then Add( Pl, g ); fi; end; codes( Collected( f ), Indeterminate(F)^0 ); return List(Pl, p->GeneratorPolCode(p,n,"enumerated code",F)); end); InstallOtherMethod(CyclicCodes, "wordlength, fieldsize", true, [IsInt, IsInt], 0, function(n, q) return CyclicCodes(n, GF(q)); end); InstallOtherMethod(CyclicCodes, "wordlength, k, fieldsize", true, [IsInt, IsInt, IsInt], 0, function(n, k, q) return CyclicCodes(n, k, GF(q)); end); ############################################################################# ## #F NrCyclicCodes( , ) . . . number of cyclic codes of length ## InstallMethod(NrCyclicCodes, "wordlength, Field", true, [IsInt, IsField], 0, function(n, F) return NrCombinations(Factors(Indeterminate(F)^n-One(F))); end); InstallOtherMethod(NrCyclicCodes, "wordlength, fieldsize", true, [IsInt, IsInt], 0, function(n, q) return NrCyclicCodes(n, GF(q)); end); ############################################################################# ## #F BCHCode( [, ], [, ] ) . . . . . . . . . . . . BCH code ## ## BCHCode (n [, b ], delta [, F]) returns the BCH code over F with ## wordlength n, designedDistance delta, constructed from powers ## x^b, x^(b+1), ..., x^(b+delta-2), where x is a primitive n'th power root ## of unity; b = 1 by default; the function returns a narrow sense BCH code ## Gcd(n,q) = 1 and 2<=delta<=n-b+1 InstallMethod(BCHCode, "wordlength, start, designed distance, fieldsize", true, [IsInt, IsInt, IsInt, IsInt], 0, function(n, start, del, q) local stop, m, b, C, test, Cyclo, PowerSet, t, zero, desdist, G, superfl, i, BCHTable; BCHTable := [ [31,11,11], [63,36,11], [63,30,13], [127,92,11], [127,85,13], [255,223,9], [255,215,11], [255,207,13], [255,187,19], [255,171,23], [255,155,27], [255,99,47], [255,79,55], [255,29,95], [255,21,111] ]; ########### increase size of table? - wdj stop := start + del - 2; if Gcd(n,q) <> 1 then Error ("n and q must be relative primes"); fi; zero := Zero(GF(q)); m := OrderMod(q,n); b := PrimitiveUnityRoot(q,n); PowerSet := [start..stop]; G := Indeterminate(GF(q))^0; while Length(PowerSet) > 0 do test := PowerSet[1] mod n; ############### changed 8-1-2004 G := G * MinimalPolynomial(GF(q), b^test); t := (q*test) mod n; while t <> (test mod n) do ############### changed 7-31-2004 RemoveSet(PowerSet, t); t := (q*t) mod n; od; RemoveSet(PowerSet, test); od; ###################################### ###### This loop computes the product of the ###### min polys of the elements when it should only ###### compute the lcm of them ###### Why not use cyclotomic codests and roots of code? ###################################### C := GeneratorPolCode(G, n, GF(q)); ########### this removes extra powers by taking the gcd with x^n-1 SetSpecialDecoder(C, BCHDecoder); ########### this overwrites SetSpecialDecoder(C, CyclicDecoder); # Calculate Bose distance: Cyclo := CyclotomicCosets(q,n); ######## why not do this in the above loop? PowerSet := []; for t in [start..stop] do for test in [1..Length(Cyclo)] do if (t mod n) in Cyclo[test] then ##### added 8-1-2004 AddSet(PowerSet, Cyclo[test]); fi; od; od; PowerSet := Flat(PowerSet); while stop + 1 in PowerSet do stop := stop + 1; od; while start - 1 in PowerSet do start := start - 1; od; desdist := stop - start + 2; if desdist > n then Error("invalid designed distance"); fi; # In some cases the true minimumdistance is known: SetDesignedDistance(C, desdist); C!.lowerBoundMinimumDistance := desdist; if (q=2) and (n mod desdist = 0) and (start = 1) then C!.upperBoundMinimumDistance := desdist; elif q=2 and desdist mod 2 = 0 and (n=2^m - 1) and (start=1) and (Sum(List([0..QuoInt(desdist-1, 2) + 1], i -> Binomial(n, i))) > (n + 1) ^ QuoInt(desdist-1, 2)) then C!.upperBoundMinimumDistance := desdist; elif (n = q^m - 1) and (desdist = q^OrderMod(q,desdist) - 1) and (start=1) then C!.upperBoundMinimumDistance := desdist; fi; # Look up this code in the table ########## table only for q=2^r, add this to if statement ########## to speed this up ?? - wdj if start=1 then for i in BCHTable do if i[1] = n and i[2] = Dimension(C) then C!.lowerBoundMinimumDistance := i[3]; C!.upperBoundMinimumDistance := i[3]; fi; od; fi; # Calculate minimum of q*desdist - 1 for primitive n.s. BCH code if q^m - 1 = n and start = 1 then PowerSet := [start..stop]; superfl := true; i := PowerSet[Length(PowerSet)] * q mod n; while superfl do while i <> PowerSet[Length(PowerSet)] and not i in PowerSet do i := i * q mod n; od; if i = PowerSet[Length(PowerSet)] then superfl := false; else PowerSet := PowerSet{[1..Length(PowerSet)-1]}; i := PowerSet[Length(PowerSet)] * q mod n; fi; od; C!.upperBoundMinimumDistance := Minimum(UpperBoundMinimumDistance(C), q * (Length(PowerSet) + 1) - 1); fi; C!.name := Concatenation("BCH code, delta=", String(desdist), ", b=", String(start)); return C; end); InstallOtherMethod(BCHCode, "wordlength, start, designed distance, Field", true, [IsInt, IsInt, IsInt, IsField], 0, function(n, b, del, F) return BCHCode(n, b, del, Size(F)); end); InstallOtherMethod(BCHCode, "wordlength, designed distance", true, [IsInt, IsInt], 0, function(n, del) return BCHCode(n, 1, del, 2); end); InstallOtherMethod(BCHCode, "wordlength, start, designed distance", true, [IsInt, IsInt, IsInt], 0, function(n, b, del) return BCHCode(n, b, del, 2); end); InstallOtherMethod(BCHCode, "wordlength, designed distance, field", true, [IsInt, IsInt, IsField], 0, function(n, del, F) return BCHCode(n, 1, del, Size(F)); end); ############################################################################# ## #F ReedSolomonCode( , ) . . . . . . . . . . . . . . Reed-Solomon code ## ## ReedSolomonCode (n, d) returns a primitive narrow sense BCH code with ## wordlength n, over alphabet q = n+1, designed distance d InstallMethod(ReedSolomonCode, "wordlength, designed distance", true, [IsInt, IsInt], 0, function(n, d) local C,b,q,wd,w; q := n+1; if not IsPrimePowerInt(q) then Error("q = n+1 must be a prime power"); fi; b := Z(q); C := GeneratorPolCode(Product([1..d-1], i-> (Indeterminate(GF(q))-b^i)), n, "Reed-Solomon code", GF(q) ); SetRootsOfCode(C, List([1..d-1], i->b^i)); C!.lowerBoundMinimumDistance := d; C!.upperBoundMinimumDistance := d; SetDesignedDistance(C, d); SetSpecialDecoder(C, BCHDecoder); IsMDSCode(C); # Calculate weightDistribution field return C; end); InstallMethod(ExtendedReedSolomonCode, "wordlength, designed distance", true, [IsInt, IsInt], 0, function(n, d) local i, j, s, C, G, Ce; C := ReedSolomonCode(n-1, d-1); G := MutableCopyMat( GeneratorMat(C) ); TriangulizeMat(G); for i in [1..Size(G)] do; s := 0; for j in [1..Size(G[i])] do; s := s + G[i][j]; od; Append(G[i], [-s]); od; Ce := GeneratorMatCodeNC(G, LeftActingDomain(C)); Ce!.name := "extended Reed Solomon code"; Ce!.lowerBoundMinimumDistance := d; Ce!.upperBoundMinimumDistance := d; IsMDSCode(Ce); return Ce; end); ############################################################################# ## #F RootsCode( , ) . . . code constructed from roots of polynomial ## ## RootsCode (n, rootlist) or RootsCode (n, , F) returns the ## code with generator polynomial equal to the least common multiplier of ## the minimal polynomials of the n'th roots of unity in the list. ## The code has wordlength n ## ## rewritten 9-2004 #################################### InstallMethod(RootsCode, "method for n, rootlist", true, [IsInt, IsList, IsField], 0, function(n, L, F) local g, C, num, power, q, z, i, j, rootslist, powerlist, max, cc, CC, CCz; L := Set(L); q := Size(Field(L)); z := Z(q); g:=One(F); if List(L, i->i^n) <> NullVector(Length(L), F) + z^0 then Error("powers must all be n'th roots of unity"); fi; CC:=CyclotomicCosets(q,q-1); CCz:=List([1..Length(CC)],i->List(CC[i],j->z^j)); ## this is the set of cyclotomic cosets, represented ## as powers of a primitive element z powerlist := []; for i in [1..Length(L)] do for cc in CCz do if L[i] in cc then Append(powerlist,[cc]); fi; od; od; ########### add a cyclotomic coset into powerlist ########### if there is an element of L in that coset g:=Product([1..Length(powerlist)],i->MinimalPolynomial(F,powerlist[i][1])); C:=GeneratorPolCode(g,n,"code defined by roots",F); SetRootsOfCode(C,powerlist); rootslist := []; # Find the largest number of successive powers for BCH bound max := 1; i := 1; num := Length(powerlist); for z in [2..num] do if powerlist[z] <> powerlist[i] + z-i then max := Maximum(max, z - i); i := z; fi; od; C!.lowerBoundMinimumDistance := Maximum(max, num+1 - i) + 1; SetRootsOfCode(C, rootslist); return C; end); InstallOtherMethod(RootsCode, "method for n, powerlist, fieldsize", true, [IsInt, IsList, IsInt], 0, function(n, L, q) local z; z := PrimitiveUnityRoot(q,n); L := Set(List(L, i->z^i)); return RootsCode(n, L, GF(q)); end); ################# wrong!! #InstallOtherMethod(RootsCode, "method for n, powerlist, field", true, # [IsInt, IsList, IsField], 0, #function(n, L, F) # return RootsCode(n, L, Size(F)); #end); ########### correction 8-1-2004 InstallOtherMethod(RootsCode, "method for n, powerlist, field", true, [IsInt, IsList], 0, function(n, L) local q,z,F; L := Set(L); q := Characteristic(Field(L)); # z := Z(Size(Field(L))); # F := GF(q); return RootsCode(n, L, q); end); ############################################################################# ## #F QRCode( [, ] ) . . . . . . . . . . . . . . quadratic residue code ## InstallMethod(QRCode, "modulus, fieldsize", true, [IsInt, IsInt], 0, function(n, q) local m, b, Q, N, t, g, lower, upper, C, F, coeffs; if Jacobi(q,n) <> 1 then Error("q must be a quadratic residue modulo n"); elif not IsPrimeInt(n) then Error("n must be a prime"); elif not IsPrimeInt(q) then Error("q must be a prime"); fi; m := OrderMod(q,n); F := GF(q^m); b := PrimitiveUnityRoot(q,n); Q := []; N := [1..n]; for t in [1..n-1] do AddSet(Q, t^2 mod n); od; for t in Q do RemoveSet(N, t); od; g := Product(Q, i -> LaurentPolynomialByCoefficients(ElementsFamily(FamilyObj(F)), [-b^i, b^0], 0) ); coeffs := CoefficientsOfLaurentPolynomial(g); coeffs := ShiftedCoeffs(coeffs[1], coeffs[2]); C := GeneratorPolCode( LaurentPolynomialByCoefficients( ElementsFamily(FamilyObj(GF(q))), coeffs, 0), n, "quadratic residue code", GF(q) ); if RootInt(n)^2 = n then lower := RootInt(n); else lower := RootInt(n)+1; fi; if n mod 4 = 3 then while lower^2-lower+1 < n do lower := lower + 1; od; fi; if (n mod 8 = 7) and (q = 2) then while lower mod 4 <> 3 do lower := lower + 1; od; fi; upper := Weight(Codeword(coeffs)); C!.lowerBoundMinimumDistance := lower; C!.upperBoundMinimumDistance := upper; return C; end); InstallOtherMethod(QRCode, "modulus, field", true, [IsInt, IsField], 0, function(n, F) return QRCode(n, Size(F)); end); InstallOtherMethod(QRCode, "modulus", true, [IsInt], 0, function(n) return QRCode(n, 2); end); ############################################################################# ## #F QQRCode( [, ] ) . . . . . . . . binary quasi-quadratic residue code ## ## Code of Bazzi-Mittel (see Bazzi, L. and Mitter, S.K. "Some constructions of ## codes from group actions" preprint March 2003 (submitted to IEEE IT) ## InstallMethod(QQRCode, "Modulus", true, [IsInt], 0, function(p) local G0,G,Q,N,QN,i,C,F,QuadraticResidueSupports,NonQuadraticResidueSupports; # start local functions: QuadraticResidueSupports:=function(p) local L,i; L:=List([1..(p-1)],i->1+Legendre(i,p))/2; return L; end; NonQuadraticResidueSupports:=function(p) local L,i; L:=List([1..(p-1)],i->1-Legendre(i,p))/2; return L; end; # end local functions F:=GF(2); Q:=[Zero(F)]; Q:=One(F)*Concatenation(Q,QuadraticResidueSupports(p)); N:=[Zero(F)]; N:=One(F)*Concatenation(N,NonQuadraticResidueSupports(p)); QN:=Concatenation(Q,N); G:=BlockMatrix([[1,1,CirculantMatrix(p,Q)],[1,2,CirculantMatrix(p,N)]],1,2); if p mod 4 = 1 then G0:=List([1..(p-1)],i->G[i]); else G0:=G; fi; C:=GeneratorMatCode(G0,F); C!.DoublyCirculant:=G0; C!.GeneratorMat:=G0; return C; end); ############################################################################# ## #F QQRCodeNC( [, ] ) . . . . . . . . binary quasi-quadratic residue code ## ## Code of Bazzi-Mittel (see Bazzi, L. and Mitter, S.K. "Some constructions of ## codes from group actions" preprint March 2003 (submitted to IEEE IT) ## InstallMethod(QQRCodeNC, "Modulus", true, [IsInt], 0, function(p) local G,G0,Q,N,QN,i,C,F,QuadraticResidueSupports,NonQuadraticResidueSupports; # start local functions: QuadraticResidueSupports:=function(p) local L,i; L:=List([1..(p-1)],i->1+Legendre(i,p))/2; return L; end; NonQuadraticResidueSupports:=function(p) local L,i; L:=List([1..(p-1)],i->1-Legendre(i,p))/2; return L; end; # end local functions F:=GF(2); Q:=[Zero(F)]; #Q:=[]; Q:=One(F)*Concatenation(Q,QuadraticResidueSupports(p)); N:=[Zero(F)]; #N:=[]; N:=One(F)*Concatenation(N,NonQuadraticResidueSupports(p)); #QN:=Concatenation(Q,N); G:=BlockMatrix([[1,1,CirculantMatrix(p,N)],[1,2,CirculantMatrix(p,Q)]],1,2); if p mod 4 = 1 then G0:=List([1..(p-1)],i->G[i]); else G0:=G; fi; C:=GeneratorMatCodeNC(G0,F); C!.DoublyCirculant:=G0; C!.GeneratorMat:=G0; return C; end); ############################################################################# ## #F NullCode( [, ] ) . . . . . . . . . . . code consisting only of <0> ## InstallMethod(NullCode, "wordlength, field", true, [IsInt, IsField], 0, function(n, F) local C; C := ElementsCode([NullWord(n,F)], "nullcode", F); C!.lowerBoundMinimumDistance := n; C!.upperBoundMinimumDistance := n; SetMinimumDistance(C, n); SetWeightDistribution(C, Concatenation([1], NullVector(n))); SetAutomorphismGroup(C, SymmetricGroup(n)); C!.boundsCoveringRadius := [ n ]; SetCoveringRadius(C, n); IsCyclicCode(C); # will set all basic linear and cyclic code info return C; end); InstallOtherMethod(NullCode, "wordlength, fieldsize", true, [IsInt, IsInt], 0, function(n, q) return NullCode(n, GF(q)); end); InstallOtherMethod(NullCode, "wordlength", true, [IsInt], 0, function(n) return NullCode(n, GF(2)); end); ############################################################################# ## #F FireCode( , ) . . . . . . . . . . . . . . . . . . . . . Fire code ## ## FireCode (G, b) constructs the Fire code that is capable of correcting any ## single error burst of length b or less. ## G is a primitive polynomial of degree m ## InstallMethod(FireCode, "poly, burstlength", true, [IsUnivariatePolynomial, IsInt], 0, function(G, b) local m, C, n; G := PolyCodeword(Codeword(G)); if CoefficientsRing(DefaultRing(G)) <> GF(2) then Error("polynomial must be over GF(2)"); fi; if Length(Factors(G)) <> 1 then Error("polynomial G must be primitive"); fi; m := DegreeOfLaurentPolynomial(G); n := Lcm(2^m-1,2*b-1); C := GeneratorPolCode( G*(Indeterminate(GF(2))^(2*b-1) + One(GF(2))), n, Concatenation(String(b), " burst error correcting fire code"), GF(2) ); return C; end); ############################################################################# ## #F BinaryGolayCode( ) . . . . . . . . . . . . . . . . . . binary Golay code ## InstallMethod(BinaryGolayCode, "only method", true, [], 0, function() local p,C; p := LaurentPolynomialByCoefficients( ElementsFamily(FamilyObj(GF(2))), Z(2)^0*[1,0,1,0,1,1,1,0,0,0,1,1], 0); C := CyclicCodeByGenerator(GF(2), 23, Codeword(p)); SetGeneratorPol(C, p); SetDimension(C, 12); SetRedundancy(C, 11); SetSize(C, 2^12); C!.name := "binary Golay code"; C!.lowerBoundMinimumDistance := 7; C!.upperBoundMinimumDistance := 7; SetWeightDistribution(C, [1,0,0,0,0,0,0,253,506,0,0,1288,1288,0,0,506,253,0,0,0,0,0,0,1]); C!.boundsCoveringRadius := [ 3 ]; SetIsNormalCode(C, true); SetIsPerfectCode(C, true); return C; end); ############################################################################# ## #F TernaryGolayCode( ) . . . . . . . . . . . . . . . . . ternary Golay code ## InstallMethod(TernaryGolayCode, "only method", true, [], 0, function() local p, C; p := LaurentPolynomialByCoefficients(ElementsFamily(FamilyObj(GF(3))), Z(3)^0*[2,0,1,2,1,1], 0); C := CyclicCodeByGenerator(GF(3), 11, Codeword(p)); C!.name := "ternary Golay code"; SetGeneratorPol(C, p); SetRedundancy(C, 5); SetDimension(C, 6); SetSize(C, 3^6); C!.lowerBoundMinimumDistance := 5; C!.upperBoundMinimumDistance := 5; SetWeightDistribution(C, [1,0,0,0,0,132,132,0,330,110,0,24]); SetIsNormalCode(C, true); SetIsPerfectCode(C, true); return C; end); ############################################################################# ## #F EvaluationCode(

, , ) ## ## P is a list of n points in F^r ## L is a list of rational functions in r variables ## EvaluationCode returns the image of the evaluation map f->[f(P1),...,f(Pn)], ## as f ranges over the vector space of functions spanned by L. ## The output is the code whose generator matrix has rows (f(P1)...f(Pn)) where ## f is in L and P={P1,..,Pn} ## InstallMethod(EvaluationCode,"points, basis functions, multivariate poly ring", true, [IsList, IsList, IsRing], 0, function(P,L,R) local i, G, n, C, j, k, varsn,varsd, vars, F, ValueExtended; ####################### ValueExtended:=function(f,vars,pt) local df, nf; df:=DenominatorOfRationalFunction(f*vars[1]^0); nf:=NumeratorOfRationalFunction(f*vars[1]^0); #if (varsn=[] and varsd=[]) then return f; fi; return Value(nf,vars,pt)*Value(df,vars,pt)^(-1); end; ####################### vars:=IndeterminatesOfPolynomialRing(R); F:=CoefficientsRing(R); n:=Length(P); k:=Length(L); G:=ShallowCopy(NullMat(k,n,F)); for i in [1..k] do for j in [1..n] do G[i][j]:=ValueExtended(L[i],vars,P[j]); od; od; C:=GeneratorMatCode(G," evaluation code",F); C!.EvaluationMat:=ShallowCopy(G); C!.basis:=L; C!.points:=P; C!.ring:=R; return C; end); ############################################################################# ## #F GeneralizedReedSolomonCode(

, , ) ## ## P is a list of n points in F ## k is an integer ## GRSCode returns the image of the evaluation map f->[f(P1),...,f(Pn)], ## as f ranges over the vector space of polynomials in 1 variable ## of degree < k in the ring R. ## The output is the code whose generator matrix has rows (f(P1)...f(Pn)) where ## f = x^j, j(x^i)); for i in [1..k] do for j in [1..n] do G[i][j]:=Value(L[i],vars,[P[j]]); od; od; C:=GeneratorMatCode(G," generalized Reed-Solomon code",F); C!.GeneratorMat:=ShallowCopy(G); C!.degree:=k; C!.points:=P; C!.ring:=R; SetSpecialDecoder(C, GeneralizedReedSolomonDecoder); return C; end); ############################################################################# ## #F GeneralizedReedSolomonCode(

, , , ) ## ## P is a list of n points in F ## k is an integer ## GRSCode returns the image of the evaluation map f->[f(P1),...,f(Pn)], ## as f ranges over the vector space of polynomials in 1 variable ## of degree < k in the ring R. ## The output is the code whose generator matrix has rows (w1*f(P1),...,wn*f(Pn)) where ## f = x^j, j(x^i)); for i in [1..k] do for j in [1..n] do G[i][j]:=wts[j]*Value(L[i],vars,[P[j]]); od; od; C:=GeneratorMatCode(G," weighted generalized Reed-Solomon code",F); C!.GeneratorMat:=ShallowCopy(G); C!.degree:=k; C!.points:=P; C!.weights:=wts; C!.ring:=R; #SetSpecialDecoder(C, GeneralizedReedSolomonDecoder); return C; end); ############################################################################# ## #F OnePointAGCode( , , , ) ## ## R = F[x,y] is a polynomial ring over a finite field F ## crv is a polynomial in R representing a plane curve ## pts is a list of points on the curve ## Computes the AG codes associated to the RR space ## L(m*infinity) using Proposition VI.4.1 in Stichtenoth ## InstallMethod(OnePointAGCode, "polynomial defining planar curve, points, multiplicity, univariate poly ring", true, [IsPolynomial, IsList, IsInt, IsRing], 0, function(crv,pts,m,R) local F,f,indets,pt,i,j,G,C,degx,degy,basisLD,xx,yy,allpts; indets := IndeterminatesOfPolynomialRing(R); xx:=indets[1]; yy:=indets[2]; F:=CoefficientsRing(R); allpts:=AffinePointsOnCurve(crv,R,F); if not(IsSubset(allpts,pts)) then Error("The points given must be on the curve\n"); fi; degx:=DegreeIndeterminate(crv,xx); degy:=DegreeIndeterminate(crv,yy); basisLD:=[]; for i in [0..(degx-1)] do for j in [0..m] do if degx*j+degy*iList(basisLD,f->Value(f,indets,pt))); C:=GeneratorMatCode(TransposedMat(G)," one-point AG code",F); C!.GeneratorMat:=ShallowCopy(TransposedMat(G)); C!.multiplicity:=m; C!.points:=pts; C!.curve:=crv; C!.ring:=R; return C; end); ############################################################################# ## #F FerreroDesignCode(

, ) ... code from a Ferrero design ## ## #InstallMethod(FerreroDesignCode, #"binary linear code constructed using a Ferrero design", #true, [IsList, IsInt], 0, #function( P,m) # **Requires the GAP package SONATA** # Constructs binary linear code arising from the incdence # matrix of a design associated to a "Ferrero pair" arising # from a fixed-point-free (fpf) automorphism groups and Frobenius group. # The designs that we are looking at (from a Frobenius kernel # of order v and a Frobenius complement of order k) have # v*(v-1)/k distinct blocks and they are all of size k. # Moreover each of the v points occurs in exactly v-1distinct # blocks. Hence the rows and the columns of the incidence # matrix M of the design are always of constant weight. # Take a Frobenius (G,+) group with kernel K and complement H. # Consider the design D with point set K and block set # { a^H + b | a, b in K, a <> 0 }. # Here a^H denotes the orbit of a under conjugation by elements # of H. Every planar near-ring design of type "*" can be obtained # in this way from groups. A group K together with a group of # automorphism H of K such that the semidirect product KH is a # Frobenius group with complement H is called a Ferrero pair (K, H) # in SONATA. # # INPUT: P is a list of prime powers describing an abelian group G # m > 0 is an integer such that G admits a cyclic fpf # automorphism group of size m # This means that for all q = p^k in P, OrderMod( p, m ) must divide q # (see the SONATA documentation for FpfAutomorphismGroupsCyclic). # OUTPUT: The binary linear code whose generator matrix is the # incidence matrix of a design associated to a "Ferrero pair" arising # from the fixed-point-free (fpf) automorphism group of G. # The pair (H,K) is called a Ferraro pair and the semidirect product KH is a # Frobenius group with complement H. # AUTHORS: Peter Mayr and David Joyner #local C, f, H, K, M, D; # LoadPackage("sonata"); # f := FpfAutomorphismGroupsCyclic( P, m ); # K := f[2]; # H := Group( f[1][1] ); # D := DesignFromFerreroPair( K, H, "*" ); # M := IncidenceMat( D ); # C:=GeneratorMatCode(M*Z(2), GF(2)); #return C; #end); #Having trouble getting GUAVA to load without errors if #SONATA is not installed. Uncomment this and reload if you #have SONATA. #FerreroDesignCode:=function( P,m) #local C, f, H, K, M, D; # LoadPackage("sonata"); # f := FpfAutomorphismGroupsCyclic( P, m ); # K := f[2]; # H := Group( f[1][1] ); # D := DesignFromFerreroPair( K, H, "*" ); # M := IncidenceMat( D ); # C:=GeneratorMatCode(M*Z(2), GF(2)); #return C; #end; ############################################################################# ## #F QuasiCyclicCode( , , ) . . . . . . . . . . . quasi cyclic code ## ## QuasiCyclicCode ( , , ) generates a rate 1/m quasi-cyclic ## codes. Note that is a list of univariate polynomial and m is the ## cardinality of this list. The integer s is the size of the circulant ## and it is not necessarily equal to the code dimension, i.e. k <= s. ## The associated field is . ## InstallMethod(QuasiCyclicCode, "linear quasi-cyclic code", true, [IsList, IsInt, IsField], 0, function( L1, s, F ) # # A rate 1/m quasi-cyclic code contains m circulant matrices, each of # the same size, and in this case they are all s x s circulant matrices. # Each circulant can be specified by a univariate polynomial. # local i, m, v, M, C; # Determine the cardinality of the list L1 m:=Size(L1); if (m < 2) then Error("The cardinality of must be at least 2\n"); fi; # Make sure that all the list elements are univariate polynomials for i in [1..m] do; if (IsUnivariatePolynomial(L1[i]) = false) then Error("All list elements must be univariate polynomials\n"); fi; if (Degree(L1[i]) >= s) then Error("The degree of the polynomial must be less than s\n"); fi; od; # Convert each univariate polynomial into a circulant matrix and # concatenate them to generate a generator matrix M:=[]; for i in [1..m] do; v:=ShallowCopy( CoefficientsOfUnivariatePolynomial(L1[i]) ); Append( v, List([1..(s - (Degree(L1[i])+1))], i->Zero(F)) ); M:=Concatenation( M, CirculantMatrix(s, v) ); od; C := GeneratorMatCode( TransposedMat(M), F ); C!.name := "quasi-cyclic code"; return C; end); InstallOtherMethod(QuasiCyclicCode, "binary linear quasi-cyclic code", true, [IsList, IsInt], 0, function( L1, s ) local i, j, m, a, t, v, L2, LUT; LUT:=[ "000", "001", "010", "011", "100", "101", "110", "111" ]; # Determine the cardinality of the list L1 m := Size(L1); if (m < 2) then Error("The cardinality of must be at least 2\n"); fi; L2 := []; for i in [1..m] do; if (IsInt(L1[i]) = false) then Error("All list elements must be in octal\n"); fi; a := String(L1[i]); v := []; for j in [1..Length(a)] do; t := INT_CHAR(a[j]) - 48; # Conversion of ASCII character to integer if (t > 7) then Error("All list elements must be in octal\n"); fi; Append(v, LUT[t+1]); od; Append(L2, [ReciprocalPolynomial(PolyCodeword(Codeword(v)))]); od; return QuasiCyclicCode( L2, s, GF(2) ); end); ##################################################################### ## #F CyclicMDSCode( , , ) . . . . . . . . . cyclic MDS code ## ## Construct a [q^m + 1, k, q^m - k + 2] cyclic MDS code over GF(q^m) ## InstallMethod(CyclicMDSCode, "method for linear code", true, [IsInt, IsInt, IsInt], 0, function(q, m, k) local i, j, l, x, a, r, g, G, F, CS, C, dmin; if (k < 1) or (k > q^m + 1) then Error("Incorrect parameter, 1 <= k <= q^m+1.\n"); fi; if IsEvenInt(k) and IsOddInt(q^m) then Error("Cannot construct such code, k must be odd for odd field size.\n"); fi; F := GF(q^m); x := Indeterminate(F, "x"); a := PrimitiveUnityRoot(F, q^m+1); # Primitive (q^m + 1)-st root of unity CS := CyclotomicCosets(q^m, q^m + 1); dmin := q^m - k + 2; # R. Roth's book (Prob. 8.15, pp. 262) # If q^m is odd, there exists [q^m + 1, k, q^m - k + 2] cyclic MDS codes for # odd values of k in the range 1 <= k <= q^m. This is because the cyclotomic # cosets of q^m mod q^m + 1 are # { 0, [1,q^m], [2,q^m-2], ..., [(q^m-1)/2, (q^m+3)/2], (q^m+1)/2 }. # There are two single elements in the above cosets, { 0 } and { (q^m+1)/2 }. # If k is odd, dmin = q^m - k + 2 is even and delta = dmin-1 is odd (BCH bound). # This can be easily obtained by including either { 0 } or { (q^m+1)/2 }. # On the other hand, if k is even, dmin is odd and delta is even. With reference # to the above cyclotomic cosets, we cannot have exactly delta consecutive integers. # (Does this definitely mean this kind of code cannot be constructed??) # # If q^m is even, there exists [q^m + 1, k, q^m - k + 2] cyclic MDS codes for # any value of k in the range 1 <= k <= q^m+1. This is because the cyclotomic # cosets of q^m mod q^m + 1 are # { 0, [1,q^m], [2,q^m-2], ..., [q^m/2, 1 + q^m/2] }. # Consequently, we can easily construct a set of odd or even consecutive integers # using the cyclotomic cosets above. if IsEvenInt(k) then g := (x + a^0); r := [ a^0 ]; for i in [1..((dmin-2)/2)] do; g := g * (x + a^(CS[i+1][1])) * (x + a^(CS[i+1][2])); r := Concatenation(r, [ a^(CS[i+1][1]), a^(CS[i+1][2]) ]); od; else if IsOddInt(q^m) then g := (x + a^(CS[Size(CS)][1])); r := [ a^(CS[Size(CS)][1]) ]; j := Size(CS)-1; l := (dmin-2)/2; else g := 1; r := []; j := Size(CS); l := (dmin-1)/2; fi; for i in [0..l-1] do; g := g * (x + a^(CS[j-i][1])) * (x + a^(CS[j-i][2])); r := Concatenation(r, [ a^(CS[j-i][1]), a^(CS[j-i][2]) ]); od; fi; G := GeneratorMatrixFromPoly(g, q^m + 1); C := GeneratorMatCodeNC(G, F); C!.name := "MDS code"; # We know these bounds as it is an MDS code C!.lowerBoundMinimumDistance := dmin; C!.upperBoundMinimumDistance := dmin; # Tell it that it is a cyclic code SetIsCyclicCode(C, true); SetGeneratorPol(C, g); # Also tell it that it is an MDS code IsMDSCode(C); return C; end); ####################################################################### ## #F FourNegacirculantSelfDualCode( , , ) . . self-dual code ## ## Construct a [2*k, k, d] self-dual code over F using Harada's ## construction. See: ## ## 1. M. Harada and T. Nishimura, "An extremal singly even self ## dual code of length 88", Advances in Mathematics of ## Communications, vol 1, no. 2, pp. 261--267, 2007 ## ## 2. M. Harada, W. Holzmann, H. Kharaghani and M. Khorvash, ## "Extremal ternary self-dual codes constructed from ## negacirculant matrices", Graph and Combinatorics, vol 23, ## pp. 401--417, 2007 ## ## 3. M. Harada, "An extremal doubly even self-dual code of ## length 112", preprint ## ## The generator matrix of the code has the following form: ## ## - - ## | : A : B | ## G = | I :------:-----| ## | : -B^T : A^T | ## - - ## ## Note that the matrices A, B, A^T and B^T are k/2 * k/2 ## negacirculant matrices. ## __G_FourNegacirculantSelfDualCode := function(ax, bx, k) local i, v, m, x, FA, FB, A, AT, B, BT, G; if IsOddInt(k) then Error("k must be an even integer\n"); fi; m := k/2; # Determine field size FA := Field(VectorCodeword(Codeword(ax))); FB := Field(VectorCodeword(Codeword(bx))); if FA <> FB then Error("Polynomials a(x) and b(x) must have elements from the same field\n"); fi; x := Indeterminate(FA); v := MutableCopyMat( CoefficientsOfUnivariatePolynomial(ax) ); Append( v, List([1..(m - (Degree(ax)+1))], i->Zero(FA)) ); A := NegacirculantMatrix(m, v*One(FA)); AT:= TransposedMat(A); v := MutableCopyMat( CoefficientsOfUnivariatePolynomial(bx) ); Append( v, List([1..(m - (Degree(bx)+1))], i->Zero(FA)) ); B := NegacirculantMatrix(m, v*One(FA)); BT:= TransposedMat(-B); G := IdentityMat(k, One(FA)); # [ A | B ] for i in [1..m] do; Append(G[i], A[i]); Append(G[i], B[i]); od; # [ B^T | A^T ] for i in [1..m] do; Append(G[m+i], BT[i]); Append(G[m+i], AT[i]); od; return G; end; InstallMethod(FourNegacirculantSelfDualCode, "method for binary linear code", true, [IsUnivariatePolynomial, IsUnivariatePolynomial, IsInt], 0, function(ax, bx, k) local G, C, F; # Obtain the generator matrix G := __G_FourNegacirculantSelfDualCode(ax, bx, k); F := Field(VectorCodeword(Codeword(ax))); C := GeneratorMatCode(G, "four-negacirculant self-dual code", F); C!.GeneratorMat := ShallowCopy(G); if (IsSelfDualCode(C) = false) then Error("Polynomials a(x) and b(x) do not produce a self-dual code\n"); fi; return C; end); # Faster version - no minimum distance and covering radius estimation InstallMethod(FourNegacirculantSelfDualCodeNC, "method for binary linear code", true, [IsUnivariatePolynomial, IsUnivariatePolynomial, IsInt], 0, function(ax, bx, k) local G, C, F; # Obtain the generator matrix G := __G_FourNegacirculantSelfDualCode(ax, bx, k); F := Field(VectorCodeword(Codeword(ax))); C := GeneratorMatCodeNC(G, F); C!.name := "four-negacirculant self-dual code"; C!.GeneratorMat := ShallowCopy(G); C!.lowerBoundMinimumDistance := 1; C!.upperBoundMinimumDistance := k+1; C!.boundsCoveringRadius := [ 0, WordLength(C) ]; if (IsSelfDualCode(C) = false) then Error("Polynomials a(x) and b(x) do not produce a self-dual code\n"); fi; return C; end); ########################################################################### ## #F QCLDPCCodeFromGroup( , , ) . . Regular quasi-cyclic LDPC code ## ## Construct a regular (j,k) quasi-cyclic low-density parity-check (LDPC) ## code over GF(2) based on the multiplicative group of integer modulo m. ## If m is a prime, the size of the group is equal to Phi(m) = m - 1, ## otherwise it is equal to Phi(m). For details, refer to the paper by: ## ## R. Tanner, D. Sridhara, A. Sridharan, T. Fuja and D. Costello, ## "LDPC block and convolutional codes based on circulant matrices", ## IEEE Trans. Inform. Theory, vol. 50, no. 12, pp. 2966--2984, 2004 ## ## NOTE that j and k must divide Phi(m). ## InstallMethod(QCLDPCCodeFromGroup, "method for binary linear code", true, [IsInt, IsInt, IsInt], 0, function(m, j, k) local r, c, a, b, p, P, H, M, C, PermutationMatrix; ## ##----------------- start of private functions --------------------- ## ## PermutationMatrix - a private function for QCLDPCCodeFromGroup PermutationMatrix := function(m, i) local s, P, L; if i = 0 or i > m then Error("invalid value of i, 1 \\le i \\le ", m, "\n"); fi; P := []; L := List([1..m], i->Zero(GF(2))); L[i] := One(GF(2)); Append(P, [ L ]); for s in [2..m] do; L := RightRotateList(L); Append(P, [ L ]); od; return P; end; ## ##------------------ end of private functions ---------------------- ## p := Phi(m); if (p mod j <> 0) then Error(j, " does not divide ", p, "=Phi(", m, ")\n"); fi; if (p mod k <> 0) then Error(k, " does not divide ", p, "=Phi(", m, ")\n"); fi; a := Position( List([1..m-1], i->OrderMod(i, m) ), k ); b := Position( List([1..m-1], i->OrderMod(i, m) ), j ); P := []; for r in [0..j-1] do; Append(P, [ List([0..k-1], i->a^i*b^r mod m) ]); od; H := []; for r in [1..j] do; M := []; for c in [1..k] do; M := TransposedMat( Concatenation( TransposedMat(M), TransposedMat( PermutationMatrix(m, P[r][c]) ) ) ); od; Append(H, M); od; C := CheckMatCode( H, GF(2) ); C!.CheckMat := H; C!.name := "low-density parity-check code"; C!.upperBoundMinimumDistance := Factorial(j+1); return C; end); guava-3.6/lib/curves.gi0000644017361200001450000010270111026723452014743 0ustar tabbottcrontab############################################################################# ## #A curves.gi GUAVA library David Joyner ## ## this file contains implementations for some AG codes and Riemann-Roch ## spaces for the projective line P^1 ## #H @(#)$Id: curves.gi,v 1.1 2005/05/09 22:45:16 gap Exp $ ## ## created 5-9-2005: also, moved ## DivisorsMultivariatePolynomial (and subfunctions), ## from util2.gi (where it was in guava 2.0) ## added 5-15-2005: MatrixRepresentationOnRiemannRochSpaceP1 ## and related functions for P1 ## bug fix 6-13-2005: MatrixRepresentationOnRiemannRochSpaceP1 ## code was cleaned up and fixed. ## added SolveLinearSystem (with bug fix due to ## Punarbasu Purkayastha ) ## Revision.("guava2.1/lib/curves_gi") := "@(#)$Id: curves.gi,v 1.1 2005/05/09 22:45:16 gap Exp $"; ############ some miscellaneous functions ############### ######################################################################## ## #F CoefficientToPolynomial( , ) ## ## Input: a list of coeffs = [c0,c1,..,cd] ## a univariate polynomial ring R = F[x] ## Output: a polynomial c0+c1*x+...+cd*x^(d-1) in R ## InstallMethod(CoefficientToPolynomial, true, [IsList, IsRing], 0, function(coeffs,R) local p,i,j, lengths, F,xx; xx:=IndeterminatesOfPolynomialRing(R)[1]; F:=Field(coeffs); p:=Zero(F); # lengths:=List([1..Length(coeffs)],i->Sum(List([1..i],j->1+coeffs[j]))); for i in [1..Length(coeffs)] do p:=p+coeffs[i]*xx^(i-1); od; return p; end); CoefficientOfPolynomial00:=function(f,var) # **just** computes the coeff of var in f local F,coeffs; F:=DefaultField(f); coeffs:=[]; coeffs:=PolynomialCoefficientsOfPolynomial(f,var); if Length(coeffs)=1 then return Zero(F); fi; return coeffs[2]; end; ################### example: #R:= PolynomialRing( Rationals, 3 );; #vars:= IndeterminatesOfPolynomialRing(R);; #x:= vars[1];; y:= vars[2];; z:= vars[3];; #g:=x^2+x^3; #PolynomialCoefficientsOfPolynomial(g,x); #CoefficientOfPolynomial00(g,x); SolveLinearSystem:=function(L,vars) # L is a list of linear forms in the variables vars # return the soln of the system, if its unique # 1. first find the associated matrix A # 2. find the "constant vector" b # 3. solve A*v=b ## **** no error checking is done **** local zerosF,F,v,A,b,f,coeffs; F:=DefaultField(L[1]); zerosF:=List(vars,v->Zero(F)); A:=List(L,f->List(vars,v->CoefficientOfPolynomial00(f,v))); b:=(-1)*List(L,f->Value(f,vars,zerosF)); return SolutionMat( TransposedMat(A), b ); end; ######### example: # #R:= PolynomialRing( Rationals, ["x","y"] );; #i:= IndeterminatesOfPolynomialRing(R);; #x:= i[1];; y:= i[2];; #f:=2*y-3*x+1; g:=-5*y+2*x-7; #soln:=SolveLinearSystem([f,g],[x,y]); #Value(f,[x,y],soln); #Value(g,[x,y],soln); # #f:=-2*y-3*x+1; g:=-5*y+3*x-7; #soln:=SolveLinearSystem([f,g],[x,y]); # ########################################################### ## #F DegreesMonomialTerm( , ) ## ## Input: a monomial in n variables, ## (not all of which need occur) ## a multivariate polynomial ring R containing ## Output: the list of degrees of each variable in . ## InstallMethod(DegreesMonomialTerm, true, [IsRingElement, IsRing], 0, function(m,R) ## output is a different format if m is not a monomial local degrees, e, n0, i, j, l, n1, n,vars,x; vars:=IndeterminatesOfPolynomialRing(R); e:=ExtRepPolynomialRatFun(m); n0:=Length(e); n:=Int(n0/2); degrees:=[]; if n>1 then for i in [1..n] do l:=e[2*i-1]; n1:=Length(l); for j in [1..Int(n1/2)] do degrees:=Concatenation(degrees,[l[2*j]]); od; od; fi; if n=1 then for x in vars do degrees:=Concatenation(degrees,[DegreeIndeterminate(m,x)]); od; fi; return degrees; end); ########################################################### ## #F DegreesMultivariatePolynomial( , ) ## ## Input: multivariate poly in R=F[x1,x2,...,xn] ## a multivariate polynomial ring containing ## Output: the list of degrees of each term in . ## InstallMethod(DegreesMultivariatePolynomial, true, [IsRingElement, IsRing], 0, function(f,R) local partsf,monsf,vars,deg,i,j; vars:=IndeterminatesOfPolynomialRing(R); partsf:=ConstituentsPolynomial(f); # varsf:=partsf.variables; monsf:=partsf.monomials; deg:=List([1..Length(monsf)],i-> List([1..Length(vars)],j-> [monsf[i],vars[j],DegreeIndeterminate(monsf[i],vars[j])])); return deg; end); ########################################################### ## #F DegreeMultivariatePolynomial( , ) ## ## Input: multivariate poly in R=F[x1,x2,...,xn] ## a multivariate polynomial ring containing ## Output: the degree of . ## InstallMethod(DegreeMultivariatePolynomial, true, [IsRingElement, IsRing], 0, function(f,R) local partsf,monsf,vars,deg,i,j; vars:=IndeterminatesOfPolynomialRing(R); partsf:=ConstituentsPolynomial(f); # varsf:=partsf.variables; monsf:=partsf.monomials; deg:=List([1..Length(monsf)],i-> Sum(List([1..Length(vars)],j-> DegreeIndeterminate(monsf[i],vars[j])))); return Maximum(deg); end); ######################################################################## ## #F DivisorsMultivariatePolynomial( , ) ## ## Input: f is a polynomial in R=F[x1,...,xn] ## Output: all divisors of f ## uses a slow algorithm due to Kronecker (see Joachim von zur Gathen, ## Juergen Gerhard, *Modern Computer Algebra*, exercise 16.10) ## InstallMethod(DivisorsMultivariatePolynomial, true, [IsPolynomial, IsPolynomialRing], 0, function(f,R) local p,var,vars,mons,degrees,g,d,r,div,ffactors,F,R1,fam,fex,cand,i,j, select,T,TN,ti,terms,L,N,k,varpow,nvars,cp,perm,cnt,vals,forig,ediv, KroneckerMap,InverseKroneckerMapUnivariate; KroneckerMap:=function(f,vars,var,p) # maps polys in x1,...,xn to polys in x # induced by xi -> x^(p^(i-1)) local g; g:=Value(f,vars, List([1..Length(vars)],i->var[1]^(p^(i-1)))); return g; end; InverseKroneckerMapUnivariate:=function(g,varpow) local coeffs,d,f,i; if not IsUnivariatePolynomial(g) then Error("this function assumes polynomial is univariate"); fi; coeffs:=CoefficientsOfUnivariateLaurentPolynomial(g); coeffs:=ShiftedCoeffs(coeffs[1],coeffs[2]); d:=Length(coeffs)-1; f:=Zero(g); for i in [1..Length(coeffs)] do if not IsZero(coeffs[i]) then f:=f+coeffs[i]*varpow[i]; fi; od; return f; end; cp:=ConstituentsPolynomial(f); mons:=cp.monomials; # count variable frequencies L:=ListWithIdenticalEntries( Maximum(List(cp.variables, IndeterminateNumberOfUnivariateRationalFunction)),0); for i in mons do T:=ExtRepPolynomialRatFun(i)[1]; for j in [1,3..Length(T)-1] do L[T[j]]:=L[T[j]]+T[j+1]; od; od; T:=[1..Length(L)]; SortParallel(L,T); T:=Reversed(T); L:=Reversed(L); if ForAny([1..Length(L)],i->L[i]>0 and L[T[i]]<>L[i]) then perm:=PermList(T)^-1; Info(InfoPoly,2,"Variable swap: ",perm); f:=OnIndeterminates(f,perm); cp:=ConstituentsPolynomial(f); mons:=cp.monomials; else perm:=(); # irrelevant swap fi; vars:=cp.variables; nvars:=Length(vars); F:=CoefficientsRing(R); R1:=PolynomialRing(F,1); var:=IndeterminatesOfPolynomialRing(R1); degrees:=List([1..Length(mons)],i->DegreesMonomialTerm(mons[i],R)); d:=Maximum(Flat(degrees)); p:=NextPrimeInt(d); p:=Maximum(d+1,2); forig:=f; # coefficient shift to remove duplicate roots cnt:=0; vals:=List(vars,i->Zero(F)); repeat if cnt>0 then vals:=List(vars,i->Random(F)); f:=Value(forig,vars,List([1..nvars],i->vars[i]-vals[i])); fi; g:=KroneckerMap(f,vars,var,p); cnt:=cnt+1; L:=DegreeOfUnivariateLaurentPolynomial(Gcd(g,Derivative(g))); Info(InfoPoly,3,"Trying shift: ",vals,": ",L); until cnt>DegreeOfUnivariateLaurentPolynomial(g) or L=0; # prepare padic representations of powers L:=ListWithIdenticalEntries(nvars,0); varpow:=List([0..DegreeOfUnivariateLaurentPolynomial(g)], i->Concatenation(CoefficientsQadic(i,p),L){[1..nvars]}); varpow:=List(varpow,i->Product(List([1..nvars],j->vars[j]^i[j]))); fam:=FamilyObj(f); fex:=ExtRepPolynomialRatFun(f); L:=Factors(R1,g); N:=Length(L); cand:=[1..N]; for k in [1..QuoInt(N,2)] do T:=Combinations(cand,k); Info(InfoPoly,2,"Length ",k,": ",Length(T)," candidates"); ti:=1; while ti<=Length(T) do; terms:=T[ti]; div:=Product(L{terms}); div:=InverseKroneckerMapUnivariate(div,varpow); ediv:=ExtRepPolynomialRatFun(div); #if not IsOne(ediv[Length(ediv)]) then # div:=div/ediv[Length(ediv)]; # ediv:=ExtRepPolynomialRatFun(div); #fi; # call the library routine used to test quotient of polynomials r:=QuotientPolynomialsExtRep(fam,fex,ediv); if r<>fail then fex:=r; f:=PolynomialByExtRepNC(fam,fex); Info(InfoPoly,1,"found factor ",terms," ",div," remainder ",f); ffactors:=DivisorsMultivariatePolynomial(f,R); Add(ffactors,div); if ForAny(vals,i->not IsZero(i)) then ffactors:=List(ffactors, i->Value(i,vars,List([1..nvars],j->vars[j]+vals[j]))); fi; if not IsOne(perm) then ffactors:=List(ffactors,i->OnIndeterminates(i,perm^-1)); fi; return ffactors; fi; ti:=ti+1; od; od; if ForAny(vals,i->not IsZero(i)) then f:=Value(f,vars,List([1..nvars],j->vars[j]+vals[j])); fi; if not IsOne(perm) then f:=OnIndeterminates(f,perm^-1); fi; return [f]; end); ########################################################### # # general curve stuff # ########################################################### ########################################################### ## #F AffineCurve(, ) ## ## Input: is a polynomial in the ring F[x,y], ## is a bivariate ring containing ## Output: associated record: polynomial component and a ring component ## InstallMethod(AffineCurve, true, [IsRingElement, IsRing], 0, function(poly,ring) ## this does some type checking... local crv; crv:=rec(); if IsPolynomialRing(ring) then crv.ring:=ring; fi; if not(IsPolynomialRing(ring)) then Error("\n 4th argument must be a polynomial ring (eg, F[x,y])\n"); fi; if poly in ring then crv.polynomial:=poly; fi; if not(poly in ring) then Error("\n 3rd argument must be a function in the polynomial ring (eg, y in F[x,y] for P^1)\n"); fi; return crv; end); ########################################################### ## #F GenusCurve( ) ## ## ## Input: is a curve record structure ## crv: f(x,y)=0, f a poly of degree d ## Output: genus of plane curve ## genus = (d-1)(d-2)/2 ## InstallMethod(GenusCurve, true, [IsRecord], 0, function(crv) local d, f, R; R:=crv.ring; f:=crv.polynomial; d:=DegreeMultivariatePolynomial(f,R); return (d-1)*(d-2)/2; end); ########################################################### ## #F OnCurve( , ) ## ## Input: is a curve record structure ## a list of pts in F^2 ## crv: f(x,y)=0, f a poly in F[x,y] ## Output: true if they are all on crv ## false otherwise ## InstallMethod(OnCurve, true, [IsList,IsRecord], 0, function(Pts,crv) local p,f,R,F,vars,val,values; f:=crv.polynomial; R:=crv.ring; F:=CoefficientsRing(R); vars:=IndeterminatesOfPolynomialRing(R); values:=List(Pts,p->Value(f,vars,p)); if f in vars then ### P^1 case for p in Pts do if not(p in F) then return false; fi; od; return true; fi; for p in Pts do for val in values do if val<>Zero(F) then return false; fi; od; od; return true; end); ############################################################################# ## #F AffinePointsOnCurve(, , ) ## ***** only works for finiet fields***** ## InstallGlobalFunction(AffinePointsOnCurve,function(f,R,E) local a,b,indets,solns; if not(IsFinite(E)) then Error("Field ",E," must be finite."); fi; solns:=[]; indets:=IndeterminatesOfPolynomialRing(R); for a in E do for b in E do if Value(f,indets,[a,b])=Zero(E) then solns:=Concatenation([[a,b]],solns); fi; od; od; return solns; end); ########################################################### # # general divisor stuff # ########################################################### ########################################################### ## #F DivisorOnAffineCurve(, , ) ## creates divisor on curve record structure ## ## Input: list of integers (coeffs of divisor), ## is a list of points (support of divisor), ## is a curve record ## Output: associated divisor record ## InstallMethod(DivisorOnAffineCurve, true, [IsList,IsList,IsRecord], 0, function(cdiv,sdiv,crv) local div,F,vars,R; R:=crv.ring; F:=CoefficientsRing(R); vars:=IndeterminatesOfPolynomialRing(R); div:=rec(); if (IsList(cdiv) and cdiv[1] in Integers) then div.coeffs:=cdiv; fi; if (not(IsList(cdiv)) or not(cdiv[1] in Integers)) then Error("\n 1st argument is not a list of integers\n"); fi; if ((crv.polynomial in vars) and IsList(sdiv) and sdiv[1] in F) then ### this is for P^1 div.support:=sdiv; fi; if (not(crv.polynomial in vars) and IsList(sdiv)) then ### not P^1 div.support:=sdiv; fi; # if (not(IsList(sdiv)) or not(OnCurve(sdiv,crv))) then # Error("\n 2nd argument is not a list of points\n"); # fi; if Length(sdiv)<>Length(cdiv) then Error("\n 1st and 2nd arguments must have same length\n"); fi; div.curve:=crv; return div; end); ########################################################### ## #F DivisorOnAffineCurve(, ) ## ## Input: , are divisor records ## Output: sum ## InstallMethod(DivisorAddition, true, [IsRecord,IsRecord], 0, function(D1,D2) local c1,c2,supp1,supp2,pos1,pos2,sumc,sums,pt; if not(D1.curve.ring=D2.curve.ring) then Error("\n 1st and 2nd divisor must have the same curve\n"); fi; if not(D1.curve.polynomial=D2.curve.polynomial) then Error("\n 1st and 2nd divisor must have the same curve\n"); fi; c1:=D1.coeffs; c2:=D2.coeffs; supp1:=D1.support; supp2:=D2.support; sumc:=[]; sums:=[]; for pt in Union(supp1,supp2) do if (pt in supp1) and (pt in supp2) then pos1:=PositionSublist(supp1,[pt]); pos2:=PositionSublist(supp2,[pt]); sumc:=Concatenation(sumc,[c1[pos1]+c2[pos2]]); sums:=Concatenation(sums,[pt]); fi; if (pt in supp1) and not(pt in supp2) then pos1:=PositionSublist(supp1,[pt]); sumc:=Concatenation(sumc,[c1[pos1]]); sums:=Concatenation(sums,[pt]); fi; if (pt in supp2) and not(pt in supp1) then pos2:=PositionSublist(supp2,[pt]); sumc:=Concatenation(sumc,[c2[pos2]]); sums:=Concatenation(sums,[pt]); fi; od; return rec(coeffs:=sumc,support:=sums,curve:=D1.curve); end); ########################################################### ## #F DivisorDegree(

) ## ## Input:
a divisor record ## Output: degree = sum of coeffs ## InstallMethod(DivisorDegree, true, [IsRecord], 0, function(div) local c; c:=div.coeffs; return Sum(c); end); ########################################################### ## #F DivisorIsEffective(
) ## ## Input:
a divisor record ## Output: true if all coeffs>=0, false otherwise ## InstallMethod(DivisorIsEffective, true, [IsRecord], 0, function(div) local c,a; c:=div.coeffs; for a in c do if a<0 then return false; fi; od; return true; end); ########################################################### ## #F DivisorNegate(
) ## ## Input:
a divisor record ## Output: -div ## InstallMethod(DivisorNegate, true, [IsRecord], 0, function(div) local c,s; c:=div.coeffs; s:=div.support; return rec(coeffs:=(-1)*c,support:=s,curve:=div.curve); end); ########################################################### ## #F DivisorIsZero(
) ## ## Input:
a divisor record ## Output: true if all coeffs=0, false otherwise ## InstallMethod(DivisorIsZero, true, [IsRecord], 0, function(div) local c,a; c:=div.coeffs; for a in c do if a<>0 then return false; fi; od; return true; end); ########################################################### ## #F DivisorEqual(, ) ## ## Input: , are divisor records ## Output: true if div1=div2 ## InstallMethod(DivisorEqual, true, [IsRecord,IsRecord], 0, function(div1,div2) local div; div:=DivisorAddition(div1,DivisorNegate(div2)); return DivisorIsZero(div); end); ########################################################### ## #F DivisorGCD(, ) ## ## If D_1=e_1P_1+...+e_kP_k and D_2=f_1P_1+...+f_kP_k ## are two divisors on a curve then their ## GCD is min(e_1,f_1)P_1+...+min(e_k,f_k)P_k ## ## Input: , are divisor records ## Output: GCD ## InstallMethod(DivisorGCD, true, [IsRecord,IsRecord], 0, function(D1,D2) local c1,c2,supp1,supp2,pos1,pos2,gcdcoeffs,gcdsupp,pt; if not(D1.curve.ring=D2.curve.ring) then Error("\n 1st and 2nd divisor must have the same curve\n"); fi; if not(D1.curve.polynomial=D2.curve.polynomial) then Error("\n 1st and 2nd divisor must have the same curve\n"); fi; c1:=D1.coeffs; c2:=D2.coeffs; supp1:=D1.support; supp2:=D2.support; gcdcoeffs:=[]; gcdsupp:=[]; for pt in Union(supp1,supp2) do if (pt in supp1) and (pt in supp2) then pos1:=PositionSublist(supp1,[pt]); pos2:=PositionSublist(supp2,[pt]); gcdcoeffs:=Concatenation(gcdcoeffs,[Minimum(c1[pos1],c2[pos2])]); gcdsupp:=Concatenation(gcdsupp,[pt]); fi; if (pt in supp1) and not(pt in supp2) then pos1:=PositionSublist(supp1,[pt]); gcdcoeffs:=Concatenation(gcdcoeffs,[Minimum(c1[pos1],0)]); gcdsupp:=Concatenation(gcdsupp,[pt]); fi; if (pt in supp2) and not(pt in supp1) then pos2:=PositionSublist(supp2,[pt]); gcdcoeffs:=Concatenation(gcdcoeffs,[Minimum(0,c2[pos2])]); gcdsupp:=Concatenation(gcdsupp,[pt]); fi; od; return rec(coeffs:=gcdcoeffs,support:=gcdsupp,curve:=D1.curve); end); ########################################################### ## #F DivisorLCM(, ) ## ## If D_1=e_1P_1+...+e_kP_k and D_2=f_1P_1+...+f_kP_k ## are two divisors on a curve then their ## LCM is max(e_1,f_1)P_1+...+max(e_k,f_k)P_k ## ## Input: , are divisor records ## Output: LCM ## InstallMethod(DivisorLCM, true, [IsRecord,IsRecord], 0, function(D1,D2) local div_sum, ndiv_gcd; div_sum:=DivisorAddition(D1,D2); ndiv_gcd:=DivisorNegate(DivisorGCD(D1,D2)); return DivisorAddition(div_sum, ndiv_gcd); end); ########################################################### # # P^1 only stuff # # ..... bases of L(D) on P^1 ... # if D is effective then the basis is easy... # ########################################################### ########################################################### ## #F RiemannRochSpaceBasisFunctionP1(

, , ) ## ## Input:

is a point in F, F=finite field, ## is an integer, ## is a polynomial ring in x,y ## Output: associated basis function of P^1, 1/(x-P)^k ## InstallMethod(RiemannRochSpaceBasisFunctionP1, true, [IsExtAElement, IsInt,IsRing], 0, function(P,k,R2) local x,vars; vars:=IndeterminatesOfPolynomialRing(R2); x:=vars[1]; return x^0/(x-P)^k; end); ########################################################### ## #F RiemannRochSpaceBasisEffectiveP1(

) ## ## Input:
is an effective divisor on P^1 ## Output: associated basis functions of L(div) on P^1 ## InstallMethod(RiemannRochSpaceBasisEffectiveP1, true, [IsRecord], 0, function(div) local F,n,basis,pt,cdiv,sdiv,i,j,k,pos,R; R:=div.curve.ring; F:=CoefficientsRing(R); if not(DivisorIsEffective(div)) then Error("\n divisor must be effective \n"); fi; basis:=[]; #RiemannRochSpaceBasisFunctionP1(Zero(F),0,R) cdiv:=div.coeffs; sdiv:=div.support; n:=Length(cdiv); for k in [1..n] do for i in [1..cdiv[k]] do basis:=Concatenation(basis, [RiemannRochSpaceBasisFunctionP1(sdiv[k],i,R)]); od; od; return Concatenation(basis,[basis[1]^0]); end); ########################################################### ## #F RiemannRochSpaceBasisP1(
) ## ## Input:
is a divisor on P^1 ## Output: associated basis functions of L(div) on P^1 ## InstallMethod(RiemannRochSpaceBasisP1, true, [IsRecord], 0, function(div) local R,vars,x,div0,deg,f,F,basis,pt,cdiv,sdiv,i,j,k,pos; R:=div.curve.ring; F:=CoefficientsRing(R); if DivisorIsZero(div) then return [One(F)]; fi; deg:=DivisorDegree(div); if deg<0 then return [Zero(F)]; fi; if DivisorIsEffective(div) then return RiemannRochSpaceBasisEffectiveP1(div); fi; vars:=IndeterminatesOfPolynomialRing(R); x:=vars[1]; div0:=Immutable(div); ### unnecessary... cdiv:=div.coeffs; sdiv:=div.support; k:=Length(cdiv); cdiv[k]:=cdiv[k]-deg; ## pick the last point in div to subtract away f:=One(F); for i in [1..Length(cdiv)] do f:=f*(x-sdiv[i])^(-cdiv[i]); od; basis:=Concatenation([One(F)*x^0],List([0..deg],i->f*(x-sdiv[k])^(-i))); cdiv[k]:=cdiv[k]+deg; ## restores divisor to original return basis; end); ########################################################### ## #F DivisorOfRationalFunctionP1(, ) ## ## Input: is a rational function of x ## is a polynomial ring in x,y ## Output: associated divisor of ## InstallMethod(DivisorOfRationalFunctionP1, true, [IsRationalFunction,IsRing], 0, function(f,R) local crv,vars,y,n1,n2,suppdiv,coeffdiv,i,divf,rootsd,rootsn,den,num; vars:=IndeterminatesOfPolynomialRing(R); y:=vars[1]; num:=NumeratorOfRationalFunction(f); rootsn:=RootsOfUPol(num); den:=DenominatorOfRationalFunction(f); rootsd:=RootsOfUPol(den); n1:=Length(Set(rootsn)); n2:=Length(Set(rootsd)); coeffdiv:=Concatenation(List([1..n1], i->MultiplicityInList(rootsn, Set(rootsn)[i])), List([1..n2],i->-MultiplicityInList(rootsd, Set(rootsd)[i]))); suppdiv:=Concatenation(Set(rootsn),Set(rootsd)); crv:=AffineCurve(y,R); divf:=rec(coeffs:=coeffdiv,support:=suppdiv,curve:=crv); return divf; end); ################################################## # # Group action on RR space and associate AG code # for the curve P^1 # ################################################### ########################################################### ## #F MoebiusTransformation(A,R) ## ## Input: is a 2x2 matrix with entries in a field F ## is a polynomial ring in x, R=F[x] ## Output: associated Moebius transformation to A ## InstallMethod(MoebiusTransformation, true, [IsMatrix,IsRing], 0, function(A,R) local var,f,x,a,b,c,d,F; var:=IndeterminatesOfPolynomialRing(R); F:=CoefficientsRing(R); x:=var[1]; a:=A[1][1]; b:=A[1][2]; c:=A[2][1]; d:=A[2][2]; if c=Zero(F) and d=Zero(F) then return "infinity"; fi; f:=(a*x+b)/(c*x+d); return f; end); ########################################################### ## #F ActionMoebiusTransformationOnFunction(A,f,R2) ## ## Input: is a 2x2 matrix with entries in a field F ## is a rational function in F(x) ## is a polynomial ring in x,y, R2=F[x,y] ## Output: associated function Af ## InstallMethod(ActionMoebiusTransformationOnFunction, true, [IsMatrix,IsRationalFunction,IsRing], 0, function(A,f,R2) local m,numf,var,p,denf,F,R1; if A=() then return f; fi; F:=CoefficientsRing(R2); var:=IndeterminatesOfPolynomialRing(R2); R1:= PolynomialRing(F,[var[1]]); var:=IndeterminatesOfPolynomialRing(R1); m:=MoebiusTransformation(A,R1); denf:=DenominatorOfRationalFunction(f); numf:=NumeratorOfRationalFunction(f); # return Value(numf,var,[m])/Value(denf,var,[m]); return Value(f,var,[m]); end); ########################################################### ## #F ActionMoebiusTransformationOnDivisorP1(A,div) ## ## Input: is a 2x2 matrix with entries in a field F ##
is a divisor on P^1 ## Output: associated divisor Adiv ## InstallMethod(ActionMoebiusTransformationOnDivisorP1, true, [IsMatrix,IsRecord], 0, function(A,div) local f,sdiv,Adiv,var,p,denf,F,R,xx,R1; if A=() then return div; fi; R:=div.curve.ring; F:=CoefficientsRing(R); var:=IndeterminatesOfPolynomialRing(R); xx:=X(F,var); R1:= PolynomialRing(F,[xx]); var:=IndeterminatesOfPolynomialRing(R1); Adiv:=ShallowCopy(div); sdiv:=div.support; f:=MoebiusTransformation(A,R1); denf:=DenominatorOfRationalFunction(f); for p in sdiv do if Value(denf,var,[p])=Zero(F) then Print("\n f.l.t. = ",f,", point = ",p,"\n\n"); Error("\n Sorry, action on this divisor is undefined\n\n"); fi; od; Adiv.support:=List(sdiv,p->Value(f,var,[p])); return Adiv; end); ########################################################### ## #F ActionMoebiusTransformationOnDivisorDefinedP1(A,div) ## ## Input: is a 2x2 matrix with entries in a field F ##
is a divisor on P^1 ## Output: returns true if associated divisor Adiv is ## not supported at infinity ## InstallMethod(ActionMoebiusTransformationOnDivisorDefinedP1, true, [IsMatrix,IsRecord], 0, function(A,div) local f,sdiv,Adiv,var,p,denf,F,R,R1,xx; if A=() then return div; fi; R:=div.curve.ring; F:=CoefficientsRing(R); var:=IndeterminatesOfPolynomialRing(R); xx:=X(F,var); #### this be called more than once:-) R1:= PolynomialRing(F,[xx]); var:=IndeterminatesOfPolynomialRing(R1); Adiv:=ShallowCopy(div); sdiv:=div.support; f:=MoebiusTransformation(A,R1); denf:=DenominatorOfRationalFunction(f); for p in sdiv do if Value(denf,var,[p])=Zero(F) then return false; fi; od; return true; end); ########################################################### ## #F DivisorAutomorphismGroupP1(div) ## ## Input:
is a divisor on P^1 over a finite field ## Output: returns subgroup of GL(2,F) which preserves div ## ## *** very slow *** ## InstallMethod(DivisorAutomorphismGroupP1, true, [IsRecord], 0, function(div) local R,F,A,autgp,sdiv,G,Adiv,eG; sdiv:=div.support; autgp:=[]; R:=div.curve.ring; F:=CoefficientsRing(R); G:=GL(2,F); eG:=Elements(G); for A in eG do # f:=MoebiusTransformation(A,R); if ActionMoebiusTransformationOnDivisorDefinedP1(A,div) then Adiv:= ActionMoebiusTransformationOnDivisorP1(A,div); if DivisorEqual(div,Adiv) then autgp:=Concatenation(autgp,[A]); # eG:=Difference(eG,Elements(Group(autgp))); # leaving the above in slows it down! fi; fi; od; if autgp<>[] then return Group(autgp); fi; return Group(()); end); ########################################################### ## #F MatrixRepresentationOnRiemannRochSpaceP1(g,div) ## ## Input: g in G subgp Aut(D) subgp Aut(X) ## D=div a divisor on a curve X ## Output: a dxd matrix, where d = dim L(D), ## representing the action of g on L(D). ## Note: g sends L(D) to r*L(D), where ## r is a polynomial of degree 1 depending on ## g and D ## ## *** very slow *** ## InstallMethod(MatrixRepresentationOnRiemannRochSpaceP1, true, [IsMatrix,IsRecord], 0, function(g,div) local i,j,n,R,F,f,B,gB,num,gBgood,basisLD,LD,coeffs_g,xx,R1,var; R:=div.curve.ring; var:=IndeterminatesOfPolynomialRing(R); F:=CoefficientsRing(R); B:=RiemannRochSpaceBasisP1(div); n:=Length(B); LD:=VectorSpace(F,B); basisLD:=Basis(LD,B); xx:=X(F,var); R1:= PolynomialRing(F,[xx]); ## used ???????? gB:=List(B,f->ActionMoebiusTransformationOnFunction(g,f,R)); # this ring R for gB must be same ring as for B coeffs_g:=[]; # moved from inside "if not(Div..." statement below if not(DivisorIsEffective(div)) then #div<0 for i in [1..n] do coeffs_g[i]:=Coefficients( basisLD, gB[i] ); od; fi; if DivisorIsEffective(div) then #div>0 for i in [1..n] do coeffs_g[i]:=Coefficients( basisLD, xx^0*gB[i] ); # Coefficients can't handle a constant function so pre-multiply by x^0 od; fi; return coeffs_g; end); ########################################################### ## #F GOrbitPoint:(G,P) ## ## P must be a point in P^n(F) ## G must be a finite subgroup of GL(n+1,F) ## returns all (representatives of projective) ## points in the orbit G*P ## InstallMethod(GOrbitPoint, true, [IsGroup,IsList], 0, function(G,P) local O,p,g,addit,gP,IsEqualProjectivePoint; ##start local fcn: represent same projective point? IsEqualProjectivePoint:=function(P1,P2) # P1 = [x1,y1,z1] # P2 = [x2,y2,z2] # returns true iff P1=lambda*P2 local lambda,F; F:=DefaultField(P1[1]); if P1[1]<>Zero(F) then lambda:=P2[1]/P1[1]; elif P1[2]<>Zero(F) then lambda:=P2[2]/P1[2]; else lambda:=P2[3]/P1[3]; fi; return P1*lambda=P2; end; ##end local fcn O:=[P]; for g in G do gP:=g*P; addit:=true; for p in O do if IsEqualProjectivePoint(gP,p) then addit:=false; break; fi; od; if addit then O:=Concatenation(O,[gP]); fi; od; return O; end); ########################################################### # # ag error-correcting codes stuff # ########################################################### ########################################################### ## #F EvaluationBivariateCode(

, , ) ## ## Automatically removes the 'bad' points (poles or points ## not on the curve from

. ## ## Input:

are points in F^2, F=finite field, ## is a list of ratl fcns on ## Output: associated evaluation code ## InstallMethod(EvaluationBivariateCode, true, [IsList,IsList,IsRecord], 0, function(P,L,crv) local pos,R,F,f,p,i,goodpts,badpts,G, n,valsdenom,C, j, k,vals,vars; R:=crv.ring; F:=CoefficientsRing(R); n:=Length(P); ## "designed" length (may shrink, ## if bad points (poles of an f in L) exist) k:=Length(L); ## "designed" dimension vars:=IndeterminatesOfPolynomialRing(R); valsdenom:=function(f,p) return Value(DenominatorOfRationalFunction(f*vars[1]^0),vars,p); end; vars:=IndeterminatesOfPolynomialRing(R); goodpts:=[]; badpts:=[]; for p in P do if (ForAll([1..k],i->valsdenom(L[i],p)<>Zero(F)) and OnCurve([p],crv)) then goodpts:=Concatenation(goodpts,[p]); else badpts:=Concatenation(badpts,[p]); fi; od; if badpts<>[] then Print("\n\n Automatically removed the following 'bad' points (either a pole or not on the curve):\n",badpts,"\n\n"); fi; vals:=List(L,f->List(goodpts,p->Value(f,vars,p))); G:=ShallowCopy(NullMat(k,Length(goodpts),F)); for i in [1..k] do for j in [1..Length(goodpts)] do pos:=Position(P,goodpts[j]); G[i][j]:=vals[i][j]; od; od; C:=GeneratorMatCode(G," evaluation code",F); C!.GeneratorMat:=ShallowCopy(G); C!.basis:=L; C!.points:=goodpts; C!.ring:=R; return C; end); ########################################################### ## #F EvaluationBivariateCodeNC(, , ) ## ## Does Not Check if points are 'bad' ## ## Input: are points in F^2, F=finite field, ## is a list of ratl fcns on ## Output: associated evaluation code ## InstallMethod(EvaluationBivariateCodeNC, true, [IsList,IsList,IsRecord], 0, function(P,L,crv) local pos,R,F,f,p,i,goodpts,badpts,G, n,valsdenom,C, j, k,vals,vars; R:=crv.ring; F:=CoefficientsRing(R); n:=Length(P); ## "designed" length (may shrink, ## if bad points (poles of an f in L) exist) k:=Length(L); ## "designed" dimension vars:=IndeterminatesOfPolynomialRing(R); valsdenom:=function(f,p) return Value(DenominatorOfRationalFunction(f*vars[1]^0),vars,p); end; vars:=IndeterminatesOfPolynomialRing(R); goodpts:=P; vals:=List(L,f->List(goodpts,p->Value(f,vars,p))); G:=ShallowCopy(NullMat(k,Length(goodpts),F)); for i in [1..k] do for j in [1..Length(goodpts)] do pos:=Position(P,goodpts[j]); G[i][j]:=vals[i][j]; od; od; C:=GeneratorMatCode(G," evaluation code",F); C!.GeneratorMat:=ShallowCopy(G); C!.basis:=L; C!.points:=goodpts; C!.ring:=R; return C; end); ############################################################ ## #F GoppaCodeClassical(

,) ## ## classical Goppa codes ## Vaguely related to GeneralizedSrivastavaCode? ## (Think of a weighted dual of a classical Goppa code of ## an effective divisor of the form div = kP1+kP2+...+kPn?) ## InstallMethod(GoppaCodeClassical, true, [IsRecord,IsList], 0, function(div,pts) local n,k,F,R,var,cdiv,sdiv,basis,G,C,f,p; R:=div.curve.ring; F:=CoefficientsRing(R); cdiv:=div.coeffs; sdiv:=div.support; if Intersection(sdiv,pts)<>[] then Error("\n divisor and points must be disjoint \n"); fi; var:=IndeterminatesOfPolynomialRing(R); basis:=RiemannRochSpaceBasisP1(div); G:=List(basis,f->List(pts,p->Value(var[1]^0*f,[var[1]],[p]))); return GeneratorMatCode(G,F); end); ########################################################### ## #F XingLingCode(, ) ## ## Input: is an integer ## is a polynomial ring of one variable ## Output: associated evaluation code ## ######## seems to have a bug - F=GF(7), k=15 hangs ######## ## InstallMethod(XingLingCode, true, [IsInt,IsRing], 0, function(k,R) local i,j,e,q,F,FF,indets,xx,a,b,f,Pts,RatPts,IrrRatPts,G,C; e:=[]; F:=CoefficientsRing(R); q:=Size(F); indets := IndeterminatesOfPolynomialRing(R); xx:=indets[1]; a:=PrimitiveElement(F); FF:=FieldExtension(F,xx^2-a); IrrRatPts:=[]; RatPts:=Elements(F); for b in FF do if not(b^q in F) then IrrRatPts:=Concatenation(IrrRatPts,[b]); fi; od; for i in [1..k] do for j in [i..k] do if (i=j and q*(i+1)Value(f,[xx],[p]))]); od; C:=GeneratorMatCode(G,F); return C; end);guava-3.6/lib/bounds.gi0000644017361200001450000007453011026723452014736 0ustar tabbottcrontab############################################################################# ## #A bounds.gi GUAVA library Reinald Baart #A &Jasper Cramwinckel #A &Erik Roijackers ## ## This file contains functions for calculating with bounds ## #H @(#)$Id: bounds.gi,v 1.99 09/25/2004 gap Exp $ ## Revision.("guava/lib/bounds_gi") := "@(#)$Id: bounds.gi,v 1.99 09/25/2004 gap Exp $"; ############################################################################# ## #F LowerBoundGilbertVarshamov( , , ) . . . Gilbert-Varshamov ## lower bound for linear codes ## ## added 9-2004 by wdj InstallMethod(LowerBoundGilbertVarshamov, "n, d, q", true, [IsInt, IsInt, IsInt], 0, function(n, d, q) return Int((q^(n-1))/(SphereContent(n-1,d-2,GF(q)))); end); ############################################################################# ## #F LowerBoundSpherePacking( , , ) . . . sphere packing lower bound ## for unrestricted codes ## ## added 11-2004 by wdj InstallMethod(LowerBoundSpherePacking, "n, d, q", true, [IsInt, IsInt, IsInt], 0, function(n, d, q) return Int((q^(n))/(SphereContent(n,d-1,GF(q)))); end); ############################################################################# ## #F UpperBoundHamming( , , ) . . . . . . . . . . . . Hamming bound ## InstallMethod(UpperBoundHamming, "n, d, q", true, [IsInt, IsInt, IsInt], 0, function(n, d, q) return Int((q^n)/(SphereContent(n,QuoInt(d-1,2),q))); end); ############################################################################# ## #F UpperBoundSingleton( , , ) . . . . . . . . . . Singleton bound ## InstallMethod(UpperBoundSingleton, "n, d, q", true, [IsInt, IsInt, IsInt], 0, function (n,d,q) return q^(n - d + 1); end); ############################################################################# ## #F UpperBoundPlotkin( , , ) . . . . . . . . . . . . Plotkin bound ## InstallMethod(UpperBoundPlotkin, "n, d, q", true, [IsInt, IsInt, IsInt], 0, function (n,d,q) local t, fact; t := 1 - 1/q; if (q=2) and (n = 2*d) and (d mod 2 = 0) then return 4*d; elif (q=2) and (n = 2*d + 1) and (d mod 2 = 1) then return 4*d + 4; elif d >= t*n + 1 then return Int(d/( d - t*n)); elif d < t*n + 1 then fact := (d-1) / t; if not IsInt(fact) then fact := Int(fact) + 1; fi; return Int(d/( d - t * fact)) * q^(n - fact); fi; end); ############################################################################# ## #F UpperBoundGriesmer( , , ) . . . . . . . . . . . Griesmer bound ## InstallMethod(UpperBoundGriesmer, "n, d, q", true, [IsInt, IsInt, IsInt], 0, function (n,d,q) local s, den, k, add; den := 1; s := 0; k := 0; add := 0; while s <= n do if add <> 1 then add := QuoInt(d, den) + SignInt(d mod den); fi; s := s + add; den := den * q; k := k + 1; od; return q^(k-1); end); ############################################################################# ## #F UpperBoundElias( , , ) . . . . . . . . . . . . . . Elias bound ## ## bug found + corrected 2-2004 ## code added 8-2004 ## InstallMethod(UpperBoundElias, "n, d, q", true, [IsInt, IsInt, IsInt], 0, function (n,d,q) local r, i, I, w, bnd, ff, get_list; ff:=function(n,d,w,q) local r; r:=1-1/q; return r*n*d*q^n/((w^2-2*r*n*w+r*n*d)*SphereContent(n,w,q)); end; get_list:=function(n,d,q) local r,i,I; I:=[]; r:=1-1/q; for i in [1..Int(r*n)] do if IsPosRat(i^2-2*r*n*i+r*n*d) then Append(I,[i]); fi; od; return I; end; I:=get_list(n,d,q); bnd:= Minimum(List(I, w -> ff(n,d,w,q))); return Int(bnd); end); ############################################################################# ## #F UpperBoundJohnson( , ) . . . . . . . . . . Johnson bound for =2 ## InstallMethod(UpperBoundJohnson, "n, d", true, [IsInt, IsInt], 0, function (n,d) local UBConsWgt, e, num, den; UBConsWgt := function (n1,d1) local fact, e, res, t; e := Int((d1-1) / 2); res := 1; for t in [0..e] do res := Int(res * (n1 - (e-t)) / ( d1 - (e-t))); od; return res; end; e := Int((d-1) / 2); num := Binomial(n,e+1) - Binomial(d,e)*UBConsWgt(n,d); den := Int(num / Int(n / (e+1))); return Int(2^n / (den + SphereContent(n,e,2))); end); ############################################################################# ## #F UpperBound( , [, ] ) . . . . upper bound for minimum distance ## ## calculates upperbound for a code C of word length n, minimum distance at ## least d over an alphabet Q of size q, using the minimum of the Hamming, ## Plotkin and Singleton bound. ## InstallMethod(UpperBound, "n, d, fieldsize", true, [IsInt, IsInt, IsInt], 0, function(n, d, q) local MinBound, l; MinBound := function (n1,d1,q1) local mn1; mn1 := Minimum (UpperBoundPlotkin(n1,d1,q1), UpperBoundSingleton(n1,d1,q1), UpperBoundElias(n1,d1,q1)); if q1 = 2 then return Minimum(mn1, UpperBoundJohnson(n1,d1)); else return Minimum(mn1, UpperBoundHamming(n1,d1,q1)); fi; end; if n < d then return 0; elif n = d then return q; elif d = 1 then return q^n; fi; if (q=2) then if d mod 2 = 0 then return Minimum(MinBound(n,d,q), MinBound(n-1,d-1,q)); else return Minimum(MinBound(n,d,q), MinBound(n+1,d+1,q)); fi; else return MinBound(n,d,q); fi; end); InstallOtherMethod(UpperBound, "n, d, field", true, [IsInt, IsInt, IsField], 0, function(n, d, F) return UpperBound(n, d, Size(F)); end); InstallOtherMethod(UpperBound, "n, d", true, [IsInt, IsInt], 0, function(n, d) return UpperBound(n, d, 2); end); ############################################################################# ## #F IsPerfectCode( ) . . . . . . determines whether C is a perfect code ## InstallMethod(IsPerfectCode, "method for unrestricted codes", true, [IsCode], 0, function(C) local n, q, dist, d, t, isperfect, IsTrivialPerfect, ArePerfectParameters; IsTrivialPerfect := function(C) # Checks if C has only one or zero codewords, or is the whole # space, or is a repetition code of odd length over GF(2). # These are 'trivial' perfect codes. return ((Size(C) <= 1) or (Size(C) = Size(LeftActingDomain(C))^WordLength(C)) or ((LeftActingDomain(C) = GF(2)) and (Size(C) = 2) and ((WordLength(C) mod 2) <> 0) and (IsCyclicCode(C)))); end; ArePerfectParameters := function(q, n, M, dvec) local k, r; # Can the parameters be of a perfect code? If they don't belong # to a trivial perfect code, they should be the same as a Golay # or Hamming code. k := LogInt(M, q); if M <> q^k then return false; #nothing wrong here elif (q = 2) and (n = 23) then return (k = 12) and (7 in [dvec[1]..dvec[2]]); elif (q = 3) and (n = 11) then return (k = 6) and (5 in [dvec[1]..dvec[2]]); else r := n-k; return (n = ((q^r-1)/(q-1))) and (3 in [dvec[1]..dvec[2]]); fi; end; n := WordLength(C); q := Size(LeftActingDomain(C)); dist := [LowerBoundMinimumDistance(C), UpperBoundMinimumDistance(C)]; if IsTrivialPerfect(C) then if (Size(C) > 1) then SetCoveringRadius(C, Int(MinimumDistance(C)/2)); else SetCoveringRadius(C, n); fi; return true; elif not ArePerfectParameters(q, n, Size(C), dist) then return false; else t := List(dist, d->QuoInt(d-1, 2)); if t[1] = t[2] then d := t[1]*2 +1; else d := MinimumDistance(C); fi; isperfect := (d mod 2 = 1) and ArePerfectParameters(q, n, Size(C), [d,d]); if isperfect then C!.lowerBoundMinimumDistance := d; C!.upperBoundMinimumDistance := d; SetCoveringRadius(C, Int(d/2)); fi; return isperfect; fi; end); ############################################################################# ## #F IsMDSCode( ) . . . checks if C is a Maximum Distance Separable Code ## InstallMethod(IsMDSCode, "method for unrestricted code", true, [IsCode], 0, function(C) local wd, w, n, d, q; q:= Size(LeftActingDomain(C)); n:= WordLength(C); d:= MinimumDistance(C); if d = n - LogInt(Size(C),q) + 1 then if not HasWeightDistribution(C) then wd := List([0..n], i -> 0); wd[1] := 1; for w in [d..n] do # The weight distribution of MDS codes is exactly known wd[w+1] := Binomial(n,w)*Sum(List([0..w-d],j -> (-1)^j * Binomial(w,j) *(q^(w-d+1-j)-1))); od; SetWeightDistribution(C, wd); fi; return true; else return false; #this is great! fi; end); ############################################################################# ## #F OptimalityCode( ) . . . . . . . . . . estimate for optimality of ## ## OptimalityCode(C) returns the difference between the smallest known upper- ## bound and the actual size of the code. Note that the value of the ## function UpperBound is not allways equal to the actual upperbound A(n,d) ## thus the result may not be equal to 0 for all optimal codes! ## InstallMethod(OptimalityCode, "method for unrestricted code", true, [IsCode], 0, function(C) return UpperBound(WordLength(C), MinimumDistance(C), Size(LeftActingDomain(C))) - Size(C); end); ############################################################################# ## #F OptimalityLinearCode( ) . estimate for optimality of linear code ## ## OptimalityLinearCode(C) returns the difference between the smallest known ## upperbound on the size of a linear code and the actual size. ## InstallMethod(OptimalityLinearCode, "method for unrestricted code", true, [IsCode], 0, function(C) local q, ub; if not IsLinearCode(C) then Print("Warning: OptimalityLinearCode called with non-linear ", "code as argument\n"); ##LR do we want to raise an error here? fi; q := Size(LeftActingDomain(C)); ub := Minimum(UpperBound(WordLength(C), MinimumDistance(C), q), UpperBoundGriesmer(WordLength(C), MinimumDistance(C), q)); return q^LogInt(ub,q) - Size(C); end); ############################################################################# ## #F BoundsMinimumDistance( , , ) . . gets data from bounds tables ## ## LowerBoundMinimumDistance uses (n, k, q, true) ## UpperBoundMinimumDistance uses (n, k, q, false) InstallGlobalFunction(BoundsMinimumDistance, function(arg) local n, k, q, RecurseBound, res, InfoLine, GLOBAL_ALERT, DoTheTrick, kind, obj; InfoLine := function(n, k, d, S, spaces, prefix) local K, res; if kind = 1 then K := "L"; else K := "U"; fi; return String(Flat([ K, "b(", String(n), "," , String(k), ")=", String(d), ", ", S ])); end; DoTheTrick := function( obj, man, str) if IsBound(obj.lastman) and obj.lastman = man then obj.expl[Length(obj.expl)] := str; else Add(obj.expl, str); fi; obj.lastman := man; return obj; end; #F RecurseBound RecurseBound := function(n, k, spaces, prefix) local i, obj, obj2, obj3, d1, d2, d3; if k = 0 then # Nullcode return rec(d := n, expl := [InfoLine(n, k, n, "null code", spaces, prefix) ], cons := [NullCode, [n, q]]); elif k = 1 then # RepetitionCode return rec(d := n, expl := [InfoLine(n, k, n, "repetition code", spaces, prefix) ], cons := [RepetitionCode, [n, q]]); elif k = 2 and q = 2 then # Cordaro-Wagner code obj := rec( d :=2*Int((n+1)/3) - Int(n mod 3 / 2) ); obj.expl := [InfoLine(n, k, obj.d, "Cordaro-Wagner code", spaces, prefix)]; obj.cons := [CordaroWagnerCode,[n]]; return obj; elif k = n-1 then # Dual of the repetition code return rec( d :=2, expl := [InfoLine(n, k, 2, "dual of the repetition code", spaces, prefix) ], cons := [DualCode,[[RepetitionCode, [n, q]]]]); elif k = n then # Whole space code return rec( d :=1, expl := [InfoLine(n, k, 1, Concatenation( "entire space GF(", String(q), ")^", String(n)), spaces, prefix) ], cons := [WholeSpaceCode, [n, q]]); elif not IsBound(GUAVA_BOUNDS_TABLE[kind][q][n][k]) then if kind = 1 then # trivial for lower bounds obj := rec(d :=2, expl := [InfoLine(n, k, 2, "expurgated dual of repetition code", spaces, prefix) ], cons := [DualCode,[[RepetitionCode, [n, q]]]]); for i in [ k .. n - 2 ] do obj.cons := [ExpurgatedCode,[obj.cons]]; od; return obj; # else # Griesmer for upper bounds # obj := rec( d := 2); # while Sum([0..k-1], i -> # QuoInt(obj.d, q^i) + SignInt(obj.d mod q^i)) <= n do # obj.d := obj.d + 1; # od; # obj.d := obj.d - 1; # obj.expl := [InfoLine(n, k, obj.d, "Griesmer bound", spaces, # prefix)]; # return obj; # begin CJ, 27 April 2006 else # upper-bounds obj := rec(d := 2); if (k = 1 or n = k) then # this is trivial if (n = k) then obj.d := 1; else obj.d := n; fi; obj.expl := [InfoLine(n, k, obj.d, "trivial", spaces, prefix)]; else # Singleton bound if (IsEvenInt(q) and n = q+2) then if (k = q-1) then obj.d := 4; else Error("Invalid Singleton bound"); fi; elif (IsPrimeInt(q) and n = q+1) then obj.d := q - k + 2; else obj.d := n - k + 1; fi; obj.expl := [InfoLine(n, k, obj.d, "by the Singleton bound", spaces, prefix)]; fi; return obj; # end CJ fi; #Look up construction in table elif IsInt(GUAVA_BOUNDS_TABLE[kind][q][n][k]) then i := GUAVA_BOUNDS_TABLE[kind][q][n][k]; if i = 1 then # Shortening obj := RecurseBound(n+1, k+1, spaces, ""); if IsBound(obj.lastman) and obj.lastman = 1 then Add(obj.cons[2][2], Length(obj.cons[2][2])+1); else obj.cons := [ShortenedCode, [ obj.cons, [1] ]]; fi; return DoTheTrick( obj, 1, InfoLine(n, k, obj.d, "by shortening of:", spaces, prefix) ); elif i = 2 then # Puncturing obj := RecurseBound(n+1, k, spaces, ""); obj.d := obj.d - 1; if IsBound(obj.lastman) and obj.lastman = 2 then Add(obj.cons[2][2], Length(obj.cons[2][2])+1); else obj.cons := [ PuncturedCode, [ obj.cons, [1] ]]; fi; return DoTheTrick( obj, 2, InfoLine(n, k, obj.d, "by puncturing of:", spaces, prefix) ); elif i = 3 then # Extending obj := RecurseBound(n-1, k, spaces, ""); if q = 2 and IsOddInt(obj.d) then obj.d := obj.d + 1; fi; if IsBound(obj.lastman) and obj.lastman = 3 then obj.cons[2][2] := obj.cons[2][2] + 1; else obj.cons := [ ExtendedCode, [ obj.cons, 1 ]]; fi; return DoTheTrick( obj, 3, InfoLine(n, k, obj.d, "by extending:", spaces, prefix) ); # begin CJ 25 April 2006 elif i = 20 then # Taking subcode obj := RecurseBound(n, k+1, spaces, ""); obj.cons := [ SubCode, [ obj.cons ]]; return DoTheTrick( obj, 20, InfoLine(n, k, obj.d, "by taking subcode of:", spaces, prefix) ); # end CJ # Methods for upper bounds: elif i = 11 then # Shortening obj := RecurseBound(n-1, k-1, spaces, ""); return DoTheTrick( obj, 11, InfoLine(n, k, obj.d, # "otherwise shortening would contradict:", "by considering shortening to:", spaces, prefix) ); elif i = 12 then # Puncturing obj := RecurseBound(n-1, k, spaces, ""); obj.d := obj.d + 1; return DoTheTrick( obj, 12, InfoLine(n, k, obj.d, # "otherwise puncturing would contradict:", "by considering puncturing to:", spaces, prefix) ); elif i = 13 then #Extending obj := RecurseBound(n+1, k, spaces, ""); if q=2 and IsOddInt(obj.d) then obj.d := obj.d - 1; fi; return DoTheTrick( obj, 13, InfoLine(n, k, obj.d, "otherwise extending would contradict:", spaces, prefix) ); else Error("invalid table entry; table is corrupted"); fi; else i := GUAVA_BOUNDS_TABLE[kind][q][n][k]; if i[1] = 0 then # Code from library if IsBound( GUAVA_REF_LIST.(i[3]) ) then res.references.(i[3]) := GUAVA_REF_LIST.(i[3]); else res.references.(i[3]) := GUAVA_REF_LIST.ask; fi; obj := rec( d := i[2], expl := [InfoLine(n, k, i[2], Concatenation("reference: ", i[3]), spaces, prefix)], cons := false ); if kind = 1 and not GLOBAL_ALERT then GUAVA_TEMP_VAR := [n, k]; ReadPkg( "guava", Concatenation( "tbl/codes", String(q), ".g" ) ); if GUAVA_TEMP_VAR = false then GLOBAL_ALERT := true; fi; obj.cons := GUAVA_TEMP_VAR; fi; return obj; elif i[1] = 4 then # Construction B obj := RecurseBound(n+i[2],k+i[2]-1, spaces, ""); obj.cons := [ConstructionBCode, [obj.cons]]; # Add(obj.expl, InfoLine(n, k, obj.d, Concatenation( # "by contruction B (deleting ",String(i[2]), # " coordinates of a word in the dual)"), # spaces, prefix) ); Add(obj.expl, InfoLine(n, k, obj.d, Concatenation( "by applying contruction B to a [", String(n+i[2]), ",", String(k+i[2]-1), ",", String(obj.d), "] code"), spaces, prefix) ); Unbind(obj.lastman); return obj; elif i[1] = 5 then # u | u+v construction obj := RecurseBound(n/2, i[2], spaces + 4, "C1: "); obj2 :=RecurseBound(n/2, k-i[2], spaces + 4, "C2: "); d1 := obj.d; obj.cons := [UUVCode,[obj.cons, obj2.cons]]; obj.d := Minimum( 2 * obj.d, obj2.d ); obj.expl := Concatenation(obj2.expl, obj.expl); Add(obj.expl, InfoLine(n, k, obj.d, Concatenation("by the u|u+v construction applied to C1 [", String(n/2), ",", String(i[2]), ",", String(d1), "] and C2 [", String(n/2), ",", String(k-i[2]), ",", String(obj2.d), "]: "), spaces, prefix) ); # "u|u+v construction of C1 and C2:", spaces, prefix)); Unbind(obj.lastman); return obj; elif i[1] = 22 and q > 2 then # u | u+av | u+v+w construction, for GF(q) where q > 2 obj := RecurseBound(n/3, i[2], spaces + 4, "C1: "); d1 := obj.d; obj2 :=RecurseBound(n/3, i[3], spaces + 4, "C2: "); d2 := obj2.d; obj3 :=RecurseBound(n/3, k-i[2]-i[3], spaces + 4, "C2: "); d3 := obj3.d; obj.cons := false; # [UUAVUVWCode,[obj.cons, obj2.cons, obj3.cons]]; obj.d := n; if (i[2] > 0) then obj.d := Minimum( obj.d, 3*d1 ); fi; if (i[3] > 0) then obj.d := Minimum( obj.d, 2*d2 ); fi; if (k-(i[2]+i[3]) > 0) then obj.d := Minimum( obj.d, d3 ); fi; obj.expl := Concatenation(obj3.expl, obj2.expl, obj.expl); Add(obj.expl, InfoLine(n, k, obj.d, Concatenation("by the u|u+av|u+v+w construction applied to C1 [", String(n/3), ",", String(i[2]), ",", String(d1), "] and C2 [", String(n/3), ",", String(i[3]), ",", String(d2), "] and C3 [", String(n/3), ",", String(k-i[2]-i[3]), ",", String(d3), "]: "), spaces, prefix) ); Unbind(obj.lastman); return obj; elif i[1] = 6 then # Concatenation obj := RecurseBound(n-i[2], k, spaces + 4, "C1: "); obj2 := RecurseBound(i[2], k, spaces + 4, "C2: "); d1 := obj.d; obj.cons := [ConcatenationCode,[obj.cons, obj2.cons]]; obj.d := obj.d + obj2.d; obj.expl := Concatenation(obj2.expl, obj.expl); Add(obj.expl, InfoLine(n, k, obj.d, Concatenation("by concatenation of C1 [", String(n-i[2]), ",", String(k), ",", String(d1), "] and C2 [", String(i[2]), ",", String(k), ",", String(obj2.d), "]: "), spaces, prefix) ); # "concatenation of C1 and C2:", spaces, prefix)); Unbind(obj.lastman); return obj; elif i[1] = 7 then # ResidueCode # begin CJ 27 April 2006 # The current Brouwer's table contains some 'MYSTERY' codes, these codes are # resulted from Construction A. if ((q = 2 and i[2] > 257) or (q = 3 and i[2] > 243) or (q = 4 and i[2] > 256)) then d1 := QuoInt((i[2]-n), q) + SignInt((i[2]-n) mod q); obj := rec( d := d1, expl := [InfoLine(n, k, d1, Concatenation("by construction A (taking residue) of a [", String(i[2]), ",", String(k+1), ",", String(i[2]-n), "]", " MYSTERY code, contact A.E. Brouwer (aeb@cwi.nl)"), spaces, prefix)], cons := false ); Unbind(obj.lastman); return obj; fi; # end CJ obj := RecurseBound(i[2], k+1, spaces, ""); obj.d := QuoInt(obj.d, q) + SignInt(obj.d mod q); Add(obj.expl, InfoLine(n, k, obj.d, "by construction A (taking residue) of:", spaces, prefix) ); obj.cons := [ResidueCode, [obj.cons]]; Unbind(obj.lastman); return obj; elif i[1] = 14 then # Construction B obj := RecurseBound(n-i[2], k-i[2]+1, spaces, ""); Add(obj.expl, InfoLine(n, k, obj.d, # "otherwise construction B would contradict:", spaces, "by construction B applied to:", spaces, prefix) ); Unbind(obj.lastman); return obj; # begin CJ, 25 April 2006 elif i[1] = 15 then # the Griesmer bound (non recursive) obj := rec( d:=i[2], expl := [InfoLine(n, k, i[2], "by the Griesmer bound", spaces, prefix)], cons:=false ); Unbind(obj.lastman); return obj; elif i[1] = 16 then # one-step Griesmer bound obj := RecurseBound(n-(i[2]+1), k-1, spaces, ""); obj.d := i[2]; Add(obj.expl, InfoLine(n, k, obj.d, "by a one-step Griesmer bound from:", spaces, prefix) ); Unbind(obj.lastman); return obj; elif i[1] = 21 then # Construction B2 obj := RecurseBound(n+i[2], k+i[2]-(2*i[3])-1, spaces, ""); obj.cons := [ConstructionB2Code, [obj.cons]]; obj.d := obj.d - (2*i[3]); Add(obj.expl, InfoLine(n, k, obj.d, Concatenation( "by applying construction B2 to a [", String(n+i[2]), ",", String(k+i[2]-(2*i[3])-1), ",", String(obj.d+(2*i[3])), "] code"), spaces, prefix) ); Unbind(obj.lastman); return obj; #end CJ else Error("invalid table entry; table is corrupted"); fi; fi; end; #F Function body if Length(arg) < 2 or Length(arg) > 4 then Error("usage: OptimalLinearCode( , [, ] )"); fi; n := arg[1]; k := arg[2]; q := 2; if Length(arg) > 2 then if IsInt(arg[3]) then q := arg[3]; else q := Size(arg[3]); fi; fi; if k > n then Error("k must be less than or equal to n"); fi; # Check that right tables are present if not IsBound(GUAVA_REF_LIST) or Length(RecNames(GUAVA_REF_LIST))=0 then ReadPkg( "guava", "tbl/refs.g" ); fi; res := rec(n := n, k := k, q := q, references := rec(), construction := false); if not ( IsBound(GUAVA_BOUNDS_TABLE[1][q]) and IsBound(GUAVA_BOUNDS_TABLE[2][q]) ) and q > 4 then # Left the following lines out and replaced them with the previous, # and the else-part of this if, because using READ in # this way does not work in GAP 3.5. # (the behaviour of LOADED_PACKAGES has changed) # not READ(Concatenation(LOADED_PACKAGES.guava, "tbl/bdtable", # String(q),".g")) then res.lowerBound := 1; res.upperBound := n - k + 1; return res; # Error("boundstable for q = ", q, " is not implemented."); else ReadPkg( "guava", Concatenation( "tbl/bdtable", String(q), ".g" ) ); fi; if n > Length(GUAVA_BOUNDS_TABLE[1][q]) then # no error should be returned here, otherwise Upper and # LowerBoundMinimumDistance would not work. The upper bound # could easely be sharpened by the Griesmer bound and # if n - k > Sz then # upperbound >= n - k + 1; # else # upperbound <= Ub[ Sz ][ k - n + Sz ] # fi; # lowerbound >= Lb[ Sz ][Minimum(Sz, k)] res.lowerBound := 1; res.upperBound := n - k + 1; return res; # Error("no data for n > ", Length(GUAVA_BOUNDS_TABLE[1][q])); fi; if Length(arg) < 4 or arg[4] then kind := 1; GLOBAL_ALERT := (Length(arg) = 4); obj := RecurseBound( n, k, 0, ""); if not GLOBAL_ALERT then res.construction := obj.cons; fi; res.lowerBound := obj.d; res.lowerBoundExplanation := Reversed( obj.expl ); fi; if Length(arg) < 4 or not arg[4] then kind := 2; obj := RecurseBound( n, k, 0, ""); res.upperBound := obj.d; res.upperBoundExplanation := Reversed( obj.expl ); fi; return res; end); ############################################################################# ## #F StringFromBoundsInfo . . . . . . . functions for bounds record ## PrintBoundsInfo . . . . . . . . . ## DisplayBoundsInfo . . . . . . . . ## ## These functions are not automatically called. The user must ## specifically call them if desired. They are intended for use ## with the Bounds Info record returned by the BoundsMinimumDistance ## function only. They replace the BoundsOps functions of the GAP3 ## version of GUAVA and provide a way to neatly print and display ## the information returned by BoundsMinimumDistance. ## Ex: PrintBoundsInfo(BoundsMinimumDistance(13,5,3)); ## StringFromBoundsInfo := function(R) local line; line := Concatenation("an optimal linear [", String(R.n), ",", String(R.k), ",d] code over GF(", String(R.q), ") has d"); if R.upperBound <> R.lowerBound then Append(line,Concatenation(" in [", String(R.lowerBound),"..", String(R.upperBound),"]")); else Append(line,Concatenation("=",String(R.lowerBound))); fi; return line; end; PrintBoundsInfo := function(R) Print(StringFromBoundsInfo(R), "\n"); end; DisplayBoundsInfo := function(R) local i, ref; PrintBoundsInfo(R); if IsBound(R.lowerBoundExplanation) then for i in [1..SizeScreen()[1]-2] do Print( "-" ); od; Print( "\n" ); for i in R.lowerBoundExplanation do Print(i, "\n"); od; fi; if IsBound(R.upperBoundExplanation) then for i in [1..SizeScreen()[1]-2] do Print( "-" ); od; Print( "\n" ); for i in R.upperBoundExplanation do Print(i, "\n"); od; fi; if IsBound(R.references) and Length(RecNames(R.references)) > 0 then for i in [1..SizeScreen()[1]-2] do Print( "-" ); od; Print( "\n" ); for i in RecNames(R.references) do Print("Reference ", i, ":\n"); for ref in R.references.(i) do Print(ref, "\n"); od; od; fi; end; guava-3.6/lib/bounds.gd0000644017361200001450000001066211026723452014725 0ustar tabbottcrontab############################################################################# ## #A bounds.gd GUAVA library Reinald Baart #A &Jasper Cramwinckel #A &Erik Roijackers ## ## This file contains functions for calculating with bounds ## #H @(#)$Id: bounds.gd,v 1.99 09/25/2004 gap Exp $ ## ## added LowerBoundGilbertVarshamov, LowerBoundSpherePacking ## Revision.("guava/lib/bounds_gd") := "@(#)$Id: bounds.gd,v 1.99 09/25/2004 gap Exp $"; ############################################################################# ## #F LowerBoundGilbertVarshamov( , , ) . . .Gilbert-Varshamov bound ## ## added 9-2004 by wdj DeclareOperation("LowerBoundGilbertVarshamov", [IsInt, IsInt, IsInt]); ############################################################################# ## #F LowerBoundSpherePacking( , , ) . . . sphere packing lower bound ## for unrestricted codes ## ## added 11-2004 by wdj DeclareOperation("LowerBoundSpherePacking", [IsInt, IsInt, IsInt]); ############################################################################# ## #F UpperBoundHamming( , , ) . . . . . . . . . . . . Hamming bound ## DeclareOperation("UpperBoundHamming", [IsInt, IsInt, IsInt]); ############################################################################# ## #F UpperBoundSingleton( , , ) . . . . . . . . . . Singleton bound ## DeclareOperation("UpperBoundSingleton", [IsInt, IsInt, IsInt]); ############################################################################# ## #F UpperBoundPlotkin( , , ) . . . . . . . . . . . . Plotkin bound ## DeclareOperation("UpperBoundPlotkin", [IsInt, IsInt, IsInt]); ############################################################################# ## #F UpperBoundGriesmer( , , ) . . . . . . . . . . . Griesmer bound ## DeclareOperation("UpperBoundGriesmer", [IsInt, IsInt, IsInt]); ############################################################################# ## #F UpperBoundElias( , , ) . . . . . . . . . . . . . . Elias bound ## DeclareOperation("UpperBoundElias", [IsInt, IsInt, IsInt]); ############################################################################# ## #F UpperBoundJohnson( , ) . . . . . . . . . . Johnson bound for =2 ## DeclareOperation("UpperBoundJohnson", [IsInt, IsInt]); ############################################################################# ## #F UpperBound( , [, ] ) . . . . upper bound for minimum distance ## ## calculates upperbound for a code C of word length n, minimum distance at ## least d over an alphabet Q of size q, using the minimum of the Hamming, ## Plotkin and Singleton bound. ## DeclareOperation("UpperBound", [IsInt, IsInt, IsInt]); ############################################################################# ## #F IsPerfectCode( ) . . . . . . determines whether C is a perfect code ## DeclareProperty("IsPerfectCode", IsCode); ############################################################################# ## #F IsMDSCode( ) . . . checks if C is a Maximum Distance Separable Code ## DeclareProperty("IsMDSCode", IsCode); ############################################################################# ## #F OptimalityCode( ) . . . . . . . . . . estimate for optimality of ## ## OptimalityCode(C) returns the difference between the smallest known upper- ## bound and the actual size of the code. Note that the value of the ## function UpperBound is not allways equal to the actual upperbound A(n,d) ## thus the result may not be equal to 0 for all optimal codes! ## DeclareOperation("OptimalityCode", [IsCode]); ############################################################################# ## #F OptimalityLinearCode( ) . estimate for optimality of linear code ## ## OptimalityLinearCode(C) returns the difference between the smallest known ## upperbound on the size of a linear code and the actual size. ## DeclareOperation("OptimalityLinearCode", [IsCode]); ############################################################################# ## #F BoundsMinimumDistance( , , ) . . gets data from bounds tables ## ## LowerBoundMinimumDistance uses (n, k, q, true) ## LowerBoundMinimumDistance uses (n, k, q, false) DeclareGlobalFunction("BoundsMinimumDistance"); guava-3.6/lib/codeword.gi0000644017361200001450000005177611026723452015261 0ustar tabbottcrontab############################################################################# ## #A codeword.gi GUAVA library Reinald Baart #A &Jasper Cramwinckel #A &Erik Roijackers ## ## This file contains functions for working with codewords ## Codeword is a record with the following field: ## !.treatAsPoly ## ## Codeword can have the following attributes: ## VectorCodeword ## PolyCodeword ## Weight ## WordLength ## Support ## #H @(#)$Id: codeword.gi,v 1.9 2003/02/12 03:49:19 gap Exp $ ## Revision.("guava/lib/codeword_gi") := "@(#)$Id: codeword.gi,v 1.9 2003/02/12 03:49:19 gap Exp $"; DeclareRepresentation("IsCodewordRep", IsAttributeStoringRep and IsComponentObjectRep, ["treatAsPoly"]); BindGlobal("CodewordFamily", NewFamily("CodewordFamily", IsCodeword,IsCodeword and IsCodewordRep)); BindGlobal("CodewordType",NewType(CodewordFamily, IsCodeword )); # Function to objectify codeword using input # vector, length, and field or ffe MakeCodeword := function(vec, n, F) local v; if Length(vec) > n then vec := vec{[1..n]}; elif Length(vec) < n then vec := Concatenation(vec, [1..n-Length(vec)]*Zero(F)); fi; vec := vec * One(F); v := Objectify(CodewordType, rec()); SetVectorCodeword(v, vec); SetWordLength(v, n); return v; end; ## Function to select an appropriate field based on contents of list. SelectField := function(list) local f; f := Maximum(list) + 1; while not IsPrimePowerInt(f) do f := f + 1; od; return GF(f); end; ############################################################################# ## #F Codeword( [, ] or . . . . . . . . . . . . creates new codeword #F Codeword(

[, ] [, ] ) . . . . . . . . . . . . . . . . . . . . . ## Codeword(

, Code) . . . . . . . . . . . . . . . . . . . . . . . . . . ## InstallMethod(Codeword, "list,n,FFE", true, [IsList, IsInt, IsFFE], 1, function(list, n, ffe) local c; if Length(list) > 0 and not (IsRat(list[1]) or IsFFE(list[1])) then return List(list, i->Codeword(i, n, ffe)); fi; c := MakeCodeword(list, n, ffe); TreatAsVector(c); return c; end); InstallOtherMethod(Codeword, "list,n,Field", true, [IsList, IsInt, IsField], 1, function(list, n, F) local i; if Length(list) > 0 and not (IsRat(list[1]) or IsFFE(list[1])) then return List(list, i->Codeword(i, n, F)); fi; if Length(list) > 0 and IsRat(list[1]) and not IsPrime(Size(F)) then list := List(list, i->AsSSortedList(F)[Int(i)mod Size(F) + 1]); fi; return Codeword(list,n,One(F)); end); InstallOtherMethod(Codeword, "list,FFE", true, [IsList, IsFFE], 1, function(list, ffe) if Length(list) > 0 and not (IsRat(list[1]) or IsFFE(list[1])) then return List(list, i->Codeword(i, ffe)); fi; return Codeword(list, Length(list), ffe); end); InstallOtherMethod(Codeword, "list,Field", true, [IsList, IsField], 1, function(list, F) if Length(list) > 0 and not (IsRat(list[1]) or IsFFE(list[1])) then return List(list, i->Codeword(i, F)); fi; return Codeword(list, Length(list), F); end); InstallOtherMethod(Codeword, "list,n", true, [IsList, IsInt], 1, function(list, n) local o; if Length(list)=0 then o:=Z(2); elif IsRat(list[1]) then o:=SelectField(list); elif IsFFE(list[1]) then o:=Maximum(list); else return List(list, i->Codeword(i, n)); fi; return Codeword(list,n,o); end); InstallOtherMethod(Codeword,"list",true,[IsList],1, function(list) local o; if Length(list)=0 then o:=Z(2); elif IsRat(list[1]) then o:= SelectField(list); elif IsFFE(list[1]) then o:= Maximum(list); else return List(list, i->Codeword(i)); fi; return Codeword(list,Length(list),o); end); InstallOtherMethod(Codeword, "list,Code", true, [IsList, IsCode], 0, function(l, C) return Codeword(l, WordLength(C), LeftActingDomain(C)); end); ## Methods with a string provided ## ## helper function to convert string to list/vector. Digits go to approp. ## digit. Other characters go to 0. StringToVec := function(s) local val, i, S; S := []; for i in s do val := Position("0123456789", i); if val = fail then val := 0; else val := val-1; fi; Add(S, val); od; return S; end; InstallOtherMethod(Codeword,"string,n,FFE",true,[IsString,IsInt,IsFFE],0, function(s,n,ffe) s:=StringToVec(s); return Codeword(s,n,ffe); end); InstallOtherMethod(Codeword,"string,n,Field",true,[IsString,IsInt,IsField],0, function(s,n,F) s := StringToVec(s); return Codeword(s, n, F); end); InstallOtherMethod(Codeword, "string,FFE", true, [IsString, IsFFE], 0, function(s, ffe) return Codeword(s, Length(s), ffe); end); InstallOtherMethod(Codeword, "string,Field", true, [IsString, IsField], 0, function(s, F) return Codeword(s, Length(s), F); end); InstallOtherMethod(Codeword, "string,n", true, [IsString, IsInt], 0, function(s, n) local F; s := StringToVec(s); F := SelectField(s); return Codeword(s, n, F); end); InstallOtherMethod(Codeword, "string", true, [IsString], 0, function(s) return Codeword(s, Length(s)); end); InstallOtherMethod(Codeword, "string,Code", true, [IsString, IsCode], 0, function(s, C) return Codeword(s, WordLength(C), LeftActingDomain(C)); end); ## Methods with a poly provided ## InstallOtherMethod(Codeword,"poly,n,FFE", function(pf, inf, ff) return IsIdenticalObj(CoefficientsFamily(pf), ff); end, [IsUnivariatePolynomial,IsInt,IsFFE],0, function(p,n,ffe) local c; p := CoefficientsOfLaurentPolynomial(p); p := ShiftedCoeffs(p[1],p[2]); c := Codeword(p,n,ffe); TreatAsPoly(c); return c; end); InstallOtherMethod(Codeword, "poly,n,Field", function(pf,inf,ff) return IsIdenticalObj(CoefficientsFamily(pf), ElementsFamily(ff)); end, [IsUnivariatePolynomial, IsInt, IsField], 0, function(p, n, F) return Codeword(p, n, One(F)); end); InstallOtherMethod(Codeword, "poly,FFE", function(pf, ff) return IsIdenticalObj(CoefficientsFamily(pf), ff); end, [IsUnivariatePolynomial, IsFFE], 0, function(p, ffe) local c; p := CoefficientsOfLaurentPolynomial; p := ShiftedCoeffs(p[1],p[2]); c := Codeword(p, Length(p), ffe); TreatAsPoly(c); return c; end); InstallOtherMethod(Codeword, "poly,Field", function(pf,ff) return IsIdenticalObj(CoefficientsFamily(pf), ElementsFamily(ff)); end, [IsUnivariatePolynomial, IsField], 0, function(p, F) local c; p := CoefficientsOfLaurentPolynomial(p); p := ShiftedCoeffs(p[1],p[2]); c := Codeword(p, Length(p), One(F)); TreatAsPoly(c); return c; end); InstallOtherMethod(Codeword, "poly,n", true, [IsUnivariatePolynomial, IsInt], 0, function(p, n) local c, F; F := CoefficientsRing(DefaultRing(p)); p := CoefficientsOfLaurentPolynomial(p); p := ShiftedCoeffs(p[1],p[2]); c := Codeword(p, n, F); TreatAsPoly(c); return c; end); InstallOtherMethod(Codeword, "poly", true, [IsUnivariatePolynomial], 0, function(p) local c, F; F := CoefficientsRing(DefaultRing(p)); p := CoefficientsOfLaurentPolynomial(p); p := ShiftedCoeffs(p[1],p[2]); c := Codeword(p, Length(p), F); TreatAsPoly(c); return c; end); InstallOtherMethod(Codeword, "poly,Code", true, [IsUnivariatePolynomial, IsCode], 0, function(p, C) return Codeword(p, WordLength(C), LeftActingDomain(C)); end); ## Methods with a codeword provided ## InstallOtherMethod(Codeword,"codeword,n",true,[IsCodeword,IsInt],0, function(w,n) return Codeword(VectorCodeword(w),n, Field(VectorCodeword(w))); end); InstallOtherMethod(Codeword, "codeword", true, [IsCodeword], 0, function(w) return Codeword(VectorCodeword(w), WordLength(w), Field(VectorCodeword(w))); end); InstallOtherMethod(Codeword, "codeword,n,Field", true, [IsCodeword, IsInt, IsField], 0, function(w, n, F) return Codeword(VectorCodeword(w),n,F); end); InstallOtherMethod(Codeword, "codeword,n,FFE", true, [IsCodeword, IsInt, IsFFE], 0, function(w, n, ffe) return Codeword(VectorCodeword(w), n, ffe); end); InstallOtherMethod(Codeword, "codeword,Field", true, [IsCodeword, IsField], 0, function(w, F) return Codeword(VectorCodeword(w),WordLength(w), F); end); InstallOtherMethod(Codeword, "codeword,FFE", true, [IsCodeword, IsFFE], 0, function(w, ffe) return Codeword(VectorCodeword(w), WordLength(w), ffe); end); InstallOtherMethod(Codeword, "codeword,Code", true, [IsCodeword, IsCode], 0, function(w, C) return Codeword(VectorCodeword(w), WordLength(C), LeftActingDomain(C)); end); ############################################################################# ## #F Field( ) ## #InstallOtherMethod(FieldByGenerators,"codewords",true,[IsCodewordCollection],0, #function(l) # return FieldByGenerators(VectorCodeword(l[1])); #end); ############################################################################# ## #M Print( ) . . . . . . . . . . . . . . . . . . . . . prints a codeword ## PrintViewCodeword:=function(w) local v, q, isclear, i, l, power; if w!.treatAsPoly then v := VectorCodeword(w); if Length(v) > 0 then q := Size(Field(v)); else Print("[ ]"); return; fi; isclear := true; for power in Reversed([0..WordLength(w)-1]) do if v[power+1] <> 0*Z(q) then if not isclear then Print(" + "); fi; isclear := false; if power = 0 or v[power+1] <> Z(q)^0 then if IsPrime(q) then Print(String(Int(v[power+1]))); else i := LogFFE(v[power+1], Z(q)); if i = 0 then Print("1"); elif i = 1 then Print("a"); else Print("(a^",String(i),")"); fi; fi; fi; if power > 0 then Print("x"); if power > 1 then Print("^", String(power)); fi; fi; fi; od; if isclear then Print("0"); fi; else Print("[ "); v := VectorCodeword(w); if Length(v) > 0 then q := Size(Field(v)); else Print("]"); return; fi; if not IsPrime(q) then for i in v do if i = 0 * Z(q) then Print("0 "); else l := LogFFE(i, Z(q)); if l = 0 then Print("1 "); elif l = 1 then Print("a "); else Print("a^", String(l), " "); fi; fi; od; else for i in IntVecFFE(v) do Print(i, " "); od; fi; Print("]"); fi; end; InstallMethod(PrintObj, "codeword", true, [IsCodeword], 0, PrintViewCodeword); InstallMethod(ViewObj, "codeword", true, [IsCodeword], 0, PrintViewCodeword); ############################################################################# ## ## list methods for codewords (to permit codeword+list...) InstallOtherMethod(Length,"codeword",true,[IsCodeword],0, w->Length(VectorCodeword(w))); InstallOtherMethod(\[\],"codeword",true,[IsCodeword,IsPosInt],0, function(w,i) return VectorCodeword(w)[i]; end); ############################################################################# ## #F \+( , ) . . . . . . . . . . . . . . . . . . . . sum of codewords ## InstallOtherMethod(\+, "codeword+codeword", true, [IsCodeword, IsCodeword], 0, function(a, b) return Codeword(VectorCodeword(a) + VectorCodeword(b)); end); InstallOtherMethod(\+, "codeword+list", true, [IsCodeword, IsList], 0, function(w, l) return Codeword(VectorCodeword(w) + l); end); InstallOtherMethod(\+, "list+codeword", true, [IsList,IsCodeword], 0, function(l, w) return Codeword(l+VectorCodeword(w)); end); InstallOtherMethod(\+, "poly+codeword", true, [IsUnivariatePolynomial, IsCodeword], 0, function(p, w) return Codeword(p) + w; end); InstallOtherMethod(\+, "codeword+poly", true, [IsCodeword, IsUnivariatePolynomial], 0, function(w, p) return w + Codeword(p); end); InstallOtherMethod(\+, "string+codeword", true, [IsString, IsCodeword], 0, function(s, w) return Codeword(s) + w; end); InstallOtherMethod(\+, "codeword+string", true, [IsCodeword, IsString], 0, function(w, s) return w + Codeword(s); end); InstallOtherMethod(\+, "Rat+codeword", true, [IsRat, IsCodeword], 0, function(r, w) return Codeword(r + VectorCodeword(w)); end); InstallOtherMethod(\+, "codeword+Rat", true, [IsCodeword, IsRat], 0, function(w, r) return Codeword(VectorCodeword(w) + r); end); InstallOtherMethod(\+, "FFE+codeword", true, [IsFFE, IsCodeword], 0, function(ffe, w) return Codeword(ffe + VectorCodeword(w)); end); InstallOtherMethod(\+, "codeword+FFE", true, [IsCodeword, IsFFE], 0, function(w, ffe) return Codeword(VectorCodeword(w) + ffe); end); ############################################################################# ## #F \*( , ) . . . . . . . . . . . . product of codewords ## InstallOtherMethod(\*, "codeword*codeword", true, [IsCodeword, IsCodeword], 0, function(a, b) return VectorCodeword(a) * VectorCodeword(b); end); InstallOtherMethod(\*, "matrix*codeword", true, [IsMatrix, IsCodeword], 0, function(m, w) return Codeword(m * VectorCodeword(w)); end); InstallOtherMethod(\*, "codeword*matrix", true, [IsCodeword, IsMatrix], 0, function(w, m) return Codeword(VectorCodeword(w) * m); end); InstallOtherMethod(\*, "FFE*codeword", true, [IsFFE, IsCodeword], 0, function(ffe, w) return Codeword(ffe * VectorCodeword(w)); end); InstallOtherMethod(\*, "codeword*FFE", true, [IsCodeword, IsFFE], 0, function(w, ffe) return Codeword(VectorCodeword(w) * ffe); end); InstallOtherMethod(\*, "Rat*codeword", true, [IsRat, IsCodeword], 0, function(r, w) return Codeword(r * VectorCodeword(w)); end); InstallOtherMethod(\*, "codeword*Rat", true, [IsCodeword, IsRat], 0, function(w, r) return Codeword(VectorCodeword(w) * r); end); ############################################################################# ## #F \-( , ) . . . . . . . . . . . . . . . . . difference of codewords ## InstallOtherMethod(\-, "codeword-codeword", true, [IsCodeword, IsCodeword], 0, function(a, b) return Codeword(VectorCodeword(a) - VectorCodeword(b)); end); InstallOtherMethod(\-, "vector-codeword", true, [IsVector, IsCodeword], 0, function(v, w) return Codeword(v - VectorCodeword(w)); end); InstallOtherMethod(\-, "codeword-vector", true, [IsCodeword, IsVector], 0, function(w,v) return Codeword(VectorCodeword(w) - v); end); InstallOtherMethod(\-, "poly-codeword", true, [IsUnivariatePolynomial, IsCodeword], 0, function(p, w) return Codeword(p) - w; end); InstallOtherMethod(\-, "codeword-poly", true, [IsCodeword, IsUnivariatePolynomial], 0, function(w, p) return w - Codeword(p); end); InstallOtherMethod(\-, "string-codeword", true, [IsString, IsCodeword], 0, function(s, w) return Codeword(s) - w; end); InstallOtherMethod(\-, "codeword-string", true, [IsCodeword, IsString], 0, function(w, s) return w - Codeword(s); end); InstallOtherMethod(\-, "Rat-codeword", true, [IsRat, IsCodeword], 0, function(r, w) return Codeword(r - VectorCodeword(w)); end); InstallOtherMethod(\-, "codeword-Rat", true, [IsCodeword, IsRat], 0, function(w, r) return Codeword(VectorCodeword(w) - r); end); InstallOtherMethod(\-, "FFE-codeword", true, [IsFFE, IsCodeword], 0, function(ffe, w) return Codeword(ffe - VectorCodeword(w)); end); InstallOtherMethod(\-, "codeword-FFE", true, [IsCodeword, IsFFE], 0, function(w, ffe) return Codeword(VectorCodeword(w) - ffe); end); ############################################################################# ## #F \=( , ) . . . . . . . . . . . . . . . . . . equality of codewords ## InstallMethod(\=, "codeword=codeword", true, [IsCodeword, IsCodeword], 0, function(a, b) return VectorCodeword(a) = VectorCodeword(b); end); InstallMethod(\=, "vector=codeword", true, [IsVector, IsCodeword], 0, function(v, w) return v = VectorCodeword(w); end); InstallMethod(\=, "codeword=vector", true, [IsCodeword, IsVector], 0, function(w, v) return VectorCodeword(w) = v; end); InstallMethod(\=, "poly=codeword", true, [IsUnivariatePolynomial, IsCodeword], 0, function(p, w) return VectorCodeword(Codeword(p)) = VectorCodeword(w); end); InstallMethod(\=, "codeword=poly", true, [IsCodeword, IsUnivariatePolynomial], 0, function(w, p) return VectorCodeword(w) = VectorCodeword(Codeword(p)); end); InstallMethod(\=, "string=codeword", true, [IsString, IsCodeword], 0, function (s, w) return VectorCodeword(Codeword(s)) = VectorCodeword(w); end); InstallMethod(\=, "codeword=string", true, [IsCodeword, IsString], 0, function(w, s) return VectorCodeword(w) = VectorCodeword(Codeword(s)); end); ############################################################################# ## #F \<( , ) . . . . . . . . . . . . . . . . less than for codewords ## InstallMethod(\<, "codeword ) . . . . . . . set of coordinates in which is not zero ## InstallMethod(Support, "codeword", true, [IsCodeword], 0, function (c) local i, S, zero; S := []; zero := Zero(VectorCodeword(c)[1]); for i in [1..WordLength(c)] do if VectorCodeword(c)[i] <> zero then Add(S, i); fi; od; return S; end); ############################################################################# ## #F TreatAsPoly( ) . . . . . . . . . . . . treat codeword as polynomial ## ## The codeword will be treated as a polynomial ## InstallMethod(TreatAsPoly, "codeword", true, [IsCodeword], 0, function(c) c!.treatAsPoly := true; end); InstallOtherMethod(TreatAsPoly, "list of codewords", true, [IsList], 0, function(list) local i; if IsCodeword(list) then TryNextMethod(); # codeword is list fi; for i in list do TreatAsPoly(i); od; end); ############################################################################# ## #F TreatAsVector( ) . . . . . . . . . . . . treat codeword as a vector ## ## The codeword will be treated as a vector ## InstallMethod(TreatAsVector, "codeword", true, [IsCodeword], 0, function(c) c!.treatAsPoly := false; end); InstallOtherMethod(TreatAsVector, "list of codewords", true, [IsList], 0, function(list) local i; if IsCodeword(list) then TryNextMethod(); # codeword is list fi; for i in list do TreatAsVector(i); od; end); ############################################################################# ## #F PolyCodeword( ) . . . . . . . . . . converts input to polynomial(s) ## ## Input may be codeword, polynomial, vector or a list of those ## -currently only codeword or list of InstallMethod(PolyCodeword, "poly from codeword", true, [IsCodeword], 0, function(w) local fam, cf, F; cf := VectorCodeword(w); if Length(cf) > 0 then F := Field(cf); else F := GF(2); fi; fam := ElementsFamily(FamilyObj(F)); return LaurentPolynomialByCoefficients(fam, cf, 0); end); InstallOtherMethod(PolyCodeword, "polys from codeword list", true, [IsList], 0, function(l) return List(l, i->PolyCodeword(Codeword(i))); end); ############################################################################# ## #F VectorCodeword( ) . . . . . . . . . . . . converts input to vector ## ## Input may be codeword, polynomial, vector or a list of those ## - currently only codeword or list of! InstallMethod(VectorCodeword, "vector from codeword", true, [IsCodeword], 0, function(w) local p; if HasPolyCodeword(w) then p := PolyCodeword(w); else Error("VectorCodeword and PolyCodeword both unknown"); fi; p := CoefficientsOfLaurentPolynomial(p); p := ShiftedCoeffs(p[1], p[2]); return p; end); InstallOtherMethod(VectorCodeword, "vectors from codeword list", true, [IsList], 0, function(l) return List(l, i->VectorCodeword(Codeword(i))); end); ############################################################################# ## #F Weight( ) . . . . . . . . . . . calculates the weight of codeword ## InstallMethod(Weight, "codeword", true, [IsCodeword], 0, function(w) local vec; vec := VectorCodeword(w); return DistanceVecFFE( 0*vec, vec ); end ); ############################################################################# ## #F DistanceCodeword( , ) . the distance between codeword and ## InstallMethod(DistanceCodeword, "two codewords", true, [IsCodeword, IsCodeword], 0, function(w1, w2) return DistanceVecFFE(VectorCodeword(w1), VectorCodeword(w2)); end); ############################################################################# ## #F NullWord( ) or NullWord( , ) . . . . . . . . . . all zero word ## InstallMethod(NullWord, "n-FFE", true, [IsInt, IsFFE], 0, function(n,ffe) return Codeword(List([1..n], i->0), n, ffe); end); InstallOtherMethod(NullWord, "n-Field", true, [IsInt, IsField], 0, function(n, F) return Codeword(List([1..n], i->0), n, One(F)); end); InstallOtherMethod(NullWord, "n", true, [IsInt], 0, function(n) return Codeword(List([1..n], i->0), n, One(GF(2))); end); InstallOtherMethod(NullWord, "Code", true, [IsCode], 0, function(C) local n; n := WordLength(C); return Codeword(List([1..n], i->0),n,One(LeftActingDomain(C))); end); ############################################################################# ## ## Zero() . . . . . . . . . . . . . . . . . zero codeword ## InstallOtherMethod(Zero, "method for codewords", true, [IsCodeword], 0, function(w) return Zero(VectorCodeword(w)[1]) * w; end); guava-3.6/lib/codemisc.gi0000644017361200001450000006100711026723452015225 0ustar tabbottcrontab############################################################################# ## #A codemisc.gi GUAVA library Reinald Baart #A Jasper Cramwinckel #A Erik Roijackers #A Eric Minkes ## ## This file contains miscellaneous functions for codes ## #H @(#)$Id: codemisc.gi,v 1.6 2003/02/12 03:49:16 gap Exp $ ## Revision.("guava/lib/codemisc_gi") := "@(#)$Id: codemisc.gi,v 1.6 2003/02/12 03:49:16 gap Exp $"; ######################################################################## ## #F CodeWeightEnumerator( ) ## ## Returns a polynomial over the rationals ## with degree not greater than the length of the code. ## The coefficient of x^i equals ## the number of codewords of weight i. ## InstallMethod(CodeWeightEnumerator, "unrestricted code", true, [IsCode], 0, function( code ) return LaurentPolynomialByCoefficients( ElementsFamily(FamilyObj(Rationals)), WeightDistribution( code ), 0 ); end); ######################################################################## ## #F CodeDistanceEnumerator( , ) ## ## Returns a polynomial over the rationals ## with degree not greater than the length of the code. ## The coefficient of x^i equals ## the number of codewords with distance i to . InstallMethod(CodeDistanceEnumerator, "unrestricted code, codeword", true, [IsCode, IsCodeword], 0, function( code, word ) word := Codeword( word, code ); return LaurentPolynomialByCoefficients( ElementsFamily(FamilyObj( Rationals )), DistancesDistribution( code, word ), 0 ); end); ######################################################################## ## #F CodeMacWilliamsTransform( ) ## ## Returns a polynomial with the weight ## distribution of the dual code as ## coefficients. ## InstallMethod(CodeMacWilliamsTransform, "unrestricted code", true, [IsCode], 0, function( code ) local weightdist, transform, size, n, x, i, j, tmp; n := WordLength( code ); # if dimension < n/2, or if non-linear code, # use weightdistribution of code, # else use weightdistribution of dual code if not IsLinearCode( code ) or Dimension( code ) < n / 2 then weightdist := WeightDistribution( code ); size := Size( code ); transform := List( [ 1 .. n+1 ], x -> 0 ); for j in [ 0 .. n ] do tmp := 0; for i in [ 0 .. n ] do tmp := tmp + weightdist[ i+1 ] * Krawtchouk( j, i, n, 2 ); od; transform[ j+1 ] := tmp / size; od; else transform := WeightDistribution( DualCode( code ) ); fi; return LaurentPolynomialByCoefficients( ElementsFamily(FamilyObj( Rationals )), transform, 0 ); end); ######################################################################## ## #F WeightVector( ) ## ## Returns the number of non-zeroes in a vector. InstallMethod(WeightVector, "method for vector", true, [IsVector], 0, function( vector ) local pos, number, fieldzero; number := 0; fieldzero := Zero( Field( vector ) ); for pos in [ 1 .. Length( vector ) ] do if vector[ pos ] <> fieldzero then number := number + 1; fi; od; return number; end); ######################################################################## ## #F RandomVector( [, [, ] ] ) ## InstallMethod(RandomVector, "length, weight, field", true, [IsInt, IsInt, IsField], 0, function(len, wt, field) local vec, coord, coordlist, elslist, i; if len <= 0 then Error( "RandomVector: length must be a positive integer" ); fi; if wt < -1 or wt > len then Error( "RandomVector: must be an integer in the range", " -1 .. ", len ); fi; vec := NullVector( len, field ); if wt > 0 then coordlist := [ 1 .. len ]; elslist := Difference( AsSSortedList( field ), [ Zero(field) ] ); # make wt elements of the vector non-zero, # choosing uniformly between the other field-elements for i in [ 1 .. wt ] do coord := Random( coordlist ); SubtractSet( coordlist, [ coord ] ); vec[ coord ] := Random( elslist ); od; # do nothing if w = 0 elif wt = -1 then # for each coordinate, choose uniformly from # all field elements, including zero elslist := AsSSortedList( field ); for i in [ 1 .. len ] do vec[ i ] := Random( elslist ); od; fi; return vec; end); InstallOtherMethod(RandomVector, "length, weight, fieldsize", true, [IsInt, IsInt, IsInt], 0, function(len, wt, q) return RandomVector(len, wt, GF(q)); end); InstallOtherMethod(RandomVector, "length, weight", true, [IsInt, IsInt], 0, function(len, wt) return RandomVector(len, wt, GF(2)); end); InstallOtherMethod(RandomVector, "length, field", true, [IsInt, IsField], 0, function(len, field) return RandomVector(len, -1, field); end); InstallOtherMethod(RandomVector, "length", true, [IsInt], 0, function(len) return RandomVector(len, -1, GF(2)); end); ######################################################################## ## #F IsSelfComplementaryCode( ) ## ## Return true if is a complementary code, false otherwise. ## A code is called complementary if for every v \in ## also 1 - v \in (where 1 is the all-one word). ## InstallMethod(IsSelfComplementaryCode, "method for unrestricted code", true, [IsCode], 0, function ( code ) local size, els, selfcompl, alloneword, newword; if LeftActingDomain( code ) <> GF(2) then Error("IsSelfComplementaryCode: is not a binary code" ); elif IsLinearCode( code ) then return IsSelfComplementaryCode( code ); else els := AsSSortedList( code ); selfcompl := true; alloneword := AllOneCodeword( WordLength( code ), GF(2) ); while Length( els ) > 0 and selfcompl = true do newword := alloneword - els[ 1 ]; if newword <> els[ 1 ] then if newword in els then els := Difference( els, [ newword ] ); else selfcompl := false; fi; els := Difference( els, [ els[ 1 ] ] ); fi; od; return selfcompl; fi; end); InstallMethod(IsSelfComplementaryCode, "method for linear code", true, [IsLinearCode], 0, function ( code ) if LeftActingDomain( code ) <> GF(2) then Error("IsSelfComplementaryCode: is not a binary code" ); else return( AllOneCodeword( WordLength( code ), GF(2) ) in code ); fi; end); ######################################################################## ## #F IsAffineCode( ) ## ## Return true if is affine, i.e. a linear code or ## a coset of a linear code, false otherwise. ## InstallMethod(IsAffineCode, "method for unrestricted code", true, [IsCode], 0, function ( code ) if IsLinearCode( code ) then return IsAffineCode( code ); elif NullWord( code ) in code then # code cannot be a coset code of a linear code return false; elif not ( Size( code ) in List( [ 0 .. WordLength( code ) ], x -> Characteristic( LeftActingDomain( code ) ) ^ x ) ) then # the code must have a "dimension" return false; else # subtract the first codeword from all codewords. # if the resulting code is linear, then the # original code is affine. return IsLinearCode( CosetCode( code, NullWord( code ) - CodewordNr( code, 1 ) ) ); fi; end); InstallTrueMethod(IsAffineCode, IsLinearCode); ######################################################################## ## #F IsAlmostAffineCode( ) ## ## Return true if is almost affine, false otherwise. ## A code is called almost affine if the size of any punctured ## code is equal to q^r for some integer r, where q is the ## size of the alphabet of the code. ## InstallMethod(IsAlmostAffineCode, "method for unrestricted code", true, [IsCode], 0, function( code ) local F, n, i, j, subcode, sizelist, coordlist, almostaffine; if IsAffineCode( code ) then # every affine code is also almost affine almostaffine := true; else # not affine almostaffine := true; F := LeftActingDomain( code ); # however, any code over GF(2) or GF(3) is affine # if it is almost affine. # so non-affine codes with q=2,3 are also not almost affine if Size( F ) = 2 or Size( F ) = 3 then almostaffine := false; fi; n := WordLength( code ); sizelist := List( [ 0 .. n ], x -> Characteristic( F ) ^ x ); # first check whether the code itself is of size q^r if not ( Size( code ) in sizelist ) then almostaffine := false; else # now check for all possible puncturings i := 1; while almostaffine and i < n do coordlist := List( Tuples( [ 1 .. n ], i ), x -> Difference( [ 1 .. n ], x ) ); j := 1; while almostaffine and j < Length( coordlist ) do subcode := PuncturedCode( code, coordlist[ j ] ); # one fault is enough ! if not Size( subcode ) in sizelist then almostaffine := false; fi; j := j + 1; od; i := i + 1; od; fi; fi; return almostaffine; end); InstallTrueMethod(IsAlmostAffineCode, IsAffineCode); ######################################################################## ## #F IsGriesmerCode( ) ## ## Return true if is a Griesmer code, i.e. if ## n = \sum_{i=0}^{k-1} d/(q^i), false otherwise. ## InstallMethod(IsGriesmerCode, "method for unrestricted code", true, [IsCode], 0, function( code ) if IsLinearCode( code ) then return IsGriesmerCode( code ); else Error( "IsGriesmerCode: must be a linear code" ); fi; end); InstallMethod(IsGriesmerCode, "method for linear code", true, [IsLinearCode], 0, function( code ) local n, k, d, q; n := WordLength( code ); k := Dimension( code ); d := MinimumDistance( code ); q := Size( LeftActingDomain( code ) ); return n = Sum( [ 0 .. k-1 ], x -> IntCeiling( d / q^x ) ); end); ######################################################################## ## #F CodeDensity( ) ## ## Return the density of , i.e. M*V_q(n,r)/(q^n). ## InstallMethod(CodeDensity, "method for unrestricted code", true, [IsCode], 0, function ( code ) local n, q, cr; cr := CoveringRadius( code ); # Linear codes with redundancy >= 20 can return an interval # for the Covering Radius, so this test is necessary. if not IsInt( cr ) then Error( "CodeDensity: the covering radius of is unknown" ); fi; n := WordLength( code ); q := Size( LeftActingDomain( code ) ); return Size( code ) * SphereContent( n, CoveringRadius( code ), q ) / q^n; end); ######################################################################## ## #F DecreaseMinimumDistanceUpperBound( , , ) ## ## Tries to compute the minimum distance of C. ## The algorithm is Leon's, see for more ## information his article. InstallMethod(DecreaseMinimumDistanceUpperBound, "method for unrestricted code, s, iteration", true, [IsCode, IsInt, IsInt], 0, function(C, s, iteration) if IsLinearCode(C) then return DecreaseMinimumDistanceUpperBound(C, s, iteration); else Error("DecreaseMinimumDIstanceUB: must be a linear code"); fi; end); InstallMethod(DecreaseMinimumDistanceUpperBound, "method for linear code, s, iteration", true, [IsLinearCode, IsInt, IsInt], 0, function ( C, s, iteration ) # is the code to compute the min. dist. for # is the parameter to help find words with # small weight # is number of iterations to perform local trials, # the number of trials so far n, k, # some parameters of the code C genmat, # the generator matrix of C d, # the minimum distance so far cont, # have we computed enough trials ? N, # the set { 1, ..., n } S, # a random s-subset of N h, i, j, # some counters sigma, # permutation, mapping of N, mapping S on {1,...,s} tau, # permutation, for eliminating first s columns of Emat Emat, # genmat ^ sigma Dmat, # (k-e,n-s) right lower submatrix of Emat e, # rank of k * s submatrix of Emat nullrow, # row of zeroes, for appending to Emat res, # result from PutSemiStandardForm w, # runs through all words spanned by Dmat t, # weight of the current codeword v, # word with current lowest weight Bmat, # (e, n-s) right upper submatrix of Emat Bsupp, # supports of differences of rows of Bmat Bweight, # weights of rows of Bmat sup1, sup2,# temporary variables holding supports Znonempty, # true if e < s, false otherwise (indicates whether # Zmat is a real matrix or not Zmat, # ( s-e, e ) middle upper submatrix of Emat Zweight, # weights of differences of rows of Zmat wsupp, # weight of the current codeword w of D ij1, # 0: i<>1 and j<>1 1: i=1 xor j=1 2: i=1 and j=1 nullw, # nullword of length s, begin of w PutSemiStandardForm, # local function for partial Gaussian # elimination sups, # the supports of the elements of B found; # becomes true if a better minimum distance is # found # check the arguments if s < 1 or s > Dimension( C ) then Error( "DecreaseMinimumDistanceUB: must lie between 1 and the ", "dimension of ." ); fi; if iteration < 1 then Error( "DecreaseMinimumDistanceLB: must be at least zero." ); fi; # the function PutSemiStandardForm is local ########################################################################### ## #F PutSemiStandardForm( , ) ## ## Put first s coordinates of mat in standard form. ## Return e as the rank of the s x s left upper ## matrix. The coordinates s+1, ..., n are not permuted. ## ## This function is based on PutStandardForm. ## ## (maybe it's better to make this function local ## in DecreaseMinimumDistanceUpperBound) ## PutSemiStandardForm := function ( mat, s ) local k, n, zero, stop, found, g, h, i, j, row, e, tau; k := Length(mat); # number of rows: dimension n := Length(mat[1]); # number of columns: wordlength zero := Zero(GF(2)); stop := false; e := 0; tau := ( ); for j in [ 1..s ] do if not stop then if mat[j][j] = zero then # start looking for another pivot i := j; found := false; while ( i <= s ) and not found do h := j; while ( h <= k ) and not found do if mat[h][i] <> zero then found := true; else h := h + 1; fi; # if mat[h][i] <> zero od; # while ( h <= k ) and not found if not found then i := i + 1; fi; # if not found od; # while ( i <= s ) and not found if not found then stop := true; else # pivot found at position (h,i) # increase subrank e := e + 1; # permutate the matrix so that (h,i) <-> (j,j) if h <> j then row := mat[h]; mat[h] := mat[j]; mat[j] := row; fi; # if h <> j if i <> j then tau := tau * (i,j); for g in [ 1 .. k ] do mat[g] := Permuted( mat[g], (i,j) ); od; # for g in [ 1..k ] fi; # if i <> j fi; # if not found else e := e + 1; fi; # if mat[j][j] = zero if not stop then for i in [ 1..k ] do if i <> j then if mat[i][j] <> zero then mat[i] := mat[i] + mat[j]; fi; # if mat[i][j] <> zero fi; # if i <> j od; # for i in [ 1..k ] fi; # if not stop fi; # if not stop od; # for j in [ 1..s ] do return [ e, tau ]; end; n := WordLength( C ); k := Dimension( C ); genmat := GeneratorMat( C ); # step 1. initialisation trials := 0; d := n; cont := true; found := false; while cont do # step 2. trials := trials + 1; InfoMinimumDistance( "Trial nr. ", trials, " distance: ", d, "\n" ); # step 3. choose a random s-elements subset of N N := [ 1 .. WordLength( C ) ]; S := [ ]; for i in [ 1 .. s ] do S[ i ] := Random( N ); # pick a random element from N RemoveSet( N, S[ i ] ); # and remove it from N od; Sort( S ); # not really necessary, but # it doesn't hurt either # step 4. choose a permutation sigma of N, # mapping S onto { 1, ..., s } Append( S, N ); sigma := PermList( S ) ^ (-1); # step 5. Emat := genmat^sigma (genmat is the generator matrix C) Emat := [ ]; for i in [ 1 .. k ] do Emat[ i ] := Permuted( genmat[ i ], sigma ); od; # step 6. apply elementary row operations to E # and perhaps a permutation tau so that # we get the following form: # [ I | Z | B ] # [ 0 | 0 | D ] # where I is the e * e identity matrix, # e is the rank of the k * s left submatrix of E # the permutation tau leaves { s+1, ..., n } fixed InfoMinimumDistance( "Gaussian elimination of E ... \n"); res := PutSemiStandardForm( Emat, s ); e := res[ 1 ]; # rank (in most cases equal to s) tau := res[ 2 ]; # permutation of { 1, ..., s } # append null-row to Emat (at front) nullrow := NullMat( 1, n, GF(2) ); Append( nullrow, Emat ); Emat := nullrow; InfoMinimumDistance( "Gaussian elimination of E ... done. \n" ); # retrieve Dmat from Emat Dmat := [ ]; for i in [ e + 1 .. k ] do Dmat[ i - e ] := List( [ s+1 .. n ], x -> Emat[ i+1 ][ x ] ); od; # retrieve Bmat from Emat # we only need the support of the differences of the # rows of B Bmat := [ ]; Bmat[ 1 ] := NullVector( n-s, GF(2) ); for j in [ 2 .. e+1 ] do Bmat[ j ] := List( [ s+1 .. n ], x -> Emat[ j ][ x ] ); od; InfoMinimumDistance( "Computing supports of B ... \n" ); sups := List( [ 1 .. e+1 ], x -> Support( Codeword( Bmat[ x ] ) ) ); # compute supports of differences of rows of Bmat # and the weights of these supports # do this once every trial, instead of for each codeword, # to save time Bsupp := List( [ 1 .. e ], x -> [ ] ); Bweight := List( [ 1 .. e ], x -> [ ] ); for i in [ 1 .. e ] do sup1 := sups[ i ]; # Bsupp[ i ] := List( [ i + 1 - KroneckerDelta( i, 1 ) .. e+1 ], # x -> Difference( Union( sup1, sups[ x ] ), # Intersection( sup1, sups[ x ] ) ) ); for j in [ i + 1 - KroneckerDelta( i, 1 ) .. e+1 ] do sup2 := sups[ j ]; Bsupp[ i ][ j ] := Difference( Union( sup1, sup2 ), Intersection( sup1, sup2 ) ); Bweight[ i ][ j ] := Length( Bsupp[ i ][ j ] ); od; od; InfoMinimumDistance( "Computing supports of B ... done. \n" ); # retrieve Zmat from Emat # in this case we only need the weights of the supports of # the differences of the rows of Zmat # because we don't have to add them to codewords if e < s then InfoMinimumDistance( "Computing weights of Z ... \n" ); Znonempty := true; Zmat := List( [ 1 .. e ], x -> [ ] ); Zmat[ 1 ] := NullVector( s-e, GF(2) ); for i in [ 2 .. e+1 ] do Zmat[ i ] := List( [ e+1 .. s ], x -> Emat[ i ][ x ] ); od; Zweight := List( [ 1 ..e ], x -> [ ] ); for i in [ 1 .. e ] do for j in [ i + 1 - KroneckerDelta( i, 1 ) .. e+1 ] do Zweight[ i ][ j ] := WeightCodeword( Codeword( Zmat[ i ] + Zmat[ j ] ) ); od; od; InfoMinimumDistance( "Computing weights of Z ... done. \n" ); else Znonempty := false; fi; # step 7. for each w in (n-s, k-e) code spanned by D for w in AsSSortedList( GeneratorMatCode( Dmat, GF(2) ) ) do wsupp := Support( w ); # step 8. for i in [ 1 .. e ] do # step 9. for j in [ i + 1 - KroneckerDelta( i, 1 ) .. e+1 ] do ij1 := KroneckerDelta( i, 1 ) + KroneckerDelta( j, 1 ); # step 10. if Znonempty then t := Zweight[ i ][ j ]; else t := 0; fi; # step 11. if t <= ij1 then # step 12. t := t + Bweight[ i ][ j ] + Length( wsupp ) - 2 * Length( Intersection( Bsupp[ i ][ j ], wsupp ) ); t := t + ( 2 - ij1 ); if 0 < t and t < d then found := true; # step 13. d := t; C!.upperBoundMinimumDistance := Minimum( UpperBoundMinimumDistance( C ), t ); # step 14. nullw := NullVector( s, GF(2) ); Append( nullw, VectorCodeword( w ) ); v := Emat[ i ] + Emat[ j ] + nullw; v := Permuted( v, tau ^ (-1) ); v := Permuted( v, sigma ^ (-1) ); fi; fi; od; od; od; if iteration <= trials then cont := false; fi; od; if found then return rec( mindist := d, word := v ); fi; end); guava-3.6/lib/tblgener.gi0000644017361200001450000004004211026723452015235 0ustar tabbottcrontab############################################################################# ## #A tblgener.gi GUAVA library Reinald Baart #A Jasper Cramwinckel #A Erik Roijackers #A Eric Minkes ## ## Table generation ## #H @(#)$Id: tblgener.gi,v 1.2 2003/02/12 03:49:21 gap Exp $ ## Revision.("guava/lib/tblgener_gi") := "@(#)$Id: tblgener.gi,v 1.2 2003/02/12 03:49:21 gap Exp $"; ############################################################################# ## #F CreateBoundsTable( , [, ] ) . . constructs table of bounds ## InstallMethod(CreateBoundsTable, "Sz, fieldsize, info", true, [IsInt, IsInt, IsBool], 0, function(Sz, q, info) local RulesList, LBT, UBT, FillPoints, NumberUnchanged, RuleNumber, file, WriteToFile, InitialTable, help, temp; help := Concatenation("\n##\n", "## Each entry [n][k] of one of the tables below contains\n", "## a bound (the first table contains lowerbounds, the \n", "## second upperbounds) for a code with wordlength n and \n", "## dimension k. Each entry contains one of the following\n", "## items: \n", "## \n", "## FOR LOWER- AND UPPERBOUNDSTABLE \n", "## [ 0, , ] from Brouwers table \n", "## \n", "## FOR LOWERBOUNDSTABLE \n", "## empty k= 0, 1, n or d= 2 or (k= 2 and q= 2) \n", "## 1 shortening a [ n + 1, k + 1 ] code \n", "## 2 puncturing a [ n + 1, k ] code \n", "## 3 extending a [ n - 1, k ] code \n", "## [ 4,

] constr. B, of a [ n+dd, k+dd-1, d ] code\n", "## [ 5, ] an UUV-construction with a [ n / 2, k1 ]\n", "## and a [ n / 2, k - k1 ] code \n", "## [ 6, ] concatenation of a [ n1, k ] and a \n", "## [ n - n1, k ] code \n", "## [ 7, ] taking the residue of a [ n1, k + 1 ] code\n", "## \n", "## FOR UPPERBOUNDSTABLE \n", "## empty Griesmer bound \n", "## 11 shortening a [ n + 1, k + 1 ] code \n", "## 12 puncturing a [ n + 1, k ] code \n", "## 13 extending a [ n - 1, k ] code \n", "## [ 14,
] constr. B, with dd = dual distance \n"); InitialTable := function(to, lb) local n, k, d, i, j, sum, BT; BT := List([1..to], i-> [[i]]); #RepetitionCodes for k in [2 .. to] do BT[k][k] := [1]; #WholeSpaceCode for n in [k+1 .. to] do if lb then BT[n][k] := [2]; else #upperbound # Calculate Griesmer bound (for linear codes only) # n >= Sum([0..k-1],i->DivUp(d,q^i)); d := BT[n-1][k][1] + 1; sum := 0; i := 1; j := 1; while j <= k do # Calculate one term sum := sum + QuoInt(d, i) + SignInt(d mod i); i := i * q; if i >= d then # the rest will be one sum := sum + k - j; j := k; fi; j := j + 1; od; if sum <= n then BT[n][k] := [d]; else BT[n][k] := [d - 1]; fi; fi; od; if q = 2 and k > 2 then #CordaroWagnerCode BT[k][2] := [ 2*Int( (k+1) / 3 ) - Int(k mod 3 / 2 ) ]; fi; od; return BT; end; FillPoints := function( BT, lb ) local pt, initialfile; GUAVA_TEMP_VAR := [false]; if lb then initialfile := Filename(LOADED_PACKAGES.guava, Concatenation("tbl/codes", String(q),".g") ); else initialfile := Filename(LOADED_PACKAGES.guava, Concatenation("tbl/upperbd", String(q),".g") ); fi; if initialfile = fail then Error("no table around for GF(",String(q),")"); fi; if GUAVA_TEMP_VAR[1] = false then GUAVA_TEMP_VAR := GUAVA_TEMP_VAR{[ 2 .. Length(GUAVA_TEMP_VAR) ]}; fi; for pt in GUAVA_TEMP_VAR do if (pt[1] <= Sz) and (pt[2] <= pt[1]) and ((lb and pt[3] > BT[pt[1]][pt[2]][1]) or ((not lb) and pt[3] < BT[pt[1]][pt[2]][1])) then BT[pt[1]][pt[2]] := [pt[3], [ 0, pt[3], pt[4] ] ]; fi; od; return BT; end; WriteToFile := function(BT) local list, k, n; Print(Concatenation( "][", String(q), "] := [\n#V n = 1\n[ ]" ) ); for n in [2 .. Sz] do list := []; for k in [1 .. n] do if Length( BT[n][k] ) = 2 then list[k] := BT[n][k][2]; fi; od; Print(Concatenation(",\n#V n = ",String(n),"\n"), list); od; Print("];"); end; #F begin of rules for lowerbound RulesList := []; # If a rule is added which is only valid for a special q (like q=2) the # check for q should be around the Add(RulesList, function()....) : # if q=2 then Add(RulesList, function() .... end); fi; # Extending Add(RulesList, function() local n, k, number; number := 0; for n in [1..Sz-1] do for k in [1..n] do if q=2 and IsOddInt(LBT[n][k][1]) then if LBT[n+1][k][1] < LBT[n][k][1] + 1 then LBT[n+1][k] := [LBT[n][k][1] + 1, 3 ]; number := number + 1; fi; else if LBT[n+1][k][1] < LBT[n][k][1] then LBT[n+1][k] := [LBT[n][k][1], 3 ]; number := number + 1; fi; fi; od; od; if info then Print(number," changes with Extending\n" ); fi; return number > 0; end); # UUV Construction Add(RulesList, function() local n, k1, k2, d, d1, number; number := 0; for n in [ 3 .. Int( Sz / 2 ) ] do for k1 in [ 1 .. n-2 ] do # V is a ( n, k1, d1 )-code d1 := LBT[n][k1][1]; for k2 in [ k1+1 .. n-1 ] do # U is a ( n, k2, d2 )-code d := 2 * LBT[n][k2][1]; if d1 < d then d := d1; fi; #faster then Minimum(); if LBT[2 * n][k1 + k2][1] < d then LBT[2 * n][k1 + k2] := [d, [5, k2] ]; number := number + 1; fi; od; od; od; if info then Print(number," changes with UUV\n" ); fi; return (number > 0); end); # Concatenation Add(RulesList, function() local n1, n2, k, d, number; number := 0; for k in [ 2 .. Sz ] do for n1 in [ k .. Int( Sz / 2 ) ] do for n2 in [ n1 .. Sz - n1 ] do d := LBT[n1][k][1] + LBT[n2][k][1]; if LBT[n1 + n2][k][1] < d then LBT[n1 + n2][k] := [d, [6, n1 ] ]; number := number + 1; fi; od; od; od; if info then Print(number," changes with Concatenation\n" ); fi; return number > 0; end); # Puncturing Add( RulesList, function() local n, k, number; number := 0; for n in Reversed([2..Sz]) do for k in [1..n-1] do if LBT[n-1][k][1] < LBT[n][k][1] - 1 then LBT[n-1][k] := [LBT[n][k][1] - 1, 2 ]; number := number + 1; fi; od; od; if info then Print(number," changes with Puncturing\n" ); fi; return (number > 0); end); # Shortening Add(RulesList, function() local n, k, number; number := 0; for n in Reversed([5 .. Sz]) do for k in [3 .. n-2] do if LBT[n-1][k-1][1] < LBT[n][k][1] then LBT[n-1][k-1] := [LBT[n][k][1], 1 ]; number := number + 1; fi; od; od; if info then Print(number," changes with Shortening\n" ); fi; return (number > 0); end); # Taking the residue Add(RulesList, function() local n, k, temp, d, dnew, number; number := 0; for n in Reversed([ 4 .. Sz ]) do temp := LBT[n]; for k in [ 3 .. n - 1 ] do d := temp[k][1]; dnew := QuoInt(d,q)+SignInt(d mod q);# = (d/q) rounded up if ( n - d > k ) and (LBT[ n - d ][ k - 1 ][1] < dnew) then LBT[ n - d ][ k - 1 ] := [ dnew, [ 7, n ] ]; number := number + 1; fi; od; od; if info then Print(number," changes with Residue\n" ); fi; return number > 0; end); # Construction B: M&S, Ch. 18, P. 9, Pg. 592 Add(RulesList, function() local n, k, dd, number; number := 0; for n in Reversed([2..Sz]) do for k in Reversed([1..n-1]) do dd := UBT[n][n-k][1]; # upper bound for dual distance if n-dd > 0 and k-dd+1 > 0 and LBT[n-dd][k-dd+1][1] < LBT[n][k][1] then LBT[n-dd][k-dd+1] := [ LBT[n][k][1], [4, dd] ]; number := number + 1; fi; od; od; if info then Print(number," changes with Construction B\n" ); fi; return number > 0; end); #F begin of rules for lowerbound (not working) # # ConversionFieldCode (it appears that this rule is not needed) # if q = 2 then # temp := BT4[1]; # Add(RulesList, # function() # local n, k, d, number; # number := 0; # for n in [ 2 .. Int(Sz/2) ] do # for k in [ 1 .. n - 1 ] do # d := temp[n][k][1]; # if LBT[2*n][2*k][1] < d then # LBT[2*n][2*k] := [ d , 8 ]; # number := number + 1; # fi; # od; # od; # if info then Print(number," changes with ConversionField\n" ); fi; # return number > 0; # end); # fi; #F begin of rules for upperbound # Shortening Add(RulesList, function() local n, k, number; number := 0; for n in [ 2 .. Sz-1 ] do for k in [ 1 .. n - 1 ] do if UBT[ n + 1 ][ k + 1 ][ 1 ] > UBT[ n ][ k ][ 1 ] then UBT[ n + 1 ][ k + 1 ] := [ UBT[ n ][ k ][ 1 ], 11 ]; number := number + 1; fi; od; od; if info then Print(number," changes with Shortening\n" ); fi; return number > 0; end); # Construction B Add(RulesList, function() local n, k, dd, s, number; number := 0; for n in [2..Sz] do for k in [1..n-1] do for s in [1..Sz-n-1] do if s >= UBT[n+s][n-k+1][1] and UBT[n+s][k+s-1][1] > UBT[n][k][1] then UBT[n+s][k+s-1] := [ UBT[n][k][1], [14, s] ]; number := number + 1; fi; od; od; od; if info then Print(number," changes with Construction B\n" ); fi; return number > 0; end); # Extending Add(RulesList, function() local n, k, number; number := 0; for n in Reversed([2..Sz]) do for k in [1..n-2] do if q=2 and IsOddInt(UBT[n][k][1]) then if UBT[n-1][k][1] > UBT[n][k][1]-1 then UBT[n-1][k] := [ UBT[n][k][1]-1, 13 ]; number := number + 1; fi; else if UBT[n-1][k][1] > UBT[n][k][1] then UBT[n-1][k] := [ UBT[n][k][1], 13 ]; number := number + 1; fi; fi; od; od; if info then Print(number," changes with Extending\n" ); fi; return number > 0; end); # Puncturing Add(RulesList, function() local n, k, number; number := 0; for n in [ 2 .. Sz-1 ] do for k in [ 2 .. n - 1 ] do if UBT[ n + 1 ][ k ][ 1 ] > UBT[ n ][ k ][ 1 ] + 1 then UBT[ n + 1 ][ k ] := [ UBT[ n ][ k ][ 1 ] + 1, 12 ]; number := number + 1; fi; od; od; if info then Print(number," changes with Puncturing\n" ); fi; return number > 0; end); #F begin of rules for upperbound (not working) # # # Taking the residue # Add(RulesList, function() # local n, k; # for n in [ 2 .. Sz-1 ] do # for k in [ 2 .. n - 1 ] do # if UBT[ n + q * UBT[ n ][ k ][ 1 ] ][ k + 1 ] > # UBT[ n ][ k ][ 1 ] * q then # UBT[ n + q * UBT[ n ] [ k ][ 1 ] ][ k + 1 ] := # [UBT[ n ][ k ][ 1 ] * q, [7, n + q * UBT[n][k][1]]]; # number := number + 1; # fi; # od; # od; # end); #F begin of body LBT := InitialTable( Sz, true ); LBT := FillPoints ( LBT, true ); UBT := InitialTable( Sz, false ); UBT := FillPoints ( UBT, false ); NumberUnchanged := 0; RuleNumber := 1; repeat if RulesList[RuleNumber]() then NumberUnchanged := 0; else NumberUnchanged := NumberUnchanged + 1; fi; if RuleNumber = Length(RulesList) then RuleNumber := 1; if info then Print("\n"); fi; else RuleNumber := RuleNumber + 1; fi; until NumberUnchanged >= Length(RulesList); # This way of saving the tables to a file make use of a nasty trick, # used to speed up things heavily ##LR - This trick is not yet working in GAP4. Until it does, ## the tables will not be printed to the file. if info then Print("\nSaving the bound tables...\n"); fi; file := Filename(LOADED_PACKAGES.guava, Concatenation("tbl/bdtable",String(q),".g") ); PrintTo(file, "#A BOUNDS FOR q = ", String(q), help, "\n\nGUAVA_BOUNDS_TABLE[1", WriteToFile(LBT), "\n\nGUAVA_BOUNDS_TABLE[2", WriteToFile(UBT) ); return [LBT,UBT]; #just used for testing the program end); InstallOtherMethod(CreateBoundsTable, "Sz, fieldsize", true, [IsInt, IsInt], 0, function(Sz, q) return CreateBoundsTable(Sz, q, false); end); InstallOtherMethod(CreateBoundsTable, "Sz, field, info", true, [IsInt, IsField, IsBool], 0, function(Sz, F, info) return CreateBoundsTable(Sz, Size(F), info); end); InstallOtherMethod(CreateBoundsTable, "Sz, field", true, [IsInt, IsField], 0, function(Sz, F) return CreateBoundsTable(Sz, Size(F), false); end); guava-3.6/lib/codeman.gd0000644017361200001450000002120511026723452015034 0ustar tabbottcrontab############################################################################# ## #A codeman.gd GUAVA library Reinald Baart #A &Jasper Cramwinckel #A &Erik Roijackers ## ## This file contains functions for manipulating codes ## #H @(#)$Id: codeman.gd,v 1.3 2003/02/12 03:49:16 gap Exp $ ## Revision.("guava/lib/codeman_gd") := "@(#)$Id: codeman.gd,v 1.3 2003/02/12 03:49:16 gap Exp $"; ############################################################################# ## #F DualCode( ) . . . . . . . . . . . . . . . . . . . . dual code of ## DeclareOperation("DualCode", [IsCode]); ############################################################################# ## #F AugmentedCode( [, ] ) . . . add words to generator matrix of ## DeclareOperation("AugmentedCode", [IsCode, IsObject]); ############################################################################# ## #F EvenWeightSubcode( ) . . . code of all even-weight codewords of ## DeclareOperation("EvenWeightSubcode", [IsCode]); ############################################################################# ## #F ConstantWeightSubcode( [, ] ) . all words of with weight ## DeclareOperation("ConstantWeightSubcode", [IsCode, IsInt]); ############################################################################# ## #F ExtendedCode( [, ] ) . . . . . code with added parity check symbol ## DeclareOperation("ExtendedCode", [IsCode, IsInt]); ############################################################################# ## #F ShortenedCode( [, ] ) . . . . . . . . . . . . . . shortened code ## DeclareOperation("ShortenedCode", [IsCode, IsList]); ############################################################################# ## #F PuncturedCode( [, ] ) . . . . . . . . . . . . . punctured code ## ## PuncturedCode(C [, remlist]) punctures a code by leaving out the ## coordinates given in list remlist. If remlist is omitted, then ## the last coordinate will be removed. ## DeclareOperation("PuncturedCode", [IsCode, IsList]); ############################################################################# ## #F ExpurgatedCode( , ) . . . . . removes codewords in from code ## ## The usual way of expurgating a code is removing all words of odd weight. ## DeclareOperation("ExpurgatedCode", [IsCode, IsList]); ############################################################################# ## #F AddedElementsCode( , ) . . . . . . . . . . adds words in list ## DeclareOperation("AddedElementsCode", [IsCode, IsList]); ############################################################################# ## #F RemovedElementsCode( , ) . . . . . . . . removes words in list ## DeclareOperation("RemovedElementsCode", [IsCode, IsList]); ############################################################################# ## #F LengthenedCode( [, ] ) . . . . . . . . . . . . . . lengthens code ## DeclareOperation("LengthenedCode", [IsCode, IsInt]); ############################################################################# ## #F ResidueCode( [, ] ) . . takes residue of with respect to ## ## If w is omitted, a word from C of minimal weight is used ## DeclareOperation("ResidueCode", [IsCode, IsCodeword]); ############################################################################# ## #F ConstructionBCode( ) . . . . . . . . . . . code from construction B ## ## Construction B (See M&S, Ch. 18, P. 9) assumes that the check matrix has ## a first row of weight d' (the dual distance of C). The new code has a ## check matrix equal to this matrix, but with columns removed where the ## first row is 1. ## DeclareOperation("ConstructionBCode", [IsCode]); ############################################################################# ## #F ConstructionB2Code( ) . . . . . . . . . . code from construction B2 ## ## Construction B2 is mixtures of shortening and puncturing. Given an ## [n,k,d] code which has dual code of minimum distance s, we obtain ## an [n-s, k-s+2j+1, d-2j] code for each j with 2j+1 < s. ## ## For more details, see A. Brouwer (1998), "Bounds on the size of linear ## codes,", in Handbook of Coding Theory, V. S. Pless and W. C. Huffmann ## ed., pp. 311 ## ## added by CJ, April 2006 ## DeclareOperation("ConstructionB2Code", [IsCode]); ############################################################################# ## #F SubCode( , [ ] ) . . . . . . . . . . . . . . . . . . subcode of C ## ## Given C, an [n,k,d] code, return a subcode of C with dimension k-s. ## If s is not given, it is assumed 1. ## ## added by CJ, April 2006 DeclareOperation("SubCode", [IsCode, IsInt]); ############################################################################# ## #F PermutedCode( ,

) . . . . . . . permutes coordinates of codewords ## DeclareOperation("PermutedCode", [IsCode, IsPerm]); ############################################################################# ## #F StandardFormCode( ) . . . . . . . . . . . . standard form of code ## DeclareOperation("StandardFormCode", [IsCode]); ############################################################################# ## #F ConversionFieldCode( ) . . . . . converts code from GF(q^m) to GF(q) ## DeclareOperation("ConversionFieldCode", [IsCode]); ############################################################################# ## #F CosetCode( , ) . . . . . . . . . . . . . . . . . . . coset of ## DeclareOperation("CosetCode", [IsCode, IsCodeword]); ############################################################################# ## #F DirectSumCode( , ) . . . . . . . . . . . . . . . . . direct sum ## ## DirectSumCode(C1, C2) creates a (n1 + n2 , M1 M2 , min{d1 , d2} ) code ## by adding each codeword of the second code to all the codewords of the ## first code. ## DeclareOperation("DirectSumCode", [IsCode, IsCode]); ############################################################################# ## #F ConcatenationCode( , ) . . . . . concatenation of and ## DeclareOperation("ConcatenationCode", [IsCode, IsCode]); ############################################################################# ## #F DirectProductCode( , ) . . . . . . . . . . . . . direct product ## ## DirectProductCode constructs a new code from the direct product of two ## codes by taking the Kronecker product of the two generator matrices ## DeclareOperation("DirectProductCode", [IsCode, IsCode]); ############################################################################# ## #F UUVCode( , ) . . . . . . . . . . . . . . . u | u+v construction ## ## Uuvcode(C1, C2) # creates a ( 2n , M1 M2 , d = min{2 d1 , d2} ) code ## with codewords (u | u + v) for all u in C1 and v in C2 ## DeclareOperation("UUVCode", [IsCode, IsCode]); ############################################################################# ## #F UnionCode( , ) . . . . . . . . . . . . . union of and ## DeclareOperation("UnionCode", [IsCode, IsCode]); ############################################################################# ## #F IntersectionCode( , ) . . . . . . intersection of and ## DeclareOperation("IntersectionCode", [IsCode, IsCode]); ############################################################################# ## #F ConstructionXCode( , ) ... code from Construction X ## ## DeclareOperation("ConstructionXCode", [IsList, IsList]); ############################################################################# ## #F ConstructionXXCode( , , , , ) ... code from Construction XX ## ## DeclareOperation("ConstructionXXCode", [IsCode, IsCode, IsCode, IsCode, IsCode]); ######################################################################### ## #F BZCode( , ) . . . . . . . . . . Blokh Zyablov concatenated code ## ## Given a set of outer codes O_i=[N, K_i, D_i] over GF(q^e_i), where ## i=1,2,...,t and a set of inner codes I_i=[n, k_i, d_i] over GF(q), ## BZCode returns a multilevel concatenated code with parameter ## [ n*N, e_1*K_1 + e_2*K_2 + ... + e_t*K_t, min(d_i * D_i)] over GF(q). ## ## Note that the set inner codes must satisfy chain condition, i.e. ## I_1=[n,k_1,d_1] < I_2=[n,k_2,d_2] < ... < I_t=[n,k_t,d_t] where ## 0=k_0 < k_1 < k_2 < ... < k_t. ## ## The dimensions of the inner code must satisfy the condition ## e_i = k_i - k_{i-1}, where GF(q^e_i) is the field of the ith ## outer code. ## DeclareOperation("BZCode", [IsList, IsList]); DeclareOperation("BZCodeNC", [IsList, IsList]); guava-3.6/lib/codeman.gi0000644017361200001450000022536211026723452015053 0ustar tabbottcrontab############################################################################ ## #A codeman.gi GUAVA library Reinald Baart #A &Jasper Cramwinckel #A &Erik Roijackers ## ## This file contains functions for manipulating codes ## #H @(#)$Id: codeman.gi,v 1.5 2003/02/12 03:49:16 gap Exp $ ## ## ConstantWeightSubcode revised 10-23-2004 ## ## added 12-207 (CJ): ConstructionXCode, ConstructionXXCode, BZCode functions ## Revision.("guava/lib/codeman_gi") := "@(#)$Id: codeman.gi,v 1.5 2003/02/12 03:49:16 gap Exp $"; ############################################################################# ## #F DualCode( ) . . . . . . . . . . . . . . . . . . . . dual code of ## InstallMethod(DualCode, "generic method for codes", true, [IsCode], 0, function(C) local Cnew; if IsCyclicCode(C) or IsLinearCode(C) then return DualCode(C); else Cnew := CheckMatCode(BaseMat(VectorCodeword(AsSSortedList(C))), "dual code", LeftActingDomain(C)); Cnew!.history := History(C); return(Cnew); fi; end); InstallMethod(DualCode, "method for linear codes", true, [IsLinearCode], 0, function(C) local C1, Pr, n, newwd, wd, oldrow, newrow, i, j, q; if IsCyclicCode(C) then return DualCode(C); elif HasGeneratorMat(C) then C1 := CheckMatCode(GeneratorMat(C), "dual code", LeftActingDomain(C)); elif HasCheckMat(C) then C1 := GeneratorMatCode(CheckMat(C), "dual code", LeftActingDomain(C)); else Error("No GeneratorMat or CheckMat for C"); fi; if HasWeightDistribution(C) then n := WordLength(C); wd := WeightDistribution(C); q := Size(LeftActingDomain(C)) - 1; newwd := [Sum(wd)]; oldrow := List([1..n+1],i->1); newrow := []; for i in [2..n+1] do newrow[1] := Binomial(n, i-1) * q^(i-1); for j in [2..n+1] do newrow[j] := newrow[j-1] - q * oldrow[j] - oldrow[j-1]; od; newwd[i] := newrow * wd; oldrow := ShallowCopy(newrow); od; SetWeightDistribution(C1, newwd / ((q+1) ^ Dimension(C)) ); Pr := PositionProperty(WeightDistribution(C1){[2..n+1]}, i-> i <> 0); if Pr = false then Pr := n; fi; C1!.lowerBoundMinimumDistance := Pr; C1!.upperBoundMinimumDistance := Pr; fi; C1!.history := History(C); return C1; end); InstallMethod(DualCode, "method for self dual codes", true,[IsSelfDualCode], 0, function(C) return ShallowCopy(C); end); InstallMethod(DualCode, "method for cyclic codes", true, [IsCyclicCode], 0, function(C) local C1, r, n, Pr, wd, q, newwd, oldrow, newrow, i, j; if HasGeneratorPol(C) then r := ReciprocalPolynomial(GeneratorPol(C),Redundancy(C)); r := r/LeadingCoefficient(r); C1 := CheckPolCode(r, WordLength(C), "dual code", LeftActingDomain(C)); elif HasCheckPol(C) then r := ReciprocalPolynomial(CheckPol(C),Dimension(C)); r := r/LeadingCoefficient(r); C1 := GeneratorPolCode(r, WordLength(C), "dual code", LeftActingDomain(C)); else Error("No GeneratorPol or CheckPol for C"); fi; if HasWeightDistribution(C) then n := WordLength(C); wd := WeightDistribution(C); q := Size(LeftActingDomain(C)) - 1; newwd := [Sum(wd)]; oldrow := List([1..n+1], i->1); newrow := []; for i in [2..n+1] do newrow[1] := Binomial(n, i-1) * q^(i-1); for j in [2..n+1] do newrow[j] := newrow[j-1] - q * oldrow[j] - oldrow[j-1]; od; newwd[i] := newrow * wd; oldrow := ShallowCopy(newrow); od; SetWeightDistribution(C1, newwd / ((q+1) ^ Dimension(C))); Pr := PositionProperty(WeightDistribution(C1){[2..n+1]}, i-> i <> 0); if Pr = false then Pr := n; fi; C1!.lowerBoundMinimumDistance := Pr; C1!.upperBoundMinimumDistance := Pr; fi; C1!.history := History(C); return C1; end); ############################################################################# ## #F AugmentedCode( [, ] ) . . . add words to generator matrix of ## InstallMethod(AugmentedCode, "unrestricted code and codeword list/object", true, [IsCode, IsObject], 0, function (C, L) if IsLinearCode(C) then return AugmentedCode(C, L); else Error("argument must be a linear code"); fi; end); InstallOtherMethod(AugmentedCode, "unrestricted code", true, [IsCode], 0, function(C) return AugmentedCode(C, NullMat(1, WordLength(C), LeftActingDomain(C)) + One(LeftActingDomain(C))); end); InstallMethod(AugmentedCode, "linear code and codeword object/list", true, [IsCode, IsObject], 0, function (C, L) local Cnew; L := VectorCodeword(Codeword(L, C) ); if not IsList(L[1]) then L := [L]; else L := Set(L); fi; Cnew := GeneratorMatCode(BaseMat(Concatenation(GeneratorMat(C),L)), Concatenation("code, augmented with ", String(Length(L)), " word(s)"), LeftActingDomain(C)); if Length(GeneratorMat(Cnew)) > Dimension(C) then Cnew!.upperBoundMinimumDistance := Minimum( UpperBoundMinimumDistance(C), Minimum(List(L, l-> Weight(Codeword(l))))); Cnew!.history := History(C); return Cnew; else return ShallowCopy(C); fi; end); ############################################################################# ## #F EvenWeightSubcode( ) . . . code of all even-weight codewords of ## InstallMethod(EvenWeightSubcode, "method for unrestricted codes", true, [IsCode], 0, function(Cold) local C, n, Els, E, d, i, s, q, wd; if IsCyclicCode(Cold) or IsLinearCode(Cold) then return EvenWeightSubcode(Cold); fi; q := Size(LeftActingDomain(Cold)); n := WordLength(Cold); Els := AsSSortedList(Cold); E := []; s := 0; for i in [1..Size(Cold)] do if IsEvenInt(Weight(Els[i])) then Append(E, [Els[i]]); s := s + 1; fi; od; if s <> Size(Cold) then C := ElementsCode( E, "even weight subcode", GF(q) ); d := [LowerBoundMinimumDistance(Cold), UpperBoundMinimumDistance(Cold)]; for i in [1..2] do if q=2 and IsOddInt(d[i] mod 2) then d[i] := Minimum(d[i]+1,n); fi; od; C!.lowerBoundMinimumDistance := d[1]; C!.upperBoundMinimumDistance := d[2]; if HasWeightDistribution(Cold) then wd := ShallowCopy(WeightDistribution(Cold)); for i in [1..QuoInt(n+1,2)] do wd[2*i] := 0; od; SetWeightDistribution(C, wd); fi; C!.history := History(Cold); return C; else return ShallowCopy(Cold); fi; end); InstallMethod(EvenWeightSubcode, "method for linear codes", true, [IsLinearCode], 0, function(Cold) local C, P, edited, n, G, Els, E, i, s,q, Gold, wd, lbmd; if IsCyclicCode(Cold) then return EvenWeightSubcode(Cold); fi; q := Size(LeftActingDomain(Cold)); n := WordLength(Cold); edited := false; if q = 2 then # Why is the next line needed? P := NullVector(n, GF(2)); G := []; Gold := GeneratorMat(Cold); for i in [1..Dimension(Cold)] do if Weight(Codeword(Gold[i])) mod 2 <> 0 then if not edited then P := Gold[i]; edited := true; else Append(G, [Gold[i]+P]); fi; else Append(G, [Gold[i]]); fi; od; if edited then C := GeneratorMatCode(BaseMat(G),"even weight subcode",GF(q)); fi; else Els := AsSSortedList(Cold); E := []; s := 0; for i in [1..Size(Cold)] do if IsEvenInt(Weight(Els[i])) then Append(E, [Els[i]]); s := s + 1; fi; od; edited := (s <> Size(Cold)); if edited then C := ElementsCode(E, "even weight subcode", GF(q) ); fi; fi; if edited then lbmd := Minimum(n, LowerBoundMinimumDistance(Cold)); if q = 2 and IsOddInt(lbmd) then lbmd := lbmd + 1; fi; C!.lowerBoundMinimumDistance := lbmd; if HasWeightDistribution(Cold) then wd := ShallowCopy(WeightDistribution(Cold)); for i in [1..QuoInt(n+1,2)] do wd[2*i] := 0; od; SetWeightDistribution(C, wd); fi; C!.history := History(Cold); return C; else return ShallowCopy(Cold); fi; end); ##LR See co'd roots stuff, nd reinstate sometime. InstallMethod(EvenWeightSubcode, "method for cyclic codes", true, [IsCyclicCode], 0, function(Cold) local C, P, edited, n, Els, E, i, q, lbmd, wd; q := Size(LeftActingDomain(Cold)); n := WordLength(Cold); edited := false; if (q =2) then P := Indeterminate(GF(2))-One(GF(2)); if Gcd(P, GeneratorPol(Cold)) <> P then C := GeneratorPolCode( GeneratorPol(Cold)*P, n, "even weight subcode", LeftActingDomain(Cold)); #if IsBound(C.roots) then # AddSet(C.roots, Z(2)^0); #fi; edited := true; fi; else Els := AsSSortedList(Cold); E := []; for i in [1..Size(Cold)] do if IsEvenInt(Weight(Els[i])) then Append(E, [Els[i]]); else edited := true; fi; od; if edited then C := ElementsCode(E, "even weight subcode", LeftActingDomain(Cold)); fi; fi; if edited then lbmd := Minimum(n, LowerBoundMinimumDistance(Cold)); if q = 2 and IsOddInt(lbmd) then lbmd := lbmd + 1; fi; C!.lowerBoundMinimumDistance := lbmd; if HasWeightDistribution(Cold) then wd := ShallowCopy(WeightDistribution(Cold)); for i in [1..QuoInt(n+1,2)] do wd[2*i] := 0; od; SetWeightDistribution(C, wd); fi; C!.history := History(Cold); return C; else return ShallowCopy(Cold); fi; end); ############################################################################# ## #F ConstantWeightSubcode( [, ] ) . all words of with weight ## InstallMethod(ConstantWeightSubcode, "method for unrestricted code, weight", true, [IsCode, IsInt], 0, function(C, wt) local D, Els,path; if IsLinearCode(C) then return ConstantWeightSubcode(C, wt); fi; Els := Filtered(AsSSortedList(C), c -> Weight(c) = wt); if Els <> [] then D := ElementsCode(Els, Concatenation( "code with codewords of weight ", String(wt)), LeftActingDomain(C) ); D!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C); D!.history := History(C); return D; else Error("no words of weight", wt); fi; end); InstallOtherMethod(ConstantWeightSubcode, "method for unrestricted code", true, [IsCode], 0, function(C) local wt; if IsLinearCode(C) then return ConstantWeightSubcode(C, MinimumDistance(C)); fi; wt := PositionProperty(WeightDistribution(C){[2..WordLength(C)+1]}, i-> i > 0); if wt = false then wt := WordLength(C); fi; return ConstantWeightSubcode(C, wt); end); InstallMethod(ConstantWeightSubcode, "method for linear code, weight", true, [IsLinearCode, IsInt], 0, function(C, wt) local S, c, a, CWS, path, F, tmpdir, incode, infile, inV, Els, i, D; a:=wt; if wt = 0 then return NullCode(WordLength(C), LeftActingDomain(C)); fi; if Dimension(C) = 0 then Error("no constant weight subcode of a null code is defined"); fi; path := DirectoriesPackagePrograms( "guava" ); if ForAny( ["desauto", "leonconv", "wtdist"], f -> Filename( path, f ) = fail ) then ## begin if-then Print("the C code programs are not compiled, so using GAP code...\n"); F:=LeftActingDomain(C); S:=[]; for c in Elements(C) do if WeightCodeword(c)=a then S:=Concatenation([c],S); fi; od; CWS:=ElementsCode(S,"constant weight subcode",F); CWS!.lowerBoundMinimumDistance:=a; CWS!.upperBoundMinimumDistance:=a; return CWS; ## end if-then else Print("the C code programs are compiled, so using Leon's binary....\n"); tmpdir := DirectoryTemporary();; incode := TmpName(); PrintTo( incode, "\n" ); # inV := TmpName(); # PrintTo( inV, "\n" ); infile := TmpName(); PrintTo( infile, "\n" ); GuavaToLeon(C, incode); Exec(Filename(DirectoriesPackagePrograms("guava"), "wtdist"), Concatenation("-q ",incode,"::code ", String(wt), " ", Filename( tmpdir, "cwsc.txt" ),"::code")); if IsReadableFile( Filename( tmpdir, "cwsc.txt" )) then inV := Filename( tmpdir, "cwsc.txt" ); Exec(Filename(DirectoriesPackagePrograms("guava"), "leonconv"), Concatenation("-c ",inV," ",infile)); else Error("\n Sorry, no codes words of weight ",wt,"\n"); fi; Read(infile); RemoveFiles(incode,inV,infile); Els := []; for i in AsSSortedList(LeftActingDomain(C)){[2..Size(LeftActingDomain(C))]} do Append(Els, i * GUAVA_TEMP_VAR); od; if Els <> [] then D := ElementsCode(Els, Concatenation( "code with codewords of weight ", String(wt)), LeftActingDomain(C) ); D!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C); D!.history := History(C); return D; else Error("no words of weight ",wt); Print("\n no words of weight ",wt); fi; fi; ## end if-then-else end); InstallOtherMethod(ConstantWeightSubcode, "method for linear code", true, [IsLinearCode], 0, function(C) return ConstantWeightSubcode(C, MinimumDistance(C)); end); ############################################################################# ## #F ExtendedCode( [, ] ) . . . . . code with added parity check symbol ## InstallMethod(ExtendedCode, "method to extend unrestricted code i times", true, [IsCode, IsInt], 0, function(Cold, nrcolumns) local n, q, zeros, elements, word, vec, lbmd, ubmd, i, indist, wd, C; if nrcolumns < 1 then return ShallowCopy(Cold); elif IsLinearCode(Cold) then return ExtendedCode(Cold,nrcolumns); fi; n := WordLength(Cold)+1; q := Size(LeftActingDomain(Cold)); zeros:= List( [ 2 .. nrcolumns ], i-> Zero(LeftActingDomain(Cold)) ); elements := []; for word in AsSSortedList(Cold) do vec := VectorCodeword(word); Add(elements, Codeword(Concatenation(vec, [-Sum(vec)], zeros))); od; C := ElementsCode( elements, "extended code", q ); lbmd := LowerBoundMinimumDistance(Cold); ubmd := UpperBoundMinimumDistance(Cold); if q = 2 then if lbmd mod 2 = 1 then lbmd := lbmd + 1; fi; if ubmd mod 2 = 1 then ubmd := ubmd + 1; fi; C!.lowerBoundMinimumDistance := lbmd; C!.upperBoundMinimumDistance := ubmd; if HasInnerDistribution(Cold) then indist := NullVector(n+1); indist[1] := InnerDistribution(Cold)[1]; for i in [1 .. QuoInt( WordLength(Cold), 2 ) ] do indist[i*2+1]:= InnerDistribution(Cold)[i*2+1]+ InnerDistribution(Cold)[i*2]; od; if IsOddInt(WordLength(Cold)) then indist[WordLength(Cold) + 2] := InnerDistribution(Cold)[WordLength(Cold) + 1]; fi; SetInnerDistribution(C, indist); fi; if HasWeightDistribution(Cold) then wd := NullVector( n + 1); wd[1] := WeightDistribution(Cold)[1]; for i in [1 .. QuoInt( WordLength(Cold), 2 ) ] do wd[i*2+1]:= WeightDistribution(Cold)[i*2+1]+ WeightDistribution(Cold)[i*2]; od; if IsOddInt(WordLength(Cold)) then wd[WordLength(Cold) + 2] := WeightDistribution(Cold)[WordLength(Cold) + 1]; fi; SetWeightDistribution(C, wd); fi; if IsBound(Cold!.boundsCoveringRadius) and Length( Cold!.boundsCoveringRadius ) = 1 then C!.boundsCoveringRadius := [ Cold!.boundsCoveringRadius[ 1 ] + nrcolumns ]; fi; else C!.upperBoundMinimumDistance := UpperBoundMinimumDistance(Cold) + 1; fi; C!.history := History(Cold); return C; end); InstallOtherMethod(ExtendedCode, "method for unrestricted code", true, [IsCode], 0, function(C) return ExtendedCode(C, 1); end); InstallMethod(ExtendedCode, "method to extend linear code i times", true, [IsLinearCode, IsInt], 0, function(Cold, nrcolumns) local C, G, word, zeros, i, n, q, lbmd, ubmd, wd; if nrcolumns < 1 then return ShallowCopy(C); fi; n := WordLength(Cold) + nrcolumns; zeros := List( [2 .. nrcolumns], i-> Zero(LeftActingDomain(Cold)) ); q := Size(LeftActingDomain(Cold)); G := List(GeneratorMat(Cold), i-> ShallowCopy(i)); for word in G do Add(word, -Sum(word)); Append(word, zeros); od; C := GeneratorMatCode(G, "extended code", q); lbmd := LowerBoundMinimumDistance(Cold); ubmd := UpperBoundMinimumDistance(Cold); if q = 2 then if IsOddInt( lbmd ) then lbmd := lbmd + 1; fi; if IsOddInt( ubmd ) then ubmd := ubmd + 1; fi; C!.lowerBoundMinimumDistance := lbmd; C!.upperBoundMinimumDistance := ubmd; if HasWeightDistribution(Cold) then wd := NullVector(n + 1); wd[1] := 1; for i in [ 1 .. QuoInt( WordLength(Cold), 2 ) ] do wd[i*2+1]:=WeightDistribution(Cold)[i*2+1]+ WeightDistribution(Cold)[i*2]; od; if IsOddInt(WordLength(Cold)) then wd[WordLength(Cold) + 2] := WeightDistribution(Cold)[WordLength(Cold) + 1]; fi; SetWeightDistribution(C, wd); fi; if IsBound(Cold!.boundsCoveringRadius) and Length( Cold!.boundsCoveringRadius ) = 1 then C!.boundsCoveringRadius := [ Cold!.boundsCoveringRadius[ 1 ] + nrcolumns ]; fi; else C!.upperBoundMinimumDistance := UpperBoundMinimumDistance(Cold) + 1; fi; C!.history := History(Cold); return C; end); ############################################################################# ## #F ShortenedCode( [, ] ) . . . . . . . . . . . . . . shortened code ## ## InstallMethod(ShortenedCode, "Method for unrestricted code, position list", true, [IsCode, IsList], 0, function(C, L) local Cnew, i, e, zero, q, baseels, element, max, number, temp, els, n; if IsLinearCode(C) then return ShortenedCode(C,L); fi; L := Reversed(Set(L)); zero := Zero(LeftActingDomain(C)); baseels := AsSSortedList(LeftActingDomain(C)); q := Size(LeftActingDomain(C)); els := VectorCodeword(AsSSortedList(C)); for i in L do temp := List(els, x -> x[i]); max := 0; for e in baseels do number := Length(Filtered(temp, x -> x=e)); if number > max then max := number; element := e; fi; od; temp := []; n := Length(els[1]); for e in els do if e[i] = element then Add(temp,Concatenation(e{[1..i-1]},e{[i+1..n]})); fi; els := temp; od; od; Cnew := ElementsCode(temp, "shortened code", LeftActingDomain(C)); Cnew!.history := History(C); Cnew!.lowerBoundMinimumDistance := Minimum(LowerBoundMinimumDistance(C), WordLength(Cnew)); return Cnew; end); InstallOtherMethod(ShortenedCode, "method for unrestricted code, int position", true, [IsCode, IsInt], 0, function(C, i) return ShortenedCode(C, [i]); end); InstallOtherMethod(ShortenedCode, "method for unrestricted code", true, [IsCode], 0, function(C) return ShortenedCode(C, [1]); end); InstallMethod(ShortenedCode, "method for linear code and position list", true, [IsLinearCode, IsList], 0, function(C, L) local Cnew, G, i, e, zero, q, baseels, temp, n; L := Reversed(Set(L)); zero := Zero(LeftActingDomain(C)); baseels := AsSSortedList(LeftActingDomain(C)); q := Size(LeftActingDomain(C)); G := ShallowCopy(GeneratorMat(C)); for i in L do e := 0; repeat e := e + 1; until (e > Length(G)) or (G[e][i] <> zero); if G <> [] then n := Length(G[1]); else n := WordLength(C); fi; if e <= Length(G) then temp := G[e]; G := Concatenation(G{[1..e-1]},G{[e+1..Length(G)]}); G := List(G, x-> x - temp * (x[i] / temp[i])); fi; G := List(G, x->Concatenation(x{[1..i-1]},x{[i+1..n]})); if G = [] then return NullCode(WordLength(C)-Length(L), LeftActingDomain(C)); fi; od; Cnew := GeneratorMatCode(BaseMat(G), "shortened code", LeftActingDomain(C)); Cnew!.history := History(C); Cnew!.lowerBoundMinimumDistance := Minimum(LowerBoundMinimumDistance(C), WordLength(Cnew)); if IsCyclicCode(C) then Cnew!.upperBoundMinimumDistance := Minimum(WordLength(Cnew), UpperBoundMinimumDistance(C)); fi; return Cnew; end); ############################################################################# ## #F PuncturedCode( [, ] ) . . . . . . . . . . . . . punctured code ## ## PuncturedCode(C [, remlist]) punctures a code by leaving out the ## coordinates given in list remlist. If remlist is omitted, then ## the last coordinate will be removed. ## InstallMethod(PuncturedCode, "method for unrestricted codes, position list provided", true, [IsCode, IsList], 0, function(Cold, remlist) local keeplist, n, C; if IsLinearCode(Cold) then return PuncturedCode(Cold, remlist); fi; n := WordLength(Cold); remlist := Set(remlist); keeplist := [1..n]; SubtractSet(keeplist, remlist); C := ElementsCode( VectorCodeword(Codeword( AsSSortedList(Cold))){[1 .. Size(Cold)]}{keeplist}, "punctured code", LeftActingDomain(Cold)); C!.history := History(Cold); C!.lowerBoundMinimumDistance := Maximum(LowerBoundMinimumDistance(Cold) - Length(remlist), 1); C!.upperBoundMinimumDistance := Minimum( Maximum( 1, UpperBoundMinimumDistance(Cold) ), n-Length(remlist)); return C; end); InstallOtherMethod(PuncturedCode, "method for unrestricted codes, int position provided", true, [IsCode, IsInt], 0, function(C, n) return PuncturedCode(C, [n]); end); InstallOtherMethod(PuncturedCode, "method for unrestricted codes", true, [IsCode], 0, function(C) return PuncturedCode(C, [WordLength(C)]); end); InstallMethod(PuncturedCode, "method for linear codes, position list provided", true, [IsLinearCode, IsList], 0, function(Cold, remlist) local C, keeplist, n; n := WordLength(Cold); remlist := Set(remlist); keeplist := [1..n]; SubtractSet(keeplist, remlist); C := GeneratorMatCode( GeneratorMat(Cold){[1..Dimension(Cold)]}{keeplist}, "punctured code", LeftActingDomain(Cold) ); C!.history := History(Cold); C!.lowerBoundMinimumDistance := Maximum(LowerBoundMinimumDistance(Cold) - Length(remlist), 1); # Cyclic codes always have at least one codeword with minimal weight in the # i-th column (for every i), so if you remove a column, that word has a # weight of one less -> the minimumdistance is reduced by one if IsCyclicCode(Cold) then C!.upperBoundMinimumDistance := Minimum( Maximum( 1, UpperBoundMinimumDistance(Cold)-1), n - Length(remlist) ); else C!.upperBoundMinimumDistance := Minimum( Maximum( 1, UpperBoundMinimumDistance(Cold) ), n - Length(remlist)); fi; return C; end); ############################################################################# ## #F ExpurgatedCode( , ) . . . . . removes codewords in from code ## ## The usual way of expurgating a code is removing all words of odd weight. ## InstallMethod(ExpurgatedCode, "method for unrestricted codes, codeword list", true, [IsCode, IsList], 0, function(C, L) if IsLinearCode(C) then return ExpurgatedCode(C, L); else Error("can't expurgate a non-linear code; ", "consider using RemovedElementsCode"); fi; end); InstallOtherMethod(ExpurgatedCode, "method for unrestricted code, codeword", true, [IsCode, IsCodeword], 0, function(C, w) return ExpurgatedCode(C, [w]); end); InstallOtherMethod(ExpurgatedCode, "method for unrestricted code", true, [IsCode], 0, function(C) if IsLinearCode(C) then return ExpurgatedCode(C); else Error("can't expurgate a non-linear code; "); fi; end); InstallMethod(ExpurgatedCode, "method for linear code, codeword list", true, [IsLinearCode, IsList], 0, function(Cold, L) local C, num, H, F; L := VectorCodeword( L ); L := Set(L); F := LeftActingDomain(Cold); L := Filtered(L, l-> Codeword(l) in Cold); H := List(L, function(l) local V,p; V := NullVector(WordLength(Cold), F); p := PositionProperty(l, i-> not (i = Zero(F))); if not (p = false) then V[p] := One(F); fi; return V; end); H := BaseMat(Concatenation(CheckMat(Cold), H)); num := Length(H) - Redundancy(Cold); if num > 0 then C := CheckMatCode( H, Concatenation("code, expurgated with ", String(num), " word(s)"), F); C!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(Cold); C!.history := History(Cold); return C; else return ShallowCopy(Cold); fi; end); InstallOtherMethod(ExpurgatedCode, "method for linear code", true, [IsLinearCode], 0, function(C) local C2; C2 := EvenWeightSubcode(C); ##LR - prob if C2 not lin. Try on DualCode(RepetitionCode(5, GF(3))) if Dimension(C2) = Dimension(C) then ## No words of odd weight, so expurgate by removing first row of ## generator matrix. return ExpurgatedCode(C, Codeword(GeneratorMat(C)[1])); else return C2; fi; end); ############################################################################# ## #F AddedElementsCode( , ) . . . . . . . . . . adds words in list ## InstallMethod(AddedElementsCode, "method for unrestricted code, codeword list", true, [IsCode, IsList], 0, function(C, L) local Cnew, e, w, E, CalcWD, wd, num; L := VectorCodeword( L ); L := Set(L); E := ShallowCopy(VectorCodeword(AsSSortedList(C))); if HasWeightDistribution(C) then wd := ShallowCopy(WeightDistribution(C)); CalcWD := true; else CalcWD := false; fi; num := 0; for e in L do if not (e in C) then Add(E, e); num := num + 1; if CalcWD then w := Weight(Codeword(e)) + 1; wd[w] := wd[w] + 1; fi; fi; od; if num > 0 then Cnew := ElementsCode(E, Concatenation( "code with ", String(num), " word(s) added"), LeftActingDomain(C)); if CalcWD then SetWeightDistribution(Cnew, wd); fi; Cnew!.history := History(C); return Cnew; else return ShallowCopy(C); fi; end); InstallOtherMethod(AddedElementsCode, "method for unrestricted code, codeword", true, [IsCode, IsCodeword], 0, function(C, w) return AddedElementsCode(C, [w]); end); ############################################################################# ## #F RemovedElementsCode( , ) . . . . . . . . removes words in list ## InstallMethod(RemovedElementsCode, "method for unrestricted code, codeword list", true, [IsCode, IsList], 0, function(C, L) local E, E2, e, num, s, CalcWD, wd, w, Cnew; L := VectorCodeword( L ); E := Set(VectorCodeword(AsSSortedList(C))); E2 := []; if HasWeightDistribution(C) then wd := ShallowCopy(WeightDistribution(C)); CalcWD := true; else CalcWD := false; fi; for e in E do if not (e in L) then Add(E2, e); elif CalcWD then w := Weight(Codeword(e)) + 1; wd[w] := wd[w] - 1; fi; od; num := Size(E) - Size(E2); if num > 0 then Cnew := ElementsCode(E2, Concatenation( "code with ", String(num), " word(s) removed"), LeftActingDomain(C) ); if CalcWD then SetWeightDistribution(Cnew, wd); fi; Cnew!.history := History(C); Cnew!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C); return Cnew; else return ShallowCopy(C); fi; end); InstallOtherMethod(RemovedElementsCode, "method for unrestricted code, codeword", true, [IsCode, IsCodeword], 0, function(C, w) return RemovedElementsCode(C, [w]); end); ############################################################################# ## #F LengthenedCode( [, ] ) . . . . . . . . . . . . . . lengthens code ## InstallMethod(LengthenedCode, "method for unrestricted code, number of columns", true, [IsCode, IsInt], 0, function(C, nrcolumns) local Cnew; Cnew := ExtendedCode(AugmentedCode(C), nrcolumns); Cnew!.history := History(C); Cnew!.name := Concatenation("code, lengthened with ",String(nrcolumns), " column(s)"); return Cnew; end); InstallOtherMethod(LengthenedCode, "unrestricted code", true, [IsCode], 0, function(C) return LengthenedCode(C, 1); end); ############################################################################# ## #F ResidueCode( [, ] ) . . takes residue of with respect to ## ## If w is omitted, a word from C of minimal weight is used ## InstallMethod(ResidueCode, "method for unrestricted code, codeword", true, [IsCode, IsCodeword], 0, function(C, w) if not IsLinearCode(C) then Error("argument must be a linear code"); else return ResidueCode(C, w); fi; end); InstallOtherMethod(ResidueCode, "method for unrestricted code", true, [IsCode], 0, function(C) if not IsLinearCode(C) then Error("argument must be a linear code"); else return ResidueCode(C); fi; end); InstallOtherMethod(ResidueCode, "method for linear code", true, [IsLinearCode], 0, function(C) local w, i, d; d := MinimumDistance(C); i := 2; while Weight(CodewordNr(C, i)) > d do i := i + 1; od; w := CodewordNr(C, i); return ResidueCode(C, w); end); InstallMethod(ResidueCode, "method for linear code, codeword", true, [IsLinearCode, IsCodeword], 0, function(C, w) local Cnew, q, d; if Weight(w) = 0 then Error("word of weight 0 is not allowed"); elif Weight(w) = WordLength(C) then Error("all-one word is not allowed"); fi; Cnew := PuncturedCode(ExpurgatedCode(C, w), Support(w)); q := Size(LeftActingDomain(C)); d := MinimumDistance(C) - Weight(w) * ( (q-1) / q ); if not IsInt(d) then d := Int(d) + 1; fi; Cnew!.lowerBoundMinimumDistance := d; Cnew!.history := History(C); Cnew!.name := "residue code"; return Cnew; end); ############################################################################# ## #F ConstructionBCode( ) . . . . . . . . . . . code from construction B ## ## Construction B (See M&S, Ch. 18, P. 9) assumes that the check matrix has ## a first row of weight d' (the dual distance of C). The new code has a ## check matrix equal to this matrix, but with columns removed where the ## first row is 1. ## InstallMethod(ConstructionBCode, "method for unrestricted codes", true, [IsCode], 0, function(C) if LeftActingDomain(C) <> GF(2) then Error("only valid for binary codes"); elif IsLinearCode(C) then return ConstructionBCode(C); else Error("only valid for linear codes"); fi; end); InstallMethod(ConstructionBCode, "method for linear codes", true, [IsLinearCode], 0, function(C) local i, H, dd, M, mww, Cnew, DC, keeplist; if LeftActingDomain(C) <> GF(2) then Error("only valid for binary codes"); fi; DC := DualCode(C); H := ShallowCopy(GeneratorMat(DC)); # is check matrix of C M := Size(DC); dd := MinimumDistance(DC); # dual distance of C i := 2; repeat mww := CodewordNr(DC, i); i := i + 1; until Weight(mww) = dd; i := i - 2; keeplist := Set([1..WordLength(C)]); SubtractSet(keeplist, Support(mww)); mww := VectorCodeword(mww); # make sure no row dependencies arise; H[Redundancy(C)-LogInt(i, Size(LeftActingDomain(C)))] := mww; H := List(H, h -> h{keeplist}); Cnew := CheckMatCode(H, Concatenation("Construction B (",String(dd), " coordinates)"), LeftActingDomain(C)); Cnew!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C); Cnew!.history := History(DC); return Cnew; end); ############################################################################# ## #F ConstructionB2Code( ) . . . . . . . . . . code from construction B2 ## ## Construction B2 is mixtures of shortening and puncturing. Given an ## [n,k,d] code which has dual code of minimum distance s, we obtain ## an [n-s, k-s+2j+1, d-2j] code for each j with 2j+1 < s. ## ## For more details, see A. Brouwer (1998), "Bounds on the size of linear ## codes,", in Handbook of Coding Theory, V. S. Pless and W. C. Huffmann ## ed., pp. 311 ## ## added by CJ, April 2006 - FIXME this function is NOT complete ## InstallMethod(ConstructionB2Code, "method for unrestricted codes", true, [IsCode], 0, function(C) Error("ConstructionB2 is not implemented yet ....... sorry\n"); end); ############################################################################# ## #F SubCode( , [] ) . . . . . . . . . . . . . . . . . . subcode of C ## ## Given C, an [n,k,d] code, return a subcode of C with dimension k-s. ## If s is not given, it is assumed to be 1. ## ## added by CJ, April 2006 - FIXME this function is NOT complete ## InstallMethod(SubCode, "method for linear codes, int provided", true, [IsCode, IsInt], 0, function(C, s) local G, Gs, Cs; if (IsLinearCode(C) = false) then Error("SubCode only works for linear code\n"); fi; if (Dimension(C)-s = 0) then return NullCode(CodeLength(C), LeftActingDomain(C)); elif (Dimension(C) <= s) then Error("Dimension of the code must be greater than s\n"); else G := ShallowCopy(GeneratorMat(C)); Gs := List([1..Length(G)-s], x->G[x]); Cs := GeneratorMatCode(BaseMat(Gs), "subcode", LeftActingDomain(C)); Cs!.lowerBoundMinimumDistance := Maximum(LowerBoundMinimumDistance(C), 1); Cs!.upperBoundMinimumDistance := Minimum(Maximum(1, UpperBoundMinimumDistance(C)), CodeLength(C)); Cs!.history := History(C); return Cs; fi; end); InstallOtherMethod(SubCode, "method for linear codes", true, [IsCode], 0, function(C) return SubCode(C, 1); end); ############################################################################# ## #F PermutedCode( ,

) . . . . . . . permutes coordinates of codewords ## InstallMethod(PermutedCode, "method for unrestricted codes", true, [IsCode, IsPerm], 0, function(Cold, P) local C, field, fields; if IsCyclicCode(Cold) or IsLinearCode(Cold) then return PermutedCode(Cold, P); fi; C := ElementsCode( PermutedCols(VectorCodeword(Codeword(AsSSortedList(Cold))), P), "permuted code", LeftActingDomain(Cold)); # Copy the fields that stay the same: fields := [WeightDistribution, InnerDistribution, IsPerfectCode, IsSelfDualCode, MinimumDistance, CoveringRadius]; for field in fields do if Tester(field)(Cold) then Setter(field)(C, field(Cold)); fi; od; fields := ["lowerBoundMinimumDistance", "upperBoundMinimumDistance", "boundsCoveringRadius"]; for field in fields do if IsBound(Cold!.(field)) then C!.(field) := Cold!.(field); fi; od; C!.history := History(Cold); return C; end); InstallMethod(PermutedCode, "method for linear codes", true, [IsLinearCode, IsPerm], 0, function(Cold, P) local C, field, fields; if IsCyclicCode(Cold) then return PermutedCode(Cold, P); fi; C := GeneratorMatCode( PermutedCols(GeneratorMat(Cold), P), "permuted code", LeftActingDomain(Cold)); # Copy the fields that stay the same: fields := [WeightDistribution, IsPerfectCode, IsSelfDualCode, MinimumWeightOfGenerators, MinimumDistance, CoveringRadius]; for field in fields do if Tester(field)(Cold) then Setter(field)(C, field(Cold)); fi; od; fields := ["lowerBoundMinimumDistance", "upperBoundMinimumDistance", "boundsCoveringRadius"]; for field in fields do if IsBound(Cold!.(field)) then C!.(field) := Cold!.(field); fi; od; C!.history := History(Cold); return C; end); InstallMethod(PermutedCode, "method for cyclic codes", true, [IsCyclicCode, IsPerm], 0, function(Cold, P) local C, field, fields; C := GeneratorMatCode( PermutedCols(GeneratorMat(Cold), P), "permuted code", LeftActingDomain(Cold) ); # Copy the fields that stay the same: fields := [WeightDistribution, IsPerfectCode, IsSelfDualCode, MinimumWeightOfGenerators, MinimumDistance, CoveringRadius, UpperBoundOptimalMinimumDistance]; for field in fields do if Tester(field)(Cold) then Setter(field)(C, field(Cold)); fi; od; fields := ["lowerBoundMinimumDistance", "upperBoundMinimumDistance", "boundsCoveringRadius"]; for field in fields do if IsBound(Cold!.(field)) then C!.(field) := Cold!.(field); fi; od; C!.history := History(Cold); return C; end); ############################################################################# ## #F StandardFormCode( ) . . . . . . . . . . . . standard form of code ## ##LR - all of these methods used to use a ShallowCopy, but that doesn't ## allow for unbinding/unsetting of attributes. So now a whole new ## code is created. However, should figure out what can be saved and ## use that. InstallMethod(StandardFormCode, "method for unrestricted code", true, [IsCode], 0, function(C) local Cnew; if IsLinearCode(C) then return StandardFormCode(C); fi; Cnew := ElementsCode(AsSSortedList(C), "standard form", LeftActingDomain(C)); Cnew!.history := History(C); return Cnew; end); InstallMethod(StandardFormCode, "method for linear codes", true, [IsLinearCode], 0, function(C) local G, P, Cnew; G := ShallowCopy(GeneratorMat(C)); P := PutStandardForm(G, true, LeftActingDomain(C)); if P = () then Cnew := ShallowCopy(C); # this messes up code names #Cnew!.name := "standard form"; else Cnew := GeneratorMatCode(G, Concatenation("standard form, permuted with ", String(P)), LeftActingDomain(C)); fi; Cnew!.history := History(C); return Cnew; end); ############################################################################# ## #F ConversionFieldCode( ) . . . . . converts code from GF(q^m) to GF(q) ## InstallMethod(ConversionFieldCode, "method for unrestricted code", true, [IsCode], 0, function (C) local F, x, q, m, i, ConvertElms, Cnew; if IsLinearCode(C) then return ConversionFieldCode(C); fi; ConvertElms := function (M) local res,n,k,vec,coord, ConvTable, Nul, g, zero; res := []; n := Length(M[1]); k := Length(M); g := MinimalPolynomial(GF(q), Z(q^m)); zero := Zero(F); Nul := List([1..m], i -> zero); ConvTable := []; x := Indeterminate(GF(q)); for i in [1..Size(F) - 1] do ConvTable[i] := VectorCodeword(Codeword(x^(i-1) mod g, m)); od; for vec in [1..k] do res[vec] := []; for coord in [1..n] do if M[vec][coord] <> zero then Append(res[vec], ConvTable[LogFFE(M[vec][coord], Z(q^m)) + 1]); else Append(res[vec], Nul); fi; od; od; return res; end; F := LeftActingDomain(C); q := Characteristic(F); m := Dimension(F); Cnew := ElementsCode( ConvertElms(VectorCodeword(AsSSortedList(C))), Concatenation("code, converted to basefield GF(", String(q),")"), F ); Cnew!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C); Cnew!.upperBoundMinimumDistance := Minimum(WordLength(C), m*UpperBoundMinimumDistance(C)); Cnew!.history := History(C); return Cnew; end); InstallOtherMethod(ConversionFieldCode, "method for linear code", true, [IsLinearCode], 0, function(C) local F, Cnew; F := LeftActingDomain(C); Cnew := GeneratorMatCode( HorizontalConversionFieldMat( GeneratorMat(C), F), Concatenation("code, converted to basefield GF(", String(Characteristic(F)), ")"), GF(Characteristic(F))); Cnew!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C); Cnew!.upperBoundMinimumDistance := Minimum(WordLength(C), Dimension(F) * UpperBoundMinimumDistance(C)); Cnew!.history := History(C); return Cnew; end); ############################################################################# ## #F CosetCode( , ) . . . . . . . . . . . . . . . . . . . coset of ## InstallMethod(CosetCode, "method for unrestricted codes", true, [IsCode, IsCodeword], 0, function(C, f) local i, els, Cnew; if IsLinearCode(C) then return CosetCode(C, f); fi; f := Codeword(f, LeftActingDomain(C)); els := []; for i in [1..Size(C)] do Add(els, AsSSortedList(C)[i] + f); od; Cnew := ElementsCode(els, "coset code", LeftActingDomain(C) ); Cnew!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C); Cnew!.upperBoundMinimumDistance := UpperBoundMinimumDistance(C); Cnew!.history := History(C); return Cnew; end); InstallMethod(CosetCode, "method for linear codes", true, [IsLinearCode, IsCodeword], 0, function(C, f) local Cnew, i, els, Cels; f := Codeword(f, LeftActingDomain(C)); if f in C then return ShallowCopy(C); fi; els := []; Cels := AsSSortedList(C); for i in [1..Size(C)] do Add(els, Cels[i] + f); od; Cnew := ElementsCode(els, "coset code", LeftActingDomain(C) ); if HasWeightDistribution(C) then SetInnerDistribution(Cnew, ShallowCopy(WeightDistribution(C))); fi; Cnew!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C); Cnew!.upperBoundMinimumDistance := UpperBoundMinimumDistance(C); Cnew!.history := History(C); return Cnew; end); ############################################################################# ## #F DirectSumCode( , ) . . . . . . . . . . . . . . . . . direct sum ## ## DirectSumCode(C1, C2) creates a (n1 + n2 , M1 M2 , min{d1 , d2} ) code ## by adding each codeword of the second code to all the codewords of the ## first code. ## InstallMethod(DirectSumCode, "method for unrestricted codes", true, [IsCode, IsCode], 0, function(C1, C2) local i, j, C, els, n, sumcr, wd, id; if IsLinearCode(C1) and IsLinearCode(C2) then return DirectSumCode(C1, C2); fi; if LeftActingDomain(C1) <> LeftActingDomain(C2) then Error("Codes are not in the same basefield"); fi; els := []; for i in VectorCodeword(AsSSortedList(C1)) do Append(els,List(VectorCodeword(AsSSortedList(C2)), x-> Concatenation(i, x ) ) ); od; C := ElementsCode( els, "direct sum code", LeftActingDomain(C1) ); n := WordLength(C1) + WordLength(C2); if Size(C) <= 1 then C!.lowerBoundMinimumDistance := n; C!.upperBoundMinimumDistance := n; else C!.lowerBoundMinimumDistance := Minimum(LowerBoundMinimumDistance(C1), LowerBoundMinimumDistance(C2)); C!.upperBoundMinimumDistance := Minimum(UpperBoundMinimumDistance(C1), UpperBoundMinimumDistance(C2)); fi; if HasWeightDistribution(C1) and HasWeightDistribution(C2) then wd := NullVector(WordLength(C)+1); for i in [1..WordLength(C1)+1] do for j in [1..WordLength(C2)+1] do wd[i+j-1] := wd[i+j-1]+ WeightDistribution(C1)[i] * WeightDistribution(C2)[j]; od; od; SetWeightDistribution(C, wd); fi; if HasInnerDistribution(C1) and HasInnerDistribution(C2) then id := NullVector(WordLength(C) + 1); for i in [1..WordLength(C1) + 1 ] do for j in [1..WordLength(C2) + 1 ] do id[i+j-1] := id[i+j-1]+ InnerDistribution(C1)[i] * InnerDistribution(C2)[j]; od; od; SetInnerDistribution(C, id); fi; if IsBound(C1!.boundsCoveringRadius) and IsBound(C2!.boundsCoveringRadius) then sumcr := List( C1!.boundsCoveringRadius, x -> x + C2!.boundsCoveringRadius); sumcr := Set( Flat( sumcr ) ); IsRange( sumcr ); C!.boundsCoveringRadius := sumcr; fi; C!.history := MergeHistories(History(C1), History(C2)); return C; end); InstallMethod(DirectSumCode, "method for linear codes", true, [IsLinearCode, IsLinearCode], 0, function(C1, C2) local i, j, C, zeros1, zeros2, G, n, sumcr, wd; if LeftActingDomain(C1) <> LeftActingDomain(C2) then Error("Codes are not in the same basefield"); fi; zeros1 := NullVector(WordLength(C1), LeftActingDomain(C1)); zeros2 := NullVector(WordLength(C2), LeftActingDomain(C1)); G := List(GeneratorMat(C1),x -> Concatenation(x,zeros2)); Append(G,List(GeneratorMat(C2),x -> Concatenation(zeros1,x))); C := GeneratorMatCode( G, "direct sum code", LeftActingDomain(C1) ); n := WordLength(C1) + WordLength(C2); if Size(C) <= 1 then C!.lowerBoundMinimumDistance := n; C!.upperBoundMinimumDistance := n; else C!.lowerBoundMinimumDistance := Minimum(LowerBoundMinimumDistance(C1), LowerBoundMinimumDistance(C2)); C!.upperBoundMinimumDistance := Minimum(UpperBoundMinimumDistance(C1), UpperBoundMinimumDistance(C2)); fi; if HasWeightDistribution(C1) and HasWeightDistribution(C2) then wd := NullVector(WordLength(C)+1); for i in [1..WordLength(C1)+1] do for j in [1..WordLength(C2)+1] do wd[i+j-1] := wd[i+j-1]+ WeightDistribution(C1)[i] * WeightDistribution(C2)[j]; od; od; SetWeightDistribution(C, wd); fi; if IsBound(C1!.boundsCoveringRadius) and IsBound(C2!.boundsCoveringRadius) then sumcr := List( C1!.boundsCoveringRadius, x -> x + C2!.boundsCoveringRadius); sumcr := Set( Flat( sumcr ) ); IsRange( sumcr ); C!.boundsCoveringRadius := sumcr; fi; if HasIsNormalCode(C1) and HasIsNormalCode(C2) and IsNormalCode( C1 ) and IsNormalCode( C2 ) then SetIsNormalCode(C, true); fi; if HasIsSelfOrthogonalCode(C1) and HasIsSelfOrthogonalCode(C2) and IsSelfOrthogonalCode(C1) and IsSelfOrthogonalCode(C2) then SetIsSelfOrthogonalCode(C, true); fi; C!.history := MergeHistories(History(C1), History(C2)); return C; end); ############################################################################# ## #F ConcatenationCode( , ) . . . . . concatenation of and ## InstallMethod(ConcatenationCode, "method for unrestricted codes", true, [IsCode, IsCode], 0, function(C1, C2) local E,e,C; if IsLinearCode(C1) and IsLinearCode(C2) then return ConcatenationCode(C1, C2); elif Size(C1) <> Size(C2) then Error("both codes must have equal size"); elif LeftActingDomain(C1) <> LeftActingDomain(C2) then Error("both codes must be over the same field"); fi; E := []; for e in [1..Size(C1)] do Add(E,Concatenation(VectorCodeword(AsSSortedList(C1)[e]), VectorCodeword(AsSSortedList(C2)[e]))); od; C := ElementsCode( E, "concatenation code", LeftActingDomain(C1) ); C!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C1) + LowerBoundMinimumDistance(C2); C!.upperBoundMinimumDistance := UpperBoundMinimumDistance(C1) + UpperBoundMinimumDistance(C2); # CoveringRadius? C!.history := MergeHistories(History(C1), History(C2)); return C; end); InstallMethod(ConcatenationCode, "method for linear codes", true, [IsLinearCode, IsLinearCode], 0, function(C1, C2) local e, C, G, G1, G2; if Size(C1) <> Size(C2) then Error("both codes must have equal size"); elif LeftActingDomain(C1) <> LeftActingDomain(C2) then Error("both codes must be over the same field"); fi; G := []; G1 := GeneratorMat(C1); G2 := GeneratorMat(C2); for e in [1..Dimension(C1)] do Add(G, Concatenation(G1[e], G2[e])); od; C := GeneratorMatCode(G, "concatenation code", LeftActingDomain(C1)); C!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C1) + LowerBoundMinimumDistance(C2); C!.upperBoundMinimumDistance := UpperBoundMinimumDistance(C1) + UpperBoundMinimumDistance(C2); # CoveringRadius? C!.history := MergeHistories(History(C1), History(C2)); return C; end); ############################################################################# ## #F DirectProductCode( , ) . . . . . . . . . . . . . direct product ## ## DirectProductCode constructs a new code from the direct product of two ## codes by taking the Kronecker product of the two generator matrices ## InstallMethod(DirectProductCode, "method for unrestricted codes", true, [IsCode, IsCode], 0, function(C1, C2) if IsLinearCode(C1) and IsLinearCode(C2) then return DirectProductCode(C1,C2); else Error("both codes must be linear"); fi; end); InstallMethod(DirectProductCode, "method for linear codes", true, [IsLinearCode, IsLinearCode], 0, function(C1, C2) local C; if LeftActingDomain(C1) <> LeftActingDomain(C2) then Error("both codes must have the same basefield"); fi; C := GeneratorMatCode( KroneckerProduct(GeneratorMat(C1), GeneratorMat(C2)), "direct product code", LeftActingDomain(C1)); if Dimension(C) = 0 then C!.lowerBoundMinimumDistance := WordLength(C); C!.upperBoundMinimumDistance := WordLength(C); else C!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C1) * LowerBoundMinimumDistance(C2); C!.upperBoundMinimumDistance := UpperBoundMinimumDistance(C1) * UpperBoundMinimumDistance(C2); fi; C!.history := MergeHistories(History(C1), History(C2)); if IsBound( C1!.boundsCoveringRadius ) and IsBound( C2!.boundsCoveringRadius ) then C!.boundsCoveringRadius := [ Maximum( WordLength( C1 ) * C2!.boundsCoveringRadius[ 1 ], WordLength( C2 ) * C1!.boundsCoveringRadius[ 1 ] ) .. GeneralUpperBoundCoveringRadius( C ) ]; fi; return C; end); ############################################################################# ## #F UUVCode( , ) . . . . . . . . . . . . . . . u | u+v construction ## ## Uuvcode(C1, C2) # creates a ( 2n , M1 M2 , d = min{2 d1 , d2} ) code ## with codewords (u | u + v) for all u in C1 and v in C2 ## InstallMethod(UUVCode, "method for linear codes", true, [IsLinearCode, IsLinearCode], 0, function(C1, C2) local C, F, diff, zeros, zeros2, G, n; if LeftActingDomain(C1)<>LeftActingDomain(C2) then Error("Codes are not in the same basefield"); fi; F := LeftActingDomain(C1); n := WordLength(C1)+Maximum(WordLength(C1),WordLength(C2)); diff := WordLength(C1)-WordLength(C2); zeros := NullVector(WordLength(C1), F); zeros2 := NullVector(AbsInt(diff), F); if diff < 0 then G := List(GeneratorMat(C1),u -> Concatenation(u,u,zeros2)); Append(G,List(GeneratorMat(C2),v -> Concatenation(zeros,v))); else G:=List(GeneratorMat(C1),u -> Concatenation(u,u)); Append(G,List(GeneratorMat(C2),v->Concatenation(zeros,v,zeros2))); fi; C := GeneratorMatCode( G, "U|U+V construction code", F ); if Dimension(C1) = 0 then if Dimension(C2) = 0 then C!.lowerBoundMinimumDistance := n; C!.upperBoundMinimumDistance := n; else C!.lowerBoundMinimumDistance := LowerBoundMinimumDistance(C2); C!.upperBoundMinimumDistance := UpperBoundMinimumDistance(C2); fi; elif Dimension(C2) = 0 then C!.lowerBoundMinimumDistance := 2*LowerBoundMinimumDistance(C1); C!.upperBoundMinimumDistance := 2*UpperBoundMinimumDistance(C1); else C!.lowerBoundMinimumDistance := Minimum( 2*LowerBoundMinimumDistance(C1),LowerBoundMinimumDistance(C2)); C!.upperBoundMinimumDistance := Minimum( 2*UpperBoundMinimumDistance(C1),UpperBoundMinimumDistance(C2)); fi; C!.history := MergeHistories(History(C1), History(C2)); return C; end); InstallMethod(UUVCode, "method for unrestricted codes", true, [IsCode, IsCode], 0, function(C1, C2) local C, F, i, M1, diff, zeros, extended, Els1, Els2, els, n; if LeftActingDomain(C1)<>LeftActingDomain(C2) then Error("Codes are not in the same basefield"); elif IsLinearCode(C1) and IsLinearCode(C2) then return UUVCode(C1, C2); fi; F := LeftActingDomain(C1); n := WordLength(C1)+Maximum(WordLength(C1),WordLength(C2)); diff := WordLength(C1)-WordLength(C2); M1 := Size(C1); zeros := NullVector(AbsInt(diff), F); els := []; Els1 := AsSSortedList(C1); Els2 := AsSSortedList(C2); if diff>0 then extended := List(Els2,x->Concatenation(VectorCodeword(x),zeros)); for i in [1..M1] do Append(els, List(extended,x-> Concatenation(VectorCodeword(Els1[i]), VectorCodeword(Els1[i]) + x ) ) ); od; elif diff<0 then for i in [1..M1] do extended := Concatenation(VectorCodeword(Els1[i]),zeros); Append(els,List(Els2,x-> Concatenation(VectorCodeword(Els1[i]), extended + VectorCodeword(x) ) ) ); od; else for i in [1..M1] do Append(els,List(Els2,x-> Concatenation(VectorCodeword(Els1[i]), VectorCodeword(Els1[i]) + VectorCodeword(x) ) ) ); od; fi; C := ElementsCode(els, "U|U+V construction code", F); C!.lowerBoundMinimumDistance := Minimum(2*LowerBoundMinimumDistance(C1), LowerBoundMinimumDistance(C2)); C!.upperBoundMinimumDistance := Minimum(2*UpperBoundMinimumDistance(C1), UpperBoundMinimumDistance(C2)); C!.history := MergeHistories(History(C1), History(C2)); return C; end); ############################################################################# ## #F UnionCode( , ) . . . . . . . . . . . . . union of and ## InstallMethod(UnionCode, "method for two linear codes", true, [IsLinearCode, IsLinearCode], 0, function(C1, C2) local C, Els, e; if LeftActingDomain(C1) <> LeftActingDomain(C2) then Error("codes are not in the same basefield"); elif WordLength(C1) <> WordLength(C2) then Error("wordlength must be the same"); fi; C := AugmentedCode(C1, GeneratorMat(C2)); C!.upperBoundMinimumDistance := Minimum(UpperBoundMinimumDistance(C1), UpperBoundMinimumDistance(C2)); C!.history := MergeHistories(History(C1), History(C2)); C!.name := "union code"; return C; end); # should there be a special function for cyclic codes? Or in other words: # If C1 and C2 are cyclic, does that mean that UnionCode(C1, C2) is cyclic? InstallMethod(UnionCode, "method for one or both unrestricted codes", true, [IsCode, IsCode], 0, function(C1, C2) if IsLinearCode(C1) and IsLinearCode(C2) then return UnionCode(C1,C2); else Error("use AddedElementsCode for non-linear codes"); fi; end); ############################################################################# ## #F IntersectionCode( , ) . . . . . . intersection of and ## InstallMethod(IntersectionCode, "method for unrestricted codes", true, [IsCode, IsCode], 0, function(C1, C2) local C, Els, e; if (IsCyclicCode(C1) and IsCyclicCode(C2)) or (IsLinearCode(C1) and IsLinearCode(C2)) then return IntersectionCode(C1, C2); fi; if LeftActingDomain(C1) <> LeftActingDomain(C2) then Error("codes are not in the same basefield"); elif WordLength(C1) <> WordLength(C2) then Error("wordlength must be the same"); fi; Els := []; for e in AsSSortedList(C1) do if e in C2 then Add(Els, e); fi; od; if Els = [] then return false; # or an Error? else C := ElementsCode(Els, "intersection code", LeftActingDomain(C1)); fi; C!.lowerBoundMinimumDistance := Maximum(LowerBoundMinimumDistance(C1), LowerBoundMinimumDistance(C2)); C!.history := MergeHistories(History(C1), History(C2)); return C; end); InstallMethod(IntersectionCode, "method for linear codes", true, [IsLinearCode, IsLinearCode], 0, function(C1, C2) local C; if IsCyclicCode(C1) and IsCyclicCode(C2) then return IntersectionCode(C1, C2); fi; if LeftActingDomain(C1) <> LeftActingDomain(C2) then Error("codes are not in the same basefield"); elif WordLength(C1) <> WordLength(C2) then Error("wordlength must be the same"); fi; C := DualCode(AugmentedCode(DualCode(C1), CheckMat(C2))); C!.lowerBoundMinimumDistance := Maximum(LowerBoundMinimumDistance(C1), LowerBoundMinimumDistance(C2)); C!.history := MergeHistories(History(C1), History(C2)); C!.name := "intersection code"; return C; end); InstallMethod(IntersectionCode, "method for cyclic codes", true, [IsCyclicCode, IsCyclicCode], 0, function(C1, C2) local C; if LeftActingDomain(C1) <> LeftActingDomain(C2) then Error("codes are not in the same basefield"); elif WordLength(C1) <> WordLength(C2) then Error("wordlength must be the same"); fi; C := GeneratorPolCode( Lcm(GeneratorPol(C1), GeneratorPol(C2)), WordLength(C1), "intersection code", LeftActingDomain(C1) ); if HasRootsOfCode(C1) and HasRootsOfCode(C2) then SetRootsOfCode(C, UnionSet(RootsOfCode(C1), RootsOfCode(C2))); fi; C!.lowerBoundMinimumDistance := Maximum(LowerBoundMinimumDistance(C1), LowerBoundMinimumDistance(C2)); C!.history := MergeHistories(History(C1), History(C2)); return C; end); ############################################################################# ## #F ConstructionXCode( , ) ... code from Construction X ## ## InstallMethod(ConstructionXCode, "linear code constructed using Construction X", true, [IsList, IsList], 0, function( C, A ) # # Construction X (see N. Sloane, S. Reddy and C. Chen, ``New binary codes,'' # IEEE Trans. Inform. Theory, vol. IT-18, pp. 503-510, # Jul. 1972 # ) # # Consider a list of linear codes of the same length N, C := [ C_1, C_2, ... , C_j ], # where the parameter of ith code, C_i, is [N, K_i, D_i] and C_1 > C_2 > ... > C_j. # Consider a list of (Size(C)-1) auxiliary linear codes A := [ A_1, A_2, ..., A_{j-1} ] # where the parameter of ith code A_i is [n_i, k_i=(K_1-K_{i+1}), d_i], a [n, k, d] # can be constructed where n = N + (n_1 + n_2 + ... + n_{j-1}), k = K_1, and # d = min{ D_j, D_{j-1} + d_{j-1}, D_{j-2} + d_{j-2} + d_{j-1}, ..., D_1 + (d_1 + # ... + d_{j-1}) }. # local i, j, k, p, r, K, S, GC, GA, GX, CX, ZeroVec; # Make sure list C contains all linear codes if (PositionNot( List([1..Size(C)], i->IsLinearCode(C[i])), true ) < Size(C)) then Error("The list C contains non linear code(s)\n"); return (0); fi; # Make sure list A contains all linear codes if (PositionNot( List([1..Size(A)], i->IsLinearCode(A[i])), true ) < Size(A)) then Error("The list A contains non linear code(s)\n"); return (0); fi; # Make sure all codes in C and A have the same LeftActingDomain K:=Filtered([2..Size(C)], i->LeftActingDomain(C[i]) <> LeftActingDomain(C[1]));; if Size(K) > 0 then Error("Codes in C are not of the same left-acting-domain\n"); fi; S:=Filtered([2..Size(A)], i->LeftActingDomain(A[i]) <> LeftActingDomain(A[1]));; if Size(S) > 0 then Error("Codes in A are not of the same left-acting-domain\n"); fi; if LeftActingDomain(C[1]) <> LeftActingDomain(A[1]) then Error("Codes in C and A are of different left-acting-domain\n"); fi; # Ensure that Dimension(C[1]) < Dimension(C[2]) < ... < Dimension(C[j]), i.e. we need to sort them K:=List([1..Size(C)], i->Dimension(C[i]));; S:=List([1..Size(C)], i->Dimension(C[i]));; Sort(S);; C:=List([1..Size(K)], i->C[Position(K, S[i])]);; # Need to make sure that C[1] < C[2] < ... < C[j], i.e. subset if (PositionNot(List([0..Size(C)-2], i->IsSubset(C[Size(C)-i], C[Size(C)-i-1])), true) < Size(C)-1) then Error("Inappropriate chain of codes\n"); fi; # Now, ensure that codes in A are sorted such that their dimensions are in accending order K:=List([1..Size(A)], i->Dimension(A[i]));; S:=List([1..Size(A)], i->Dimension(A[i]));; Sort(S);; A:=List([1..Size(K)], i->A[Position(K, S[i])]);; # Number codes in A should be 1 less than that in C if (Size(A) <> Size(C)-1) then Error("Inappropriate list of codes given\n"); fi; # Need to make sure that the dimension of each of the auxiliary codes (codes in A) # is equal to the difference in dimension between the appropriate pair of codes in C. for i in [1..Size(A)] do; if (Dimension(A[i]) <> (Dimension(C[Size(C)])-Dimension(C[Size(C)-i]))) then Error("Inappropriate auxiliary codes\n"); fi; od; # Generator matrices of the chain codes GC:=List([1..Size(C)], i->ShallowCopy(GeneratorMat(C[i])));; GA:=List([1..Size(A)], i->ShallowCopy(GeneratorMat(A[i])));; # Generator matrix of the largest code in chain format GX:=GC[Size(C)];; i:=1;; p:=1;; while (i < Size(C)) do for j in [p..Dimension(C[i])] do; GX[p] := GC[i][j]; p := p + 1; od; i := i + 1; od; GX:=ShallowCopy(GX);; # Add the G matrix of the tail codes k:=Dimension(C[Size(C)]);; for i in [1..Size(A)] do r:=1;; ZeroVec:=List([1..CodeLength(A[i])], i->Zero( LeftActingDomain(C[1]) ));; while (r <= k-Dimension(A[i])) do GX[r]:=ShallowCopy(GX[r]);; Append(GX[r], ZeroVec);; r := r + 1;; od; j:=1;; while (r <= k) do GX[r]:=ShallowCopy(GX[r]);; Append(GX[r], GA[i][j]);; j := j + 1;; r := r + 1;; od; od; CX:=GeneratorMatCode(GX, "Construction X code", LeftActingDomain(C[1])); K:=[C[1]!.lowerBoundMinimumDistance];; S:=[C[1]!.upperBoundMinimumDistance];; i:=1;; while (i <= Size(A)) do; r:=0;; p:=0;; for j in [1..i] do; r := r + A[Size(A)-j+1]!.lowerBoundMinimumDistance; p := p + A[Size(A)-j+1]!.upperBoundMinimumDistance; od; Append(K, [r + C[i+1]!.lowerBoundMinimumDistance]); Append(S, [p + C[i+1]!.upperBoundMinimumDistance]); i := i + 1; od; CX!.lowerBoundMinimumDistance := Minimum(K);; CX!.upperBoundMinimumDistance := Minimum(S);; # This can be displayed using Display(C) or History(C). This shows the # componenet codes that are used to construct the concatenated code CX!.history := [ Concatenation(String("Base codes: "), String(C)), Concatenation(String("Auxiliary codes: "), String(A)) ]; return CX; end); ######################################################################################### ## #F ConstructionXXCode( , , , , ) ... code from Construction XX ## ## InstallMethod(ConstructionXXCode, "linear code constructed using Construction XX", true, [IsCode, IsCode, IsCode, IsCode, IsCode], 0, function( C1, C2, C3, A1, A2 ) # # Construction XX (see W.O. Alltop, ``A method for extending binary linear codes,'' # IEEE Trans. Inform. Theory, vol. 30, pp. 871-872, 1984 # ) # # Consider a set of linear codes of the same length n, C1 [n, k_1, d_1], C2 [n, k_2, d_2] # and C3 [n, k_3, d_3] such that C1 contains C2, C1 contains C3 and C4 [n,k_4,d_4] is the # intersection code of C2 and C3. Given two auxiliary codes A1 [n_1, k_1-k-2, e_1] and # A2 [n_2, k_1-k_3, e_2], there exists a [n + n_1 + n_2, k_1, d] CXX code where # d = min{d_4, d_3 + e_1, d_2 + e_2, d_1 + e_1 + e_2}. # # The codewords of CXX can be partitioned into 3 sections ( v | a | b ) where v has length # n, a has length n_1 and b has length n_2. A codeword from Construction XX takes the form: # ( v | 0...0 | 0...0 ) if v is a codeword of C4, # ( v | a_1 | 0...0 ) if v is a codeword of C3\C4, # ( v | 0...0 | a_2 ) if v is a codeword of C2\C4, # ( v | a_1 | a_2 ) otherwise. # local i, q, p, a1, a2, K, L, U, G1, G2, G3, G4, C4, GA1, GA2, GXX, CXX, ZeroVec1, ZeroVec2; # Make sure all codes are linear if ( (IsLinearCode(C1) = false) or (IsLinearCode(C2) = false) or (IsLinearCode(C3) = false) or (IsLinearCode(A1) = false) or (IsLinearCode(A2) = false) ) then Error("Not all codes are linear\n"); fi; # Make sure all codes have the same LeftActingDomain q:=LeftActingDomain(C1);; if ((LeftActingDomain(C2) <> q) or (LeftActingDomain(C3) <> q) or (LeftActingDomain(A1) <> q) or (LeftActingDomain(A2) <> q)) then Error("Not all codes have the same left-acting-domain\n"); fi; # Ensure that Dimension(C[1]) > Dimension(C[2]) > ... > Dimension(C[j]), i.e. we need to sort them if (Dimension(C1) < Dimension(C2)) then if (Dimension(C1) > Dimension(C3)) then K:=C1;; C1:=C2;; C2:=K;; else if (Dimension(C2) > Dimension(C3)) then K:=C1;; C1:=C2;; C2:=C3;; C3:=K;; else K:=C1;; C1:=C3;; C3:=K;; fi; fi; fi; # Need to make sure that C[1] > C[2] and C[1] > C[3], i.e. superset if (IsSubset(C1, C2) = false or IsSubset(C1, C3) = false) then Error("Inappropriate chain of codes, C1 must contain C2 and must also contain C3\n"); fi; # Now, ensure that codes in A1 and A2 has the right dimension if (Dimension(A1) <> Dimension(C1)-Dimension(C2)) then Error("Inappropriate auxiliary code A1, dim(A1) <> dim(C1)-dim(C2)\n"); fi; if (Dimension(A2) <> Dimension(C1)-Dimension(C3)) then Error("Inappropriate auxiliary code A2, dim(A2) <> dim(C1)-dim(C3)\n"); fi; C4:=IntersectionCode(C2,C3); L:=[];; U:=[];; Append(L, [LowerBoundMinimumDistance(C1) + LowerBoundMinimumDistance(A1) + LowerBoundMinimumDistance(A2)]);; Append(L, [LowerBoundMinimumDistance(C2) + LowerBoundMinimumDistance(A2)]);; Append(L, [LowerBoundMinimumDistance(C3) + LowerBoundMinimumDistance(A1)]);; Append(U, [UpperBoundMinimumDistance(C1) + UpperBoundMinimumDistance(A1) + UpperBoundMinimumDistance(A2)]);; Append(U, [UpperBoundMinimumDistance(C2) + UpperBoundMinimumDistance(A2)]);; Append(U, [UpperBoundMinimumDistance(C3) + UpperBoundMinimumDistance(A1)]);; Append(L, [LowerBoundMinimumDistance(C4)]);; Append(U, [UpperBoundMinimumDistance(C4)]);; # Generator matrices of the chain codes G1 :=ShallowCopy(GeneratorMat(C1));; G2 :=ShallowCopy(GeneratorMat(C2));; G3 :=ShallowCopy(GeneratorMat(C3));; G4 :=ShallowCopy(GeneratorMat(C4));; GA1:=ShallowCopy(GeneratorMat(A1));; GA2:=ShallowCopy(GeneratorMat(A2));; # Generator matrix of the largest code in chain format GXX:=G1;; GXX:=ShallowCopy(GXX);; p:=1;; a1:=1;; a2:=1;; ZeroVec1:=List([1..CodeLength(A1)], i->Zero(q));; ZeroVec2:=List([1..CodeLength(A2)], i->Zero(q));; for i in [1..Dimension(C4)] do; # G(C_4) on the top k_4 rows GXX[i] := ShallowCopy(G4[i]);; Append(GXX[i], ZeroVec1);; Append(GXX[i], ZeroVec2);; p := p + 1;; od; for i in [1..(Dimension(C2)-Dimension(C4))] do; # Proper coset of C4 in C2 GXX[p] := ShallowCopy(G2[Dimension(C4)+i]);; GA2[a2] := ShallowCopy(GA2[a2]);; Append(GXX[p], ZeroVec1);; Append(GXX[p], GA2[a2]);; p := p + 1;; a2:=a2+1;; od; for i in [1..(Dimension(C3)-Dimension(C4))] do; # Proper coset of C4 in C3 GXX[p] := ShallowCopy(G3[Dimension(C4)+i]);; GA1[a1] := ShallowCopy(GA1[a1]);; Append(GXX[p], GA1[a1]);; Append(GXX[p], ZeroVec2);; p := p + 1;; a1:=a1+1;; od; for i in [1..(Dimension(C1)-(Dimension(C2)+Dimension(C3)-Dimension(C4)))] do; GXX[p] := ShallowCopy(G1[p]);; GA1[a1] := ShallowCopy(GA1[a1]);; GA2[a2] := ShallowCopy(GA2[a2]);; Append(GXX[p], GA1[a1]);; Append(GXX[p], GA2[a2]);; p := p + 1;; a1:=a1+1;; a2:=a2+1;; od; CXX:=GeneratorMatCode(GXX, "Construction XX code", q); CXX!.lowerBoundMinimumDistance := Minimum(L); CXX!.upperBoundMinimumDistance := Minimum(U); # This can be displayed using Display(C) or History(C). This shows the # componenet codes that are used to construct this code CXX!.history := [ Concatenation(String("C1: "), String(C1)), Concatenation(String("C2: "), String(C2)), Concatenation(String("C3: "), String(C3)), Concatenation(String("A1: "), String(A1)), Concatenation(String("A2: "), String(A2)) ]; return CXX; end); ######################################################################### ## #F BZCode( , ) . . . . . . . . . . Blokh Zyablov concatenated code ## ## Given a set of outer codes O_i=[N, K_i, D_i] over GF(q^e_i), where ## i=1,2,...,t and a set of inner codes I_i=[n, k_i, d_i] over GF(q), ## BZCode returns a multilevel concatenated code with parameter ## [ n*N, e_1*K_1 + e_2*K_2 + ... + e_t*K_t, min(d_i * D_i)] over GF(q). ## ## Note that the set inner codes must satisfy chain condition, i.e. ## I_1=[n,k_1,d_1] < I_2=[n,k_2,d_2] < ... < I_t=[n,k_t,d_t] where ## 0=k_0 < k_1 < k_2 < ... < k_t. ## ## The dimensions of the inner code must satisfy the condition ## e_i = k_i - k_{i-1}, where GF(q^e_i) is the field of the ith ## outer code. ## __G_BZCode := function(O, I) local encode_code, VectorRep, i, j, l, e, u, v, ik, n, k, F, G, GIBZ, GOBZ, M, L, oi, oj, cw; # Two helper functions ... encode_code := function(u, G) return (u * G); end; VectorRep := function(e, F) local a, f, MF; if IsZero(e) then; return List([1..LogInt(Size(F), Characteristic(F))], i->Zero(GF(Characteristic(F)))); fi; a := PrimitiveElement(F); f := MinimalPolynomial( GF(Characteristic(F)), a); MF:= CompanionMat( f ); return TransposedMat(MF^LogFFE(e, a))[1]; end; # Make sure that both O and I have the same number of codes if Size(O) <> Size(I) then Error("Unequal number of inner and outer codes\n"); fi; # Make sure list O (outer codes) contains all linear codes if (PositionNot( List([1..Size(O)], i->IsLinearCode(O[i])), true ) < Size(O)) then Error("The list O contains non linear code(s)\n"); fi; # Make sure list I (inner codes) contains all linear codes if (PositionNot( List([1..Size(I)], i->IsLinearCode(I[i])), true ) < Size(I)) then Error("The list I contains non linear code(s)\n"); fi; # Make sure that all outer codes have the same length if (PositionNot(List([1..Size(O)], i->CodeLength(O[i])), CodeLength(O[1])) < Size(O)) then Error("Code lengths of all outer codes are required to be the same\n"); fi; # Need to make sure that I[1] < I[2] < ... < I[s], i.e. subset if (PositionNot(List([0..Size(I)-2], i->IsSubset(I[Size(I)-i], I[Size(I)-i-1])), true) < Size(I)-1) then Error("Inappropriate chain of inner codes\n"); fi; # Make sure that e_i = k_i - k_{i-1} where k_i is the dimension of the ith inner code ik := [0]; for i in [1..Size(I)] do; Append(ik, [ Dimension(I[i]) ]); od; for i in [1..Size(I)] do; e := ik[i+1] - ik[i]; if GF(Characteristic(LeftActingDomain(O[i]))^e) <> LeftActingDomain(O[i]) then Error("Field size of outer code O[", i, "] does not equal to the difference in dimension between the inner code I[", i, "] and that of inner code I[", i-1, "]\n"); return (0); fi; od; # Generator matrix of the inner codes (in chain form) GIBZ := []; for i in [1..Size(I)] do; G := ShallowCopy( GeneratorMat(I[i]) ); TriangulizeMat(G); for j in [1..(ik[i+1] - ik[i])] do; Append(GIBZ, [ G[ik[i] + j] ]); od; od; # Generator matrix of the outer codes -- in reduced-echelon form GOBZ := []; for i in [1..Size(O)] do; G := ShallowCopy( GeneratorMat(O[i]) ); TriangulizeMat(G); Append(GOBZ, [ G ]); od; # What are the length and dimension of the resulting concatenated code? n := CodeLength(O[1]) * CodeLength(I[1]); k := Sum(List([1..Size(O)], i->(Dimension(O[i]) * (ik[i+1] - ik[i])))); # Construct the generator matrix of the BZ code v := []; for i in [1..Size(O)] do; Append(v, [ List([1..Dimension(O[i])], x->Zero(LeftActingDomain(O[i]))) ]); od; G := []; for i in [1..Size(O)] do; F := LeftActingDomain(O[i]); # Enumerate all elements of F L := [ Zero(F) ]; for j in [1..(Size(F)-1)] do; Append(L, [ PrimitiveElement(F)^j ]); od; e := ik[i+1] - ik[i]; for j in [1..Dimension(O[i])] do; for l in [1..e] do; v[i][j] := L[l+1]; cw := []; for oi in [1..Size(O)] do; Append(cw, [ encode_code(v[oi], GOBZ[oi]) ]); od; M := []; for oj in [1..Length(cw[1])] do; u := []; for oi in [1..Size(O)] do; Append(u, VectorRep(cw[oi][oj], LeftActingDomain(O[oi]))); od; Append(M, encode_code(u, GIBZ)); od; Append(G, [ M ]); v[i][j] := Zero(LeftActingDomain(O[i])); od; od; od; if Rank(G) < k then Error("Cannot build the generator matrix of the concatenated code. Please report this to and supply the list of your inner and outer codes\n"); fi; return G; end; InstallMethod(BZCode, "linear code constructed using Blokh Zyablov concatenation", true, [IsList, IsList], 0, function( O, I ) local G, C; # Obtain generator matrix G := __G_BZCode(O, I); C := GeneratorMatCode(G, "Blokh Zyablov concatenated code", LeftActingDomain(I[1])); C!.GeneratorMat := ShallowCopy(G); # Upper- and lower-bound of minimum distance C!.lowerBoundMinimumDistance := Minimum( List([1..Size(O)], i->O[i]!.lowerBoundMinimumDistance * I[i]!.lowerBoundMinimumDistance) ); C!.upperBoundMinimumDistance := Minimum( List([1..Size(O)], i->O[i]!.upperBoundMinimumDistance * I[i]!.upperBoundMinimumDistance) ); # This can be displayed using Display(C) or History(C). This shows the # componenet codes that are used to construct the concatenated code C!.history := [ Concatenation(String("Inner codes: "), String(I)), Concatenation(String("Outer codes: "), String(O)) ]; return C; end); # Faster version - without covering radius estimation InstallMethod(BZCodeNC, "linear code constructed using Blokh Zyablov concatenation", true, [IsList, IsList], 0, function( O, I ) local G, C; # Obtain generator matrix G := __G_BZCode(O, I); C := GeneratorMatCodeNC(G, LeftActingDomain(I[1])); C!.GeneratorMat := ShallowCopy(G); C!.name := "Blokh Zyablov concatenated code"; # Upper- and lower-bound of minimum distance C!.lowerBoundMinimumDistance := Minimum( List([1..Size(O)], i->O[i]!.lowerBoundMinimumDistance * I[i]!.lowerBoundMinimumDistance) ); C!.upperBoundMinimumDistance := Minimum( List([1..Size(O)], i->O[i]!.upperBoundMinimumDistance * I[i]!.upperBoundMinimumDistance) ); # Set covering radius to unknown C!.boundsCoveringRadius := [ 0, WordLength(C) ]; # This can be displayed using Display(C) or History(C). This shows the # componenet codes that are used to construct the concatenated code C!.history := [ Concatenation(String("Inner codes: "), String(I)), Concatenation(String("Outer codes: "), String(O)) ]; return C; end); guava-3.6/lib/codeops.gd0000644017361200001450000003571511026723452015075 0ustar tabbottcrontab############################################################################# ## #A codeops.gd GUAVA Reinald Baart #A &Jasper Cramwinckel #A &Erik Roijackers ## ## All the code operations ## #H @(#)$Id: codeops.gd,v 1.5 2003/02/12 03:49:17 gap Exp $ ## ## 20 Dec 07 14:24 (CJ) added IsDoublyEvenCode, IsSinglyEvenCode ## and IsEvenCode functions ## Revision.("guava/lib/codeops_gd") := "@(#)$Id: codeops.gd,v 1.5 2003/02/12 03:49:17 gap Exp $"; ############################################################################# ## #F WordLength( ) . . . . . . . . . . . . length of the codewords of ## ############################################################################# ## #F IsLinearCode( ) . . . . . . . . . . . . . . . checks if is linear ## ## If so, the record fields will be adjusted to the linear representation ## DeclareProperty("IsLinearCode", IsCode); ############################################################################# ## #F Redundancy( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . ## ## DeclareAttribute("Redundancy", IsCode); ############################################################################# ## #F GeneratorMat(C) . . . . . finds the generator matrix belonging to code C ## ## Pre: C should contain a generator or check matrix ## DeclareAttribute("GeneratorMat", IsCode); ############################################################################# ## #F CheckMat( ) . . . . . . . finds the check matrix belonging to code C ## ## Pre: should be a linear code ## DeclareAttribute("CheckMat", IsCode); ############################################################################# ## #F IsCyclicCode( ) . . . . . . . . . . . . . . . . . . . . . . . . . . ## DeclareProperty("IsCyclicCode", IsLinearCode); ############################################################################# ## #F GeneratorPol( ) . . . . . . . . returns the generator polynomial of C ## ## Pre: C must have a generator or check polynomial ## DeclareAttribute("GeneratorPol", IsCode); ############################################################################# ## #F CheckPol( ) . . . . . . . . returns the parity check polynomial of C ## ## Pre: C must have a generator or check polynomial ## DeclareAttribute("CheckPol", IsCode); ############################################################################# ## #F MinimumDistance( [, ] ) . . . . determines the minimum distance ## ## MinimumDistance( ) determines the minimum distance of ## MinimumDistance( , ) determines the minimum distance to a word ## DeclareAttribute("MinimumDistance", IsCode); ############################################################################# ## #F MinimumDistanceCodeword( [, ] ) . . . . determines the minimum distance ## having minimum distance to w ## (w= zero vector is the default) ## MinimumDistance( , ) determines the minimum distance to a word ## DeclareAttribute("MinimumDistanceCodeword", IsCode); ############################################################################# ## ## MinimumDistanceLeon( ) determines the minimum distance of ## DeclareAttribute("MinimumDistanceLeon", IsLinearCode); ############################################################################# ## #F DesignedDistance( arg ) . . . . . . . . . . . . . . . . . . . . . . . . ## ## Cannot be calculated. Must be set at creation, if at all. DeclareAttribute("DesignedDistance", IsCode); ############################################################################# ## #F LowerBoundMinimumDistance( arg ) . . . . . . . . . . . . . . . . . . . ## DeclareOperation("LowerBoundMinimumDistance", [IsCode]); ############################################################################# ## #F UpperBoundMinimumDistance( arg ) . . . . . . . . . . . . . . . . . . . ## DeclareOperation("UpperBoundMinimumDistance", [IsCode]); ############################################################################# ## #F UpperBoundOptimalMinimumDistance( arg ) . . . . . . . . . . . . . . . . ## ## UpperBoundMinimumDistance of optimal code with same parameters ## DeclareAttribute("UpperBoundOptimalMinimumDistance", IsCode); ############################################################################# ## #F MinimumWeightOfGenerators( arg ) . . . . . . . . . . . . . . . . . . . . ## ## DeclareAttribute("MinimumWeightOfGenerators", IsCode); ############################################################################# ## #F MinimumWeightWords( ) . . . returns the code words of minimum weight ## DeclareAttribute("MinimumWeightWords", IsCode); ############################################################################# ## #F WeightDistribution( ) . . . returns the weight distribution of a code ## DeclareAttribute("WeightDistribution", IsCode); ############################################################################# ## #F InnerDistribution( ) . . . . . . the inner distribution of the code ## ## The average distance distribution of distances between all codewords ## DeclareAttribute("InnerDistribution", IsCode); ############################################################################# ## #F OuterDistribution( ) . . . . . . . . . . . . . . . . . . . . . . . ## ## the number of codewords on a distance i from all elements of GF(q)^n ## DeclareAttribute("OuterDistribution", IsCode); ############################################################################# ## #F CodewordVector( , ) ## ## returns the element of the code corresponding to the coefficient ## list . This is a synonym for \* for codes DeclareOperation("CodewordVector", [IsList, IsCode]); ############################################################################# ## #F InformationWord( C, c ) . . . . . . . "decodes" a codeword in C to the ## information "message" word m, so m*C=c ## DeclareOperation("InformationWord", [IsCode,IsCodeword]); ############################################################################# ## #F IsSelfDualCode( ) . . . . . . . . . determines whether C is self dual ## ## i.o.w. each codeword is orthogonal to all codewords (including itself) ## DeclareProperty("IsSelfDualCode", IsCode); ############################################################################# ## #F \*( , ) . . . . . the codeword belonging to information vector x ## ## only valid if C is linear! ## ############################################################################# ## #F \+( , ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . ## ## ############################################################################# ## #F \in( , ) . . . . . . true if the vector is an element of the code ## ## ############################################################################# ## #F \=( , ) . . . . . tests if Set(Elements(C1))=Set(Elements(C2)) ## ## Post: returns a boolean ## ############################################################################# ## #F SyndromeTable ( ) . . . . . . . . . . . . . . . a Syndrome table of C ## DeclareAttribute("SyndromeTable", IsCode); ############################################################################# ## #F StandardArray( ) . . . . . . . . . . . . a standard array for code C ## ## Post: returns a 3D-matrix. The first row contains all the codewords of C. ## The other rows contain the cosets, preceded by their coset leaders. ## DeclareAttribute("StandardArray", IsCode); ############################################################################# ## #F AutomorphismGroup( ) . . . . . . . . the automorphism group of code ## ## The automorphism group is the largest permutation group of degree n such ## that for each permutation in the group C' = C. Binary codes only. Calls ## Leon's C code. ## DeclareAttribute("AutomorphismGroup", IsCode); ############################################################################# ## #F PermutationGroup( ) . . . . . . . . the permutation group of code ## ## The largest permutation group of degree n such ## that for each permutation pn in the group pC = C. Written in GAP. ## May be removed in future versions. ## DeclareAttribute("PermutationGroup", IsCode); ############################################################################# ## #F PermutationAutomorphismGroup( ) . . . . the permutation group of code ## ## The largest permutation group of degree n such ## that for each permutation pn in the group pC = C. Written in GAP. ## DeclareAttribute("PermutationAutomorphismGroup", IsCode); ############################################################################# ## #F IsSelfOrthogonalCode( ) . . . . . . . . . . . . . . . . . . . . . . ## DeclareProperty("IsSelfOrthogonalCode", IsCode); ############################################################################# ## #F IsDoublyEvenCode( ) . . . . . . . . . . . . . . . . . . . . . . . . ## ## Return true if and only if the code C is a binary linear code which has ## all codewords of weight divisible by 4 only. ## ## If a binary linear code is self-orthogonal and the weight of each row ## in its generator matrix is divisibly by 4, the code is doubly-even ## (see Theorem 1.4.8 in W. C. Huffman and V. Pless, "Fundamentals of ## error-correcting codes", Cambridge Univ. Press, 2003.) ## DeclareProperty("IsDoublyEvenCode", IsLinearCode); ############################################################################# ## #F IsSinglyEvenCode( ) . . . . . . . . . . . . . . . . . . . . . . . . ## ## Return true if and only if the code C is a self-orthogonal binary linear ## code which is not doubly-even. ## DeclareProperty("IsSinglyEvenCode", IsLinearCode); ############################################################################# ## #F IsEvenCode( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . ## ## Return true if and only if the code C is a binary linear code which has ## even weight codewords--regardless whether or not it is self-orgthogonal. ## DeclareProperty("IsEvenCode", IsLinearCode); ############################################################################# ## #F CodeIsomorphism( , ) . . the permutation that translates C1 into #F C2 if C1 and C2 are equivalent, or false otherwise ## DeclareOperation("CodeIsomorphism", [IsCode, IsCode]); ############################################################################# ## #F IsEquivalent( , ) . . . . . . true if C1 and C2 are equivalent ## ## that is if there exists a permutation that transforms C1 into C2. ## If returnperm is true, this permutation (if it exists) is returned; ## else the function only returns true or false. ## DeclareOperation("IsEquivalent", [IsCode, IsCode]); ############################################################################# ## #F RootsOfCode( ) . . . . the roots of the generator polynomial of ## ## It finds the roots by trying all elements of the extension field ## DeclareAttribute("RootsOfCode", IsCode); ############################################################################# ## #F DistancesDistribution( , ) . . . distribution of distances from a #F word w to all codewords of C ## DeclareOperation("DistancesDistribution", [IsCode, IsCodeword]); ############################################################################# ## #F Syndrome( , ) . . . . . . . the syndrome of word in code ## DeclareOperation("Syndrome", [IsCode, IsCodeword]); ############################################################################# ## #F CodewordNr( , ) . . . . . . . . . . . . . . . . . elements(C)[i] ## DeclareOperation("CodewordNr", [IsCode, IsList]); ############################################################################# ## #F String( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ## ## ############################################################################# ## #F CodeDescription( ) . . . . . . . . . . . . . . . . . . . . . . . . . ## DeclareOperation("CodeDescription", [IsCode]); ############################################################################# ## #F Print( ) . . . . . . . . . . . . . prints short information about C ## ## ############################################################################# ## #F Display( ) . . . . . . . . . . . . prints the history of the code C ## ## ############################################################################# ## #F Save( , , ) . . . . . writes the code C to a file ## ## with variable name var-name. It can be read back by calling ## Read (filename); the code then has the name var-name. ## All fields of the code record are stored except, ## in case of a linear or cyclic code, the elements. ## Pre: filename is accessible for writing ## DeclareOperation("Save", [IsString, IsCode, IsString]); ############################################################################# ## #F History( ) . . . . . . . . . . . . . . . shows the history of a code ## DeclareOperation("History", [IsCode]); ###################################################################################### #F MinimumDistanceRandom( , , ) ## ## This is a simpler version than Leon's method, which does not put G in st form. ## (this works welland is in some cases faster than the st form one) ## Input: C is a linear code ## num is an integer >0 which represents the number of iterations ## s is an integer between 1 and n which represents the columns considered ## in the algorithm. ## Output: an integer >= min dist(C), and hopefully equal to it! ## a codework of that weight ## ## Algorithm: randomly permute the columns of the gen mat G of C ## by a permutation rho - call new mat Gp ## break Gp into (A,B), where A is kxs and B is kx(n-s) ## compute code C_A generated by rows of A ## find min weight codeword c_A of C_A and w_A=wt(c_A) ## using AClosestVectorCombinationsMatFFEVecFFECoords ## extend c_A to a corresponding codeword c_p in C_Gp ## return c=rho^(-1)(c_p) and wt=wt(c_p)=wt(c) ## DeclareOperation("MinimumDistanceRandom",[IsCode,IsInt,IsInt]); ############################################################################ #F MinimumWeight( ) ## ## This function calls an external C program to compute the minimum Hamming ## weight of a linear code over GF(2) and GF(3). The external program is ## "minimum-weight" ## ## Author: CJ, Tjhai ## DeclareAttribute("MinimumWeight", IsLinearCode); guava-3.6/lib/util2.gi0000644017361200001450000002770311026723452014503 0ustar tabbottcrontab############################################################################# ## #A util2.gi GUAVA library Reinald Baart #A &Jasper Cramwinckel #A &Erik Roijackers ## &David Joyner ## ## This file contains miscellaneous functions ## #H @(#)$Id: util2.gi,v 1.99 09/23/2004 gap Exp $ ## ## minor bug in SortedGaloisFieldElements fixed 9-24-2004 ## several functions added 12-16-2005 MostCommonInList, ## MultiplicityInList, VandermondeMat ## added 5-13-2005: ## RotateList, CirculantMatrix, ZechLog, ## MatrixRepresentationOfElement,IrreduciblePolynomialsNr, ## PrimitivePolynomialsNr, TraceCode, CodeLength ## added 12-4-2005, 1-3-206: GuavaVersion. guava_version ## 22 May 2006 (CJ): modified GuavaVersion so that the version ## information is obtained directly from "PackageInfo" ## 26 Dec 2007 (CJ): added RightRotateList and NegacirculantMatrix ## functions ## Revision.("guava/lib/util2_gi") := "@(#)$Id: util2.gi,v 1.99 09/23/2004 gap Exp $"; ######################################################################## ## #F AllOneVector( [, ] ) ## ## Return a vector with all ones. ## InstallMethod(AllOneVector, "length, Field", true, [IsInt, IsField], 0, function(n, F) if n <= 0 then Error( "AllOneVector: must be a positive integer" ); fi; return List( [ 1 .. n ], x -> One(F) ); end); InstallOtherMethod(AllOneVector, "length, fieldsize", true, [IsInt, IsInt], 0, function(n, q) return AllOneVector(n, GF(q)); end); InstallOtherMethod(AllOneVector, "length", true, [IsInt], 0, function(n) return AllOneVector(n, Rationals); end); ######################################################################## ## #F AllOneCodeword( , ) ## ## Return a codeword with ones. ## InstallMethod(AllOneCodeword, "wordlength, field", true, [IsInt, IsField], 0, function(n, F) if n <= 0 then Error( "AllOneCodeword: must be a positive integer" ); fi; return Codeword( AllOneVector( n, F ), F ); end); InstallOtherMethod(AllOneCodeword, "wordlength, fieldsize", true, [IsInt, IsInt], 0, function(n, q) return AllOneCodeword(n, GF(q)); end); InstallOtherMethod(AllOneCodeword, "wordlength", true, [IsInt], 0, function(n) return AllOneCodeword(n, GF(2)); end); ############################################################################# ## #F IntCeiling( ) ## ## Return the smallest integer greater than or equal to r. ## 3/2 => 2, -3/2 => -1. ## InstallMethod(IntCeiling, "method for integer", true, [IsInt], 0, function(r) # don't round integers return r; end); InstallMethod(IntCeiling, "method for rational", true, [IsRat], 0, function(r) if r > 0 then # round positive numbers to smallest integer # greater than r (3/2 => 2) return Int(r)+1; else # round negative numbers to smallest integer # greater than r (-3/2 => -1) return Int(r); fi; end); ######################################################################## ## #F IntFloor( ) ## ## Return the greatest integer smaller than or equal to r. ## 3/2 => 1, -3/2 => -2. ## InstallMethod(IntFloor, "method for integer", true, [IsInt], 0, function(r) # don't round integers return r; end); InstallMethod(IntFloor, "method for rational", true, [IsRat], 0, function(r) if r > 0 then # round positive numbers to largest integer # smaller than r (3/2 => 1) return Int(r); else # round negative numbers to largest integer # smaller than r (-3/2 => -2) return Int(r-1); fi; end); ######################################################################## ## #F KroneckerDelta( , ) ## ## Return 1 if i = j, ## 0 otherwise ## InstallMethod(KroneckerDelta, true, [IsInt, IsInt], 0, function ( i, j ) if i = j then return 1; else return 0; fi; end); ######################################################################## ## #F BinaryRepresentation( , ) ## ## Return a binary representation of an element ## of GF( 2^k ), where k <= length. ## ## The representation is actually the binary ## representation of k+1, where k is the exponent ## of the element, taken in the field 2^length. ## For example, Z(16)^10 = Z(4)^2. If length = 4, ## the binary representation 1011 = 11(base 10) ## is returned. If length = 2, the binary ## representation 11 = 3(base 10) is returned. ## ## If elements is a list, then return the binary ## representation of every element of the list. ## ## This function is used to make to Gabidulin codes. ## It is not intended to be a global function, but including ## it in all five Gabidulin codes is a bit over the top ## ## Therefore, no error checking is done. ## BinaryRepresentation := function ( elementlist, length ) local field, i, log, vector, element; if IsList( elementlist ) then return( List( elementlist, x -> BinaryRepresentation( x, length ) ) ); else element := elementlist; field := Field( element ); vector := NullVector( length, GF(2) ); if element = Zero(field) then # exception, log is not defined for zeroes return vector; else log := LogFFE( element, Z(2^length) ) + 1; for i in [ 1 .. length ] do if log >= 2^( length - i ) then vector[ i ] := One(GF(2)); log := log - 2^( length - i ); fi; od; return vector; fi; fi; end; ######################################################################## ## #F SortedGaloisFieldElements( ) ## ## Sort the field elements of size according to ## their log. ## ## This function is used to make to Gabidulin codes. ## It is not intended to be a global function, but including ## it in all five Gabidulin codes is not a good idea. ## SortedGaloisFieldElements := function ( size ) local field, els, sortlist, alpha; if IsInt( size ) then field := GF( size ); else field := size; size := Size( field ); fi; alpha:=PrimitiveRoot( field ); # this line was moved from immed after the local statement 9-2004 els := ShallowCopy(AsSSortedList( field )); sortlist := NullVector( size ); # log 1 = 0, so we add one to each log to avoid # conflicts with the 0 for zero. sortlist := List( els, function( x ) if x = Zero(field) then return 0; else return LogFFE( x, alpha ) + 1; fi; end ); sortlist{ [ 2 .. size ] } := List( els { [ 2 .. size ] }, x -> LogFFE( x, alpha ) + 1 ); SortParallel( sortlist, els ); return els; end; ######################################################################## ## #F VandermondeMat( , ) ## ## Input: Pts=[x1,..,xn], a >0 an integer ## Output: Vandermonde matrix (xi^j), ## for xi in Pts and 0 <= j <= a ## (an nx(a+1) matrix) ## InstallMethod(VandermondeMat, true, [IsList, IsInt], 0, function(Pts,a) local V,n,i,j; n:=Length(Pts); V:=List([1..(a+1)],j->List([1..n],i->Pts[i]^(j-1))); return TransposedMat(V); end); ########################################################### ## #F MultiplicityInList(L,a) ## ## Input: a list L ## an element a of L ## Output: the multiplicity a occurs in L ## MultiplicityInList:=function(L,a) local mult,b; mult:=0; for b in L do if b=a then mult:=mult+1; fi; od; return mult; end; ########################################################### ## #F MostCommonInList(L,a) ## ## Input: a list L ## Output: an a in L which occurs at least as much as any other in L ## MostCommonInList:=function(L) local mults,max,maxi,x; mults:=List(L,x->MultiplicityInList(L,x)); max:=Maximum(mults); maxi:=Position(mults,max); return L[maxi]; end; ########################################################### ## #F RotateList(L) ## ## Input: a list L ## Output: cyclic rotation of the list (to the right) ## RotateList:=function(L) local rL,i,n; n:=Length(L); rL:=[]; for i in [1..n] do if i Size(L) then Error("Negacirculant matrix must be a square matrix\n"); fi; rL:= L; M := [L]; for i in [1..(k-1)] do; # generate nega cyclic shift (to the right) rL := RightRotateList(rL); rL[1] := -rL[1]; M := Concatenation(M, [rL]); od; return M; end; ############################################### ### some "convenience functions": CodeLength:= function (C) return WordLength(C); end; TraceCode:= function (C,F) # Input: C is a linear code defined over an extension E of F # (F is base field) # Output: The linear code generated by Tr_{E/F}(c), c in C # ****extremely slow**** so hesitant to include in codesfun.gi local FF, TC, TrC, i, n, c; n:= WordLength(C); FF:= LeftActingDomain(C); TC:= List(C,c->Codeword(List([1..n],i->Trace(FF,F,c[i])))); TrC:=ElementsCode(TC, F); IsLinearCode(TrC); return TrC; end; ###################### finite field functions ## see also ConwayPolynomial ## IsPrimitivePolynomial, for p < 256 ## IsCheapConwayPolynomial ## RandomPrimitivePolynomial ## PrimitivePolynomialsNr:=function(n,q) #n is an integer>1 #F is a finite field #FACT (Golomb): The number of irreducible polynomials mod p of degree n #with (maximum) period p^n-1 is lambda(n,p)=phi(p^n-1)/n). local period; #q:=Size(F); if n<2 then Error("\n\n First arg must be > 1.\n"); fi; return Phi(q^n-1)/n; end; IrreduciblePolynomialsNr:=function(n,q) #FACT (Golomb): The number of irreducible polynomials in GF(q)[x] of degree n #is Psi0(n,p). local d; return (1/n)*Sum(DivisorsInt(n),d->q^d*MoebiusMu(n/d)); end; MatrixRepresentationOfElement:=function(a,F) #returns the matrix representation of #the element a local q,p,d,A,i,j,f,coeffs,c0,Id; p:=Characteristic(F); if p>0 then q:=Size(F); # d:=LogInt(q,p); f:=MinimalPolynomial(GF(p),a); A:=CompanionMat(f); # Id:=IdentityMat(d,F); return A; fi; if p=0 then f:=MinimalPolynomial(Rationals,a); A:=CompanionMat(f); # Id:=IdentityMat(d,F); return A; fi; end; ZechLog:=function(x,b,F) #Zech log of x to base b, ie the i such that x+1=b^i, # so y+z=y*(1+z/y)=b^k, where k=Log(y,b)+ZechLog(z/y,b) # b must be a primitive element of F return LogFFE(x+One(F),b); end; GuavaVersion:=function() # prints current version #local version; # version:="2.5"; # return version; return PackageInfo("guava")[1].Version; end; guava_version:=function() # prints current version return GuavaVersion(); end; guava-3.6/lib/decoders.gd0000644017361200001450000001670011026723452015222 0ustar tabbottcrontab############################################################################# ## #A decoders.gd GUAVA library Reinald Baart #A &Jasper Cramwinckel #A &Erik Roijackers ## &David Joyner ## ## This file contains functions for decoding codes ## #H @(#)$Id: decoders.gd,v 1.3 2003/02/12 03:49:19 gap Exp $ ## ## some commands moved form cdeops.gi and Decodeword added in 10-2004 ## added GeneralizedReedSolomonDecoder 11-2005 ## added GeneralizedReedSolomonListDecoder and GRS, 12-2004 ## added PermutationDecoderNC, CyclicDecoder 5-2005 ## 1-2006: added BitFlipDecoder ## Revision.("guava/lib/decoders_gd") := "@(#)$Id: decoders.gd,v 1.3 2003/02/12 03:49:19 gap Exp $"; ############################################################################# ## #F Decode( , ) . . . . . . . . . decodes the word(s) v to ## the information digits of a codeword in ## ( must be linear) ## ## v can be a codeword or a list of codewords ## DeclareOperation("Decode", [IsCode, IsCodeword]); ############################################################################# ## #F Decodeword( , ) . . . . . . . . . decodes the word(s) v to ## a codeword in ## ( need not be linear) ## ## v can be a codeword or a list of codewords ## DeclareOperation("Decodeword", [IsCode, IsCodeword]); ############################################################################# ## #F PermutationDecode( , ) decodes the vector from ## ## v is a vector (ie, a list) ## DeclareOperation("PermutationDecode", [IsLinearCode, IsList]); ############################################################################# ## #F PermutationDecodeNC( , ,

) decodes the vector to , ## ## v is a vector (ie, a list), P subset Aut(C) is a finite permutation aut gp ## DeclareOperation("PermutationDecodeNC", [IsLinearCode,IsCodeword,IsGroup]); ######################################################################## ## #F SpecialDecoder( ) ## ## Special function to decode ## DeclareAttribute("SpecialDecoder", IsCode); ############################################################################# ## #F BCHDecoder( , ) . . . . . . . . . . . . . . . . decodes BCH codes ## DeclareOperation("BCHDecoder", [IsCode, IsCodeword]); ############################################################################# ## #F CyclicDecoder( , ) . . . . . . . . . . . . . decodes cyclic codes ## DeclareOperation("CyclicDecoder", [IsCode, IsCodeword]); ############################################################################# ## #F HammingDecoder( , ) . . . . . . . . . . . . decodes Hamming codes ## ## Generator matrix must have all unit columns DeclareOperation("HammingDecoder", [IsCode, IsCodeword]); ############################################################################# ## #F GeneralizedReedSolomonDecoderGao( , ) . . decodes ## generalized Reed-Solomon codes ## using S. Gao's method ## DeclareOperation("GeneralizedReedSolomonDecoderGao", [IsCode, IsCodeword]); ########################################################## ## ## GRSLocatorMat( , , ) ## Input: Xlist=[x1,..,xn], l = highest power, ## L=[h_1,...,h_ell] is list of powers ## r=[r1,...,rn] is received vector ## Output: Computes matrix described in Algor. 12.1.1 in [JH] ## ## needed for both GeneralizedReedSolomonDecoder ## and GeneralizedReedSolomonListDecoder ############################################################## ## ## GRSErrorLocatorCoeffs( , , ) ## ## Input: Pts=[x1,..,xn], ## L=[h_1,...,h_ell] is list of powers ## r=[r1,...,rn] is received vector ## ## Output: the lists of coefficients of the polynomial Q(x,y) in alg 12.1.1. ## ####################################################### ## ## GRSErrorLocatorPolynomials( , , , ) ## ## Input: List L of ell_j, ## R = F[x], ## Pts=[x1,..,xn], ## r=[r1,...,rn] is received vector ## Output: list of polynomials Qi as in Algor. 12.1.1 in [JH] ## ########################################################## ## ## GRSInterpolatingPolynomial( , , , ) ## ## Input: List L of ell_j ## R = F[x] ## Pts=[x1,..,xn], ## r=[r1,...,rn] is received vector ## Output: interpolating polynomial Q as in Algor. 12.1.1 in [JH] ## ############################################################################# ## #F GeneralizedReedSolomonDecoder( , ) . . decodes ## generalized Reed-Solomon codes ## using the interpolation algorithm ## DeclareOperation("GeneralizedReedSolomonDecoder", [IsCode, IsCodeword]); ############################################################################# ## #F GeneralizedReedSolomonListDecoder( , , ) . . ell-list decodes ## generalized Reed-Solomon codes ## using M. Sudan's algorithm ## DeclareOperation("GeneralizedReedSolomonListDecoder",[IsCode, IsCodeword, IsInt]); ############################################################################# ## #F NearestNeighborGRSDecodewords( , , ) . . . finds all ## generalized Reed-Solomon codewords ## within distance from v ## *and* the associated polynomial, ## using "brute force" ## ## Input: v is a received vector (a GUAVA codeword) ## C is a GRS code ## dist>0 is the distance from v to search ## Output: a list of pairs [c,f(x)], where wt(c-v), , ) . . . finds all ## codewords in a linear code C ## within distance from v ## using "brute force" ## ## Input: v is a received vector (a GUAVA codeword) ## C is a linear code ## dist>0 is the distance from v to search ## Output: a list of c in C, where wt(c-v), ) . . . decodes *binary* LDPC codes using bit-flipping ## or Gallager hard-decision ## ** often fails to work if C is not LDPC ** ## ## Input: v is a received vector (a GUAVA codeword) ## C is a binary LDPC code ## Output: a c in C, where wt(c-v) in R=F[x1,x2,...,xn] ## a multivariate polynomial ring containing ## Output: the list of degrees of each term in . ## DeclareOperation("DegreesMultivariatePolynomial", [IsRingElement, IsRing]); ########################################################### ## #F DegreeMultivariatePolynomial( , ) ## ## Input: multivariate poly in R=F[x1,x2,...,xn] ## a multivariate polynomial ring containing ## Output: the degree of . ## DeclareOperation("DegreeMultivariatePolynomial", [IsRingElement, IsRing]); ######################################################################## ## #F CoefficientToPolynomial( , ) ## ## Input: a list of coeffs = [c0,c1,..,cd] ## a univariate polynomial ring R = F[x] ## Output: a polynomial c0+c1*x+...+cd*x^(d-1) in R ## DeclareOperation("CoefficientToPolynomial", [IsList, IsRing]); ######################################################################## ## #F DivisorsMultivariatePolynomial( , ) ## ## Input: f is a polynomial in R=F[x1,...,xn] ## Output: all divisors of f ## uses a slow algorithm (see Joachim von zur Gathen, Jürgen Gerhard, ## Modern Computer Algebra, exercise 16.10) DeclareOperation("DivisorsMultivariatePolynomial",[IsPolynomial,IsPolynomialRing]); ########################################################### ## #F AffineCurve(, ) ## ## Input: is a polynomial in the ring F[x,y], ## is a bivariate ring containing ## Output: associated record: polynomial component and a ring component ## DeclareOperation("AffineCurve", [IsRingElement, IsRing]); ########################################################### ## #F GenusCurve( ) ## ## ## Input: is a curve record structure ## crv: f(x,y)=0, f a poly of degree d ## Output: genus of plane curve ## genus = (d-1)(d-2)/2 ## DeclareOperation("GenusCurve", [IsRecord]); ############################################################################# ## #F OnCurve(, ) ## ## Input: is a curve record structure ## a list of pts in F^2 ## crv: f(x,y)=0, f a poly in F[x,y] ## Output: true if they are all on crv ## false otherwise ## DeclareOperation("OnCurve",[IsList,IsRecord]); ############################################################################# ## #F AffinePointsOnCurve(, , ) ## ## returns the points in $f(x,y)=0$ where $(x,y) \in E$ and ## $f\in R=F[x,y]$, $E/F$ finite fields. ## DeclareGlobalFunction("AffinePointsOnCurve"); #DeclareOperation("AffinePointsOnCurve",[IsPolynomial,IsRing,IsField]); ########################################################### ## #F DivisorOnAffineCurve(, , ) ## ## ## Input: list of integers (coeffs of divisor), ## is a list of points (support of divisor), ## is a curve record ## Output: associated divisor record ## DeclareOperation("DivisorOnAffineCurve", [IsList, IsList, IsRecord]); ########################################################### ## #F DivisorOnAffineCurve(, ) ## ## Input: , are divisor records ## Output: sum ## DeclareOperation("DivisorAddition", [IsRecord, IsRecord]); ########################################################### ## #F DivisorDegree(

) ## ## Input:
a divisor record ## Output: degree = sum of coeffs ## DeclareOperation("DivisorDegree", [IsRecord]); ########################################################### ## #F DivisorIsEffective(
) ## ## Input:
a divisor record ## Output: true if all coeffs>=0, false otherwise ## DeclareOperation("DivisorIsEffective", [IsRecord]); ########################################################### ## #F DivisorNegate(
) ## ## Input:
a divisor record ## Output: -div ## DeclareOperation("DivisorNegate", [IsRecord]); ########################################################### ## #F DivisorIsZero(
) ## ## Input:
a divisor record ## Output: true if all coeffs=0, false otherwise ## DeclareOperation("DivisorIsZero", [IsRecord]); ########################################################### ## #F DivisorEqual(, ) ## ## Input: , are divisor records ## Output: true if div1=div2 ## DeclareOperation("DivisorEqual", [IsRecord, IsRecord]); ########################################################### ## #F DivisorGCD(, ) ## ## If D_1=e_1P_1+...+e_kP_k and D_2=f_1P_1+...+f_kP_k ## are two divisors on a curve then their ## GCD is min(e_1,f_1)P_1+...+min(e_k,f_k)P_k ## ## Input: , are divisor records ## Output: GCD ## DeclareOperation("DivisorGCD", [IsRecord, IsRecord]); ########################################################### ## #F DivisorLCM(, ) ## ## If D_1=e_1P_1+...+e_kP_k and D_2=f_1P_1+...+f_kP_k ## are two divisors on a curve then their ## LCM is max(e_1,f_1)P_1+...+max(e_k,f_k)P_k ## ## Input: , are divisor records ## Output: LCM ## DeclareOperation("DivisorLCM", [IsRecord, IsRecord]); ########################################################### ## #F RiemannRochSpaceBasisFunctionP1(

, , ) ## ## Input:

is a point in F^2, F=finite field, ## is an integer, ## is a polynomial ring in x,y ## Output: associated basis function of P^1, 1/(x-P)^k ## DeclareOperation("RiemannRochSpaceBasisFunctionP1", [IsExtAElement, IsInt, IsRing]); ########################################################### ## #F RiemannRochSpaceBasisEffectiveP1(

) ## ## Input:
is an effective divisor on P^1 ## Output: associated basis functions of L(div) on P^1 ## DeclareOperation("RiemannRochSpaceBasisEffectiveP1", [IsRecord]); ########################################################### ## #F RiemannRochSpaceBasisP1(
) ## ## Input:
is a divisor on P^1 ## Output: associated basis functions of L(div) on P^1 ## DeclareOperation("RiemannRochSpaceBasisP1", [IsRecord]); ################################################## # # Group action on RR space and associate AG code # for the curve P^1 # ################################################### ########################################################### ## #F MoebiusTransformation(A,R) ## ## Input: is a 2x2 matrix with entries in a field F ## is a polynomial ring in x, R=F[x] ## Output: associated Moebius transformation to A ## DeclareOperation("MoebiusTransformation", [IsMatrix,IsRing]); ########################################################### ## #F ActionMoebiusTransformationOnFunction(A,f,R2) ## ## Input: is a 2x2 matrix with entries in a field F ## is a rational function in F(x) ## is a polynomial ring in x,y, R2=F[x,y] ## Output: associated function Af ## DeclareOperation("ActionMoebiusTransformationOnFunction",[IsMatrix,IsRationalFunction,IsRing]); ########################################################### ## #F ActionMoebiusTransformationOnDivisorP1(A,div) ## ## Input: is a 2x2 matrix with entries in a field F ##
is a divisor on P^1 ## Output: associated divisor Adiv ## DeclareOperation("ActionMoebiusTransformationOnDivisorP1",[IsMatrix,IsRecord]); ########################################################### ## #F ActionMoebiusTransformationOnDivisorDefinedP1(A,div) ## ## Input: is a 2x2 matrix with entries in a field F ##
is a divisor on P^1 ## Output: returns true if associated divisor Adiv is ## not supported at infinity ## DeclareOperation("ActionMoebiusTransformationOnDivisorDefinedP1",[IsMatrix,IsRecord]); ########################################################### ## #F DivisorAutomorphismGroupP1(div) ## ## Input:
is a divisor on P^1 over a finite field ## Output: returns subgroup of GL(2,F) which preserves div ## ## *** very slow *** ## DeclareOperation("DivisorAutomorphismGroupP1",[IsRecord]); ########################################################### ## #F MatrixRepresentationOnRiemannRochSpaceP1(g,div) ## ## Input: g in G subgp Aut(D) subgp Aut(X) ## D a divisor on a curve X ## Output: a dxd matrix, where d = dim L(D), ## representing the action of g on L(D). ## Note: g sends L(D) to r*L(D), where ## r is a polynomial of degree 1 depending on ## g and D ## ## *** very slow *** ## DeclareOperation("MatrixRepresentationOnRiemannRochSpaceP1", [IsMatrix,IsRecord]); ########################################################### ## #F GOrbitPoint:(G,P) ## ## P must be a point in P^n(F) ## G must be a finite subgroup of GL(n+1,F) ## returns all (representatives of projective) ## points in the orbit G*P ## DeclareOperation("GOrbitPoint", [IsGroup,IsList]); ############################################ # AG codes ############################################ ########################################################### ## #F EvaluationBivariateCode(

, , ) ## ## Automatically removes the 'bad' points (poles or points ## not on the curve from

. ## ## Input:

are points in F^2, F=finite field, ## is a list of ratl fcns on ## Output: associated evaluation code ## DeclareOperation("EvaluationBivariateCode", [IsList, IsList, IsRecord]); ########################################################### ## #F EvaluationBivariateCodeNC(

, , ) ## ## Input:

are points in F^2, F=finite field, ## is a list of ratl fcns on ## Output: associated evaluation code ## DeclareOperation("EvaluationBivariateCodeNC", [IsList, IsList, IsRecord]); ########################################################### ## #F DivisorOfRationalFunctionP1(, ) ## ## Input: is a rational function of x ## is a polynomial ring in x,y ## Output: associated divisor of ## DeclareOperation("DivisorOfRationalFunctionP1", [IsRationalFunction, IsRing]); ############################################################ ## #F GoppaCodeClassical(

,) ## ## classical Goppa codes ## Vaguely related to GeneralizedSrivastavaCode? ## (Think of a weighted dual of a classical Goppa code of ## an effective divisor of the form div = kP1+kP2+...+kPn?) ## DeclareOperation("GoppaCodeClassical", [IsRecord, IsList]); ########################################################### ## #F XingLingCode(, ) ## ## Input: is an integer ## is a polynomial ring of one variable ## Output: associated evaluation code ## DeclareOperation("XingLingCode", [IsInt, IsRing]); guava-3.6/lib/codecstr.gi0000644017361200001450000010664211026723452015252 0ustar tabbottcrontab############################################################################# ## #A codecstr.gi GUAVA library Reinald Baart #A Jasper Cramwinckel #A Erik Roijackers #A Eric Minkes #A David Joyner ## ## This file contains functions for constructing codes ## #H @(#)$Id: codecstr.gi,v 1.6 2003/02/14 02:26:04 gap Exp $ ## Revision.("guava/lib/codecstr_gi") := "@(#)$Id: codecstr.gi,v 1.6 2003/02/14 02:26:04 gap Exp $"; ######################################################################## ## #F AmalgamatedDirectSumCode( , , [, ] ) ## ## Return the amalgamated direct sum code of C en D. ## ## This construction is derived from the direct sum construction, ## but it saves one coordinate over the direct sum. ## ## The amalgamated direct sum construction goes as follows: ## ## Put the generator matrices G and H of C respectively D ## in standard form as follows: ## ## G => [ G' | I ] and H => [ I | H' ] ## ## The generator matrix of the new code then has the following form: ## ## [ 1 0 ... 0 0 | 0 0 ............ 0 ] ## [ 0 1 ... 0 0 | 0 0 ............ 0 ] ## [ ......... . | .................. ] ## [ G' 0 0 ... 1 0 | 0 0 ............ 0 ] ## [ |---------------|--------] ## [ 0 0 ... 0 | 1 | 0 ... 0 0 ] ## [--------|-----------|---| ] ## [ 0 0 ............ 0 | 0 1 ... 0 0 H' ] ## [ .................. | 0 ......... ] ## [ 0 0 ............ 0 | 0 0 ... 1 0 ] ## [ 0 0 ............ 0 | 0 0 ... 0 1 ] ## ## The codes resulting from [ G' | I ] and [ I | H' ] must ## be acceptable in the last resp. the first coordinate. ## Checking whether this is true takes a lot of time, however, ## and is only performed when the boolean variable check is true. ## InstallMethod(AmalgamatedDirectSumCode, "method for linear codes, boolean check", true, [IsLinearCode, IsLinearCode, IsBool], 0, function(C, D, check) local G, H, Cstandard, Dstandard, NewG, NewH, Nulmat, NewC, i; # check the arguments if LeftActingDomain( C ) <> LeftActingDomain( D ) then Error( "AmalgamatedDirectSumCode: and must be codes ", "over the same field" ); fi; G := ShallowCopy( GeneratorMat( C ) ); H := ShallowCopy( GeneratorMat( D ) ); # standard form: G => [ G' | I ] PutStandardForm( G, false ); # standard form: H => [ I | H' ] PutStandardForm( H, true ); # check whether the construction is allowed; # this is (at this time) a lot of work # maybe it will disappear later if check then Cstandard := GeneratorMatCode( G, LeftActingDomain( C ) ); Dstandard := GeneratorMatCode( H, LeftActingDomain( C ) ); # is the last coordinate of the standardcode C' acceptable ? if not IsCoordinateAcceptable( Cstandard, WordLength( Cstandard ) ) then Error( "AmalgamatedDirectSumCode: Standard form of is not ", "acceptable in the last coordinate."); fi; # is the last coordinate of the standardcode D' acceptable ? if not IsCoordinateAcceptable( Dstandard, 1 ) then Error( "AmalgamatedDirectSumCode: Standard form of is not ", "acceptable in first coordinate."); fi; fi; NewG := G; # build upper part of the new generator matrix # append n_D - 1 zeroes to all rows of G' for i in NewG do Append( i, List( [ 1..WordLength( D ) - 1 ], x -> Zero(LeftActingDomain(C) ) ) ); od; # concatenate the last row of G' and the first row of H' for i in [ 2 .. WordLength( D ) ] do NewG[ Dimension( C ) ][ WordLength( C ) + i - 1 ] := H[ 1 ][ i ]; od; # throw away the first row of H' (it is already appended) NewH := List( [ 2..Length( H ) ], x -> H[ x ] ); # throw away the first column of H' (it is (1, 0, ..., 0), # the one is already present in the new generator matrix) NewH := List( [ 1..Length( NewH ) ], x -> List( [ 2 .. WordLength( D ) ], y -> NewH[ x ][ y ] ) ); # fill the lower left part with zeroes Nulmat := List( [ 1 .. Dimension( D ) - 1 ], x -> NullVector( WordLength( C ) , LeftActingDomain(C) ) ); # and put the rest of H' in the lower right corner for i in [ 1 .. Length( Nulmat ) ] do Append( Nulmat[ i ], NewH[ i ] ); od; # paste the lower and the upper part Append( NewG, Nulmat ); # construct the new code with the new generator matrix NewC := GeneratorMatCode( NewG, "amalgamated direct sum code", LeftActingDomain( C ) ); # write history NewC!.history := MergeHistories( History( C ), History( D ) ); # the new covering radius is at most the sum of the # two old covering radii, if the old codes are normal if HasIsNormalCode( C ) and HasIsNormalCode( D ) and IsNormalCode( C ) and IsNormalCode( D ) then if IsBound( C!.boundsCoveringRadius ) and IsBound( D!.boundsCoveringRadius ) then NewC!.boundsCoveringRadius := [ GeneralLowerBoundCoveringRadius( NewC ) .. Maximum( C!.boundsCoveringRadius ) + Maximum( D!.boundsCoveringRadius ) ]; fi; fi; return NewC; end); InstallMethod(AmalgamatedDirectSumCode, "two unrestricted codes, boolean check", true, [IsCode, IsCode, IsBool], 0, function(C, D, check) local elsC, elsD, i, NewC, newels; if LeftActingDomain(C) <> LeftActingDomain(D) then Error(" and must be codes over the same field"); elif IsLinearCode(C) and IsLinearCode(D) then # this is much faster, because it only uses # the generator matrices return AmalgamatedDirectSumCode(C, D, check); fi; # check whether the construction is allowed; # this is (at this time) a lot of work # maybe it will disappear later if check then # is the last coordinate of C acceptable ? if not IsCoordinateAcceptable( C, WordLength( C ) ) then Error( "AmalgamatedDirectSumCode: is not ", "acceptable in the last coordinate."); fi; # is the first coordinate of D acceptable ? if not IsCoordinateAcceptable( D, 1 ) then Error( "AmalgamatedDirectSumCode: is not ", "acceptable in first coordinate."); fi; fi; # find the elements of the new code newels := []; for i in AsSSortedList( LeftActingDomain( C ) ) do elsC := VectorCodeword( AsSSortedList( CoordinateSubCode( C, WordLength( C ), i ) ) ); elsD := VectorCodeword( AsSSortedList( CoordinateSubCode( D, 1, i ) ) ); if Length( elsC ) > 0 and Length( elsD ) > 0 then elsD := List( elsD, x -> x{ [ 2 .. WordLength( D ) ] } ); for i in elsC do Append( newels, List( elsD, x -> Concatenation( i, x ) ) ); od; fi; od; if Length( newels ) = 0 then Error( "AmalgamatedDirectSumCode: there are no ", "codewords satisfying the conditions" ); fi; NewC := ElementsCode( newels, "amalgamated direct sum code", LeftActingDomain( C ) ); # write history NewC!.history := MergeHistories( History( C ), History( D ) ); # the new covering radius is at most the sum of the # two old covering radii, if the old codes are normal if HasIsNormalCode( C ) and HasIsNormalCode( D ) and IsNormalCode( C ) and IsNormalCode( D ) then if IsBound( C!.boundsCoveringRadius ) and IsBound( D!.boundsCoveringRadius ) then NewC!.boundsCoveringRadius := [ GeneralLowerBoundCoveringRadius( NewC ) .. Maximum( C!.boundsCoveringRadius ) + Maximum( C!.boundsCoveringRadius ) ]; fi; fi; return NewC; end); InstallOtherMethod(AmalgamatedDirectSumCode, "method for two unrestricted codes", true, [IsCode, IsCode], 0, function(C, D) return AmalgamatedDirectSumCode(C, D, false); end); ######################################################################## ## #F BlockwiseDirectSumCode( , , , ) ## ## Return the blockwise direct sum of C1 and C2 with respect to ## the cosets defined by the codewords in L1 and L2. ## InstallMethod(BlockwiseDirectSumCode, "method for unrestricted codes and lists of codes or of codewords", true, [IsCode, IsList, IsCode, IsList], 0, function(C1, L1, C2, L2) local k, CosetCodeBlockwiseDirectSumCode, SubCodeBlockwiseDirectSumCode, unioncode1, unioncode2, i; # check the arguments if LeftActingDomain( C1 ) <> LeftActingDomain( C2 ) then Error( "BlockwiseDirectSumCode: the fields of and ", "must be the same" ); fi; if Length( L1 ) <> Length( L2 ) then Error( "BlockwiseDirectSumCode: and ", "must have equal lengths" ); fi; k := Length( L1 ); if k = 0 then Error( "BlockwiseDirectSumCode: the lists are empty" ); fi; CosetCodeBlockwiseDirectSumCode := function( C1, L1, C2, L2 ) local newels, i, k, subcode1, subcode2, newcode, sum; k := Length( L1 ); # make the elements of the new code newels := []; for i in [ 1 .. k ] do # build subcode 1, using the GUAVA-function CosetCode, # which adds the word L1[i] to all codewords of C1 subcode1 := CosetCode( C1, L1[ i ] ); subcode2 := CosetCode( C2, L2[ i ] ); # now build the the direct sum of the two subcodes sum := DirectSumCode( subcode1, subcode2 ); # add the elements of the direct sum-code to # the elements we already found # in the previous steps newels := Union( newels, AsSSortedList( sum ) ); od; # finally build the new code with the computed elements newcode := ElementsCode( newels, "blockwise direct sum code", LeftActingDomain( C1 ) ); # write history newcode!.history := MergeHistories( History( C1 ), History( C2 ) ); return newcode; end; SubCodeBlockwiseDirectSumCode := function( C1, L1, C2, L2 ) local unioncode, newels, newcode; newels := AsSSortedList( DirectSumCode( L1[ 1 ], L2[ 1 ] ) ); for i in [ 2 .. Length( L1 ) ] do newels := Union( newels, AsSSortedList( DirectSumCode( L1[ i ], L2[ i ] ) ) ); od; newcode := ElementsCode( newels, "blockwise direct sum code", LeftActingDomain( C1 ) ); newcode!.history := MergeHistories( History( C1 ), History( C2 ) ); return newcode; end; if IsCode( L1[ 1 ] ) and IsCode( L2[ 1 ] ) then unioncode1 := L1[ 1 ]; unioncode2 := L2[ 1 ]; for i in [ 2 .. k ] do if not IsCode( L1[ i ] ) or not IsCode( L2[ i ] ) then Error( "BlockwiseDirectSumCode: not all elements of ", "the lists are codes" ); fi; unioncode1 := AddedElementsCode( unioncode1, AsSSortedList( L1[ i ] ) ); unioncode2 := AddedElementsCode( unioncode2, AsSSortedList( L2[ i ] ) ); if unioncode1 <> C1 then Error( "BlockwiseDirectSumCode: must be the ", "union of the codes in " ); fi; if unioncode2 <> C2 then Error( "BlockwiseDirectSumCode: must be the ", "union of the codes in " ); fi; od; return SubCodeBlockwiseDirectSumCode( C1, L1, C2, L2 ); else L1 := Codeword( L1 ); L2 := Codeword( L2 ); return CosetCodeBlockwiseDirectSumCode( C1, L1, C2, L2 ); fi; end); ######################################################################## ## #F ExtendedDirectSumCode( , , m ) ## ## The construction as described in the article of Graham and Sloane, ## section V. ## ("On the Covering Radius of Codes", R.L. Graham and N.J.A. Sloane, ## IEEE Information Theory, 1985 pp 385-401) ## InstallMethod(ExtendedDirectSumCode, "method for linear codes, m", true, [IsLinearCode, IsLinearCode, IsInt], 0, function(L, B, m) local m0, GL, GB, NewG, i, j, G, firstzeros, lastzeros, newcode; # check the arguments if WordLength( L ) <> WordLength( B ) then Error( "L and B must have the same length" ); elif m < 1 then Error( "m must be a positive integer" ); fi; # if L is a subset of B, then # skip the last mth copy of L # (it doesn't add anything new to the code ) if L in B and m > 1 then m0 := m - 1; else m0 := m; fi; GL := ShallowCopy( GeneratorMat( L ) ); GB := ShallowCopy( GeneratorMat( B ) ); # the new generator matrix, fill with zeros first NewG := List( [ 1 .. Dimension( L ) * m0 + Dimension( B ) ], x -> NullWord( WordLength( L ) * m ) ); # first m0 * Dimension(L) rows, # form: [ GL 0 ... 0 ] # [ 0 GL ... 0 ] # [ ........... ] # [ 0 0 GL ] (this row is omitted if L in B) for i in [ 1 .. m0 ] do # construct rows (i-1)*Dimension(L) till i*Dimension(L)-1 firstzeros := NullVector( ( i-1 ) * WordLength( L ), LeftActingDomain( L ) ); lastzeros := NullVector( ( m-i ) * WordLength( L ), LeftActingDomain( L ) ); for j in [ 1..Dimension( L ) ] do NewG[ j + ( i-1 ) * Dimension( L ) ] := Concatenation( firstzeros, GL[j], lastzeros ); od; od; # last row of new generator matrix # [ GB GB GB GB ... GB ] for i in [ 1..Dimension( B ) ] do NewG[ i + m * Dimension( L ) ] := Concatenation( List( [ 1..m ], x->GB[ i ] ) ); od; newcode := GeneratorMatCode( NewG, Concatenation( String( m ), "-fold extended direct sum code" ), LeftActingDomain( L ) ); newcode!.history := MergeHistories( History( L ), History( B ) ); return newcode; end); InstallMethod(ExtendedDirectSumCode, "method for unrestricted codes, m", true, [IsCode, IsCode, IsInt], 0, function(L, B, m) local SumCode, i, j, el, newcode, lastels; if WordLength( L ) <> WordLength( B ) then Error( "L and B must have the same length" ); elif m < 1 then Error( "m must be a positive integer" ); elif IsLinearCode(L) and IsLinearCode( B ) then # this is much faster because it only uses the generator matrices return ExtendedDirectSumCode(L, B, m); fi; SumCode := L; for i in [ 2 .. m ] do SumCode := DirectSumCode( SumCode, L ); od; lastels := []; for i in VectorCodeword( AsSSortedList( B ) ) do el := ShallowCopy( i ); for j in [ 2 .. m ] do el := Concatenation( el, i ); od; Append( lastels, el ); od; newcode := AddedElementsCode( SumCode, lastels ); newcode!.history := MergeHistories( History( L ), History( B ) ); newcode!.name := Concatenation( String( m ), "-fold extended direct sum code" ); return newcode; end); ######################################################################## ## #F PiecewiseConstantCode( , [, ] ) ## InstallGlobalFunction(PiecewiseConstantCode, function ( arg ) local n, partition, constraints, field, i, j, elements, constr, position, newels, addels, ConstantWeightElements, el, sumels; # check the arguments if Length( arg ) < 2 or Length( arg ) > 3 then Error( "usage: PiecewiseConstantCode( , ", " [, ] )" ); fi; if Length( arg ) = 3 then field := arg[ 3 ]; if not IsField( field ) then if not IsInt( field ) then Error( "PiecewiseConstantCode: must be a field" ); else field := GF( field ); fi; fi; else field := GF( 2 ); fi; # find out the partition partition := arg[ 1 ]; # allow for an integer as "partition" if not IsList( partition ) then partition := [ partition ]; fi; for i in partition do if not IsInt( i ) then Error( "PiecewiseConstantCode: must be ", "a list of integers" ); fi; if i <= 0 then Error( "PiecewiseConstantCode: must be ", "a list of positive integers" ); fi; od; n := Sum( partition ); # check the constraints constraints := arg[ 2 ]; if not IsList( constraints ) then constraints := [ constraints ]; fi; for i in [ 1 .. Length( constraints ) ] do if not IsList( constraints[ i ] ) then constraints[ i ]:= [ constraints[ i ] ]; fi; if Length( constraints[ i ] ) <> Length( partition ) then Error( "PiecewiseConstantCode: the length of constraint ", i, " is not equal to the length of " ); fi; for j in [ 1 .. Length( constraints[ i ] ) ] do if not IsInt( constraints[ i ][ j ] ) then Error( "PiecewiseConstantCode: entry ", j, " of constraint ", i, " is not an integer" ); fi; if constraints[ i ][ j ] < 0 or constraints[ i ][ j ] > partition[ j ] then Error( "PiecewiseConstantCode: entry ", j, " of constraint ", i, " must >= 0 and <= ", partition[ j ] ); fi; od; od; ConstantWeightElements := function( place, weight ) local els, i, numberofzeros, zerovector; if weight = 0 then return [ NullVector( n, field ) ]; fi; els := ShallowCopy( VectorCodeword( AsSSortedList( ConstantWeightSubcode( WholeSpaceCode( partition[ place ], field ), weight ) ) ) ); # add zeros to the front if place <> 1 then numberofzeros := Sum( partition{ [ 1 .. place - 1 ] } ); zerovector := NullVector( numberofzeros, field ); for i in [ 1 .. Length( els ) ] do els[ i ] := Flat( [ zerovector, els[ i ] ] ); od; fi; if place <> Length( partition ) then numberofzeros := Sum( partition{ [ place + 1 .. Length( partition ) ] } ); zerovector := NullVector( numberofzeros, field ); for i in [ 1 .. Length( els ) ] do els[ i ] := Flat( [ els[ i ], zerovector ] ); od; fi; return els; end; # make the new code elements := [ ]; for constr in constraints do newels := [ ]; for i in [ 1 .. Length( partition ) ] do addels := ConstantWeightElements( i, constr[ i ] ); if Length( newels ) > 0 then sumels := [ ]; for el in addels do Append( sumels, List( newels, x -> x + el ) ); od; newels := ShallowCopy( sumels ); else newels := ShallowCopy( addels ); fi; od; Append( elements, newels ); od; return ElementsCode( elements, "piecewise constant code", field ); end); ######################################################################## ## #F GabidulinCode( ); ## ## Use of the Boolean check is an unadvertised feature. ## It gives the EnlargedGabidulinCode a back door past the ## restriction on m. Unfortunately, the cleanest way I ## could think of to translate it to GAP4 is to have ## this as the "official" method and have an Other ## method that adds a boolean true to the advertised syntax. InstallMethod(GabidulinCode, "method for internal use!", true, [IsInt, IsFFE, IsFFE, IsBool], 0, function(m, w1, w2, check) local checkmat, nmat, els, i, j, w3, fieldels, binels, newels, binnewels, size, one, newcode; if check <> false and m < 4 then Error( "GabidulinCode: must be at least 4" ); fi; w3 := w1 + w2; checkmat := MutableNullMat( 5 * 2^(m-2) - 1, 2 * m - 1, GF( 2 ) ); size := 2^(m-2); fieldels := SortedGaloisFieldElements( size ); # similar to AsSSortedList( field ) - same in prime field case - but # returns *all* elements in the form Z(size)^i, rather than # simplified to Z(p^d)^j if i divides size-1 binels := BinaryRepresentation( fieldels, m-2 ); # requires that all elements are in the form Z(size)^i one := Z(2)^0; # make matrix N for i in [ 1 .. size - 1 ] do for j in [ 1 .. m-2 ] do checkmat[ i ][ j + 1 ] := binels[ i + 1 ][ j ]; od; od; # make matrix D for i in [ 1 .. size ] do checkmat[ size - 1 + i ][ 1 ] := one; for j in [ 1 .. m - 2 ] do checkmat[ size - 1 + i ][ j + 1 ] := binels[ i ][ j ]; od; newels := ShallowCopy( fieldels ); for j in [ 2 .. size ] do newels[ j ] := w1/fieldels[ j ]; od; binnewels := BinaryRepresentation( newels, m-2 ); for j in [ 1 .. m - 2 ] do checkmat[ size - 1 + i ][ j + m - 1 ] := binnewels[ i ][ j ]; od; od; # make matrix Q for i in [ 1 .. size ] do checkmat[ 2 * size - 1 + i ][ 1 ] := one; checkmat[ 2 * size - 1 + i ][ 2 * m - 1 ] := one; for j in [ 1 .. m - 2 ] do checkmat[ 2 * size - 1 + i ][ j + 1 ] := binels[ i ][ j ]; od; newels := ShallowCopy( fieldels ); for j in [ 2 .. size ] do newels[ j ] := w2/fieldels[ j ]; od; binnewels := BinaryRepresentation( newels, m-2 ); for j in [ 1 .. m - 2 ] do checkmat[ 2 * size - 1 + i ][ j + m - 1 ] := binnewels[ i ][ j ]; od; od; # make matrix M for i in [ 1 .. size ] do checkmat[ 3 * size - 1 + i ][ 1 ] := one; checkmat[ 3 * size - 1 + i ][ 2 * m - 2 ] := one; for j in [ 1 .. m - 2 ] do checkmat[ 3 * size - 1 + i ][ j + 1 ] := binels[ i ][ j ]; od; newels := ShallowCopy( fieldels ); for j in [ 2 .. size ] do newels[ j ] := w3/fieldels[ j ]; od; binnewels := BinaryRepresentation( newels, m-2 ); for j in [ 1 .. m - 2 ] do checkmat[ 3 * size - 1 + i ][ j + m - 1 ] := binnewels[ i ][ j ]; od; od; # make matrix G for i in [ 1 .. size ] do checkmat[ 4 * size - 1 + i ][ 1 ] := one; checkmat[ 4 * size - 1 + i ][ 2 * m - 2 ] := one; checkmat[ 4 * size - 1 + i ][ 2 * m - 1 ] := one; for j in [ 1 .. m - 2 ] do checkmat[ 4 * size - 1 + i ][ m - 1 + j ] := binels[ i ][ j ]; od; od; checkmat := TransposedMat( checkmat ); newcode := CheckMatCode( checkmat, Concatenation( "Gabidulin code (m=",String(m),")" ), GF(2) ); # newcode.wordLength := 5 * size - 1; # newcode.dimension := 2 * m - 1; newcode!.lowerBoundMinimumDistance := 3; newcode!.upperBoundMinimumDistance := 3; SetMinimumDistance(newcode, 3); newcode!.boundsCoveringRadius := [ 2 ]; SetCoveringRadius(newcode, 2); return( newcode ); end); ## This is the advertised syntax, see note above. InstallOtherMethod(GabidulinCode, "m, w1, w2", true, [IsInt, IsFFE, IsFFE], 0, function(m, w1, w2) return GabidulinCode(m, w1, w2, true); end); ######################################################################## ## #F EnlargedGabidulinCode( ); ## InstallMethod(EnlargedGabidulinCode, "m, w1, w2, e", true, [IsInt, IsFFE, IsFFE, IsFFE], 0, function(m, w1, w2, el) local checkmat, nmat, els, i, j, k, w3, fieldels, binels, newels, binnewels, size, one, newcode, bmat, binel; if m < 4 then Error( "EnlargedGabidulinCode: must be at least 4" ); fi; w3 := w1 + w2; checkmat := MutableNullMat( 7 * 2^(m-2) - 2, 2 * m, GF( 2 ) ); size := 2^(m-1); fieldels := SortedGaloisFieldElements( GF( size ) ); binels := BinaryRepresentation( fieldels, m-1 ); one := Z(2)^0; # make matrix Z bmat := TransposedMat( ShallowCopy( CheckMat( GabidulinCode( m, w1, w2, false ) ) ) ); for i in [ 1 .. Length( bmat ) - 1 ] do k := i; if k > 2^(m-2) - 1 then k := k + 1; fi; for j in [ 1 .. Length( bmat[ 1 ] ) ] do checkmat[ i ][ j + 1 ] := bmat[ k ][ j ]; od; od; # make matrix Y binel := BinaryRepresentation( el, m ); for i in [ 1 .. size ] do checkmat[ Length( bmat ) - 1 + i ][ 1 ] := one; for j in [ 1 .. m-1 ] do checkmat[ Length( bmat ) - 1 + i ][ j + 1 ] := binels[ i ][ j ]; od; for j in [ 1 .. m ] do checkmat[ Length( bmat ) - 1 + i ][ m + j ] := binel[ j ]; od; od; checkmat := TransposedMat( checkmat ); newcode := CheckMatCode( checkmat, Concatenation( "enlarged Gabidulin code (m=" ,String(m),")" ), GF(2) ); newcode!.lowerBoundMinimumDistance := 3; newcode!.upperBoundMinimumDistance := 3; SetMinimumDistance(newcode, 3); newcode!.boundsCoveringRadius := [ 2 ]; SetCoveringRadius(newcode, 2); return( newcode ); end); ######################################################################## ## #F DavydovCode( ); ## InstallMethod(DavydovCode, "redundancy, v, ei, ej", true, [IsInt, IsInt, IsFFE, IsFFE], 0, function(r, v, i, j) local checkmat, binel2, fieldels, binels, k, l, field1el, field2el, binel1, newcode; if r < 4 then Error( "DavydovCode: must be at least 5" ); fi; # 0 < i < 2^v ?? # 0 < j < 2^(r-v) ?? checkmat := MutableNullMat( 2^v + 2^(r-v) - 3, r, GF( 2 ) ); field1el := i; binel1 := BinaryRepresentation( field1el, v ); field2el := j; binel2 := BinaryRepresentation( field2el, r - v ); # make matrix K fieldels := SortedGaloisFieldElements( GF( 2^v ) ); # remove 0 SubtractSet( fieldels, [ fieldels[ 1 ], i ] ); binels := BinaryRepresentation( fieldels, v ); for k in [ 1 .. 2^v - 2 ] do for l in [ 1 .. v ] do checkmat[ k ][ l ] := binels[ k ][ l ]; od; for l in [ 1 .. r-v ] do checkmat[ k ][ v + l ] := binel2[ l ]; od; od; # make matrix (column) A for l in [ 1 .. v ] do checkmat[ 2^v - 1 ][ l ] := binel1[ l ]; od; for l in [ 1 .. r-v ] do checkmat[ 2^v - 1 ][ v + l ] := binel2[ l ]; od; # make matrix S fieldels := SortedGaloisFieldElements( GF( 2^(r-v) ) ); SubtractSet( fieldels, [ fieldels[ 1 ], j ] ); binels := BinaryRepresentation( fieldels, r - v ); for k in [ 1 .. 2^(r-v) - 2 ] do for l in [ 1 .. v ] do checkmat[ 2^v - 1 + k ][ l ] := binel1[ l ]; od; for l in [ 1 .. r-v ] do checkmat[ 2^v - 1 + k ][ v + l ] := binels[ k ][ l ]; od; od; checkmat := TransposedMat( checkmat ); newcode := CheckMatCode( checkmat, Concatenation( "Davydov code (r=",String(r), ", v=", String(v), ")" ), GF(2) ); # newcode.wordLength := 5 * size - 1; # newcode.dimension := newcode.wordLength - (2 * m); newcode!.lowerBoundMinimumDistance := 4; newcode!.upperBoundMinimumDistance := 4; SetMinimumDistance(newcode, 4); newcode!.boundsCoveringRadius := [ 2 ]; SetCoveringRadius(newcode, 2); return( newcode ); end); ######################################################################## ## #F TombakCode( ); ## InstallGlobalFunction(TombakCode, function ( arg ) local checkmat, one, m, i, beta, gamma, delta, w1, w2, w3, newcode, k, size, fieldels, binels, binel, l, sortlist, sortedlist, newels, binnewels, theta, newsize, betabin, gammbin, gammabin, deltabin, w1bin, w2bin, w3bin; m := arg[ 1 ]; if arg[ Length( arg ) ] <> false and m < 5 then Error( "TombakCode: must be at least 5" ); fi; beta := arg[ 3 ]; gamma := arg[ 4 ]; delta := beta + gamma; betabin := BinaryRepresentation( beta, m-1 ); gammabin := BinaryRepresentation( gamma, m-1 ); deltabin := betabin + gammabin; w1 := arg[ 5 ]; w2 := arg[ 6 ]; w3 := w1 + w2; w1bin := BinaryRepresentation( w1, m-3 ); w2bin := BinaryRepresentation( w2, m-3 ); w3bin := w1bin + w2bin; i := arg[ 2 ]; checkmat := MutableNullMat( 15 * 2^(m-3) - 3, 2*m, GF( 2 ) ); one := Z(2)^0; # make matrix C size := 2^(m-3); fieldels := SortedGaloisFieldElements( size ); binels := BinaryRepresentation( fieldels, m-3 ); binel := betabin; for k in [ 1 .. size - 1 ] do for l in [ 1 .. m - 3 ] do checkmat[ k ][ 3 + l ] := binels[ k + 1 ][ l ]; od; for l in [ 1 .. m - 1 ] do checkmat[ k ][ m + l ] := binel[ l ]; od; checkmat[ k ][ 2 * m ] := one; od; # make matrix V binel := gammabin; for k in [ 1 .. 2^(m-3) ] do checkmat[ size - 1 + k ][ 2 ] := one; for l in [ 1 .. m - 3 ] do checkmat[ size - 1 + k ][ 3 + l ] := binels[ k ][ l ]; od; for l in [ 1 .. m - 1 ] do checkmat[ size - 1 + k ][ m + l ] := binel[ l ]; od; checkmat[ size - 1 + k ][ 2 * m ] := one; od; # make matrix X binel := deltabin; for k in [ 1 .. size ] do checkmat[ 2 * size - 1 + k ][ 2 ] := one; checkmat[ 2 * size - 1 + k ][ 3 ] := one; for l in [ 1 .. m - 3 ] do checkmat[ 2 * size - 1 + k ][ 3 + l ] := binels[ k ][ l ]; od; for l in [ 1 .. m - 1 ] do checkmat[ 2 * size - 1 + k ][ m + l ] := binel[ l ]; od; od; # make sub-matrix Theta theta := MutableNullMat( 4*size - 1, 2 * (m-3) + 2, GF( 2 ) ); for k in [ 1 .. size - 1 ] do for l in [ 1 .. m-3 ] do theta[ k ][ l ] := binels[ k + 1 ][ l ]; od; newels := ShallowCopy( fieldels ); for l in [ 2 .. size ] do newels[ l ] := w1/fieldels[ l ]; od; binnewels := BinaryRepresentation( newels, m-3 ); for l in [ 1 .. m-3 ] do theta[ k ][ m-3 + l ] := binnewels[ k + 1 ][ l ]; od; od; for k in [ 1 .. size ] do for l in [ 1 .. m-3 ] do theta[ size - 1 + k ][ l ] := binels[ k ][ l ]; od; newels := ShallowCopy( fieldels ); for l in [ 2 .. size ] do newels[ l ] := w2/fieldels[ l ]; od; binnewels := BinaryRepresentation( newels, m-3 ); for l in [ 1 .. m-3 ] do theta[ size - 1 + k ][ m-3 + l ] := binnewels[ k ][ l ]; od; theta[ size - 1 + k ][ 2*(m-3) + 2 ] := one; od; for k in [ 1 .. size ] do for l in [ 1 .. m-3 ] do theta[ 2 * size - 1 + k ][ l ] := binels[ k ][ l ]; od; newels := ShallowCopy( fieldels ); for l in [ 2 .. size ] do newels[ l ] := w3/fieldels[ l ]; od; binnewels := BinaryRepresentation( newels, m-3 ); for l in [ 1 .. m-3 ] do theta[ 2 * size - 1 + k ][ m-3 + l ] := binnewels[ k ][ l ]; od; theta[ 2 * size - 1 + k ][ 2*(m-3) + 1 ] := one; od; for k in [ 1 .. size ] do for l in [ 1 .. m-3 ] do theta[ 3*size - 1 + k ][ m-3 + l ] := binels[ k ][ l ]; od; theta[ 3 * size - 1 + k ][ 2*(m-3) + 1 ] := one; theta[ 3 * size - 1 + k ][ 2*(m-3) + 2 ] := one; od; # make matrix Phi for k in [ 1 .. 4*size - 1 ] do checkmat[ 3*size - 1 + k ][ 3 ] := one; for l in [ 1 .. 2*m - 4 ] do checkmat[ 3*size - 1 + k ][ 3 + l ] := theta[ k ][ l ]; od; od; # make matrix Lambda binel := betabin; for k in [ 1 .. 4*size - 1 ] do checkmat[ 7 * size - 2 + k ][ 3 ] := one; for l in [ 1 .. m - 3 ] do checkmat[ 7 * size - 2 + k ][ 3 + l ] := theta[ k ][ l ]; od; for l in [ 1 .. m - 1 ] do #changed index to m + l from m-1+3+l to keep length correct checkmat[ 7 * size - 2 + k ][ m + l ] := theta[ k ][ m-3 + l ] + binel[ l ]; od; checkmat[ 7 * size - 2 + k ][ 2*m ] := one; od; # make matrix Y newsize := 2^(m-1); fieldels := SortedGaloisFieldElements( newsize ); binels := BinaryRepresentation( fieldels, m-1 ); binel := BinaryRepresentation( i, m ); for k in [ 1 .. newsize ] do checkmat[ 11*size - 3 + k ][ 1 ] := one; for l in [ 1 .. m-1 ] do checkmat[ 11*size - 3 + k ][ 1 + l ] := binels[ k ][ l ]; od; for l in [ 1 .. m ] do checkmat[ 11*size - 3 + k ][ m + l ] := binel[ l ]; od; od; checkmat := TransposedMat( checkmat ); newcode := CheckMatCode( checkmat, Concatenation( "Tombak code (m=",String(m),")" ), GF(2) ); # newcode.wordLength := 5 * size - 1; # newcode.dimension := newcode.wordLength - (2 * m); newcode!.lowerBoundMinimumDistance := 4; newcode!.upperBoundMinimumDistance := 4; SetMinimumDistance(newcode, 4); newcode!.boundsCoveringRadius := [ 2 ]; SetCoveringRadius(newcode, 2); return( newcode ); end); ######################################################################## ## #F EnlargedTombakCode( ); ## # Must be a GlobalFunctton because GAP doesn't support methods with 7 # arguments. InstallGlobalFunction(EnlargedTombakCode, function(m, i, beta, gamma, w1, w2, u) local checkmat, fieldels, binels, size, one, newcode, bmat, binel, k, l; if m < 6 then Error( "EnlargedTombakCode: must be at least 6" ); fi; checkmat := MutableNullMat( 23 * 2^(m-4) - 3, 2 * m - 1, GF( 2 ) ); size := 2^(m-1); fieldels := SortedGaloisFieldElements( GF( size ) ); binels := BinaryRepresentation( fieldels, m-1 ); one := Z(2)^0; # make matrix pi bmat := TransposedMat( ShallowCopy( CheckMat( TombakCode( m-1, i, beta, gamma, w1, w2, false ) ) ) ); for k in [ 1 .. Length( bmat ) ] do for l in [ 1 .. Length( bmat[ 1 ] ) ] do checkmat[ k ][ l + 1 ] := bmat[ k ][ l ]; od; od; # make matrix J binel := BinaryRepresentation( u, m-1 ); for k in [ 1 .. size ] do checkmat[ Length( bmat ) + k ][ 1 ] := one; for l in [ 1 .. m-1 ] do checkmat[ Length( bmat ) + k ][ 1 + l ] := binel[ l ]; od; for l in [ 1 .. m-1 ] do checkmat[ Length( bmat ) + k ][ m + l ] := binels[ k ][ l ]; od; od; checkmat := TransposedMat( checkmat ); newcode := CheckMatCode( checkmat, Concatenation( "enlarged Tombak code (m=" ,String(m),")" ), GF(2) ); # newcode.wordLength := 5 * size - 1; # newcode.dimension := newcode.wordLength - (2 * m); newcode!.lowerBoundMinimumDistance := 4; newcode!.upperBoundMinimumDistance := 4; SetMinimumDistance(newcode, 4); newcode!.boundsCoveringRadius := [ 2 ]; SetCoveringRadius(newcode, 2); return( newcode ); end); guava-3.6/CHANGES.guava0000644017361200001450000002055411027426712014447 0ustar tabbottcrontabIn this file we record the changes since the first GAP 4 release of the GUAVA package. Version 3.6 (06-2008): o Added QCLDPCCodeFromGroup function. o Improved HadamardMat. o Corrected a missing ';' in Makefile.in, as well as several other minor make edits (thanks to Timothy Abbott) o Updated documentation. Version 3.5 (04-2008): o Minor changes (permission changes, etc) Version 3.4 (03-2008): o Modified the configure file for the C code (R. Miller). o Updated documentation. Version 3.3 (03-2008): o Added new C code written by CJ and a new Guava function MinimumWeight which is *much* faster than MinimumDistance (when the ground field is GF(2) or GF(3)). o Added Andreas Brouwer's patch for Leon's code to avoid some memory problems. Version 3.2 (01-2008): o Added a macro for malloc.h in leonconv.c to fix compilation error under Mac OS X o Added ExtendedReedSolomonCode, QuasiCyclicCode, CyclicMDSCode, FourNegacirculantSelfDualCode, ConstructionXCode, ConstructionXXCode, BZCode, IsDoublyEvenCode, IsSinglyEvenCode and IsEvenCode functions. Version 3.1 (10-2007): o Fixed a bug in MinimumDistance reported by Lappas Eleftherios. o William Stein fixed a compilation bug. o Fixed XML bugs pointed out by Frank Luebeck and Max Neunhoeffer Version 3.0: (7-2007) o Robert Miller and Tom Boothby added as authors. o Leon's code is now GPL'd (many thanks to Vera Pless and Steve Smith)! Robert and Tom are working on rewriting the code and have already fixed some bugs, compiling errors, and memory problems. o Fixed several bugs reported by Punarbasu Purkayastha (a EE grad student at the Univ of Maryland) in Decode, Decodeword for ReedSolomon codes, as well as a problem in the GUAVA documentation. o Re-united the "odd" and "even" forks of the GUAVA code. Version 2.8: Forked off a branch of GUAVA which is entirely GPL'd code. (None of Leon's code is included.) Otherwise, same as 2.7. This branch is used in SAGE (sage.scipy.org). Version 2.7: (5-2005) o Cen Tjhai ("CJ") added as author. o cjt: Complete rewrite of the files in the tbl subdirectory. There are (as of May 11, 2006) as updated as Brouwer's online tables (www.win.tue.nl/~aeb/voorlincod.html). o cjt: Created two functions in codeman.g*, SubCode and ConstructionB2Code. The ConstructionB2Code function is empty and to be implemented in a future version. o wdj: GUAVA Manual changes. Version 2.6: Forked off a branch of GUAVA which is entirely GPL'd code. (None of Leon's code is included.) Otherwise, same as 2.5. This branch is used in SAGE (sage.scipy.org). Version 2.5: (1-2006) o Fixed undesired feature in Decodeword (spotten by Cayanne McFarlane). o Added MinimumWeightWords to manual; modified GAP code for MinimumWeightWords to speed it up. o Modified CheckMatCode to "Set" *mutable* generator and check matrices. o Added BitFlipDecoder, a fast decoder for LDPC codes (written with Gordon McDonald). o Added GuavaVersion and guava_version o Added FerrorDesignCode, written with Peter Mayr at Linz (one of the SONATA authors). This requires SONATA be loaded. o Added QQRCodeNC (written with Greg Coy). o Miscellaneous additions to the GUAVA manual. Version 2.4: (6-2005) Minor bug fix - o In MatrixRepresentationOnRiemannRochSpaceP1, cleaned up code and fixed a bug (GAP does not process 1 the same as x^0 in some cases). o Fixed spelling error in guava.tst file. Version 2.3: (5-2005) o added PermutationDecoderNC, CyclicDecoder o change PermutationGroup in PermutationDecoder to PermutationAutomorphismGroup o in codegen.gi, line 2066, replace C.GeneratorMat by C.EvaluationMat, and then add the existence of this extra record component to the documentation o classical Goppa = AG codes over P^1 o curve record data structure for plane curves and some associated functions o divisor record data structure for curves (only used for P^1) and some associated functions o automorphism group of a divisor on P^1 (very slow) o function computing matrix representation of group action on Riemann-Roch space (in P^1 case only, also very slow) o one point AG codes o nicer evaluation codes in 2-d o miscellaneous functions for multivariate polynomials o new section on algebraic geometric codes in manual Version 2.0002 (5-2005) o A renaming of GUAVA 2.0, for the GAP 4.4.5 release. Version 2.0001: (12-2004) o Merely aded PolynomialByExtRepNC to GUAVA. (A *temporary* addition to last until GAP 4.4.5 was released.) Version 2.0: (12-2004) o Changed `ViewObj` method for random linear codes, speeding up the implementation of the RandomLinearCode command. o Modified BCHCode and RootsCode implementation. o Corrected bug in UpperBoundElias. o Rewrote GUAVA documentation into GAPDoc, with many revisions. o Added EvaluationCode and related codes (GeneralizedReedMullerCode, GeneralizedReedSolomonCode, OnePointAGCode, joint with Jason McGowan) o Added interpolation decoding method for GeneralizedReedSolomonCode (joint with Jason McGowan), GeneralizedReedSolomonDecoder. o Added S. Gao decoding method for GeneralizedReedSolomonCode, GeneralizedReedSolomonDecoderGao. o Fixed bug in MinimumDistance (wrong result if G=(I|A) and A had a row of 0s) o MinimumDistanceRandom algorithm implemented in non-binary case (joint with Wayne Irons). o Added list-decoding algorithm GeneralizedReedSolomonListDecoder (joint with Clifton Lennon) and related commands (some undocumented). o Bug fix for SortedGaloisFieldElements (used to construct Gabidulin codes). o CalculateLinearCodeCoveringRadius changed to a slightly faster algorithm. o minor bug fix for ExhaustiveSearchCoveringRadius o minor bug fix for IncreaseCoveringRadiusLowerBound o Changed ConstantWeightSubcode so it does not call Leon's program if wtdist is not installed. Moreover, the procedure interfacing with the binary had a bug, which was fixed. o Added check in AutomorphismGroup: if Leon's desauto is not compiled (e.g., on a windows machine) then it calls PermutationGroup command instead. o Added Decodeword (which also works for non-linear codes) o Added NearestNeighborDecodewords (for linear codes) o Added NearestNeighborGRSDecodewords (for GRS codes) o Added PermutationAutomorphismGroup (which will replace the poorly named PermutationGroup command added in version 1.9) o Moved several decoding commands from codeops.gi to decoders.gi (with no change in functionality). o Added LowerBoundGilbertVarshamov and LowerBoundSpherePacking. o Added DivisorsMultivariatePolynomial and related commands (some undocumented). o Released under the GNU GPL. Version 1.9: (3-2004) o Faster MinimumDistance algorithm (joint with Aron Foster, a student). o MinimumDistanceLeon algorithm (joint with Aron Foster) in binary case. o Faster PutStandard form algorithm (with Frank Luebeck). o New PermutationGroup command (for possibly non-binary codes). o New PermutationDecode command. Version 1.82: (7-2003) o Slight changes to prepare for the different loading mechanism for GAP packages used in the upcoming GAP 4.4. Version 1.8: o New commands for toric codes. Version 1.7: (2-2003) o Various typos in manual fixed. o lib/codecstr.g[di]: `AmalgamatedDirectSumCode' previously misspelt as `AmalgatedDirectSumCode' corrected. o Version Id headers in doc/* and lib/* files added. o README: updated. o init.g: now checks the C code has been compiled and warns of missing functionality if not compiled. o banner.g, lib/setup.g: banner split off as a separate file. o PkgInfo.g, CHANGES (this file): added. Version 1.6: (9-2001) New maintainer: David Joyner. o Bugs in `IsAffineCode' and `MinimumDistance' (reported by Akihiro Munemasa, who also supplied a fix for the `IsAffineCode' bug) fixed. o Manual thoroughly reworked. HTML manual made available. Version 1.5: GAP 4.2 version. Not compatible with GAP 4.1. Version 1.4: First GAP4 version by Lea Ruscio. Created for GAP 4.1. Incompatible with GAP 4.2. Version 1.3: Last GAP3 version. - David Joyner -- June 22, 2008 guava-3.6/guava.tst0000644017361200001450000002733711026723452014217 0ustar tabbottcrontab##gap> START_TEST("arbitrary identifier string"); ###################### GUAVA test file ## ## Created 02-2006; last modified 18-03-2008 ## Print("\n AClosestVectorCombinationsMatFFEVecFFE\n"); F:=GF(3);; x:= Indeterminate( F );; pol:= x^2+1; C := GeneratorPolCode(pol,8,F); v:=Codeword("12101111"); v:=VectorCodeword(v); G:=GeneratorMat(C); AClosestVectorCombinationsMatFFEVecFFE(G,F,v,1,1); Print("\n AClosestVectorCombinationsMatFFEVecFFECoords\n"); F:=GF(3);; x:= Indeterminate( F );; pol:= x^2+1; C := GeneratorPolCode(pol,8,F); v:=Codeword("12101111"); v:=VectorCodeword(v);; G:=GeneratorMat(C);; AClosestVectorCombinationsMatFFEVecFFECoords(G,F,v,1,1); Print("\n DistancesDistributionMatFFEVecFFE\n"); v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];; vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ], [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];; DistancesDistributionMatFFEVecFFE(vecs,GF(3),v); Print("\n DistancesDistributionVecFFEsVecFFE\n"); v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];; vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ], [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];; DistancesDistributionVecFFEsVecFFE(vecs,v); Print("\n DistanceVecFFE\n"); v1:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];; v2:=[ Z(3), Z(3)^0, Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];; DistanceVecFFE(v1,v2); Print("\n Codes\n"); C:=RandomLinearCode(20,10,GF(4)); c:=Random(C); NamesOfComponents(C); NamesOfComponents(c); c!.VectorCodeword; Display(last); C!.Dimension; Print("\n Codeword\n"); c := Codeword([0,1,1,1,0]); VectorCodeword( c ); c2 := Codeword([0,1,1,1,0], GF(3)); VectorCodeword( c2 ); Codeword([c, c2, "0110"]); p := UnivariatePolynomial(GF(2), [Z(2)^0, 0*Z(2), Z(2)^0]); Codeword(p); Print("\n Codeword2\n"); C := WholeSpaceCode(7,GF(5)); Codeword(["0220110", [1,1,1]], C); Codeword(["0220110", [1,1,1]], 7, GF(5)); C:=RandomLinearCode(10,5,GF(3)); Codeword("1000000000",C); Codeword("1000000000",10,GF(3)); Print("\n CodewordNr\n"); B := BinaryGolayCode(); c := CodewordNr(B, 4); R := ReedSolomonCode(2,2); AsSSortedList(R); CodewordNr(R, [1,3]); Print("\n IsCodeword\n"); IsCodeword(1); IsCodeword(ReedMullerCode(2,3)); IsCodeword("11111"); IsCodeword(Codeword("11111")); Print("\n Codewords EQ\n"); P := UnivariatePolynomial(GF(2), Z(2)*[1,0,0,1]); c := Codeword(P, GF(2)); P = c; # codeword operation c2 := Codeword("1001", GF(2)); c = c2; C:=HammingCode(3); c1:=Random(C); c2:=Random(C); EQ(c1,c2); not EQ(c1,c2); Print("\n Codewords +\n"); C:=RandomLinearCode(10,5,GF(3)); c:=Random(C); Codeword(c+"2000000000"); Print("\n Codewords +, 2\n"); C:=RandomLinearCode(10,5); c:=Random(C); c+C; c+C=C; IsLinearCode(c+C); v:=Codeword("100000000"); v+C; C=v+C; C := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) ); Elements(C); v:=Codeword("0011"); C+v; Elements(C+v); Print("\n PolyCodeword\n"); a := Codeword("011011");; PolyCodeword(a); Print("\n TreatAsVector\n"); B := BinaryGolayCode(); c := CodewordNr(B, 4); TreatAsVector(c); c; Print("\n TreatAsPoly\n"); a := Codeword("00001",GF(2)); TreatAsPoly(a); a; b := NullWord(6,GF(4)); TreatAsPoly(b); b; Print("\n NullWord\n"); NullWord(8); Codeword("0000") = NullWord(4); NullWord(5,GF(16)); NullWord(ExtendedTernaryGolayCode()); Print("\n DistanceCodeword\n"); a := Codeword([0, 1, 2, 0, 1, 2]);; b := NullWord(6, GF(3));; DistanceCodeword(a, b); DistanceCodeword(b, a); DistanceCodeword(a, a); Print("\n WeightCodeword\n"); WeightCodeword(Codeword("22222")); WeightCodeword(NullWord(3)); C := HammingCode(3); Minimum(List(AsSSortedList(C){[2..Size(C)]}, WeightCodeword ) ); Print("\n ElementsCodes\n"); C := ElementsCode(["1100", "1010", "0001"], "example code", GF(2) ); MinimumDistance(C); C; Print("\n IsLinearCode\n"); L := Z(2)*[ [0,0,0], [1,0,0], [0,1,1], [1,1,1] ];; C := ElementsCode( L, GF(2) ); IsLinearCode( C ); C; Print("\n Decode\n"); R := ReedMullerCode( 1, 3 ); w := [ 1, 0, 1, 1 ] * R; Decode( R, w ); Decode( R, w + "10000000" ); Print("\n Codes =\n"); M := [ [0, 0], [1, 0], [0, 1], [1, 1] ];; C1 := ElementsCode( M, GF(2) ); M = C1; C2 := GeneratorMatCode( [ [1, 0], [0, 1] ], GF(2) ); C1 = C2; ReedMullerCode( 1, 3 ) = HadamardCode( 8 ); WholeSpaceCode( 5, GF(4) ) = WholeSpaceCode( 5, GF(2) ); Print("\n EvaluationCode \n"); F:=GF(11); R := PolynomialRing(F,2); indets := IndeterminatesOfPolynomialRing(R);; x:=indets[1];; y:=indets[2];; L:=[x^2*y,x*y,x^5,x^4,x^3,x^2,x,x^0];; Pts:=[ [ Z(11)^9, Z(11) ], [ Z(11)^8, Z(11) ], [ Z(11)^7, 0*Z(11) ],\ [ Z(11)^6, 0*Z(11) ], [ Z(11)^5, 0*Z(11) ], [ Z(11)^4, 0*Z(11) ],\ [ Z(11)^3, Z(11) ], [ Z(11)^2, 0*Z(11) ], [ Z(11), 0*Z(11) ],\ [ Z(11)^0, 0*Z(11) ], [ 0*Z(11), Z(11) ] ];; C:=EvaluationCode(Pts,L,R); ##MinimumDistance(C); Print("\n DivisorOnAffineCurve \n"); F:=GF(11);; R := PolynomialRing(F,2);; indets := IndeterminatesOfPolynomialRing(R);; x:=indets[1];; y:=indets[2];; crv:=AffineCurve(y^2-x^11+x,R); Pts:=AffinePointsOnCurve(y^2-x^11+x,R,F); #q:=5; #F:=GF(q); #R:=PolynomialRing(F,2);; #vars:=IndeterminatesOfPolynomialRing(R); #x:=vars[1]; #y:=vars[2]; #crv:=AffineCurve(y^3-x^3-x-1,R); #Pts:=AffinePointsOnCurve(crv,R,F);; supp:=[Pts[1],Pts[2]]; D:=DivisorOnAffineCurve([1,-1],supp,crv); Print("\n Divisors On Affine Curves, 2 \n"); F:=GF(11); R1:=PolynomialRing(F,1);; var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];; b:=X(F,var1); var2:=Concatenation(var1,[b]); R2:=PolynomialRing(F,var2); crvP1:=AffineCurve(b,R2); div1:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1); DivisorDegree(div1); div2:=DivisorOnAffineCurve([1,2,3,4],[Z(11),Z(11)^2,Z(11)^3,Z(11)^4],crvP1); DivisorDegree(div2); div3:=DivisorAddition(div1,div2); DivisorDegree(div3); DivisorIsEffective(div1); DivisorIsEffective(div2); ndiv1:=DivisorNegate(div1); zdiv:=DivisorAddition(div1,ndiv1); DivisorIsZero(zdiv); div_gcd:=DivisorGCD(div1,div2); div_lcm:=DivisorLCM(div1,div2); DivisorDegree(div_gcd); DivisorDegree(div_lcm); DivisorEqual(div3,DivisorAddition(div_gcd,div_lcm)); Print("\n DivisorOfRationalFunctionP1 \n"); F:=GF(11); R1:=PolynomialRing(F,1);; var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];; b:=X(F,var1); var2:=Concatenation(var1,[b]); R2:=PolynomialRing(F,var2); pt:=Z(11); f:=RiemannRochSpaceBasisFunctionP1(pt,2,R2); Df:=DivisorOfRationalFunctionP1(f,R2); Df.support; F:=GF(11);; R:=PolynomialRing(F,2);; vars:=IndeterminatesOfPolynomialRing(R);; a:=vars[1];; b:=vars[2];; f:=(a^4+Z(11)^6*a^3-a^2+Z(11)^7*a+Z(11)^0)/(a^4+Z(11)^4*a^3+Z(11)*a^2+Z(11)^7*a+Z(11));; divf:=DivisorOfRationalFunctionP1(f,R); denf:=DenominatorOfRationalFunction(f); RootsOfUPol(denf); numf:=NumeratorOfRationalFunction(f); RootsOfUPol(numf); Print("\n ActionMoebiusTransformationOnFunction\n"); F:=GF(11); R1:=PolynomialRing(F,1);; var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];; b:=X(F,var1); var2:=Concatenation(var1,[b]); R2:=PolynomialRing(F,var2); crvP1:=AffineCurve(b,R2); D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1); A:=Z(11)^0*[[1,2],[1,4]]; ActionMoebiusTransformationOnDivisorDefinedP1(A,D); A:=Z(11)^0*[[1,2],[3,4]]; ActionMoebiusTransformationOnDivisorDefinedP1(A,D); ActionMoebiusTransformationOnDivisorP1(A,D); f:=MoebiusTransformation(A,R1); ActionMoebiusTransformationOnFunction(A,f,R1); Print("\n GoppaCodeClassical\n"); F:=GF(11);; R2:=PolynomialRing(F,2);; vars:=IndeterminatesOfPolynomialRing(R2);; a:=vars[1];;b:=vars[2];; cdiv:=[ 1, 2, -1, -2 ]; sdiv:=[ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ]; crv:=rec(polynomial:=b,ring:=R2); div:=DivisorOnAffineCurve(cdiv,sdiv,crv); pts:=Difference(Elements(GF(11)),div.support); C:=GoppaCodeClassical(div,pts); MinimumDistance(C); Print("\n OnePointAGCode\n"); F:=GF(11); R := PolynomialRing(F,2); indets := IndeterminatesOfPolynomialRing(R); x:=indets[1]; y:=indets[2]; P:=AffinePointsOnCurve(y^2-x^11+x,R,F);; C:=OnePointAGCode(y^2-x^11+x,P,15,R); Cd := DualCode(C); MinimumDistance(Cd); Pts:=List([1,2,4,6,7,8,9,10,11],i->P[i]);; C:=OnePointAGCode(y^2-x^11+x,Pts,10,R); Cd := DualCode(C); MinimumDistance(Cd); Print("\n Punctured Expurgated Augmented code\n"); C1 := PuncturedCode( ReedMullerCode( 1, 4 ) ); C2 := BCHCode( 15, 7, GF(2) ); C2 = C1; p := CodeIsomorphism( C1, C2 ); C3 := PermutedCode( C1, p ); C2 = C3; C1 := HammingCode( 4 );; WeightDistribution( C1 ); L := Filtered( AsSSortedList(C1), i -> WeightCodeword(i) = 3 );; C2 := ExpurgatedCode( C1, L ); WeightDistribution( C2 ); C31 := ReedMullerCode( 1, 3 ); C32 := AugmentedCode(C31,["00000011","00000101","00010001"]); C32 = ReedMullerCode( 2, 3 ); C1 := CordaroWagnerCode(6); Codeword( [0,0,1,1,1,1] ) in C1; C2 := AugmentedCode( C1 ); Codeword( [1,1,0,0,0,0] ) in C2; Print("\n direct sum code\n"); C1 := ElementsCode( [ [1,0], [4,5] ], GF(7) );; C2 := ElementsCode( [ [0,0,0], [3,3,3] ], GF(7) );; D := DirectSumCode(C1, C2);; AsSSortedList(D); D = C1 + C2; # addition = direct sum Print("\n lower bound min dist\n"); C := BCHCode( 45, 7 ); LowerBoundMinimumDistance( C ); LowerBoundMinimumDistance( 45, 23, GF(2) ); Print("\n MatrixRepresentationOnRiemannRochSpaceP1\n"); F:=GF(11); R1:=PolynomialRing(F,1);; var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];; b:=X(F,var1); var2:=Concatenation(var1,[b]); R2:=PolynomialRing(F,var2); crvP1:=AffineCurve(b,R2); D:=DivisorOnAffineCurve([1,1,1,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1); div:=D; agp:=DivisorAutomorphismGroupP1(D);; ## slow ##IdGroup(agp); ## requires small groups database g:=Random(agp); rho:=MatrixRepresentationOnRiemannRochSpaceP1(g,D); Display(rho); Eigenvalues(F,rho); charpoly:=CharacteristicPolynomial(rho); Factors(charpoly); JordanDecomposition(rho); Print("\n UUVCode\n"); C1 := EvenWeightSubcode(WholeSpaceCode(4, GF(2))); C2 := RepetitionCode(4, GF(2)); R := UUVCode(C1, C2); R = ReedMullerCode(1,3); Print("\n LexiCode\n"); C := LexiCode( 4, 3, GF(5) ); IsLinearCode(C); B := [ [Z(2)^0, 0*Z(2), 0*Z(2)], [Z(2)^0, Z(2)^0, 0*Z(2)] ];; C := LexiCode( B, 2, GF(2) ); IsLinearCode(C); Print("\n GeneratorMatCode\n"); G := Z(3)^0 * [[1,0,1,2,0],[0,1,2,1,1],[0,0,1,2,1]];; C1 := GeneratorMatCode( G, GF(3) ); C2 := GeneratorMatCode( IdentityMat( 5, GF(2) ), GF(2) ); C3 := GeneratorMatCode(List(AsSSortedList(NordstromRobinsonCode()),x ->VectorCodeword(x)),GF(2)); Print("\n CheckMatCode\n"); H := Z(3)^0 * [[1,0,1,2,0],[0,1,2,1,1],[0,0,1,2,1]];; C1 := CheckMatCode( H, GF(3) ); CheckMat(C1); C2 := CheckMatCode( IdentityMat( 5, GF(2) ), GF(2) ); Print("\n AlternantCode\n"); Y := [ 1, 1, 1, 1, 1, 1, 1];; a := PrimitiveUnityRoot( 2, 7 );; alpha := List( [0..6], i -> a^i );; C := AlternantCode( 2, Y, alpha, GF(8) ); Print("\n RandomLinearCode\n"); C := RandomLinearCode( 15, 4, GF(3) ); Display(C); C := RandomLinearCode( 35, 20, GF(3) ); Display(C); Print("\n EvaluationBivariateCode\n"); q:=4;; F:=GF(q^2);; R:=PolynomialRing(F,2);; vars:=IndeterminatesOfPolynomialRing(R);; x:=vars[1];; y:=vars[2];; crv:=AffineCurve(y^q+y-x^(q+1),R); L:=[ x^0, x, x^2*y^-1 ]; Pts:=AffinePointsOnCurve(crv.polynomial,crv.ring,F);; C1:=EvaluationBivariateCode(Pts,L,crv); P:=Difference(Pts,[[ 0*Z(2^4)^0, 0*Z(2)^0 ]]);; C2:=EvaluationBivariateCodeNC(P,L,crv); C3:=EvaluationCode(P,L,R); MinimumDistance(C1); MinimumDistance(C2); MinimumDistance(C3); ## gap> STOP_TEST( "filename", 10000 );guava-3.6/COPYING.guava0000644017361200001450000014376511026723452014521 0ustar tabbottcrontabThere are 2 parts to this software, both of which are now GPL'd. You may use version 2 or version 3 (at your preference). Part 1: Leon's C code. Part 2: GUAVA code. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Part 1: For many years GUAVA has been released along with the ``backtracking'' C programs of J. Leon. In one of his *.c files the following statements occur: ``Copyright (C) 1992 by Jeffrey S. Leon. This software may be used freely for educational and research purposes. Any other use requires permission from the author.'' The following should be appended: ``I, Jeffrey S. Leon, agree to license all the partition backtrack code which I have written under the GPL (www.fsf.org) as of this date, April 17, 2007.'' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Part 2: GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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 . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . guava-3.6/htm/0000755017361200001450000000000011026723452013134 5ustar tabbottcrontabguava-3.6/htm/chap3.html0000644017361200001450000007707111027015742015031 0ustar tabbottcrontab GAP (guava) - Chapter 3: Codewords

3. Codewords

Let GF(q) denote a finite field with q (a prime power) elements. A code is a subset C of some finite-dimensional vector space V over GF(q). The length of C is the dimension of V. Usually, V=GF(q)^n and the length is the number of coordinate entries. When C is itself a vector space over GF(q) then it is called a linear code and the dimension of C is its dimension as a vector space over GF(q).

In GUAVA, a `codeword' is a GAP record, with one of its components being an element in V. Likewise, a `code' is a GAP record, with one of its components being a subset (or subspace with given basis, if C is linear) of V.

  gap> C:=RandomLinearCode(20,10,GF(4));
  a  [20,10,?] randomly generated code over GF(4)
  gap> c:=Random(C);
  [ 1 a 0 0 0 1 1 a^2 0 0 a 1 1 1 a 1 1 a a 0 ]
  gap> NamesOfComponents(C);
  [ "LeftActingDomain", "GeneratorsOfLeftOperatorAdditiveGroup", "WordLength",
    "GeneratorMat", "name", "Basis", "NiceFreeLeftModule", "Dimension", 
     "Representative", "ZeroImmutable" ]
  gap> NamesOfComponents(c);
  [ "VectorCodeword", "WordLength", "treatAsPoly" ]
  gap> c!.VectorCodeword;
  [ immutable compressed vector length 20 over GF(4) ] 
  gap> Display(last);
  [ Z(2^2), Z(2^2), Z(2^2), Z(2)^0, Z(2^2), Z(2^2)^2, 0*Z(2), Z(2^2), Z(2^2),
    Z(2)^0, Z(2^2)^2, 0*Z(2), 0*Z(2), Z(2^2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2^2)^2,
    Z(2)^0, 0*Z(2) ]
  gap> C!.Dimension;
  10

Mathematically, a `codeword' is an element of a code C, but in GUAVA the Codeword and VectorCodeword commands have implementations which do not check if the codeword belongs to C (i.e., are independent of the code itself). They exist primarily to make it easier for the user to construct a the associated GAP record. Using these commands, one can enter into a GAP both a codeword c (belonging to C) and a received word r (not belonging to C) using the same command. The user can input codewords in different formats (as strings, vectors, and polynomials), and output information is formatted in a readable way.

A codeword c in a linear code C arises in practice by an initial encoding of a 'block' message m, adding enough redundancy to recover m after c is transmitted via a 'noisy' communication medium. In GUAVA, for linear codes, the map mlongmapsto c is computed using the command c:=m*C and recovering m from c is obtained by the command InformationWord(C,c). These commands are explained more below.

Many operations are available on codewords themselves, although codewords also work together with codes (see chapter 4. on Codes).

The first section describes how codewords are constructed (see Codeword (3.1-1) and IsCodeword (3.1-3)). Sections 3.2 and 3.3 describe the arithmetic operations applicable to codewords. Section 3.4 describe functions that convert codewords back to vectors or polynomials (see VectorCodeword (3.4-1) and PolyCodeword (3.4-2)). Section ??? describe functions that change the way a codeword is displayed (see TreatAsVector (3.5-1) and TreatAsPoly (3.5-2)). Finally, Section 3.6 describes a function to generate a null word (see NullWord (3.6-1)) and some functions for extracting properties of codewords (see DistanceCodeword (3.6-2), Support (3.6-3) and WeightCodeword (3.6-4)).

3.1 Construction of Codewords

3.1-1 Codeword
> Codeword( obj[, n][, F] )( function )

Codeword returns a codeword or a list of codewords constructed from obj. The object obj can be a vector, a string, a polynomial or a codeword. It may also be a list of those (even a mixed list).

If a number n is specified, all constructed codewords have length n. This is the only way to make sure that all elements of obj are converted to codewords of the same length. Elements of obj that are longer than n are reduced in length by cutting of the last positions. Elements of obj that are shorter than n are lengthened by adding zeros at the end. If no n is specified, each constructed codeword is handled individually.

If a Galois field F is specified, all codewords are constructed over this field. This is the only way to make sure that all elements of obj are converted to the same field F (otherwise they are converted one by one). Note that all elements of obj must have elements over F or over `Integers'. Converting from one Galois field to another is not allowed. If no F is specified, vectors or strings with integer elements will be converted to the smallest Galois field possible.

Note that a significant speed increase is achieved if F is specified, even when all elements of obj already have elements over F.

Every vector in obj can be a finite field vector over F or a vector over `Integers'. In the last case, it is converted to F or, if omitted, to the smallest Galois field possible.

Every string in obj must be a string of numbers, without spaces, commas or any other characters. These numbers must be from 0 to 9. The string is converted to a codeword over F or, if F is omitted, over the smallest Galois field possible. Note that since all numbers in the string are interpreted as one-digit numbers, Galois fields of size larger than 10 are not properly represented when using strings. In fact, no finite field of size larger than 11 arises in this fashion at all.

Every polynomial in obj is converted to a codeword of length n or, if omitted, of a length dictated by the degree of the polynomial. If F is specified, a polynomial in obj must be over F.

Every element of obj that is already a codeword is changed to a codeword of length n. If no n was specified, the codeword doesn't change. If F is specified, the codeword must have base field F.

gap> c := Codeword([0,1,1,1,0]);
[ 0 1 1 1 0 ]
gap> VectorCodeword( c ); 
[ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ]
gap> c2 := Codeword([0,1,1,1,0], GF(3));
[ 0 1 1 1 0 ]
gap> VectorCodeword( c2 );
[ 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, 0*Z(3) ]
gap> Codeword([c, c2, "0110"]);
[ [ 0 1 1 1 0 ], [ 0 1 1 1 0 ], [ 0 1 1 0 ] ]
gap> p := UnivariatePolynomial(GF(2), [Z(2)^0, 0*Z(2), Z(2)^0]);
Z(2)^0+x_1^2
gap> Codeword(p);
x^2 + 1 

This command can also be called using the syntax Codeword(obj,C). In this format, the elements of obj are converted to elements of the same ambient vector space as the elements of a code C. The command Codeword(c,C) is the same as calling Codeword(c,n,F), where n is the word length of C and the F is the ground field of C.

gap> C := WholeSpaceCode(7,GF(5));
a cyclic [7,7,1]0 whole space code over GF(5)
gap> Codeword(["0220110", [1,1,1]], C);
[ [ 0 2 2 0 1 1 0 ], [ 1 1 1 0 0 0 0 ] ]
gap> Codeword(["0220110", [1,1,1]], 7, GF(5));
[ [ 0 2 2 0 1 1 0 ], [ 1 1 1 0 0 0 0 ] ] 
gap> C:=RandomLinearCode(10,5,GF(3));
a linear [10,5,1..3]3..5 random linear code over GF(3)
gap> Codeword("1000000000",C);
[ 1 0 0 0 0 0 0 0 0 0 ]
gap> Codeword("1000000000",10,GF(3));
[ 1 0 0 0 0 0 0 0 0 0 ]

3.1-2 CodewordNr
> CodewordNr( C, list )( function )

CodewordNr returns a list of codewords of C. list may be a list of integers or a single integer. For each integer of list, the corresponding codeword of C is returned. The correspondence of a number i with a codeword is determined as follows: if a list of elements of C is available, the i^th element is taken. Otherwise, it is calculated by multiplication of the i^th information vector by the generator matrix or generator polynomial, where the information vectors are ordered lexicographically. In particular, the returned codeword(s) could be a vector or a polynomial. So CodewordNr(C, i) is equal to AsSSortedList(C)[i], described in the next chapter. The latter function first calculates the set of all the elements of C and then returns the i^th element of that set, whereas the former only calculates the i^th codeword.

gap> B := BinaryGolayCode();
a cyclic [23,12,7]3 binary Golay code over GF(2)
gap> c := CodewordNr(B, 4);
x^22 + x^20 + x^17 + x^14 + x^13 + x^12 + x^11 + x^10
gap> R := ReedSolomonCode(2,2);
a cyclic [2,1,2]1 Reed-Solomon code over GF(3)
gap> AsSSortedList(R);
[ [ 0 0 ], [ 1 1 ], [ 2 2 ] ]
gap> CodewordNr(R, [1,3]);
[ [ 0 0 ], [ 2 2 ] ]

3.1-3 IsCodeword
> IsCodeword( obj )( function )

IsCodeword returns `true' if obj, which can be an object of arbitrary type, is of the codeword type and `false' otherwise. The function will signal an error if obj is an unbound variable.

gap> IsCodeword(1);
false
gap> IsCodeword(ReedMullerCode(2,3));
false
gap> IsCodeword("11111");
false
gap> IsCodeword(Codeword("11111"));
true 

3.2 Comparisons of Codewords

3.2-1 =
> =( c1, c2 )( function )

The equality operator c1 = c2 evaluates to `true' if the codewords c1 and c2 are equal, and to `false' otherwise. Note that codewords are equal if and only if their base vectors are equal. Whether they are represented as a vector or polynomial has nothing to do with the comparison.

Comparing codewords with objects of other types is not recommended, although it is possible. If c2 is the codeword, the other object c1 is first converted to a codeword, after which comparison is possible. This way, a codeword can be compared with a vector, polynomial, or string. If c1 is the codeword, then problems may arise if c2 is a polynomial. In that case, the comparison always yields a `false', because the polynomial comparison is called.

The equality operator is also denoted EQ, and EQ(c1,c2) is the same as c1 = c2. There is also an inequality operator, < >, or not EQ.

gap> P := UnivariatePolynomial(GF(2), Z(2)*[1,0,0,1]);
Z(2)^0+x_1^3
gap> c := Codeword(P, GF(2));
x^3 + 1
gap> P = c;        # codeword operation
true
gap> c2 := Codeword("1001", GF(2));
[ 1 0 0 1 ]
gap> c = c2;
true 
gap> C:=HammingCode(3);
a linear [7,4,3]1 Hamming (3,2) code over GF(2)
gap> c1:=Random(C);
[ 1 0 0 1 1 0 0 ]
gap> c2:=Random(C);
[ 0 1 0 0 1 0 1 ]
gap> EQ(c1,c2);
false
gap> not EQ(c1,c2);
true

3.3 Arithmetic Operations for Codewords

3.3-1 +
> +( c1, c2 )( function )

The following operations are always available for codewords. The operands must have a common base field, and must have the same length. No implicit conversions are performed.

The operator + evaluates to the sum of the codewords c1 and c2.

gap> C:=RandomLinearCode(10,5,GF(3));
a linear [10,5,1..3]3..5 random linear code over GF(3)
gap> c:=Random(C);
[ 1 0 2 2 2 2 1 0 2 0 ]
gap> Codeword(c+"2000000000");
[ 0 0 2 2 2 2 1 0 2 0 ]
gap> Codeword(c+"1000000000");

The last command returns a GAP ERROR since the `codeword' which GUAVA associates to "1000000000" belongs to GF(2) and not GF(3).

3.3-2 -
> -( c1, c2 )( function )

Similar to addition: the operator - evaluates to the difference of the codewords c1 and c2.

3.3-3 +
> +( v, C )( function )

The operator v+C evaluates to the coset code of code C after adding a `codeword' v to all codewords in C. Note that if c in C then mathematically c+C=C but GUAVA only sees them equal as sets. See CosetCode (6.1-17).

Note that the command C+v returns the same output as the command v+C.

gap> C:=RandomLinearCode(10,5);
a  [10,5,?] randomly generated code over GF(2)
gap> c:=Random(C);
[ 0 0 0 0 0 0 0 0 0 0 ]
gap> c+C;
[ add. coset of a  [10,5,?] randomly generated code over GF(2) ]
gap> c+C=C;
true
gap> IsLinearCode(c+C);
false
gap> v:=Codeword("100000000");
[ 1 0 0 0 0 0 0 0 0 ]
gap> v+C;
[ add. coset of a  [10,5,?] randomly generated code over GF(2) ]
gap> C=v+C;
false
gap> C := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
a linear [4,2,1]1 code defined by generator matrix over GF(2)
gap> Elements(C);
[ [ 0 0 0 0 ], [ 0 1 0 0 ], [ 1 0 0 0 ], [ 1 1 0 0 ] ]
gap> v:=Codeword("0011");
[ 0 0 1 1 ]
gap> C+v;
[ add. coset of a linear [4,2,4]1 code defined by generator matrix over GF(2) ]
gap> Elements(C+v);
[ [ 0 0 1 1 ], [ 0 1 1 1 ], [ 1 0 1 1 ], [ 1 1 1 1 ] ]

In general, the operations just described can also be performed on codewords expressed as vectors, strings or polynomials, although this is not recommended. The vector, string or polynomial is first converted to a codeword, after which the normal operation is performed. For this to go right, make sure that at least one of the operands is a codeword. Further more, it will not work when the right operand is a polynomial. In that case, the polynomial operations (FiniteFieldPolynomialOps) are called, instead of the codeword operations (CodewordOps).

Some other code-oriented operations with codewords are described in 4.2.

3.4 Functions that Convert Codewords to Vectors or Polynomials

3.4-1 VectorCodeword
> VectorCodeword( obj )( function )

Here obj can be a code word or a list of code words. This function returns the corresponding vectors over a finite field.

gap> a := Codeword("011011");; 
gap> VectorCodeword(a);
[ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ]

3.4-2 PolyCodeword
> PolyCodeword( obj )( function )

PolyCodeword returns a polynomial or a list of polynomials over a Galois field, converted from obj. The object obj can be a codeword, or a list of codewords.

gap> a := Codeword("011011");; 
gap> PolyCodeword(a);
x_1+x_1^2+x_1^4+x_1^5

3.5 Functions that Change the Display Form of a Codeword

3.5-1 TreatAsVector
> TreatAsVector( obj )( function )

TreatAsVector adapts the codewords in obj to make sure they are printed as vectors. obj may be a codeword or a list of codewords. Elements of obj that are not codewords are ignored. After this function is called, the codewords will be treated as vectors. The vector representation is obtained by using the coefficient list of the polynomial.

Note that this only changes the way a codeword is printed. TreatAsVector returns nothing, it is called only for its side effect. The function VectorCodeword converts codewords to vectors (see VectorCodeword (3.4-1)).

gap> B := BinaryGolayCode();
a cyclic [23,12,7]3 binary Golay code over GF(2)
gap> c := CodewordNr(B, 4);
x^22 + x^20 + x^17 + x^14 + x^13 + x^12 + x^11 + x^10
gap> TreatAsVector(c);
gap> c;
[ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 0 0 1 0 1 ] 

3.5-2 TreatAsPoly
> TreatAsPoly( obj )( function )

TreatAsPoly adapts the codewords in obj to make sure they are printed as polynomials. obj may be a codeword or a list of codewords. Elements of obj that are not codewords are ignored. After this function is called, the codewords will be treated as polynomials. The finite field vector that defines the codeword is used as a coefficient list of the polynomial representation, where the first element of the vector is the coefficient of degree zero, the second element is the coefficient of degree one, etc, until the last element, which is the coefficient of highest degree.

Note that this only changes the way a codeword is printed. TreatAsPoly returns nothing, it is called only for its side effect. The function PolyCodeword converts codewords to polynomials (see PolyCodeword (3.4-2)).

gap> a := Codeword("00001",GF(2));
[ 0 0 0 0 1 ]
gap> TreatAsPoly(a); a;
x^4
gap> b := NullWord(6,GF(4));
[ 0 0 0 0 0 0 ]
gap> TreatAsPoly(b); b;
0 

3.6 Other Codeword Functions

3.6-1 NullWord
> NullWord( n, F )( function )

Other uses: NullWord( n ) (default F=GF(2)) and NullWord( C ). NullWord returns a codeword of length n over the field F of only zeros. The integer n must be greater then zero. If only a code C is specified, NullWord will return a null word with both the word length and the Galois field of C.

gap> NullWord(8);
[ 0 0 0 0 0 0 0 0 ]
gap> Codeword("0000") = NullWord(4);
true
gap> NullWord(5,GF(16));
[ 0 0 0 0 0 ]
gap> NullWord(ExtendedTernaryGolayCode());
[ 0 0 0 0 0 0 0 0 0 0 0 0 ] 

3.6-2 DistanceCodeword
> DistanceCodeword( c1, c2 )( function )

DistanceCodeword returns the Hamming distance from c1 to c2. Both variables must be codewords with equal word length over the same Galois field. The Hamming distance between two words is the number of places in which they differ. As a result, DistanceCodeword always returns an integer between zero and the word length of the codewords.

gap> a := Codeword([0, 1, 2, 0, 1, 2]);; b := NullWord(6, GF(3));;
gap> DistanceCodeword(a, b);
4
gap> DistanceCodeword(b, a);
4
gap> DistanceCodeword(a, a);
0 

3.6-3 Support
> Support( c )( function )

Support returns a set of integers indicating the positions of the non-zero entries in a codeword c.

gap> a := Codeword("012320023002");; Support(a);
[ 2, 3, 4, 5, 8, 9, 12 ]
gap> Support(NullWord(7));
[  ] 

The support of a list with codewords can be calculated by taking the union of the individual supports. The weight of the support is the length of the set.

gap> L := Codeword(["000000", "101010", "222000"], GF(3));;
gap> S := Union(List(L, i -> Support(i)));
[ 1, 2, 3, 5 ]
gap> Length(S);
4 

3.6-4 WeightCodeword
> WeightCodeword( c )( function )

WeightCodeword returns the weight of a codeword c, the number of non-zero entries in c. As a result, WeightCodeword always returns an integer between zero and the word length of the codeword.

gap> WeightCodeword(Codeword("22222"));
5
gap> WeightCodeword(NullWord(3));
0
gap> C := HammingCode(3);
a linear [7,4,3]1 Hamming (3,2) code over GF(2)
gap> Minimum(List(AsSSortedList(C){[2..Size(C)]}, WeightCodeword ) );
3 
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

generated by GAPDoc2HTML

guava-3.6/htm/chap2.html0000644017361200001450000004115211027015742015017 0ustar tabbottcrontab GAP (guava) - Chapter 2: Coding theory functions in GAP
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

2. Coding theory functions in GAP

This chapter will recall from the GAP4.4.5 manual some of the GAP coding theory and finite field functions useful for coding theory. Some of these functions are partially written in C for speed. The main functions are

  • AClosestVectorCombinationsMatFFEVecFFE,

  • AClosestVectorCombinationsMatFFEVecFFECoords,

  • CosetLeadersMatFFE,

  • DistancesDistributionMatFFEVecFFE,

  • DistancesDistributionVecFFEsVecFFE,

  • DistanceVecFFE and WeightVecFFE,

  • ConwayPolynomial and IsCheapConwayPolynomial,

  • IsPrimitivePolynomial, and RandomPrimitivePolynomial.

However, the GAP command PrimitivePolynomial returns an integer primitive polynomial not the finite field kind.

2.1 Distance functions

2.1-1 AClosestVectorCombinationsMatFFEVecFFE
> AClosestVectorCombinationsMatFFEVecFFE( mat, F, vec, r, st )( function )

This command runs through the F-linear combinations of the vectors in the rows of the matrix mat that can be written as linear combinations of exactly r rows (that is without using zero as a coefficient) and returns a vector from these that is closest to the vector vec. The length of the rows of mat and the length of vec must be equal, and all elements must lie in F. The rows of mat must be linearly independent. If it finds a vector of distance at most st, which must be a nonnegative integer, then it stops immediately and returns this vector.

gap> F:=GF(3);;
gap> x:= Indeterminate( F );; pol:= x^2+1;
x_1^2+Z(3)^0
gap> C := GeneratorPolCode(pol,8,F);
a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)
gap> v:=Codeword("12101111");
[ 1 2 1 0 1 1 1 1 ]
gap> v:=VectorCodeword(v);
[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ]
gap> G:=GeneratorMat(C);
[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
  [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
  [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
  [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
  [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
  [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ]
gap> AClosestVectorCombinationsMatFFEVecFFE(G,F,v,1,1);
[ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ]

2.1-2 AClosestVectorComb..MatFFEVecFFECoords
> AClosestVectorComb..MatFFEVecFFECoords( mat, F, vec, r, st )( function )

AClosestVectorCombinationsMatFFEVecFFECoords returns a two element list containing (a) the same closest vector as in AClosestVectorCombinationsMatFFEVecFFE, and (b) a vector v with exactly r non-zero entries, such that v*mat is the closest vector.

gap> F:=GF(3);;
gap> x:= Indeterminate( F );; pol:= x^2+1;
x_1^2+Z(3)^0
gap> C := GeneratorPolCode(pol,8,F);
a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)
gap> v:=Codeword("12101111"); v:=VectorCodeword(v);;
[ 1 2 1 0 1 1 1 1 ]
gap> G:=GeneratorMat(C);;
gap> AClosestVectorCombinationsMatFFEVecFFECoords(G,F,v,1,1);
[ [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ],
  [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0 ] ]

2.1-3 DistancesDistributionMatFFEVecFFE
> DistancesDistributionMatFFEVecFFE( mat, f, vec )( function )

DistancesDistributionMatFFEVecFFE returns the distances distribution of the vector vec to the vectors in the vector space generated by the rows of the matrix mat over the finite field f. All vectors must have the same length, and all elements must lie in a common field. The distances distribution is a list d of length Length(vec)+1, such that the value d[i] is the number of vectors in vecs that have distance i+1 to vec.

gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
gap> vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
>   [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
>   [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
>   [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
>   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
>   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];;
gap> DistancesDistributionMatFFEVecFFE(vecs,GF(3),v);
[ 0, 4, 6, 60, 109, 216, 192, 112, 30 ]

2.1-4 DistancesDistributionVecFFEsVecFFE
> DistancesDistributionVecFFEsVecFFE( vecs, vec )( function )

DistancesDistributionVecFFEsVecFFE returns the distances distribution of the vector vec to the vectors in the list vecs. All vectors must have the same length, and all elements must lie in a common field. The distances distribution is a list d of length Length(vec)+1, such that the value d[i] is the number of vectors in vecs that have distance i+1 to vec.

gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
gap> vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
>   [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
>   [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
>   [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
>   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
>   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];;
gap> DistancesDistributionVecFFEsVecFFE(vecs,v);
[ 0, 0, 0, 0, 0, 4, 0, 1, 1 ]

2.1-5 WeightVecFFE
> WeightVecFFE( vec )( function )

WeightVecFFE returns the weight of the finite field vector vec, i.e. the number of nonzero entries.

gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
gap> WeightVecFFE(v);
7

2.1-6 DistanceVecFFE
> DistanceVecFFE( vec1, vec2 )( function )

The Hamming metric on GF(q)^n is the function

dist((v_1,...,v_n),(w_1,...,w_n)) =|\{i\in [1..n]\ |\ v_i\not= w_i\}|.

This is also called the (Hamming) distance between v=(v_1,...,v_n) and w=(w_1,...,w_n). DistanceVecFFE returns the distance between the two vectors vec1 and vec2, which must have the same length and whose elements must lie in a common field. The distance is the number of places where vec1 and vec2 differ.

gap> v1:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
gap> v2:=[ Z(3), Z(3)^0, Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
gap> DistanceVecFFE(v1,v2);
2

2.2 Other functions

We basically repeat, with minor variation, the material in the GAP manual or from Frank Luebeck's website http://www.math.rwth-aachen.de:8001/~Frank.Luebeck/data/ConwayPol on Conway polynomials. The prime fields: If p>= 2 is a prime then GF(p) denotes the field Z}/pZ}, with addition and multiplication performed mod p.

The prime power fields: Suppose q=p^r is a prime power, r>1, and put F=GF(p). Let F[x] denote the ring of all polynomials over F and let f(x) denote a monic irreducible polynomial in F[x] of degree r. The quotient E = F[x]/(f(x))= F[x]/f(x)F[x] is a field with q elements. If f(x) and E are related in this way, we say that f(x) is the defining polynomial of E. Any defining polynomial factors completely into distinct linear factors over the field it defines.

For any finite field F, the multiplicative group of non-zero elements F^x is a cyclic group. An alpha in F is called a primitive element if it is a generator of F^x. A defining polynomial f(x) of F is said to be primitive if it has a root in F which is a primitive element.

2.2-1 ConwayPolynomial
> ConwayPolynomial( p, n )( function )

A standard notation for the elements of GF(p) is given via the representatives 0, ..., p-1 of the cosets modulo p. We order these elements by 0 < 1 < 2 < ... < p-1. We introduce an ordering of the polynomials of degree r over GF(p). Let g(x) = g_rx^r + ... + g_0 and h(x) = h_rx^r + ... + h_0 (by convention, g_i=h_i=0 for i > r). Then we define g < h if and only if there is an index k with g_i = h_i for i > k and (-1)^r-k g_k < (-1)^r-k h_k.

The Conway polynomial f_p,r(x) for GF(p^r) is the smallest polynomial of degree r with respect to this ordering such that:

  • f_p,r(x) is monic,

  • f_p,r(x) is primitive, that is, any zero is a generator of the (cyclic) multiplicative group of GF(p^r),

  • for each proper divisor m of r we have that f_p,m(x^(p^r-1) / (p^m-1)) = 0 mod f_p,r(x); that is, the (p^r-1) / (p^m-1)-th power of a zero of f_p,r(x) is a zero of f_p,m(x).

ConwayPolynomial(p,n) returns the polynomial f_p,r(x) defined above.

IsCheapConwayPolynomial(p,n) returns true if ConwayPolynomial( p, n ) will give a result in reasonable time. This is either the case when this polynomial is pre-computed, or if n,p are not too big.

2.2-2 RandomPrimitivePolynomial
> RandomPrimitivePolynomial( F, n )( function )

For a finite field F and a positive integer n this function returns a primitive polynomial of degree n over F, that is a zero of this polynomial has maximal multiplicative order |F|^n-1.

IsPrimitivePolynomial(f) can be used to check if a univariate polynomial f is primitive or not.

Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

generated by GAPDoc2HTML

guava-3.6/htm/chap6.html0000644017361200001450000020416711027015742015032 0ustar tabbottcrontab GAP (guava) - Chapter 6: Manipulating Codes
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

6. Manipulating Codes

In this chapter we describe several functions GUAVA uses to manipulate codes. Some of the best codes are obtained by starting with for example a BCH code, and manipulating it.

In some cases, it is faster to perform calculations with a manipulated code than to use the original code. For example, if the dimension of the code is larger than half the word length, it is generally faster to compute the weight distribution by first calculating the weight distribution of the dual code than by directly calculating the weight distribution of the original code. The size of the dual code is smaller in these cases.

Because GUAVA keeps all information in a code record, in some cases the information can be preserved after manipulations. Therefore, computations do not always have to start from scratch.

In Section 6.1, we describe functions that take a code with certain parameters, modify it in some way and return a different code (see ExtendedCode (6.1-1), PuncturedCode (6.1-2), EvenWeightSubcode (6.1-3), PermutedCode (6.1-4), ExpurgatedCode (6.1-5), AugmentedCode (6.1-6), RemovedElementsCode (6.1-7), AddedElementsCode (6.1-8), ShortenedCode (6.1-9), LengthenedCode (6.1-10), ResidueCode (6.1-12), ConstructionBCode (6.1-13), DualCode (6.1-14), ConversionFieldCode (6.1-15), ConstantWeightSubcode (6.1-18), StandardFormCode (6.1-19) and CosetCode (6.1-17)). In Section 6.2, we describe functions that generate a new code out of two codes (see DirectSumCode (6.2-1), UUVCode (6.2-2), DirectProductCode (6.2-3), IntersectionCode (6.2-4) and UnionCode (6.2-5)).

6.1 Functions that Generate a New Code from a Given Code

6.1-1 ExtendedCode
> ExtendedCode( C[, i] )( function )

ExtendedCode extends the code C i times and returns the result. i is equal to 1 by default. Extending is done by adding a parity check bit after the last coordinate. The coordinates of all codewords now add up to zero. In the binary case, each codeword has even weight.

The word length increases by i. The size of the code remains the same. In the binary case, the minimum distance increases by one if it was odd. In other cases, that is not always true.

A cyclic code in general is no longer cyclic after extending.

gap> C1 := HammingCode( 3, GF(2) );
a linear [7,4,3]1 Hamming (3,2) code over GF(2)
gap> C2 := ExtendedCode( C1 );
a linear [8,4,4]2 extended code
gap> IsEquivalent( C2, ReedMullerCode( 1, 3 ) );
true
gap> List( AsSSortedList( C2 ), WeightCodeword );
[ 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8 ]
gap> C3 := EvenWeightSubcode( C1 );
a linear [7,3,4]2..3 even weight subcode 

To undo extending, call PuncturedCode (see PuncturedCode (6.1-2)). The function EvenWeightSubcode (see EvenWeightSubcode (6.1-3)) also returns a related code with only even weights, but without changing its word length.

6.1-2 PuncturedCode
> PuncturedCode( C )( function )

PuncturedCode punctures C in the last column, and returns the result. Puncturing is done simply by cutting off the last column from each codeword. This means the word length decreases by one. The minimum distance in general also decrease by one.

This command can also be called with the syntax PuncturedCode( C, L ). In this case, PuncturedCode punctures C in the columns specified by L, a list of integers. All columns specified by L are omitted from each codeword. If l is the length of L (so the number of removed columns), the word length decreases by l. The minimum distance can also decrease by l or less.

Puncturing a cyclic code in general results in a non-cyclic code. If the code is punctured in all the columns where a word of minimal weight is unequal to zero, the dimension of the resulting code decreases.

gap> C1 := BCHCode( 15, 5, GF(2) );
a cyclic [15,7,5]3..5 BCH code, delta=5, b=1 over GF(2)
gap> C2 := PuncturedCode( C1 );
a linear [14,7,4]3..5 punctured code
gap> ExtendedCode( C2 ) = C1;
false
gap> PuncturedCode( C1, [1,2,3,4,5,6,7] );
a linear [8,7,1]1 punctured code
gap> PuncturedCode( WholeSpaceCode( 4, GF(5) ) );
a linear [3,3,1]0 punctured code  # The dimension decreased from 4 to 3 

ExtendedCode extends the code again (see ExtendedCode (6.1-1)), although in general this does not result in the old code.

6.1-3 EvenWeightSubcode
> EvenWeightSubcode( C )( function )

EvenWeightSubcode returns the even weight subcode of C, consisting of all codewords of C with even weight. If C is a linear code and contains words of odd weight, the resulting code has a dimension of one less. The minimum distance always increases with one if it was odd. If C is a binary cyclic code, and g(x) is its generator polynomial, the even weight subcode either has generator polynomial g(x) (if g(x) is divisible by x-1) or g(x)* (x-1) (if no factor x-1 was present in g(x)). So the even weight subcode is again cyclic.

Of course, if all codewords of C are already of even weight, the returned code is equal to C.

gap> C1 := EvenWeightSubcode( BCHCode( 8, 4, GF(3) ) );
an (8,33,4..8)3..8 even weight subcode
gap> List( AsSSortedList( C1 ), WeightCodeword );
[ 0, 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, 6, 4, 4, 6, 4, 4, 8, 6, 4, 6, 8, 4, 4, 
  4, 6, 4, 6, 8, 4, 6, 8 ]
gap> EvenWeightSubcode( ReedMullerCode( 1, 3 ) );
a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) 

ExtendedCode also returns a related code of only even weights, but without reducing its dimension (see ExtendedCode (6.1-1)).

6.1-4 PermutedCode
> PermutedCode( C, L )( function )

PermutedCode returns C after column permutations. L (in GAP disjoint cycle notation) is the permutation to be executed on the columns of C. If C is cyclic, the result in general is no longer cyclic. If a permutation results in the same code as C, this permutation belongs to the automorphism group of C (see AutomorphismGroup (4.4-3)). In any case, the returned code is equivalent to C (see IsEquivalent (4.4-1)).

gap> C1 := PuncturedCode( ReedMullerCode( 1, 4 ) );
a linear [15,5,7]5 punctured code
gap> C2 := BCHCode( 15, 7, GF(2) );
a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
gap> C2 = C1;
false
gap> p := CodeIsomorphism( C1, C2 );
( 2, 4,14, 9,13, 7,11,10, 6, 8,12, 5)
gap> C3 := PermutedCode( C1, p );
a linear [15,5,7]5 permuted code
gap> C2 = C3;
true 

6.1-5 ExpurgatedCode
> ExpurgatedCode( C, L )( function )

ExpurgatedCode expurgates the code C> by throwing away codewords in list L. C must be a linear code. L must be a list of codeword input. The generator matrix of the new code no longer is a basis for the codewords specified by L. Since the returned code is still linear, it is very likely that, besides the words of L, more codewords of C are no longer in the new code.

gap> C1 := HammingCode( 4 );; WeightDistribution( C1 );
[ 1, 0, 0, 35, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ]
gap> L := Filtered( AsSSortedList(C1), i -> WeightCodeword(i) = 3 );;
gap> C2 := ExpurgatedCode( C1, L );
a linear [15,4,3..4]5..11 code, expurgated with 7 word(s)
gap> WeightDistribution( C2 );
[ 1, 0, 0, 0, 14, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 ] 

This function does not work on non-linear codes. For removing words from a non-linear code, use RemovedElementsCode (see RemovedElementsCode (6.1-7)). For expurgating a code of all words of odd weight, use `EvenWeightSubcode' (see EvenWeightSubcode (6.1-3)).

6.1-6 AugmentedCode
> AugmentedCode( C, L )( function )

AugmentedCode returns C after augmenting. C must be a linear code, L must be a list of codeword inputs. The generator matrix of the new code is a basis for the codewords specified by L as well as the words that were already in code C. Note that the new code in general will consist of more words than only the codewords of C and the words L. The returned code is also a linear code.

This command can also be called with the syntax AugmentedCode(C). When called without a list of codewords, AugmentedCode returns C after adding the all-ones vector to the generator matrix. C must be a linear code. If the all-ones vector was already in the code, nothing happens and a copy of the argument is returned. If C is a binary code which does not contain the all-ones vector, the complement of all codewords is added.

gap> C31 := ReedMullerCode( 1, 3 );
a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
gap> C32 := AugmentedCode(C31,["00000011","00000101","00010001"]);
a linear [8,7,1..2]1 code, augmented with 3 word(s)
gap> C32 = ReedMullerCode( 2, 3 );
true 
gap> C1 := CordaroWagnerCode(6);
a linear [6,2,4]2..3 Cordaro-Wagner code over GF(2)
gap> Codeword( [0,0,1,1,1,1] ) in C1;
true
gap> C2 := AugmentedCode( C1 );
a linear [6,3,1..2]2..3 code, augmented with 1 word(s)
gap> Codeword( [1,1,0,0,0,0] ) in C2;
true

The function AddedElementsCode adds elements to the codewords instead of adding them to the basis (see AddedElementsCode (6.1-8)).

6.1-7 RemovedElementsCode
> RemovedElementsCode( C, L )( function )

RemovedElementsCode returns code C after removing a list of codewords L from its elements. L must be a list of codeword input. The result is an unrestricted code.

gap> C1 := HammingCode( 4 );; WeightDistribution( C1 );
[ 1, 0, 0, 35, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ]
gap> L := Filtered( AsSSortedList(C1), i -> WeightCodeword(i) = 3 );;
gap> C2 := RemovedElementsCode( C1, L );
a (15,2013,3..15)2..15 code with 35 word(s) removed
gap> WeightDistribution( C2 );
[ 1, 0, 0, 0, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ]
gap> MinimumDistance( C2 );
3        # C2 is not linear, so the minimum weight does not have to
         # be equal to the minimum distance 

Adding elements to a code is done by the function AddedElementsCode (see AddedElementsCode (6.1-8)). To remove codewords from the base of a linear code, use ExpurgatedCode (see ExpurgatedCode (6.1-5)).

6.1-8 AddedElementsCode
> AddedElementsCode( C, L )( function )

AddedElementsCode returns code C after adding a list of codewords L to its elements. L must be a list of codeword input. The result is an unrestricted code.

gap> C1 := NullCode( 6, GF(2) );
a cyclic [6,0,6]6 nullcode over GF(2)
gap> C2 := AddedElementsCode( C1, [ "111111" ] );
a (6,2,1..6)3 code with 1 word(s) added
gap> IsCyclicCode( C2 );
true
gap> C3 := AddedElementsCode( C2, [ "101010", "010101" ] );
a (6,4,1..6)2 code with 2 word(s) added
gap> IsCyclicCode( C3 );
true 

To remove elements from a code, use RemovedElementsCode (see RemovedElementsCode (6.1-7)). To add elements to the base of a linear code, use AugmentedCode (see AugmentedCode (6.1-6)).

6.1-9 ShortenedCode
> ShortenedCode( C[, L] )( function )

ShortenedCode( C ) returns the code C shortened by taking a cross section. If C is a linear code, this is done by removing all codewords that start with a non-zero entry, after which the first column is cut off. If C was a [n,k,d] code, the shortened code generally is a [n-1,k-1,d] code. It is possible that the dimension remains the same; it is also possible that the minimum distance increases.

If C is a non-linear code, ShortenedCode first checks which finite field element occurs most often in the first column of the codewords. The codewords not starting with this element are removed from the code, after which the first column is cut off. The resulting shortened code has at least the same minimum distance as C.

This command can also be called using the syntax ShortenedCode(C,L). When called in this format, ShortenedCode repeats the shortening process on each of the columns specified by L. L therefore is a list of integers. The column numbers in L are the numbers as they are before the shortening process. If L has l entries, the returned code has a word length of l positions shorter than C.

gap> C1 := HammingCode( 4 );
a linear [15,11,3]1 Hamming (4,2) code over GF(2)
gap> C2 := ShortenedCode( C1 );
a linear [14,10,3]2 shortened code
gap> C3 := ElementsCode( ["1000", "1101", "0011" ], GF(2) );
a (4,3,1..4)2 user defined unrestricted code over GF(2)
gap> MinimumDistance( C3 );
2
gap> C4 := ShortenedCode( C3 );
a (3,2,2..3)1..2 shortened code
gap> AsSSortedList( C4 );
[ [ 0 0 0 ], [ 1 0 1 ] ]
gap> C5 := HammingCode( 5, GF(2) );
a linear [31,26,3]1 Hamming (5,2) code over GF(2)
gap> C6 := ShortenedCode( C5, [ 1, 2, 3 ] );
a linear [28,23,3]2 shortened code
gap> OptimalityLinearCode( C6 );
0

The function LengthenedCode lengthens the code again (only for linear codes), see LengthenedCode (6.1-10). In general, this is not exactly the inverse function.

6.1-10 LengthenedCode
> LengthenedCode( C[, i] )( function )

LengthenedCode( C ) returns the code C lengthened. C must be a linear code. First, the all-ones vector is added to the generator matrix (see AugmentedCode (6.1-6)). If the all-ones vector was already a codeword, nothing happens to the code. Then, the code is extended i times (see ExtendedCode (6.1-1)). i is equal to 1 by default. If C was an [n,k] code, the new code generally is a [n+i,k+1] code.

gap> C1 := CordaroWagnerCode( 5 );
a linear [5,2,3]2 Cordaro-Wagner code over GF(2)
gap> C2 := LengthenedCode( C1 );
a linear [6,3,2]2..3 code, lengthened with 1 column(s) 

ShortenedCode' shortens the code, see ShortenedCode (6.1-9). In general, this is not exactly the inverse function.

6.1-11 SubCode
> SubCode( C[, s] )( function )

This function SubCode returns a subcode of C by taking the first k - s rows of the generator matrix of C, where k is the dimension of C. The interger s may be omitted and in this case it is assumed as 1.

gap> C := BCHCode(31,11);
a cyclic [31,11,11]7..11 BCH code, delta=11, b=1 over GF(2)
gap> S1:= SubCode(C);
a linear [31,10,11]7..13 subcode
gap> WeightDistribution(S1);
[ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 190, 0, 0, 272, 255, 0, 0, 120, 66,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
gap> S2:= SubCode(C, 8);
a linear [31,3,11]14..20 subcode
gap> History(S2);
[ "a linear [31,3,11]14..20 subcode of",
  "a cyclic [31,11,11]7..11 BCH code, delta=11, b=1 over GF(2)" ]
gap> WeightDistribution(S2);
[ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0 ]

6.1-12 ResidueCode
> ResidueCode( C[, c] )( function )

The function ResidueCode takes a codeword c of C (if c is omitted, a codeword of minimal weight is used). It removes this word and all its linear combinations from the code and then punctures the code in the coordinates where c is unequal to zero. The resulting code is an [n-w, k-1, d-lfloor w*(q-1)/q rfloor ] code. C must be a linear code and c must be non-zero. If c is not in then no change is made to C.

gap> C1 := BCHCode( 15, 7 );
a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
gap> C2 := ResidueCode( C1 );
a linear [8,4,4]2 residue code
gap> c := Codeword( [ 0,0,0,1,0,0,1,1,0,1,0,1,1,1,1 ], C1);;
gap> C3 := ResidueCode( C1, c );
a linear [7,4,3]1 residue code 

6.1-13 ConstructionBCode
> ConstructionBCode( C )( function )

The function ConstructionBCode takes a binary linear code C and calculates the minimum distance of the dual of C (see DualCode (6.1-14)). It then removes the columns of the parity check matrix of C where a codeword of the dual code of minimal weight has coordinates unequal to zero. The resulting matrix is a parity check matrix for an [n-dd, k-dd+1, >= d] code, where dd is the minimum distance of the dual of C.

gap> C1 := ReedMullerCode( 2, 5 );
a linear [32,16,8]6 Reed-Muller (2,5) code over GF(2)
gap> C2 := ConstructionBCode( C1 );
a linear [24,9,8]5..10 Construction B (8 coordinates)
gap> BoundsMinimumDistance( 24, 9, GF(2) );
rec( n := 24, k := 9, q := 2, references := rec(  ), 
  construction := [ [ Operation "UUVCode" ], 
      [ [ [ Operation "UUVCode" ], [ [ [ Operation "DualCode" ], 
                      [ [ [ Operation "RepetitionCode" ], [ 6, 2 ] ] ] ], 
                  [ [ Operation "CordaroWagnerCode" ], [ 6 ] ] ] ], 
          [ [ Operation "CordaroWagnerCode" ], [ 12 ] ] ] ], lowerBound := 8, 
  lowerBoundExplanation := [ "Lb(24,9)=8, u u+v construction of C1 and C2:", 
      "Lb(12,7)=4, u u+v construction of C1 and C2:", 
      "Lb(6,5)=2, dual of the repetition code", 
      "Lb(6,2)=4, Cordaro-Wagner code", "Lb(12,2)=8, Cordaro-Wagner code" ], 
  upperBound := 8, 
  upperBoundExplanation := [ "Ub(24,9)=8, otherwise construction B would 
                             contradict:", "Ub(18,4)=8, Griesmer bound" ] )
# so C2 is optimal

6.1-14 DualCode
> DualCode( C )( function )

DualCode returns the dual code of C. The dual code consists of all codewords that are orthogonal to the codewords of C. If C is a linear code with generator matrix G, the dual code has parity check matrix G (or if C has parity check matrix H, the dual code has generator matrix H). So if C is a linear [n, k] code, the dual code of C is a linear [n, n-k] code. If C is a cyclic code with generator polynomial g(x), the dual code has the reciprocal polynomial of g(x) as check polynomial.

The dual code is always a linear code, even if C is non-linear.

If a code C is equal to its dual code, it is called self-dual.

gap> R := ReedMullerCode( 1, 3 );
a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
gap> RD := DualCode( R );
a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
gap> R = RD;
true
gap> N := WholeSpaceCode( 7, GF(4) );
a cyclic [7,7,1]0 whole space code over GF(4)
gap> DualCode( N ) = NullCode( 7, GF(4) );
true 

6.1-15 ConversionFieldCode
> ConversionFieldCode( C )( function )

ConversionFieldCode returns the code obtained from C after converting its field. If the field of C is GF(q^m), the returned code has field GF(q). Each symbol of every codeword is replaced by a concatenation of m symbols from GF(q). If C is an (n, M, d_1) code, the returned code is a (n* m, M, d_2) code, where d_2 > d_1.

See also HorizontalConversionFieldMat (7.3-10).

gap> R := RepetitionCode( 4, GF(4) );
a cyclic [4,1,4]3 repetition code over GF(4)
gap> R2 := ConversionFieldCode( R );
a linear [8,2,4]3..4 code, converted to basefield GF(2)
gap> Size( R ) = Size( R2 );
true
gap> GeneratorMat( R );
[ [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ] ]
gap> GeneratorMat( R2 );
[ [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ],
  [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ] ] 

6.1-16 TraceCode
> TraceCode( C )( function )

Input: C is a linear code defined over an extension E of F (F is the ``base field'')

Output: The linear code generated by Tr_E/F(c), for all c in C.

TraceCode returns the image of the code C under the trace map. If the field of C is GF(q^m), the returned code has field GF(q).

Very slow. It does not seem to be easy to related the parameters of the trace code to the original except in the ``Galois closed'' case.

gap> C:=RandomLinearCode(10,4,GF(4)); MinimumDistance(C);
a  [10,4,?] randomly generated code over GF(4)
5
gap> trC:=TraceCode(C,GF(2)); MinimumDistance(trC);
a linear [10,7,1]1..3 user defined unrestricted code over GF(2)
1

6.1-17 CosetCode
> CosetCode( C, w )( function )

CosetCode returns the coset of a code C with respect to word w. w must be of the codeword type. Then, w is added to each codeword of C, yielding the elements of the new code. If C is linear and w is an element of C, the new code is equal to C, otherwise the new code is an unrestricted code.

Generating a coset is also possible by simply adding the word w to C. See 4.2.

gap> H := HammingCode(3, GF(2));
a linear [7,4,3]1 Hamming (3,2) code over GF(2)
gap> c := Codeword("1011011");; c in H;
false
gap> C := CosetCode(H, c);
a (7,16,3)1 coset code
gap> List(AsSSortedList(C), el-> Syndrome(H, el));
[ [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ],
  [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ],
  [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ] ]
# All elements of the coset have the same syndrome in H 

6.1-18 ConstantWeightSubcode
> ConstantWeightSubcode( C, w )( function )

ConstantWeightSubcode returns the subcode of C that only has codewords of weight w. The resulting code is a non-linear code, because it does not contain the all-zero vector.

This command also can be called with the syntax ConstantWeightSubcode(C) In this format, ConstantWeightSubcode returns the subcode of C consisting of all minimum weight codewords of C.

ConstantWeightSubcode first checks if Leon's binary wtdist exists on your computer (in the default directory). If it does, then this program is called. Otherwise, the constant weight subcode is computed using a GAP program which checks each codeword in C to see if it is of the desired weight.

gap> N := NordstromRobinsonCode();; WeightDistribution(N);
[ 1, 0, 0, 0, 0, 0, 112, 0, 30, 0, 112, 0, 0, 0, 0, 0, 1 ]
gap> C := ConstantWeightSubcode(N, 8);
a (16,30,6..16)5..8 code with codewords of weight 8
gap> WeightDistribution(C);
[ 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0 ] 
gap> eg := ExtendedTernaryGolayCode();; WeightDistribution(eg);
[ 1, 0, 0, 0, 0, 0, 264, 0, 0, 440, 0, 0, 24 ]
gap> C := ConstantWeightSubcode(eg);
a (12,264,6..12)3..6 code with codewords of weight 6
gap> WeightDistribution(C);
[ 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0 ] 

6.1-19 StandardFormCode
> StandardFormCode( C )( function )

StandardFormCode returns C after putting it in standard form. If C is a non-linear code, this means the elements are organized using lexicographical order. This means they form a legal GAP `Set'.

If C is a linear code, the generator matrix and parity check matrix are put in standard form. The generator matrix then has an identity matrix in its left part, the parity check matrix has an identity matrix in its right part. Although GUAVA always puts both matrices in a standard form using BaseMat, this never alters the code. StandardFormCode even applies column permutations if unavoidable, and thereby changes the code. The column permutations are recorded in the construction history of the new code (see Display (4.6-3)). C and the new code are of course equivalent.

If C is a cyclic code, its generator matrix cannot be put in the usual upper triangular form, because then it would be inconsistent with the generator polynomial. The reason is that generating the elements from the generator matrix would result in a different order than generating the elements from the generator polynomial. This is an unwanted effect, and therefore StandardFormCode just returns a copy of C for cyclic codes.

gap> G := GeneratorMatCode( Z(2) * [ [0,1,1,0], [0,1,0,1], [0,0,1,1] ], 
          "random form code", GF(2) );
a linear [4,2,1..2]1..2 random form code over GF(2)
gap> Codeword( GeneratorMat( G ) );
[ [ 0 1 0 1 ], [ 0 0 1 1 ] ]
gap> Codeword( GeneratorMat( StandardFormCode( G ) ) );
[ [ 1 0 0 1 ], [ 0 1 0 1 ] ] 

6.1-20 PiecewiseConstantCode
> PiecewiseConstantCode( part, wts[, F] )( function )

PiecewiseConstantCode returns a code with length n = sum n_i, where part=[ n_1, dots, n_k ]. wts is a list of constraints w=(w_1,...,w_k), each of length k, where 0 <= w_i <= n_i. The default field is GF(2).

A constraint is a list of integers, and a word c = ( c_1, dots, c_k ) (according to part, i.e., each c_i is a subword of length n_i) is in the resulting code if and only if, for some constraint w in wts, |c_i| = w_i for all 1 <= i <= k, where | ...| denotes the Hamming weight.

An example might make things clearer:

gap> PiecewiseConstantCode( [ 2, 3 ],
     [ [ 0, 0 ], [ 0, 3 ], [ 1, 0 ], [ 2, 2 ] ],GF(2) );
the C code programs are compiled, so using Leon's binary....
the C code programs are compiled, so using Leon's binary....
the C code programs are compiled, so using Leon's binary....
the C code programs are compiled, so using Leon's binary....
a (5,7,1..5)1..5 piecewise constant code over GF(2)
gap> AsSSortedList(last);
[ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 0 0 ], [ 1 0 0 0 0 ], 
  [ 1 1 0 1 1 ], [ 1 1 1 0 1 ], [ 1 1 1 1 0 ] ]
gap>

The first constraint is satisfied by codeword 1, the second by codeword 2, the third by codewords 3 and 4, and the fourth by codewords 5, 6 and 7.

6.2 Functions that Generate a New Code from Two or More Given Codes

6.2-1 DirectSumCode
> DirectSumCode( C1, C2 )( function )

DirectSumCode returns the direct sum of codes C1 and C2. The direct sum code consists of every codeword of C1 concatenated by every codeword of C2. Therefore, if Ci was a (n_i,M_i,d_i) code, the result is a (n_1+n_2,M_1*M_2,min(d_1,d_2)) code.

If both C1 and C2 are linear codes, the result is also a linear code. If one of them is non-linear, the direct sum is non-linear too. In general, a direct sum code is not cyclic.

Performing a direct sum can also be done by adding two codes (see Section 4.2). Another often used method is the `u, u+v'-construction, described in UUVCode (6.2-2).

gap> C1 := ElementsCode( [ [1,0], [4,5] ], GF(7) );;
gap> C2 := ElementsCode( [ [0,0,0], [3,3,3] ], GF(7) );;
gap> D := DirectSumCode(C1, C2);;
gap> AsSSortedList(D);
[ [ 1 0 0 0 0 ], [ 1 0 3 3 3 ], [ 4 5 0 0 0 ], [ 4 5 3 3 3 ] ]
gap> D = C1 + C2;   # addition = direct sum
true 

6.2-2 UUVCode
> UUVCode( C1, C2 )( function )

UUVCode returns the so-called (u|u+v) construction applied to C1 and C2. The resulting code consists of every codeword u of C1 concatenated by the sum of u and every codeword v of C2. If C1 and C2 have different word lengths, sufficient zeros are added to the shorter code to make this sum possible. If Ci is a (n_i,M_i,d_i) code, the result is an (n_1+max(n_1,n_2),M_1* M_2,min(2* d_1,d_2)) code.

If both C1 and C2 are linear codes, the result is also a linear code. If one of them is non-linear, the UUV sum is non-linear too. In general, a UUV sum code is not cyclic.

The function DirectSumCode returns another sum of codes (see DirectSumCode (6.2-1)).

gap> C1 := EvenWeightSubcode(WholeSpaceCode(4, GF(2)));
a cyclic [4,3,2]1 even weight subcode
gap> C2 := RepetitionCode(4, GF(2));
a cyclic [4,1,4]2 repetition code over GF(2)
gap> R := UUVCode(C1, C2);
a linear [8,4,4]2 U U+V construction code
gap> R = ReedMullerCode(1,3);
true 

6.2-3 DirectProductCode
> DirectProductCode( C1, C2 )( function )

DirectProductCode returns the direct product of codes C1 and C2. Both must be linear codes. Suppose Ci has generator matrix G_i. The direct product of C1 and C2 then has the Kronecker product of G_1 and G_2 as the generator matrix (see the GAP command KroneckerProduct).

If Ci is a [n_i, k_i, d_i] code, the direct product then is an [n_1* n_2,k_1* k_2,d_1* d_2] code.

gap> L1 := LexiCode(10, 4, GF(2));
a linear [10,5,4]2..4 lexicode over GF(2)
gap> L2 := LexiCode(8, 3, GF(2));
a linear [8,4,3]2..3 lexicode over GF(2)
gap> D := DirectProductCode(L1, L2);
a linear [80,20,12]20..45 direct product code 

6.2-4 IntersectionCode
> IntersectionCode( C1, C2 )( function )

IntersectionCode returns the intersection of codes C1 and C2. This code consists of all codewords that are both in C1 and C2. If both codes are linear, the result is also linear. If both are cyclic, the result is also cyclic.

gap> C := CyclicCodes(7, GF(2));
[ a cyclic [7,7,1]0 enumerated code over GF(2),
  a cyclic [7,6,1..2]1 enumerated code over GF(2),
  a cyclic [7,3,1..4]2..3 enumerated code over GF(2),
  a cyclic [7,0,7]7 enumerated code over GF(2),
  a cyclic [7,3,1..4]2..3 enumerated code over GF(2),
  a cyclic [7,4,1..3]1 enumerated code over GF(2),
  a cyclic [7,1,7]3 enumerated code over GF(2),
  a cyclic [7,4,1..3]1 enumerated code over GF(2) ]
gap> IntersectionCode(C[6], C[8]) = C[7];
true 

The hull of a linear code is the intersection of the code with its dual code. In other words, the hull of C is IntersectionCode(C, DualCode(C)).

6.2-5 UnionCode
> UnionCode( C1, C2 )( function )

UnionCode returns the union of codes C1 and C2. This code consists of the union of all codewords of C1 and C2 and all linear combinations. Therefore this function works only for linear codes. The function AddedElementsCode can be used for non-linear codes, or if the resulting code should not include linear combinations. See AddedElementsCode (6.1-8). If both arguments are cyclic, the result is also cyclic.

gap> G := GeneratorMatCode([[1,0,1],[0,1,1]]*Z(2)^0, GF(2));
a linear [3,2,1..2]1 code defined by generator matrix over GF(2)
gap> H := GeneratorMatCode([[1,1,1]]*Z(2)^0, GF(2));
a linear [3,1,3]1 code defined by generator matrix over GF(2)
gap> U := UnionCode(G, H);
a linear [3,3,1]0 union code
gap> c := Codeword("010");; c in G;
false
gap> c in H;
false
gap> c in U;
true 

6.2-6 ExtendedDirectSumCode
> ExtendedDirectSumCode( L, B, m )( function )

The extended direct sum construction is described in section V of Graham and Sloane [GS85]. The resulting code consists of m copies of L, extended by repeating the codewords of B m times.

Suppose L is an [n_L, k_L]r_L code, and B is an [n_L, k_B]r_B code (non-linear codes are also permitted). The length of B must be equal to the length of L. The length of the new code is n = m n_L, the dimension (in the case of linear codes) is k <= m k_L + k_B, and the covering radius is r <= lfloor m Psi( L, B ) rfloor, with

\Psi( L, B ) = \max_{u \in F_2^{n_L}} \frac{1}{2^{k_B}} \sum_{v \in B} {\rm d}( L, v + u ).

However, this computation will not be executed, because it may be too time consuming for large codes.

If L subseteq B, and L and B are linear codes, the last copy of L is omitted. In this case the dimension is k = m k_L + (k_B - k_L).

gap> c := HammingCode( 3, GF(2) );
a linear [7,4,3]1 Hamming (3,2) code over GF(2)
gap> d := WholeSpaceCode( 7, GF(2) );
a cyclic [7,7,1]0 whole space code over GF(2)
gap> e := ExtendedDirectSumCode( c, d, 3 );
a linear [21,15,1..3]2 3-fold extended direct sum code

6.2-7 AmalgamatedDirectSumCode
> AmalgamatedDirectSumCode( c1, c2[, check] )( function )

AmalgamatedDirectSumCode returns the amalgamated direct sum of the codes c1 and c2. The amalgamated direct sum code consists of all codewords of the form (u , | ,0 , | , v) if (u , | , 0) in c_1 and (0 , | , v) in c_2 and all codewords of the form (u , | , 1 , | , v) if (u , | , 1) in c_1 and (1 , | , v) in c_2. The result is a code with length n = n_1 + n_2 - 1 and size M <= M_1 * M_2 / 2.

If both codes are linear, they will first be standardized, with information symbols in the last and first coordinates of the first and second code, respectively.

If c1 is a normal code (see IsNormalCode (7.4-5)) with the last coordinate acceptable (see IsCoordinateAcceptable (7.4-3)), and c2 is a normal code with the first coordinate acceptable, then the covering radius of the new code is r <= r_1 + r_2. However, checking whether a code is normal or not is a lot of work, and almost all codes seem to be normal. Therefore, an option check can be supplied. If check is true, then the codes will be checked for normality. If check is false or omitted, then the codes will not be checked. In this case it is assumed that they are normal. Acceptability of the last and first coordinate of the first and second code, respectively, is in the last case also assumed to be done by the user.

gap> c := HammingCode( 3, GF(2) );
a linear [7,4,3]1 Hamming (3,2) code over GF(2)
gap> d := ReedMullerCode( 1, 4 );
a linear [16,5,8]6 Reed-Muller (1,4) code over GF(2)
gap> e := DirectSumCode( c, d );
a linear [23,9,3]7 direct sum code
gap> f := AmalgamatedDirectSumCode( c, d );;
gap> MinimumDistance( f );;
gap> CoveringRadius( f );; 
gap> f;
a linear [22,8,3]7 amalgamated direct sum code

6.2-8 BlockwiseDirectSumCode
> BlockwiseDirectSumCode( C1, L1, C2, L2 )( function )

BlockwiseDirectSumCode returns a subcode of the direct sum of C1 and C2. The fields of C1 and C2 must be same. The lists L1 and L2 are two equally long with elements from the ambient vector spaces of C1 and C2, respectively, or L1 and L2 are two equally long lists containing codes. The union of the codes in L1 and L2 must be C1 and C2, respectively.

In the first case, the blockwise direct sum code is defined as

bds = \bigcup_{1 \leq i \leq \ell} ( C_1 + (L_1)_i ) \oplus ( C_2 + (L_2)_i ),

where ell is the length of L1 and L2, and oplus is the direct sum.

In the second case, it is defined as

bds = \bigcup_{1 \leq i \leq \ell} ( (L_1)_i \oplus (L_2)_i ).

The length of the new code is n = n_1 + n_2.

gap> C1 := HammingCode( 3, GF(2) );;
gap> C2 := EvenWeightSubcode( WholeSpaceCode( 6, GF(2) ) );;
gap> BlockwiseDirectSumCode( C1, [[ 0,0,0,0,0,0,0 ],[ 1,0,1,0,1,0,0 ]],
> C2, [[ 0,0,0,0,0,0 ],[ 1,0,1,0,1,0 ]] );
a (13,1024,1..13)1..2 blockwise direct sum code

6.2-9 ConstructionXCode
> ConstructionXCode( C, A )( function )

Consider a list of j linear codes of the same length N over the same field F, C = C_1, C_2, ..., C_j, where the parameter of the ith code is C_i = [N, K_i, D_i] and C_j subset C_j-1 subset ... subset C_2 subset C_1. Consider a list of j-1 auxiliary linear codes of the same field F, A = A_1, A_2, ..., A_j-1 where the parameter of the ith code A_i is [n_i, k_i=(K_i-K_i+1), d_i], an [n, K_1, d] linear code over field F can be constructed where n = N + sum_i=1^j-1 n_i, and d = min D_j, D_j-1 + d_j-1, D_j-2 + d_j-2 + d_j-1, ..., D_1 + sum_i=1^j-1 d_i.

For more information on Construction X, refer to [SRC72].

gap> C1 := BCHCode(127, 43);
a cyclic [127,29,43]31..59 BCH code, delta=43, b=1 over GF(2)
gap> C2 := BCHCode(127, 47);
a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2)
gap> C3 := BCHCode(127, 55);
a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2)
gap> G1 := ShallowCopy( GeneratorMat(C2) );;
gap> Append(G1, [ GeneratorMat(C1)[23] ]);;
gap> C1 := GeneratorMatCode(G1, GF(2));
a linear [127,23,1..43]35..63 code defined by generator matrix over GF(2)
gap> MinimumDistance(C1);
43
gap> C := [ C1, C2, C3 ];
[ a linear [127,23,43]35..63 code defined by generator matrix over GF(2), 
  a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2), 
  a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2) ]
gap> IsSubset(C[1], C[2]);
true
gap> IsSubset(C[2], C[3]);
true
gap> A := [ RepetitionCode(4, GF(2)), EvenWeightSubcode( QRCode(17, GF(2)) ) ];
[ a cyclic [4,1,4]2 repetition code over GF(2), a cyclic [17,8,6]3..6 even weight subcode ]
gap> CX := ConstructionXCode(C, A);
a linear [148,23,53]43..74 Construction X code
gap> History(CX);
[ "a linear [148,23,53]43..74 Construction X code of", 
  "Base codes: [ a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2)\
, a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2), a linear \
[127,23,43]35..63 code defined by generator matrix over GF(2) ]", 
  "Auxiliary codes: [ a cyclic [4,1,4]2 repetition code over GF(2), a cyclic [\
17,8,6]3..6 even weight subcode ]" ]

6.2-10 ConstructionXXCode
> ConstructionXXCode( C1, C2, C3, A1, A2 )( function )

Consider a set of linear codes over field F of the same length, n, C_1=[n, k_1, d_1], C_2=[n, k_2, d_2] and C_3=[n, k_3, d_3] such that C_2 subset C_1, C_3 subset C_1 and C_4 = C_2 cap C_3. Given two auxiliary codes A_1=[n_1, k_1-k_2, e_1] and A_2=[n_2, k_1-k_3, e_2] over the same field F, there exists an [n+n_1+n_2, k_1, d] linear code C_XX over field F, where d = mind_4, d_3 + e_1, d_2 + e_2, d_1 + e_1 + e_2.

The codewords of C_XX can be partitioned into three sections ( v;|;a;|;b ) where v has length n, a has length n_1 and b has length n_2. A codeword from Construction XX takes the following form:

  • ( v ; | ; 0 ; | ; 0 ) if v in C_4

  • ( v ; | ; a_1 ; | ; 0 ) if v in C_3 backslash C_4

  • ( v ; | ; 0 ; | ; a_2 ) if v in C_2 backslash C_4

  • ( v ; | ; a_1 ; | ; a_2 ) otherwise

For more information on Construction XX, refer to [All84].

gap> a := PrimitiveRoot(GF(32));
Z(2^5)
gap> f0 := MinimalPolynomial( GF(2), a^0 );
x_1+Z(2)^0
gap> f1 := MinimalPolynomial( GF(2), a^1 );
x_1^5+x_1^2+Z(2)^0
gap> f5 := MinimalPolynomial( GF(2), a^5 );
x_1^5+x_1^4+x_1^2+x_1+Z(2)^0
gap> C2 := CheckPolCode( f0 * f1, 31, GF(2) );; MinimumDistance(C2);; Display(C2);
a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
gap> C3 := CheckPolCode( f0 * f5, 31, GF(2) );; MinimumDistance(C3);; Display(C3);
a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
gap> C1 := UnionCode(C2, C3);; MinimumDistance(C1);; Display(C1);
a linear [31,11,11]7..11 union code of
U: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
V: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
gap> A1 := BestKnownLinearCode( 10, 5, GF(2) );
a linear [10,5,4]2..4 shortened code
gap> A2 := DualCode( RepetitionCode(6, GF(2)) );
a cyclic [6,5,2]1 dual code
gap> CXX:= ConstructionXXCode(C1, C2, C3, A1, A2 );
a linear [47,11,15..17]13..23 Construction XX code
gap> MinimumDistance(CXX);
17
gap> History(CXX);        
[ "a linear [47,11,17]13..23 Construction XX code of", 
  "C1: a cyclic [31,11,11]7..11 union code", 
  "C2: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)", 
  "C3: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)", 
  "A1: a linear [10,5,4]2..4 shortened code", 
  "A2: a cyclic [6,5,2]1 dual code" ]

6.2-11 BZCode
> BZCode( O, I )( function )

Given a set of outer codes of the same length O_i = [N, K_i, D_i] over GF(q^e_i), where i=1,2,...,t and a set of inner codes of the same length I_i = [n, k_i, d_i] over GF(q), BZCode returns a Blokh-Zyablov multilevel concatenated code with parameter [ n x N, sum_i=1^t e_i x K_i, min_i=1,...,td_i x D_i ] over GF(q).

Note that the set of inner codes must satisfy chain condition, i.e. I_1 = [n, k_1, d_1] subset I_2=[n, k_2, d_2] subset ... subset I_t=[n, k_t, d_t] where 0=k_0 < k_1 < k_2 < ... < k_t. The dimension of the inner codes must satisfy the condition e_i = k_i - k_i-1, where GF(q^e_i) is the field of the ith outer code.

For more information on Blokh-Zyablov multilevel concatenated code, refer to [Bro98].

6.2-12 BZCodeNC
> BZCodeNC( O, I )( function )

This function is the same as BZCode, except this version is faster as it does not estimate the covering radius of the code. Users are encouraged to use this version unless you are working on very small codes.

gap> #
gap> # Binary code
gap> #
gap> O := [ CyclicMDSCode(2,3,7), BestKnownLinearCode(9,5,GF(2)), CyclicMDSCode(2,3,4) ];
[ a cyclic [9,7,3]1 MDS code over GF(8), a linear [9,5,3]2..3 shortened code, 
  a cyclic [9,4,6]4..5 MDS code over GF(8) ]
gap> A := ExtendedCode( HammingCode(3,GF(2)) );;
gap> I := [ SubCode(A), A, DualCode( RepetitionCode(8, GF(2)) ) ];
[ a linear [8,3,4]3..4 subcode, a linear [8,4,4]2 extended code, a cyclic [8,7,2]1 dual code ]
gap> C := BZCodeNC(O, I);
a linear [72,38,12]0..72 Blokh Zyablov concatenated code
gap> #
gap> # Non binary code
gap> #
gap> O2 := ExtendedCode(GoppaCode(ConwayPolynomial(5,2), Elements(GF(5))));;
gap> O3 := ExtendedCode(GoppaCode(ConwayPolynomial(5,3), Elements(GF(5))));;
gap> O1 := DualCode( O3 );;
gap> MinimumDistance(O1);; MinimumDistance(O2);; MinimumDistance(O3);;
gap> Cy := CyclicCodes(5, GF(5));;
gap> for i in [4, 5] do; MinimumDistance(Cy[i]);; od;
gap> O  := [ O1, O2, O3 ];
[ a linear [6,4,3]1 dual code, a linear [6,3,4]2..3 extended code,
  a linear [6,2,5]3..4 extended code ]
gap> I  := [ Cy[5], Cy[4], Cy[3] ];
[ a cyclic [5,1,5]3..4 enumerated code over GF(5),
  a cyclic [5,2,4]2..3 enumerated code over GF(5),
  a cyclic [5,3,1..3]2 enumerated code over GF(5) ]
gap> C  := BZCodeNC( O, I );
a linear [30,9,5..15]0..30 Blokh Zyablov concatenated code
gap> MinimumDistance(C);
15
gap> History(C);
[ "a linear [30,9,15]0..30 Blokh Zyablov concatenated code of",
  "Inner codes: [ a cyclic [5,1,5]3..4 enumerated code over GF(5), a cyclic [5\
,2,4]2..3 enumerated code over GF(5), a cyclic [5,3,1..3]2 enumerated code ove\
r GF(5) ]",
  "Outer codes: [ a linear [6,4,3]1 dual code, a linear [6,3,4]2..3 extended c\
ode, a linear [6,2,5]3..4 extended code ]" ]
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

generated by GAPDoc2HTML

guava-3.6/htm/chap4.html0000644017361200001450000036207411027015742015032 0ustar tabbottcrontab GAP (guava) - Chapter 4: Codes
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

4. Codes

4. Codes

A code is a set of codewords (recall a codeword in GUAVA is simply a sequence of elements of a finite field GF(q), where q is a prime power). We call these the elements of the code. Depending on the type of code, a codeword can be interpreted as a vector or as a polynomial. This is explained in more detail in Chapter 3..

In GUAVA, codes can be a set specified by its elements (this will be called an unrestricted code), by a generator matrix listing a set of basis elements (for a linear code) or by a generator polynomial (for a cyclic code).

Any code can be defined by its elements. If you like, you can give the code a name.

gap> C := ElementsCode(["1100", "1010", "0001"], "example code", GF(2) );
a (4,3,1..4)2..4 example code over GF(2) 

An (n,M,d) code is a code with word length n, size M and minimum distance d. If the minimum distance has not yet been calculated, the lower bound and upper bound are printed (except in the case where the code is a random linear codes, where these are not printed for efficiency reasons). So


a (4,3,1..4)2..4 code over GF(2)

means a binary unrestricted code of length 4, with 3 elements and the minimum distance is greater than or equal to 1 and less than or equal to 4 and the covering radius is greater than or equal to 2 and less than or equal to 4.

gap> C := ElementsCode(["1100", "1010", "0001"], "example code", GF(2) );
a (4,3,1..4)2..4 example code over GF(2) 
gap> MinimumDistance(C);
2
gap> C;
a (4,3,2)2..4 example code over GF(2) 

If the set of elements is a linear subspace of GF(q)^n, the code is called linear. If a code is linear, it can be defined by its generator matrix or parity check matrix. By definition, the rows of the generator matrix is a basis for the code (as a vector space over GF(q)). By definition, the rows of the parity check matrix is a basis for the dual space of the code,

C^* = \{ v \in GF(q)^n\ |\ v\cdot c = 0,\ for \ all\ c \in C \}.

gap> G := GeneratorMatCode([[1,0,1],[0,1,2]], "demo code", GF(3) );
a linear [3,2,1..2]1 demo code over GF(3) 

So a linear [n, k, d]r code is a code with word length n, dimension k, minimum distance d and covering radius r.

If the code is linear and all cyclic shifts of its codewords (regarded as n-tuples) are again codewords, the code is called cyclic. All elements of a cyclic code are multiples of the monic polynomial modulo a polynomial x^n -1, where n is the word length of the code. Such a polynomial is called a generator polynomial The generator polynomial must divide x^n-1 and its quotient is called a check polynomial. Multiplying a codeword in a cyclic code by the check polynomial yields zero (modulo the polynomial x^n -1). In GUAVA, a cyclic code can be defined by either its generator polynomial or check polynomial.

gap> G := GeneratorPolCode(Indeterminate(GF(2))+Z(2)^0, 7, GF(2) );
a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2)

It is possible that GUAVA does not know that an unrestricted code is in fact linear. This situation occurs for example when a code is generated from a list of elements with the function ElementsCode (see ElementsCode (5.1-1)). By calling the function IsLinearCode (see IsLinearCode (4.3-4)), GUAVA tests if the code can be represented by a generator matrix. If so, the code record and the operations are converted accordingly.

gap> L := Z(2)*[ [0,0,0], [1,0,0], [0,1,1], [1,1,1] ];;
gap> C := ElementsCode( L, GF(2) );
a (3,4,1..3)1 user defined unrestricted code over GF(2)
# so far, GUAVA does not know what kind of code this is
gap> IsLinearCode( C );
true                      # it is linear
gap> C;
a linear [3,2,1]1 user defined unrestricted code over GF(2) 

Of course the same holds for unrestricted codes that in fact are cyclic, or codes, defined by a generator matrix, that actually are cyclic.

Codes are printed simply by giving a small description of their parameters, the word length, size or dimension and perhaps the minimum distance, followed by a short description and the base field of the code. The function Display gives a more detailed description, showing the construction history of the code.

GUAVA doesn't place much emphasis on the actual encoding and decoding processes; some algorithms have been included though. Encoding works simply by multiplying an information vector with a code, decoding is done by the functions Decode or Decodeword. For more information about encoding and decoding, see sections 4.2 and 4.10-1.

gap> R := ReedMullerCode( 1, 3 );
a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
gap> w := [ 1, 0, 1, 1 ] * R;
[ 1 0 0 1 1 0 0 1 ]
gap> Decode( R, w );
[ 1 0 1 1 ]
gap> Decode( R, w + "10000000" ); # One error at the first position
[ 1 0 1 1 ]                       # Corrected by Guava 

Sections 4.1 and 4.2 describe the operations that are available for codes. Section 4.3 describe the functions that tests whether an object is a code and what kind of code it is (see IsCode, IsLinearCode (4.3-4) and IsCyclicCode) and various other boolean functions for codes. Section 4.4 describe functions about equivalence and isomorphism of codes (see IsEquivalent (4.4-1), CodeIsomorphism (4.4-2) and AutomorphismGroup (4.4-3)). Section 4.5 describes functions that work on domains (see Chapter "Domains and their Elements" in the GAP Reference Manual). Section 4.6 describes functions for printing and displaying codes. Section 4.7 describes functions that return the matrices and polynomials that define a code (see GeneratorMat (4.7-1), CheckMat (4.7-2), GeneratorPol (4.7-3), CheckPol (4.7-4), RootsOfCode (4.7-5)). Section 4.8 describes functions that return the basic parameters of codes (see WordLength (4.8-1), Redundancy (4.8-2) and MinimumDistance (4.8-3)). Section 4.9 describes functions that return distance and weight distributions (see WeightDistribution (4.9-2), InnerDistribution (4.9-3), OuterDistribution (4.9-5) and DistancesDistribution (4.9-4)). Section 4.10 describes functions that are related to decoding (see Decode (4.10-1), Decodeword (4.10-2), Syndrome (4.10-8), SyndromeTable (4.10-9) and StandardArray (4.10-10)). In Chapters 5. and 6. which follow, we describe functions that generate and manipulate codes.

4.1 Comparisons of Codes

4.1-1 =
> =( C1, C2 )( function )

The equality operator C1 = C2 evaluates to `true' if the codes C1 and C2 are equal, and to `false' otherwise.

The equality operator is also denoted EQ, and Eq(C1,C2) is the same as C1 = C2. There is also an inequality operator, < >, or not EQ.

Note that codes are equal if and only if their set of elements are equal. Codes can also be compared with objects of other types. Of course they are never equal.

gap> M := [ [0, 0], [1, 0], [0, 1], [1, 1] ];;
gap> C1 := ElementsCode( M, GF(2) );
a (2,4,1..2)0 user defined unrestricted code over GF(2)
gap> M = C1;
false
gap> C2 := GeneratorMatCode( [ [1, 0], [0, 1] ], GF(2) );
a linear [2,2,1]0 code defined by generator matrix over GF(2)
gap> C1 = C2;
true
gap> ReedMullerCode( 1, 3 ) = HadamardCode( 8 );
true
gap> WholeSpaceCode( 5, GF(4) ) = WholeSpaceCode( 5, GF(2) );
false

Another way of comparing codes is IsEquivalent, which checks if two codes are equivalent (see IsEquivalent (4.4-1)). By the way, this called CodeIsomorphism. For the current version of GUAVA, unless one of the codes is unrestricted, this calls Leon's C program (which only works for binary linear codes and only on a unix/linux computer).

4.2 Operations for Codes

4.2-1 +
> +( C1, C2 )( function )

The operator `+' evaluates to the direct sum of the codes C1 and C2. See DirectSumCode (6.2-1).

gap> C1:=RandomLinearCode(10,5);
a  [10,5,?] randomly generated code over GF(2)
gap> C2:=RandomLinearCode(9,4);
a  [9,4,?] randomly generated code over GF(2)
gap> C1+C2;
a linear [10,9,1]0..10 unknown linear code over GF(2)

4.2-2 *
> *( C1, C2 )( function )

The operator `*' evaluates to the direct product of the codes C1 and C2. See DirectProductCode (6.2-3).

gap> C1 := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
a linear [4,2,1]1 code defined by generator matrix over GF(2)
gap> C2 := GeneratorMatCode( [ [0,0,1, 1], [0,0,0, 1] ], GF(2) );
a linear [4,2,1]1 code defined by generator matrix over GF(2)
gap> C1*C2;
a linear [16,4,1]4..12 direct product code

4.2-3 *
> *( m, C )( function )

The operator m*C evaluates to the element of C belonging to information word ('message') m. Here m may be a vector, polynomial, string or codeword or a list of those. This is the way to do encoding in GUAVA. C must be linear, because in GUAVA, encoding by multiplication is only defined for linear codes. If C is a cyclic code, this multiplication is the same as multiplying an information polynomial m by the generator polynomial of C. If C is a linear code, it is equal to the multiplication of an information vector m by a generator matrix of C.

To invert this, use the function InformationWord (see InformationWord (4.2-4), which simply calls the function Decode).

gap> C := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
a linear [4,2,1]1 code defined by generator matrix over GF(2)
gap> m:=Codeword("11");
[ 1 1 ]
gap> m*C;
[ 1 1 0 0 ]

4.2-4 InformationWord
> InformationWord( C, c )( function )

Here C is a linear code and c is a codeword in it. The command InformationWord returns the message word (or 'information digits') m satisfying c=m*C. This command simply calls Decode, provided c in C is true. Otherwise, it returns an error.

To invert this, use the encoding function * (see * (4.2-3)).

gap> C:=HammingCode(3);
a linear [7,4,3]1 Hamming (3,2) code over GF(2)
gap> c:=Random(C);
[ 0 0 0 1 1 1 1 ]
gap> InformationWord(C,c);
[ 0 1 1 1 ]
gap> c:=Codeword("1111100");
[ 1 1 1 1 1 0 0 ]
gap> InformationWord(C,c);
"ERROR: codeword must belong to code"
gap> C:=NordstromRobinsonCode();
a (16,256,6)4 Nordstrom-Robinson code over GF(2)
gap> c:=Random(C);
[ 0 0 0 1 0 0 0 1 0 0 1 0 1 1 0 1 ]
gap> InformationWord(C,c);
"ERROR: code must be linear"

4.3 Boolean Functions for Codes

4.3-1 in
> in( c, C )( function )

The command c in C evaluates to `true' if C contains the codeword or list of codewords specified by c. Of course, c and C must have the same word lengths and base fields.

gap> C:= HammingCode( 2 );; eC:= AsSSortedList( C );
[ [ 0 0 0 ], [ 1 1 1 ] ]
gap> eC[2] in C;
true
gap> [ 0 ] in C;
false 

4.3-2 IsSubset
> IsSubset( C1, C2 )( function )

The command IsSubset(C1,C2) returns `true' if C2 is a subcode of C1, i.e. if C1 contains all the elements of C2.

gap> IsSubset( HammingCode(3), RepetitionCode( 7 ) );
true
gap> IsSubset( RepetitionCode( 7 ), HammingCode( 3 ) );
false
gap> IsSubset( WholeSpaceCode( 7 ), HammingCode( 3 ) );
true

4.3-3 IsCode
> IsCode( obj )( function )

IsCode returns `true' if obj, which can be an object of arbitrary type, is a code and `false' otherwise. Will cause an error if obj is an unbound variable.

gap> IsCode( 1 );
false
gap> IsCode( ReedMullerCode( 2,3 ) );
true

4.3-4 IsLinearCode
> IsLinearCode( obj )( function )

IsLinearCode checks if object obj (not necessarily a code) is a linear code. If a code has already been marked as linear or cyclic, the function automatically returns `true'. Otherwise, the function checks if a basis G of the elements of obj exists that generates the elements of obj. If so, G is recorded as a generator matrix of obj and the function returns `true'. If not, the function returns `false'.

gap> C := ElementsCode( [ [0,0,0],[1,1,1] ], GF(2) );
a (3,2,1..3)1 user defined unrestricted code over GF(2)
gap> IsLinearCode( C );
true
gap> IsLinearCode( ElementsCode( [ [1,1,1] ], GF(2) ) );
false
gap> IsLinearCode( 1 );
false 

4.3-5 IsCyclicCode
> IsCyclicCode( obj )( function )

IsCyclicCode checks if the object obj is a cyclic code. If a code has already been marked as cyclic, the function automatically returns `true'. Otherwise, the function checks if a polynomial g exists that generates the elements of obj. If so, g is recorded as a generator polynomial of obj and the function returns `true'. If not, the function returns `false'.

gap> C := ElementsCode( [ [0,0,0], [1,1,1] ], GF(2) );
a (3,2,1..3)1 user defined unrestricted code over GF(2)
gap> # GUAVA does not know the code is cyclic
gap> IsCyclicCode( C );      # this command tells GUAVA to find out
true
gap> IsCyclicCode( HammingCode( 4, GF(2) ) );
false
gap> IsCyclicCode( 1 );
false 

4.3-6 IsPerfectCode
> IsPerfectCode( C )( function )

IsPerfectCode(C) returns `true' if C is a perfect code. If Csubset GF(q)^n then, by definition, this means that for some positive integer t, the space GF(q)^n is covered by non-overlapping spheres of (Hamming) radius t centered at the codewords in C. For a code with odd minimum distance d = 2t+1, this is the case when every word of the vector space of C is at distance at most t from exactly one element of C. Codes with even minimum distance are never perfect.

In fact, a code that is not "trivially perfect" (the binary repetition codes of odd length, the codes consisting of one word, and the codes consisting of the whole vector space), and does not have the parameters of a Hamming or Golay code, cannot be perfect (see section 1.12 in [HP03]).

gap> H := HammingCode(2);
a linear [3,1,3]1 Hamming (2,2) code over GF(2)
gap> IsPerfectCode( H );
true
gap> IsPerfectCode( ElementsCode([[1,1,0],[0,0,1]],GF(2)) );
true
gap> IsPerfectCode( ReedSolomonCode( 6, 3 ) );
false
gap> IsPerfectCode( BinaryGolayCode() );
true 

4.3-7 IsMDSCode
> IsMDSCode( C )( function )

IsMDSCode(C) returns true if C is a maximum distance separable (MDS) code. A linear [n, k, d]-code of length n, dimension k and minimum distance d is an MDS code if k=n-d+1, in other words if C meets the Singleton bound (see UpperBoundSingleton (7.1-1)). An unrestricted (n, M, d) code is called MDS if k=n-d+1, with k equal to the largest integer less than or equal to the logarithm of M with base q, the size of the base field of C.

Well-known MDS codes include the repetition codes, the whole space codes, the even weight codes (these are the only binary MDS codes) and the Reed-Solomon codes.

gap> C1 := ReedSolomonCode( 6, 3 );
a cyclic [6,4,3]2 Reed-Solomon code over GF(7)
gap> IsMDSCode( C1 );
true    # 6-3+1 = 4
gap> IsMDSCode( QRCode( 23, GF(2) ) );
false 

4.3-8 IsSelfDualCode
> IsSelfDualCode( C )( function )

IsSelfDualCode(C) returns `true' if C is self-dual, i.e. when C is equal to its dual code (see also DualCode (6.1-14)). A code is self-dual if it contains all vectors that its elements are orthogonal to. If a code is self-dual, it automatically is self-orthogonal (see IsSelfOrthogonalCode (4.3-9)).

If C is a non-linear code, it cannot be self-dual (the dual code is always linear), so `false' is returned. A linear code can only be self-dual when its dimension k is equal to the redundancy r.

gap> IsSelfDualCode( ExtendedBinaryGolayCode() );
true
gap> C := ReedMullerCode( 1, 3 );
a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
gap> DualCode( C ) = C;
true 

4.3-9 IsSelfOrthogonalCode
> IsSelfOrthogonalCode( C )( function )

IsSelfOrthogonalCode(C) returns `true' if C is self-orthogonal. A code is self-orthogonal if every element of C is orthogonal to all elements of C, including itself. (In the linear case, this simply means that the generator matrix of C multiplied with its transpose yields a null matrix.)

gap> R := ReedMullerCode(1,4);
a linear [16,5,8]6 Reed-Muller (1,4) code over GF(2)
gap> IsSelfOrthogonalCode(R);
true
gap> IsSelfDualCode(R);
false 

4.3-10 IsDoublyEvenCode
> IsDoublyEvenCode( C )( function )

IsDoublyEvenCode(C) returns `true' if C is a binary linear code which has codewords of weight divisible by 4 only. According to [HP03], a doubly-even code is self-orthogonal and every row in its generator matrix has weight that is divisible by 4.

gap> C:=BinaryGolayCode();
a cyclic [23,12,7]3 binary Golay code over GF(2)
gap> WeightDistribution(C);
[ 1, 0, 0, 0, 0, 0, 0, 253, 506, 0, 0, 1288, 1288, 0, 0, 506, 253, 0, 0, 0, 0, 0, 0, 1 ]
gap> IsDoublyEvenCode(C);  
false
gap> C:=ExtendedCode(C);  
a linear [24,12,8]4 extended code
gap> WeightDistribution(C);
[ 1, 0, 0, 0, 0, 0, 0, 0, 759, 0, 0, 0, 2576, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 1 ]
gap> IsDoublyEvenCode(C);  
true

4.3-11 IsSinglyEvenCode
> IsSinglyEvenCode( C )( function )

IsSinglyEvenCode(C) returns `true' if C is a binary self-orthogonal linear code which is not doubly-even. In other words, C is a binary self-orthogonal code which has codewords of even weight.

gap> x:=Indeterminate(GF(2));                     
x_1
gap> C:=QuasiCyclicCode( [x^0, 1+x^3+x^5+x^6+x^7], 11, GF(2) );
a linear [22,11,1..6]4..7 quasi-cyclic code over GF(2)
gap> IsSelfDualCode(C);  # self-dual is a restriction of self-orthogonal
true
gap> IsDoublyEvenCode(C);
false
gap> IsSinglyEvenCode(C);
true

4.3-12 IsEvenCode
> IsEvenCode( C )( function )

IsEvenCode(C) returns `true' if C is a binary linear code which has codewords of even weight--regardless whether or not it is self-orthogonal.

gap> C:=BinaryGolayCode();
a cyclic [23,12,7]3 binary Golay code over GF(2)
gap> IsSelfOrthogonalCode(C);
false
gap> IsEvenCode(C);
false
gap> C:=ExtendedCode(C);
a linear [24,12,8]4 extended code
gap> IsSelfOrthogonalCode(C);
true
gap> IsEvenCode(C);
true
gap> C:=ExtendedCode(QRCode(17,GF(2)));
a linear [18,9,6]3..5 extended code
gap> IsSelfOrthogonalCode(C);
false
gap> IsEvenCode(C);
true

4.3-13 IsSelfComplementaryCode
> IsSelfComplementaryCode( C )( function )

IsSelfComplementaryCode returns `true' if

v \in C \Rightarrow 1 - v \in C,

where 1 is the all-one word of length n.

gap> IsSelfComplementaryCode( HammingCode( 3, GF(2) ) );
true
gap> IsSelfComplementaryCode( EvenWeightSubcode(
> HammingCode( 3, GF(2) ) ) );
false 

4.3-14 IsAffineCode
> IsAffineCode( C )( function )

IsAffineCode returns `true' if C is an affine code. A code is called affine if it is an affine space. In other words, a code is affine if it is a coset of a linear code.

gap> IsAffineCode( HammingCode( 3, GF(2) ) );
true
gap> IsAffineCode( CosetCode( HammingCode( 3, GF(2) ),
> [ 1, 0, 0, 0, 0, 0, 0 ] ) );
true
gap> IsAffineCode( NordstromRobinsonCode() );
false 

4.3-15 IsAlmostAffineCode
> IsAlmostAffineCode( C )( function )

IsAlmostAffineCode returns `true' if C is an almost affine code. A code is called almost affine if the size of any punctured code of C is q^r for some r, where q is the size of the alphabet of the code. Every affine code is also almost affine, and every code over GF(2) and GF(3) that is almost affine is also affine.

gap> code := ElementsCode( [ [0,0,0], [0,1,1], [0,2,2], [0,3,3],
>                             [1,0,1], [1,1,0], [1,2,3], [1,3,2],
>                             [2,0,2], [2,1,3], [2,2,0], [2,3,1],
>                             [3,0,3], [3,1,2], [3,2,1], [3,3,0] ],
>                             GF(4) );;
gap> IsAlmostAffineCode( code );
true
gap> IsAlmostAffineCode( NordstromRobinsonCode() );
false 

4.4 Equivalence and Isomorphism of Codes

4.4-1 IsEquivalent
> IsEquivalent( C1, C2 )( function )

We say that C1 is permutation equivalent to C2 if C1 can be obtained from C2 by carrying out column permutations. IsEquivalent returns true if C1 and C2 are equivalent codes. At this time, IsEquivalent only handles binary codes. (The external unix/linux program desauto from J. S. Leon is called by IsEquivalent.) Of course, if C1 and C2 are equal, they are also equivalent.

Note that the algorithm is very slow for non-linear codes.

More generally, we say that C1 is equivalent to C2 if C1 can be obtained from C2 by carrying out column permutations and a permutation of the alphabet.

gap> x:= Indeterminate( GF(2) );; pol:= x^3+x+1; 
Z(2)^0+x_1+x_1^3
gap> H := GeneratorPolCode( pol, 7, GF(2));          
a cyclic [7,4,1..3]1 code defined by generator polynomial over GF(2)
gap> H = HammingCode(3, GF(2));
false
gap> IsEquivalent(H, HammingCode(3, GF(2)));
true                        # H is equivalent to a Hamming code
gap> CodeIsomorphism(H, HammingCode(3, GF(2)));
(3,4)(5,6,7) 

4.4-2 CodeIsomorphism
> CodeIsomorphism( C1, C2 )( function )

If the two codes C1 and C2 are permutation equivalent codes (see IsEquivalent (4.4-1)), CodeIsomorphism returns the permutation that transforms C1 into C2. If the codes are not equivalent, it returns `false'.

At this time, IsEquivalent only computes isomorphisms between binary codes on a linux/unix computer (since it calls Leon's C program desauto).

gap> x:= Indeterminate( GF(2) );; pol:= x^3+x+1; 
Z(2)^0+x_1+x_1^3
gap> H := GeneratorPolCode( pol, 7, GF(2));          
a cyclic [7,4,1..3]1 code defined by generator polynomial over GF(2)
gap> CodeIsomorphism(H, HammingCode(3, GF(2)));
(3,4)(5,6,7) 
gap> PermutedCode(H, (3,4)(5,6,7)) = HammingCode(3, GF(2));
true 

4.4-3 AutomorphismGroup
> AutomorphismGroup( C )( function )

AutomorphismGroup returns the automorphism group of a linear code C. For a binary code, the automorphism group is the largest permutation group of degree n such that each permutation applied to the columns of C again yields C. GUAVA calls the external program desauto written by J. S. Leon, if it exists, to compute the automorphism group. If Leon's program is not compiled on the system (and in the default directory) then it calls instead the much slower program PermutationAutomorphismGroup.

See Leon [Leo82] for a more precise description of the method, and the guava/src/leon/doc subdirectory for for details about Leon's C programs.

The function PermutedCode permutes the columns of a code (see PermutedCode (6.1-4)).

gap> R := RepetitionCode(7,GF(2));
a cyclic [7,1,7]3 repetition code over GF(2)
gap> AutomorphismGroup(R);
Sym( [ 1 .. 7 ] )
                        # every permutation keeps R identical
gap> C := CordaroWagnerCode(7);
a linear [7,2,4]3 Cordaro-Wagner code over GF(2)
gap> AsSSortedList(C);
[ [ 0 0 0 0 0 0 0 ], [ 0 0 1 1 1 1 1 ], [ 1 1 0 0 0 1 1 ], [ 1 1 1 1 1 0 0 ] ]
gap> AutomorphismGroup(C);
Group([ (3,4), (4,5), (1,6)(2,7), (1,2), (6,7) ])
gap> C2 :=  PermutedCode(C, (1,6)(2,7));
a linear [7,2,4]3 permuted code
gap> AsSSortedList(C2);
[ [ 0 0 0 0 0 0 0 ], [ 0 0 1 1 1 1 1 ], [ 1 1 0 0 0 1 1 ], [ 1 1 1 1 1 0 0 ] ]
gap> C2 = C;
true 

4.4-4 PermutationAutomorphismGroup
> PermutationAutomorphismGroup( C )( function )

PermutationAutomorphismGroup returns the permutation automorphism group of a linear code C. This is the largest permutation group of degree n such that each permutation applied to the columns of C again yields C. It is written in GAP, so is much slower than AutomorphismGroup.

When C is binary PermutationAutomorphismGroup does not call AutomorphismGroup, even though they agree mathematically in that case. This way PermutationAutomorphismGroup can be called on any platform which runs GAP.

The older name for this command, PermutationGroup, will become obsolete in the next version of GAP.

gap> R := RepetitionCode(3,GF(3));
a cyclic [3,1,3]2 repetition code over GF(3)
gap> G:=PermutationAutomorphismGroup(R);
Group([ (), (1,3), (1,2,3), (2,3), (1,3,2), (1,2) ])
gap> G=SymmetricGroup(3);
true

4.5 Domain Functions for Codes

These are some GAP functions that work on `Domains' in general. Their specific effect on `Codes' is explained here.

4.5-1 IsFinite
> IsFinite( C )( function )

IsFinite is an implementation of the GAP domain function IsFinite. It returns true for a code C.

gap> IsFinite( RepetitionCode( 1000, GF(11) ) );
true 

4.5-2 Size
> Size( C )( function )

Size returns the size of C, the number of elements of the code. If the code is linear, the size of the code is equal to q^k, where q is the size of the base field of C and k is the dimension.

gap> Size( RepetitionCode( 1000, GF(11) ) );
11
gap> Size( NordstromRobinsonCode() );
256 

4.5-3 LeftActingDomain
> LeftActingDomain( C )( function )

LeftActingDomain returns the base field of a code C. Each element of C consists of elements of this base field. If the base field is F, and the word length of the code is n, then the codewords are elements of F^n. If C is a cyclic code, its elements are interpreted as polynomials with coefficients over F.

gap> C1 := ElementsCode([[0,0,0], [1,0,1], [0,1,0]], GF(4));
a (3,3,1..3)2..3 user defined unrestricted code over GF(4)
gap> LeftActingDomain( C1 );
GF(2^2)
gap> LeftActingDomain( HammingCode( 3, GF(9) ) );
GF(3^2) 

4.5-4 Dimension
> Dimension( C )( function )

Dimension returns the parameter k of C, the dimension of the code, or the number of information symbols in each codeword. The dimension is not defined for non-linear codes; Dimension then returns an error.

gap> Dimension( NullCode( 5, GF(5) ) );
0
gap> C := BCHCode( 15, 4, GF(4) );
a cyclic [15,9,5]3..4 BCH code, delta=5, b=1 over GF(4)
gap> Dimension( C );
9
gap> Size( C ) = Size( LeftActingDomain( C ) ) ^ Dimension( C );
true 

4.5-5 AsSSortedList
> AsSSortedList( C )( function )

AsSSortedList (as strictly sorted list) returns an immutable, duplicate free list of the elements of C. For a finite field GF(q) generated by powers of Z(q), the ordering on

GF(q)=\{ 0 , Z(q)^0, Z(q), Z(q)^2, ...Z(q)^{q-2} \}

is that determined by the exponents i. These elements are of the type codeword (see Codeword (3.1-1)). Note that for large codes, generating the elements may be very time- and memory-consuming. For generating a specific element or a subset of the elements, use CodewordNr (see CodewordNr (3.1-2)).

gap> C := ConferenceCode( 5 );
a (5,12,2)1..4 conference code over GF(2)
gap> AsSSortedList( C );
[ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 1 1 ], [ 0 1 1 0 1 ], [ 0 1 1 1 0 ], 
  [ 1 0 0 1 1 ], [ 1 0 1 0 1 ], [ 1 0 1 1 0 ], [ 1 1 0 0 1 ], [ 1 1 0 1 0 ], 
  [ 1 1 1 0 0 ], [ 1 1 1 1 1 ] ]
gap> CodewordNr( C, [ 1, 2 ] );
[ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ] ]

4.6 Printing and Displaying Codes

4.6-1 Print
> Print( C )( function )

Print prints information about C. This is the same as typing the identifier C at the GAP-prompt.

If the argument is an unrestricted code, information in the form


a (n,M,d)r ... code over GF(q)

is printed, where n is the word length, M the number of elements of the code, d the minimum distance and r the covering radius.

If the argument is a linear code, information in the form


a linear [n,k,d]r ... code over GF(q)

is printed, where n is the word length, k the dimension of the code, d the minimum distance and r the covering radius.

Except for codes produced by RandomLinearCode, if d is not yet known, it is displayed in the form


lowerbound..upperbound

and if r is not yet known, it is displayed in the same way. For certain ranges of n, the values of lowerbound and upperbound are obtained from tables.

The function Display gives more information. See Display (4.6-3).

gap> C1 := ExtendedCode( HammingCode( 3, GF(2) ) );
a linear [8,4,4]2 extended code
gap> Print( "This is ", NordstromRobinsonCode(), ". \n");
This is a (16,256,6)4 Nordstrom-Robinson code over GF(2). 

4.6-2 String
> String( C )( function )

String returns information about C in a string. This function is used by Print.

gap> x:= Indeterminate( GF(3) );; pol:= x^2+1;
x_1^2+Z(3)^0
gap> Factors(pol);
[ x_1^2+Z(3)^0 ]
gap> H := GeneratorPolCode( pol, 8, GF(3));
a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)
gap> String(H);
"a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)"

4.6-3 Display
> Display( C )( function )

Display prints the method of construction of code C. With this history, in most cases an equal or equivalent code can be reconstructed. If C is an unmanipulated code, the result is equal to output of the function Print (see Print (4.6-1)).

gap> Display( RepetitionCode( 6, GF(3) ) );
a cyclic [6,1,6]4 repetition code over GF(3)
gap> C1 := ExtendedCode( HammingCode(2) );;
gap> C2 := PuncturedCode( ReedMullerCode( 2, 3 ) );;
gap> Display( LengthenedCode( UUVCode( C1, C2 ) ) );
a linear [12,8,2]2..4 code, lengthened with 1 column(s) of
a linear [11,8,1]1..2 U U+V construction code of
U: a linear [4,1,4]2 extended code of
   a linear [3,1,3]1 Hamming (2,2) code over GF(2)
V: a linear [7,7,1]0 punctured code of
   a cyclic [8,7,2]1 Reed-Muller (2,3) code over GF(2)

4.6-4 DisplayBoundsInfo
> DisplayBoundsInfo( bds )( function )

DisplayBoundsInfo prints the method of construction of the code C indicated in bds:= BoundsMinimumDistance( n, k, GF(q) ).

gap> bounds := BoundsMinimumDistance( 20, 17, GF(4) );
gap> DisplayBoundsInfo(bounds);
an optimal linear [20,17,d] code over GF(4) has d=3
--------------------------------------------------------------------------------------------------
Lb(20,17)=3, by shortening of:
Lb(21,18)=3, by applying contruction B to a [81,77,3] code
Lb(81,77)=3, by shortening of:
Lb(85,81)=3, reference: Ham
--------------------------------------------------------------------------------------------------
Ub(20,17)=3, by considering shortening to:
Ub(7,4)=3, by considering puncturing to:
Ub(6,4)=2, by construction B applied to:
Ub(2,1)=2, repetition code
--------------------------------------------------------------------------------------------------
Reference Ham:
%T this reference is unknown, for more info
%T contact A.E. Brouwer (aeb@cwi.nl)

4.7 Generating (Check) Matrices and Polynomials

4.7-1 GeneratorMat
> GeneratorMat( C )( function )

GeneratorMat returns a generator matrix of C. The code consists of all linear combinations of the rows of this matrix.

If until now no generator matrix of C was determined, it is computed from either the parity check matrix, the generator polynomial, the check polynomial or the elements (if possible), whichever is available.

If C is a non-linear code, the function returns an error.

gap> GeneratorMat( HammingCode( 3, GF(2) ) );
[ [ an immutable GF2 vector of length 7], 
  [ an immutable GF2 vector of length 7], 
  [ an immutable GF2 vector of length 7], 
  [ an immutable GF2 vector of length 7] ]
gap> Display(last);
 1 1 1 . . . .
 1 . . 1 1 . .
 . 1 . 1 . 1 .
 1 1 . 1 . . 1
gap> GeneratorMat( RepetitionCode( 5, GF(25) ) );
[ [ Z(5)^0, Z(5)^0, Z(5)^0, Z(5)^0, Z(5)^0 ] ]
gap> GeneratorMat( NullCode( 14, GF(4) ) );
[  ]

4.7-2 CheckMat
> CheckMat( C )( function )

CheckMat returns a parity check matrix of C. The code consists of all words orthogonal to each of the rows of this matrix. The transpose of the matrix is a right inverse of the generator matrix. The parity check matrix is computed from either the generator matrix, the generator polynomial, the check polynomial or the elements of C (if possible), whichever is available.

If C is a non-linear code, the function returns an error.

gap> CheckMat( HammingCode(3, GF(2) ) );
[ [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
  [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ],
  [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ] ]
gap> Display(last);
 . . . 1 1 1 1
 . 1 1 . . 1 1
 1 . 1 . 1 . 1
gap> CheckMat( RepetitionCode( 5, GF(25) ) );
[ [ Z(5)^0, Z(5)^2, 0*Z(5), 0*Z(5), 0*Z(5) ],
  [ 0*Z(5), Z(5)^0, Z(5)^2, 0*Z(5), 0*Z(5) ],
  [ 0*Z(5), 0*Z(5), Z(5)^0, Z(5)^2, 0*Z(5) ],
  [ 0*Z(5), 0*Z(5), 0*Z(5), Z(5)^0, Z(5)^2 ] ]
gap> CheckMat( WholeSpaceCode( 12, GF(4) ) );
[  ] 

4.7-3 GeneratorPol
> GeneratorPol( C )( function )

GeneratorPol returns the generator polynomial of C. The code consists of all multiples of the generator polynomial modulo x^n-1, where n is the word length of C. The generator polynomial is determined from either the check polynomial, the generator or check matrix or the elements of C (if possible), whichever is available.

If C is not a cyclic code, the function returns `false'.

gap> GeneratorPol(GeneratorMatCode([[1, 1, 0], [0, 1, 1]], GF(2)));
Z(2)^0+x_1
gap> GeneratorPol( WholeSpaceCode( 4, GF(2) ) );
Z(2)^0
gap> GeneratorPol( NullCode( 7, GF(3) ) );
-Z(3)^0+x_1^7

4.7-4 CheckPol
> CheckPol( C )( function )

CheckPol returns the check polynomial of C. The code consists of all polynomials f with

f\cdot h \equiv 0 \ ({\rm mod}\ x^n-1),

where h is the check polynomial, and n is the word length of C. The check polynomial is computed from the generator polynomial, the generator or parity check matrix or the elements of C (if possible), whichever is available.

If C if not a cyclic code, the function returns an error.

gap> CheckPol(GeneratorMatCode([[1, 1, 0], [0, 1, 1]], GF(2)));
Z(2)^0+x_1+x_1^2
gap> CheckPol(WholeSpaceCode(4, GF(2)));
Z(2)^0+x_1^4
gap> CheckPol(NullCode(7,GF(3)));
Z(3)^0

4.7-5 RootsOfCode
> RootsOfCode( C )( function )

RootsOfCode returns a list of all zeros of the generator polynomial of a cyclic code C. These are finite field elements in the splitting field of the generator polynomial, GF(q^m), m is the multiplicative order of the size of the base field of the code, modulo the word length.

The reverse process, constructing a code from a set of roots, can be carried out by the function RootsCode (see RootsCode (5.5-3)).

gap> C1 := ReedSolomonCode( 16, 5 );
a cyclic [16,12,5]3..4 Reed-Solomon code over GF(17)
gap> RootsOfCode( C1 );
[ Z(17), Z(17)^2, Z(17)^3, Z(17)^4 ]
gap> C2 := RootsCode( 16, last );
a cyclic [16,12,5]3..4 code defined by roots over GF(17)
gap> C1 = C2;
true 

4.8 Parameters of Codes

4.8-1 WordLength
> WordLength( C )( function )

WordLength returns the parameter n of C, the word length of the elements. Elements of cyclic codes are polynomials of maximum degree n-1, as calculations are carried out modulo x^n-1.

gap> WordLength( NordstromRobinsonCode() );
16
gap> WordLength( PuncturedCode( WholeSpaceCode(7) ) );
6
gap> WordLength( UUVCode( WholeSpaceCode(7), RepetitionCode(7) ) );
14 

4.8-2 Redundancy
> Redundancy( C )( function )

Redundancy returns the redundancy r of C, which is equal to the number of check symbols in each element. If C is not a linear code the redundancy is not defined and Redundancy returns an error.

If a linear code C has dimension k and word length n, it has redundancy r=n-k.

gap> C := TernaryGolayCode();
a cyclic [11,6,5]2 ternary Golay code over GF(3)
gap> Redundancy(C);
5
gap> Redundancy( DualCode(C) );
6 

4.8-3 MinimumDistance
> MinimumDistance( C )( function )

MinimumDistance returns the minimum distance of C, the largest integer d with the property that every element of C has at least a Hamming distance d (see DistanceCodeword (3.6-2)) to any other element of C. For linear codes, the minimum distance is equal to the minimum weight. This means that d is also the smallest positive value with w[d+1] <> 0, where w=(w[1],w[2],...,w[n]) is the weight distribution of C (see WeightDistribution (4.9-2)). For unrestricted codes, d is the smallest positive value with w[d+1] <> 0, where w is the inner distribution of C (see InnerDistribution (4.9-3)).

For codes with only one element, the minimum distance is defined to be equal to the word length.

For linear codes C, the algorithm used is the following: After replacing C by a permutation equivalent C', one may assume the generator matrix has the following form G=(I_k , | , A), for some kx (n-k) matrix A. If A=0 then return d(C)=1. Next, find the minimum distance of the code spanned by the rows of A. Call this distance d(A). Note that d(A) is equal to the the Hamming distance d(v,0) where v is some proper linear combination of i distinct rows of A. Return d(C)=d(A)+i, where i is as in the previous step.

This command may also be called using the syntax MinimumDistance(C, w). In this form, MinimumDistance returns the minimum distance of a codeword w to the code C, also called the distance from w to C. This is the smallest value d for which there is an element c of the code C which is at distance d from w. So d is also the minimum value for which D[d+1] <> 0, where D is the distance distribution of w to C (see DistancesDistribution (4.9-4)).

Note that w must be an element of the same vector space as the elements of C. w does not necessarily belong to the code (if it does, the minimum distance is zero).

gap> C := MOLSCode(7);; MinimumDistance(C);
3
gap> WeightDistribution(C);
[ 1, 0, 0, 24, 24 ]
gap> MinimumDistance( WholeSpaceCode( 5, GF(3) ) );
1
gap> MinimumDistance( NullCode( 4, GF(2) ) );
4
gap> C := ConferenceCode(9);; MinimumDistance(C);
4
gap> InnerDistribution(C);
[ 1, 0, 0, 0, 63/5, 9/5, 18/5, 0, 9/10, 1/10 ] 
gap> C := MOLSCode(7);; w := CodewordNr( C, 17 );
[ 3 3 6 2 ]
gap> MinimumDistance( C, w );
0
gap> C := RemovedElementsCode( C, w );; MinimumDistance( C, w );
3                           # so w no longer belongs to C 

See also the GUAVA commands relating to bounds on the minimum distance in section 7.1.

4.8-4 MinimumDistanceLeon
> MinimumDistanceLeon( C )( function )

MinimumDistanceLeon returns the ``probable'' minimum distance d_Leon of a linear binary code C, using an implementation of Leon's probabilistic polynomial time algorithm. Briefly: Let C be a linear code of dimension k over GF(q) as above. The algorithm has input parameters s and rho, where s is an integer between 2 and n-k, and rho is an integer between 2 and k.

  • Find a generator matrix G of C.

  • Randomly permute the columns of G.

  • Perform Gaussian elimination on the permuted matrix to obtain a new matrix of the following form:

    G=(I_{k} \, | \, Z \, | \, B)

    with Z a kx s matrix. If (Z,B) is the zero matrix then return 1 for the minimum distance. If Z=0 but not B then either choose another permutation of the rows of C or return `method fails'.

  • Search Z for at most rho rows that lead to codewords of weight less than rho.

  • For these codewords, compute the weight of the whole word in C. Return this weight.

(See for example J. S. Leon, [Leo88] for more details.) Sometimes (as is the case in GUAVA) this probabilistic algorithm is repeated several times and the most commonly occurring value is taken.

gap> C:=RandomLinearCode(50,22,GF(2));
a  [50,22,?] randomly generated code over GF(2)
gap> MinimumDistanceLeon(C); time;
6
211
gap> MinimumDistance(C); time;
6
1204

4.8-5 MinimumWeight
> MinimumWeight( C )( function )

MinimumWeight returns the minimum Hamming weight of a linear code C. At the moment, this function works for binary and ternary codes only. The MinimumWeight function relies on an external executable program which is written in C language. As a consequence, the execution time of MinimumWeight function is faster than that of MinimumDistance (4.8-3) function.

The MinimumWeight function implements Chen's [Che69] algorithm if C is cyclic, and Zimmermann's [Zim96] algorithm if C is a general linear code. This function has a built-in check on the constraints of the minimum weight codewords. For example, for a self-orthogonal code over GF(3), the minimum weight codewords have weight that is divisible by 3, i.e. 0 mod 3 congruence. Similary, self-orthogonal codes over GF(2) have codeword weights that are divisible by 4 and even codes over GF(2) have codewords weights that are divisible by 2. By taking these constraints into account, in many cases, the execution time may be significantly reduced. Consider the minimum Hamming weight enumeration of the [151,45] binary cyclic code (second example below). This cyclic code is self-orthogonal, so the weight of all codewords is divisible by 4. Without considering this constraint, the computation will finish at information weight 10, rather than 9. We can see that, this 0 mod 4 constraint on the codeword weights, has allowed us to avoid enumeration of b(45,10) = 3,190,187,286 additional codewords, where b(n,k)=n!/((n-k)!k!) is the binomial coefficient of integers n and k.

Note that the C source code for this minimum weight computation has not yet been optimised, especially the code for GF(3), and there are chances to improve the speed of this function. Your contributions are most welcomed.

If you find any bugs on this function, please report it to ctjhai@plymouth.ac.uk.

gap> # Extended ternary quadratic residue code of length 48
gap> n := 47;;
gap> x := Indeterminate(GF(3));;
gap> F := Factors(x^n-1);;
gap> v := List([1..n], i->Zero(GF(3)));;
gap> v := v + MutableCopyMat(VectorCodeword( Codeword(F[2]) ));;
gap> G := CirculantMatrix(24, v);;
gap> for i in [1..Size(G)] do; s:=Zero(GF(3));
> for j in [1..Size(G[i])] do; s:=s+G[i][j]; od; Append(G[i], [ s ]);
> od;;
gap> C := GeneratorMatCodeNC(G, GF(3));
a  [48,24,?] randomly generated code over GF(3)
gap> MinimumWeight(C);
[48,24] linear code over GF(3) - minimum weight evaluation
Known lower-bound: 1
There are 2 generator matrices, ranks : 24 24 
The weight of the minimum weight codeword satisfies 0 mod 3 congruence
Enumerating codewords with information weight 1 (w=1)
    Found new minimum weight 15
Number of matrices required for codeword enumeration 2
Completed w= 1, 48 codewords enumerated, lower-bound 6, upper-bound 15
Termination expected with information weight 6 at matrix 1
-----------------------------------------------------------------------------
Enumerating codewords with information weight 2 (w=2) using 2 matrices
Completed w= 2, 1104 codewords enumerated, lower-bound 6, upper-bound 15
Termination expected with information weight 6 at matrix 1
-----------------------------------------------------------------------------
Enumerating codewords with information weight 3 (w=3) using 2 matrices
Completed w= 3, 16192 codewords enumerated, lower-bound 9, upper-bound 15
Termination expected with information weight 6 at matrix 1
-----------------------------------------------------------------------------
Enumerating codewords with information weight 4 (w=4) using 2 matrices
Completed w= 4, 170016 codewords enumerated, lower-bound 12, upper-bound 15
Termination expected with information weight 6 at matrix 1
-----------------------------------------------------------------------------
Enumerating codewords with information weight 5 (w=5) using 2 matrices
Completed w= 5, 1360128 codewords enumerated, lower-bound 12, upper-bound 15
Termination expected with information weight 6 at matrix 1
-----------------------------------------------------------------------------
Enumerating codewords with information weight 6 (w=6) using 1 matrices
Completed w= 6, 4307072 codewords enumerated, lower-bound 15, upper-bound 15
-----------------------------------------------------------------------------
Minimum weight: 15
15
gap> 

gap> # Binary cyclic code [151,45,36]
gap> n := 151;;
gap> x := Indeterminate(GF(2));;
gap> F := Factors(x^n-1);;
gap> C := CheckPolCode(F[2]*F[3]*F[3]*F[4], n, GF(2));
a cyclic [151,45,1..50]31..75 code defined by check polynomial over GF(2)
gap> MinimumWeight(C);
[151,45] cyclic code over GF(2) - minimum weight evaluation
Known lower-bound: 1
The weight of the minimum weight codeword satisfies 0 mod 4 congruence
Enumerating codewords with information weight 1 (w=1)
    Found new minimum weight 56
    Found new minimum weight 44
Number of matrices required for codeword enumeration 1
Completed w= 1, 45 codewords enumerated, lower-bound 8, upper-bound 44
Termination expected with information weight 11
-----------------------------------------------------------------------------
Enumerating codewords with information weight 2 (w=2) using 1 matrix
Completed w= 2, 990 codewords enumerated, lower-bound 12, upper-bound 44
Termination expected with information weight 11
-----------------------------------------------------------------------------
Enumerating codewords with information weight 3 (w=3) using 1 matrix
   Found new minimum weight 40
   Found new minimum weight 36
Completed w= 3, 14190 codewords enumerated, lower-bound 16, upper-bound 36
Termination expected with information weight 9
-----------------------------------------------------------------------------
Enumerating codewords with information weight 4 (w=4) using 1 matrix
Completed w= 4, 148995 codewords enumerated, lower-bound 20, upper-bound 36
Termination expected with information weight 9
-----------------------------------------------------------------------------
Enumerating codewords with information weight 5 (w=5) using 1 matrix
Completed w= 5, 1221759 codewords enumerated, lower-bound 24, upper-bound 36
Termination expected with information weight 9
-----------------------------------------------------------------------------
Enumerating codewords with information weight 6 (w=6) using 1 matrix
Completed w= 6, 8145060 codewords enumerated, lower-bound 24, upper-bound 36
Termination expected with information weight 9
-----------------------------------------------------------------------------
Enumerating codewords with information weight 7 (w=7) using 1 matrix
Completed w= 7, 45379620 codewords enumerated, lower-bound 28, upper-bound 36
Termination expected with information weight 9
-----------------------------------------------------------------------------
Enumerating codewords with information weight 8 (w=8) using 1 matrix
Completed w= 8, 215553195 codewords enumerated, lower-bound 32, upper-bound 36
Termination expected with information weight 9
-----------------------------------------------------------------------------
Enumerating codewords with information weight 9 (w=9) using 1 matrix
Completed w= 9, 886163135 codewords enumerated, lower-bound 36, upper-bound 36
-----------------------------------------------------------------------------
Minimum weight: 36
36

4.8-6 DecreaseMinimumDistanceUpperBound
> DecreaseMinimumDistanceUpperBound( C, t, m )( function )

DecreaseMinimumDistanceUpperBound is an implementation of the algorithm for the minimum distance of a linear binary code C by Leon [Leo88]. This algorithm tries to find codewords with small minimum weights. The parameter t is at least 1 and less than the dimension of C. The best results are obtained if it is close to the dimension of the code. The parameter m gives the number of runs that the algorithm will perform.

The result returned is a record with two fields; the first, mindist, gives the lowest weight found, and word gives the corresponding codeword. (This was implemented before MinimumDistanceLeon but independently. The older manual had given the command incorrectly, so the command was only found after reading all the *.gi files in the GUAVA library. Though both MinimumDistance and MinimumDistanceLeon often run much faster than DecreaseMinimumDistanceUpperBound, DecreaseMinimumDistanceUpperBound appears to be more accurate than MinimumDistanceLeon.)

gap> C:=RandomLinearCode(5,2,GF(2));
a  [5,2,?] randomly generated code over GF(2)
gap> DecreaseMinimumDistanceUpperBound(C,1,4);
rec( mindist := 3, word := [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ] )
gap> MinimumDistance(C);
3
gap> C:=RandomLinearCode(8,4,GF(2));
a  [8,4,?] randomly generated code over GF(2)
gap> DecreaseMinimumDistanceUpperBound(C,3,4);
rec( mindist := 2,
  word := [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ] )
gap> MinimumDistance(C);
2

4.8-7 MinimumDistanceRandom
> MinimumDistanceRandom( C, num, s )( function )

MinimumDistanceRandom returns an upper bound for the minimum distance d_random of a linear binary code C, using a probabilistic polynomial time algorithm. Briefly: Let C be a linear code of dimension k over GF(q) as above. The algorithm has input parameters num and s, where s is an integer between 2 and n-1, and num is an integer greater than or equal to 1.

  • Find a generator matrix G of C.

  • Randomly permute the columns of G, written G_p..

  • G=(A, B)

    with A a kx s matrix. If A is the zero matrix then return `method fails'.

  • Search A for at most 5 rows that lead to codewords, in the code C_A with generator matrix A, of minimum weight.

  • For these codewords, use the associated linear combination to compute the weight of the whole word in C. Return this weight and codeword.

This probabilistic algorithm is repeated num times (with different random permutations of the rows of G each time) and the weight and codeword of the lowest occurring weight is taken.

gap> C:=RandomLinearCode(60,20,GF(2));
a  [60,20,?] randomly generated code over GF(2)
gap> #mindist(C);time;
gap> #mindistleon(C,10,30);time; #doesn't work well
gap> a:=MinimumDistanceRandom(C,10,30);time; # done 10 times -with fastest time!!

 This is a probabilistic algorithm which may return the wrong answer.
[ 12, [ 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 
        1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 ] ]
130
gap> a[2] in C;
true
gap> b:=DecreaseMinimumDistanceUpperBound(C,10,1); time; #only done once!
rec( mindist := 12, word := [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
      Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
      0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 
      Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
      0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 
      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ] )
649
gap> Codeword(b!.word) in C;
true
gap> MinimumDistance(C);time;
12
196
gap> c:=MinimumDistanceLeon(C);time;
12
66
gap> C:=RandomLinearCode(30,10,GF(3));
a  [30,10,?] randomly generated code over GF(3)
gap> a:=MinimumDistanceRandom(C,10,10);time;

 This is a probabilistic algorithm which may return the wrong answer.
[ 13, [ 0 0 0 1 0 0 0 0 0 0 1 0 2 2 1 1 0 2 2 0 1 0 2 1 0 0 0 1 0 2 ] ]
229
gap> a[2] in C;
true
gap> MinimumDistance(C);time;
9
45
gap> c:=MinimumDistanceLeon(C);
Code must be binary. Quitting.
0
gap> a:=MinimumDistanceRandom(C,1,29);time;

 This is a probabilistic algorithm which may return the wrong answer.
[ 10, [ 0 0 1 0 2 0 2 0 1 0 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 2 2 2 0 ] ]
53

4.8-8 CoveringRadius
> CoveringRadius( C )( function )

CoveringRadius returns the covering radius of a linear code C. This is the smallest number r with the property that each element v of the ambient vector space of C has at most a distance r to the code C. So for each vector v there must be an element c of C with d(v,c) <= r. The smallest covering radius of any [n,k] binary linear code is denoted t(n,k). A binary linear code with reasonable small covering radius is called a covering code.

If C is a perfect code (see IsPerfectCode (4.3-6)), the covering radius is equal to t, the number of errors the code can correct, where d = 2t+1, with d the minimum distance of C (see MinimumDistance (4.8-3)).

If there exists a function called SpecialCoveringRadius in the `operations' field of the code, then this function will be called to compute the covering radius of the code. At the moment, no code-specific functions are implemented.

If the length of BoundsCoveringRadius (see BoundsCoveringRadius (7.2-1)), is 1, then the value in


C.boundsCoveringRadius

is returned. Otherwise, the function


C.operations.CoveringRadius

is executed, unless the redundancy of C is too large. In the last case, a warning is issued.

The algorithm used to compute the covering radius is the following. First, CosetLeadersMatFFE is used to compute the list of coset leaders (which returns a codeword in each coset of GF(q)^n/C of minimum weight). Then WeightVecFFE is used to compute the weight of each of these coset leaders. The program returns the maximum of these weights.

gap> H := RandomLinearCode(10, 5, GF(2));
a  [10,5,?] randomly generated code over GF(2)
gap> CoveringRadius(H);
3
gap> H := HammingCode(4, GF(2));; IsPerfectCode(H);
true
gap> CoveringRadius(H);
1                       # Hamming codes have minimum distance 3
gap> CoveringRadius(ReedSolomonCode(7,4));
3 
gap> CoveringRadius( BCHCode( 17, 3, GF(2) ) );
3
gap> CoveringRadius( HammingCode( 5, GF(2) ) );
1
gap> C := ReedMullerCode( 1, 9 );;
gap> CoveringRadius( C );
CoveringRadius: warning, the covering radius of
this code cannot be computed straightforward.
Try to use IncreaseCoveringRadiusLowerBound( code ).
(see the manual for more details).
The covering radius of code lies in the interval:
[ 240 .. 248 ]

See also the GUAVA commands relating to bounds on the minimum distance in section 7.2.

4.8-9 SetCoveringRadius
> SetCoveringRadius( C, intlist )( function )

SetCoveringRadius enables the user to set the covering radius herself, instead of letting GUAVA compute it. If intlist is an integer, GUAVA will simply put it in the `boundsCoveringRadius' field. If it is a list of integers, however, it will intersect this list with the `boundsCoveringRadius' field, thus taking the best of both lists. If this would leave an empty list, the field is set to intlist. Because some other computations use the covering radius of the code, it is important that the entered value is not wrong, otherwise new results may be invalid.

gap> C := BCHCode( 17, 3, GF(2) );;
gap> BoundsCoveringRadius( C );
[ 3 .. 4 ]
gap> SetCoveringRadius( C, [ 2 .. 3 ] );
gap> BoundsCoveringRadius( C );
[ [ 2 .. 3 ] ]

4.9 Distributions

4.9-1 MinimumWeightWords
> MinimumWeightWords( C )( function )

MinimumWeightWords returns the list of minimum weight codewords of C.

This algorithm is written in GAP is slow, so is only suitable for small codes.

This does not call the very fast function MinimumWeight (see MinimumWeight (4.8-5)).

gap> C:=HammingCode(3,GF(2));
a linear [7,4,3]1 Hamming (3,2) code over GF(2)
gap> MinimumWeightWords(C);
[ [ 1 0 0 0 0 1 1 ], [ 0 1 0 1 0 1 0 ], [ 0 1 0 0 1 0 1 ], [ 1 0 0 1 1 0 0 ], [ 0 0 1 0 1 1 0 ],
  [ 0 0 1 1 0 0 1 ], [ 1 1 1 0 0 0 0 ] ]

4.9-2 WeightDistribution
> WeightDistribution( C )( function )

WeightDistribution returns the weight distribution of C, as a vector. The i^th element of this vector contains the number of elements of C with weight i-1. For linear codes, the weight distribution is equal to the inner distribution (see InnerDistribution (4.9-3)). If w is the weight distribution of a linear code C, it must have the zero codeword, so w[1] = 1 (one word of weight 0).

Some codes, such as the Hamming codes, have precomputed weight distributions. For others, the program WeightDistribution calls the GAP program DistancesDistributionMatFFEVecFFE, which is written in C. See also CodeWeightEnumerator.

gap> WeightDistribution( ConferenceCode(9) );
[ 1, 0, 0, 0, 0, 18, 0, 0, 0, 1 ]
gap> WeightDistribution( RepetitionCode( 7, GF(4) ) );
[ 1, 0, 0, 0, 0, 0, 0, 3 ]
gap> WeightDistribution( WholeSpaceCode( 5, GF(2) ) );
[ 1, 5, 10, 10, 5, 1 ] 

4.9-3 InnerDistribution
> InnerDistribution( C )( function )

InnerDistribution returns the inner distribution of C. The i^th element of the vector contains the average number of elements of C at distance i-1 to an element of C. For linear codes, the inner distribution is equal to the weight distribution (see WeightDistribution (4.9-2)).

Suppose w is the inner distribution of C. Then w[1] = 1, because each element of C has exactly one element at distance zero (the element itself). The minimum distance of C is the smallest value d > 0 with w[d+1] <> 0, because a distance between zero and d never occurs. See MinimumDistance (4.8-3).

gap> InnerDistribution( ConferenceCode(9) );
[ 1, 0, 0, 0, 63/5, 9/5, 18/5, 0, 9/10, 1/10 ]
gap> InnerDistribution( RepetitionCode( 7, GF(4) ) );
[ 1, 0, 0, 0, 0, 0, 0, 3 ] 

4.9-4 DistancesDistribution
> DistancesDistribution( C, w )( function )

DistancesDistribution returns the distribution of the distances of all elements of C to a codeword w in the same vector space. The i^th element of the distance distribution is the number of codewords of C that have distance i-1 to w. The smallest value d with w[d+1] <> 0, is defined as the distance to C (see MinimumDistance (4.8-3)).

gap> H := HadamardCode(20);
a (20,40,10)6..8 Hadamard code of order 20 over GF(2)
gap> c := Codeword("10110101101010010101", H);
[ 1 0 1 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 ]
gap> DistancesDistribution(H, c);
[ 0, 0, 0, 0, 0, 1, 0, 7, 0, 12, 0, 12, 0, 7, 0, 1, 0, 0, 0, 0, 0 ]
gap> MinimumDistance(H, c);
5                           # distance to H 

4.9-5 OuterDistribution
> OuterDistribution( C )( function )

The function OuterDistribution returns a list of length q^n, where q is the size of the base field of C and n is the word length. The elements of the list consist of pairs, the first coordinate being an element of GF(q)^n (this is a codeword type) and the second coordinate being a distribution of distances to the code (a list of integers). This table is very large, and for n > 20 it will not fit in the memory of most computers. The function DistancesDistribution (see DistancesDistribution (4.9-4)) can be used to calculate one entry of the list.

gap> C := RepetitionCode( 3, GF(2) );
a cyclic [3,1,3]1 repetition code over GF(2)
gap> OD := OuterDistribution(C);
[ [ [ 0 0 0 ], [ 1, 0, 0, 1 ] ], [ [ 1 1 1 ], [ 1, 0, 0, 1 ] ],
  [ [ 0 0 1 ], [ 0, 1, 1, 0 ] ], [ [ 1 1 0 ], [ 0, 1, 1, 0 ] ],
  [ [ 1 0 0 ], [ 0, 1, 1, 0 ] ], [ [ 0 1 1 ], [ 0, 1, 1, 0 ] ],
  [ [ 0 1 0 ], [ 0, 1, 1, 0 ] ], [ [ 1 0 1 ], [ 0, 1, 1, 0 ] ] ]
gap> WeightDistribution(C) = OD[1][2];
true
gap> DistancesDistribution( C, Codeword("110") ) = OD[4][2];
true 

4.10 Decoding Functions

4.10-1 Decode
> Decode( C, r )( function )

Decode decodes r (a 'received word') with respect to code C and returns the `message word' (i.e., the information digits associated to the codeword c in C closest to r). Here r can be a GUAVA codeword or a list of codewords. First, possible errors in r are corrected, then the codeword is decoded to an information codeword m (and not an element of C). If the code record has a field `specialDecoder', this special algorithm is used to decode the vector. Hamming codes, BCH codes, cyclic codes, and generalized Reed-Solomon have such a special algorithm. (The algorithm used for BCH codes is the Sugiyama algorithm described, for example, in section 5.4.3 of [HP03]. A special decoder has also being written for the generalized Reed-Solomon code using the interpolation algorithm. For cyclic codes, the error-trapping algorithm is used.) If C is linear and no special decoder field has been set then syndrome decoding is used. Otherwise (when C is non-linear), the nearest neighbor decoding algorithm is used (which is very slow).

A special decoder can be created by defining a function


C!.SpecialDecoder := function(C, r) ... end;

The function uses the arguments C (the code record itself) and r (a vector of the codeword type) to decode r to an information vector. A normal decoder would take a codeword r of the same word length and field as C, and would return an information vector of length k, the dimension of C. The user is not restricted to these normal demands though, and can for instance define a decoder for non-linear codes.

Encoding is done by multiplying the information vector with the code (see 4.2).

gap> C := HammingCode(3);
a linear [7,4,3]1 Hamming (3,2) code over GF(2)
gap> c := "1010"*C;                    # encoding
[ 1 0 1 1 0 1 0 ]
gap> Decode(C, c);                     # decoding
[ 1 0 1 0 ]
gap> Decode(C, Codeword("0010101"));
[ 1 1 0 1 ]                            # one error corrected
gap> C!.SpecialDecoder := function(C, c)
> return NullWord(Dimension(C));
> end;
function ( C, c ) ... end
gap> Decode(C, c);
[ 0 0 0 0 ]           # new decoder always returns null word 

4.10-2 Decodeword
> Decodeword( C, r )( function )

Decodeword decodes r (a 'received word') with respect to code C and returns the codeword c in C closest to r. Here r can be a GUAVA codeword or a list of codewords. If the code record has a field `specialDecoder', this special algorithm is used to decode the vector. Hamming codes, generalized Reed-Solomon codes, and BCH codes have such a special algorithm. (The algorithm used for BCH codes is the Sugiyama algorithm described, for example, in section 5.4.3 of [HP03]. The algorithm used for generalized Reed-Solomon codes is the ``interpolation algorithm'' described for example in chapter 5 of [JH04].) If C is linear and no special decoder field has been set then syndrome decoding is used. Otherwise, when C is non-linear, the nearest neighbor algorithm has been implemented (which should only be used for small-sized codes).

gap> C := HammingCode(3);
a linear [7,4,3]1 Hamming (3,2) code over GF(2)
gap> c := "1010"*C;                    # encoding
[ 1 0 1 1 0 1 0 ]
gap> Decodeword(C, c);                     # decoding
[ 1 0 1 1 0 1 0 ]
gap>
gap> R:=PolynomialRing(GF(11),["t"]);
GF(11)[t]
gap> P:=List([1,3,4,5,7],i->Z(11)^i);
[ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ]
gap> C:=GeneralizedReedSolomonCode(P,3,R);
a linear [5,3,1..3]2  generalized Reed-Solomon code over GF(11)
gap> MinimumDistance(C);
3
gap> c:=Random(C);
[ 0 9 6 2 1 ]
gap> v:=Codeword("09620");
[ 0 9 6 2 0 ]
gap> GeneralizedReedSolomonDecoderGao(C,v);
[ 0 9 6 2 1 ]
gap> Decodeword(C,v); # calls the special interpolation decoder
[ 0 9 6 2 1 ]
gap> G:=GeneratorMat(C);
[ [ Z(11)^0, 0*Z(11), 0*Z(11), Z(11)^8, Z(11)^9 ],
  [ 0*Z(11), Z(11)^0, 0*Z(11), Z(11)^0, Z(11)^8 ],
  [ 0*Z(11), 0*Z(11), Z(11)^0, Z(11)^3, Z(11)^8 ] ]
gap> C1:=GeneratorMatCode(G,GF(11));
a linear [5,3,1..3]2 code defined by generator matrix over GF(11)
gap> Decodeword(C,v); # calls syndrome decoding
[ 0 9 6 2 1 ]

4.10-3 GeneralizedReedSolomonDecoderGao
> GeneralizedReedSolomonDecoderGao( C, r )( function )

GeneralizedReedSolomonDecoderGao decodes r (a 'received word') to a codeword c in C in a generalized Reed-Solomon code C (see GeneralizedReedSolomonCode (5.6-2)), closest to r. Here r must be a GUAVA codeword. If the code record does not have name `generalized Reed-Solomon code' then an error is returned. Otherwise, the Gao decoder [Gao03] is used to compute c.

For long codes, this method is faster in practice than the interpolation method used in Decodeword.

gap> R:=PolynomialRing(GF(11),["t"]);
GF(11)[t]
gap> P:=List([1,3,4,5,7],i->Z(11)^i);
[ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ]
gap> C:=GeneralizedReedSolomonCode(P,3,R);
a linear [5,3,1..3]2  generalized Reed-Solomon code over GF(11)
gap> MinimumDistance(C);
3
gap> c:=Random(C);
[ 0 9 6 2 1 ]
gap> v:=Codeword("09620");
[ 0 9 6 2 0 ]
gap> GeneralizedReedSolomonDecoderGao(C,v); 
[ 0 9 6 2 1 ]

4.10-4 GeneralizedReedSolomonListDecoder
> GeneralizedReedSolomonListDecoder( C, r, tau )( function )

GeneralizedReedSolomonListDecoder implements Sudans list-decoding algorithm (see section 12.1 of [JH04]) for ``low rate'' Reed-Solomon codes. It returns the list of all codewords in C which are a distance of at most tau from r (a 'received word'). C must be a generalized Reed-Solomon code C (see GeneralizedReedSolomonCode (5.6-2)) and r must be a GUAVA codeword.

gap> F:=GF(16);
GF(2^4)
gap>
gap> a:=PrimitiveRoot(F);; b:=a^7;; b^4+b^3+1; 
0*Z(2)
gap> Pts:=List([0..14],i->b^i);
[ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12, Z(2^4)^4,
  Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4), Z(2^4)^8 ]
gap> x:=X(F);;
gap> R1:=PolynomialRing(F,[x]);;
gap> vars:=IndeterminatesOfPolynomialRing(R1);;
gap> y:=X(F,vars);;
gap> R2:=PolynomialRing(F,[x,y]);;
gap> C:=GeneralizedReedSolomonCode(Pts,3,R1); 
a linear [15,3,1..13]10..12  generalized Reed-Solomon code over GF(16)
gap> MinimumDistance(C); ## 6 error correcting
13
gap> z:=Zero(F);;
gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];; 
gap> r:=Codeword(r);
[ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
gap> cs:=GeneralizedReedSolomonListDecoder(C,r,2); time;
[ [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ],
  [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] ]
250
gap> c1:=cs[1]; c1 in C;
[ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
true
gap> c2:=cs[2]; c2 in C;
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
true
gap> WeightCodeword(c1-r);
7
gap> WeightCodeword(c2-r);
7

4.10-5 BitFlipDecoder
> BitFlipDecoder( C, r )( function )

The iterative decoding method BitFlipDecoder must only be applied to LDPC codes. For more information on LDPC codes, refer to Section 5.8. For these codes, BitFlipDecoder decodes very quickly. (Warning: it can give wildly wrong results for arbitrary binary linear codes.) The bit flipping algorithm is described for example in Chapter 13 of [JH04].

gap> C:=HammingCode(4,GF(2));
a linear [15,11,3]1 Hamming (4,2) code over GF(2)
gap> c:=Random(C);
[ 0 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ]
gap> v:=List(c);
[ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2),
  Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ]
gap> v[1]:=Z(2)+v[1]; # flip 1st bit of c to create an error
Z(2)^0
gap> v:=Codeword(v);
[ 1 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ]
gap> BitFlipDecoder(C,v);
[ 0 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ]


4.10-6 NearestNeighborGRSDecodewords
> NearestNeighborGRSDecodewords( C, v, dist )( function )

NearestNeighborGRSDecodewords finds all generalized Reed-Solomon codewords within distance dist from v and the associated polynomial, using ``brute force''. Input: v is a received vector (a GUAVA codeword), C is a GRS code, dist > 0 is the distance from v to search in C. Output: a list of pairs [c,f(x)], where wt(c-v)<= dist-1 and c = (f(x_1),...,f(x_n)).

gap> F:=GF(16);
GF(2^4)
gap> a:=PrimitiveRoot(F);; b:=a^7; b^4+b^3+1;
Z(2^4)^7
0*Z(2)
gap> Pts:=List([0..14],i->b^i);
[ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12,
  Z(2^4)^4, Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4),
  Z(2^4)^8 ]
gap> x:=X(F);;
gap> R1:=PolynomialRing(F,[x]);;
gap> vars:=IndeterminatesOfPolynomialRing(R1);;
gap> y:=X(F,vars);;
gap> R2:=PolynomialRing(F,[x,y]);;
gap> C:=GeneralizedReedSolomonCode(Pts,3,R1);
a linear [15,3,1..13]10..12  generalized Reed-Solomon code over GF(16)
gap> MinimumDistance(C); # 6 error correcting
13
gap> z:=Zero(F);
0*Z(2)
gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];; # 7 errors
gap> r:=Codeword(r);
[ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
gap> cs:=NearestNeighborGRSDecodewords(C,r,7);
[ [ [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ], 0*Z(2) ],
  [ [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ], x_1+Z(2)^0 ] ]

4.10-7 NearestNeighborDecodewords
> NearestNeighborDecodewords( C, v, dist )( function )

NearestNeighborDecodewords finds all codewords in a linear code C within distance dist from v, using ``brute force''. Input: v is a received vector (a GUAVA codeword), C is a linear code, dist > 0 is the distance from v to search in C. Output: a list of c in C, where wt(c-v)<= dist-1.

gap> F:=GF(16);
GF(2^4)
gap> a:=PrimitiveRoot(F);; b:=a^7; b^4+b^3+1;
Z(2^4)^7
0*Z(2)
gap> Pts:=List([0..14],i->b^i);
[ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12,
  Z(2^4)^4, Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4),
  Z(2^4)^8 ]
gap> x:=X(F);;
gap> R1:=PolynomialRing(F,[x]);;
gap> vars:=IndeterminatesOfPolynomialRing(R1);;
gap> y:=X(F,vars);;
gap> R2:=PolynomialRing(F,[x,y]);;
gap> C:=GeneralizedReedSolomonCode(Pts,3,R1);
a linear [15,3,1..13]10..12  generalized Reed-Solomon code over GF(16)
gap> MinimumDistance(C);
13
gap> z:=Zero(F);
0*Z(2)
gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];;
gap> r:=Codeword(r);
[ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
gap> cs:=NearestNeighborDecodewords(C,r,7);
[ [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ], 
  [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ] ]

4.10-8 Syndrome
> Syndrome( C, v )( function )

Syndrome returns the syndrome of word v with respect to a linear code C. v is a codeword in the ambient vector space of C. If v is an element of C, the syndrome is a zero vector. The syndrome can be used for looking up an error vector in the syndrome table (see SyndromeTable (4.10-9)) that is needed to correct an error in v.

A syndrome is not defined for non-linear codes. Syndrome then returns an error.

gap> C := HammingCode(4);
a linear [15,11,3]1 Hamming (4,2) code over GF(2)
gap> v := CodewordNr( C, 7 );
[ 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 ]
gap> Syndrome( C, v );
[ 0 0 0 0 ]
gap> Syndrome( C, Codeword( "000000001100111" ) );
[ 1 1 1 1 ]
gap> Syndrome( C, Codeword( "000000000000001" ) );
[ 1 1 1 1 ]    # the same syndrome: both codewords are in the same
               # coset of C 

4.10-9 SyndromeTable
> SyndromeTable( C )( function )

SyndromeTable returns a syndrome table of a linear code C, consisting of two columns. The first column consists of the error vectors that correspond to the syndrome vectors in the second column. These vectors both are of the codeword type. After calculating the syndrome of a word v with Syndrome (see Syndrome (4.10-8)), the error vector needed to correct v can be found in the syndrome table. Subtracting this vector from v yields an element of C. To make the search for the syndrome as fast as possible, the syndrome table is sorted according to the syndrome vectors.

gap> H := HammingCode(2);
a linear [3,1,3]1 Hamming (2,2) code over GF(2)
gap> SyndromeTable(H);
[ [ [ 0 0 0 ], [ 0 0 ] ], [ [ 1 0 0 ], [ 0 1 ] ],
  [ [ 0 1 0 ], [ 1 0 ] ], [ [ 0 0 1 ], [ 1 1 ] ] ]
gap> c := Codeword("101");
[ 1 0 1 ]
gap> c in H;
false          # c is not an element of H
gap> Syndrome(H,c);
[ 1 0 ]        # according to the syndrome table,
               # the error vector [ 0 1 0 ] belongs to this syndrome
gap> c - Codeword("010") in H;
true           # so the corrected codeword is
               # [ 1 0 1 ] - [ 0 1 0 ] = [ 1 1 1 ],
               # this is an element of H 

4.10-10 StandardArray
> StandardArray( C )( function )

StandardArray returns the standard array of a code C. This is a matrix with elements of the codeword type. It has q^r rows and q^k columns, where q is the size of the base field of C, r=n-k is the redundancy of C, and k is the dimension of C. The first row contains all the elements of C. Each other row contains words that do not belong to the code, with in the first column their syndrome vector (see Syndrome (4.10-8)).

A non-linear code does not have a standard array. StandardArray then returns an error.

Note that calculating a standard array can be very time- and memory- consuming.

gap> StandardArray(RepetitionCode(3)); 
[ [ [ 0 0 0 ], [ 1 1 1 ] ], [ [ 0 0 1 ], [ 1 1 0 ] ], 
  [ [ 0 1 0 ], [ 1 0 1 ] ], [ [ 1 0 0 ], [ 0 1 1 ] ] ]

4.10-11 PermutationDecode
> PermutationDecode( C, v )( function )

PermutationDecode performs permutation decoding when possible and returns original vector and prints 'fail' when not possible.

This uses AutomorphismGroup in the binary case, and (the slower) PermutationAutomorphismGroup otherwise, to compute the permutation automorphism group P of C. The algorithm runs through the elements p of P checking if the weight of H(p* v) is less than (d-1)/2. If it is then the vector p* v is used to decode v: assuming C is in standard form then c=p^-1Em is the decoded word, where m is the information digits part of p* v. If no such p exists then ``fail'' is returned. See, for example, section 10.2 of Huffman and Pless [HP03] for more details.

gap> C0:=HammingCode(3,GF(2));
a linear [7,4,3]1 Hamming (3,2) code over GF(2)
gap> G0:=GeneratorMat(C0);;
gap> G := List(G0, ShallowCopy);;
gap> PutStandardForm(G);
()
gap> Display(G);
 1 . . . . 1 1
 . 1 . . 1 . 1
 . . 1 . 1 1 .
 . . . 1 1 1 1
gap> H0:=CheckMat(C0);;
gap> Display(H0);
 . . . 1 1 1 1
 . 1 1 . . 1 1
 1 . 1 . 1 . 1
gap> c0:=Random(C0);
[ 0 0 0 1 1 1 1 ]
gap> v01:=c0[1]+Z(2)^2;;
gap> v1:=List(c0, ShallowCopy);;
gap> v1[1]:=v01;;
gap> v1:=Codeword(v1);
[ 1 0 0 1 1 1 1 ]
gap> c1:=PermutationDecode(C0,v1);
[ 0 0 0 1 1 1 1 ]
gap> c1=c0;
true

4.10-12 PermutationDecodeNC
> PermutationDecodeNC( C, v, P )( function )

Same as PermutationDecode except that one may enter the permutation automorphism group P in as an argument, saving time. Here P is a subgroup of the symmetric group on n letters, where n is the word length of C.

Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

generated by GAPDoc2HTML

guava-3.6/htm/chap1.html0000644017361200001450000001645211027015742015023 0ustar tabbottcrontab GAP (guava) - Chapter 1: Introduction
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

1. Introduction

1.1 Introduction to the GUAVA package

This is the manual of the GAP package GUAVA that provides implementations of some routines designed for the construction and analysis of in the theory of error-correcting codes. This version of GUAVA requires GAP 4.4.5 or later.

The functions can be divided into three subcategories:

  • Construction of codes: GUAVA can construct unrestricted, linear and cyclic codes. Information about the code, such as operations applicable to the code, is stored in a record-like data structure called a GAP object.

  • Manipulations of codes: Manipulation transforms one code into another, or constructs a new code from two codes. The new code can profit from the data in the record of the old code(s), so in these cases calculation time decreases.

  • Computations of information about codes: GUAVA can calculate important parameters of codes quickly. The results are stored in the codes' object components.

Except for the automorphism group and isomorphism testing functions, which make use of J.S. Leon's programs (see [Leo91] and the documentation in the 'src/leon' subdirectory of the 'guava' directory for some details), and MinimumWeight (4.8-5) function, GUAVA is written in the GAP language, and runs on any system supporting GAP4.3 and above. Several algorithms that need the speed were integrated in the GAP kernel.

Good general references for error-correcting codes and the technical terms in this manual are MacWilliams and Sloane [MS83] Huffman and Pless [HP03].

1.2 Installing GUAVA

To install GUAVA (as a GAP 4 Package) unpack the archive file in a directory in the `pkg' hierarchy of your version of GAP 4.

After unpacking GUAVA the GAP-only part of GUAVA is installed. The parts of GUAVA depending on J. Leon's backtrack programs package (for computing automorphism groups) are only available in a UNIX environment, where you should proceed as follows: Go to the newly created `guava' directory and call `./configure /gappath' where /gappath is the path to the GAP home directory. So for example, if you install the package in the main `pkg' directory call


./configure ../..

This will fetch the architecture type for which GAP has been compiled last and create a `Makefile'. Now call


make

to compile the binary and to install it in the appropriate place. (For a windows machine with CYGWIN installed - see http://www.cygwin.com/ - instructions for compiling Leon's binaries are likely to be similar to those above. On a 64-bit SUSE linux computer, instead of the configure command above - which will only compile the 32-bit binary - type


./configure ../.. --enable-libsuffix=64 
make

to compile Leon's program as a 64 bit native binary. This may also work for other 64-bit linux distributions as well.)

Starting with version 2.5, you should also install the GAP package SONATA to load GAP. You can download this from the GAP website and unpack it in the `pkg' subdirectory.

This completes the installation of GUAVA for a single architecture. If you use this installation of GUAVA on different hardware platforms you will have to compile the binary for each platform separately.

1.3 Loading GUAVA

After starting up GAP, the GUAVA package needs to be loaded. Load GUAVA by typing at the GAP prompt:

gap> LoadPackage( "guava" );

If GUAVA isn't already in memory, it is loaded and the author information is displayed. If you are a frequent user of GUAVA, you might consider putting this line in your `.gaprc' file.

Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

generated by GAPDoc2HTML

guava-3.6/htm/chap5.html0000644017361200001450000043775411027015742015043 0ustar tabbottcrontab GAP (guava) - Chapter 5: Generating Codes
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

5. Generating Codes

5. Generating Codes

In this chapter we describe functions for generating codes.

Section 5.1 describes functions for generating unrestricted codes.

Section 5.2 describes functions for generating linear codes.

Section 5.3 describes functions for constructing certain covering codes, such as the Gabidulin codes.

Section 5.4 describes functions for constructing the Golay codes.

Section 5.5 describes functions for generating cyclic codes.

Section 5.6 describes functions for generating codes as the image of an evaluation map applied to a space of functions. For example, generalized Reed-Solomon codes and toric codes are described there.

Section 5.7 describes functions for generating algebraic geometry codes.

Section 5.8 describes functions for constructing low-density parity-check (LDPC) codes.

5.1 Generating Unrestricted Codes

In this section we start with functions that creating code from user defined matrices or special matrices (see ElementsCode (5.1-1), HadamardCode (5.1-2), ConferenceCode (5.1-3) and MOLSCode (5.1-4)). These codes are unrestricted codes; they may later be discovered to be linear or cyclic.

The next functions generate random codes (see RandomCode (5.1-5)) and the Nordstrom-Robinson code (see NordstromRobinsonCode (5.1-6)), respectively.

Finally, we describe two functions for generating Greedy codes. These are codes that contructed by gathering codewords from a space (see GreedyCode (5.1-7) and LexiCode (5.1-8)).

5.1-1 ElementsCode
> ElementsCode( L[, name], F )( function )

ElementsCode creates an unrestricted code of the list of elements L, in the field F. L must be a list of vectors, strings, polynomials or codewords. name can contain a short description of the code.

If L contains a codeword more than once, it is removed from the list and a GAP set is returned.

gap> M := Z(3)^0 * [ [1, 0, 1, 1], [2, 2, 0, 0], [0, 1, 2, 2] ];;
gap> C := ElementsCode( M, "example code", GF(3) );
a (4,3,1..4)2 example code over GF(3)
gap> MinimumDistance( C );
4
gap> AsSSortedList( C );
[ [ 0 1 2 2 ], [ 1 0 1 1 ], [ 2 2 0 0 ] ]

5.1-2 HadamardCode
> HadamardCode( H[, t] )( function )

The four forms this command can take are HadamardCode(H,t), HadamardCode(H), HadamardCode(n,t), and HadamardCode(n).

In the case when the arguments H and t are both given, HadamardCode returns a Hadamard code of the t^th kind from the Hadamard matrix H In case only H is given, t = 3 is used.

By definition, a Hadamard matrix is a square matrix H with H* H^T = -n* I_n, where n is the size of H. The entries of H are either 1 or -1.

The matrix H is first transformed into a binary matrix A_n by replacing the 1's by 0's and the -1's by 1s).

The Hadamard matrix of the first kind (t=1) is created by using the rows of A_n as elements, after deleting the first column. This is a (n-1, n, n/2) code. We use this code for creating the Hadamard code of the second kind (t=2), by adding all the complements of the already existing codewords. This results in a (n-1, 2n, n/2 -1) code. The third kind (t=3) is created by using the rows of A_n (without cutting a column) and their complements as elements. This way, we have an (n, 2n, n/2)-code. The returned code is generally an unrestricted code, but for n = 2^r, the code is linear.

The command HadamardCode(n,t) returns a Hadamard code with parameter n of the t^th kind. For the command HadamardCode(n), t=3 is used.

When called in these forms, HadamardCode first creates a Hadamard matrix (see HadamardMat (7.3-4)), of size n and then follows the same procedure as described above. Therefore the same restrictions with respect to n as for Hadamard matrices hold.

gap> H4 := [[1,1,1,1],[1,-1,1,-1],[1,1,-1,-1],[1,-1,-1,1]];;
gap> HadamardCode( H4, 1 );
a (3,4,2)1 Hadamard code of order 4 over GF(2)
gap> HadamardCode( H4, 2 );
a (3,8,1)0 Hadamard code of order 4 over GF(2)
gap> HadamardCode( H4 );
a (4,8,2)1 Hadamard code of order 4 over GF(2) 
gap> H4 := [[1,1,1,1],[1,-1,1,-1],[1,1,-1,-1],[1,-1,-1,1]];;
gap> C := HadamardCode( 4 );
a (4,8,2)1 Hadamard code of order 4 over GF(2)
gap> C = HadamardCode( H4 );
true 

5.1-3 ConferenceCode
> ConferenceCode( H )( function )

ConferenceCode returns a code of length n-1 constructed from a symmetric 'conference matrix' H. A conference matrix H is a symmetric matrix of order n, which satisfies H* H^T = ((n-1)* I, with n = 2 mod 4. The rows of frac12(H+I+J), frac12(-H+I+J), plus the zero and all-ones vectors form the elements of a binary non-linear (n-1, 2n, (n-2)/2) code.

GUAVA constructs a symmetric conference matrix of order n+1 (n= 1 mod 4) and uses the rows of that matrix, plus the zero and all-ones vectors, to construct a binary non-linear (n, 2(n+1), (n-1)/2)-code.

gap> H6 := [[0,1,1,1,1,1],[1,0,1,-1,-1,1],[1,1,0,1,-1,-1],
> [1,-1,1,0,1,-1],[1,-1,-1,1,0,1],[1,1,-1,-1,1,0]];;
gap> C1 := ConferenceCode( H6 );
a (5,12,2)1..4 conference code over GF(2)
gap> IsLinearCode( C1 );
false 
gap> C2 := ConferenceCode( 5 );
a (5,12,2)1..4 conference code over GF(2)
gap> AsSSortedList( C2 );
[ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 1 1 ], [ 0 1 1 0 1 ], [ 0 1 1 1 0 ], 
  [ 1 0 0 1 1 ], [ 1 0 1 0 1 ], [ 1 0 1 1 0 ], [ 1 1 0 0 1 ], [ 1 1 0 1 0 ], 
  [ 1 1 1 0 0 ], [ 1 1 1 1 1 ] ]

5.1-4 MOLSCode
> MOLSCode( [n][,]q )( function )

MOLSCode returns an (n, q^2, n-1) code over GF(q). The code is created from n-2 'Mutually Orthogonal Latin Squares' (MOLS) of size q x q. The default for n is 4. GUAVA can construct a MOLS code for n-2 <= q. Here q must be a prime power, q > 2. If there are no n-2 MOLS, an error is signalled.

Since each of the n-2 MOLS is a qx q matrix, we can create a code of size q^2 by listing in each code element the entries that are in the same position in each of the MOLS. We precede each of these lists with the two coordinates that specify this position, making the word length become n.

The MOLS codes are MDS codes (see IsMDSCode (4.3-7)).

gap> C1 := MOLSCode( 6, 5 );
a (6,25,5)3..4 code generated by 4 MOLS of order 5 over GF(5)
gap> mols := List( [1 .. WordLength(C1) - 2 ], function( nr )
>       local ls, el;
>       ls := NullMat( Size(LeftActingDomain(C1)), Size(LeftActingDomain(C1)) );
>       for el in VectorCodeword( AsSSortedList( C1 ) ) do
>          ls[IntFFE(el[1])+1][IntFFE(el[2])+1] := el[nr + 2];
>       od;
>       return ls;
>    end );;
gap> AreMOLS( mols );
true
gap> C2 := MOLSCode( 11 );
a (4,121,3)2 code generated by 2 MOLS of order 11 over GF(11) 

5.1-5 RandomCode
> RandomCode( n, M, F )( function )

RandomCode returns a random unrestricted code of size M with word length n over F. M must be less than or equal to the number of elements in the space GF(q)^n.

The function RandomLinearCode returns a random linear code (see RandomLinearCode (5.2-12)).

gap> C1 := RandomCode( 6, 10, GF(8) );
a (6,10,1..6)4..6 random unrestricted code over GF(8)
gap> MinimumDistance(C1);
3
gap> C2 := RandomCode( 6, 10, GF(8) );
a (6,10,1..6)4..6 random unrestricted code over GF(8)
gap> C1 = C2;
false 

5.1-6 NordstromRobinsonCode
> NordstromRobinsonCode( )( function )

NordstromRobinsonCode returns a Nordstrom-Robinson code, the best code with word length n=16 and minimum distance d=6 over GF(2). This is a non-linear (16, 256, 6) code.

gap> C := NordstromRobinsonCode();
a (16,256,6)4 Nordstrom-Robinson code over GF(2)
gap> OptimalityCode( C );
0 

5.1-7 GreedyCode
> GreedyCode( L, d, F )( function )

GreedyCode returns a Greedy code with design distance d over the finite field F. The code is constructed using the greedy algorithm on the list of vectors L. (The greedy algorithm checks each vector in L and adds it to the code if its distance to the current code is greater than or equal to d. It is obvious that the resulting code has a minimum distance of at least d.

Greedy codes are often linear codes.

The function LexiCode creates a greedy code from a basis instead of an enumerated list (see LexiCode (5.1-8)).

gap> C1 := GreedyCode( Tuples( AsSSortedList( GF(2) ), 5 ), 3, GF(2) );
a (5,4,3..5)2 Greedy code, user defined basis over GF(2)
gap> C2 := GreedyCode( Permuted( Tuples( AsSSortedList( GF(2) ), 5 ),
>                         (1,4) ), 3, GF(2) );
a (5,4,3..5)2 Greedy code, user defined basis over GF(2)
gap> C1 = C2;
false 

5.1-8 LexiCode
> LexiCode( n, d, F )( function )

In this format, Lexicode returns a lexicode with word length n, design distance d over F. The code is constructed using the greedy algorithm on the lexicographically ordered list of all vectors of length n over F. Every time a vector is found that has a distance to the current code of at least d, it is added to the code. This results, obviously, in a code with minimum distance greater than or equal to d.

Another syntax which one can use is LexiCode( B, d, F ). When called in this format, LexiCode uses the basis B instead of the standard basis. B is a matrix of vectors over F. The code is constructed using the greedy algorithm on the list of vectors spanned by B, ordered lexicographically with respect to B.

Note that binary lexicodes are always linear.

gap> C := LexiCode( 4, 3, GF(5) );
a (4,17,3..4)2..4 lexicode over GF(5) 
gap> B := [ [Z(2)^0, 0*Z(2), 0*Z(2)], [Z(2)^0, Z(2)^0, 0*Z(2)] ];;
gap> C := LexiCode( B, 2, GF(2) );
a linear [3,1,2]1..2 lexicode over GF(2) 

The function GreedyCode creates a greedy code that is not restricted to a lexicographical order (see GreedyCode (5.1-7)).

5.2 Generating Linear Codes

In this section we describe functions for constructing linear codes. A linear code always has a generator or check matrix.

The first two functions generate linear codes from the generator matrix (GeneratorMatCode (5.2-1)) or check matrix (CheckMatCode (5.2-3)). All linear codes can be constructed with these functions.

The next functions we describe generate some well-known codes, like Hamming codes (HammingCode (5.2-4)), Reed-Muller codes (ReedMullerCode (5.2-5)) and the extended Golay codes (ExtendedBinaryGolayCode (5.4-2) and ExtendedTernaryGolayCode (5.4-4)).

A large and powerful family of codes are alternant codes. They are obtained by a small modification of the parity check matrix of a BCH code (see AlternantCode (5.2-6), GoppaCode (5.2-7), GeneralizedSrivastavaCode (5.2-8) and SrivastavaCode (5.2-9)).

Finally, we describe a function for generating random linear codes (see RandomLinearCode (5.2-12)).

5.2-1 GeneratorMatCode
> GeneratorMatCode( G[, name], F )( function )

GeneratorMatCode returns a linear code with generator matrix G. G must be a matrix over finite field F. name can contain a short description of the code. The generator matrix is the basis of the elements of the code. The resulting code has word length n, dimension k if G is a k x n-matrix. If GF(q) is the field of the code, the size of the code will be q^k.

If the generator matrix does not have full row rank, the linearly dependent rows are removed. This is done by the GAP function BaseMat and results in an equal code. The generator matrix can be retrieved with the function GeneratorMat (see GeneratorMat (4.7-1)).

gap> G := Z(3)^0 * [[1,0,1,2,0],[0,1,2,1,1],[0,0,1,2,1]];;
gap> C1 := GeneratorMatCode( G, GF(3) );
a linear [5,3,1..2]1..2 code defined by generator matrix over GF(3)
gap> C2 := GeneratorMatCode( IdentityMat( 5, GF(2) ), GF(2) );
a linear [5,5,1]0 code defined by generator matrix over GF(2)
gap> GeneratorMatCode( List( AsSSortedList( NordstromRobinsonCode() ),
> x -> VectorCodeword( x ) ), GF( 2 ) );
a linear [16,11,1..4]2 code defined by generator matrix over GF(2)
# This is the smallest linear code that contains the N-R code 

5.2-2 CheckMatCodeMutable
> CheckMatCodeMutable( H[, name], F )( function )

CheckMatCodeMutable is the same as CheckMatCode except that the check matrix and generator matrix are mutable.

5.2-3 CheckMatCode
> CheckMatCode( H[, name], F )( function )

CheckMatCode returns a linear code with check matrix H. H must be a matrix over Galois field F. [name. can contain a short description of the code. The parity check matrix is the transposed of the nullmatrix of the generator matrix of the code. Therefore, c* H^T = 0 where c is an element of the code. If H is a rx n-matrix, the code has word length n, redundancy r and dimension n-r.

If the check matrix does not have full row rank, the linearly dependent rows are removed. This is done by the GAP function BaseMat. and results in an equal code. The check matrix can be retrieved with the function CheckMat (see CheckMat (4.7-2)).

gap> G := Z(3)^0 * [[1,0,1,2,0],[0,1,2,1,1],[0,0,1,2,1]];;
gap> C1 := CheckMatCode( G, GF(3) );
a linear [5,2,1..2]2..3 code defined by check matrix over GF(3)
gap> CheckMat(C1);
[ [ Z(3)^0, 0*Z(3), Z(3)^0, Z(3), 0*Z(3) ],
  [ 0*Z(3), Z(3)^0, Z(3), Z(3)^0, Z(3)^0 ],
  [ 0*Z(3), 0*Z(3), Z(3)^0, Z(3), Z(3)^0 ] ]
gap> C2 := CheckMatCode( IdentityMat( 5, GF(2) ), GF(2) );
a cyclic [5,0,5]5 code defined by check matrix over GF(2)

5.2-4 HammingCode
> HammingCode( r, F )( function )

HammingCode returns a Hamming code with redundancy r over F. A Hamming code is a single-error-correcting code. The parity check matrix of a Hamming code has all nonzero vectors of length r in its columns, except for a multiplication factor. The decoding algorithm of the Hamming code (see Decode (4.10-1)) makes use of this property.

If q is the size of its field F, the returned Hamming code is a linear [(q^r-1)/(q-1), (q^r-1)/(q-1) - r, 3] code.

gap> C1 := HammingCode( 4, GF(2) );
a linear [15,11,3]1 Hamming (4,2) code over GF(2)
gap> C2 := HammingCode( 3, GF(9) );
a linear [91,88,3]1 Hamming (3,9) code over GF(9) 

5.2-5 ReedMullerCode
> ReedMullerCode( r, k )( function )

ReedMullerCode returns a binary 'Reed-Muller code' R(r, k) with dimension k and order r. This is a code with length 2^k and minimum distance 2^k-r (see for example, section 1.10 in [HP03]). By definition, the r^th order binary Reed-Muller code of length n=2^m, for 0 <= r <= m, is the set of all vectors f, where f is a Boolean function which is a polynomial of degree at most r.

gap> ReedMullerCode( 1, 3 );
a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) 

See GeneralizedReedMullerCode (5.6-3) for a more general construction.

5.2-6 AlternantCode
> AlternantCode( r, Y[, alpha], F )( function )

AlternantCode returns an 'alternant code', with parameters r, Y and alpha (optional). F denotes the (finite) base field. Here, r is the design redundancy of the code. Y and alpha are both vectors of length n from which the parity check matrix is constructed. The check matrix has the form H=([a_i^j y_i]), where 0 <= j<= r-1, 1 <= i<= n, and where [...] is as in VerticalConversionFieldMat (7.3-9)). If no alpha is specified, the vector [1, a, a^2, .., a^n-1] is used, where a is a primitive element of a Galois field F.

gap> Y := [ 1, 1, 1, 1, 1, 1, 1];; a := PrimitiveUnityRoot( 2, 7 );;
gap> alpha := List( [0..6], i -> a^i );;
gap> C := AlternantCode( 2, Y, alpha, GF(8) );
a linear [7,3,3..4]3..4 alternant code over GF(8) 

5.2-7 GoppaCode
> GoppaCode( G, L )( function )

GoppaCode returns a Goppa code C from Goppa polynomial g, having coefficients in a Galois Field GF(q). L must be a list of elements in GF(q), that are not roots of g. The word length of the code is equal to the length of L. The parity check matrix has the form H=([a_i^j / G(a_i)])_0 <= j <= deg(g)-1, a_i in L, where a_iin L and [...] is as in VerticalConversionFieldMat (7.3-9), so H has entries in GF(q), q=p^m. It is known that d(C)>= deg(g)+1, with a better bound in the binary case provided g has no multiple roots. See Huffman and Pless [HP03] section 13.2.2, and MacWilliams and Sloane [MS83] section 12.3, for more details.

One can also call GoppaCode using the syntax GoppaCode(g,n). When called with parameter n, GUAVA constructs a list L of length n, such that no element of L is a root of g.

This is a special case of an alternant code.

gap> x:=Indeterminate(GF(8),"x");
x
gap> L:=Elements(GF(8));
[ 0*Z(2), Z(2)^0, Z(2^3), Z(2^3)^2, Z(2^3)^3, Z(2^3)^4, Z(2^3)^5, Z(2^3)^6 ]
gap> g:=x^2+x+1;
x^2+x+Z(2)^0
gap> C:=GoppaCode(g,L);
a linear [8,2,5]3 Goppa code over GF(2)
gap> xx := Indeterminate( GF(2), "xx" );; 
gap> gg := xx^2 + xx + 1;; L := AsSSortedList( GF(8) );;
gap> C1 := GoppaCode( gg, L );
a linear [8,2,5]3 Goppa code over GF(2) 
gap> y := Indeterminate( GF(2), "y" );; 
gap> h := y^2 + y + 1;;
gap> C2 := GoppaCode( h, 8 );
a linear [8,2,5]3 Goppa code over GF(2) 
gap> C1=C2;
true
gap> C=C1;
true

5.2-8 GeneralizedSrivastavaCode
> GeneralizedSrivastavaCode( a, w, z[, t], F )( function )

GeneralizedSrivastavaCode returns a generalized Srivastava code with parameters a, w, z, t. a = a_1, ..., a_n and w = w_1, ..., w_s are lists of n+s distinct elements of F=GF(q^m), z is a list of length n of nonzero elements of GF(q^m). The parameter t determines the designed distance: d >= st + 1. The check matrix of this code is the form

H=([\frac{z_i}{(a_i - w_j)^k}]),

1<= k<= t, where [...] is as in VerticalConversionFieldMat (7.3-9). We use this definition of H to define the code. The default for t is 1. The original Srivastava codes (see SrivastavaCode (5.2-9)) are a special case t=1, z_i=a_i^mu, for some mu.

gap> a := Filtered( AsSSortedList( GF(2^6) ), e -> e in GF(2^3) );;
gap> w := [ Z(2^6) ];; z := List( [1..8], e -> 1 );;
gap> C := GeneralizedSrivastavaCode( a, w, z, 1, GF(64) );
a linear [8,2,2..5]3..4 generalized Srivastava code over GF(2) 

5.2-9 SrivastavaCode
> SrivastavaCode( a, w[, mu], F )( function )

SrivastavaCode returns a Srivastava code with parameters a, w (and optionally mu). a = a_1, ..., a_n and w = w_1, ..., w_s are lists of n+s distinct elements of F=GF(q^m). The default for mu is 1. The Srivastava code is a generalized Srivastava code, in which z_i = a_i^mu for some mu and t=1.

J. N. Srivastava introduced this code in 1967, though his work was not published. See Helgert [Hel72] for more details on the properties of this code. Related reference: G. Roelofsen, On Goppa and Generalized Srivastava Codes PhD thesis, Dept. Math. and Comp. Sci., Eindhoven Univ. of Technology, the Netherlands, 1982.

gap> a := AsSSortedList( GF(11) ){[2..8]};;
gap> w := AsSSortedList( GF(11) ){[9..10]};;
gap> C := SrivastavaCode( a, w, 2, GF(11) );
a linear [7,5,3]2 Srivastava code over GF(11)
gap> IsMDSCode( C );
true    # Always true if F is a prime field 

5.2-10 CordaroWagnerCode
> CordaroWagnerCode( n )( function )

CordaroWagnerCode returns a binary Cordaro-Wagner code. This is a code of length n and dimension 2 having the best possible minimum distance d. This code is just a little bit less trivial than RepetitionCode (see RepetitionCode (5.5-13)).

gap> C := CordaroWagnerCode( 11 );
a linear [11,2,7]5 Cordaro-Wagner code over GF(2)
gap> AsSSortedList(C);                 
[ [ 0 0 0 0 0 0 0 0 0 0 0 ], [ 0 0 0 0 1 1 1 1 1 1 1 ], 
  [ 1 1 1 1 0 0 0 1 1 1 1 ], [ 1 1 1 1 1 1 1 0 0 0 0 ] ]

5.2-11 FerreroDesignCode
> FerreroDesignCode( P, m )( function )

Requires the GAP package SONATA

A group K together with a group of automorphism H of K such that the semidirect product KH is a Frobenius group with complement H is called a Ferrero pair (K, H) in SONATA. Take a Frobenius (G,+) group with kernel K and complement H. Consider the design D with point set K and block set a^H + b | a, b in K, a not= 0. Here a^H denotes the orbit of a under conjugation by elements of H. Every planar near-ring design of type "*" can be obtained in this way from groups. These designs (from a Frobenius kernel of order v and a Frobenius complement of order k) have v(v-1)/k distinct blocks and they are all of size k. Moreover each of the v points occurs in exactly v-1 distinct blocks. Hence the rows and the columns of the incidence matrix M of the design are always of constant weight.

FerreroDesignCode constructs binary linear code arising from the incdence matrix of a design associated to a "Ferrero pair" arising from a fixed-point-free (fpf) automorphism groups and Frobenius group.

INPUT: P is a list of prime powers describing an abelian group G. m > 0 is an integer such that G admits a cyclic fpf automorphism group of size m. This means that for all q = p^k in P, OrderMod(p, m) must divide q (see the SONATA documentation for FpfAutomorphismGroupsCyclic).

OUTPUT: The binary linear code whose generator matrix is the incidence matrix of a design associated to a "Ferrero pair" arising from the fixed-point-free (fpf) automorphism group of G. The pair (H,K) is called a Ferraro pair and the semidirect product KH is a Frobenius group with complement H.

AUTHORS: Peter Mayr and David Joyner

gap> G:=AbelianGroup([5,5] );
 [ pc group of size 25 with 2 generators ]
gap> FpfAutomorphismGroupsMaxSize( G );
[ 24, 2 ]
gap> L:=FpfAutomorphismGroupsCyclic( [5,5], 3 );
[ [ [ f1, f2 ] -> [ f1*f2^2, f1*f2^3 ] ],
  [ pc group of size 25 with 2 generators ] ]
gap> D := DesignFromFerreroPair( L[2], Group(L[1][1]), "*" );
 [ a 2 - ( 25, 3, 2 ) nearring generated design ]
gap> M:=IncidenceMat( D );; Length(M); Length(TransposedMat(M));
25
200
gap> C1:=GeneratorMatCode(M*Z(2),GF(2));
a linear [200,25,1..24]62..100 code defined by generator matrix over GF(2)
gap> MinimumDistance(C1);
24
gap> C2:=FerreroDesignCode( [5,5],3);
a linear [200,25,1..24]62..100 code defined by generator matrix over GF(2)
gap> C1=C2;
true

5.2-12 RandomLinearCode
> RandomLinearCode( n, k, F )( function )

RandomLinearCode returns a random linear code with word length n, dimension k over field F. The method used is to first construct a kx n matrix of the block form (I,A), where I is a kx k identity matrix and A is a kx (n-k) matrix constructed using Random(F) repeatedly. Then the columns are permuted using a randomly selected element of SymmetricGroup(n).

To create a random unrestricted code, use RandomCode (see RandomCode (5.1-5)).

gap> C := RandomLinearCode( 15, 4, GF(3) );
a  [15,4,?] randomly generated code over GF(3)
gap> Display(C);
a linear [15,4,1..6]6..10 random linear code over GF(3)

The method GUAVA chooses to output the result of a RandomLinearCode command is different than other codes. For example, the bounds on the minimum distance is not displayed. Howeer, you can use the Display command to print this information. This new display method was added in version 1.9 to speed up the command (if n is about 80 and k about 40, for example, the time it took to look up and/or calculate the bounds on the minimum distance was too long).

5.2-13 OptimalityCode
> OptimalityCode( C )( function )

OptimalityCode returns the difference between the smallest known upper bound and the actual size of the code. Note that the value of the function UpperBound is not always equal to the actual upper bound A(n,d) thus the result may not be equal to 0 even if the code is optimal!

OptimalityLinearCode is similar but applies only to linear codes.

5.2-14 BestKnownLinearCode
> BestKnownLinearCode( n, k, F )( function )

BestKnownLinearCode returns the best known (as of 11 May 2006) linear code of length n, dimension k over field F. The function uses the tables described in section BoundsMinimumDistance (7.1-13) to construct this code.

This command can also be called using the syntax BestKnownLinearCode( rec ), where rec must be a record containing the fields `lowerBound', `upperBound' and `construction'. It uses the information in this field to construct a code. This form is meant to be used together with the function BoundsMinimumDistance (see BoundsMinimumDistance (7.1-13)), if the bounds are already calculated.

gap> C1 := BestKnownLinearCode( 23, 12, GF(2) );
a linear [23,12,7]3 punctured code
gap> C1 = BinaryGolayCode();
false     # it's constructed differently
gap> C1 := BestKnownLinearCode( 23, 12, GF(2) );
a linear [23,12,7]3 punctured code
gap> G1 := MutableCopyMat(GeneratorMat(C1));;
gap> PutStandardForm(G1);
()
gap> Display(G1);
 1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1
 . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . .
 . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1
 . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 .
 . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . 1
 . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 1
 . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1
 . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . .
 . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 .
 . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 .
 . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 1
 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1
gap> C2 := BinaryGolayCode();
a cyclic [23,12,7]3 binary Golay code over GF(2)
gap> G2 := MutableCopyMat(GeneratorMat(C2));;
gap> PutStandardForm(G2);
()
gap> Display(G2);
 1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1
 . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . 1
 . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1
 . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 1
 . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . .
 . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 .
 . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1
 . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . .
 . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 .
 . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1
 . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 .
 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1
## Despite their generator matrices are different, they are equivalent codes, see below.
gap> IsEquivalent(C1,C2);
true
gap> CodeIsomorphism(C1,C2);
(4,14,6,12,5)(7,17,18,11,19)(8,22,13,21,16)(10,23,15,20)
gap> Display( BestKnownLinearCode( 81, 77, GF(4) ) );
a linear [81,77,3]2..3 shortened code of
a linear [85,81,3]1 Hamming (4,4) code over GF(4)
gap> C:=BestKnownLinearCode(174,72);
a linear [174,72,31..36]26..87 code defined by generator matrix over GF(2)
gap> bounds := BoundsMinimumDistance( 81, 77, GF(4) );
rec( n := 81, k := 77, q := 4, 
  references := rec( Ham := [ "%T this reference is unknown, for more info", 
          "%T contact A.E. Brouwer (aeb@cwi.nl)" ], 
      cap := [ "%T this reference is unknown, for more info", 
          "%T contact A.E. Brouwer (aeb@cwi.nl)" ] ), 
  construction := [ (Operation "ShortenedCode"), 
      [ [ (Operation "HammingCode"), [ 4, 4 ] ], [ 1, 2, 3, 4 ] ] ], 
  lowerBound := 3, 
  lowerBoundExplanation := [ "Lb(81,77)=3, by shortening of:", 
      "Lb(85,81)=3, reference: Ham" ], upperBound := 3, 
  upperBoundExplanation := [ "Ub(81,77)=3, by considering shortening to:", 
      "Ub(18,14)=3, reference: cap" ] )
gap> C := BestKnownLinearCode( bounds );
a linear [81,77,3]2..3 shortened code
gap> C = BestKnownLinearCode(81, 77, GF(4) );
true

5.3 Gabidulin Codes

These five binary, linear codes are derived from an article by Gabidulin, Davydov and Tombak [GDT91]. All these codes are defined by check matrices. Exact definitions can be found in the article. The Gabidulin code, the enlarged Gabidulin code, the Davydov code, the Tombak code, and the enlarged Tombak code, correspond with theorem 1, 2, 3, 4, and 5, respectively in the article.

Like the Hamming codes, these codes have fixed minimum distance and covering radius, but can be arbitrarily long.

5.3-1 GabidulinCode
> GabidulinCode( m, w1, w2 )( function )

GabidulinCode yields a code of length 5 . 2^m-2-1, redundancy 2m-1, minimum distance 3 and covering radius 2. w1 and w2 should be elements of GF(2^m-2).

5.3-2 EnlargedGabidulinCode
> EnlargedGabidulinCode( m, w1, w2, e )( function )

EnlargedGabidulinCode yields a code of length 7. 2^m-2-2, redundancy 2m, minimum distance 3 and covering radius 2. w1 and w2 are elements of GF(2^m-2). e is an element of GF(2^m).

5.3-3 DavydovCode
> DavydovCode( r, v, ei, ej )( function )

DavydovCode yields a code of length 2^v + 2^r-v - 3, redundancy r, minimum distance 4 and covering radius 2. v is an integer between 2 and r-2. ei and ej are elements of GF(2^v) and GF(2^r-v), respectively.

5.3-4 TombakCode
> TombakCode( m, e, beta, gamma, w1, w2 )( function )

TombakCode yields a code of length 15 * 2^m-3 - 3, redundancy 2m, minimum distance 4 and covering radius 2. e is an element of GF(2^m). beta and gamma are elements of GF(2^m-1). w1 and w2 are elements of GF(2^m-3).

5.3-5 EnlargedTombakCode
> EnlargedTombakCode( m, e, beta, gamma, w1, w2, u )( function )

EnlargedTombakCode yields a code of length 23 * 2^m-4 - 3, redundancy 2m-1, minimum distance 4 and covering radius 2. The parameters m, e, beta, gamma, w1 and w2 are defined as in TombakCode. u is an element of GF(2^m-1).

gap> GabidulinCode( 4, Z(4)^0, Z(4)^1 );
a linear [19,12,3]2 Gabidulin code (m=4) over GF(2)
gap> EnlargedGabidulinCode( 4, Z(4)^0, Z(4)^1, Z(16)^11 );
a linear [26,18,3]2 enlarged Gabidulin code (m=4) over GF(2)
gap> DavydovCode( 6, 3, Z(8)^1, Z(8)^5 );
a linear [13,7,4]2 Davydov code (r=6, v=3) over GF(2)
gap> TombakCode( 5, Z(32)^6, Z(16)^14, Z(16)^10, Z(4)^0, Z(4)^1 );
a linear [57,47,4]2 Tombak code (m=5) over GF(2)
gap> EnlargedTombakCode( 6, Z(32)^6, Z(16)^14, Z(16)^10,
> Z(4)^0, Z(4)^0, Z(32)^23 );
a linear [89,78,4]2 enlarged Tombak code (m=6) over GF(2)

5.4 Golay Codes

" The Golay code is probably the most important of all codes for both practical and theoretical reasons. " ([MS83], pg. 64). Though born in Switzerland, M. J. E. Golay (1902-1989) worked for the US Army Labs for most of his career. For more information on his life, see his obit in the June 1990 IEEE Information Society Newsletter.

5.4-1 BinaryGolayCode
> BinaryGolayCode( )( function )

BinaryGolayCode returns a binary Golay code. This is a perfect [23,12,7] code. It is also cyclic, and has generator polynomial g(x)=1+x^2+x^4+x^5+x^6+x^10+x^11. Extending it results in an extended Golay code (see ExtendedBinaryGolayCode (5.4-2)). There's also the ternary Golay code (see TernaryGolayCode (5.4-3)).

gap> C:=BinaryGolayCode();
a cyclic [23,12,7]3 binary Golay code over GF(2)
gap> ExtendedBinaryGolayCode() = ExtendedCode(BinaryGolayCode());
true
gap> IsPerfectCode(C);
true 
gap> IsCyclicCode(C);
true

5.4-2 ExtendedBinaryGolayCode
> ExtendedBinaryGolayCode( )( function )

ExtendedBinaryGolayCode returns an extended binary Golay code. This is a [24,12,8] code. Puncturing in the last position results in a perfect binary Golay code (see BinaryGolayCode (5.4-1)). The code is self-dual.

gap> C := ExtendedBinaryGolayCode();
a linear [24,12,8]4 extended binary Golay code over GF(2)
gap> IsSelfDualCode(C);
true
gap> P := PuncturedCode(C);
a linear [23,12,7]3 punctured code
gap> P = BinaryGolayCode();
true 
gap> IsCyclicCode(C);
false

5.4-3 TernaryGolayCode
> TernaryGolayCode( )( function )

TernaryGolayCode returns a ternary Golay code. This is a perfect [11,6,5] code. It is also cyclic, and has generator polynomial g(x)=2+x^2+2x^3+x^4+x^5. Extending it results in an extended Golay code (see ExtendedTernaryGolayCode (5.4-4)). There's also the binary Golay code (see BinaryGolayCode (5.4-1)).

gap> C:=TernaryGolayCode();
a cyclic [11,6,5]2 ternary Golay code over GF(3)
gap> ExtendedTernaryGolayCode() = ExtendedCode(TernaryGolayCode());
true 
gap> IsCyclicCode(C);
true

5.4-4 ExtendedTernaryGolayCode
> ExtendedTernaryGolayCode( )( function )

ExtendedTernaryGolayCode returns an extended ternary Golay code. This is a [12,6,6] code. Puncturing this code results in a perfect ternary Golay code (see TernaryGolayCode (5.4-3)). The code is self-dual.

gap> C := ExtendedTernaryGolayCode();
a linear [12,6,6]3 extended ternary Golay code over GF(3)
gap> IsSelfDualCode(C);
true
gap> P := PuncturedCode(C);
a linear [11,6,5]2 punctured code
gap> P = TernaryGolayCode();
true 
gap> IsCyclicCode(C);
false

5.5 Generating Cyclic Codes

The elements of a cyclic code C are all multiples of a ('generator') polynomial g(x), where calculations are carried out modulo x^n-1. Therefore, as polynomials in x, the elements always have degree less than n. A cyclic code is an ideal in the ring F[x]/(x^n-1) of polynomials modulo x^n - 1. The unique monic polynomial of least degree that generates C is called the generator polynomial of C. It is a divisor of the polynomial x^n-1.

The check polynomial is the polynomial h(x) with g(x)h(x)=x^n-1. Therefore it is also a divisor of x^n-1. The check polynomial has the property that

c(x)h(x) \equiv 0 \pmod{x^n-1},

for every codeword c(x)in C.

The first two functions described below generate cyclic codes from a given generator or check polynomial. All cyclic codes can be constructed using these functions.

Two of the Golay codes already described are cyclic (see BinaryGolayCode (5.4-1) and TernaryGolayCode (5.4-3)). For example, the GUAVA record for a binary Golay code contains the generator polynomial:

gap> C := BinaryGolayCode();
a cyclic [23,12,7]3 binary Golay code over GF(2)
gap> NamesOfComponents(C);
[ "LeftActingDomain", "GeneratorsOfLeftOperatorAdditiveGroup", "WordLength",
  "GeneratorMat", "GeneratorPol", "Dimension", "Redundancy", "Size", "name",
  "lowerBoundMinimumDistance", "upperBoundMinimumDistance", "WeightDistribution",
  "boundsCoveringRadius", "MinimumWeightOfGenerators", 
  "UpperBoundOptimalMinimumDistance" ]
gap> C!.GeneratorPol;
x_1^11+x_1^10+x_1^6+x_1^5+x_1^4+x_1^2+Z(2)^0

Then functions that generate cyclic codes from a prescribed set of roots of the generator polynomial are described, including the BCH codes (see RootsCode (5.5-3), BCHCode (5.5-4), ReedSolomonCode (5.5-5) and QRCode (5.5-7)).

Finally we describe the trivial codes (see WholeSpaceCode (5.5-11), NullCode (5.5-12), RepetitionCode (5.5-13)), and the command CyclicCodes which lists all cyclic codes (CyclicCodes (5.5-14)).

5.5-1 GeneratorPolCode
> GeneratorPolCode( g, n[, name], F )( function )

GeneratorPolCode creates a cyclic code with a generator polynomial g, word length n, over F. name can contain a short description of the code.

If g is not a divisor of x^n-1, it cannot be a generator polynomial. In that case, a code is created with generator polynomial gcd( g, x^n-1 ), i.e. the greatest common divisor of g and x^n-1. This is a valid generator polynomial that generates the ideal (g). See Generating Cyclic Codes (5.5).

gap> x:= Indeterminate( GF(2) );; P:= x^2+1;
Z(2)^0+x^2
gap> C1 := GeneratorPolCode(P, 7, GF(2));
a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2)
gap> GeneratorPol( C1 );
Z(2)^0+x
gap> C2 := GeneratorPolCode( x+1, 7, GF(2)); 
a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2)
gap> GeneratorPol( C2 );
Z(2)^0+x

5.5-2 CheckPolCode
> CheckPolCode( h, n[, name], F )( function )

CheckPolCode creates a cyclic code with a check polynomial h, word length n, over F. name can contain a short description of the code (as a string).

If h is not a divisor of x^n-1, it cannot be a check polynomial. In that case, a code is created with check polynomial gcd( h, x^n-1 ), i.e. the greatest common divisor of h and x^n-1. This is a valid check polynomial that yields the same elements as the ideal (h). See 5.5.

gap>  x:= Indeterminate( GF(3) );; P:= x^2+2;
-Z(3)^0+x_1^2
gap> H := CheckPolCode(P, 7, GF(3));
a cyclic [7,1,7]4 code defined by check polynomial over GF(3)
gap> CheckPol(H);
-Z(3)^0+x_1
gap> Gcd(P, X(GF(3))^7-1);
-Z(3)^0+x_1

5.5-3 RootsCode
> RootsCode( n, list )( function )

This is the generalization of the BCH, Reed-Solomon and quadratic residue codes (see BCHCode (5.5-4), ReedSolomonCode (5.5-5) and QRCode (5.5-7)). The user can give a length of the code n and a prescribed set of zeros. The argument list must be a valid list of primitive n^th roots of unity in a splitting field GF(q^m). The resulting code will be over the field GF(q). The function will return the largest possible cyclic code for which the list list is a subset of the roots of the code. From this list, GUAVA calculates the entire set of roots.

This command can also be called with the syntax RootsCode( n, list, q ). In this second form, the second argument is a list of integers, ranging from 0 to n-1. The resulting code will be over a field GF(q). GUAVA calculates a primitive n^th root of unity, alpha, in the extension field of GF(q). It uses the set of the powers of alpha in the list as a prescribed set of zeros.

gap> a := PrimitiveUnityRoot( 3, 14 );
Z(3^6)^52
gap> C1 := RootsCode( 14, [ a^0, a, a^3 ] );
a cyclic [14,7,3..6]3..7 code defined by roots over GF(3)
gap> MinimumDistance( C1 );
4
gap> b := PrimitiveUnityRoot( 2, 15 );
Z(2^4)
gap> C2 := RootsCode( 15, [ b, b^2, b^3, b^4 ] );
a cyclic [15,7,5]3..5 code defined by roots over GF(2)
gap> C2 = BCHCode( 15, 5, GF(2) );
true 
C3 := RootsCode( 4, [ 1, 2 ], 5 );
RootsOfCode( C3 );
C3 = ReedSolomonCode( 4, 3 );

5.5-4 BCHCode
> BCHCode( n[, b], delta, F )( function )

The function BCHCode returns a 'Bose-Chaudhuri-Hockenghem code' (or BCH code for short). This is the largest possible cyclic code of length n over field F, whose generator polynomial has zeros

a^{b},a^{b+1}, ..., a^{b+delta-2},

where a is a primitive n^th root of unity in the splitting field GF(q^m), b is an integer 0<= b<= n-delta+1 and m is the multiplicative order of q modulo n. (The integers b,...,b+delta-2 typically lie in the range 1,...,n-1.) Default value for b is 1, though the algorithm allows b=0. The length n of the code and the size q of the field must be relatively prime. The generator polynomial is equal to the least common multiple of the minimal polynomials of

a^{b}, a^{b+1}, ..., a^{b+delta-2}.

The set of zeroes of the generator polynomial is equal to the union of the sets

\{a^x\ |\ x \in C_k\},

where C_k is the k^th cyclotomic coset of q modulo n and b<= k<= b+delta-2 (see CyclotomicCosets (7.5-12)).

Special cases are b=1 (resulting codes are called 'narrow-sense' BCH codes), and n=q^m-1 (known as 'primitive' BCH codes). GUAVA calculates the largest value of d for which the BCH code with designed distance d coincides with the BCH code with designed distance delta. This distance d is called the Bose distance of the code. The true minimum distance of the code is greater than or equal to the Bose distance.

Printed are the designed distance (to be precise, the Bose distance) d, and the starting power b.

The Sugiyama decoding algorithm has been implemented for this code (see Decode (4.10-1)).

gap> C1 := BCHCode( 15, 3, 5, GF(2) );
a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
gap> DesignedDistance( C1 );
7
gap> C2 := BCHCode( 23, 2, GF(2) );
a cyclic [23,12,5..7]3 BCH code, delta=5, b=1 over GF(2)
gap> DesignedDistance( C2 );       
5
gap> MinimumDistance(C2);
7 

See RootsCode (5.5-3) for a more general construction.

5.5-5 ReedSolomonCode
> ReedSolomonCode( n, d )( function )

ReedSolomonCode returns a 'Reed-Solomon code' of length n, designed distance d. This code is a primitive narrow-sense BCH code over the field GF(q), where q=n+1. The dimension of an RS code is n-d+1. According to the Singleton bound (see UpperBoundSingleton (7.1-1)) the dimension cannot be greater than this, so the true minimum distance of an RS code is equal to d and the code is maximum distance separable (see IsMDSCode (4.3-7)).

gap> C1 := ReedSolomonCode( 3, 2 );
a cyclic [3,2,2]1 Reed-Solomon code over GF(4)
gap> IsCyclicCode(C1);
true
gap> C2 := ReedSolomonCode( 4, 3 );
a cyclic [4,2,3]2 Reed-Solomon code over GF(5)
gap> RootsOfCode( C2 );
[ Z(5), Z(5)^2 ]
gap> IsMDSCode(C2);
true 

See GeneralizedReedSolomonCode (5.6-2) for a more general construction.

5.5-6 ExtendedReedSolomonCode
> ExtendedReedSolomonCode( n, d )( function )

ExtendedReedSolomonCode creates a Reed-Solomon code of length n-1 with designed distance d-1 and then returns the code which is extended by adding an overall parity-check symbol. The motivation for creating this function is calling ExtendedCode (6.1-1) function over a Reed-Solomon code will take considerably long time.

gap> C := ExtendedReedSolomonCode(17, 13);
a linear [17,5,13]9..12 extended Reed Solomon code over GF(17)
gap> IsMDSCode(C);
true

5.5-7 QRCode
> QRCode( n, F )( function )

QRCode returns a quadratic residue code. If F is a field GF(q), then q must be a quadratic residue modulo n. That is, an x exists with x^2 = q mod n. Both n and q must be primes. Its generator polynomial is the product of the polynomials x-a^i. a is a primitive n^th root of unity, and i is an integer in the set of quadratic residues modulo n.

gap> C1 := QRCode( 7, GF(2) );
a cyclic [7,4,3]1 quadratic residue code over GF(2)
gap> IsEquivalent( C1, HammingCode( 3, GF(2) ) );
true
gap> IsCyclicCode(C1);
true
gap> IsCyclicCode(HammingCode( 3, GF(2) ));
false
gap> C2 := QRCode( 11, GF(3) );
a cyclic [11,6,4..5]2 quadratic residue code over GF(3)
gap> C2 = TernaryGolayCode();
true 
gap> Q1 := QRCode( 7, GF(2));
a cyclic [7,4,3]1 quadratic residue code over GF(2)
gap> P1:=AutomorphismGroup(Q1); IdGroup(P1);
Group([ (1,2)(5,7), (2,3)(4,7), (2,4)(5,6), (3,5)(6,7), (3,7)(5,6) ])
[ 168, 42 ]

5.5-8 QQRCodeNC
> QQRCodeNC( p )( function )

QQRCodeNC is the same as QQRCode, except that it uses GeneratorMatCodeNC instead of GeneratorMatCode.

5.5-9 QQRCode
> QQRCode( p )( function )

QQRCode returns a quasi-quadratic residue code, as defined by Proposition 2.2 in Bazzi-Mittel [BMd)]. The parameter p must be a prime. Its generator matrix has the block form G=(Q,N). Here Q is a px circulant matrix whose top row is (0,x_1,...,x_p-1), where x_i=1 if and only if i is a quadratic residue mod p, and N is a px circulant matrix whose top row is (0,y_1,...,y_p-1), where x_i+y_i=1 for all i. (In fact, this matrix can be recovered as the component DoublyCirculant of the code.)

gap> C1 := QQRCode( 7);
a linear [14,7,1..4]3..5 code defined by generator matrix over GF(2)
gap> G1:=GeneratorMat(C1);;
gap> Display(G1);
 . 1 1 . 1 . . . . . 1 . 1 1
 1 . 1 1 1 . . . . 1 1 1 . 1
 . . . 1 1 . 1 . 1 1 . . . 1
 . . 1 . 1 1 1 1 . 1 . . 1 1
 . . . . . . . 1 . . 1 1 1 .
 . . . . . . . . . 1 1 1 . 1
 . . . . . . . . 1 . . 1 1 1
gap> Display(C1!.DoublyCirculant);
 . 1 1 . 1 . . . . . 1 . 1 1
 1 1 . 1 . . . . . 1 . 1 1 .
 1 . 1 . . . 1 . 1 . 1 1 . .
 . 1 . . . 1 1 1 . 1 1 . . .
 1 . . . 1 1 . . 1 1 . . . 1
 . . . 1 1 . 1 1 1 . . . 1 .
 . . 1 1 . 1 . 1 . . . 1 . 1
gap> MinimumDistance(C1);
4
gap> C2 := QQRCode( 29); MinimumDistance(C2);
a linear [58,28,1..14]8..29 code defined by generator matrix over GF(2)
12
gap> Aut2:=AutomorphismGroup(C2); IdGroup(Aut2);
[ permutation group of size 812 with 4 generators ]
[ 812, 7 ]

5.5-10 FireCode
> FireCode( g, b )( function )

FireCode constructs a (binary) Fire code. g is a primitive polynomial of degree m, and a factor of x^r-1. b an integer 0 <= b <= m not divisible by r, that determines the burst length of a single error burst that can be corrected. The argument g can be a polynomial with base ring GF(2), or a list of coefficients in GF(2). The generator polynomial of the code is defined as the product of g and x^2b-1+1.

Here is the general definition of 'Fire code', named after P. Fire, who introduced these codes in 1959 in order to correct burst errors. First, a definition. If F=GF(q) and fin F[x] then we say f has order e if f(x)|(x^e-1). A Fire code is a cyclic code over F with generator polynomial g(x)= (x^2t-1-1)p(x), where p(x) does not divide x^2t-1-1 and satisfies deg(p(x))>= t. The length of such a code is the order of g(x). Non-binary Fire codes have not been implemented.

.

gap> x:= Indeterminate( GF(2) );; G:= x^3+x^2+1;
Z(2)^0+x^2+x^3
gap> Factors( G );
[ Z(2)^0+x^2+x^3 ]
gap> C := FireCode( G, 3 );
a cyclic [35,27,1..4]2..6 3 burst error correcting fire code over GF(2)
gap> MinimumDistance( C );
4     # Still it can correct bursts of length 3 

5.5-11 WholeSpaceCode
> WholeSpaceCode( n, F )( function )

WholeSpaceCode returns the cyclic whole space code of length n over F. This code consists of all polynomials of degree less than n and coefficients in F.

gap> C := WholeSpaceCode( 5, GF(3) );
a cyclic [5,5,1]0 whole space code over GF(3)

5.5-12 NullCode
> NullCode( n, F )( function )

NullCode returns the zero-dimensional nullcode with length n over F. This code has only one word: the all zero word. It is cyclic though!

gap> C := NullCode( 5, GF(3) );
a cyclic [5,0,5]5 nullcode over GF(3)
gap> AsSSortedList( C );
[ [ 0 0 0 0 0 ] ]

5.5-13 RepetitionCode
> RepetitionCode( n, F )( function )

RepetitionCode returns the cyclic repetition code of length n over F. The code has as many elements as F, because each codeword consists of a repetition of one of these elements.

gap> C := RepetitionCode( 3, GF(5) );
a cyclic [3,1,3]2 repetition code over GF(5)
gap> AsSSortedList( C );
[ [ 0 0 0 ], [ 1 1 1 ], [ 2 2 2 ], [ 4 4 4 ], [ 3 3 3 ] ]
gap> IsPerfectCode( C );
false
gap> IsMDSCode( C );
true 

5.5-14 CyclicCodes
> CyclicCodes( n, F )( function )

CyclicCodes returns a list of all cyclic codes of length n over F. It constructs all possible generator polynomials from the factors of x^n-1. Each combination of these factors yields a generator polynomial after multiplication.

gap> CyclicCodes(3,GF(3));
[ a cyclic [3,3,1]0 enumerated code over GF(3), 
a cyclic [3,2,1..2]1 enumerated code over GF(3), 
a cyclic [3,1,3]2 enumerated code over GF(3), 
a cyclic [3,0,3]3 enumerated code over GF(3) ]

5.5-15 NrCyclicCodes
> NrCyclicCodes( n, F )( function )

The function NrCyclicCodes calculates the number of cyclic codes of length n over field F.

gap> NrCyclicCodes( 23, GF(2) );
8
gap> codelist := CyclicCodes( 23, GF(2) );
[ a cyclic [23,23,1]0 enumerated code over GF(2), 
  a cyclic [23,22,1..2]1 enumerated code over GF(2), 
  a cyclic [23,11,1..8]4..7 enumerated code over GF(2), 
  a cyclic [23,0,23]23 enumerated code over GF(2), 
  a cyclic [23,11,1..8]4..7 enumerated code over GF(2), 
  a cyclic [23,12,1..7]3 enumerated code over GF(2), 
  a cyclic [23,1,23]11 enumerated code over GF(2), 
  a cyclic [23,12,1..7]3 enumerated code over GF(2) ]
gap> BinaryGolayCode() in codelist;
true
gap> RepetitionCode( 23, GF(2) ) in codelist;
true
gap> CordaroWagnerCode( 23 ) in codelist;
false    # This code is not cyclic 

5.5-16 QuasiCyclicCode
> QuasiCyclicCode( G, s, F )( function )

QuasiCyclicCode( G, k, F ) generates a rate 1/m quasi-cyclic code over field F. The input G is a list of univariate polynomials and m is the cardinality of this list. Note that m must be at least 2. The input s is the size of each circulant and it may not necessarily be the same as the code dimension k, i.e. k le s.

There also exists another version, QuasiCyclicCode( G, s ) which produces quasi-cyclic codes over F_2 only. Here the parameter s holds the same definition and the input G is a list of integers, where each integer is an octal representation of a binary univariate polynomial.

gap> #
gap> # This example show the case for k = s
gap> #
gap> L1 := PolyCodeword( Codeword("10000000000", GF(4)) );
Z(2)^0
gap> L2 := PolyCodeword( Codeword("12223201000", GF(4)) );
x^7+Z(2^2)*x^5+Z(2^2)^2*x^4+Z(2^2)*x^3+Z(2^2)*x^2+Z(2^2)*x+Z(2)^0
gap> L3 := PolyCodeword( Codeword("31111220110", GF(4)) );
x^9+x^8+Z(2^2)*x^6+Z(2^2)*x^5+x^4+x^3+x^2+x+Z(2^2)^2
gap> L4 := PolyCodeword( Codeword("13320333010", GF(4)) );
x^9+Z(2^2)^2*x^7+Z(2^2)^2*x^6+Z(2^2)^2*x^5+Z(2^2)*x^3+Z(2^2)^2*x^2+Z(2^2)^2*x+\
Z(2)^0
gap> L5 := PolyCodeword( Codeword("20102211100", GF(4)) );
x^8+x^7+x^6+Z(2^2)*x^5+Z(2^2)*x^4+x^2+Z(2^2)
gap> C := QuasiCyclicCode( [L1, L2, L3, L4, L5], 11, GF(4) );
a linear [55,11,1..32]24..41 quasi-cyclic code over GF(4)
gap> MinimumDistance(C);
29
gap> Display(C);
a linear [55,11,29]24..41 quasi-cyclic code over GF(4)
gap> #
gap> # This example show the case for k < s
gap> #
gap> L1 := PolyCodeword( Codeword("02212201220120211002000",GF(3)) );
-x^19+x^16+x^15-x^14-x^12+x^11-x^9-x^8+x^7-x^5-x^4+x^3-x^2-x
gap> L2 := PolyCodeword( Codeword("00221100200120220001110",GF(3)) );
x^21+x^20+x^19-x^15-x^14-x^12+x^11-x^8+x^5+x^4-x^3-x^2
gap> L3 := PolyCodeword( Codeword("22021011202221111020021",GF(3)) );
x^22-x^21-x^18+x^16+x^15+x^14+x^13-x^12-x^11-x^10-x^8+x^7+x^6+x^4-x^3-x-Z(3)^0
gap> C := QuasiCyclicCode( [L1, L2, L3], 23, GF(3) );
a linear [69,12,1..37]27..46 quasi-cyclic code over GF(3)
gap> MinimumDistance(C);
34
gap> Display(C);
a linear [69,12,34]27..46 quasi-cyclic code over GF(3)
gap> #
gap> # This example show the binary case using octal representation
gap> #
gap> L1 := 001;;   # 0 000 001
gap> L2 := 013;;   # 0 001 011
gap> L3 := 015;;   # 0 001 101
gap> L4 := 077;;   # 0 111 111
gap> C := QuasiCyclicCode( [L1, L2, L3, L4], 7 );
a linear [28,7,1..12]8..14 quasi-cyclic code over GF(2)
gap> MinimumDistance(C);
12
gap> Display(C);
a linear [28,7,12]8..14 quasi-cyclic code over GF(2)

5.5-17 CyclicMDSCode
> CyclicMDSCode( q, m, k )( function )

Given the input parameters q, m and k, this function returns a [q^m + 1, k, q^m - k + 2] cyclic MDS code over GF(q^m). If q^m is even, any value of k can be used, otherwise only odd value of k is accepted.

gap> C:=CyclicMDSCode(2,6,24);
a cyclic [65,24,42]31..41 MDS code over GF(64)
gap> IsMDSCode(C);
true
gap> C:=CyclicMDSCode(5,3,77);
a cyclic [126,77,50]35..49 MDS code over GF(125)
gap> IsMDSCode(C);
true
gap> C:=CyclicMDSCode(3,3,25);
a cyclic [28,25,4]2..3 MDS code over GF(27)
gap> GeneratorPol(C);
x^3+Z(3^3)^7*x^2+Z(3^3)^20*x-Z(3)^0
gap>

5.5-18 FourNegacirculantSelfDualCode
> FourNegacirculantSelfDualCode( ax, bx, k )( function )

A four-negacirculant self-dual code has a generator matrix G of the the following form


    -                    -
    |        |  A  |  B  |
G = |  I_2k  |-----+-----|
    |        | -B^T| A^T |
    -                    -
		

where AA^T + BB^T = -I_k and A, B and their transposed are all k x k negacirculant matrices. The generator matrix G returns a [2k, k, d]_q self-dual code over GF(q). For discussion on four-negacirculant self-dual codes, refer to [HHKK07].

The input parameters ax and bx are the defining polynomials over GF(q) of negacirculant matrices A and B respectively. The last parameter k is the dimension of the code.

gap> ax:=PolyCodeword(Codeword("1200200", GF(3)));
-x_1^4-x_1+Z(3)^0
gap> bx:=PolyCodeword(Codeword("2020221", GF(3)));
x_1^6-x_1^5-x_1^4-x_1^2-Z(3)^0
gap> C:=FourNegacirculantSelfDualCode(ax, bx, 14);;
gap> MinimumDistance(C);;
gap> CoveringRadius(C);;
gap> IsSelfDualCode(C);
true
gap> Display(C);
a linear [28,14,9]7 four-negacirculant self-dual code over GF(3)
gap> Display( GeneratorMat(C) );
 1 . . . . . . . . . . . . . 1 2 . . 2 . . 2 . 2 . 2 2 1
 . 1 . . . . . . . . . . . . . 1 2 . . 2 . 2 2 . 2 . 2 2
 . . 1 . . . . . . . . . . . . . 1 2 . . 2 1 2 2 . 2 . 2
 . . . 1 . . . . . . . . . . 1 . . 1 2 . . 1 1 2 2 . 2 .
 . . . . 1 . . . . . . . . . . 1 . . 1 2 . . 1 1 2 2 . 2
 . . . . . 1 . . . . . . . . . . 1 . . 1 2 1 . 1 1 2 2 .
 . . . . . . 1 . . . . . . . 1 . . 1 . . 1 . 1 . 1 1 2 2
 . . . . . . . 1 . . . . . . 1 1 2 2 . 2 . 1 . . 1 . . 1
 . . . . . . . . 1 . . . . . . 1 1 2 2 . 2 2 1 . . 1 . .
 . . . . . . . . . 1 . . . . 1 . 1 1 2 2 . . 2 1 . . 1 .
 . . . . . . . . . . 1 . . . . 1 . 1 1 2 2 . . 2 1 . . 1
 . . . . . . . . . . . 1 . . 1 . 1 . 1 1 2 2 . . 2 1 . .
 . . . . . . . . . . . . 1 . 1 1 . 1 . 1 1 . 2 . . 2 1 .
 . . . . . . . . . . . . . 1 2 1 1 . 1 . 1 . . 2 . . 2 1
gap> ax:=PolyCodeword(Codeword("013131000", GF(7)));
x_1^5+Z(7)*x_1^4+x_1^3+Z(7)*x_1^2+x_1
gap> bx:=PolyCodeword(Codeword("425435030", GF(7)));
Z(7)*x_1^7+Z(7)^5*x_1^5+Z(7)*x_1^4+Z(7)^4*x_1^3+Z(7)^5*x_1^2+Z(7)^2*x_1+Z(7)^4
gap> C:=FourNegacirculantSelfDualCodeNC(ax, bx, 18);
a linear [36,18,1..13]0..36 four-negacirculant self-dual code over GF(7)
gap> IsSelfDualCode(C);
true

5.5-19 FourNegacirculantSelfDualCodeNC
> FourNegacirculantSelfDualCodeNC( ax, bx, k )( function )

This function is the same as FourNegacirculantSelfDualCode, except this version is faster as it does not estimate the minimum distance and covering radius of the code.

5.6 Evaluation Codes

5.6-1 EvaluationCode
> EvaluationCode( P, L, R )( function )

Input: F is a finite field, L is a list of rational functions in R=F[x_1,...,x_r], P is a list of n points in F^r at which all of the functions in L are defined.
Output: The 'evaluation code' C, which is the image of the evalation map

Eval_P:span(L)\rightarrow F^n,

given by flongmapsto (f(p_1),...,f(p_n)), where P=p_1,...,p_n and f in L. The generator matrix of C is G=(f_i(p_j))_f_iin L,p_jin P.

This command returns a "record" object C with several extra components (type NamesOfComponents(C) to see them all): C!.EvaluationMat (not the same as the generator matrix in general), C!.points (namely P), C!.basis (namely L), and C!.ring (namely R).

gap> F:=GF(11);
GF(11)
gap> R := PolynomialRing(F,2);;
gap> indets := IndeterminatesOfPolynomialRing(R);;
gap> x:=indets[1];; y:=indets[2];;
gap> L:=[x^2*y,x*y,x^5,x^4,x^3,x^2,x,x^0];;
gap> Pts:=[ [ Z(11)^9, Z(11) ], [ Z(11)^8, Z(11) ], [ Z(11)^7, 0*Z(11) ],
   [ Z(11)^6, 0*Z(11) ], [ Z(11)^5, 0*Z(11) ], [ Z(11)^4, 0*Z(11) ],
   [ Z(11)^3, Z(11) ], [ Z(11)^2, 0*Z(11) ], [ Z(11), 0*Z(11) ], 
   [ Z(11)^0, 0*Z(11) ], [ 0*Z(11), Z(11) ] ];;
gap> C:=EvaluationCode(Pts,L,R);
a linear [11,8,1..3]2..3  evaluation code over GF(11)
gap> MinimumDistance(C);
3

5.6-2 GeneralizedReedSolomonCode
> GeneralizedReedSolomonCode( P, k, R )( function )

Input: R=F[x], where F is a finite field, k is a positive integer, P is a list of n points in F.
Output: The C which is the image of the evaluation map

Eval_P:F[x]_k\rightarrow F^n,

given by flongmapsto (f(p_1),...,f(p_n)), where P=p_1,...,p_nsubset F and f ranges over the space F[x]_k of all polynomials of degree less than k.

This command returns a "record" object C with several extra components (type NamesOfComponents(C) to see them all): C!.points (namely P), C!.degree (namely k), and C!.ring (namely R).

This code can be decoded using Decodeword, which applies the special decoder method (the interpolation method), or using GeneralizedReedSolomonDecoderGao which applies an algorithm of S. Gao (see GeneralizedReedSolomonDecoderGao (4.10-3)). This code has a special decoder record which implements the interpolation algorithm described in section 5.2 of Justesen and Hoholdt [JH04]. See Decode (4.10-1) and Decodeword (4.10-2) for more details.

The weighted version has implemented with the option GeneralizedReedSolomonCode(P,k,R,wts), where wts = [v_1, ..., v_n] is a sequence of n non-zero elements from the base field F of R. See also the generalized Reed--Solomon code GRS_k(P, V) described in [MS83], p.303.

The list-decoding algorithm of Sudan-Guraswami (described in section 12.1 of [JH04]) has been implemented for generalized Reed-Solomon codes. See GeneralizedReedSolomonListDecoder (4.10-4).

gap> R:=PolynomialRing(GF(11),["t"]);
GF(11)[t]
gap> P:=List([1,3,4,5,7],i->Z(11)^i);
[ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ]
gap> C:=GeneralizedReedSolomonCode(P,3,R);
a linear [5,3,1..3]2  generalized Reed-Solomon code over GF(11)
gap> MinimumDistance(C);
3
gap> V:=[Z(11)^0,Z(11)^0,Z(11)^0,Z(11)^0,Z(11)];
[ Z(11)^0, Z(11)^0, Z(11)^0, Z(11)^0, Z(11) ]
gap> C:=GeneralizedReedSolomonCode(P,3,R,V);
a linear [5,3,1..3]2  weighted generalized Reed-Solomon code over GF(11)
gap> MinimumDistance(C);
3

See EvaluationCode (5.6-1) for a more general construction.

5.6-3 GeneralizedReedMullerCode
> GeneralizedReedMullerCode( Pts, r, F )( function )

GeneralizedReedMullerCode returns a 'Reed-Muller code' C with length |Pts| and order r. One considers (a) a basis of monomials for the vector space over F=GF(q) of all polynomials in F[x_1,...,x_d] of degree at most r, and (b) a set Pts of points in F^d. The generator matrix of the associated Reed-Muller code C is G=(f(p))_fin B,p in Pts. This code C is constructed using the command GeneralizedReedMullerCode(Pts,r,F). When Pts is the set of all q^d points in F^d then the command GeneralizedReedMuller(d,r,F) yields the code. When Pts is the set of all (q-1)^d points with no coordinate equal to 0 then this is can be constructed using the ToricCode command (as a special case).

This command returns a "record" object C with several extra components (type NamesOfComponents(C) to see them all): C!.points (namely Pts) and C!.degree (namely r).

gap> Pts:=ToricPoints(2,GF(5));
[ [ Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5) ], [ Z(5)^0, Z(5)^2 ], [ Z(5)^0, Z(5)^3 ],
  [ Z(5), Z(5)^0 ], [ Z(5), Z(5) ], [ Z(5), Z(5)^2 ], [ Z(5), Z(5)^3 ],
  [ Z(5)^2, Z(5)^0 ], [ Z(5)^2, Z(5) ], [ Z(5)^2, Z(5)^2 ], [ Z(5)^2, Z(5)^3 ],
  [ Z(5)^3, Z(5)^0 ], [ Z(5)^3, Z(5) ], [ Z(5)^3, Z(5)^2 ], [ Z(5)^3, Z(5)^3 ] ]
gap> C:=GeneralizedReedMullerCode(Pts,2,GF(5));
a linear [16,6,1..11]6..10  generalized Reed-Muller code over GF(5)

See EvaluationCode (5.6-1) for a more general construction.

5.6-4 ToricPoints
> ToricPoints( n, F )( function )

ToricPoints(n,F) returns the points in (F^x)^n.

gap> ToricPoints(2,GF(5));
[ [ Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5) ], [ Z(5)^0, Z(5)^2 ], 
  [ Z(5)^0, Z(5)^3 ], [ Z(5), Z(5)^0 ], [ Z(5), Z(5) ], [ Z(5), Z(5)^2 ], 
  [ Z(5), Z(5)^3 ], [ Z(5)^2, Z(5)^0 ], [ Z(5)^2, Z(5) ], [ Z(5)^2, Z(5)^2 ], 
  [ Z(5)^2, Z(5)^3 ], [ Z(5)^3, Z(5)^0 ], [ Z(5)^3, Z(5) ], 
  [ Z(5)^3, Z(5)^2 ], [ Z(5)^3, Z(5)^3 ] ]

5.6-5 ToricCode
> ToricCode( L, F )( function )

This function returns the toric codes as in D. Joyner [Joy04] (see also J. P. Hansen [Han99]). This is a truncated (generalized) Reed-Muller code. Here L is a list of integral vectors and F is the finite field. The size of F must be different from 2.

This command returns a record object C with an extra component (type NamesOfComponents(C) to see them all): C!.exponents (namely L).

gap> C:=ToricCode([[1,0],[3,4]],GF(3));
a linear [4,1,4]2 toric code over GF(3)
gap> Display(GeneratorMat(C));
 1 1 2 2
gap> Elements(C);
[ [ 0 0 0 0 ], [ 1 1 2 2 ], [ 2 2 1 1 ] ]

See EvaluationCode (5.6-1) for a more general construction.

5.7 Algebraic geometric codes

Certain GUAVA functions related to algebraic geometric codes are described in this section.

5.7-1 AffineCurve
> AffineCurve( poly, ring )( function )

This function simply defines the data structure of an affine plane curve. In GUAVA, an affine curve is a record crv having two components: a polynomial poly, accessed in GUAVA by crv.polynomial, and a polynomial ring over a field F in two variables ring, accessed in GUAVA by crv.ring, containing poly. You use this function to define a curve in GUAVA.

For example, for the ring, one could take Q}[x,y], and for the polynomial one could take f(x,y)=x^2+y^2-1. For the affine line, simply taking Q}[x,y] for the ring and f(x,y)=y for the polynomial.

(Not sure if F neeeds to be a field in fact ...)

To compute its degree, simply use the DegreeMultivariatePolynomial (7.6-2) command.

gap>
gap> F:=GF(11);;
gap> R2:=PolynomialRing(F,2);
PolynomialRing(..., [ x_1, x_2 ])
gap> vars:=IndeterminatesOfPolynomialRing(R2);;
gap> x:=vars[1];; y:=vars[2];;
gap> poly:=y;; crvP1:=AffineCurve(poly,R2);
rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_2 )
gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2);
1
gap> poly:=y^2-x*(x^2-1);; ell_crv:=AffineCurve(poly,R2);
rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := -x_1^3+x_2^2+x_1 )
gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2);
3
gap> poly:=x^2+y^2-1;; circle:=AffineCurve(poly,R2);
rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_1^2+x_2^2-Z(11)^0 )
gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2);
2
gap> q:=3;;
gap> F:=GF(q^2);;
gap> R:=PolynomialRing(F,2);;
gap> vars:=IndeterminatesOfPolynomialRing(R);
[ x_1, x_2 ]
gap> x:=vars[1];
x_1
gap> y:=vars[2];
x_2
gap> crv:=AffineCurve(y^q+y-x^(q+1),R);
rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := -x_1^4+x_2^3+x_2 )
gap>

In GAP, a point on a curve defined by f(x,y)=0 is simply a list [a,b] of elements of F satisfying this polynomial equation.

5.7-2 AffinePointsOnCurve
> AffinePointsOnCurve( f, R, E )( function )

AffinePointsOnCurve(f,R,E) returns the points (x,y) in E^2 satisying f(x,y)=0, where f is an element of R=F[x,y].

gap> F:=GF(11);;
gap> R := PolynomialRing(F,["x","y"]);
PolynomialRing(..., [ x, y ])
gap> indets := IndeterminatesOfPolynomialRing(R);;
gap> x:=indets[1];; y:=indets[2];;
gap> P:=AffinePointsOnCurve(y^2-x^11+x,R,F);
[ [ Z(11)^9, 0*Z(11) ], [ Z(11)^8, 0*Z(11) ], [ Z(11)^7, 0*Z(11) ], 
  [ Z(11)^6, 0*Z(11) ], [ Z(11)^5, 0*Z(11) ], [ Z(11)^4, 0*Z(11) ], 
  [ Z(11)^3, 0*Z(11) ], [ Z(11)^2, 0*Z(11) ], [ Z(11), 0*Z(11) ], 
  [ Z(11)^0, 0*Z(11) ], [ 0*Z(11), 0*Z(11) ] ]

5.7-3 GenusCurve
> GenusCurve( crv )( function )

If crv represents f(x,y)=0, where f is a polynomial of degree d, then this function simply returns (d-1)(d-2)/2. At the present, the function does not check if the curve is singular (in which case the result may be false).

gap> q:=4;;
gap> F:=GF(q^2);;
gap> a:=X(F);;
gap> R1:=PolynomialRing(F,[a]);;
gap> var1:=IndeterminatesOfPolynomialRing(R1);;
gap> b:=X(F);;
gap> R2:=PolynomialRing(F,[a,b]);;
gap> var2:=IndeterminatesOfPolynomialRing(R2);;
gap> crv:=AffineCurve(b^q+b-a^(q+1),R2);;
gap> crv:=AffineCurve(b^q+b-a^(q+1),R2);
rec( ring := PolynomialRing(..., [ x_1, x_1 ]), polynomial := x_1^5+x_1^4+x_1 )
gap> GenusCurve(crv);
36

5.7-4 GOrbitPoint
> GOrbitPoint ( GP )( function )

P must be a point in projective space P^n(F), G must be a finite subgroup of GL(n+1,F), This function returns all (representatives of projective) points in the orbit G* P.

The example below computes the orbit of the automorphism group on the Klein quartic over the field GF(43) on the ``point at infinity''.

gap> R:= PolynomialRing( GF(43), 3 );;
gap> vars:= IndeterminatesOfPolynomialRing(R);;
gap> x:= vars[1];; y:= vars[2];; z:= vars[3];;
gap> zz:=Z(43)^6;
Z(43)^6
gap> zzz:=Z(43);
Z(43)
gap> rho1:=zz^0*[[zz^4,0,0],[0,zz^2,0],[0,0,zz]];
[ [ Z(43)^24, 0*Z(43), 0*Z(43) ], 
[ 0*Z(43), Z(43)^12, 0*Z(43) ], 
[ 0*Z(43), 0*Z(43), Z(43)^6 ] ]
gap> rho2:=zz^0*[[0,1,0],[0,0,1],[1,0,0]];
[ [ 0*Z(43), Z(43)^0, 0*Z(43) ], 
[ 0*Z(43), 0*Z(43), Z(43)^0 ], 
[ Z(43)^0, 0*Z(43), 0*Z(43) ] ]
gap> rho3:=(-1)*[[(zz-zz^6 )/zzz^7,( zz^2-zz^5 )/ zzz^7, ( zz^4-zz^3 )/ zzz^7],
>             [( zz^2-zz^5 )/ zzz^7, ( zz^4-zz^3 )/ zzz^7, ( zz-zz^6 )/ zzz^7],
>             [( zz^4-zz^3 )/ zzz^7, ( zz-zz^6 )/ zzz^7, ( zz^2-zz^5 )/ zzz^7]];
[ [ Z(43)^9, Z(43)^28, Z(43)^12 ], 
[ Z(43)^28, Z(43)^12, Z(43)^9 ], 
[ Z(43)^12, Z(43)^9, Z(43)^28 ] ]
gap> G:=Group([rho1,rho2,rho3]);; #PSL(2,7)
gap> Size(G);
168
gap> P:=[1,0,0]*zzz^0;
[ Z(43)^0, 0*Z(43), 0*Z(43) ]
gap> O:=GOrbitPoint(G,P);
[ [ Z(43)^0, 0*Z(43), 0*Z(43) ], [ 0*Z(43), Z(43)^0, 0*Z(43) ], 
[ 0*Z(43), 0*Z(43), Z(43)^0 ], [ Z(43)^0, Z(43)^39, Z(43)^16 ], 
[ Z(43)^0, Z(43)^33, Z(43)^28 ], [ Z(43)^0, Z(43)^27, Z(43)^40 ],
[ Z(43)^0, Z(43)^21, Z(43)^10 ], [ Z(43)^0, Z(43)^15, Z(43)^22 ], 
[ Z(43)^0, Z(43)^9, Z(43)^34 ], [ Z(43)^0, Z(43)^3, Z(43)^4 ], 
[ Z(43)^3, Z(43)^22, Z(43)^6 ], [ Z(43)^3, Z(43)^16, Z(43)^18 ],
[ Z(43)^3, Z(43)^10, Z(43)^30 ], [ Z(43)^3, Z(43)^4, Z(43)^0 ], 
[ Z(43)^3, Z(43)^40, Z(43)^12 ], [ Z(43)^3, Z(43)^34, Z(43)^24 ], 
[ Z(43)^3, Z(43)^28, Z(43)^36 ], [ Z(43)^4, Z(43)^30, Z(43)^27 ],
[ Z(43)^4, Z(43)^24, Z(43)^39 ], [ Z(43)^4, Z(43)^18, Z(43)^9 ], 
[ Z(43)^4, Z(43)^12, Z(43)^21 ], [ Z(43)^4, Z(43)^6, Z(43)^33 ], 
[ Z(43)^4, Z(43)^0, Z(43)^3 ], [ Z(43)^4, Z(43)^36, Z(43)^15 ] ]
gap> Length(O);
24

Informally, a divisor on a curve is a formal integer linear combination of points on the curve, D=m_1P_1+...+m_kP_k, where the m_i are integers (the ``multiplicity'' of P_i in D) and P_i are (F-rational) points on the affine plane curve. In other words, a divisor is an element of the free abelian group generated by the F-rational affine points on the curve. The support of a divisor D is simply the set of points which occurs in the sum defining D with non-zero ``multiplicity''. The data structure for a divisor on an affine plane curve is a record having the following components:

  • the coefficients (the integer weights of the points in the support),

  • the support,

  • the curve, itself a record which has components: polynomial and polynomial ring.

5.7-5 DivisorOnAffineCurve
> DivisorOnAffineCurve( cdivsdivcrv )( function )

This is the command you use to define a divisor in GUAVA. Of course, crv is the curve on which the divisor lives, cdiv is the list of coefficients (or ``multiplicities''), sdiv is the list of points on crv in the support.

gap> q:=5;
5
gap> F:=GF(q);
GF(5)
gap> R:=PolynomialRing(F,2);;
gap> vars:=IndeterminatesOfPolynomialRing(R);
[ x_1, x_2 ]
gap> x:=vars[1];
x_1
gap> y:=vars[2];
x_2
gap> crv:=AffineCurve(y^3-x^3-x-1,R);
rec( ring := PolynomialRing(..., [ x_1, x_2 ]), 
     polynomial := -x_1^3+x_2^3-x_1-Z(5)^0 )
gap> Pts:=AffinePointsOnCurve(crv,R,F);;
gap> supp:=[Pts[1],Pts[2]];
[ [ 0*Z(5), Z(5)^0 ], [ Z(5)^0, Z(5) ] ]
gap> D:=DivisorOnAffineCurve([1,-1],supp,crv);
rec( coeffs := [ 1, -1 ], 
     support := [ [ 0*Z(5), Z(5)^0 ], [ Z(5)^0, Z(5) ] ],
     curve := rec( ring := PolynomialRing(..., [ x_1, x_2 ]), 
                   polynomial := -x_1^3+x_2^3-x_1-Z(5)^0 ) )

5.7-6 DivisorAddition
> DivisorAddition ( D1D2 )( function )

If D_1=m_1P_1+...+m_kP_k and D_2=n_1P_1+...+n_kP_k are divisors then D_1+D_2=(m_1+n_1)P_1+...+(m_k+n_k)P_k.

5.7-7 DivisorDegree
> DivisorDegree ( D )( function )

If D=m_1P_1+...+m_kP_k is a divisor then the degree is m_1+...+m_k.

5.7-8 DivisorNegate
> DivisorNegate ( D )( function )

Self-explanatory.

5.7-9 DivisorIsZero
> DivisorIsZero ( D )( function )

Self-explanatory.

5.7-10 DivisorsEqual
> DivisorsEqual ( D1D2 )( function )

Self-explanatory.

5.7-11 DivisorGCD
> DivisorGCD ( D1D2 )( function )

If m=p_1^e_1...p_k^e_k and n=p_1^f_1...p_k^f_k are two integers then their greatest common divisor is GCD(m,n)=p_1^min(e_1,f_1)...p_k^min(e_k,f_k). A similar definition works for two divisors on a curve. If D_1=e_1P_1+...+e_kP_k and D_2n=f_1P_1+...+f_kP_k are two divisors on a curve then their greatest common divisor is GCD(m,n)=min(e_1,f_1)P_1+...+min(e_k,f_k)P_k. This function computes this quantity.

5.7-12 DivisorLCM
> DivisorLCM ( D1D2 )( function )

If m=p_1^e_1...p_k^e_k and n=p_1^f_1...p_k^f_k are two integers then their least common multiple is LCM(m,n)=p_1^max(e_1,f_1)...p_k^max(e_k,f_k). A similar definition works for two divisors on a curve. If D_1=e_1P_1+...+e_kP_k and D_2=f_1P_1+...+f_kP_k are two divisors on a curve then their least common multiple is LCM(m,n)=max(e_1,f_1)P_1+...+max(e_k,f_k)P_k. This function computes this quantity.

gap> F:=GF(11);
GF(11)
gap> R1:=PolynomialRing(F,["a"]);;
gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
gap> b:=X(F,"b",var1);
b
gap> var2:=Concatenation(var1,[b]);
[ a, b ]
gap> R2:=PolynomialRing(F,var2);
PolynomialRing(..., [ a, b ])
gap> crvP1:=AffineCurve(b,R2);
rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
gap> div1:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
rec( coeffs := [ 1, 2, 3, 4 ], 
     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
gap> DivisorDegree(div1);
10
gap> div2:=DivisorOnAffineCurve([1,2,3,4],[Z(11),Z(11)^2,Z(11)^3,Z(11)^4],crvP1);
rec( coeffs := [ 1, 2, 3, 4 ], 
     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4 ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
gap> DivisorDegree(div2);
10
gap> div3:=DivisorAddition(div1,div2);
rec( coeffs := [ 5, 3, 5, 4, 3 ], 
     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
gap> DivisorDegree(div3);
20
gap> DivisorIsEffective(div1);
true
gap> DivisorIsEffective(div2);
true
gap>
gap> ndiv1:=DivisorNegate(div1);
rec( coeffs := [ -1, -2, -3, -4 ], 
     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
gap> zdiv:=DivisorAddition(div1,ndiv1);
rec( coeffs := [ 0, 0, 0, 0 ], 
     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^7 ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
gap> DivisorIsZero(zdiv);
true
gap> div_gcd:=DivisorGCD(div1,div2);
rec( coeffs := [ 1, 1, 2, 0, 0 ], 
     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
gap> div_lcm:=DivisorLCM(div1,div2);
rec( coeffs := [ 4, 2, 3, 4, 3 ], 
     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
gap> DivisorDegree(div_gcd);
4
gap> DivisorDegree(div_lcm);
16
gap> DivisorEqual(div3,DivisorAddition(div_gcd,div_lcm));
true

Let G denote a finite subgroup of PGL(2,F) and let D denote a divisor on the projective line P^1(F). If G leaves D unchanged (it may permute the points in the support of D but must preserve their sum in D) then the Riemann-Roch space L(D) is a G-module. The commands in this section help explore the G-module structure of L(D) in the case then the ground field F is finite.

5.7-13 RiemannRochSpaceBasisFunctionP1
> RiemannRochSpaceBasisFunctionP1 ( PkR2 )( function )

Input: R2 is a polynomial ring in two variables, say F[x,y]; P is an element of the base field, say F; k is an integer. Output: 1/(x-P)^k

5.7-14 DivisorOfRationalFunctionP1
> DivisorOfRationalFunctionP1 ( f, R )( function )

Here R = F[x,y] is a polynomial ring in the variables x,y and f is a rational function of x. Simply returns the principal divisor on P}^1 associated to f.


gap> F:=GF(11);
GF(11)
gap> R1:=PolynomialRing(F,["a"]);;
gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
gap> b:=X(F,"b",var1);
b
gap> var2:=Concatenation(var1,[b]);
[ a, b ]
gap> R2:=PolynomialRing(F,var2);
PolynomialRing(..., [ a, b ])
gap> pt:=Z(11);
Z(11)
gap> f:=RiemannRochSpaceBasisFunctionP1(pt,2,R2);
(Z(11)^0)/(a^2+Z(11)^7*a+Z(11)^2)
gap> Df:=DivisorOfRationalFunctionP1(f,R2);
rec( coeffs := [ -2 ], support := [ Z(11) ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := a )
   )
gap> Df.support;
[ Z(11) ]
gap> F:=GF(11);;
gap> R:=PolynomialRing(F,2);;
gap> vars:=IndeterminatesOfPolynomialRing(R);;
gap> a:=vars[1];;
gap> b:=vars[2];;
gap> f:=(a^4+Z(11)^6*a^3-a^2+Z(11)^7*a+Z(11)^0)/(a^4+Z(11)*a^2+Z(11)^7*a+Z(11));;
gap> divf:=DivisorOfRationalFunctionP1(f,R);
rec( coeffs := [ 3, 1 ], support := [ Z(11), Z(11)^7 ],
  curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := a ) )
gap> denf:=DenominatorOfRationalFunction(f); RootsOfUPol(denf);
a^4+Z(11)*a^2+Z(11)^7*a+Z(11)
[  ]
gap> numf:=NumeratorOfRationalFunction(f); RootsOfUPol(numf);
a^4+Z(11)^6*a^3-a^2+Z(11)^7*a+Z(11)^0
[ Z(11)^7, Z(11), Z(11), Z(11) ]

5.7-15 RiemannRochSpaceBasisP1
> RiemannRochSpaceBasisP1 ( D )( function )

This returns the basis of the Riemann-Roch space L(D) associated to the divisor D on the projective line P}^1.

gap> F:=GF(11);
GF(11)
gap> R1:=PolynomialRing(F,["a"]);;
gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
gap> b:=X(F,"b",var1);
b
gap> var2:=Concatenation(var1,[b]);
[ a, b ]
gap> R2:=PolynomialRing(F,var2);
PolynomialRing(..., [ a, b ])
gap> crvP1:=AffineCurve(b,R2);
rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
rec( coeffs := [ 1, 2, 3, 4 ], 
     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
gap> B:=RiemannRochSpaceBasisP1(D);
[ Z(11)^0, (Z(11)^0)/(a+Z(11)^7), (Z(11)^0)/(a+Z(11)^8), 
(Z(11)^0)/(a^2+Z(11)^9*a+Z(11)^6), (Z(11)^0)/(a+Z(11)^2), 
(Z(11)^0)/(a^2+Z(11)^3*a+Z(11)^4), (Z(11)^0)/(a^3+a^2+Z(11)^2*a+Z(11)^6),
  (Z(11)^0)/(a+Z(11)^6), (Z(11)^0)/(a^2+Z(11)^7*a+Z(11)^2), 
(Z(11)^0)/(a^3+Z(11)^4*a^2+a+Z(11)^8), 
(Z(11)^0)/(a^4+Z(11)^8*a^3+Z(11)*a^2+a+Z(11)^4) ]
gap> DivisorOfRationalFunctionP1(B[1],R2).support;
[  ]
gap> DivisorOfRationalFunctionP1(B[2],R2).support;
[ Z(11)^2 ]
gap> DivisorOfRationalFunctionP1(B[3],R2).support;
[ Z(11)^3 ]
gap> DivisorOfRationalFunctionP1(B[4],R2).support;
[ Z(11)^3 ]
gap> DivisorOfRationalFunctionP1(B[5],R2).support;
[ Z(11)^7 ]
gap> DivisorOfRationalFunctionP1(B[6],R2).support;
[ Z(11)^7 ]
gap> DivisorOfRationalFunctionP1(B[7],R2).support;
[ Z(11)^7 ]
gap> DivisorOfRationalFunctionP1(B[8],R2).support;
[ Z(11) ]
gap> DivisorOfRationalFunctionP1(B[9],R2).support;
[ Z(11) ]
gap> DivisorOfRationalFunctionP1(B[10],R2).support;
[ Z(11) ]
gap> DivisorOfRationalFunctionP1(B[11],R2).support;
[ Z(11) ]

5.7-16 MoebiusTransformation
> MoebiusTransformation ( AR )( function )

The arguments are a 2x 2 matrix A with entries in a field F and a polynomial ring Rof one variable, say F[x]. This function returns the linear fractional transformatio associated to A. These transformations can be composed with each other using GAP's Value command.

5.7-17 ActionMoebiusTransformationOnFunction
> ActionMoebiusTransformationOnFunction ( AfR2 )( function )

The arguments are a 2x 2 matrix A with entries in a field F, a rational function f of one variable, say in F(x), and a polynomial ring R2, say F[x,y]. This function simply returns the composition of the function f with the Möbius transformation of A.

5.7-18 ActionMoebiusTransformationOnDivisorP1
> ActionMoebiusTransformationOnDivisorP1 ( AD )( function )

A Möbius transformation may be regarded as an automorphism of the projective line P^1. This function simply returns the image of the divisor D under the Möbius transformation defined by A, provided that IsActionMoebiusTransformationOnDivisorDefinedP1(A,D) returns true.

5.7-19 IsActionMoebiusTransformationOnDivisorDefinedP1
> IsActionMoebiusTransformationOnDivisorDefinedP1 ( AD )( function )

Returns true of none of the points in the support of the divisor D is the pole of the Möbius transformation.

gap> F:=GF(11);
GF(11)
gap> R1:=PolynomialRing(F,["a"]);;
gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
gap> b:=X(F,"b",var1);
b
gap> var2:=Concatenation(var1,[b]);
[ a, b ]
gap> R2:=PolynomialRing(F,var2);
PolynomialRing(..., [ a, b ])
gap> crvP1:=AffineCurve(b,R2);
rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
rec( coeffs := [ 1, 2, 3, 4 ], 
     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
gap> A:=Z(11)^0*[[1,2],[1,4]];
[ [ Z(11)^0, Z(11) ], [ Z(11)^0, Z(11)^2 ] ]
gap> ActionMoebiusTransformationOnDivisorDefinedP1(A,D);
false
gap> A:=Z(11)^0*[[1,2],[3,4]];
[ [ Z(11)^0, Z(11) ], [ Z(11)^8, Z(11)^2 ] ]
gap> ActionMoebiusTransformationOnDivisorDefinedP1(A,D);
true
gap> ActionMoebiusTransformationOnDivisorP1(A,D);
rec( coeffs := [ 1, 2, 3, 4 ], 
     support := [ Z(11)^5, Z(11)^6, Z(11)^8, Z(11)^7 ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
gap> f:=MoebiusTransformation(A,R1);
(a+Z(11))/(Z(11)^8*a+Z(11)^2)
gap> ActionMoebiusTransformationOnFunction(A,f,R1);
-Z(11)^0+Z(11)^3*a^-1

5.7-20 DivisorAutomorphismGroupP1
> DivisorAutomorphismGroupP1 ( D )( function )

Input: A divisor D on P^1(F), where F is a finite field. Output: A subgroup Aut(D)subset Aut(P^1) preserving D.

Very slow.

gap> F:=GF(11);
GF(11)
gap> R1:=PolynomialRing(F,["a"]);;
gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
gap> b:=X(F,"b",var1);
b
gap> var2:=Concatenation(var1,[b]);
[ a, b ]
gap> R2:=PolynomialRing(F,var2);
PolynomialRing(..., [ a, b ])
gap> crvP1:=AffineCurve(b,R2);
rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
rec( coeffs := [ 1, 2, 3, 4 ], 
     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
gap> agp:=DivisorAutomorphismGroupP1(D);; time;
7305
gap> IdGroup(agp);
[ 10, 2 ]

5.7-21 MatrixRepresentationOnRiemannRochSpaceP1
> MatrixRepresentationOnRiemannRochSpaceP1 ( gD )( function )

Input: An element g in G, a subgroup of Aut(D)subset Aut(P^1), and a divisor D on P^1(F), where F is a finite field. Output: a dx d matrix, where d = dim, L(D), representing the action of g on L(D).

Note: g sends L(D) to r* L(D), where r is a polynomial of degree 1 depending on g and D.

Also very slow.

The GAP command BrauerCharacterValue can be used to ``lift'' the eigenvalues of this matrix to the complex numbers.

gap> F:=GF(11);
GF(11)
gap> R1:=PolynomialRing(F,["a"]);;
gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
gap> b:=X(F,"b",var1);
b
gap> var2:=Concatenation(var1,[b]);
[ a, b ]
gap> R2:=PolynomialRing(F,var2);
PolynomialRing(..., [ a, b ])
gap> crvP1:=AffineCurve(b,R2);
rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
gap> D:=DivisorOnAffineCurve([1,1,1,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
rec( coeffs := [ 1, 1, 1, 4 ],  
     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
gap> agp:=DivisorAutomorphismGroupP1(D);; time;
7198
gap> IdGroup(agp);
[ 20, 5 ]
gap> g:=Random(agp);
[ [ Z(11)^4, Z(11)^9 ], [ Z(11)^0, Z(11)^9 ] ]
gap> rho:=MatrixRepresentationOnRiemannRochSpaceP1(g,D);
[ [ Z(11)^0, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ], 
[ Z(11)^0, 0*Z(11), 0*Z(11), Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ],
  [ Z(11)^7, 0*Z(11), Z(11)^5, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ], 
[ Z(11)^4, Z(11)^9, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ],
  [ Z(11)^2, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^5, 0*Z(11), 0*Z(11), 0*Z(11) ], 
[ Z(11)^4, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^8, Z(11)^0, 0*Z(11), 0*Z(11) ],
  [ Z(11)^6, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^7, Z(11)^0, Z(11)^5, 0*Z(11) ], 
[ Z(11)^8, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^3, Z(11)^3, Z(11)^9, Z(11)^0 ] ]
gap> Display(rho);
  1  .  .  .  .  .  .  .
  1  .  .  2  .  .  .  .
  7  . 10  .  .  .  .  .
  5  6  .  .  .  .  .  .
  4  .  .  . 10  .  .  .
  5  .  .  .  3  1  .  .
  9  .  .  .  7  1 10  .
  3  .  .  .  8  8  6  1

5.7-22 GoppaCodeClassical
> GoppaCodeClassical( div, pts )( function )

Input: A divisor div on the projective line P}^1(F) over a finite field F and a list pts of points P_1,...,P_nsubset F disjoint from the support of div.
Output: The classical (evaluation) Goppa code associated to this data. This is the code

C=\{(f(P_1),...,f(P_n))\ |\ f\in L(D)_F\}.

gap> F:=GF(11);;
gap> R2:=PolynomialRing(F,2);;
gap> vars:=IndeterminatesOfPolynomialRing(R2);;
gap> a:=vars[1];;b:=vars[2];;
gap> cdiv:=[ 1, 2, -1, -2 ];
[ 1, 2, -1, -2 ]
gap> sdiv:=[ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ];
[ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ]
gap> crv:=rec(polynomial:=b,ring:=R2);
rec( polynomial := x_2, ring := PolynomialRing(..., [ x_1, x_2 ]) )
gap> div:=DivisorOnAffineCurve(cdiv,sdiv,crv);
rec( coeffs := [ 1, 2, -1, -2 ], support := [ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ],
  curve := rec( polynomial := x_2, ring := PolynomialRing(..., [ x_1, x_2 ]) ) )
gap> pts:=Difference(Elements(GF(11)),div.support);
[ 0*Z(11), Z(11)^0, Z(11), Z(11)^4, Z(11)^5, Z(11)^7, Z(11)^8 ]
gap> C:=GoppaCodeClassical(div,pts);
a linear [7,2,1..6]4..5 code defined by generator matrix over GF(11)
gap> MinimumDistance(C);
6

5.7-23 EvaluationBivariateCode
> EvaluationBivariateCode( pts, L, crv )( function )

Input: pts is a set of affine points on crv, L is a list of rational functions on crv.
Output: The evaluation code associated to the points in pts and functions in L, but specifically for affine plane curves and this function checks if points are "bad" (if so removes them from the list pts automatically). A point is ``bad'' if either it does not lie on the set of non-singular F-rational points (places of degree 1) on the curve.

Very similar to EvaluationCode (see EvaluationCode (5.6-1) for a more general construction).

5.7-24 EvaluationBivariateCodeNC
> EvaluationBivariateCodeNC( pts, L, crv )( function )

As in EvaluationBivariateCode but does not check if the points are ``bad''.

Input: pts is a set of affine points on crv, L is a list of rational functions on crv.
Output: The evaluation code associated to the points in pts and functions in L.

gap> q:=4;;
gap> F:=GF(q^2);;
gap> R:=PolynomialRing(F,2);;
gap> vars:=IndeterminatesOfPolynomialRing(R);;
gap> x:=vars[1];;
gap> y:=vars[2];;
gap> crv:=AffineCurve(y^q+y-x^(q+1),R);
rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_1^5+x_2^4+x_2 )
gap> L:=[ x^0, x, x^2*y^-1 ];
[ Z(2)^0, x_1, x_1^2/x_2 ]
gap> Pts:=AffinePointsOnCurve(crv.polynomial,crv.ring,F);;
gap> C1:=EvaluationBivariateCode(Pts,L,crv); time;


 Automatically removed the following 'bad' points (either a pole or not 
 on the curve):
[ [ 0*Z(2), 0*Z(2) ] ]

a linear [63,3,1..60]51..59  evaluation code over GF(16)
52
gap> P:=Difference(Pts,[[ 0*Z(2^4)^0, 0*Z(2)^0 ]]);;
gap> C2:=EvaluationBivariateCodeNC(P,L,crv); time;
a linear [63,3,1..60]51..59  evaluation code over GF(16)
48
gap> C3:=EvaluationCode(P,L,R); time;
a linear [63,3,1..56]51..59  evaluation code over GF(16)
58
gap> MinimumDistance(C1);
56
gap> MinimumDistance(C2);
56
gap> MinimumDistance(C3);
56
gap>

5.7-25 OnePointAGCode
> OnePointAGCode( f, P, m, R )( function )

Input: f is a polynomial in R=F[x,y], where F is a finite field, m is a positive integer (the multiplicity of the `point at infinity' infty on the curve f(x,y)=0), P is a list of n points on the curve over F.
Output: The C which is the image of the evaluation map

Eval_P:L(m \cdot \infty)\rightarrow F^n,

given by flongmapsto (f(p_1),...,f(p_n)), where p_i in P. Here L(m * infty) denotes the Riemann-Roch space of the divisor m * infty on the curve. This has a basis consisting of monomials x^iy^j, where (i,j) range over a polygon depending on m and f(x,y). For more details on the Riemann-Roch space of the divisor m * infty see Proposition III.10.5 in Stichtenoth [Sti93].

This command returns a "record" object C with several extra components (type NamesOfComponents(C) to see them all): C!.points (namely P), C!.multiplicity (namely m), C!.curve (namely f) and C!.ring (namely R).

gap> F:=GF(11);
GF(11)
gap> R := PolynomialRing(F,["x","y"]);
PolynomialRing(..., [ x, y ])
gap> indets := IndeterminatesOfPolynomialRing(R);
[ x, y ]
gap> x:=indets[1]; y:=indets[2];
x
y
gap> P:=AffinePointsOnCurve(y^2-x^11+x,R,F);;
gap> C:=OnePointAGCode(y^2-x^11+x,P,15,R);
a linear [11,8,1..0]2..3  one-point AG code over GF(11)
gap> MinimumDistance(C);
4
gap> Pts:=List([1,2,4,6,7,8,9,10,11],i->P[i]);;
gap> C:=OnePointAGCode(y^2-x^11+x,PT,10,R);
a linear [9,6,1..4]2..3 one-point AG code over GF(11)
gap> MinimumDistance(C);
4

See EvaluationCode (5.6-1) for a more general construction.

5.8 Low-Density Parity-Check Codes

Low-density parity-check (LDPC) codes form a class of linear block codes whose parity-check matrix--as the name implies, is sparse. LDPC codes were introduced by Robert Gallager in 1962 [Gal62] as his PhD work. Due to the decoding complexity for the technology back then, these codes were forgotten. Not until the late 1990s, these codes were rediscovered and research results have shown that LDPC codes can achieve near Shannon's capacity performance provided that their block length is long enough and soft-decision iterative decoder is employed. Note that the bit-flipping decoder (see BitFlipDecoder) is a hard-decision decoder and hence capacity achieving performance cannot be achieved despite having a large block length.

Based on the structure of their parity-check matrix, LDPC codes may be categorised into two classes:

  • Regular LDPC codes

    This class of codes has a fixed number of non zeros per column and per row in their parity-check matrix. These codes are usually denoted as (n,j,k) codes where n is the block length, j is the number of non zeros per column in their parity-check matrix and k is the number of non zeros per row in their parity-check matrix.

  • Irregular LDPC codes

    The irregular codes, on the other hand, do not have a fixed number of non zeros per column and row in their parity-check matrix. This class of codes are commonly represented by two polynomials which denote the distribution of the number of non zeros in the columns and rows respectively of their parity-check matrix.

5.8-1 QCLDPCCodeFromGroup
> QCLDPCCodeFromGroup( m, j, k )( function )

QCLDCCodeFromGroup produces an (n,j,k) regular quasi-cyclic LDPC code over GF(2) of block length n = mk. The term quasi-cyclic in the context of LDPC codes typically refers to LDPC codes whose parity-check matrix H has the following form


    -                                              -
    |  I_P(0,0)  |  I_P(0,1)  | ... |  I_P(0,k-1)  |
    |  I_P(1,0)  |  I_P(1,1)  | ... |  I_P(1,k-1)  |
H = |      .     |     .      |  .  |       .      |,
    |      .     |     .      |  .  |       .      |
    | I_P(j-1,0) | I_P(j-1,1) | ... | I_P(j-1,k-1) |
    -                                              -
		

where I_P(s,t) is an identity matrix of size m x m which has been shifted so that the 1 on the first row starts at position P(s,t).

Let F be a multiplicative group of integers modulo m. If m is a prime, F=0,1,...,m-1, otherwise F contains a set of integers which are relatively prime to m. In both cases, the order of F is equal to phi(m). Let a and b be non zeros of F such that the orders of a and b are k and j respectively. Note that the integers a and b can always be found provided that k and j respectively divide phi(m). Having obtain integers a and b, construct the following j x k matrix P so that the element at row s and column t is given by P(s,t) = a^tb^s, i.e.


    -                                             -
    |    1    |     a    | . . . |      a^{k-1}   |
    |    b    |    ab    | . . . |     a^{k-1}b   |
P = |    .    |    .     |   .   |        .       |.
    |    .    |    .     |   .   |        .       |
    | b^{j-1} | ab^{j-1} | . . . | a^{k-1}b^{j-1} |
    -                                             -
		

The parity-check matrix H of the LDPC code can be obtained by expanding each element of matrix P, i.e. P(s,t), to an identity matrix I_P(s,t) of size m x m.

The code rate R of the constructed code is given by

R \geq 1 - \frac{j}{k}

where the sign >= is due to the possible existence of some non linearly independent rows in H. For more details to the paper by Tanner et al [S}04].

gap> C := QCLDPCCodeFromGroup(7,2,3);
a linear [21,8,1..6]5..10 low-density parity-check code over GF(2)
gap> MinimumWeight(C);
[21,8] linear code over GF(2) - minimum weight evaluation
Known lower-bound: 1
There are 3 generator matrices, ranks : 8 8 5 
The weight of the minimum weight codeword satisfies 0 mod 2 congruence
Enumerating codewords with information weight 1 (w=1)
    Found new minimum weight 6
Number of matrices required for codeword enumeration 2
Completed w= 1, 24 codewords enumerated, lower-bound 4, upper-bound 6
Termination expected with information weight 2 at matrix 1
-----------------------------------------------------------------------------
Enumerating codewords with information weight 2 (w=2) using 1 matrices
Completed w= 2, 28 codewords enumerated, lower-bound 6, upper-bound 6
-----------------------------------------------------------------------------
Minimum weight: 6
6
gap> # The quasi-cyclic structure is obvious from the check matrix
gap> Display( CheckMat(C) );
 1 . . . . . . . 1 . . . . . . . . 1 . . .
 . 1 . . . . . . . 1 . . . . . . . . 1 . .
 . . 1 . . . . . . . 1 . . . . . . . . 1 .
 . . . 1 . . . . . . . 1 . . . . . . . . 1
 . . . . 1 . . . . . . . 1 . 1 . . . . . .
 . . . . . 1 . . . . . . . 1 . 1 . . . . .
 . . . . . . 1 1 . . . . . . . . 1 . . . .
 . . . . . 1 . . . . . 1 . . . . 1 . . . .
 . . . . . . 1 . . . . . 1 . . . . 1 . . .
 1 . . . . . . . . . . . . 1 . . . . 1 . .
 . 1 . . . . . 1 . . . . . . . . . . . 1 .
 . . 1 . . . . . 1 . . . . . . . . . . . 1
 . . . 1 . . . . . 1 . . . . 1 . . . . . .
 . . . . 1 . . . . . 1 . . . . 1 . . . . .
gap> # This is the famous [155,64,20] quasi-cyclic LDPC codes
gap> C := QCLDPCCodeFromGroup(31,3,5);
a linear [155,64,1..24]24..77 low-density parity-check code over GF(2)
gap> # An example using non prime m, it may take a while to construct this code
gap> C := QCLDPCCodeFromGroup(356,4,8);
a linear [2848,1436,1..120]312..1412 low-density parity-check code over GF(2)
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

generated by GAPDoc2HTML

guava-3.6/htm/chapInd.html0000644017361200001450000011302611027015742015370 0ustar tabbottcrontab GAP (guava) - Index
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

Index

< > 3.2-1
< > 4.1-1
* 4.2-2
* 4.2-3
+ 3.3-1
+ 3.3-3
+ 4.2-1
- 3.3-2
= 3.2-1
= 4.1-1
A(n,d) 7.1-7
acceptable coordinate 7.4-2
acceptable coordinate 7.4-3
AClosestVectorComb..MatFFEVecFFECoords 2.1-2
AClosestVectorCombinationsMatFFEVecFFE 2.1-1
ActionMoebiusTransformationOnDivisorP1 5.7-18
ActionMoebiusTransformationOnFunction 5.7-17
AddedElementsCode 6.1-8
affine code 4.3-13
AffineCurve 5.7-1
AffinePointsOnCurve 5.7-2
AlternantCode 5.2-6
AmalgamatedDirectSumCode 6.2-7
AreMOLS 7.3-13
AsSSortedList 4.5-5
AugmentedCode 6.1-6
AutomorphismGroup 4.4-3
BCHCode 5.5-4
BestKnownLinearCode 5.2-14
BinaryGolayCode 5.4-1
BitFlipDecoder 4.10-5
BlockwiseDirectSumCode 6.2-8
Bose distance 5.5-4
bound, Gilbert-Varshamov lower 7.1-9
bound, sphere packing lower 7.1-10
bounds, Elias 7.1-4
bounds, Griesmer 7.1-5
bounds, Hamming 7.1-1
bounds, Johnson 7.1-2
bounds, Plotkin 7.1-3
bounds, Singleton 7.1
bounds, sphere packing bound 7.1-1
BoundsCoveringRadius 7.2-1
BoundsMinimumDistance 7.1-13
BZCode 6.2-11
BZCodeNC 6.2-12
check polynomial 4.
check polynomial 5.5
CheckMat 4.7-2
CheckMatCode 5.2-3
CheckMatCodeMutable 5.2-2
CheckPol 4.7-4
CheckPolCode 5.5-2
CirculantMatrix 7.5-17
code 4.
code, (n,M,d) 4.
code, [n, k, d]r 4.
code, AG 5.7
code, alternant 5.2-5
code, Bose-Chaudhuri-Hockenghem 5.5-3
code, conference 5.1-2
code, Cordaro-Wagner 5.2-9
code, cyclic 4.
code, Davydov 5.3-2
code, doubly-even 4.3-10
code, element test 4.3-1
code, elements of 4.
code, evaluation 5.6
code, even 4.3-12
code, Fire 5.5-9
code, Gabidulin 5.3
code, Golay (binary) 5.4
code, Golay (ternary) 5.4-2
code, Goppa (classical) 5.2-6
code, greedy 5.1-6
code, Hadamard 5.1-1
code, Hamming 5.2-3
code, linear 4.
code, maximum distance separable 4.3-7
code, Nordstrom-Robinson 5.1-5
code, perfect 4.3-6
code, Reed-Muller 5.2-4
code, Reed-Solomon 5.5-4
code, self-dual 4.3-8
code, self-orthogonal 4.3-9
code, singly-even 4.3-11
code, Srivastava 5.2-7
code, subcode 4.3-2
code, Tombak 5.3-3
code, toric 5.6-4
code, unrestricted 4.
CodeDensity 7.5-4
CodeDistanceEnumerator 7.5-2
CodeIsomorphism 4.4-2
CodeMacWilliamsTransform 7.5-3
CodeNorm 7.4-2
codes, addition 4.2-1
codes, decoding 4.2-4
codes, direct sum 4.2-1
codes, encoding 4.2-3
codes, product 4.2-2
CodeWeightEnumerator 7.5-1
Codeword 3.1-1
CodewordNr 3.1-2
codewords, addition 3.3-1
codewords, cosets 3.3-3
codewords, subtraction 3.3-2
CoefficientMultivariatePolynomial 7.6-4
CoefficientToPolynomial 7.6-8
conference matrix 5.1-3
ConferenceCode 5.1-3
ConstantWeightSubcode 6.1-18
ConstructionBCode 6.1-13
ConstructionXCode 6.2-9
ConstructionXXCode 6.2-10
ConversionFieldCode 6.1-15
ConwayPolynomial 2.2-1
CoordinateNorm 7.4-1
CordaroWagnerCode 5.2-10
coset 3.3-3
CosetCode 6.1-17
covering code 4.8-7
CoveringRadius 4.8-8
cyclic 5.5-17
CyclicCodes 5.5-14
CyclicMDSCode 5.5-17
CyclotomicCosets 7.5-12
DavydovCode 5.3-3
Decode 4.10-1
Decodeword 4.10-2
DecreaseMinimumDistanceUpperBound 4.8-6
defining polynomial 2.2
degree 5.7-7
DegreeMultivariatePolynomial 7.6-2
DegreesMonomialTerm 7.6-9
DegreesMultivariatePolynomial 7.6-3
density of a code 7.5-3
Dimension 4.5-4
DirectProductCode 6.2-3
DirectSumCode 6.2-1
Display 4.6-3
DisplayBoundsInfo 4.6-4
distance 4.9-3
DistanceCodeword 3.6-2
DistancesDistribution 4.9-4
DistancesDistributionMatFFEVecFFE 2.1-3
DistancesDistributionVecFFEsVecFFE 2.1-4
DistanceVecFFE 2.1-6
divisor 5.7-4
DivisorAddition 5.7-6
DivisorAutomorphismGroupP1 5.7-20
DivisorDegree 5.7-7
DivisorGCD 5.7-11
DivisorIsZero 5.7-9
DivisorLCM 5.7-12
DivisorNegate 5.7-8
DivisorOfRationalFunctionP1 5.7-14
DivisorOnAffineCurve 5.7-5
DivisorsEqual 5.7-10
DivisorsMultivariatePolynomial 7.6-10
doubly-even 4.3-9
DualCode 6.1-14
ElementsCode 5.1-1
encoder map 4.2-3
EnlargedGabidulinCode 5.3-2
EnlargedTombakCode 5.3-5
equivalent codes 4.4
EvaluationBivariateCode 5.7-23
EvaluationBivariateCodeNC 5.7-24
EvaluationCode 5.6-1
even 4.3-11
EvenWeightSubcode 6.1-3
ExhaustiveSearchCoveringRadius 7.2-3
ExpurgatedCode 6.1-5
ExtendedBinaryGolayCode 5.4-2
ExtendedCode 6.1-1
ExtendedDirectSumCode 6.2-6
ExtendedReedSolomonCode 5.5-6
ExtendedTernaryGolayCode 5.4-4
external distance 7.2-13
FerreroDesignCode 5.2-11
FireCode 5.5-10
FourNegacirculantSelfDualCode 5.5-18
FourNegacirculantSelfDualCodeNC 5.5-19
GabidulinCode 5.3-1
Gary code 7.3-1
GeneralizedCodeNorm 7.4-4
GeneralizedReedMullerCode 5.6-3
GeneralizedReedSolomonCode 5.6-2
GeneralizedReedSolomonDecoderGao 4.10-3
GeneralizedReedSolomonListDecoder 4.10-4
GeneralizedSrivastavaCode 5.2-8
GeneralLowerBoundCoveringRadius 7.2-4
GeneralUpperBoundCoveringRadius 7.2-5
generator polynomial 4.
generator polynomial 5.5
GeneratorMat 4.7-1
GeneratorMatCode 5.2-1
GeneratorPol 4.7-3
GeneratorPolCode 5.5-1
GenusCurve 5.7-3
GF(p) 2.2
GF(q) 2.2
GoppaCode 5.2-7
GoppaCodeClassical 5.7-22
GOrbitPoint 5.7-4
GrayMat 7.3-2
greatest common divisor 5.7-11
GreedyCode 5.1-7
Griesmer code 7.1-6
GuavaVersion 7.6-6
Hadamard matrix 5.1-2
Hadamard matrix 7.3-3
HadamardCode 5.1-2
HadamardMat 7.3-4
Hamming metric 2.1-5
HammingCode 5.2-4
HorizontalConversionFieldMat 7.3-10
hull 6.2-4
in 4.3-1
IncreaseCoveringRadiusLowerBound 7.2-2
information bits 4.2-4
InformationWord 4.2-4
InnerDistribution 4.9-3
IntersectionCode 6.2-4
IrreduciblePolynomialsNr 7.5-9
IsActionMoebiusTransformationOnDivisorDefinedP1 5.7-19
IsAffineCode 4.3-14
IsAlmostAffineCode 4.3-15
IsCheapConwayPolynomial 2.2-1
IsCode 4.3-3
IsCodeword 3.1-3
IsCoordinateAcceptable 7.4-3
IsCyclicCode 4.3-5
IsDoublyEvenCode 4.3-10
IsEquivalent 4.4-1
IsEvenCode 4.3-12
IsFinite 4.5-1
IsGriesmerCode 7.1-7
IsInStandardForm 7.3-7
IsLatinSquare 7.3-12
IsLinearCode 4.3-4
IsMDSCode 4.3-7
IsNormalCode 7.4-5
IsPerfectCode 4.3-6
IsPrimitivePolynomial 2.2-2
IsSelfComplementaryCode 4.3-13
IsSelfDualCode 4.3-8
IsSelfOrthogonalCode 4.3-9
IsSinglyEvenCode 4.3-11
IsSubset 4.3-2
Krawtchouk 7.5-6
KrawtchoukMat 7.3-1
Latin square 7.3-10
LDPC 5.8
least common multiple 5.7-12
LeftActingDomain 4.5-3
length 4.
LengthenedCode 6.1-10
LexiCode 5.1-8
linear code 3.
LowerBoundCoveringRadiusCountingExcess 7.2-9
LowerBoundCoveringRadiusEmbedded1 7.2-10
LowerBoundCoveringRadiusEmbedded2 7.2-11
LowerBoundCoveringRadiusInduction 7.2-12
LowerBoundCoveringRadiusSphereCovering 7.2-6
LowerBoundCoveringRadiusVanWee1 7.2-7
LowerBoundCoveringRadiusVanWee2 7.2-8
LowerBoundGilbertVarshamov 7.1-10
LowerBoundMinimumDistance 7.1-9
LowerBoundSpherePacking 7.1-11
MacWilliams transform 7.5-2
MatrixRepresentationOfElement 7.5-10
MatrixRepresentationOnRiemannRochSpaceP1 5.7-21
MatrixTransformationOnMultivariatePolynomial 7.6-1
maximum distance separable 7.1-1
MDS 4.3-7
MDS 5.5-17
minimum distance 4.
MinimumDistance 4.8-3
MinimumDistanceLeon 4.8-4
MinimumDistanceRandom 4.8-7
MinimumWeight 4.8-5
MinimumWeightWords 4.9-1
MoebiusTransformation 5.7-16
MOLS 7.3-11
MOLSCode 5.1-4
MostCommonInList 7.5-15
MultiplicityInList 7.5-14
mutually orthogonal Latin squares 7.3-10
NearestNeighborDecodewords 4.10-7
NearestNeighborGRSDecodewords 4.10-6
NordstromRobinsonCode 5.1-6
norm of a code 7.4-1
normal code 7.4-4
not = 3.2-1
not = 4.1-1
NrCyclicCodes 5.5-15
NullCode 5.5-12
NullWord 3.6-1
OnePointAGCode 5.7-25
OptimalityCode 5.2-13
order of polynomial 5.5-10
OuterDistribution 4.9-5
Parity check 6.1
parity check matrix 4.
perfect 7.1-1
perfect code 7.5-4
permutation equivalent codes 4.4
PermutationAutomorphismGroup 4.4-3
PermutationAutomorphismGroup 4.4-4
PermutationDecode 4.10-11
PermutationDecodeNC 4.10-12
PermutedCode 6.1-4
PermutedCols 7.3-8
PiecewiseConstantCode 6.1-20
point 5.7-1
PolyCodeword 3.4-2
primitive element 2.2
PrimitivePolynomialsNr 7.5-8
PrimitiveUnityRoot 7.5-7
Print 4.6-1
PuncturedCode 6.1-2
PutStandardForm 7.3-6
QCLDPCCodeFromGroup 5.8-1
QQRCode 5.5-9
QQRCodeNC 5.5-8
QRCode 5.5-7
QuasiCyclicCode 5.5-16
RandomCode 5.1-5
RandomLinearCode 5.2-12
RandomPrimitivePolynomial 2.2-2
reciprocal polynomial 7.5-10
ReciprocalPolynomial 7.5-11
Redundancy 4.8-2
ReedMullerCode 5.2-5
ReedSolomonCode 5.5-5
RemovedElementsCode 6.1-7
RepetitionCode 5.5-13
ResidueCode 6.1-12
RiemannRochSpaceBasisFunctionP1 5.7-13
RiemannRochSpaceBasisP1 5.7-15
RootsCode 5.5-3
RootsOfCode 4.7-5
RotateList 7.5-16
self complementary code 4.3-12
self-dual 5.5-18
self-dual 6.1-14
self-orthogonal 4.3-8
SetCoveringRadius 4.8-9
ShortenedCode 6.1-9
singly-even 4.3-10
size 4.
Size 4.5-2
SolveLinearSystem 7.6-5
SphereContent 7.5-5
SrivastavaCode 5.2-9
standard form 7.3-5
StandardArray 4.10-10
StandardFormCode 6.1-19
strength 7.2-15
String 4.6-2
SubCode 6.1-11
Support 3.6-3
support 5.7-4
SylvesterMat 7.3-3
Syndrome 4.10-8
syndrome table 4.10-9
SyndromeTable 4.10-9
t(n,k) 4.8-7
TernaryGolayCode 5.4-3
TombakCode 5.3-4
ToricCode 5.6-5
ToricPoints 5.6-4
TraceCode 6.1-16
TreatAsPoly 3.5-2
TreatAsVector 3.5-1
UnionCode 6.2-5
UpperBound 7.1-8
UpperBoundCoveringRadiusCyclicCode 7.2-17
UpperBoundCoveringRadiusDelsarte 7.2-14
UpperBoundCoveringRadiusGriesmerLike 7.2-16
UpperBoundCoveringRadiusRedundancy 7.2-13
UpperBoundCoveringRadiusStrength 7.2-15
UpperBoundElias 7.1-5
UpperBoundGriesmer 7.1-6
UpperBoundHamming 7.1-2
UpperBoundJohnson 7.1-3
UpperBoundMinimumDistance 7.1-12
UpperBoundPlotkin 7.1-4
UpperBoundSingleton 7.1-1
UUVCode 6.2-2
VandermondeMat 7.3-5
VectorCodeword 3.4-1
VerticalConversionFieldMat 7.3-9
weight enumerator polynomial 7.5
WeightCodeword 3.6-4
WeightDistribution 4.9-2
WeightHistogram 7.5-13
WeightVecFFE 2.1-5
WholeSpaceCode 5.5-11
WordLength 4.8-1
ZechLog 7.6-7

Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

generated by GAPDoc2HTML

guava-3.6/htm/chap0.html0000644017361200001450000015173011027015742015021 0ustar tabbottcrontab GAP (guava) - Contents
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

GUAVA

A GAP4 Package for computing with error-correcting codes  

Version 3.6

June 20, 2008

Jasper Cramwinckel

Erik Roijackers

Reinald Baart

Eric Minkes, Lea Ruscio

Robert L Miller,
e-mail: rlm@robertlmiller.com

Tom Boothby

Cen (``CJ'') Tjhai
e-mail: cen.tjhai@plymouth.ac.uk
WWW: http://www.plymouth.ac.uk/staff/ctjhai

David Joyner (Maintainer),
e-mail: wdjoyner@gmail.com
WWW: http://sage.math.washington.edu/home/wdj/guava/

Copyright

GUAVA: © The GUAVA Group: 1992-2003 Jasper Cramwinckel, Erik Roijackers,Reinald Baart, Eric Minkes, Lea Ruscio (for the tex version), Jeffrey Leon © 2004 David Joyner, Cen Tjhai, Jasper Cramwinckel, Erik Roijackers, Reinald Baart, Eric Minkes, Lea Ruscio. © 2007 Robert L Miller, Tom Boothby

GUAVA is released under the GNU General Public License (GPL).

GUAVA is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

GUAVA 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 GUAVA; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

For more details, see http://www.fsf.org/licenses/gpl.html.

For many years GUAVA has been released along with the ``backtracking'' C programs of J. Leon. In one of his *.c files the following statements occur: ``Copyright (C) 1992 by Jeffrey S. Leon. This software may be used freely for educational and research purposes. Any other use requires permission from the author.'' The following should now be appended: ``I, Jeffrey S. Leon, agree to license all the partition backtrack code which I have written under the GPL (www.fsf.org) as of this date, April 17, 2007.''

GUAVA documentation: © Jasper Cramwinckel, Erik Roijackers,Reinald Baart, Eric Minkes, Lea Ruscio (for the tex version), David Joyner, Cen Tjhai, Jasper Cramwinckel, Erik Roijackers, Reinald Baart, Eric Minkes, Lea Ruscio. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".

Acknowledgements

GUAVA was originally written by Jasper Cramwinckel, Erik Roijackers, and Reinald Baart in the early-to-mid 1990's as a final project during their study of Mathematics at the Delft University of Technology, Department of Pure Mathematics, under the direction of Professor Juriaan Simonis. This work was continued in Aachen, at Lehrstuhl D fur Mathematik. In version 1.3, new functions were added by Eric Minkes, also from Delft University of Technology.

JC, ER and RB would like to thank the GAP people at the RWTH Aachen for their support, A.E. Brouwer for his advice and J. Simonis for his supervision.

The GAP 4 version of GUAVA (versions 1.4 and 1.5) was created by Lea Ruscio and (since 2001, starting with version 1.6) is currently maintained by David Joyner, who (with the help of several students) has added several new functions. Starting with version 2.7, the ``best linear code'' tables have been updated. For further details, see the CHANGES file in the GUAVA directory, also available at http://sage.math.washington.edu/home/wdj/guava/CHANGES.guava.

This documentation was prepared with the GAPDoc package of Frank Lübeck and Max Neunhöffer. The conversion from TeX to GAPDoc's XML was done by David Joyner in 2004.

Please send bug reports, suggestions and other comments about GUAVA to support@gap-system.org. Currently known bugs and suggested GUAVA projects are listed on the bugs and projects web page http://sage.math.washington.edu/home/wdj/guava/guava2do.html. Older releases and further history can be found on the GUAVA web page http://sage.math.washington.edu/home/wdj/guava/.

Contributors: Other than the authors listed on the title page, the following people have contributed code to the GUAVA project: Alexander Hulpke, Steve Linton, Frank Lübeck, Aron Foster, Wayne Irons, Clifton (Clipper) Lennon, Jason McGowan, Shuhong Gao, Greg Gamble.

For documentation on Leon's programs, see the src/leon/doc subdirectory of GUAVA.

Contents

4. Codes
5. Generating Codes
7. Bounds on codes, special matrices and miscellaneous functions

Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

generated by GAPDoc2HTML

guava-3.6/htm/chap7.html0000644017361200001450000037417211027015742015037 0ustar tabbottcrontab GAP (guava) - Chapter 7: Bounds on codes, special matrices and miscellaneous functions
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

7. Bounds on codes, special matrices and miscellaneous functions

7. Bounds on codes, special matrices and miscellaneous functions

In this chapter we describe functions that determine bounds on the size and minimum distance of codes (Section 7.1), functions that determine bounds on the size and covering radius of codes (Section 7.2), functions that work with special matrices GUAVA needs for several codes (see Section 7.3), and constructing codes or performing calculations with codes (see Section 7.5).

7.1 Distance bounds on codes

This section describes the functions that calculate estimates for upper bounds on the size and minimum distance of codes. Several algorithms are known to compute a largest number of words a code can have with given length and minimum distance. It is important however to understand that in some cases the true upper bound is unknown. A code which has a size equalto the calculated upper bound may not have been found. However, codes that have a larger size do not exist.

A second way to obtain bounds is a table. In GUAVA, an extensive table is implemented for linear codes over GF(2), GF(3) and GF(4). It contains bounds on the minimum distance for given word length and dimension. It contains entries for word lengths less than or equal to 257, 243 and 256 for codes over GF(2), GF(3) and GF(4) respectively. These entries were obtained from Brouwer's tables as of 11 May 2006. For the latest information, please see A. E. Brouwer's tables [Bro06] on the internet.

Firstly, we describe functions that compute specific upper bounds on the code size (see UpperBoundSingleton (7.1-1), UpperBoundHamming (7.1-2), UpperBoundJohnson (7.1-3), UpperBoundPlotkin (7.1-4), UpperBoundElias (7.1-5) and UpperBoundGriesmer (7.1-6)).

Next we describe a function that computes GUAVA's best upper bound on the code size (see UpperBound (7.1-8)).

Then we describe two functions that compute a lower and upper bound on the minimum distance of a code (see LowerBoundMinimumDistance (7.1-9) and UpperBoundMinimumDistance (7.1-12)).

Finally, we describe a function that returns a lower and upper bound on the minimum distance with given parameters and a description of how the bounds were obtained (see BoundsMinimumDistance (7.1-13)).

7.1-1 UpperBoundSingleton
> UpperBoundSingleton( n, d, q )( function )

UpperBoundSingleton returns the Singleton bound for a code of length n, minimum distance d over a field of size q. This bound is based on the shortening of codes. By shortening an (n, M, d) code d-1 times, an (n-d+1,M,1) code results, with M <= q^n-d+1 (see ShortenedCode (6.1-9)). Thus

M \leq q^{n-d+1}.

Codes that meet this bound are called maximum distance separable (see IsMDSCode (4.3-7)).

gap> UpperBoundSingleton(4, 3, 5);
25
gap> C := ReedSolomonCode(4,3);; Size(C);
25
gap> IsMDSCode(C);
true 

7.1-2 UpperBoundHamming
> UpperBoundHamming( n, d, q )( function )

The Hamming bound (also known as the sphere packing bound) returns an upper bound on the size of a code of length n, minimum distance d, over a field of size q. The Hamming bound is obtained by dividing the contents of the entire space GF(q)^n by the contents of a ball with radius lfloor(d-1) / 2rfloor. As all these balls are disjoint, they can never contain more than the whole vector space.

M \leq {q^n \over V(n,e)},

where M is the maxmimum number of codewords and V(n,e) is equal to the contents of a ball of radius e (see SphereContent (7.5-5)). This bound is useful for small values of d. Codes for which equality holds are called perfect (see IsPerfectCode (4.3-6)).

gap> UpperBoundHamming( 15, 3, 2 );
2048
gap> C := HammingCode( 4, GF(2) );
a linear [15,11,3]1 Hamming (4,2) code over GF(2)
gap> Size( C );
2048 

7.1-3 UpperBoundJohnson
> UpperBoundJohnson( n, d )( function )

The Johnson bound is an improved version of the Hamming bound (see UpperBoundHamming (7.1-2)). In addition to the Hamming bound, it takes into account the elements of the space outside the balls of radius e around the elements of the code. The Johnson bound only works for binary codes.

gap> UpperBoundJohnson( 13, 5 );
77
gap> UpperBoundHamming( 13, 5, 2);
89   # in this case the Johnson bound is better 

7.1-4 UpperBoundPlotkin
> UpperBoundPlotkin( n, d, q )( function )

The function UpperBoundPlotkin calculates the sum of the distances of all ordered pairs of different codewords. It is based on the fact that the minimum distance is at most equal to the average distance. It is a good bound if the weights of the codewords do not differ much. It results in:

M \leq {d \over {d-(1-1/q)n}},

where M is the maximum number of codewords. In this case, d must be larger than (1-1/q)n, but by shortening the code, the case d < (1-1/q)n is covered.

gap> UpperBoundPlotkin( 15, 7, 2 );
32
gap> C := BCHCode( 15, 7, GF(2) );
a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
gap> Size(C);
32
gap> WeightDistribution(C);
[ 1, 0, 0, 0, 0, 0, 0, 15, 15, 0, 0, 0, 0, 0, 0, 1 ] 

7.1-5 UpperBoundElias
> UpperBoundElias( n, d, q )( function )

The Elias bound is an improvement of the Plotkin bound (see UpperBoundPlotkin (7.1-4)) for large codes. Subcodes are used to decrease the size of the code, in this case the subcode of all codewords within a certain ball. This bound is useful for large codes with relatively small minimum distances.

gap> UpperBoundPlotkin( 16, 3, 2 );
12288
gap> UpperBoundElias( 16, 3, 2 );
10280 
gap> UpperBoundElias( 20, 10, 3 );
16255

7.1-6 UpperBoundGriesmer
> UpperBoundGriesmer( n, d, q )( function )

The Griesmer bound is valid only for linear codes. It is obtained by counting the number of equal symbols in each row of the generator matrix of the code. By omitting the coordinates in which all rows have a zero, a smaller code results. The Griesmer bound is obtained by repeating this proces until a trivial code is left in the end.

gap> UpperBoundGriesmer( 13, 5, 2 );
64
gap> UpperBoundGriesmer( 18, 9, 2 );
8        # the maximum number of words for a linear code is 8
gap> Size( PuncturedCode( HadamardCode( 20, 1 ) ) );
20       # this non-linear code has 20 elements 

7.1-7 IsGriesmerCode
> IsGriesmerCode( C )( function )

IsGriesmerCode returns `true' if a linear code C is a Griesmer code, and `false' otherwise. A code is called Griesmer if its length satisfies

n = g[k,d] = \sum_{i=0}^{k-1} \lceil \frac{d}{q^i} \rceil.

gap> IsGriesmerCode( HammingCode( 3, GF(2) ) );
true
gap> IsGriesmerCode( BCHCode( 17, 2, GF(2) ) );
false 

7.1-8 UpperBound
> UpperBound( n, d, q )( function )

UpperBound returns the best known upper bound A(n,d) for the size of a code of length n, minimum distance d over a field of size q. The function UpperBound first checks for trivial cases (like d=1 or n=d), and if the value is in the built-in table. Then it calculates the minimum value of the upper bound using the methods of Singleton (see UpperBoundSingleton (7.1-1)), Hamming (see UpperBoundHamming (7.1-2)), Johnson (see UpperBoundJohnson (7.1-3)), Plotkin (see UpperBoundPlotkin (7.1-4)) and Elias (see UpperBoundElias (7.1-5)). If the code is binary, A(n, 2* ell-1) = A(n+1,2* ell), so the UpperBound takes the minimum of the values obtained from all methods for the parameters (n, 2*ell-1) and (n+1, 2* ell).

gap> UpperBound( 10, 3, 2 );
85
gap> UpperBound( 25, 9, 8 );
1211778792827540 

7.1-9 LowerBoundMinimumDistance
> LowerBoundMinimumDistance( C )( function )

In this form, LowerBoundMinimumDistance returns a lower bound for the minimum distance of code C.

This command can also be called using the syntax LowerBoundMinimumDistance( n, k, F ). In this form, LowerBoundMinimumDistance returns a lower bound for the minimum distance of the best known linear code of length n, dimension k over field F. It uses the mechanism explained in section 7.1-13.

gap> C := BCHCode( 45, 7 );
a cyclic [45,23,7..9]6..16 BCH code, delta=7, b=1 over GF(2)
gap> LowerBoundMinimumDistance( C );
7     # designed distance is lower bound for minimum distance 
gap> LowerBoundMinimumDistance( 45, 23, GF(2) );
10 

7.1-10 LowerBoundGilbertVarshamov
> LowerBoundGilbertVarshamov( n, d, q )( function )

This is the lower bound due (independently) to Gilbert and Varshamov. It says that for each n and d, there exists a linear code having length n and minimum distance d at least of size q^n-1/ SphereContent(n-1,d-2,GF(q)).

gap> LowerBoundGilbertVarshamov(3,2,2);
4
gap> LowerBoundGilbertVarshamov(3,3,2);
1
gap> LowerBoundMinimumDistance(3,3,2);
1
gap> LowerBoundMinimumDistance(3,2,2);
2

7.1-11 LowerBoundSpherePacking
> LowerBoundSpherePacking( n, d, q )( function )

This is the lower bound due (independently) to Gilbert and Varshamov. It says that for each n and r, there exists an unrestricted code at least of size q^n/ SphereContent(n,d,GF(q)) minimum distance d.

gap> LowerBoundSpherePacking(3,2,2);
2
gap> LowerBoundSpherePacking(3,3,2);
1

7.1-12 UpperBoundMinimumDistance
> UpperBoundMinimumDistance( C )( function )

In this form, UpperBoundMinimumDistance returns an upper bound for the minimum distance of code C. For unrestricted codes, it just returns the word length. For linear codes, it takes the minimum of the possibly known value from the method of construction, the weight of the generators, and the value from the table (see 7.1-13).

This command can also be called using the syntax UpperBoundMinimumDistance( n, k, F ). In this form, UpperBoundMinimumDistance returns an upper bound for the minimum distance of the best known linear code of length n, dimension k over field F. It uses the mechanism explained in section 7.1-13.

gap> C := BCHCode( 45, 7 );;
gap> UpperBoundMinimumDistance( C );
9 
gap> UpperBoundMinimumDistance( 45, 23, GF(2) );
11 

7.1-13 BoundsMinimumDistance
> BoundsMinimumDistance( n, k, F )( function )

The function BoundsMinimumDistance calculates a lower and upper bound for the minimum distance of an optimal linear code with word length n, dimension k over field F. The function returns a record with the two bounds and an explanation for each bound. The function Display can be used to show the explanations.

The values for the lower and upper bound are obtained from a table. GUAVA has tables containing lower and upper bounds for q=2 (n <= 257), 3 (n <= 243), 4 (n <= 256). (Current as of 11 May 2006.) These tables were derived from the table of Brouwer. (See [Bro06], http://www.win.tue.nl/~aeb/voorlincod.html for the most recent data.) For codes over other fields and for larger word lengths, trivial bounds are used.

The resulting record can be used in the function BestKnownLinearCode (see BestKnownLinearCode (5.2-14)) to construct a code with minimum distance equal to the lower bound.

gap> bounds := BoundsMinimumDistance( 7, 3 );; DisplayBoundsInfo( bounds );
an optimal linear [7,3,d] code over GF(2) has d=4
------------------------------------------------------------------------------
Lb(7,3)=4, by shortening of:
Lb(8,4)=4, u u+v construction of C1 and C2:
Lb(4,3)=2, dual of the repetition code
Lb(4,1)=4, repetition code
------------------------------------------------------------------------------
Ub(7,3)=4, Griesmer bound
# The lower bound is equal to the upper bound, so a code with
# these parameters is optimal.
gap> C := BestKnownLinearCode( bounds );; Display( C );
a linear [7,3,4]2..3 shortened code of
a linear [8,4,4]2 U U+V construction code of
U: a cyclic [4,3,2]1 dual code of
   a cyclic [4,1,4]2 repetition code over GF(2)
V: a cyclic [4,1,4]2 repetition code over GF(2)

7.2 Covering radius bounds on codes

7.2-1 BoundsCoveringRadius
> BoundsCoveringRadius( C )( function )

BoundsCoveringRadius returns a list of integers. The first entry of this list is the maximum of some lower bounds for the covering radius of C, the last entry the minimum of some upper bounds of C.

If the covering radius of C is known, a list of length 1 is returned. BoundsCoveringRadius makes use of the functions GeneralLowerBoundCoveringRadius and GeneralUpperBoundCoveringRadius.

gap> BoundsCoveringRadius( BCHCode( 17, 3, GF(2) ) );
[ 3 .. 4 ]
gap> BoundsCoveringRadius( HammingCode( 5, GF(2) ) );
[ 1 ] 

7.2-2 IncreaseCoveringRadiusLowerBound
> IncreaseCoveringRadiusLowerBound( C[, stopdist][, startword] )( function )

IncreaseCoveringRadiusLowerBound tries to increase the lower bound of the covering radius of C. It does this by means of a probabilistic algorithm. This algorithm takes a random word in GF(q)^n (or startword if it is specified), and, by changing random coordinates, tries to get as far from C as possible. If changing a coordinate finds a word that has a larger distance to the code than the previous one, the change is made permanent, and the algorithm starts all over again. If changing a coordinate does not find a coset leader that is further away from the code, then the change is made permanent with a chance of 1 in 100, if it gets the word closer to the code, or with a chance of 1 in 10, if the word stays at the same distance. Otherwise, the algorithm starts again with the same word as before.

If the algorithm did not allow changes that decrease the distance to the code, it might get stuck in a sub-optimal situation (the coset leader corresponding to such a situation - i.e. no coordinate of this coset leader can be changed in such a way that we get at a larger distance from the code - is called an orphan).

If the algorithm finds a word that has distance stopdist to the code, it ends and returns that word, which can be used for further investigations.

The variable InfoCoveringRadius can be set to Print to print the maximum distance reached so far every 1000 runs. The algorithm can be interrupted with ctrl-C, allowing the user to look at the word that is currently being examined (called `current'), or to change the chances that the new word is made permanent (these are called `staychance' and `downchance'). If one of these variables is i, then it corresponds with a i in 100 chance.

At the moment, the algorithm is only useful for codes with small dimension, where small means that the elements of the code fit in the memory. It works with larger codes, however, but when you use it for codes with large dimension, you should be very patient. If running the algorithm quits GAP (due to memory problems), you can change the global variable CRMemSize to a lower value. This might cause the algorithm to run slower, but without quitting GAP. The only way to find out the best value of CRMemSize is by experimenting.

gap> C:=RandomLinearCode(10,5,GF(2));
a  [10,5,?] randomly generated code over GF(2)
gap> IncreaseCoveringRadiusLowerBound(C,10);
Number of runs: 1000  best distance so far: 3
Number of runs: 2000  best distance so far: 3
Number of changes: 100
Number of runs: 3000  best distance so far: 3
Number of runs: 4000  best distance so far: 3
Number of runs: 5000  best distance so far: 3
Number of runs: 6000  best distance so far: 3
Number of runs: 7000  best distance so far: 3
Number of changes: 200
Number of runs: 8000  best distance so far: 3
Number of runs: 9000  best distance so far: 3
Number of runs: 10000  best distance so far: 3
Number of changes: 300
Number of runs: 11000  best distance so far: 3
Number of runs: 12000  best distance so far: 3
Number of runs: 13000  best distance so far: 3
Number of changes: 400
Number of runs: 14000  best distance so far: 3
user interrupt at... 
#
# used ctrl-c to break out of execution
#
... called from 
IncreaseCoveringRadiusLowerBound( code, -1, current ) called from
 function( arguments ) called from read-eval-loop
Entering break read-eval-print loop ...
you can 'quit;' to quit to outer loop, or
you can 'return;' to continue
brk> current;
[ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ]
brk>
gap> CoveringRadius(C);
3

7.2-3 ExhaustiveSearchCoveringRadius
> ExhaustiveSearchCoveringRadius( C )( function )

ExhaustiveSearchCoveringRadius does an exhaustive search to find the covering radius of C. Every time a coset leader of a coset with weight w is found, the function tries to find a coset leader of a coset with weight w+1. It does this by enumerating all words of weight w+1, and checking whether a word is a coset leader. The start weight is the current known lower bound on the covering radius.

gap> C:=RandomLinearCode(10,5,GF(2));
a  [10,5,?] randomly generated code over GF(2)
gap> ExhaustiveSearchCoveringRadius(C);
Trying 3 ...
[ 3 .. 5 ]
gap> CoveringRadius(C);
3

7.2-4 GeneralLowerBoundCoveringRadius
> GeneralLowerBoundCoveringRadius( C )( function )

GeneralLowerBoundCoveringRadius returns a lower bound on the covering radius of C. It uses as many functions which names start with LowerBoundCoveringRadius as possible to find the best known lower bound (at least that GUAVA knows of) together with tables for the covering radius of binary linear codes with length not greater than 64.

gap> C:=RandomLinearCode(10,5,GF(2));
a  [10,5,?] randomly generated code over GF(2)
gap> GeneralLowerBoundCoveringRadius(C);
2
gap> CoveringRadius(C);
3

7.2-5 GeneralUpperBoundCoveringRadius
> GeneralUpperBoundCoveringRadius( C )( function )

GeneralUpperBoundCoveringRadius returns an upper bound on the covering radius of C. It uses as many functions which names start with UpperBoundCoveringRadius as possible to find the best known upper bound (at least that GUAVA knows of).

gap> C:=RandomLinearCode(10,5,GF(2));
a  [10,5,?] randomly generated code over GF(2)
gap> GeneralUpperBoundCoveringRadius(C);
4
gap> CoveringRadius(C);
3

7.2-6 LowerBoundCoveringRadiusSphereCovering
> LowerBoundCoveringRadiusSphereCovering( n, M[, F], false )( function )

This command can also be called using the syntax LowerBoundCoveringRadiusSphereCovering( n, r, [F,] true ). If the last argument of LowerBoundCoveringRadiusSphereCovering is false, then it returns a lower bound for the covering radius of a code of size M and length n. Otherwise, it returns a lower bound for the size of a code of length n and covering radius r.

F is the field over which the code is defined. If F is omitted, it is assumed that the code is over GF(2). The bound is computed according to the sphere covering bound:

M \cdot V_q(n,r) \geq q^n

where V_q(n,r) is the size of a sphere of radius r in GF(q)^n.

gap> C:=RandomLinearCode(10,5,GF(2));
a  [10,5,?] randomly generated code over GF(2)
gap> Size(C);
32
gap> CoveringRadius(C);
3
gap> LowerBoundCoveringRadiusSphereCovering(10,32,GF(2),false);
2
gap> LowerBoundCoveringRadiusSphereCovering(10,3,GF(2),true);
6

7.2-7 LowerBoundCoveringRadiusVanWee1
> LowerBoundCoveringRadiusVanWee1( n, M[, F], false )( function )

This command can also be called using the syntax LowerBoundCoveringRadiusVanWee1( n, r, [F,] true ). If the last argument of LowerBoundCoveringRadiusVanWee1 is false, then it returns a lower bound for the covering radius of a code of size M and length n. Otherwise, it returns a lower bound for the size of a code of length n and covering radius r.

F is the field over which the code is defined. If F is omitted, it is assumed that the code is over GF(2).

The Van Wee bound is an improvement of the sphere covering bound:

M \cdot \left\{ V_q(n,r) - \frac{{n \choose r}}{\lceil\frac{n-r}{r+1}\rceil} \left(\left\lceil\frac{n+1}{r+1}\right\rceil - \frac{n+1}{r+1}\right) \right\} \geq q^n

gap> C:=RandomLinearCode(10,5,GF(2));
a  [10,5,?] randomly generated code over GF(2)
gap> Size(C);
32
gap> CoveringRadius(C);
3
gap> LowerBoundCoveringRadiusVanWee1(10,32,GF(2),false);
2
gap> LowerBoundCoveringRadiusVanWee1(10,3,GF(2),true);
6

7.2-8 LowerBoundCoveringRadiusVanWee2
> LowerBoundCoveringRadiusVanWee2( n, M, false )( function )

This command can also be called using the syntax LowerBoundCoveringRadiusVanWee2( n, r [,true] ). If the last argument of LowerBoundCoveringRadiusVanWee2 is false, then it returns a lower bound for the covering radius of a code of size M and length n. Otherwise, it returns a lower bound for the size of a code of length n and covering radius r.

This bound only works for binary codes. It is based on the following inequality:

M \cdot \frac{\left( \left( V_2(n,2) - \frac{1}{2}(r+2)(r-1) \right) V_2(n,r) + \varepsilon V_2(n,r-2) \right)} {(V_2(n,2) - \frac{1}{2}(r+2)(r-1) + \varepsilon)} \geq 2^n,

where

\varepsilon = {r+2 \choose 2} \left\lceil {n-r+1 \choose 2} / {r+2 \choose 2} \right\rceil - {n-r+1 \choose 2}.

gap> C:=RandomLinearCode(10,5,GF(2));
a  [10,5,?] randomly generated code over GF(2)
gap> Size(C);
32
gap> CoveringRadius(C);
3
gap> LowerBoundCoveringRadiusVanWee2(10,32,false);
2
gap> LowerBoundCoveringRadiusVanWee2(10,3,true);
7

7.2-9 LowerBoundCoveringRadiusCountingExcess
> LowerBoundCoveringRadiusCountingExcess( n, M, false )( function )

This command can also be called with LowerBoundCoveringRadiusCountingExcess( n, r [,true] ). If the last argument of LowerBoundCoveringRadiusCountingExcess is false, then it returns a lower bound for the covering radius of a code of size M and length n. Otherwise, it returns a lower bound for the size of a code of length n and covering radius r.

This bound only works for binary codes. It is based on the following inequality:

M \cdot \left( \rho V_2(n,r) + \varepsilon V_2(n,r-1) \right) \geq (\rho + \varepsilon) 2^n,

where

\varepsilon = (r+1) \left\lceil\frac{n+1}{r+1}\right\rceil - (n+1)

and

\rho = \left\{ \begin{array}{l} n-3+\frac{2}{n}, \ \ \ \ \ \ {\rm if}\ r = 2\\ n-r-1 , \ \ \ \ \ \ {\rm if}\ r \geq 3 . \end{array} \right.

gap> C:=RandomLinearCode(10,5,GF(2));
a  [10,5,?] randomly generated code over GF(2)
gap> Size(C);
32
gap> CoveringRadius(C);
3
gap> LowerBoundCoveringRadiusCountingExcess(10,32,false);
0
gap> LowerBoundCoveringRadiusCountingExcess(10,3,true);
7

7.2-10 LowerBoundCoveringRadiusEmbedded1
> LowerBoundCoveringRadiusEmbedded1( n, M, false )( function )

This command can also be called with LowerBoundCoveringRadiusEmbedded1( n, r [,true] ). If the last argument of LowerBoundCoveringRadiusEmbedded1 is 'false', then it returns a lower bound for the covering radius of a code of size M and length n. Otherwise, it returns a lower bound for the size of a code of length n and covering radius r.

This bound only works for binary codes. It is based on the following inequality:

M \cdot \left( V_2(n,r) - {2r \choose r} \right) \geq 2^n - A( n, 2r+1 ) {2r \choose r},

where A(n,d) denotes the maximal cardinality of a (binary) code of length n and minimum distance d. The function UpperBound is used to compute this value.

Sometimes LowerBoundCoveringRadiusEmbedded1 is better than LowerBoundCoveringRadiusEmbedded2, sometimes it is the other way around.

gap> C:=RandomLinearCode(10,5,GF(2));
a  [10,5,?] randomly generated code over GF(2)
gap> Size(C);
32
gap> CoveringRadius(C);
3
gap> LowerBoundCoveringRadiusEmbedded1(10,32,false);
2
gap> LowerBoundCoveringRadiusEmbedded1(10,3,true);
7

7.2-11 LowerBoundCoveringRadiusEmbedded2
> LowerBoundCoveringRadiusEmbedded2( n, M, false )( function )

This command can also be called with LowerBoundCoveringRadiusEmbedded2( n, r [,true] ). If the last argument of LowerBoundCoveringRadiusEmbedded2 is 'false', then it returns a lower bound for the covering radius of a code of size M and length n. Otherwise, it returns a lower bound for the size of a code of length n and covering radius r.

This bound only works for binary codes. It is based on the following inequality:

M \cdot \left( V_2(n,r) - \frac{3}{2} {2r \choose r} \right) \geq 2^n - 2A( n, 2r+1 ) {2r \choose r},

where A(n,d) denotes the maximal cardinality of a (binary) code of length n and minimum distance d. The function UpperBound is used to compute this value.

Sometimes LowerBoundCoveringRadiusEmbedded1 is better than LowerBoundCoveringRadiusEmbedded2, sometimes it is the other way around.

gap> C:=RandomLinearCode(15,5,GF(2));
a  [15,5,?] randomly generated code over GF(2)
gap> Size(C);
32
gap> CoveringRadius(C);
6
gap> LowerBoundCoveringRadiusEmbedded2(10,32,false);
2
gap> LowerBoundCoveringRadiusEmbedded2(10,3,true);
7

7.2-12 LowerBoundCoveringRadiusInduction
> LowerBoundCoveringRadiusInduction( n, r )( function )

LowerBoundCoveringRadiusInduction returns a lower bound for the size of a code with length n and covering radius r.

If n = 2r+2 and r >= 1, the returned value is 4.

If n = 2r+3 and r >= 1, the returned value is 7.

If n = 2r+4 and r >= 4, the returned value is 8.

Otherwise, 0 is returned.

gap> C:=RandomLinearCode(15,5,GF(2));
a  [15,5,?] randomly generated code over GF(2)
gap> CoveringRadius(C);
5
gap> LowerBoundCoveringRadiusInduction(15,6);
7

7.2-13 UpperBoundCoveringRadiusRedundancy
> UpperBoundCoveringRadiusRedundancy( C )( function )

UpperBoundCoveringRadiusRedundancy returns the redundancy of C as an upper bound for the covering radius of C. C must be a linear code.

gap> C:=RandomLinearCode(15,5,GF(2));
a  [15,5,?] randomly generated code over GF(2)
gap> CoveringRadius(C);
5
gap> UpperBoundCoveringRadiusRedundancy(C);
10

7.2-14 UpperBoundCoveringRadiusDelsarte
> UpperBoundCoveringRadiusDelsarte( C )( function )

UpperBoundCoveringRadiusDelsarte returns an upper bound for the covering radius of C. This upper bound is equal to the external distance of C, this is the minimum distance of the dual code, if C is a linear code.

This is described in Theorem 11.3.3 of [HP03].

gap> C:=RandomLinearCode(15,5,GF(2));
a  [15,5,?] randomly generated code over GF(2)
gap> CoveringRadius(C);
5
gap> UpperBoundCoveringRadiusDelsarte(C);
13

7.2-15 UpperBoundCoveringRadiusStrength
> UpperBoundCoveringRadiusStrength( C )( function )

UpperBoundCoveringRadiusStrength returns an upper bound for the covering radius of C.

First the code is punctured at the zero coordinates (i.e. the coordinates where all codewords have a zero). If the remaining code has strength 1 (i.e. each coordinate contains each element of the field an equal number of times), then it returns fracq-1qm + (n-m) (where q is the size of the field and m is the length of punctured code), otherwise it returns n. This bound works for all codes.

gap> C:=RandomLinearCode(15,5,GF(2));
a  [15,5,?] randomly generated code over GF(2)
gap> CoveringRadius(C);
5
gap> UpperBoundCoveringRadiusStrength(C);
7

7.2-16 UpperBoundCoveringRadiusGriesmerLike
> UpperBoundCoveringRadiusGriesmerLike( C )( function )

This function returns an upper bound for the covering radius of C, which must be linear, in a Griesmer-like fashion. It returns

n - \sum_{i=1}^k \left\lceil \frac{d}{q^i} \right\rceil

gap> C:=RandomLinearCode(15,5,GF(2));
a  [15,5,?] randomly generated code over GF(2)
gap> CoveringRadius(C);
5
gap> UpperBoundCoveringRadiusGriesmerLike(C);
9

7.2-17 UpperBoundCoveringRadiusCyclicCode
> UpperBoundCoveringRadiusCyclicCode( C )( function )

This function returns an upper bound for the covering radius of C, which must be a cyclic code. It returns

n - k + 1 - \left\lceil \frac{w(g(x))}{2} \right\rceil,

where g(x) is the generator polynomial of C.

gap> C:=CyclicCodes(15,GF(2))[3];
a cyclic [15,12,1..2]1..3 enumerated code over GF(2)
gap> CoveringRadius(C);
3
gap> UpperBoundCoveringRadiusCyclicCode(C);
3

7.3 Special matrices in GUAVA

This section explains functions that work with special matrices GUAVA needs for several codes.

Firstly, we describe some matrix generating functions (see KrawtchoukMat (7.3-1), GrayMat (7.3-2), SylvesterMat (7.3-3), HadamardMat (7.3-4) and MOLS (7.3-11)).

Next we describe two functions regarding a standard form of matrices (see PutStandardForm (7.3-6) and IsInStandardForm (7.3-7)).

Then we describe functions that return a matrix after a manipulation (see PermutedCols (7.3-8), VerticalConversionFieldMat (7.3-9) and HorizontalConversionFieldMat (7.3-10)).

Finally, we describe functions that do some tests on matrices (see IsLatinSquare (7.3-12) and AreMOLS (7.3-13)).

7.3-1 KrawtchoukMat
> KrawtchoukMat( n, q )( function )

KrawtchoukMat returns the n+1 by n+1 matrix K=(k_ij) defined by k_ij=K_i(j) for i,j=0,...,n. K_i(j) is the Krawtchouk number (see Krawtchouk (7.5-6)). n must be a positive integer and q a prime power. The Krawtchouk matrix is used in the MacWilliams identities, defining the relation between the weight distribution of a code of length n over a field of size q, and its dual code. Each call to KrawtchoukMat returns a new matrix, so it is safe to modify the result.

gap> PrintArray( KrawtchoukMat( 3, 2 ) );
[ [   1,   1,   1,   1 ],
  [   3,   1,  -1,  -3 ],
  [   3,  -1,  -1,   3 ],
  [   1,  -1,   1,  -1 ] ]
gap> C := HammingCode( 3 );; a := WeightDistribution( C );
[ 1, 0, 0, 7, 7, 0, 0, 1 ]
gap> n := WordLength( C );; q := Size( LeftActingDomain( C ) );;
gap> k := Dimension( C );;
gap> q^( -k ) * KrawtchoukMat( n, q ) * a;
[ 1, 0, 0, 0, 7, 0, 0, 0 ]
gap> WeightDistribution( DualCode( C ) );
[ 1, 0, 0, 0, 7, 0, 0, 0 ] 

7.3-2 GrayMat
> GrayMat( n, F )( function )

GrayMat returns a list of all different vectors (see GAP's Vectors command) of length n over the field F, using Gray ordering. n must be a positive integer. This order has the property that subsequent vectors differ in exactly one coordinate. The first vector is always the null vector. Each call to GrayMat returns a new matrix, so it is safe to modify the result.

gap> GrayMat(3);
[ [ 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0 ],
  [ 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2) ],
  [ Z(2)^0, Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0 ],
  [ Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2) ] ]
gap> G := GrayMat( 4, GF(4) );; Length(G);
256          # the length of a GrayMat is always q^n
gap> G[101] - G[100];
[ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ] 

7.3-3 SylvesterMat
> SylvesterMat( n )( function )

SylvesterMat returns the nx n Sylvester matrix of order n. This is a special case of the Hadamard matrices (see HadamardMat (7.3-4)). For this construction, n must be a power of 2. Each call to SylvesterMat returns a new matrix, so it is safe to modify the result.

gap> PrintArray(SylvesterMat(2));
[ [   1,   1 ],
  [   1,  -1 ] ]
gap> PrintArray( SylvesterMat(4) );
[ [   1,   1,   1,   1 ],
  [   1,  -1,   1,  -1 ],
  [   1,   1,  -1,  -1 ],
  [   1,  -1,  -1,   1 ] ] 

7.3-4 HadamardMat
> HadamardMat( n )( function )

HadamardMat returns a Hadamard matrix of order n. This is an nx n matrix with the property that the matrix multiplied by its transpose returns n times the identity matrix. This is only possible for n=1, n=2 or in cases where n is a multiple of 4. If the matrix does not exist or is not known (as of 1998), HadamardMat returns an error. A large number of construction methods is known to create these matrices for different orders. HadamardMat makes use of two construction methods (the Paley Type I and II constructions, and the Sylvester construction -- see SylvesterMat (7.3-3)). These methods cover most of the possible Hadamard matrices, although some special algorithms have not been implemented yet. The following orders less than 100 do not yet have an implementation for a Hadamard matrix in GUAVA: 52, 92.

gap> C := HadamardMat(8);; PrintArray(C);
[ [   1,   1,   1,   1,   1,   1,   1,   1 ],
  [   1,  -1,   1,  -1,   1,  -1,   1,  -1 ],
  [   1,   1,  -1,  -1,   1,   1,  -1,  -1 ],
  [   1,  -1,  -1,   1,   1,  -1,  -1,   1 ],
  [   1,   1,   1,   1,  -1,  -1,  -1,  -1 ],
  [   1,  -1,   1,  -1,  -1,   1,  -1,   1 ],
  [   1,   1,  -1,  -1,  -1,  -1,   1,   1 ],
  [   1,  -1,  -1,   1,  -1,   1,   1,  -1 ] ]
gap> C * TransposedMat(C) = 8 * IdentityMat( 8, 8 );
true 

7.3-5 VandermondeMat
> VandermondeMat( X, a )( function )

The function VandermondeMat returns the (a+1)x n matrix of powers x_i^j where X is a list of elements of a field, X= x_1,...,x_n, and a is a non-negative integer.

gap> M:=VandermondeMat([Z(5),Z(5)^2,Z(5)^0,Z(5)^3],2);
[ [ Z(5)^0, Z(5), Z(5)^2 ], [ Z(5)^0, Z(5)^2, Z(5)^0 ],
  [ Z(5)^0, Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5)^3, Z(5)^2 ] ]
gap> Display(M);
 1 2 4
 1 4 1
 1 1 1
 1 3 4

7.3-6 PutStandardForm
> PutStandardForm( M[, idleft] )( function )

We say that a kx n matrix is in standard form if it is equal to the block matrix (I | A), for some kx (n-k) matrix A and where I is the kx k identity matrix. It follows from a basis result in linear algebra that, after a possible permutation of the columns, using elementary row operations, every matrix can be reduced to standard form. PutStandardForm puts a matrix M in standard form, and returns the permutation needed to do so. idleft is a boolean that sets the position of the identity matrix in M. (The default for idleft is `true'.) If idleft is set to `true', the identity matrix is put on the left side of M. Otherwise, it is put at the right side. (This option is useful when putting a check matrix of a code into standard form.) The function BaseMat also returns a similar standard form, but does not apply column permutations. The rows of the matrix still span the same vector space after BaseMat, but after calling PutStandardForm, this is not necessarily true.

gap> M := Z(2)*[[1,0,0,1],[0,0,1,1]];; PrintArray(M);
[ [    Z(2),  0*Z(2),  0*Z(2),    Z(2) ],
  [  0*Z(2),  0*Z(2),    Z(2),    Z(2) ] ]
gap> PutStandardForm(M);                   # identity at the left side
(2,3)
gap> PrintArray(M);
[ [    Z(2),  0*Z(2),  0*Z(2),    Z(2) ],
  [  0*Z(2),    Z(2),  0*Z(2),    Z(2) ] ]
gap> PutStandardForm(M, false);            # identity at the right side
(1,4,3)
gap> PrintArray(M);
[ [  0*Z(2),    Z(2),    Z(2),  0*Z(2) ],
  [  0*Z(2),    Z(2),  0*Z(2),    Z(2) ] ]
gap> C := BestKnownLinearCode( 23, 12, GF(2) );
a linear [23,12,7]3 punctured code
gap> G:=MutableCopyMat(GeneratorMat(C));;
gap> PutStandardForm(G);
()
gap> Display(G);
 1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1
 . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . .
 . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1
 . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 .
 . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . 1
 . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 1
 . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1
 . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . .
 . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 .
 . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 .
 . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 1
 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1

7.3-7 IsInStandardForm
> IsInStandardForm( M[, idleft] )( function )

IsInStandardForm determines if M is in standard form. idleft is a boolean that indicates the position of the identity matrix in M, as in PutStandardForm (see PutStandardForm (7.3-6)). IsInStandardForm checks if the identity matrix is at the left side of M, otherwise if it is at the right side. The elements of M may be elements of any field.

gap> IsInStandardForm(IdentityMat(7, GF(2)));
true
gap> IsInStandardForm([[1, 1, 0], [1, 0, 1]], false);
true
gap> IsInStandardForm([[1, 3, 2, 7]]);
true
gap> IsInStandardForm(HadamardMat(4));
false 

7.3-8 PermutedCols
> PermutedCols( M, P )( function )

PermutedCols returns a matrix M with a permutation P applied to its columns.

gap> M := [[1,2,3,4],[1,2,3,4]];; PrintArray(M);
[ [  1,  2,  3,  4 ],
  [  1,  2,  3,  4 ] ]
gap> PrintArray(PermutedCols(M, (1,2,3)));
[ [  3,  1,  2,  4 ],
  [  3,  1,  2,  4 ] ] 

7.3-9 VerticalConversionFieldMat
> VerticalConversionFieldMat( M, F )( function )

VerticalConversionFieldMat returns the matrix M with its elements converted from a field F=GF(q^m), q prime, to a field GF(q). Each element is replaced by its representation over the latter field, placed vertically in the matrix, using the GF(p)-vector space isomorphism

[...] : GF(q)\rightarrow GF(p)^m,

with q=p^m.

If M is a k by n matrix, the result is a k* m x n matrix, since each element of GF(q^m) can be represented in GF(q) using m elements.

gap> M := Z(9)*[[1,2],[2,1]];; PrintArray(M);
[ [    Z(3^2),  Z(3^2)^5 ],
  [  Z(3^2)^5,    Z(3^2) ] ]
gap> DefaultField( Flat(M) );
GF(3^2)
gap> VCFM := VerticalConversionFieldMat( M, GF(9) );; PrintArray(VCFM);
[ [  0*Z(3),  0*Z(3) ],
  [  Z(3)^0,    Z(3) ],
  [  0*Z(3),  0*Z(3) ],
  [    Z(3),  Z(3)^0 ] ]
gap> DefaultField( Flat(VCFM) );
GF(3) 

A similar function is HorizontalConversionFieldMat (see HorizontalConversionFieldMat (7.3-10)).

7.3-10 HorizontalConversionFieldMat
> HorizontalConversionFieldMat( M, F )( function )

HorizontalConversionFieldMat returns the matrix M with its elements converted from a field F=GF(q^m), q prime, to a field GF(q). Each element is replaced by its representation over the latter field, placed horizontally in the matrix.

If M is a k x n matrix, the result is a kx mx n* m matrix. The new word length of the resulting code is equal to n* m, because each element of GF(q^m) can be represented in GF(q) using m elements. The new dimension is equal to kx m because the new matrix should be a basis for the same number of vectors as the old one.

ConversionFieldCode uses horizontal conversion to convert a code (see ConversionFieldCode (6.1-15)).

gap> M := Z(9)*[[1,2],[2,1]];; PrintArray(M);
[ [    Z(3^2),  Z(3^2)^5 ],
  [  Z(3^2)^5,    Z(3^2) ] ]
gap> DefaultField( Flat(M) );
GF(3^2)
gap> HCFM := HorizontalConversionFieldMat(M, GF(9));; PrintArray(HCFM);
[ [  0*Z(3),  Z(3)^0,  0*Z(3),    Z(3) ],
  [  Z(3)^0,  Z(3)^0,    Z(3),    Z(3) ],
  [  0*Z(3),    Z(3),  0*Z(3),  Z(3)^0 ],
  [    Z(3),    Z(3),  Z(3)^0,  Z(3)^0 ] ]
gap> DefaultField( Flat(HCFM) );
GF(3) 

A similar function is VerticalConversionFieldMat (see VerticalConversionFieldMat (7.3-9)).

7.3-11 MOLS
> MOLS( q[, n] )( function )

MOLS returns a list of n Mutually Orthogonal Latin Squares (MOLS). A Latin square of order q is a qx q matrix whose entries are from a set F_q of q distinct symbols (GUAVA uses the integers from 0 to q) such that each row and each column of the matrix contains each symbol exactly once.

A set of Latin squares is a set of MOLS if and only if for each pair of Latin squares in this set, every ordered pair of elements that are in the same position in these matrices occurs exactly once.

n must be less than q. If n is omitted, two MOLS are returned. If q is not a prime power, at most 2 MOLS can be created. For all values of q with q > 2 and q <> 6, a list of MOLS can be constructed. However, GUAVA does not yet construct MOLS for q= 2 mod 4. If it is not possible to construct n MOLS, the function returns `false'.

MOLS are used to create q-ary codes (see MOLSCode (5.1-4)).

gap> M := MOLS( 4, 3 );;PrintArray( M[1] );
[ [  0,  1,  2,  3 ],
  [  1,  0,  3,  2 ],
  [  2,  3,  0,  1 ],
  [  3,  2,  1,  0 ] ]
gap> PrintArray( M[2] );
[ [  0,  2,  3,  1 ],
  [  1,  3,  2,  0 ],
  [  2,  0,  1,  3 ],
  [  3,  1,  0,  2 ] ]
gap> PrintArray( M[3] );
[ [  0,  3,  1,  2 ],
  [  1,  2,  0,  3 ],
  [  2,  1,  3,  0 ],
  [  3,  0,  2,  1 ] ]
gap> MOLS( 12, 3 );
false 

7.3-12 IsLatinSquare
> IsLatinSquare( M )( function )

IsLatinSquare determines if a matrix M is a Latin square. For a Latin square of size nx n, each row and each column contains all the integers 1,dots,n exactly once.

gap> IsLatinSquare([[1,2],[2,1]]);
true
gap> IsLatinSquare([[1,2,3],[2,3,1],[1,3,2]]);
false 

7.3-13 AreMOLS
> AreMOLS( L )( function )

AreMOLS determines if L is a list of mutually orthogonal Latin squares (MOLS). For each pair of Latin squares in this list, the function checks if each ordered pair of elements that are in the same position in these matrices occurs exactly once. The function MOLS creates MOLS (see MOLS (7.3-11)).

gap> M := MOLS(4,2);
[ [ [ 0, 1, 2, 3 ], [ 1, 0, 3, 2 ], [ 2, 3, 0, 1 ], [ 3, 2, 1, 0 ] ],
  [ [ 0, 2, 3, 1 ], [ 1, 3, 2, 0 ], [ 2, 0, 1, 3 ], [ 3, 1, 0, 2 ] ] ]
gap> AreMOLS(M);
true 

7.4 Some functions related to the norm of a code

In this section, some functions that can be used to compute the norm of a code and to decide upon its normality are discussed. Typically, these are applied to binary linear codes. The definitions of this section were introduced in Graham and Sloane [GS85].

7.4-1 CoordinateNorm
> CoordinateNorm( C, coord )( function )

CoordinateNorm returns the norm of C with respect to coordinate coord. If C_a = c in C | c_coord = a, then the norm of C with respect to coord is defined as

\max_{v \in GF(q)^n} \sum_{a=1}^q d(x,C_a),

with the convention that d(x,C_a) = n if C_a is empty.

gap> CoordinateNorm( HammingCode( 3, GF(2) ), 3 );
3 

7.4-2 CodeNorm
> CodeNorm( C )( function )

CodeNorm returns the norm of C. The norm of a code is defined as the minimum of the norms for the respective coordinates of the code. In effect, for each coordinate CoordinateNorm is called, and the minimum of the calculated numbers is returned.

gap> CodeNorm( HammingCode( 3, GF(2) ) );
3 

7.4-3 IsCoordinateAcceptable
> IsCoordinateAcceptable( C, coord )( function )

IsCoordinateAcceptable returns `true' if coordinate coord of C is acceptable. A coordinate is called acceptable if the norm of the code with respect to that coordinate is not more than two times the covering radius of the code plus one.

gap> IsCoordinateAcceptable( HammingCode( 3, GF(2) ), 3 );
true 

7.4-4 GeneralizedCodeNorm
> GeneralizedCodeNorm( C, subcode1, subscode2, ..., subcodek )( function )

GeneralizedCodeNorm returns the k-norm of C with respect to k subcodes.

gap> c := RepetitionCode( 7, GF(2) );;
gap> ham := HammingCode( 3, GF(2) );;
gap> d := EvenWeightSubcode( ham );;
gap> e := ConstantWeightSubcode( ham, 3 );;
gap> GeneralizedCodeNorm( ham, c, d, e );
4 

7.4-5 IsNormalCode
> IsNormalCode( C )( function )

IsNormalCode returns `true' if C is normal. A code is called normal if the norm of the code is not more than two times the covering radius of the code plus one. Almost all codes are normal, however some (non-linear) abnormal codes have been found.

Often, it is difficult to find out whether a code is normal, because it involves computing the covering radius. However, IsNormalCode uses much information from the literature (in particular, [GS85]) about normality for certain code parameters.

gap> IsNormalCode( HammingCode( 3, GF(2) ) );
true 

7.5 Miscellaneous functions

In this section we describe several vector space functions GUAVA uses for constructing codes or performing calculations with codes.

In this section, some new miscellaneous functions are described, including weight enumerators, the MacWilliams-transform and affinity and almost affinity of codes.

7.5-1 CodeWeightEnumerator
> CodeWeightEnumerator( C )( function )

CodeWeightEnumerator returns a polynomial of the following form:

f(x) = \sum_{i=0}^{n} A_i x^i,

where A_i is the number of codewords in C with weight i.

gap> CodeWeightEnumerator( ElementsCode( [ [ 0,0,0 ], [ 0,0,1 ],
> [ 0,1,1 ], [ 1,1,1 ] ], GF(2) ) );
x^3 + x^2 + x + 1
gap> CodeWeightEnumerator( HammingCode( 3, GF(2) ) );
x^7 + 7*x^4 + 7*x^3 + 1 

7.5-2 CodeDistanceEnumerator
> CodeDistanceEnumerator( C, w )( function )

CodeDistanceEnumerator returns a polynomial of the following form:

f(x) = \sum_{i=0}^{n} B_i x^i,

where B_i is the number of codewords with distance i to w.

If w is a codeword, then CodeDistanceEnumerator returns the same polynomial as CodeWeightEnumerator.

gap> CodeDistanceEnumerator( HammingCode( 3, GF(2) ),[0,0,0,0,0,0,1] );
x^6 + 3*x^5 + 4*x^4 + 4*x^3 + 3*x^2 + x
gap> CodeDistanceEnumerator( HammingCode( 3, GF(2) ),[1,1,1,1,1,1,1] );
x^7 + 7*x^4 + 7*x^3 + 1 # `[1,1,1,1,1,1,1]' $\in$ `HammingCode( 3, GF(2 ) )'

7.5-3 CodeMacWilliamsTransform
> CodeMacWilliamsTransform( C )( function )

CodeMacWilliamsTransform returns a polynomial of the following form:

f(x) = \sum_{i=0}^{n} C_i x^i,

where C_i is the number of codewords with weight i in the dual code of C.

gap> CodeMacWilliamsTransform( HammingCode( 3, GF(2) ) );
7*x^4 + 1 

7.5-4 CodeDensity
> CodeDensity( C )( function )

CodeDensity returns the density of C. The density of a code is defined as

\frac{M \cdot V_q(n,t)}{q^n},

where M is the size of the code, V_q(n,t) is the size of a sphere of radius t in GF(q^n) (which may be computed using SphereContent), t is the covering radius of the code and n is the length of the code.

gap> CodeDensity( HammingCode( 3, GF(2) ) );
1
gap> CodeDensity( ReedMullerCode( 1, 4 ) );
14893/2048 

7.5-5 SphereContent
> SphereContent( n, t, F )( function )

SphereContent returns the content of a ball of radius t around an arbitrary element of the vectorspace F^n. This is the cardinality of the set of all elements of F^n that are at distance (see DistanceCodeword (3.6-2) less than or equal to t from an element of F^n.

In the context of codes, the function is used to determine if a code is perfect. A code is perfect if spheres of radius t around all codewords partition the whole ambient vector space, where t is the number of errors the code can correct.

gap> SphereContent( 15, 0, GF(2) );
1    # Only one word with distance 0, which is the word itself
gap> SphereContent( 11, 3, GF(4) );
4984
gap> C := HammingCode(5);
a linear [31,26,3]1 Hamming (5,2) code over GF(2)
#the minimum distance is 3, so the code can correct one error
gap> ( SphereContent( 31, 1, GF(2) ) * Size(C) ) = 2 ^ 31;
true 

7.5-6 Krawtchouk
> Krawtchouk( k, i, n, q )( function )

Krawtchouk returns the Krawtchouk number K_k(i). q must be a prime power, n must be a positive integer, k must be a non-negative integer less then or equal to n and i can be any integer. (See KrawtchoukMat (7.3-1)). This number is the value at x=i of the polynomial

K_k^{n,q}(x) =\sum_{j=0}^n (-1)^j(q-1)^{k-j}b(x,j)b(n-x,k-j),

where $b(v,u)=u!/(v!(v-u)!)$ is the binomial coefficient if $u,v$ are integers. For more properties of these polynomials, see [MS83].

gap> Krawtchouk( 2, 0, 3, 2);
3 

7.5-7 PrimitiveUnityRoot
> PrimitiveUnityRoot( F, n )( function )

PrimitiveUnityRoot returns a primitive n-th root of unity in an extension field of F. This is a finite field element a with the property a^n=1 in F, and n is the smallest integer such that this equality holds.

gap> PrimitiveUnityRoot( GF(2), 15 );
Z(2^4)
gap> last^15;
Z(2)^0
gap> PrimitiveUnityRoot( GF(8), 21 );
Z(2^6)^3 

7.5-8 PrimitivePolynomialsNr
> PrimitivePolynomialsNr( n, F )( function )

PrimitivePolynomialsNr returns the number of irreducible polynomials over F=GF(q) of degree n with (maximum) period q^n-1. (According to a theorem of S. Golomb, this is phi(p^n-1)/n.)

See also the GAP function RandomPrimitivePolynomial, RandomPrimitivePolynomial (2.2-2).

gap> PrimitivePolynomialsNr(3,4);
12

7.5-9 IrreduciblePolynomialsNr
> IrreduciblePolynomialsNr( n, F )( function )

PrimitivePolynomialsNr returns the number of irreducible polynomials over F=GF(q) of degree n.

gap> IrreduciblePolynomialsNr(3,4);
20

7.5-10 MatrixRepresentationOfElement
> MatrixRepresentationOfElement( a, F )( function )

Here F is either a finite extension of the ``base field'' GF(p) or of the rationals Q}, and ain F. The command MatrixRepresentationOfElement returns a matrix representation of a over the base field.

If the element a is defined over the base field then it returns the corresponding 1x 1 matrix.

gap> a:=Random(GF(4));
0*Z(2)
gap> M:=MatrixRepresentationOfElement(a,GF(4));; Display(M);
 .
gap> a:=Random(GF(4));
Z(2^2)
gap> M:=MatrixRepresentationOfElement(a,GF(4));; Display(M);
 . 1
 1 1
gap>

7.5-11 ReciprocalPolynomial
> ReciprocalPolynomial( P )( function )

ReciprocalPolynomial returns the reciprocal of polynomial P. This is a polynomial with coefficients of P in the reverse order. So if P=a_0 + a_1 X + ... + a_n X^n, the reciprocal polynomial is P'=a_n + a_n-1 X + ... + a_0 X^n.

This command can also be called using the syntax ReciprocalPolynomial( P , n ). In this form, the number of coefficients of P is assumed to be less than or equal to n+1 (with zero coefficients added in the highest degrees, if necessary). Therefore, the reciprocal polynomial also has degree n+1.

gap> P := UnivariatePolynomial( GF(3), Z(3)^0 * [1,0,1,2] );
Z(3)^0+x_1^2-x_1^3
gap> RecP := ReciprocalPolynomial( P );
-Z(3)^0+x_1+x_1^3
gap> ReciprocalPolynomial( RecP ) = P;
true 
gap> P := UnivariatePolynomial( GF(3), Z(3)^0 * [1,0,1,2] );
Z(3)^0+x_1^2-x_1^3
gap> ReciprocalPolynomial( P, 6 );
-x_1^3+x_1^4+x_1^6

7.5-12 CyclotomicCosets
> CyclotomicCosets( q, n )( function )

CyclotomicCosets returns the cyclotomic cosets of q mod n. q and n must be relatively prime. Each of the elements of the returned list is a list of integers that belong to one cyclotomic coset. A q-cyclotomic coset of s mod n is a set of the form s,sq,sq^2,...,sq^r-1, where r is the smallest positive integer such that sq^r-s is 0 mod n. In other words, each coset contains all multiplications of the coset representative by q mod n. The coset representative is the smallest integer that isn't in the previous cosets.

gap> CyclotomicCosets( 2, 15 );
[ [ 0 ], [ 1, 2, 4, 8 ], [ 3, 6, 12, 9 ], [ 5, 10 ],
  [ 7, 14, 13, 11 ] ]
gap> CyclotomicCosets( 7, 6 );
[ [ 0 ], [ 1 ], [ 2 ], [ 3 ], [ 4 ], [ 5 ] ] 

7.5-13 WeightHistogram
> WeightHistogram( C[, h] )( function )

The function WeightHistogram plots a histogram of weights in code C. The maximum length of a column is h. Default value for h is 1/3 of the size of the screen. The number that appears at the top of the histogram is the maximum value of the list of weights.

gap> H := HammingCode(2, GF(5));
a linear [6,4,3]1 Hamming (2,5) code over GF(5)
gap> WeightDistribution(H);
[ 1, 0, 0, 80, 120, 264, 160 ]
gap> WeightHistogram(H);
264----------------
               *
               *
               *
               *
               *  *
            *  *  *
         *  *  *  *
         *  *  *  *
+--------+--+--+--+--
0  1  2  3  4  5  6 

7.5-14 MultiplicityInList
> MultiplicityInList( L, a )( function )

This is a very simple list command which returns how many times a occurs in L. It returns 0 if a is not in L. (The GAP command Collected does not quite handle this "extreme" case.)

gap> L:=[1,2,3,4,3,2,1,5,4,3,2,1];;
gap> MultiplicityInList(L,1);
3
gap> MultiplicityInList(L,6);
0

7.5-15 MostCommonInList
> MostCommonInList( L )( function )

Input: a list L

Output: an a in L which occurs at least as much as any other in L

gap> L:=[1,2,3,4,3,2,1,5,4,3,2,1];;
gap> MostCommonInList(L);
1

7.5-16 RotateList
> RotateList( L )( function )

Input: a list L

Output: a list L' which is the cyclic rotation of L (to the right)

gap> L:=[1,2,3,4];;
gap> RotateList(L);
[2,3,4,1]

7.5-17 CirculantMatrix
> CirculantMatrix( k, L )( function )

Input: integer k, a list L of length n

Output: kxn matrix whose rows are cyclic rotations of the list L

gap> k:=3; L:=[1,2,3,4];;
gap> M:=CirculantMatrix(k,L);;
gap> Display(M);

7.6 Miscellaneous polynomial functions

In this section we describe several multivariate polynomial GAP functions GUAVA uses for constructing codes or performing calculations with codes.

7.6-1 MatrixTransformationOnMultivariatePolynomial
> MatrixTransformationOnMultivariatePolynomial ( AfR )( function )

A is an nx n matrix with entries in a field F, R is a polynomial ring of n variables, say F[x_1,...,x_n], and f is a polynomial in R. Returns the composition fcirc A.

7.6-2 DegreeMultivariatePolynomial
> DegreeMultivariatePolynomial( f, R )( function )

This command takes two arguments, f, a multivariate polynomial, and R a polynomial ring over a field F containing f, say R=F[x_1,x_2,...,x_n]. The output is simply the maximum degrees of all the monomials occurring in f.

This command can be used to compute the degree of an affine plane curve.

gap> F:=GF(11);;
gap> R2:=PolynomialRing(F,2);
PolynomialRing(..., [ x_1, x_2 ])
gap> vars:=IndeterminatesOfPolynomialRing(R2);;
gap> x:=vars[1];; y:=vars[2];;
gap> poly:=y^2-x*(x^2-1);;
gap> DegreeMultivariatePolynomial(poly,R2);
3

7.6-3 DegreesMultivariatePolynomial
> DegreesMultivariatePolynomial( f, R )( function )

Returns a list of information about the multivariate polynomial f. Nice for other programs but mostly unreadable by GAP users.

gap> F:=GF(11);;
gap> R2:=PolynomialRing(F,2);
PolynomialRing(..., [ x_1, x_2 ])
gap> vars:=IndeterminatesOfPolynomialRing(R2);;
gap> x:=vars[1];; y:=vars[2];;
gap> poly:=y^2-x*(x^2-1);;
gap> DegreesMultivariatePolynomial(poly,R2);
[ [ [ x_1, x_1, 1 ], [ x_1, x_2, 0 ] ], [ [ x_2^2, x_1, 0 ], [ x_2^2, x_2, 2 ] ],
  [ [ x_1^3, x_1, 3 ], [ x_1^3, x_2, 0 ] ] ]
gap>

7.6-4 CoefficientMultivariatePolynomial
> CoefficientMultivariatePolynomial( f, var, power, R )( function )

The command CoefficientMultivariatePolynomial takes four arguments: a multivariant polynomial f, a variable name var, an integer power, and a polynomial ring R containing f. For example, if f is a multivariate polynomial in R = F[x_1,x_2,...,x_n] then var must be one of the x_i. The output is the coefficient of x_i^power in f.

(Not sure if F needs to be a field in fact ...)

Related to the GAP command PolynomialCoefficientsPolynomial.

gap> F:=GF(11);;
gap> R2:=PolynomialRing(F,2);
PolynomialRing(..., [ x_1, x_2 ])
gap> vars:=IndeterminatesOfPolynomialRing(R2);;
gap> x:=vars[1];; y:=vars[2];;
gap> poly:=y^2-x*(x^2-1);;
gap> PolynomialCoefficientsOfPolynomial(poly,x);
[ x_2^2, Z(11)^0, 0*Z(11), -Z(11)^0 ]
gap> PolynomialCoefficientsOfPolynomial(poly,y);
[ -x_1^3+x_1, 0*Z(11), Z(11)^0 ]
gap> CoefficientMultivariatePolynomial(poly,y,0,R2);
-x_1^3+x_1
gap> CoefficientMultivariatePolynomial(poly,y,1,R2);
0*Z(11)
gap> CoefficientMultivariatePolynomial(poly,y,2,R2);
Z(11)^0
gap> CoefficientMultivariatePolynomial(poly,x,0,R2);
x_2^2
gap> CoefficientMultivariatePolynomial(poly,x,1,R2);
Z(11)^0
gap> CoefficientMultivariatePolynomial(poly,x,2,R2);
0*Z(11)
gap> CoefficientMultivariatePolynomial(poly,x,3,R2);
-Z(11)^0

7.6-5 SolveLinearSystem
> SolveLinearSystem( L, vars )( function )

Input: L is a list of linear forms in the variables vars.

Output: the solution of the system, if its unique.

The procedure is straightforward: Find the associated matrix A, find the "constant vector" b, and solve A*v=b. No error checking is performed.

Related to the GAP command SolutionMat( A, b ).

gap> F:=GF(11);;
gap> R2:=PolynomialRing(F,2);
PolynomialRing(..., [ x_1, x_2 ])
gap> vars:=IndeterminatesOfPolynomialRing(R2);;
gap> x:=vars[1];; y:=vars[2];;
gap> f:=3*y-3*x+1;; g:=-5*y+2*x-7;;
gap> soln:=SolveLinearSystem([f,g],[x,y]);
[ Z(11)^3, Z(11)^2 ]
gap> Value(f,[x,y],soln); # checking okay
0*Z(11)
gap> Value(g,[x,y],col); # checking okay
0*Z(11)

7.6-6 GuavaVersion
> GuavaVersion( )( function )

Returns the current version of Guava. Same as guava\_version().

gap> GuavaVersion();
"2.7"

7.6-7 ZechLog
> ZechLog( x, b, F )( function )

Returns the Zech log of x to base b, ie the i such that $x+1=b^i$, so $y+z=y(1+z/y)=b^k$, where k=Log(y,b)+ZechLog(z/y,b) and b must be a primitive element of F.

gap> F:=GF(11);; l := One(F);;
gap> ZechLog(2*l,8*l,F);
-24
gap> 8*l+l;(2*l)^(-24);
Z(11)^6
Z(11)^6

7.6-8 CoefficientToPolynomial
> CoefficientToPolynomial( coeffs, R )( function )

The function CoefficientToPolynomial returns the degree d-1 polynomial c_0+c_1x+...+c_d-1x^d-1, where coeffs is a list of elements of a field, coeffs= c_0,...,c_d-1, and R is a univariate polynomial ring.

gap> F:=GF(11);
GF(11)
gap> R1:=PolynomialRing(F,["a"]);;
gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
gap> coeffs:=Z(11)^0*[1,2,3,4];
[ Z(11)^0, Z(11), Z(11)^8, Z(11)^2 ]
gap> CoefficientToPolynomial(coeffs,R1);
Z(11)^2*a^3+Z(11)^8*a^2+Z(11)*a+Z(11)^0

7.6-9 DegreesMonomialTerm
> DegreesMonomialTerm( m, R )( function )

The function DegreesMonomialTerm returns the list of degrees to which each variable in the multivariate polynomial ring R occurs in the monomial m, where coeffs is a list of elements of a field.

gap> F:=GF(11);
GF(11)
gap> R1:=PolynomialRing(F,["a"]);;
gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
gap> b:=X(F,"b",var1);
b
gap> var2:=Concatenation(var1,[b]);
[ a, b ]
gap> R2:=PolynomialRing(F,var2);
PolynomialRing(..., [ a, b ])
gap> c:=X(F,"c",var2);
c
gap> var3:=Concatenation(var2,[c]);
[ a, b, c ]
gap> R3:=PolynomialRing(F,var3);
PolynomialRing(..., [ a, b, c ])
gap> m:=b^3*c^7;
b^3*c^7
gap> DegreesMonomialTerm(m,R3);
[ 0, 3, 7 ]

7.6-10 DivisorsMultivariatePolynomial
> DivisorsMultivariatePolynomial( f, R )( function )

The function DivisorsMultivariatePolynomial returns the list of polynomial divisors of f in the multivariate polynomial ring R with coefficients in a field. This program uses a simple but slow algorithm (see Joachim von zur Gathen, Jürgen Gerhard, [GG03], exercise 16.10) which first converts the multivariate polynomial f to an associated univariate polynomial f^*, then Factors f^*, and finally converts these univariate factors back into the multivariate polynomial factors of f. Since Factors is non-deterministic, DivisorsMultivariatePolynomial is non-deterministic as well.

gap> R2:=PolynomialRing(GF(3),["x1","x2"]);
PolynomialRing(..., [ x1, x2 ])
gap> vars:=IndeterminatesOfPolynomialRing(R2);
[ x1, x2 ]
gap> x2:=vars[2];
x2
gap> x1:=vars[1];
x1
gap> f:=x1^3+x2^3;;
gap> DivisorsMultivariatePolynomial(f,R2);
[ x1+x2, x1+x2, x1+x2 ]

7.7 GNU Free Documentation License

GNU Free Documentation License Version 1.2, November 2002

Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

0. PREAMBLE

The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

1. APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".

Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.

A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.

The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

2. VERBATIM COPYING

You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

You may also lend copies, under the same conditions stated above, and you may publicly display copies.

3. COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

4. MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.

B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.

C. State on the Title page the name of the publisher of the Modified Version, as the publisher.

D. Preserve all the copyright notices of the Document.

E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.

G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.

H. Include an unaltered copy of this License.

I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.

J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.

K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.

L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.

M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.

N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.

O. Preserve any Warranty Disclaimers.

If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.

You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

5. COMBINING DOCUMENTS

You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".

6. COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

7. AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.

If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

8. TRANSLATION

Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

9. TERMINATION

You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

10. FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

generated by GAPDoc2HTML

guava-3.6/htm/chapBib.html0000644017361200001450000002764211027015742015362 0ustar tabbottcrontab GAP (guava) - References
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

References

[All84] Alltop, W. O. A method for extending binary linear codes, IEEE Trans. Inform. Theory, 30, (1984), p. 871--872

[BMd)] Bazzi, L. and Mitter, S. K. Some constructions of codes from group actions, preprint, (March 2003 (submitted))

[Bro06] Brouwer, A. E. Bounds on the minimum distance of linear codes, On the internet at the URL: http$://$www.win.tue.nl$/\tilde$aeb$/$voorlincod.html, (1997-2006)

[Bro98] Brouwer, A. E. (Pless, V. S. and Huffman, W. C., Ed.)Bounds on the Size of Linear Codes in , Handbook of Coding Theory, {Elsevier, North Holland}, (1998), p. 295--461

[Che69] Chen, C. L. Some Results on Algebraically Structured Error-Correcting Codes, {University of Hawaii}, USA, (1969)

[GDT91] Gabidulin, E., Davydov, A. and Tombak, L. Linear codes with covering radius 2 and other new covering codes, IEEE Trans. Inform. Theory, 37 (1), (1991), p. 219--224

[Gal62] Gallager, R. Low-Density Parity-Check Codes, IRE Trans. Inform. Theory, IT-8, (1962), p. 21--28

[Gao03] Gao, S. A new algorithm for decoding Reed-Solomon codes, Communications, Information and Network Security (V. Bhargava, H. V. Poor, V. Tarokh and S. Yoon, Eds.), Kluwer Academic Publishers, (2003), p. pp. 55-68

[GS85] Graham, R. and Sloane, N. On the covering radius of codes, IEEE Trans. Inform. Theory, 31 (1), (1985), p. 385--401

[Han99] Hansen, J. P. Toric surfaces and error-correcting codes, Coding theory, cryptography, and related areas (ed., Bachmann et al) Springer-Verlag, (1999)

[HHKK07] Harada, M., Holzmann, W., Kharaghani, H. and Khorvash, M. Extremal Ternary Self-Dual Codes Constructed from Negacirculant Matrices, Graphs and Combinatorics, 23 (4), (2007), p. 401--417

[Hel72] Helgert, H. J. Srivastava codes, IEEE Trans. Inform. Theory, 18, (1972), p. 292--297

[HP03] Huffman, W. C. and Pless, V. Fundamentals of error-correcting codes, Cambridge Univ. Press, (2003)

[Joy04] Joyner, D. Toric codes over finite fields, Applicable Algebra in Engineering, Communication and Computing, 15, (2004), p. 63--79

[JH04] Justesen, J. and Hoholdt, T. A course in error-correcting codes, European Mathematical Society, (2004)

[Leo88] Leon, J. S. A probabilistic algorithm for computing minimum weights of large error-correcting codes, IEEE Trans. Inform. Theory, 34, (1988), p. 1354--1359

[Leo82] Leon, J. S. Computing automorphism groups of error-correcting codes, IEEE Trans. Inform. Theory, 28, (1982), p. 496--511

[Leo91] Leon, J. S. Permutation group algorithms based on partitions, I: theory and algorithms, J. Symbolic Comput., 12, (1991), p. 533--583

[MS83] MacWilliams, F. J. and Sloane, N. J. A. The theory of error-correcting codes, Amsterdam: North-Holland, (1983)

[S}04] R. Tanner D. Sridhara A. Sridharan, T. F. and }, D. C. LDPC Block and Convolutional Codes Based on Circulant Matrices, STRING-NOT-KNOWN: ieee_j_it, 50 (12), (2004), p. 2966--2984

[SRC72] Sloane, N., Reddy, S. and Chen, C. New binary codes, IEEE Trans. Inform. Theory, 18, (1972), p. 503--510

[Sti93] Stichtenoth, H. Algebraic function fields and codes, Springer-Verlag, (1993)

[GG03] von zur Gathen, J. and J. Gerhard, Modern computer algebra, Cambridge Univ. Press, (2003)

[Zim96] Zimmermann, K. -.H. Integral Hecke Modules, Integral Generalized Reed-Muller Codes, and Linear Codes (3--96), Hamburg, Germany, (1996)

Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

generated by GAPDoc2HTML

guava-3.6/guavapage/0000755017361200001450000000000011026723452014304 5ustar tabbottcrontabguava-3.6/guavapage/guava_light.jpg0000644017361200001450000006727511026723452017321 0ustar tabbottcrontabJFIFHHExifMM*.GUAVA is an error-correcting package for GAPC  !"$"$CAE"H!14AQa"Sqr2CR#5BbE$3%sTc ?2@t:sym '@t]`t@t @t :y ̠:dgs(o :WXe :des(s(rI-@Y(Du{ MmEJҰ:)0韱y^)]NSQs{BNJ_]ܮ%CYqKVY<_Uw .Bzׅ)I7Zə񻔻њ8JeOOi(c $<,)o/. -5fmNqP3^і^){9;hUQ0I~?%J2k=7q:$[.J#)&kujרࣅm,#3d|G+))e {[G^L~F^>$.JtiF %=,V[*x{f[֓^1wEJά`餤#ƾE{nsO^`lU9O݋e{kVIcqg=Kȡcͮ 􌳞J>#(P*TjJ˔VZY5Z %.:p#}(U4[Z-e|91JַэLcyp"vwnitN*]: -C{,|KpRrWظIf8k8-.Z[;_y2MnLJvMD@;i,],wzaGW@,\S.S2iG)B1-t^- fVmGX*68,5/$'VJ/u5$XTZu6}XG<8<:hR"8rÛ|&{J))TG(IYM%Τ#)S¦4)P S-ӾF j)"s/P<_Fp~5˅=ͣ&5uޕkZrrVsCxQJ:O'7ISQK)2m+Qo+n.OvДmXǎ|0yTRvn/{y2\J}LǛ]|&IZܥSM},u-70¬*k+1~dգBrjpo)JS5^jrI4'~hs*|o̱y:˔)B7!g9dIOaYT[}ҍKtcNj|Y$k e=۵A47<3ia$I-3vO9ѨWmN8g/EOkshkɗn)B=h?C͙zP*j k:5&>!vW7 Qme뎆^N3HFpq_B3ޞXu +j$ǀJ`{YQRvB+#ڼ|?6^ o<9qoN\B)r4mNO NY~%kztpo#eFuۚryx`Wq\aRQь8ϠѳJjkzMp{z}ZSnK-;f&iNr'=GT_a*k&mQWmN n]\ĥ ,A<hMfK;j§Jn3Wc= {FIB?ZyO\2|^4)z%9(eɩa*-&!\U>8Ew(Usjǒߙhl~^\ko放.5?ҷJTV?BWX` $ . kPrrz(Յ:sUfڄwz=QN4/s˯䈡g%PFx=*Pi-h 4դ+fK՞8ԧJ[%(IJ-3#BBA@GRjEqM2nKֆgvon.S֥˫S7$Gu'N[Г4\Ҹ'R)KmoRk RٵgRw1]*8JrG-ZMaFj(R!JUm%v̹:Ўm4A} Mq$zJBrL98(6WK!FSJ]:[ڴsj6JI?0,} Lk;w+j6)ZAmqc*=F>8̍+f4eqvңTK-KOȆTʋR㮽A\sV 1(MGmZw8F)zmvvp#9iF*MEJ).hEOnekӜ|NÃ)hGiVqaJI5r)##QM-7=g|TZ97)ڒU/|,ӧKZX׊|O[?Ç{q=^[T#7'-0,5!Z3iBa&orn$m7(m)k0/yi߶*53 <Χw3#w 2i fMwgwXF'3'px\}*i&Qͫ> gs}L` y:μ8Wqw9mRKQgIn-Qt^FI\.:(URXJZ%eРt z0٬>f\T(82vRّ=奘jj.[X*655N4RْXɯTu-NqZJJE8+x#cZ#OȪW<Χw!F*Е5 &[;Sf>&l L@@J *jB;.uiʭHIBY ]G0ތV6Sy_`au{򷱜{SKε1Ri0=Ž:-bXHaF TSƸ\.9Zy.$)TE̫aV.:?l}ȍԷBjP4YmNc{o~"#Τ9' 'ÿ ֠ҶQmh3ڥS_QoNMJ9 p;tzY}y{o~ =RWW}XRQnㇸ'-R1m)cV-c{ i!zKTdגij^$N!)ynp}:V:Qo,< w,jFvӋxU\W$ڪnOu7z:0I78xjQ[YE?^IiYV5h*3NKF-̺{Sm 3F$JIZ7eMSVͧ(ާZJIdg5W}whTAhUZTV8{ >Um+d2I~*Қi>e@@U, 9ҖZp32thqK"E`EKM(ṬQFQN-5`ם f:>mzu^%MnI^B*JqΝx[/+9-ҩM5:xep!ҷ@.3Oa@ 5oJiE6Z GE +m|GE &&F QF2̨,3BN2M5]D7!Z5"F(&EâH%(IJ-3F2k5t>f[zT)iK2NJ__+|?tKo.yq*.1s)pH+]ѧ[ϩr5Ov=GNY). y$IhX]@4?p[//敾кS֯ d/*V8ʜwVsu_SN-Bqs&V*^ KEQMpLw qsAY~2ފ|2zk@ GF]93Sh:h˶5sl}3%;+(k ?g]\Nڊ5ԉ9:q-[sj_$#)B/b$ yN4f5.a [GE-yY^;8h4}? [jU 㸗jXh0+tzi%jgSvƼMwy)3`6+ 5x.e^NGnjr>vtKO]Y a)Uoʶs-4E;Zi%Н?y3.,eI.įoZt'æ/k>Ҡ]hݡԍZjqz2U*n /\^>l29T=R:݄rrSݝ]!6Oȵ<ŏ0aR=u)RZua (.VZ{O)ccFVuz[ѾȵoO*4j]='rm<6@ oJZUZo4*?vphgF'^ e7Tjc} QRI54"7%ԵE35+Եn= h<7ҐEqO*{۹Ƹ+ޝE.Qq'P"ғyJ;>mfuRyYZ{g]͵:i7(1ީ&pJ,-y@_ANߪ)|}'>דoF98?qWv2Rz5{"IR(P}wy>¬(ryN4cSZޛo߃;y3 W2Q > I:]8fN\z0PX6 M .W x{ȔUrφx1n/1m>{{ZV>OrN9qQ{Zg9/%iΥ)ɩc^Ч^-$\ *G~o&gƼۜSי^15*¥eRyxXK kIkңFG}g<Y"Zfo^(RμΣkX-*X4^j<~;qusz)_V 6HRYEJ)EɞcgqUO^mAbT`7.)rq}BւY)>y߻SY9!iҦQO*1MpB8bIvg ?nmK^Dvڗ8ԃC?=~!?P3xV4$잭HRPxW[TiGv-ДzW Yn,[;EIoIEq9%ŁCqB$\=:SiՆW!3z()ʕ9k]h^CC N4G=oԖ6'Q6:@=.2jM!% aJ=;0ޗH7*4b%s+8E1otrs#I$YFhNJ%ȱoeRxGj[ש?ꜟ{-9%*]Kz toIuGtMbQ^@t)Ji}Ton3N̺_WӔ-Iz Ue'Ś)ъQIt#+~9ʧf,#~9ʧf>FXk{*B1UUJi),Z#:HӃu*]^FaO֚Ek!^U&7 {f׻hc.?-j̱?6GJBS)ҌT~ XqJ֚"WաMΫ{z>i>whRpVj=]HKn{<*WUg͕zMX*[LiջJ0SM,B)KRIp=t4: H.k„2o8]`.jT>--_$09f_Rz^uR~!uc//Ta aU̘xY߶&-iKH9cܵmOR="ڟFե)nƤRD>fT"̨TI6^< O8 kZ&')EI43/m]):Yz~|e#[crKVoOrE+PH>)?RJ0Ĥњ@;U~]r:gVnsyo< ԛi$|5J+HY2ͥiNzRI,%pubVpYdߙF^gư<3^58rPԯc%o'99jGRօ4JK\I%\QjNQ5k b܍O͚Vir[tQbqOUaۥ7pQ#߻xߏ*IM52qkCs^4)KB5B]ekK/-Uo+ItiB7 aN4 }A] k[*5&Xo]j3 $:ީAuS~k}~ h E}+GP^ K?zx}#g/}B% o$_H}#g/% o$qHS+lQR^xeemWx).%(he#!aNMOeT)nujg2Usjǒߙhl~^\kYK*QMLJp[/Z*\a xsݒÄuc)E~_rMָBpjnׄSMjrgM^o=+[Q&د^@Jε'FսS^Jd,tVҔgZ{~kT)rS0m*yY0!vF%.mӱz|# tԺӥӧO =_Ga9=갞W$Ms<}kA]SQ~Z\>-R8&MJ)?y P{դmi663wPk]AEV*k(jstFk^M]Dwmi|k<Χw?gs}L1w<́XҜE@_վ";quEPO@ \HץE=). Yjz{NuiƬ%fp8B:EpBO A W AULr}+t<ȧUL9zR:IJOߒ.-Qg(}-+s({uqpRs6U*IbU$SgTjkr Jg N\o܍hGo@Z΍q(]XULrh@`ibv_yq3+ЩELyMpjl )zˆ~^Vo放.4? vP zBOYRV7J.-0] zeVT 1K@:ymEeI63/yirt/n9y*t˖V%[gےsyu;юnԄjAk1}~m엋ϡ{%ǡ{%ϡ{%+Kt-;XStr6jTpK #T9<7WR=<7WR;Í^7WRQ KsM^X8?|@/V5*RL([GzQ⻊5a:Ӧ8Ԭ͵E;+?Tʩ4Gamɭ "2w7{N2TrޒꪥJRXrKD! Ur} [J\\S~F*)h̝"҅Fj-{JF/z_Ҏ#0qK:*KX[RޜxZf߭QнF`~p7NKZoKhd!iP,B"Gt+۩Ъŧ]29F܇>!#WCH@z;Fy[c$Ц' G[Bw,;YJMN ֵUᔱ%Ssf[^u# JX05(ensyP*R[x1V&= ٿ2V&= ٿ# oeWGփrNxImUҭL#g`cV:FGVMK)e(NߦQf;*{oKzeGohi~"wiTxx֌iR{R81ㅂI~^\\F7]g*R ǭVug7[4Ӆ*jXK3:thItIk.qoGLt=B4I3 9ŸO+4$nQc]:e5z#qsϸnu~E:qMOJڤ* w8gꔷ!k&2µݥN1鷻$eԪ-,x'm7*r{Xdv͹ДZ7 {*dV"Fk5(6xsK*a=9z,'Qӵg'mO:Nryv'qIntX'*PZ)B*0FY(Uۍ/ Ejj[ jjl.=C=BQ Kz3Zӏ &)Ɖ_8)S+Fg 5']ZR Sd@:S(>XdFKFZ[+Vww"׻h=PyT}z4dN/O:mҷKXEg's@K)GPN8<Hr]G@]@( ztSPϭŶ>;cyS Mkt 2_3Pb`d޸ۼx%2~j^9ꓓk(uKPꗉhdB>#仟NI\3i)EI={V/pMB֏<<itN37x$+֛}Xа 568}G5R2۩r}ڳ{Ч1e^xYQirqO{{v6/X:Ⱦ%`ӣ':Pe]#cU,~_IvKm?@87{N7N^15 c|Ud sa'ӢsfިzV-x_u3AEF)$]W25_~F_5+y2ēΏ-SyaR79%,l)@cyS>;(.5 I[TmKEMIcTDJ[cI/M[6h ✱bJV޿W8[eL~_1ݶDA E'i&rxќRqiVMruR]3do?E^RqQm>RiZK/ɎjNy౏eXM NmͣN)XovO@Ukݤq̇d:S8K>?[:S\ZF~ʓUxF(qrtSZKy\FOrKvShEBdy=~өB#0/&to]5t%Z7CZ/-z *J.Z˂3k_TJ VQj\m)V2(R4bI+_Iң]X3U9(Wķe1pܸv~{F-Sm|+ϵcЮ}4Vg]/dvke$Yd }L% sEUIo.Z>Q95 NH-Վww}~)ԊQTxM<bSH+L%¥kkѩK6׸Ez\IϟZה\(sjo̹׻S5~7Dr*^! KNJQ9=и#'K~HQγ c/6j{[^lieZ[ޣΝZ ;SdFsjo0y_MF-zbN9I;(K <3hl~^\k+zKMgT:="?ܾG-W{Za>8G,]Z59bXONgJsi վK_[G^د_P'k5c>ڤkrr^VYm5v hm o{ QGTqɹvh3k5%xkZnRι0ۍ@GiSS܋3wh 0⢓% BpƆ7ı:`muk%[+WJ'&iJq٥%N5a'ykyO q&t^15 ͭ}86w<+ڍzm%%Dnw<ͭߙtfxJڥwG:ɚ=c"ߙrdpk4 It6+@|4 \]WIӄTvDCne|ѪCsh ͣ_YUQiT3DX٪:e7=w;;am[+nPхoTco!wshU ͣx+ps\qi\zDƻ o$8,ˁCcwz3}Ze [h7impF1Ֆ9OTիUIk6X!1/N7.8q-??V<YYn*SR7:_ LLSf$$>y+Jwظ\t2~j^oꓓӏ!ߓpq3&jzxM:sT)F꣋iWpŹ5~7DOJ0eTjEO1;CɁ@Ppx6?"B;mW~@Sk4 20U;5Q>?;xc% ʍ6[o"5<F܇458${g$b߉[kI4QϏ'0)0Jܵ1`$նL~aQ옽ڒm$h6lqjmE3N}=ZR]nK4ZhiD6S,Y}ghrƉ߸XSbXMӎ|7dseoE&DHcr YU/Μ4{)f m98cI/ifɴpǢ3*N*+40 M1m!2:srW< BtLzӫ2橧&P2PQxz"N5e50X',036RuYuvu:9ZtǫD\[RM5tΣ" ; wE9zpB0k>]k%Py̾6fls/Pbc:P"^oC9Ƥ})3`y_j^g Qکr15R}ě9iOWr,l.JpRϏ_ +&:xEv~j$eݩӛkhKת3v[z/xJ?Fښ\7S&9t)HlZ)&˄޵,k=-T-&Ovsi JVlީhx%{j5 {lgZkԣw)')3NQXIaz1`cϹg*t׌.QޔWk++ƕ)Vrqõ6LJN[g@mwg=G[wUMZnOq鎢jMq< }唒I$ }!͂+Z4rMK^NNGt|Ȑ8kRk4(P-$GV; y56ƲVQfWmJ=6L; -NO d[w@ VQYL%58FwaH%2]O bmBm=`X\KqSau.ZoTj-Bm%8Uo~SkV ݚWZ?M~L[w _m+ <>}"BG^LAq~ޔV;Y|֎̜J''̥sjo̹׻S5~7A5/9KO4h҅(8d%{E' 222WIrשזg^SM>=OhAeF}MOhUx݄cE ;Ѻ\ AQǭ$Dkμ"磚.X!ƖWI9Tz{ZUĺ`VVd0۞sW~fԯ^ڕmd.FJ2%] еi(J.3}\VXk]~gM52 tt& ̠={Џ\Ӝ`)(ʕ/HFSBIՖg&F+:0+=UVq۩Y4cь#J*K)4NBӒjjuVa5#[J3B{:,vqS(Fueenn!Cw}Ip4~O폲е*qMrg8Fy h\%l.n!Cw}Ip'3wFjU" w3<:F?vJN}ŌCN:"VS~i>(_SiGw$ٕw>0 #5NMq+#G5<YSM5f;h8Ԏb]h H<OBkSSq NJJX6uGN-2qJ󅄞3UJ֖)oUucyGNG5B=#~/i߯ihڞ 9S~[ӝW O+L_SiGwM<̫EujjMʔi= SMqS|JZN)JTaUR+Fme5Rb}%ҕIV% 8'i Խ?= N,u35A5Kd,281RZ>֟Gwa)*k2̨_ݗGhj#PU*TQ3mJ꼥7?>֟ y\wĞƚm3ԢI/lGTFP!9J1I?l}ȹmͩ| ȧ>˿\Ծ#w1 C?l}3w>6X+gO͖UTJ+A*j~ߘYSu,rI'[Թ;t3?[Х[eW"XJc1z''ut&kڴU/=v}^R'eCjn1u BPgU-[t/\{O嬝qirY{SLݕW&i.C}G O8xjSa*xyrՆG@8UJ> Tk%K=$Rf. W6u.N7F딎Oy>Fj*XdD[B)nYu_2 WIRo&0މdE OH_ 'yKt3Uh)ճZ\2v%)n,atpϣMM֯zZHϥNU38^N/{v7ЕH0z,^(ѱ&*M4 Pu/?Ⱥ7e'䊥)Srd| {j%81o|O;;Cɖ^y2@+j6hPaՌ {Zc~_2ōER=qXE *wy#`˿h] 5ggs:}lWΟ,IƜ%9pHɣqu2VIՑhRғi%0w $ /cmXV}Do3y]8Ƶ8e-Vh)Bi>fUޤG"FrZ&e5cڔj8]ЌstfJXGmKF{MU*oL;gtrOG9smvZ?Njp ,.Ryq{.p&Zw u\KǏk/֨SG?iM׹[گ!,hTk֖%B:8Jr!jO b._Y^a,i7gԣF2攟F->Lf+DWCCmYShUZ PsO3hݗ*RtC)nUVq- 8:AkWN!:1j5%S^OyG(Xc4׹t-%^irvtl'Gs{{YxnԏJ|Yxö45n P=ͣ&S-mVrU"6P7j2}Lε+j$Mf^55Ͽiͧ䍓 9ӖJWtjVaA2ROĤ^[G^Li[IςMuRq} H9z%ZSnq ^NҞzEc,\_':tXЕJDVSm0u]5'[=i)*wĦ Rra؋ƒeOz#Ep}uĶE:MWYJVj5F".Zgj8VtwTQqЧvRϭCat#QTY$ 8{J'YUZutjqTUhyk_y$/4YQyYLƜ FZhʍHFP\pCjURq͢mKֳ׻oM֯6I$Ii=2ME9I%̉9\hEݥWrxG'YDƒ:[\UOuP\8@Ȥݭ< գQTYb@P˽;0m{ScFMA.2K1X4q!C:M 2!)P={HV9O8 9]c+ASaD+#R.X$S:ߩ~O\]`CoF4)EɬR`WXXҜܳ%&s_~~(omNn.M28N+\ZBMy0KJ #$GV 9B\$W:ߩ⋀ GQ|jkGes7q~ZDM-,y_sgsg\NU9*Ξ|JNPSq{&],2iPy S|55yzHՂS3b93VW﬒ODxZcJ'OhE:Z.-UWU"Һ e<:TrA0Τܶxg^Щ.4\'34<#?gŭknϫ)FnsTeeׅ7mQ%A^^ )F2\=T.Fc>+*QZ;px 292Uy_OW]/;Sg|gs}L Tq$﬿usqz8'>i薯r";CN1sG94X tM5:5'K%yr^Z >=T}U՜!)f"ީSR~-MiZF Ku_6sSkD_o"v4l87fɷn/1łuV’SKeߵ2uԫgNBQRi̛&^F2{߼"[zEm>ݤМkw7UXB1J9~ҷYvD+GAB-Q)x-}jpq@whs9y͆u7û_<Χw)r,֏+w R:pYK $C#O̰[hIyvTJ>u;Od|[}8ੵ-ȩtgHwtBRTb[:dŴ7/B5Y%t3:ۜטwJU, >z?2PrGR8Ku2Y`L ޕXTʄ\@BU}SWG2iQ'"w̆xלcS ImMR#)w%ڳXCeC՜~&[tT\)Y7JBXYn//[>cF:W./߼ K5zp}YKįwZ N/ݮI%8 e{zҽsƪKs7kG֧=uM?xVoVZmzcͺוH'ҳjT7ZeUMܷ_`F)YR;ehgfrM[GMxEF*1%u;Od?4\<Χw)r-ȲV+d*u;Od?4\<Χw)r-ȇhԩ%V )G tȱBXէHFU 9%II4=(*|G䷷c6Cc.~/RQTz nJ](*Օ|i"O8W!%(FkYD6)KE'f9ԶoHHak*Ru*%xP@GV;ɬ6[IcE| ۊ®eP=m:nUi8^ızmX]ygFnO]LZp^82[O<F:$oİu KoT}ҵ+(wyVTFJOIt`wRT%UY;m)z䯵¦2I,";J'ҟS JTqqq 웷J5Vz{muV0qS[+lVZ/pXɗ pyϿj<Ջh;[iKTC+] |Rnm{2ZUo*M4bh*U;{'~hqMU*yzJ6QvrVoG#W"R ).K}CT)s/5V(E5ZŽ"_nPs=BQa%%qO=${BޥIrYqi?}![S5+h)jZ8}N?F}K{R#q $FX{QWB.r=vYQZ+R9Uu$F+Qa,t58#[g!^ KԟLeԟ R&8)."tRĊEj,qrwLFڕ)B/=m*6.M­9EK*IҜZ}./tmh,qliKwvuhXkFV ,qR]LAӄTc(hUUwKvN.mNqX9t!N8Gp 5t.]@Ē: .:QI`Pguava-3.6/guavapage/guava.ps0000644017361200001450000253701611026723452015771 0ustar tabbottcrontab%!PS-Adobe-3.0 %%Creator: GIMP PostScript file plugin V 1.16 by Peter Kirchgessner %%Title: /home/wdj/gapfiles/codes/guava2/fonts/guava4.ps %%CreationDate: Mon Nov 15 20:57:18 2004 %%DocumentData: Clean7Bit %%LanguageLevel: 2 %%Pages: 1 %%BoundingBox: 14 14 545 776 %%EndComments %%BeginProlog % Use own dictionary to avoid conflicts 10 dict begin %%EndProlog %%Page: 1 1 % Translate for offset 14.173228346456693 14.173228346456693 translate % Translate to begin of first scanline 0 761.03999999999996 translate 530.80941176470583 -761.03999999999996 scale % Image geometry 581 833 8 % Transformation matrix [ 581 0 0 833 0 0 ] % Strings to hold RGB-samples per scanline /rstr 581 string def /gstr 581 string def /bstr 581 string def {currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop} {currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop} {currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop} true 3 %%BeginData: 702956 ASCII Bytes colorimage JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> !<.QLJcC<$JcEF`J,~> !<.QLJcC<$JcEF`J,~> !<.QLJcC<$JcEF`J,~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> !<.QLJcC<$JcEF`J,~> !<.QLJcC<$JcEF`J,~> !<.QLJcC<$JcEF`J,~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> !<.QLJcC<$JcEF`J,~> !<.QLJcC<$JcEF`J,~> !<.QLJcC<$JcEF`J,~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcERdq>PsFJcCE'J,~> JcERdq>PsFJcCE'J,~> JcERdq>PsFJcCE'J,~> JcERdq>PsFJcCE'J,~> JcERdq>PsFJcCE'J,~> JcERdq>PsFJcCE'J,~> JcERdq>PsFJcCE'J,~> JcERdq>PsFJcCE'J,~> JcERdq>PsFJcCE'J,~> JcF-tr;Q]q%/'Yts7lTnqYU9irq-3hhZ!l[q>^Kms8Mrqrr3N-rq?Bgqu6Hlr;-^3ds82fqs7lWns82ilrVm?+r;Q`rrVZ]ps8W&tq#13mrVZ]qr<<3#s8MuqrVllo rr3c.rr<#qs8Vlop](-fs82cps7lWks82fq!r`0!rVlKi"TAAus8Dor!WE#srrE&prs&K&qu?Bi rq?Birql^(rVulprql]po`+pjqYpKuq"t*bs8)`n%JTo$s8DutrVliqs8W)srtbV6qZ$Elqu?Wp s8Monqu6Wms8W)os8Ms.s7ZKmp&FpgrqQHlp\t3lrr)j&rr)Wlqu6Wmqr@^,~> JcF-tr;Q]q%/'Yts7lTnqYU9irq-3hhZ!l[q>^Kms8Mrqrr3N-rq?Bgqu6Hlr;-^3ds82fqs7lWns82ilrVm?+r;Q`rrVZ]ps8W&tq#13mrVZ]qr<<3#s8MuqrVllo rr3c.rr<#qs8Vlop](-fs82cps7lWks82fq!r`0!rVlKi"TAAus8Dor!WE#srrE&prs&K&qu?Bi rq?Birql^(rVulprql]po`+pjqYpKuq"t*bs8)`n%JTo$s8DutrVliqs8W)srtbV6qZ$Elqu?Wp s8Monqu6Wms8W)os8Ms.s7ZKmp&FpgrqQHlp\t3lrr)j&rr)Wlqu6Wmqr@^,~> JcF-tr;Q]q%/'Yts7lTnqYU9irq-3hhZ!l[q>^Kms8Mrqrr3N-rq?Bgqu6Hlr;-^3ds82fqs7lWns82ilrVm?+r;Q`rrVZ]ps8W&tq#13mrVZ]qr<<3#s8MuqrVllo rr3c.rr<#qs8Vlop](-fs82cps7lWks82fq!r`0!rVlKi"TAAus8Dor!WE#srrE&prs&K&qu?Bi rq?Birql^(rVulprql]po`+pjqYpKuq"t*bs8)`n%JTo$s8DutrVliqs8W)srtbV6qZ$Elqu?Wp s8Monqu6Wms8W)os8Ms.s7ZKmp&FpgrqQHlp\t3lrr)j&rr)Wlqu6Wmqr@^,~> JcF-tr;Q]q&,l(qs8)WgrqlEar;?QWpu)/[qu?Hjs82fprVZQirqlisqYC-is7$1*jrr2?c $NC#%qu$Bjr;6Ejrr+AEqYgEno)8Ufr:Tmcrr2fprr2lnq"XaZrr2ljs7Q*[rq69jq#(0krr)fo rr)fprZh%7qu-Ehq==:Xr;6HmqYpLd"rqcTkrqQNlr;6Ek rrE&qrsAZ$nc&Res7Z'\oD\dg./a)Cs7cBhrp0ROo)8C\s8M`lnG`%RrVu-]p%A:Oq#:0hs8;lr rVulrs8P"Ur;6Kmo)JU^rql`lrqucdp\t*cp@SCTrVQ3bs8W&jr:g3ip[8"Ws8Drrs8N#rr;Q6_ nGW@cjSs`~> JcF-tr;Q]q&,l(qs8)WgrqlEar;?QWpu)/[qu?Hjs82fprVZQirqlisqYC-is7$1*jrr2?c $NC#%qu$Bjr;6Ejrr+AEqYgEno)8Ufr:Tmcrr2fprr2lnq"XaZrr2ljs7Q*[rq69jq#(0krr)fo rr)fprZh%7qu-Ehq==:Xr;6HmqYpLd"rqcTkrqQNlr;6Ek rrE&qrsAZ$nc&Res7Z'\oD\dg./a)Cs7cBhrp0ROo)8C\s8M`lnG`%RrVu-]p%A:Oq#:0hs8;lr rVulrs8P"Ur;6Kmo)JU^rql`lrqucdp\t*cp@SCTrVQ3bs8W&jr:g3ip[8"Ws8Drrs8N#rr;Q6_ nGW@cjSs`~> JcF-tr;Q]q&,l(qs8)WgrqlEar;?QWpu)/[qu?Hjs82fprVZQirqlisqYC-is7$1*jrr2?c $NC#%qu$Bjr;6Ejrr+AEqYgEno)8Ufr:Tmcrr2fprr2lnq"XaZrr2ljs7Q*[rq69jq#(0krr)fo rr)fprZh%7qu-Ehq==:Xr;6HmqYpLd"rqcTkrqQNlr;6Ek rrE&qrsAZ$nc&Res7Z'\oD\dg./a)Cs7cBhrp0ROo)8C\s8M`lnG`%RrVu-]p%A:Oq#:0hs8;lr rVulrs8P"Ur;6Kmo)JU^rql`lrqucdp\t*cp@SCTrVQ3bs8W&jr:g3ip[8"Ws8Drrs8N#rr;Q6_ nGW@cjSs`~> JcF-ts8Moq&,H5%p&=sbq#9m\rr2`mro!e\rr;ljs7u1*fU?lnc&Ofli-YXrpTd^q>1'h rr)fprr)]hqu$0epAF"NoDS[]rr2ZPq#:1!fqu?]q#Q=Morq-$_p$hq^rVZ'^rWW&qs7-$err*i6rr2Ngrq5p_o^i+VoDJRKq#:9hqu$9e s8Doq49, JcF-ts8Moq&,H5%p&=sbq#9m\rr2`mro!e\rr;ljs7u1*fU?lnc&Ofli-YXrpTd^q>1'h rr)fprr)]hqu$0epAF"NoDS[]rr2ZPq#:1!fqu?]q#Q=Morq-$_p$hq^rVZ'^rWW&qs7-$err*i6rr2Ngrq5p_o^i+VoDJRKq#:9hqu$9e s8Doq49, JcF-ts8Moq&,H5%p&=sbq#9m\rr2`mro!e\rr;ljs7u1*fU?lnc&Ofli-YXrpTd^q>1'h rr)fprr)]hqu$0epAF"NoDS[]rr2ZPq#:1!fqu?]q#Q=Morq-$_p$hq^rVZ'^rWW&qs7-$err*i6rr2Ngrq5p_o^i+VoDJRKq#:9hqu$9e s8Doq49, JcEmm&H;D&q#C3^rr)Ecro:0k s8N#t-i<`9rVQTmrqu6ZrV$9Zo`"ggmJcnPp\XsfoCW(Wp[[nRn+lhXrVlcrrV?F$qYgEmp[nFa q>'mbrql`qrX/W#q"jLZqY'd[qY'n>s8N#qqu63SqYfj\nau_LoDJRXpAY'Rrq$*fp\"O_q=4@Y p\t$dqtU'grVQQrqt]m`rr)lm+TCg+kl:VLroF%Wn,;nSrqZNkr;HTns8M`kn,MkSrr)co$N9o" rq5jPn+cn]jSs`~> JcEmm&H;D&q#C3^rr)Ecro:0k s8N#t-i<`9rVQTmrqu6ZrV$9Zo`"ggmJcnPp\XsfoCW(Wp[[nRn+lhXrVlcrrV?F$qYgEmp[nFa q>'mbrql`qrX/W#q"jLZqY'd[qY'n>s8N#qqu63SqYfj\nau_LoDJRXpAY'Rrq$*fp\"O_q=4@Y p\t$dqtU'grVQQrqt]m`rr)lm+TCg+kl:VLroF%Wn,;nSrqZNkr;HTns8M`kn,MkSrr)co$N9o" rq5jPn+cn]jSs`~> JcEmm&H;D&q#C3^rr)Ecro:0k s8N#t-i<`9rVQTmrqu6ZrV$9Zo`"ggmJcnPp\XsfoCW(Wp[[nRn+lhXrVlcrrV?F$qYgEmp[nFa q>'mbrql`qrX/W#q"jLZqY'd[qY'n>s8N#qqu63SqYfj\nau_LoDJRXpAY'Rrq$*fp\"O_q=4@Y p\t$dqtU'grVQQrqt]m`rr)lm+TCg+kl:VLroF%Wn,;nSrqZNkr;HTns8M`kn,MkSrr)co$N9o" rq5jPn+cn]jSs`~> JcF-tr;Q]q&,lG&rUBj_m.pV&"8_u^qr.P_o)8:]aj8Gbe^MpormM;'e'?DAlMLJTqYgHorVl?e !<)os2uNOLrV$!\qu6Wqrr;rpqY:$brV?-Xs7$$cq>L3er;?EeqY1!]rqZ0`r:0d`s82T\nbr=[ qu6Wqrr2pFqt^*enGV\LrV$!]j8SrRqZ$6gq>1'eq=X[aq#(-crr2cgq"agcrr2]k$N0o#qY^ JcF-tr;Q]q&,lG&rUBj_m.pV&"8_u^qr.P_o)8:]aj8Gbe^MpormM;'e'?DAlMLJTqYgHorVl?e !<)os2uNOLrV$!\qu6Wqrr;rpqY:$brV?-Xs7$$cq>L3er;?EeqY1!]rqZ0`r:0d`s82T\nbr=[ qu6Wqrr2pFqt^*enGV\LrV$!]j8SrRqZ$6gq>1'eq=X[aq#(-crr2cgq"agcrr2]k$N0o#qY^ JcF-tr;Q]q&,lG&rUBj_m.pV&"8_u^qr.P_o)8:]aj8Gbe^MpormM;'e'?DAlMLJTqYgHorVl?e !<)os2uNOLrV$!\qu6Wqrr;rpqY:$brV?-Xs7$$cq>L3er;?EeqY1!]rqZ0`r:0d`s82T\nbr=[ qu6Wqrr2pFqt^*enGV\LrV$!]j8SrRqZ$6gq>1'eq=X[aq#(-crr2cgq"agcrr2]k$N0o#qY^ JcF-t!;uips8N&u&,uP,q"agXrVj5+$hsDonDO"oSE+!<<*+!5/-srqH]rs8W&s s8MQg%/p2*s8Dimr;-6cr;QZp.es&Dr:od[qt^6iqtp?grqlTkrquZjr;5s[qZ$0Zr:oaZmJ$ST rVZQiq>UEk-2d`Ap@SC\mJQMOqu-3brqH9Zrq>dXp[\@^o_\7Ur:Ks_q>:*grqQNmquu]dq=XU^ rr2utq>Ud#r;?9`rUT@RoD/F^r[RX5p%[nNp@7SJrq--ej7rWHp@A(XoDS[]m/6/Fr;$ JcF-t!;uips8N&u&,uP,q"agXrVj5+$hsDonDO"oSE+!<<*+!5/-srqH]rs8W&s s8MQg%/p2*s8Dimr;-6cr;QZp.es&Dr:od[qt^6iqtp?grqlTkrquZjr;5s[qZ$0Zr:oaZmJ$ST rVZQiq>UEk-2d`Ap@SC\mJQMOqu-3brqH9Zrq>dXp[\@^o_\7Ur:Ks_q>:*grqQNmquu]dq=XU^ rr2utq>Ud#r;?9`rUT@RoD/F^r[RX5p%[nNp@7SJrq--ej7rWHp@A(XoDS[]m/6/Fr;$ JcF-t!;uips8N&u&,uP,q"agXrVj5+$hsDonDO"oSE+!<<*+!5/-srqH]rs8W&s s8MQg%/p2*s8Dimr;-6cr;QZp.es&Dr:od[qt^6iqtp?grqlTkrquZjr;5s[qZ$0Zr:oaZmJ$ST rVZQiq>UEk-2d`Ap@SC\mJQMOqu-3brqH9Zrq>dXp[\@^o_\7Ur:Ks_q>:*grqQNmquu]dq=XU^ rr2utq>Ud#r;?9`rUT@RoD/F^r[RX5p%[nNp@7SJrq--ej7rWHp@A(XoDS[]m/6/Fr;$ !<.QLdf9@Es83N.rr<#sq#(*ip%b;V#QkJ.q=ieH$iU&+!sKGA#6Y)/!;up.#6P#*ros@Sr;Zcp rr;ufs8W)urseu+r;37`TqS6WUna]YrhCb.qYp3crV<7`U8._cqu-NlqYL/\USFKWV4mhVrVZKa TqA'Rr1X.br1X.b,bq"+rV-6cURRmNrVQKlo)/=UqjsUYUSslWs7ZEgq4j^ZU7qR\pnJ7lUS.JX r;6Ud"qu6$_oC)UIUA:S\UApu;UAXEWrq`CbU8"]\TE"BRq"O^Uq"pb]Q)"0So_e'O TqeHXU84NYUS@^^)PNt&R%s$Hqu60^V4s`VTqn"Rp%nC[rqQEkrhBRis7u$[q#mIdUS=L^U]7%o Tqe@Vqt^3gr8dm.~> !<.QLdf9@Es83N.rr<#sq#(*ip%b;V#QkJ.q=ieH$iU&+!sKGA#6Y)/!;up.#6P#*ros@Sr;Zcp rr;ufs8W)urseu+r;37`TqS6WUna]YrhCb.qYp3crV<7`U8._cqu-NlqYL/\USFKWV4mhVrVZKa TqA'Rr1X.br1X.b,bq"+rV-6cURRmNrVQKlo)/=UqjsUYUSslWs7ZEgq4j^ZU7qR\pnJ7lUS.JX r;6Ud"qu6$_oC)UIUA:S\UApu;UAXEWrq`CbU8"]\TE"BRq"O^Uq"pb]Q)"0So_e'O TqeHXU84NYUS@^^)PNt&R%s$Hqu60^V4s`VTqn"Rp%nC[rqQEkrhBRis7u$[q#mIdUS=L^U]7%o Tqe@Vqt^3gr8dm.~> !<.QLdf9@Es83N.rr<#sq#(*ip%b;V#QkJ.q=ieH$iU&+!sKGA#6Y)/!;up.#6P#*ros@Sr;Zcp rr;ufs8W)urseu+r;37`TqS6WUna]YrhCb.qYp3crV<7`U8._cqu-NlqYL/\USFKWV4mhVrVZKa TqA'Rr1X.br1X.b,bq"+rV-6cURRmNrVQKlo)/=UqjsUYUSslWs7ZEgq4j^ZU7qR\pnJ7lUS.JX r;6Ud"qu6$_oC)UIUA:S\UApu;UAXEWrq`CbU8"]\TE"BRq"O^Uq"pb]Q)"0So_e'O TqeHXU84NYUS@^^)PNt&R%s$Hqu60^V4s`VTqn"Rp%nC[rqQEkrhBRis7u$[q#mIdUS=L^U]7%o Tqe@Vqt^3gr8dm.~> JcF-t(A[n)rVHHls8D]fr;HVO!rrN0!;ufki;Wu[rVcg&#lS`X!WrRHEcH&AG]Wc[o_\C\rr2lq s8Mios8N&urr2rt%fZM+rV_Y2"9\`*!s&E)quA.'q#(!^qhP:R!s&;ur;HTjq"TaN!prqcTfqhG7U#Qb52!fR*VqMGFY#6Ff( !!3#u#Qau+!<<-#!egRM"oA/rs8W)orso#*r:KsWs+gXU!<H#QbD JcF-t(A[n)rVHHls8D]fr;HVO!rrN0!;ufki;Wu[rVcg&#lS`X!WrRHEcH&AG]Wc[o_\C\rr2lq s8Mios8N&urr2rt%fZM+rV_Y2"9\`*!s&E)quA.'q#(!^qhP:R!s&;ur;HTjq"TaN!prqcTfqhG7U#Qb52!fR*VqMGFY#6Ff( !!3#u#Qau+!<<-#!egRM"oA/rs8W)orso#*r:KsWs+gXU!<H#QbD JcF-t(A[n)rVHHls8D]fr;HVO!rrN0!;ufki;Wu[rVcg&#lS`X!WrRHEcH&AG]Wc[o_\C\rr2lq s8Mios8N&urr2rt%fZM+rV_Y2"9\`*!s&E)quA.'q#(!^qhP:R!s&;ur;HTjq"TaN!prqcTfqhG7U#Qb52!fR*VqMGFY#6Ff( !!3#u#Qau+!<<-#!egRM"oA/rs8W)orso#*r:KsWs+gXU!<H#QbD JcF-t(An%$qtg0dr;HEgrV^j="Tec.!rW#qi;Xbos8N''!;lZiq>^R$qu$?dqu-KjqYU6hrVc`g s!.LAs8W)srr;lks7uV;!&3"9\l3!X8W)$NU82s7ZHk!s&B(!W`<,!r`&orr2lor;cs$ !!)lop\spi!s/2t#m(;7! JcF-t(An%$qtg0dr;HEgrV^j="Tec.!rW#qi;Xbos8N''!;lZiq>^R$qu$?dqu-KjqYU6hrVc`g s!.LAs8W)srr;lks7uV;!&3"9\l3!X8W)$NU82s7ZHk!s&B(!W`<,!r`&orr2lor;cs$ !!)lop\spi!s/2t#m(;7! JcF-t(An%$qtg0dr;HEgrV^j="Tec.!rW#qi;Xbos8N''!;lZiq>^R$qu$?dqu-KjqYU6hrVc`g s!.LAs8W)srr;lks7uV;!&3"9\l3!X8W)$NU82s7ZHk!s&B(!W`<,!r`&orr2lor;cs$ !!)lop\spi!s/2t#m(;7! !<.QLdf9@E(%qLtq#'jXr;U;4!>,>5"9er-rr)fSrrr?#rrE?*rr!?)!UHorr3Z1r;HTlqY]sb":5/4!WiN1!!EE'!=/`-$2sPmr;6Zq!!)uprW)ol!%e*GrUpBq !W`9,#6Or0!!E9)"U4r;"Te]+qu6Kn!!*'%rr;rrrVccr!WW9#!$2.@!<<)s!WW?'!rr<+$3U>E !"9,5$3UJ8!!=&c1!!*'""8r2tquH`trrr;6[("U>A7!<`K1!!`T3"9J]+"9ec3q"t*i!<<*$rW!6+!<)ors8W&srqug9!WDig mJ?qc!=8c.!s&B%!sf#3!ser*q#:0grVZ`qli2J~> !<.QLdf9@E(%qLtq#'jXr;U;4!>,>5"9er-rr)fSrrr?#rrE?*rr!?)!UHorr3Z1r;HTlqY]sb":5/4!WiN1!!EE'!=/`-$2sPmr;6Zq!!)uprW)ol!%e*GrUpBq !W`9,#6Or0!!E9)"U4r;"Te]+qu6Kn!!*'%rr;rrrVccr!WW9#!$2.@!<<)s!WW?'!rr<+$3U>E !"9,5$3UJ8!!=&c1!!*'""8r2tquH`trrr;6[("U>A7!<`K1!!`T3"9J]+"9ec3q"t*i!<<*$rW!6+!<)ors8W&srqug9!WDig mJ?qc!=8c.!s&B%!sf#3!ser*q#:0grVZ`qli2J~> !<.QLdf9@E(%qLtq#'jXr;U;4!>,>5"9er-rr)fSrrr?#rrE?*rr!?)!UHorr3Z1r;HTlqY]sb":5/4!WiN1!!EE'!=/`-$2sPmr;6Zq!!)uprW)ol!%e*GrUpBq !W`9,#6Or0!!E9)"U4r;"Te]+qu6Kn!!*'%rr;rrrVccr!WW9#!$2.@!<<)s!WW?'!rr<+$3U>E !"9,5$3UJ8!!=&c1!!*'""8r2tquH`trrr;6[("U>A7!<`K1!!`T3"9J]+"9ec3q"t*i!<<*$rW!6+!<)ors8W&srqug9!WDig mJ?qc!=8c.!s&B%!sf#3!ser*q#:0grVZ`qli2J~> JcF-t&GuG'mJ-YOr;6=X!t#;=!W`3$"9&/pqr.Pgrr;uu"9A;ps8E'#"oJ;uqY^n%Kc\9!WiW-!!=B#79_n\aqu$EjrVl-_J,~> JcF-t&GuG'mJ-YOr;6=X!t#;=!W`3$"9&/pqr.Pgrr;uu"9A;ps8E'#"oJ;uqY^n%Kc\9!WiW-!!=B#79_n\aqu$EjrVl-_J,~> JcF-t&GuG'mJ-YOr;6=X!t#;=!W`3$"9&/pqr.Pgrr;uu"9A;ps8E'#"oJ;uqY^n%Kc\9!WiW-!!=B#79_n\aqu$EjrVl-_J,~> JcF-t'D2=pqYTs^s77ZE#QbP<"98H&!<)fOrt#/5!;cQiqZ-^#q>0sbrVlfqr<3,tr;HWbrtPD. qu$B^rVlm"!sSqXe^)aneC)hFe-F+po^_bRqZ?`s!Wi<"rVuosrW2lr*WGp6oEPC%! JcF-t'D2=pqYTs^s77ZE#QbP<"98H&!<)fOrt#/5!;cQiqZ-^#q>0sbrVlfqr<3,tr;HWbrtPD. qu$B^rVlm"!sSqXe^)aneC)hFe-F+po^_bRqZ?`s!Wi<"rVuosrW2lr*WGp6oEPC%! JcF-t'D2=pqYTs^s77ZE#QbP<"98H&!<)fOrt#/5!;cQiqZ-^#q>0sbrVlfqr<3,tr;HWbrtPD. qu$B^rVlm"!sSqXe^)aneC)hFe-F+po^_bRqZ?`s!Wi<"rVuosrW2lr*WGp6oEPC%! JcFF'q#2'&nc.bFq[sYM!!WQ,"TST)!!)oor;GUS')hk1!!NB%rqlQn!S8!<<)s!WW3%%dricq>(!err2ce r;Hp#! JcFF'q#2'&nc.bFq[sYM!!WQ,"TST)!!)oor;GUS')hk1!!NB%rqlQn!S8!<<)s!WW3%%dricq>(!err2ce r;Hp#! JcFF'q#2'&nc.bFq[sYM!!WQ,"TST)!!)oor;GUS')hk1!!NB%rqlQn!S8!<<)s!WW3%%dricq>(!err2ce r;Hp#! JcFF'q>:g&mJchYq#Ls*#R18/%06M2rW!'"s8MuUrrr?#rW!*%rr*-"!^Ko+ohQ>qtp!sf)Es69dg&d/I?q JcFF'q>:g&mJchYq#Ls*#R18/%06M2rW!'"s8MuUrrr?#rW!*%rr*-"!^Ko+ohQ>qtp!sf)Es69dg&d/I?q JcFF'q>:g&mJchYq#Ls*#R18/%06M2rW!'"s8MuUrrr?#rW!*%rr*-"!^Ko+ohQ>qtp!sf)Es69dg&d/I?q JcFF'(]4.-r;6Bfr;HZfinX_;!<`N*"U"f*!WE'!!WN&urSdbdrVuis!s&;urqcZq"8i&qrqucr rql]qrqZTorXo20r;6Bhrr;Zp!WW3/r:9jSrr*?#p&FjenbW:\q#('nrVus"rql]qrqulr!$)+= rquZs!rr<:kk,Ad!!!6-$NL8)!XJf,"TA>sr;[-*rVuirrVccq!W2p>!<<-"s82ou!!E<"pAk7# !<<<-!"Si+!WrE&r;Z`qrr2os!<2lqs8F&=rr)lr!<<3(!<3'#&-)e<#QP;(oaCp&!!E,tr;H[P !WW9&!!*'!rVlfprr3!!!<<-"rqlp%!<`c-!W`N2!WrE/"o@Ts#65)2rVZ]o!<<*$qu?fts8Drs s8Mrs)Zp!6r:^0`lMgh]rVlcnqYU-dr;d'(!"&Z%r;HQorp0T7~> JcFF'(]4.-r;6Bfr;HZfinX_;!<`N*"U"f*!WE'!!WN&urSdbdrVuis!s&;urqcZq"8i&qrqucr rql]qrqZTorXo20r;6Bhrr;Zp!WW3/r:9jSrr*?#p&FjenbW:\q#('nrVus"rql]qrqulr!$)+= rquZs!rr<:kk,Ad!!!6-$NL8)!XJf,"TA>sr;[-*rVuirrVccq!W2p>!<<-"s82ou!!E<"pAk7# !<<<-!"Si+!WrE&r;Z`qrr2os!<2lqs8F&=rr)lr!<<3(!<3'#&-)e<#QP;(oaCp&!!E,tr;H[P !WW9&!!*'!rVlfprr3!!!<<-"rqlp%!<`c-!W`N2!WrE/"o@Ts#65)2rVZ]o!<<*$qu?fts8Drs s8Mrs)Zp!6r:^0`lMgh]rVlcnqYU-dr;d'(!"&Z%r;HQorp0T7~> JcFF'(]4.-r;6Bfr;HZfinX_;!<`N*"U"f*!WE'!!WN&urSdbdrVuis!s&;urqcZq"8i&qrqucr rql]qrqZTorXo20r;6Bhrr;Zp!WW3/r:9jSrr*?#p&FjenbW:\q#('nrVus"rql]qrqulr!$)+= rquZs!rr<:kk,Ad!!!6-$NL8)!XJf,"TA>sr;[-*rVuirrVccq!W2p>!<<-"s82ou!!E<"pAk7# !<<<-!"Si+!WrE&r;Z`qrr2os!<2lqs8F&=rr)lr!<<3(!<3'#&-)e<#QP;(oaCp&!!E,tr;H[P !WW9&!!*'!rVlfprr3!!!<<-"rqlp%!<`c-!W`N2!WrE/"o@Ts#65)2rVZ]o!<<*$qu?fts8Drs s8Mrs)Zp!6r:^0`lMgh]rVlcnqYU-dr;d'(!"&Z%r;HQorp0T7~> JcFF'&,Z>$qtKgTrVHQ9#6Y,5!r)`s!<<0"rn[S_!!30#r;ZWs!!E9"roO1ZrZV=@s8)cs"p4o( rV6?hrVccqrqlWjp\t'\q#(L!!WW<$qu6Zqp]4(err;iu"9nl,rq-6k"TST("9SZ$!!*?1"98?" !!!$"!r`/urquTkrr<6)!!3-$!!*#tquQp"! JcFF'&,Z>$qtKgTrVHQ9#6Y,5!r)`s!<<0"rn[S_!!30#r;ZWs!!E9"roO1ZrZV=@s8)cs"p4o( rV6?hrVccqrqlWjp\t'\q#(L!!WW<$qu6Zqp]4(err;iu"9nl,rq-6k"TST("9SZ$!!*?1"98?" !!!$"!r`/urquTkrr<6)!!3-$!!*#tquQp"! JcFF'&,Z>$qtKgTrVHQ9#6Y,5!r)`s!<<0"rn[S_!!30#r;ZWs!!E9"roO1ZrZV=@s8)cs"p4o( rV6?hrVccqrqlWjp\t'\q#(L!!WW<$qu6Zqp]4(err;iu"9nl,rq-6k"TST("9SZ$!!*?1"98?" !!!$"!r`/urquTkrr<6)!!3-$!!*#tquQp"! JcFC&%f?+oq>L$`o[l`!W`8us8)p!"98?!jo>>Z+ohQArW3'%!Wr>l rqcNjqZ$NkqYTgWqu$-ao`YBt"9AGurrE&n!?D(;s8)m#"pG#,q#CHu!!rW/!sA6!#6Y/0rqufp !#l";rqucor;?9l#71G:!WrH'rr2fs"p"]-rq-0l$j$_B"U#&'!s/W."9&6!rr2Zls8H$urr)lr !WW?'"ni$##6bM9"pkA,qZR'%!!<&trW<62!XSo7"p=Mrr;Z`nr;H`t!<<-"s82ou"UbM,#6=r5 #64i/"o/&u!sSl2r;Zcq!W`9&!W JcFC&%f?+oq>L$`o[l`!W`8us8)p!"98?!jo>>Z+ohQArW3'%!Wr>l rqcNjqZ$NkqYTgWqu$-ao`YBt"9AGurrE&n!?D(;s8)m#"pG#,q#CHu!!rW/!sA6!#6Y/0rqufp !#l";rqucor;?9l#71G:!WrH'rr2fs"p"]-rq-0l$j$_B"U#&'!s/W."9&6!rr2Zls8H$urr)lr !WW?'"ni$##6bM9"pkA,qZR'%!!<&trW<62!XSo7"p=Mrr;Z`nr;H`t!<<-"s82ou"UbM,#6=r5 #64i/"o/&u!sSl2r;Zcq!W`9&!W JcFC&%f?+oq>L$`o[l`!W`8us8)p!"98?!jo>>Z+ohQArW3'%!Wr>l rqcNjqZ$NkqYTgWqu$-ao`YBt"9AGurrE&n!?D(;s8)m#"pG#,q#CHu!!rW/!sA6!#6Y/0rqufp !#l";rqucor;?9l#71G:!WrH'rr2fs"p"]-rq-0l$j$_B"U#&'!s/W."9&6!rr2Zls8H$urr)lr !WW?'"ni$##6bM9"pkA,qZR'%!!<&trW<62!XSo7"p=Mrr;Z`nr;H`t!<<-"s82ou"UbM,#6=r5 #64i/"o/&u!sSl2r;Zcq!W`9&!W !<.QLgA_]Zrr)ilr;DeJ"9Jr:"p+l$!!30$!WN)SrsSl/!<;usqZHm$s8DrYs8N!@s8N&u!rrB( "RtmZs7cU?gq#(9p!<<-"s82p$!Y,J) #mLA3!t#/4$M*fm"9nr0qu6Qn!W`9&!W !<.QLgA_]Zrr)ilr;DeJ"9Jr:"p+l$!!30$!WN)SrsSl/!<;usqZHm$s8DrYs8N!@s8N&u!rrB( "RtmZs7cU?gq#(9p!<<-"s82p$!Y,J) #mLA3!t#/4$M*fm"9nr0qu6Qn!W`9&!W !<.QLgA_]Zrr)ilr;DeJ"9Jr:"p+l$!!30$!WN)SrsSl/!<;usqZHm$s8DrYs8N!@s8N&u!rrB( "RtmZs7cU?gq#(9p!<<-"s82p$!Y,J) #mLA3!t#/4$M*fm"9nr0qu6Qn!W`9&!W JcFF'&,6)!qY0f:!s8c1":PD9"8Dit!<<0"rn[S_!!30#r;ZWs!!E9"roO1Zrr2p=rW3*(!s@oe q>:$aq1'''K7&6$!eL.Cq>^Nt!tt:qt>ULJ:N?'Ih.)#rUfg[p@eOj"9AN# rr<#tl2Q8~> JcFF'&,6)!qY0f:!s8c1":PD9"8Dit!<<0"rn[S_!!30#r;ZWs!!E9"roO1Zrr2p=rW3*(!s@oe q>:$aq1'''K7&6$!eL.Cq>^Nt!tt:qt>ULJ:N?'Ih.)#rUfg[p@eOj"9AN# rr<#tl2Q8~> JcFF'&,6)!qY0f:!s8c1":PD9"8Dit!<<0"rn[S_!!30#r;ZWs!!E9"roO1Zrr2p=rW3*(!s@oe q>:$aq1'''K7&6$!eL.Cq>^Nt!tt:qt>ULJ:N?'Ih.)#rUfg[p@eOj"9AN# rr<#tl2Q8~> JcF^/q>Lp&qYTpTA-`29#m:>;!WiK!!!30$!WN)SrsSl/!<;usqZHm$s8DrYs8N#sruV%P_4!W`E-!W)Hl$j?e:!Xo)0r"K,5!s&;s rqugL!rMihr;?u#6G#3!!NT-"ni9-"9AT&s8DusrqHHmr`0!t rVufs!!<]Dq#CU$#Qb;A$3^8'!X8W)"8i,t!s8Q7!s'($r:U*dqu6Qkr;cm!!!*'!quR*(!Xef* "UG;;#6kA9qt(!o"Te`%rr;s!!<<0%r;Zous8Drss8Mrs)$0X4D?L1O":>AA$jHLtrV?*`qZ$^$ !WrB#s8W)_s*t~> JcF^/q>Lp&qYTpTA-`29#m:>;!WiK!!!30$!WN)SrsSl/!<;usqZHm$s8DrYs8N#sruV%P_4!W`E-!W)Hl$j?e:!Xo)0r"K,5!s&;s rqugL!rMihr;?u#6G#3!!NT-"ni9-"9AT&s8DusrqHHmr`0!t rVufs!!<]Dq#CU$#Qb;A$3^8'!X8W)"8i,t!s8Q7!s'($r:U*dqu6Qkr;cm!!!*'!quR*(!Xef* "UG;;#6kA9qt(!o"Te`%rr;s!!<<0%r;Zous8Drss8Mrs)$0X4D?L1O":>AA$jHLtrV?*`qZ$^$ !WrB#s8W)_s*t~> JcF^/q>Lp&qYTpTA-`29#m:>;!WiK!!!30$!WN)SrsSl/!<;usqZHm$s8DrYs8N#sruV%P_4!W`E-!W)Hl$j?e:!Xo)0r"K,5!s&;s rqugL!rMihr;?u#6G#3!!NT-"ni9-"9AT&s8DusrqHHmr`0!t rVufs!!<]Dq#CU$#Qb;A$3^8'!X8W)"8i,t!s8Q7!s'($r:U*dqu6Qkr;cm!!!*'!quR*(!Xef* "UG;;#6kA9qt(!o"Te`%rr;s!!<<0%r;Zous8Drss8Mrs)$0X4D?L1O":>AA$jHLtrV?*`qZ$^$ !WrB#s8W)_s*t~> !<.QLirAiQ&,c8'9hGTm!!!B0!!rl1!VcWr!<<0"rn[S_!!30#r;ZWs!!E9"roO1ZrZV=@s82lu "U"o)p&4a`q"+pq!sSo0"9Su3rV-@!!! !<.QLirAiQ&,c8'9hGTm!!!B0!!rl1!VcWr!<<0"rn[S_!!30#r;ZWs!!E9"roO1ZrZV=@s82lu "U"o)p&4a`q"+pq!sSo0"9Su3rV-@!!! !<.QLirAiQ&,c8'9hGTm!!!B0!!rl1!VcWr!<<0"rn[S_!!30#r;ZWs!!E9"roO1ZrZV=@s82lu "U"o)p&4a`q"+pq!sSo0"9Su3rV-@!!! JcF^/q"tX#3!9?b"Tnu3"pY52!s85t!W`9%rr1aR$ig>/s8;oo"98Q(rVkpYrr**$rVuit!<*$: rql?dqu$-+!!!'+!!EK6!<)fs!<<6&rql]qrqHLOrr)ln!_\fp^mT0!W`5t rr<'#!!<)tr;?Bgo`"[``W-)B!s&E$rqlZp('jp2rV+@P`Q,p:_u'<<"TeZ*rr;utrr2Zls8EN. rr)lr!s&Q*&c)@D^r-/k"NUK5q#gTr3s5B[rW30("UG+Jr:p6hpA+^dqY^Qt!<<-"s82p'!sf,* s2;ahai2<4rV66m"9nr0qYgBl!W`9&!W JcF^/q"tX#3!9?b"Tnu3"pY52!s85t!W`9%rr1aR$ig>/s8;oo"98Q(rVkpYrr**$rVuit!<*$: rql?dqu$-+!!!'+!!EK6!<)fs!<<6&rql]qrqHLOrr)ln!_\fp^mT0!W`5t rr<'#!!<)tr;?Bgo`"[``W-)B!s&E$rqlZp('jp2rV+@P`Q,p:_u'<<"TeZ*rr;utrr2Zls8EN. rr)lr!s&Q*&c)@D^r-/k"NUK5q#gTr3s5B[rW30("UG+Jr:p6hpA+^dqY^Qt!<<-"s82p'!sf,* s2;ahai2<4rV66m"9nr0qYgBl!W`9&!W JcF^/q"tX#3!9?b"Tnu3"pY52!s85t!W`9%rr1aR$ig>/s8;oo"98Q(rVkpYrr**$rVuit!<*$: rql?dqu$-+!!!'+!!EK6!<)fs!<<6&rql]qrqHLOrr)ln!_\fp^mT0!W`5t rr<'#!!<)tr;?Bgo`"[``W-)B!s&E$rqlZp('jp2rV+@P`Q,p:_u'<<"TeZ*rr;utrr2Zls8EN. rr)lr!s&Q*&c)@D^r-/k"NUK5q#gTr3s5B[rW30("UG+Jr:p6hpA+^dqY^Qt!<<-"s82p'!sf,* s2;ahai2<4rV66m"9nr0qYgBl!W`9&!W JcG9?r;Q]q)ta1,s7lTnq>U9grr2Zknbt-@$NU58"9AK&!V??n!<<0"rn[S_!!30#r;ZWs!!E9" roO1ZrZ_C@s8N'#!!3-ErqH6\rr)WKg&M1ruCG!$)1=s8E*(!!EJYpA+P/,UX`5 rr2Kl!!*'"s8VuurWFnVqYL$`p&Fsbq#:(9!<<-#!rMuqp]U[&!<<*&"9AH$qYU JcG9?r;Q]q)ta1,s7lTnq>U9grr2Zknbt-@$NU58"9AK&!V??n!<<0"rn[S_!!30#r;ZWs!!E9" roO1ZrZ_C@s8N'#!!3-ErqH6\rr)WKg&M1ruCG!$)1=s8E*(!!EJYpA+P/,UX`5 rr2Kl!!*'"s8VuurWFnVqYL$`p&Fsbq#:(9!<<-#!rMuqp]U[&!<<*&"9AH$qYU JcG9?r;Q]q)ta1,s7lTnq>U9grr2Zknbt-@$NU58"9AK&!V??n!<<0"rn[S_!!30#r;ZWs!!E9" roO1ZrZ_C@s8N'#!!3-ErqH6\rr)WKg&M1ruCG!$)1=s8E*(!!EJYpA+P/,UX`5 rr2Kl!!*'"s8VuurWFnVqYL$`p&Fsbq#:(9!<<-#!rMuqp]U[&!<<*&"9AH$qYU JcG9?r;Q]q(]Nt$s8)WgrqQKjs7#d_#8."C!!`]."7Q9l!<<0"rn[S_!!30#r;ZWs!!E9"roO1Z rY>J4s8N'#!!<3&rVlZmnFQYIrq>[MrW!N9s7lZq!<<,urr;urqtg-h#Q4W,#QOu(s8N&t!#5S= !XSf&n,<1]qY9sc!rr23^qYL*r!"f;5')qn1s8M9_J,~> JcG9?r;Q]q(]Nt$s8)WgrqQKjs7#d_#8."C!!`]."7Q9l!<<0"rn[S_!!30#r;ZWs!!E9"roO1Z rY>J4s8N'#!!<3&rVlZmnFQYIrq>[MrW!N9s7lZq!<<,urr;urqtg-h#Q4W,#QOu(s8N&t!#5S= !XSf&n,<1]qY9sc!rr23^qYL*r!"f;5')qn1s8M9_J,~> JcG9?r;Q]q(]Nt$s8)WgrqQKjs7#d_#8."C!!`]."7Q9l!<<0"rn[S_!!30#r;ZWs!!E9"roO1Z rY>J4s8N'#!!<3&rVlZmnFQYIrq>[MrW!N9s7lZq!<<,urr;urqtg-h#Q4W,#QOu(s8N&t!#5S= !XSf&n,<1]qY9sc!rr23^qYL*r!"f;5')qn1s8M9_J,~> JcG$8)#j=1qt9sfp\=@Uqu6!<_fk!W`9%rr1aR$ig>/s8;oo"98Q(rVkpYrr2lr (]X[@#R18=lhp>MrpB^`qY^h*/$31>DrUg9s"9eo+rVlp("9SW,":b5+qY1$hq"Oag!!*'$ rVlirrqHHmrr>V;r;Q`rrosH5~> JcG$8)#j=1qt9sfp\=@Uqu6!<_fk!W`9%rr1aR$ig>/s8;oo"98Q(rVkpYrr2lr (]X[@#R18=lhp>MrpB^`qY^h*/$31>DrUg9s"9eo+rVlp("9SW,":b5+qY1$hq"Oag!!*'$ rVlirrqHHmrr>V;r;Q`rrosH5~> JcG$8)#j=1qt9sfp\=@Uqu6!<_fk!W`9%rr1aR$ig>/s8;oo"98Q(rVkpYrr2lr (]X[@#R18=lhp>MrpB^`qY^h*/$31>DrUg9s"9eo+rVlp("9SW,":b5+qY1$hq"Oag!!*'$ rVlirrqHHmrr>V;r;Q`rrosH5~> JcG$8)#j:/q#C0^rqlZirR0$u!=Ai2!=Af2&I%Y(!W`9%rr1aR$ig>/s8;oo"98Q(rVkpYrr)ot rr*`7"9Ji7"99%crV?HhqYU*dpAb3t!<2s$rVus#rVlg.r;6Ej&c`+:!rr?%"8i,ts8E!-!rrE( "3UW5r;$-^rVufr!s8B"r;?UG"nhio&HMk;!rr?!rr<0("9\W%rW*!"! JcG$8)#j:/q#C0^rqlZirR0$u!=Ai2!=Af2&I%Y(!W`9%rr1aR$ig>/s8;oo"98Q(rVkpYrr)ot rr*`7"9Ji7"99%crV?HhqYU*dpAb3t!<2s$rVus#rVlg.r;6Ej&c`+:!rr?%"8i,ts8E!-!rrE( "3UW5r;$-^rVufr!s8B"r;?UG"nhio&HMk;!rr?!rr<0("9\W%rW*!"! JcG$8)#j:/q#C0^rqlZirR0$u!=Ai2!=Af2&I%Y(!W`9%rr1aR$ig>/s8;oo"98Q(rVkpYrr)ot rr*`7"9Ji7"99%crV?HhqYU*dpAb3t!<2s$rVus#rVlg.r;6Ej&c`+:!rr?%"8i,ts8E!-!rrE( "3UW5r;$-^rVufr!s8B"r;?UG"nhio&HMk;!rr?!rr<0("9\W%rW*!"! JcG9?r;Q]q(]F:.r:0g^me6[h"Tnf1! JcG9?r;Q]q(]F:.r:0g^me6[h"Tnf1! JcG9?r;Q]q(]F:.r:0g^me6[h"Tnf1! JcG9?!;uips8N&u!ri,srqQomrVWMp#QP&2!sef-!sT59%.F5u!<<0"rn[S_!!30#r;ZWs!!E9" roO1Zrr JcG9?!;uips8N&u!ri,srqQomrVWMp#QP&2!sef-!sT59%.F5u!<<0"rn[S_!!30#r;ZWs!!E9" roO1Zrr JcG9?!;uips8N&u!ri,srqQomrVWMp#QP&2!sef-!sT59%.F5u!<<0"rn[S_!!30#r;ZWs!!E9" roO1Zrr !<.QLo)Jaes83f6rr<#sq"t$hpA']/!"0&4"9JT(!/s8;oo"98Q( rVkpYrr2rt1]@=T#6=r3!!30,!;HH`rVHNdq?$a"!<<$!!!33%rVuosq=aU\qtP18!s&K("8i,t s8E!-!1$es8Mrs!sAK$rVcdA"p+T"o`G?u#R1G4rVcd%"U,#,rVlp!!s8E-*!>,>0quHd* "p5)2qYC-m!!*'"s8VuurW#=er;HQloD\Xl#n@(?!<<-#!rW)tq$$m'!t#-Lr;?Hbp\4Uarr)p! !!!&uquHs%!rMH]q"sp_pB(R&!!WN4":5A4rr<#tl2Q8~> !<.QLo)Jaes83f6rr<#sq"t$hpA']/!"0&4"9JT(!/s8;oo"98Q( rVkpYrr2rt1]@=T#6=r3!!30,!;HH`rVHNdq?$a"!<<$!!!33%rVuosq=aU\qtP18!s&K("8i,t s8E!-!1$es8Mrs!sAK$rVcdA"p+T"o`G?u#R1G4rVcd%"U,#,rVlp!!s8E-*!>,>0quHd* "p5)2qYC-m!!*'"s8VuurW#=er;HQloD\Xl#n@(?!<<-#!rW)tq$$m'!t#-Lr;?Hbp\4Uarr)p! !!!&uquHs%!rMH]q"sp_pB(R&!!WN4":5A4rr<#tl2Q8~> !<.QLo)Jaes83f6rr<#sq"t$hpA']/!"0&4"9JT(!/s8;oo"98Q( rVkpYrr2rt1]@=T#6=r3!!30,!;HH`rVHNdq?$a"!<<$!!!33%rVuosq=aU\qtP18!s&K("8i,t s8E!-!1$es8Mrs!sAK$rVcdA"p+T"o`G?u#R1G4rVcd%"U,#,rVlp!!s8E-*!>,>0quHd* "p5)2qYC-m!!*'"s8VuurW#=er;HQloD\Xl#n@(?!<<-#!rW)tq$$m'!t#-Lr;?Hbp\4Uarr)p! !!!&uquHs%!rMH]q"sp_pB(R&!!WN4":5A4rr<#tl2Q8~> !<1FHs8Jen')DJ$rVHEks8D]fqu-M:"9SZ1r;uls!WiB'mf3Ci!!3)uh>[l`!W`8us8)p!"98?! jo>>Zs8OnRrr<3&!WiH1!=/`'rVcZiqu6Nr!!<6$r;cm#!!)uts8Mrnr;6Nfpk\tO!W`E#s8Dus !%.pM#6Fl2!rVZfqYpNo!!*'("9&9!!!!$"!WW&nKE_Db!!\&SqZ?a")?]p:quHcu!W`9&!:9prW)rr,l794r;[0-!X&N(!<<3!s8Mj!!!!-%M=gWAq#(!]r;HQm!!*!! ')hh1"p"`%rUoj`o`"Fe#64r7r;Zj#rVlisrosH5~> !<1FHs8Jen')DJ$rVHEks8D]fqu-M:"9SZ1r;uls!WiB'mf3Ci!!3)uh>[l`!W`8us8)p!"98?! jo>>Zs8OnRrr<3&!WiH1!=/`'rVcZiqu6Nr!!<6$r;cm#!!)uts8Mrnr;6Nfpk\tO!W`E#s8Dus !%.pM#6Fl2!rVZfqYpNo!!*'("9&9!!!!$"!WW&nKE_Db!!\&SqZ?a")?]p:quHcu!W`9&!:9prW)rr,l794r;[0-!X&N(!<<3!s8Mj!!!!-%M=gWAq#(!]r;HQm!!*!! ')hh1"p"`%rUoj`o`"Fe#64r7r;Zj#rVlisrosH5~> !<1FHs8Jen')DJ$rVHEks8D]fqu-M:"9SZ1r;uls!WiB'mf3Ci!!3)uh>[l`!W`8us8)p!"98?! jo>>Zs8OnRrr<3&!WiH1!=/`'rVcZiqu6Nr!!<6$r;cm#!!)uts8Mrnr;6Nfpk\tO!W`E#s8Dus !%.pM#6Fl2!rVZfqYpNo!!*'("9&9!!!!$"!WW&nKE_Db!!\&SqZ?a")?]p:quHcu!W`9&!:9prW)rr,l794r;[0-!X&N(!<<3!s8Mj!!!!-%M=gWAq#(!]r;HQm!!*!! ')hh1"p"`%rUoj`o`"Fe#64r7r;Zj#rVlisrosH5~> dJs7GU]:Al&+]SoqYU3hq#(*h@/pH4"9&E(!WhHa!W`9%rr1aR$ig>/s8;oo"98Q(rVkpYrr2rt J,]HJ"98K'!sJ].!rD`lrVZNkr;ls#!<;uu!<`B(rVZWnq>^*cqYL*]!)&s7$3l"9A[4q>1#[R\Q=FqYp0l"p"i-rVufs!!*'"!WW3)!G5YF@U@M%B'*&4=!sJZ+"9/2o$3gJ4"oA&hTpVLHT)JKZ A,lT7!($Z!s\l5!rr?%! dJs7GU]:Al&+]SoqYU3hq#(*h@/pH4"9&E(!WhHa!W`9%rr1aR$ig>/s8;oo"98Q(rVkpYrr2rt J,]HJ"98K'!sJ].!rD`lrVZNkr;ls#!<;uu!<`B(rVZWnq>^*cqYL*]!)&s7$3l"9A[4q>1#[R\Q=FqYp0l"p"i-rVufs!!*'"!WW3)!G5YF@U@M%B'*&4=!sJZ+"9/2o$3gJ4"oA&hTpVLHT)JKZ A,lT7!($Z!s\l5!rr?%! dJs7GU]:Al&+]SoqYU3hq#(*h@/pH4"9&E(!WhHa!W`9%rr1aR$ig>/s8;oo"98Q(rVkpYrr2rt J,]HJ"98K'!sJ].!rD`lrVZNkr;ls#!<;uu!<`B(rVZWnq>^*cqYL*]!)&s7$3l"9A[4q>1#[R\Q=FqYp0l"p"i-rVufs!!*'"!WW3)!G5YF@U@M%B'*&4=!sJZ+"9/2o$3gJ4"oA&hTpVLHT)JKZ A,lT7!($Z!s\l5!rr?%! JcG9?s8*Q)rUfm`p%/.^:e1U#!pX(!!E0!rVliu!!E9'"p"c0 "p>#.#6bbH!WrH+qtTrp"To/7!;6<[rVZEfrVZ7^"pY,7!;69h"8r36!s&E.!"f23$NU5:"9JZ+ !r`/us8N#ls8W)ss$$A`!!39('a"LI"TfA<$jR"LEs"9JT&rr<3&!<<#os 7Q6_q#pg&!s&H,!s&K%rr<#tl2Q8~> JcG9?s8*Q)rUfm`p%/.^:e1U#!pX(!!E0!rVliu!!E9'"p"c0 "p>#.#6bbH!WrH+qtTrp"To/7!;6<[rVZEfrVZ7^"pY,7!;69h"8r36!s&E.!"f23$NU5:"9JZ+ !r`/us8N#ls8W)ss$$A`!!39('a"LI"TfA<$jR"LEs"9JT&rr<3&!<<#os 7Q6_q#pg&!s&H,!s&K%rr<#tl2Q8~> JcG9?s8*Q)rUfm`p%/.^:e1U#!pX(!!E0!rVliu!!E9'"p"c0 "p>#.#6bbH!WrH+qtTrp"To/7!;6<[rVZEfrVZ7^"pY,7!;69h"8r36!s&E.!"f23$NU5:"9JZ+ !r`/us8N#ls8W)ss$$A`!!39('a"LI"TfA<$jR"LEs"9JT&rr<3&!<<#os 7Q6_q#pg&!s&H,!s&K%rr<#tl2Q8~> ao;A?qu6ZqZ2YX;rqu*XrUKjaqCVgW#m:>2!G9!F#!_rr)ckrqulu!W`9!!q#:0` nGb*H!X/T,o`+@V"onW)"9eo0!!NB0!>#>5"9AK'!!<)urqlcs!!**!rVZUH2[V8:p[\+[! ao;A?qu6ZqZ2YX;rqu*XrUKjaqCVgW#m:>2!G9!F#!_rr)ckrqulu!W`9!!q#:0` nGb*H!X/T,o`+@V"onW)"9eo0!!NB0!>#>5"9AK'!!<)urqlcs!!**!rVZUH2[V8:p[\+[! ao;A?qu6ZqZ2YX;rqu*XrUKjaqCVgW#m:>2!G9!F#!_rr)ckrqulu!W`9!!q#:0` nGb*H!X/T,o`+@V"onW)"9eo0!!NB0!>#>5"9AK'!!<)urqlcs!!**!rVZUH2[V8:p[\+[! ci#59!"0,6$3181!XSf)qu5[j!!*',(B*b%qtp3g#mUM9"U4Yps8E-!!#,M9!!EZ0 &-)\;!<<6'!< ci#59!"0,6$3181!XSf)qu5[j!!*',(B*b%qtp3g#mUM9"U4Yps8E-!!#,M9!!EZ0 &-)\;!<<6'!< ci#59!"0,6$3181!XSf)qu5[j!!*',(B*b%qtp3g#mUM9"U4Yps8E-!!#,M9!!EZ0 &-)\;!<<6'!< dJs7Frqlots8W#qrVcirr;$?.s7uU'rq5j]jnJQN":5&3"98W&!<3'"!pBUc!<<0"rn[S_!!30# r;ZWs!!E9"roO1Zrr<"0rr2s#!!30&"ptG)pAamcr;-Ek!WW9%s8E'$"T\`(rqlj#"onf1lMgVb !!!0)r;Z`q!!*'%"98N*!s/o8":5,6!X&K'$ip;&r;Q]d"ptG4#5%odr;6Hn!sf8F!q?3hrqcQn &ci4A":+u7!=o;7!sSf,!<<3"rr;usp](9mrVoUj!rrB-"9Jo2!s/N6#S@%F$NL2-!=&Pos7uWq 'a4R=$2O;arqc3q!!!<.q!A"Po)8Un!!!'$#Qt/@#Rpb=%Klq9!!*'$r;Zco!W<#ur$M(:!=&u@ "9/&o!WrT-!WW0""TSQ&rVHNnrTjL^!=B)8!X&N(!r`0!rosH5~> dJs7Frqlots8W#qrVcirr;$?.s7uU'rq5j]jnJQN":5&3"98W&!<3'"!pBUc!<<0"rn[S_!!30# r;ZWs!!E9"roO1Zrr<"0rr2s#!!30&"ptG)pAamcr;-Ek!WW9%s8E'$"T\`(rqlj#"onf1lMgVb !!!0)r;Z`q!!*'%"98N*!s/o8":5,6!X&K'$ip;&r;Q]d"ptG4#5%odr;6Hn!sf8F!q?3hrqcQn &ci4A":+u7!=o;7!sSf,!<<3"rr;usp](9mrVoUj!rrB-"9Jo2!s/N6#S@%F$NL2-!=&Pos7uWq 'a4R=$2O;arqc3q!!!<.q!A"Po)8Un!!!'$#Qt/@#Rpb=%Klq9!!*'$r;Zco!W<#ur$M(:!=&u@ "9/&o!WrT-!WW0""TSQ&rVHNnrTjL^!=B)8!X&N(!r`0!rosH5~> dJs7Frqlots8W#qrVcirr;$?.s7uU'rq5j]jnJQN":5&3"98W&!<3'"!pBUc!<<0"rn[S_!!30# r;ZWs!!E9"roO1Zrr<"0rr2s#!!30&"ptG)pAamcr;-Ek!WW9%s8E'$"T\`(rqlj#"onf1lMgVb !!!0)r;Z`q!!*'%"98N*!s/o8":5,6!X&K'$ip;&r;Q]d"ptG4#5%odr;6Hn!sf8F!q?3hrqcQn &ci4A":+u7!=o;7!sSf,!<<3"rr;usp](9mrVoUj!rrB-"9Jo2!s/N6#S@%F$NL2-!=&Pos7uWq 'a4R=$2O;arqc3q!!!<.q!A"Po)8Un!!!'$#Qt/@#Rpb=%Klq9!!*'$r;Zco!W<#ur$M(:!=&u@ "9/&o!WrT-!WW0""TSQ&rVHNnrTjL^!=B)8!X&N(!r`0!rosH5~> dJs7Ds8!-#rVuopqu$Ekr;6Berk\X1r"&borV$6P!=]#7"onW3!/ s8;oo"98Q(rVkpYrr2lr1B7OX!WWE8)ZKI1rUp-eqYpEp!!30#r;cp%!!;ofq>gX'!>bh:q"+Xh !!!-!s8Drt!WE'g!L!b"TSi9"RZ$an,NA)!! dJs7Ds8!-#rVuopqu$Ekr;6Berk\X1r"&borV$6P!=]#7"onW3!/ s8;oo"98Q(rVkpYrr2lr1B7OX!WWE8)ZKI1rUp-eqYpEp!!30#r;cp%!!;ofq>gX'!>bh:q"+Xh !!!-!s8Drt!WE'g!L!b"TSi9"RZ$an,NA)!! dJs7Ds8!-#rVuopqu$Ekr;6Berk\X1r"&borV$6P!=]#7"onW3!/ s8;oo"98Q(rVkpYrr2lr1B7OX!WWE8)ZKI1rUp-eqYpEp!!30#r;cp%!!;ofq>gX'!>bh:q"+Xh !!!-!s8Drt!WE'g!L!b"TSi9"RZ$an,NA)!! fDbjMrr3T0rVQHeqYU-hrVHEgr;?HhqYU6krk\UNqu$?hqtg0erVuQ9aTMSE"9\]-"98E&huEfZ !!3)uh>[l`!W`8us8)p!"98?!l2Lb_rr4YNrVc`ps8E$&!X/T]1B.(Jrpp*er;-Bi!1'h!<3-'r;QZor;]=m"TSN5!WVonq=OL]!!EB(#kn8oqu6Bb2$a0b#RL)$ bQ@hP"U$^TqZ$HkrVus"!!*9,!<`Duo_nUbqu-Tr!<<3"s8;orrqHHmrr<"Grr;p!!!*-)rqcEb rposf$NLA fDbjMrr3T0rVQHeqYU-hrVHEgr;?HhqYU6krk\UNqu$?hqtg0erVuQ9aTMSE"9\]-"98E&huEfZ !!3)uh>[l`!W`8us8)p!"98?!l2Lb_rr4YNrVc`ps8E$&!X/T]1B.(Jrpp*er;-Bi!1'h!<3-'r;QZor;]=m"TSN5!WVonq=OL]!!EB(#kn8oqu6Bb2$a0b#RL)$ bQ@hP"U$^TqZ$HkrVus"!!*9,!<`Duo_nUbqu-Tr!<<3"s8;orrqHHmrr<"Grr;p!!!*-)rqcEb rposf$NLA fDbjMrr3T0rVQHeqYU-hrVHEgr;?HhqYU6krk\UNqu$?hqtg0erVuQ9aTMSE"9\]-"98E&huEfZ !!3)uh>[l`!W`8us8)p!"98?!l2Lb_rr4YNrVc`ps8E$&!X/T]1B.(Jrpp*er;-Bi!1'h!<3-'r;QZor;]=m"TSN5!WVonq=OL]!!EB(#kn8oqu6Bb2$a0b#RL)$ bQ@hP"U$^TqZ$HkrVus"!!*9,!<`Duo_nUbqu-Tr!<<3"s8;orrqHHmrr<"Grr;p!!!*-)rqcEb rposf$NLA fDbjMrr3i5q#C0`rVZ?cq"Fa^qtg3hqu-Hhq>'pe_#FrBrV?:*hrqlKm#QOr*q$$g&!s\Po q#LU""V"*$s7lZn!]^/Xs82lt!WrE+!s8N.rVZWorr;ru!WrQ/q>1*iq>C6^!<<0)!O/p2%0QY; 6iQlYrr)Zk!s8W'!"T,5!W2`iq>UEo!<<-#!r`,urr2Zls8N&u$NC))!rr<("9/>srqe,>!<`K, !!!-&!!E/tr;?EerC7:u!s\k2[/^75!X&&mrV-?jr:pQurW<,u#5nGtqu-g$rW>:`"onW)qZ$Tm !=&Z,"8MWi8.Yn/#6Y"qo`P7!!W`/q!X&N,p\=acrVcZkqu-QhrW3N3"U+c%r;Q]nrTaE5~> fDbjMrr3i5q#C0`rVZ?cq"Fa^qtg3hqu-Hhq>'pe_#FrBrV?:*hrqlKm#QOr*q$$g&!s\Po q#LU""V"*$s7lZn!]^/Xs82lt!WrE+!s8N.rVZWorr;ru!WrQ/q>1*iq>C6^!<<0)!O/p2%0QY; 6iQlYrr)Zk!s8W'!"T,5!W2`iq>UEo!<<-#!r`,urr2Zls8N&u$NC))!rr<("9/>srqe,>!<`K, !!!-&!!E/tr;?EerC7:u!s\k2[/^75!X&&mrV-?jr:pQurW<,u#5nGtqu-g$rW>:`"onW)qZ$Tm !=&Z,"8MWi8.Yn/#6Y"qo`P7!!W`/q!X&N,p\=acrVcZkqu-QhrW3N3"U+c%r;Q]nrTaE5~> fDbjMrr3i5q#C0`rVZ?cq"Fa^qtg3hqu-Hhq>'pe_#FrBrV?:*hrqlKm#QOr*q$$g&!s\Po q#LU""V"*$s7lZn!]^/Xs82lt!WrE+!s8N.rVZWorr;ru!WrQ/q>1*iq>C6^!<<0)!O/p2%0QY; 6iQlYrr)Zk!s8W'!"T,5!W2`iq>UEo!<<-#!r`,urr2Zls8N&u$NC))!rr<("9/>srqe,>!<`K, !!!-&!!E/tr;?EerC7:u!s\k2[/^75!X&&mrV-?jr:pQurW<,u#5nGtqu-g$rW>:`"onW)qZ$Tm !=&Z,"8MWi8.Yn/#6Y"qo`P7!!W`/q!X&N,p\=acrVcZkqu-QhrW3N3"U+c%r;Q]nrTaE5~> fDbjMrr3Z0q>C'bq>^EfrU^'^q=Xdbq#('hqZ-T/rsnu'o_SO\q=U?["qq%E#4DQj!U]ph!<<0" rn[S_!!30#r;ZWs!!E9"rosH1rr<#trVQNjqtL*j!!ri0q"jpbr;-HgrqlZnp]pj%"Sqlq"98K* rV?8$!sK&4s7c fDbjMrr3Z0q>C'bq>^EfrU^'^q=Xdbq#('hqZ-T/rsnu'o_SO\q=U?["qq%E#4DQj!U]ph!<<0" rn[S_!!30#r;ZWs!!E9"rosH1rr<#trVQNjqtL*j!!ri0q"jpbr;-HgrqlZnp]pj%"Sqlq"98K* rV?8$!sK&4s7c fDbjMrr3Z0q>C'bq>^EfrU^'^q=Xdbq#('hqZ-T/rsnu'o_SO\q=U?["qq%E#4DQj!U]ph!<<0" rn[S_!!30#r;ZWs!!E9"rosH1rr<#trVQNjqtL*j!!ri0q"jpbr;-HgrqlZnp]pj%"Sqlq"98K* rV?8$!sK&4s7c fDbjMrr3f5qYKsdK7s*sqi$2]Ljar1qYU3grVc`1rt"l'rVlTirI0M(!X]/:!X%ijrrMKe!W`9% rr1aR$ig>/s8;oo"98Q(rVksZ(B47/qu$9ao`5$r"TnGgrV69eq#C?jrr)j""U+u"q#Up&!EB$m p\]>hH@#G`pAY*n"Tnf*rVZO!#6P)2!!N?/#Pn;rrr)ip!!*'""T88trV$0\q"=ms!sJZ+$N^G6 HMRC7qtKs_q[NW.!WrN+!W`],q>^KorWN<&!<<3"rr;usp](9ms8P"Vs8E*#!!<9$s8N&qq#(I' !!*0)!s&T4qtU*hr:p6bH3aZV$NLJ8!Y>G-p@\C\r:p fDbjMrr3f5qYKsdK7s*sqi$2]Ljar1qYU3grVc`1rt"l'rVlTirI0M(!X]/:!X%ijrrMKe!W`9% rr1aR$ig>/s8;oo"98Q(rVksZ(B47/qu$9ao`5$r"TnGgrV69eq#C?jrr)j""U+u"q#Up&!EB$m p\]>hH@#G`pAY*n"Tnf*rVZO!#6P)2!!N?/#Pn;rrr)ip!!*'""T88trV$0\q"=ms!sJZ+$N^G6 HMRC7qtKs_q[NW.!WrN+!W`],q>^KorWN<&!<<3"rr;usp](9ms8P"Vs8E*#!!<9$s8N&qq#(I' !!*0)!s&T4qtU*hr:p6bH3aZV$NLJ8!Y>G-p@\C\r:p fDbjMrr3f5qYKsdK7s*sqi$2]Ljar1qYU3grVc`1rt"l'rVlTirI0M(!X]/:!X%ijrrMKe!W`9% rr1aR$ig>/s8;oo"98Q(rVksZ(B47/qu$9ao`5$r"TnGgrV69eq#C?jrr)j""U+u"q#Up&!EB$m p\]>hH@#G`pAY*n"Tnf*rVZO!#6P)2!!N?/#Pn;rrr)ip!!*'""T88trV$0\q"=ms!sJZ+$N^G6 HMRC7qtKs_q[NW.!WrN+!W`],q>^KorWN<&!<<3"rr;usp](9ms8P"Vs8E*#!!<9$s8N&qq#(I' !!*0)!s&T4qtU*hr:p6bH3aZV$NLJ8!Y>G-p@\C\r:p fDbjMrr3`3qt^)*"pk/'E!ujQ#6k22q"t!frr2otrk\UFq#1!`q=nb.!XJi1%Kch8fDksR!!3)u h>[l`!W`8us8)p!"98?!k5S'Pqtg3fqtKfH"p+r0DXdDrs8VimrqZEirrrc1#Pdii!sA`5r;-He q>1$cq=t!b!!NN,!WW,qq[3]4"9SW.!"9,.r;HWnrr)cq*sDQ@r;HHgq=a??"9J`-"UP54OoP"E r;??eq=b1!"8r62!sK#,pAY*krVcft!<<3"rr;usp](9ms8NB(s8E*#!!*)trr4JHq=k4&!<<*$ ! fDbjMrr3`3qt^)*"pk/'E!ujQ#6k22q"t!frr2otrk\UFq#1!`q=nb.!XJi1%Kch8fDksR!!3)u h>[l`!W`8us8)p!"98?!k5S'Pqtg3fqtKfH"p+r0DXdDrs8VimrqZEirrrc1#Pdii!sA`5r;-He q>1$cq=t!b!!NN,!WW,qq[3]4"9SW.!"9,.r;HWnrr)cq*sDQ@r;HHgq=a??"9J`-"UP54OoP"E r;??eq=b1!"8r62!sK#,pAY*krVcft!<<3"rr;usp](9ms8NB(s8E*#!!*)trr4JHq=k4&!<<*$ ! fDbjMrr3`3qt^)*"pk/'E!ujQ#6k22q"t!frr2otrk\UFq#1!`q=nb.!XJi1%Kch8fDksR!!3)u h>[l`!W`8us8)p!"98?!k5S'Pqtg3fqtKfH"p+r0DXdDrs8VimrqZEirrrc1#Pdii!sA`5r;-He q>1$cq=t!b!!NN,!WW,qq[3]4"9SW.!"9,.r;HWnrr)cq*sDQ@r;HHgq=a??"9J`-"UP54OoP"E r;??eq=b1!"8r62!sK#,pAY*krVcft!<<3"rr;usp](9ms8NB(s8E*#!!*)trr4JHq=k4&!<<*$ ! g&M*Orr3K-rVZHj!"&o)rr`?/!W`3$s8)iprVZZ:s7uX)qt^0^mna;k!!i`1#Qb&1fDksR!!3)u h>[l`!W`8us8)p!"98?!k5Ptjqtg3fpA=X`"p#26!F/J#<&[rY<**+"=p"s/#6+6!!!iW2;cQjp <*WL)=]e^-!s/H&!WW,rqZmB.!rr<*!=K55r;HWnrr)cq1BdXRqYg?ho)8:ZVZ6`)!s/N(rU'FU rVZHdq"Y+!"T\T'!qtC:%!s&B' ! g&M*Orr3K-rVZHj!"&o)rr`?/!W`3$s8)iprVZZ:s7uX)qt^0^mna;k!!i`1#Qb&1fDksR!!3)u h>[l`!W`8us8)p!"98?!k5Ptjqtg3fpA=X`"p#26!F/J#<&[rY<**+"=p"s/#6+6!!!iW2;cQjp <*WL)=]e^-!s/H&!WW,rqZmB.!rr<*!=K55r;HWnrr)cq1BdXRqYg?ho)8:ZVZ6`)!s/N(rU'FU rVZHdq"Y+!"T\T'!qtC:%!s&B' ! g&M*Orr3K-rVZHj!"&o)rr`?/!W`3$s8)iprVZZ:s7uX)qt^0^mna;k!!i`1#Qb&1fDksR!!3)u h>[l`!W`8us8)p!"98?!k5Ptjqtg3fpA=X`"p#26!F/J#<&[rY<**+"=p"s/#6+6!!!iW2;cQjp <*WL)=]e^-!s/H&!WW,rqZmB.!rr<*!=K55r;HWnrr)cq1BdXRqYg?ho)8:ZVZ6`)!s/N(rU'FU rVZHdq"Y+!"T\T'!qtC:%!s&B' ! g&M*Os8W)ts8WK7"p4i*$NpG:#64em!<3*!!;QZj!!30$ !WN)SrsSl/!<;usqZHm$s8DrZrri;tqu$Hmr,MJK!sAi9"pb7A s7l0_r;QTiqYgTu!L0hq#LHr!!)usrr)clqud'*"98N0!:3km/MS~> g&M*Os8W)ts8WK7"p4i*$NpG:#64em!<3*!!;QZj!!30$ !WN)SrsSl/!<;usqZHm$s8DrZrri;tqu$Hmr,MJK!sAi9"pb7A s7l0_r;QTiqYgTu!L0hq#LHr!!)usrr)clqud'*"98N0!:3km/MS~> g&M*Os8W)ts8WK7"p4i*$NpG:#64em!<3*!!;QZj!!30$ !WN)SrsSl/!<;usqZHm$s8DrZrri;tqu$Hmr,MJK!sAi9"pb7A s7l0_r;QTiqYgTu!L0hq#LHr!!)usrr)clqud'*"98N0!:3km/MS~> g&M*Os8W&s&,H))!!rVr!GPC#lk#-!!<,us82lt!Xeu0"pk86rVlisrr;rq!$_UEr:g$`qu$Bgp&U6aoDeairVup!rr)iq-N*rF#7(;3#m()/qZ$Qn !!<<'":G>5)$( g&M*Os8W&s&,H))!!rVr!GPC#lk#-!!<,us82lt!Xeu0"pk86rVlisrr;rq!$_UEr:g$`qu$Bgp&U6aoDeairVup!rr)iq-N*rF#7(;3#m()/qZ$Qn !!<<'":G>5)$( g&M*Os8W&s&,H))!!rVr!GPC#lk#-!!<,us82lt!Xeu0"pk86rVlisrr;rq!$_UEr:g$`qu$Bgp&U6aoDeairVup!rr)iq-N*rF#7(;3#m()/qZ$Qn !!<<'":G>5)$( g&M*Os8W&ss8urr`B'r;HTo!<1%=&,uJ'rr2ZknGX=+$ip>9"R,mr!Y#,8!!!0* !!Wl4!!ii(!!30$!WN)SrsSl/!<;usqZHm$s8DrZs8Dp)s8;l]rVl,2 "T\Vlqu?Kk!!!*$!<<9'!W`<%! g&M*Os8W&ss8urr`B'r;HTo!<1%=&,uJ'rr2ZknGX=+$ip>9"R,mr!Y#,8!!!0* !!Wl4!!ii(!!30$!WN)SrsSl/!<;usqZHm$s8DrZs8Dp)s8;l]rVl,2 "T\Vlqu?Kk!!!*$!<<9'!W`<%! g&M*Os8W&ss8urr`B'r;HTo!<1%=&,uJ'rr2ZknGX=+$ip>9"R,mr!Y#,8!!!0* !!Wl4!!ii(!!30$!WN)SrsSl/!<;usqZHm$s8DrZs8Dp)s8;l]rVl,2 "T\Vlqu?Kk!!!*$!<<9'!W`<%! e,TCG&HDn5s8N3'!;l`s!W`5urr<#trlG*Mp\t*jnFuJR#lk83#R182k5Yr"#Qk5@%.jo-$NL2- $2=K%!<<0"rn[S_!!30#r;ZWs!!E9"ro!e_rVl]nrp9Ik%Lr.@'b(W`$ig,'q[ErI$kEmY$k*RR% LimH%0$bnp\t-as8D[$$lToj%fH7uoDegbqYpF'$m#?AqYU e,TCG&HDn5s8N3'!;l`s!W`5urr<#trlG*Mp\t*jnFuJR#lk83#R182k5Yr"#Qk5@%.jo-$NL2- $2=K%!<<0"rn[S_!!30#r;ZWs!!E9"ro!e_rVl]nrp9Ik%Lr.@'b(W`$ig,'q[ErI$kEmY$k*RR% LimH%0$bnp\t-as8D[$$lToj%fH7uoDegbqYpF'$m#?AqYU e,TCG&HDn5s8N3'!;l`s!W`5urr<#trlG*Mp\t*jnFuJR#lk83#R182k5Yr"#Qk5@%.jo-$NL2- $2=K%!<<0"rn[S_!!30#r;ZWs!!E9"ro!e_rVl]nrp9Ik%Lr.@'b(W`$ig,'q[ErI$kEmY$k*RR% LimH%0$bnp\t-as8D[$$lToj%fH7uoDegbqYpF'$m#?AqYU e,TCG&-)e4rr3'&!W2it!Wi?"rr;rraSueCq>:-agAhH[#QkDE!!<>f!"T/8$4m4E,ldlE#6b): !>"r*!W`9%rr1aR$ig>/s8;oo"98Q(rVkdU$3'hus7uNhr;Q]orVuj.rVlirr;6HlpAOmeqYpEa r;QZqrVlilrZ:k6pAOpdqY^9[r;-$ZrVQWgs8;HSrVuWlqYU0gp\k+Arqu]mp@nOWrr2llrr;up qu-EbqYg'ar:Ksap\4L\qt^$^p]('dq>L0Zs&ARgq"t!gqtTp`lM^>Ap[nFVq>L-^p\k'fnG`%D rVZ]dr;Q3cp&4aXrV$6`r;6?hs7ZBinGN:^rUoCRrqlZaqsj@Xqsa@Yq"a^arUp0Zs8MKdrW)oq rY5>1rr;cbq>C*bp%[qNr;? e,TCG&-)e4rr3'&!W2it!Wi?"rr;rraSueCq>:-agAhH[#QkDE!!<>f!"T/8$4m4E,ldlE#6b): !>"r*!W`9%rr1aR$ig>/s8;oo"98Q(rVkdU$3'hus7uNhr;Q]orVuj.rVlirr;6HlpAOmeqYpEa r;QZqrVlilrZ:k6pAOpdqY^9[r;-$ZrVQWgs8;HSrVuWlqYU0gp\k+Arqu]mp@nOWrr2llrr;up qu-EbqYg'ar:Ksap\4L\qt^$^p]('dq>L0Zs&ARgq"t!gqtTp`lM^>Ap[nFVq>L-^p\k'fnG`%D rVZ]dr;Q3cp&4aXrV$6`r;6?hs7ZBinGN:^rUoCRrqlZaqsj@Xqsa@Yq"a^arUp0Zs8MKdrW)oq rY5>1rr;cbq>C*bp%[qNr;? e,TCG&-)e4rr3'&!W2it!Wi?"rr;rraSueCq>:-agAhH[#QkDE!!<>f!"T/8$4m4E,ldlE#6b): !>"r*!W`9%rr1aR$ig>/s8;oo"98Q(rVkdU$3'hus7uNhr;Q]orVuj.rVlirr;6HlpAOmeqYpEa r;QZqrVlilrZ:k6pAOpdqY^9[r;-$ZrVQWgs8;HSrVuWlqYU0gp\k+Arqu]mp@nOWrr2llrr;up qu-EbqYg'ar:Ksap\4L\qt^$^p]('dq>L0Zs&ARgq"t!gqtTp`lM^>Ap[nFVq>L-^p\k'fnG`%D rVZ]dr;Q3cp&4aXrV$6`r;6?hs7ZBinGN:^rUoCRrqlZaqsj@Xqsa@Yq"a^arUp0Zs8MKdrW)oq rY5>1rr;cbq>C*bp%[qNr;? e,TCG%0-J1rr)s$!W2it!Wi?!rl4sKr;-?*]E\HD!SQrVl]s"pkM9#6af% !W`9%rr1aR$ig>/s8;oo"98Q(rVkdUs8E<$rV$9\nb`7^rr)lr"TA?!rVZZk%/fblr9!qHrqlWl r;HWprr2rrrqmE)qYU$_qX47Zo)81Uqu-0XrV$6g$3'c!p&4FZrqZQmrrrE#qtpC3dqt^6_pA4des82WeoD/7Vq>C$cqY^9Ur:]^JrquB\oCqqQqu-$\q>:$a rVc]orr!?+p\jX[kOni?r:U'emed"_s8NK+rVZQkqs*tQoD\UIs*t~> e,TCG%0-J1rr)s$!W2it!Wi?!rl4sKr;-?*]E\HD!SQrVl]s"pkM9#6af% !W`9%rr1aR$ig>/s8;oo"98Q(rVkdUs8E<$rV$9\nb`7^rr)lr"TA?!rVZZk%/fblr9!qHrqlWl r;HWprr2rrrqmE)qYU$_qX47Zo)81Uqu-0XrV$6g$3'c!p&4FZrqZQmrrrE#qtpC3dqt^6_pA4des82WeoD/7Vq>C$cqY^9Ur:]^JrquB\oCqqQqu-$\q>:$a rVc]orr!?+p\jX[kOni?r:U'emed"_s8NK+rVZQkqs*tQoD\UIs*t~> e,TCG%0-J1rr)s$!W2it!Wi?!rl4sKr;-?*]E\HD!SQrVl]s"pkM9#6af% !W`9%rr1aR$ig>/s8;oo"98Q(rVkdUs8E<$rV$9\nb`7^rr)lr"TA?!rVZZk%/fblr9!qHrqlWl r;HWprr2rrrqmE)qYU$_qX47Zo)81Uqu-0XrV$6g$3'c!p&4FZrqZQmrrrE#qtpC3dqt^6_pA4des82WeoD/7Vq>C$cqY^9Ur:]^JrquB\oCqqQqu-$\q>:$a rVc]orr!?+p\jX[kOni?r:U'emed"_s8NK+rVZQkqs*tQoD\UIs*t~> e,TCG$ipJ2rr)p#!W2it!Wi<#s8;rscN!_>&,6*u"Tnf1![l`!W`8us8)p!"98?!i;X5arqcWkrq?6dr;HWorr3`4r;?Nkq=jX\qtg*[p \ambr;6Hms8DrsrVudAqsXIXqYg9ip%eI\rU'LXq#1$eq"FR^qYBm\rqlTlrVlisrVQTj-hdE0q u6Qls8Mrqs8Vifs8;E\r;?9Yr;?Bdr;?Bdr;-'`rql`lqXOSeq>L0`rq--^n+ZkTq"=:Uq"jmUr UBdXmJH_UpA+I[p\sg[r;$9bp\O[_qY:*es8;ZgrV$0cp&FUXr:TgTqtg$br9=(Tq>0jcr:'[Ur qQ'UrV-3frVe&ArquZmoD/:Tr:9aap@J.WrUg*frVlfpr;?Hinb<"Zr;?EPs*t~> e,TCG$ipJ2rr)p#!W2it!Wi<#s8;rscN!_>&,6*u"Tnf1![l`!W`8us8)p!"98?!i;X5arqcWkrq?6dr;HWorr3`4r;?Nkq=jX\qtg*[p \ambr;6Hms8DrsrVudAqsXIXqYg9ip%eI\rU'LXq#1$eq"FR^qYBm\rqlTlrVlisrVQTj-hdE0q u6Qls8Mrqs8Vifs8;E\r;?9Yr;?Bdr;?Bdr;-'`rql`lqXOSeq>L0`rq--^n+ZkTq"=:Uq"jmUr UBdXmJH_UpA+I[p\sg[r;$9bp\O[_qY:*es8;ZgrV$0cp&FUXr:TgTqtg$br9=(Tq>0jcr:'[Ur qQ'UrV-3frVe&ArquZmoD/:Tr:9aap@J.WrUg*frVlfpr;?Hinb<"Zr;?EPs*t~> e,TCG$ipJ2rr)p#!W2it!Wi<#s8;rscN!_>&,6*u"Tnf1![l`!W`8us8)p!"98?!i;X5arqcWkrq?6dr;HWorr3`4r;?Nkq=jX\qtg*[p \ambr;6Hms8DrsrVudAqsXIXqYg9ip%eI\rU'LXq#1$eq"FR^qYBm\rqlTlrVlisrVQTj-hdE0q u6Qls8Mrqs8Vifs8;E\r;?9Yr;?Bdr;?Bdr;-'`rql`lqXOSeq>L0`rq--^n+ZkTq"=:Uq"jmUr UBdXmJH_UpA+I[p\sg[r;$9bp\O[_qY:*es8;ZgrV$0cp&FUXr:TgTqtg$br9=(Tq>0jcr:'[Ur qQ'UrV-3frVe&ArquZmoD/:Tr:9aap@J.WrUg*frVlfpr;?Hinb<"Zr;?EPs*t~> e,TFH(B4C[l`!W`8us8)p!"98?!iVsAbrVlipo`+7Squ$Elrr2p.rr)cnqt]p\ qtg$Wqtg3drqcfrs8W&qrY,8.qt9gZqu$C-as7lQlrr<#rq>0p] r:]jTrVufqs8;lrrq5s^q"spdrVHEdrq5s`rq,j]qu$0fq>C9inc)\iqtU3`rVZHhn,;YJrVZ?U rqlZhr:p3hp%e4Rr:]d\qu6WqqXsCUrU^!Yq"aX_r;H2qtU0brqc9`qtTpaq"aXWrqu]mrqm$#p%A(VqYC*Ns*t~> e,TFH(B4C[l`!W`8us8)p!"98?!iVsAbrVlipo`+7Squ$Elrr2p.rr)cnqt]p\ qtg$Wqtg3drqcfrs8W&qrY,8.qt9gZqu$C-as7lQlrr<#rq>0p] r:]jTrVufqs8;lrrq5s^q"spdrVHEdrq5s`rq,j]qu$0fq>C9inc)\iqtU3`rVZHhn,;YJrVZ?U rqlZhr:p3hp%e4Rr:]d\qu6WqqXsCUrU^!Yq"aX_r;H2qtU0brqc9`qtTpaq"aXWrqu]mrqm$#p%A(VqYC*Ns*t~> e,TFH(B4C[l`!W`8us8)p!"98?!iVsAbrVlipo`+7Squ$Elrr2p.rr)cnqt]p\ qtg$Wqtg3drqcfrs8W&qrY,8.qt9gZqu$C-as7lQlrr<#rq>0p] r:]jTrVufqs8;lrrq5s^q"spdrVHEdrq5s`rq,j]qu$0fq>C9inc)\iqtU3`rVZHhn,;YJrVZ?U rqlZhr:p3hp%e4Rr:]d\qu6WqqXsCUrU^!Yq"aX_r;H2qtU0brqc9`qtTpaq"aXWrqu]mrqm$#p%A(VqYC*Ns*t~> e,TFH(B4C=!WN#u![l`!W`8us8)p!"98?!iVs8^s8Milq>^0dr;QWo(]FC6rquTeq#C!_ qY:'cqYL*cqY^Bnr;HXMrr)`kpAb$dq"jmaq=FU[q"Xjdo_e=WrUfm]pAFRVrqufmrr<#rq>0p] r:L$YqZ$Qn&H;_.r;-3^q#(!dr;-?dp\=aa$MjGhp\spdrqcNgnc)\fr;?Tfrq?*_p@\@Yq>'[W o_SL\rUp*dqXO@So)/@^r;-Hiq=ORYrV6-\p%\I]rVlcmqtTa\p\OUVq#0g`o_eU^p\jm[n,N7Z r;QWjp%\4Rp\t$grr e,TFH(B4C=!WN#u![l`!W`8us8)p!"98?!iVs8^s8Milq>^0dr;QWo(]FC6rquTeq#C!_ qY:'cqYL*cqY^Bnr;HXMrr)`kpAb$dq"jmaq=FU[q"Xjdo_e=WrUfm]pAFRVrqufmrr<#rq>0p] r:L$YqZ$Qn&H;_.r;-3^q#(!dr;-?dp\=aa$MjGhp\spdrqcNgnc)\fr;?Tfrq?*_p@\@Yq>'[W o_SL\rUp*dqXO@So)/@^r;-Hiq=ORYrV6-\p%\I]rVlcmqtTa\p\OUVq#0g`o_eU^p\jm[n,N7Z r;QWjp%\4Rp\t$grr e,TFH(B4C=!WN#u![l`!W`8us8)p!"98?!iVs8^s8Milq>^0dr;QWo(]FC6rquTeq#C!_ qY:'cqYL*cqY^Bnr;HXMrr)`kpAb$dq"jmaq=FU[q"Xjdo_e=WrUfm]pAFRVrqufmrr<#rq>0p] r:L$YqZ$Qn&H;_.r;-3^q#(!dr;-?dp\=aa$MjGhp\spdrqcNgnc)\fr;?Tfrq?*_p@\@Yq>'[W o_SL\rUp*dqXO@So)/@^r;-Hiq=ORYrV6-\p%\I]rVlcmqtTa\p\OUVq#0g`o_eU^p\jm[n,N7Z r;QWjp%\4Rp\t$grr fDkmM)uop8qtL$i"TeDt"ono)pB1U!rqu`lrV-9grmC`Qr;Q?frVle)!s&Z*!rN&t!VZQo!rN$7 ![l`!W`8us8)p!"98?!hZ!TPrr3)urVc`n rt#,/rr)ckq>1-fs82]nqu6Tk"T//ts8Dors8Moo"o/&nrVcHhr=]#+qu-EarVZEeq>L9fs8Mus qu6UGrVZWmqu6C3krVccpr:p3fqYL-ep\b'krr2lonGc&WrVccrrqQNi q=jgcqt^3jp\t0jrVHQmr:p-epAFpis8;oorr2fks8)Qkp](3is8N&rs8VckrVQHds8M`kqZ$Nl qZ$Ngrr3?&rVlcos8)Tlq>^Ems8NZ0rVQNkrr;rprVuosrV-6hrVufp#ljl$rVu`ms8:sXJ,~> fDkmM)uop8qtL$i"TeDt"ono)pB1U!rqu`lrV-9grmC`Qr;Q?frVle)!s&Z*!rN&t!VZQo!rN$7 ![l`!W`8us8)p!"98?!hZ!TPrr3)urVc`n rt#,/rr)ckq>1-fs82]nqu6Tk"T//ts8Dors8Moo"o/&nrVcHhr=]#+qu-EarVZEeq>L9fs8Mus qu6UGrVZWmqu6C3krVccpr:p3fqYL-ep\b'krr2lonGc&WrVccrrqQNi q=jgcqt^3jp\t0jrVHQmr:p-epAFpis8;oorr2fks8)Qkp](3is8N&rs8VckrVQHds8M`kqZ$Nl qZ$Ngrr3?&rVlcos8)Tlq>^Ems8NZ0rVQNkrr;rprVuosrV-6hrVufp#ljl$rVu`ms8:sXJ,~> fDkmM)uop8qtL$i"TeDt"ono)pB1U!rqu`lrV-9grmC`Qr;Q?frVle)!s&Z*!rN&t!VZQo!rN$7 ![l`!W`8us8)p!"98?!hZ!TPrr3)urVc`n rt#,/rr)ckq>1-fs82]nqu6Tk"T//ts8Dors8Moo"o/&nrVcHhr=]#+qu-EarVZEeq>L9fs8Mus qu6UGrVZWmqu6C3krVccpr:p3fqYL-ep\b'krr2lonGc&WrVccrrqQNi q=jgcqt^3jp\t0jrVHQmr:p-epAFpis8;oorr2fks8)Qkp](3is8N&rs8VckrVQHds8M`kqZ$Nl qZ$Ngrr3?&rVlcos8)Tlq>^Ems8NZ0rVQNkrr;rprVuosrV-6hrVufp#ljl$rVu`ms8:sXJ,~> fDkmM)ZTg7qYL0k#6Xo#!s/R#:'CY"s82iprqHBid/OFNr:BX]q=t@!"9&E(!Whcj&-;k4$31JC !!E?)!!ih1rVQTl"T/&kq>U9l!!;lp!W`9%rr1aR$ig>/s8;oo"98Q(rVk.C"oeK!r;?Hfs8Mos rVlNjnbr:_n,ELhrVc`os8W)urVufks7uZQs7uWgrrrE#r;?Nmqu?]q!<%lVJ,~> fDkmM)ZTg7qYL0k#6Xo#!s/R#:'CY"s82iprqHBid/OFNr:BX]q=t@!"9&E(!Whcj&-;k4$31JC !!E?)!!ih1rVQTl"T/&kq>U9l!!;lp!W`9%rr1aR$ig>/s8;oo"98Q(rVk.C"oeK!r;?Hfs8Mos rVlNjnbr:_n,ELhrVc`os8W)urVufks7uZQs7uWgrrrE#r;?Nmqu?]q!<%lVJ,~> fDkmM)ZTg7qYL0k#6Xo#!s/R#:'CY"s82iprqHBid/OFNr:BX]q=t@!"9&E(!Whcj&-;k4$31JC !!E?)!!ih1rVQTl"T/&kq>U9l!!;lp!W`9%rr1aR$ig>/s8;oo"98Q(rVk.C"oeK!r;?Hfs8Mos rVlNjnbr:_n,ELhrVc`os8W)urVufks7uZQs7uWgrrrE#r;?Nmqu?]q!<%lVJ,~> fDcljs8W)squ6Qp!s8N#!sS`-!WrE8r;?Nmqu-KmrmC`VqXjaaqslZI![l`!W`8us8)p!"98?!cN!hAq>^BlpAa[^kPtM[ r;Zfrrr(7Eq>U-g"9/8trqcZorf$l-~> fDcljs8W)squ6Qp!s8N#!sS`-!WrE8r;?Nmqu-KmrmC`VqXjaaqslZI![l`!W`8us8)p!"98?!cN!hAq>^BlpAa[^kPtM[ r;Zfrrr(7Eq>U-g"9/8trqcZorf$l-~> fDcljs8W)squ6Qp!s8N#!sS`-!WrE8r;?Nmqu-KmrmC`VqXjaaqslZI![l`!W`8us8)p!"98?!cN!hAq>^BlpAa[^kPtM[ r;Zfrrr(7Eq>U-g"9/8trqcZorf$l-~> f`2!Nrr3l8r;Z]V&-DY#jT5D`!Y>>5o)&:`p\t*jqpGHDr=/Atq&TqE! f`2!Nrr3l8r;Z]V&-DY#jT5D`!Y>>5o)&:`p\t*jqpGHDr=/Atq&TqE! f`2!Nrr3l8r;Z]V&-DY#jT5D`!Y>>5o)&:`p\t*jqpGHDr=/Atq&TqE! f`(sNr;RW4meu\FrVc`jpAOmelh^PYqtg?es8;oodJjUFs8MNe!!!0&!/s8;oo"98Q(rVhQOs8K"trr.lVJ,~> f`(sNr;RW4meu\FrVc`jpAOmelh^PYqtg?es8;oodJjUFs8MNe!!!0&!/s8;oo"98Q(rVhQOs8K"trr.lVJ,~> f`(sNr;RW4meu\FrVc`jpAOmelh^PYqtg?es8;oodJjUFs8MNe!!!0&!/s8;oo"98Q(rVhQOs8K"trr.lVJ,~> fDcljs8W)sqtL'GkkXrNs8Migrr;Kem/6h]qu-KmrmC`NrTX:Y!<<0+quH`t!!;Wi%flY=#652L +T)0,s8N#hrqu`orql`r!quZr!<<0"rn[S_!!30#r;ZWs!!E9"rmC`Grpp*grdk*#s7cPD~> fDcljs8W)sqtL'GkkXrNs8Migrr;Kem/6h]qu-KmrmC`NrTX:Y!<<0+quH`t!!;Wi%flY=#652L +T)0,s8N#hrqu`orql`r!quZr!<<0"rn[S_!!30#r;ZWs!!E9"rmC`Grpp*grdk*#s7cPD~> fDcljs8W)sqtL'GkkXrNs8Migrr;Kem/6h]qu-KmrmC`NrTX:Y!<<0+quH`t!!;Wi%flY=#652L +T)0,s8N#hrqu`orql`r!quZr!<<0"rn[S_!!30#r;ZWs!!E9"rmC`Grpp*grdk*#s7cPD~> fDkmM)ZTg7qYK^d"4#.!!!&i!!WK.!<`B(2u`[Y r;6NipAP$hrr;uurql`r!quZr!<<0"rn[S_!!30#r;ZWs!!E9"re^XTrql`qrjr+0rql`qre:B&~> fDkmM)ZTg7qYK^d"4#.!!!&i!!WK.!<`B(2u`[Y r;6NipAP$hrr;uurql`r!quZr!<<0"rn[S_!!30#r;ZWs!!E9"re^XTrql`qrjr+0rql`qre:B&~> fDkmM)ZTg7qYK^d"4#.!!!&i!!WK.!<`B(2u`[Y r;6NipAP$hrr;uurql`r!quZr!<<0"rn[S_!!30#r;ZWs!!E9"re^XTrql`qrjr+0rql`qre:B&~> g&E,ms8N#trquZmrW3K."LYT3q"XdWs7ZKjrqlZerVY%B#QF5j[fHI1%-[a/!rrT,"]5-ep](0k s8)cks8N#rrr2rtrql`r!quZr!<<0"rn[S_!!30#r;ZWq!!<3!rJCOSrql`qrjr+0rql`qre:B&~> g&E,ms8N#trquZmrW3K."LYT3q"XdWs7ZKjrqlZerVY%B#QF5j[fHI1%-[a/!rrT,"]5-ep](0k s8)cks8N#rrr2rtrql`r!quZr!<<0"rn[S_!!30#r;ZWq!!<3!rJCOSrql`qrjr+0rql`qre:B&~> g&E,ms8N#trquZmrW3K."LYT3q"XdWs7ZKjrqlZerVY%B#QF5j[fHI1%-[a/!rrT,"]5-ep](0k s8)cks8N#rrr2rtrql`r!quZr!<<0"rn[S_!!30#r;ZWq!!<3!rJCOSrql`qrjr+0rql`qre:B&~> g&D'Or;Zfr(&do:>lXj0#*bbWp\+OSr;Q]mqYU6;rs&H"rW!'$!pBUh$NUQ@B(l*"nc&Ugqu?]u pAb6q!!3)uh>[l`!W`8urqug!!<<)tJcC<$[/YX~> g&D'Or;Zfr(&do:>lXj0#*bbWp\+OSr;Q]mqYU6;rs&H"rW!'$!pBUh$NUQ@B(l*"nc&Ugqu?]u pAb6q!!3)uh>[l`!W`8urqug!!<<)tJcC<$[/YX~> g&D'Or;Zfr(&do:>lXj0#*bbWp\+OSr;Q]mqYU6;rs&H"rW!'$!pBUh$NUQ@B(l*"nc&Ugqu?]u pAb6q!!3)uh>[l`!W`8urqug!!<<)tJcC<$[/YX~> ec5[K)#aC4p\ac0Fp\3M#D\'/p%.tVrr)fnrVk1D#6+T$!!E9'kPtho"`sS6nc/LVrrE&r!!!)p !!30$!WN)SrsSl/!<;uqqu?j"s8W"Js+13Ws*t~> ec5[K)#aC4p\ac0Fp\3M#D\'/p%.tVrr)fnrVk1D#6+T$!!E9'kPtho"`sS6nc/LVrrE&r!!!)p !!30$!WN)SrsSl/!<;uqqu?j"s8W"Js+13Ws*t~> ec5[K)#aC4p\ac0Fp\3M#D\'/p%.tVrr)fnrVk1D#6+T$!!E9'kPtho"`sS6nc/LVrrE&r!!!)p !!30$!WN)SrsSl/!<;uqqu?j"s8W"Js+13Ws*t~> ec-QerVcZis7uQdpQ:L;#6FsJD>3r)rVlfprVk1D#QF]%!!NB*!U0Rh#F"r[q#0j_nc&Ugqu?]u pAb6q!!3)uh>[l`!W`8urVQWu!<<)tJcC<$[/YX~> ec-QerVcZis7uQdpQ:L;#6FsJD>3r)rVlfprVk1D#QF]%!!NB*!U0Rh#F"r[q#0j_nc&Ugqu?]u pAb6q!!3)uh>[l`!W`8urVQWu!<<)tJcC<$[/YX~> ec-QerVcZis7uQdpQ:L;#6FsJD>3r)rVlfprVk1D#QF]%!!NB*!U0Rh#F"r[q#0j_nc&Ugqu?]u pAb6q!!3)uh>[l`!W`8urVQWu!<<)tJcC<$[/YX~> eGoOI&Gc;$qtg3frMKc!!sJd/p\b$f!W;oBrs/Q%rr<6("9Rff#HRe"qYg?eqsj[drql`r!quZr !<<0"rn[S_!!30#r;QWp!s&B$rdk*#s0VfV~> eGoOI&Gc;$qtg3frMKc!!sJd/p\b$f!W;oBrs/Q%rr<6("9Rff#HRe"qYg?eqsj[drql`r!quZr !<<0"rn[S_!!30#r;QWp!s&B$rdk*#s0VfV~> eGoOI&Gc;$qtg3frMKc!!sJd/p\b$f!W;oBrs/Q%rr<6("9Rff#HRe"qYg?eqsj[drql`r!quZr !<<0"rn[S_!!30#r;QWp!s&B$rdk*#s0VfV~> g&D'OqYqB0rqlZbq>C6d\%_nI!Wr;uqtTsarr;uFrs/N#rW!*&"9Rff#=\7`p[\(SrV?HgrrE&r !!!)p!!30$!WN)SrsSl/!<;usrW!$#rr;qJs+13Ws*t~> g&D'OqYqB0rqlZbq>C6d\%_nI!Wr;uqtTsarr;uFrs/N#rW!*&"9Rff#=\7`p[\(SrV?HgrrE&r !!!)p!!30$!WN)SrsSl/!<;usrW!$#rr;qJs+13Ws*t~> g&D'OqYqB0rqlZbq>C6d\%_nI!Wr;uqtTsarr;uFrs/N#rW!*&"9Rff#=\7`p[\(SrV?HgrrE&r !!!)p!!30$!WN)SrsSl/!<;usrW!$#rr;qJs+13Ws*t~> g&D'Oqu?]q(ARn'n,;POqY_cG$jQe4qtg-br;Q`qdJjILqu-R!!<`Jg!!`N\nbi=`q>U3gq>UHo qu?]upAb6q!!3)uh>[l`!W`8us8E!%!<2uoJcC<$[/YX~> g&D'Oqu?]q(ARn'n,;POqY_cG$jQe4qtg-br;Q`qdJjILqu-R!!<`Jg!!`N\nbi=`q>U3gq>UHo qu?]upAb6q!!3)uh>[l`!W`8us8E!%!<2uoJcC<$[/YX~> g&D'Oqu?]q(ARn'n,;POqY_cG$jQe4qtg-br;Q`qdJjILqu-R!!<`Jg!!`N\nbi=`q>U3gq>UHo qu?]upAb6q!!3)uh>[l`!W`8us8E!%!<2uoJcC<$[/YX~> ec5[K)#aC$rq6*do)8A"%g`7:&b#JhqYgElrVk1D#Q4Jt!!E<)!U0Rh#ltkSq"Od]q>C'g!<2lr !!;lp!W`9%rr1aR$ig>/s8;ip!=&Z*r:bdBJcE+WJ,~> ec5[K)#aC$rq6*do)8A"%g`7:&b#JhqYgElrVk1D#Q4Jt!!E<)!U0Rh#ltkSq"Od]q>C'g!<2lr !!;lp!W`9%rr1aR$ig>/s8;ip!=&Z*r:bdBJcE+WJ,~> ec5[K)#aC$rq6*do)8A"%g`7:&b#JhqYgElrVk1D#Q4Jt!!E<)!U0Rh#ltkSq"Od]q>C'g!<2lr !!;lp!W`9%rr1aR$ig>/s8;ip!=&Z*r:bdBJcE+WJ,~> eGg?arVc`qo`"OT!<<3)!"95.r:p0dr;HTnrmC`Mr:g$\!U-fqtBscrVZYGs+13gs*t~> eGg?arVc`qo`"OT!<<3)!"95.r:p0dr;HTnrmC`Mr:g$\!U-fqtBscrVZYGs+13gs*t~> eGg?arVc`qo`"OT!<<3)!"95.r:p0dr;HTnrmC`Mr:g$\!U-fqtBscrVZYGs+13gs*t~> eGgBbrVc3`rn%2V!!!-I+o_NApAOg`qtpf#~> eGgBbrVc3`rn%2V!!!-I+o_NApAOg`qtpf#~> eGgBbrVc3`rn%2V!!!-I+o_NApAOg`qtpf#~> eGg0\rVcZd`<$5J"?\d9rqcZjq>L9h!rW#rd/O@JqYg(J"onbi!"T87&Hr:2pA"Rd!X/;nrUKaSqXs^[rVQNkrdk*#s1nYb~> eGg0\rVcZd`<$5J"?\d9rqcZjq>L9h!rW#rd/O@JqYg(J"onbi!"T87&Hr:2pA"Rd!X/;nrUKaSqXs^[rVQNkrdk*#s1nYb~> eGg0\rVcZd`<$5J"?\d9rqcZjq>L9h!rW#rd/O@JqYg(J"onbi!"T87&Hr:2pA"Rd!X/;nrUKaSqXs^[rVQNkrdk*#s1nYb~> eGgEcrVcEd!s]B5?MOKpqtU0Zr;HZqrVZTlrm:ZMq#'pdpB1Ktkl;4p"Tf,6#6kG:Xo%ehqYp-_ rrE&r!!!)p!!30$!WN)Vru:e4q??s'X0JY*!s/M*XfJS1Xf_Eis76*crVhBJJcEOcJ,~> eGgEcrVcEd!s]B5?MOKpqtU0Zr;HZqrVZTlrm:ZMq#'pdpB1Ktkl;4p"Tf,6#6kG:Xo%ehqYp-_ rrE&r!!!)p!!30$!WN)Vru:e4q??s'X0JY*!s/M*XfJS1Xf_Eis76*crVhBJJcEOcJ,~> eGgEcrVcEd!s]B5?MOKpqtU0Zr;HZqrVZTlrm:ZMq#'pdpB1Ktkl;4p"Tf,6#6kG:Xo%ehqYp-_ rrE&r!!!)p!!30$!WN)Vru:e4q??s'X0JY*!s/M*XfJS1Xf_Eis76*crVhBJJcEOcJ,~> eGfOJrr!T,#7P8>rV69]q"j[^qY:$fr;6Ejrm:ZMrq--dn8&.3kl;4u!1$a rql`r!quZr!<<0"ro!epr;ZKm!sJc5$O$\6!s8`0!Y5D9o)J@Or;HVGs+13bs*t~> eGfOJrr!T,#7P8>rV69]q"j[^qY:$fr;6Ejrm:ZMrq--dn8&.3kl;4u!1$a rql`r!quZr!<<0"ro!epr;ZKm!sJc5$O$\6!s8`0!Y5D9o)J@Or;HVGs+13bs*t~> eGfOJrr!T,#7P8>rV69]q"j[^qY:$fr;6Ejrm:ZMrq--dn8&.3kl;4u!1$a rql`r!quZr!<<0"ro!epr;ZKm!sJc5$O$\6!s8`0!Y5D9o)J@Or;HVGs+13bs*t~> eGgBbrVcNcJU[Rnq"agaq"s^Tr;6C?o!;uou!quZr!<<0"rojCXrYkb5qh,%V":G>4"TSQ*#QY/6"b6@Ho)/Icrr)isrdk*#s2=qf~> eGgBbrVcNcJU[Rnq"agaq"s^Tr;6C?o!;uou!quZr!<<0"rojCXrYkb5qh,%V":G>4"TSQ*#QY/6"b6@Ho)/Icrr)isrdk*#s2=qf~> eGgBbrVcNcJU[Rnq"agaq"s^Tr;6C?o!;uou!quZr!<<0"rojCXrYkb5qh,%V":G>4"TSQ*#QY/6"b6@Ho)/Icrr)isrdk*#s2=qf~> eGg?arVcWgo5/(9q#=u;AS5R_B)h`)r;HTnrmC`Nr;6Ncq>9deq#U!c#mUh@"p"i0"Tei+!s*!3 q"t0m!WE-$!<`&r!W`9%rr2-]p\bm*pm[Y9TT>M-R@9J4R@Kb7qu-KgrVl`ps8ITLJcE[gJ,~> eGg?arVcWgo5/(9q#=u;AS5R_B)h`)r;HTnrmC`Nr;6Ncq>9deq#U!c#mUh@"p"i0"Tei+!s*!3 q"t0m!WE-$!<`&r!W`9%rr2-]p\bm*pm[Y9TT>M-R@9J4R@Kb7qu-KgrVl`ps8ITLJcE[gJ,~> eGg?arVcWgo5/(9q#=u;AS5R_B)h`)r;HTnrmC`Nr;6Ncq>9deq#U!c#mUh@"p"i0"Tei+!s*!3 q"t0m!WE-$!<`&r!W`9%rr2-]p\bm*pm[Y9TT>M-R@9J4R@Kb7qu-KgrVl`ps8ITLJcE[gJ,~> f)P[I(]F/$"p4]$9a:Y(!<<9)r;$0br;Q`qrmC`Vqu$KjqYU)q"Tnc.#6=f/nGk'A!!36&!4!!33%!WWK+!<<0"rojA"rr)fnq>L f)P[I(]F/$"p4]$9a:Y(!<<9)r;$0br;Q`qrmC`Vqu$KjqYU)q"Tnc.#6=f/nGk'A!!36&!4!!33%!WWK+!<<0"rojA"rr)fnq>L f)P[I(]F/$"p4]$9a:Y(!<<9)r;$0br;Q`qrmC`Vqu$KjqYU)q"Tnc.#6=f/nGk'A!!36&!4!!33%!WWK+!<<0"rojA"rr)fnq>L f)PXH'`8%5!rDiq"p4r-!!*9$qYU0frr17D!;ufo$N0l%_?C#B#o f)PXH'`8%5!rDiq"p4r-!!*9$qYU0frr17D!;ufo$N0l%_?C#B#o f)PXH'`8%5!rDiq"p4r-!!*9$qYU0frr17D!;ufo$N0l%_?C#B#o g&D'Orr<#ts83*$r g&D'Orr<#ts83*$r g&D'Orr<#ts83*$r g&D'OrVmc6qtg9h!rrE"rW3<2p@A@d%K6>+rVZTlrm:ZUr;6?frVcZkme-DY$igS9kl;q3'EeCD !!E?*#n6M)rp]mcl2L>V$NL2-!"Ju0!WWH+!W`?$r;ci\rs&H%s82coq#:6to`"L[rr)fpJcCE' &cDV+r;HZoqYp9cp%S:]s82`nrW<&rqsjUpp\Omho^DeNqt:!`s7cNQs*t~> g&D'OrVmc6qtg9h!rrE"rW3<2p@A@d%K6>+rVZTlrm:ZUr;6?frVcZkme-DY$igS9kl;q3'EeCD !!E?*#n6M)rp]mcl2L>V$NL2-!"Ju0!WWH+!W`?$r;ci\rs&H%s82coq#:6to`"L[rr)fpJcCE' &cDV+r;HZoqYp9cp%S:]s82`nrW<&rqsjUpp\Omho^DeNqt:!`s7cNQs*t~> g&D'OrVmc6qtg9h!rrE"rW3<2p@A@d%K6>+rVZTlrm:ZUr;6?frVcZkme-DY$igS9kl;q3'EeCD !!E?*#n6M)rp]mcl2L>V$NL2-!"Ju0!WWH+!W`?$r;ci\rs&H%s82coq#:6to`"L[rr)fpJcCE' &cDV+r;HZoqYp9cp%S:]s82`nrW<&rqsjUpp\Omho^DeNqt:!`s7cNQs*t~> g&D'OrVm3&qtg9h!WW%s!=fA?!!;KAli-DMrT=+ProF*0~> g&D'OrVm3&qtg9h!WW%s!=fA?!!;KAli-DMrT=+ProF*0~> g&D'OrVm3&qtg9h!WW%s!=fA?!!;KAli-DMrT=+ProF*0~> g&D'Orr<#ts83W2quQj!qYpQs#ke2u!=AT#rVZTlrm1TErVl^&rVlcoo)/1Zp%L0@q#U!c*=i/_ #Qb#0#mgS>!;0rr)fprVH'^e'J((!<`K+!r`9%!Up*h!=]#5!WrQ*aOL7Yr:BXWjSs`~> g&D'Orr<#ts83W2quQj!qYpQs#ke2u!=AT#rVZTlrm1TErVl^&rVlcoo)/1Zp%L0@q#U!c*=i/_ #Qb#0#mgS>!;0rr)fprVH'^e'J((!<`K+!r`9%!Up*h!=]#5!WrQ*aOL7Yr:BXWjSs`~> g&D'Orr<#ts83W2quQj!qYpQs#ke2u!=AT#rVZTlrm1TErVl^&rVlcoo)/1Zp%L0@q#U!c*=i/_ #Qb#0#mgS>!;0rr)fprVH'^e'J((!<`K+!r`9%!Up*h!=]#5!WrQ*aOL7Yr:BXWjSs`~> f)P[I&cMS.!!2rr!X8\qrr<<6oDSXerr;uurmC`GrVQR"s8D]eq=4:R8,32T!$VFF!<`T-!!*3, ":YD8[eTOkrUB[]pdkMr!!iQ.!!*-%!<2iqr9=7]rr<#uq?Zofs6p!j#kRfir;chJs+LCerVlfo rVl`irj`(3!"B& f)P[I&cMS.!!2rr!X8\qrr<<6oDSXerr;uurmC`GrVQR"s8D]eq=4:R8,32T!$VFF!<`T-!!*3, ":YD8[eTOkrUB[]pdkMr!!iQ.!!*-%!<2iqr9=7]rr<#uq?Zofs6p!j#kRfir;chJs+LCerVlfo rVl`irj`(3!"B& f)P[I&cMS.!!2rr!X8\qrr<<6oDSXerr;uurmC`GrVQR"s8D]eq=4:R8,32T!$VFF!<`T-!!*3, ":YD8[eTOkrUB[]pdkMr!!iQ.!!*-%!<2iqr9=7]rr<#uq?Zofs6p!j#kRfir;chJs+LCerVlfo rVl`irj`(3!"B& f)PdL"TSK#rV6?m%/p)-!!`Au!"K#/rr2iq!<1CG!<)oss8N&u(]+1#rVc9arEWY0!<`H)!W`?& !!*'$!VcXA!W`B(!!!$$"p"`+!XSk$s6oj`o)8=^>$;.6!!rW,!L?mr;HZkrqucorVuoprqu`irtkP1rr2lrr;Zcrs8Mups8Dons8N&ur;HWo!WW/urs/Ars8N&s rr)iq'EA(3s8N&srVuons8DorrVccprR:fHrZ1t;p](*fs8;oqr;?TirV<5i#6b,2$31)-!!!$# m/RRr!!*0&! f)PdL"TSK#rV6?m%/p)-!!`Au!"K#/rr2iq!<1CG!<)oss8N&u(]+1#rVc9arEWY0!<`H)!W`?& !!*'$!VcXA!W`B(!!!$$"p"`+!XSk$s6oj`o)8=^>$;.6!!rW,!L?mr;HZkrqucorVuoprqu`irtkP1rr2lrr;Zcrs8Mups8Dons8N&ur;HWo!WW/urs/Ars8N&s rr)iq'EA(3s8N&srVuons8DorrVccprR:fHrZ1t;p](*fs8;oqr;?TirV<5i#6b,2$31)-!!!$# m/RRr!!*0&! f)PdL"TSK#rV6?m%/p)-!!`Au!"K#/rr2iq!<1CG!<)oss8N&u(]+1#rVc9arEWY0!<`H)!W`?& !!*'$!VcXA!W`B(!!!$$"p"`+!XSk$s6oj`o)8=^>$;.6!!rW,!L?mr;HZkrqucorVuoprqu`irtkP1rr2lrr;Zcrs8Mups8Dons8N&ur;HWo!WW/urs/Ars8N&s rr)iq'EA(3s8N&srVuons8DorrVccprR:fHrZ1t;p](*fs8;oqr;?TirV<5i#6b,2$31)-!!!$# m/RRr!!*0&! e,TFH&GQ>1#Pn/s!!N/o!!ii,rr0e7(B4:1qtpC6bqfr8D%KHS2%KQ>!qYTIU(&n./rVlflpA+pq#Pe8irVcQgs82Z7s$-JYqtp'_p@nIV r:p9irqlZhrq-'_r:fp`qY^0ep\Xjco_nL[s7c9fqY'm[r;6Ehq>9^\qtg9frVZKdqu-?j$ha;n p\asgqu?Qhrr2a(q>L0cs82Wjqu$Ekq"jpfruUn.s82Wiq>C3iq"jpgs8DTfq#: e,TFH&GQ>1#Pn/s!!N/o!!ii,rr0e7(B4:1qtpC6bqfr8D%KHS2%KQ>!qYTIU(&n./rVlflpA+pq#Pe8irVcQgs82Z7s$-JYqtp'_p@nIV r:p9irqlZhrq-'_r:fp`qY^0ep\Xjco_nL[s7c9fqY'm[r;6Ehq>9^\qtg9frVZKdqu-?j$ha;n p\asgqu?Qhrr2a(q>L0cs82Wjqu$Ekq"jpfruUn.s82Wiq>C3iq"jpgs8DTfq#: e,TFH&GQ>1#Pn/s!!N/o!!ii,rr0e7(B4:1qtpC6bqfr8D%KHS2%KQ>!qYTIU(&n./rVlflpA+pq#Pe8irVcQgs82Z7s$-JYqtp'_p@nIV r:p9irqlZhrq-'_r:fp`qY^0ep\Xjco_nL[s7c9fqY'm[r;6Ehq>9^\qtg9frVZKdqu-?j$ha;n p\asgqu?Qhrr2a(q>L0cs82Wjqu$Ekq"jpfruUn.s82Wiq>C3iq"jpgs8DTfq#: e,TII&cMV0!=ASs#Qb),r<<91q>UB2rtk\5r;?Hir;HWeqhYLW#m(2/#64o1!XA/p*ruEF"9\f. !=Jl5E;TP1qu60`o8`tW!X\o7!rD`kqW\%XrXo,,qtp3cNW]Q/pA4[bqY'g\aSuVGrqlKerG$KO p\ar006HsfqY9scqtBg\qJgUtEcZC$r:L!er;?Nmo_eW0F*VeFFSGV,qf7#\oD`ZJEr#`"ol>0M p\Xpdqtt;QDK0]6Ecc?qr;$9is7p\TqYg//EclDCFnY\-s7p\TqYg//Ec(gPrVuTfqu6A4FSPk4 e,TII%fuh:"9\l4N;`PJr:KgY!W<-%!s7H^rrN-$"q1J9"S_]ijSs`~> e,TII&cMV0!=ASs#Qb),r<<91q>UB2rtk\5r;?Hir;HWeqhYLW#m(2/#64o1!XA/p*ruEF"9\f. !=Jl5E;TP1qu60`o8`tW!X\o7!rD`kqW\%XrXo,,qtp3cNW]Q/pA4[bqY'g\aSuVGrqlKerG$KO p\ar006HsfqY9scqtBg\qJgUtEcZC$r:L!er;?Nmo_eW0F*VeFFSGV,qf7#\oD`ZJEr#`"ol>0M p\Xpdqtt;QDK0]6Ecc?qr;$9is7p\TqYg//EclDCFnY\-s7p\TqYg//Ec(gPrVuTfqu6A4FSPk4 e,TII%fuh:"9\l4N;`PJr:KgY!W<-%!s7H^rrN-$"q1J9"S_]ijSs`~> e,TII&cMV0!=ASs#Qb),r<<91q>UB2rtk\5r;?Hir;HWeqhYLW#m(2/#64o1!XA/p*ruEF"9\f. !=Jl5E;TP1qu60`o8`tW!X\o7!rD`kqW\%XrXo,,qtp3cNW]Q/pA4[bqY'g\aSuVGrqlKerG$KO p\ar006HsfqY9scqtBg\qJgUtEcZC$r:L!er;?Nmo_eW0F*VeFFSGV,qf7#\oD`ZJEr#`"ol>0M p\Xpdqtt;QDK0]6Ecc?qr;$9is7p\TqYg//EclDCFnY\-s7p\TqYg//Ec(gPrVuTfqu6A4FSPk4 e,TII%fuh:"9\l4N;`PJr:KgY!W<-%!s7H^rrN-$"q1J9"S_]ijSs`~> e,TII&cDS-!s\`!#64f)qZR<.rVlf6rrE#qr;Z^+meHSOV5+1s!s8Z+"U"i2nGjX4!s8Z.!W`<+ !=T$=r;HHeqtg-gV>pf($3^M.qt^6Us8Dp1rVZQip\aga"U"o&qtT^Xq"ajdao=U(rqlWi=onb/ qYUEq$O6k^_!-!W`H%n,E;h!^KtqtpBlq>:*h?3((5 rqt7Fs8Ec?!XJl9!X/DrpA=ddoD/Rl!sA`/!Wh<]rrEB,#71V8!<;cfjSs`~> e,TII&cDS-!s\`!#64f)qZR<.rVlf6rrE#qr;Z^+meHSOV5+1s!s8Z+"U"i2nGjX4!s8Z.!W`<+ !=T$=r;HHeqtg-gV>pf($3^M.qt^6Us8Dp1rVZQip\aga"U"o&qtT^Xq"ajdao=U(rqlWi=onb/ qYUEq$O6k^_!-!W`H%n,E;h!^KtqtpBlq>:*h?3((5 rqt7Fs8Ec?!XJl9!X/DrpA=ddoD/Rl!sA`/!Wh<]rrEB,#71V8!<;cfjSs`~> e,TII&cDS-!s\`!#64f)qZR<.rVlf6rrE#qr;Z^+meHSOV5+1s!s8Z+"U"i2nGjX4!s8Z.!W`<+ !=T$=r;HHeqtg-gV>pf($3^M.qt^6Us8Dp1rVZQip\aga"U"o&qtT^Xq"ajdao=U(rqlWi=onb/ qYUEq$O6k^_!-!W`H%n,E;h!^KtqtpBlq>:*h?3((5 rqt7Fs8Ec?!XJl9!X/DrpA=ddoD/Rl!sA`/!Wh<]rrEB,#71V8!<;cfjSs`~> e,TFH&GZA0"8;Zn"U4r)!!#mp\2rqucZrrW2ur;HL'qYg?j]`8H:o)/=YrVZNfao=U)r;$?j!Y,>9qYL@# "Tei.s82Qip&4[aq=sph!WiB/#kdihq#(*hr:p9`o`tj.#QOo%o_ean!WrDq"Tnr(s"OKX"T\T% r;QZi!=Al1"98Z-!rr,nq>:'i#6=i&rW36(!4"o\AopAFjc63.,hrW<0&!TO1[!WE-("9JQirVYaVJ,~> e,TFH&GZA0"8;Zn"U4r)!!#mp\2rqucZrrW2ur;HL'qYg?j]`8H:o)/=YrVZNfao=U)r;$?j!Y,>9qYL@# "Tei.s82Qip&4[aq=sph!WiB/#kdihq#(*hr:p9`o`tj.#QOo%o_ean!WrDq"Tnr(s"OKX"T\T% r;QZi!=Al1"98Z-!rr,nq>:'i#6=i&rW36(!4"o\AopAFjc63.,hrW<0&!TO1[!WE-("9JQirVYaVJ,~> e,TFH&GZA0"8;Zn"U4r)!!#mp\2rqucZrrW2ur;HL'qYg?j]`8H:o)/=YrVZNfao=U)r;$?j!Y,>9qYL@# "Tei.s82Qip&4[aq=sph!WiB/#kdihq#(*hr:p9`o`tj.#QOo%o_ean!WrDq"Tnr(s"OKX"T\T% r;QZi!=Al1"98Z-!rr,nq>:'i#6=i&rW36(!4"o\AopAFjc63.,hrW<0&!TO1[!WE-("9JQirVYaVJ,~> e,TII&c;M,$iou#!XA`X.L-ReqYpK3s8W#rrVuj-s7Z9dp@\I]e,o[U!_!<3'*!X&f7!"K#,q;hR+~> e,TII&c;M,$iou#!XA`X.L-ReqYpK3s8W#rrVuj-s7Z9dp@\I]e,o[U!_!<3'*!X&f7!"K#,q;hR+~> e,TII&c;M,$iou#!XA`X.L-ReqYpK3s8W#rrVuj-s7Z9dp@\I]e,o[U!_!<3'*!X&f7!"K#,q;hR+~> e,TFH%K?D/&H;;%!"8r4!s&],rkna9rVc`prrMurrVd-#p#?AZ!snr8"Si)o!!33&!W)j&#QOi5 !=8rEp&=ptqXjdag_Kqiq#(-SrrE#sr"8o,rquTgrs8Z1q>L*fpAY$cao=U)qu-?jo,%W,rVQQo !:g0bo`"jbp%%tYqYg3g!!*!,qtBpboDALbqt'a_pA57'r;[#trq??o!WW)\rr e,TFH%K?D/&H;;%!"8r4!s&],rkna9rVc`prrMurrVd-#p#?AZ!snr8"Si)o!!33&!W)j&#QOi5 !=8rEp&=ptqXjdag_Kqiq#(-SrrE#sr"8o,rquTgrs8Z1q>L*fpAY$cao=U)qu-?jo,%W,rVQQo !:g0bo`"jbp%%tYqYg3g!!*!,qtBpboDALbqt'a_pA57'r;[#trq??o!WW)\rr e,TFH%K?D/&H;;%!"8r4!s&],rkna9rVc`prrMurrVd-#p#?AZ!snr8"Si)o!!33&!W)j&#QOi5 !=8rEp&=ptqXjdag_Kqiq#(-SrrE#sr"8o,rquTgrs8Z1q>L*fpAY$cao=U)qu-?jo,%W,rVQQo !:g0bo`"jbp%%tYqYg3g!!*!,qtBpboDALbqt'a_pA57'r;[#trq??o!WW)\rr e,TIIs7d-(&HMFtp](d(#mL\:qYpK)rt5/,rq-6bqYg:"!X8W)!U6l!<)utqu6TprqU+$rr;uprr<'!!s&>ss7c`tp\Xsg"p"]&rr;uts8Mct!<)cn p&4adpC73'!rE-$o`"dfq#:3d&-2Oqs7HU!pAk9nqu?Th&-2Oqrq-Eps8M]kqZ$Ekp](01PJ,~> e,TIIs7d-(&HMFtp](d(#mL\:qYpK)rt5/,rq-6bqYg:"!X8W)!U6l!<)utqu6TprqU+$rr;uprr<'!!s&>ss7c`tp\Xsg"p"]&rr;uts8Mct!<)cn p&4adpC73'!rE-$o`"dfq#:3d&-2Oqs7HU!pAk9nqu?Th&-2Oqrq-Eps8M]kqZ$Ekp](01PJ,~> e,TIIs7d-(&HMFtp](d(#mL\:qYpK)rt5/,rq-6bqYg:"!X8W)!U6l!<)utqu6TprqU+$rr;uprr<'!!s&>ss7c`tp\Xsg"p"]&rr;uts8Mct!<)cn p&4adpC73'!rE-$o`"dfq#:3d&-2Oqs7HU!pAk9nqu?Th&-2Oqrq-Eps8M]kqZ$Ekp](01PJ,~> dJj^Nrnmk[$NU>0"TSN,"9AH#Zi:R8qtKb*"9AW+!"f24$N^@n!"T)5!!D3Orquclr;?3dr;GUS &,u(trq?74!!2WgqXjd`rQ5'qrqZNlo_nglqu6Qo#6F;tqtp?lq>('aq>U-^rW!$!"Q'1Lq#:'f s8Dfoqu6Qp"oeQ+rr#7X!^EirW<2ur;HHjrUKgd!W<#W*Wl61r:g-cr;?Wr rVHKh!@-P'+8Pa3rVcg%rVlTg!s& dJj^Nrnmk[$NU>0"TSN,"9AH#Zi:R8qtKb*"9AW+!"f24$N^@n!"T)5!!D3Orquclr;?3dr;GUS &,u(trq?74!!2WgqXjd`rQ5'qrqZNlo_nglqu6Qo#6F;tqtp?lq>('aq>U-^rW!$!"Q'1Lq#:'f s8Dfoqu6Qp"oeQ+rr#7X!^EirW<2ur;HHjrUKgd!W<#W*Wl61r:g-cr;?Wr rVHKh!@-P'+8Pa3rVcg%rVlTg!s& dJj^Nrnmk[$NU>0"TSN,"9AH#Zi:R8qtKb*"9AW+!"f24$N^@n!"T)5!!D3Orquclr;?3dr;GUS &,u(trq?74!!2WgqXjd`rQ5'qrqZNlo_nglqu6Qo#6F;tqtp?lq>('aq>U-^rW!$!"Q'1Lq#:'f s8Dfoqu6Qp"oeQ+rr#7X!^EirW<2ur;HHjrUKgd!W<#W*Wl61r:g-cr;?Wr rVHKh!@-P'+8Pa3rVcg%rVlTg!s& eGoOI&cM\1$N^;7!WrQ+"9AT*r;Q]%rt52*qu$=K4TGHb!WiB/!!rW*r;l?e%gr@>"9Q^DrVQKZ r;Z]_p#5o\rVl`krUBaf!m1!/s7uT6s)@r2s8)]l2$(\lrVZa+quH]jpAY$bs8)Zjqt^"E%`SMX s7uTgp\t0jq>1'crW*#u!]g/WpA?fK^]43/!!`E"nc/7[pADo92?*RIpA+IZp,E2h#6Xr,rr2?Y r;$9^!!)]jou[[B!B9oHs82[7r]:,&q"jpo!qZ eGoOI&cM\1$N^;7!WrQ+"9AT*r;Q]%rt52*qu$=K4TGHb!WiB/!!rW*r;l?e%gr@>"9Q^DrVQKZ r;Z]_p#5o\rVl`krUBaf!m1!/s7uT6s)@r2s8)]l2$(\lrVZa+quH]jpAY$bs8)Zjqt^"E%`SMX s7uTgp\t0jq>1'crW*#u!]g/WpA?fK^]43/!!`E"nc/7[pADo92?*RIpA+IZp,E2h#6Xr,rr2?Y r;$9^!!)]jou[[B!B9oHs82[7r]:,&q"jpo!qZ eGoOI&cM\1$N^;7!WrQ+"9AT*r;Q]%rt52*qu$=K4TGHb!WiB/!!rW*r;l?e%gr@>"9Q^DrVQKZ r;Z]_p#5o\rVl`krUBaf!m1!/s7uT6s)@r2s8)]l2$(\lrVZa+quH]jpAY$bs8)Zjqt^"E%`SMX s7uTgp\t0jq>1'crW*#u!]g/WpA?fK^]43/!!`E"nc/7[pADo92?*RIpA+IZp,E2h#6Xr,rr2?Y r;$9^!!)]jou[[B!B9oHs82[7r]:,&q"jpo!qZ g&D'OrVmT2r;?Hj9`tG#"Tnr1"98Z-"T&,sZi:R8p@J7Yqs@,\"oni6"9Sr/!<3)f!!`Q0"qUk< Z)[g#"S_fmoD.>Es83;up\O^n$NTktqtg'dao>$3qu?9^qYs7tZ242"!3$+&oD\O]r;6Nks76$^ rr`B-#I*str;Q]nr;,mZqYUHsXp=t#s82Hd:^XH(q>^c(pAOsdp]%3!:&k5\q>:$Yrp]sd!!EQ8 Y6qV?q>^!\qu6Wss7``""L/+0nbrC^qu$+]#I+4(!s#S$qu69frNH;tnc/OWs8DokrVHHcg].UEir;HEiqu?]q#6"5d;,7E*r;Zs%!!*#tjSs`~> g&D'OrVmT2r;?Hj9`tG#"Tnr1"98Z-"T&,sZi:R8p@J7Yqs@,\"oni6"9Sr/!<3)f!!`Q0"qUk< Z)[g#"S_fmoD.>Es83;up\O^n$NTktqtg'dao>$3qu?9^qYs7tZ242"!3$+&oD\O]r;6Nks76$^ rr`B-#I*str;Q]nr;,mZqYUHsXp=t#s82Hd:^XH(q>^c(pAOsdp]%3!:&k5\q>:$Yrp]sd!!EQ8 Y6qV?q>^!\qu6Wss7``""L/+0nbrC^qu$+]#I+4(!s#S$qu69frNH;tnc/OWs8DokrVHHcg].UEir;HEiqu?]q#6"5d;,7E*r;Zs%!!*#tjSs`~> g&D'OrVmT2r;?Hj9`tG#"Tnr1"98Z-"T&,sZi:R8p@J7Yqs@,\"oni6"9Sr/!<3)f!!`Q0"qUk< Z)[g#"S_fmoD.>Es83;up\O^n$NTktqtg'dao>$3qu?9^qYs7tZ242"!3$+&oD\O]r;6Nks76$^ rr`B-#I*str;Q]nr;,mZqYUHsXp=t#s82Hd:^XH(q>^c(pAOsdp]%3!:&k5\q>:$Yrp]sd!!EQ8 Y6qV?q>^!\qu6Wss7``""L/+0nbrC^qu$+]#I+4(!s#S$qu69frNH;tnc/OWs8DokrVHHcg].UEir;HEiqu?]q#6"5d;,7E*r;Zs%!!*#tjSs`~> g&D'OrVmT2r;6ElqIF/R@;KOhAS)&I!WE#sZi:R3rVQKgp[e;p$3127#RLOq!"KD@!@ !;ZZjr;ZZkp%\CYq>p^!!WDoqp\aab!!AUUAcl`HqY9saquC7&s-T7CoDedgr&\Kl@KcaE"D7N/ oDJC`!sAT"AcN,="8V`gqYU'er;6["R[@plB(Z*$qZ$QqB);FmQCIpKq=sjeq>B"Is8E*#!WW6" !WE$4rVuis!"8i6!!!3)q"jUUs82]fs7uZks8W''qXsd`r<<9.rW!'&!!*#tjSs`~> g&D'OrVmT2r;6ElqIF/R@;KOhAS)&I!WE#sZi:R3rVQKgp[e;p$3127#RLOq!"KD@!@ !;ZZjr;ZZkp%\CYq>p^!!WDoqp\aab!!AUUAcl`HqY9saquC7&s-T7CoDedgr&\Kl@KcaE"D7N/ oDJC`!sAT"AcN,="8V`gqYU'er;6["R[@plB(Z*$qZ$QqB);FmQCIpKq=sjeq>B"Is8E*#!WW6" !WE$4rVuis!"8i6!!!3)q"jUUs82]fs7uZks8W''qXsd`r<<9.rW!'&!!*#tjSs`~> g&D'OrVmT2r;6ElqIF/R@;KOhAS)&I!WE#sZi:R3rVQKgp[e;p$3127#RLOq!"KD@!@ !;ZZjr;ZZkp%\CYq>p^!!WDoqp\aab!!AUUAcl`HqY9saquC7&s-T7CoDedgr&\Kl@KcaE"D7N/ oDJC`!sAT"AcN,="8V`gqYU'er;6["R[@plB(Z*$qZ$QqB);FmQCIpKq=sjeq>B"Is8E*#!WW6" !WE$4rVuis!"8i6!!!3)q"jUUs82]fs7uZks8W''qXsd`r<<9.rW!'&!!*#tjSs`~> g&D'OrVmT2r;6Bjqu$Egp\ajbqYpNt!W;rrZi:R3q"jsfq"jm]LO'7/#6P4p!"KGA!C0iq>C-hrriE' "Fg+=qu-KjrqZ9_oD\jl!Wr>kq=si8JcPuW"+pXNrUfm]rd]Ipq1&YQ$%DjNp\TJn"Fp[VJ-1=P Ieim8q#gkOL4B@+"U'2Nr?;1:rV:ts!!WK*JHu5MrVlilKRW[jIfp)_JG&^0q#CBgg]. g&D'OrVmT2r;6Bjqu$Egp\ajbqYpNt!W;rrZi:R3q"jsfq"jm]LO'7/#6P4p!"KGA!C0iq>C-hrriE' "Fg+=qu-KjrqZ9_oD\jl!Wr>kq=si8JcPuW"+pXNrUfm]rd]Ipq1&YQ$%DjNp\TJn"Fp[VJ-1=P Ieim8q#gkOL4B@+"U'2Nr?;1:rV:ts!!WK*JHu5MrVlilKRW[jIfp)_JG&^0q#CBgg]. g&D'OrVmT2r;6Bjqu$Egp\ajbqYpNt!W;rrZi:R3q"jsfq"jm]LO'7/#6P4p!"KGA!C0iq>C-hrriE' "Fg+=qu-KjrqZ9_oD\jl!Wr>kq=si8JcPuW"+pXNrUfm]rd]Ipq1&YQ$%DjNp\TJn"Fp[VJ-1=P Ieim8q#gkOL4B@+"U'2Nr?;1:rV:ts!!WK*JHu5MrVlilKRW[jIfp)_JG&^0q#CBgg]. eGoOI&cDV+rqlWnqYC'dqZ6g"rVlf&rt"l"qt^!^oDJR`r1*lq!!`E&rrMNf%g*1B!=T)3!s/U= r;6BfrSdbeqtg6_oDA@\OpD*eq>U eGoOI&cDV+rqlWnqYC'dqZ6g"rVlf&rt"l"qt^!^oDJR`r1*lq!!`E&rrMNf%g*1B!=T)3!s/U= r;6BfrSdbeqtg6_oDA@\OpD*eq>U eGoOI&cDV+rqlWnqYC'dqZ6g"rVlf&rt"l"qt^!^oDJR`r1*lq!!`E&rrMNf%g*1B!=T)3!s/U= r;6BfrSdbeqtg6_oDA@\OpD*eq>U dJjgWrql]nrqQHjqu6Np!!<&srj2V:qu?Zmqt^$dq#'j_XoSe.!!!<<-!!!N0 ;uQOjpu28Pr!`>qqY^9_$34&urUp-2s8Ve8qY3qk!=&W,%KZb5!s&K+;#L7goDedep%e=`"9Sl/ rV6BeqYg^Korr3?)rVcKarqH9h!Wr?$"9JQ'rr2!YJ,~> dJjgWrql]nrqQHjqu6Np!!<&srj2V:qu?Zmqt^$dq#'j_XoSe.!!!<<-!!!N0 ;uQOjpu28Pr!`>qqY^9_$34&urUp-2s8Ve8qY3qk!=&W,%KZb5!s&K+;#L7goDedep%e=`"9Sl/ rV6BeqYg^Korr3?)rVcKarqH9h!Wr?$"9JQ'rr2!YJ,~> dJjgWrql]nrqQHjqu6Np!!<&srj2V:qu?Zmqt^$dq#'j_XoSe.!!!<<-!!!N0 ;uQOjpu28Pr!`>qqY^9_$34&urUp-2s8Ve8qY3qk!=&W,%KZb5!s&K+;#L7goDedep%e=`"9Sl/ rV6BeqYg^Korr3?)rVcKarqH9h!Wr?$"9JQ'rr2!YJ,~> d/OUOrr;onrVlfmrr)lt"o&#qZ2YO;s8DrsrUBX^o#1t:"9ec*#65,5n,NIk!WE'*!<<*)!X&Du r;5IQ(B4@4qYU0hr;-Wt#Pdleqt0abs8Mrpd/P*`s8Dis!!!'&!!iQ*!!EB0!s&5srVH d/OUOrr;onrVlfmrr)lt"o&#qZ2YO;s8DrsrUBX^o#1t:"9ec*#65,5n,NIk!WE'*!<<*)!X&Du r;5IQ(B4@4qYU0hr;-Wt#Pdleqt0abs8Mrpd/P*`s8Dis!!!'&!!iQ*!!EB0!s&5srVH d/OUOrr;onrVlfmrr)lt"o&#qZ2YO;s8DrsrUBX^o#1t:"9ec*#65,5n,NIk!WE'*!<<*)!X&Du r;5IQ(B4@4qYU0hr;-Wt#Pdleqt0abs8Mrpd/P*`s8Dis!!!'&!!iQ*!!EB0!s&5srVH d/OUTq"jpcr:fd]qst$n!<)lqXoAn(r:U$]rRB[(%Klk>$N]Gk!!3'$"9&/qrSRVirqlTjrVZZG ! d/OUTq"jpcr:fd]qst$n!<)lqXoAn(r:U$]rRB[(%Klk>$N]Gk!!3'$"9&/qrSRVirqlTjrVZZG ! d/OUTq"jpcr:fd]qst$n!<)lqXoAn(r:U$]rRB[(%Klk>$N]Gk!!3'$"9&/qrSRVirqlTjrVZZG ! dJj7Cs8Mutr;Q["r:p6k#mL%uriuJ6q>L3irpp'[p&GC!&e"gDkl:\arW<9$r;6EKs8Vurr=Jnr rVup*s7?'crr)fqrr2lArrN*"q>_?6$k*+F!!`E$p\sses8N&s!WW9%!<3#squ6`rs8Mut/cbtP r;Q`t!!)rrrpg9o$4I+>s8D]kr:U*o!=&W(rqQNo'+P!G"98E4!"];,p&H!3!!*'!!!if0rr2i_ !!Wf2"p"SsrqH$`$3pJ0#5Rrlp\Y!cg]. dJj7Cs8Mutr;Q["r:p6k#mL%uriuJ6q>L3irpp'[p&GC!&e"gDkl:\arW<9$r;6EKs8Vurr=Jnr rVup*s7?'crr)fqrr2lArrN*"q>_?6$k*+F!!`E$p\sses8N&s!WW9%!<3#squ6`rs8Mut/cbtP r;Q`t!!)rrrpg9o$4I+>s8D]kr:U*o!=&W(rqQNo'+P!G"98E4!"];,p&H!3!!*'!!!if0rr2i_ !!Wf2"p"SsrqH$`$3pJ0#5Rrlp\Y!cg]. dJj7Cs8Mutr;Q["r:p6k#mL%uriuJ6q>L3irpp'[p&GC!&e"gDkl:\arW<9$r;6EKs8Vurr=Jnr rVup*s7?'crr)fqrr2lArrN*"q>_?6$k*+F!!`E$p\sses8N&s!WW9%!<3#squ6`rs8Mut/cbtP r;Q`t!!)rrrpg9o$4I+>s8D]kr:U*o!=&W(rqQNo'+P!G"98E4!"];,p&H!3!!*'!!!if0rr2i_ !!Wf2"p"SsrqH$`$3pJ0#5Rrlp\Y!cg]. dJjaVq>'gbrqlB`r;QKo!!E5"rso&%rVuQir;-El'-$uP&Ej)o!WE0'rVZQjiVs&[s8W&rrr*B) o_\ao!;uipqtg3hrlkBCrW2rt)\E/]!!!*+!W`i0s7Z0crr;utr;ls#!!*#urVQTrrVulr!%n9P s8;ls!,2-oD8FYr7h8OrW<-%!!*!!&HDb/s8Dut! dJjaVq>'gbrqlB`r;QKo!!E5"rso&%rVuQir;-El'-$uP&Ej)o!WE0'rVZQjiVs&[s8W&rrr*B) o_\ao!;uipqtg3hrlkBCrW2rt)\E/]!!!*+!W`i0s7Z0crr;utr;ls#!!*#urVQTrrVulr!%n9P s8;ls!,2-oD8FYr7h8OrW<-%!!*!!&HDb/s8Dut! dJjaVq>'gbrqlB`r;QKo!!E5"rso&%rVuQir;-El'-$uP&Ej)o!WE0'rVZQjiVs&[s8W&rrr*B) o_\ao!;uipqtg3hrlkBCrW2rt)\E/]!!!*+!W`i0s7Z0crr;utr;ls#!!*#urVQTrrVulr!%n9P s8;ls!,2-oD8FYr7h8OrW<-%!!*!!&HDb/s8Dut! dJj@GpAFpfrr*0#s7?6j%06>*riH,*pAaX[qtL$_rVlTp-jBnYkPteg!sAN"qu,LR(B4@6r;?Nl r;-E^0*2IXq=sd_rVlcpc2RhD!WE'=$N^M5!! dJj@GpAFpfrr*0#s7?6j%06>*riH,*pAaX[qtL$_rVlTp-jBnYkPteg!sAN"qu,LR(B4@6r;?Nl r;-E^0*2IXq=sd_rVlcpc2RhD!WE'=$N^M5!! dJj@GpAFpfrr*0#s7?6j%06>*riH,*pAaX[qtL$_rVlTp-jBnYkPteg!sAN"qu,LR(B4@6r;?Nl r;-E^0*2IXq=sd_rVlcpc2RhD!WE'=$N^M5!! dJjIKpU@lM_7[DY^&e9U!!3<-\,5^mq=jpdrVlcfs7uQjg]. dJjIKpU@lM_7[DY^&e9U!!3<-\,5^mq=jpdrVlcfs7uQjg]. dJjIKpU@lM_7[DY^&e9U!!3<-\,5^mq=jpdrVlcfs7uQjg]. dJjsXlj3ap$NgM3!WiB&!X&Asqtp4q=jjbrqZ?cr;HH_p\S2sq#Tsb!W`?(rquiriVruX s8W&r$N'kts7l^!"n_Zhrr)rsrltHDrW2uu*!'CArV6-cr;?NhnalSSp&>!js8U:-er;57Ks8E*#!WW6"!>,;1rr;rsrrE-+"pb54 pA=aOrrrE%s8N&uqu?j$!!*#tjSs`~> dJjsXlj3ap$NgM3!WiB&!X&Asqtp4q=jjbrqZ?cr;HH_p\S2sq#Tsb!W`?(rquiriVruX s8W&r$N'kts7l^!"n_Zhrr)rsrltHDrW2uu*!'CArV6-cr;?NhnalSSp&>!js8U:-er;57Ks8E*#!WW6"!>,;1rr;rsrrE-+"pb54 pA=aOrrrE%s8N&uqu?j$!!*#tjSs`~> dJjsXlj3ap$NgM3!WiB&!X&Asqtp4q=jjbrqZ?cr;HH_p\S2sq#Tsb!W`?(rquiriVruX s8W&r$N'kts7l^!"n_Zhrr)rsrltHDrW2uu*!'CArV6-cr;?NhnalSSp&>!js8U:-er;57Ks8E*#!WW6"!>,;1rr;rsrrE-+"pb54 pA=aOrrrE%s8N&uqu?j$!!*#tjSs`~> f`)!OrVlg)qtTs`E!6=M!!<9)rW3E/!<2ckpAOpds80&#*rGm6rVuosqtg-fo)AC]E<6.C!<`N, "98E(!!!$%p]19o!r`,si;WoXs8W)rrsnf%r,ViAOSeqSqYpEkrm(NErW2rt)u0F0o`+gbqu-6c rquQkq#C0er<30-!!*#urVQTrrVulr!+#[+s8;ls!^X"oeQ%rr<#r!!E?'!<2uYs*t~> f`)!OrVlg)qtTs`E!6=M!!<9)rW3E/!<2ckpAOpds80&#*rGm6rVuosqtg-fo)AC]E<6.C!<`N, "98E(!!!$%p]19o!r`,si;WoXs8W)rrsnf%r,ViAOSeqSqYpEkrm(NErW2rt)u0F0o`+gbqu-6c rquQkq#C0er<30-!!*#urVQTrrVulr!+#[+s8;ls!^X"oeQ%rr<#r!!E?'!<2uYs*t~> f`)!OrVlg)qtTs`E!6=M!!<9)rW3E/!<2ckpAOpds80&#*rGm6rVuosqtg-fo)AC]E<6.C!<`N, "98E(!!!$%p]19o!r`,si;WoXs8W)rrsnf%r,ViAOSeqSqYpEkrm(NErW2rt)u0F0o`+gbqu-6c rquQkq#C0er<30-!!*#urVQTrrVulr!+#[+s8;ls!^X"oeQ%rr<#r!!E?'!<2uYs*t~> f`*#kr;Q`rq=F@Vr.Bo]Ll$nCLP:M?M"^ZDo`+jarVEMns7lZlr;7*(JcuD[!s8Z/"U5&2!!*2s !!30$!WN)Nrt#))rVZ[!!!iK"r:g*eqYne?!WE,u!#tq8qu$J:G'7tNG^O[VG]NQSqu$X)#QOl( s8Dip!r`/urW#t"!<;us!!*<)s7lHjq=XO_!!EE)":'GNp%S:VqY^?hqtg!`p&P-p#m5AGpA=pn ! f`*#kr;Q`rq=F@Vr.Bo]Ll$nCLP:M?M"^ZDo`+jarVEMns7lZlr;7*(JcuD[!s8Z/"U5&2!!*2s !!30$!WN)Nrt#))rVZ[!!!iK"r:g*eqYne?!WE,u!#tq8qu$J:G'7tNG^O[VG]NQSqu$X)#QOl( s8Dip!r`/urW#t"!<;us!!*<)s7lHjq=XO_!!EE)":'GNp%S:VqY^?hqtg!`p&P-p#m5AGpA=pn ! f`*#kr;Q`rq=F@Vr.Bo]Ll$nCLP:M?M"^ZDo`+jarVEMns7lZlr;7*(JcuD[!s8Z/"U5&2!!*2s !!30$!WN)Nrt#))rVZ[!!!iK"r:g*eqYne?!WE,u!#tq8qu$J:G'7tNG^O[VG]NQSqu$X)#QOl( s8Dip!r`/urW#t"!<;us!!*<)s7lHjq=XO_!!EE)":'GNp%S:VqY^?hqtg!`p&P-p#m5AGpA=pn ! f`)ukr;HWpr;-9`rF0)>@U32G?=mDJ@p<>S?=E@$qPaGoq>gEir!rOrRKW]u":,)4"9Ji/!r)`s !<<0"rn.8Nr!i;tr1X>sqtg9hr;$<`cMmqE!WE'="9&)qqHa=+!X8W/":GJ9!a,L$oa1s9!!*#u rVQTrrVulr!*'%"s8;ls!3"!!)unq?[B- !XSu5"Ub>4! f`)ukr;HWpr;-9`rF0)>@U32G?=mDJ@p<>S?=E@$qPaGoq>gEir!rOrRKW]u":,)4"9Ji/!r)`s !<<0"rn.8Nr!i;tr1X>sqtg9hr;$<`cMmqE!WE'="9&)qqHa=+!X8W/":GJ9!a,L$oa1s9!!*#u rVQTrrVulr!*'%"s8;ls!3"!!)unq?[B- !XSu5"Ub>4! f`)ukr;HWpr;-9`rF0)>@U32G?=mDJ@p<>S?=E@$qPaGoq>gEir!rOrRKW]u":,)4"9Ji/!r)`s !<<0"rn.8Nr!i;tr1X>sqtg9hr;$<`cMmqE!WE'="9&)qqHa=+!X8W/":GJ9!a,L$oa1s9!!*#u rVQTrrVulr!*'%"s8;ls!3"!!)unq?[B- !XSu5"Ub>4! fDbpOrVc`p(]*nr#Qb#1"TSN*":>J;"U>/2!VlQgri,qtqZ-Qlr=Ansq"hE""9J`-$3U>3#Qa]# !W`9%rr1RM&,c%qqt^-k"%<+es7Z'\qTf*ArW2uu*!H-9pI>Af!W`B)#QPJ>!!NEno_Sps#64c' s8Dip!r`/urW"YR!<;us!!*'&7S$'<9h%ZC!WWKRX"oeQ%rr<#r!!E?'!<2uYs*t~> fDbpOrVc`p(]*nr#Qb#1"TSN*":>J;"U>/2!VlQgri,qtqZ-Qlr=Ansq"hE""9J`-$3U>3#Qa]# !W`9%rr1RM&,c%qqt^-k"%<+es7Z'\qTf*ArW2uu*!H-9pI>Af!W`B)#QPJ>!!NEno_Sps#64c' s8Dip!r`/urW"YR!<;us!!*'&7S$'<9h%ZC!WWKRX"oeQ%rr<#r!!E?'!<2uYs*t~> fDbpOrVc`p(]*nr#Qb#1"TSN*":>J;"U>/2!VlQgri,qtqZ-Qlr=Ansq"hE""9J`-$3U>3#Qa]# !W`9%rr1RM&,c%qqt^-k"%<+es7Z'\qTf*ArW2uu*!H-9pI>Af!W`B)#QPJ>!!NEno_Sps#64c' s8Dip!r`/urW"YR!<;us!!*'&7S$'<9h%ZC!WWKRX"oeQ%rr<#r!!E?'!<2uYs*t~> g&D0Rs8W)sr>5,*"T]/>!!*3*!"9)6"9AT5"T\2mrVierr;6Kk&-)1ro_lr5!rr<)!rrQ-#l"B$ !<<0"rn.5]qtL!_qY:*o"o/#qr:p6_cMmqE!WE'="Sr#h":"o.! g&D0Rs8W)sr>5,*"T]/>!!*3*!"9)6"9AT5"T\2mrVierr;6Kk&-)1ro_lr5!rr<)!rrQ-#l"B$ !<<0"rn.5]qtL!_qY:*o"o/#qr:p6_cMmqE!WE'="Sr#h":"o.! g&D0Rs8W)sr>5,*"T]/>!!*3*!"9)6"9AT5"T\2mrVierr;6Kk&-)1ro_lr5!rr<)!rrQ-#l"B$ !<<0"rn.5]qtL!_qY:*o"o/#qr:p6_cMmqE!WE'="Sr#h":"o.! g&D'Nrr3r:rVQKkoEG9r!"&r8!!^']rVH*`$3:A3$i^"t !Y>><#m(52!=/Z*$3:)*"p+c>!!r`-!!$3^G2#o3I4e,TII(C1!@%KHJ3%fH,$q"4Of !!**("TSQ$p$)J[rr<#ts8Vus"9JQ'rr2!YJ,~> g&D'Nrr3r:rVQKkoEG9r!"&r8!!^']rVH*`$3:A3$i^"t !Y>><#m(52!=/Z*$3:)*"p+c>!!r`-!!$3^G2#o3I4e,TII(C1!@%KHJ3%fH,$q"4Of !!**("TSQ$p$)J[rr<#ts8Vus"9JQ'rr2!YJ,~> g&D'Nrr3r:rVQKkoEG9r!"&r8!!^']rVH*`$3:A3$i^"t !Y>><#m(52!=/Z*$3:)*"p+c>!!r`-!!$3^G2#o3I4e,TII(C1!@%KHJ3%fH,$q"4Of !!**("TSQ$p$)J[rr<#ts8Vus"9JQ'rr2!YJ,~> g&M$M)uop8qu6@'!!E8nqXFLQrWEB)r;6Ws#QFMtpo"/irXJo,o_JOar;6Ek!rrE(r;[0*!WrN+ !<<*#!!3)uf`)K]pAOpbqs4^r"oJ;mr;-E4"Tnr4(]XdE!s\f+$j-P.r;Q[Qq>UB_o`"O_"TS]+$hjQ, "qL\:!!3-)!"BJ>s7cKm"pb2B!< g&M$M)uop8qu6@'!!E8nqXFLQrWEB)r;6Ws#QFMtpo"/irXJo,o_JOar;6Ek!rrE(r;[0*!WrN+ !<<*#!!3)uf`)K]pAOpbqs4^r"oJ;mr;-E4"Tnr4(]XdE!s\f+$j-P.r;Q[Qq>UB_o`"O_"TS]+$hjQ, "qL\:!!3-)!"BJ>s7cKm"pb2B!< g&M$M)uop8qu6@'!!E8nqXFLQrWEB)r;6Ws#QFMtpo"/irXJo,o_JOar;6Ek!rrE(r;[0*!WrN+ !<<*#!!3)uf`)K]pAOpbqs4^r"oJ;mr;-E4"Tnr4(]XdE!s\f+$j-P.r;Q[Qq>UB_o`"O_"TS]+$hjQ, "qL\:!!3-)!"BJ>s7cKm"pb2B!< fDc*Srr<#trVlir!<<$0s8Muro`G3ps8E!"#O_WdrhoerrYGJ3rr;cnq>^Kls7Q6b*sVfS!!iQ* !WE-#!W2p!rVlfKrsnc%rr)NhoD]!qjnSlQrltHDrW2uu%KZM-qZ$QOrr;oq!!!*1rW!'.q>UEu rW!$!s8Drs"oeQ$r;QZo!(?ngs8;ls! fDc*Srr<#trVlir!<<$0s8Muro`G3ps8E!"#O_WdrhoerrYGJ3rr;cnq>^Kls7Q6b*sVfS!!iQ* !WE-#!W2p!rVlfKrsnc%rr)NhoD]!qjnSlQrltHDrW2uu%KZM-qZ$QOrr;oq!!!*1rW!'.q>UEu rW!$!s8Drs"oeQ$r;QZo!(?ngs8;ls! fDc*Srr<#trVlir!<<$0s8Muro`G3ps8E!"#O_WdrhoerrYGJ3rr;cnq>^Kls7Q6b*sVfS!!iQ* !WE-#!W2p!rVlfKrsnc%rr)NhoD]!qjnSlQrltHDrW2uu%KZM-qZ$QOrr;oq!!!*1rW!'.q>UEu rW!$!s8Drs"oeQ$r;QZo!(?ngs8;ls! e,TII(]F@6!W`6!s8N&orr<0%s8;ot!WE#trR(Z@rmC`VpA4\B1BRg]!!EE)!=&`/r;Zotrr1RM $NBo%q#'sYquI*,rVcfqcMmqE!WE'=!VZQmbfU"1rp]dh!<`T-!<<0#rrE*#!!*#urVlg5pA`.T rqZ^"!!**"r;Q`t!<<-#!rW)tq>U]o"98i3!<)`hrtPA2#6G/5rVZXM2)-mH!XK&6"T\>squHcu quHNl&,uV,!WW6$!W;rfqu$KnrnIJQrqQR""U)rhqu6Wtqu@')!WpQiq"XaWs7Z9fq>U]nr:Bj\ r;d'#!!E?'!<2uYs*t~> e,TII(]F@6!W`6!s8N&orr<0%s8;ot!WE#trR(Z@rmC`VpA4\B1BRg]!!EE)!=&`/r;Zotrr1RM $NBo%q#'sYquI*,rVcfqcMmqE!WE'=!VZQmbfU"1rp]dh!<`T-!<<0#rrE*#!!*#urVlg5pA`.T rqZ^"!!**"r;Q`t!<<-#!rW)tq>U]o"98i3!<)`hrtPA2#6G/5rVZXM2)-mH!XK&6"T\>squHcu quHNl&,uV,!WW6$!W;rfqu$KnrnIJQrqQR""U)rhqu6Wtqu@')!WpQiq"XaWs7Z9fq>U]nr:Bj\ r;d'#!!E?'!<2uYs*t~> e,TII(]F@6!W`6!s8N&orr<0%s8;ot!WE#trR(Z@rmC`VpA4\B1BRg]!!EE)!=&`/r;Zotrr1RM $NBo%q#'sYquI*,rVcfqcMmqE!WE'=!VZQmbfU"1rp]dh!<`T-!<<0#rrE*#!!*#urVlg5pA`.T rqZ^"!!**"r;Q`t!<<-#!rW)tq>U]o"98i3!<)`hrtPA2#6G/5rVZXM2)-mH!XK&6"T\>squHcu quHNl&,uV,!WW6$!W;rfqu$KnrnIJQrqQR""U)rhqu6Wtqu@')!WpQiq"XaWs7Z9fq>U]nr:Bj\ r;d'#!!E?'!<2uYs*t~> e,TII(&Rt1!s/H$s8N&prr<*#s8;ou!rVuBs7uZArtkP(oDJPZ"Te`-$igJ e,TII(&Rt1!s/H$s8N&prr<*#s8;ou!rVuBs7uZArtkP(oDJPZ"Te`-$igJ e,TII(&Rt1!s/H$s8N&prr<*#s8;ou!rVuBs7uZArtkP(oDJPZ"Te`-$igJ e,TII$iBo'!s/H$s8N&qs8E!!s8Dots8:4Cq>SeA&,#ktq"jr!!=/c2!<`E.!WE'%!WE#rrn7;^ p](6eq>0a^"p,,0q#(0hcMmqE!WE'=!WDoi!s/K,!r)Tm"TSi3!<<0#rrE*#!!*#urVlg5q>p[# !;c`s!!**"r;Q`t!<<-#!rW)tq>U]s!"/l3"Tk7jru(M0!!*B."o\>qq#'g_!s8Q,!WVrgqu6Ws quHNl&,uV,!WW6$! e,TII$iBo'!s/H$s8N&qs8E!!s8Dots8:4Cq>SeA&,#ktq"jr!!=/c2!<`E.!WE'%!WE#rrn7;^ p](6eq>0a^"p,,0q#(0hcMmqE!WE'=!WDoi!s/K,!r)Tm"TSi3!<<0#rrE*#!!*#urVlg5q>p[# !;c`s!!**"r;Q`t!<<-#!rW)tq>U]s!"/l3"Tk7jru(M0!!*B."o\>qq#'g_!s8Q,!WVrgqu6Ws quHNl&,uV,!WW6$! e,TII$iBo'!s/H$s8N&qs8E!!s8Dots8:4Cq>SeA&,#ktq"jr!!=/c2!<`E.!WE'%!WE#rrn7;^ p](6eq>0a^"p,,0q#(0hcMmqE!WE'=!WDoi!s/K,!r)Tm"TSi3!<<0#rrE*#!!*#urVlg5q>p[# !;c`s!!**"r;Q`t!<<-#!rW)tq>U]s!"/l3"Tk7jru(M0!!*B."o\>qq#'g_!s8Q,!WVrgqu6Ws quHNl&,uV,!WW6$! e,TII#5eB"!W`9"rr3#trr)ots8E!#r;Q`qRK!fqqY9map@iud!tbS=!=8i+!!<,urn.5]rql]h o_eI[!!ri+rV?EgcMmqE!WE'=!WDcm"p"l/"8Va!"onr2!<<0#rrE*#!!*#urVlg5r<**$!VcWs !!**"r;Q`t!<<-#!rW)tq>U]r!s])8"9J`%ru(J(!!*60"8r2qq"apf!sJZ1!<;leq=O^gquHNl &,uV,!WW6$! e,TII#5eB"!W`9"rr3#trr)ots8E!#r;Q`qRK!fqqY9map@iud!tbS=!=8i+!!<,urn.5]rql]h o_eI[!!ri+rV?EgcMmqE!WE'=!WDcm"p"l/"8Va!"onr2!<<0#rrE*#!!*#urVlg5r<**$!VcWs !!**"r;Q`t!<<-#!rW)tq>U]r!s])8"9J`%ru(J(!!*60"8r2qq"apf!sJZ1!<;leq=O^gquHNl &,uV,!WW6$! e,TII#5eB"!W`9"rr3#trr)ots8E!#r;Q`qRK!fqqY9map@iud!tbS=!=8i+!!<,urn.5]rql]h o_eI[!!ri+rV?EgcMmqE!WE'=!WDcm"p"l/"8Va!"onr2!<<0#rrE*#!!*#urVlg5r<**$!VcWs !!**"r;Q`t!<<-#!rW)tq>U]r!s])8"9J`%ru(J(!!*60"8r2qq"apf!sJZ1!<;leq=O^gquHNl &,uV,!WW6$! e,TII&H2V/!W`9!s8W&squd!#rr2ls"9/?#rL*ZqrVlBap@eC^qihHo#R1G0!!<,urn.5]rqu]i r;??b!"B)/rUTmbcMmqE!WE'%%/'Dp!WE08!VuTt#R(53!<<0#rrE*#!!*#urVlg5q$-m(!Vl]t !!**"r;Q`t!<<-#!rW)tq>U]s!X&o9#Qk,'rsnhq"9ni.%/g+pq#(!b!<*'*!rquhq"=[gquHNl &,uV,!WW6$!<`H%rqZ?hqV2&MrqQR""U4u0"pP58qu@')!WiK,#6b8=!sS2p#7(M:"p=u7!WE'% !WW6"roF*0~> e,TII&H2V/!W`9!s8W&squd!#rr2ls"9/?#rL*ZqrVlBap@eC^qihHo#R1G0!!<,urn.5]rqu]i r;??b!"B)/rUTmbcMmqE!WE'%%/'Dp!WE08!VuTt#R(53!<<0#rrE*#!!*#urVlg5q$-m(!Vl]t !!**"r;Q`t!<<-#!rW)tq>U]s!X&o9#Qk,'rsnhq"9ni.%/g+pq#(!b!<*'*!rquhq"=[gquHNl &,uV,!WW6$!<`H%rqZ?hqV2&MrqQR""U4u0"pP58qu@')!WiK,#6b8=!sS2p#7(M:"p=u7!WE'% !WW6"roF*0~> e,TII&H2V/!W`9!s8W&squd!#rr2ls"9/?#rL*ZqrVlBap@eC^qihHo#R1G0!!<,urn.5]rqu]i r;??b!"B)/rUTmbcMmqE!WE'%%/'Dp!WE08!VuTt#R(53!<<0#rrE*#!!*#urVlg5q$-m(!Vl]t !!**"r;Q`t!<<-#!rW)tq>U]s!X&o9#Qk,'rsnhq"9ni.%/g+pq#(!b!<*'*!rquhq"=[gquHNl &,uV,!WW6$!<`H%rqZ?hqV2&MrqQR""U4u0"pP58qu@')!WiK,#6b8=!sS2p#7(M:"p=u7!WE'% !WW6"roF*0~> e,TII(]=:5"Tn`%r;Z]oqZm0&qtg?p"9/9!rmCcArm:Z\q"t!cq>L-brMp&7!sJf.!W`?#rr)iL s8Ms*qXaUX=9&Q+o)JR]q9K!@rW2uu*!c<V?/quQs)"pb,'p\aOVqZ$g&!!<2kqt^!e !W2rmrt#,/quQj!!!**#s82Nas8C^Ps8Mco"p>)6"p4r/qu@')!WiH)#71A7#QsSs#6k>=!sK#8 $2so-!WW6"roF*0~> e,TII(]=:5"Tn`%r;Z]oqZm0&qtg?p"9/9!rmCcArm:Z\q"t!cq>L-brMp&7!sJf.!W`?#rr)iL s8Ms*qXaUX=9&Q+o)JR]q9K!@rW2uu*!c<V?/quQs)"pb,'p\aOVqZ$g&!!<2kqt^!e !W2rmrt#,/quQj!!!**#s82Nas8C^Ps8Mco"p>)6"p4r/qu@')!WiH)#71A7#QsSs#6k>=!sK#8 $2so-!WW6"roF*0~> e,TII(]=:5"Tn`%r;Z]oqZm0&qtg?p"9/9!rmCcArm:Z\q"t!cq>L-brMp&7!sJf.!W`?#rr)iL s8Ms*qXaUX=9&Q+o)JR]q9K!@rW2uu*!c<V?/quQs)"pb,'p\aOVqZ$g&!!<2kqt^!e !W2rmrt#,/quQj!!!**#s82Nas8C^Ps8Mco"p>)6"p4r/qu@')!WiH)#71A7#QsSs#6k>=!sK#8 $2so-!WW6"roF*0~> e,TII(Ae%3#6b)'q#C6jq?d3(q=ajn#5n;rd/Wq>dJk$[r;6KdrVQQlp\;W0%0Q\7"Tnl+rr)iL rt#)-q#:*\qud3)s7uNgrVb%A!WE-!!#uC?qu$L!"9ASsrrWQ-!WrH'!WW0#!!*'"rr;rrrtkP4 #Qb/%#6Or,!<;us!!**#!<<3!s8Mio#Pe?$%0Q\<"o809r;4A7!XJchrVZNfrVcd"!!!*!p&"R_ !!2utq#:m(s82ou!<<-#"TJ/nr;6KJs8W)o!=&f0$3UA6!!<&u#lt)/!!<9(#lk>%!!`W-!sJ`.% 0ZY1"9JQ'rr2!YJ,~> e,TII(Ae%3#6b)'q#C6jq?d3(q=ajn#5n;rd/Wq>dJk$[r;6KdrVQQlp\;W0%0Q\7"Tnl+rr)iL rt#)-q#:*\qud3)s7uNgrVb%A!WE-!!#uC?qu$L!"9ASsrrWQ-!WrH'!WW0#!!*'"rr;rrrtkP4 #Qb/%#6Or,!<;us!!**#!<<3!s8Mio#Pe?$%0Q\<"o809r;4A7!XJchrVZNfrVcd"!!!*!p&"R_ !!2utq#:m(s82ou!<<-#"TJ/nr;6KJs8W)o!=&f0$3UA6!!<&u#lt)/!!<9(#lk>%!!`W-!sJ`.% 0ZY1"9JQ'rr2!YJ,~> e,TII(Ae%3#6b)'q#C6jq?d3(q=ajn#5n;rd/Wq>dJk$[r;6KdrVQQlp\;W0%0Q\7"Tnl+rr)iL rt#)-q#:*\qud3)s7uNgrVb%A!WE-!!#uC?qu$L!"9ASsrrWQ-!WrH'!WW0#!!*'"rr;rrrtkP4 #Qb/%#6Or,!<;us!!**#!<<3!s8Mio#Pe?$%0Q\<"o809r;4A7!XJchrVZNfrVcd"!!!*!p&"R_ !!2utq#:m(s82ou!<<-#"TJ/nr;6KJs8W)o!=&f0$3UA6!!<&u#lt)/!!<9(#lk>%!!`W-!sJ`.% 0ZY1"9JQ'rr2!YJ,~> e,TII(B*k,!=:%r/0cMk-NO2So)&Lg!W;rid/O=Lr:U$drqZ?gg&Dlfs8N&ss8N&ume?b9f*VK] #lk,'p&=mBrt"u+oDed_,6Iu$o_\XZs8(%@!WE-!!+H$.oDS^j!<_$Hrri]/%0Q\3!WW0#!!*6' rr;rsqZ$Nq$31>,!WW3$!<;us!!*01!!`],o_nOapAb0`rr;p$!!E<*#6=f(p]($gr;?Njr;Zg# "9SDrqYC*i!!rZ+!ri/urYtnB"98H+Gus7Q?jp\Xp]rWNN,$j-J0rr)fprnIJQrXRN[%0-k= "98Q)!XJf/"nVcr!< e,TII(B*k,!=:%r/0cMk-NO2So)&Lg!W;rid/O=Lr:U$drqZ?gg&Dlfs8N&ss8N&ume?b9f*VK] #lk,'p&=mBrt"u+oDed_,6Iu$o_\XZs8(%@!WE-!!+H$.oDS^j!<_$Hrri]/%0Q\3!WW0#!!*6' rr;rsqZ$Nq$31>,!WW3$!<;us!!*01!!`],o_nOapAb0`rr;p$!!E<*#6=f(p]($gr;?Njr;Zg# "9SDrqYC*i!!rZ+!ri/urYtnB"98H+Gus7Q?jp\Xp]rWNN,$j-J0rr)fprnIJQrXRN[%0-k= "98Q)!XJf/"nVcr!< e,TII(B*k,!=:%r/0cMk-NO2So)&Lg!W;rid/O=Lr:U$drqZ?gg&Dlfs8N&ss8N&ume?b9f*VK] #lk,'p&=mBrt"u+oDed_,6Iu$o_\XZs8(%@!WE-!!+H$.oDS^j!<_$Hrri]/%0Q\3!WW0#!!*6' rr;rsqZ$Nq$31>,!WW3$!<;us!!*01!!`],o_nOapAb0`rr;p$!!E<*#6=f(p]($gr;?Njr;Zg# "9SDrqYC*i!!rZ+!ri/urYtnB"98H+Gus7Q?jp\Xp]rWNN,$j-J0rr)fprnIJQrXRN[%0-k= "98Q)!XJf/"nVcr!< eGoRJ)#aI!$igb;"oo&5!!!WU'd!X&K,!!!6&p%e=\nG`CcpA57-!!`N'rqZQk o`P eGoRJ)#aI!$igb;"oo&5!!!WU'd!X&K,!!!6&p%e=\nG`CcpA57-!!`N'rqZQk o`P eGoRJ)#aI!$igb;"oo&5!!!WU'd!X&K,!!!6&p%e=\nG`CcpA57-!!`N'rqZQk o`P f)PdL)ZBU2q#(+'$l'9]$P*^U&e#NNq=#40rUBdbdJjIKo(N(Rrr)K2rt#&&rp'.UnG*V("9e8o rq>%F&,6)&oDRhS!;uihs7uZmp/s8N*"!<`DnoD\F^ rql]os8$%%!rr?%s8;ls!=Sr3!LO(!!`T+"nqrlrq$-ep%A7^$ih.G!s&Au lgarS#6Fl,rVulsrWN9(#65&6rq--erq?'[s8Dur! f)PdL)ZBU2q#(+'$l'9]$P*^U&e#NNq=#40rUBdbdJjIKo(N(Rrr)K2rt#&&rp'.UnG*V("9e8o rq>%F&,6)&oDRhS!;uihs7uZmp/s8N*"!<`DnoD\F^ rql]os8$%%!rr?%s8;ls!=Sr3!LO(!!`T+"nqrlrq$-ep%A7^$ih.G!s&Au lgarS#6Fl,rVulsrWN9(#65&6rq--erq?'[s8Dur! f)PdL)ZBU2q#(+'$l'9]$P*^U&e#NNq=#40rUBdbdJjIKo(N(Rrr)K2rt#&&rp'.UnG*V("9e8o rq>%F&,6)&oDRhS!;uihs7uZmp/s8N*"!<`DnoD\F^ rql]os8$%%!rr?%s8;ls!=Sr3!LO(!!`T+"nqrlrq$-ep%A7^$ih.G!s&Au lgarS#6Fl,rVulsrWN9(#65&6rq--erq?'[s8Dur! f)PdL)ZBU2qu$*as7uBen,2qUqY^-bp[n7[nbi4QdJjIMrp\>5qrn"#rt"u%p&+jfr:0U[0`_%H q=WG@&,u7qrqcZs!Vu9ar;HTerm(NErW2uu#6Y,/g=k-3g&B\S!!WH9!W`9%s8N*"!,A5!<3#sf)H6Vr[8'Q#65,6$NgA/"p*6S "9JQ'rr2!YJ,~> f)PdL)ZBU2qu$*as7uBen,2qUqY^-bp[n7[nbi4QdJjIMrp\>5qrn"#rt"u%p&+jfr:0U[0`_%H q=WG@&,u7qrqcZs!Vu9ar;HTerm(NErW2uu#6Y,/g=k-3g&B\S!!WH9!W`9%s8N*"!,A5!<3#sf)H6Vr[8'Q#65,6$NgA/"p*6S "9JQ'rr2!YJ,~> f)PdL)ZBU2qu$*as7uBen,2qUqY^-bp[n7[nbi4QdJjIMrp\>5qrn"#rt"u%p&+jfr:0U[0`_%H q=WG@&,u7qrqcZs!Vu9ar;HTerm(NErW2uu#6Y,/g=k-3g&B\S!!WH9!W`9%s8N*"!,A5!<3#sf)H6Vr[8'Q#65,6$NgA/"p*6S "9JQ'rr2!YJ,~> f)PdL)ZBU2p\sm`rp]s[s7,UWp[eCVr;HTfs7Gp\dJjIDr;Ql5r;$'.rt#&-rUKjWnc&FOs$$AZ p&3SD&,lM-qSE@:4oP6Vo_87^qp,3BrW2uuIg$>b!!*E,"9\]-!rrZ0%06G0s8N*"!=/r8"onr5 !rrE-!WW3@c)s8;ls!=]);!!1!'"9\]-!rrZ0%K?D0rr;rJrt"l#rB(2k!s/T+'F+XC "Tm6T"9JQ'rr2!YJ,~> f)PdL)ZBU2p\sm`rp]s[s7,UWp[eCVr;HTfs7Gp\dJjIDr;Ql5r;$'.rt#&-rUKjWnc&FOs$$AZ p&3SD&,lM-qSE@:4oP6Vo_87^qp,3BrW2uuIg$>b!!*E,"9\]-!rrZ0%06G0s8N*"!=/r8"onr5 !rrE-!WW3@c)s8;ls!=]);!!1!'"9\]-!rrZ0%K?D0rr;rJrt"l#rB(2k!s/T+'F+XC "Tm6T"9JQ'rr2!YJ,~> f)PdL)ZBU2p\sm`rp]s[s7,UWp[eCVr;HTfs7Gp\dJjIDr;Ql5r;$'.rt#&-rUKjWnc&FOs$$AZ p&3SD&,lM-qSE@:4oP6Vo_87^qp,3BrW2uuIg$>b!!*E,"9\]-!rrZ0%06G0s8N*"!=/r8"onr5 !rrE-!WW3@c)s8;ls!=]);!!1!'"9\]-!rrZ0%K?D0rr;rJrt"l#rB(2k!s/T+'F+XC "Tm6T"9JQ'rr2!YJ,~> ec,gPrVcZaqYpC*rVQ6eq>^6crVQEcp\sd_s8M`>rs/MsqZ@"uXS_hmdJjaPr;$(0u$2XGfr;-6_qtn\=!WE-!!.P%M!rrK*":>;4"p+i+#Qk)-!WW0#!!**/&I&I@ !!36/!sJ`+"9AK'!<;us!!*0-!!33+!!NS+r2Bf,#mLD1!XSi1!s/)kqtp;nTrRb]r;Qa&"T\T. !"p+i+#Qt),!ri5uf)H9Wp\atj !!WVX!!E?'!<2uYs*t~> ec,gPrVcZaqYpC*rVQ6eq>^6crVQEcp\sd_s8M`>rs/MsqZ@"uXS_hmdJjaPr;$(0u$2XGfr;-6_qtn\=!WE-!!.P%M!rrK*":>;4"p+i+#Qk)-!WW0#!!**/&I&I@ !!36/!sJ`+"9AK'!<;us!!*0-!!33+!!NS+r2Bf,#mLD1!XSi1!s/)kqtp;nTrRb]r;Qa&"T\T. !"p+i+#Qt),!ri5uf)H9Wp\atj !!WVX!!E?'!<2uYs*t~> ec,gPrVcZaqYpC*rVQ6eq>^6crVQEcp\sd_s8M`>rs/MsqZ@"uXS_hmdJjaPr;$(0u$2XGfr;-6_qtn\=!WE-!!.P%M!rrK*":>;4"p+i+#Qk)-!WW0#!!**/&I&I@ !!36/!sJ`+"9AK'!<;us!!*0-!!33+!!NS+r2Bf,#mLD1!XSi1!s/)kqtp;nTrRb]r;Qa&"T\T. !"p+i+#Qt),!ri5uf)H9Wp\atj !!WVX!!E?'!<2uYs*t~> eGoRJ)#a@,q>($fq#(-frqHHeq>:*brqlTmqY\b@#QFPp"UkJ9Onnn$rsnl&s8Dfks8DflqY^-b rn7;^rqZ5L"Ti`>q>:-cqZ$BjcMmqE!WE'_"onf-!!3Q1! eGoRJ)#a@,q>($fq#(-frqHHeq>:*brqlTmqY\b@#QFPp"UkJ9Onnn$rsnl&s8Dfks8DflqY^-b rn7;^rqZ5L"Ti`>q>:-cqZ$BjcMmqE!WE'_"onf-!!3Q1! eGoRJ)#a@,q>($fq#(-frqHHeq>:*brqlTmqY\b@#QFPp"UkJ9Onnn$rsnl&s8Dfks8DflqY^-b rn7;^rqZ5L"Ti`>q>:-cqZ$BjcMmqE!WE'_"onf-!!3Q1! df1-_qZ$Nls8;lorr;ups8)clqu?]nrr;lBrtPG2quHs*!WdZGqY]p]r;69hs8;orrRh,PrVZ]o qu6cor;ZTNrtkY6s8DimrVuWcrr<$(rVc`ls8VoprVk1D>5\9s!!!1TLkU\@KnYG=Kn>&0K8bKe !!30#rr<3&N.[(DKn>#5KntG?KnbA9M1pS7J:WE'L$=9fL&Zf+J,P'&JG]?,s*t~> df1-_qZ$Nls8;lorr;ups8)clqu?]nrr;lBrtPG2quHs*!WdZGqY]p]r;69hs8;orrRh,PrVZ]o qu6cor;ZTNrtkY6s8DimrVuWcrr<$(rVc`ls8VoprVk1D>5\9s!!!1TLkU\@KnYG=Kn>&0K8bKe !!30#rr<3&N.[(DKn>#5KntG?KnbA9M1pS7J:WE'L$=9fL&Zf+J,P'&JG]?,s*t~> df1-_qZ$Nls8;lorr;ups8)clqu?]nrr;lBrtPG2quHs*!WdZGqY]p]r;69hs8;orrRh,PrVZ]o qu6cor;ZTNrtkY6s8DimrVuWcrr<$(rVc`ls8VoprVk1D>5\9s!!!1TLkU\@KnYG=Kn>&0K8bKe !!30#rr<3&N.[(DKn>#5KntG?KnbA9M1pS7J:WE'L$=9fL&Zf+J,P'&JG]?,s*t~> M>nCjrqca!"p4o/@Joclr:U$bp[nC\rVlckriuJ9rVuoqqYU6jqY4J$"JGVfrVlf>rs&)mp&GF& rV?F/s7lBdr:]pd!!30!rrE<,qYg9`pA4^Yq>M34"T\#iqZI*'rqcTmpmqKd"8N$&#ljVsrVStb !!rPur:gNu#6b5,p&4jm#6G&'qYL0gqYg9n!;cKhrquj#"T/&fs7`)e"p"Z*!WrB"o`+a`q#CNt qt^-dqYn\ M>nCjrqca!"p4o/@Joclr:U$bp[nC\rVlckriuJ9rVuoqqYU6jqY4J$"JGVfrVlf>rs&)mp&GF& rV?F/s7lBdr:]pd!!30!rrE<,qYg9`pA4^Yq>M34"T\#iqZI*'rqcTmpmqKd"8N$&#ljVsrVStb !!rPur:gNu#6b5,p&4jm#6G&'qYL0gqYg9n!;cKhrquj#"T/&fs7`)e"p"Z*!WrB"o`+a`q#CNt qt^-dqYn\ M>nCjrqca!"p4o/@Joclr:U$bp[nC\rVlckriuJ9rVuoqqYU6jqY4J$"JGVfrVlf>rs&)mp&GF& rV?F/s7lBdr:]pd!!30!rrE<,qYg9`pA4^Yq>M34"T\#iqZI*'rqcTmpmqKd"8N$&#ljVsrVStb !!rPur:gNu#6b5,p&4jm#6G&'qYL0gqYg9n!;cKhrquj#"T/&fs7`)e"p"Z*!WrB"o`+a`q#CNt qt^-dqYn\ M>nCjrqcd""Tnf.!(fiZrqcB`qtg'cp](*criuJ:rVuoqqu$Eio(N@i#642jr;HTnc2S%AqXsU` $is0"rYP;,r;-$]q#CC$$MFAu"9M*nr:p0YrV63f('+I=p\+Ih!9j\r;-9fkPkJ\s8E<&q>0pbrr2KbjSs`~> M>nCjrqcd""Tnf.!(fiZrqcB`qtg'cp](*criuJ:rVuoqqu$Eio(N@i#642jr;HTnc2S%AqXsU` $is0"rYP;,r;-$]q#CC$$MFAu"9M*nr:p0YrV63f('+I=p\+Ih!9j\r;-9fkPkJ\s8E<&q>0pbrr2KbjSs`~> M>nCjrqcd""Tnf.!(fiZrqcB`qtg'cp](*criuJ:rVuoqqu$Eio(N@i#642jr;HTnc2S%AqXsU` $is0"rYP;,r;-$]q#CC$$MFAu"9M*nr:p0YrV63f('+I=p\+Ih!9j\r;-9fkPkJ\s8E<&q>0pbrr2KbjSs`~> M>nChrV?Nq!s&E,"9J]Zq>L!]rq?9iq=OX]riuJ;r;HTkr;HQhq`"`^c2RS>qu$Elrm(NKr:p3] "9oG=q(W[<1GLR:0e`h8!X8,n!!!?50f_*G2DI&a0cU2o"9/#m!X/W.1,CgC!WiB)oF1d%%5KXl 1b^Z`"@)h\q"=dq!#31,8k3":=u+"98c`0eY:; 0`Vjgs8MZiqYSJ9s8E9#qYC*`rq?0Ks8N!&rU^'^s8MoojSs`~> M>nChrV?Nq!s&E,"9J]Zq>L!]rq?9iq=OX]riuJ;r;HTkr;HQhq`"`^c2RS>qu$Elrm(NKr:p3] "9oG=q(W[<1GLR:0e`h8!X8,n!!!?50f_*G2DI&a0cU2o"9/#m!X/W.1,CgC!WiB)oF1d%%5KXl 1b^Z`"@)h\q"=dq!#31,8k3":=u+"98c`0eY:; 0`Vjgs8MZiqYSJ9s8E9#qYC*`rq?0Ks8N!&rU^'^s8MoojSs`~> M>nChrV?Nq!s&E,"9J]Zq>L!]rq?9iq=OX]riuJ;r;HTkr;HQhq`"`^c2RS>qu$Elrm(NKr:p3] "9oG=q(W[<1GLR:0e`h8!X8,n!!!?50f_*G2DI&a0cU2o"9/#m!X/W.1,CgC!WiB)oF1d%%5KXl 1b^Z`"@)h\q"=dq!#31,8k3":=u+"98c`0eY:; 0`Vjgs8MZiqYSJ9s8E9#qYC*`rq?0Ks8N!&rU^'^s8MoojSs`~> M>nChrV?Np!WW3&!!39-)#jI4rr)iro)89]rtPD0rVQNkr;$?n"Tn8lrp9O[rVlfAs8Vfsp&3hL !X8B$(CL6I"TSo1!!NQ,rTiPN!Wi?/!XAi.#PeE&!s&T)r`K4'"TSo1!!Wc<"9AB$#RCG2!WW9( !=&T.rqucp!!*3&!<<#rq#16t!WW92"Ub;5!!39&rqH-a$4@(D!"TD:!=9)6rsJo/!<`W4!!36* !Wi5knG`"XbQ%VA#Q4Sqp&4m_roj=Zrr;p&r;H3\rUoXZo]6%&~> M>nChrV?Np!WW3&!!39-)#jI4rr)iro)89]rtPD0rVQNkr;$?n"Tn8lrp9O[rVlfAs8Vfsp&3hL !X8B$(CL6I"TSo1!!NQ,rTiPN!Wi?/!XAi.#PeE&!s&T)r`K4'"TSo1!!Wc<"9AB$#RCG2!WW9( !=&T.rqucp!!*3&!<<#rq#16t!WW92"Ub;5!!39&rqH-a$4@(D!"TD:!=9)6rsJo/!<`W4!!36* !Wi5knG`"XbQ%VA#Q4Sqp&4m_roj=Zrr;p&r;H3\rUoXZo]6%&~> M>nChrV?Np!WW3&!!39-)#jI4rr)iro)89]rtPD0rVQNkr;$?n"Tn8lrp9O[rVlfAs8Vfsp&3hL !X8B$(CL6I"TSo1!!NQ,rTiPN!Wi?/!XAi.#PeE&!s&T)r`K4'"TSo1!!Wc<"9AB$#RCG2!WW9( !=&T.rqucp!!*3&!<<#rq#16t!WW92"Ub;5!!39&rqH-a$4@(D!"TD:!=9)6rsJo/!<`W4!!36* !Wi5knG`"XbQ%VA#Q4Sqp&4m_roj=Zrr;p&r;H3\rUoXZo]6%&~> M>nChrqlft!WW6'!!E9&%06Y4oDe7Prr;kprtPG2rr)fprVQd%#OVKhq#:0grVlfArs/N%n+lJU #R^>,((:0F!XAf-!!3#orqZTq#RLP4$NU>4p]+V&!:fCTr;Zg,!<:"TST( !#56!!3Q6!;HK\rr)`p#m1nB!!iQ3!<)Tk#m:89j`nc%VLJ,~> M>nChrqlft!WW6'!!E9&%06Y4oDe7Prr;kprtPG2rr)fprVQd%#OVKhq#:0grVlfArs/N%n+lJU #R^>,((:0F!XAf-!!3#orqZTq#RLP4$NU>4p]+V&!:fCTr;Zg,!<:"TST( !#56!!3Q6!;HK\rr)`p#m1nB!!iQ3!<)Tk#m:89j`nc%VLJ,~> M>nChrqlft!WW6'!!E9&%06Y4oDe7Prr;kprtPG2rr)fprVQd%#OVKhq#:0grVlfArs/N%n+lJU #R^>,((:0F!XAf-!!3#orqZTq#RLP4$NU>4p]+V&!:fCTr;Zg,!<:"TST( !#56!!3Q6!;HK\rr)`p#m1nB!!iQ3!<)Tk#m:89j`nc%VLJ,~> M>nCirqup!!<<-#$NL5/%KH\5jo5,UrVlZhrNZA8rVuoqqYU6j!WX#8rVQ3crVlf?rs/N%rr)fq ()Qcb',MN+,o7CD(Dm&GrV?-c)]'>5)u^ZS(\ntV)&DuFrpg!e*#9A8(EXS3)?9R/(E4>0(*450 )Bosss7uBfq=POErUKaWrr2Wjr>-Ol,T%@9(Dd#Lq#C!drr*ZL(*=V9+Vkmdr;.6F)]'\E(`"82 (]X7)n+cn]bQ%S@#4VWgmf)#*l/qm+roX7D"Qeh(qYB4PJ,~> M>nCirqup!!<<-#$NL5/%KH\5jo5,UrVlZhrNZA8rVuoqqYU6j!WX#8rVQ3crVlf?rs/N%rr)fq ()Qcb',MN+,o7CD(Dm&GrV?-c)]'>5)u^ZS(\ntV)&DuFrpg!e*#9A8(EXS3)?9R/(E4>0(*450 )Bosss7uBfq=POErUKaWrr2Wjr>-Ol,T%@9(Dd#Lq#C!drr*ZL(*=V9+Vkmdr;.6F)]'\E(`"82 (]X7)n+cn]bQ%S@#4VWgmf)#*l/qm+roX7D"Qeh(qYB4PJ,~> M>nCirqup!!<<-#$NL5/%KH\5jo5,UrVlZhrNZA8rVuoqqYU6j!WX#8rVQ3crVlf?rs/N%rr)fq ()Qcb',MN+,o7CD(Dm&GrV?-c)]'>5)u^ZS(\ntV)&DuFrpg!e*#9A8(EXS3)?9R/(E4>0(*450 )Bosss7uBfq=POErUKaWrr2Wjr>-Ol,T%@9(Dd#Lq#C!drr*ZL(*=V9+Vkmdr;.6F)]'\E(`"82 (]X7)n+cn]bQ%S@#4VWgmf)#*l/qm+roX7D"Qeh(qYB4PJ,~> M>m\Urquos!#Ge=!"/f-"on]-c2.D/r:p3dr;6Ehqu$9h])NBAqu?Tkq"FX2!XAMurr;inrlY6G r;6NooDeagq>Lm#rVlWms6]jcp%n^es8)`p!rDohrr;fn'E@b*o_8C^s8)Qkr;ZKjrV?KirVlge r:g6br;ZKgs8VrqqYgHoqYgHlrVc`mrVlfhs7l^ M>m\Urquos!#Ge=!"/f-"on]-c2.D/r:p3dr;6Ehqu$9h])NBAqu?Tkq"FX2!XAMurr;inrlY6G r;6NooDeagq>Lm#rVlWms6]jcp%n^es8)`p!rDohrr;fn'E@b*o_8C^s8)Qkr;ZKjrV?KirVlge r:g6br;ZKgs8VrqqYgHoqYgHlrVc`mrVlfhs7l^ M>m\Urquos!#Ge=!"/f-"on]-c2.D/r:p3dr;6Ehqu$9h])NBAqu?Tkq"FX2!XAMurr;inrlY6G r;6NooDeagq>Lm#rVlWms6]jcp%n^es8)`p!rDohrr;fn'E@b*o_8C^s8)Qkr;ZKjrV?KirVlge r:g6br;ZKgs8VrqqYgHoqYgHlrVc`mrVlfhs7l^ M#RYXrr<0%!r)a+#6b4=[eojus7ZBgqt^0dq>Ru*&H;V+p](*ZrVupjrVccpnGIk;MuWhV&,Q4r q>U3crV*e-!X/i1!T!eZ!WW6"roF*0~> M#RYXrr<0%!r)a+#6b4=[eojus7ZBgqt^0dq>Ru*&H;V+p](*ZrVupjrVccpnGIk;MuWhV&,Q4r q>U3crV*e-!X/i1!T!eZ!WW6"roF*0~> M#RYXrr<0%!r)a+#6b4=[eojus7ZBgqt^0dq>Ru*&H;V+p](*ZrVupjrVccpnGIk;MuWhV&,Q4r q>U3crV*e-!X/i1!T!eZ!WW6"roF*0~> M#RYXrr<0%!r)a+":5G M#RYXrr<0%!r)a+":5G M#RYXrr<0%!r)a+":5G M#RYXrr<0%!r)a+#6Fu3"9ODVqsXFYpA=[^Z2Y@5r:KRVqZ?j-qYL0gs8)YEs,6pWrX\r#q"F[a nG!"i!WrH0"U!T]"9JQ'rr2!YJ,~> M#RYXrr<0%!r)a+#6Fu3"9ODVqsXFYpA=[^Z2Y@5r:KRVqZ?j-qYL0gs8)YEs,6pWrX\r#q"F[a nG!"i!WrH0"U!T]"9JQ'rr2!YJ,~> M#RYXrr<0%!r)a+#6Fu3"9ODVqsXFYpA=[^Z2Y@5r:KRVqZ?j-qYL0gs8)YEs,6pWrX\r#q"F[a nG!"i!WrH0"U!T]"9JQ'rr2!YJ,~> M#RYXrr<0%!r)a+! M#RYXrr<0%!r)a+! M#RYXrr<0%!r)a+! M#RYXrr<0%!qlU'$j6kB!ruA"rV69apAFac]`8!1&-)8"q=Ojo!;c<_r;?3er.4m+s8W)uq>^F% q=ssi!dZ[!!*#tjSs`~> M#RYXrr<0%!qlU'$j6kB!ruA"rV69apAFac]`8!1&-)8"q=Ojo!;c<_r;?3er.4m+s8W)uq>^F% q=ssi!dZ[!!*#tjSs`~> M#RYXrr<0%!qlU'$j6kB!ruA"rV69apAFac]`8!1&-)8"q=Ojo!;c<_r;?3er.4m+s8W)uq>^F% q=ssi!dZ[!!*#tjSs`~> M#RYXrr<0%!qu[)#6Fr/"onf3"[;t_r;?HfrP&=3rr;rsr!rSuq`P&__#=-&rquZ`rdk*-s8W'" qu5s]q?]=c!#5M9"p4u2h>dZ[!!*#tjSs`~> M#RYXrr<0%!qu[)#6Fr/"onf3"[;t_r;?HfrP&=3rr;rsr!rSuq`P&__#=-&rquZ`rdk*-s8W'" qu5s]q?]=c!#5M9"p4u2h>dZ[!!*#tjSs`~> M#RYXrr<0%!qu[)#6Fr/"onf3"[;t_r;?HfrP&=3rr;rsr!rSuq`P&__#=-&rquZ`rdk*-s8W'" qu5s]q?]=c!#5M9"p4u2h>dZ[!!*#tjSs`~> M#RYXrr<0%!r)a""T\`+#lk,-!J&-'E7t.r;6KjrVcp&!;lZir;Zcfr.4m*s8W'. q#:0iq"Omp!X&Z4#65+e!!E?'!<2uYs*t~> M#RYXrr<0%!r)a""T\`+#lk,-!J&-'E7t.r;6KjrVcp&!;lZir;Zcfr.4m*s8W'. q#:0iq"Omp!X&Z4#65+e!!E?'!<2uYs*t~> M#RYXrr<0%!r)a""T\`+#lk,-!J&-'E7t.r;6KjrVcp&!;lZir;Zcfr.4m*s8W'. q#:0iq"Omp!X&Z4#65+e!!E?'!<2uYs*t~> M#RYXrr<0%!q63i!=TG>)>X:0rr)Qiq>:$`rl>$PrqH0crr)ljoG.f7nGE.]rr<#tJcCT,rVdE/ rVl`q!!*E2!!`K*!!33&!TX4b!X8W0"8VrWs*t~> M#RYXrr<0%!q63i!=TG>)>X:0rr)Qiq>:$`rl>$PrqH0crr)ljoG.f7nGE.]rr<#tJcCT,rVdE/ rVl`q!!*E2!!`K*!!33&!TX4b!X8W0"8VrWs*t~> M#RYXrr<0%!q63i!=TG>)>X:0rr)Qiq>:$`rl>$PrqH0crr)ljoG.f7nGE.]rr<#tJcCT,rVdE/ rVl`q!!*E2!!`K*!!33&!TX4b!X8W0"8VrWs*t~> M>meZrVlj#!!;Wi%g<:?#6k/:m.12Kq"F^aqn`:Kr;Zfnq>UBjq""([!#4i#q>1!erVlfpJcCK)% /p5*!!!K/!!iQ.":+o+rrM6^#6t56"99&$r8dm.~> M>meZrVlj#!!;Wi%g<:?#6k/:m.12Kq"F^aqn`:Kr;Zfnq>UBjq""([!#4i#q>1!erVlfpJcCK)% /p5*!!!K/!!iQ.":+o+rrM6^#6t56"99&$r8dm.~> M>meZrVlj#!!;Wi%g<:?#6k/:m.12Kq"F^aqn`:Kr;Zfnq>UBjq""([!#4i#q>1!erVlfpJcCK)% /p5*!!!K/!!iQ.":+o+rrM6^#6t56"99&$r8dm.~> M>meZrVlj#!!;Th%Kct;!X/T,h>QjCqtp3c_>b2Hs8W&qrquTerr<-/rq$-bqu$HmrrE%Ls+^Of rVuis!!*?3!=Af-!<<-&"U,#1!U0Xj#m(,F!!*#ejSs`~> M>meZrVlj#!!;Th%Kct;!X/T,h>QjCqtp3c_>b2Hs8W&qrquTerr<-/rq$-bqu$HmrrE%Ls+^Of rVuis!!*?3!=Af-!<<-&"U,#1!U0Xj#m(,F!!*#ejSs`~> M>meZrVlj#!!;Th%Kct;!X/T,h>QjCqtp3c_>b2Hs8W&qrquTerr<-/rq$-bqu$HmrrE%Ls+^Of rVuis!!*?3!=Af-!<<-&"U,#1!U0Xj#m(,F!!*#ejSs`~> M#RYXrr<0%!Up("!sAf/$NL2."24^2m/6\X_>aT8s8W)s&cDJ#q>gUXqtU'aqu$Hns8N"Ks+^OT rVulr!!X/?#RLYB$2ahl!;QX#"q1_A"T\GujSs`~> M#RYXrr<0%!Up("!sAf/$NL2."24^2m/6\X_>aT8s8W)s&cDJ#q>gUXqtU'aqu$Hns8N"Ks+^OT rVulr!!X/?#RLYB$2ahl!;QX#"q1_A"T\GujSs`~> M#RYXrr<0%!Up("!sAf/$NL2."24^2m/6\X_>aT8s8W)s&cDJ#q>gUXqtU'aqu$Hns8N"Ks+^OT rVulr!!X/?#RLYB$2ahl!;QX#"q1_A"T\GujSs`~> M#RYXrr<0%!Up("#lk24!WiQ-#m7B*r:g$^q>SG7!<2rq&GuFq=&enno)/=\r;Q`rrr.KKLAq>R s8Mut#mC\A"U+r- M#RYXrr<0%!Up("#lk24!WiQ-#m7B*r:g$^q>SG7!<2rq&GuFq=&enno)/=\r;Q`rrr.KKLAq>R s8Mut#mC\A"U+r- M#RYXrr<0%!Up("#lk24!WiQ-#m7B*r:g$^q>SG7!<2rq&GuFq=&enno)/=\r;Q`rrr.KKLAq>R s8Mut#mC\A"U+r- M>meZrVcd"!!;Wi%gN+>!W`E)!X&K.!L!EUq"am/rrE&sr;:CAn),qYC!Vr;$9rr;6Baq>:*hjSs`~> M>meZrVcd"!!;Wi%gN+>!W`E)!X&K.!L!EUq"am/rrE&sr;:CAn),qYC!Vr;$9rr;6Baq>:*hjSs`~> M>meZrVcd"!!;Wi%gN+>!W`E)!X&K.!L!EUq"am/rrE&sr;:CAn),qYC!Vr;$9rr;6Baq>:*hjSs`~> M>mhYqu$Kt!<`Mp!<3-1!:K)GWF!W;oarqZR!q#:3hq"X^bjSs`~> M>mhYqu$Kt!<`Mp!<3-1!:K)GWF!W;oarqZR!q#:3hq"X^bjSs`~> M>mhYqu$Kt!<`Mp!<3-1!:K)GWF!W;oarqZR!q#:3hq"X^bjSs`~> M?!VR$iU,,"Tnc*!!*'$"SVor!ri66!<<3&!sel.#68Z>p\t-iq"Xjaq>SeArr2rtrr*l5rV?Bi qt9d_rVHKarV$0gs7lQmp&Fpdr;HVGs-!BnrVuis!! M?!VR$iU,,"Tnc*!!*'$"SVor!ri66!<<3&!sel.#68Z>p\t-iq"Xjaq>SeArr2rtrr*l5rV?Bi qt9d_rVHKarV$0gs7lQmp&Fpdr;HVGs-!BnrVuis!! M?!VR$iU,,"Tnc*!!*'$"SVor!ri66!<<3&!sel.#68Z>p\t-iq"Xjaq>SeArr2rtrr*l5rV?Bi qt9d_rVHKarV$0gs7lQmp&Fpdr;HVGs-!BnrVuis!! M>n+brpp3p#S-n9%fcY3!WWPs!<30$"UbD:"B/=orVlNZs7uKiao<=YpAFX[rqc?ep\j[YpA=[b q"apVqYp?gr;HVGs-!BjrVuis!!*N/"p"`&rk/8]~> M>n+brpp3p#S-n9%fcY3!WWPs!<30$"UbD:"B/=orVlNZs7uKiao<=YpAFX[rqc?ep\j[YpA=[b q"apVqYp?gr;HVGs-!BjrVuis!!*N/"p"`&rk/8]~> M>n+brpp3p#S-n9%fcY3!WWPs!<30$"UbD:"B/=orVlNZs7uKiao<=YpAFX[rqc?ep\j[YpA=[b q"apVqYp?gr;HVGs-!BjrVuis!!*N/"p"`&rk/8]~> M>n+cs7u`s$3U_:"98E*#Qb(t!"T/3!=oD=#6P&drq6*apAMf,%/T_r5;Y2T4#8]N1c>7h#rasG q#10[rVc`orrE%Ls-EZnrVuis!!rc."pb5-qn2rZ~> M>n+cs7u`s$3U_:"98E*#Qb(t!"T/3!=oD=#6P&drq6*apAMf,%/T_r5;Y2T4#8]N1c>7h#rasG q#10[rVc`orrE%Ls-EZnrVuis!!rc."pb5-qn2rZ~> M>n+cs7u`s$3U_:"98E*#Qb(t!"T/3!=oD=#6P&drq6*apAMf,%/T_r5;Y2T4#8]N1c>7h#rasG q#10[rVc`orrE%Ls-EZnrVuis!!rc."pb5-qn2rZ~> M>n+^o_7A%":#29#Qk&-!<<2k!"T5G"9Jr2"9Jf:*<#I(p\Vf,)>jF3*!cQJ!XSo.$4?h>#S$h< +S5:$r;HWmrrE%Ls-EZnrVuis!!*9("p#/3rk/8]~> M>n+^o_7A%":#29#Qk&-!<<2k!"T5G"9Jr2"9Jf:*<#I(p\Vf,)>jF3*!cQJ!XSo.$4?h>#S$h< +S5:$r;HWmrrE%Ls-EZnrVuis!!*9("p#/3rk/8]~> M>n+^o_7A%":#29#Qk&-!<<2k!"T5G"9Jr2"9Jf:*<#I(p\Vf,)>jF3*!cQJ!XSo.$4?h>#S$h< +S5:$r;HWmrrE%Ls-EZnrVuis!!*9("p#/3rk/8]~> M>n%_rqufimJm@i*<69L!UTjr$NL55%KHJ3!"o5+rqF8/)uKI*$31,:!WX&?!rr<+!!!E-!ri2n nGE.^rdk*4rsSf*rVup3!"8l:!;F,*J,~> M>n%_rqufimJm@i*<69L!UTjr$NL55%KHJ3!"o5+rqF8/)uKI*$31,:!WX&?!rr<+!!!E-!ri2n nGE.^rdk*4rsSf*rVup3!"8l:!;F,*J,~> M>n%_rqufimJm@i*<69L!UTjr$NL55%KHJ3!"o5+rqF8/)uKI*$31,:!WX&?!rr<+!!!E-!ri2n nGE.^rdk*4rsSf*rVup3!"8l:!;F,*J,~> M>n(]oDe@[q"GX4!"&f.!"/W(r;l]o%hSgU#m()0$P3:K!!E\bs7uW7ru1Y0$k*F;nc%eS$l&C6 rp]RZnGW@bqYL*erdk*4rs\l+rVup!!rrB0)> M>n(]oDe@[q"GX4!"&f.!"/W(r;l]o%hSgU#m()0$P3:K!!E\bs7uW7ru1Y0$k*F;nc%eS$l&C6 rp]RZnGW@bqYL*erdk*4rs\l+rVup!!rrB0)> M>n(]oDe@[q"GX4!"&f.!"/W(r;l]o%hSgU#m()0$P3:K!!E\bs7uW7ru1Y0$k*F;nc%eS$l&C6 rp]RZnGW@bqYL*erdk*4rs\l+rVup!!rrB0)> M>n(ZrVuWbrVQLE.gH.V!!rN'"9AQ*!sA8t%0?M5#6=f*":#):!X@-LrQ5'Xrq-0s!!i8sq>UEp !W2lmrqlKfo`"=Yqu$EkrrE%Ls-EZnrVuis!"]/6! M>n(ZrVuWbrVQLE.gH.V!!rN'"9AQ*!sA8t%0?M5#6=f*":#):!X@-LrQ5'Xrq-0s!!i8sq>UEp !W2lmrqlKfo`"=Yqu$EkrrE%Ls-EZnrVuis!"]/6! M>n(ZrVuWbrVQLE.gH.V!!rN'"9AQ*!sA8t%0?M5#6=f*":#):!X@-LrQ5'Xrq-0s!!i8sq>UEp !W2lmrqlKfo`"=Yqu$EkrrE%Ls-EZnrVuis!"]/6! M#S7bs8W#ms8;cm6i[5l!WrE'!!*3("9\E!rrO&?!<<*#"9Ai1!=T25]DMR'r;HQiqu?]ps8N#F ru(e8qu?g&r;$'b!<Us&s8W)ts8Drrs8Drss8ITLs8E-# rVulr!!WW-#7'o"pUpNV~> M#S7bs8W#ms8;cm6i[5l!WrE'!!*3("9\E!rrO&?!<<*#"9Ai1!=T25]DMR'r;HQiqu?]ps8N#F ru(e8qu?g&r;$'b!<Us&s8W)ts8Drrs8Drss8ITLs8E-# rVulr!!WW-#7'o"pUpNV~> M#S7bs8W#ms8;cm6i[5l!WrE'!!*3("9\E!rrO&?!<<*#"9Ai1!=T25]DMR'r;HQiqu?]ps8N#F ru(e8qu?g&r;$'b!<Us&s8W)ts8Drrs8Drss8ITLs8E-# rVulr!!WW-#7'o"pUpNV~> Jc?8Yqu'_##6P&/!s&T2"U+qr!!**%rWEZ4!X5Krq"Xdcp\+IYqu-Khrmq)X!!30#r;ZWs!!E9" rh9>lrr2rrrX8c%s8Muqs82fos82fp!<%KKs8E-#rVuos! Jc?8Yqu'_##6P&/!s&T2"U+qr!!**%rWEZ4!X5Krq"Xdcp\+IYqu-Khrmq)X!!30#r;ZWs!!E9" rh9>lrr2rrrX8c%s8Muqs82fos82fp!<%KKs8E-#rVuos! Jc?8Yqu'_##6P&/!s&T2"U+qr!!**%rWEZ4!X5Krq"Xdcp\+IYqu-Khrmq)X!!30#r;ZWs!!E9" rh9>lrr2rrrX8c%s8Muqs82fos82fp!<%KKs8E-#rVuos! Jc?5ZoDJT)F9_pO!"9\f.!C'gqt^6BrsSl/!<;usqZHm$ s8DqfrrE&tr Jc?5ZoDJT)F9_pO!"9\f.!C'gqt^6BrsSl/!<;usqZHm$ s8DqfrrE&tr Jc?5ZoDJT)F9_pO!"9\f.!C'gqt^6BrsSl/!<;usqZHm$ s8DqfrrE&tr Jc?8Tp%J7Trf@9b%Klq>!!EMr!#G\=!sA]-!-J,~> Jc?8Tp%J7Trf@9b%Klq>!!EMr!#G\=!sA]-!-J,~> Jc?8Tp%J7Trf@9b%Klq>!!EMr!#G\=!sA]-!-J,~> Jc?8VrU]p^pA:K_$P3OF"9AYq! Jc?8VrU]p^pA:K_$P3OF"9AYq! Jc?8VrU]p^pA:K_$P3OF"9AYq! Jc?2Xrq?9[qsOBp#6kV;$1@is!s/N)!WE'0!rrE0!s(_Ss7ZK`q"t*fcMn:Q!W`8us8)p!"98?! WW2bm"9&/oq>U."o)AUerS>Dac2@M>r;Z]oJcGcL%KHD,rrE-#!W`<'"T&,1s*t~> Jc?2Xrq?9[qsOBp#6kV;$1@is!s/N)!WE'0!rrE0!s(_Ss7ZK`q"t*fcMn:Q!W`8us8)p!"98?! WW2bm"9&/oq>U."o)AUerS>Dac2@M>r;Z]oJcGcL%KHD,rrE-#!W`<'"T&,1s*t~> Jc?2Xrq?9[qsOBp#6kV;$1@is!s/N)!WE'0!rrE0!s(_Ss7ZK`q"t*fcMn:Q!W`8us8)p!"98?! WW2bm"9&/oq>U."o)AUerS>Dac2@M>r;Z]oJcGcL%KHD,rrE-#!W`<'"T&,1s*t~> Jc?8Xs8DckrV?3[f$a[/!<<,q!Vl]s!W`?!!"K,3!0scqXX'u66.bLpAY*hs8.BI#64]%s8DutrW*3'"9eo.r;4/,J,~> Jc?8Xs8DckrV?3[f$a[/!<<,q!Vl]s!W`?!!"K,3!0scqXX'u66.bLpAY*hs8.BI#64]%s8DutrW*3'"9eo.r;4/,J,~> Jc?8Xs8DckrV?3[f$a[/!<<,q!Vl]s!W`?!!"K,3!0scqXX'u66.bLpAY*hs8.BI#64]%s8DutrW*3'"9eo.r;4/,J,~> Jc?8[pAY'erqHEkpA!kX"TS`%!Vl]q!Vucu"TSQ)rW!3)!#GM/rpg!^q>AhD$ig>/s8;oo"98Q( rVierq>UEh(&.M!qYU3Ul$s<^!X]Kur;QZls8)\Fs8W'(s8Dut! Jc?8[pAY'erqHEkpA!kX"TS`%!Vl]q!Vucu"TSQ)rW!3)!#GM/rpg!^q>AhD$ig>/s8;oo"98Q( rVierq>UEh(&.M!qYU3Ul$s<^!X]Kur;QZls8)\Fs8W'(s8Dut! Jc?8[pAY'erqHEkpA!kX"TS`%!Vl]q!Vucu"TSQ)rW!3)!#GM/rpg!^q>AhD$ig>/s8;oo"98Q( rVierq>UEh(&.M!qYU3Ul$s<^!X]Kur;QZls8)\Fs8W'(s8Dut! JcGQGs83;qr:::"!sJZ4!!NW1kPu/$!W`#iqY:'ioD\Xbq"t'irVllsh#@c_!W`8us8)p!"98?! ]DqU(,Q7WArqcTlq#:9jrr;ilrUg!dn,2Fo)?gHJ&d/1XOoG:XrIP"GrsSf*rVup""TS]1!<2oo s8;uts7-*drVld$qtL*`s82ZjjSs`~> JcGQGs83;qr:::"!sJZ4!!NW1kPu/$!W`#iqY:'ioD\Xbq"t'irVllsh#@c_!W`8us8)p!"98?! ]DqU(,Q7WArqcTlq#:9jrr;ilrUg!dn,2Fo)?gHJ&d/1XOoG:XrIP"GrsSf*rVup""TS]1!<2oo s8;uts7-*drVld$qtL*`s82ZjjSs`~> JcGQGs83;qr:::"!sJZ4!!NW1kPu/$!W`#iqY:'ioD\Xbq"t'irVllsh#@c_!W`8us8)p!"98?! ]DqU(,Q7WArqcTlq#:9jrr;ilrUg!dn,2Fo)?gHJ&d/1XOoG:XrIP"GrsSf*rVup""TS]1!<2oo s8;uts7-*drVld$qtL*`s82ZjjSs`~> JcGQG&,Gkrp\=aZ,lnGX!"Ju4"6fds!=]J=!9!\MrqlBgp&4jYrVlfurr)iPrsSl/!<;usqZHm$ s8Dr/s8W)ur<*'!s8Mrpr;Ic9rquZlrr)Wkr;5BAFY3q$!!3<(%L!H*s8N&rrr.KKrVmB+s8Duu '*&gU!sIN[r;?Qk!rW&tm/?k]"nVTip\t$Ms*t~> JcGQG&,Gkrp\=aZ,lnGX!"Ju4"6fds!=]J=!9!\MrqlBgp&4jYrVlfurr)iPrsSl/!<;usqZHm$ s8Dr/s8W)ur<*'!s8Mrpr;Ic9rquZlrr)Wkr;5BAFY3q$!!3<(%L!H*s8N&rrr.KKrVmB+s8Duu '*&gU!sIN[r;?Qk!rW&tm/?k]"nVTip\t$Ms*t~> JcGQG&,Gkrp\=aZ,lnGX!"Ju4"6fds!=]J=!9!\MrqlBgp&4jYrVlfurr)iPrsSl/!<;usqZHm$ s8Dr/s8W)ur<*'!s8Mrpr;Ic9rquZlrr)Wkr;5BAFY3q$!!3<(%L!H*s8N&rrr.KKrVmB+s8Duu '*&gU!sIN[r;?Qk!rW&tm/?k]"nVTip\t$Ms*t~> JcGQG&,uJ"rVQHiqDJ<_!qWRhToD84[rVlfurr)iPrsSl/!<;usqZHm$ s8Dr/s8W)ts8W)trri<#s7uQkrYYD-rVuilo(V8&_[[1c!!i]3,"XHl$5AR#rrW)rrdk+Jrso#- rVup!"onW4!s?XBqu6Emqu,aX#Pn/nq"spdrT+!/~> JcGQG&,uJ"rVQHiqDJ<_!qWRhToD84[rVlfurr)iPrsSl/!<;usqZHm$ s8Dr/s8W)ts8W)trri<#s7uQkrYYD-rVuilo(V8&_[[1c!!i]3,"XHl$5AR#rrW)rrdk+Jrso#- rVup!"onW4!s?XBqu6Emqu,aX#Pn/nq"spdrT+!/~> JcGQG&,uJ"rVQHiqDJ<_!qWRhToD84[rVlfurr)iPrsSl/!<;usqZHm$ s8Dr/s8W)ts8W)trri<#s7uQkrYYD-rVuilo(V8&_[[1c!!i]3,"XHl$5AR#rrW)rrdk+Jrso#- rVup!"onW4!s?XBqu6Emqu,aX#Pn/nq"spdrT+!/~> JcGQG&,Z4urUg*drVKG!"pY8;"6fe!!#u+Ktl,abE&s3.mrqlZnrdk+Krso#- rVup#"T\]8!t514Xo>C&Xfgrms0)a1YcXh-WrDtXs*t~> JcGQG&,Z4urUg*drVKG!"pY8;"6fe!!#u+Ktl,abE&s3.mrqlZnrdk+Krso#- rVup#"T\]8!t514Xo>C&Xfgrms0)a1YcXh-WrDtXs*t~> JcGQG&,Z4urUg*drVKG!"pY8;"6fe!!#u+Ktl,abE&s3.mrqlZnrdk+Krso#- rVup#"T\]8!t514Xo>C&Xfgrms0)a1YcXh-WrDtXs*t~> JcGQG&,#nqr;?Hfr:g5#Erl=I#O)4%!<2P`>\7r:]m]s8Murrr2ushZ!ua!W`8us8)p! "98?!]Dqp1!W2fnr@.[ArVHBhqu$9aqYKa5Z\hKl"9\o5#VJu"gZe_6b7b*rP5bCXrVulpJcG`L !r`/urW)s(rs&l=$31,.!<<*#!WqlmqZ-Ws#6P)1$3C>0qrId-~> JcGQG&,#nqr;?Hfr:g5#Erl=I#O)4%!<2P`>\7r:]m]s8Murrr2ushZ!ua!W`8us8)p! "98?!]Dqp1!W2fnr@.[ArVHBhqu$9aqYKa5Z\hKl"9\o5#VJu"gZe_6b7b*rP5bCXrVulpJcG`L !r`/urW)s(rs&l=$31,.!<<*#!WqlmqZ-Ws#6P)1$3C>0qrId-~> JcGQG&,#nqr;?Hfr:g5#Erl=I#O)4%!<2P`>\7r:]m]s8Murrr2ushZ!ua!W`8us8)p! "98?!]Dqp1!W2fnr@.[ArVHBhqu$9aqYKa5Z\hKl"9\o5#VJu"gZe_6b7b*rP5bCXrVulpJcG`L !r`/urW)s(rs&l=$31,.!<<*#!WqlmqZ-Ws#6P)1$3C>0qrId-~> JcGQG(\mt(r;HHir;H0^rcS>M!s7Z?ip@Q(Z@j_B]"Tnu7CMfp#p@eOar5TcW'p8LmrVZ]p r.4nIrs\l+rVup*#RCD?"Tno,!WN0"!U'Lg! JcGQG(\mt(r;HHir;H0^rcS>M!s7Z?ip@Q(Z@j_B]"Tnu7CMfp#p@eOar5TcW'p8LmrVZ]p r.4nIrs\l+rVup*#RCD?"Tno,!WN0"!U'Lg! JcGQG(\mt(r;HHir;H0^rcS>M!s7Z?ip@Q(Z@j_B]"Tnu7CMfp#p@eOar5TcW'p8LmrVZ]p r.4nIrs\l+rVup*#RCD?"Tno,!WN0"!U'Lg! JcGQGs8!K/r;6Hhr;Z?br:lT^!X&T+!!!$%"RuHp!sAZ+#6"](!t5HLp&=meq#16lq=sgBrsSl/ !<;usqZHm$s8Dr/s8W)ur%7d@q>1$eqtU3ioCh(BGWQQJ"9ArG02%Jcjo#/LqYKm]^`NOoNrK"V qu-NnJcG`L%fQG,!!!9+$3124!sAT)rW3'#klC_a#64o1"9JT#rT+!/~> JcGQGs8!K/r;6Hhr;Z?br:lT^!X&T+!!!$%"RuHp!sAZ+#6"](!t5HLp&=meq#16lq=sgBrsSl/ !<;usqZHm$s8Dr/s8W)ur%7d@q>1$eqtU3ioCh(BGWQQJ"9ArG02%Jcjo#/LqYKm]^`NOoNrK"V qu-NnJcG`L%fQG,!!!9+$3124!sAT)rW3'#klC_a#64o1"9JT#rT+!/~> JcGQGs8!K/r;6Hhr;Z?br:lT^!X&T+!!!$%"RuHp!sAZ+#6"](!t5HLp&=meq#16lq=sgBrsSl/ !<;usqZHm$s8Dr/s8W)ur%7d@q>1$eqtU3ioCh(BGWQQJ"9ArG02%Jcjo#/LqYKm]^`NOoNrK"V qu-NnJcG`L%fQG,!!!9+$3124!sAT)rW3'#klC_a#64o1"9JT#rT+!/~> JcGQGs8;os)ufm8rVl`lqu$ArY64k0!=Jl.!s8N'!L!X r:osZg.rC_,DuKtr;HWlrQkNDrW<&trqQL7q>^6is82iprquflrr;fns82iorVuZjs8;fps8;fo rri9!qZ$HXs8W'.s8Durq#16o"9o&1#QbCk!!WN*!rr?#rT+!/~> JcGQGs8;os)ufm8rVl`lqu$ArY64k0!=Jl.!s8N'!L!X r:osZg.rC_,DuKtr;HWlrQkNDrW<&trqQL7q>^6is82iprquflrr;fns82iorVuZjs8;fps8;fo rri9!qZ$HXs8W'.s8Durq#16o"9o&1#QbCk!!WN*!rr?#rT+!/~> JcGQGs8;os)ufm8rVl`lqu$ArY64k0!=Jl.!s8N'!L!X r:osZg.rC_,DuKtr;HWlrQkNDrW<&trqQL7q>^6is82iprquflrr;fns82iorVuZjs8;fps8;fo rri9!qZ$HXs8W'.s8Durq#16o"9o&1#QbCk!!WN*!rr?#rT+!/~> JcG9?(B+1.qYL*erPS[G!!P\="9\qc!!E?'!<2uYs*t~> JcG9?(B+1.qYL*erPS[G!!P\="9\qc!!E?'!<2uYs*t~> JcG9?(B+1.qYL*erPS[G!!P\="9\qc!!E?'!<2uYs*t~> JcG9?s82urqYL*gr!qTf%0ut7#7C\9!"Ju0"RlC$!s\l."TotJqYKgVros78rsSl/!<;usqZHm$ s8Dr5s#9fRrr<#trqH3cq"+I^kL"!%+q+J\";)/%J^3WWrq-0hmI^53kuTb[#QkP;#qD\Hrr)cp s814Ds8Mrpq#2Z=q=jCWrUg*frr)clo`"I]p%\Obnc&:^rVc`prVc`fqt:!gn,)nGs8W'-s8N&] pAP(*!=0#4!=.B["9JQ'rr2!YJ,~> JcG9?s82urqYL*gr!qTf%0ut7#7C\9!"Ju0"RlC$!s\l."TotJqYKgVros78rsSl/!<;usqZHm$ s8Dr5s#9fRrr<#trqH3cq"+I^kL"!%+q+J\";)/%J^3WWrq-0hmI^53kuTb[#QkP;#qD\Hrr)cp s814Ds8Mrpq#2Z=q=jCWrUg*frr)clo`"I]p%\Obnc&:^rVc`prVc`fqt:!gn,)nGs8W'-s8N&] pAP(*!=0#4!=.B["9JQ'rr2!YJ,~> JcG9?s82urqYL*gr!qTf%0ut7#7C\9!"Ju0"RlC$!s\l."TotJqYKgVros78rsSl/!<;usqZHm$ s8Dr5s#9fRrr<#trqH3cq"+I^kL"!%+q+J\";)/%J^3WWrq-0hmI^53kuTb[#QkP;#qD\Hrr)cp s814Ds8Mrpq#2Z=q=jCWrUg*frr)clo`"I]p%\Obnc&:^rVc`prVc`fqt:!gn,)nGs8W'-s8N&] pAP(*!=0#4!=.B["9JQ'rr2!YJ,~> JcG9?s8;ims83E(qs`hP$31A4!!iQ+#64ns!"T)6"oo)4!!3E)rr)Tgrr1dS$ig>/s8;oo"98Q( rVjY52u`jRo(rCdqY:$]nEcYp#7LV5#7:k]B#sfBmf*4Tr;Q-\n?s8@!s&c;!$"OOjlZR6s8Mrr rmCcDqu6NhrYPM0rr2H_pA"XSo_e^foD\^eo^2;Js7Q-c"o@ogqu6?Us8W'/p]'g`qu?3f!"B#= $NLG:h>dZ[!!*#tjSs`~> JcG9?s8;ims83E(qs`hP$31A4!!iQ+#64ns!"T)6"oo)4!!3E)rr)Tgrr1dS$ig>/s8;oo"98Q( rVjY52u`jRo(rCdqY:$]nEcYp#7LV5#7:k]B#sfBmf*4Tr;Q-\n?s8@!s&c;!$"OOjlZR6s8Mrr rmCcDqu6NhrYPM0rr2H_pA"XSo_e^foD\^eo^2;Js7Q-c"o@ogqu6?Us8W'/p]'g`qu?3f!"B#= $NLG:h>dZ[!!*#tjSs`~> JcG9?s8;ims83E(qs`hP$31A4!!iQ+#64ns!"T)6"oo)4!!3E)rr)Tgrr1dS$ig>/s8;oo"98Q( rVjY52u`jRo(rCdqY:$]nEcYp#7LV5#7:k]B#sfBmf*4Tr;Q-\n?s8@!s&c;!$"OOjlZR6s8Mrr rmCcDqu6NhrYPM0rr2H_pA"XSo_e^foD\^eo^2;Js7Q-c"o@ogqu6?Us8W'/p]'g`qu?3f!"B#= $NLG:h>dZ[!!*#tjSs`~> JcG9?q>CiqrqcWm&-MtC"9f)3!8#6Y,0#6>55qY^?hp&3bI$ig>/s8;oo"98Q(rVjY5 !V6-er\F2H&6,mfr:opZrr)N[pu&e_6id8h!XT#B JcG9?q>CiqrqcWm&-MtC"9f)3!8#6Y,0#6>55qY^?hp&3bI$ig>/s8;oo"98Q(rVjY5 !V6-er\F2H&6,mfr:opZrr)N[pu&e_6id8h!XT#B JcG9?q>CiqrqcWm&-MtC"9f)3!8#6Y,0#6>55qY^?hp&3bI$ig>/s8;oo"98Q(rVjY5 !V6-er\F2H&6,mfr:opZrr)N[pu&e_6id8h!XT#B JcG9?q#(Zmq"jFY/Hc+_!UBhhZ!ua!W`8us8)p!"98?!_>cIm rql+#t;Zm41!!EZT5%LA[rVHQlrVlK_jg^pV!=f)>#6QYGD7''5mf3:]s8Murrr;fAs8Voq qt0e6qX=IZs7b*deB$5:f`_EY!s&u7!r3'%quHirquHirf(nt8n+QYIli7"a&-)OprU^$eo)T1& !"&u8"5X"\!WW6"roF*0~> JcG9?q#(Zmq"jFY/Hc+_!UBhhZ!ua!W`8us8)p!"98?!_>cIm rql+#t;Zm41!!EZT5%LA[rVHQlrVlK_jg^pV!=f)>#6QYGD7''5mf3:]s8Murrr;fAs8Voq qt0e6qX=IZs7b*deB$5:f`_EY!s&u7!r3'%quHirquHirf(nt8n+QYIli7"a&-)OprU^$eo)T1& !"&u8"5X"\!WW6"roF*0~> JcG9?q#(Zmq"jFY/Hc+_!UBhhZ!ua!W`8us8)p!"98?!_>cIm rql+#t;Zm41!!EZT5%LA[rVHQlrVlK_jg^pV!=f)>#6QYGD7''5mf3:]s8Murrr;fAs8Voq qt0e6qX=IZs7b*deB$5:f`_EY!s&u7!r3'%quHirquHirf(nt8n+QYIli7"a&-)OprU^$eo)T1& !"&u8"5X"\!WW6"roF*0~> JcG9?q>Lp#rUp!Zq"6mE!XJi8!/s8;oo"98Q(rVjY5 2#-t@o]`Gd3!]ci#mCu=>GU9PqYBj_rpf[H`M$i^#6G55!XD\&\E*Sbq>C*eqY^Blq>:0jdJs7B !W)]mquHWir?o:m^:1hj!=/r4"8i]3"9AN,!Xf20":+l*!<)ir!;uoss6Ta_nGV\Qs8EH*p\spc qY'hV!<<0,gAh?X!!*#tjSs`~> JcG9?q>Lp#rUp!Zq"6mE!XJi8!/s8;oo"98Q(rVjY5 2#-t@o]`Gd3!]ci#mCu=>GU9PqYBj_rpf[H`M$i^#6G55!XD\&\E*Sbq>C*eqY^Blq>:0jdJs7B !W)]mquHWir?o:m^:1hj!=/r4"8i]3"9AN,!Xf20":+l*!<)ir!;uoss6Ta_nGV\Qs8EH*p\spc qY'hV!<<0,gAh?X!!*#tjSs`~> JcG9?q>Lp#rUp!Zq"6mE!XJi8!/s8;oo"98Q(rVjY5 2#-t@o]`Gd3!]ci#mCu=>GU9PqYBj_rpf[H`M$i^#6G55!XD\&\E*Sbq>C*eqY^Blq>:0jdJs7B !W)]mquHWir?o:m^:1hj!=/r4"8i]3"9AN,!Xf20":+l*!<)ir!;uoss6Ta_nGV\Qs8EH*p\spc qY'hV!<<0,gAh?X!!*#tjSs`~> JcFs6"T8)pq!S.[#$:s2#Qk)2nGj(&!rr<%!!NE)!!/knp]($FrsSl/!<;usqZHm$s8Dr7s8W'N rVQH6G9[.l!C'frrE#srrN)tdJl0# r:p9crqZQlVl$GkY,8'#!!NE(!=/Z*#6ai&#m()3!!3B+p'Llu!U9Ws8W)u q[EK(r;-9ho359#!W`D]!!`T+"9AT)rqtjWJ,~> JcFs6"T8)pq!S.[#$:s2#Qk)2nGj(&!rr<%!!NE)!!/knp]($FrsSl/!<;usqZHm$s8Dr7s8W'N rVQH6G9[.l!C'frrE#srrN)tdJl0# r:p9crqZQlVl$GkY,8'#!!NE(!=/Z*#6ai&#m()3!!3B+p'Llu!U9Ws8W)u q[EK(r;-9ho359#!W`D]!!`T+"9AT)rqtjWJ,~> JcFs6"T8)pq!S.[#$:s2#Qk)2nGj(&!rr<%!!NE)!!/knp]($FrsSl/!<;usqZHm$s8Dr7s8W'N rVQH6G9[.l!C'frrE#srrN)tdJl0# r:p9crqZQlVl$GkY,8'#!!NE(!=/Z*#6ai&#m()3!!3B+p'Llu!U9Ws8W)u q[EK(r;-9ho359#!W`D]!!`T+"9AT)rqtjWJ,~> JcFs6!ri/sr;6ctF8uOL! JcFs6!ri/sr;6ctF8uOL! JcFs6!ri/sr;6ctF8uOL! JcG!7!<2urrVQm!p\fr0!"7uj#6G#6"*jb;pYPoY!!30#r;ZWs!!E9"rknd9r[7O8pP0Ug"\k6$ nGN(Rs7lKWm*2,[1]mj\!sBB-I@AV2!s"Y_qYpKls8;rsa8\'rpAFmar!*<+!X\u0#RUY6"9JQ* "Tei3":0,a#6p0EMi!:ArVMBM!!*'!!!*$!s8W&rs8M$Xs8E9#rUTRUN.m,QM"ul4Mhd1AM2V6/ jSs`~> JcG!7!<2urrVQm!p\fr0!"7uj#6G#6"*jb;pYPoY!!30#r;ZWs!!E9"rknd9r[7O8pP0Ug"\k6$ nGN(Rs7lKWm*2,[1]mj\!sBB-I@AV2!s"Y_qYpKls8;rsa8\'rpAFmar!*<+!X\u0#RUY6"9JQ* "Tei3":0,a#6p0EMi!:ArVMBM!!*'!!!*$!s8W&rs8M$Xs8E9#rUTRUN.m,QM"ul4Mhd1AM2V6/ jSs`~> JcG!7!<2urrVQm!p\fr0!"7uj#6G#6"*jb;pYPoY!!30#r;ZWs!!E9"rknd9r[7O8pP0Ug"\k6$ nGN(Rs7lKWm*2,[1]mj\!sBB-I@AV2!s"Y_qYpKls8;rsa8\'rpAFmar!*<+!X\u0#RUY6"9JQ* "Tei3":0,a#6p0EMi!:ArVMBM!!*'!!!*$!s8W&rs8M$Xs8E9#rUTRUN.m,QM"ul4Mhd1AM2V6/ jSs`~> JcG!7s8DrprVZrrs7H)["pO5k#6>/@"p+Ytptl#Z!!30#r;ZWs!!E9"rknd9r[.I>s+q?h'!h?/ q"amapuq+`Da>E\"T]#?'gIMtlMCN%#m?Xiqu-Kmrl>$soD\@\r:pL1'Ns*t~> JcG!7s8DrprVZrrs7H)["pO5k#6>/@"p+Ytptl#Z!!30#r;ZWs!!E9"rknd9r[.I>s+q?h'!h?/ q"amapuq+`Da>E\"T]#?'gIMtlMCN%#m?Xiqu-Kmrl>$soD\@\r:pL1'Ns*t~> JcG!7s8DrprVZrrs7H)["pO5k#6>/@"p+Ytptl#Z!!30#r;ZWs!!E9"rknd9r[.I>s+q?h'!h?/ q"amapuq+`Da>E\"T]#?'gIMtlMCN%#m?Xiqu-Kmrl>$soD\@\r:pL1'Ns*t~> JcG!7rVZ]os8E9"qt9CSq6:=l!!`Z1"UP2.o)@MG$ig>/s8;oo"98Q(rVj_7rr+8ErJ; JcG!7rVZ]os8E9"qt9CSq6:=l!!`Z1"UP2.o)@MG$ig>/s8;oo"98Q(rVj_7rr+8ErJ; JcG!7rVZ]os8E9"qt9CSq6:=l!!`Z1"UP2.o)@MG$ig>/s8;oo"98Q(rVj_7rr+8ErJ; JcG!7rVZ]os8E9%rquZ\p\b0X!!`N)#mLD0qXr_F$ig>/s8;oo"98Q(rVj_7s8FDDs8Iik!X[KM r9`A&0dR\?"pP&>&7j&Ame?MVs8;lq0E;*>q#:9/s#0ZHrr2im!!*B-$3:,/"jPK8qtKpcqYgEk qYpNlr;6Her;??gpAFpj!<<'!!<3'!s8Dorro3tWrW`9!rVZWlqW\%UrWi/lr:^'enc%VLJ,~> JcG!7rVZ]os8E9%rquZ\p\b0X!!`N)#mLD0qXr_F$ig>/s8;oo"98Q(rVj_7s8FDDs8Iik!X[KM r9`A&0dR\?"pP&>&7j&Ame?MVs8;lq0E;*>q#:9/s#0ZHrr2im!!*B-$3:,/"jPK8qtKpcqYgEk qYpNlr;6Her;??gpAFpj!<<'!!<3'!s8Dorro3tWrW`9!rVZWlqW\%UrWi/lr:^'enc%VLJ,~> JcG!7rVZ]os8E9%rquZ\p\b0X!!`N)#mLD0qXr_F$ig>/s8;oo"98Q(rVj_7s8FDDs8Iik!X[KM r9`A&0dR\?"pP&>&7j&Ame?MVs8;lq0E;*>q#:9/s#0ZHrr2im!!*B-$3:,/"jPK8qtKpcqYgEk qYpNlr;6Her;??gpAFpj!<<'!!<3'!s8Dorro3tWrW`9!rVZWlqW\%UrWi/lr:^'enc%VLJ,~> JcG!7!<)ops8Drr"8;TjrVdPr!!`f7!=f,(rVk[R$ig>/s8;oo"98Q(rVj_7rVe)?K,Fn+b22B5 >o<_G!<rVQ?`rr;Z`s8";I!giWZ_#H=lr:0OZrX&c/!"B8A"9\T!rU9[`q>1*dnc&"K rqcTdrquNiqsj[c!!*'!!!*$!s8W&rs8M$Xs8E9$q=s^WqYpKYs7lQtr:Bp`o)8(=s*t~> JcG!7!<)ops8Drr"8;TjrVdPr!!`f7!=f,(rVk[R$ig>/s8;oo"98Q(rVj_7rVe)?K,Fn+b22B5 >o<_G!<rVQ?`rr;Z`s8";I!giWZ_#H=lr:0OZrX&c/!"B8A"9\T!rU9[`q>1*dnc&"K rqcTdrquNiqsj[c!!*'!!!*$!s8W&rs8M$Xs8E9$q=s^WqYpKYs7lQtr:Bp`o)8(=s*t~> JcG!7!<)ops8Drr"8;TjrVdPr!!`f7!=f,(rVk[R$ig>/s8;oo"98Q(rVj_7rVe)?K,Fn+b22B5 >o<_G!<rVQ?`rr;Z`s8";I!giWZ_#H=lr:0OZrX&c/!"B8A"9\T!rU9[`q>1*dnc&"K rqcTdrquNiqsj[c!!*'!!!*$!s8W&rs8M$Xs8E9$q=s^WqYpKYs7lQtr:Bp`o)8(=s*t~> JcG9?!<2lq!WN&sr!NE#rVcWnrp'Ul$0M9m"TS`6rVlEFrsSl/!<;usqZHm$s8Dr7s8W'Gs8N"Q (B=rV/cu=Y!!3WI+@O9KoD8(Wqu6Tlr;Q]or[.aIQN$mZrr0k92Z!IRrqucr!X/`.!!<<'s7u?e s8;Tir;Q]orr)iqqZ$BkrqQNls8N'!s8N'!rrE*!rVccqlMpn`&-)Y.s8W)trVc`irr)lpqss[b rtbV6s8N#trr;utrr;utrqQNipAFsXrT+!/~> JcG9?!<2lq!WN&sr!NE#rVcWnrp'Ul$0M9m"TS`6rVlEFrsSl/!<;usqZHm$s8Dr7s8W'Gs8N"Q (B=rV/cu=Y!!3WI+@O9KoD8(Wqu6Tlr;Q]or[.aIQN$mZrr0k92Z!IRrqucr!X/`.!!<<'s7u?e s8;Tir;Q]orr)iqqZ$BkrqQNls8N'!s8N'!rrE*!rVccqlMpn`&-)Y.s8W)trVc`irr)lpqss[b rtbV6s8N#trr;utrr;utrqQNipAFsXrT+!/~> JcG9?!<2lq!WN&sr!NE#rVcWnrp'Ul$0M9m"TS`6rVlEFrsSl/!<;usqZHm$s8Dr7s8W'Gs8N"Q (B=rV/cu=Y!!3WI+@O9KoD8(Wqu6Tlr;Q]or[.aIQN$mZrr0k92Z!IRrqucr!X/`.!!<<'s7u?e s8;Tir;Q]orr)iqqZ$BkrqQNls8N'!s8N'!rrE*!rVccqlMpn`&-)Y.s8W)trVc`irr)lpqss[b rtbV6s8N#trr;utrr;utrqQNipAFsXrT+!/~> JcG9?!<2lq&H;Y*pA"XYrV69Oh?sAn!WqTd#6Y&5"SqrirndY`!!30#r;ZWs!!E9"rkSO[rVD0` !XJc-"TSQ<2F!Goo(W%]rUfmaqtpBmrVZWn.f]U7qu4D2*rc3>rr;uu!!*0%!),*ruWI!WW?)jQ,8! rpfmbr;Q6coDSI`qt9s^rV$6_roF*0~> JcG9?!<2lq&H;Y*pA"XYrV69Oh?sAn!WqTd#6Y&5"SqrirndY`!!30#r;ZWs!!E9"rkSO[rVD0` !XJc-"TSQ<2F!Goo(W%]rUfmaqtpBmrVZWn.f]U7qu4D2*rc3>rr;uu!!*0%!),*ruWI!WW?)jQ,8! rpfmbr;Q6coDSI`qt9s^rV$6_roF*0~> JcG9?!<2lq&H;Y*pA"XYrV69Oh?sAn!WqTd#6Y&5"SqrirndY`!!30#r;ZWs!!E9"rkSO[rVD0` !XJc-"TSQ<2F!Goo(W%]rUfmaqtpBmrVZWn.f]U7qu4D2*rc3>rr;uu!!*0%!),*ruWI!WW?)jQ,8! rpfmbr;Q6coDSI`qt9s^rV$6_roF*0~> JcG!7&,Z2&nc&CUrPT$D"U4u6"R,mk!=Af/r:Tm_hZ!ua!W`8us8)p!"98?!_#GAHqhlK`W,].rr)Wk q==F%bf%N?`luL$q;hR+~> JcG!7&,Z2&nc&CUrPT$D"U4u6"R,mk!=Af/r:Tm_hZ!ua!W`8us8)p!"98?!_#GAHqhlK`W,].rr)Wk q==F%bf%N?`luL$q;hR+~> JcG!7&,Z2&nc&CUrPT$D"U4u6"R,mk!=Af/r:Tm_hZ!ua!W`8us8)p!"98?!_#GAHqhlK`W,].rr)Wk q==F%bf%N?`luL$q;hR+~> JcG0 JcG0 JcG0 JcG3=rVlis&,Q"rp\+9J"9AT)$3:>5"R,pd#6b;-qXs[\hZ!ua!W`8us8)p!"98?!_>bMRq"h@$ +:nt^$3:GC4cZ&YmJ$PTr;?Bhrr)cmrVZmM!!8G`rP8F:rr<#ts8W&u%KQP0! JcG3=rVlis&,Q"rp\+9J"9AT)$3:>5"R,pd#6b;-qXs[\hZ!ua!W`8us8)p!"98?!_>bMRq"h@$ +:nt^$3:GC4cZ&YmJ$PTr;?Bhrr)cmrVZmM!!8G`rP8F:rr<#ts8W&u%KQP0! JcG3=rVlis&,Q"rp\+9J"9AT)$3:>5"R,pd#6b;-qXs[\hZ!ua!W`8us8)p!"98?!_>bMRq"h@$ +:nt^$3:GC4cZ&YmJ$PTr;?Bhrr)cmrVZmM!!8G`rP8F:rr<#ts8W&u%KQP0! JcG9?q>L]po`"c5LB%M["TAH(#65(p!!`]2J+`j/s8;oo"98Q(rVjY5-MRH:n]dDK :E0TF#QP2?)-I!gW]^_#FT;s8W)us8E!0!<<*#!"TSQ.!"&o6#Qb,5#mUG- q"OX]rVm-.#R:S:! JcG9?q>L]po`"c5LB%M["TAH(#65(p!!`]2J+`j/s8;oo"98Q(rVjY5-MRH:n]dDK :E0TF#QP2?)-I!gW]^_#FT;s8W)us8E!0!<<*#!"TSQ.!"&o6#Qb,5#mUG- q"OX]rVm-.#R:S:! JcG9?q>L]po`"c5LB%M["TAH(#65(p!!`]2J+`j/s8;oo"98Q(rVjY5-MRH:n]dDK :E0TF#QP2?)-I!gW]^_#FT;s8W)us8E!0!<<*#!"TSQ.!"&o6#Qb,5#mUG- q"OX]rVm-.#R:S:! JcG9?!W2fnrXo)*rV$,1!!<`3!WW<(!X/Q-nGr@c"pL@ho)JLXh>[l`!W`8us8)p!"98?!_>bkW s82ZkoC0_u8O"+"#R(;;*E$OKcfk/ur;QWkqtg*d.f][;r;FG2"oeQ%rr<#t!"K&1!!**#rVZQb qZ$^)!Vu`is8N*!s8N'(rrE*!rVccqlMpn`&,>tns7uEa!WrZ-$4$b8"8Dj;#QY,0"U>/3"9Sc5 $uc(?q"FR[p^@6-!so&3#OqWOs*t~> JcG9?!W2fnrXo)*rV$,1!!<`3!WW<(!X/Q-nGr@c"pL@ho)JLXh>[l`!W`8us8)p!"98?!_>bkW s82ZkoC0_u8O"+"#R(;;*E$OKcfk/ur;QWkqtg*d.f][;r;FG2"oeQ%rr<#t!"K&1!!**#rVZQb qZ$^)!Vu`is8N*!s8N'(rrE*!rVccqlMpn`&,>tns7uEa!WrZ-$4$b8"8Dj;#QY,0"U>/3"9Sc5 $uc(?q"FR[p^@6-!so&3#OqWOs*t~> JcG9?!W2fnrXo)*rV$,1!!<`3!WW<(!X/Q-nGr@c"pL@ho)JLXh>[l`!W`8us8)p!"98?!_>bkW s82ZkoC0_u8O"+"#R(;;*E$OKcfk/ur;QWkqtg*d.f][;r;FG2"oeQ%rr<#t!"K&1!!**#rVZQb qZ$^)!Vu`is8N*!s8N'(rrE*!rVccqlMpn`&,>tns7uEa!WrZ-$4$b8"8Dj;#QY,0"U>/3"9Sc5 $uc(?q"FR[p^@6-!so&3#OqWOs*t~> JcG9?(]+%-s8W&pqY^+e"Tef6!!3<(!s&E*"RuKf!XGe)pA+abr;>FO$ig>/s8;oo"98Q(rVjV4 -2d`?rqHHio[1dK+rpdn#lkA@-VnHLlLOcIqu-Edr@7jMQMg]srrrE%s8N&urW!E0!!!$#!<)Zj q>CHs"p"Q"pAb-ms8W*!#QFf(s8Dorrp'O`rX\o#rp]g_;ZQn%#Qt87!!2lqrra>C!!36*"TS]6 !XAr3r;?Nhq>:$o#6Fl2"T\c"puMI*~> JcG9?(]+%-s8W&pqY^+e"Tef6!!3<(!s&E*"RuKf!XGe)pA+abr;>FO$ig>/s8;oo"98Q(rVjV4 -2d`?rqHHio[1dK+rpdn#lkA@-VnHLlLOcIqu-Edr@7jMQMg]srrrE%s8N&urW!E0!!!$#!<)Zj q>CHs"p"Q"pAb-ms8W*!#QFf(s8Dorrp'O`rX\o#rp]g_;ZQn%#Qt87!!2lqrra>C!!36*"TS]6 !XAr3r;?Nhq>:$o#6Fl2"T\c"puMI*~> JcG9?(]+%-s8W&pqY^+e"Tef6!!3<(!s&E*"RuKf!XGe)pA+abr;>FO$ig>/s8;oo"98Q(rVjV4 -2d`?rqHHio[1dK+rpdn#lkA@-VnHLlLOcIqu-Edr@7jMQMg]srrrE%s8N&urW!E0!!!$#!<)Zj q>CHs"p"Q"pAb-ms8W*!#QFf(s8Dorrp'O`rX\o#rp]g_;ZQn%#Qt87!!2lqrra>C!!36*"TS]6 !XAr3r;?Nhq>:$o#6Fl2"T\c"puMI*~> JcGZIrr3Z)s82ikrr;ilrr2Hdq#:+O3W]?]!ri6#!W<#u!VZR/"p4i,!!!-%#QOo2!6"g5q>:*g s8LmT$ig>/s8;oo"98Q(rVjY5s8Drr/,];@pA4XMc+daG'EA79#R;"_Gc]0Vo()eOq'Q.BQN$m\ s8;inrr;utrqucsrr(7E"oeQ%rr<#t!!!)u!"/`'rVlct!!**!rpp*h!<<*!!!iN(s8W&rs8M<` rr*6&s7uZo!<3!<2urrqlTj! JcGZIrr3Z)s82ikrr;ilrr2Hdq#:+O3W]?]!ri6#!W<#u!VZR/"p4i,!!!-%#QOo2!6"g5q>:*g s8LmT$ig>/s8;oo"98Q(rVjY5s8Drr/,];@pA4XMc+daG'EA79#R;"_Gc]0Vo()eOq'Q.BQN$m\ s8;inrr;utrqucsrr(7E"oeQ%rr<#t!!!)u!"/`'rVlct!!**!rpp*h!<<*!!!iN(s8W&rs8M<` rr*6&s7uZo!<3!<2urrqlTj! JcGZIrr3Z)s82ikrr;ilrr2Hdq#:+O3W]?]!ri6#!W<#u!VZR/"p4i,!!!-%#QOo2!6"g5q>:*g s8LmT$ig>/s8;oo"98Q(rVjY5s8Drr/,];@pA4XMc+daG'EA79#R;"_Gc]0Vo()eOq'Q.BQN$m\ s8;inrr;utrqucsrr(7E"oeQ%rr<#t!!!)u!"/`'rVlct!!**!rpp*h!<<*!!!iN(s8W&rs8M<` rr*6&s7uZo!<3!<2urrqlTj! JcGZIrr3N-o(rC_qt^6bqXOL_n,Fa6!riB%!q?7#$ig;.!WWi6#64i.!!:pSr;ZWqr;HWNrsSl/ !<;usqZHm$s8Dr5s![jFrr;urqtg9jrpK[]h:.c<+UJ/Q#lkGM0QFVdrVQO9!XtLeqYpNmrW<#r rqufrrmC`Lrr<#ts8W&u!!<&u!WN,urW<0$!]LrquWi!W JcGZIrr3N-o(rC_qt^6bqXOL_n,Fa6!riB%!q?7#$ig;.!WWi6#64i.!!:pSr;ZWqr;HWNrsSl/ !<;usqZHm$s8Dr5s![jFrr;urqtg9jrpK[]h:.c<+UJ/Q#lkGM0QFVdrVQO9!XtLeqYpNmrW<#r rqufrrmC`Lrr<#ts8W&u!!<&u!WN,urW<0$!]LrquWi!W JcGZIrr3N-o(rC_qt^6bqXOL_n,Fa6!riB%!q?7#$ig;.!WWi6#64i.!!:pSr;ZWqr;HWNrsSl/ !<;usqZHm$s8Dr5s![jFrr;urqtg9jrpK[]h:.c<+UJ/Q#lkGM0QFVdrVQO9!XtLeqYpNmrW<#r rqufrrmC`Lrr<#ts8W&u!!<&u!WN,urW<0$!]LrquWi!W JcGcLqu73&rqlBfrqH3]rr2T[q?mB("9/N'"7Q9l!X]/1!"T,;!s/Mis7uWkr;6EirVk[R$ig>/ s8;oo"98Q(rVjY50E(nLs8MuoqY0aaq>:3irp/gs80];Y%fcV:"<;0JcLs:!!1EKYrVlirrVQNl rr2rtrm(NIrr<#ts8W&u!!<&u!WN,urW<0$!#ljr0! JcGcLqu73&rqlBfrqH3]rr2T[q?mB("9/N'"7Q9l!X]/1!"T,;!s/Mis7uWkr;6EirVk[R$ig>/ s8;oo"98Q(rVjY50E(nLs8MuoqY0aaq>:3irp/gs80];Y%fcV:"<;0JcLs:!!1EKYrVlirrVQNl rr2rtrm(NIrr<#ts8W&u!!<&u!WN,urW<0$!#ljr0! JcGcLqu73&rqlBfrqH3]rr2T[q?mB("9/N'"7Q9l!X]/1!"T,;!s/Mis7uWkr;6EirVk[R$ig>/ s8;oo"98Q(rVjY50E(nLs8MuoqY0aaq>:3irp/gs80];Y%fcV:"<;0JcLs:!!1EKYrVlirrVQNl rr2rtrm(NIrr<#ts8W&u!!<&u!WN,urW<0$!#ljr0! JcGTH')qV(q#C3^rr)KgoC!+m!sJ]+rjQ7s8W,us8=VNoDJR`rq>m^qt8q$T2cjE!t,/4$O\YB&Inf0qXaX_rql]prVuco rr;uss8W)GrrrE%s8N&urVup"qu?css8N!"!<<-#nGiLgs8W*!#QFf(s8Dorroj@srr<#ts8N'! !rrQ.!!rW*!WiH,!s8H%'Ft0K!=]#4"98l2"9Sf-rVHKjqYU0j"9JQ'rr2!YJ,~> JcGTH')qV(q#C3^rr)KgoC!+m!sJ]+rjQ7s8W,us8=VNoDJR`rq>m^qt8q$T2cjE!t,/4$O\YB&Inf0qXaX_rql]prVuco rr;uss8W)GrrrE%s8N&urVup"qu?css8N!"!<<-#nGiLgs8W*!#QFf(s8Dorroj@srr<#ts8N'! !rrQ.!!rW*!WiH,!s8H%'Ft0K!=]#4"98l2"9Sf-rVHKjqYU0j"9JQ'rr2!YJ,~> JcGTH')qV(q#C3^rr)KgoC!+m!sJ]+rjQ7s8W,us8=VNoDJR`rq>m^qt8q$T2cjE!t,/4$O\YB&Inf0qXaX_rql]prVuco rr;uss8W)GrrrE%s8N&urVup"qu?css8N!"!<<-#nGiLgs8W*!#QFf(s8Dorroj@srr<#ts8N'! !rrQ.!!rW*!WiH,!s8H%'Ft0K!=]#4"98l2"9Sf-rVHKjqYU0j"9JQ'rr2!YJ,~> JcGZIrr3T/r;$<\s7u$\qUkoM"9Jo2!W<*"!Up*h!=oD>!>tn<,l[T9p@\%Wrr2oqs8:aR$ig>/ s8;oo"98Q(rVjJ0rr+DIq>^KkrVulqrVlcgq"h=>8fnHG!!360"on^J_"dj%q=FO`r;ZQirVlfr !WN&FrrrE%s8N&urVup"qu?css8N!"!<<-#nGiLgs8W*!#QFf(s8Dorroj@orr<#ts8N'!!Wi?& $j$G?!<`<))$Bs?"9JT-&HN:?!sJZ*$NLA2rql]or;6Wp!!E?'!<2uYs*t~> JcGZIrr3T/r;$<\s7u$\qUkoM"9Jo2!W<*"!Up*h!=oD>!>tn<,l[T9p@\%Wrr2oqs8:aR$ig>/ s8;oo"98Q(rVjJ0rr+DIq>^KkrVulqrVlcgq"h=>8fnHG!!360"on^J_"dj%q=FO`r;ZQirVlfr !WN&FrrrE%s8N&urVup"qu?css8N!"!<<-#nGiLgs8W*!#QFf(s8Dorroj@orr<#ts8N'!!Wi?& $j$G?!<`<))$Bs?"9JT-&HN:?!sJZ*$NLA2rql]or;6Wp!!E?'!<2uYs*t~> JcGZIrr3T/r;$<\s7u$\qUkoM"9Jo2!W<*"!Up*h!=oD>!>tn<,l[T9p@\%Wrr2oqs8:aR$ig>/ s8;oo"98Q(rVjJ0rr+DIq>^KkrVulqrVlcgq"h=>8fnHG!!360"on^J_"dj%q=FO`r;ZQirVlfr !WN&FrrrE%s8N&urVup"qu?css8N!"!<<-#nGiLgs8W*!#QFf(s8Dorroj@orr<#ts8N'!!Wi?& $j$G?!<`<))$Bs?"9JT-&HN:?!sJZ*$NLA2rql]or;6Wp!!E?'!<2uYs*t~> Jc>`Jrr)lrs8NZ0rVlTeqss^_^&S]I"ptA2qZ6Hlr;lfr%LN19!t##655P'Ks7uTkrr;uss8CgS $ig>/s8;oo"98Q(rVj>,.Jj#Cs8Duop\Og^q>:*dr7$d),SLjm!WW?-*CQUVme-5OrqHHlqu$Ek rW)oErrrE%s8N&urVup"qu?css8N!"!<<-#nGiLgs8W*!#QFf(s8Dorroj@orr<#ts8N'!! Jc>`Jrr)lrs8NZ0rVlTeqss^_^&S]I"ptA2qZ6Hlr;lfr%LN19!t##655P'Ks7uTkrr;uss8CgS $ig>/s8;oo"98Q(rVj>,.Jj#Cs8Duop\Og^q>:*dr7$d),SLjm!WW?-*CQUVme-5OrqHHlqu$Ek rW)oErrrE%s8N&urVup"qu?css8N!"!<<-#nGiLgs8W*!#QFf(s8Dorroj@orr<#ts8N'!! Jc>`Jrr)lrs8NZ0rVlTeqss^_^&S]I"ptA2qZ6Hlr;lfr%LN19!t##655P'Ks7uTkrr;uss8CgS $ig>/s8;oo"98Q(rVj>,.Jj#Cs8Duop\Og^q>:*dr7$d),SLjm!WW?-*CQUVme-5OrqHHlqu$Ek rW)oErrrE%s8N&urVup"qu?css8N!"!<<-#nGiLgs8W*!#QFf(s8Dorroj@orr<#ts8N'!! JcGcIs83Q/rr<#sq#(*ip%bMb#RC_?#lt.u!<30$!WW9#!"T)8!<<0*/s8;oo"98Q(rVjA-0E1qIs8MusrVcTgqZ$NgqYpKgg7Wdq*u4th!=&c.G(-I9o_e=\rVQNi r;?NmrmC`Lrr<#ts8W&u!!<&u!WN,urW<0$! JcGcIs83Q/rr<#sq#(*ip%bMb#RC_?#lt.u!<30$!WW9#!"T)8!<<0*/s8;oo"98Q(rVjA-0E1qIs8MusrVcTgqZ$NgqYpKgg7Wdq*u4th!=&c.G(-I9o_e=\rVQNi r;?NmrmC`Lrr<#ts8W&u!!<&u!WN,urW<0$! JcGcIs83Q/rr<#sq#(*ip%bMb#RC_?#lt.u!<30$!WW9#!"T)8!<<0*/s8;oo"98Q(rVjA-0E1qIs8MusrVcTgqZ$NgqYpKgg7Wdq*u4th!=&c.G(-I9o_e=\rVQNi r;?NmrmC`Lrr<#ts8W&u!!<&u!WN,urW<0$! l2Ue_rr<#tq>^Ko"onJurr)cirX&K%s8)cms8N&urVk.Cq>M0*r;$9erVulqp\Facrf7-]!=oA8 "Tn/n(BXd@"TeZ)!!E?.!<@$9qu-KnrVc`qqptcU!!30#r;ZWs!!E9"rkAC5rr)irr;J/Cs8Vuq q=sseqY^>2s8N&u!!!$*!!N?)CARu0rVl`prVud,nG<1b D#s\?!!<6.!<<#qs8Mut!W l2Ue_rr<#tq>^Ko"onJurr)cirX&K%s8)cms8N&urVk.Cq>M0*r;$9erVulqp\Facrf7-]!=oA8 "Tn/n(BXd@"TeZ)!!E?.!<@$9qu-KnrVc`qqptcU!!30#r;ZWs!!E9"rkAC5rr)irr;J/Cs8Vuq q=sseqY^>2s8N&u!!!$*!!N?)CARu0rVl`prVud,nG<1b D#s\?!!<6.!<<#qs8Mut!W l2Ue_rr<#tq>^Ko"onJurr)cirX&K%s8)cms8N&urVk.Cq>M0*r;$9erVulqp\Facrf7-]!=oA8 "Tn/n(BXd@"TeZ)!!E?.!<@$9qu-KnrVc`qqptcU!!30#r;ZWs!!E9"rkAC5rr)irr;J/Cs8Vuq q=sseqY^>2s8N&u!!!$*!!N?)CARu0rVl`prVud,nG<1b D#s\?!!<6.!<<#qs8Mut!W l2Ue_rr<#sq>U^!q#C$cqtp/s8;oo"98Q(rVjS3s8E-!s8W&qrr2rfrYG@?FD3`S!!WE, $kuucW8?t@qZ$Kjp<`gCrr<#ts8W&u!!<&u!WN,urW<0$! l2Ue_rr<#sq>U^!q#C$cqtp/s8;oo"98Q(rVjS3s8E-!s8W&qrr2rfrYG@?FD3`S!!WE, $kuucW8?t@qZ$Kjp<`gCrr<#ts8W&u!!<&u!WN,urW<0$! l2Ue_rr<#sq>U^!q#C$cqtp/s8;oo"98Q(rVjS3s8E-!s8W&qrr2rfrYG@?FD3`S!!WE, $kuucW8?t@qZ$Kjp<`gCrr<#ts8W&u!!<&u!WN,urW<0$! l2Ue_rr<#tq#:TqrUKpaq>^Hirs/Mtr;QKirVH?hao<1SrUg'Xq"jgYr;UJ?!>#84!WrQ.!s/Mm !"K5V60r;6KkrVZZp!!*'!!!*$!s8W&r s8M6^&,uV/rr;uu!!WE2"9o;6r;$@-rVQWeqtTsb! l2Ue_rr<#tq#:TqrUKpaq>^Hirs/Mtr;QKirVH?hao<1SrUg'Xq"jgYr;UJ?!>#84!WrQ.!s/Mm !"K5V60r;6KkrVZZp!!*'!!!*$!s8W&r s8M6^&,uV/rr;uu!!WE2"9o;6r;$@-rVQWeqtTsb! l2Ue_rr<#tq#:TqrUKpaq>^Hirs/Mtr;QKirVH?hao<1SrUg'Xq"jgYr;UJ?!>#84!WrQ.!s/Mm !"K5V60r;6KkrVZZp!!*'!!!*$!s8W&r s8M6^&,uV/rr;uu!!WE2"9o;6r;$@-rVQWeqtTsb! l2Ue_!WW/urrE#mrs&/mr;HTnqt^6srquZnrUU!dq>UHob5W:QrqlEarU0U[qFLes#R:D3!:!!`T-&ci-FrqQ9\q";r4$ig>/s8;oo"98Q(rVjY5rr*$"r;-Ejs8Drms7uX1q>0CS o_$1AH5@D*!=B#JNq`DFrr2fodJjCLs8W)us8Duu!rN$!rr;us!s&B&!;ZZprY5/-q#'m`rr<'! rr<'!!<<)trVul\s8W'-s8Dut!!!'##Qk,4rqQ l2Ue_!WW/urrE#mrs&/mr;HTnqt^6srquZnrUU!dq>UHob5W:QrqlEarU0U[qFLes#R:D3!:!!`T-&ci-FrqQ9\q";r4$ig>/s8;oo"98Q(rVjY5rr*$"r;-Ejs8Drms7uX1q>0CS o_$1AH5@D*!=B#JNq`DFrr2fodJjCLs8W)us8Duu!rN$!rr;us!s&B&!;ZZprY5/-q#'m`rr<'! rr<'!!<<)trVul\s8W'-s8Dut!!!'##Qk,4rqQ l2Ue_!WW/urrE#mrs&/mr;HTnqt^6srquZnrUU!dq>UHob5W:QrqlEarU0U[qFLes#R:D3!:!!`T-&ci-FrqQ9\q";r4$ig>/s8;oo"98Q(rVjY5rr*$"r;-Ejs8Drms7uX1q>0CS o_$1AH5@D*!=B#JNq`DFrr2fodJjCLs8W)us8Duu!rN$!rr;us!s&B&!;ZZprY5/-q#'m`rr<'! rr<'!!<<)trVul\s8W'-s8Dut!!!'##Qk,4rqQ l2M(hs8Murs8Vuqrql^!rqcZgq"sgb#6"JjrVu`frr2lrrVk"?'E.t)qu?!YrpqcJ#QbP<"98H' !rW5k!"T,3"T\lC#6;g@o_ACWr;4e>$ig>/s8;oo"98Q(rVjY5#Q">rrqlNgs7uZis7uX1q#:*c oDJRLlbn-2)A!2bN;`bNs7uNjdJjCLs8W)us8Duu!rN$!rr;us!s&B&!;ZX1rr;cnq#0sbrr<'! rr<'!!<<)trVul\s8N!+rVulu!<<*$#6b\=q>(%*qYpHmqt0ma!!*6'#64l*rr<#ts8Vus"9JQ' rr2!YJ,~> l2M(hs8Murs8Vuqrql^!rqcZgq"sgb#6"JjrVu`frr2lrrVk"?'E.t)qu?!YrpqcJ#QbP<"98H' !rW5k!"T,3"T\lC#6;g@o_ACWr;4e>$ig>/s8;oo"98Q(rVjY5#Q">rrqlNgs7uZis7uX1q#:*c oDJRLlbn-2)A!2bN;`bNs7uNjdJjCLs8W)us8Duu!rN$!rr;us!s&B&!;ZX1rr;cnq#0sbrr<'! rr<'!!<<)trVul\s8N!+rVulu!<<*$#6b\=q>(%*qYpHmqt0ma!!*6'#64l*rr<#ts8Vus"9JQ' rr2!YJ,~> l2M(hs8Murs8Vuqrql^!rqcZgq"sgb#6"JjrVu`frr2lrrVk"?'E.t)qu?!YrpqcJ#QbP<"98H' !rW5k!"T,3"T\lC#6;g@o_ACWr;4e>$ig>/s8;oo"98Q(rVjY5#Q">rrqlNgs7uZis7uX1q#:*c oDJRLlbn-2)A!2bN;`bNs7uNjdJjCLs8W)us8Duu!rN$!rr;us!s&B&!;ZX1rr;cnq#0sbrr<'! rr<'!!<<)trVul\s8N!+rVulu!<<*$#6b\=q>(%*qYpHmqt0ma!!*6'#64l*rr<#ts8Vus"9JQ' rr2!YJ,~> l2M"fs8Moos8D`jrr2j$r:oISrq#dZq>M$)qu,aRrqufnqu$Ekr;6BirVk=Hq#1`qnc%hNr"p@Y !!WQ,"oSH$!WN3$"7H4!$31P;#j2-PrUB^Xrr(.B$ig>/s8;oo"98Q(rVjY5rqlrurr2iir;HTn rqZThrY=o$rq69hpAFmUcG"BM8;-U7p\+I^d/O:Ks8W)us8Duu!rN$!rr;us!s&B&!;ZX1qtg*d qYgUBarr)Zc!!*-$"p+r-rr<#t s8Vus"9JQ'rr2!YJ,~> l2M"fs8Moos8D`jrr2j$r:oISrq#dZq>M$)qu,aRrqufnqu$Ekr;6BirVk=Hq#1`qnc%hNr"p@Y !!WQ,"oSH$!WN3$"7H4!$31P;#j2-PrUB^Xrr(.B$ig>/s8;oo"98Q(rVjY5rqlrurr2iir;HTn rqZThrY=o$rq69hpAFmUcG"BM8;-U7p\+I^d/O:Ks8W)us8Duu!rN$!rr;us!s&B&!;ZX1qtg*d qYgUBarr)Zc!!*-$"p+r-rr<#t s8Vus"9JQ'rr2!YJ,~> l2M"fs8Moos8D`jrr2j$r:oISrq#dZq>M$)qu,aRrqufnqu$Ekr;6BirVk=Hq#1`qnc%hNr"p@Y !!WQ,"oSH$!WN3$"7H4!$31P;#j2-PrUB^Xrr(.B$ig>/s8;oo"98Q(rVjY5rqlrurr2iir;HTn rqZThrY=o$rq69hpAFmUcG"BM8;-U7p\+I^d/O:Ks8W)us8Duu!rN$!rr;us!s&B&!;ZX1qtg*d qYgUBarr)Zc!!*-$"p+r-rr<#t s8Vus"9JQ'rr2!YJ,~> l2M"fs8Mlls8;QhrW<&rr;QQsrVl![rq?-c')qInrqH'`q"jmcrVcZkqY^!!!H0!rN&u!<<2s!;QZp!"9>;r;Q<]qu-Nirr;l@rsSl/!<;usqZHm$s8Dr5rt#&,rUf[Vr VHBfqu$Ekrr2Ee(B4+.rquckoCr7`p\XZc\,$('qu6NjdJjCLs8W)us8Duu!rN$!rr;us!s&B&! ;ZX1qY0g]r;$9hrr<'!rr<'!!<<)trVul\s8N!*r;Zcu!WWE*!"Ar'q#;*.n,<7cqtp?m!rrE*" Tn`'s8W)us82j"!WW6"roF*0~> l2M"fs8Mlls8;QhrW<&rr;QQsrVl![rq?-c')qInrqH'`q"jmcrVcZkqY^!!!H0!rN&u!<<2s!;QZp!"9>;r;Q<]qu-Nirr;l@rsSl/!<;usqZHm$s8Dr5rt#&,rUf[Vr VHBfqu$Ekrr2Ee(B4+.rquckoCr7`p\XZc\,$('qu6NjdJjCLs8W)us8Duu!rN$!rr;us!s&B&! ;ZX1qY0g]r;$9hrr<'!rr<'!!<<)trVul\s8N!*r;Zcu!WWE*!"Ar'q#;*.n,<7cqtp?m!rrE*" Tn`'s8W)us82j"!WW6"roF*0~> l2M"fs8Mlls8;QhrW<&rr;QQsrVl![rq?-c')qInrqH'`q"jmcrVcZkqY^!!!H0!rN&u!<<2s!;QZp!"9>;r;Q<]qu-Nirr;l@rsSl/!<;usqZHm$s8Dr5rt#&,rUf[Vr VHBfqu$Ekrr2Ee(B4+.rquckoCr7`p\XZc\,$('qu6NjdJjCLs8W)us8Duu!rN$!rr;us!s&B&! ;ZX1qY0g]r;$9hrr<'!rr<'!!<<)trVul\s8N!*r;Zcu!WWE*!"Ar'q#;*.n,<7cqtp?m!rrE*" Tn`'s8W)us82j"!WW6"roF*0~> l2MS!s8;]hr;6*crVl`mqtf@9k2lmK%g`O@!Y#/3!0qZ$Tf s8N&krqu`jq>U!ap\amfqp>?Hrr<#ts8W&u!!2ut!WE&tr;Zlt!<<#us8Dp5s8Mopq#C*djo,5[ rr)ltrW)rtr;HZnkl:Y]%/g/)! l2MS!s8;]hr;6*crVl`mqtf@9k2lmK%g`O@!Y#/3!0qZ$Tf s8N&krqu`jq>U!ap\amfqp>?Hrr<#ts8W&u!!2ut!WE&tr;Zlt!<<#us8Dp5s8Mopq#C*djo,5[ rr)ltrW)rtr;HZnkl:Y]%/g/)! l2MS!s8;]hr;6*crVl`mqtf@9k2lmK%g`O@!Y#/3!0qZ$Tf s8N&krqu`jq>U!ap\amfqp>?Hrr<#ts8W&u!!2ut!WE&tr;Zlt!<<#us8Dp5s8Mopq#C*djo,5[ rr)ltrW)rtr;HZnkl:Y]%/g/)! l2NX?s76*en,3+`p&=a4da&!r!!*3*!<<--!<`E)!!39(!!WE/":,"Qchd53rqZKiq#('grr2lr rr2rtro*k]r:g3gp&+jhr<:Nh$3UkAkPu(p#6t59!X/]Y2"UV9qu"J6$31,-s8;op!!!3#p](0j !rr9!e,TII'`7n)LI-U/hWst5qu-?cs8Mlls8Drrs8N9$rr;usrV?KnrWN,oq"agdr;Z`qrm1TU rr<#ts8N'!!<<*#!!!)us8MsA!W`9$qu-Kiqu6HlbKeDTci2,lquHirquHir!rDrjrVuKfk5Pkg s8Duu!<<-#!rW)toDeji!rrB&!<*!'s8N&urr<#r!!E?'!<2uYs*t~> l2NX?s76*en,3+`p&=a4da&!r!!*3*!<<--!<`E)!!39(!!WE/":,"Qchd53rqZKiq#('grr2lr rr2rtro*k]r:g3gp&+jhr<:Nh$3UkAkPu(p#6t59!X/]Y2"UV9qu"J6$31,-s8;op!!!3#p](0j !rr9!e,TII'`7n)LI-U/hWst5qu-?cs8Mlls8Drrs8N9$rr;usrV?KnrWN,oq"agdr;Z`qrm1TU rr<#ts8N'!!<<*#!!!)us8MsA!W`9$qu-Kiqu6HlbKeDTci2,lquHirquHir!rDrjrVuKfk5Pkg s8Duu!<<-#!rW)toDeji!rrB&!<*!'s8N&urr<#r!!E?'!<2uYs*t~> l2NX?s76*en,3+`p&=a4da&!r!!*3*!<<--!<`E)!!39(!!WE/":,"Qchd53rqZKiq#('grr2lr rr2rtro*k]r:g3gp&+jhr<:Nh$3UkAkPu(p#6t59!X/]Y2"UV9qu"J6$31,-s8;op!!!3#p](0j !rr9!e,TII'`7n)LI-U/hWst5qu-?cs8Mlls8Drrs8N9$rr;usrV?KnrWN,oq"agdr;Z`qrm1TU rr<#ts8N'!!<<*#!!!)us8MsA!W`9$qu-Kiqu6HlbKeDTci2,lquHirquHir!rDrjrVuKfk5Pkg s8Duu!<<-#!rW)toDeji!rrB&!<*!'s8N&urr<#r!!E?'!<2uYs*t~> kl2\%r;$3eqYg>t\#TfB!rr?%!>!!N]19_JA[q#'j^`r?AG!W`8us82is"oS,p !<)lqd/X+Es7d=f$OK.HNkFZJp\t'eqZ$Qmq#:6irr2p!rr)iks8Mrsr;HNmr;QZormC`crr<#t s8N'!!<<*$!!*0!rqu`n!WiB&r4B2BZMq kl2\%r;$3eqYg>t\#TfB!rr?%!>!!N]19_JA[q#'j^`r?AG!W`8us82is"oS,p !<)lqd/X+Es7d=f$OK.HNkFZJp\t'eqZ$Qmq#:6irr2p!rr)iks8Mrsr;HNmr;QZormC`crr<#t s8N'!!<<*$!!*0!rqu`n!WiB&r4B2BZMq kl2\%r;$3eqYg>t\#TfB!rr?%!>!!N]19_JA[q#'j^`r?AG!W`8us82is"oS,p !<)lqd/X+Es7d=f$OK.HNkFZJp\t'eqZ$Qmq#:6irr2p!rr)iks8Mrsr;HNmr;QZormC`crr<#t s8N'!!<<*$!!*0!rqu`n!WiB&r4B2BZMq l2N^@qXja[q!nBQ!s8Q3"pP/3!W`B*!)3$jI"?TUboSpA4^XqYU*f s8N#TrrW)qp\t'spALTb&d&@@%g2%r%gE1="9Ar4?i0g!q>L'arl4sF!!30#r;ZZp!!W;prrE#r rm:]ErZ1b1Q5K],#o5mS^u=VSpA=U_q>^ l2N^@qXja[q!nBQ!s8Q3"pP/3!W`B*!)3$jI"?TUboSpA4^XqYU*f s8N#TrrW)qp\t'spALTb&d&@@%g2%r%gE1="9Ar4?i0g!q>L'arl4sF!!30#r;ZZp!!W;prrE#r rm:]ErZ1b1Q5K],#o5mS^u=VSpA=U_q>^ l2N^@qXja[q!nBQ!s8Q3"pP/3!W`B*!)3$jI"?TUboSpA4^XqYU*f s8N#TrrW)qp\t'spALTb&d&@@%g2%r%gE1="9Ar4?i0g!q>L'arl4sF!!30#r;ZZp!!W;prrE#r rm:]ErZ1b1Q5K],#o5mS^u=VSpA=U_q>^ mf34a)uBL%pAFW6M?F+b"p>27"9SZ)!"ptT]q>L0hp&+U^qSrOB!!30#r;ZZp!!W;js8W)I s8W';r;ZGU0b4?e#6=onG(.fqoC2\RrV?Khr;?NkrVcQl!WE#srrW2ur;QZmrmC`Rrr<#ts8N'! ! mf34a)uBL%pAFW6M?F+b"p>27"9SZ)!"ptT]q>L0hp&+U^qSrOB!!30#r;ZZp!!W;js8W)I s8W';r;ZGU0b4?e#6=onG(.fqoC2\RrV?Khr;?NkrVcQl!WE#srrW2ur;QZmrmC`Rrr<#ts8N'! ! mf34a)uBL%pAFW6M?F+b"p>27"9SZ)!"ptT]q>L0hp&+U^qSrOB!!30#r;ZZp!!W;js8W)I s8W';r;ZGU0b4?e#6=onG(.fqoC2\RrV?Khr;?NkrVcQl!WE#srrW2ur;QZmrmC`Rrr<#ts8N'! ! nc/Uer;8SRo`+`'FU/'M"T\o;!!`Z0!<<-$!!*0-!!EE7"9Jl1!rrN*!rrH.#64u/!sJ^CDYX&) n,*.`rVQTQrt"r&p&FT#!WrT1"9JQ)!s@cf%gECA!L\lGq"spbrVZEgoZ$nC'=UgbYi#QXu5'+[l\YL;A&rVuHfr;-6crVl`kp]('gbPr7Ts8W)urr<$#!WrT. "9e]#qYL*g!WN-@$j6>3"T\i.#ltA:qZR$!NfO):NfO) nc/Uer;8SRo`+`'FU/'M"T\o;!!`Z0!<<-$!!*0-!!EE7"9Jl1!rrN*!rrH.#64u/!sJ^CDYX&) n,*.`rVQTQrt"r&p&FT#!WrT1"9JQ)!s@cf%gECA!L\lGq"spbrVZEgoZ$nC'=UgbYi#QXu5'+[l\YL;A&rVuHfr;-6crVl`kp]('gbPr7Ts8W)urr<$#!WrT. "9e]#qYL*g!WN-@$j6>3"T\i.#ltA:qZR$!NfO):NfO) nc/Uer;8SRo`+`'FU/'M"T\o;!!`Z0!<<-$!!*0-!!EE7"9Jl1!rrN*!rrH.#64u/!sJ^CDYX&) n,*.`rVQTQrt"r&p&FT#!WrT1"9JQ)!s@cf%gECA!L\lGq"spbrVZEgoZ$nC'=UgbYi#QXu5'+[l\YL;A&rVuHfr;-6crVl`kp]('gbPr7Ts8W)urr<$#!WrT. "9e]#qYL*g!WN-@$j6>3"T\i.#ltA:qZR$!NfO):NfO) nc/Uerqucm3VrPS"9\l?#6Fo5":,26"9JW,!s/N,!XAr3%KQq@"Tnf."9AN*!s/l7"Tnf+!s)O% p\"=Oqtp?krrN,tiVsGdrV?%g!L00rsSl/!<;us qu?^#r;Zfmrr)formUoIrYte6r;?9?V4'4]$O$S8"<&jXJCiiSp\amaq>1*g!;lTlqu4Y9'E8%3 rr;uu!!<9("9JZ.rquWir;H`s!"KPAp]La#%0cj2W1s-aW;6Asr:g0dr;6 nc/Uerqucm3VrPS"9\l?#6Fo5":,26"9JW,!s/N,!XAr3%KQq@"Tnf."9AN*!s/l7"Tnf+!s)O% p\"=Oqtp?krrN,tiVsGdrV?%g!L00rsSl/!<;us qu?^#r;Zfmrr)formUoIrYte6r;?9?V4'4]$O$S8"<&jXJCiiSp\amaq>1*g!;lTlqu4Y9'E8%3 rr;uu!!<9("9JZ.rquWir;H`s!"KPAp]La#%0cj2W1s-aW;6Asr:g0dr;6 nc/Uerqucm3VrPS"9\l?#6Fo5":,26"9JW,!s/N,!XAr3%KQq@"Tnf."9AN*!s/l7"Tnf+!s)O% p\"=Oqtp?krrN,tiVsGdrV?%g!L00rsSl/!<;us qu?^#r;Zfmrr)formUoIrYte6r;?9?V4'4]$O$S8"<&jXJCiiSp\amaq>1*g!;lTlqu4Y9'E8%3 rr;uu!!<9("9JZ.rquWir;H`s!"KPAp]La#%0cj2W1s-aW;6Asr:g0dr;6 nc/Ufs8Drp/cGB+!"/i2"p+u5!t,23#QXo*!*8Z"Tni-!L?h"8_rormCcGrYbM,r;-0`oC:/"A0<0""p##3)b,^`biAKprVHWnrqZTorVuls s8W)ts8;lDrtGD3s8N&u!!!*&!WrH*"TSGur;HTr+92`P"8odG^pq1nqtU*drVucorqlTlrql]m rr)K`rV,IS%/p5*!!!$"!<<3!s8MWis8E*#!WW6"!=&T's8W)us82j"!WW6"roF*0~> nc/Ufs8Drp/cGB+!"/i2"p+u5!t,23#QXo*!*8Z"Tni-!L?h"8_rormCcGrYbM,r;-0`oC:/"A0<0""p##3)b,^`biAKprVHWnrqZTorVuls s8W)ts8;lDrtGD3s8N&u!!!*&!WrH*"TSGur;HTr+92`P"8odG^pq1nqtU*drVucorqlTlrql]m rr)K`rV,IS%/p5*!!!$"!<<3!s8MWis8E*#!WW6"!=&T's8W)us82j"!WW6"roF*0~> nc/Ufs8Drp/cGB+!"/i2"p+u5!t,23#QXo*!*8Z"Tni-!L?h"8_rormCcGrYbM,r;-0`oC:/"A0<0""p##3)b,^`biAKprVHWnrqZTorVuls s8W)ts8;lDrtGD3s8N&u!!!*&!WrH*"TSGur;HTr+92`P"8odG^pq1nqtU*drVucorqlTlrql]m rr)K`rV,IS%/p5*!!!$"!<<3!s8MWis8E*#!WW6"!=&T's8W)us82j"!WW6"roF*0~> p](6lrr5XjrVZZmqYg*e,R+AP$3154!X/`0"TSc2!8,rIf[\UNqu-HirVP-ie(<(N!!*0%#6b;3 "pkS<%g)h[qu-0[rr2Zls8;lrs8N#Zrs/Dtq#CBr!X%rm*s;QD"9ec+!rrE*!!!9)$/!o.r;6Bh rr2lrrr<#srQ,!Sq#:[$"T&#lrW!$3r;ZQhr:g3grVZKermUlrrVZWmr;$0crr2QWik)ZQ)[cfT !bR dF?Uhs7l*`q"=Raq>L!dr;6KmqtpBlqt^3js7H9Xr9=4lrr<#ss8E!!!WiT,!<2Zgq>U9ks8EH- #lk#1!pZs82j"!WW6"roF*0~> p](6lrr5XjrVZZmqYg*e,R+AP$3154!X/`0"TSc2!8,rIf[\UNqu-HirVP-ie(<(N!!*0%#6b;3 "pkS<%g)h[qu-0[rr2Zls8;lrs8N#Zrs/Dtq#CBr!X%rm*s;QD"9ec+!rrE*!!!9)$/!o.r;6Bh rr2lrrr<#srQ,!Sq#:[$"T&#lrW!$3r;ZQhr:g3grVZKermUlrrVZWmr;$0crr2QWik)ZQ)[cfT !bR dF?Uhs7l*`q"=Raq>L!dr;6KmqtpBlqt^3js7H9Xr9=4lrr<#ss8E!!!WiT,!<2Zgq>U9ks8EH- #lk#1!pZs82j"!WW6"roF*0~> p](6lrr5XjrVZZmqYg*e,R+AP$3154!X/`0"TSc2!8,rIf[\UNqu-HirVP-ie(<(N!!*0%#6b;3 "pkS<%g)h[qu-0[rr2Zls8;lrs8N#Zrs/Dtq#CBr!X%rm*s;QD"9ec+!rrE*!!!9)$/!o.r;6Bh rr2lrrr<#srQ,!Sq#:[$"T&#lrW!$3r;ZQhr:g3grVZKermUlrrVZWmr;$0crr2QWik)ZQ)[cfT !bR dF?Uhs7l*`q"=Raq>L!dr;6KmqtpBlqt^3js7H9Xr9=4lrr<#ss8E!!!WiT,!<2Zgq>U9ks8EH- #lk#1!pZs82j"!WW6"roF*0~> p](6lrr4/@qYp3Zrq?-t%L2tD!!N?&!WW?*#6F2\li$JTr;$3dr;HQqr;6EkrXnPemd:/W!!iQ0 !!!$##RLJArr*8qp\t!crqufrrr2$Z#Q"Ap!<<0&"RlC,"pt>4#6=f.!!3-1#6=;mr;6?equ$E/ ru_1UC6q$j$V5"UXc!s7ZH\ p]CBo"9JQ'rr2!YJ,~> p](6lrr4/@qYp3Zrq?-t%L2tD!!N?&!WW?*#6F2\li$JTr;$3dr;HQqr;6EkrXnPemd:/W!!iQ0 !!!$##RLJArr*8qp\t!crqufrrr2$Z#Q"Ap!<<0&"RlC,"pt>4#6=f.!!3-1#6=;mr;6?equ$E/ ru_1UC6q$j$V5"UXc!s7ZH\ p]CBo"9JQ'rr2!YJ,~> p](6lrr4/@qYp3Zrq?-t%L2tD!!N?&!WW?*#6F2\li$JTr;$3dr;HQqr;6EkrXnPemd:/W!!iQ0 !!!$##RLJArr*8qp\t!crqufrrr2$Z#Q"Ap!<<0&"RlC,"pt>4#6=f.!!3-1#6=;mr;6?equ$E/ ru_1UC6q$j$V5"UXc!s7ZH\ p]CBo"9JQ'rr2!YJ,~> nc'a-rq?6glLYf!!s/N3!"&f6!#,n5rVl]erq-6hrV$!`qu%W7q#1*[rquThrqQp8!!Ef;!<`E' $O-V(nGiLcoD\Xas8W&urTX=equ6Ns!sAZ-nGj@1!"&`,!!Wc:"U"f1$30l"r;6?equ$B.ru_78 oHF89!<!jr[I[Bs8MldrqH8S4rq5mLq!eLl rW!'&!!*#tjSs`~> nc'a-rq?6glLYf!!s/N3!"&f6!#,n5rVl]erq-6hrV$!`qu%W7q#1*[rquThrqQp8!!Ef;!<`E' $O-V(nGiLcoD\Xas8W&urTX=equ6Ns!sAZ-nGj@1!"&`,!!Wc:"U"f1$30l"r;6?equ$B.ru_78 oHF89!<!jr[I[Bs8MldrqH8S4rq5mLq!eLl rW!'&!!*#tjSs`~> nc'a-rq?6glLYf!!s/N3!"&f6!#,n5rVl]erq-6hrV$!`qu%W7q#1*[rquThrqQp8!!Ef;!<`E' $O-V(nGiLcoD\Xas8W&urTX=equ6Ns!sAZ-nGj@1!"&`,!!Wc:"U"f1$30l"r;6?equ$B.ru_78 oHF89!<!jr[I[Bs8MldrqH8S4rq5mLq!eLl rW!'&!!*#tjSs`~> p&G!i+8>^2p%7)J!!*-$!<<9'$jRsUnc/R[q#0LWrpfjbpAY$jrr2j;s82cmo)8R`r;Q6_-3=/P !Y#,0!=Sr2h#I9Ar;HEhrr<#urW)o]rs/H#rWE<*!Mi*"U+l/,@IRfjS/THq>C3jrWN3!rr)f;rs/)oq#9jUrVc`p/G&o6p\"OWnc/Oep\jmeq>0d? f[em-hoZ,s!>5;3!WN'!!WMoir;H0@U&,uV/rr;ru!W`9&! p&G!i+8>^2p%7)J!!*-$!<<9'$jRsUnc/R[q#0LWrpfjbpAY$jrr2j;s82cmo)8R`r;Q6_-3=/P !Y#,0!=Sr2h#I9Ar;HEhrr<#urW)o]rs/H#rWE<*!Mi*"U+l/,@IRfjS/THq>C3jrWN3!rr)f;rs/)oq#9jUrVc`p/G&o6p\"OWnc/Oep\jmeq>0d? f[em-hoZ,s!>5;3!WN'!!WMoir;H0@U&,uV/rr;ru!W`9&! p&G!i+8>^2p%7)J!!*-$!<<9'$jRsUnc/R[q#0LWrpfjbpAY$jrr2j;s82cmo)8R`r;Q6_-3=/P !Y#,0!=Sr2h#I9Ar;HEhrr<#urW)o]rs/H#rWE<*!Mi*"U+l/,@IRfjS/THq>C3jrWN3!rr)f;rs/)oq#9jUrVc`p/G&o6p\"OWnc/Oep\jmeq>0d? f[em-hoZ,s!>5;3!WN'!!WMoir;H0@U&,uV/rr;ru!W`9&! p](9mrr!u=rVuBd`!6SO#m1D4!sJ`i2ZN^Mrr2]kp\=U]rUTs^q>Mc?qYBRZqY^-br;ZQl83$YS !!36-!XJr2`VKB#qYp#lm6cqu-?crPAO6rZ1S* q>Ls#9rUp\O^boDJRdr;QZjq>C0`rVcZm`P0:0`qICQ"U+r8%0Qq7#lsi, #5e9%#5cC8nbW.[o).bP&,uV/rr;ru!X]#1#R\AZ`VICH`=E:Y"TSf1$bs[#`k;Kb!sAN&"9JQ' rr2!YJ,~> p](9mrr!u=rVuBd`!6SO#m1D4!sJ`i2ZN^Mrr2]kp\=U]rUTs^q>Mc?qYBRZqY^-br;ZQl83$YS !!36-!XJr2`VKB#qYp#lm6cqu-?crPAO6rZ1S* q>Ls#9rUp\O^boDJRdr;QZjq>C0`rVcZm`P0:0`qICQ"U+r8%0Qq7#lsi, #5e9%#5cC8nbW.[o).bP&,uV/rr;ru!X]#1#R\AZ`VICH`=E:Y"TSf1$bs[#`k;Kb!sAN&"9JQ' rr2!YJ,~> p](9mrr!u=rVuBd`!6SO#m1D4!sJ`i2ZN^Mrr2]kp\=U]rUTs^q>Mc?qYBRZqY^-br;ZQl83$YS !!36-!XJr2`VKB#qYp#lm6cqu-?crPAO6rZ1S* q>Ls#9rUp\O^boDJRdr;QZjq>C0`rVcZm`P0:0`qICQ"U+r8%0Qq7#lsi, #5e9%#5cC8nbW.[o).bP&,uV/rr;ru!X]#1#R\AZ`VICH`=E:Y"TSf1$bs[#`k;Kb!sAN&"9JQ' rr2!YJ,~> p\uW>r;6EjrqHHequR$%"p#&9#QOs/nb)_PrqcQkqYg9hr;60ar;ZfqrrUBfr:p3hq"sp_ rV$"\#6>)1"U>G;#6=eoq>:-equ$Els8W)_rs/K$r;ls"!!2Ti%fu_3"onl2!Wu?tp&FjbqYC*+ ruCt3rqu9]rqQ9_qY9UXq=jmar;?Egp\=R\qu-N6s!Ia@s8)WgrVcQjs8)]lp#WJs4!5"9!rrN, 7rb#uhYI*Jr;6/;!X&E%"9JQ' rr2!YJ,~> p\uW>r;6EjrqHHequR$%"p#&9#QOs/nb)_PrqcQkqYg9hr;60ar;ZfqrrUBfr:p3hq"sp_ rV$"\#6>)1"U>G;#6=eoq>:-equ$Els8W)_rs/K$r;ls"!!2Ti%fu_3"onl2!Wu?tp&FjbqYC*+ ruCt3rqu9]rqQ9_qY9UXq=jmar;?Egp\=R\qu-N6s!Ia@s8)WgrVcQjs8)]lp#WJs4!5"9!rrN, 7rb#uhYI*Jr;6/;!X&E%"9JQ' rr2!YJ,~> p\uW>r;6EjrqHHequR$%"p#&9#QOs/nb)_PrqcQkqYg9hr;60ar;ZfqrrUBfr:p3hq"sp_ rV$"\#6>)1"U>G;#6=eoq>:-equ$Els8W)_rs/K$r;ls"!!2Ti%fu_3"onl2!Wu?tp&FjbqYC*+ ruCt3rqu9]rqQ9_qY9UXq=jmar;?Egp\=R\qu-N6s!Ia@s8)WgrVcQjs8)]lp#WJs4!5"9!rrN, 7rb#uhYI*Jr;6/;!X&E%"9JQ' rr2!YJ,~> p\uW=qYC!crqZThQ3.Bt$O?e6%LHkErqc^Knrr2rtr?2%7s8W#rrU^$b q>9l!"9JQ."9AZ,!gNWQr;?0_qu-NnrrE&_rs/N&r;ls"!!2Qh%Klk6":YQOB`I_us8)Wkq>S51 "T%lkOd5p1%[E9:$a q>T0PQ<#"L$j6_8"=H*EdG![PqY^6eqt^6=s#9fGq![nSo)/KFPaIZ%P`c"L!!i`2$NU87#lOf+ "T\Z-$NU8*"U4i,"9&0#"8rAsp\Xa\p%[eO&,uV/rr;ru!WiB)"UY>3"8Mrm!=oG9$O?_5! p\uW=qYC!crqZThQ3.Bt$O?e6%LHkErqc^Knrr2rtr?2%7s8W#rrU^$b q>9l!"9JQ."9AZ,!gNWQr;?0_qu-NnrrE&_rs/N&r;ls"!!2Qh%Klk6":YQOB`I_us8)Wkq>S51 "T%lkOd5p1%[E9:$a q>T0PQ<#"L$j6_8"=H*EdG![PqY^6eqt^6=s#9fGq![nSo)/KFPaIZ%P`c"L!!i`2$NU87#lOf+ "T\Z-$NU8*"U4i,"9&0#"8rAsp\Xa\p%[eO&,uV/rr;ru!WiB)"UY>3"8Mrm!=oG9$O?_5! p\uW=qYC!crqZThQ3.Bt$O?e6%LHkErqc^Knrr2rtr?2%7s8W#rrU^$b q>9l!"9JQ."9AZ,!gNWQr;?0_qu-NnrrE&_rs/N&r;ls"!!2Qh%Klk6":YQOB`I_us8)Wkq>S51 "T%lkOd5p1%[E9:$a q>T0PQ<#"L$j6_8"=H*EdG![PqY^6eqt^6=s#9fGq![nSo)/KFPaIZ%P`c"L!!i`2$NU87#lOf+ "T\Z-$NU8*"U4i,"9&0#"8rAsp\Xa\p%[eO&,uV/rr;ru!WiB)"UY>3"8Mrm!=oG9$O?_5! q>VN8rVZQir;HTkrd+\O!=/Z/!sns]qYC$bs8W)ss8;lq"TS>ur;6Hmrr2rt"9/8ur;Q^9rVlcm rquckrVM6M!!3<)!WW?(JbJp:q"jpfrr2otrojC^rW<-%!!2fo!!N6#&-Mt5"T\`5!/^ULrV-6g qtmo'(\mq.!WW9%"p=u-!sAl7Gl.O9rVZNerVQWprn%2Mrr)isrql`qrX/]'rr)lrs8DcjrVl^; pA=a[ps>I\=u-3]"T\c->#pTgg]-mDqYg6err2cnrm:['q=aXTrd9'?"98W.#64u/!Wil4"p"l. !"/T+!=&T)#lt,0r.G+K! q>VN8rVZQir;HTkrd+\O!=/Z/!sns]qYC$bs8W)ss8;lq"TS>ur;6Hmrr2rt"9/8ur;Q^9rVlcm rquckrVM6M!!3<)!WW?(JbJp:q"jpfrr2otrojC^rW<-%!!2fo!!N6#&-Mt5"T\`5!/^ULrV-6g qtmo'(\mq.!WW9%"p=u-!sAl7Gl.O9rVZNerVQWprn%2Mrr)isrql`qrX/]'rr)lrs8DcjrVl^; pA=a[ps>I\=u-3]"T\c->#pTgg]-mDqYg6err2cnrm:['q=aXTrd9'?"98W.#64u/!Wil4"p"l. !"/T+!=&T)#lt,0r.G+K! q>VN8rVZQir;HTkrd+\O!=/Z/!sns]qYC$bs8W)ss8;lq"TS>ur;6Hmrr2rt"9/8ur;Q^9rVlcm rquckrVM6M!!3<)!WW?(JbJp:q"jpfrr2otrojC^rW<-%!!2fo!!N6#&-Mt5"T\`5!/^ULrV-6g qtmo'(\mq.!WW9%"p=u-!sAl7Gl.O9rVZNerVQWprn%2Mrr)isrql`qrX/]'rr)lrs8DcjrVl^; pA=a[ps>I\=u-3]"T\c->#pTgg]-mDqYg6err2cnrm:['q=aXTrd9'?"98W.#64u/!Wil4"p"l. !"/T+!=&T)#lt,0r.G+K! q>Uj%rVZTlrr2lmrW*#u!sf&7!!\n\r;-6bs8W)qs8Murrr<#urql^5rr;urr;-6bo`(0]!W`9& !!!$+qt^$aqYg?l!<23^"oeN%"98Mt!#5S9"U+l/!sAZ0"Tt.jqY^9gqu$El\GmBCrU^9s"U5)2 !C6cjOUq<-5m6o!X/QP2J^(MmeZnZrVlinr;G%C2uERQ q#:-l#QOl0"U+r1"p5/9":PD6"9Jl2AH`5>R[TY4S!3aJQi-serVZd!r;loqr;HTjr9=4brr<#t s8UmT!!3'!#lt)6!<`H*!;uiWs*t~> q>Uj%rVZTlrr2lmrW*#u!sf&7!!\n\r;-6bs8W)qs8Murrr<#urql^5rr;urr;-6bo`(0]!W`9& !!!$+qt^$aqYg?l!<23^"oeN%"98Mt!#5S9"U+l/!sAZ0"Tt.jqY^9gqu$El\GmBCrU^9s"U5)2 !C6cjOUq<-5m6o!X/QP2J^(MmeZnZrVlinr;G%C2uERQ q#:-l#QOl0"U+r1"p5/9":PD6"9Jl2AH`5>R[TY4S!3aJQi-serVZd!r;loqr;HTjr9=4brr<#t s8UmT!!3'!#lt)6!<`H*!;uiWs*t~> q>Uj%rVZTlrr2lmrW*#u!sf&7!!\n\r;-6bs8W)qs8Murrr<#urql^5rr;urr;-6bo`(0]!W`9& !!!$+qt^$aqYg?l!<23^"oeN%"98Mt!#5S9"U+l/!sAZ0"Tt.jqY^9gqu$El\GmBCrU^9s"U5)2 !C6cjOUq<-5m6o!X/QP2J^(MmeZnZrVlinr;G%C2uERQ q#:-l#QOl0"U+r1"p5/9":PD6"9Jl2AH`5>R[TY4S!3aJQi-serVZd!r;loqr;HTjr9=4brr<#t s8UmT!!3'!#lt)6!<`H*!;uiWs*t~> q#:?nrr!?+rVZQk!"8i1! Y7:mE9`=_^q=sits8Dopr#be5rVQ9]qu?T>S;(&k!"&]."r&[bO1sTQrqZQmr;G%C2uEXJqYp-k !s8`0!s&T7!X/]2!!W`0"0f/8['-^>s82]lo_SLcr;?WsrVZ`tr;lorrVlfnrTX=crr<#ts8UmT !!3'!!!3'#rrE3(!<<#Ys*t~> q#:?nrr!?+rVZQk!"8i1! Y7:mE9`=_^q=sits8Dopr#be5rVQ9]qu?T>S;(&k!"&]."r&[bO1sTQrqZQmr;G%C2uEXJqYp-k !s8`0!s&T7!X/]2!!W`0"0f/8['-^>s82]lo_SLcr;?WsrVZ`tr;lorrVlfnrTX=crr<#ts8UmT !!3'!!!3'#rrE3(!<<#Ys*t~> q#:?nrr!?+rVZQk!"8i1! Y7:mE9`=_^q=sits8Dopr#be5rVQ9]qu?T>S;(&k!"&]."r&[bO1sTQrqZQmr;G%C2uEXJqYp-k !s8`0!s&T7!X/]2!!W`0"0f/8['-^>s82]lo_SLcr;?WsrVZ`tr;lorrVlfnrTX=crr<#ts8UmT !!3'!!!3'#rrE3(!<<#Ys*t~> q#:?mrVZ]m')+Qi!s/K'#7(>0rU]mas82`nrVllsq>^Hns8W#rq>V90r;6Bhr:KpcrW6%0HV7#mUIRa2uTJb5VD=oCDkTs8D`lqt9OVrquiurVZ`tr q#:?mrVZ]m')+Qi!s/K'#7(>0rU]mas82`nrVllsq>^Hns8W#rq>V90r;6Bhr:KpcrW6%0HV7#mUIRa2uTJb5VD=oCDkTs8D`lqt9OVrquiurVZ`tr q#:?mrVZ]m')+Qi!s/K'#7(>0rU]mas82`nrVllsq>^Hns8W#rq>V90r;6Bhr:KpcrW6%0HV7#mUIRa2uTJb5VD=oCDkTs8D`lqt9OVrquiurVZ`tr q#:?mrVZ]m')hnB!"TJ@!!(sWp\asfqYU3irVllsrr;usrVlrurVcZnqu6]qr;QR-r;HWdqt9UA "pt>3!s&B2pAY'frVZZqroj@crr2s$!!;lp&Hr.<#QY)/!TNnRmf!(Wrr2lor42hAq#:6js8Dri r;QNlqu$-u#m^(qs8N#.s82fprVc^5r:osTs8)]lm-E7m!!fqXj[SrquBbqu-9er:g3aqYU6grr)ltrr)ltrW<-!rr<#skl1hcs8W)us4mYT !WE'*! q#:?mrVZ]m')hnB!"TJ@!!(sWp\asfqYU3irVllsrr;usrVlrurVcZnqu6]qr;QR-r;HWdqt9UA "pt>3!s&B2pAY'frVZZqroj@crr2s$!!;lp&Hr.<#QY)/!TNnRmf!(Wrr2lor42hAq#:6js8Dri r;QNlqu$-u#m^(qs8N#.s82fprVc^5r:osTs8)]lm-E7m!!fqXj[SrquBbqu-9er:g3aqYU6grr)ltrr)ltrW<-!rr<#skl1hcs8W)us4mYT !WE'*! q#:?mrVZ]m')hnB!"TJ@!!(sWp\asfqYU3irVllsrr;usrVlrurVcZnqu6]qr;QR-r;HWdqt9UA "pt>3!s&B2pAY'frVZZqroj@crr2s$!!;lp&Hr.<#QY)/!TNnRmf!(Wrr2lor42hAq#:6js8Dri r;QNlqu$-u#m^(qs8N#.s82fprVc^5r:osTs8)]lm-E7m!!fqXj[SrquBbqu-9er:g3aqYU6grr)ltrr)ltrW<-!rr<#skl1hcs8W)us4mYT !WE'*! q#:?nrr!H.rVQd-!!rf3!!rZ)r;6KfrVl]prr)j$rr;urr;6Bir;QQrrVuosrql`qrr)d/rr;uj rq?6d!!iW,'*&"7s8Dfmr;Qcrkl1hcrr<0%!r)cq!>#53"9ec.oBuGNr:T^]s8N#srVuf+rtbV0 o`"FYoD\abrr;lerpBai"8Vugpp:#"rr;d7qY^ q#:?nrr!H.rVQd-!!rf3!!rZ)r;6KfrVl]prr)j$rr;urr;6Bir;QQrrVuosrql`qrr)d/rr;uj rq?6d!!iW,'*&"7s8Dfmr;Qcrkl1hcrr<0%!r)cq!>#53"9ec.oBuGNr:T^]s8N#srVuf+rtbV0 o`"FYoD\abrr;lerpBai"8Vugpp:#"rr;d7qY^ q#:?nrr!H.rVQd-!!rf3!!rZ)r;6KfrVl]prr)j$rr;urr;6Bir;QQrrVuosrql`qrr)d/rr;uj rq?6d!!iW,'*&"7s8Dfmr;Qcrkl1hcrr<0%!r)cq!>#53"9ec.oBuGNr:T^]s8N#srVuf+rtbV0 o`"FYoD\abrr;lerpBai"8Vugpp:#"rr;d7qY^ q#;-/rVc`qs8E$(!X/Q("U+GrmJd+YrqQ9g&H;V)qYU0fqtpUB_rTF4ZrVu?drr2Qgs8Drqqu6Wjrr<'!rr<'!!<2rqs8W&]rrrE%s8N&u h#IEUrW!3)!X]&2!<3#Zj8XW~> q#;-/rVc`qs8E$(!X/Q("U+GrmJd+YrqQ9g&H;V)qYU0fqtpUB_rTF4ZrVu?drr2Qgs8Drqqu6Wjrr<'!rr<'!!<2rqs8W&]rrrE%s8N&u h#IEUrW!3)!X]&2!<3#Zj8XW~> q#;-/rVc`qs8E$(!X/Q("U+GrmJd+YrqQ9g&H;V)qYU0fqtpUB_rTF4ZrVu?drr2Qgs8Drqqu6Wjrr<'!rr<'!!<2rqs8W&]rrrE%s8N&u h#IEUrW!3)!X]&2!<3#Zj8XW~> q#;-.qYgEmr;H[%!"Ao0#qZ)NrqcQmpAXmfrr)oprVR$%qu?WnqtKd^rVl`ps8;rsqu?]m%fQ:o 2uip['`\77dein>r;Qcrl2Mh(rVlj#!!*'#!WiH*!s&H*)?9afrr2`iqYpEjqu3f!(B4(.qZ$El rr2iop\b$b&HE.4qYgB]rr2rts8LCFr;QWo!<2lq-NU0hs8;onqu?WprVHQirr2rt!<<*! !!iN(rr)fps8D6_rVcp!r;Q`P!!!*"!!r]-!!iT]o`"[cjSs`~> q#;-.qYgEmr;H[%!"Ao0#qZ)NrqcQmpAXmfrr)oprVR$%qu?WnqtKd^rVl`ps8;rsqu?]m%fQ:o 2uip['`\77dein>r;Qcrl2Mh(rVlj#!!*'#!WiH*!s&H*)?9afrr2`iqYpEjqu3f!(B4(.qZ$El rr2iop\b$b&HE.4qYgB]rr2rts8LCFr;QWo!<2lq-NU0hs8;onqu?WprVHQirr2rt!<<*! !!iN(rr)fps8D6_rVcp!r;Q`P!!!*"!!r]-!!iT]o`"[cjSs`~> q#;-.qYgEmr;H[%!"Ao0#qZ)NrqcQmpAXmfrr)oprVR$%qu?WnqtKd^rVl`ps8;rsqu?]m%fQ:o 2uip['`\77dein>r;Qcrl2Mh(rVlj#!!*'#!WiH*!s&H*)?9afrr2`iqYpEjqu3f!(B4(.qZ$El rr2iop\b$b&HE.4qYgB]rr2rts8LCFr;QWo!<2lq-NU0hs8;onqu?WprVHQirr2rt!<<*! !!iN(rr)fps8D6_rVcp!r;Q`P!!!*"!!r]-!!iT]o`"[cjSs`~> q>^Kn&G5u$qt@Z'!WrN+$3C2)rVlfr!WN&nrt>>0rqZQkr;-9[rV#g]q>C*erUg+%rV$9`qu6Hp !!*'#!WiB"rr1sX(]OC5!!E9&!!*0,#mCS8!s]#17/HfVrLs6,rr;olqYg<`(B=a5o_e[bqtg6j s8N#Es8W#sr q>^Kn&G5u$qt@Z'!WrN+$3C2)rVlfr!WN&nrt>>0rqZQkr;-9[rV#g]q>C*erUg+%rV$9`qu6Hp !!*'#!WiB"rr1sX(]OC5!!E9&!!*0,#mCS8!s]#17/HfVrLs6,rr;olqYg<`(B=a5o_e[bqtg6j s8N#Es8W#sr q>^Kn&G5u$qt@Z'!WrN+$3C2)rVlfr!WN&nrt>>0rqZQkr;-9[rV#g]q>C*erUg+%rV$9`qu6Hp !!*'#!WiB"rr1sX(]OC5!!E9&!!*0,#mCS8!s]#17/HfVrLs6,rr;olqYg<`(B=a5o_e[bqtg6j s8N#Es8W#sr q>V**rr;loq#:O#!s]):!sST!r;H6e&cD\)TqJ0TS>)\PnG<"Wqu$HlrrE&ort5,*rV-9dp&b9s !WrT/!rr9!ir9emrr<0%!<ke9lo_bE_(B4@5qu-Qppfdn)qt^$aqYU0fs8W)t bl@\A0E(eIs8Doqs8DcirVcWkqt^*VdC#-;+U\SZ)\k8+N0`]&r:e;N!ZR*rs8Duorm:]Err;rr r:0dUs8N*!s8N'(rrE*!rVccqlMpn`#Q+H!p\=^f"Q9@l#QP#3#6P!5AG#`tqYpHcjSs`~> q>V**rr;loq#:O#!s]):!sST!r;H6e&cD\)TqJ0TS>)\PnG<"Wqu$HlrrE&ort5,*rV-9dp&b9s !WrT/!rr9!ir9emrr<0%!<ke9lo_bE_(B4@5qu-Qppfdn)qt^$aqYU0fs8W)t bl@\A0E(eIs8Doqs8DcirVcWkqt^*VdC#-;+U\SZ)\k8+N0`]&r:e;N!ZR*rs8Duorm:]Err;rr r:0dUs8N*!s8N'(rrE*!rVccqlMpn`#Q+H!p\=^f"Q9@l#QP#3#6P!5AG#`tqYpHcjSs`~> q>V**rr;loq#:O#!s]):!sST!r;H6e&cD\)TqJ0TS>)\PnG<"Wqu$HlrrE&ort5,*rV-9dp&b9s !WrT/!rr9!ir9emrr<0%!<ke9lo_bE_(B4@5qu-Qppfdn)qt^$aqYU0fs8W)t bl@\A0E(eIs8Doqs8DcirVcWkqt^*VdC#-;+U\SZ)\k8+N0`]&r:e;N!ZR*rs8Duorm:]Err;rr r:0dUs8N*!s8N'(rrE*!rVccqlMpn`#Q+H!p\=^f"Q9@l#QP#3#6P!5AG#`tqYpHcjSs`~> q>V*+rr)Nio_f!q#QbD9!!`/or;H6e&c;V%#6=o,#6b.uqY0d^rVc`ps8W)ort55+r;??cncJjo !1U$q"agcrquZks8W)t d/WtA0`D%NrVZTms8DflqYU*ZnEnu'=#;-/!D'0(o_84Tq")ZH"W<@!s7lWmrr11Brr)or nc&%XrrE*!rr<<(!<<)trVul^s8W'%rVHB`qYf;n%ruc=FE2AEq>L*[s7ZEdr8dm.~> q>V*+rr)Nio_f!q#QbD9!!`/or;H6e&c;V%#6=o,#6b.uqY0d^rVc`ps8W)ort55+r;??cncJjo !1U$q"agcrquZks8W)t d/WtA0`D%NrVZTms8DflqYU*ZnEnu'=#;-/!D'0(o_84Tq")ZH"W<@!s7lWmrr11Brr)or nc&%XrrE*!rr<<(!<<)trVul^s8W'%rVHB`qYf;n%ruc=FE2AEq>L*[s7ZEdr8dm.~> q>V*+rr)Nio_f!q#QbD9!!`/or;H6e&c;V%#6=o,#6b.uqY0d^rVc`ps8W)ort55+r;??cncJjo !1U$q"agcrquZks8W)t d/WtA0`D%NrVZTms8DflqYU*ZnEnu'=#;-/!D'0(o_84Tq")ZH"W<@!s7lWmrr11Brr)or nc&%XrrE*!rr<<(!<<)trVul^s8W'%rVHB`qYf;n%ruc=FE2AEq>L*[s7ZEdr8dm.~> q>V*+r;H?brqH]u"Tno9!"&N"rVlfrs8Mio&Gl;(q$I-+"9Ac0qYBj`qu6Nns8Mios8(!cU&Y/l'`Iq+rVZKf"p4c$r:g6ir;HZq rr1:ErVlcq0E(bDrr;onrVHQaqt/"6O^KdK!sAoS0i4Lgo(DhTp\=USh38QS*K9mqo_eahrlb?A ro!hV!<<*!!!iN(s8W&rs8M<`s8E8sr;- q>V*+r;H?brqH]u"Tno9!"&N"rVlfrs8Mio&Gl;(q$I-+"9Ac0qYBj`qu6Nns8Mios8(!cU&Y/l'`Iq+rVZKf"p4c$r:g6ir;HZq rr1:ErVlcq0E(bDrr;onrVHQaqt/"6O^KdK!sAoS0i4Lgo(DhTp\=USh38QS*K9mqo_eahrlb?A ro!hV!<<*!!!iN(s8W&rs8M<`s8E8sr;- q>V*+r;H?brqH]u"Tno9!"&N"rVlfrs8Mio&Gl;(q$I-+"9Ac0qYBj`qu6Nns8Mios8(!cU&Y/l'`Iq+rVZKf"p4c$r:g6ir;HZq rr1:ErVlcq0E(bDrr;onrVHQaqt/"6O^KdK!sAoS0i4Lgo(DhTp\=USh38QS*K9mqo_eahrlb?A ro!hV!<<*!!!iN(s8W&rs8M<`s8E8sr;- q#:s$s8DccqZm3'"p5A:3lrqZR(qYpNgqtU0h !!3-$!WiE%ro3qnrr2s%!!*'"!=Au=T<@n[rqH-`qu-B=s7uZGrrN,trqm<'quHq(p%S1Nrr)fq s8N#Es8W)trA+C!Gr=8]'qt0pcqYU$^qt'^[qr@^,~> q#:s$s8DccqZm3'"p5A:3lrqZR(qYpNgqtU0h !!3-$!WiE%ro3qnrr2s%!!*'"!=Au=T<@n[rqH-`qu-B=s7uZGrrN,trqm<'quHq(p%S1Nrr)fq s8N#Es8W)trA+C!Gr=8]'qt0pcqYU$^qt'^[qr@^,~> q#:s$s8DccqZm3'"p5A:3lrqZR(qYpNgqtU0h !!3-$!WiE%ro3qnrr2s%!!*'"!=Au=T<@n[rqH-`qu-B=s7uZGrrN,trqm<'quHq(p%S1Nrr)fq s8N#Es8W)trA+C!Gr=8]'qt0pcqYU$^qt'^[qr@^,~> q>V*(rVc?eq>UNs!s/`1!PJC/rVlfr!WN&nrt"r(qsY!q!X\r1!rDlnrVZ3c&cMG$qt^9kr;Zm! !!33&s8N#Xrtk\5rr<3&!WW3%#m%g=qu-Ebs7cKjr;G%Cq>K"H(B4:2rr)cmqtCBt!W2BboDedf s8W)td/Q$&r;?Hgq=saarr)fprV,Wm\TBVI$OQn9+@^4 q>V*(rVc?eq>UNs!s/`1!PJC/rVlfr!WN&nrt"r(qsY!q!X\r1!rDlnrVZ3c&cMG$qt^9kr;Zm! !!33&s8N#Xrtk\5rr<3&!WW3%#m%g=qu-Ebs7cKjr;G%Cq>K"H(B4:2rr)cmqtCBt!W2BboDedf s8W)td/Q$&r;?Hgq=saarr)fprV,Wm\TBVI$OQn9+@^4 q>V*(rVc?eq>UNs!s/`1!PJC/rVlfr!WN&nrt"r(qsY!q!X\r1!rDlnrVZ3c&cMG$qt^9kr;Zm! !!33&s8N#Xrtk\5rr<3&!WW3%#m%g=qu-Ebs7cKjr;G%Cq>K"H(B4:2rr)cmqtCBt!W2BboDedf s8W)td/Q$&r;?Hgq=saarr)fprV,Wm\TBVI$OQn9+@^4 q>V*,q>U3gr:pO#!!!0&!W)9^r;HTo!<2fos8 q>V*,q>U3gr:pO#!!!0&!W)9^r;HTo!<2fos8 q>V*,q>U3gr:pO#!!!0&!W)9^r;HTo!<2fos8 q#:Ens8N#r%fcV1!=]#1rq-*crr;urrV$3uq#:="!<`K)!WE&srVlEg!ri6!rr30$rrE*"!r`0& rVZWnroO1[r=/c.!=8`:!:&tEp&=CZrr)otrVkdUrr2rtrr*H+rVZ]ls8VZhqu$?jrUp-Bs8N#t s8W)urs\u/!<<#prr;uss8W)te,MK.rVc`brr2K_rq63grj]gr)[luQ"TfN-BpR3:qYp9drqZB8 `em%j#QtG q#:Ens8N#r%fcV1!=]#1rq-*crr;urrV$3uq#:="!<`K)!WE&srVlEg!ri6!rr30$rrE*"!r`0& rVZWnroO1[r=/c.!=8`:!:&tEp&=CZrr)otrVkdUrr2rtrr*H+rVZ]ls8VZhqu$?jrUp-Bs8N#t s8W)urs\u/!<<#prr;uss8W)te,MK.rVc`brr2K_rq63grj]gr)[luQ"TfN-BpR3:qYp9drqZB8 `em%j#QtG q#:Ens8N#r%fcV1!=]#1rq-*crr;urrV$3uq#:="!<`K)!WE&srVlEg!ri6!rr30$rrE*"!r`0& rVZWnroO1[r=/c.!=8`:!:&tEp&=CZrr)otrVkdUrr2rtrr*H+rVZ]ls8VZhqu$?jrUp-Bs8N#t s8W)urs\u/!<<#prr;uss8W)te,MK.rVc`brr2K_rq63grj]gr)[luQ"TfN-BpR3:qYp9drqZB8 `em%j#QtG q#:Eos8W)t%fcV1$igD=iV<'=p\4CSp@e4kq!JRl!W`E(!ri5us8W)toDeghs8W)t#QXo*!WW3$ rVl]o!<23^%eKQ'!#Q7Orq>RTo_8@]g&M*OrVulr%fcP)rU0:VqYpU3^n(XI0,ln&I$N_1ZJ\C+Cr;?Hjs8Mro rMT\q!<<*!!!iN(s8W&rs8L+>#6+2nrr;lnrr*Amp&=m[q="@n!"Ar)roF*0~> q#:Eos8W)t%fcV1$igD=iV<'=p\4CSp@e4kq!JRl!W`E(!ri5us8W)toDeghs8W)t#QXo*!WW3$ rVl]o!<23^%eKQ'!#Q7Orq>RTo_8@]g&M*OrVulr%fcP)rU0:VqYpU3^n(XI0,ln&I$N_1ZJ\C+Cr;?Hjs8Mro rMT\q!<<*!!!iN(s8W&rs8L+>#6+2nrr;lnrr*Amp&=m[q="@n!"Ar)roF*0~> q#:Eos8W)t%fcV1$igD=iV<'=p\4CSp@e4kq!JRl!W`E(!ri5us8W)toDeghs8W)t#QXo*!WW3$ rVl]o!<23^%eKQ'!#Q7Orq>RTo_8@]g&M*OrVulr%fcP)rU0:VqYpU3^n(XI0,ln&I$N_1ZJ\C+Cr;?Hjs8Mro rMT\q!<<*!!!iN(s8W&rs8L+>#6+2nrr;lnrr*Amp&=m[q="@n!"Ar)roF*0~> q#:Eos8W)trrlrrE*!rr<<( !<<)trVul>!< q#:Eos8W)trrlrrE*!rr<<( !<<)trVul>!< q#:Eos8W)trrlrrE*!rr<<( !<<)trVul>!< q#:Eos8W)t#QP#/"T\`,!<`6#rW)]o&.8L=#R:A9"98N&s8Dutrr26`rW!'&!!*3#rr2!Y&,#hk "Z8XAq=aR\qY^?hr7CuIrr q#:Eos8W)t#QP#/"T\`,!<`6#rW)]o&.8L=#R:A9"98N&s8Dutrr26`rW!'&!!*3#rr2!Y&,#hk "Z8XAq=aR\qY^?hr7CuIrr q#:Eos8W)t#QP#/"T\`,!<`6#rW)]o&.8L=#R:A9"98N&s8Dutrr26`rW!'&!!*3#rr2!Y&,#hk "Z8XAq=aR\qY^?hr7CuIrr q#:Eos8W)trr<6)"ptD:#7U,&&Hi(7!rrH-!sAT*rr;rss8N#hs7uZn!!iW+!X&AurVc`Wrt#)! rD*1dq>9s]pA=O\s7Y(E'`S(0rr<#ms7ZBds82imVucttr:\J:"TeZ)s8Dl=rrE&tr@e$A\m6$Sr;HKbs829Yr; q#:Eos8W)trr<6)"ptD:#7U,&&Hi(7!rrH-!sAT*rr;rss8N#hs7uZn!!iW+!X&AurVc`Wrt#)! rD*1dq>9s]pA=O\s7Y(E'`S(0rr<#ms7ZBds82imVucttr:\J:"TeZ)s8Dl=rrE&tr@e$A\m6$Sr;HKbs829Yr; q#:Eos8W)trr<6)"ptD:#7U,&&Hi(7!rrH-!sAT*rr;rss8N#hs7uZn!!iW+!X&AurVc`Wrt#)! rD*1dq>9s]pA=O\s7Y(E'`S(0rr<#ms7ZBds82imVucttr:\J:"TeZ)s8Dl=rrE&tr@e$A\m6$Sr;HKbs829Yr; q#:Eos8W)trr<<,":,/9"on`+o)K@'"p>&2!sAl4!!<0"rVuosrq$0irr;rrquHWn!=/`,!X&>t rVc`Wrsnr)rV-$`nbVkSq>^9ern%/brr)cmrVlios8Vocs7VhI"9ef(q=W)6"TeZ)s8Dl=s#'fS rV?EeKc'pn-nT(mfA$/spAO^]o%q?^=>L]o"V);"7u!nop&"^_s8VfmrVZZpr;Q`qU]:>os8W*! #QFf(s8Dorrl>$Squ? q#:Eos8W)trr<<,":,/9"on`+o)K@'"p>&2!sAl4!!<0"rVuosrq$0irr;rrquHWn!=/`,!X&>t rVc`Wrsnr)rV-$`nbVkSq>^9ern%/brr)cmrVlios8Vocs7VhI"9ef(q=W)6"TeZ)s8Dl=s#'fS rV?EeKc'pn-nT(mfA$/spAO^]o%q?^=>L]o"V);"7u!nop&"^_s8VfmrVZZpr;Q`qU]:>os8W*! #QFf(s8Dorrl>$Squ? q#:Eos8W)trr<<,":,/9"on`+o)K@'"p>&2!sAl4!!<0"rVuosrq$0irr;rrquHWn!=/`,!X&>t rVc`Wrsnr)rV-$`nbVkSq>^9ern%/brr)cmrVlios8Vocs7VhI"9ef(q=W)6"TeZ)s8Dl=s#'fS rV?EeKc'pn-nT(mfA$/spAO^]o%q?^=>L]o"V);"7u!nop&"^_s8VfmrVZZpr;Q`qU]:>os8W*! #QFf(s8Dorrl>$Squ? q#:Eos8W)trW!0/!"8o4!X&Sq!"]>AnF!WN&rr"8o,q>U-fqYbpE!X8W-q>U6id/O7N!!3,ur6YKD rr)lsr\jZMrJ2Ks%XP,-rUp$`o_eCG_m"A].KT_S!$YHdS\Oggqtp*aqu?QhrVZQlqu?Wos8W)s rhoer!<<*!!!iN(s8W&rs8L(=(A\"*s7Q; q#:Eos8W)trW!0/!"8o4!X&Sq!"]>AnF!WN&rr"8o,q>U-fqYbpE!X8W-q>U6id/O7N!!3,ur6YKD rr)lsr\jZMrJ2Ks%XP,-rUp$`o_eCG_m"A].KT_S!$YHdS\Oggqtp*aqu?QhrVZQlqu?Wos8W)s rhoer!<<*!!!iN(s8W&rs8L(=(A\"*s7Q; q#:Eos8W)trW!0/!"8o4!X&Sq!"]>AnF!WN&rr"8o,q>U-fqYbpE!X8W-q>U6id/O7N!!3,ur6YKD rr)lsr\jZMrJ2Ks%XP,-rUp$`o_eCG_m"A].KT_S!$YHdS\Oggqtp*aqu?QhrVZQlqu?Wos8W)s rhoer!<<*!!!iN(s8W&rs8L(=(A\"*s7Q; q#:Eos8W)t#lju+#m1> q#:Eos8W)t#lju+#m1> q#:Eos8W)t#lju+#m1> q#:j&s8W)srW!'$":tS:!!<-"r;lZn&Hi1>#m:;3!<<*+r:U$dq>UBbrt>>0r;6BhrVd!%!=]D> $248orr)isriuJ:r:^*`r:U$]r;$:e:C.@1!!*'#rr17D"TeZ)s8Dl+r:U!bq>C'gs8K2$rr*]2p\k*fp\Ojg!!*'!!!*$!s8W&rs8LIHs8F,? p&=mdn,*%]o_ne_=9AX/!XJc.!V>^;Ps*t~> q#:j&s8W)srW!'$":tS:!!<-"r;lZn&Hi1>#m:;3!<<*+r:U$dq>UBbrt>>0r;6BhrVd!%!=]D> $248orr)isriuJ:r:^*`r:U$]r;$:e:C.@1!!*'#rr17D"TeZ)s8Dl+r:U!bq>C'gs8K2$rr*]2p\k*fp\Ojg!!*'!!!*$!s8W&rs8LIHs8F,? p&=mdn,*%]o_ne_=9AX/!XJc.!V>^;Ps*t~> q#:j&s8W)srW!'$":tS:!!<-"r;lZn&Hi1>#m:;3!<<*+r:U$dq>UBbrt>>0r;6BhrVd!%!=]D> $248orr)isriuJ:r:^*`r:U$]r;$:e:C.@1!!*'#rr17D"TeZ)s8Dl+r:U!bq>C'gs8K2$rr*]2p\k*fp\Ojg!!*'!!!*$!s8W&rs8LIHs8F,? p&=mdn,*%]o_ne_=9AX/!XJc.!V>^;Ps*t~> q#:p(s8W&rrVus)$3UV7a2,d8o>_Haa1KFu!s])=!!`)ns7Q?irpp'irqucm%/g(:a25^4a2IiP rVlcq!<08''E7^trV,dTr;QFL!s]&5$31),!WN)ErriH(!WW,rb5WXarVZZnKcU:"hXg]n_R1U8 'a"IE%l%.;hW*hjrr;lpqt^3ds8N#(s8Drrr>,#"s76-dr;HWq!<<'!!<3'!s8DorrmLiGrZ:t7 q>L0Ts7?+H3X>cn!!*?,!!WE'!t585`l.cLrT+!/~> q#:p(s8W&rrVus)$3UV7a2,d8o>_Haa1KFu!s])=!!`)ns7Q?irpp'irqucm%/g(:a25^4a2IiP rVlcq!<08''E7^trV,dTr;QFL!s]&5$31),!WN)ErriH(!WW,rb5WXarVZZnKcU:"hXg]n_R1U8 'a"IE%l%.;hW*hjrr;lpqt^3ds8N#(s8Drrr>,#"s76-dr;HWq!<<'!!<3'!s8DorrmLiGrZ:t7 q>L0Ts7?+H3X>cn!!*?,!!WE'!t585`l.cLrT+!/~> q#:p(s8W&rrVus)$3UV7a2,d8o>_Haa1KFu!s])=!!`)ns7Q?irpp'irqucm%/g(:a25^4a2IiP rVlcq!<08''E7^trV,dTr;QFL!s]&5$31),!WN)ErriH(!WW,rb5WXarVZZnKcU:"hXg]n_R1U8 'a"IE%l%.;hW*hjrr;lpqt^3ds8N#(s8Drrr>,#"s76-dr;HWq!<<'!!<3'!s8DorrmLiGrZ:t7 q>L0Ts7?+H3X>cn!!*?,!!WE'!t585`l.cLrT+!/~> q#;$+s8W&rrW*-&"oo"as8MrorVc`hrVuU&rTE)@!"f53"oA&opAb-ko)Aair;QTnr!N5rpAOdT rr)cnriH,5q>U!RrVHKepa?7K!WW?)!!*'#rr17D"TeZ)s8DlU3ir;O,(rr2oq(]=72qY^B_r;HWq!<<'!!<3'!s8DorrmLiHrZCk6q YU9XqstgM"U>8>!s/H+!snr-!XAb_hu! q#;$+s8W&rrW*-&"oo"as8MrorVc`hrVuU&rTE)@!"f53"oA&opAb-ko)Aair;QTnr!N5rpAOdT rr)cnriH,5q>U!RrVHKepa?7K!WW?)!!*'#rr17D"TeZ)s8DlU3ir;O,(rr2oq(]=72qY^B_r;HWq!<<'!!<3'!s8DorrmLiHrZCk6q YU9XqstgM"U>8>!s/H+!snr-!XAb_hu! q#;$+s8W&rrW*-&"oo"as8MrorVc`hrVuU&rTE)@!"f53"oA&opAb-ko)Aair;QTnr!N5rpAOdT rr)cnriH,5q>U!RrVHKepa?7K!WW?)!!*'#rr17D"TeZ)s8DlU3ir;O,(rr2oq(]=72qY^B_r;HWq!<<'!!<3'!s8DorrmLiHrZCk6q YU9XqstgM"U>8>!s/H+!snr-!XAb_hu! q#:j's8W&rrrE6)"p"DsqXj7U&,?/%m0!G)!W`5nrr2forpp'nrr)clqu$BkrW`E%r;Z'\ri?&4 rq??hqu$!l#6G85$Od%:!!*'#rr17D"TeZ)s8Dl^'c\,ZF+rr!Z2q!ISMqYpK`rr<'!rr<'!!<<)trVulFs8W'?q>^Tp_jSs`~> q#:j's8W&rrrE6)"p"DsqXj7U&,?/%m0!G)!W`5nrr2forpp'nrr)clqu$BkrW`E%r;Z'\ri?&4 rq??hqu$!l#6G85$Od%:!!*'#rr17D"TeZ)s8Dl^'c\,ZF+rr!Z2q!ISMqYpK`rr<'!rr<'!!<<)trVulFs8W'?q>^Tp_jSs`~> q#:j's8W&rrrE6)"p"DsqXj7U&,?/%m0!G)!W`5nrr2forpp'nrr)clqu$BkrW`E%r;Z'\ri?&4 rq??hqu$!l#6G85$Od%:!!*'#rr17D"TeZ)s8Dl^'c\,ZF+rr!Z2q!ISMqYpK`rr<'!rr<'!!<<)trVulFs8W'?q>^Tp_jSs`~> q#;',rr)cmrW*$"&cVdss7$!crr2rtp\kZqrV?Bkr;I6-!s/?!s7ZHknc/Xgs8Dus#QOSsqu-Kj riuM!rXJT"oD\^U!8/q>C-Ts8N'!s8N'!rrE*!rVccqdf9@H+8Ys6 khcLD#mLJ3"p>)7!!*E,#nR[Iq>U6drpfd_qrId-~> q#;',rr)cmrW*$"&cVdss7$!crr2rtp\kZqrV?Bkr;I6-!s/?!s7ZHknc/Xgs8Dus#QOSsqu-Kj riuM!rXJT"oD\^U!8/q>C-Ts8N'!s8N'!rrE*!rVccqdf9@H+8Ys6 khcLD#mLJ3"p>)7!!*E,#nR[Iq>U6drpfd_qrId-~> q#;',rr)cmrW*$"&cVdss7$!crr2rtp\kZqrV?Bkr;I6-!s/?!s7ZHknc/Xgs8Dus#QOSsqu-Kj riuM!rXJT"oD\^U!8/q>C-Ts8N'!s8N'!rrE*!rVccqdf9@H+8Ys6 khcLD#mLJ3"p>)7!!*E,#nR[Iq>U6drpfd_qrId-~> q#;'+rVZNhr;ZsKrq?0WrVuiprr2rtpAPWqrVQW`r;/)H'_M8$q>1*ili.4hrVl`ls7uGps7cL) qUWpl$3150"T\Z)#QOi*!!3)uci4.M!!3,ur6#$Yrr)`gpPB^m!!!HA2HPM*lL4]Lr;-BkqY'dc rr)rrq=t!crr)forji%/qYp@1r;HTnqXsj^rpK^8rr<'!rr<'!!<<)trVulFs8W'%qXrDB"U"`( ('t!F"98H,!"(,.q>U3hq#:'\rqZKijSs`~> q#;'+rVZNhr;ZsKrq?0WrVuiprr2rtpAPWqrVQW`r;/)H'_M8$q>1*ili.4hrVl`ls7uGps7cL) qUWpl$3150"T\Z)#QOi*!!3)uci4.M!!3,ur6#$Yrr)`gpPB^m!!!HA2HPM*lL4]Lr;-BkqY'dc rr)rrq=t!crr)forji%/qYp@1r;HTnqXsj^rpK^8rr<'!rr<'!!<<)trVulFs8W'%qXrDB"U"`( ('t!F"98H,!"(,.q>U3hq#:'\rqZKijSs`~> q#;'+rVZNhr;ZsKrq?0WrVuiprr2rtpAPWqrVQW`r;/)H'_M8$q>1*ili.4hrVl`ls7uGps7cL) qUWpl$3150"T\Z)#QOi*!!3)uci4.M!!3,ur6#$Yrr)`gpPB^m!!!HA2HPM*lL4]Lr;-BkqY'dc rr)rrq=t!crr)forji%/qYp@1r;HTnqXsj^rpK^8rr<'!rr<'!!<<)trVulFs8W'%qXrDB"U"`( ('t!F"98H,!"(,.q>U3hq#:'\rqZKijSs`~> q#:g"rVQKgr;f7aqtg9ip&=s^rt#)-q"ashp\jtS!;ufhrqcQlmf*FhqtpBirr02&%K6;%rr2io rVQK)!WrW*!"&f.#QOr,"98H&!WN)ErriH(!WW,rb5WU`rVl`lKbk+')Kg,6g[Y+q"t!b qu-Km_7IFh]`5YGrVurtrVurt!<<)tqu-Nnj8]/Ys8=MKq>^Horr2iqr;HZprk5uF$j$D3!!E?) !!`Z-!!>Las7H9ar;QWns8N&rj8XW~> q#:g"rVQKgr;f7aqtg9ip&=s^rt#)-q"ashp\jtS!;ufhrqcQlmf*FhqtpBirr02&%K6;%rr2io rVQK)!WrW*!"&f.#QOr,"98H&!WN)ErriH(!WW,rb5WU`rVl`lKbk+')Kg,6g[Y+q"t!b qu-Km_7IFh]`5YGrVurtrVurt!<<)tqu-Nnj8]/Ys8=MKq>^Horr2iqr;HZprk5uF$j$D3!!E?) !!`Z-!!>Las7H9ar;QWns8N&rj8XW~> q#:g"rVQKgr;f7aqtg9ip&=s^rt#)-q"ashp\jtS!;ufhrqcQlmf*FhqtpBirr02&%K6;%rr2io rVQK)!WrW*!"&f.#QOr,"98H&!WN)ErriH(!WW,rb5WU`rVl`lKbk+')Kg,6g[Y+q"t!b qu-Km_7IFh]`5YGrVurtrVurt!<<)tqu-Nnj8]/Ys8=MKq>^Horr2iqr;HZprk5uF$j$D3!!E?) !!`Z-!!>Las7H9ar;QWns8N&rj8XW~> q#:p$s7ZKgr`/mprr)`jqu$EloDeghs8<<&qYL!\0sfrr)cmrVlfls8N!3r;Q`q r:g6erVcZnqtpBjr;ZcrrR(WGqu?Zn&,Q8$rVuijs8)Zlqu$Eis8Ms=q5:'bUSk#d#6bA7!r`3) r;Zirr;Zir!ri/tq"spbj8]/Y-N*c=nb;nZr;H9`q=slbV?$l&#m(21!Wrf7!Wrl3=BGLmr:g'` g])d~> q#:p$s7ZKgr`/mprr)`jqu$EloDeghs8<<&qYL!\0sfrr)cmrVlfls8N!3r;Q`q r:g6erVcZnqtpBjr;ZcrrR(WGqu?Zn&,Q8$rVuijs8)Zlqu$Eis8Ms=q5:'bUSk#d#6bA7!r`3) r;Zirr;Zir!ri/tq"spbj8]/Y-N*c=nb;nZr;H9`q=slbV?$l&#m(21!Wrf7!Wrl3=BGLmr:g'` g])d~> q#:p$s7ZKgr`/mprr)`jqu$EloDeghs8<<&qYL!\0sfrr)cmrVlfls8N!3r;Q`q r:g6erVcZnqtpBjr;ZcrrR(WGqu?Zn&,Q8$rVuijs8)Zlqu$Eis8Ms=q5:'bUSk#d#6bA7!r`3) r;Zirr;Zir!ri/tq"spbj8]/Y-N*c=nb;nZr;H9`q=slbV?$l&#m(21!Wrf7!Wrl3=BGLmr:g'` g])d~> q#:s&rpg!bp[n@\rr2imqu$Bjrq$.#rr)ckq=jXTs7Z9brq#palMpn`X8`_-oDA:Zqtc/1#64i9 !!WQ#!!30$!WN)ErriH(!WW,raT!(Qr;4U4ZHVk9r;-6aq"t$hrVcZlrVlflrtbS4rVZTlrVZWk qu$?hrV?Elq"k$grQtR'q>L6eqZ$HlrVcTbr;6?gq>?,1NK&sXNsYl2!<`H+!sel0#P\Q,quQrt quQrt"9/2rqYU!_j8],X-MR<3nb`=`s7>s`q2#.R"T\i1!sSi0#SI.A"`JDXq>0[Zo_JF_h#Dm~> q#:s&rpg!bp[n@\rr2imqu$Bjrq$.#rr)ckq=jXTs7Z9brq#palMpn`X8`_-oDA:Zqtc/1#64i9 !!WQ#!!30$!WN)ErriH(!WW,raT!(Qr;4U4ZHVk9r;-6aq"t$hrVcZlrVlflrtbS4rVZTlrVZWk qu$?hrV?Elq"k$grQtR'q>L6eqZ$HlrVcTbr;6?gq>?,1NK&sXNsYl2!<`H+!sel0#P\Q,quQrt quQrt"9/2rqYU!_j8],X-MR<3nb`=`s7>s`q2#.R"T\i1!sSi0#SI.A"`JDXq>0[Zo_JF_h#Dm~> q#:s&rpg!bp[n@\rr2imqu$Bjrq$.#rr)ckq=jXTs7Z9brq#palMpn`X8`_-oDA:Zqtc/1#64i9 !!WQ#!!30$!WN)ErriH(!WW,raT!(Qr;4U4ZHVk9r;-6aq"t$hrVcZlrVlflrtbS4rVZTlrVZWk qu$?hrV?Elq"k$grQtR'q>L6eqZ$HlrVcTbr;6?gq>?,1NK&sXNsYl2!<`H+!sel0#P\Q,quQrt quQrt"9/2rqYU!_j8],X-MR<3nb`=`s7>s`q2#.R"T\i1!sSi0#SI.A"`JDXq>0[Zo_JF_h#Dm~> q>^Kk$NBnprqH!\r;HWnrqlipr;QZp!<2`m!WN#rq[!,pqYU*aqY^6Ts8W)qrrE&(rt###qYC0e E!-4G!s8i4!XSQ$!W`9%rr17D"TeZ)s8Dl:rt#)*q""%Pqtg9hq=sd_rr;urs82orrqQL0rVuos r;HTlrVQQkr;#L'k5YAYs8DiodJl0(r;6 q>^Kk$NBnprqH!\r;HWnrqlipr;QZp!<2`m!WN#rq[!,pqYU*aqY^6Ts8W)qrrE&(rt###qYC0e E!-4G!s8i4!XSQ$!W`9%rr17D"TeZ)s8Dl:rt#)*q""%Pqtg9hq=sd_rr;urs82orrqQL0rVuos r;HTlrVQQkr;#L'k5YAYs8DiodJl0(r;6 q>^Kk$NBnprqH!\r;HWnrqlipr;QZp!<2`m!WN#rq[!,pqYU*aqY^6Ts8W)qrrE&(rt###qYC0e E!-4G!s8i4!XSQ$!W`9%rr17D"TeZ)s8Dl:rt#)*q""%Pqtg9hq=sd_rr;urs82orrqQL0rVuos r;HTlrVQQkr;#L'k5YAYs8DiodJl0(r;6 q>V*&rqlWhqZ$9dr;HWorVcZkr;QZp!<2fos8L<[s8W'!s8Mrp!<0>) &,Q7qp%Vo(!!*-2!$YE24"p>,2"U#&2"T\q' Sc8?\rV6-dp\Od^ptYn"~> q>V*&rqlWhqZ$9dr;HWorVcZkr;QZp!<2fos8L<[s8W'!s8Mrp!<0>) &,Q7qp%Vo(!!*-2!$YE24"p>,2"U#&2"T\q' Sc8?\rV6-dp\Od^ptYn"~> q>V*&rqlWhqZ$9dr;HWorVcZkr;QZp!<2fos8L<[s8W'!s8Mrp!<0>) &,Q7qp%Vo(!!*-2!$YE24"p>,2"U#&2"T\q' Sc8?\rV6-dp\Od^ptYn"~> q>V'*q=s^aqXjU^r;HTnrr)cmrVQTis8W$,r;6Ejrr2iio_e^YrVZQlmJm4c#6"Jsqu$El]`7g, &,lD$77[I`!"&`1"T\l2#l"B$!<<0"rm1TJ!WW9$rVXb:s8E<%s8Dlpqu?Zprr3#urVc`os8W)s s8W'5rVl`kqY^S_?*r#^0qtU-o!B%JJ,~> q>V'*q=s^aqXjU^r;HTnrr)cmrVQTis8W$,r;6Ejrr2iio_e^YrVZQlmJm4c#6"Jsqu$El]`7g, &,lD$77[I`!"&`1"T\l2#l"B$!<<0"rm1TJ!WW9$rVXb:s8E<%s8Dlpqu?Zprr3#urVc`os8W)s s8W'5rVl`kqY^S_?*r#^0qtU-o!B%JJ,~> q>V'*q=s^aqXjU^r;HTnrr)cmrVQTis8W$,r;6Ejrr2iio_e^YrVZQlmJm4c#6"Jsqu$El]`7g, &,lD$77[I`!"&`1"T\l2#l"B$!<<0"rm1TJ!WW9$rVXb:s8E<%s8Dlpqu?Zprr3#urVc`os8W)s s8W'5rVl`kqY^S_?*r#^0qtU-o!B%JJ,~> q>V!'p&4a]q"t$hrqu]mrr)fprr)cqrqZTirWi?"qYp?gqt'^amJm4c#6"Jsqu$ElrVlls_>j?0 s8*6W!!j/:"Tf,B!<`N*"S_ru!<<0"rm1TJ!WW9$rVX_9s8E)uqY^?lrqurus8W)ps8Drss8N!5 q>:-ir:T=2Z]7*a('4RYNrB"WqYpE>s8W$Tq>1$g$N^>0!WWE+!X&Z:! q>V!'p&4a]q"t$hrqu]mrr)fprr)cqrqZTirWi?"qYp?gqt'^amJm4c#6"Jsqu$ElrVlls_>j?0 s8*6W!!j/:"Tf,B!<`N*"S_ru!<<0"rm1TJ!WW9$rVX_9s8E)uqY^?lrqurus8W)ps8Drss8N!5 q>:-ir:T=2Z]7*a('4RYNrB"WqYpE>s8W$Tq>1$g$N^>0!WWE+!X&Z:! q>V!'p&4a]q"t$hrqu]mrr)fprr)cqrqZTirWi?"qYp?gqt'^amJm4c#6"Jsqu$ElrVlls_>j?0 s8*6W!!j/:"Tf,B!<`N*"S_ru!<<0"rm1TJ!WW9$rVX_9s8E)uqY^?lrqurus8W)ps8Drss8N!5 q>:-ir:T=2Z]7*a('4RYNrB"WqYpE>s8W$Tq>1$g$N^>0!WWE+!X&Z:! q>V**rqQKlrVl`ps8;clrVlcqs8N#q!WE#ns8W)qrs/H$rVc`dr;HWolMpn`rVZfpr;QZp!<0h7 q>:d&'FOmI!=&W,! q>V**rqQKlrVl`ps8;clrVlcqs8N#q!WE#ns8W)qrs/H$rVc`dr;HWolMpn`rVZfpr;QZp!<0h7 q>:d&'FOmI!=&W,! q>V**rqQKlrVl`ps8;clrVlcqs8N#q!WE#ns8W)qrs/H$rVc`dr;HWolMpn`rVZfpr;QZp!<0h7 q>:d&'FOmI!=&W,! p](6lrr2uqrr*T,nc&Faq#(-Vnc&LbrqlWgrqH9BrWiDqr;QN\rpp!dcN!nCs8W)t(]=70rqcWn o(i=Yrr)Qf!!rZ1!t,)4#Oh]p!<<0"rm1TJ!WW9$rVX/)"Sr)sr;Zcq*r5R0rqZKer;GWI:F6DU !!*3<'FG-bO8]%Wr;QZndJjaVp\sXSrs/Z/"9K,:!rhrar"oA2q>U6erq$*ao_SRf!<**"rVH?] rr)0_rr*u:qu66\rr)ii%Klb3"p"f,!!!9*!!<6."8i#qn,CQ2J,~> p](6lrr2uqrr*T,nc&Faq#(-Vnc&LbrqlWgrqH9BrWiDqr;QN\rpp!dcN!nCs8W)t(]=70rqcWn o(i=Yrr)Qf!!rZ1!t,)4#Oh]p!<<0"rm1TJ!WW9$rVX/)"Sr)sr;Zcq*r5R0rqZKer;GWI:F6DU !!*3<'FG-bO8]%Wr;QZndJjaVp\sXSrs/Z/"9K,:!rhrar"oA2q>U6erq$*ao_SRf!<**"rVH?] rr)0_rr*u:qu66\rr)ii%Klb3"p"f,!!!9*!!<6."8i#qn,CQ2J,~> p](6lrr2uqrr*T,nc&Faq#(-Vnc&LbrqlWgrqH9BrWiDqr;QN\rpp!dcN!nCs8W)t(]=70rqcWn o(i=Yrr)Qf!!rZ1!t,)4#Oh]p!<<0"rm1TJ!WW9$rVX/)"Sr)sr;Zcq*r5R0rqZKer;GWI:F6DU !!*3<'FG-bO8]%Wr;QZndJjaVp\sXSrs/Z/"9K,:!rhrar"oA2q>U6erq$*ao_SRf!<**"rVH?] rr)0_rr*u:qu66\rr)ii%Klb3"p"f,!!!9*!!<6."8i#qn,CQ2J,~> pAY-lr;RQ.rq66dl1Y)Orpp*eqt9mAioK.QguR/J$f0k'g"593s8Doqrr2otrmCcGrr)lrrY>J3 qYfmTrV-9gqu5UU!rr<'!!<3&mf3Ci!!3)uci4.M!!3,ur4)e,r[%UCqZ$NdqtU3hp\a[>[@1Y> !"o;7(`?SAE!u^cNW&eSr;ZfrdJjaRoDALYrZ;";rqZ?gq>9pUr>,)%pAb!\rq69\rVcd)oDnaf rVcN_qWn1]rZD1>qt9a`p\s"Z!!*H-!WW?+"pb2/!Wj5`s8;KWrV+P9J,~> pAY-lr;RQ.rq66dl1Y)Orpp*eqt9mAioK.QguR/J$f0k'g"593s8Doqrr2otrmCcGrr)lrrY>J3 qYfmTrV-9gqu5UU!rr<'!!<3&mf3Ci!!3)uci4.M!!3,ur4)e,r[%UCqZ$NdqtU3hp\a[>[@1Y> !"o;7(`?SAE!u^cNW&eSr;ZfrdJjaRoDALYrZ;";rqZ?gq>9pUr>,)%pAb!\rq69\rVcd)oDnaf rVcN_qWn1]rZD1>qt9a`p\s"Z!!*H-!WW?+"pb2/!Wj5`s8;KWrV+P9J,~> pAY-lr;RQ.rq66dl1Y)Orpp*eqt9mAioK.QguR/J$f0k'g"593s8Doqrr2otrmCcGrr)lrrY>J3 qYfmTrV-9gqu5UU!rr<'!!<3&mf3Ci!!3)uci4.M!!3,ur4)e,r[%UCqZ$NdqtU3hp\a[>[@1Y> !"o;7(`?SAE!u^cNW&eSr;ZfrdJjaRoDALYrZ;";rqZ?gq>9pUr>,)%pAb!\rq69\rVcd)oDnaf rVcN_qWn1]rZD1>qt9a`p\s"Z!!*H-!WW?+"pb2/!Wj5`s8;KWrV+P9J,~> nc'F'o_naZr;QQaq#8R^\Au_7!rrE)&-;pd!"&l0!=f/5"o\>qrVc`rrlP0Uq>BpcpAFp_qt9j/ aoqbJ!$eEn+l_NqTSti~> nc'F'o_naZr;QQaq#8R^\Au_7!rrE)&-;pd!"&l0!=f/5"o\>qrVc`rrlP0Uq>BpcpAFp_qt9j/ aoqbJ!$eEn+l_NqTSti~> nc'F'o_naZr;QQaq#8R^\Au_7!rrE)&-;pd!"&l0!=f/5"o\>qrVc`rrlP0Uq>BpcpAFp_qt9j/ aoqbJ!$eEn+l_NqTSti~> p&G!i(\de&q>9m\mes8o$NL>>!Wic1!XJc2!8.DQ!XJr1!t52*qYU6irrE&Es8DrsrtbP*q#C?f rqlQgZNL=2!s8N)!s/Q+!q-*j!<<0"rm1TJ!WW9$rVXJ2qu6Wo,l[`&k%YBEnj!sel3 *@PQ\[/Taqr5K9U(QSIls8;lqdJjaNrqQNiqYp9ho_SL^o`+XTrtkV1oDSRZq=agXZhF:u%djDm qYpBgp\X:Vs8F)7nG)qSqQp8.!X0);!:AFbcnGE.Lr:eD7J,~> p&G!i(\de&q>9m\mes8o$NL>>!Wic1!XJc2!8.DQ!XJr1!t52*qYU6irrE&Es8DrsrtbP*q#C?f rqlQgZNL=2!s8N)!s/Q+!q-*j!<<0"rm1TJ!WW9$rVXJ2qu6Wo,l[`&k%YBEnj!sel3 *@PQ\[/Taqr5K9U(QSIls8;lqdJjaNrqQNiqYp9ho_SL^o`+XTrtkV1oDSRZq=agXZhF:u%djDm qYpBgp\X:Vs8F)7nG)qSqQp8.!X0);!:AFbcnGE.Lr:eD7J,~> p&G!i(\de&q>9m\mes8o$NL>>!Wic1!XJc2!8.DQ!XJr1!t52*qYU6irrE&Es8DrsrtbP*q#C?f rqlQgZNL=2!s8N)!s/Q+!q-*j!<<0"rm1TJ!WW9$rVXJ2qu6Wo,l[`&k%YBEnj!sel3 *@PQ\[/Taqr5K9U(QSIls8;lqdJjaNrqQNiqYp9ho_SL^o`+XTrtkV1oDSRZq=agXZhF:u%djDm qYpBgp\X:Vs8F)7nG)qSqQp8.!X0);!:AFbcnGE.Lr:eD7J,~> p](9mrr!B,qtBsep]'iSR03Ql"9A`+"9\c5!!*,Q!"&`,!<<6("8VfjrVc`rrm1Tbrr)fps8Vlo p\XacqZ$Pc!XAc2"pb82!!WQ,!!D]j!W`9%rr17D"TeZ)s8Dl2s8;ipr$VICp%eL\o%_KH>Vcoq !!sS_4.3%tme-DQpA`AI!u-gqrVufprVb.D&,lD'rqlEdnb`"ZqZ$NhrUKn(q"t!ap[mnKqOmob rW!H&"TSMrr;?Bbli7"a*q9%)o`"Xf!X&Z5$jZq:!sK#5@q>B3q#'mdqZ$ p](9mrr!B,qtBsep]'iSR03Ql"9A`+"9\c5!!*,Q!"&`,!<<6("8VfjrVc`rrm1Tbrr)fps8Vlo p\XacqZ$Pc!XAc2"pb82!!WQ,!!D]j!W`9%rr17D"TeZ)s8Dl2s8;ipr$VICp%eL\o%_KH>Vcoq !!sS_4.3%tme-DQpA`AI!u-gqrVufprVb.D&,lD'rqlEdnb`"ZqZ$NhrUKn(q"t!ap[mnKqOmob rW!H&"TSMrr;?Bbli7"a*q9%)o`"Xf!X&Z5$jZq:!sK#5@q>B3q#'mdqZ$ p](9mrr!B,qtBsep]'iSR03Ql"9A`+"9\c5!!*,Q!"&`,!<<6("8VfjrVc`rrm1Tbrr)fps8Vlo p\XacqZ$Pc!XAc2"pb82!!WQ,!!D]j!W`9%rr17D"TeZ)s8Dl2s8;ipr$VICp%eL\o%_KH>Vcoq !!sS_4.3%tme-DQpA`AI!u-gqrVufprVb.D&,lD'rqlEdnb`"ZqZ$NhrUKn(q"t!ap[mnKqOmob rW!H&"TSMrr;?Bbli7"a*q9%)o`"Xf!X&Z5$jZq:!sK#5@q>B3q#'mdqZ$ p\u94r;6EjrqHrUp0]s7ZKt#6P57!!NT1!d8hgq=F@Yp\b'cr;6-0s*t~> p\u94r;6EjrqHrUp0]s7ZKt#6P57!!NT1!d8hgq=F@Yp\b'cr;6-0s*t~> p\u94r;6EjrqHrUp0]s7ZKt#6P57!!NT1!d8hgq=F@Yp\b'cr;6-0s*t~> p\u93qYC!crquEgo^ll$"U"i0!2q#:!d qYb41!0=&a,N%a!Yg[nr;Z]prr1=F&,H5!p](3jqYL6equ6Ehrpg$gp_Ei&rV-;'r;[6#o`tm" rquHgoC`(Wli7"a+8u-2qYg3l!sSi4!=Af2!L*6QqYU3cq=sjep&"O`r651k~> p\u93qYC!crquEgo^ll$"U"i0!2q#:!d qYb41!0=&a,N%a!Yg[nr;Z]prr1=F&,H5!p](3jqYL6equ6Ehrpg$gp_Ei&rV-;'r;[6#o`tm" rquHgoC`(Wli7"a+8u-2qYg3l!sSi4!=Af2!L*6QqYU3cq=sjep&"O`r651k~> p\u93qYC!crquEgo^ll$"U"i0!2q#:!d qYb41!0=&a,N%a!Yg[nr;Z]prr1=F&,H5!p](3jqYL6equ6Ehrpg$gp_Ei&rV-;'r;[6#o`tm" rquHgoC`(Wli7"a+8u-2qYg3l!sSi4!=Af2!L*6QqYU3cq=sjep&"O`r651k~> q#;E7r;?Hir;6Hgp&7kj!XJi4!sSf0#65,8!<<6'!!1aQrrE?1"TSQ(o_nafrm(NSrVlZiq>U9e r;$'brDE\%q>^Qt!!3'!!!2Kf!W`9%rr1IJs8Mus"TeZ(s8DlRP5"tUr;Q`odJjaUs82irrr2rqs8W&tr;HWj rrE#ss8W)us8Vs)r;-Bl=9/@$!WMs!VuHZ!rVlcprVl-_rr*H.qYpKl!<<0)!WWE)!Nc;"r!WE% s82fnrqucmrr)Zlq>UZqs82`oqu,RTJ,~> q#;E7r;?Hir;6Hgp&7kj!XJi4!sSf0#65,8!<<6'!!1aQrrE?1"TSQ(o_nafrm(NSrVlZiq>U9e r;$'brDE\%q>^Qt!!3'!!!2Kf!W`9%rr1IJs8Mus"TeZ(s8DlRP5"tUr;Q`odJjaUs82irrr2rqs8W&tr;HWj rrE#ss8W)us8Vs)r;-Bl=9/@$!WMs!VuHZ!rVlcprVl-_rr*H.qYpKl!<<0)!WWE)!Nc;"r!WE% s82fnrqucmrr)Zlq>UZqs82`oqu,RTJ,~> q#;E7r;?Hir;6Hgp&7kj!XJi4!sSf0#65,8!<<6'!!1aQrrE?1"TSQ(o_nafrm(NSrVlZiq>U9e r;$'brDE\%q>^Qt!!3'!!!2Kf!W`9%rr1IJs8Mus"TeZ(s8DlRP5"tUr;Q`odJjaUs82irrr2rqs8W&tr;HWj rrE#ss8W)us8Vs)r;-Bl=9/@$!WMs!VuHZ!rVlcprVl-_rr*H.qYpKl!<<0)!WWE)!Nc;"r!WE% s82fnrqucmrr)Zlq>UZqs82`oqu,RTJ,~> q>UHorr)fp(]3h$3Xbul!s\u2"ptA7"q(M5!!30$!S@AY#m(56#6Xl%rVk%@&,c,!pAOX_o_\I_ 3][TU!oO%[!<<0"rmh&Krr)j#!rr?$rVXh!"&Z(rVZ<\o)&CUrqZR!q#10jp%J4[jSs`~> q>UHorr)fp(]3h$3Xbul!s\u2"ptA7"q(M5!!30$!S@AY#m(56#6Xl%rVk%@&,c,!pAOX_o_\I_ 3][TU!oO%[!<<0"rmh&Krr)j#!rr?$rVXh!"&Z(rVZ<\o)&CUrqZR!q#10jp%J4[jSs`~> q>UHorr)fp(]3h$3Xbul!s\u2"ptA7"q(M5!!30$!S@AY#m(56#6Xl%rVk%@&,c,!pAOX_o_\I_ 3][TU!oO%[!<<0"rmh&Krr)j#!rr?$rVXh!"&Z(rVZ<\o)&CUrqZR!q#10jp%J4[jSs`~> q>^Ko!<)ops8*B,pFQ@J!!!-'!!`Q7!XSl/rVus#!S7;Y!-";;.g#r,* qu6TgqXUM@=:Ksqt]d\rVlfWs*t~> q>^Ko!<)ops8*B,pFQ@J!!!-'!!`Q7!XSl/rVus#!S7;Y!-";;.g#r,* qu6TgqXUM@=:Ksqt]d\rVlfWs*t~> q>^Ko!<)ops8*B,pFQ@J!!!-'!!`Q7!XSl/rVus#!S7;Y!-";;.g#r,* qu6TgqXUM@=:Ksqt]d\rVlfWs*t~> p\u'.qtg0bq!SOi!>,;:!"Ao6"TSQ'!;#g2oEssWo]#N8mJ-YZrlkBQq>U!Prql]hp_3i7!WW?( huEfZ!!3)uec5[Krr33%!WW9$rVXhKU2e"q$u% 0Qh7![Bg4L@k*8rr*)ps8W#srOMqErVQHgrVlcmnGDqZ$M+W*rW*W$p\sdYq>TXY"oeQ%rr<#r! "8u4!!WlD$5*pX&df?C%J^M>$5!UY$k<.6jSs`~> p\u'.qtg0bq!SOi!>,;:!"Ao6"TSQ'!;#g2oEssWo]#N8mJ-YZrlkBQq>U!Prql]hp_3i7!WW?( huEfZ!!3)uec5[Krr33%!WW9$rVXhKU2e"q$u% 0Qh7![Bg4L@k*8rr*)ps8W#srOMqErVQHgrVlcmnGDqZ$M+W*rW*W$p\sdYq>TXY"oeQ%rr<#r! "8u4!!WlD$5*pX&df?C%J^M>$5!UY$k<.6jSs`~> p\u'.qtg0bq!SOi!>,;:!"Ao6"TSQ'!;#g2oEssWo]#N8mJ-YZrlkBQq>U!Prql]hp_3i7!WW?( huEfZ!!3)uec5[Krr33%!WW9$rVXhKU2e"q$u% 0Qh7![Bg4L@k*8rr*)ps8W#srOMqErVQHgrVlcmnGDqZ$M+W*rW*W$p\sdYq>TXY"oeQ%rr<#r! "8u4!!WlD$5*pX&df?C%J^M>$5!UY$k<.6jSs`~> q>UTsrVZTlrr*K!!s&c2!WWZ:!WXJUrVlTirr*#trVc`Kr<`Mhrr)]^s82fpr;Qcrg&LjH%efo# qu#OX!!3N.$Od"9huEfZ!!3)uec5[Krr36&!WW9$rVZZ:0Mrtk\7s8N&u!!!$""onf4!< q>UTsrVZTlrr*K!!s&c2!WWZ:!WXJUrVlTirr*#trVc`Kr<`Mhrr)]^s82fpr;Qcrg&LjH%efo# qu#OX!!3N.$Od"9huEfZ!!3)uec5[Krr36&!WW9$rVZZ:0Mrtk\7s8N&u!!!$""onf4!< q>UTsrVZTlrr*K!!s&c2!WWZ:!WXJUrVlTirr*#trVc`Kr<`Mhrr)]^s82fpr;Qcrg&LjH%efo# qu#OX!!3N.$Od"9huEfZ!!3)uec5[Krr36&!WW9$rVZZ:0Mrtk\7s8N&u!!!$""onf4!< q>V91rVZWlrVZKo!!WH9!X/T)"t9*@kkb/SrW<&us4@5Tqt^3hqu6Qnr;Zfrg&LmI%eoqorqtCM !s&K.$igV8hZ*]Y!!3)uec5[Krr36&!WW<%rVZZ q>V91rVZWlrVZKo!!WH9!X/T)"t9*@kkb/SrW<&us4@5Tqt^3hqu6Qnr;Zfrg&LmI%eoqorqtCM !s&K.$igV8hZ*]Y!!3)uec5[Krr36&!WW<%rVZZ q>V91rVZWlrVZKo!!WH9!X/T)"t9*@kkb/SrW<&us4@5Tqt^3hqu6Qnr;Zfrg&LmI%eoqorqtCM !s&K.$igV8hZ*]Y!!3)uec5[Krr36&!WW<%rVZZ q>^Hn*<#g3p[f.""pb52"pG#lqu$9erVcWmrqu`ps8:RL#Q"Dqq#1-iq"t*krn7>GrXJ\?])`3< "T\`-!W`N,huEfZ!!3)uec5[Krr36%!WW<%rquc=s8W'ErVQDa6lZ1/$6(']ON@+jr:Tp^p[mV, X(=m<"T\o>+pA;REqfS2%f#kpr:^*ds8N&os8Drr\c2[-rV[B,rVjV:!!*-!#6=PspAF[UpAX%N "oeQ%rr<#t!"B26!X8l1"UbA3!so)2kPthk!!`T,%e'AWs*t~> q>^Hn*<#g3p[f.""pb52"pG#lqu$9erVcWmrqu`ps8:RL#Q"Dqq#1-iq"t*krn7>GrXJ\?])`3< "T\`-!W`N,huEfZ!!3)uec5[Krr36%!WW<%rquc=s8W'ErVQDa6lZ1/$6(']ON@+jr:Tp^p[mV, X(=m<"T\o>+pA;REqfS2%f#kpr:^*ds8N&os8Drr\c2[-rV[B,rVjV:!!*-!#6=PspAF[UpAX%N "oeQ%rr<#t!"B26!X8l1"UbA3!so)2kPthk!!`T,%e'AWs*t~> q>^Hn*<#g3p[f.""pb52"pG#lqu$9erVcWmrqu`ps8:RL#Q"Dqq#1-iq"t*krn7>GrXJ\?])`3< "T\`-!W`N,huEfZ!!3)uec5[Krr36%!WW<%rquc=s8W'ErVQDa6lZ1/$6(']ON@+jr:Tp^p[mV, X(=m<"T\o>+pA;REqfS2%f#kpr:^*ds8N&os8Drr\c2[-rV[B,rVjV:!!*-!#6=PspAF[UpAX%N "oeQ%rr<#t!"B26!X8l1"UbA3!so)2kPthk!!`T,%e'AWs*t~> q>^Ko)?'L4rqrSr"9\c2!=T!0qu6B`rVZQjrr;usrrE#Nrs/N"s8)cks8Dips8L^O"TA>orr2op s8)nu!X&]+!!WN*#64i+"5j.\!<<0"rn.8KrX&W'r;?Wu"8r/lrVlfrs8LLIs8FtQqYZ0b!rsQG J=F^Qqu-Ejr;,^%`e.DM!tPM8,=>7^)$9u+r:]g\rVZZos82irrVucps8N#.rtkS2r;-?ipT+Du !<<,r#$1`tr;QZorVb^T(]O@2rr2pr!!N?,%0-A8!!!3($31D6!U'Lf!<`B+!rDoWs*t~> q>^Ko)?'L4rqrSr"9\c2!=T!0qu6B`rVZQjrr;usrrE#Nrs/N"s8)cks8Dips8L^O"TA>orr2op s8)nu!X&]+!!WN*#64i+"5j.\!<<0"rn.8KrX&W'r;?Wu"8r/lrVlfrs8LLIs8FtQqYZ0b!rsQG J=F^Qqu-Ejr;,^%`e.DM!tPM8,=>7^)$9u+r:]g\rVZZos82irrVucps8N#.rtkS2r;-?ipT+Du !<<,r#$1`tr;QZorVb^T(]O@2rr2pr!!N?,%0-A8!!!3($31D6!U'Lf!<`B+!rDoWs*t~> q>^Ko)?'L4rqrSr"9\c2!=T!0qu6B`rVZQjrr;usrrE#Nrs/N"s8)cks8Dips8L^O"TA>orr2op s8)nu!X&]+!!WN*#64i+"5j.\!<<0"rn.8KrX&W'r;?Wu"8r/lrVlfrs8LLIs8FtQqYZ0b!rsQG J=F^Qqu-Ejr;,^%`e.DM!tPM8,=>7^)$9u+r:]g\rVZZos82irrVucps8N#.rtkS2r;-?ipT+Du !<<,r#$1`tr;QZorVb^T(]O@2rr2pr!!N?,%0-A8!!!3($31D6!U'Lf!<`B+!rDoWs*t~> q>^Ko(&[n+rquj!"p4l3!=`oBr;QZlqY^>\rt"u%oD&7Yr:]rK$NLG7!WqTd#6Fl*!=#!rrQ%D> q>^Ko(&[n+rquj!"p4l3!=`oBr;QZlqY^>\rt"u%oD&7Yr:]rK$NLG7!WqTd#6Fl*!=#!rrQ%D> q>^Ko(&[n+rquj!"p4l3!=`oBr;QZlqY^>\rt"u%oD&7Yr:]rK$NLG7!WqTd#6Fl*!=#!rrQ%D> p\u!-qu-Kj!!`Q-!WrZ1o_JFarquZkrVc_drt#"uqY:!cq0%)i!!Ef4"pF/j#6Fl*!Wi?%!r)`s !<<0"rn%/^rr)cnrVZQc#6t8/qY^-erVlfrs8LFG/,],;NY_[.antl3o`+U\_4ZBT.LQI`!Z4L4 KW=)*rqJ&J!Kd-Urqu]mrVlf+s8W&srr2p.rUod^p31`^!sSi-#5S,jq>K:P&,ZD*q#C-f!Wa/? $jlt9!o p\u!-qu-Kj!!`Q-!WrZ1o_JFarquZkrVc_drt#"uqY:!cq0%)i!!Ef4"pF/j#6Fl*!Wi?%!r)`s !<<0"rn%/^rr)cnrVZQc#6t8/qY^-erVlfrs8LFG/,],;NY_[.antl3o`+U\_4ZBT.LQI`!Z4L4 KW=)*rqJ&J!Kd-Urqu]mrVlf+s8W&srr2p.rUod^p31`^!sSi-#5S,jq>K:P&,ZD*q#C-f!Wa/? $jlt9!o p\u!-qu-Kj!!`Q-!WrZ1o_JFarquZkrVc_drt#"uqY:!cq0%)i!!Ef4"pF/j#6Fl*!Wi?%!r)`s !<<0"rn%/^rr)cnrVZQc#6t8/qY^-erVlfrs8LFG/,],;NY_[.antl3o`+U\_4ZBT.LQI`!Z4L4 KW=)*rqJ&J!Kd-Urqu]mrVlf+s8W&srr2p.rUod^p31`^!sSi-#5S,jq>K:P&,ZD*q#C-f!Wa/? $jlt9!o q>^Hn'E%k.qZ.3.!!36*T_\E]s8W)rr;HQorgj'"qtL!_s7fh$!<`K,#6Y)6kl:qh!!!$#!!!&p !!30$!WN)LrrE#sr;QX$!!f"jrUp$crVlfrs8LFG-iNl7M&-1%f)5@AmGY%>6n9Db!!!3W=*_R( kOe]Nqu/5N!L!?Zrr2lorji(/r;QZprXf,.q"OYl$igA2$NpI$r;--_ro*kfrqZNfpA=di"U5,9 #64f0h>dZ[!!*#tjSs`~> q>^Hn'E%k.qZ.3.!!36*T_\E]s8W)rr;HQorgj'"qtL!_s7fh$!<`K,#6Y)6kl:qh!!!$#!!!&p !!30$!WN)LrrE#sr;QX$!!f"jrUp$crVlfrs8LFG-iNl7M&-1%f)5@AmGY%>6n9Db!!!3W=*_R( kOe]Nqu/5N!L!?Zrr2lorji(/r;QZprXf,.q"OYl$igA2$NpI$r;--_ro*kfrqZNfpA=di"U5,9 #64f0h>dZ[!!*#tjSs`~> q>^Hn'E%k.qZ.3.!!36*T_\E]s8W)rr;HQorgj'"qtL!_s7fh$!<`K,#6Y)6kl:qh!!!$#!!!&p !!30$!WN)LrrE#sr;QX$!!f"jrUp$crVlfrs8LFG-iNl7M&-1%f)5@AmGY%>6n9Db!!!3W=*_R( kOe]Nqu/5N!L!?Zrr2lorji(/r;QZprXf,.q"OYl$igA2$NpI$r;--_ro*kfrqZNfpA=di"U5,9 #64f0h>dZ[!!*#tjSs`~> q>V'+rVlcqrVQa#!=Su0$31#$r;Q`nr;chfrt"u)nb)WN%fcV3%fue5"p=#gr;lTl!W`9%rr1LK !WN&rr!NE'!WDuhqt'dbrr2rtrmC`lr;Z\T)?UW'q"qssIP)fM!!WZS8RnLGiV<0Gq>L q>V'+rVlcqrVQa#!=Su0$31#$r;Q`nr;chfrt"u)nb)WN%fcV3%fue5"p=#gr;lTl!W`9%rr1LK !WN&rr!NE'!WDuhqt'dbrr2rtrmC`lr;Z\T)?UW'q"qssIP)fM!!WZS8RnLGiV<0Gq>L q>V'+rVlcqrVQa#!=Su0$31#$r;Q`nr;chfrt"u)nb)WN%fcV3%fue5"p=#gr;lTl!W`9%rr1LK !WN&rr!NE'!WDuhqt'dbrr2rtrmC`lr;Z\T)?UW'q"qssIP)fM!!WZS8RnLGiV<0Gq>L q>^Em%KH>%":PD8!!!*#mect^rrE&rr;chns7lR'qYN!)!X&K1!!;0s8Muqqtp?t"982ms7Q?hrr2rtrmC`nrquVG&c`ZYSsi(i('FUF)(eUG_V"5R rUp'eqYpHir[RsKPl:U\rr;oq\c2[.r;?Tn&,,hrr<``3!!NbRao1i-rRq5Nr=/Z'p\Xsgble%O !tYM=h>dZ[!!*#tjSs`~> q>^Em%KH>%":PD8!!!*#mect^rrE&rr;chns7lR'qYN!)!X&K1!!;0s8Muqqtp?t"982ms7Q?hrr2rtrmC`nrquVG&c`ZYSsi(i('FUF)(eUG_V"5R rUp'eqYpHir[RsKPl:U\rr;oq\c2[.r;?Tn&,,hrr<``3!!NbRao1i-rRq5Nr=/Z'p\Xsgble%O !tYM=h>dZ[!!*#tjSs`~> q>^Em%KH>%":PD8!!!*#mect^rrE&rr;chns7lR'qYN!)!X&K1!!;0s8Muqqtp?t"982ms7Q?hrr2rtrmC`nrquVG&c`ZYSsi(i('FUF)(eUG_V"5R rUp'eqYpHir[RsKPl:U\rr;oq\c2[.r;?Tn&,,hrr<``3!!NbRao1i-rRq5Nr=/Z'p\Xsgble%O !tYM=h>dZ[!!*#tjSs`~> q#CBns8W,q#6k27!!E95o`"dhrr2rprh]YjrVua((]XgS!!WH6%KHY7!!D`k%Kcb5!!!$$!rrB) ! q#CBns8W,q#6k27!!E95o`"dhrr2rprh]YjrVua((]XgS!!WH6%KHY7!!D`k%Kcb5!!!$$!rrB) ! q#CBns8W,q#6k27!!E95o`"dhrr2rprh]YjrVua((]XgS!!WH6%KHY7!!D`k%Kcb5!!!$$!rrB) ! q>V!)r;?Qoqu$m("q:PG!<2lorgj)br"&c,$igS6#6=l+!<`B+!!2Ti%Klk7!!!$%"98N,!WiK, pAb6q!!3)uf`(sMrr3K,qu$?q!<`2trq69hrVlfrs8LFG./NrBHl2tc#64f*%jQ.Njo4uLs6os[ r;HWor;Q`qr;A)F!gWZ\rr02&(B4:1qtpT@Q&,?/&r;QHjrVlcn !!WE("l94^!WW6"roF*0~> q>V!)r;?Qoqu$m("q:PG!<2lorgj)br"&c,$igS6#6=l+!<`B+!!2Ti%Klk7!!!$%"98N,!WiK, pAb6q!!3)uf`(sMrr3K,qu$?q!<`2trq69hrVlfrs8LFG./NrBHl2tc#64f*%jQ.Njo4uLs6os[ r;HWor;Q`qr;A)F!gWZ\rr02&(B4:1qtpT@Q&,?/&r;QHjrVlcn !!WE("l94^!WW6"roF*0~> q>V!)r;?Qoqu$m("q:PG!<2lorgj)br"&c,$igS6#6=l+!<`B+!!2Ti%Klk7!!!$%"98N,!WiK, pAb6q!!3)uf`(sMrr3K,qu$?q!<`2trq69hrVlfrs8LFG./NrBHl2tc#64f*%jQ.Njo4uLs6os[ r;HWor;Q`qr;A)F!gWZ\rr02&(B4:1qtpT@Q&,?/&r;QHjrVlcn !!WE("l94^!WW6"roF*0~> q>V91pAY!drq$6t!<<<)!9a+Mr;QTnr;QJjs8W#uqYgEm&G>l!p&=p`k5Yeh"p555"UFPt('Xd> "98Q)"p+o-!sJo0)ZBa=!s/K*pAb6q!!3)ui;XVmrV$3`rqHru_7= rUp*eN#;p%!!*3,)Og$_o)AOcq"Faerr)cnrr;rr"Y0QRPl(Hart,)+rVHKin)jcQ!WN-"',UZI rr`9!qtc!GJ,~> q>V91pAY!drq$6t!<<<)!9a+Mr;QTnr;QJjs8W#uqYgEm&G>l!p&=p`k5Yeh"p555"UFPt('Xd> "98Q)"p+o-!sJo0)ZBa=!s/K*pAb6q!!3)ui;XVmrV$3`rqHru_7= rUp*eN#;p%!!*3,)Og$_o)AOcq"Faerr)cnrr;rr"Y0QRPl(Hart,)+rVHKin)jcQ!WN-"',UZI rr`9!qtc!GJ,~> q>V91pAY!drq$6t!<<<)!9a+Mr;QTnr;QJjs8W#uqYgEm&G>l!p&=p`k5Yeh"p555"UFPt('Xd> "98Q)"p+o-!sJo0)ZBa=!s/K*pAb6q!!3)ui;XVmrV$3`rqHru_7= rUp*eN#;p%!!*3,)Og$_o)AOcq"Faerr)cnrr;rr"Y0QRPl(Hart,)+rVHKin)jcQ!WN-"',UZI rr`9!qtc!GJ,~> q>V9.s8MckqYC6p!<<61!Wr)mrVHBjrVZYortbS,rr)TepAF[`r;6K>!!<3%"98N)"7H4)#m:81 !=&Z2!X8r3!&XTN!!!$$!<`&r!W`9%rr1jU#Q4;opAFmequ-I$rq?!\!s(7Ts8)Qhbl@_B-iO)C oq*oD!sT&7!!cboal)O]r:B^^rVHQnrVccnqu$FD!!8D_rilD6rr)?cnGCN3":#54!X(1Vrr)iu rquYHs*t~> q>V9.s8MckqYC6p!<<61!Wr)mrVHBjrVZYortbS,rr)TepAF[`r;6K>!!<3%"98N)"7H4)#m:81 !=&Z2!X8r3!&XTN!!!$$!<`&r!W`9%rr1jU#Q4;opAFmequ-I$rq?!\!s(7Ts8)Qhbl@_B-iO)C oq*oD!sT&7!!cboal)O]r:B^^rVHQnrVccnqu$FD!!8D_rilD6rr)?cnGCN3":#54!X(1Vrr)iu rquYHs*t~> q>V9.s8MckqYC6p!<<61!Wr)mrVHBjrVZYortbS,rr)TepAF[`r;6K>!!<3%"98N)"7H4)#m:81 !=&Z2!X8r3!&XTN!!!$$!<`&r!W`9%rr1jU#Q4;opAFmequ-I$rq?!\!s(7Ts8)Qhbl@_B-iO)C oq*oD!sT&7!!cboal)O]r:B^^rVHQnrVccnqu$FD!!8D_rilD6rr)?cnGCN3":#54!X(1Vrr)iu rquYHs*t~> q>V90qu69bq"Opu!sAo3!XlI6qXXR^q>0ufrtbA/p\Facp\"FVr3`s:!!E<+#QY)4#Oh^0"TST/ !!NW6":#&884W^WqZ$Ts!WiK+p](?r!!3)ui;`iS');J!r:g*eq=jpdoDG]o"SDEfrr((@s8F&; r;QTFN)MJI$3C50$62ZJOOWdir:p*erVlTfs8Dp#.f]X8r;Nr#&Gu7urVEl%"9Jr3rWYphrr2iq !WN%Ns*t~> q>V90qu69bq"Opu!sAo3!XlI6qXXR^q>0ufrtbA/p\Facp\"FVr3`s:!!E<+#QY)4#Oh^0"TST/ !!NW6":#&884W^WqZ$Ts!WiK+p](?r!!3)ui;`iS');J!r:g*eq=jpdoDG]o"SDEfrr((@s8F&; r;QTFN)MJI$3C50$62ZJOOWdir:p*erVlTfs8Dp#.f]X8r;Nr#&Gu7urVEl%"9Jr3rWYphrr2iq !WN%Ns*t~> q>V90qu69bq"Opu!sAo3!XlI6qXXR^q>0ufrtbA/p\Facp\"FVr3`s:!!E<+#QY)4#Oh^0"TST/ !!NW6":#&884W^WqZ$Ts!WiK+p](?r!!3)ui;`iS');J!r:g*eq=jpdoDG]o"SDEfrr((@s8F&; r;QTFN)MJI$3C50$62ZJOOWdir:p*erVlTfs8Dp#.f]X8r;Nr#&Gu7urVEl%"9Jr3rWYphrr2iq !WN%Ns*t~> q>V90p\adYq>"D"#R:M5%06U#qYpBeqYg07s8DrSs8Vs1p&FmcrV69dScf)s"9\]*!s/Q+!q61+ "9JQ(!=Sr6!(*l$N'l"rq4G6 s8Eo3rql][d'A$u+Wpmf!"K,U@\1Kili-eZrr2lqr!**M!!8G`rNQ;4rqcNjSc])u#6P,-!<2Tg JcGZJJ,~> q>V90p\adYq>"D"#R:M5%06U#qYpBeqYg07s8DrSs8Vs1p&FmcrV69dScf)s"9\]*!s/Q+!q61+ "9JQ(!=Sr6!(*l$N'l"rq4G6 s8Eo3rql][d'A$u+Wpmf!"K,U@\1Kili-eZrr2lqr!**M!!8G`rNQ;4rqcNjSc])u#6P,-!<2Tg JcGZJJ,~> q>V90p\adYq>"D"#R:M5%06U#qYpBeqYg07s8DrSs8Vs1p&FmcrV69dScf)s"9\]*!s/Q+!q61+ "9JQ(!=Sr6!(*l$N'l"rq4G6 s8Eo3rql][d'A$u+Wpmf!"K,U@\1Kili-eZrr2lqr!**M!!8G`rNQ;4rqcNjSc])u#6P,-!<2Tg JcGZJJ,~> q>^Km(&Ih'p\Odm!=/`/#lkJ?KDGB?s82Z=rr`9!rVk^S(]O1,q"js`p&9dL#6G&4#6Fo+"p=r, "7Q:+!rrB,!XB,8#^H.>rUp$d!!*-'!X&Q!!!30$!WN)VrtkP2p\Om`q>^?fs8;Q^LB7I#q>C$d p\3)8!<2orrr*c7p\t-iqVfDSMaRpZ"pG#;.7.C(_:\SZrV?fsr;A,G!gW]^YQ#+0r;-U%#Qk26 !;:L1q"B:=r;V9~> q>^Km(&Ih'p\Odm!=/`/#lkJ?KDGB?s82Z=rr`9!rVk^S(]O1,q"js`p&9dL#6G&4#6Fo+"p=r, "7Q:+!rrB,!XB,8#^H.>rUp$d!!*-'!X&Q!!!30$!WN)VrtkP2p\Om`q>^?fs8;Q^LB7I#q>C$d p\3)8!<2orrr*c7p\t-iqVfDSMaRpZ"pG#;.7.C(_:\SZrV?fsr;A,G!gW]^YQ#+0r;-U%#Qk26 !;:L1q"B:=r;V9~> q>^Km(&Ih'p\Odm!=/`/#lkJ?KDGB?s82Z=rr`9!rVk^S(]O1,q"js`p&9dL#6G&4#6Fo+"p=r, "7Q:+!rrB,!XB,8#^H.>rUp$d!!*-'!X&Q!!!30$!WN)VrtkP2p\Om`q>^?fs8;Q^LB7I#q>C$d p\3)8!<2orrr*c7p\t-iqVfDSMaRpZ"pG#;.7.C(_:\SZrV?fsr;A,G!gW]^YQ#+0r;-U%#Qk26 !;:L1q"B:=r;V9~> q#;-*qu?EjqtpO'!t588!!iT1CA@])r:SD9"9/8trndYjqYg'dq"OT$!X8c-$O-S4!WWE+!rrH! !<3-#!W2p4!W`B*$4I#sOSJ_Iq"jpe!!!$#!!;lp!W`9%rr1jU#5J5jDJsE2rb`0eCMRhg!s/5k r;$)5!VZBbs7CmBr;V9~> q#;-*qu?EjqtpO'!t588!!iT1CA@])r:SD9"9/8trndYjqYg'dq"OT$!X8c-$O-S4!WWE+!rrH! !<3-#!W2p4!W`B*$4I#sOSJ_Iq"jpe!!!$#!!;lp!W`9%rr1jU#5J5jDJsE2rb`0eCMRhg!s/5k r;$)5!VZBbs7CmBr;V9~> q#;-*qu?EjqtpO'!t588!!iT1CA@])r:SD9"9/8trndYjqYg'dq"OT$!X8c-$O-S4!WWE+!rrH! !<3-#!W2p4!W`B*$4I#sOSJ_Iq"jpe!!!$#!!;lp!W`9%rr1jU#5J5jDJsE2rb`0eCMRhg!s/5k r;$)5!VZBbs7CmBr;V9~> q>V9.r;HNjqu-Gk"U#/6"9AQ+#67b)rVQH;rr`9!rVk^S(&%V)q==F\;um"$!"TSo4WVuYioD/=[rVQWq!&OqT7Tf@#7(D7!Z"()Kt$(;qtL%>!!APbrNH52q,RP# !rrB*#bD"jqtL'fs8W(Ms*t~> q>V9.r;HNjqu-Gk"U#/6"9AQ+#67b)rVQH;rr`9!rVk^S(&%V)q==F\;um"$!"TSo4WVuYioD/=[rVQWq!&OqT7Tf@#7(D7!Z"()Kt$(;qtL%>!!APbrNH52q,RP# !rrB*#bD"jqtL'fs8W(Ms*t~> q>V9.r;HNjqu-Gk"U#/6"9AQ+#67b)rVQH;rr`9!rVk^S(&%V)q==F\;um"$!"TSo4WVuYioD/=[rVQWq!&OqT7Tf@#7(D7!Z"()Kt$(;qtL%>!!APbrNH52q,RP# !rrB*#bD"jqtL'fs8W(Ms*t~> q>VE4r;-6grVQ?d!!`W3!"0#4!<<-'5"#2Er;HWns4RAXr;-Earquclrr1sX#Oh]brq?$]"o83# !<<0"!!!&o!#PqE"onZ,!!36-!!E?*_#461s8)`prVuio!!!)p!!30$!WN)Vrtk\2rr<-$!!3-) !!<6&#JpB:q#C?ls7aq@s8Mios8N&u./s,@qYC!ar:/scG?ZL,"98]3',iTR\'""4-NjO2rr)in s8VurrVQQns8L%<(]==5qu?Bis7Stb"p"o."p)R:rpg!brVccrrr^Klr;?3es82TkrV?F(p&FX`p](9krVlHds7lWoqYgF#qt^0cs82]nqu,RTJ,~> q>VE4r;-6grVQ?d!!`W3!"0#4!<<-'5"#2Er;HWns4RAXr;-Earquclrr1sX#Oh]brq?$]"o83# !<<0"!!!&o!#PqE"onZ,!!36-!!E?*_#461s8)`prVuio!!!)p!!30$!WN)Vrtk\2rr<-$!!3-) !!<6&#JpB:q#C?ls7aq@s8Mios8N&u./s,@qYC!ar:/scG?ZL,"98]3',iTR\'""4-NjO2rr)in s8VurrVQQns8L%<(]==5qu?Bis7Stb"p"o."p)R:rpg!brVccrrr^Klr;?3es82TkrV?F(p&FX`p](9krVlHds7lWoqYgF#qt^0cs82]nqu,RTJ,~> q>VE4r;-6grVQ?d!!`W3!"0#4!<<-'5"#2Er;HWns4RAXr;-Earquclrr1sX#Oh]brq?$]"o83# !<<0"!!!&o!#PqE"onZ,!!36-!!E?*_#461s8)`prVuio!!!)p!!30$!WN)Vrtk\2rr<-$!!3-) !!<6&#JpB:q#C?ls7aq@s8Mios8N&u./s,@qYC!ar:/scG?ZL,"98]3',iTR\'""4-NjO2rr)in s8VurrVQQns8L%<(]==5qu?Bis7Stb"p"o."p)R:rpg!brVccrrr^Klr;?3es82TkrV?F(p&FX`p](9krVlHds7lWoqYgF#qt^0cs82]nqu,RTJ,~> q#;-.qYU9lqtU0:!WiB1!X&W+!UHoqu?]upAb6q!!3)ui;X#WrqXsgf[9ZM%,':_eGoFAn,N.XqYe81rVQQk+84gN UjuVo!X/T*"ViRaL<(VF"-WHJrr2rpq#C?kqu6Wqrl4sSrquBeq>L?b/clRb$474Cdf/q=r;ZEg rVuoss8NW/qtpBlqtpBks8)`js8MoZrso#*p%SC`rq?9aqYpF@/GUV7,pk8l/g_qEp&=mfp&4^a rq?!XrqcTgq#13koChtXjSs`~> q#;-.qYU9lqtU0:!WiB1!X&W+!UHoqu?]upAb6q!!3)ui;X#WrqXsgf[9ZM%,':_eGoFAn,N.XqYe81rVQQk+84gN UjuVo!X/T*"ViRaL<(VF"-WHJrr2rpq#C?kqu6Wqrl4sSrquBeq>L?b/clRb$474Cdf/q=r;ZEg rVuoss8NW/qtpBlqtpBks8)`js8MoZrso#*p%SC`rq?9aqYpF@/GUV7,pk8l/g_qEp&=mfp&4^a rq?!XrqcTgq#13koChtXjSs`~> q#;-.qYU9lqtU0:!WiB1!X&W+!UHoqu?]upAb6q!!3)ui;X#WrqXsgf[9ZM%,':_eGoFAn,N.XqYe81rVQQk+84gN UjuVo!X/T*"ViRaL<(VF"-WHJrr2rpq#C?kqu6Wqrl4sSrquBeq>L?b/clRb$474Cdf/q=r;ZEg rVuoss8NW/qtpBlqtpBks8)`js8MoZrso#*p%SC`rq?9aqYpF@/GUV7,pk8l/g_qEp&=mfp&4^a rq?!XrqcTgq#13koChtXjSs`~> q#;62r;?Qnr;66fjTtne#m()5!!!?+"9S]+!Rq)R!<53lhp&I q!\7[r;ZfrrUp-poDA4\rpBUXl2M:ls7-$dqt0aaqYgp6)?9j7!#l1D!!`K,!#$UfrV--fqu6HX rr29`pAP!fq=":]jSs`~> q#;62r;?Qnr;66fjTtne#m()5!!!?+"9S]+!Rq)R!<53lhp&I q!\7[r;ZfrrUp-poDA4\rpBUXl2M:ls7-$dqt0aaqYgp6)?9j7!#l1D!!`K,!#$UfrV--fqu6HX rr29`pAP!fq=":]jSs`~> q#;62r;?Qnr;66fjTtne#m()5!!!?+"9S]+!Rq)R!<53lhp&I q!\7[r;ZfrrUp-poDA4\rpBUXl2M:ls7-$dqt0aaqYgp6)?9j7!#l1D!!`K,!#$UfrV--fqu6HX rr29`pAP!fq=":]jSs`~> q>^Kn!WN&rr"nu%rqZs.!WWW/!rr<'#QP&3!s&B%!UHoqu?]upAb6q!!3)ui;XVmp&=Xar;Zcqs8)NimI^DWoBH8Krquc3 rri8urVlfqruh+:qtU0bqW5ek9*GD'":+u2!"25Om.'iLr;-,1 !YYG1qu6Klq#'sbrr)ios83rW!ZH!;5s_q#:9fm/Hb]"onl.#m(2*rT+!/~> q>^Kn!WN&rr"nu%rqZs.!WWW/!rr<'#QP&3!s&B%!UHoqu?]upAb6q!!3)ui;XVmp&=Xar;Zcqs8)NimI^DWoBH8Krquc3 rri8urVlfqruh+:qtU0bqW5ek9*GD'":+u2!"25Om.'iLr;-,1 !YYG1qu6Klq#'sbrr)ios83rW!ZH!;5s_q#:9fm/Hb]"onl.#m(2*rT+!/~> q>^Kn!WN&rr"nu%rqZs.!WWW/!rr<'#QP&3!s&B%!UHoqu?]upAb6q!!3)ui;XVmp&=Xar;Zcqs8)NimI^DWoBH8Krquc3 rri8urVlfqruh+:qtU0bqW5ek9*GD'":+u2!"25Om.'iLr;-,1 !YYG1qu6Klq#'sbrr)ios83rW!ZH!;5s_q#:9fm/Hb]"onl.#m(2*rT+!/~> q>UHnrr*Z2r;HWoqY:*f,le5O#6Fo+!W`W/!W2ot!S@AX!rru7!XSc(ro="`qt9sb$NLS@kl;5" !=]#2$327orVlNinGW4ZrrE&r!!!)p!!30$!WN)VrtkJ1o_nd_rqQ9gs8;ZG!87&DqYL0bqtn50 !<)orrVmu;rqZBhnc/L[oZWA&3?&,&"p"r/$Z3,PlLOoPs6K^arr;rrrlP0Tq#'^Yh$"2q$3:J8 !;6?grqtmOs8)]ms82lorqm<*s8W&rs8W&mq"Ogdp%eOMrt#,/q"aseo)Adr! q>UHnrr*Z2r;HWoqY:*f,le5O#6Fo+!W`W/!W2ot!S@AX!rru7!XSc(ro="`qt9sb$NLS@kl;5" !=]#2$327orVlNinGW4ZrrE&r!!!)p!!30$!WN)VrtkJ1o_nd_rqQ9gs8;ZG!87&DqYL0bqtn50 !<)orrVmu;rqZBhnc/L[oZWA&3?&,&"p"r/$Z3,PlLOoPs6K^arr;rrrlP0Tq#'^Yh$"2q$3:J8 !;6?grqtmOs8)]ms82lorqm<*s8W&rs8W&mq"Ogdp%eOMrt#,/q"aseo)Adr! q>UHnrr*Z2r;HWoqY:*f,le5O#6Fo+!W`W/!W2ot!S@AX!rru7!XSc(ro="`qt9sb$NLS@kl;5" !=]#2$327orVlNinGW4ZrrE&r!!!)p!!30$!WN)VrtkJ1o_nd_rqQ9gs8;ZG!87&DqYL0bqtn50 !<)orrVmu;rqZBhnc/L[oZWA&3?&,&"p"r/$Z3,PlLOoPs6K^arr;rrrlP0Tq#'^Yh$"2q$3:J8 !;6?grqtmOs8)]ms82lorqm<*s8W&rs8W&mq"Ogdp%eOMrt#,/q"aseo)Adr! q>UHorVm6(s8Vunq>^?i49PQa!s\i,#6"Z%!<3)Q!!rZ0!!NH5!;HKlj8TA^rqHEm!sAek!"KJG #S7)!rqucoqt^3hqt^6lrql`r!quZr!<<0"ro!emr;63eq>^?jrVZ]f_up,D`:X*(o)Jaf_>jN6 !<<#ss873iKM"pG&10f`d=hrsh7rr2lps8L.?+8kX,qZI-*!s&`1"uuPX q>^'arVlQgp\b!hrVQHhrV?Et`;9-%nb;nMl2M:iqu?Nhq>8);#RCD8"p#&+!<30$!ZM7D!!E<) $j$b9r:fg]qt'gW"9Sr1!>YY q>UHorVm6(s8Vunq>^?i49PQa!s\i,#6"Z%!<3)Q!!rZ0!!NH5!;HKlj8TA^rqHEm!sAek!"KJG #S7)!rqucoqt^3hqt^6lrql`r!quZr!<<0"ro!emr;63eq>^?jrVZ]f_up,D`:X*(o)Jaf_>jN6 !<<#ss873iKM"pG&10f`d=hrsh7rr2lps8L.?+8kX,qZI-*!s&`1"uuPX q>^'arVlQgp\b!hrVQHhrV?Et`;9-%nb;nMl2M:iqu?Nhq>8);#RCD8"p#&+!<30$!ZM7D!!E<) $j$b9r:fg]qt'gW"9Sr1!>YY q>UHorVm6(s8Vunq>^?i49PQa!s\i,#6"Z%!<3)Q!!rZ0!!NH5!;HKlj8TA^rqHEm!sAek!"KJG #S7)!rqucoqt^3hqt^6lrql`r!quZr!<<0"ro!emr;63eq>^?jrVZ]f_up,D`:X*(o)Jaf_>jN6 !<<#ss873iKM"pG&10f`d=hrsh7rr2lps8L.?+8kX,qZI-*!s&`1"uuPX q>^'arVlQgp\b!hrVQHhrV?Et`;9-%nb;nMl2M:iqu?Nhq>8);#RCD8"p#&+!<30$!ZM7D!!E<) $j$b9r:fg]qt'gW"9Sr1!>YY q#C?mrr<#t&,l>%p\O__;?I1-"9JQ*!;urL!!r`."TS`,#5eE!j8T>Yq=q#m!Y4Do%g*.>#lmp' r:p0gpAOa]rV?Hnrql`r!quZr!<<0"ro!emr:KlgUosXns7H?i":,)1"Ju%rp\Xp`^&S-3s8=,@ r;QQjp](9jq"Xd^r;"73G!7Jh"Ter2!\\,LZ/#'Prr)fqrlP0nq#:&i!"0&5#65'-p%SCTr9a%L qYBp^qu6WpqYC'hri3!tri3!t!<3#drql6akl2+`rr2Hfo`>*r!Wrr7"nr!6$O$eA !N5qrqtp?ioF:j(!!`Q,%Ij>Ws*t~> q#C?mrr<#t&,l>%p\O__;?I1-"9JQ*!;urL!!r`."TS`,#5eE!j8T>Yq=q#m!Y4Do%g*.>#lmp' r:p0gpAOa]rV?Hnrql`r!quZr!<<0"ro!emr:KlgUosXns7H?i":,)1"Ju%rp\Xp`^&S-3s8=,@ r;QQjp](9jq"Xd^r;"73G!7Jh"Ter2!\\,LZ/#'Prr)fqrlP0nq#:&i!"0&5#65'-p%SCTr9a%L qYBp^qu6WpqYC'hri3!tri3!t!<3#drql6akl2+`rr2Hfo`>*r!Wrr7"nr!6$O$eA !N5qrqtp?ioF:j(!!`Q,%Ij>Ws*t~> q#C?mrr<#t&,l>%p\O__;?I1-"9JQ*!;urL!!r`."TS`,#5eE!j8T>Yq=q#m!Y4Do%g*.>#lmp' r:p0gpAOa]rV?Hnrql`r!quZr!<<0"ro!emr:KlgUosXns7H?i":,)1"Ju%rp\Xp`^&S-3s8=,@ r;QQjp](9jq"Xd^r;"73G!7Jh"Ter2!\\,LZ/#'Prr)fqrlP0nq#:&i!"0&5#65'-p%SCTr9a%L qYBp^qu6WpqYC'hri3!tri3!t!<3#drql6akl2+`rr2Hfo`>*r!Wrr7"nr!6$O$eA !N5qrqtp?ioF:j(!!`Q,%Ij>Ws*t~> q#:EprVlfr%0$5'rqQ<^rqZD0C2EkM!^EhrrE&r!!!)p!!30$!WN)UrtYM."9J`)qu$F qYg?lr;ZfprVQTnq#:6fhRon&2&uZ'!!`]]0P7lTrr)`mqtpB>s#0fSrr;cnr;?GW!!WE'"9f6J rVcckrV?9^p\Fa\pA"WOQ'(s1Pl1XdrVQWtr;cfms82Zgqs",>rr;rrrr82c!!`N.!!NB)! q#:EprVlfr%0$5'rqQ<^rqZD0C2EkM!^EhrrE&r!!!)p!!30$!WN)UrtYM."9J`)qu$F qYg?lr;ZfprVQTnq#:6fhRon&2&uZ'!!`]]0P7lTrr)`mqtpB>s#0fSrr;cnr;?GW!!WE'"9f6J rVcckrV?9^p\Fa\pA"WOQ'(s1Pl1XdrVQWtr;cfms82Zgqs",>rr;rrrr82c!!`N.!!NB)! q#:EprVlfr%0$5'rqQ<^rqZD0C2EkM!^EhrrE&r!!!)p!!30$!WN)UrtYM."9J`)qu$F qYg?lr;ZfprVQTnq#:6fhRon&2&uZ'!!`]]0P7lTrr)`mqtpB>s#0fSrr;cnr;?GW!!WE'"9f6J rVcckrV?9^p\Fa\pA"WOQ'(s1Pl1XdrVQWtr;cfms82Zgqs",>rr;rrrr82c!!`N.!!NB)! n,EptrVZTlrVZNlon.^GJV&LNKAV:[KE$N)JV&RRJcgQ'rr1sX#Q4/m!sJc/#Nu-l#(lgQp[\.M rrE&r!!!)p!!30$!WN)UrtbP4":"r*qu$Ef!s8`$JcQ2Tr;$-`p9FYrrr)d2q>9sRfXQ5i49,Nc #lto/VYC,cs82]?s#9oPqu$Kgq>9r:"p"o/"9ALQq"jmfqtg3crHWs@G^=[b!rrK("U+i,"TS9! "8`)toDSOaq#'CV"oeQ%rr<#s!!!'!!$M@E!WrH-!X8Z,!t#8 n,EptrVZTlrVZNlon.^GJV&LNKAV:[KE$N)JV&RRJcgQ'rr1sX#Q4/m!sJc/#Nu-l#(lgQp[\.M rrE&r!!!)p!!30$!WN)UrtbP4":"r*qu$Ef!s8`$JcQ2Tr;$-`p9FYrrr)d2q>9sRfXQ5i49,Nc #lto/VYC,cs82]?s#9oPqu$Kgq>9r:"p"o/"9ALQq"jmfqtg3crHWs@G^=[b!rrK("U+i,"TS9! "8`)toDSOaq#'CV"oeQ%rr<#s!!!'!!$M@E!WrH-!X8Z,!t#8 n,EptrVZTlrVZNlon.^GJV&LNKAV:[KE$N)JV&RRJcgQ'rr1sX#Q4/m!sJc/#Nu-l#(lgQp[\.M rrE&r!!!)p!!30$!WN)UrtbP4":"r*qu$Ef!s8`$JcQ2Tr;$-`p9FYrrr)d2q>9sRfXQ5i49,Nc #lto/VYC,cs82]?s#9oPqu$Kgq>9r:"p"o/"9ALQq"jmfqtg3crHWs@G^=[b!rrK("U+i,"TS9! "8`)toDSOaq#'CV"oeQ%rr<#s!!!'!!$M@E!WrH-!X8Z,!t#8 n,ECer;@'#r:fp^qtU'erVlfrf)?!PrVuQioDS4Yro="`qtBsk"98]2kl:qkReljWqt9^RrrE&r !!!)p!!30$!WN)UrtbP4":"r+r;-'c!!rf#p](D0q>9p_pp'ksrr2j4s82ZirV>3U[obL)%KHYF Nq`SKr:^-gdJl0'qu-Hip\Oo"!tG;>"TedpnbD`oA7B4_A87>3!XJf.!XAc5rW!8u!Wr5q!s&6" qtg*_r;ZZYrrrE%s8N&ur;ZfurW!N2!WW3%!sSl0!!!9.!!NT-#6"T2"Te]0@/^!&s8Dlu!WE'% !WW6"roF*0~> n,ECer;@'#r:fp^qtU'erVlfrf)?!PrVuQioDS4Yro="`qtBsk"98]2kl:qkReljWqt9^RrrE&r !!!)p!!30$!WN)UrtbP4":"r+r;-'c!!rf#p](D0q>9p_pp'ksrr2j4s82ZirV>3U[obL)%KHYF Nq`SKr:^-gdJl0'qu-Hip\Oo"!tG;>"TedpnbD`oA7B4_A87>3!XJf.!XAc5rW!8u!Wr5q!s&6" qtg*_r;ZZYrrrE%s8N&ur;ZfurW!N2!WW3%!sSl0!!!9.!!NT-#6"T2"Te]0@/^!&s8Dlu!WE'% !WW6"roF*0~> n,ECer;@'#r:fp^qtU'erVlfrf)?!PrVuQioDS4Yro="`qtBsk"98]2kl:qkReljWqt9^RrrE&r !!!)p!!30$!WN)UrtbP4":"r+r;-'c!!rf#p](D0q>9p_pp'ksrr2j4s82ZirV>3U[obL)%KHYF Nq`SKr:^-gdJl0'qu-Hip\Oo"!tG;>"TedpnbD`oA7B4_A87>3!XJf.!XAc5rW!8u!Wr5q!s&6" qtg*_r;ZZYrrrE%s8N&ur;ZfurW!N2!WW3%!sSl0!!!9.!!NT-#6"T2"Te]0@/^!&s8Dlu!WE'% !WW6"roF*0~> nc/Ufr;?rtqtp?\q>:3jrRh,JrsJc(rqu`gq#1!ero="`rVZO!!!rr6kl:sgs7ZBhrVZQ_rrE&r !!!)p!!30$!WN)UrtbP4!X8]*r:p*f!!BOoqZm?-r;?NfqQ^(trr;oss8Mj.q#($]nC4duF>O4> N; nc/Ufr;?rtqtp?\q>:3jrRh,JrsJc(rqu`gq#1!ero="`rVZO!!!rr6kl:sgs7ZBhrVZQ_rrE&r !!!)p!!30$!WN)UrtbP4!X8]*r:p*f!!BOoqZm?-r;?NfqQ^(trr;oss8Mj.q#($]nC4duF>O4> N; nc/Ufr;?rtqtp?\q>:3jrRh,JrsJc(rqu`gq#1!ero="`rVZO!!!rr6kl:sgs7ZBhrVZQ_rrE&r !!!)p!!30$!WN)UrtbP4!X8]*r:p*f!!BOoqZm?-r;?NfqQ^(trr;oss8Mj.q#($]nC4duF>O4> N; o`+derVZutq"jUZp\O[Tj_qYh9)q>L9ks8)ZkpZgbB HYB#Dr;6Kgs814D$hs\pqu$Ek!!`K5#6"TN!W`<*$NLP8"p+c)o`PF!#ltG7!X\YGaSO$"qu$*Y qu-EfrVQKcrTX=crr<#ts8W#t!!3'!*ruEK!sS`0!!WN*"T]#7!WrT/!=Jl3!sJ]'qYg?gqtpEs !WW6"roF*0~> o`+derVZutq"jUZp\O[Tj_qYh9)q>L9ks8)ZkpZgbB HYB#Dr;6Kgs814D$hs\pqu$Ek!!`K5#6"TN!W`<*$NLP8"p+c)o`PF!#ltG7!X\YGaSO$"qu$*Y qu-EfrVQKcrTX=crr<#ts8W#t!!3'!*ruEK!sS`0!!WN*"T]#7!WrT/!=Jl3!sJ]'qYg?gqtpEs !WW6"roF*0~> o`+derVZutq"jUZp\O[Tj_qYh9)q>L9ks8)ZkpZgbB HYB#Dr;6Kgs814D$hs\pqu$Ek!!`K5#6"TN!W`<*$NLP8"p+c)o`PF!#ltG7!X\YGaSO$"qu$*Y qu-EfrVQKcrTX=crr<#ts8W#t!!3'!*ruEK!sS`0!!WN*"T]#7!WrT/!=Jl3!sJ]'qYg?gqtpEs !WW6"roF*0~> p&G$jrr)iqrr!&urqlWnrqHEkqu>p[p\b*kqu6rrs8)]`rVc`pj8T>^pA#$s%LqV%#6>eCq#1$d qt^6errE&r!!!)p!!30$!WN)UrtbV6!!30!q#'je$3BGjl2V"lrr;umrQ5*8rpKgarr;m2rr;lh q>('aqYL!]m*F;^rVZ]jrVP"B2ZE[Rn,32)!X8c.!XSl?!=T,;!< p&G$jrr)iqrr!&urqlWnrqHEkqu>p[p\b*kqu6rrs8)]`rVc`pj8T>^pA#$s%LqV%#6>eCq#1$d qt^6errE&r!!!)p!!30$!WN)UrtbV6!!30!q#'je$3BGjl2V"lrr;umrQ5*8rpKgarr;m2rr;lh q>('aqYL!]m*F;^rVZ]jrVP"B2ZE[Rn,32)!X8c.!XSl?!=T,;!< p&G$jrr)iqrr!&urqlWnrqHEkqu>p[p\b*kqu6rrs8)]`rVc`pj8T>^pA#$s%LqV%#6>eCq#1$d qt^6errE&r!!!)p!!30$!WN)UrtbV6!!30!q#'je$3BGjl2V"lrr;umrQ5*8rpKgarr;m2rr;lh q>('aqYL!]m*F;^rVZ]jrVP"B2ZE[Rn,32)!X8c.!XSl?!=T,;!< p&G'krVc]os8<9'o_eI`qYp*brT!nQr;Z]qrqucrq>U?spAY*^rr1sX#Pe;h#SI+="6fdj$321N s7?9fq>U3i!<2lr!!;lp!W`9%rr1jUs8Ec5!!30"q"amj"p"K!q>1-qs8N&lrlP39rp9[`rWE&o qtpBl&,ZA*rV??irqZNlqYC*hrmCa)q"ssfp&+sm!"obA!"f25!!N?/#QP,8!;kmKq"ad`r:p9T o`"=Yrq??koC2\Omf)\?r;Q]gl2Lqds8W)us8;ot!WE'@! p&G'krVc]os8<9'o_eI`qYp*brT!nQr;Z]qrqucrq>U?spAY*^rr1sX#Pe;h#SI+="6fdj$321N s7?9fq>U3i!<2lr!!;lp!W`9%rr1jUs8Ec5!!30"q"amj"p"K!q>1-qs8N&lrlP39rp9[`rWE&o qtpBl&,ZA*rV??irqZNlqYC*hrmCa)q"ssfp&+sm!"obA!"f25!!N?/#QP,8!;kmKq"ad`r:p9T o`"=Yrq??koC2\Omf)\?r;Q]gl2Lqds8W)us8;ot!WE'@! p&G'krVc]os8<9'o_eI`qYp*brT!nQr;Z]qrqucrq>U?spAY*^rr1sX#Pe;h#SI+="6fdj$321N s7?9fq>U3i!<2lr!!;lp!W`9%rr1jUs8Ec5!!30"q"amj"p"K!q>1-qs8N&lrlP39rp9[`rWE&o qtpBl&,ZA*rV??irqZNlqYC*hrmCa)q"ssfp&+sm!"obA!"f25!!N?/#QP,8!;kmKq"ad`r:p9T o`"=Yrq??koC2\Omf)\?r;Q]gl2Lqds8W)us8;ot!WE'@! q>UTrs8Murrr!E+rVlfrrr2lqrr;utrVuosir98_rVc`or;QZor!rc+rr;utqu66frV-?kro="_ rqH9d!#6(/!!NE0!UHnqu?]upAb6q!!3)ui;X\nrr2s"!WW&rrr q>UTrs8Murrr!E+rVlfrrr2lqrr;utrVuosir98_rVc`or;QZor!rc+rr;utqu66frV-?kro="_ rqH9d!#6(/!!NE0!UHnqu?]upAb6q!!3)ui;X\nrr2s"!WW&rrr q>UTrs8Murrr!E+rVlfrrr2lqrr;utrVuosir98_rVc`or;QZor!rc+rr;utqu66frV-?kro="_ rqH9d!#6(/!!NE0!UHnqu?]upAb6q!!3)ui;X\nrr2s"!WW&rrr q>UutrqH3fqu$?hr;HTnrr<#OrYGG)qZ$K^rUg-bo)8C^rql`orVuorrS[\\qYp9e!!3B+kl;4p 'FP$E$Gl`;qY:$emeltXrrE#q!!*-%p](?r!!3)uh>\8k!W`8ur;Qa#'(#Dlq@!H*r:L$^rVc`@ s8N!%qu$HkrVcTWrX]&*s763dr;ZWkqu-BarqcWls8DrrdJl,tr:Bper%0HQ5:l^1rqH?grVQ?g r9jR`qXXRFnb`4^q#:31qp*U[df]RB!!!iTWqYUA# rpKX]/-?"Y!!!*'!;uirs8N&uqu?j$!!*#tjSs`~> q>UutrqH3fqu$?hr;HTnrr<#OrYGG)qZ$K^rUg-bo)8C^rql`orVuorrS[\\qYp9e!!3B+kl;4p 'FP$E$Gl`;qY:$emeltXrrE#q!!*-%p](?r!!3)uh>\8k!W`8ur;Qa#'(#Dlq@!H*r:L$^rVc`@ s8N!%qu$HkrVcTWrX]&*s763dr;ZWkqu-BarqcWls8DrrdJl,tr:Bper%0HQ5:l^1rqH?grVQ?g r9jR`qXXRFnb`4^q#:31qp*U[df]RB!!!iTWqYUA# rpKX]/-?"Y!!!*'!;uirs8N&uqu?j$!!*#tjSs`~> q>UutrqH3fqu$?hr;HTnrr<#OrYGG)qZ$K^rUg-bo)8C^rql`orVuorrS[\\qYp9e!!3B+kl;4p 'FP$E$Gl`;qY:$emeltXrrE#q!!*-%p](?r!!3)uh>\8k!W`8ur;Qa#'(#Dlq@!H*r:L$^rVc`@ s8N!%qu$HkrVcTWrX]&*s763dr;ZWkqu-BarqcWls8DrrdJl,tr:Bper%0HQ5:l^1rqH?grVQ?g r9jR`qXXRFnb`4^q#:31qp*U[df]RB!!!iTWqYUA# rpKX]/-?"Y!!!*'!;uirs8N&uqu?j$!!*#tjSs`~> q>V!)r;--apA+I\r;HTnrr<#Or>,,)q"t$Yp\+Obs7cNjr;6Nmrr<#sro!e]r;H'^6jWnskl;4s% 07%C#6hWCr;$0]r:Ba[rs/N'!1!erV$0hq !e7Yq"Oa\qRWf<[Cj#T"n;X!p]UZsp]pls#P7uor;--al2Ue_%KHD,rrE-%#RL\?"T&,ps8W')o DSX[q"=PQ!sSZ+rrNE)rr<#ts8Vus"9JQ'rr2!YJ,~> q>V!)r;--apA+I\r;HTnrr<#Or>,,)q"t$Yp\+Obs7cNjr;6Nmrr<#sro!e]r;H'^6jWnskl;4s% 07%C#6hWCr;$0]r:Ba[rs/N'!1!erV$0hq !e7Yq"Oa\qRWf<[Cj#T"n;X!p]UZsp]pls#P7uor;--al2Ue_%KHD,rrE-%#RL\?"T&,ps8W')o DSX[q"=PQ!sSZ+rrNE)rr<#ts8Vus"9JQ'rr2!YJ,~> q>V!)r;--apA+I\r;HTnrr<#Or>,,)q"t$Yp\+Obs7cNjr;6Nmrr<#sro!e]r;H'^6jWnskl;4s% 07%C#6hWCr;$0]r:Ba[rs/N'!1!erV$0hq !e7Yq"Oa\qRWf<[Cj#T"n;X!p]UZsp]pls#P7uor;--al2Ue_%KHD,rrE-%#RL\?"T&,ps8W')o DSX[q"=PQ!sSZ+rrNE)rr<#ts8Vus"9JQ'rr2!YJ,~> q>U`srpp!]qtg3gdf'mTq"sg`rq6UZu!*qu?]q$2s\mqYTp\ r;[!""9/E,s8N&urr<#r!!E?'!<2uYs*t~> q>U`srpp!]qtg3gdf'mTq"sg`rq6UZu!*qu?]q$2s\mqYTp\ r;[!""9/E,s8N&urr<#r!!E?'!<2uYs*t~> q>U`srpp!]qtg3gdf'mTq"sg`rq6UZu!*qu?]q$2s\mqYTp\ r;[!""9/E,s8N&urr<#r!!E?'!<2uYs*t~> q>^Kj"nh]gq>?-JM>iCcM%52rM2R4Hq>:0cq#:0jqu6Wqrr<#uro*k^r;#s^noOp7kl;5"$NgG2% Km%;$&JENpAF^]rs&E%!Wi?%!quZr!<<0"rn[Sk!!30#r;$UEr!VZEbpA=abrm1WEr Wi;tqhPpg!!DHc%gE(;$nX.cAWjq)p\k!equ6NnrVlfDrt>,$qY9sfn,3+`qt9[Zmf/6(LAm&Q" To)6$MXl8! q>^Kj"nh]gq>?-JM>iCcM%52rM2R4Hq>:0cq#:0jqu6Wqrr<#uro*k^r;#s^noOp7kl;5"$NgG2% Km%;$&JENpAF^]rs&E%!Wi?%!quZr!<<0"rn[Sk!!30#r;$UEr!VZEbpA=abrm1WEr Wi;tqhPpg!!DHc%gE(;$nX.cAWjq)p\k!equ6NnrVlfDrt>,$qY9sfn,3+`qt9[Zmf/6(LAm&Q" To)6$MXl8! q>^Kj"nh]gq>?-JM>iCcM%52rM2R4Hq>:0cq#:0jqu6Wqrr<#uro*k^r;#s^noOp7kl;5"$NgG2% Km%;$&JENpAF^]rs&E%!Wi?%!quZr!<<0"rn[Sk!!30#r;$UEr!VZEbpA=abrm1WEr Wi;tqhPpg!!DHc%gE(;$nX.cAWjq)p\k!equ6NnrVlfDrt>,$qY9sfn,3+`qt9[Zmf/6(LAm&Q" To)6$MXl8! q>UZtq>^3dq#/P>(C'pD!^Hmr;HZoqr.P[r;6!\p\]jQrW)s!mJmb&"9f#4 #m:A3#m>3dpAFjarW`<$!Wi?%!quZr!<<0"rn[Sk!!30#r;-Bs$MsVmqY:6s"8_ogq"ssdrm1WE rWi<"rJ; q>UZtq>^3dq#/P>(C'pD!^Hmr;HZoqr.P[r;6!\p\]jQrW)s!mJmb&"9f#4 #m:A3#m>3dpAFjarW`<$!Wi?%!quZr!<<0"rn[Sk!!30#r;-Bs$MsVmqY:6s"8_ogq"ssdrm1WE rWi<"rJ; q>UZtq>^3dq#/P>(C'pD!^Hmr;HZoqr.P[r;6!\p\]jQrW)s!mJmb&"9f#4 #m:A3#m>3dpAFjarW`<$!Wi?%!quZr!<<0"rn[Sk!!30#r;-Bs$MsVmqY:6s"8_ogq"ssdrm1WE rWi<"rJ; q>UZps8;fjqu6Qqdf:0c#lt#,"on]*#Qe4 q>UZps8;fjqu6Qqdf:0c#lt#,"on]*#Qe4 q>UZps8;fjqu6Qqdf:0c#lt#,"on]*#Qe4 q>Ud!p&4pfr;Q`t!R^r`!sJ`+!+!WrN+!Up(" !rrH(!W`9%!sJi6!")!hq>LHo!!E3'!C*crV?-]oBH;TrWrQ&s8N*#$NUY7!Wi5r qu?]q"T%lhr:p9g%0-J3"9S]*s8N&urr<#r!!E?'!<2uYs*t~> q>Ud!p&4pfr;Q`t!R^r`!sJ`+!+!WrN+!Up(" !rrH(!W`9%!sJi6!")!hq>LHo!!E3'!C*crV?-]oBH;TrWrQ&s8N*#$NUY7!Wi5r qu?]q"T%lhr:p9g%0-J3"9S]*s8N&urr<#r!!E?'!<2uYs*t~> q>Ud!p&4pfr;Q`t!R^r`!sJ`+!+!WrN+!Up(" !rrH(!W`9%!sJi6!")!hq>LHo!!E3'!C*crV?-]oBH;TrWrQ&s8N*#$NUY7!Wi5r qu?]q"T%lhr:p9g%0-J3"9S]*s8N&urr<#r!!E?'!<2uYs*t~> q>UZtr;Zfjnc._O$j?Y5!!"oo#5#QZ[QrpTj`rV-*daT2bM$ipJ5"TSN'!!NN+ !<<0!rr1aR('"C9s8;lp!!)uts8N$!!!*&tr;HWoc2[hC!r`,trr)V90qt]RAhTe^2@fd/1s8DrqrW!!"!!**#s8N&urr<#r!!E?' !<2uYs*t~> q>UZtr;Zfjnc._O$j?Y5!!"oo#5#QZ[QrpTj`rV-*daT2bM$ipJ5"TSN'!!NN+ !<<0!rr1aR('"C9s8;lp!!)uts8N$!!!*&tr;HWoc2[hC!r`,trr)V90qt]RAhTe^2@fd/1s8DrqrW!!"!!**#s8N&urr<#r!!E?' !<2uYs*t~> q>UZtr;Zfjnc._O$j?Y5!!"oo#5#QZ[QrpTj`rV-*daT2bM$ipJ5"TSN'!!NN+ !<<0!rr1aR('"C9s8;lp!!)uts8N$!!!*&tr;HWoc2[hC!r`,trr)V90qt]RAhTe^2@fd/1s8DrqrW!!"!!**#s8N&urr<#r!!E?' !<2uYs*t~> q>^Kn"oIihrUC0X!"K>9!"T&7#64`.!"&c/#58*;#R(Y<"on`/!W`T-#Qau5&bc2"q#(*grVuos roX4nrr)clqu$Bhm03P!!!!'$'EA46!!!Jt!"/i.!rrE'!"p(GrUKmd"o\;b!!!<'!!3?)#Q4W+ !<<0!rr1aR#QOo+s8;lr!!)rs"TeZ)s8Dl:s7uZis7-($s8;`jr:oaDoRS4e"9iVpq>C3jrW3&r dJs4F*VfX+!s8N.#64qph!4(emHONEs8Muhqu6BdpAXdbrX0J>"T\N,#Q=,irr2oos8;lpk5Pkg s8Duu!<<-#!rW)toDeji!rrB&!<*!'s8N&urr<#r!!E?'!<2uYs*t~> q>^Kn"oIihrUC0X!"K>9!"T&7#64`.!"&c/#58*;#R(Y<"on`/!W`T-#Qau5&bc2"q#(*grVuos roX4nrr)clqu$Bhm03P!!!!'$'EA46!!!Jt!"/i.!rrE'!"p(GrUKmd"o\;b!!!<'!!3?)#Q4W+ !<<0!rr1aR#QOo+s8;lr!!)rs"TeZ)s8Dl:s7uZis7-($s8;`jr:oaDoRS4e"9iVpq>C3jrW3&r dJs4F*VfX+!s8N.#64qph!4(emHONEs8Muhqu6BdpAXdbrX0J>"T\N,#Q=,irr2oos8;lpk5Pkg s8Duu!<<-#!rW)toDeji!rrB&!<*!'s8N&urr<#r!!E?'!<2uYs*t~> q>^Kn"oIihrUC0X!"K>9!"T&7#64`.!"&c/#58*;#R(Y<"on`/!W`T-#Qau5&bc2"q#(*grVuos roX4nrr)clqu$Bhm03P!!!!'$'EA46!!!Jt!"/i.!rrE'!"p(GrUKmd"o\;b!!!<'!!3?)#Q4W+ !<<0!rr1aR#QOo+s8;lr!!)rs"TeZ)s8Dl:s7uZis7-($s8;`jr:oaDoRS4e"9iVpq>C3jrW3&r dJs4F*VfX+!s8N.#64qph!4(emHONEs8Muhqu6BdpAXdbrX0J>"T\N,#Q=,irr2oos8;lpk5Pkg s8Duu!<<-#!rW)toDeji!rrB&!<*!'s8N&urr<#r!!E?'!<2uYs*t~> q>U^!o)8=]q=t'T!"Au7!"o86#6YA6#6k/2p])4!!)fbq>U@'qYg@*!!3`:!=/Z+!s/f. !!<9$s8LjS#QOo+s8;lr!!)rs"TeZ)s8Dl:s7uZis7-$iqtg-brqm<&q"L0j!X9O0rr;clrVQT@ s"OEFoD\R_#6+VrrqZQfs8;oqrr2KbrquB_p@J:_q#'seq>^j$!"ni3$2"/pp%SFaro3qdrVuis !!*'#!!<)urq$0irW<-%!!*!!#64]&s8N&uqu?j$!!*#tjSs`~> q>U^!o)8=]q=t'T!"Au7!"o86#6YA6#6k/2p])4!!)fbq>U@'qYg@*!!3`:!=/Z+!s/f. !!<9$s8LjS#QOo+s8;lr!!)rs"TeZ)s8Dl:s7uZis7-$iqtg-brqm<&q"L0j!X9O0rr;clrVQT@ s"OEFoD\R_#6+VrrqZQfs8;oqrr2KbrquB_p@J:_q#'seq>^j$!"ni3$2"/pp%SFaro3qdrVuis !!*'#!!<)urq$0irW<-%!!*!!#64]&s8N&uqu?j$!!*#tjSs`~> q>U^!o)8=]q=t'T!"Au7!"o86#6YA6#6k/2p])4!!)fbq>U@'qYg@*!!3`:!=/Z+!s/f. !!<9$s8LjS#QOo+s8;lr!!)rs"TeZ)s8Dl:s7uZis7-$iqtg-brqm<&q"L0j!X9O0rr;clrVQT@ s"OEFoD\R_#6+VrrqZQfs8;oqrr2KbrquB_p@J:_q#'seq>^j$!"ni3$2"/pp%SFaro3qdrVuis !!*'#!!<)urq$0irW<-%!!*!!#64]&s8N&uqu?j$!!*#tjSs`~> q>U]qrquWlpAY6Z!ri9%!X&?#"p#)3"T\i5q#VQ:![`\!W`8urr2rur;Qp%!!3,ur5ep6rqZTirqZL/qtg-aqYU3gqtKN>#R:H:j8SiPrVQTn dJkrqrr20^s7?0`p%/1[nc&Icrqc-_rqufprV$9dmJ$STrQtlUnGrXh!$Ue/nc/Rero!ebrVuis !!*'#!!<)urq$0irW<-%!!*!!#64]&s8N&uqu?j$!!*#tjSs`~> q>U]qrquWlpAY6Z!ri9%!X&?#"p#)3"T\i5q#VQ:![`\!W`8urr2rur;Qp%!!3,ur5ep6rqZTirqZL/qtg-aqYU3gqtKN>#R:H:j8SiPrVQTn dJkrqrr20^s7?0`p%/1[nc&Icrqc-_rqufprV$9dmJ$STrQtlUnGrXh!$Ue/nc/Rero!ebrVuis !!*'#!!<)urq$0irW<-%!!*!!#64]&s8N&uqu?j$!!*#tjSs`~> q>U]qrquWlpAY6Z!ri9%!X&?#"p#)3"T\i5q#VQ:![`\!W`8urr2rur;Qp%!!3,ur5ep6rqZTirqZL/qtg-aqYU3gqtKN>#R:H:j8SiPrVQTn dJkrqrr20^s7?0`p%/1[nc&Icrqc-_rqufprV$9dmJ$STrQtlUnGrXh!$Ue/nc/Rero!ebrVuis !!*'#!!<)urq$0irW<-%!!*!!#64]&s8N&uqu?j$!!*#tjSs`~> q>UZtqYpNlq>TS9%QQF*2ZNp]!!NT.4>o5ZpGO!M4uP;f2?3a]!"8l1$j6P4$3S q>UZtqYpNlq>TS9%QQF*2ZNp]!!NT.4>o5ZpGO!M4uP;f2?3a]!"8l1$j6P4$3S q>UZtqYpNlq>TS9%QQF*2ZNp]!!NT.4>o5ZpGO!M4uP;f2?3a]!"8l1$j6P4$3S q>U]uqu-EimJQqIs8W$,qu-R"!rr?)"988op%eF`*W>p+rqlBd:fC6l!!NH+%L!.A%g/j2m/6h^ s8N#\s8W&srr2p-rV6 q>U]uqu-EimJQqIs8W$,qu-R"!rr?)"988op%eF`*W>p+rqlBd:fC6l!!NH+%L!.A%g/j2m/6h^ s8N#\s8W&srr2p-rV6 q>U]uqu-EimJQqIs8W$,qu-R"!rr?)"988op%eF`*W>p+rqlBd:fC6l!!NH+%L!.A%g/j2m/6h^ s8N#\s8W&srr2p-rV6 q>U]qs82Qdrr)cZrX\o(qYgKu!!30,!rqrmrq-$c*W5d)rV?Eer:p5"!XJu'sb,l%? q>U]qs82Qdrr)cZrX\o(qYgKu!!30,!rqrmrq-$c*W5d)rV?Eer:p5"!XJu'sb,l%? q>U]qs82Qdrr)cZrX\o(qYgKu!!30,!rqrmrq-$c*W5d)rV?Eer:p5"!XJu'sb,l%? q>U]ss8)cqrr)l]rX\u-rr)s#!!36&"TJ>srr;fn&c;S)r;HTjq"F^_H\_Y-"To#/!XK/5q>C3k s8N#TrtkS4qu?Zor;ZZmIfKKS!X&K(!!3?*"9\Au,m+,J!!3-$!WW3(!!E9+J:7@qoD/F_r;(sG #64o2!A6!<;urrr<&tr;Z`q!WW9$rVX2*q>U-g!WE#srt,2+rr)`PBa"fIg\_$K s8DlBs"='Dq>L6br;$Bhs8Vrqrr;rkrVccoqtg6fp\sd`!!iQ)"T\RLrVcZiq>L9frSIP_rVuis !!3-&!!3&lrq-3urr)cr! q>U]ss8)cqrr)l]rX\u-rr)s#!!36&"TJ>srr;fn&c;S)r;HTjq"F^_H\_Y-"To#/!XK/5q>C3k s8N#TrtkS4qu?Zor;ZZmIfKKS!X&K(!!3?*"9\Au,m+,J!!3-$!WW3(!!E9+J:7@qoD/F_r;(sG #64o2!A6!<;urrr<&tr;Z`q!WW9$rVX2*q>U-g!WE#srt,2+rr)`PBa"fIg\_$K s8DlBs"='Dq>L6br;$Bhs8Vrqrr;rkrVccoqtg6fp\sd`!!iQ)"T\RLrVcZiq>L9frSIP_rVuis !!3-&!!3&lrq-3urr)cr! q>U]ss8)cqrr)l]rX\u-rr)s#!!36&"TJ>srr;fn&c;S)r;HTjq"F^_H\_Y-"To#/!XK/5q>C3k s8N#TrtkS4qu?Zor;ZZmIfKKS!X&K(!!3?*"9\Au,m+,J!!3-$!WW3(!!E9+J:7@qoD/F_r;(sG #64o2!A6!<;urrr<&tr;Z`q!WW9$rVX2*q>U-g!WE#srt,2+rr)`PBa"fIg\_$K s8DlBs"='Dq>L6br;$Bhs8Vrqrr;rkrVccoqtg6fp\sd`!!iQ)"T\RLrVcZiq>L9frSIP_rVuis !!3-&!!3&lrq-3urr)cr! f)GdM!WE'*!WW<$s8;lrrr2co*<#a2rVlZfrr2cerg*Wd!sSf0":/r@qu-Qprr1OL&,lG(Q3.6l !WiH)#QtG:!U0S#"UG*@r:^$]qu$9gQN@?t"98u!sJ`%qt^'dhZ"#_ s8Duu!X/W-"n_Tho`#R'rVZa!!Y,;7#l4Drq>L*b!XJ])"9JQ'rr2!YJ,~> f)GdM!WE'*!WW<$s8;lrrr2co*<#a2rVlZfrr2cerg*Wd!sSf0":/r@qu-Qprr1OL&,lG(Q3.6l !WiH)#QtG:!U0S#"UG*@r:^$]qu$9gQN@?t"98u!sJ`%qt^'dhZ"#_ s8Duu!X/W-"n_Tho`#R'rVZa!!Y,;7#l4Drq>L*b!XJ])"9JQ'rr2!YJ,~> f)GdM!WE'*!WW<$s8;lrrr2co*<#a2rVlZfrr2cerg*Wd!sSf0":/r@qu-Qprr1OL&,lG(Q3.6l !WiH)#QtG:!U0S#"UG*@r:^$]qu$9gQN@?t"98u!sJ`%qt^'dhZ"#_ s8Duu!X/W-"n_Tho`#R'rVZa!!Y,;7#l4Drq>L*b!XJ])"9JQ'rr2!YJ,~> f)GdM!WE'*!WW<$s8;lrrr2fp)ZK^5r;ZfrrUU!Vp&=cj!!!**$3CYHrV-0frVllsg&DQ\n,<6[ Y6Y=8!!Wi5":+,j('P$F"]4pmqYL6cp\(cm!WWE6!<)oah>\,g!W`8uq=k$mr:g-_rrN0$s8Dkg rt#)-qtp6"!s;9Qq"Xjaqu5"Cq>U3i(\dq-r:Kpaqtfm]rD*S'!rr`1!O24nr;$?Krs\l+rVup% #R^\8q>UBhs8DrsrVud+#ltA>S3q>^*eq"k$prW!'&!!*#tjSs`~> f)GdM!WE'*!WW<$s8;lrrr2fp)ZK^5r;ZfrrUU!Vp&=cj!!!**$3CYHrV-0frVllsg&DQ\n,<6[ Y6Y=8!!Wi5":+,j('P$F"]4pmqYL6cp\(cm!WWE6!<)oah>\,g!W`8uq=k$mr:g-_rrN0$s8Dkg rt#)-qtp6"!s;9Qq"Xjaqu5"Cq>U3i(\dq-r:Kpaqtfm]rD*S'!rr`1!O24nr;$?Krs\l+rVup% #R^\8q>UBhs8DrsrVud+#ltA>S3q>^*eq"k$prW!'&!!*#tjSs`~> f)GdM!WE'*!WW<$s8;lrrr2fp)ZK^5r;ZfrrUU!Vp&=cj!!!**$3CYHrV-0frVllsg&DQ\n,<6[ Y6Y=8!!Wi5":+,j('P$F"]4pmqYL6cp\(cm!WWE6!<)oah>\,g!W`8uq=k$mr:g-_rrN0$s8Dkg rt#)-qtp6"!s;9Qq"Xjaqu5"Cq>U3i(\dq-r:Kpaqtfm]rD*S'!rr`1!O24nr;$?Krs\l+rVup% #R^\8q>UBhs8DrsrVud+#ltA>S3q>^*eq"k$prW!'&!!*#tjSs`~> f)GdM!WE'*!WW<$s8;lrrr2fprr2rrrqmE)p\OgfqXX[h!s&K*":4bsqYpHn!<1[O&,#ejp\Om2 !s'):!XA]+$0_F+"TeZ2!&Qh:r:U!cqD!s/K9s7,p]hZ"5h!W`8uoDJpprqH0brrN0$s8Dkf rsei'rV3i%!'S?tq>L0fd/X.FoD]X)rqlQgrr2cmqYW8X!!<<,!s]A1qtp$:rs\l+rVup%"9Sr8 pAOscs8DrsrVud*"TSZ-!"/f+rVu`goDSsm!!E?'!<2uYs*t~> f)GdM!WE'*!WW<$s8;lrrr2fprr2rrrqmE)p\OgfqXX[h!s&K*":4bsqYpHn!<1[O&,#ejp\Om2 !s'):!XA]+$0_F+"TeZ2!&Qh:r:U!cqD!s/K9s7,p]hZ"5h!W`8uoDJpprqH0brrN0$s8Dkf rsei'rV3i%!'S?tq>L0fd/X.FoD]X)rqlQgrr2cmqYW8X!!<<,!s]A1qtp$:rs\l+rVup%"9Sr8 pAOscs8DrsrVud*"TSZ-!"/f+rVu`goDSsm!!E?'!<2uYs*t~> f)GdM!WE'*!WW<$s8;lrrr2fprr2rrrqmE)p\OgfqXX[h!s&K*":4bsqYpHn!<1[O&,#ejp\Om2 !s'):!XA]+$0_F+"TeZ2!&Qh:r:U!cqD!s/K9s7,p]hZ"5h!W`8uoDJpprqH0brrN0$s8Dkf rsei'rV3i%!'S?tq>L0fd/X.FoD]X)rqlQgrr2cmqYW8X!!<<,!s]A1qtp$:rs\l+rVup%"9Sr8 pAOscs8DrsrVud*"TSZ-!"/f+rVu`goDSsm!!E?'!<2uYs*t~> f)GdM!WE'*!WW<$s8;lrrr2]m%0$2$qYU9gs5s@UrSRSS$3UA?!<)iorr;usfDcBYr:U$_oD7,? "Vh=E"p"bf!#6.S";Ln_rV-?MrquZnhuF)crUg$dhZ"5h!W`8urV$d%rr2EerrN0$s8Dkfrsnf& rqjVf!Z[I$r:KsbrmCcGrq$.+rqlQhrr2lon,<4?!=f)4!!hB?qt9X\f)GgMs8Mut"pP&/!r`,k o`"jg%0-Y7!!``/nFH>QqYDfA!!E?'!<2uYs*t~> f)GdM!WE'*!WW<$s8;lrrr2]m%0$2$qYU9gs5s@UrSRSS$3UA?!<)iorr;usfDcBYr:U$_oD7,? "Vh=E"p"bf!#6.S";Ln_rV-?MrquZnhuF)crUg$dhZ"5h!W`8urV$d%rr2EerrN0$s8Dkfrsnf& rqjVf!Z[I$r:KsbrmCcGrq$.+rqlQhrr2lon,<4?!=f)4!!hB?qt9X\f)GgMs8Mut"pP&/!r`,k o`"jg%0-Y7!!``/nFH>QqYDfA!!E?'!<2uYs*t~> f)GdM!WE'*!WW<$s8;lrrr2]m%0$2$qYU9gs5s@UrSRSS$3UA?!<)iorr;usfDcBYr:U$_oD7,? "Vh=E"p"bf!#6.S";Ln_rV-?MrquZnhuF)crUg$dhZ"5h!W`8urV$d%rr2EerrN0$s8Dkfrsnf& rqjVf!Z[I$r:KsbrmCcGrq$.+rqlQhrr2lon,<4?!=f)4!!hB?qt9X\f)GgMs8Mut"pP&/!r`,k o`"jg%0-Y7!!``/nFH>QqYDfA!!E?'!<2uYs*t~> f)GdM!WE'*!WW<$s8;lrrr2fp'E8%3rr)cnrVucprr)]lrW<9'#6"T,s8Drss8N#Lrser+pA=@Y lMgM`!"Ju9k5Z;-!<rqlWnoD\[`pAbp,qrdt8rs/T+!<;umq>^]urWiE%!WW9$rVW>g &,c>)rVY\m"9EH=rp]parm(QBrW)omrtkS,qu$Eaq>UBa#PeE&&-i19r9jO_qu-?ihZ!u^s8Duu #6GA8#5Ir_rX\r?!!NH/!"T#-rU0J%!!E0""9JQ'rr2!YJ,~> f)GdM!WE'*!WW<$s8;lrrr2fp'E8%3rr)cnrVucprr)]lrW<9'#6"T,s8Drss8N#Lrser+pA=@Y lMgM`!"Ju9k5Z;-!<rqlWnoD\[`pAbp,qrdt8rs/T+!<;umq>^]urWiE%!WW9$rVW>g &,c>)rVY\m"9EH=rp]parm(QBrW)omrtkS,qu$Eaq>UBa#PeE&&-i19r9jO_qu-?ihZ!u^s8Duu #6GA8#5Ir_rX\r?!!NH/!"T#-rU0J%!!E0""9JQ'rr2!YJ,~> f)GdM!WE'*!WW<$s8;lrrr2fp'E8%3rr)cnrVucprr)]lrW<9'#6"T,s8Drss8N#Lrser+pA=@Y lMgM`!"Ju9k5Z;-!<rqlWnoD\[`pAbp,qrdt8rs/T+!<;umq>^]urWiE%!WW9$rVW>g &,c>)rVY\m"9EH=rp]parm(QBrW)omrtkS,qu$Eaq>UBa#PeE&&-i19r9jO_qu-?ihZ!u^s8Duu #6GA8#5Ir_rX\r?!!NH/!"T#-rU0J%!!E0""9JQ'rr2!YJ,~> f)GdM!WE'*!WW<$s8;lrrr2`ns8N#t'E7t&rpKX^rp^-l":P;<"p"Purm^rVqu6Tjrr)`foD\Y!% fQJ(!Ug!i!=Ar,!"J5\p@nLap\k*cqsjIWhZ"5h!W`8us8EQIp&=sfrrN0$s8Dkgrsnr+rr;`[F 9DS_q>U-frQtTErW)urrqZR1rVZZmrqQNmgBRcX!!3-#&cV7up%81\q>T7N$N:#(!!!9)!#>YNm JmA+!WWQ2rW!*)"pb27$iL&.!WW6"roF*0~> f)GdM!WE'*!WW<$s8;lrrr2`ns8N#t'E7t&rpKX^rp^-l":P;<"p"Purm^rVqu6Tjrr)`foD\Y!% fQJ(!Ug!i!=Ar,!"J5\p@nLap\k*cqsjIWhZ"5h!W`8us8EQIp&=sfrrN0$s8Dkgrsnr+rr;`[F 9DS_q>U-frQtTErW)urrqZR1rVZZmrqQNmgBRcX!!3-#&cV7up%81\q>T7N$N:#(!!!9)!#>YNm JmA+!WWQ2rW!*)"pb27$iL&.!WW6"roF*0~> f)GdM!WE'*!WW<$s8;lrrr2`ns8N#t'E7t&rpKX^rp^-l":P;<"p"Purm^rVqu6Tjrr)`foD\Y!% fQJ(!Ug!i!=Ar,!"J5\p@nLap\k*cqsjIWhZ"5h!W`8us8EQIp&=sfrrN0$s8Dkgrsnr+rr;`[F 9DS_q>U-frQtTErW)urrqZR1rVZZmrqQNmgBRcX!!3-#&cV7up%81\q>T7N$N:#(!!!9)!#>YNm JmA+!WWQ2rW!*)"pb27$iL&.!WW6"roF*0~> o)J^gli7"a!WW/t!!r],!WE&rrr;rrrr<#trr<#trr;us&Gc;(q"amh$j$D/"Tni$qu5(E(AIh. q>^6irqH-`/Hu1Y!!t,,! $j?Y^rVZ9^rr2Heg&DHZs8W&trVup&!!iW)!!!2m!"B26"U"l,#64u0!!!'+rW)is!W;rXs*t~> o)J^gli7"a!WW/t!!r],!WE&rrr;rrrr<#trr<#trr;us&Gc;(q"amh$j$D/"Tni$qu5(E(AIh. q>^6irqH-`/Hu1Y!!t,,! $j?Y^rVZ9^rr2Heg&DHZs8W&trVup&!!iW)!!!2m!"B26"U"l,#64u0!!!'+rW)is!W;rXs*t~> o)J^gli7"a!WW/t!!r],!WE&rrr;rrrr<#trr<#trr;us&Gc;(q"amh$j$D/"Tni$qu5(E(AIh. q>^6irqH-`/Hu1Y!!t,,! $j?Y^rVZ9^rr2Heg&DHZs8W&trVup&!!iW)!!!2m!"B26"U"l,#64u0!!!'+rW)is!W;rXs*t~> o)J^grVuosnc&^hrVulq!"/i.!;ulprr;oqs8W)tq#:s*r;Q`jr;ZEl$NpG4!T(I"oeQ%rr<#P!!!'! !riN."9f/,j8XW~> o)J^grVuosnc&^hrVulq!"/i.!;ulprr;oqs8W)tq#:s*r;Q`jr;ZEl$NpG4!T(I"oeQ%rr<#P!!!'! !riN."9f/,j8XW~> o)J^grVuosnc&^hrVulq!"/i.!;ulprr;oqs8W)tq#:s*r;Q`jr;ZEl$NpG4!T(I"oeQ%rr<#P!!!'! !riN."9f/,j8XW~> m/I.drVc9ds8;uurqug&!WW9"s8Dutrr2rsrqQL*rVu]moDSRW$31P9!1$^ >lt*4"U+o0"R,ms"9J`1!!/gnq>0g`p\b!dhZ!c[!W`8urr2co"TeZ)s8Dl:rs/E#rr2rsrVbdU s8;rqrr*;teOflPKDtcJp](67rrE#rrr2rtr!iPrrM'Jr!T(I"oeQ%rr<#P!"&`. !XAr1&-)n0roF*0~> m/I.drVc9ds8;uurqug&!WW9"s8Dutrr2rsrqQL*rVu]moDSRW$31P9!1$^ >lt*4"U+o0"R,ms"9J`1!!/gnq>0g`p\b!dhZ!c[!W`8urr2co"TeZ)s8Dl:rs/E#rr2rsrVbdU s8;rqrr*;teOflPKDtcJp](67rrE#rrr2rtr!iPrrM'Jr!T(I"oeQ%rr<#P!"&`. !XAr1&-)n0roF*0~> m/I.drVc9ds8;uurqug&!WW9"s8Dutrr2rsrqQL*rVu]moDSRW$31P9!1$^ >lt*4"U+o0"R,ms"9J`1!!/gnq>0g`p\b!dhZ!c[!W`8urr2co"TeZ)s8Dl:rs/E#rr2rsrVbdU s8;rqrr*;teOflPKDtcJp](67rrE#rrr2rtr!iPrrM'Jr!T(I"oeQ%rr<#P!"&`. !XAr1&-)n0roF*0~> nc/Xgrr3'!rVc9ds8E'!rVZ^"!WW9"s8Dips8N&uq>LZts7lB_q=fjNrWEB+"p=c%rlb^6#&d'nhs7?6drr1%>s8;lps8ET0rVQBiMZs@c"UG,.EW#\*q>T(I"oeQ% rr<#P!"&`.!X&l6$3L;.q;hR+~> nc/Xgrr3'!rVc9ds8E'!rVZ^"!WW9"s8Dips8N&uq>LZts7lB_q=fjNrWEB+"p=c%rlb^6#&d'nhs7?6drr1%>s8;lps8ET0rVQBiMZs@c"UG,.EW#\*q>T(I"oeQ% rr<#P!"&`.!X&l6$3L;.q;hR+~> nc/Xgrr3'!rVc9ds8E'!rVZ^"!WW9"s8Dips8N&uq>LZts7lB_q=fjNrWEB+"p=c%rlb^6#&d'nhs7?6drr1%>s8;lps8ET0rVQBiMZs@c"UG,.EW#\*q>T(I"oeQ% rr<#P!"&`.!X&l6$3L;.q;hR+~> q>^Koqu6fsrVlfrrr2Ees8E#sr;[!(!!<-!rVQWprr<#orXnu*q"aCSp'1[&":G27!;ZWnbPr+K qtU*_rqcTcM2;39!<`Mh!"T,7"ptG:#6>-Sp\4R_q"W_G"on])s8;lqqYp^#!!3,ur5emBrVHKl qtpEgrTjL`rX\`#pA+Qn!D>!sAGqjSs`~> q>^Koqu6fsrVlfrrr2Ees8E#sr;[!(!!<-!rVQWprr<#orXnu*q"aCSp'1[&":G27!;ZWnbPr+K qtU*_rqcTcM2;39!<`Mh!"T,7"ptG:#6>-Sp\4R_q"W_G"on])s8;lqqYp^#!!3,ur5emBrVHKl qtpEgrTjL`rX\`#pA+Qn!D>!sAGqjSs`~> q>^Koqu6fsrVlfrrr2Ees8E#sr;[!(!!<-!rVQWprr<#orXnu*q"aCSp'1[&":G27!;ZWnbPr+K qtU*_rqcTcM2;39!<`Mh!"T,7"ptG:#6>-Sp\4R_q"W_G"on])s8;lqqYp^#!!3,ur5emBrVHKl qtpEgrTjL`rX\`#pA+Qn!D>!sAGqjSs`~> q>^Blrqurrr;HW]rrW2ur;H^$!!E9&r;QWmrVuosrW)uorXo)-oDeLZ=pG94"U+o,"oA5tbPr.G rV-9hqYL*`q=pW`! q>^Blrqurrr;HW]rrW2ur;H^$!!E9&r;QWmrVuosrW)uorXo)-oDeLZ=pG94"U+o,"oA5tbPr.G rV-9hqYL*`q=pW`! q>^Blrqurrr;HW]rrW2ur;H^$!!E9&r;QWmrVuosrW)uorXo)-oDeLZ=pG94"U+o,"oA5tbPr.G rV-9hqYL*`q=pW`! q>^Hn!r`&prqcfqrVlf`rt>;.quHj$!<`B'r;HHfqYC$fs7Q@'r;H6eogAld!XA]6"98Murr1+@ (]44-qu$L?dhZ!c[!W`8urr2co"TeZ) s8Dl:rs/Mrqt]dWs7c?enG`Cds8N#r%/g+gN<'#Ph>.*Irqa_9')qk-r;6EirVugf!=Ao0!X/S7 rqlfqqU,87"o\;ijSs`~> q>^Hn!r`&prqcfqrVlf`rt>;.quHj$!<`B'r;HHfqYC$fs7Q@'r;H6eogAld!XA]6"98Murr1+@ (]44-qu$L?dhZ!c[!W`8urr2co"TeZ) s8Dl:rs/Mrqt]dWs7c?enG`Cds8N#r%/g+gN<'#Ph>.*Irqa_9')qk-r;6EirVugf!=Ao0!X/S7 rqlfqqU,87"o\;ijSs`~> q>^Hn!r`&prqcfqrVlf`rt>;.quHj$!<`B'r;HHfqYC$fs7Q@'r;H6eogAld!XA]6"98Murr1+@ (]44-qu$L?dhZ!c[!W`8urr2co"TeZ) s8Dl:rs/Mrqt]dWs7c?enG`Cds8N#r%/g+gN<'#Ph>.*Irqa_9')qk-r;6EirVugf!=Ao0!X/S7 rqlfqqU,87"o\;ijSs`~> q#CBn#Q=StqYL-frVZZarsSf'quQs'!XJl2rr2op"S_cks8Vfl&c2J(n1F\@!YPP7!s&DMp\t08 rtkJ+rr2foq"sj_rVQQ=$NUA4!<<*#!sJ,o%fun7"9SW-!<m:CB&#JBFerqC1pm2!#TP=qu?Zorqsk;"TJAtqtpBj%P\.f!X&`. !Rgr?rq$0_dJjCLs8W)us4RG[! q#CBn#Q=StqYL-frVZZarsSf'quQs'!XJl2rr2op"S_cks8Vfl&c2J(n1F\@!YPP7!s&DMp\t08 rtkJ+rr2foq"sj_rVQQ=$NUA4!<<*#!sJ,o%fun7"9SW-!<m:CB&#JBFerqC1pm2!#TP=qu?Zorqsk;"TJAtqtpBj%P\.f!X&`. !Rgr?rq$0_dJjCLs8W)us4RG[! q#CBn#Q=StqYL-frVZZarsSf'quQs'!XJl2rr2op"S_cks8Vfl&c2J(n1F\@!YPP7!s&DMp\t08 rtkJ+rr2foq"sj_rVQQ=$NUA4!<<*#!sJ,o%fun7"9SW-!<m:CB&#JBFerqC1pm2!#TP=qu?Zorqsk;"TJAtqtpBj%P\.f!X&`. !Rgr?rq$0_dJjCLs8W)us4RG[! q>Ud#qYpHhrr2WirTjG3!!!N/p\t0jp\Ojgrr)fpo)ALarposcrVca0%KZ\;!sAT. "9AJpqu$HlrrE&Gs8W)urrrE%rr2lprqmE+l0/9M#6b//"9Jc-"98Q)!!_om"T\T(rVl`NrrrH) !<;urrqcWu!WW9$rVXh q>Ud#qYpHhrr2WirTjG3!!!N/p\t0jp\Ojgrr)fpo)ALarposcrVca0%KZ\;!sAT. "9AJpqu$HlrrE&Gs8W)urrrE%rr2lprqmE+l0/9M#6b//"9Jc-"98Q)!!_om"T\T(rVl`NrrrH) !<;urrqcWu!WW9$rVXh q>Ud#qYpHhrr2WirTjG3!!!N/p\t0jp\Ojgrr)fpo)ALarposcrVca0%KZ\;!sAT. "9AJpqu$HlrrE&Gs8W)urrrE%rr2lprqmE+l0/9M#6b//"9Jc-"98Q)!!_om"T\T(rVl`NrrrH) !<;urrqcWu!WW9$rVXh q>Ug!s7Z$_rVZ]orr29a'`Rn)rW!$)!!!'#qY9mcqYU3is8W&s)>*q-r;ZZcqZ$p/!<LKR!"B#3#QOi=!#>\BqXj[[j8XW~> q>Ug!s7Z$_rVZ]orr29a'`Rn)rW!$)!!!'#qY9mcqYU3is8W&s)>*q-r;ZZcqZ$p/!<LKR!"B#3#QOi=!#>\BqXj[[j8XW~> q>Ug!s7Z$_rVZ]orr29a'`Rn)rW!$)!!!'#qY9mcqYU3is8W&s)>*q-r;ZZcqZ$p/!<LKR!"B#3#QOi=!#>\BqXj[[j8XW~> q>U]uros=Vn,DAHip#J2iWfMc!=Jl;g#LZ:ro4"ck'G1rj(E*nf"p5$L0J!!E9=!!NNIrU^$grr2rr e,TII#Pe/nr;6Bp!T="h!<`E'"UG)M)ufd6p&=U_jSs`~> q>U]uros=Vn,DAHip#J2iWfMc!=Jl;g#LZ:ro4"ck'G1rj(E*nf"p5$L0J!!E9=!!NNIrU^$grr2rr e,TII#Pe/nr;6Bp!T="h!<`E'"UG)M)ufd6p&=U_jSs`~> q>U]uros=Vn,DAHip#J2iWfMc!=Jl;g#LZ:ro4"ck'G1rj(E*nf"p5$L0J!!E9=!!NNIrU^$grr2rr e,TII#Pe/nr;6Bp!T="h!<`E'"UG)M)ufd6p&=U_jSs`~> q>^Kh#QE`\rVZ]s!UB^s"9SZ=!Xo;9!WiN+!XfD:!r2g5":5)6!WiW.!WrN3!XAo5!=(FVrVcWl rknd9rVcZor=A]%p&%A]!rrH(%fl_3!rXSu$ s+hQt$^nQ;]Y(hd]D0&;]D]DB\.u]g\@0)a]!@))!s(EkqY^Bkr;Z]oao;nNqYU96!sAc-!! q>^Kh#QE`\rVZ]s!UB^s"9SZ=!Xo;9!WiN+!XfD:!r2g5":5)6!WiW.!WrN3!XAo5!=(FVrVcWl rknd9rVcZor=A]%p&%A]!rrH(%fl_3!rXSu$ s+hQt$^nQ;]Y(hd]D0&;]D]DB\.u]g\@0)a]!@))!s(EkqY^Bkr;Z]oao;nNqYU96!sAc-!! q>^Kh#QE`\rVZ]s!UB^s"9SZ=!Xo;9!WiN+!XfD:!r2g5":5)6!WiW.!WrN3!XAo5!=(FVrVcWl rknd9rVcZor=A]%p&%A]!rrH(%fl_3!rXSu$ s+hQt$^nQ;]Y(hd]D0&;]D]DB\.u]g\@0)a]!@))!s(EkqY^Bkr;Z]oao;nNqYU96!sAc-!! q#:`nqu$3\rW36+!s/N&!:^+E!!ic0#6=f/"oo#8#lk#0"9JQ'!1:q=sa\qXXG!qYU'^q=jgbo_#jq!X] q#:`nqu$3\rW36+!s/N&!:^+E!!ic0#6=f/"oo#8#lk#0"9JQ'!1:q=sa\qXXG!qYU'^q=jgbo_#jq!X] q#:`nqu$3\rW36+!s/N&!:^+E!!ic0#6=f/"oo#8#lk#0"9JQ'!1:q=sa\qXXG!qYU'^q=jgbo_#jq!X] q>Ug!qYBp`pA=mn!s7fh&Hr18"98K(!<<6&"9SW."9JW$!#>_?!X/Q("TSN-"T\`6#71E?p&"Xb p;$_'r=8Vuq>0ns@KHuD"9\]*!W<#s!VcWr!<<0"rn[SY!!30#r;Q]lrriH(!WW,rb5_M@$iU,* KbX\"fDPRFrUp0crVlO*s7cK[hk!4@#mE;]o_\Lbqu6NnqT/[=qYlo`rW`Z2#m'u(q#1!erm(QD rWiDuqtKmcq#B=P!;HKjs8!'$q"Od[p\"R]roF*0~> q>Ug!qYBp`pA=mn!s7fh&Hr18"98K(!<<6&"9SW."9JW$!#>_?!X/Q("TSN-"T\`6#71E?p&"Xb p;$_'r=8Vuq>0ns@KHuD"9\]*!W<#s!VcWr!<<0"rn[SY!!30#r;Q]lrriH(!WW,rb5_M@$iU,* KbX\"fDPRFrUp0crVlO*s7cK[hk!4@#mE;]o_\Lbqu6NnqT/[=qYlo`rW`Z2#m'u(q#1!erm(QD rWiDuqtKmcq#B=P!;HKjs8!'$q"Od[p\"R]roF*0~> q>Ug!qYBp`pA=mn!s7fh&Hr18"98K(!<<6&"9SW."9JW$!#>_?!X/Q("TSN-"T\`6#71E?p&"Xb p;$_'r=8Vuq>0ns@KHuD"9\]*!W<#s!VcWr!<<0"rn[SY!!30#r;Q]lrriH(!WW,rb5_M@$iU,* KbX\"fDPRFrUp0crVlO*s7cK[hk!4@#mE;]o_\Lbqu6NnqT/[=qYlo`rW`Z2#m'u(q#1!erm(QD rWiDuqtKmcq#B=P!;HKjs8!'$q"Od[p\"R]roF*0~> q>UfurV?-_q"t*o!Wi9#!j?1%fH5#q"FR\r-eeY!!E<-r;Zs$!WiH+p](?r!!3)uh>[ZZ!W`8urr2co"TeZ) s8DlU?krqmW1r;?9cagd1E*=DiR3M>L3rVc`mrqZTnaSu;8 K)PiY!!EE)Ierp?p%nUcd/X.F#5e>ps8)cli;F2dqYU!cq>'m]p\+LXrqZHPs*t~> q>UfurV?-_q"t*o!Wi9#!j?1%fH5#q"FR\r-eeY!!E<-r;Zs$!WiH+p](?r!!3)uh>[ZZ!W`8urr2co"TeZ) s8DlU?krqmW1r;?9cagd1E*=DiR3M>L3rVc`mrqZTnaSu;8 K)PiY!!EE)Ierp?p%nUcd/X.F#5e>ps8)cli;F2dqYU!cq>'m]p\+LXrqZHPs*t~> q>UfurV?-_q"t*o!Wi9#!j?1%fH5#q"FR\r-eeY!!E<-r;Zs$!WiH+p](?r!!3)uh>[ZZ!W`8urr2co"TeZ) s8DlU?krqmW1r;?9cagd1E*=DiR3M>L3rVc`mrqZTnaSu;8 K)PiY!!EE)Ierp?p%nUcd/X.F#5e>ps8)cli;F2dqYU!cq>'m]p\+LXrqZHPs*t~> q#:QrpA+a\rr`6$joGA]!<<;q!<3'9"9AT*! q#:QrpA+a\rr`6$joGA]!<<;q!<3'9"9AT*! q#:QrpA+a\rr`6$joGA]!<<;q!<3'9"9AT*! q>U^!q"k$fo)8ai!RUlI!WE'*"9AW+#,nKsrr2lrrVj/'&,?1'Ws&\/![(E9>5;G'>Q%b*=VW_/)''"f$31;F EiJC!qt^3is8W)tcMn[Up&4abrr,pu$jH\9"9kV"oD&+VrVPjZs7uojq#'m`rKR>4~> q>U^!q"k$fo)8ai!RUlI!WE'*"9AW+#,nKsrr2lrrVj/'&,?1'Ws&\/![(E9>5;G'>Q%b*=VW_/)''"f$31;F EiJC!qt^3is8W)tcMn[Up&4abrr,pu$jH\9"9kV"oD&+VrVPjZs7uojq#'m`rKR>4~> q>U^!q"k$fo)8ai!RUlI!WE'*"9AW+#,nKsrr2lrrVj/'&,?1'Ws&\/![(E9>5;G'>Q%b*=VW_/)''"f$31;F EiJC!qt^3is8W)tcMn[Up&4abrr,pu$jH\9"9kV"oD&+VrVPjZs7uojq#'m`rKR>4~> q>U]pr;Q3]qsa^/!"&`.]YqVap&4gerqufrrj2Y)rVua&^&e9H"TeZ6!"8u8p](?r!!3)uh>[TX !W`8uq>Ud#!WW6#rVccqrlb:3bqYgB_s7uX!qu?Kgrq66`PlH7~> q>U]pr;Q3]qsa^/!"&`.]YqVap&4gerqufrrj2Y)rVua&^&e9H"TeZ6!"8u8p](?r!!3)uh>[TX !W`8uq>Ud#!WW6#rVccqrlb:3bqYgB_s7uX!qu?Kgrq66`PlH7~> q>U]pr;Q3]qsa^/!"&`.]YqVap&4gerqufrrj2Y)rVua&^&e9H"TeZ6!"8u8p](?r!!3)uh>[TX !W`8uq>Ud#!WW6#rVccqrlb:3bqYgB_s7uX!qu?Kgrq66`PlH7~> q>Ud"qWRkTnG:kngWA4Vp%&+XpA"Rarqufrrj)P6oD\O]g].EW%0?YM!<!WrN6!!3gTK:TO'o^htZoDSI_ rr<#trm1T\rV??gqX?'@!!EH4!s?OAo(N+UrVlHgnc/F_"8Mlpp&=ggqNV#1~> q>Ud"qWRkTnG:kngWA4Vp%&+XpA"Rarqufrrj)P6oD\O]g].EW%0?YM!<!WrN6!!3gTK:TO'o^htZoDSI_ rr<#trm1T\rV??gqX?'@!!EH4!s?OAo(N+UrVlHgnc/F_"8Mlpp&=ggqNV#1~> q>Ud"qWRkTnG:kngWA4Vp%&+XpA"Rarqufrrj)P6oD\O]g].EW%0?YM!<!WrN6!!3gTK:TO'o^htZoDSI_ rr<#trm1T\rV??gqX?'@!!EH4!s?OAo(N+UrVlHgnc/F_"8Mlpp&=ggqNV#1~> q>U]krq$*arqZQlr71cGrrE&sr=],.s8M`lrqZEhrVlisrr2lqrj2V8qY]d\p&FR_!!3]4!=Jl4 p](?r!!3)uh>[TX!W`8uq>Ud#!WW6#rVccqrlbUEh rVlisrr17D$1Rr]rqu`q!U3iqZ$6frpg$ar!35lmJd%Vrr//^J,~> q>U]krq$*arqZQlr71cGrrE&sr=],.s8M`lrqZEhrVlisrr2lqrj2V8qY]d\p&FR_!!3]4!=Jl4 p](?r!!3)uh>[TX!W`8uq>Ud#!WW6#rVccqrlbUEh rVlisrr17D$1Rr]rqu`q!U3iqZ$6frpg$ar!35lmJd%Vrr//^J,~> q>U]krq$*arqZQlr71cGrrE&sr=],.s8M`lrqZEhrVlisrr2lqrj2V8qY]d\p&FR_!!3]4!=Jl4 p](?r!!3)uh>[TX!W`8uq>Ud#!WW6#rVccqrlbUEh rVlisrr17D$1Rr]rqu`q!U3iqZ$6frpg$ar!35lmJd%Vrr//^J,~> q>U]uqu6Wmqu6H>rW<-!rr)d&rq?*Xrq,p`nbrFbrr;rsrj2V8qu6TirVc`pr!`WE!"fPL-equ6Wo!<<&t&cMS&q>U0grqHEb s8Drss8N#DrtkD.rp'O]&-*%;"W771rV5jXrr)W_rqQ$`q>LU!q>Ts]qZ$8Rs*t~> q>U]uqu6Wmqu6H>rW<-!rr)d&rq?*Xrq,p`nbrFbrr;rsrj2V8qu6TirVc`pr!`WE!"fPL-equ6Wo!<<&t&cMS&q>U0grqHEb s8Drss8N#DrtkD.rp'O]&-*%;"W771rV5jXrr)W_rqQ$`q>LU!q>Ts]qZ$8Rs*t~> q>U]uqu6Wmqu6H>rW<-!rr)d&rq?*Xrq,p`nbrFbrr;rsrj2V8qu6TirVc`pr!`WE!"fPL-equ6Wo!<<&t&cMS&q>U0grqHEb s8Drss8N#DrtkD.rp'O]&-*%;"W771rV5jXrr)W_rqQ$`q>LU!q>Ts]qZ$8Rs*t~> q>U]tp\Fjgp&"U5rY#81rVZQir;?NerV#g^p\t*grVc]srVlf&rt#)'p\sd`rV,p`,ldrH#lsc& !rr?%!WN)Srr`<'!<;ulrWiQ*!<<#rs8N#@rs&2orr2]frVQTfs8;ipr"]5+pAP$frr2QhrVZZm qYpHms8W)tci=%B$M",or;ls"!=/;mrVd!!o_AF]qXFO\r q>U]tp\Fjgp&"U5rY#81rVZQir;?NerV#g^p\t*grVc]srVlf&rt#)'p\sd`rV,p`,ldrH#lsc& !rr?%!WN)Srr`<'!<;ulrWiQ*!<<#rs8N#@rs&2orr2]frVQTfs8;ipr"]5+pAP$frr2QhrVZZm qYpHms8W)tci=%B$M",or;ls"!=/;mrVd!!o_AF]qXFO\r q>U]tp\Fjgp&"U5rY#81rVZQir;?NerV#g^p\t*grVc]srVlf&rt#)'p\sd`rV,p`,ldrH#lsc& !rr?%!WN)Srr`<'!<;ulrWiQ*!<<#rs8N#@rs&2orr2]frVQTfs8;ipr"]5+pAP$frr2QhrVZZm qYpHms8W)tci=%B$M",or;ls"!=/;mrVd!!o_AF]qXFO\r q>UZks7cQmrqG%Es8F#^Ko!rr9"rVdT4q>UBgrr<#rs8;oqqYU8(Dqullkr:p0_rfmG5~> q>UZks7cQmrqG%Es8F#^Ko!rr9"rVdT4q>UBgrr<#rs8;oqqYU8(Dqullkr:p0_rfmG5~> q>UZks7cQmrqG%Es8F#^Ko!rr9"rVdT4q>UBgrr<#rs8;oqqYU8(Dqullkr:p0_rfmG5~> ao<7Rq>L ao<7Rq>L ao<7Rq>L aoC3j qYUSM9&,H5&oD\Uh"a'S aoC3j qYUSM9&,H5&oD\Uh"a'S aoC3j qYUSM9&,H5&oD\Uh"a'S ao^?j qu?]q(A[n*qYgBjs8Vumrr)ZgrV?Ejr;?TgaSueGqY^'^rs")SqZ$Eko_n[Ws8Vs2p%JF_r:U*_ rV$*g%/'c$p\jm\rV_u\J,~> ao^?j qu?]q(A[n*qYgBjs8Vumrr)ZgrV?Ejr;?TgaSueGqY^'^rs")SqZ$Eko_n[Ws8Vs2p%JF_r:U*_ rV$*g%/'c$p\jm\rV_u\J,~> ao^?j qu?]q(A[n*qYgBjs8Vumrr)ZgrV?Ejr;?TgaSueGqY^'^rs")SqZ$Eko_n[Ws8Vs2p%JF_r:U*_ rV$*g%/'c$p\jm\rV_u\J,~> ec5UIs8;rsrVn/Bq>^?dr;H3aqtTj_nb`%Y@:EXF#m1;5$3L89#m1\4r;?NmXoB17qtojYr:U$` ScT$#!X&K(!<<0!rr1jU*rbs5!!!8pp](3lrqufrqHs=8q==FZq"sm`rVlcodf9@H%fQ>'rVlcm q"ss_qY:'eqZ$Tp(]3![JV&K+Jq\`*KS4l.MYZuGrVHBhrQ5'MqtU0cq"pKRqYKj`s7c3cnc'F% r:p6dp%J+ZojIUn!#>#+rVHHhq#0lMs*t~> ec5UIs8;rsrVn/Bq>^?dr;H3aqtTj_nb`%Y@:EXF#m1;5$3L89#m1\4r;?NmXoB17qtojYr:U$` ScT$#!X&K(!<<0!rr1jU*rbs5!!!8pp](3lrqufrqHs=8q==FZq"sm`rVlcodf9@H%fQ>'rVlcm q"ss_qY:'eqZ$Tp(]3![JV&K+Jq\`*KS4l.MYZuGrVHBhrQ5'MqtU0cq"pKRqYKj`s7c3cnc'F% r:p6dp%J+ZojIUn!#>#+rVHHhq#0lMs*t~> ec5UIs8;rsrVn/Bq>^?dr;H3aqtTj_nb`%Y@:EXF#m1;5$3L89#m1\4r;?NmXoB17qtojYr:U$` ScT$#!X&K(!<<0!rr1jU*rbs5!!!8pp](3lrqufrqHs=8q==FZq"sm`rVlcodf9@H%fQ>'rVlcm q"ss_qY:'eqZ$Tp(]3![JV&K+Jq\`*KS4l.MYZuGrVHBhrQ5'MqtU0cq"pKRqYKj`s7c3cnc'F% r:p6dp%J+ZojIUn!#>#+rVHHhq#0lMs*t~> fDkjLrquopqu$Ek(]=:/s82Z`qXXOQqY'eW8Oj'e"Tnf,!<**-!!NB3#lFPtrVir!'DhY)p\aj] s762t!XAf3!s&H(!WN#tro*kuo_\Tq$3p/"qYL*cp\Xm\%1*42qtL$eqYC!drr)iEs8W'/rVZTl rVZNdqYmDkq=O[]qu?]q(](j>'+tlh%hfKc&eYck*K9jiq>BpcrlP0Mr:p!`q#0p\rVcTcs7Z?Z rtkV/q=OU^mem)\!;lct#Q"Q#rpTgcnbSLMJ,~> fDkjLrquopqu$Ek(]=:/s82Z`qXXOQqY'eW8Oj'e"Tnf,!<**-!!NB3#lFPtrVir!'DhY)p\aj] s762t!XAf3!s&H(!WN#tro*kuo_\Tq$3p/"qYL*cp\Xm\%1*42qtL$eqYC!drr)iEs8W'/rVZTl rVZNdqYmDkq=O[]qu?]q(](j>'+tlh%hfKc&eYck*K9jiq>BpcrlP0Mr:p!`q#0p\rVcTcs7Z?Z rtkV/q=OU^mem)\!;lct#Q"Q#rpTgcnbSLMJ,~> fDkjLrquopqu$Ek(]=:/s82Z`qXXOQqY'eW8Oj'e"Tnf,!<**-!!NB3#lFPtrVir!'DhY)p\aj] s762t!XAf3!s&H(!WN#tro*kuo_\Tq$3p/"qYL*cp\Xm\%1*42qtL$eqYC!drr)iEs8W'/rVZTl rVZNdqYmDkq=O[]qu?]q(](j>'+tlh%hfKc&eYck*K9jiq>BpcrlP0Mr:p!`q#0p\rVcTcs7Z?Z rtkV/q=OU^mem)\!;lct#Q"Q#rpTgcnbSLMJ,~> g&M'Ns8Duq"8hrlr;HR>r;-!\s7#mbqt2j$/MRD0#QYbD!!WQ0!!WE,$3:59o)/Icrr2otriuJ: rVlQ_rqlprVlclrr2Wr!s/>erVZBequ$HnrVb1E s8N&ss8EE)r;-9YEBKZgqXa[_s8Muu_F"5%&H`.9!!**#!!3?TCAmbqr;QT8rt"o'q"jFTrq$!W p&+a`s7l*`(@_;!r9X=RrrNT&q>_3$cMI).nFc\NPlH7~> g&M'Ns8Duq"8hrlr;HR>r;-!\s7#mbqt2j$/MRD0#QYbD!!WQ0!!WE,$3:59o)/Icrr2otriuJ: rVlQ_rqlprVlclrr2Wr!s/>erVZBequ$HnrVb1E s8N&ss8EE)r;-9YEBKZgqXa[_s8Muu_F"5%&H`.9!!**#!!3?TCAmbqr;QT8rt"o'q"jFTrq$!W p&+a`s7l*`(@_;!r9X=RrrNT&q>_3$cMI).nFc\NPlH7~> g&M'Ns8Duq"8hrlr;HR>r;-!\s7#mbqt2j$/MRD0#QYbD!!WQ0!!WE,$3:59o)/Icrr2otriuJ: rVlQ_rqlprVlclrr2Wr!s/>erVZBequ$HnrVb1E s8N&ss8EE)r;-9YEBKZgqXa[_s8Muu_F"5%&H`.9!!**#!!3?TCAmbqr;QT8rt"o'q"jFTrq$!W p&+a`s7l*`(@_;!r9X=RrrNT&q>_3$cMI).nFc\NPlH7~> g&D'Orquiprqccnqu-Km+8u33rqHUs*t~> g&D'Orquiprqccnqu-Km+8u33rqHUs*t~> g&D'Orquiprqccnqu-Km+8u33rqHUs*t~> li7"ar;Zcq0`UtKnGWCcs8Vloq>'sYo)JRaqYpNbrVuli"U4r?!!rZ0!>,;5!=T5:0is!%I@r;Xc'!!\4n^ li7"ar;Zcq0`UtKnGWCcs8Vloq>'sYo)JRaqYpNbrVuli"U4r?!!rZ0!>,;5!=T5:0is!%I@r;Xc'!!\4n^ li7"ar;Zcq0`UtKnGWCcs8Vloq>'sYo)JRaqYpNbrVuli"U4r?!!rZ0!>,;5!=T5:0is!%I@r;Xc'!!\4n^ l2Ue_qu8_VrUp0ioD8IZq=ad^rVc`kr;HQSe`I&;!t##4!WWf6!!<<'"p+f*"9]28!rr?."UQ@h )#jL4rr0;)q>U3i&,u(uoDeOTq\LCc!VZN]rSdbmrqlZg+ohr3qu?WnrqucS!!*&upAb*fbPsR$ rVlQWYJ,~> l2Ue_qu8_VrUp0ioD8IZq=ad^rVc`kr;HQSe`I&;!t##4!WWf6!!<<'"p+f*"9]28!rr?."UQ@h )#jL4rr0;)q>U3i&,u(uoDeOTq\LCc!VZN]rSdbmrqlZg+ohr3qu?WnrqucS!!*&upAb*fbPsR$ rVlQWYJ,~> l2Ue_qu8_VrUp0ioD8IZq=ad^rVc`kr;HQSe`I&;!t##4!WWf6!!<<'"p+f*"9]28!rr?."UQ@h )#jL4rr0;)q>U3i&,u(uoDeOTq\LCc!VZN]rSdbmrqlZg+ohr3qu?WnrqucS!!*&upAb*fbPsR$ rVlQWYJ,~> l2Ue_qu?]o3;`RPrVl`ms7u3ao(N"\bJqg;#Qk20$31/4#RCJ>!Wi]1#QOr/!=Sr9!X1\>0J3;% r;$-drr0;)q>U3i&,l5#mf*(XqXaM9%/Kespu25hrpp$eo`>C"r;ZH_p[IqZ"UG),qu69dbPr:U rVQTio`*`6#7V=moCqtXpAFmgrr;us(W&66!2ohorV$0go)AXGD\)m[5f`j#qYpKor;ZcDs7uZa rrE#sq\/r-rVZTfrVsn5#RLD0"8i&joDJF`PlH7~> l2Ue_qu?]o3;`RPrVl`ms7u3ao(N"\bJqg;#Qk20$31/4#RCJ>!Wi]1#QOr/!=Sr9!X1\>0J3;% r;$-drr0;)q>U3i&,l5#mf*(XqXaM9%/Kespu25hrpp$eo`>C"r;ZH_p[IqZ"UG),qu69dbPr:U rVQTio`*`6#7V=moCqtXpAFmgrr;us(W&66!2ohorV$0go)AXGD\)m[5f`j#qYpKor;ZcDs7uZa rrE#sq\/r-rVZTfrVsn5#RLD0"8i&joDJF`PlH7~> l2Ue_qu?]o3;`RPrVl`ms7u3ao(N"\bJqg;#Qk20$31/4#RCJ>!Wi]1#QOr/!=Sr9!X1\>0J3;% r;$-drr0;)q>U3i&,l5#mf*(XqXaM9%/Kespu25hrpp$eo`>C"r;ZH_p[IqZ"UG),qu69dbPr:U rVQTio`*`6#7V=moCqtXpAFmgrr;us(W&66!2ohorV$0go)AXGD\)m[5f`j#qYpKor;ZcDs7uZa rrE#sq\/r-rVZTfrVsn5#RLD0"8i&joDJF`PlH7~> n,N@cs8N)urr;rr"o\Aip&Fgcr%IpHq>[n5[LrfJ%KR1F!!WQ/!U3i&,uD"rVZ-^m.^MT8G;r[q;M>irVlWjqaL\n\$ioV\@/OJ!_E@kq>C9l bPr:UrVQHhqtYpZ!rt@/qu6Bjq>C3jrVn#>r4b/m"/5VcrUT[^r;6E`fm=A5$s)6[r;QZlqu$Hl \c3KDqtg3grVZQbqY7N"p'Ulu!=e\orUouFs*t~> n,N@cs8N)urr;rr"o\Aip&Fgcr%IpHq>[n5[LrfJ%KR1F!!WQ/!U3i&,uD"rVZ-^m.^MT8G;r[q;M>irVlWjqaL\n\$ioV\@/OJ!_E@kq>C9l bPr:UrVQHhqtYpZ!rt@/qu6Bjq>C3jrVn#>r4b/m"/5VcrUT[^r;6E`fm=A5$s)6[r;QZlqu$Hl \c3KDqtg3grVZQbqY7N"p'Ulu!=e\orUouFs*t~> n,N@cs8N)urr;rr"o\Aip&Fgcr%IpHq>[n5[LrfJ%KR1F!!WQ/!U3i&,uD"rVZ-^m.^MT8G;r[q;M>irVlWjqaL\n\$ioV\@/OJ!_E@kq>C9l bPr:UrVQHhqtYpZ!rt@/qu6Bjq>C3jrVn#>r4b/m"/5VcrUT[^r;6E`fm=A5$s)6[r;QZlqu$Hl \c3KDqtg3grVZQbqY7N"p'Ulu!=e\orUouFs*t~> n,ECerr)lrs8W)trr"kWoCheQqt^*gpR[t@T`>9&!X&f1#6tD5!X&r4#lt)0#m(/4$3C;0?=@4? q#C-dr;6Ngr:g$drqucrrosIYrn7>ArX]&-rqZQfo_\7Or:0X_rq#+Ks8!K-s7c3m!XJf7!X/c: "(D')rq?3aqTJmQrr)inqXi9%$ihK7mJHhYqt'aarr2rtrZCsN3!]e1ZE1%3Z)t46XKAIb3rVHEjs8BM.(]=1,qu-Kkqtg/^!X&B)#5SO2r:^$cq2G?(~> n,ECerr)lrs8W)trr"kWoCheQqt^*gpR[t@T`>9&!X&f1#6tD5!X&r4#lt)0#m(/4$3C;0?=@4? q#C-dr;6Ngr:g$drqucrrosIYrn7>ArX]&-rqZQfo_\7Or:0X_rq#+Ks8!K-s7c3m!XJf7!X/c: "(D')rq?3aqTJmQrr)inqXi9%$ihK7mJHhYqt'aarr2rtrZCsN3!]e1ZE1%3Z)t46XKAIb3rVHEjs8BM.(]=1,qu-Kkqtg/^!X&B)#5SO2r:^$cq2G?(~> n,ECerr)lrs8W)trr"kWoCheQqt^*gpR[t@T`>9&!X&f1#6tD5!X&r4#lt)0#m(/4$3C;0?=@4? q#C-dr;6Ngr:g$drqucrrosIYrn7>ArX]&-rqZQfo_\7Or:0X_rq#+Ks8!K-s7c3m!XJf7!X/c: "(D')rq?3aqTJmQrr)inqXi9%$ihK7mJHhYqt'aarr2rtrZCsN3!]e1ZE1%3Z)t46XKAIb3rVHEjs8BM.(]=1,qu-Kkqtg/^!X&B)#5SO2r:^$cq2G?(~> n,ECdrqufps8Moo"8MT[rVlUIM2-fc#QY#7!rrE1"p"i8!<`H+"9f)4!X&]5!sX0uFEmW]rVcKe q>($`s8DZ`rVl`ps8M9_q>K"Hq>C'f&-)S&q>U3aq>B^Zs7Q?gro*nWq%`Z'q>5A^I!9g^G^Kp= rqQ?dqt9^YbPsU%rVZHar.>jg"+f>(r;6?brVc`ps8W)trV+,f"99/Z'Ghc.'HJ,1+VPJ%"98Wf Yk@nmr;?Tprji%2r;6Bhrr!E+q2#.R"oJH-qgnM>qY'aZN;nD~> n,ECdrqufps8Moo"8MT[rVlUIM2-fc#QY#7!rrE1"p"i8!<`H+"9f)4!X&]5!sX0uFEmW]rVcKe q>($`s8DZ`rVl`ps8M9_q>K"Hq>C'f&-)S&q>U3aq>B^Zs7Q?gro*nWq%`Z'q>5A^I!9g^G^Kp= rqQ?dqt9^YbPsU%rVZHar.>jg"+f>(r;6?brVc`ps8W)trV+,f"99/Z'Ghc.'HJ,1+VPJ%"98Wf Yk@nmr;?Tprji%2r;6Bhrr!E+q2#.R"oJH-qgnM>qY'aZN;nD~> n,ECdrqufps8Moo"8MT[rVlUIM2-fc#QY#7!rrE1"p"i8!<`H+"9f)4!X&]5!sX0uFEmW]rVcKe q>($`s8DZ`rVl`ps8M9_q>K"Hq>C'f&-)S&q>U3aq>B^Zs7Q?gro*nWq%`Z'q>5A^I!9g^G^Kp= rqQ?dqt9^YbPsU%rVZHar.>jg"+f>(r;6?brVc`ps8W)trV+,f"99/Z'Ghc.'HJ,1+VPJ%"98Wf Yk@nmr;?Tprji%2r;6Bhrr!E+q2#.R"oJH-qgnM>qY'aZN;nD~> n,ELgqtg0fqu6NmrAXNKqu(DYD[6=H!XAo1#lt)2"9ei6$N^M=!rrH+!s&K-Q&q+%q"k!erVuio qu$6hqtp6aq#:0js8M9_q>B4Onbr:_#5J,lqt^'frVQfmqu-BiiVs_ipA=jcqtBsdr;$6eq3:XN rVZNlo_nd4rtGD1rV?3-3&Ur;FtAq>Tpa(]=72rVcZmrb_l?!!2s&!;lTerVH9arJ^c,~> n,ELgqtg0fqu6NmrAXNKqu(DYD[6=H!XAo1#lt)2"9ei6$N^M=!rrH+!s&K-Q&q+%q"k!erVuio qu$6hqtp6aq#:0js8M9_q>B4Onbr:_#5J,lqt^'frVQfmqu-BiiVs_ipA=jcqtBsdr;$6eq3:XN rVZNlo_nd4rtGD1rV?3-3&Ur;FtAq>Tpa(]=72rVcZmrb_l?!!2s&!;lTerVH9arJ^c,~> n,ELgqtg0fqu6NmrAXNKqu(DYD[6=H!XAo1#lt)2"9ei6$N^M=!rrH+!s&K-Q&q+%q"k!erVuio qu$6hqtp6aq#:0js8M9_q>B4Onbr:_#5J,lqt^'frVQfmqu-BiiVs_ipA=jcqtBsdr;$6eq3:XN rVZNlo_nd4rtGD1rV?3-3&Ur;FtAq>Tpa(]=72rVcZmrb_l?!!2s&!;lTerVH9arJ^c,~> q>X7hs8Durrr;rsq#:$do)8@^r:p-eqY0kp;c[!#$j-S4!X&K*"p>#3!s/H3"p+c/#6Fr0!iW)u W;QPkqt^$`qu$Hnrr;rqs8Mros82fms8W)_s8W$$r)Qfuuau*r>t_5q>0mdp\Fad rV-0`r;6Nor;?TprVuirqZ$TorS[\Vq>U?m"o\K$qu-Nnrs/K#s8N&trVk"?s8ET+qtu6q!<[3* q>1$fr;?NmrVmB,rVcZ$56:uh!s/H&!5-qtU'enlu7t !<<,t"0)7qr;?NJs8N#ss8Vrts8MurruC_2s82irrVZ]lrVuons8DutrqcZprVuils8VoorsSf* rVuorq>^3hrVZ$^J,~> q>X7hs8Durrr;rsq#:$do)8@^r:p-eqY0kp;c[!#$j-S4!X&K*"p>#3!s/H3"p+c/#6Fr0!iW)u W;QPkqt^$`qu$Hnrr;rqs8Mros82fms8W)_s8W$$r)Qfuuau*r>t_5q>0mdp\Fad rV-0`r;6Nor;?TprVuirqZ$TorS[\Vq>U?m"o\K$qu-Nnrs/K#s8N&trVk"?s8ET+qtu6q!<[3* q>1$fr;?NmrVmB,rVcZ$56:uh!s/H&!5-qtU'enlu7t !<<,t"0)7qr;?NJs8N#ss8Vrts8MurruC_2s82irrVZ]lrVuons8DutrqcZprVuils8VoorsSf* rVuorq>^3hrVZ$^J,~> q>X7hs8Durrr;rsq#:$do)8@^r:p-eqY0kp;c[!#$j-S4!X&K*"p>#3!s/H3"p+c/#6Fr0!iW)u W;QPkqt^$`qu$Hnrr;rqs8Mros82fms8W)_s8W$$r)Qfuuau*r>t_5q>0mdp\Fad rV-0`r;6Nor;?TprVuirqZ$TorS[\Vq>U?m"o\K$qu-Nnrs/K#s8N&trVk"?s8ET+qtu6q!<[3* q>1$fr;?NmrVmB,rVcZ$56:uh!s/H&!5-qtU'enlu7t !<<,t"0)7qr;?NJs8N#ss8Vrts8MurruC_2s82irrVZ]lrVuons8DutrqcZprVuils8VoorsSf* rVuorq>^3hrVZ$^J,~> q>Wtas8DoqqYpKhr9=.Jqt^*Zrqu`p4?Gk6"TSl0"9\c0!=&]8#lt#7!!WW2$igJ4!Lp[(" TSo'_=[R%g].:0hq"ap\rp9Z8~> q>Wtas8DoqqYpKhr9=.Jqt^*Zrqu`p4?Gk6"TSl0"9\c0!=&]8#lt#7!!WW2$igJ4!Lp[(" TSo'_=[R%g].:0hq"ap\rp9Z8~> q>Wtas8DoqqYpKhr9=.Jqt^*Zrqu`p4?Gk6"TSl0"9\c0!=&]8#lt#7!!WW2$igJ4!Lp[(" TSo'_=[R%g].:0hq"ap\rp9Z8~> q>WeXqu$3gr;Q6bs8)Kes7lTkp*D"3'b(BL#6=i/$NL22!!WZ0#652:$3:/0"p!B0g!oWhpAFR[ s8W&pqY^6grVlfrs8L^O#Q4T!!W`B(!T="p"p+u/%KZ\7!>mJHYUqsXO^Jc?5Tqr1<[ !"dWUqu$Bhqu-Bks8E5o_En5-X7cJcrV-?c&,5efq8"?X%;"f!s8;iqr5&F5rVlfqs8W!+mJli+ ,m"5N!<<3"q#'sdgAh3P2Ym=Hq>'s]rUU!]nc/I_rVuosq=FR^rVuNhrV6?fq>L q>WeXqu$3gr;Q6bs8)Kes7lTkp*D"3'b(BL#6=i/$NL22!!WZ0#652:$3:/0"p!B0g!oWhpAFR[ s8W&pqY^6grVlfrs8L^O#Q4T!!W`B(!T="p"p+u/%KZ\7!>mJHYUqsXO^Jc?5Tqr1<[ !"dWUqu$Bhqu-Bks8E5o_En5-X7cJcrV-?c&,5efq8"?X%;"f!s8;iqr5&F5rVlfqs8W!+mJli+ ,m"5N!<<3"q#'sdgAh3P2Ym=Hq>'s]rUU!]nc/I_rVuosq=FR^rVuNhrV6?fq>L q>WeXqu$3gr;Q6bs8)Kes7lTkp*D"3'b(BL#6=i/$NL22!!WZ0#652:$3:/0"p!B0g!oWhpAFR[ s8W&pqY^6grVlfrs8L^O#Q4T!!W`B(!T="p"p+u/%KZ\7!>mJHYUqsXO^Jc?5Tqr1<[ !"dWUqu$Bhqu-Bks8E5o_En5-X7cJcrV-?c&,5efq8"?X%;"f!s8;iqr5&F5rVlfqs8W!+mJli+ ,m"5N!<<3"q#'sdgAh3P2Ym=Hq>'s]rUU!]nc/I_rVuosq=FR^rVuNhrV6?fq>L q>UZuqu6Kkr;?Qn4nnsOrVd68*WQZc!qXnqklqu6Wo%f6+sm>M;R:>PIjQ5rr)lr&HDb%rV6s: !!<66"p"2jr:9[_huETQ3q`=Y'bLlarp]aZrYH%S((Cod&/5'7qtfat)%@>lqY^=&%1j]mrY,nQ% 1rR;o_o:4%2'BKrVc`pn,In~> q>UZuqu6Kkr;?Qn4nnsOrVd68*WQZc!qXnqklqu6Wo%f6+sm>M;R:>PIjQ5rr)lr&HDb%rV6s: !!<66"p"2jr:9[_huETQ3q`=Y'bLlarp]aZrYH%S((Cod&/5'7qtfat)%@>lqY^=&%1j]mrY,nQ% 1rR;o_o:4%2'BKrVc`pn,In~> q>UZuqu6Kkr;?Qn4nnsOrVd68*WQZc!qXnqklqu6Wo%f6+sm>M;R:>PIjQ5rr)lr&HDb%rV6s: !!<66"p"2jr:9[_huETQ3q`=Y'bLlarp]aZrYH%S((Cod&/5'7qtfat)%@>lqY^=&%1j]mrY,nQ% 1rR;o_o:4%2'BKrVc`pn,In~> q>WDQqYpBfrq#[LnFQb^!!3Q;!!iZ,"U,55'EJ=E!"&]+$NLA7$5U'cqYU-g rW3&urquusr;HWof)H!PrVQa!!s&G]!!`Q+!!NE/#R:8.$jQb6%0-D/!U]IWr;)!E&,u1]3=$5. rVuosrr<#trVQWprX&V<4obY_rr2inrVcco!WN,urX#t4"&7>Arq-*c_#FE5r;?Tns8EK%rVup, "98E0$NBerq:YfJrW)orr;Z^VoDfF1',CoT"oeJl!!EWF"oo)@#71)'rq$[#(((6Srq?U$&IK6R !t#JG#m9YqnGiXu%134:qu$EkrrE&js*t~> q>WDQqYpBfrq#[LnFQb^!!3Q;!!iZ,"U,55'EJ=E!"&]+$NLA7$5U'cqYU-g rW3&urquusr;HWof)H!PrVQa!!s&G]!!`Q+!!NE/#R:8.$jQb6%0-D/!U]IWr;)!E&,u1]3=$5. rVuosrr<#trVQWprX&V<4obY_rr2inrVcco!WN,urX#t4"&7>Arq-*c_#FE5r;?Tns8EK%rVup, "98E0$NBerq:YfJrW)orr;Z^VoDfF1',CoT"oeJl!!EWF"oo)@#71)'rq$[#(((6Srq?U$&IK6R !t#JG#m9YqnGiXu%134:qu$EkrrE&js*t~> q>WDQqYpBfrq#[LnFQb^!!3Q;!!iZ,"U,55'EJ=E!"&]+$NLA7$5U'cqYU-g rW3&urquusr;HWof)H!PrVQa!!s&G]!!`Q+!!NE/#R:8.$jQb6%0-D/!U]IWr;)!E&,u1]3=$5. rVuosrr<#trVQWprX&V<4obY_rr2inrVcco!WN,urX#t4"&7>Arq-*c_#FE5r;?Tns8EK%rVup, "98E0$NBerq:YfJrW)orr;Z^VoDfF1',CoT"oeJl!!EWF"oo)@#71)'rq$[#(((6Srq?U$&IK6R !t#JG#m9YqnGiXu%134:qu$EkrrE&js*t~> q>WMKr:Kd\p[6f?#QXu.#Qt27!WWH-$3:A?"p+c+$j?eC!$X3As8)`Zqssabs8MoorUKj_rVcKj rVc`qs8C@F#Q4T!!W`B(!T=%Y!>Q7J%KQS1!X8c4"pt>3"9\rQ6N#Q"7:%KR!_rql]r rr)`orr*,76i[Cbq"4C]%f?;$qY7<*#W&a^rqcZm_#G5MrVZTjr;?NeptYfU#6Fl0%f?(uo_\X@ s8W&urVl`prAjrZ,6.0(ruhfroEtm*rpU=%p\Y'moDA:l!%RO<"9SQ#!!W5u$NgY6r7h;TqX=M! ,l@Q@')_Y)rVc`rrq-5@~> q>WMKr:Kd\p[6f?#QXu.#Qt27!WWH-$3:A?"p+c+$j?eC!$X3As8)`Zqssabs8MoorUKj_rVcKj rVc`qs8C@F#Q4T!!W`B(!T=%Y!>Q7J%KQS1!X8c4"pt>3"9\rQ6N#Q"7:%KR!_rql]r rr)`orr*,76i[Cbq"4C]%f?;$qY7<*#W&a^rqcZm_#G5MrVZTjr;?NeptYfU#6Fl0%f?(uo_\X@ s8W&urVl`prAjrZ,6.0(ruhfroEtm*rpU=%p\Y'moDA:l!%RO<"9SQ#!!W5u$NgY6r7h;TqX=M! ,l@Q@')_Y)rVc`rrq-5@~> q>WMKr:Kd\p[6f?#QXu.#Qt27!WWH-$3:A?"p+c+$j?eC!$X3As8)`Zqssabs8MoorUKj_rVcKj rVc`qs8C@F#Q4T!!W`B(!T=%Y!>Q7J%KQS1!X8c4"pt>3"9\rQ6N#Q"7:%KR!_rql]r rr)`orr*,76i[Cbq"4C]%f?;$qY7<*#W&a^rqcZm_#G5MrVZTjr;?NeptYfU#6Fl0%f?(uo_\X@ s8W&urVl`prAjrZ,6.0(ruhfroEtm*rpU=%p\Y'moDA:l!%RO<"9SQ#!!W5u$NgY6r7h;TqX=M! ,l@Q@')_Y)rVc`rrq-5@~> q>VoCo_naOqu-Qr$4$Y8#6587$j?_9":+u/!=T)A!'NM-3WJmHrqZBeli-bnrVZZhrr)N_p\k'j rVccrrr)`nf)H!Ss82ou!W`>\!#GnI!WrH/$3U>2!!`N+!t,G;'*/.:`;06-M#R\U< q>VoCo_naOqu-Qr$4$Y8#6587$j?_9":+u/!=T)A!'NM-3WJmHrqZBeli-bnrVZZhrr)N_p\k'j rVccrrr)`nf)H!Ss82ou!W`>\!#GnI!WrH/$3U>2!!`N+!t,G;'*/.:`;06-M#R\U< q>VoCo_naOqu-Qr$4$Y8#6587$j?_9":+u/!=T)A!'NM-3WJmHrqZBeli-bnrVZZhrr)N_p\k'j rVccrrr)`nf)H!Ss82ou!W`>\!#GnI!WrH/$3U>2!!`N+!t,G;'*/.:`;06-M#R\U< q>W5Js7uKinbrRp!!!'#"9\f."98i3!!30/"9MJ";#:4fr;ZEfr;?N]rr<#qqZ$ElrqcWo$2OQ" rr2rtrr)iqrVulIrrN,sr;kdU"9Jc-!s/?#rrNi:!Wi?($31A7"9>Y&rVQQgrVZSMrs/E!@/pOS j8T#Ws8N&us8N#t$3'o$rP(Jq"/kqmrqud+rq?Bds5n5(!,qT-qZ$E-rtkY5rVQNip\^up!C/l!;Qa(!qZEr!:^!h"TA/k!s\Vrr<33!qud#t rW`Q;kl1Y`s7uL#"9&2m#6F`!r;HTo!<2WjJ,~> q>W5Js7uKinbrRp!!!'#"9\f."98i3!!30/"9MJ";#:4fr;ZEfr;?N]rr<#qqZ$ElrqcWo$2OQ" rr2rtrr)iqrVulIrrN,sr;kdU"9Jc-!s/?#rrNi:!Wi?($31A7"9>Y&rVQQgrVZSMrs/E!@/pOS j8T#Ws8N&us8N#t$3'o$rP(Jq"/kqmrqud+rq?Bds5n5(!,qT-qZ$E-rtkY5rVQNip\^up!C/l!;Qa(!qZEr!:^!h"TA/k!s\Vrr<33!qud#t rW`Q;kl1Y`s7uL#"9&2m#6F`!r;HTo!<2WjJ,~> q>W5Js7uKinbrRp!!!'#"9\f."98i3!!30/"9MJ";#:4fr;ZEfr;?N]rr<#qqZ$ElrqcWo$2OQ" rr2rtrr)iqrVulIrrN,sr;kdU"9Jc-!s/?#rrNi:!Wi?($31A7"9>Y&rVQQgrVZSMrs/E!@/pOS j8T#Ws8N&us8N#t$3'o$rP(Jq"/kqmrqud+rq?Bds5n5(!,qT-qZ$E-rtkY5rVQNip\^up!C/l!;Qa(!qZEr!:^!h"TA/k!s\Vrr<33!qud#t rW`Q;kl1Y`s7uL#"9&2m#6F`!r;HTo!<2WjJ,~> q>Ua!q"t!_p\t:!rW+5G"9S`,!Gt"g.^ur;HWm rso#,s8)ZNE q>Ua!q"t!_p\t:!rW+5G"9S`,!Gt"g.^ur;HWm rso#,s8)ZNE q>Ua!q"t!_p\t:!rW+5G"9S`,!Gt"g.^ur;HWm rso#,s8)ZNE q>V];p\XdYrU^Es$NpG4#R(2.!sSu2"9\JsrV??dq>0p`r;6?iq$@#rpA=gbr;$6gs8Dr'mbq"fgH#5_I+"_[/uq>^Korr3H,r;$'%4otbcp\Facrr2rtrXSu* rr)ZQH2n%arVH9gq8!"Ar;6*ao_Wt:!XT&1"Tj8Trr)iurr)cJs8W'_pAb!^r^X!qtL q>V];p\XdYrU^Es$NpG4#R(2.!sSu2"9\JsrV??dq>0p`r;6?iq$@#rpA=gbr;$6gs8Dr'mbq"fgH#5_I+"_[/uq>^Korr3H,r;$'%4otbcp\Facrr2rtrXSu* rr)ZQH2n%arVH9gq8!"Ar;6*ao_Wt:!XT&1"Tj8Trr)iurr)cJs8W'_pAb!^r^X!qtL q>V];p\XdYrU^Es$NpG4#R(2.!sSu2"9\JsrV??dq>0p`r;6?iq$@#rpA=gbr;$6gs8Dr'mbq"fgH#5_I+"_[/uq>^Korr3H,r;$'%4otbcp\Facrr2rtrXSu* rr)ZQH2n%arVH9gq8!"Ar;6*ao_Wt:!XT&1"Tj8Trr)iurr)cJs8W'_pAb!^r^X!qtL q>W,Fs8D`jrq$Es#6Y&1$j-M1#QP#4"p/:DBk.,'g^q=t!epAasds8N#=rrrE% !!E9'cN"FY"9\`0"98E.@fQ/rr:c'J#lXU)"9`u;pAb*jrVuoss8O8Ar;--FSV_aIq"=R`rr2rs rr)lor;Z`TFoqh`r:]sdr4r=Dr;$3gqIBX2"pbA1".T#_rqufrrn7>Orr;dXs7,mo!s8>e$ijjK ! q>W,Fs8D`jrq$Es#6Y&1$j-M1#QP#4"p/:DBk.,'g^q=t!epAasds8N#=rrrE% !!E9'cN"FY"9\`0"98E.@fQ/rr:c'J#lXU)"9`u;pAb*jrVuoss8O8Ar;--FSV_aIq"=R`rr2rs rr)lor;Z`TFoqh`r:]sdr4r=Dr;$3gqIBX2"pbA1".T#_rqufrrn7>Orr;dXs7,mo!s8>e$ijjK ! q>W,Fs8D`jrq$Es#6Y&1$j-M1#QP#4"p/:DBk.,'g^q=t!epAasds8N#=rrrE% !!E9'cN"FY"9\`0"98E.@fQ/rr:c'J#lXU)"9`u;pAb*jrVuoss8O8Ar;--FSV_aIq"=R`rr2rs rr)lor;Z`TFoqh`r:]sdr4r=Dr;$3gqIBX2"pbA1".T#_rqufrrn7>Orr;dXs7,mo!s8>e$ijjK ! q>^Ko/cGMEq>C[,!!iQ*!s\r7!s/H,!sK)5$NWmu;YU(ap%n@NrqQE^rqQ1$e_>b&Fq>:(c"9ei1! q>^Ko/cGMEq>C[,!!iQ*!s\r7!s/H,!sK)5$NWmu;YU(ap%n@NrqQE^rqQ1$e_>b&Fq>:(c"9ei1! q>^Ko/cGMEq>C[,!!iQ*!s\r7!s/H,!sK)5$NWmu;YU(ap%n@NrqQE^rqQ1$e_>b&Fq>:(c"9ei1! q>^Hn/+E<3qZ@!.!XSo1%fle5"p+f."Tnc2!"/i04uG5Xr:KjZo^;VOrVc9dq#:9irVlf>rrrE% !!E9'ci=R[!!R1EPb4GT1r;?NmrVllsrr4/?r:osarqu]nrVZWn s8W)srV6Ehq>I`=!(49rq"a[`rkSODrVlWo#RU_=$39P3q#'X/s$Qe^r;QEbr<`c0oD&@hbK%KB qZ$Ttp&+jjqu-^#rVcg!bP1c0pAtWrr=&r-q$6li1C+']qZ-c)rV63a!=Jc&rVl q>^Hn/+E<3qZ@!.!XSo1%fle5"p+f."Tnc2!"/i04uG5Xr:KjZo^;VOrVc9dq#:9irVlf>rrrE% !!E9'ci=R[!!R1EPb4GT1r;?NmrVllsrr4/?r:osarqu]nrVZWn s8W)srV6Ehq>I`=!(49rq"a[`rkSODrVlWo#RU_=$39P3q#'X/s$Qe^r;QEbr<`c0oD&@hbK%KB qZ$Ttp&+jjqu-^#rVcg!bP1c0pAtWrr=&r-q$6li1C+']qZ-c)rV63a!=Jc&rVl q>^Hn/+E<3qZ@!.!XSo1%fle5"p+f."Tnc2!"/i04uG5Xr:KjZo^;VOrVc9dq#:9irVlf>rrrE% !!E9'ci=R[!!R1EPb4GT1r;?NmrVllsrr4/?r:osarqu]nrVZWn s8W)srV6Ehq>I`=!(49rq"a[`rkSODrVlWo#RU_=$39P3q#'X/s$Qe^r;QEbr<`c0oD&@hbK%KB qZ$Ttp&+jjqu-^#rVcg!bP1c0pAtWrr=&r-q$6li1C+']qZ-c)rV63a!=Jc&rVl q>W2Is7H6fmf),E#QOl-#QY85!!!Z4!"9,7!!WZ6%KQb9!?iF%n,<1VqssdXr:prr)ips8;lqs7cKk rr<#trr)ZmrV6B"!WZ'Jq>:0e^Ae]9rZM7E!=&T+!W;ols7t(B6h10SqYU9j!t!rVQt"Q07S"9A>tp@nFh"8i#prp]r<~> q>W2Is7H6fmf),E#QOl-#QY85!!!Z4!"9,7!!WZ6%KQb9!?iF%n,<1VqssdXr:prr)ips8;lqs7cKk rr<#trr)ZmrV6B"!WZ'Jq>:0e^Ae]9rZM7E!=&T+!W;ols7t(B6h10SqYU9j!t!rVQt"Q07S"9A>tp@nFh"8i#prp]r<~> q>W2Is7H6fmf),E#QOl-#QY85!!!Z4!"9,7!!WZ6%KQb9!?iF%n,<1VqssdXr:prr)ips8;lqs7cKk rr<#trr)ZmrV6B"!WZ'Jq>:0e^Ae]9rZM7E!=&T+!W;ols7t(B6h10SqYU9j!t!rVQt"Q07S"9A>tp@nFh"8i#prp]r<~> q>W2IrqZH_qu$?cqsk!m"TSZ+$3^D8$3L>0#m:8/!!WZ4!!<3+"pP/7rVcNjrqlKhrVQKorVlf> rrrE%!!E9'c2\:W!!3-'!!E9'!!N]$re^Xarp]&.rW!W4 "T\Z'!WWAtrW3,urrWB%rr`B"nco*e!t5,(!"o8)qu$En!<2Zj!!)Hd"TJB#!;l]mrr2HfJ,~> q>W2IrqZH_qu$?cqsk!m"TSZ+$3^D8$3L>0#m:8/!!WZ4!!<3+"pP/7rVcNjrqlKhrVQKorVlf> rrrE%!!E9'c2\:W!!3-'!!E9'!!N]$re^Xarp]&.rW!W4 "T\Z'!WWAtrW3,urrWB%rr`B"nco*e!t5,(!"o8)qu$En!<2Zj!!)Hd"TJB#!;l]mrr2HfJ,~> q>W2IrqZH_qu$?cqsk!m"TSZ+$3^D8$3L>0#m:8/!!WZ4!!<3+"pP/7rVcNjrqlKhrVQKorVlf> rrrE%!!E9'c2\:W!!3-'!!E9'!!N]$re^Xarp]&.rW!W4 "T\Z'!WWAtrW3,urrWB%rr`B"nco*e!t5,(!"o8)qu$En!<2Zj!!)Hd"TJB#!;l]mrr2HfJ,~> p\u'.qtg3er:p3grVlci)AEkg"9ni0!rrW+"=aBS!!*H-"onc+$j-_7([']@s82fprVHKcrr)lk nbiF`rr2Kfo)AUcrVQTqrr(gU#6+T$!!N?(`rHS[!!*<)k5Y;Wrq-3hqtu]Y')qk.r:o_H!XL"- nbW%[p\Fjhnc&=`%JKbu]IX("B'K9[[!!NJurX&E!oEtZs!!!9'q#CKlqu@0"r!`i)rWW&r!!;9Y!!`/r q>:$l!<2id%LDn.%eK8u#itgXrr)fqrq-5@~> p\u'.qtg3er:p3grVlci)AEkg"9ni0!rrW+"=aBS!!*H-"onc+$j-_7([']@s82fprVHKcrr)lk nbiF`rr2Kfo)AUcrVQTqrr(gU#6+T$!!N?(`rHS[!!*<)k5Y;Wrq-3hqtu]Y')qk.r:o_H!XL"- nbW%[p\Fjhnc&=`%JKbu]IX("B'K9[[!!NJurX&E!oEtZs!!!9'q#CKlqu@0"r!`i)rWW&r!!;9Y!!`/r q>:$l!<2id%LDn.%eK8u#itgXrr)fqrq-5@~> p\u'.qtg3er:p3grVlci)AEkg"9ni0!rrW+"=aBS!!*H-"onc+$j-_7([']@s82fprVHKcrr)lk nbiF`rr2Kfo)AUcrVQTqrr(gU#6+T$!!N?(`rHS[!!*<)k5Y;Wrq-3hqtu]Y')qk.r:o_H!XL"- nbW%[p\Fjhnc&=`%JKbu]IX("B'K9[[!!NJurX&E!oEtZs!!!9'q#CKlqu@0"r!`i)rWW&r!!;9Y!!`/r q>:$l!<2id%LDn.%eK8u#itgXrr)fqrq-5@~> p\t9mr;QR[r;ZEeqtKd\n,1-iPQ)0mrVuE`Ihi/,^%D^?kao<7Xr:9m_s8U+G!=o/=#n8E[qt9mbs7H p\t9mr;QR[r;ZEeqtKd\n,1-iPQ)0mrVuE`Ihi/,^%D^?kao<7Xr:9m_s8U+G!=o/=#n8E[qt9mbs7H p\t9mr;QR[r;ZEeqtKd\n,1-iPQ)0mrVuE`Ihi/,^%D^?kao<7Xr:9m_s8U+G!=o/=#n8E[qt9mbs7H p\t6lr;8kZo_eF_p[.eNrqZ0b9LD3C"9Jl0#lk,2!=])2!!ic9!=Ar2";1_8"TZ0B](u$tpAFU\ qYg?ip%S1Urr)9arn@AUrr2s$!!:4A%g*+>$3^P;q=FU\rV$3gqO.B`rqud-rr;rgYTX#JBBK0b p\FjerV?Hfs8W'4rVZTjqt^9kjCASt6I,T-s82iqrlP0\rVu`oqY[l,!=/Z-$N`cnr9jR[nc&F_ s8MuprVlQi#PS)hr;H0`pZVWHp&+aXrVQanE$!;l["#6+Z)"oS/s!quKo#Pkn1!ri*#rUp*n #Q@6o$2X>krW!&ur4)k/s82oqq>:="rUTd_o`+m^s*t~> p\t6lr;8kZo_eF_p[.eNrqZ0b9LD3C"9Jl0#lk,2!=])2!!ic9!=Ar2";1_8"TZ0B](u$tpAFU\ qYg?ip%S1Urr)9arn@AUrr2s$!!:4A%g*+>$3^P;q=FU\rV$3gqO.B`rqud-rr;rgYTX#JBBK0b p\FjerV?Hfs8W'4rVZTjqt^9kjCASt6I,T-s82iqrlP0\rVu`oqY[l,!=/Z-$N`cnr9jR[nc&F_ s8MuprVlQi#PS)hr;H0`pZVWHp&+aXrVQanE$!;l["#6+Z)"oS/s!quKo#Pkn1!ri*#rUp*n #Q@6o$2X>krW!&ur4)k/s82oqq>:="rUTd_o`+m^s*t~> p\t6lr;8kZo_eF_p[.eNrqZ0b9LD3C"9Jl0#lk,2!=])2!!ic9!=Ar2";1_8"TZ0B](u$tpAFU\ qYg?ip%S1Urr)9arn@AUrr2s$!!:4A%g*+>$3^P;q=FU\rV$3gqO.B`rqud-rr;rgYTX#JBBK0b p\FjerV?Hfs8W'4rVZTjqt^9kjCASt6I,T-s82iqrlP0\rVu`oqY[l,!=/Z-$N`cnr9jR[nc&F_ s8MuprVlQi#PS)hr;H0`pZVWHp&+aXrVQanE$!;l["#6+Z)"oS/s!quKo#Pkn1!ri*#rUp*n #Q@6o$2X>krW!&ur4)k/s82oqq>:="rUTd_o`+m^s*t~> p]!_^rVZTlrV??jp&4CXnG<(XrVZKgrV0Z+BE/8<"T\c,"p4l-"on]-!sSl3!s8].$3C6tUn=@X q>^9eq=sgXrqlZiqu6Tprr1gT"oeN%"98ME!"T)1"p58F!M]Gdp\Fjhq>Qf^s8Moq%fZA$nPBT! &%p`OgY:Q;ptbc$qq_;-&)5snY7UaDC\7Z%s8;lrrlP0Xqu??es.';u"pP23!FGa'r;Q:3dqtg p]!_^rVZTlrV??jp&4CXnG<(XrVZKgrV0Z+BE/8<"T\c,"p4l-"on]-!sSl3!s8].$3C6tUn=@X q>^9eq=sgXrqlZiqu6Tprr1gT"oeN%"98ME!"T)1"p58F!M]Gdp\Fjhq>Qf^s8Moq%fZA$nPBT! &%p`OgY:Q;ptbc$qq_;-&)5snY7UaDC\7Z%s8;lrrlP0Xqu??es.';u"pP23!FGa'r;Q:3dqtg p]!_^rVZTlrV??jp&4CXnG<(XrVZKgrV0Z+BE/8<"T\c,"p4l-"on]-!sSl3!s8].$3C6tUn=@X q>^9eq=sgXrqlZiqu6Tprr1gT"oeN%"98ME!"T)1"p58F!M]Gdp\Fjhq>Qf^s8Moq%fZA$nPBT! &%p`OgY:Q;ptbc$qq_;-&)5snY7UaDC\7Z%s8;lrrlP0Xqu??es.';u"pP23!FGa'r;Q:3dqtg p](9mqu&_Tq>L$^pA"X[qYU$cr;6Njp2tG!!X&Q/"9AZ1![:ZF>ju)"?2Iq=?s[)/#66ERs8;Zlr;?Qnao<@Wp@e<@"U>><"U5)0q>L6jqX=7[ q>L0grVZTjrqm<*s8W&rs8W&pq"=[\p&"IIs$un_rVH$rqu?m/qtL-sq"b-p rW35uqY:'io^`+lqYLF"o(Vtd"`aJ>!!N>tpA4d]q$.$!qYp?hoD\C^J,~> p](9mqu&_Tq>L$^pA"X[qYU$cr;6Njp2tG!!X&Q/"9AZ1![:ZF>ju)"?2Iq=?s[)/#66ERs8;Zlr;?Qnao<@Wp@e<@"U>><"U5)0q>L6jqX=7[ q>L0grVZTjrqm<*s8W&rs8W&pq"=[\p&"IIs$un_rVH$rqu?m/qtL-sq"b-p rW35uqY:'io^`+lqYLF"o(Vtd"`aJ>!!N>tpA4d]q$.$!qYp?hoD\C^J,~> p](9mqu&_Tq>L$^pA"X[qYU$cr;6Njp2tG!!X&Q/"9AZ1![:ZF>ju)"?2Iq=?s[)/#66ERs8;Zlr;?Qnao<@Wp@e<@"U>><"U5)0q>L6jqX=7[ q>L0grVZTjrqm<*s8W&rs8W&pq"=[\p&"IIs$un_rVH$rqu?m/qtL-sq"b-p rW35uqY:'io^`+lqYLF"o(Vtd"`aJ>!!N>tpA4d]q$.$!qYp?hoD\C^J,~> p&G!i#Q+MsrVHQbqYp@Sr:^'eqtg0`q"t!aN0'!\$31;;!X/Q/!X8i4!X8Z2"Ter?!!EH7!!74] DK,RLo)AOdp\b!irquZkro*nWqZQp!"on_U!!<6'!Wi#q%g)k5!snr2"SVZ[rqlQerfd?orr)fm p@diZ%0ZqI":,5A#R1#/q$6s)rW`E-rW`o@":>A;&7OVuq>C9krVjn<0DY>>r;m?2!WrW2"GZ^M o`+=Rqu-9cq>:-irVQEgrr2inrr2inrc.i2nb2eMp?DVWr'g;Vqt9cD#6Fkt#Dr0S!X/F\!!N/u #*&EU"U4`'$hjViF8Y\*!X/Gr#QXSmquHoroDSjtr:Ti&q==:c"8quor;?Eco`'F~> p&G!i#Q+MsrVHQbqYp@Sr:^'eqtg0`q"t!aN0'!\$31;;!X/Q/!X8i4!X8Z2"Ter?!!EH7!!74] DK,RLo)AOdp\b!irquZkro*nWqZQp!"on_U!!<6'!Wi#q%g)k5!snr2"SVZ[rqlQerfd?orr)fm p@diZ%0ZqI":,5A#R1#/q$6s)rW`E-rW`o@":>A;&7OVuq>C9krVjn<0DY>>r;m?2!WrW2"GZ^M o`+=Rqu-9cq>:-irVQEgrr2inrr2inrc.i2nb2eMp?DVWr'g;Vqt9cD#6Fkt#Dr0S!X/F\!!N/u #*&EU"U4`'$hjViF8Y\*!X/Gr#QXSmquHoroDSjtr:Ti&q==:c"8quor;?Eco`'F~> p&G!i#Q+MsrVHQbqYp@Sr:^'eqtg0`q"t!aN0'!\$31;;!X/Q/!X8i4!X8Z2"Ter?!!EH7!!74] DK,RLo)AOdp\b!irquZkro*nWqZQp!"on_U!!<6'!Wi#q%g)k5!snr2"SVZ[rqlQerfd?orr)fm p@diZ%0ZqI":,5A#R1#/q$6s)rW`E-rW`o@":>A;&7OVuq>C9krVjn<0DY>>r;m?2!WrW2"GZ^M o`+=Rqu-9cq>:-irVQEgrr2inrr2inrc.i2nb2eMp?DVWr'g;Vqt9cD#6Fkt#Dr0S!X/F\!!N/u #*&EU"U4`'$hjViF8Y\*!X/Gr#QXSmquHoroDSjtr:Ti&q==:c"8quor;?Eco`'F~> o)D8[r;$6hr;$6bs8;Zkq=sgbr;63dq>9scrVl_oV54;%!WrQ/#6Y22#QOu2#6P;9!WiW.#m(50 #?b83p\ajdq>C6jqtpL*i$1@Kk"9&%l qtp0q"nW!&q>42!=Sqpq"9&0%!;QBf":=VnrrNK!r)j;+r::!oo_e^e!W2`cs*t~> o)D8[r;$6hr;$6bs8;Zkq=sgbr;63dq>9scrVl_oV54;%!WrQ/#6Y22#QOu2#6P;9!WiW.#m(50 #?b83p\ajdq>C6jqtpL*i$1@Kk"9&%l qtp0q"nW!&q>42!=Sqpq"9&0%!;QBf":=VnrrNK!r)j;+r::!oo_e^e!W2`cs*t~> o)D8[r;$6hr;$6bs8;Zkq=sgbr;63dq>9scrVl_oV54;%!WrQ/#6Y22#QOu2#6P;9!WiW.#m(50 #?b83p\ajdq>C6jqtpL*i$1@Kk"9&%l qtp0q"nW!&q>42!=Sqpq"9&0%!;QBf":=VnrrNK!r)j;+r::!oo_e^e!W2`cs*t~> nGaC(rVuoqs8;osrVuoqrVulrq>1!dq=Xadr;QRH\\>TY!XJl.!X/]-!!Eu:!X8]+"U,A9#64l- !s:bR5=,8Irr)`mrVufos8W)tkPke`q>LEt":G4_!=&T*!s8f0!<`#q!W`9&rW!/ur:BOGr:uTW rr+PKq>:!co<0&4"TT]#0fCgE2_m*Y_#QOl-!Z8?Er;ZZlr:^!^r;#sYqt`]J5lEu:p^.&rrWrW)!W)fqqY^6hl2O9P rqcQhqY0mj!^Z__mf#EN"8MKk!C?Y^pA$oT^@qd5rU^*n#6"E!"@i.f$N0bq!=&Arq$R9$r nGaC(rVuoqs8;osrVuoqrVulrq>1!dq=Xadr;QRH\\>TY!XJl.!X/]-!!Eu:!X8]+"U,A9#64l- !s:bR5=,8Irr)`mrVufos8W)tkPke`q>LEt":G4_!=&T*!s8f0!<`#q!W`9&rW!/ur:BOGr:uTW rr+PKq>:!co<0&4"TT]#0fCgE2_m*Y_#QOl-!Z8?Er;ZZlr:^!^r;#sYqt`]J5lEu:p^.&rrWrW)!W)fqqY^6hl2O9P rqcQhqY0mj!^Z__mf#EN"8MKk!C?Y^pA$oT^@qd5rU^*n#6"E!"@i.f$N0bq!=&Arq$R9$r nGaC(rVuoqs8;osrVuoqrVulrq>1!dq=Xadr;QRH\\>TY!XJl.!X/]-!!Eu:!X8]+"U,A9#64l- !s:bR5=,8Irr)`mrVufos8W)tkPke`q>LEt":G4_!=&T*!s8f0!<`#q!W`9&rW!/ur:BOGr:uTW rr+PKq>:!co<0&4"TT]#0fCgE2_m*Y_#QOl-!Z8?Er;ZZlr:^!^r;#sYqt`]J5lEu:p^.&rrWrW)!W)fqqY^6hl2O9P rqcQhqY0mj!^Z__mf#EN"8MKk!C?Y^pA$oT^@qd5rU^*n#6"E!"@i.f$N0bq!=&Arq$R9$r i;Y2'qYU9kr;$BlrVZTlrr2lCf$XO%#6>24"U+u3!!`]9!<`H)%KHP/!ri<$!"CA1.Js,DmJd%^ s8W)tkPkeZrr1$eda?Uue-6'W!!rZ+#k%cnrWN/tqXOQHs"OENrqZ?TD&!3S(d6O/dFHLog<\:( cHb/"da?XreDAa)c.:^i]GghO$YB,0q#(*irW<&trmCa)r;-9fs8;Qgpb2aM!s&Q*!58=)qu?Qi q>L7?1+at)/LUf,#Pe?"r;m0$q#L]s"T.umqYL3hl2LharVQTjs8,%-!=(,(.4P]-"8VoC"TTu# -nbl,qYU=&.5(o.!A>l2"Te<%""?#Z&HM=spC@ i;Y2'qYU9kr;$BlrVZTlrr2lCf$XO%#6>24"U+u3!!`]9!<`H)%KHP/!ri<$!"CA1.Js,DmJd%^ s8W)tkPkeZrr1$eda?Uue-6'W!!rZ+#k%cnrWN/tqXOQHs"OENrqZ?TD&!3S(d6O/dFHLog<\:( cHb/"da?XreDAa)c.:^i]GghO$YB,0q#(*irW<&trmCa)r;-9fs8;Qgpb2aM!s&Q*!58=)qu?Qi q>L7?1+at)/LUf,#Pe?"r;m0$q#L]s"T.umqYL3hl2LharVQTjs8,%-!=(,(.4P]-"8VoC"TTu# -nbl,qYU=&.5(o.!A>l2"Te<%""?#Z&HM=spC@ i;Y2'qYU9kr;$BlrVZTlrr2lCf$XO%#6>24"U+u3!!`]9!<`H)%KHP/!ri<$!"CA1.Js,DmJd%^ s8W)tkPkeZrr1$eda?Uue-6'W!!rZ+#k%cnrWN/tqXOQHs"OENrqZ?TD&!3S(d6O/dFHLog<\:( cHb/"da?XreDAa)c.:^i]GghO$YB,0q#(*irW<&trmCa)r;-9fs8;Qgpb2aM!s&Q*!58=)qu?Qi q>L7?1+at)/LUf,#Pe?"r;m0$q#L]s"T.umqYL3hl2LharVQTjs8,%-!=(,(.4P]-"8VoC"TTu# -nbl,qYU=&.5(o.!A>l2"Te<%""?#Z&HM=spC@ iVt>*rVZTns8Mupr;6BhrVlifrpg!TkO.^;%0lk5#ljr/!"8i-&HMk4rW<*#rrmLLrr(Y=%Km"O?KCqWrVc6a p\OjeqY:!eq"apOq"Oa_j2)rK#688mnG`=_rVlirrVlfDs#9lQrquWarr3W3('"sO!!M]ep%'@> &/l8q)rpu"$NU57#64f(#R^J9!;-6n!;lirroa1UpAO4T7fE5\qu-EhroaId!sJu2!XJ;rq iVt>*rVZTns8Mupr;6BhrVlifrpg!TkO.^;%0lk5#ljr/!"8i-&HMk4rW<*#rrmLLrr(Y=%Km"O?KCqWrVc6a p\OjeqY:!eq"apOq"Oa_j2)rK#688mnG`=_rVlirrVlfDs#9lQrquWarr3W3('"sO!!M]ep%'@> &/l8q)rpu"$NU57#64f(#R^J9!;-6n!;lirroa1UpAO4T7fE5\qu-EhroaId!sJu2!XJ;rq iVt>*rVZTns8Mupr;6BhrVlifrpg!TkO.^;%0lk5#ljr/!"8i-&HMk4rW<*#rrmLLrr(Y=%Km"O?KCqWrVc6a p\OjeqY:!eq"apOq"Oa_j2)rK#688mnG`=_rVlirrVlfDs#9lQrquWarr3W3('"sO!!M]ep%'@> &/l8q)rpu"$NU57#64f(#R^J9!;-6n!;lirroa1UpAO4T7fE5\qu-EhroaId!sJu2!XJ;rq hZ!WUr;QTlq@ic(rVlirn+ueVlMgeUqZdT@!#kh:"Vq:B!!r](!ri9%!Y#&.#S@UDr;HZqrr2*\ #QFQ!oD8@`rRq2Uqt^3q#R(22mfC6ls8N#ErsSi+rpKdZp&b?r!!`E&-jp:\!s8N/"Tnf.!<*9."98`3 !=f>6#7:,1$i]_ns8N&hlMCMRnG_VN1B.7Orr;usp\k-aq>UBcrr2ZlrqH*]rq?0`s8DrlrVlia r;Z?crVl6arquZnrVlfcrr*#grr2QhrWrGps7>g\mf*4Xs*t~> hZ!WUr;QTlq@ic(rVlirn+ueVlMgeUqZdT@!#kh:"Vq:B!!r](!ri9%!Y#&.#S@UDr;HZqrr2*\ #QFQ!oD8@`rRq2Uqt^3q#R(22mfC6ls8N#ErsSi+rpKdZp&b?r!!`E&-jp:\!s8N/"Tnf.!<*9."98`3 !=f>6#7:,1$i]_ns8N&hlMCMRnG_VN1B.7Orr;usp\k-aq>UBcrr2ZlrqH*]rq?0`s8DrlrVlia r;Z?crVl6arquZnrVlfcrr*#grr2QhrWrGps7>g\mf*4Xs*t~> hZ!WUr;QTlq@ic(rVlirn+ueVlMgeUqZdT@!#kh:"Vq:B!!r](!ri9%!Y#&.#S@UDr;HZqrr2*\ #QFQ!oD8@`rRq2Uqt^3q#R(22mfC6ls8N#ErsSi+rpKdZp&b?r!!`E&-jp:\!s8N/"Tnf.!<*9."98`3 !=f>6#7:,1$i]_ns8N&hlMCMRnG_VN1B.7Orr;usp\k-aq>UBcrr2ZlrqH*]rq?0`s8DrlrVlia r;Z?crVl6arquZnrVlfcrr*#grr2QhrWrGps7>g\mf*4Xs*t~> iVs5`s8W)rqYL*hs8N#rrtt8'rV6Elqtp iVs5`s8W)rqYL*hs8N#rrtt8'rV6Elqtp iVs5`s8W)rqYL*hs8N#rrtt8'rV6Elqtp iVroWrr3*"rVlfos8N!*r;Z9Zrr2cmrqufhrV[)sqDUE)!rrf3!)0qY:'br/q"2qZ$Qpr;QZnqsXB1$jm1=%3f]8cggbt k4eWAnFQ.sc<*gS!ZD4YM!Op3rUp0g!<2ut!<1=E2uW[RnbW4b!X&c2!=/i?!X])9!WiT7!<>/F 2E!`Xrq,sZpAXU]s7lQfrpB^^rVHHeo`"U`q<@nZr;Q[^rVZZorVZNkrVcQir;HHjq=t!_r;H:3gp\Fgbp%81ZpA+^`r:]s`rVQ6Ys*t~> iVroWrr3*"rVlfos8N!*r;Z9Zrr2cmrqufhrV[)sqDUE)!rrf3!)0qY:'br/q"2qZ$Qpr;QZnqsXB1$jm1=%3f]8cggbt k4eWAnFQ.sc<*gS!ZD4YM!Op3rUp0g!<2ut!<1=E2uW[RnbW4b!X&c2!=/i?!X])9!WiT7!<>/F 2E!`Xrq,sZpAXU]s7lQfrpB^^rVHHeo`"U`q<@nZr;Q[^rVZZorVZNkrVcQir;HHjq=t!_r;H:3gp\Fgbp%81ZpA+^`r:]s`rVQ6Ys*t~> iVroWrr3*"rVlfos8N!*r;Z9Zrr2cmrqufhrV[)sqDUE)!rrf3!)0qY:'br/q"2qZ$Qpr;QZnqsXB1$jm1=%3f]8cggbt k4eWAnFQ.sc<*gS!ZD4YM!Op3rUp0g!<2ut!<1=E2uW[RnbW4b!X&c2!=/i?!X])9!WiT7!<>/F 2E!`Xrq,sZpAXU]s7lQfrpB^^rVHHeo`"U`q<@nZr;Q[^rVZZorVZNkrVcQir;HHjq=t!_r;H:3gp\Fgbp%81ZpA+^`r:]s`rVQ6Ys*t~> huE`Urr;usrr<#t)u]R0rVl`lqtg6aqu-?eqYg1$fqYg?drqlWlrV?Bgr;6NnqY'mc qYU huE`Urr;usrr<#t)u]R0rVl`lqtg6aqu-?eqYg1$fqYg?drqlWlrV?Bgr;6NnqY'mc qYU huE`Urr;usrr<#t)u]R0rVl`lqtg6aqu-?eqYg1$fqYg?drqlWlrV?Bgr;6NnqY'mc qYU q>^Hnrr;oqrVllsp](9mrr;usrVuos$NKu#s8W)ns7u]hrr4/?r;$BerVl]fraTJP?Ng`:!<Q!CY\CMqY9d`q#:3lrlb^Hjqu?Wnr;Z`qs8;lrrVHKlr;Q`qrVu`oqu6Wqq#: q>^Hnrr;oqrVllsp](9mrr;usrVuos$NKu#s8W)ns7u]hrr4/?r;$BerVl]fraTJP?Ng`:!<Q!CY\CMqY9d`q#:3lrlb^Hjqu?Wnr;Z`qs8;lrrVHKlr;Q`qrVu`oqu6Wqq#: q>^Hnrr;oqrVllsp](9mrr;usrVuos$NKu#s8W)ns7u]hrr4/?r;$BerVl]fraTJP?Ng`:!<Q!CY\CMqY9d`q#:3lrlb^Hjqu?Wnr;Z`qs8;lrrVHKlr;Q`qrVu`oqu6Wqq#: q>UNprr2oss8E)urr2lr!<1UM)#jI1qu$Egqt]c5It%G$!sJi5"TeJsr;QZp!<0P/#QF;iqu-3e !V$-p!WW5uqYU$dOoPF[rr4GGqtp!]r:g6\_1Zo#/dDLZ!U?j rlP0Np&FUYq#,YmIt<+GqZ$Bhq#1KrqYBs`rVlWk&,?&"qYU q>UNprr2oss8E)urr2lr!<1UM)#jI1qu$Egqt]c5It%G$!sJi5"TeJsr;QZp!<0P/#QF;iqu-3e !V$-p!WW5uqYU$dOoPF[rr4GGqtp!]r:g6\_1Zo#/dDLZ!U?j rlP0Np&FUYq#,YmIt<+GqZ$Bhq#1KrqYBs`rVlWk&,?&"qYU q>UNprr2oss8E)urr2lr!<1UM)#jI1qu$Egqt]c5It%G$!sJi5"TeJsr;QZp!<0P/#QF;iqu-3e !V$-p!WW5uqYU$dOoPF[rr4GGqtp!]r:g6\_1Zo#/dDLZ!U?j rlP0Np&FUYq#,YmIt<+GqZ$Bhq#1KrqYBs`rVlWk&,?&"qYU q>^Kor;ZcqdJk'^r;6?eqtg'XWq"Y$^!!WH6"S_fh pP]&$rquWkpA4a]q#:'Zk/OojDDr4:#nRXX12iD7aN!iHp&4R]p@\=]r;6K8rt#&+q#C*_rVHQ_ r;-'cqu?Hjqu- q>^Kor;ZcqdJk'^r;6?eqtg'XWq"Y$^!!WH6"S_fh pP]&$rquWkpA4a]q#:'Zk/OojDDr4:#nRXX12iD7aN!iHp&4R]p@\=]r;6K8rt#&+q#C*_rVHQ_ r;-'cqu?Hjqu- q>^Kor;ZcqdJk'^r;6?eqtg'XWq"Y$^!!WH6"S_fh pP]&$rquWkpA4a]q#:'Zk/OojDDr4:#nRXX12iD7aN!iHp&4R]p@\=]r;6K8rt#&+q#C*_rVHQ_ r;-'cqu?Hjqu- q>UHoqu?]qdJk*`rVZQhqYTj_q=aa]meZkXYcsi*!rMoorj;\1qt^6dqXs`inGie"#8$Y.qtg2K s!n$Gqtg9jr;-3aq"t$`rq,BjXKnn.XK'2%qXjXZrq66aqY^0bqu$ q>UHoqu?]qdJk*`rVZQhqYTj_q=aa]meZkXYcsi*!rMoorj;\1qt^6dqXs`inGie"#8$Y.qtg2K s!n$Gqtg9jr;-3aq"t$`rq,BjXKnn.XK'2%qXjXZrq66aqY^0bqu$ q>UHoqu?]qdJk*`rVZQhqYTj_q=aa]meZkXYcsi*!rMoorj;\1qt^6dqXs`inGie"#8$Y.qtg2K s!n$Gqtg9jr;-3aq"t$`rq,BjXKnn.XK'2%qXjXZrq66aqY^0bqu$ oDeji!r`,trVllsg&M*O!<)lo')h_&qu$3dr:]XXp$hgoaS>`5Zi::.q>^6hqt'aU!!`c6"ShWg rV_iXs8N#t./s2@rr2]lrr)`mrqZTlrqlQcr;6Bfr;6KmrV-?dr;?QnrVc`prVjn<&,H2#r;$ oDeji!r`,trVllsg&M*O!<)lo')h_&qu$3dr:]XXp$hgoaS>`5Zi::.q>^6hqt'aU!!`c6"ShWg rV_iXs8N#t./s2@rr2]lrr)`mrqZTlrqlQcr;6Bfr;6KmrV-?dr;?QnrVc`prVjn<&,H2#r;$ oDeji!r`,trVllsg&M*O!<)lo')h_&qu$3dr:]XXp$hgoaS>`5Zi::.q>^6hqt'aU!!`c6"ShWg rV_iXs8N#t./s2@rr2]lrr)`mrqZTlrqlQcr;6Bfr;6KmrV-?dr;?QnrVc`prVjn<&,H2#r;$ p&G'krr)lrrr<#tg&M*Os8Doq&FKJop\OR_rVHNiqu-KerVj,&#Q4PtrqZBgq!\7e$O6V/mf&:I s8Muss8E3%rr2rqqu-L.s8;fos8Durq#CBis8;ons8McmrVZZqrl>$Lrr)Kbqt^6gqY's^rqufp p](3ks8Voo#ljl%s8W)us8J#XJ,~> p&G'krr)lrrr<#tg&M*Os8Doq&FKJop\OR_rVHNiqu-KerVj,&#Q4PtrqZBgq!\7e$O6V/mf&:I s8Muss8E3%rr2rqqu-L.s8;fos8Durq#CBis8;ons8McmrVZZqrl>$Lrr)Kbqt^6gqY's^rqufp p](3ks8Voo#ljl%s8W)us8J#XJ,~> p&G'krr)lrrr<#tg&M*Os8Doq&FKJop\OR_rVHNiqu-KerVj,&#Q4PtrqZBgq!\7e$O6V/mf&:I s8Muss8E3%rr2rqqu-L.s8;fos8Durq#CBis8;ons8McmrVZZqrl>$Lrr)Kbqt^6gqY's^rqufp p](3ks8Voo#ljl%s8W)us8J#XJ,~> q>^Bl"o\AsrVlfqs8W)Os8Drrs8W'.o^`"Zrr2inlhCDQs7$#mrs/K$rr;Z^s7lBjq#CX(!!*#p rqQJSs8W)rs8Vs&rr<#qqu?Nirr;us&H)S.rVQWpr;HWlrqufqqtpBls8Dut!<1+?&,6&%q>U!Y qu6T`rr;lprqHHkrr<#orW`E$rVuosrqcZprfmG5~> q>^Bl"o\AsrVlfqs8W)Os8Drrs8W'.o^`"Zrr2inlhCDQs7$#mrs/K$rr;Z^s7lBjq#CX(!!*#p rqQJSs8W)rs8Vs&rr<#qqu?Nirr;us&H)S.rVQWpr;HWlrqufqqtpBls8Dut!<1+?&,6&%q>U!Y qu6T`rr;lprqHHkrr<#orW`E$rVuosrqcZprfmG5~> q>^Bl"o\AsrVlfqs8W)Os8Drrs8W'.o^`"Zrr2inlhCDQs7$#mrs/K$rr;Z^s7lBjq#CX(!!*#p rqQJSs8W)rs8Vs&rr<#qqu?Nirr;us&H)S.rVQWpr;HWlrqufqqtpBls8Dut!<1+?&,6&%q>U!Y qu6T`rr;lprqHHkrr<#orW`E$rVuosrqcZprfmG5~> q>Uj$rr)fnr;$6grr<#crW)utrr<#lrr<#srr q>Uj$rr)fnr;$6grr<#crW)utrr<#lrr<#srr q>Uj$rr)fnr;$6grr<#crW)utrr<#lrr<#srr q>^Km%/BJlqs==Xr;ZfrrVc6b#QOf%rr<#tr:p9kruD%9r;HZoq#13^rqQNkqu6Edqsj[bq>L6g qu-Mnrs&N-!sJr3#6X`$rW3#q!<%KKJcCE'J,~> q>^Km%/BJlqs==Xr;ZfrrVc6b#QOf%rr<#tr:p9kruD%9r;HZoq#13^rqQNkqu6Edqsj[bq>L6g qu-Mnrs&N-!sJr3#6X`$rW3#q!<%KKJcCE'J,~> q>^Km%/BJlqs==Xr;ZfrrVc6b#QOf%rr<#tr:p9kruD%9r;HZoq#13^rqQNkqu6Edqsj[bq>L6g qu-Mnrs&N-!sJr3#6X`$rW3#q!<%KKJcCE'J,~> q>Up%oC_tYm/+?*]Y2"k^$iT6^&G\E]`GdXpq6U>s1JBF(V%2f]tCrNr;6NjrVc6ap\a[Wqu-?c ri,o&5m.W!%h&LIq#CBrrWE/uJcC<$KE$H~> q>Up%oC_tYm/+?*]Y2"k^$iT6^&G\E]`GdXpq6U>s1JBF(V%2f]tCrNr;6NjrVc6ap\a[Wqu-?c ri,o&5m.W!%h&LIq#CBrrWE/uJcC<$KE$H~> q>Up%oC_tYm/+?*]Y2"k^$iT6^&G\E]`GdXpq6U>s1JBF(V%2f]tCrNr;6NjrVc6ap\a[Wqu-?c ri,o&5m.W!%h&LIq#CBrrWE/uJcC<$KE$H~> q>V!$rql9_oCW1g!W`9%!W`>l!<3'&!!*-&!VQNm!<<-!!>Yb?$4-d2TVSH`p&"LYo)8I`p%\:] rMff%rW!!,! q>V!$rql9_oCW1g!W`9%!W`>l!<3'&!!*-&!VQNm!<<-!!>Yb?$4-d2TVSH`p&"LYo)8I`p%\:] rMff%rW!!,! q>V!$rql9_oCW1g!W`9%!W`>l!<3'&!!*-&!VQNm!<<-!!>Yb?$4-d2TVSH`p&"LYo)8I`p%\:] rMff%rW!!,! q>^Ko$2ac$oD\ps!rr?#!<<,i!WE)t!VHHm!WE'8#QY&2! q>^Ko$2ac$oD\ps!rr?#!<<,i!WE)t!VHHm!WE'8#QY&2! q>^Ko$2ac$oD\ps!rr?#!<<,i!WE)t!VHHm!WE'8#QY&2! q>^Ko#lFSsrV?^%!s/B$!!2NgqZ-Zup]:3k(BjdF!sAT3#QXu.#6o9roDJ1Xp](!\rMff%q>pd& "pG)1p]1 q>^Ko#lFSsrV?^%!s/B$!!2NgqZ-Zup]:3k(BjdF!sAT3#QXu.#6o9roDJ1Xp](!\rMff%q>pd& "pG)1p]1 q>^Ko#lFSsrV?^%!s/B$!!2NgqZ-Zup]:3k(BjdF!sAT3#QXu.#6o9roDJ1Xp](!\rMff%q>pd& "pG)1p]1 q>UZts8DigrV$3n!!<-#rrVZi"p+o1!s8Z0p]CKtqZ%E8"Tn`2"Tnr/!< q>UZts8DigrV$3n!!<-#rrVZi"p+o1!s8Z0p]CKtqZ%E8"Tn`2"Tnr/!< q>UZts8DigrV$3n!!<-#rrVZi"p+o1!s8Z0p]CKtqZ%E8"Tn`2"Tnr/!< q>U]ur;ZWfq"b-m!UB^i!>!W`Norqu`gq>%#i #P\B$"Tec.!VcZp! q>U]ur;ZWfq"b-m!UB^i!>!W`Norqu`gq>%#i #P\B$"Tec.!VcZp! q>U]ur;ZWfq"b-m!UB^i!>!W`Norqu`gq>%#i #P\B$"Tec.!VcZp! q>U^!rU^$epAP3o!UKdu!<<-,!!EN,!"Ju1"98N(#6b#+%0?P2!!N?8!WWE)"Tnr-":>P;"9:"P p%nL_rr2rtric>+qu?a!!!!&o!!NB'!WE#sJcC<$KE$H~> q>U^!rU^$epAP3o!UKdu!<<-,!!EN,!"Ju1"98N(#6b#+%0?P2!!N?8!WWE)"Tnr-":>P;"9:"P p%nL_rr2rtric>+qu?a!!!!&o!!NB'!WE#sJcC<$KE$H~> q>U^!rU^$epAP3o!UKdu!<<-,!!EN,!"Ju1"98N(#6b#+%0?P2!!N?8!WWE)"Tnr-":>P;"9:"P p%nL_rr2rtric>+qu?a!!!!&o!!NB'!WE#sJcC<$KE$H~> q>U^!pAP$fnGWOg!UKdg!WrE0rW!6.!t>87!s&N-!r`3!!?DLI"Tf2C!"T,5!!3<(!=&c.%i"^9 rpTgbs8W)tYQ"h*!!**#!!;lp!W`9%rr.KKJcCB&J,~> q>U^!pAP$fnGWOg!UKdg!WrE0rW!6.!t>87!s&N-!r`3!!?DLI"Tf2C!"T,5!!3<(!=&c.%i"^9 rpTgbs8W)tYQ"h*!!**#!!;lp!W`9%rr.KKJcCB&J,~> q>U^!pAP$fnGWOg!UKdg!WrE0rW!6.!t>87!s&N-!r`3!!?DLI"Tf2C!"T,5!!3<(!=&c.%i"^9 rpTgbs8W)tYQ"h*!!**#!!;lp!W`9%rr.KKJcCB&J,~> q>U]orVc*YrpBpR!sT&6!sSi3#5nN("To;Fp]DE<"!7UI":tP5#6t8?$NL\;%0-P(rq$-bqu6Tp s8K;'#5nN&!<<*#pAb6q!!3)uJcC<$KE$H~> q>U]orVc*YrpBpR!sT&6!sSi3#5nN("To;Fp]DE<"!7UI":tP5#6t8?$NL\;%0-P(rq$-bqu6Tp s8K;'#5nN&!<<*#pAb6q!!3)uJcC<$KE$H~> q>U]orVc*YrpBpR!sT&6!sSi3#5nN("To;Fp]DE<"!7UI":tP5#6t8?$NL\;%0-P(rq$-bqu6Tp s8K;'#5nN&!<<*#pAb6q!!3)uJcC<$KE$H~> q>Ud"qW@eTn,3+^rTjI_r=8hn&c_q7%06b6rU9.Qqu-KorVld,rV6Bkq>D9g)\<#N$3:,7rW390 eGK4?qu6Tps8K;'#5nN&!<<*#pAb6q!!3)uJcC<$KE$H~> q>Ud"qW@eTn,3+^rTjI_r=8hn&c_q7%06b6rU9.Qqu-KorVld,rV6Bkq>D9g)\<#N$3:,7rW390 eGK4?qu6Tps8K;'#5nN&!<<*#pAb6q!!3)uJcC<$KE$H~> q>Ud"qW@eTn,3+^rTjI_r=8hn&c_q7%06b6rU9.Qqu-KorVld,rV6Bkq>D9g)\<#N$3:,7rW390 eGK4?qu6Tps8K;'#5nN&!<<*#pAb6q!!3)uJcC<$KE$H~> q>U]mrq?:0jrVZTmrV-6bs7Z9cli&[J$NU_>!YGDD !W`2rq>:0js8W)'rs&E%! q>U]mrq?:0jrVZTmrV-6bs7Z9cli&[J$NU_>!YGDD !W`2rq>:0js8W)'rs&E%! q>U]mrq?:0jrVZTmrV-6bs7Z9cli&[J$NU_>!YGDD !W`2rq>:0js8W)'rs&E%! q>U]uqYgHlq>U6TrXo&,rquit!!<3*"TS>sr;$ q>U]uqYgHlq>U6TrXo&,rquit!!<3*"TS>sr;$ q>U]uqYgHlq>U6TrXo&,rquit!!<3*"TS>sr;$ q>^Kj"o/,sp\F^NrXS]%r;-Qu!!E9'#Q4T"r;?NmrZ;%7r;??ir;$Bhq"XR^@fc`4!sf)7!grrb rr<#tric>,rW*'%!<<3&p](?r!!3)uJcC<$KE$H~> q>^Kj"o/,sp\F^NrXS]%r;-Qu!!E9'#Q4T"r;?NmrZ;%7r;??ir;$Bhq"XR^@fc`4!sf)7!grrb rr<#tric>,rW*'%!<<3&p](?r!!3)uJcC<$KE$H~> q>^Kj"o/,sp\F^NrXS]%r;-Qu!!E9'#Q4T"r;?NmrZ;%7r;??ir;$Bhq"XR^@fc`4!sf)7!grrb rr<#tric>,rW*'%!<<3&p](?r!!3)uJcC<$KE$H~> q>UZns7u]orqY^V&c;P."98E&!sJK"rVlcprr)iqru_7?qu-Knqu6WqqYC'gpjWDI#6Y/3!!*#p rVuosrVj&$#Q=]+!sAW/!VcWu!<<<&q>GmEirB&X\c2[/qu6Zqg&D'Oqu6ZqV#Pr~> q>UZns7u]orqY^V&c;P."98E&!sJK"rVlcprr)iqru_7?qu-Knqu6WqqYC'gpjWDI#6Y/3!!*#p rVuosrVj&$#Q=]+!sAW/!VcWu!<<<&q>GmEirB&X\c2[/qu6Zqg&D'Oqu6ZqV#Pr~> q>UZns7u]orqY^V&c;P."98E&!sJK"rVlcprr)iqru_7?qu-Knqu6WqqYC'gpjWDI#6Y/3!!*#p rVuosrVj&$#Q=]+!sAW/!VcWu!<<<&q>GmEirB&X\c2[/qu6Zqg&D'Oqu6ZqV#Pr~> f)GdM!WE'*!WW<$s8;lrrr2Kg&GZ,#o_\Lf!s/T/"9o)-qY^?ms8K8&#Q=]/!s/W."Si$&!WrT/ s8)WgU]:AnaoD; f)GdM!WE'*!WW<$s8;lrrr2Kg&GZ,#o_\Lf!s/T/"9o)-qY^?ms8K8&#Q=]/!s/W."Si$&!WrT/ s8)WgU]:AnaoD; f)GdM!WE'*!WW<$s8;lrrr2Kg&GZ,#o_\Lf!s/T/"9o)-qY^?ms8K8&#Q=]/!s/W."Si$&!WrT/ s8)WgU]:AnaoD; f)GdM!WE'*!WW<$s8;lrrr2Nh'D25&o(i4[Xp,"0#6P&2q#:9krr2otrilD,"To&5"TSl)!!`]/ !tb;.rVWGjs8L.?!<)lqd/X.FJcF7"J,~> f)GdM!WE'*!WW<$s8;lrrr2Nh'D25&o(i4[Xp,"0#6P&2q#:9krr2otrilD,"To&5"TSl)!!`]/ !tb;.rVWGjs8L.?!<)lqd/X.FJcF7"J,~> f)GdM!WE'*!WW<$s8;lrrr2Nh'D25&o(i4[Xp,"0#6P&2q#:9krr2otrilD,"To&5"TSl)!!`]/ !tb;.rVWGjs8L.?!<)lqd/X.FJcF7"J,~> f)GdM!WE'*!WW<$s8;lrrr2Nh'Dq;!qtg^Hmrr2otrj2Y)rWbIo&-;k>!Wr/t "p#,4"o\H"UAt8maoD; f)GdM!WE'*!WW<$s8;lrrr2Nh'Dq;!qtg^Hmrr2otrj2Y)rWbIo&-;k>!Wr/t "p#,4"o\H"UAt8maoD; f)GdM!WE'*!WW<$s8;lrrr2Nh'Dq;!qtg^Hmrr2otrj2Y)rWbIo&-;k>!Wr/t "p#,4"o\H"UAt8maoD; f)GdM!WE'*!WW<$s8;lrrr2Nh(ARh,o(`7ZrGmEj8]/YJcDPGJ,~> f)GdM!WE'*!WW<$s8;lrrr2Nh(ARh,o(`7ZrGmEj8]/YJcDPGJ,~> f)GdM!WE'*!WW<$s8;lrrr2Nh(ARh,o(`7ZrGmEj8]/YJcDPGJ,~> f)GdM!WE'*!WW<$s8;lrrr2Nh&cVLkrr2Z^p&G0p"V^q:&GH##rrN)t[/^.)#lOc(!s/H/!"&H$ #6=f1!:p0ardk+0s8W)-s8Dr[s7uZgs8Drss7uYqs*t~> f)GdM!WE'*!WW<$s8;lrrr2Nh&cVLkrr2Z^p&G0p"V^q:&GH##rrN)t[/^.)#lOc(!s/H/!"&H$ #6=f1!:p0ardk+0s8W)-s8Dr[s7uZgs8Drss7uYqs*t~> f)GdM!WE'*!WW<$s8;lrrr2Nh&cVLkrr2Z^p&G0p"V^q:&GH##rrN)t[/^.)#lOc(!s/H/!"&H$ #6=f1!:p0ardk+0s8W)-s8Dr[s7uZgs8Drss7uYqs*t~> f)GdM!WE'*!WW<$s8;lrrr2Nh'`S.3rqcHioEYEs$NL;8%f6/'rr;us\c;[-s8;ln#6b)>$NLA5 !r)a"%0-q8rr)`Ys7uWXs7uWXs8W#rrVlf f)GdM!WE'*!WW<$s8;lrrr2Nh'`S.3rqcHioEYEs$NL;8%f6/'rr;us\c;[-s8;ln#6b)>$NLA5 !r)a"%0-q8rr)`Ys7uWXs7uWXs8W#rrVlf f)GdM!WE'*!WW<$s8;lrrr2Nh'`S.3rqcHioEYEs$NL;8%f6/'rr;us\c;[-s8;ln#6b)>$NLA5 !r)a"%0-q8rr)`Ys7uWXs7uWXs8W#rrVlf f)GdL!WE'*!<<3#s8;lrrr2Qi&H;J)qt0paq=P*r"TSo;!<<#srr2ut_>j?1s82lnrqd#uq#Cd& !!rW*#5J9!!X&Q'p\=LJs8W'$rVZWlf`'LdfFc`ff[nd.f@^-%s8Dutrr;usrVmH.s8DoMf\,!W r;6BhrVZWnli7"a#Q<<.g"=sVrq$0irX/](rVulqf\+a'ec+1rf`0V+f%9fsr:Bsfrr f)GdL!WE'*!<<3#s8;lrrr2Qi&H;J)qt0paq=P*r"TSo;!<<#srr2ut_>j?1s82lnrqd#uq#Cd& !!rW*#5J9!!X&Q'p\=LJs8W'$rVZWlf`'LdfFc`ff[nd.f@^-%s8Dutrr;usrVmH.s8DoMf\,!W r;6BhrVZWnli7"a#Q<<.g"=sVrq$0irX/](rVulqf\+a'ec+1rf`0V+f%9fsr:Bsfrr f)GdL!WE'*!<<3#s8;lrrr2Qi&H;J)qt0paq=P*r"TSo;!<<#srr2ut_>j?1s82lnrqd#uq#Cd& !!rW*#5J9!!X&Q'p\=LJs8W'$rVZWlf`'LdfFc`ff[nd.f@^-%s8Dutrr;usrVmH.s8DoMf\,!W r;6BhrVZWnli7"a#Q<<.g"=sVrq$0irX/](rVulqf\+a'ec+1rf`0V+f%9fsr:Bsfrr f)GdL!WE'*!<<3#s8;lrrr2Qi'E7e*q>^Kdr4i:5!s&B-"8_uprk/:,rWi8op\4UaqtKU\#6YG= qu6Kirp0Uarr;fur4<19"9IfgrrEN5!"0&4$3^G2_=ma$rr*!!rr2lr&,uM%\dAE>$+Kj/qY^%pAY!f^]P&J"TSQ,"Si$.! f)GdL!WE'*!<<3#s8;lrrr2Qi'E7e*q>^Kdr4i:5!s&B-"8_uprk/:,rWi8op\4UaqtKU\#6YG= qu6Kirp0Uarr;fur4<19"9IfgrrEN5!"0&4$3^G2_=ma$rr*!!rr2lr&,uM%\dAE>$+Kj/qY^%pAY!f^]P&J"TSQ,"Si$.! f)GdL!WE'*!<<3#s8;lrrr2Qi'E7e*q>^Kdr4i:5!s&B-"8_uprk/:,rWi8op\4UaqtKU\#6YG= qu6Kirp0Uarr;fur4<19"9IfgrrEN5!"0&4$3^G2_=ma$rr*!!rr2lr&,uM%\dAE>$+Kj/qY^%pAY!f^]P&J"TSQ,"Si$.! fDbpOr;llt#lt#-rr;oqs8N#ps8Drqrt>>-p\Xg_p&G-r!WrH($1n,orj;\1qXaa_rV?-an,NXr #5e5pp&44Vs8E8pqkXH#"Tnks!!!&u!;up1"U>#3$3CJ8$)d@or:g3js8N#t&cVb%qZ7!(!W`E% qtp?jr;?Q[s8W'%qZI$(!sJ/os8EW+r:^)g#Qk55"9S]+! fDbpOr;llt#lt#-rr;oqs8N#ps8Drqrt>>-p\Xg_p&G-r!WrH($1n,orj;\1qXaa_rV?-an,NXr #5e5pp&44Vs8E8pqkXH#"Tnks!!!&u!;up1"U>#3$3CJ8$)d@or:g3js8N#t&cVb%qZ7!(!W`E% qtp?jr;?Q[s8W'%qZI$(!sJ/os8EW+r:^)g#Qk55"9S]+! fDbpOr;llt#lt#-rr;oqs8N#ps8Drqrt>>-p\Xg_p&G-r!WrH($1n,orj;\1qXaa_rV?-an,NXr #5e5pp&44Vs8E8pqkXH#"Tnks!!!&u!;up1"U>#3$3CJ8$)d@or:g3js8N#t&cVb%qZ7!(!W`E% qtp?jr;?Q[s8W'%qZI$(!sJ/os8EW+r:^)g#Qk55"9S]+! f`2!N!W<&u!!r],!ri5trr;usqu?WorVmN,rq?-]qhY@U!!85"pP;9":YV5p\XX]qu79-r;60j#64f2"9/5q rVcZlrp0UarWiB'! f`2!N!W<&u!!r],!ri5trr;usqu?WorVmN,rq?-]qhY@U!!85"pP;9":YV5p\XX]qu79-r;60j#64f2"9/5q rVcZlrp0UarWiB'! f`2!N!W<&u!!r],!ri5trr;usqu?WorVmN,rq?-]qhY@U!!85"pP;9":YV5p\XX]qu79-r;60j#64f2"9/5q rVcZlrp0UarWiB'! f`2!N$N0u*!<<3%!WE&srVl]orr2iq')VLur;1RB!rrH+"p4u.qYgBl[/UC/qu?Qbp%ed\!!WQ, #Pe/eqs+4]rWiAu"9Si/#6=8pqZ-Ws%g!+C$31;6#mLMCHM.(2rVQU,rqufk"UG);"pFl#qY^s!!`Q,"bZ^Lr;QQor;HNms8EQ(q=OT4#Qb).$31,5%KZY+!=oA>!s]&4 "U+Slqt'O\q"q/mJ,~> f`2!N$N0u*!<<3%!WE&srVl]orr2iq')VLur;1RB!rrH+"p4u.qYgBl[/UC/qu?Qbp%ed\!!WQ, #Pe/eqs+4]rWiAu"9Si/#6=8pqZ-Ws%g!+C$31;6#mLMCHM.(2rVQU,rqufk"UG);"pFl#qY^s!!`Q,"bZ^Lr;QQor;HNms8EQ(q=OT4#Qb).$31,5%KZY+!=oA>!s]&4 "U+Slqt'O\q"q/mJ,~> f`2!N$N0u*!<<3%!WE&srVl]orr2iq')VLur;1RB!rrH+"p4u.qYgBl[/UC/qu?Qbp%ed\!!WQ, #Pe/eqs+4]rWiAu"9Si/#6=8pqZ-Ws%g!+C$31;6#mLMCHM.(2rVQU,rqufk"UG);"pFl#qY^s!!`Q,"bZ^Lr;QQor;HNms8EQ(q=OT4#Qb).$31,5%KZY+!=oA>!s]&4 "U+Slqt'O\q"q/mJ,~> q>^9ikl:\^%fHD.!<<3%!WE&srr)iqqu?Zpr;HZl&HDZ7!<`E'$3C58!M8u_rVjJ0q#1Kpo`+X[ qZ?9f#6b,;oCr.[qWn1]rWi<"!sAo3!2&PJ&>,PcT:):A$3pS9"U=YmrVHEk&H;V*q$7'*#6PA3 qYL-gr;Gp\s8E9'!W`E/"oeJls8W'/qu6m0"pk;3St)7=SXuCCq47cl"p+c0$1m`fs8EQ/oDAds "9f)-q"OLLs7c?Ts8W'/qXt0q"9JT$qtp q>^9ikl:\^%fHD.!<<3%!WE&srr)iqqu?Zpr;HZl&HDZ7!<`E'$3C58!M8u_rVjJ0q#1Kpo`+X[ qZ?9f#6b,;oCr.[qWn1]rWi<"!sAo3!2&PJ&>,PcT:):A$3pS9"U=YmrVHEk&H;V*q$7'*#6PA3 qYL-gr;Gp\s8E9'!W`E/"oeJls8W'/qu6m0"pk;3St)7=SXuCCq47cl"p+c0$1m`fs8EQ/oDAds "9f)-q"OLLs7c?Ts8W'/qXt0q"9JT$qtp q>^9ikl:\^%fHD.!<<3%!WE&srr)iqqu?Zpr;HZl&HDZ7!<`E'$3C58!M8u_rVjJ0q#1Kpo`+X[ qZ?9f#6b,;oCr.[qWn1]rWi<"!sAo3!2&PJ&>,PcT:):A$3pS9"U=YmrVHEk&H;V*q$7'*#6PA3 qYL-gr;Gp\s8E9'!W`E/"oeJls8W'/qu6m0"pk;3St)7=SXuCCq47cl"p+c0$1m`fs8EQ/oDAds "9f)-q"OLLs7c?Ts8W'/qXt0q"9JT$qtp q>^9ikl:\^!<)is#m:5/rVuipr;Q]mrri;ur;6Bjq@`Q%s%3Lr!1!erql`qrWfk3#lk&19DS2Z s8EQ)qt^@#!<`N$rp'ISr;HQZs8W'(q"k.$!=f,(qu6NnqZ6Woqu?]q&,PkkrrrN-!X,q0n+c_U q>("#q=V/t!W`H*8b`&UrV6 q>^9ikl:\^!<)is#m:5/rVuipr;Q]mrri;ur;6Bjq@`Q%s%3Lr!1!erql`qrWfk3#lk&19DS2Z s8EQ)qt^@#!<`N$rp'ISr;HQZs8W'(q"k.$!=f,(qu6NnqZ6Woqu?]q&,PkkrrrN-!X,q0n+c_U q>("#q=V/t!W`H*8b`&UrV6 q>^9ikl:\^!<)is#m:5/rVuipr;Q]mrri;ur;6Bjq@`Q%s%3Lr!1!erql`qrWfk3#lk&19DS2Z s8EQ)qt^@#!<`N$rp'ISr;HQZs8W'(q"k.$!=f,(qu6NnqZ6Woqu?]q&,PkkrrrN-!X,q0n+c_U q>("#q=V/t!W`H*8b`&UrV6 q>^9ikl24mrquiu!W`H)!WE&trVZZoqu?Zp(]F:/qtg7E1B7RY"9AQ,!=/qTrV6?irk/:,r:!fs8N#rrt#,- p](Ht!<`K'rVc`prVl*^rr**&!!33%r;Q q>^9ikl24mrquiu!W`H)!WE&trVZZoqu?Zp(]F:/qtg7E1B7RY"9AQ,!=/qTrV6?irk/:,r:!fs8N#rrt#,- p](Ht!<`K'rVc`prVl*^rr**&!!33%r;Q q>^9ikl24mrquiu!W`H)!WE&trVZZoqu?Zp(]F:/qtg7E1B7RY"9AQ,!=/qTrV6?irk/:,r:!fs8N#rrt#,- p](Ht!<`K'rVc`prVl*^rr**&!!33%r;Q q>UTrrq??[rr)lslM_:krVQZs!s/o3$2jhqrVlWj)Z'L6o`"\)+WLUb"ono/#6Y53"9JMnoDSXe ir92Rs7lTmr8IVcr;Q?drr2Her;ZZortkbGn,NFtrr)umrV>dZs8E9'qud$#!W`8jrr<#srY5>/ q#C3`rqQQp!<<-(rqQ6fs8N#rrrrE#rVup!rW!'#rr2rsrp'O`rW`<%!!!$"rpp'prVQ9g!sAf@ !<2uss8W'"s8N#ss8W'/rVuj&!or;ZNjn,NFe s8W,u#lj`$$N^\9s8N#ts8Mios8N&o%fQG.!snu.rr2ipqu6Hkr;R<+q>^Hhq#D-0! q>UTrrq??[rr)lslM_:krVQZs!s/o3$2jhqrVlWj)Z'L6o`"\)+WLUb"ono/#6Y53"9JMnoDSXe ir92Rs7lTmr8IVcr;Q?drr2Her;ZZortkbGn,NFtrr)umrV>dZs8E9'qud$#!W`8jrr<#srY5>/ q#C3`rqQQp!<<-(rqQ6fs8N#rrrrE#rVup!rW!'#rr2rsrp'O`rW`<%!!!$"rpp'prVQ9g!sAf@ !<2uss8W'"s8N#ss8W'/rVuj&!or;ZNjn,NFe s8W,u#lj`$$N^\9s8N#ts8Mios8N&o%fQG.!snu.rr2ipqu6Hkr;R<+q>^Hhq#D-0! q>UTrrq??[rr)lslM_:krVQZs!s/o3$2jhqrVlWj)Z'L6o`"\)+WLUb"ono/#6Y53"9JMnoDSXe ir92Rs7lTmr8IVcr;Q?drr2Her;ZZortkbGn,NFtrr)umrV>dZs8E9'qud$#!W`8jrr<#srY5>/ q#C3`rqQQp!<<-(rqQ6fs8N#rrrrE#rVup!rW!'#rr2rsrp'O`rW`<%!!!$"rpp'prVQ9g!sAf@ !<2uss8W'"s8N#ss8W'/rVuj&!or;ZNjn,NFe s8W,u#lj`$$N^\9s8N#ts8Mios8N&o%fQG.!snu.rr2ipqu6Hkr;R<+q>^Hhq#D-0! q>Ufrs8;-\rr!*(!>!;QX)!"8i-"UP/ q>Ufrs8;-\rr!*(!>!;QX)!"8i-"UP/ q>Ufrs8;-\rr!*(!>!;QX)!"8i-"UP/ p\tEhs7c*`!p9Om"9A`.!sJr2%0-P9!"o#,('O[C!sAZ8!=8i5!WW9)!rrNAqYpKXrr1sX#QFMn rpp$YrSdbdrpf[[r:0dcrVbm:$iq.4!!WT&rq-3YpZVV\r<*-$!W_`i!<2ip&,6&$o`"[g#6>,2 !:op]qt^6prr3!!!r`2us8N#]rrr?%!!!$#nc&por;H[+$4.% p\tEhs7c*`!p9Om"9A`.!sJr2%0-P9!"o#,('O[C!sAZ8!=8i5!WW9)!rrNAqYpKXrr1sX#QFMn rpp$YrSdbdrpf[[r:0dcrVbm:$iq.4!!WT&rq-3YpZVV\r<*-$!W_`i!<2ip&,6&$o`"[g#6>,2 !:op]qt^6prr3!!!r`2us8N#]rrr?%!!!$#nc&por;H[+$4.% p\tEhs7c*`!p9Om"9A`.!sJr2%0-P9!"o#,('O[C!sAZ8!=8i5!WW9)!rrNAqYpKXrr1sX#QFMn rpp$YrSdbdrpf[[r:0dcrVbm:$iq.4!!WT&rq-3YpZVV\r<*-$!W_`i!<2ip&,6&$o`"[g#6>,2 !:op]qt^6prr3!!!r`2us8N#]rrr?%!!!$#nc&por;H[+$4.% q#:["pA=F\pCIB,!WE*!!V$.#!WWB5!s8f/!!`K/#R(84q#D99!Y#,0$NLP9!rr`1!!N?*0_tSD o)8@_ro="`q"t$err)ihiW&rS!<2ujs7Q]ocNF:N&-`4+!!`W^rVH?ao_n"R"oSQ)!!3/ds8;j* o`"a^'*/+6#6au'n,<(^"TJE%!!<-"rVulrkl1hb!<<*#!VQHmrr2p(rr)Zo"TST)r;-$bs8FD6 r;Zg q#:["pA=F\pCIB,!WE*!!V$.#!WWB5!s8f/!!`K/#R(84q#D99!Y#,0$NLP9!rr`1!!N?*0_tSD o)8@_ro="`q"t$err)ihiW&rS!<2ujs7Q]ocNF:N&-`4+!!`W^rVH?ao_n"R"oSQ)!!3/ds8;j* o`"a^'*/+6#6au'n,<(^"TJE%!!<-"rVulrkl1hb!<<*#!VQHmrr2p(rr)Zo"TST)r;-$bs8FD6 r;Zg q#:["pA=F\pCIB,!WE*!!V$.#!WWB5!s8f/!!`K/#R(84q#D99!Y#,0$NLP9!rr`1!!N?*0_tSD o)8@_ro="`q"t$err)ihiW&rS!<2ujs7Q]ocNF:N&-`4+!!`W^rVH?ao_n"R"oSQ)!!3/ds8;j* o`"a^'*/+6#6au'n,<(^"TJE%!!<-"rVulrkl1hb!<<*#!VQHmrr2p(rr)Zo"TST)r;-$bs8FD6 r;Zg q#:Zss6os`o`>0q!WE*!!V$.""TS]+%0Zt:!!`Q/!^r:p-gq=rnJs7d'!nFj;p\$QA?!Xf25#Oh]trqZNgqu?KUrrr?(!<<0$m/IaurVcZn qu-<]quI!*!sqHhr:'X[rri?$!<<3#!<)rsroj@cr;clu! q#:Zss6os`o`>0q!WE*!!V$.""TS]+%0Zt:!!`Q/!^r:p-gq=rnJs7d'!nFj;p\$QA?!Xf25#Oh]trqZNgqu?KUrrr?(!<<0$m/IaurVcZn qu-<]quI!*!sqHhr:'X[rri?$!<<3#!<)rsroj@cr;clu! q#:Zss6os`o`>0q!WE*!!V$.""TS]+%0Zt:!!`Q/!^r:p-gq=rnJs7d'!nFj;p\$QA?!Xf25#Oh]trqZNgqu?KUrrr?(!<<0$m/IaurVcZn qu-<]quI!*!sqHhr:'X[rri?$!<<3#!<)rsroj@cr;clu! q>^Kl#QO\sp&>0r!UB^q!rrH+!s/N)!<UTsrrE*$rW)osrr2-]"oSH%!!*,nrrE&rrs,(t!s8],s7l3cs8FDDqYpX#!WW6" r;HZqrVccps8W)us8MopqtU*o!!EB/T(i!Yq"jdSs8W)ursA]&rWN<-"9eJsoDeji-iE\1$3UJ4 "82KdqXjX_qu6WprVlisr;$6hp%JOl!<`Z)qYKp`r2fpK~> q>^Kl#QO\sp&>0r!UB^q!rrH+!s/N)!<UTsrrE*$rW)osrr2-]"oSH%!!*,nrrE&rrs,(t!s8],s7l3cs8FDDqYpX#!WW6" r;HZqrVccps8W)us8MopqtU*o!!EB/T(i!Yq"jdSs8W)ursA]&rWN<-"9eJsoDeji-iE\1$3UJ4 "82KdqXjX_qu6WprVlisr;$6hp%JOl!<`Z)qYKp`r2fpK~> q>^Kl#QO\sp&>0r!UB^q!rrH+!s/N)!<UTsrrE*$rW)osrr2-]"oSH%!!*,nrrE&rrs,(t!s8],s7l3cs8FDDqYpX#!WW6" r;HZqrVccps8W)us8MopqtU*o!!EB/T(i!Yq"jdSs8W)ursA]&rWN<-"9eJsoDeji-iE\1$3UJ4 "82KdqXjX_qu6WprVlisr;$6hp%JOl!<`Z)qYKp`r2fpK~> q>Uctrr)fjs7ZWs!UB^r"onW,!!EH*!U6hr;?TpqY:!arri?$!<<3#!<)rsroj@cr;clu!$qtt[=!<9s_s88tuJ,~> q>Uctrr)fjs7ZWs!UB^r"onW,!!EH*!U6hr;?TpqY:!arri?$!<<3#!<)rsroj@cr;clu!$qtt[=!<9s_s88tuJ,~> q>Uctrr)fjs7ZWs!UB^r"onW,!!EH*!U6hr;?TpqY:!arri?$!<<3#!<)rsroj@cr;clu!$qtt[=!<9s_s88tuJ,~> q>Ud#r;H0brV-Hr!p]je"8r9#!XJf.!W`B.!GS9!rr@eO-0G5s7u]nrr)fqqu6TT rs/K$rrE0$!1$bs8)`Yrrr?(!<<0$nG`Lfq>U`s s82fqs8N&rrr3&ts8;]m"TJE%!!<-"rVulrkl1hb!<<*#!VcU)qZ$Qos8;op!!`N)"o@rloDeji -iNr9"U5#3#P7WepA=jfrr2rtrr<#trVlZkrV$9r!XJf)qtL!drUKmuq>C6fs8VrqCBO\@"9nZ" oDeji$iBW"!!EZ2qZ$Noqu6U4r;Q`qrVlisrVuchp&"sn!XT/.q#C$^r8.GVp\k-iqYC-errE&Z s*t~> q>Ud#r;H0brV-Hr!p]je"8r9#!XJf.!W`B.!GS9!rr@eO-0G5s7u]nrr)fqqu6TT rs/K$rrE0$!1$bs8)`Yrrr?(!<<0$nG`Lfq>U`s s82fqs8N&rrr3&ts8;]m"TJE%!!<-"rVulrkl1hb!<<*#!VcU)qZ$Qos8;op!!`N)"o@rloDeji -iNr9"U5#3#P7WepA=jfrr2rtrr<#trVlZkrV$9r!XJf)qtL!drUKmuq>C6fs8VrqCBO\@"9nZ" oDeji$iBW"!!EZ2qZ$Noqu6U4r;Q`qrVlisrVuchp&"sn!XT/.q#C$^r8.GVp\k-iqYC-errE&Z s*t~> q>Ud#r;H0brV-Hr!p]je"8r9#!XJf.!W`B.!GS9!rr@eO-0G5s7u]nrr)fqqu6TT rs/K$rrE0$!1$bs8)`Yrrr?(!<<0$nG`Lfq>U`s s82fqs8N&rrr3&ts8;]m"TJE%!!<-"rVulrkl1hb!<<*#!VcU)qZ$Qos8;op!!`N)"o@rloDeji -iNr9"U5#3#P7WepA=jfrr2rtrr<#trVlZkrV$9r!XJf)qtL!drUKmuq>C6fs8VrqCBO\@"9nZ" oDeji$iBW"!!EZ2qZ$Noqu6U4r;Q`qrVlisrVuchp&"sn!XT/.q#C$^r8.GVp\k-iqYC-errE&Z s*t~> q>U^!qtTpTq"pc,W!95srpfp]q:GWMrr2s$!!:1@#R:>6!WrH(rr2lps8M6^"oSQ)!!3/Irri?$ !<<3#!<)rsroj@cr;clu! q>U^!qtTpTq"pc,W!95srpfp]q:GWMrr2s$!!:1@#R:>6!WrH(rr2lps8M6^"oSQ)!!3/Irri?$ !<<3#!<)rsroj@cr;clu! q>U^!qtTpTq"pc,W!95srpfp]q:GWMrr2s$!!:1@#R:>6!WrH(rr2lps8M6^"oSQ)!!3/Irri?$ !<<3#!<)rsroj@cr;clu! q>U]urqc?Xr:0^,rWhulp%JC_p%nXdh#@QWrr<0%!lk9N#Qb)."pY5-rVlcmqu-NXrrr?(!<<0$ d/O7JrrE*$rW)osrr2-]"oSH%!!*,orsnr&s7ZHkr;Zp"%05qpqXaaerX\f$r<*0&"9La`o`+sb nGW7arr2ro%.sH&!!iT+p\k*gq#9g`&,,quq"t!_q?$d!#m.sBrU^'hrWhoj"98N4$N0Yus8N&u &cV^ur;H?h"on]/"$QPYnb`4Brs/Q%qY9j^rVG%DJ,~> q>U]urqc?Xr:0^,rWhulp%JC_p%nXdh#@QWrr<0%!lk9N#Qb)."pY5-rVlcmqu-NXrrr?(!<<0$ d/O7JrrE*$rW)osrr2-]"oSH%!!*,orsnr&s7ZHkr;Zp"%05qpqXaaerX\f$r<*0&"9La`o`+sb nGW7arr2ro%.sH&!!iT+p\k*gq#9g`&,,quq"t!_q?$d!#m.sBrU^'hrWhoj"98N4$N0Yus8N&u &cV^ur;H?h"on]/"$QPYnb`4Brs/Q%qY9j^rVG%DJ,~> q>U]urqc?Xr:0^,rWhulp%JC_p%nXdh#@QWrr<0%!lk9N#Qb)."pY5-rVlcmqu-NXrrr?(!<<0$ d/O7JrrE*$rW)osrr2-]"oSH%!!*,orsnr&s7ZHkr;Zp"%05qpqXaaerX\f$r<*0&"9La`o`+sb nGW7arr2ro%.sH&!!iT+p\k*gq#9g`&,,quq"t!_q?$d!#m.sBrU^'hrWhoj"98N4$N0Yus8N&u &cV^ur;H?h"on]/"$QPYnb`4Brs/Q%qY9j^rVG%DJ,~> q>U^!rVlNhq=sC"rWiAorUfj`p\t0j!<1dR"oeN%"98ME!<333!! q>U^!rVlNhq=sC"rWiAorUfj`p\t0j!<1dR"oeN%"98ME!<333!! q>U^!rVlNhq=sC"rWiAorUfj`p\t0j!<1dR"oeN%"98ME!<333!! q>UWrrV$6`n]1V6s7H*`qt0mXrquirh#@QWrr<0%!lt?O#lk5UBdnFuq]q>L q>UWrrV$6`n]1V6s7H*`qt0mXrquirh#@QWrr<0%!lt?O#lk5UBdnFuq]q>L q>UWrrV$6`n]1V6s7H*`qt0mXrquirh#@QWrr<0%!lt?O#lk5UBdnFuq]q>L q>U]srqHT@Q"TJE%!!<-"rVulrkl1hb!<<*#!VcU&q>^Egs7Q6j!"T,2$i^.ss8N!-q>Tme%KHM2rqb[N rr)fms8W'/nGiIdr!E];#mh%4p\b$gnc'.!r;HWooDS:]"W.7DqtTpWs8W''q>^L"!"oY2p](9m s8N]1r;QQas7Z*d"TSZ3o(Mt[roa:]rVcX"rUp3ap&FU^nbN+^rnma+~> q>U]srqHT@Q"TJE%!!<-"rVulrkl1hb!<<*#!VcU&q>^Egs7Q6j!"T,2$i^.ss8N!-q>Tme%KHM2rqb[N rr)fms8W'/nGiIdr!E];#mh%4p\b$gnc'.!r;HWooDS:]"W.7DqtTpWs8W''q>^L"!"oY2p](9m s8N]1r;QQas7Z*d"TSZ3o(Mt[roa:]rVcX"rUp3ap&FU^nbN+^rnma+~> q>U]srqHT@Q"TJE%!!<-"rVulrkl1hb!<<*#!VcU&q>^Egs7Q6j!"T,2$i^.ss8N!-q>Tme%KHM2rqb[N rr)fms8W'/nGiIdr!E];#mh%4p\b$gnc'.!r;HWooDS:]"W.7DqtTpWs8W''q>^L"!"oY2p](9m s8N]1r;QQas7Z*d"TSZ3o(Mt[roa:]rVcX"rUp3ap&FU^nbN+^rnma+~> q>U]uq>:$eqt0j/rWiAtp%\C_oD[DB"oeN%"98MD!!N]0"op%ArVulrk5PV`"9AK(!;QTiro*k[ rr3!!!r`2us8N#]rrr?%!!!$#p\td"rr2cnq>C@-!!iT&rU0[Vs8W'/qu6?e#lk&6!pfg`o_8@] qu?]q%fQD(o_n^m!<<0%rVlcinGa$orr)]brUp3q!!E?)rV?E`s8W''qu?m*! q>U]uq>:$eqt0j/rWiAtp%\C_oD[DB"oeN%"98MD!!N]0"op%ArVulrk5PV`"9AK(!;QTiro*k[ rr3!!!r`2us8N#]rrr?%!!!$#p\td"rr2cnq>C@-!!iT&rU0[Vs8W'/qu6?e#lk&6!pfg`o_8@] qu?]q%fQD(o_n^m!<<0%rVlcinGa$orr)]brUp3q!!E?)rV?E`s8W''qu?m*! q>U]uq>:$eqt0j/rWiAtp%\C_oD[DB"oeN%"98MD!!N]0"op%ArVulrk5PV`"9AK(!;QTiro*k[ rr3!!!r`2us8N#]rrr?%!!!$#p\td"rr2cnq>C@-!!iT&rU0[Vs8W'/qu6?e#lk&6!pfg`o_8@] qu?]q%fQD(o_n^m!<<0%rVlcinGa$orr)]brUp3q!!E?)rV?E`s8W''qu?m*! q>U]os82ihs8Vi8rW`E$s8Vlmr7CrPrr2s$!!:@E$3C2-!Up\4^f rr<#urWhrp"p"f1r;-0fs8N&us8EQ,qYpNoq?$g"!Wi>rq#:9Wrt,20qu$?gqYgEg_`Ir##lqj@ r<)rpr;-El"o\K"s8N#[s*t~> q>U]os82ihs8Vi8rW`E$s8Vlmr7CrPrr2s$!!:@E$3C2-!Up\4^f rr<#urWhrp"p"f1r;-0fs8N&us8EQ,qYpNoq?$g"!Wi>rq#:9Wrt,20qu$?gqYgEg_`Ir##lqj@ r<)rpr;-El"o\K"s8N#[s*t~> q>U]os82ihs8Vi8rW`E$s8Vlmr7CrPrr2s$!!:@E$3C2-!Up\4^f rr<#urWhrp"p"f1r;-0fs8N&us8EQ,qYpNoq?$g"!Wi>rq#:9Wrt,20qu$?gqYgEg_`Ir##lqj@ r<)rpr;-El"o\K"s8N#[s*t~> M#RYXrr<0%!m^iV!W`<+!W`E(!XAg1rV6BMrrr?(!<<0$qZ$Tp#Pn&irV60\r;$?irVld$r;H9\ rVQ6bq>UTsrrE*$rW)osrr2-]"oSH%!!*,prt#,$s7u?eqZHm$$ip(ss7u3b&,?(rqud6)"9be# qYU3`qtpEnrr;g(o_&(R"U>/1"8`#kr:om`s8EN(pAOUTq=Xmj"pY2/p@e4[s8Mus#Pn]."9ef' r:BsgrX\r$qYpBe!sJc2!iu=qr;5aYs8 M#RYXrr<0%!m^iV!W`<+!W`E(!XAg1rV6BMrrr?(!<<0$qZ$Tp#Pn&irV60\r;$?irVld$r;H9\ rVQ6bq>UTsrrE*$rW)osrr2-]"oSH%!!*,prt#,$s7u?eqZHm$$ip(ss7u3b&,?(rqud6)"9be# qYU3`qtpEnrr;g(o_&(R"U>/1"8`#kr:om`s8EN(pAOUTq=Xmj"pY2/p@e4[s8Mus#Pn]."9ef' r:BsgrX\r$qYpBe!sJc2!iu=qr;5aYs8 M#RYXrr<0%!m^iV!W`<+!W`E(!XAg1rV6BMrrr?(!<<0$qZ$Tp#Pn&irV60\r;$?irVld$r;H9\ rVQ6bq>UTsrrE*$rW)osrr2-]"oSH%!!*,prt#,$s7u?eqZHm$$ip(ss7u3b&,?(rqud6)"9be# qYU3`qtpEnrr;g(o_&(R"U>/1"8`#kr:om`s8EN(pAOUTq=Xmj"pY2/p@e4[s8Mus#Pn]."9ef' r:BsgrX\r$qYpBe!sJc2!iu=qr;5aYs8 M#RYXrr<0%!mgoX!WW?-!!NE.#QOpFq"t*ii;WuZ"9AK(!;c`qrWi>nq>U*`p%e=]rr2rr#P\#l o_\LYq>($nrr3!!!r`2us8N#]rrr?%!!!$#p\td&q#C-]qtUd(#QY#)nGDqLrt#&,lM:bj#6Y>5 s8M]eq"ages8EQ%r;>sXrW!6.!<`&ppA=IQs8N!,nbDkRp&"mo"q:_-q>9mcs8N#t#laZ'"p,)7 p\FF\s8EQ&qY0d[q$$g'!!`T)q>:0Uruq=;r;QTerV?$^"8cp8!;gO4PkP%NrVQ?aq#: M#RYXrr<0%!mgoX!WW?-!!NE.#QOpFq"t*ii;WuZ"9AK(!;c`qrWi>nq>U*`p%e=]rr2rr#P\#l o_\LYq>($nrr3!!!r`2us8N#]rrr?%!!!$#p\td&q#C-]qtUd(#QY#)nGDqLrt#&,lM:bj#6Y>5 s8M]eq"ages8EQ%r;>sXrW!6.!<`&ppA=IQs8N!,nbDkRp&"mo"q:_-q>9mcs8N#t#laZ'"p,)7 p\FF\s8EQ&qY0d[q$$g'!!`T)q>:0Uruq=;r;QTerV?$^"8cp8!;gO4PkP%NrVQ?aq#: M#RYXrr<0%!mgoX!WW?-!!NE.#QOpFq"t*ii;WuZ"9AK(!;c`qrWi>nq>U*`p%e=]rr2rr#P\#l o_\LYq>($nrr3!!!r`2us8N#]rrr?%!!!$#p\td&q#C-]qtUd(#QY#)nGDqLrt#&,lM:bj#6Y>5 s8M]eq"ages8EQ%r;>sXrW!6.!<`&ppA=IQs8N!,nbDkRp&"mo"q:_-q>9mcs8N#t#laZ'"p,)7 p\FF\s8EQ&qY0d[q$$g'!!`T)q>:0Uruq=;r;QTerV?$^"8cp8!;gO4PkP%NrVQ?aq#: M#RYXrr<0%!mgrI!t>87!s\f2#m^V.qtg6ii;WuZ"9AK(!;c`qrWi<"q#1-Rs7uKis8W,us8Duq s8)ulr;QE_pA+^krr3!!!r`2us8N#]rrr?%!!!$#p\td"p&G$^pP0(U$ipP0qtpB_rt"u(q"94C% 0?_:p\sscp&+^es8EQ)qY:*arWE?+!!@T?p%eIUs8W'/qYg<\rposk":"o4nbW7^p](9mrr39&H NX?W!!iDroDeji&,Z(sq=FN7&-N1B!rr)mr9=5)qu6Bip&4CUqg/DAq>gkHs+(]'J+ip=p&+[cq >C9jrr2'[J,~> M#RYXrr<0%!mgrI!t>87!s\f2#m^V.qtg6ii;WuZ"9AK(!;c`qrWi<"q#1-Rs7uKis8W,us8Duq s8)ulr;QE_pA+^krr3!!!r`2us8N#]rrr?%!!!$#p\td"p&G$^pP0(U$ipP0qtpB_rt"u(q"94C% 0?_:p\sscp&+^es8EQ)qY:*arWE?+!!@T?p%eIUs8W'/qYg<\rposk":"o4nbW7^p](9mrr39&H NX?W!!iDroDeji&,Z(sq=FN7&-N1B!rr)mr9=5)qu6Bip&4CUqg/DAq>gkHs+(]'J+ip=p&+[cq >C9jrr2'[J,~> M#RYXrr<0%!mgrI!t>87!s\f2#m^V.qtg6ii;WuZ"9AK(!;c`qrWi<"q#1-Rs7uKis8W,us8Duq s8)ulr;QE_pA+^krr3!!!r`2us8N#]rrr?%!!!$#p\td"p&G$^pP0(U$ipP0qtpB_rt"u(q"94C% 0?_:p\sscp&+^es8EQ)qY:*arWE?+!!@T?p%eIUs8W'/qYg<\rposk":"o4nbW7^p](9mrr39&H NX?W!!iDroDeji&,Z(sq=FN7&-N1B!rr)mr9=5)qu6Bip&4CUqg/DAq>gkHs+(]'J+ip=p&+[cq >C9jrr2'[J,~> M#RYXrr<0%!m^iV"TSN*":5;9#a,#Tq>1*Krrr?(!<<0$qZ$Tp#Q"JqrV#gVqt^3js8;lrr^KRX+o_?0rq6UBUs*t~> M#RYXrr<0%!m^iV"TSN*":5;9#a,#Tq>1*Krrr?(!<<0$qZ$Tp#Q"JqrV#gVqt^3js8;lrr^KRX+o_?0rq6UBUs*t~> M#RYXrr<0%!m^iV"TSN*":5;9#a,#Tq>1*Krrr?(!<<0$qZ$Tp#Q"JqrV#gVqt^3js8;lrr^KRX+o_?0rq6UBUs*t~> M#RYXrr<0%!m^iV! M#RYXrr<0%!m^iV! M#RYXrr<0%!m^iV! M#RYXrr<0%!n[MQ!ri:$e!]gXrq?Qt!Xf&0p%S1ZoD]-qqu[!'#6=Yu p[eFbrX]&)r;Q3[rVus""p"Yus8;-]s83u-rV#j[1C+E0r;?B5!]0KIr5\mF1\pn@qsj.Rr;Q]X s*t~> M#RYXrr<0%!n[MQ!ri:$e!]gXrq?Qt!Xf&0p%S1ZoD]-qqu[!'#6=Yu p[eFbrX]&)r;Q3[rVus""p"Yus8;-]s83u-rV#j[1C+E0r;?B5!]0KIr5\mF1\pn@qsj.Rr;Q]X s*t~> M#RYXrr<0%!n[MQ!ri:$e!]gXrq?Qt!Xf&0p%S1ZoD]-qqu[!'#6=Yu p[eFbrX]&)r;Q3[rVus""p"Yus8;-]s83u-rV#j[1C+E0r;?B5!]0KIr5\mF1\pn@qsj.Rr;Q]X s*t~> M#RYXrr<0%!n[MQ"9/E&!WE'*#7(;?!s8berVHNl!ri/ri;WuZ"9AK(!;c`qrWi9!o`+mm!!2lq rr`9&!!3'!#6Or.*W5s:qt^6prr3!!!r`2us8N#]rrr?%!!!$#p\td&q>C-fquHm'!W`)squ-H^ s8N!)p]Uj'"T]SAq>^6ds8Dp+pAY'irW*!!%0uh-q>Kpbs8EN)qu$3erVus#!W_9ZrUf[\$2s`4 !!iZ,rqQKas8W)ur=/Q%rUfsm!s/]-)ufX3l2Mh(pAF[]q>T@S!WMocrq$L"rUp0`iW9H+rquQY rTaC]k5Tr~> M#RYXrr<0%!n[MQ"9/E&!WE'*#7(;?!s8berVHNl!ri/ri;WuZ"9AK(!;c`qrWi9!o`+mm!!2lq rr`9&!!3'!#6Or.*W5s:qt^6prr3!!!r`2us8N#]rrr?%!!!$#p\td&q>C-fquHm'!W`)squ-H^ s8N!)p]Uj'"T]SAq>^6ds8Dp+pAY'irW*!!%0uh-q>Kpbs8EN)qu$3erVus#!W_9ZrUf[\$2s`4 !!iZ,rqQKas8W)ur=/Q%rUfsm!s/]-)ufX3l2Mh(pAF[]q>T@S!WMocrq$L"rUp0`iW9H+rquQY rTaC]k5Tr~> M#RYXrr<0%!n[MQ"9/E&!WE'*#7(;?!s8berVHNl!ri/ri;WuZ"9AK(!;c`qrWi9!o`+mm!!2lq rr`9&!!3'!#6Or.*W5s:qt^6prr3!!!r`2us8N#]rrr?%!!!$#p\td&q>C-fquHm'!W`)squ-H^ s8N!)p]Uj'"T]SAq>^6ds8Dp+pAY'irW*!!%0uh-q>Kpbs8EN)qu$3erVus#!W_9ZrUf[\$2s`4 !!iZ,rqQKas8W)ur=/Q%rUfsm!s/]-)ufX3l2Mh(pAF[]q>T@S!WMocrq$L"rUp0`iW9H+rquQY rTaC]k5Tr~> M>m_UpAY*se,TmZ!"&]9!!!*$"9A/nqu-Zsrr1jU"oSQ)!!3/ss8W''pAXs\rr`<+q#^Qr!=/f, !!!9'!!E?$s8W)orri?$!<<3#!<)rsroj@cr;clu!qu qWA%k#l";qq>U?jr;HWYs*t~> M>m_UpAY*se,TmZ!"&]9!!!*$"9A/nqu-Zsrr1jU"oSQ)!!3/ss8W''pAXs\rr`<+q#^Qr!=/f, !!!9'!!E?$s8W)orri?$!<<3#!<)rsroj@cr;clu!qu qWA%k#l";qq>U?jr;HWYs*t~> M>m_UpAY*se,TmZ!"&]9!!!*$"9A/nqu-Zsrr1jU"oSQ)!!3/ss8W''pAXs\rr`<+q#^Qr!=/f, !!!9'!!E?$s8W)orri?$!<<3#!<)rsroj@cr;clu!qu qWA%k#l";qq>U?jr;HWYs*t~> M?!VT"n2Tp"98b]!"T)1$N^V@!!WH;()?iGq"`SB"oSQ)!!3/ss8W''rVH*aneM3+q#CX-!!WH, "U"o+!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,rs8W'$p\sjbrr)m&!sAZ(qt'jZq>UHorVulr% fPnkqY_-A!!iT6iV3<@q#:m'q"4RaoCi7s!V!)s7u]drVcm'!"T86qYp0Xrt#,'s7l-`nJ`8O!!WH$s8D-\+o_H=r;6BhpCnqW! M?!VT"n2Tp"98b]!"T)1$N^V@!!WH;()?iGq"`SB"oSQ)!!3/ss8W''rVH*aneM3+q#CX-!!WH, "U"o+!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,rs8W'$p\sjbrr)m&!sAZ(qt'jZq>UHorVulr% fPnkqY_-A!!iT6iV3<@q#:m'q"4RaoCi7s!V!)s7u]drVcm'!"T86qYp0Xrt#,'s7l-`nJ`8O!!WH$s8D-\+o_H=r;6BhpCnqW! M?!VT"n2Tp"98b]!"T)1$N^V@!!WH;()?iGq"`SB"oSQ)!!3/ss8W''rVH*aneM3+q#CX-!!WH, "U"o+!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,rs8W'$p\sjbrr)m&!sAZ(qt'jZq>UHorVulr% fPnkqY_-A!!iT6iV3<@q#:m'q"4RaoCi7s!V!)s7u]drVcm'!"T86qYp0Xrt#,'s7l-`nJ`8O!!WH$s8D-\+o_H=r;6BhpCnqW! M>mhUqY^Ct:_!"TS?"U+u9!kO!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,rs8W)ur!`8qqZ6m,!"98/r;6HfrWN3!rr;us rVuEtr:TLV!<`B0!W)cer;QNl&,H8)p[\:W/HZUc#6=T"r:Bq#rqufgr;QZh!<<*5!VuZdrVH?i% fZM)rVZ0a!rrB&!s&>pnGWsorVl]oq#('l!XA`,p\jpNs8W)urVud6o)/C01H%At"pY,:#OV'[q Z-s'chRJ:rVc`ps8W)bs*t~> M>mhUqY^Ct:_!"TS?"U+u9!kO!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,rs8W)ur!`8qqZ6m,!"98/r;6HfrWN3!rr;us rVuEtr:TLV!<`B0!W)cer;QNl&,H8)p[\:W/HZUc#6=T"r:Bq#rqufgr;QZh!<<*5!VuZdrVH?i% fZM)rVZ0a!rrB&!s&>pnGWsorVl]oq#('l!XA`,p\jpNs8W)urVud6o)/C01H%At"pY,:#OV'[q Z-s'chRJ:rVc`ps8W)bs*t~> M>mhUqY^Ct:_!"TS?"U+u9!kO!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,rs8W)ur!`8qqZ6m,!"98/r;6HfrWN3!rr;us rVuEtr:TLV!<`B0!W)cer;QNl&,H8)p[\:W/HZUc#6=T"r:Bq#rqufgr;QZh!<<*5!VuZdrVH?i% fZM)rVZ0a!rrB&!s&>pnGWsorVl]oq#('l!XA`,p\jpNs8W)urVud6o)/C01H%At"pY,:#OV'[q Z-s'chRJ:rVc`ps8W)bs*t~> M>mh[q=t*o"98YZ!<3*0"T]*&8OWCDrU]X[rqY4H"oSQ)!!3/ss8W''q!RtUnb)qXq>:Krrqc9c qum9'!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,rs8W'/rVHHlr!NW5!"9M$jrVZ3a&,c8#rVQEaq$I0("9SAlrT=.[rr2j4r:BghZaRD=779QI!;?9aqaq.u "M=L'rr2oss8MBbJ,~> M>mh[q=t*o"98YZ!<3*0"T]*&8OWCDrU]X[rqY4H"oSQ)!!3/ss8W''q!RtUnb)qXq>:Krrqc9c qum9'!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,rs8W'/rVHHlr!NW5!"9M$jrVZ3a&,c8#rVQEaq$I0("9SAlrT=.[rr2j4r:BghZaRD=779QI!;?9aqaq.u "M=L'rr2oss8MBbJ,~> M>mh[q=t*o"98YZ!<3*0"T]*&8OWCDrU]X[rqY4H"oSQ)!!3/ss8W''q!RtUnb)qXq>:Krrqc9c qum9'!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,rs8W'/rVHHlr!NW5!"9M$jrVZ3a&,c8#rVQEaq$I0("9SAlrT=.[rr2j4r:BghZaRD=779QI!;?9aqaq.u "M=L'rr2oss8MBbJ,~> M>meZq>(-m#6i`[%g?6O>[@4$qY:$`p\Fgbp=TBKr<*-$!W`)ss8E8ls76$`r;-0g]qu6a!!sAW&rV>RTrVd`5pA>!u$N[#rT:oOrqt'OVr`oR4"982q rVlfrs8MBbJ,~> M>meZq>(-m#6i`[%g?6O>[@4$qY:$`p\Fgbp=TBKr<*-$!W`)ss8E8ls76$`r;-0g]qu6a!!sAW&rV>RTrVd`5pA>!u$N[#rT:oOrqt'OVr`oR4"982q rVlfrs8MBbJ,~> M>meZq>(-m#6i`[%g?6O>[@4$qY:$`p\Fgbp=TBKr<*-$!W`)ss8E8ls76$`r;-0g]qu6a!!sAW&rV>RTrVd`5pA>!u$N[#rT:oOrqt'OVr`oR4"982q rVlfrs8MBbJ,~> M>meXp%W`SFa;S]%fQ.ur:g6dq"sgXs8D`jf`)-R"9AK(!;c`qrWiB"p@A.\oDeXarquusrpU6q rVus"rq??prr3!!!r`2us8N#]rrr?%!!!$#q>^Ko$N:#"p\bF%!A "pG#1!K$XFrVH?i&,?/#s7cBgq$@3.#mC/%qtL*jrr2p0rr)`mqYU'l#m1>>s7$$aqtp3h%f-&$ rqH9g"9\u3!/l\en;.[2M1pkELPgok!X/i7M#I81ru:k2qK*-e!X&Z5!/QMdM=^]CqKW*^s8)Zl rr2os!<2?bJ,~> M>meXp%W`SFa;S]%fQ.ur:g6dq"sgXs8D`jf`)-R"9AK(!;c`qrWiB"p@A.\oDeXarquusrpU6q rVus"rq??prr3!!!r`2us8N#]rrr?%!!!$#q>^Ko$N:#"p\bF%!A "pG#1!K$XFrVH?i&,?/#s7cBgq$@3.#mC/%qtL*jrr2p0rr)`mqYU'l#m1>>s7$$aqtp3h%f-&$ rqH9g"9\u3!/l\en;.[2M1pkELPgok!X/i7M#I81ru:k2qK*-e!X&Z5!/QMdM=^]CqKW*^s8)Zl rr2os!<2?bJ,~> M>meXp%W`SFa;S]%fQ.ur:g6dq"sgXs8D`jf`)-R"9AK(!;c`qrWiB"p@A.\oDeXarquusrpU6q rVus"rq??prr3!!!r`2us8N#]rrr?%!!!$#q>^Ko$N:#"p\bF%!A "pG#1!K$XFrVH?i&,?/#s7cBgq$@3.#mC/%qtL*jrr2p0rr)`mqYU'l#m1>>s7$$aqtp3h%f-&$ rqH9g"9\u3!/l\en;.[2M1pkELPgok!X/i7M#I81ru:k2qK*-e!X&Z5!/QMdM=^]CqKW*^s8)Zl rr2os!<2?bJ,~> M>mhYqt0dcpA=U;rX]&-q>C0drr)fmq>'d`q>8hE"oSQ)!!3/ss8W''qu-Hfr:p-fq>U]srVcNj p'M'(!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,rs8W'/qZ$Hcq@*H3!!NB-!X/]-nc8[j%0Qb5 !rrQ,! M>mhYqt0dcpA=U;rX]&-q>C0drr)fmq>'d`q>8hE"oSQ)!!3/ss8W''qu-Hfr:p-fq>U]srVcNj p'M'(!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,rs8W'/qZ$Hcq@*H3!!NB-!X/]-nc8[j%0Qb5 !rrQ,! M>mhYqt0dcpA=U;rX]&-q>C0drr)fmq>'d`q>8hE"oSQ)!!3/ss8W''qu-Hfr:p-fq>U]srVcNj p'M'(!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,rs8W'/qZ$Hcq@*H3!!NB-!X/]-nc8[j%0Qb5 !rrQ,! bQ%VAs8N?&qu?Kjrr)iorrE&Grt#,+p\Op]s7#scrr)ZlrVQ-a"oA5rq#:-_rWE,srr)fp"oA5o rqu`jrr9u_#?gWoU8Ojh$3pS8!sJ[3>l+9prVlfrrr2l_s*t~> bQ%VAs8N?&qu?Kjrr)iorrE&Grt#,+p\Op]s7#scrr)ZlrVQ-a"oA5rq#:-_rWE,srr)fp"oA5o rqu`jrr9u_#?gWoU8Ojh$3pS8!sJ[3>l+9prVlfrrr2l_s*t~> bQ%VAs8N?&qu?Kjrr)iorrE&Grt#,+p\Op]s7#scrr)ZlrVQ-a"oA5rq#:-_rWE,srr)fp"oA5o rqu`jrr9u_#?gWoU8Ojh$3pS8!sJ[3>l+9prVlfrrr2l_s*t~> dJs.D$31#(rUg*fs7l6crr)lsrmC`Vq"+I_p@eO_rVuWkr:Tscnc&jmoDSU_p]('Jrr;iurU]s_ rTF1ar<*-$!W_Ha#QFc'rr;rt!WE'"!WMfm"TJE%!!<-"rVulrkl1hb!<<*#!VcU)r;H; !YYhA"U"r6nGj(*!W`9(!s&H'"9ef*q=sdWs8W''!XB)8#6OVroDegh%JTnir!ic0!sAAur;HHf s8W'&qY:!dnbiXj"9\fB!sT+r!!`N4!"];6qYfCQs8 dJs.D$31#(rUg*fs7l6crr)lsrmC`Vq"+I_p@eO_rVuWkr:Tscnc&jmoDSU_p]('Jrr;iurU]s_ rTF1ar<*-$!W_Ha#QFc'rr;rt!WE'"!WMfm"TJE%!!<-"rVulrkl1hb!<<*#!VcU)r;H; !YYhA"U"r6nGj(*!W`9(!s&H'"9ef*q=sdWs8W''!XB)8#6OVroDegh%JTnir!ic0!sAAur;HHf s8W'&qY:!dnbiXj"9\fB!sT+r!!`N4!"];6qYfCQs8 dJs.D$31#(rUg*fs7l6crr)lsrmC`Vq"+I_p@eO_rVuWkr:Tscnc&jmoDSU_p]('Jrr;iurU]s_ rTF1ar<*-$!W_Ha#QFc'rr;rt!WE'"!WMfm"TJE%!!<-"rVulrkl1hb!<<*#!VcU)r;H; !YYhA"U"r6nGj(*!W`9(!s&H'"9ef*q=sdWs8W''!XB)8#6OVroDegh%JTnir!ic0!sAAur;HHf s8W'&qY:!dnbiXj"9\fB!sT+r!!`N4!"];6qYfCQs8 dJs.Drr36"r;ZT`rquNirrN,trr1=Fs83>pq>L'Zr:]d]s7cEir:0ger!!&fqu-6eiVs/^rV6<` rVlZWrrr?(!<<0$kl1nes8W)urVuuu!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,prt#,,p\c39 !Y5S?!rr?4"9J#o!W`9(rW!6+&d&+=$NKecrU^'hrWg[K%KHM8rV,p`s8EN*r;HF>!sJZ/#l"2i r;?EkrVd8trquHq!!iQ/";:e="n;Zi!!`T9#m1\FqY/tK(\ICuqt'g;""=0JqYg*bf[SIP#QY5' qu6Tps8W&urTsQ7~> dJs.Drr36"r;ZT`rquNirrN,trr1=Fs83>pq>L'Zr:]d]s7cEir:0ger!!&fqu-6eiVs/^rV6<` rVlZWrrr?(!<<0$kl1nes8W)urVuuu!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,prt#,,p\c39 !Y5S?!rr?4"9J#o!W`9(rW!6+&d&+=$NKecrU^'hrWg[K%KHM8rV,p`s8EN*r;HF>!sJZ/#l"2i r;?EkrVd8trquHq!!iQ/";:e="n;Zi!!`T9#m1\FqY/tK(\ICuqt'g;""=0JqYg*bf[SIP#QY5' qu6Tps8W&urTsQ7~> dJs.Drr36"r;ZT`rquNirrN,trr1=Fs83>pq>L'Zr:]d]s7cEir:0ger!!&fqu-6eiVs/^rV6<` rVlZWrrr?(!<<0$kl1nes8W)urVuuu!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,prt#,,p\c39 !Y5S?!rr?4"9J#o!W`9(rW!6+&d&+=$NKecrU^'hrWg[K%KHM8rV,p`s8EN*r;HF>!sJZ/#l"2i r;?EkrVd8trquHq!!iQ/";:e="n;Zi!!`T9#m1\FqY/tK(\ICuqt'g;""=0JqYg*bf[SIP#QY5' qu6Tps8W&urTsQ7~> dJs1ErVm<*qtg(mfEap !<up%eIa s8EPorVlBUrW*0'$NLG!k3hI'lM9iQkl;.m! dJs1ErVm<*qtg(mfEap !<up%eIa s8EPorVlBUrW*0'$NLG!k3hI'lM9iQkl;.m! dJs1ErVm<*qtg(mfEap !<up%eIa s8EPorVlBUrW*0'$NLG!k3hI'lM9iQkl;.m! d/X+Es8Duq$MjSsqY(*]s8)WkrVllsdJjaVo_Jgnli-V?rq60fr;Z]bs8W'%rUoparqG@N#57up r;Q]kkl1hb"9AK(!9jFfrr<#ts8E!!rVus"rq??prr3!!!r`2us8N#]rrr?%!!!$#p\td%q"st* #6=u2s82?[rV?<[rX]&)s7Pm\rVup)$OcG!q>Kpbs8E&p!WE'#$3'qqs8W'.rV?*b!!!')#6")g mJd+]s8Dp+qssd`#QkD7!;Z?fo(hhTq>CQt!X&c9!;Gp?ru1M.o(;q\li-V`#7:,%rr2cerqH d/X+Es8Duq$MjSsqY(*]s8)WkrVllsdJjaVo_Jgnli-V?rq60fr;Z]bs8W'%rUoparqG@N#57up r;Q]kkl1hb"9AK(!9jFfrr<#ts8E!!rVus"rq??prr3!!!r`2us8N#]rrr?%!!!$#p\td%q"st* #6=u2s82?[rV?<[rX]&)s7Pm\rVup)$OcG!q>Kpbs8E&p!WE'#$3'qqs8W'.rV?*b!!!')#6")g mJd+]s8Dp+qssd`#QkD7!;Z?fo(hhTq>CQt!X&c9!;Gp?ru1M.o(;q\li-V`#7:,%rr2cerqH d/X+Es8Duq$MjSsqY(*]s8)WkrVllsdJjaVo_Jgnli-V?rq60fr;Z]bs8W'%rUoparqG@N#57up r;Q]kkl1hb"9AK(!9jFfrr<#ts8E!!rVus"rq??prr3!!!r`2us8N#]rrr?%!!!$#p\td%q"st* #6=u2s82?[rV?<[rX]&)s7Pm\rVup)$OcG!q>Kpbs8E&p!WE'#$3'qqs8W'.rV?*b!!!')#6")g mJd+]s8Dp+qssd`#QkD7!;Z?fo(hhTq>CQt!X&c9!;Gp?ru1M.o(;q\li-V`#7:,%rr2cerqH dJs4F&H2P(qtg6ag#)i:rr)]jrVlfr!<1CG&+BGl$O-UYs8MQep\Fjfr:0dkqV0o\i7m)FhZi#r hu*NProj@cr<*-$!W_Ha#QFc'rr;rt!WE'"!WMfm"TJE%!!<-"rVulrkl1hb!<<*#!VcU)p\ja] "p##6!<;ijrqZBhnbWjsp&4U_rpp*m!!!T5qu-E`s8W''qZ[B-"p"AnoDeji%fH>(rW<3.! dJs4F&H2P(qtg6ag#)i:rr)]jrVlfr!<1CG&+BGl$O-UYs8MQep\Fjfr:0dkqV0o\i7m)FhZi#r hu*NProj@cr<*-$!W_Ha#QFc'rr;rt!WE'"!WMfm"TJE%!!<-"rVulrkl1hb!<<*#!VcU)p\ja] "p##6!<;ijrqZBhnbWjsp&4U_rpp*m!!!T5qu-E`s8W''qZ[B-"p"AnoDeji%fH>(rW<3.! dJs4F&H2P(qtg6ag#)i:rr)]jrVlfr!<1CG&+BGl$O-UYs8MQep\Fjfr:0dkqV0o\i7m)FhZi#r hu*NProj@cr<*-$!W_Ha#QFc'rr;rt!WE'"!WMfm"TJE%!!<-"rVulrkl1hb!<<*#!VcU)p\ja] "p##6!<;ijrqZBhnbWjsp&4U_rpp*m!!!T5qu-E`s8W''qZ[B-"p"AnoDeji%fH>(rW<3.! dJs4Fs8Duq%/\&d!Ud#QOr& s7QBTrrr?(!<<0$kl1nes8W)urVuuu!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,prt#,$rP]-L #QY#)p\O^_rVZ0b%fZ+uqtU(J!rrH+%Jo_roDegh"onZ."9udCoDeghs7Zs$!L3i qu?]q&,l7sqtnG9!Wr].qYpBbrUKp`rWi?[! dJs4Fs8Duq%/\&d!Ud#QOr& s7QBTrrr?(!<<0$kl1nes8W)urVuuu!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,prt#,$rP]-L #QY#)p\O^_rVZ0b%fZ+uqtU(J!rrH+%Jo_roDegh"onZ."9udCoDeghs7Zs$!L3i qu?]q&,l7sqtnG9!Wr].qYpBbrUKp`rWi?[! dJs4Fs8Duq%/\&d!Ud#QOr& s7QBTrrr?(!<<0$kl1nes8W)urVuuu!!*-"pAY9prrE*$rW)osrr2-]"oSH%!!*,prt#,$rP]-L #QY#)p\O^_rVZ0b%fZ+uqtU(J!rrH+%Jo_roDegh"onZ."9udCoDeghs7Zs$!L3i qu?]q&,l7sqtnG9!Wr].qYpBbrUKp`rWi?[! iW&lU!<<&t)?9U3s8W)qs8;osr;ZVsYQ+k-":##-s8N#rr;ciDrtkJ0r;Zg-#64e.oDeR\q>:-j s8Durrr)Zm#6"T&!WW9)huEu`!rrK#rr)fZrrr?&!<<-#kl1nes8W)urVuuu!!!'!rqQKrrr3!! !r`2urr`9!rVl']"oSH%!!*,rs8W'/qu?Tq"TS`3"8;`jrVZNjnGa!ss7lWmp\k0s":G;*rr2Nh s8E<(!"/c.!W`9!rr2rr"TJH$rr2oss8N&o%JTf*"TeZ.qu$Hlr;$9is8W'2s8Dljrr2Wk!WiW1 "9A>srqQKYs8W'&pAP-o! iW&lU!<<&t)?9U3s8W)qs8;osr;ZVsYQ+k-":##-s8N#rr;ciDrtkJ0r;Zg-#64e.oDeR\q>:-j s8Durrr)Zm#6"T&!WW9)huEu`!rrK#rr)fZrrr?&!<<-#kl1nes8W)urVuuu!!!'!rqQKrrr3!! !r`2urr`9!rVl']"oSH%!!*,rs8W'/qu?Tq"TS`3"8;`jrVZNjnGa!ss7lWmp\k0s":G;*rr2Nh s8E<(!"/c.!W`9!rr2rr"TJH$rr2oss8N&o%JTf*"TeZ.qu$Hlr;$9is8W'2s8Dljrr2Wk!WiW1 "9A>srqQKYs8W'&pAP-o! iW&lU!<<&t)?9U3s8W)qs8;osr;ZVsYQ+k-":##-s8N#rr;ciDrtkJ0r;Zg-#64e.oDeR\q>:-j s8Durrr)Zm#6"T&!WW9)huEu`!rrK#rr)fZrrr?&!<<-#kl1nes8W)urVuuu!!!'!rqQKrrr3!! !r`2urr`9!rVl']"oSH%!!*,rs8W'/qu?Tq"TS`3"8;`jrVZNjnGa!ss7lWmp\k0s":G;*rr2Nh s8E<(!"/c.!W`9!rr2rr"TJH$rr2oss8N&o%JTf*"TeZ.qu$Hlr;$9is8W'2s8Dljrr2Wk!WiW1 "9A>srqQKYs8W'&pAP-o! iW&lU)?9^7r;??dr;$6bq>'d`qNmQM#QOl+!WW5@rser+qZ6j(!s/]/Sbr9Yrqufls82rqrqcHj !<2lr!!;$X!W`9%rr2*\"oSE%!!!&`rsSi+s8N&t!!*'#!!3)uq#:TurrN0%!!!&urr`9!rVl'] "oSH%!!*,rs8W'/q#C'i$31/1Abc-#qu$9fli7"a#6G#.#R12*r:0e"qe$?B"TSi%qY^ iW&lU)?9^7r;??dr;$6bq>'d`qNmQM#QOl+!WW5@rser+qZ6j(!s/]/Sbr9Yrqufls82rqrqcHj !<2lr!!;$X!W`9%rr2*\"oSE%!!!&`rsSi+s8N&t!!*'#!!3)uq#:TurrN0%!!!&urr`9!rVl'] "oSH%!!*,rs8W'/q#C'i$31/1Abc-#qu$9fli7"a#6G#.#R12*r:0e"qe$?B"TSi%qY^ iW&lU)?9^7r;??dr;$6bq>'d`qNmQM#QOl+!WW5@rser+qZ6j(!s/]/Sbr9Yrqufls82rqrqcHj !<2lr!!;$X!W`9%rr2*\"oSE%!!!&`rsSi+s8N&t!!*'#!!3)uq#:TurrN0%!!!&urr`9!rVl'] "oSH%!!*,rs8W'/q#C'i$31/1Abc-#qu$9fli7"a#6G#.#R12*r:0e"qe$?B"TSi%qY^ h>[]YrVZTcs8N#m$2OAmomM>k$igS4!WiH(!6>*UrVlZr!sJc."Tf6_q>9scp\=O]r:g3aq>UHo qu?]uhZ*]Y!!3)ukPk_b!!30$!pKXlrr<#ts8E!!!!*'#rr2]m#lai*!!3-#!WN)us8M3]"oJB$ !!*,rs8W)uq[NB%%1*%:r9jFXpA=R_li7"a#6Fl*#mC/(qsj\!o`#!u$NgY+qu$Ekqtp?ks8W)t rt58/r;$6m$N^>0!rhupp&4RWrr<#t'*%q,qt0^[r!NT6#QXeup&"^bli6t`#5&-.!Wr`(qu-Qo m/R(a*W5m/pAOW4Kn4RGpA"T4K7a40"T]#+qYU6ks8N#_s*t~> h>[]YrVZTcs8N#m$2OAmomM>k$igS4!WiH(!6>*UrVlZr!sJc."Tf6_q>9scp\=O]r:g3aq>UHo qu?]uhZ*]Y!!3)ukPk_b!!30$!pKXlrr<#ts8E!!!!*'#rr2]m#lai*!!3-#!WN)us8M3]"oJB$ !!*,rs8W)uq[NB%%1*%:r9jFXpA=R_li7"a#6Fl*#mC/(qsj\!o`#!u$NgY+qu$Ekqtp?ks8W)t rt58/r;$6m$N^>0!rhupp&4RWrr<#t'*%q,qt0^[r!NT6#QXeup&"^bli6t`#5&-.!Wr`(qu-Qo m/R(a*W5m/pAOW4Kn4RGpA"T4K7a40"T]#+qYU6ks8N#_s*t~> h>[]YrVZTcs8N#m$2OAmomM>k$igS4!WiH(!6>*UrVlZr!sJc."Tf6_q>9scp\=O]r:g3aq>UHo qu?]uhZ*]Y!!3)ukPk_b!!30$!pKXlrr<#ts8E!!!!*'#rr2]m#lai*!!3-#!WN)us8M3]"oJB$ !!*,rs8W)uq[NB%%1*%:r9jFXpA=R_li7"a#6Fl*#mC/(qsj\!o`#!u$NgY+qu$Ekqtp?ks8W)t rt58/r;$6m$N^>0!rhupp&4RWrr<#t'*%q,qt0^[r!NT6#QXeup&"^bli6t`#5&-.!Wr`(qu-Qo m/R(a*W5m/pAOW4Kn4RGpA"T4K7a40"T]#+qYU6ks8N#_s*t~> iW&oV'`It,qYKpcr:p!`qYao;!!`Z1!Wi6%rrC+>(]41-!GM iW&oV'`It,qYKpcr:p!`qYao;!!`Z1!Wi6%rrC+>(]41-!GM iW&oV'`It,qYKpcr:p!`qYao;!!`Z1!Wi6%rrC+>(]41-!GM iW&oV!WDopq@NH%q#(!b:egul!!<9*!gQt!!!3.!u(`59`4kgp\t-fr;$0g !<2lr!!;$X!W`9%rr2-]#QFW$!W`9%rTX=irr<#ts8E!!!!*'#rr2]m#lai*!!3-#!WN)urquir l2M"e!<<*#!<2ups8W'/qt9gj!!rc3pA=a[qt^9hli7"a#6528$NU>*rUKmmq>16s"pYP/rql`n s8Mlp./s/Bq>CR!#7(k^[+!sf#- rVZTlrVlfbs8W&urVld6qY^?`o`"d_#QV"192GEYkkt@[Z*3s#qY]LUJ,~> iW&oV!WDopq@NH%q#(!b:egul!!<9*!gQt!!!3.!u(`59`4kgp\t-fr;$0g !<2lr!!;$X!W`9%rr2-]#QFW$!W`9%rTX=irr<#ts8E!!!!*'#rr2]m#lai*!!3-#!WN)urquir l2M"e!<<*#!<2ups8W'/qt9gj!!rc3pA=a[qt^9hli7"a#6528$NU>*rUKmmq>16s"pYP/rql`n s8Mlp./s/Bq>CR!#7(k^[+!sf#- rVZTlrVlfbs8W&urVld6qY^?`o`"d_#QV"192GEYkkt@[Z*3s#qY]LUJ,~> iW&oV!WDopq@NH%q#(!b:egul!!<9*!gQt!!!3.!u(`59`4kgp\t-fr;$0g !<2lr!!;$X!W`9%rr2-]#QFW$!W`9%rTX=irr<#ts8E!!!!*'#rr2]m#lai*!!3-#!WN)urquir l2M"e!<<*#!<2ups8W'/qt9gj!!rc3pA=a[qt^9hli7"a#6528$NU>*rUKmmq>16s"pYP/rql`n s8Mlp./s/Bq>CR!#7(k^[+!sf#- rVZTlrVlfbs8W&urVld6qY^?`o`"d_#QV"192GEYkkt@[Z*3s#qY]LUJ,~> iVs_ns8W)qqYU6ip\F_F561is!!<3$#6P#*"9/AArtkS3quQj"!!*'0!jrqZ'_s7u!\s8E8E!sJc,"T7l]rs/N!!'mbk5Tr~> iVs_ns8W)qqYU6ip\F_F561is!!<3$#6P#*"9/AArtkS3quQj"!!*'0!jrqZ'_s7u!\s8E8E!sJc,"T7l]rs/N!!'mbk5Tr~> iVs_ns8W)qqYU6ip\F_F561is!!<3$#6P#*"9/AArtkS3quQj"!!*'0!jrqZ'_s7u!\s8E8E!sJc,"T7l]rs/N!!'mbk5Tr~> h>\Ajqu$Hfr@9,n!=Au5!"8i4!=9)6!WiH(!6>*Tr;Z]t!j7p](0drrE&r !!!)X!!30$!WN)^rs&K$!!<9&!VlZarsSi+s8N&t!!*'#!!3)uq#:X!rrN0%!!!&tqu5gZ!WE3" !VucqrX\Pt!!3o:!!<,to_SLXqu5p]s8E8s!!39-#5\;grt>#(!rrH*!$M7m\s8E9$rr)ou"9nl'rVulc s!.L?r;HWoqY:!Vqu6?c!>G.pi7JG=+"6dZpA+^Qr;HZqrr23_J,~> h>\Ajqu$Hfr@9,n!=Au5!"8i4!=9)6!WiH(!6>*Tr;Z]t!j7p](0drrE&r !!!)X!!30$!WN)^rs&K$!!<9&!VlZarsSi+s8N&t!!*'#!!3)uq#:X!rrN0%!!!&tqu5gZ!WE3" !VucqrX\Pt!!3o:!!<,to_SLXqu5p]s8E8s!!39-#5\;grt>#(!rrH*!$M7m\s8E9$rr)ou"9nl'rVulc s!.L?r;HWoqY:!Vqu6?c!>G.pi7JG=+"6dZpA+^Qr;HZqrr23_J,~> h>\Ajqu$Hfr@9,n!=Au5!"8i4!=9)6!WiH(!6>*Tr;Z]t!j7p](0drrE&r !!!)X!!30$!WN)^rs&K$!!<9&!VlZarsSi+s8N&t!!*'#!!3)uq#:X!rrN0%!!!&tqu5gZ!WE3" !VucqrX\Pt!!3o:!!<,to_SLXqu5p]s8E8s!!39-#5\;grt>#(!rrH*!$M7m\s8E9$rr)ou"9nl'rVulc s!.L?r;HWoqY:!Vqu6?c!>G.pi7JG=+"6dZpA+^Qr;HZqrr23_J,~> iVsAcs8W)qqu-Qk%KHh:#Q=]3"onl3!!rW*!*Fr;QWs!!*'#"o\K0!rr?%$jPhkq>1*h q>UHoqu?]uhZ*]Y!!3)ukPkbc!<`N+!rr)qnc'!rs8W)urVus!!<<0"rqQL#rr3$"!WW3$q"agd quH`Zrr`H*!us8N!-lj![o!!`/sr;QHjrr2c[s8W'&p&kR"!sn8_rt>>!pB:Qt! iVsAcs8W)qqu-Qk%KHh:#Q=]3"onl3!!rW*!*Fr;QWs!!*'#"o\K0!rr?%$jPhkq>1*h q>UHoqu?]uhZ*]Y!!3)ukPkbc!<`N+!rr)qnc'!rs8W)urVus!!<<0"rqQL#rr3$"!WW3$q"agd quH`Zrr`H*!us8N!-lj![o!!`/sr;QHjrr2c[s8W'&p&kR"!sn8_rt>>!pB:Qt! iVsAcs8W)qqu-Qk%KHh:#Q=]3"onl3!!rW*!*Fr;QWs!!*'#"o\K0!rr?%$jPhkq>1*h q>UHoqu?]uhZ*]Y!!3)ukPkbc!<`N+!rr)qnc'!rs8W)urVus!!<<0"rqQL#rr3$"!WW3$q"agd quH`Zrr`H*!us8N!-lj![o!!`/sr;QHjrr2c[s8W'&p&kR"!sn8_rt>>!pB:Qt! nc&Ugrr3#tr;QX#o`"Xbqu?QhrVZWqr;Z`rrrNoC6f m/R+e!!`N'qXa^`s8W'/q"YI1!j>mK!:q!=]_8rqccrrVZNl s8EQ(qXjae!rrc2rUg*dq#C?Zs8W'/o(hqc!!!3'rVl9bqZ$-cnc'g3rr)HdpAFsYrqQKfli$eg !<;]kr;-Ei)?9g>mJ-SWrVl![J,~> nc&Ugrr3#tr;QX#o`"Xbqu?QhrVZWqr;Z`rrrNoC6f m/R+e!!`N'qXa^`s8W'/q"YI1!j>mK!:q!=]_8rqccrrVZNl s8EQ(qXjae!rrc2rUg*dq#C?Zs8W'/o(hqc!!!3'rVl9bqZ$-cnc'g3rr)HdpAFsYrqQKfli$eg !<;]kr;-Ei)?9g>mJ-SWrVl![J,~> nc&Ugrr3#tr;QX#o`"Xbqu?QhrVZWqr;Z`rrrNoC6f m/R+e!!`N'qXa^`s8W'/q"YI1!j>mK!:q!=]_8rqccrrVZNl s8EQ(qXjae!rrc2rUg*dq#C?Zs8W'/o(hqc!!!3'rVl9bqZ$-cnc'g3rr)HdpAFsYrqQKfli$eg !<;]kr;-Ei)?9g>mJ-SWrVl![J,~> nc'I*s8W)rqu$Bfrq??drqu]nqtnk?rVc`qrW)s"&d/4>!=8`-!XAi1"q(D[4mW.Hrqucp!<(:E "oeN%"98Mt!!WK/%ft/RoD/Cdrql`r!oEtZ!<<0"rp'O_rXA0$&HDe6!7]NIdaHV=eG.Q(cIU7j !!NQ1!XSnUrquBbs8W'/r:oab!sJr2#6WN*eBlannC.ot`mr2]eGo[P!sT&^q=ssprUq!.!!`N' iVs/Z!Wi`:#g!#:rs\o*rqQIA"UGD7%0@"\9q>U?js8Mrms8W)u r=/;n!!<3&%IsGpqtg6dli7"a&,?2'!"&r5"3CH>rp0RYrUKn/r;Z]gqt^*gr;?HdrVt?q!!^um e^_akcdMn(&HMA#r;ci[s*t~> nc'I*s8W)rqu$Bfrq??drqu]nqtnk?rVc`qrW)s"&d/4>!=8`-!XAi1"q(D[4mW.Hrqucp!<(:E "oeN%"98Mt!!WK/%ft/RoD/Cdrql`r!oEtZ!<<0"rp'O_rXA0$&HDe6!7]NIdaHV=eG.Q(cIU7j !!NQ1!XSnUrquBbs8W'/r:oab!sJr2#6WN*eBlannC.ot`mr2]eGo[P!sT&^q=ssprUq!.!!`N' iVs/Z!Wi`:#g!#:rs\o*rqQIA"UGD7%0@"\9q>U?js8Mrms8W)u r=/;n!!<3&%IsGpqtg6dli7"a&,?2'!"&r5"3CH>rp0RYrUKn/r;Z]gqt^*gr;?HdrVt?q!!^um e^_akcdMn(&HMA#r;ci[s*t~> nc'I*s8W)rqu$Bfrq??drqu]nqtnk?rVc`qrW)s"&d/4>!=8`-!XAi1"q(D[4mW.Hrqucp!<(:E "oeN%"98Mt!!WK/%ft/RoD/Cdrql`r!oEtZ!<<0"rp'O_rXA0$&HDe6!7]NIdaHV=eG.Q(cIU7j !!NQ1!XSnUrquBbs8W'/r:oab!sJr2#6WN*eBlannC.ot`mr2]eGo[P!sT&^q=ssprUq!.!!`N' iVs/Z!Wi`:#g!#:rs\o*rqQIA"UGD7%0@"\9q>U?js8Mrms8W)u r=/;n!!<3&%IsGpqtg6dli7"a&,?2'!"&r5"3CH>rp0RYrUKn/r;Z]gqt^*gr;?HdrVt?q!!^um e^_akcdMn(&HMA#r;ci[s*t~> mf*=er;QR)s82Zkqu$*_rOoiKrVZQis8E#u!YPV:"T\Z,!=Sr.&HY#:!!<6.qXje;rr)flp@eFd!WrE*$N^A0!<`c2":+u/!WW9&!W`?("A\pkrVZQlr;-Eis8W'/ p\agb!X/W7!<)c`r;?6dli7"a&,cG%!W`H/!=ADrrqlQlp[S8-qu?Niq>C$f]Y)(h]Y"CT!!E9) !s/r9!(0:D5sYDErVc`Ys*t~> mf*=er;QR)s82Zkqu$*_rOoiKrVZQis8E#u!YPV:"T\Z,!=Sr.&HY#:!!<6.qXje;rr)flp@eFd!WrE*$N^A0!<`c2":+u/!WW9&!W`?("A\pkrVZQlr;-Eis8W'/ p\agb!X/W7!<)c`r;?6dli7"a&,cG%!W`H/!=ADrrqlQlp[S8-qu?Niq>C$f]Y)(h]Y"CT!!E9) !s/r9!(0:D5sYDErVc`Ys*t~> mf*=er;QR)s82Zkqu$*_rOoiKrVZQis8E#u!YPV:"T\Z,!=Sr.&HY#:!!<6.qXje;rr)flp@eFd!WrE*$N^A0!<`c2":+u/!WW9&!W`?("A\pkrVZQlr;-Eis8W'/ p\agb!X/W7!<)c`r;?6dli7"a&,cG%!W`H/!=ADrrqlQlp[S8-qu?Niq>C$f]Y)(h]Y"CT!!E9) !s/r9!(0:D5sYDErVc`Ys*t~> mf*=er;QR)rVuNip\XiZU&tT"rqQHhs8E#u!Ykh="9ei4!W`<)#%@3)qu-Kfrr)fpbl7kGrr<0% !qu[!#6>&7!<;]errE&r!!!)X!!30$!WN)`s8W''rUXG'!XJc-ru!sA]2r8IY\ rE01'#mD">o`$E?rVcZkoD;Yr!W`T/!t5/7!s8Z/"T\`0!=&T2"TSg3q#1$eqtg!ruM5 ?!LQ9rqHEdp\Xsg!<20]J,~> mf*=er;QR)rVuNip\XiZU&tT"rqQHhs8E#u!Ykh="9ei4!W`<)#%@3)qu-Kfrr)fpbl7kGrr<0% !qu[!#6>&7!<;]errE&r!!!)X!!30$!WN)`s8W''rUXG'!XJc-ru!sA]2r8IY\ rE01'#mD">o`$E?rVcZkoD;Yr!W`T/!t5/7!s8Z/"T\`0!=&T2"TSg3q#1$eqtg!ruM5 ?!LQ9rqHEdp\Xsg!<20]J,~> mf*=er;QR)rVuNip\XiZU&tT"rqQHhs8E#u!Ykh="9ei4!W`<)#%@3)qu-Kfrr)fpbl7kGrr<0% !qu[!#6>&7!<;]errE&r!!!)X!!30$!WN)`s8W''rUXG'!XJc-ru!sA]2r8IY\ rE01'#mD">o`$E?rVcZkoD;Yr!W`T/!t5/7!s8Z/"T\`0!=&T2"TSg3q#1$eqtg!ruM5 ?!LQ9rqHEdp\Xsg!<20]J,~> mf*=er;QR)r;69`r/la<"U4r5qt:!]s8E#u!Ykh=#6b>5!X&RJHhRI8q>^6_rVZTlrVk1D"oeN% "98Mu!!*3&rW*''qt^'f!<2lr!!;$X!W`9%rr23_s8E6&nG@6G"T\H%!!3'!nGs.(!Xeu:!"'): !XB&7!sJQ!s8W'/qY'j_ol:B@!X&f3#6Ou/nGs.%$3UD5"U>&2"EJV^qXj[\rs/Ao!=/]1EqePm #Q=H#"9f'Nrq-4>rr)flq#1*]EcM9_"To)6#6b54#6G&5"9\f2"9`Uas7lKfrVHBjs8Dfos8EQ& r:p0l"T\gRp[S+Uq"FFIs8W'/r;-9f"pY8=ErPe-p%S=\nc'g1s8)`krqQNgqY^3ip\O^l!sJSr qu-Nkq=jacp\agbrVl![J,~> mf*=er;QR)r;69`r/la<"U4r5qt:!]s8E#u!Ykh=#6b>5!X&RJHhRI8q>^6_rVZTlrVk1D"oeN% "98Mu!!*3&rW*''qt^'f!<2lr!!;$X!W`9%rr23_s8E6&nG@6G"T\H%!!3'!nGs.(!Xeu:!"'): !XB&7!sJQ!s8W'/qY'j_ol:B@!X&f3#6Ou/nGs.%$3UD5"U>&2"EJV^qXj[\rs/Ao!=/]1EqePm #Q=H#"9f'Nrq-4>rr)flq#1*]EcM9_"To)6#6b54#6G&5"9\f2"9`Uas7lKfrVHBjs8Dfos8EQ& r:p0l"T\gRp[S+Uq"FFIs8W'/r;-9f"pY8=ErPe-p%S=\nc'g1s8)`krqQNgqY^3ip\O^l!sJSr qu-Nkq=jacp\agbrVl![J,~> mf*=er;QR)r;69`r/la<"U4r5qt:!]s8E#u!Ykh=#6b>5!X&RJHhRI8q>^6_rVZTlrVk1D"oeN% "98Mu!!*3&rW*''qt^'f!<2lr!!;$X!W`9%rr23_s8E6&nG@6G"T\H%!!3'!nGs.(!Xeu:!"'): !XB&7!sJQ!s8W'/qY'j_ol:B@!X&f3#6Ou/nGs.%$3UD5"U>&2"EJV^qXj[\rs/Ao!=/]1EqePm #Q=H#"9f'Nrq-4>rr)flq#1*]EcM9_"To)6#6b54#6G&5"9\f2"9`Uas7lKfrVHBjs8Dfos8EQ& r:p0l"T\gRp[S+Uq"FFIs8W'/r;-9f"pY8=ErPe-p%S=\nc'g1s8)`krqQNgqY^3ip\O^l!sJSr qu-Nkq=jacp\agbrVl![J,~> nc'I*s8W)rqu$Bcqt0W("p>)2"p,)+rq?!arW)s"&d/4:"U>#2Ndq*)p@A%Up\=U`rqucp!<(:E "oeN%"98Mu!!`Z0!!*9-qtU!e!<2lr!!;$X!W`9%rr23_s8EB(q=Xd`MMd@NMMhCipPSd)%uH0t M3WdSLl@;p#QP9hr;6NorW;lpp\t'sObesPN/EFHMi$q\%ZQC*M2R@LNJdK.pA4FYq>U]mrJ->h Mt$T%rs/DpMN3[Rq#9mb.K9;BrqQ nc'I*s8W)rqu$Bcqt0W("p>)2"p,)+rq?!arW)s"&d/4:"U>#2Ndq*)p@A%Up\=U`rqucp!<(:E "oeN%"98Mu!!`Z0!!*9-qtU!e!<2lr!!;$X!W`9%rr23_s8EB(q=Xd`MMd@NMMhCipPSd)%uH0t M3WdSLl@;p#QP9hr;6NorW;lpp\t'sObesPN/EFHMi$q\%ZQC*M2R@LNJdK.pA4FYq>U]mrJ->h Mt$T%rs/DpMN3[Rq#9mb.K9;BrqQ nc'I*s8W)rqu$Bcqt0W("p>)2"p,)+rq?!arW)s"&d/4:"U>#2Ndq*)p@A%Up\=U`rqucp!<(:E "oeN%"98Mu!!`Z0!!*9-qtU!e!<2lr!!;$X!W`9%rr23_s8EB(q=Xd`MMd@NMMhCipPSd)%uH0t M3WdSLl@;p#QP9hr;6NorW;lpp\t'sObesPN/EFHMi$q\%ZQC*M2R@LNJdK.pA4FYq>U]mrJ->h Mt$T%rs/DpMN3[Rq#9mb.K9;BrqQ nc&Ugrr3]2r;HTgqc@8.!:2^V4sa`r;6Norr;p+qu-9fp\jpdo)/F\s8)6b%fQ8&qu$'arVHBiq>9s_q>U]tq>C*h rq-3Ks8Vs"q>^9jqY0gcs8Mrr)#jL0qu-3fq>C0ir;HWpp](6lq>:!coDegg%/g(squ?Wor;-El rVl]os8EQ'q#(*grV--cq=sdbq#10Ws8W'/r;HKjqtp3fr;-BgrVlWjnc'g3rr;`mq#(0dqYU$d p\b!gTq_G[o)8C[o_nL[qtp3frVl![J,~> nc&Ugrr3]2r;HTgqc@8.!:2^V4sa`r;6Norr;p+qu-9fp\jpdo)/F\s8)6b%fQ8&qu$'arVHBiq>9s_q>U]tq>C*h rq-3Ks8Vs"q>^9jqY0gcs8Mrr)#jL0qu-3fq>C0ir;HWpp](6lq>:!coDegg%/g(squ?Wor;-El rVl]os8EQ'q#(*grV--cq=sdbq#10Ws8W'/r;HKjqtp3fr;-BgrVlWjnc'g3rr;`mq#(0dqYU$d p\b!gTq_G[o)8C[o_nL[qtp3frVl![J,~> nc&Ugrr3]2r;HTgqc@8.!:2^V4sa`r;6Norr;p+qu-9fp\jpdo)/F\s8)6b%fQ8&qu$'arVHBiq>9s_q>U]tq>C*h rq-3Ks8Vs"q>^9jqY0gcs8Mrr)#jL0qu-3fq>C0ir;HWpp](6lq>:!coDegg%/g(squ?Wor;-El rVl]os8EQ'q#(*grV--cq=sdbq#10Ws8W'/r;HKjqtp3fr;-BgrVlWjnc'g3rr;`mq#(0dqYU$d p\b!gTq_G[o)8C[o_nL[qtp3frVl![J,~> nc&Ugrr;rr"%5KW"8r6"! nc&Ugrr;rr"%5KW"8r6"! nc&Ugrr;rr"%5KW"8r6"! li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]up](d) "p,#1!WW<-! li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]up](d) "p,#1!WW<-! li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]up](d) "p,#1!WW<-! li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]upAk4! $igY:$ig;8"T\Z4!!W,t!W`9%rr.KKJcEIas8Dus*<#csl3mXq!!!6(! li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]upAk4! $igY:$ig;8"T\Z4!!W,t!W`9%rr.KKJcEIas8Dus*<#csl3mXq!!!6(! li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]upAk4! $igY:$ig;8"T\Z4!!W,t!W`9%rr.KKJcEIas8Dus*<#csl3mXq!!!6(! li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]up]1 li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]up]1 li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]up]1 li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]upAbX+ $3^D7"onf5"98E(#58*!!<<0"rdk*#s1nX7rr2rqrYbY,r;%B9!!*8[j8&BBp%S%MrV? li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]upAbX+ $3^D7"onf5"98E(#58*!!<<0"rdk*#s1nX7rr2rqrYbY,r;%B9!!*8[j8&BBp%S%MrV? li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]upAbX+ $3^D7"onf5"98E(#58*!!<<0"rdk*#s1nX7rr2rqrYbY,r;%B9!!*8[j8&BBp%S%MrV? li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]up](g. !!G291cdHL!sJc0!!3E#!!30$!WN(Ls+13crrE&ts8W)uru1\3rq--f1,TF?!s?Zhp](6kqtC!a r;?Nlroa<3~> li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]up](g. !!G291cdHL!sJc0!!3E#!!30$!WN(Ls+13crrE&ts8W)uru1\3rq--f1,TF?!s?Zhp](6kqtC!a r;?Nlroa<3~> li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]up](g. !!G291cdHL!sJc0!!3E#!!30$!WN(Ls+13crrE&ts8W)uru1\3rq--f1,TF?!s?Zhp](6kqtC!a r;?Nlroa<3~> li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]up](d, !"eu&rqH li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]up](d, !"eu&rqH li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&t_#FT;rr<0%!r)a#!<<*$!!<3"q>UHoqu?]up](d, !"eu&rqH mf*IirVcZl!WE-#!WE*!!L-gs8N&tqoA^?rr2s$!!;oq#6=f) !WW<%rqZQorql`r!r)a*!WW9"rVullrVup"!!*2r!!NB'!WE#sJcC<$_#FH6s82d9qt^!`rVZHg !Wuj3"oo$pRJm!Xq>U*fr;HWprr23_J,~> mf*IirVcZl!WE-#!WE*!!L-gs8N&tqoA^?rr2s$!!;oq#6=f) !WW<%rqZQorql`r!r)a*!WW9"rVullrVup"!!*2r!!NB'!WE#sJcC<$_#FH6s82d9qt^!`rVZHg !Wuj3"oo$pRJm!Xq>U*fr;HWprr23_J,~> mf*IirVcZl!WE-#!WE*!!L-gs8N&tqoA^?rr2s$!!;oq#6=f) !WW<%rqZQorql`r!r)a*!WW9"rVullrVup"!!*2r!!NB'!WE#sJcC<$_#FH6s82d9qt^!`rVZHg !Wuj3"oo$pRJm!Xq>U*fr;HWprr23_J,~> mf*=er;QR@"9JZ1!<UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^An*0*W#a6q=a[`quR#m HjB`T!<@k)rquTgrVZWos8N#_s*t~> mf*=er;QR@"9JZ1!<UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^An*0*W#a6q=a[`quR#m HjB`T!<@k)rquTgrVZWos8N#_s*t~> mf*=er;QR@"9JZ1!<UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^An*0*W#a6q=a[`quR#m HjB`T!<@k)rquTgrVZWos8N#_s*t~> nc':%s8W)rqu$?o!=0#4$jQn9!<<0"rYYV6!!!$$!^31rrrE%!!E9' p](O"!!!'#!rr8qrrE&r!!!)p!!`N)s8)cos8Mor!!;lp"T\T(rVleIs+13_s8W)uruM"3r;? nc':%s8W)rqu$?o!=0#4$jQn9!<<0"rYYV6!!!$$!^31rrrE%!!E9' p](O"!!!'#!rr8qrrE&r!!!)p!!`N)s8)cos8Mor!!;lp"T\T(rVleIs+13_s8W)uruM"3r;? nc':%s8W)rqu$?o!=0#4$jQn9!<<0"rYYV6!!!$$!^31rrrE%!!E9' p](O"!!!'#!rr8qrrE&r!!!)p!!`N)s8)cos8Mor!!;lp"T\T(rVleIs+13_s8W)uruM"3r;? nc&Ugrr3N-r;HSo#Qt84"p>,2!W`E&rttb8!!!''!X&Q-!tbJ-q>U-bqtg!apA4^.rrrE%!!E9' p](O"!!!'#!rr8qrrE&r!!!)p!!`N)s8)cos8Mor!!;lp"T\T(rVleIs+13`s8N#truLh1p\jp^ nbiOiqYL6^WWN\1!Wu nc&Ugrr3N-r;HSo#Qt84"p>,2!W`E&rttb8!!!''!X&Q-!tbJ-q>U-bqtg!apA4^.rrrE%!!E9' p](O"!!!'#!rr8qrrE&r!!!)p!!`N)s8)cos8Mor!!;lp"T\T(rVleIs+13`s8N#truLh1p\jp^ nbiOiqYL6^WWN\1!Wu nc&Ugrr3N-r;HSo#Qt84"p>,2!W`E&rttb8!!!''!X&Q-!tbJ-q>U-bqtg!apA4^.rrrE%!!E9' p](O"!!!'#!rr8qrrE&r!!!)p!!`N)s8)cos8Mor!!;lp"T\T(rVleIs+13`s8N#truLh1p\jp^ nbiOiqYL6^WWN\1!Wu nc&Ugrr4MJrVlfpa27rZ!!NE)!W`B%rqlTm!!!'$!tt0rqc?e p[A+_#5eDrqY8"J%fcb7o_nO^rVuosrp'N6~> nc&Ugrr4MJrVlfpa27rZ!!NE)!W`B%rqlTm!!!'$!tt0rqc?e p[A+_#5eDrqY8"J%fcb7o_nO^rVuosrp'N6~> nc&Ugrr4MJrVlfpa27rZ!!NE)!W`B%rqlTm!!!'$!tt0rqc?e p[A+_#5eDrqY8"J%fcb7o_nO^rVuosrp'N6~> nc&Ugrr3]2r;HTeq"E;A!< nc&Ugrr3]2r;HTeq"E;A!< nc&Ugrr3]2r;HTeq"E;A!< nc':%s8W)rqu$Bjp\t$Vo`5$q!s/Q%rqla.!WrQ*"Tn`>$2s5imJd+\q>SJ8"oeN%"98Mu!!`N) !!3-%s8Mio!<2lr!!;lp#6=i)qZ$Norql`r!quZu!<<0!rr.KKJcEOcs8Mln*;TU4q>L[0!s&]D% g`mV#ndXI'E[n*r;HZqrr23_J,~> nc':%s8W)rqu$Bjp\t$Vo`5$q!s/Q%rqla.!WrQ*"Tn`>$2s5imJd+\q>SJ8"oeN%"98Mu!!`N) !!3-%s8Mio!<2lr!!;lp#6=i)qZ$Norql`r!quZu!<<0!rr.KKJcEOcs8Mln*;TU4q>L[0!s&]D% g`mV#ndXI'E[n*r;HZqrr23_J,~> nc':%s8W)rqu$Bjp\t$Vo`5$q!s/Q%rqla.!WrQ*"Tn`>$2s5imJd+\q>SJ8"oeN%"98Mu!!`N) !!3-%s8Mio!<2lr!!;lp#6=i)qZ$Norql`r!quZu!<<0!rr.KKJcEOcs8Mln*;TU4q>L[0!s&]D% g`mV#ndXI'E[n*r;HZqrr23_J,~> mf*=er;QR@rqufqp&=X`%hAX?rVc`prr<$#!W`<%!XJc+%0.%A&`E0Ts8Mlnr;Ot@"oeN%"98Mu !!`N)!!3-%s8Mio!<2lr!!;lp#6=i)qZ$Norql`r!quZu!<<0!rr.KKJcEIaqu%TJ%MoTf'bh/[ !X0,G&JGihq=Xa_q>UBjr;Q`qrr;uas*t~> mf*=er;QR@rqufqp&=X`%hAX?rVc`prr<$#!W`<%!XJc+%0.%A&`E0Ts8Mlnr;Ot@"oeN%"98Mu !!`N)!!3-%s8Mio!<2lr!!;lp#6=i)qZ$Norql`r!quZu!<<0!rr.KKJcEIaqu%TJ%MoTf'bh/[ !X0,G&JGihq=Xa_q>UBjr;Q`qrr;uas*t~> mf*=er;QR@rqufqp&=X`%hAX?rVc`prr<$#!W`<%!XJc+%0.%A&`E0Ts8Mlnr;Ot@"oeN%"98Mu !!`N)!!3-%s8Mio!<2lr!!;lp#6=i)qZ$Norql`r!quZu!<<0!rr.KKJcEIaqu%TJ%MoTf'bh/[ !X0,G&JGihq=Xa_q>UBjr;Q`qrr;uas*t~> l2Lb_rr4DFr;HTgr[&rioD\Rb!XK&5!!!3'!UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^Af>Sr;6BhrVQToqtU$d rrEc7rr)Niq"XacrquWhr;6EkrVllsm/MS~> l2Lb_rr4DFr;HTgr[&rioD\Rb!XK&5!!!3'!UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^Af>Sr;6BhrVQToqtU$d rrEc7rr)Niq"XacrquWhr;6EkrVllsm/MS~> l2Lb_rr4DFr;HTgr[&rioD\Rb!XK&5!!!3'!UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^Af>Sr;6BhrVQToqtU$d rrEc7rr)Niq"XacrquWhr;6EkrVllsm/MS~> l2N=6s8W)rqu$B_qu$3cqtU!c$3:8UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^Ae33rVRW5qYpKkq>1'h 63Repp\=daqYgHorVZTmr;HWnrrE&bs*t~> l2N=6s8W)rqu$B_qu$3cqtU!c$3:8UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^Ae33rVRW5qYpKkq>1'h 63Repp\=daqYgHorVZTmr;HWnrrE&bs*t~> l2N=6s8W)rqu$B_qu$3cqtU!c$3:8UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^Ae33rVRW5qYpKkq>1'h 63Repp\=daqYgHorVZTmr;HWnrrE&bs*t~> k5PJ]r;HL5s7Z3YrqQEi!!UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^Af>TrVZTlrVHNmr;- k5PJ]r;HL5s7Z3YrqQEi!!UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^Af>TrVZTlrVHNmr;- k5PJ]r;HL5s7Z3YrqQEi!!UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^Af>TrVZTlrVHNmr;- k5PJ]r;QR7q"aU^pAY'`q/-E?!! k5PJ]r;QR7q"aU^pAY'`q/-E?!! k5PJ]r;QR7q"aU^pAY'`q/-E?!! k5PJ]r;HL;q#1!^s7cUHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^&S'1!WW,trs\o,s8Dcms82fj rVQTms8W'!s8M-[J,~> k5PJ]r;HL;q#1!^s7cUHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^&S'1!WW,trs\o,s8Dcms82fj rVQTms8W'!s8M-[J,~> k5PJ]r;HL;q#1!^s7cUHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$^&S'1!WW,trs\o,s8Dcms82fj rVQTms8W'!s8M-[J,~> l2Lqds8W)rqu6LUHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$\Gm->s8W)ts8W)prqZ?h qu6KmrVlis!<2'ZJ,~> l2Lqds8W)rqu6LUHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$\Gm->s8W)ts8W)prqZ?h qu6KmrVlis!<2'ZJ,~> l2Lqds8W)rqu6LUHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$\Gm->s8W)ts8W)prqZ?h qu6KmrVlis!<2'ZJ,~> l2Lb_rr4DFr;HTfs7lWmrVZKho`+[^\?cGA!WrH("9eo.#lt/6!;H?fr;HWoc2RtHrr<0%!r)a# !<<*$!!<3"q>UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$[f6j:rVccrrr;lnr:p3i rr;rrs8N)ujSs`~> l2Lb_rr4DFr;HTfs7lWmrVZKho`+[^\?cGA!WrH("9eo.#lt/6!;H?fr;HWoc2RtHrr<0%!r)a# !<<*$!!<3"q>UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$[f6j:rVccrrr;lnr:p3i rr;rrs8N)ujSs`~> l2Lb_rr4DFr;HTfs7lWmrVZKho`+[^\?cGA!WrH("9eo.#lt/6!;H?fr;HWoc2RtHrr<0%!r)a# !<<*$!!<3"q>UHoqu?]upAbF!!<;oqrVulp!!!)p!!NB'!WE#sJcC<$[f6j:rVccrrr;lnr:p3i rr;rrs8N)ujSs`~> l2Lb_rr;rr"oSE"s8N&trYbY6rVl`ndDuLl!W`9%!=&l1!=Ai*rVZTlrr14C"oeN%"98Mr!!E?' !<2rmrrE&r!!!)n!!W<"s8N&tqu?]upAb?t!!3&trpBa`rWi<"q>^1-dr8IY\p&FO]q>^Kmrr<#trr!$#r:L!go]Q5`qZ$Tjs8)]orr;oks6o^^ s8Moq#P\8hs8Dlqrq??lrr)j$r;Q`ks8VoirrE&prs&E$s763ip\FghrpTjerr)j'rqQNhr;Z]p s8Mus!<2*[rr2rt$NC))s8W&ss8N&urr2rt!<2'ZJ,~> l2Lb_rr;rr"oSE"s8N&trYbY6rVl`ndDuLl!W`9%!=&l1!=Ai*rVZTlrr14C"oeN%"98Mr!!E?' !<2rmrrE&r!!!)n!!W<"s8N&tqu?]upAb?t!!3&trpBa`rWi<"q>^1-dr8IY\p&FO]q>^Kmrr<#trr!$#r:L!go]Q5`qZ$Tjs8)]orr;oks6o^^ s8Moq#P\8hs8Dlqrq??lrr)j$r;Q`ks8VoirrE&prs&E$s763ip\FghrpTjerr)j'rqQNhr;Z]p s8Mus!<2*[rr2rt$NC))s8W&ss8N&urr2rt!<2'ZJ,~> l2Lb_rr;rr"oSE"s8N&trYbY6rVl`ndDuLl!W`9%!=&l1!=Ai*rVZTlrr14C"oeN%"98Mr!!E?' !<2rmrrE&r!!!)n!!W<"s8N&tqu?]upAb?t!!3&trpBa`rWi<"q>^1-dr8IY\p&FO]q>^Kmrr<#trr!$#r:L!go]Q5`qZ$Tjs8)]orr;oks6o^^ s8Moq#P\8hs8Dlqrq??lrr)j$r;Q`ks8VoirrE&prs&E$s763ip\FghrpTjerr)j'rqQNhr;Z]p s8Mus!<2*[rr2rt$NC))s8W&ss8N&urr2rt!<2'ZJ,~> g&D'Orr3c5rVlipjk^+@!<<0&!"9,5"SVimr;HWocMn(Irr<0%!qcNr!WW6"rqZQorql`r!qlTu !W;uss8N#q!!!)p!!NB'!WE#smJm(_"o\Gtq>U*WrqQNkrWrK#nc/Req>L?mrr2rsrX&N%nc&@Q rr2rtrVlisnc&Odrr2oq#5\;orr;fnrr;oq#OhZjnbW4Yr9=4lrqu`oqXjdbrVlflrVcHeq>^Ko qu?Zo"onT"q>L g&D'Orr3c5rVlipjk^+@!<<0&!"9,5"SVimr;HWocMn(Irr<0%!qcNr!WW6"rqZQorql`r!qlTu !W;uss8N#q!!!)p!!NB'!WE#smJm(_"o\Gtq>U*WrqQNkrWrK#nc/Req>L?mrr2rsrX&N%nc&@Q rr2rtrVlisnc&Odrr2oq#5\;orr;fnrr;oq#OhZjnbW4Yr9=4lrqu`oqXjdbrVlflrVcHeq>^Ko qu?Zo"onT"q>L g&D'Orr3c5rVlipjk^+@!<<0&!"9,5"SVimr;HWocMn(Irr<0%!qcNr!WW6"rqZQorql`r!qlTu !W;uss8N#q!!!)p!!NB'!WE#smJm(_"o\Gtq>U*WrqQNkrWrK#nc/Req>L?mrr2rsrX&N%nc&@Q rr2rtrVlisnc&Odrr2oq#5\;orr;fnrr;oq#OhZjnbW4Yr9=4lrqu`oqXjdbrVlflrVcHeq>^Ko qu?Zo"onT"q>L f)GdMrVl`orXA]%!<`B'%KHJD!Vu`oquQcqc2RtHrr<0%!r)`q!W2rlrrE&r!!!)q!!iT*!r`/u s8N#q!!!)p!!NB'!WE#slMpn`#Pe#drr2`jqYL0ks7?6irVc`qrVum&rp9X_s7H1'ls8N#brt#,-rr2ckrr2ripAY*k rVc`q!<';)J,~> f)GdMrVl`orXA]%!<`B'%KHJD!Vu`oquQcqc2RtHrr<0%!r)`q!W2rlrrE&r!!!)q!!iT*!r`/u s8N#q!!!)p!!NB'!WE#slMpn`#Pe#drr2`jqYL0ks7?6irVc`qrVum&rp9X_s7H1'ls8N#brt#,-rr2ckrr2ripAY*k rVc`q!<';)J,~> f)GdMrVl`orXA]%!<`B'%KHJD!Vu`oquQcqc2RtHrr<0%!r)`q!W2rlrrE&r!!!)q!!iT*!r`/u s8N#q!!!)p!!NB'!WE#slMpn`#Pe#drr2`jqYL0ks7?6irVc`qrVum&rp9X_s7H1'ls8N#brt#,-rr2ckrr2ripAY*k rVc`q!<';)J,~> f)GdMrVl^2q"a^ZrVl^3*srVZTlrr<#td/O:Krr<0%!qH?crrE&r!!!)o!!WK%s8N&t rql`r!quZu!<<0!rr29as8N&s#l+AljOr\Qk2ZI%roF.BpuVM9ro=%<%HQX4j5f@b!!WH)k5FiJ rs8W&rVZKjr;>OQk5"*.jo=BNjlY^ej5^%:lMUY[p@nRds8EB'qtf=7f\?E(rqu$\%fH;%pAFmZ r8m(tk4SBFq#CBns8W,us8<0$r:g3ek1TUnroO1@r8S4BrUoRSo)AUbr;?Nmqu?]q&,c>%rUT.2 gueD*qtp f)GdMrVl^2q"a^ZrVl^3*srVZTlrr<#td/O:Krr<0%!qH?crrE&r!!!)o!!WK%s8N&t rql`r!quZu!<<0!rr29as8N&s#l+AljOr\Qk2ZI%roF.BpuVM9ro=%<%HQX4j5f@b!!WH)k5FiJ rs8W&rVZKjr;>OQk5"*.jo=BNjlY^ej5^%:lMUY[p@nRds8EB'qtf=7f\?E(rqu$\%fH;%pAFmZ r8m(tk4SBFq#CBns8W,us8<0$r:g3ek1TUnroO1@r8S4BrUoRSo)AUbr;?Nmqu?]q&,c>%rUT.2 gueD*qtp f)GdMrVl^2q"a^ZrVl^3*srVZTlrr<#td/O:Krr<0%!qH?crrE&r!!!)o!!WK%s8N&t rql`r!quZu!<<0!rr29as8N&s#l+AljOr\Qk2ZI%roF.BpuVM9ro=%<%HQX4j5f@b!!WH)k5FiJ rs8W&rVZKjr;>OQk5"*.jo=BNjlY^ej5^%:lMUY[p@nRds8EB'qtf=7f\?E(rqu$\%fH;%pAFmZ r8m(tk4SBFq#CBns8W,us8<0$r:g3ek1TUnroO1@r8S4BrUoRSo)AUbr;?Nmqu?]q&,c>%rUT.2 gueD*qtp f)GdMrVcX,rVZTeqY:'f3\UU;!<)Zjr;6EkrrE&FrrrE%!!E9'nc8^hq>UHoqu?]up&G*or;HWq rql`r!quZu!<<0!rr29a$NBu#qYS=R#7(D=quQHlr<)s!%Kck;!W`B+!s\i8!V6-err3K-rVZNg nbVq%"p+i+!!3$"!:0ks8KD*J,~> f)GdMrVcX,rVZTeqY:'f3\UU;!<)Zjr;6EkrrE&FrrrE%!!E9'nc8^hq>UHoqu?]up&G*or;HWq rql`r!quZu!<<0!rr29a$NBu#qYS=R#7(D=quQHlr<)s!%Kck;!W`B+!s\i8!V6-err3K-rVZNg nbVq%"p+i+!!3$"!:0ks8KD*J,~> f)GdMrVcX,rVZTeqY:'f3\UU;!<)Zjr;6EkrrE&FrrrE%!!E9'nc8^hq>UHoqu?]up&G*or;HWq rql`r!quZu!<<0!rr29a$NBu#qYS=R#7(D=quQHlr<)s!%Kck;!W`B+!s\i8!V6-err3K-rVZNg nbVq%"p+i+!!3$"!:0ks8KD*J,~> g&D'Orr3f5r;HTjq=OO[r;-9iq#!rd!r)`nr;6EkrrE#ErrrE%!!E9'p]1i"Te].!s/?%rrMus$3:20"9Jh6 s7c<`rqlfqrql`qrXf&+qu-8r:g!_r;HW`rrE&trt,,*r;QVs%g*"I"T/)mqYU8ss*t~> g&D'Orr3f5r;HTjq=OO[r;-9iq#!rd!r)`nr;6EkrrE#ErrrE%!!E9'p]1i"Te].!s/?%rrMus$3:20"9Jh6 s7c<`rqlfqrql`qrXf&+qu-8r:g!_r;HW`rrE&trt,,*r;QVs%g*"I"T/)mqYU8ss*t~> g&D'Orr3f5r;HTjq=OO[r;-9iq#!rd!r)`nr;6EkrrE#ErrrE%!!E9'p]1i"Te].!s/?%rrMus$3:20"9Jh6 s7c<`rqlfqrql`qrXf&+qu-8r:g!_r;HW`rrE&trt,,*r;QVs%g*"I"T/)mqYU8ss*t~> g&D'Orr3f6rVliqqYp0]rr)]lr;-?`AbZ-%r;-?jrrE#ErrrE%!!E9'p]18!XSu5@JKa!rVZX-rVZTfQj+$#!!iW+!^p(!sf&2!WE0#!W2p/!1!drpKddrr2p&r;- g&D'Orr3f6rVliqqYp0]rr)]lr;-?`AbZ-%r;-?jrrE#ErrrE%!!E9'p]18!XSu5@JKa!rVZX-rVZTfQj+$#!!iW+!^p(!sf&2!WE0#!W2p/!1!drpKddrr2p&r;- g&D'Orr3f6rVliqqYp0]rr)]lr;-?`AbZ-%r;-?jrrE#ErrrE%!!E9'p]18!XSu5@JKa!rVZX-rVZTfQj+$#!!iW+!^p(!sf&2!WE0#!W2p/!1!drpKddrr2p&r;- nc&Ugrr;us$ig&%r;6Nms8;corr2p!qu?Zps8W)urtGD/rVccqr;Z`ps8;`ns82for;HWp!<(:E "oeN%"98Mu!!`]2!WrQ+qu-Noqu6Kn(]j[>!!!'#!WW<.!L6j!!*6'!<_ro!r`,tnGiOf rr3?)rVR$'!!rf6H$oU8rHS*_rcn?d%sE5C!X/i5!o$igM;! nc&Ugrr;us$ig&%r;6Nms8;corr2p!qu?Zps8W)urtGD/rVccqr;Z`ps8;`ns82for;HWp!<(:E "oeN%"98Mu!!`]2!WrQ+qu-Noqu6Kn(]j[>!!!'#!WW<.!L6j!!*6'!<_ro!r`,tnGiOf rr3?)rVR$'!!rf6H$oU8rHS*_rcn?d%sE5C!X/i5!o$igM;! nc&Ugrr;us$ig&%r;6Nms8;corr2p!qu?Zps8W)urtGD/rVccqr;Z`ps8;`ns82for;HWp!<(:E "oeN%"98Mu!!`]2!WrQ+qu-Noqu6Kn(]j[>!!!'#!WW<.!L6j!!*6'!<_ro!r`,tnGiOf rr3?)rVR$'!!rf6H$oU8rHS*_rcn?d%sE5C!X/i5!o$igM;! nc'C(s8W)rqtpC*hqtL$crVQEfs8&r!"o\H$"98Mu!!`W:!!WN0qtU0jqu6Kn"p+c,"p+i, rW-rr2l^s8W$*s8;]lr nc'C(s8W)rqtpC*hqtL$crVQEfs8&r!"o\H$"98Mu!!`W:!!WN0qtU0jqu6Kn"p+c,"p+i, rW-rr2l^s8W$*s8;]lr nc'C(s8W)rqtpC*hqtL$crVQEfs8&r!"o\H$"98Mu!!`W:!!WN0qtU0jqu6Kn"p+c,"p+i, rW-rr2l^s8W$*s8;]lr mf*Iir;6?f>5nC,r;-6dq=X^`qu?NhZ2Y%-rVlj#!!;oq#6b>E!s&W'qYU#l4Dnrq?3m!"B,5$3Bf"!<26_s8E<&!X/]2#5eArrqufprr2`nqu6Wo&,c:srriB+!WrK% rqucqrr)j)rr)cl! mf*Iir;6?f>5nC,r;-6dq=X^`qu?NhZ2Y%-rVlj#!!;oq#6b>E!s&W'qYU#l4Dnrq?3m!"B,5$3Bf"!<26_s8E<&!X/]2#5eArrqufprr2`nqu6Wo&,c:srriB+!WrK% rqucqrr)j)rr)cl! mf*Iir;6?f>5nC,r;-6dq=X^`qu?NhZ2Y%-rVlj#!!;oq#6b>E!s&W'qYU#l4Dnrq?3m!"B,5$3Bf"!<26_s8E<&!X/]2#5eArrqufprr2`nqu6Wo&,c:srriB+!WrK% rqucqrr)j)rr)cl! nc'F)s8W)sr;HTq5sG8Hqu-KhqtU3iqYgAtrs&K$rr<0%!r)a$%Kcn;!sUmdrqcWprqla5!WWE) !!E92!WiH0!:p0dqY^@"!'g_rkemF!nrqu`n rr2os!<2rs&,uP*rVR'(#6Fonrr)cmrp9[brU?n"Tei/o_\Oas8KD*J,~> nc'F)s8W)sr;HTq5sG8Hqu-KhqtU3iqYgAtrs&K$rr<0%!r)a$%Kcn;!sUmdrqcWprqla5!WWE) !!E92!WiH0!:p0dqY^@"!'g_rkemF!nrqu`n rr2os!<2rs&,uP*rVR'(#6Fonrr)cmrp9[brU?n"Tei/o_\Oas8KD*J,~> nc'F)s8W)sr;HTq5sG8Hqu-KhqtU3iqYgAtrs&K$rr<0%!r)a$%Kcn;!sUmdrqcWprqla5!WWE) !!E92!WiH0!:p0dqY^@"!'g_rkemF!nrqu`n rr2os!<2rs&,uP*rVR'(#6Fonrr)cmrp9[brU?n"Tei/o_\Oas8KD*J,~> nc&Ugrr3Z2rVlfs!Ws_prVZ]pp\"R\qZ$&hrrrE%!!E9&p](R$%KHq>!>Xu#qYpQpqu@T9!!*6' !!EK+'+>6!qu??_qY1'k#6b)/!r)a!!<<0!rr23_s8E6-!!E9%rV6?gs8W)os8W)trt#,-rVuKf r;[$%!!*)urr)]ns8EB(quHcu!!30"q#Ch$+&-)_0 rVufnrr<#tnGa$krr)WkrpTml!W`o5qtU'\s!%I@r;m!'!=7BSmem"[q>L6iqXa^\rq-0hn,EIj #m^S0s7lTlrt,2.r9a=b#6Ou,"oeJur;HW^s8W$,s8;]lrr<]4#m:,(rr2lps8KD*J,~> nc&Ugrr3Z2rVlfs!Ws_prVZ]pp\"R\qZ$&hrrrE%!!E9&p](R$%KHq>!>Xu#qYpQpqu@T9!!*6' !!EK+'+>6!qu??_qY1'k#6b)/!r)a!!<<0!rr23_s8E6-!!E9%rV6?gs8W)os8W)trt#,-rVuKf r;[$%!!*)urr)]ns8EB(quHcu!!30"q#Ch$+&-)_0 rVufnrr<#tnGa$krr)WkrpTml!W`o5qtU'\s!%I@r;m!'!=7BSmem"[q>L6iqXa^\rq-0hn,EIj #m^S0s7lTlrt,2.r9a=b#6Ou,"oeJur;HW^s8W$,s8;]lrr<]4#m:,(rr2lps8KD*J,~> nc&Ugrr3Z2rVlfs!Ws_prVZ]pp\"R\qZ$&hrrrE%!!E9&p](R$%KHq>!>Xu#qYpQpqu@T9!!*6' !!EK+'+>6!qu??_qY1'k#6b)/!r)a!!<<0!rr23_s8E6-!!E9%rV6?gs8W)os8W)trt#,-rVuKf r;[$%!!*)urr)]ns8EB(quHcu!!30"q#Ch$+&-)_0 rVufnrr<#tnGa$krr)WkrpTml!W`o5qtU'\s!%I@r;m!'!=7BSmem"[q>L6iqXa^\rq-0hn,EIj #m^S0s7lTlrt,2.r9a=b#6Ou,"oeJur;HW^s8W$,s8;]lrr<]4#m:,(rr2lps8KD*J,~> nc'F)s8W)rqtg0m! nc'F)s8W)rqtg0m! nc'F)s8W)rqtg0m! nc'F)s8W)rqtg0i%Kle8!!rZ+$h!E]rpKZgrs/N"r;Zs#!s85trrro4"q(G1s8W)sr;?Hhrqla6 !WW3'!L?o!Us(r;?Ks!rrE'o)AUb qu6!_&+oo$rqQ4'!"/c-')qY*qt0n8rr)cq"9SW:o_\I]rUp0hp\+U[qu6Tgrq??c#Qau,"nVEa qu$BkrW3&urVmH.rVZKjqZdH5#QXl&qtg6imJm4b$ig/#rWE38$3gn;qYpEmr;ci&s*t~> nc'F)s8W)rqtg0i%Kle8!!rZ+$h!E]rpKZgrs/N"r;Zs#!s85trrro4"q(G1s8W)sr;?Hhrqla6 !WW3'!L?o!Us(r;?Ks!rrE'o)AUb qu6!_&+oo$rqQ4'!"/c-')qY*qt0n8rr)cq"9SW:o_\I]rUp0hp\+U[qu6Tgrq??c#Qau,"nVEa qu$BkrW3&urVmH.rVZKjqZdH5#QXl&qtg6imJm4b$ig/#rWE38$3gn;qYpEmr;ci&s*t~> nc'F)s8W)rqtg0i%Kle8!!rZ+$h!E]rpKZgrs/N"r;Zs#!s85trrro4"q(G1s8W)sr;?Hhrqla6 !WW3'!L?o!Us(r;?Ks!rrE'o)AUb qu6!_&+oo$rqQ4'!"/c-')qY*qt0n8rr)cq"9SW:o_\I]rUp0hp\+U[qu6Tgrq??c#Qau,"nVEa qu$BkrW3&urVmH.rVZKjqZdH5#QXl&qtg6imJm4b$ig/#rWE38$3gn;qYpEmr;ci&s*t~> nc&Ugrr4,?rVlcu!!<3*!WWE+!WWK&qu-EkrVlirrVlfrrr;utqYpKo!<1+?#Q4Js+p7rN"Si$/ &c`7E!!36$rr;rpqu$?frVQX2!<<*,!!`K/,Q7B9p%\Fas7ZKt!<<;r!!NH+!rDinnGiOfrVuos #Qb#,!"8Arrr29as8N#t%/U#5!<<-#rVulss8Moqs8E6)!!!9.!;lcps8W)crs& nc&Ugrr4,?rVlcu!!<3*!WWE+!WWK&qu-EkrVlirrVlfrrr;utqYpKo!<1+?#Q4Js+p7rN"Si$/ &c`7E!!36$rr;rpqu$?frVQX2!<<*,!!`K/,Q7B9p%\Fas7ZKt!<<;r!!NH+!rDinnGiOfrVuos #Qb#,!"8Arrr29as8N#t%/U#5!<<-#rVulss8Moqs8E6)!!!9.!;lcps8W)crs& nc&Ugrr4,?rVlcu!!<3*!WWE+!WWK&qu-EkrVlirrVlfrrr;utqYpKo!<1+?#Q4Js+p7rN"Si$/ &c`7E!!36$rr;rpqu$?frVQX2!<<*,!!`K/,Q7B9p%\Fas7ZKt!<<;r!!NH+!rDinnGiOfrVuos #Qb#,!"8Arrr29as8N#t%/U#5!<<-#rVulss8Moqs8E6)!!!9.!;lcps8W)crs& li7"ar;lis)Z]p=!W2WcrVcKhqtg*^rVlKhqYpL9irVlfsrlP0FrVZTj!'XYrqcZa!!Wl:48&ULrTjL`rW`K)!<<3"s8M?a s8N#t!WE-!!!E<&rVulls8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!UBs)"9AZ6"Sqilrql`n!<2lq$i^,&qt`DX!<<6) r:p li7"ar;lis)Z]p=!W2WcrVcKhqtg*^rVlKhqYpL9irVlfsrlP0FrVZTj!'XYrqcZa!!Wl:48&ULrTjL`rW`K)!<<3"s8M?a s8N#t!WE-!!!E<&rVulls8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!UBs)"9AZ6"Sqilrql`n!<2lq$i^,&qt`DX!<<6) r:p li7"ar;lis)Z]p=!W2WcrVcKhqtg*^rVlKhqYpL9irVlfsrlP0FrVZTj!'XYrqcZa!!Wl:48&ULrTjL`rW`K)!<<3"s8M?a s8N#t!WE-!!!E<&rVulls8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!UBs)"9AZ6"Sqilrql`n!<2lq$i^,&qt`DX!<<6) r:p li7"ar;lfr*WZ6@r;-6crN#qip&FOZqXXUWr:U$er;?Hirr<#taT);>"T8?%!Wr/t-Nsn["VCk= X8)Ver;Q<\s8N'##65/=!s\f1<;ZLjq=F4Xp](-Ws7$'j":"r+q>p0_li7"a#6Fl+!!<-!rp0Ua rr2ourW2uu"9AN$s8Mfns8E0'!<<-#!W;utrpB^crVZZq!WE'"!WMop$NC#&qZ[?-!!WK#rVZ`q mf*gjrr;`krrN3$":"]%qZ$Bert##+r;6?drrW]3!s9&5o)8Ob"TA?"s8Muss8E<&p%edr!s&T) o`+shs8NT(q#g^%%0HY/q"aX_rUo^\&,c2!pAOp_r;d9.#718'qYpEnrilEQ~> li7"ar;lfr*WZ6@r;-6crN#qip&FOZqXXUWr:U$er;?Hirr<#taT);>"T8?%!Wr/t-Nsn["VCk= X8)Ver;Q<\s8N'##65/=!s\f1<;ZLjq=F4Xp](-Ws7$'j":"r+q>p0_li7"a#6Fl+!!<-!rp0Ua rr2ourW2uu"9AN$s8Mfns8E0'!<<-#!W;utrpB^crVZZq!WE'"!WMop$NC#&qZ[?-!!WK#rVZ`q mf*gjrr;`krrN3$":"]%qZ$Bert##+r;6?drrW]3!s9&5o)8Ob"TA?"s8Muss8E<&p%edr!s&T) o`+shs8NT(q#g^%%0HY/q"aX_rUo^\&,c2!pAOp_r;d9.#718'qYpEnrilEQ~> li7"ar;lfr*WZ6@r;-6crN#qip&FOZqXXUWr:U$er;?Hirr<#taT);>"T8?%!Wr/t-Nsn["VCk= X8)Ver;Q<\s8N'##65/=!s\f1<;ZLjq=F4Xp](-Ws7$'j":"r+q>p0_li7"a#6Fl+!!<-!rp0Ua rr2ourW2uu"9AN$s8Mfns8E0'!<<-#!W;utrpB^crVZZq!WE'"!WMop$NC#&qZ[?-!!WK#rVZ`q mf*gjrr;`krrN3$":"]%qZ$Bert##+r;6?drrW]3!s9&5o)8Ob"TA?"s8Muss8E<&p%edr!s&T) o`+shs8NT(q#g^%%0HY/q"aX_rUo^\&,c2!pAOp_r;d9.#718'qYpEnrilEQ~> li7"ar;lfr('4L:r;HNeqZi@LPPP+QpAFa[r;HNgrqc`orl5!!,VH+rV6Ejp\OLYqXp'B!!`Z3!;lK`r;5g[s8E6)!!*'$rVul_s8W)t rrN*"rW!'%!<)rsq#CBn"Te])!<Ug$rVc_2#QXu1"8i&qrVl?e &,cG*q>ZWa"9])6qtp-erV?I(qu?Wms76$o!s/T4C]F;/rr**"rr2rtrqufqrW`,t$3UD4rVc`j rt>8.s7u]cCB=P<#m0i#rqQHfrUKmuq>^-`rqH/J#64o6"8_icrVj&$J,~> li7"ar;lfr('4L:r;HNeqZi@LPPP+QpAFa[r;HNgrqc`orl5!!,VH+rV6Ejp\OLYqXp'B!!`Z3!;lK`r;5g[s8E6)!!*'$rVul_s8W)t rrN*"rW!'%!<)rsq#CBn"Te])!<Ug$rVc_2#QXu1"8i&qrVl?e &,cG*q>ZWa"9])6qtp-erV?I(qu?Wms76$o!s/T4C]F;/rr**"rr2rtrqufqrW`,t$3UD4rVc`j rt>8.s7u]cCB=P<#m0i#rqQHfrUKmuq>^-`rqH/J#64o6"8_icrVj&$J,~> li7"ar;lfr('4L:r;HNeqZi@LPPP+QpAFa[r;HNgrqc`orl5!!,VH+rV6Ejp\OLYqXp'B!!`Z3!;lK`r;5g[s8E6)!!*'$rVul_s8W)t rrN*"rW!'%!<)rsq#CBn"Te])!<Ug$rVc_2#QXu1"8i&qrVl?e &,cG*q>ZWa"9])6qtp-erV?I(qu?Wms76$o!s/T4C]F;/rr**"rr2rtrqufqrW`,t$3UD4rVc`j rt>8.s7u]cCB=P<#m0i#rqQHfrUKmuq>^-`rqH/J#64o6"8_icrVj&$J,~> li7"ar;lfr('4L:r;Z]hp^@-+"*f%hq>^*]r:9d`rqc`orl5!('n!s&Jtqtp li7"ar;lfr('4L:r;Z]hp^@-+"*f%hq>^*]r:9d`rqc`orl5!('n!s&Jtqtp li7"ar;lfr('4L:r;Z]hp^@-+"*f%hq>^*]r:9d`rqc`orl5!('n!s&Jtqtp li7"ar;lfrrrEf6rVl`iqZ7!)"p+d'mbrVlcq s8E]3rqlWmqXsIX$jHq:"T@oep\FXSrX\l$rqlQ]pAbF&#Qg@mqtp6i!<0A*J,~> li7"ar;lfrrrEf6rVl`iqZ7!)"p+d'mbrVlcq s8E]3rqlWmqXsIX$jHq:"T@oep\FXSrX\l$rqlQ]pAbF&#Qg@mqtp6i!<0A*J,~> li7"ar;lfrrrEf6rVl`iqZ7!)"p+d'mbrVlcq s8E]3rqlWmqXsIX$jHq:"T@oep\FXSrX\l$rqlQ]pAbF&#Qg@mqtp6i!<0A*J,~> li7"ar;l`p*!-$8qu$0o!sAo2!!3-s9Dn_`p\Xmdqu$Hns8L.?#6+T#rW3-%p])ZE!UHorr!0""onf.$VUBpr;QZp r:0^rr;QV'$r;QQlpAP1#!!iT!s7lWnrr)lsrr)j-rr)clq==Xr!Wi?p qYU3irr3i7s8N#trqlWmq=4:["UP59!DE7eq>C!bnbj!rq=ajbp\Oq!!!<9"qYg8ls*t~> li7"ar;l`p*!-$8qu$0o!sAo2!!3-s9Dn_`p\Xmdqu$Hns8L.?#6+T#rW3-%p])ZE!UHorr!0""onf.$VUBpr;QZp r:0^rr;QV'$r;QQlpAP1#!!iT!s7lWnrr)lsrr)j-rr)clq==Xr!Wi?p qYU3irr3i7s8N#trqlWmq=4:["UP59!DE7eq>C!bnbj!rq=ajbp\Oq!!!<9"qYg8ls*t~> li7"ar;l`p*!-$8qu$0o!sAo2!!3-s9Dn_`p\Xmdqu$Hns8L.?#6+T#rW3-%p])ZE!UHorr!0""onf.$VUBpr;QZp r:0^rr;QV'$r;QQlpAP1#!!iT!s7lWnrr)lsrr)j-rr)clq==Xr!Wi?p qYU3irr3i7s8N#trqlWmq=4:["UP59!DE7eq>C!bnbj!rq=ajbp\Oq!!!<9"qYg8ls*t~> li7"ar;lis%06G/!r_rkrqZ^%!/41,h)hp\k'grVlfsrlP0Fr;6Ej!WiK-p])WD!3q#:6hli7"a#6Fl+!!<-!rp0Ua rr2ourW2uu"9AN$s8Mfns8E0'!<<-#!W;utrpB^crVZZq!WE'"!WMop!<2ur%fZqI! li7"ar;lis%06G/!r_rkrqZ^%!/41,h)hp\k'grVlfsrlP0Fr;6Ej!WiK-p])WD!3q#:6hli7"a#6Fl+!!<-!rp0Ua rr2ourW2uu"9AN$s8Mfns8E0'!<<-#!W;utrpB^crVZZq!WE'"!WMop!<2ur%fZqI! li7"ar;lis%06G/!r_rkrqZ^%!/41,h)hp\k'grVlfsrlP0Fr;6Ej!WiK-p])WD!3q#:6hli7"a#6Fl+!!<-!rp0Ua rr2ourW2uu"9AN$s8Mfns8E0'!<<-#!W;utrpB^crVZZq!WE'"!WMop!<2ur%fZqI! nc'I*s8W&oq>C6Q!!3B*#QXo,$igA.rqcZoqu?d!!!2ut%N?>coD&=`qtC$hrr)fpcMn.@rq$-M !!NDn!$;CGrUp-crVcTn#QbCmqYg?jrVufps8MunrqZF1%0>u!#6k1`rr2cnrTjL`rW`K)!<<3" s8Mrr"9/8tq>UBqrVulns8W)trrN*"rW!'%!<)rsq#CBn"Te])!<^Hn#P\6!#QtMB#Q4W)!=/Z.q#LEqqu@9/!!EB(#Qau0!<`Aurr;upq#:fprr;uk*!HTJ%0?;& s8Drrs8N#ss8W'1rVZ?XisGhm!s8Dus8Vcjrql]ps8N#r%K?Csp'1U$!!3E2!t,A%!"K#0! nc'I*s8W&oq>C6Q!!3B*#QXo,$igA.rqcZoqu?d!!!2ut%N?>coD&=`qtC$hrr)fpcMn.@rq$-M !!NDn!$;CGrUp-crVcTn#QbCmqYg?jrVufps8MunrqZF1%0>u!#6k1`rr2cnrTjL`rW`K)!<<3" s8Mrr"9/8tq>UBqrVulns8W)trrN*"rW!'%!<)rsq#CBn"Te])!<^Hn#P\6!#QtMB#Q4W)!=/Z.q#LEqqu@9/!!EB(#Qau0!<`Aurr;upq#:fprr;uk*!HTJ%0?;& s8Drrs8N#ss8W'1rVZ?XisGhm!s8Dus8Vcjrql]ps8N#r%K?Csp'1U$!!3E2!t,A%!"K#0! nc'I*s8W&oq>C6Q!!3B*#QXo,$igA.rqcZoqu?d!!!2ut%N?>coD&=`qtC$hrr)fpcMn.@rq$-M !!NDn!$;CGrUp-crVcTn#QbCmqYg?jrVufps8MunrqZF1%0>u!#6k1`rr2cnrTjL`rW`K)!<<3" s8Mrr"9/8tq>UBqrVulns8W)trrN*"rW!'%!<)rsq#CBn"Te])!<^Hn#P\6!#QtMB#Q4W)!=/Z.q#LEqqu@9/!!EB(#Qau0!<`Aurr;upq#:fprr;uk*!HTJ%0?;& s8Drrs8N#ss8W'1rVZ?XisGhm!s8Dus8Vcjrql]ps8N#r%K?Csp'1U$!!3E2!t,A%!"K#0! nc'I*s8W&oq>C9WqtBRb!!N?/!"K/0q>:3lqu@T8!!**#!Um"s8MWp!!!$#!<)rsq#CBn"Te])!< nc'I*s8W&oq>C9WqtBRb!!N?/!"K/0q>:3lqu@T8!!**#!Um"s8MWp!!!$#!<)rsq#CBn"Te])!< nc'I*s8W&oq>C9WqtBRb!!N?/!"K/0q>:3lqu@T8!!**#!Um"s8MWp!!!$#!<)rsq#CBn"Te])!< nc'I*s8W&pqY^?krU^$ar"^1c$N^G/r;QNlqu?]tr;Zfur;m!($N:#0l0A0AqYU9krrE#Frrr8u s8Dp!mf4F1!WWDbq>L9V(&d_%s7c$Wq#(-js7cE_s8M!Y#QbJ*!!`f7pA"Uco_[tSs8E9*!!*'$ rVulrr;Zfr#PnAuqZ$Qlrr2rsrr;p*rr;fo!"/r2!C9lrXSo,oDS4X$igD6$O[%?$L[rp#lXf3!< nc'I*s8W&pqY^?krU^$ar"^1c$N^G/r;QNlqu?]tr;Zfur;m!($N:#0l0A0AqYU9krrE#Frrr8u s8Dp!mf4F1!WWDbq>L9V(&d_%s7c$Wq#(-js7cE_s8M!Y#QbJ*!!`f7pA"Uco_[tSs8E9*!!*'$ rVulrr;Zfr#PnAuqZ$Qlrr2rsrr;p*rr;fo!"/r2!C9lrXSo,oDS4X$igD6$O[%?$L[rp#lXf3!< nc'I*s8W&pqY^?krU^$ar"^1c$N^G/r;QNlqu?]tr;Zfur;m!($N:#0l0A0AqYU9krrE#Frrr8u s8Dp!mf4F1!WWDbq>L9V(&d_%s7c$Wq#(-js7cE_s8M!Y#QbJ*!!`f7pA"Uco_[tSs8E9*!!*'$ rVulrr;Zfr#PnAuqZ$Qlrr2rsrr;p*rr;fo!"/r2!C9lrXSo,oDS4X$igD6$O[%?$L[rp#lXf3!< mf+%$r;6Ejq="1ZpAFLZr@]`+r;HBbs82is!W>0r;6C'g&,cD) qtg0l#m:>1pAO[Yr:U*irX\u*nbi@g"pkS mf+%$r;6Ejq="1ZpAFLZr@]`+r;HBbs82is!W>0r;6C'g&,cD) qtg0l#m:>1pAO[Yr:U*irX\u*nbi@g"pkS mf+%$r;6Ejq="1ZpAFLZr@]`+r;HBbs82is!W>0r;6C'g&,cD) qtg0l#m:>1pAO[Yr:U*irX\u*nbi@g"pkS mf*=erVl^+rUg'gp&4g^q"OYUp@nObs82j!!<<-$rC9ko_JLt r;Zclq=4ao!<`Q%qtp6^p&G'k&cMY*p%]++!WW_@o'?)HpA4dart##+r:g3q#6G)9rVQ?hrqu mf*=erVl^+rUg'gp&4g^q"OYUp@nObs82j!!<<-$rC9ko_JLt r;Zclq=4ao!<`Q%qtp6^p&G'k&cMY*p%]++!WW_@o'?)HpA4dart##+r:g3q#6G)9rVQ?hrqu mf*=erVl^+rUg'gp&4g^q"OYUp@nObs82j!!<<-$rC9ko_JLt r;Zclq=4ao!<`Q%qtp6^p&G'k&cMY*p%]++!WW_@o'?)HpA4dart##+r:g3q#6G)9rVQ?hrqu mf3=ds88!!T'drV60ar;$6ir:Kg]p\UWf!"&l3"Tef%!;HTpp]U!aq=jgQs8W''!WW6$ !r`/urr3E+rVZQhr;?6[rVcWkrr)co"9&/pr;6Qt!<)rsq#CBn"Te])!<V!)rV?0e! mf3=ds88!!T'drV60ar;$6ir:Kg]p\UWf!"&l3"Tef%!;HTpp]U!aq=jgQs8W''!WW6$ !r`/urr3E+rVZQhr;?6[rVcWkrr)co"9&/pr;6Qt!<)rsq#CBn"Te])!<V!)rV?0e! mf3=ds88!!T'drV60ar;$6ir:Kg]p\UWf!"&l3"Tef%!;HTpp]U!aq=jgQs8W''!WW6$ !r`/urr3E+rVZQhr;?6[rVcWkrr)co"9&/pr;6Qt!<)rsq#CBn"Te])!<V!)rV?0e! mJm4c')hb,r;60dq"jjaq>C$arVH?iqu?]tqZ$s(!WiN*!!*'%q#13h!<)os!<(=F#P\&dqt^)2 "o/5q!"&cM2I)j!!!'$!<)rsq#CBn"Te])!<C3ir2fpK~> mJm4c')hb,r;60dq"jjaq>C$arVH?iqu?]tqZ$s(!WiN*!!*'%q#13h!<)os!<(=F#P\&dqt^)2 "o/5q!"&cM2I)j!!!'$!<)rsq#CBn"Te])!<C3ir2fpK~> mJm4c')hb,r;60dq"jjaq>C$arVH?iqu?]tqZ$s(!WiN*!!*'%q#13h!<)os!<(=F#P\&dqt^)2 "o/5q!"&cM2I)j!!!'$!<)rsq#CBn"Te])!<C3ir2fpK~> m/R+b&cMb-q#1'aqu$HepAb*fqY:*g!!!&s!<3*"!ri6+!<<,srVZTlrr2otrmC`VpAFFWpAb*n !;.qu$Hm!!<3%":"]$qY9sfr;$Bmrr<#urr;m&q"sl+"9AZ. #OhZi!WDoirsel'qu6X+"Tephq>C*eo`+sj&H2P(s7Z6j"onr0s7-$\qtp0gr;?s&!<U-br2fpK~> m/R+b&cMb-q#1'aqu$HepAb*fqY:*g!!!&s!<3*"!ri6+!<<,srVZTlrr2otrmC`VpAFFWpAb*n !;.qu$Hm!!<3%":"]$qY9sfr;$Bmrr<#urr;m&q"sl+"9AZ. #OhZi!WDoirsel'qu6X+"Tephq>C*eo`+sj&H2P(s7Z6j"onr0s7-$\qtp0gr;?s&!<U-br2fpK~> m/R+b&cMb-q#1'aqu$HepAb*fqY:*g!!!&s!<3*"!ri6+!<<,srVZTlrr2otrmC`VpAFFWpAb*n !;.qu$Hm!!<3%":"]$qY9sfr;$Bmrr<#urr;m&q"sl+"9AZ. #OhZi!WDoirsel'qu6X+"Tephq>C*eo`+sj&H2P(s7Z6j"onr0s7-$\qtp0gr;?s&!<U-br2fpK~> l2M=nq>1*epA+[Zqt^3drVHKmqu?]to`,$o!!((>$i]bqr:0g^!To]"U>&0!W;l^rVHEjoDeji&,#nt !=&]-!X&2eqYgEfqtU1#p&4ga!!s&@!V--`q#0ga')qk.r;69c#m:J9"n;BfoDJX`q>V!%rqcHi V?-`'%1r((rV- l2M=nq>1*epA+[Zqt^3drVHKmqu?]to`,$o!!((>$i]bqr:0g^!To]"U>&0!W;l^rVHEjoDeji&,#nt !=&]-!X&2eqYgEfqtU1#p&4ga!!s&@!V--`q#0ga')qk.r;69c#m:J9"n;BfoDJX`q>V!%rqcHi V?-`'%1r((rV- l2M=nq>1*epA+[Zqt^3drVHKmqu?]to`,$o!!((>$i]bqr:0g^!To]"U>&0!W;l^rVHEjoDeji&,#nt !=&]-!X&2eqYgEfqtU1#p&4ga!!s&@!V--`q#0ga')qk.r;69c#m:J9"n;BfoDJX`q>V!%rqcHi V?-`'%1r((rV- l2Ue]%efGiqYg6dqtL*eo`"^equ?]to`,$o!!((>&,,erpA4R^^'+Q@!Wi?&#Oqd)!V*,rVcQloD/Lj!rr?$qtU3bq>0^_ s8EQ,roFXp"To)3r;$C-fs8N!.s8)KfqZI'*":Y+prVQNio`#R'rVcQarVZg!%0?b0oD&4X s7Q3f&,lD'r:Bab!tGJ?r;6?gp\FglrVlfrs8N!.q=X^^oE>L$"p+r%qZ$TnXT*e~> l2Ue]%efGiqYg6dqtL*eo`"^equ?]to`,$o!!((>&,,erpA4R^^'+Q@!Wi?&#Oqd)!V*,rVcQloD/Lj!rr?$qtU3bq>0^_ s8EQ,roFXp"To)3r;$C-fs8N!.s8)KfqZI'*":Y+prVQNio`#R'rVcQarVZg!%0?b0oD&4X s7Q3f&,lD'r:Bab!tGJ?r;6?gp\FglrVlfrs8N!.q=X^^oE>L$"p+r%qZ$TnXT*e~> l2Ue]%efGiqYg6dqtL*eo`"^equ?]to`,$o!!((>&,,erpA4R^^'+Q@!Wi?&#Oqd)!V*,rVcQloD/Lj!rr?$qtU3bq>0^_ s8EQ,roFXp"To)3r;$C-fs8N!.s8)KfqZI'*":Y+prVQNio`#R'rVcQarVZg!%0?b0oD&4X s7Q3f&,lD'r:Bab!tGJ?r;6?gp\FglrVlfrs8N!.q=X^^oE>L$"p+r%qZ$TnXT*e~> l2M=gs82`nrqlZnm/?_Rr:L!gqu?]to`,$o!!((>&,lG!pAb$]rrP8!<<3"s8N&trr<#rqu$V*,rVcZiqYgHr!!`i0nGW"Nrr2Nhs8E,rnG*1c !!iYPrqZBhq#(-hs8W'0rV$6hnbEFp!!!*#p\spdr:L"%rr)fpp\XF^%KZh71@P2Ap&4jbrt"r) p&"Ra$31/3!;uW^s8)Qkrr2rts8ET.q#0[SquHs&":!HQrqQ l2M=gs82`nrqlZnm/?_Rr:L!gqu?]to`,$o!!((>&,lG!pAb$]rrP8!<<3"s8N&trr<#rqu$V*,rVcZiqYgHr!!`i0nGW"Nrr2Nhs8E,rnG*1c !!iYPrqZBhq#(-hs8W'0rV$6hnbEFp!!!*#p\spdr:L"%rr)fpp\XF^%KZh71@P2Ap&4jbrt"r) p&"Ra$31/3!;uW^s8)Qkrr2rts8ET.q#0[SquHs&":!HQrqQ l2M=gs82`nrqlZnm/?_Rr:L!gqu?]to`,$o!!((>&,lG!pAb$]rrP8!<<3"s8N&trr<#rqu$V*,rVcZiqYgHr!!`i0nGW"Nrr2Nhs8E,rnG*1c !!iYPrqZBhq#(-hs8W'0rV$6hnbEFp!!!*#p\spdr:L"%rr)fpp\XF^%KZh71@P2Ap&4jbrt"r) p&"Ra$31/3!;uW^s8)Qkrr2rts8ET.q#0[SquHs&":!HQrqQ l2M=oq>L?Ur:g$cp@dqRp@S@aqu?]to`,$o!!((>%f?5(rpT^_p[/1j$3p\Fmf3dt!WrK*!sA`/ !WiH*!Up'n!XA],"T\Atrr;rsrosI_rYGV9!<<3"s8N#qr;Q]nqu-Bbrnm/3j6l^0qWnISqtBCU q>^Hks8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!>0rV?HdqZ$m-!!<)sk5P>ZmdpJXrXSW$ !!EH5"TI`dq=+C_q#(.)rr)cos6fjb!!N?''D_Y'qZ$NdrsA]'rVH9cp'(R0rW!-#r;ZNjo(i:r rqu]nqs=Ic"p4l(pAXO[q>^Korr3W1rVcQlrVca+!!!-%s7lWmqu3\sJ,~> l2M=oq>L?Ur:g$cp@dqRp@S@aqu?]to`,$o!!((>%f?5(rpT^_p[/1j$3p\Fmf3dt!WrK*!sA`/ !WiH*!Up'n!XA],"T\Atrr;rsrosI_rYGV9!<<3"s8N#qr;Q]nqu-Bbrnm/3j6l^0qWnISqtBCU q>^Hks8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!>0rV?HdqZ$m-!!<)sk5P>ZmdpJXrXSW$ !!EH5"TI`dq=+C_q#(.)rr)cos6fjb!!N?''D_Y'qZ$NdrsA]'rVH9cp'(R0rW!-#r;ZNjo(i:r rqu]nqs=Ic"p4l(pAXO[q>^Korr3W1rVcQlrVca+!!!-%s7lWmqu3\sJ,~> l2M=oq>L?Ur:g$cp@dqRp@S@aqu?]to`,$o!!((>%f?5(rpT^_p[/1j$3p\Fmf3dt!WrK*!sA`/ !WiH*!Up'n!XA],"T\Atrr;rsrosI_rYGV9!<<3"s8N#qr;Q]nqu-Bbrnm/3j6l^0qWnISqtBCU q>^Hks8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!>0rV?HdqZ$m-!!<)sk5P>ZmdpJXrXSW$ !!EH5"TI`dq=+C_q#(.)rr)cos6fjb!!N?''D_Y'qZ$NdrsA]'rVH9cp'(R0rW!-#r;ZNjo(i:r rqu]nqs=Ic"p4l(pAXO[q>^Korr3W1rVcQlrVca+!!!-%s7lWmqu3\sJ,~> l2M=irqcWorpg!ep[@kJq#C6kqu?]to`,$o!!((>&,-"jq#:!VpA5'p!Wi?4$1@lo!WN/u!WN0" !U]sf"U"l0rqHBgs8W)as8W'7!WW6$!r`/urr)fqs8Dlor;QQ`rVl`lnGWXbqYp-dp\t'is8E0' !<<-#!W;utrpB^crVZZq!WE'"!WMop!<2ur%f$&&!s\f6"p"Q"qYBd_oDegh&,Z,)!rrB(rV#m_ o)87\rr)j/rVZQjp\Xpi$Od%9!;l?erq5m_')qk.rq$-erW!3($j5\lo)84[q>V!'s8M`hrr<0- !=8u'rqlZes8W'&rVZ]lq!RqV":#27rqlBgqYdMqJ,~> l2M=irqcWorpg!ep[@kJq#C6kqu?]to`,$o!!((>&,-"jq#:!VpA5'p!Wi?4$1@lo!WN/u!WN0" !U]sf"U"l0rqHBgs8W)as8W'7!WW6$!r`/urr)fqs8Dlor;QQ`rVl`lnGWXbqYp-dp\t'is8E0' !<<-#!W;utrpB^crVZZq!WE'"!WMop!<2ur%f$&&!s\f6"p"Q"qYBd_oDegh&,Z,)!rrB(rV#m_ o)87\rr)j/rVZQjp\Xpi$Od%9!;l?erq5m_')qk.rq$-erW!3($j5\lo)84[q>V!'s8M`hrr<0- !=8u'rqlZes8W'&rVZ]lq!RqV":#27rqlBgqYdMqJ,~> l2M=irqcWorpg!ep[@kJq#C6kqu?]to`,$o!!((>&,-"jq#:!VpA5'p!Wi?4$1@lo!WN/u!WN0" !U]sf"U"l0rqHBgs8W)as8W'7!WW6$!r`/urr)fqs8Dlor;QQ`rVl`lnGWXbqYp-dp\t'is8E0' !<<-#!W;utrpB^crVZZq!WE'"!WMop!<2ur%f$&&!s\f6"p"Q"qYBd_oDegh&,Z,)!rrB(rV#m_ o)87\rr)j/rVZQjp\Xpi$Od%9!;l?erq5m_')qk.rq$-erW!3($j5\lo)84[q>V!'s8M`hrr<0- !=8u'rqlZes8W'&rVZ]lq!RqV":#27rqlBgqYdMqJ,~> l2M=orUfpbmJbki!!*9#rr;cnqu?]to`,$o!!((>s8EK-p\4Rarq63n"pGV>!q--h!Vl`q!Ug!n "U"f0+8Yp4qu?]qli7"a#Qau,!!<-!rr;rr$N0f!qtC$ZrUp0hq>C'e#O2-bp\k*jp\Y!jrWN?( !!*'#r;ZfrmJd1br;Q`trVus"rqZR,rr)ffrqcI5$31P<#Q48oo)AIVs8W'0qu5@V#6t80mf)qV n,E=arr)j0rVQHirqZ9u!!!6*.eEN9p\k*`rt>>0rU9X[nFm(k!rrE$n,!%_nbN1qqYp6hrVdl@ !!!6(qu-Kmp&G'k&cMY,qtU-I#QP)0!rW#jrqQGns*t~> l2M=orUfpbmJbki!!*9#rr;cnqu?]to`,$o!!((>s8EK-p\4Rarq63n"pGV>!q--h!Vl`q!Ug!n "U"f0+8Yp4qu?]qli7"a#Qau,!!<-!rr;rr$N0f!qtC$ZrUp0hq>C'e#O2-bp\k*jp\Y!jrWN?( !!*'#r;ZfrmJd1br;Q`trVus"rqZR,rr)ffrqcI5$31P<#Q48oo)AIVs8W'0qu5@V#6t80mf)qV n,E=arr)j0rVQHirqZ9u!!!6*.eEN9p\k*`rt>>0rU9X[nFm(k!rrE$n,!%_nbN1qqYp6hrVdl@ !!!6(qu-Kmp&G'k&cMY,qtU-I#QP)0!rW#jrqQGns*t~> l2M=orUfpbmJbki!!*9#rr;cnqu?]to`,$o!!((>s8EK-p\4Rarq63n"pGV>!q--h!Vl`q!Ug!n "U"f0+8Yp4qu?]qli7"a#Qau,!!<-!rr;rr$N0f!qtC$ZrUp0hq>C'e#O2-bp\k*jp\Y!jrWN?( !!*'#r;ZfrmJd1br;Q`trVus"rqZR,rr)ffrqcI5$31P<#Q48oo)AIVs8W'0qu5@V#6t80mf)qV n,E=arr)j0rVQHirqZ9u!!!6*.eEN9p\k*`rt>>0rU9X[nFm(k!rrE$n,!%_nbN1qqYp6hrVdl@ !!!6(qu-Kmp&G'k&cMY,qtU-I#QP)0!rW#jrqQGns*t~> nc/Xgrr<#t(B=.&r;+@P_?BoA!snf&rr)it!!!$$rW!3+!<<-$!!!$%r;cltrVlfr!<1CG&,uG* qu?Zkr;ZLP!W`H,%fHA0!<<*#i;`iYrW!<,!!!'$!<<3$r;?Qks8W)as8W'7!WW6$!r`/urr)fp r;$-`rVHNep](-fq>^KnqYgZ_rVlTkq>1-krWN?(!!*'#r;ZfrmJd1br;Q`trVus"rqZR,rr)fp q=sda#6P#0!<2`hrV6;.r;PdWqu$Qr! nc/Xgrr<#t(B=.&r;+@P_?BoA!snf&rr)it!!!$$rW!3+!<<-$!!!$%r;cltrVlfr!<1CG&,uG* qu?Zkr;ZLP!W`H,%fHA0!<<*#i;`iYrW!<,!!!'$!<<3$r;?Qks8W)as8W'7!WW6$!r`/urr)fp r;$-`rVHNep](-fq>^KnqYgZ_rVlTkq>1-krWN?(!!*'#r;ZfrmJd1br;Q`trVus"rqZR,rr)fp q=sda#6P#0!<2`hrV6;.r;PdWqu$Qr! nc/Xgrr<#t(B=.&r;+@P_?BoA!snf&rr)it!!!$$rW!3+!<<-$!!!$%r;cltrVlfr!<1CG&,uG* qu?Zkr;ZLP!W`H,%fHA0!<<*#i;`iYrW!<,!!!'$!<<3$r;?Qks8W)as8W'7!WW6$!r`/urr)fp r;$-`rVHNep](-fq>^KnqYgZ_rVlTkq>1-krWN?(!!*'#r;ZfrmJd1br;Q`trVus"rqZR,rr)fp q=sda#6P#0!<2`hrV6;.r;PdWqu$Qr! nc'.!rVuosqYU9crMQV#!!WK'!$D=Bs8N#n"TSZ-#6Ou,$3^M7!s/K*%004$9`4herVZWnrrE&? rt"r%pJD(o#lt&,"9AW-!<_9\%g<"8!<`N-"onZ(;#g7_rT!qXrWiQ*!<<3"s8N#srri?!qYC'g rVc`is82fqr;Z`qrqZTorWN?(!!*'#r;ZfrmJd1br;Q`trVus"rqZTorr;p,q#C9h!X8i6"9/5t qYgBfrrE&trsSf)s7Q9l"9ni0;#C7g!W2lmrt>>0rVlHgq#gd#!!*#pq>U-drq-4'rVZNiq>L*a !!3-%#6+DoqY0p`rt#&,qu6Tir;Zj"#6Oi$rVlTl!<2ut#Q=Z%o)J7[#Q4`/:&Y"er;?Dms*t~> nc'.!rVuosqYU9crMQV#!!WK'!$D=Bs8N#n"TSZ-#6Ou,$3^M7!s/K*%004$9`4herVZWnrrE&? rt"r%pJD(o#lt&,"9AW-!<_9\%g<"8!<`N-"onZ(;#g7_rT!qXrWiQ*!<<3"s8N#srri?!qYC'g rVc`is82fqr;Z`qrqZTorWN?(!!*'#r;ZfrmJd1br;Q`trVus"rqZTorr;p,q#C9h!X8i6"9/5t qYgBfrrE&trsSf)s7Q9l"9ni0;#C7g!W2lmrt>>0rVlHgq#gd#!!*#pq>U-drq-4'rVZNiq>L*a !!3-%#6+DoqY0p`rt#&,qu6Tir;Zj"#6Oi$rVlTl!<2ut#Q=Z%o)J7[#Q4`/:&Y"er;?Dms*t~> nc'.!rVuosqYU9crMQV#!!WK'!$D=Bs8N#n"TSZ-#6Ou,$3^M7!s/K*%004$9`4herVZWnrrE&? rt"r%pJD(o#lt&,"9AW-!<_9\%g<"8!<`N-"onZ(;#g7_rT!qXrWiQ*!<<3"s8N#srri?!qYC'g rVc`is82fqr;Z`qrqZTorWN?(!!*'#r;ZfrmJd1br;Q`trVus"rqZTorr;p,q#C9h!X8i6"9/5t qYgBfrrE&trsSf)s7Q9l"9ni0;#C7g!W2lmrt>>0rVlHgq#gd#!!*#pq>U-drq-4'rVZNiq>L*a !!3-%#6+DoqY0p`rt#&,qu6Tir;Zj"#6Oi$rVlTl!<2ut#Q=Z%o)J7[#Q4`/:&Y"er;?Dms*t~> nG`sss8W&nq>6YG!!`N,%K-8D!WW3!rq$ nG`sss8W&nq>6YG!!`N,%K-8D!WW3!rq$ nG`sss8W&nq>6YG!!`N,%K-8D!WW3!rq$ nc/Xgs8NK+r;6Bq!s8`0"9J`*!#u%>s8N#m!!<9-"on`.#6P,2!/#`Qqu6?^nbN._qZ6Wo`r?SC q=aH4!t5D;#6b)5!]!"T)7"onf3!=&dLqt0^^pA!\Js8E9*!!*'$rVulrrVm!!rVcZmrVlfh s8)`gs8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!q'+!=AVtrVu`grrE&trsnu* s7l>0rVZHeq?-g,":"PrrV6EirV?Knrr2rtrXf&(r;-?j#64o/!X8Gq q>'p`rt#&-qu?Tkq?-s'#6Fl&qu- nc/Xgs8NK+r;6Bq!s8`0"9J`*!#u%>s8N#m!!<9-"on`.#6P,2!/#`Qqu6?^nbN._qZ6Wo`r?SC q=aH4!t5D;#6b)5!]!"T)7"onf3!=&dLqt0^^pA!\Js8E9*!!*'$rVulrrVm!!rVcZmrVlfh s8)`gs8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!q'+!=AVtrVu`grrE&trsnu* s7l>0rVZHeq?-g,":"PrrV6EirV?Knrr2rtrXf&(r;-?j#64o/!X8Gq q>'p`rt#&-qu?Tkq?-s'#6Fl&qu- nc/Xgs8NK+r;6Bq!s8`0"9J`*!#u%>s8N#m!!<9-"on`.#6P,2!/#`Qqu6?^nbN._qZ6Wo`r?SC q=aH4!t5D;#6b)5!]!"T)7"onf3!=&dLqt0^^pA!\Js8E9*!!*'$rVulrrVm!!rVcZmrVlfh s8)`gs8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!q'+!=AVtrVu`grrE&trsnu* s7l>0rVZHeq?-g,":"PrrV6EirV?Knrr2rtrXf&(r;-?j#64o/!X8Gq q>'p`rt#&-qu?Tkq?-s'#6Fl&qu- nc/Xg#ljo(rr)cr!XAW*!s8N#n!"8i2%0?P2"U5!pR/QsWq#1$co_eXdqZ6Wo`r?PC rqH6aRLK6-!=8c/!Wh3Z%g<(>!!>2s8Mros8)Hl'`ngK q>'marVc`nrrE&tr=8T!AHDu@$Ocn/rqlWkrV?Knrqud-rqH6dr;W/g!t558p\b'crqZR)rVZNl s7ZHt":,)8B)MT*q#;-/s8W)rr;Z]kr9spp#6Y)(p&G$es88tuJ,~> nc/Xg#ljo(rr)cr!XAW*!s8N#n!"8i2%0?P2"U5!pR/QsWq#1$co_eXdqZ6Wo`r?PC rqH6aRLK6-!=8c/!Wh3Z%g<(>!!>2s8Mros8)Hl'`ngK q>'marVc`nrrE&tr=8T!AHDu@$Ocn/rqlWkrV?Knrqud-rqH6dr;W/g!t558p\b'crqZR)rVZNl s7ZHt":,)8B)MT*q#;-/s8W)rr;Z]kr9spp#6Y)(p&G$es88tuJ,~> nc/Xg#ljo(rr)cr!XAW*!s8N#n!"8i2%0?P2"U5!pR/QsWq#1$co_eXdqZ6Wo`r?PC rqH6aRLK6-!=8c/!Wh3Z%g<(>!!>2s8Mros8)Hl'`ngK q>'marVc`nrrE&tr=8T!AHDu@$Ocn/rqlWkrV?Knrqud-rqH6dr;W/g!t558p\b'crqZR)rVZNl s7ZHt":,)8B)MT*q#;-/s8W)rr;Z]kr9spp#6Y)(p&G$es88tuJ,~> nc&[is8W)s$2aN(#lt#+!<`Q)!!33$s8N!5!X/]2";Ut>Y-YA4q"F^`r;QZes7lTmqZ6Wo`r?SF s82Zcqks](#m(;6!WW8[!"T/3!XB,6#6=Z$q=ag]qYK7Ps8E6)!!*'$rVulVrrE&is8W'%!W`9% !!3#ts8MEc!<)iq!!3'!!0sc rVlZn')qk.qYU-j!=B2=#P@rho(`4Yq>^Koqu?]n%K65)q$$j'!"/>ts7uZirt"r(rUKg^o`G=% !"&`)qu$6h(B4@6rqlTlrUg*`!WrN-$1%3_pAOpgXT*e~> nc&[is8W)s$2aN(#lt#+!<`Q)!!33$s8N!5!X/]2";Ut>Y-YA4q"F^`r;QZes7lTmqZ6Wo`r?SF s82Zcqks](#m(;6!WW8[!"T/3!XB,6#6=Z$q=ag]qYK7Ps8E6)!!*'$rVulVrrE&is8W'%!W`9% !!3#ts8MEc!<)iq!!3'!!0sc rVlZn')qk.qYU-j!=B2=#P@rho(`4Yq>^Koqu?]n%K65)q$$j'!"/>ts7uZirt"r(rUKg^o`G=% !"&`)qu$6h(B4@6rqlTlrUg*`!WrN-$1%3_pAOpgXT*e~> nc&[is8W)s$2aN(#lt#+!<`Q)!!33$s8N!5!X/]2";Ut>Y-YA4q"F^`r;QZes7lTmqZ6Wo`r?SF s82Zcqks](#m(;6!WW8[!"T/3!XB,6#6=Z$q=ag]qYK7Ps8E6)!!*'$rVulVrrE&is8W'%!W`9% !!3#ts8MEc!<)iq!!3'!!0sc rVlZn')qk.qYU-j!=B2=#P@rho(`4Yq>^Koqu?]n%K65)q$$j'!"/>ts7uZirt"r(rUKg^o`G=% !"&`)qu$6h(B4@6rqlTlrUg*`!WrN-$1%3_pAOpgXT*e~> mf3=b$N9ks!X8c1!rr?'rW"2Es8W)tq#q!('En]^`;9H*p$qtWqtC$dr:Tmar;?Hirr<#tao;kL s7H9arVFY;&.&LE!"&Q'rrN-$nGr@crW!<."TSYGqZ$Nls8DZNs8W''!WW6$!r`/urr;oqrr;oq j8]/Y"Te])!<^)qtp?gqt)cX!sJ],q>Bm_rr)\ps*t~> mf3=b$N9ks!X8c1!rr?'rW"2Es8W)tq#q!('En]^`;9H*p$qtWqtC$dr:Tmar;?Hirr<#tao;kL s7H9arVFY;&.&LE!"&Q'rrN-$nGr@crW!<."TSYGqZ$Nls8DZNs8W''!WW6$!r`/urr;oqrr;oq j8]/Y"Te])!<^)qtp?gqt)cX!sJ],q>Bm_rr)\ps*t~> mf3=b$N9ks!X8c1!rr?'rW"2Es8W)tq#q!('En]^`;9H*p$qtWqtC$dr:Tmar;?Hirr<#tao;kL s7H9arVFY;&.&LE!"&Q'rrN-$nGr@crW!<."TSYGqZ$Nls8DZNs8W''!WW6$!r`/urr;oqrr;oq j8]/Y"Te])!<^)qtp?gqt)cX!sJ],q>Bm_rr)\ps*t~> nc'$ss8W#qrr2`q!!<3&qZ$Zus8W)trrEc&s8MrS!Y,27!!`T)!!E<(!WrPp!;QX+#65)3#6io[rr;rrs7cKfj8]/Y#6Fl+!!<-!rr2rqr r2rqrp'L`rql`qrWN?(!!*'#r;ZfrmJd1br;Q`trVus"rr2otrqcX)p\sser;6Nr!=/c&r;QQbr t58-qu-Em!s&H("Sr#oqtpV!&rVlE_r9+%]$31S=rr;ujrtGD/qu-Nhr<36,"p4o+rVcEgnc#WiJ,~> nc'$ss8W#qrr2`q!!<3&qZ$Zus8W)trrEc&s8MrS!Y,27!!`T)!!E<(!WrPp!;QX+#65)3#6io[rr;rrs7cKfj8]/Y#6Fl+!!<-!rr2rqr r2rqrp'L`rql`qrWN?(!!*'#r;ZfrmJd1br;Q`trVus"rr2otrqcX)p\sser;6Nr!=/c&r;QQbr t58-qu-Em!s&H("Sr#oqtpV!&rVlE_r9+%]$31S=rr;ujrtGD/qu-Nhr<36,"p4o+rVcEgnc#WiJ,~> nc'$ss8W#qrr2`q!!<3&qZ$Zus8W)trrEc&s8MrS!Y,27!!`T)!!E<(!WrPp!;QX+#65)3#6io[rr;rrs7cKfj8]/Y#6Fl+!!<-!rr2rqr r2rqrp'L`rql`qrWN?(!!*'#r;ZfrmJd1br;Q`trVus"rr2otrqcX)p\sser;6Nr!=/c&r;QQbr t58-qu-Em!s&H("Sr#oqtpV!&rVlE_r9+%]$31S=rr;ujrtGD/qu-Nhr<36,"p4o+rVcEgnc#WiJ,~> nc/Uf*rZ!5r;?^'!!!?+!Bpcs8N&urr;uXs8W'' !WW6$!r`/urr;oqnG`Lequ6p#o`+sas8N#ps8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!V*,s8W)srquZo'GCHKs7cQnrr)ir!<2ors8N&s!r;NhrW)s% #5.uoqtg9jX8d\~> nc/Uf*rZ!5r;?^'!!!?+!Bpcs8N&urr;uXs8W'' !WW6$!r`/urr;oqnG`Lequ6p#o`+sas8N#ps8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!V*,s8W)srquZo'GCHKs7cQnrr)ir!<2ors8N&s!r;NhrW)s% #5.uoqtg9jX8d\~> nc/Uf*rZ!5r;?^'!!!?+!Bpcs8N&urr;uXs8W'' !WW6$!r`/urr;oqnG`Lequ6p#o`+sas8N#ps8W'%!W`9%!!3#ts8MEc!<)iq!!3'!!V*,s8W)srquZo'GCHKs7cQnrr)ir!<2ors8N&s!r;NhrW)s% #5.uoqtg9jX8d\~> nc'$ss8W)rr;HTp"U"u6rW!0.$igb5qYp)[rt"buko0g,#6=f,!=Ar8!!`2u"9])4!"8c+%L<:B !rrW-!sK>:rpfOXg]. nc'$ss8W)rr;HTp"U"u6rW!0.$igb5qYp)[rt"buko0g,#6=f,!=Ar8!!`2u"9])4!"8c+%L<:B !rrW-!sK>:rpfOXg]. nc'$ss8W)rr;HTp"U"u6rW!0.$igb5qYp)[rt"buko0g,#6=f,!=Ar8!!`2u"9])4!"8c+%L<:B !rrW-!sK>:rpfOXg]. nc'F(rr2loqu$Bs$NLY:#mgq?!&Z8(rqZPert#&)p\QTI"p,#0&I8FB$Ng,((BOR:#64`2#6>&2 ":,)4$NMjZqY'aao%X3ErW`K)!<<3"s8M<`s8EK"rV6BerqQKerqlWnoD8LerWN?(!!*'#r;Zfr mJd1br;Q`trVus"rq6:$rqcNeqZd62!<^XGqs=:Ss8W'-rVZKo"pG&/rVQWnqu$Hn"9/?#rr2p* r;$ nc'F(rr2loqu$Bs$NLY:#mgq?!&Z8(rqZPert#&)p\QTI"p,#0&I8FB$Ng,((BOR:#64`2#6>&2 ":,)4$NMjZqY'aao%X3ErW`K)!<<3"s8M<`s8EK"rV6BerqQKerqlWnoD8LerWN?(!!*'#r;Zfr mJd1br;Q`trVus"rq6:$rqcNeqZd62!<^XGqs=:Ss8W'-rVZKo"pG&/rVQWnqu$Hn"9/?#rr2p* r;$ nc'F(rr2loqu$Bs$NLY:#mgq?!&Z8(rqZPert#&)p\QTI"p,#0&I8FB$Ng,((BOR:#64`2#6>&2 ":,)4$NMjZqY'aao%X3ErW`K)!<<3"s8M<`s8EK"rV6BerqQKerqlWnoD8LerWN?(!!*'#r;Zfr mJd1br;Q`trVus"rq6:$rqcNeqZd62!<^XGqs=:Ss8W'-rVZKo"pG&/rVQWnqu$Hn"9/?#rr2p* r;$ nc'F(rr2loqu$?n"TeZ)"onls5l^ nc'F(rr2loqu$?n"TeZ)"onls5l^ nc'F(rr2loqu$?n"TeZ)"onls5l^ nc&Ugrr2utrr!?1"pG&2"^5(+qZ$?dq>1)art#,(qs=+Ts&iJ5!X/`6!sJE"(BOR>!s8]/&cr+< !=)eCp&=j]qY0RZrS.APrW`K)!<<3"s8MBb!ri/srqd-'!!EH/#b:qmqY9a^qu?]q"Te])!<0das8F/>r20Q&"9nl)s8;lrrqu]os8Dut rqu]ms7uNn! nc&Ugrr2utrr!?1"pG&2"^5(+qZ$?dq>1)art#,(qs=+Ts&iJ5!X/`6!sJE"(BOR>!s8]/&cr+< !=)eCp&=j]qY0RZrS.APrW`K)!<<3"s8MBb!ri/srqd-'!!EH/#b:qmqY9a^qu?]q"Te])!<0das8F/>r20Q&"9nl)s8;lrrqu]os8Dut rqu]ms7uNn! nc&Ugrr2utrr!?1"pG&2"^5(+qZ$?dq>1)art#,(qs=+Ts&iJ5!X/`6!sJE"(BOR>!s8]/&cr+< !=)eCp&=j]qY0RZrS.APrW`K)!<<3"s8MBb!ri/srqd-'!!EH/#b:qmqY9a^qu?]q"Te])!<0das8F/>r20Q&"9nl)s8;lrrqu]os8Dut rqu]ms7uNn! nc&Ufrr)orrqm',#7#EmEW#Y0q#1*kq"gZ`%e]f"p%\RarH)la!snr3p])$5!!`T,$igD5!ciYb rVHBgq=jj_qV(uLrW`K)!<<3"s8MBb')qk-q#1!a"9ec.#R^A$o_A:Yqu?]q"Te])!< nc&Ufrr)orrqm',#7#EmEW#Y0q#1*kq"gZ`%e]f"p%\RarH)la!snr3p])$5!!`T,$igD5!ciYb rVHBgq=jj_qV(uLrW`K)!<<3"s8MBb')qk-q#1!a"9ec.#R^A$o_A:Yqu?]q"Te])!< nc&Ufrr)orrqm',#7#EmEW#Y0q#1*kq"gZ`%e]f"p%\RarH)la!snr3p])$5!!`T,$igD5!ciYb rVHBgq=jj_qV(uLrW`K)!<<3"s8MBb')qk-q#1!a"9ec.#R^A$o_A:Yqu?]q"Te])!< nc&Ufrr)orrqm95M37]7rVZKgq#('dr;$2_rsnr+rVl`irVuTkp5=feMYI/f!sK,7$3:KjMMR/e pA=d\qu$BerVZNig].V-- r;6Bhq#CR)!!J5VrVlcorr2kts*t~> nc&Ufrr)orrqm95M37]7rVZKgq#('dr;$2_rsnr+rVl`irVuTkp5=feMYI/f!sK,7$3:KjMMR/e pA=d\qu$BerVZNig].V-- r;6Bhq#CR)!!J5VrVlcorr2kts*t~> nc&Ufrr)orrqm95M37]7rVZKgq#('dr;$2_rsnr+rVl`irVuTkp5=feMYI/f!sK,7$3:KjMMR/e pA=d\qu$BerVZNig].V-- r;6Bhq#CR)!!J5VrVlcorr2kts*t~> nc&UgrVulr&#B1'rVlirrVZ]ps8DuprqZR/q>^Kgs8MZjqu?Wns8Dogs8W)srVjS3!;uir$iU,( s7uWiqYpElT_Y;uV4t#bW1p-erqu`lq#1-es8Duos8Durh#@`\rVZcu!!*0#qu,p^s8E`2r;QNk r<.rV6 nc&UgrVulr&#B1'rVlirrVZ]ps8DuprqZR/q>^Kgs8MZjqu?Wns8Dogs8W)srVjS3!;uir$iU,( s7uWiqYpElT_Y;uV4t#bW1p-erqu`lq#1-es8Duos8Durh#@`\rVZcu!!*0#qu,p^s8E`2r;QNk r<.rV6 nc&UgrVulr&#B1'rVlirrVZ]ps8DuprqZR/q>^Kgs8MZjqu?Wns8Dogs8W)srVjS3!;uir$iU,( s7uWiqYpElT_Y;uV4t#bW1p-erqu`lq#1-es8Duos8Durh#@`\rVZcu!!*0#qu,p^s8E`2r;QNk r<.rV6 dJjdUo`+aWqYL6cqsaU^rq$!crVZ`q[f6R1qYU6krVQEiq>L3fs8(7F$3'o%#QXo1"o7i[rr2p5 rr)clo_AI\#lt/5"U+`%o)/Ods8W)srrN'"quH`qs8W,us8N)tn,ERjr;Zfp!WE'%!WW3!rqZR) rr;olrqGpg!rrZ/6N?oVq#1p$s7lTgp\P"&"98H!rqlWkrVlcqrr*W1r;?HhoLo;n!<1!grVlis'E.k*q=Y'o":tT%qu?Njs82]nrr2lrrX\u*r;-2rr2lorVierJ,~> dJjdUo`+aWqYL6cqsaU^rq$!crVZ`q[f6R1qYU6krVQEiq>L3fs8(7F$3'o%#QXo1"o7i[rr2p5 rr)clo_AI\#lt/5"U+`%o)/Ods8W)srrN'"quH`qs8W,us8N)tn,ERjr;Zfp!WE'%!WW3!rqZR) rr;olrqGpg!rrZ/6N?oVq#1p$s7lTgp\P"&"98H!rqlWkrVlcqrr*W1r;?HhoLo;n!<1!grVlis'E.k*q=Y'o":tT%qu?Njs82]nrr2lrrX\u*r;-2rr2lorVierJ,~> dJjdUo`+aWqYL6cqsaU^rq$!crVZ`q[f6R1qYU6krVQEiq>L3fs8(7F$3'o%#QXo1"o7i[rr2p5 rr)clo_AI\#lt/5"U+`%o)/Ods8W)srrN'"quH`qs8W,us8N)tn,ERjr;Zfp!WE'%!WW3!rqZR) rr;olrqGpg!rrZ/6N?oVq#1p$s7lTgp\P"&"98H!rqlWkrVlcqrr*W1r;?HhoLo;n!<1!grVlis'E.k*q=Y'o":tT%qu?Njs82]nrr2lrrX\u*r;-2rr2lorVierJ,~> dJjsXn,NC[rV60brqcNk/,AN.r;?NlrjVn4rquWirVlcmq>Ts_!<(FI$NC#&!=&`/!WDunnG`Fe s8N&s')_J'r;cm'! dJjsXn,NC[rV60brqcNk/,AN.r;?NlrjVn4rquWirVlcmq>Ts_!<(FI$NC#&!=&`/!WDunnG`Fe s8N&s')_J'r;cm'! dJjsXn,NC[rV60brqcNk/,AN.r;?NlrjVn4rquWirVlcmq>Ts_!<(FI$NC#&!=&`/!WDunnG`Fe s8N&s')_J'r;cm'! dJk$^rVQQlq>U:6kqYo"E$NC#&#RLJ>!<;Ze mJ["]-i!N/rW!-&!!`N'l2(AXr;Zfrs8W)sr;clu!<<0"rVQQlr;HZqrpg!nrr;uqs8Mosr dJk$^rVQQlq>U:6kqYo"E$NC#&#RLJ>!<;Ze mJ["]-i!N/rW!-&!!`N'l2(AXr;Zfrs8W)sr;clu!<<0"rVQQlr;HZqrpg!nrr;uqs8Mosr dJk$^rVQQlq>U:6kqYo"E$NC#&#RLJ>!<;Ze mJ["]-i!N/rW!-&!!`N'l2(AXr;Zfrs8W)sr;clu!<<0"rVQQlr;HZqrpg!nrr;uqs8Mosr dJjmQq>UUElqu,%E#laf$!!i`.$L?mO &Gc%rmKijs"9f;'rr;ucs8N#t!<2uqrrNW1!s&H$qtg6hr;?Tprpg!orVuorrquZq"9&K(rrE&n rtG&(rUp'frqlj)"V(M5p%nCVq"ad_%.a8k!!NE+$NU2*r:9^a"TJAurr2lp&+g2/!<0p_q>1-errmJ,~> dJjmQq>UUElqu,%E#laf$!!i`.$L?mO &Gc%rmKijs"9f;'rr;ucs8N#t!<2uqrrNW1!s&H$qtg6hr;?Tprpg!orVuorrquZq"9&K(rrE&n rtG&(rUp'frqlj)"V(M5p%nCVq"ad_%.a8k!!NE+$NU2*r:9^a"TJAurr2lp&+g2/!<0p_q>1-errmJ,~> dJjmQq>UUElqu,%E#laf$!!i`.$L?mO &Gc%rmKijs"9f;'rr;ucs8N#t!<2uqrrNW1!s&H$qtg6hr;?Tprpg!orVuorrquZq"9&K(rrE&n rtG&(rUp'frqlj)"V(M5p%nCVq"ad_%.a8k!!NE+$NU2*r:9^a"TJAurr2lp&+g2/!<0p_q>1-errmJ,~> dJs7G&bQ%rr8QQ5%KQV>#Q=SrqY^?"s82fjs7uWor;-BArsA]'r dJs7G&bQ%rr8QQ5%KQV>#Q=SrqY^?"s82fjs7uWor;-BArsA]'r dJs7G&bQ%rr8QQ5%KQV>#Q=SrqY^?"s82fjs7uWor;-BArsA]'r dJjmWq#C*3aoMVN!t#)A!<;omqu-N!rrE&ls7uZ dJjmWq#C*3aoMVN!t#)A!<;omqu-N!rrE&ls7uZ dJjmWq#C*3aoMVN!t#)A!<;omqu-N!rrE&ls7uZ h>dHQ)u]d9r;?HlrVcZ"Z3:76!!WE(#QOr+q#('grdk+:rrE&srsJc'r([:n!=Jl.!q?9j!>YY9 !_q#CBmrr2p2rVZQj!!<3*!WrE#qu-KkrVlirnc'-uqu-Nkr;6Tt!rV-0g9EYG'":,#0!s/N)!!!-%"TS`8!!NB(9`Fndq"Xmgrr<#trX\c+!sJi2 rVHEhrVZWns8MQg&H)M&s8Vljr:L*t!!ru+r;HWorVm`6s8W)trVZQko)JV\!h!,!WrR"s8;`lrVZTlrr0#!J,~> h>dHQ)u]d9r;?HlrVcZ"Z3:76!!WE(#QOr+q#('grdk+:rrE&srsJc'r([:n!=Jl.!q?9j!>YY9 !_q#CBmrr2p2rVZQj!!<3*!WrE#qu-KkrVlirnc'-uqu-Nkr;6Tt!rV-0g9EYG'":,#0!s/N)!!!-%"TS`8!!NB(9`Fndq"Xmgrr<#trX\c+!sJi2 rVHEhrVZWns8MQg&H)M&s8Vljr:L*t!!ru+r;HWorVm`6s8W)trVZQko)JV\!h!,!WrR"s8;`lrVZTlrr0#!J,~> h>dHQ)u]d9r;?HlrVcZ"Z3:76!!WE(#QOr+q#('grdk+:rrE&srsJc'r([:n!=Jl.!q?9j!>YY9 !_q#CBmrr2p2rVZQj!!<3*!WrE#qu-KkrVlirnc'-uqu-Nkr;6Tt!rV-0g9EYG'":,#0!s/N)!!!-%"TS`8!!NB(9`Fndq"Xmgrr<#trX\c+!sJi2 rVHEhrVZWns8MQg&H)M&s8Vljr:L*t!!ru+r;HWorVm`6s8W)trVZQko)JV\!h!,!WrR"s8;`lrVZTlrr0#!J,~> iVroWrr2usrqm<#rqZ9apA+KMT)\is!#6AB6qu?QprVl9c&,uA%qY1$\!!WH/!WVuqqtC%$rr)cmqu6TkAdAPH $3LA3!VcZo!=*.Ds8;Tiqu-'b%K6>4#6SB2o_\O`r;HWXrs8H)$3^EApA=derVc`prt,2.r;?Hk o_JF_Ad&>?!s/N!!!**%rW iVroWrr2usrqm<#rqZ9apA+KMT)\is!#6AB6qu?QprVl9c&,uA%qY1$\!!WH/!WVuqqtC%$rr)cmqu6TkAdAPH $3LA3!VcZo!=*.Ds8;Tiqu-'b%K6>4#6SB2o_\O`r;HWXrs8H)$3^EApA=derVc`prt,2.r;?Hk o_JF_Ad&>?!s/N!!!**%rW iVroWrr2usrqm<#rqZ9apA+KMT)\is!#6AB6qu?QprVl9c&,uA%qY1$\!!WH/!WVuqqtC%$rr)cmqu6TkAdAPH $3LA3!VcZo!=*.Ds8;Tiqu-'b%K6>4#6SB2o_\O`r;HWXrs8H)$3^EApA=derVc`prt,2.r;?Hk o_JF_Ad&>?!s/N!!!**%rW iVroWrr3Z2rVlfkqssUZqgNts#6b)/!X&W)!!30$!.k15rrE&srsJc(r:fc9I!:'fHg,ndIsc]n IXHPAr;HTnrqQNnrWi@LIXHYFp%n[c!r`,tn,Epsqu?KgqX/WXI"HbDq#C iVroWrr3Z2rVlfkqssUZqgNts#6b)/!X&W)!!30$!.k15rrE&srsJc(r:fc9I!:'fHg,ndIsc]n IXHPAr;HTnrqQNnrWi@LIXHYFp%n[c!r`,tn,Epsqu?KgqX/WXI"HbDq#C iVroWrr3Z2rVlfkqssUZqgNts#6b)/!X&W)!!30$!.k15rrE&srsJc(r:fc9I!:'fHg,ndIsc]n IXHPAr;HTnrqQNnrWi@LIXHYFp%n[c!r`,tn,Epsqu?KgqX/WXI"HbDq#C iVroWrr;us#64MpqXnN9rWEB."9JW)#Q4W(!<<+Ns5O%crr)cpoDS[aq>^9\s7uX!rVuQhq=spa rr2Wks8E9%q>L9hs8)WjrpB^qq>1$fqYC'hq"k!_r;ZWcs8N!'q>L'bp%\I\rqcZorr;rqr!)`e r:^*fq=4Iir:p-ap\a1Rr;PjY#laMlpA4^[rVZWmrr2iqrr*6(qt^0`q>($grVQTjrs8W"rV?0^ qY^ iVroWrr;us#64MpqXnN9rWEB."9JW)#Q4W(!<<+Ns5O%crr)cpoDS[aq>^9\s7uX!rVuQhq=spa rr2Wks8E9%q>L9hs8)WjrpB^qq>1$fqYC'hq"k!_r;ZWcs8N!'q>L'bp%\I\rqcZorr;rqr!)`e r:^*fq=4Iir:p-ap\a1Rr;PjY#laMlpA4^[rVZWmrr2iqrr*6(qt^0`q>($grVQTjrs8W"rV?0^ qY^ iVroWrr;us#64MpqXnN9rWEB."9JW)#Q4W(!<<+Ns5O%crr)cpoDS[aq>^9\s7uX!rVuQhq=spa rr2Wks8E9%q>L9hs8)WjrpB^qq>1$fqYC'hq"k!_r;ZWcs8N!'q>L'bp%\I\rqcZorr;rqr!)`e r:^*fq=4Iir:p-ap\a1Rr;PjY#laMlpA4^[rVZWmrr2iqrr*6(qt^0`q>($grVQTjrs8W"rV?0^ qY^ iVroWrr36%r;?NdrD?Mm"UG/4$3C80#6>&.!!30$!.k1/rsA]'s7lEaqY^'bnc/Fa#Q=>ms8;cn r:BsgrWi/ps8Mioo`"^e!<2Ng&,6&#qYL3gs7lNipA=U\rUKmnq#C?hq>C-grqcZirW`&lq"j^a qXORjrVQWiqtTj`qYpQpl2M"`qu-*`nGN1]rq??spAOsXqu$Eeq>U6j!<2up"T8,orqQ?i!<0)" J,~> iVroWrr36%r;?NdrD?Mm"UG/4$3C80#6>&.!!30$!.k1/rsA]'s7lEaqY^'bnc/Fa#Q=>ms8;cn r:BsgrWi/ps8Mioo`"^e!<2Ng&,6&#qYL3gs7lNipA=U\rUKmnq#C?hq>C-grqcZirW`&lq"j^a qXORjrVQWiqtTj`qYpQpl2M"`qu-*`nGN1]rq??spAOsXqu$Eeq>U6j!<2up"T8,orqQ?i!<0)" J,~> iVroWrr36%r;?NdrD?Mm"UG/4$3C80#6>&.!!30$!.k1/rsA]'s7lEaqY^'bnc/Fa#Q=>ms8;cn r:BsgrWi/ps8Mioo`"^e!<2Ng&,6&#qYL3gs7lNipA=U\rUKmnq#C?hq>C-grqcZirW`&lq"j^a qXORjrVQWiqtTj`qYpQpl2M"`qu-*`nGN1]rq??spAOsXqu$Eeq>U6j!<2up"T8,orqQ?i!<0)" J,~> h>[`YqtpL0gmITiIq>LWsqu- h>[`YqtpL0gmITiIq>LWsqu- h>[`YqtpL0gmITiIq>LWsqu- h>\/er;?Nj&c`4E%1`OF#mLM4!=]84!!30$!.k1-rs/Gpq#9sarUKFXq#1KnrVccqp&=R_s8E5t r;HNmrpp'fli7"a"oIudq>UBmr<3&srr2lcrs&>uq>U0drV?KhrWiAlq>1!eq>'R\$2=Gur:p9j q>UBRrs/>trql?es7-*gr;QNl#5J,qrUKmcnG`^lrVH0brq??jg]-O;jSs`~> h>\/er;?Nj&c`4E%1`OF#mLM4!=]84!!30$!.k1-rs/Gpq#9sarUKFXq#1KnrVccqp&=R_s8E5t r;HNmrpp'fli7"a"oIudq>UBmr<3&srr2lcrs&>uq>U0drV?KhrWiAlq>1!eq>'R\$2=Gur:p9j q>UBRrs/>trql?es7-*gr;QNl#5J,qrUKmcnG`^lrVH0brq??jg]-O;jSs`~> h>\/er;?Nj&c`4E%1`OF#mLM4!=]84!!30$!.k1-rs/Gpq#9sarUKFXq#1KnrVccqp&=R_s8E5t r;HNmrpp'fli7"a"oIudq>UBmr<3&srr2lcrs&>uq>U0drV?KhrWiAlq>1!eq>'R\$2=Gur:p9j q>UBRrs/>trql?es7-*gr;QNl#5J,qrUKmcnG`^lrVH0brq??jg]-O;jSs`~> iVroWrr<#ss8EK)!!39'$31M8#lk&1"oJ?%!<<+Ns53h\qu6EjrqcH[rqZR"q#:'fq>1*drq-6i rW2]lrqulsp\b$Yrt#,*rqZQmq#13ks8;ops82Be#lac$q>C*frr2`npAP3frqZKCSJ,~> iVroWrr<#ss8EK)!!39'$31M8#lk&1"oJ?%!<<+Ns53h\qu6EjrqcH[rqZR"q#:'fq>1*drq-6i rW2]lrqulsp\b$Yrt#,*rqZQmq#13ks8;ops82Be#lac$q>C*frr2`npAP3frqZKCSJ,~> iVroWrr<#ss8EK)!!39'$31M8#lk&1"oJ?%!<<+Ns53h\qu6EjrqcH[rqZR"q#:'fq>1*drq-6i rW2]lrqulsp\b$Yrt#,*rqZQmq#13ks8;ops82Be#lac$q>C*frr2`npAP3frqZKCSJ,~> mJdn!r;?NnrVZZiqu6NlmI18TrUp*gr;[H2!rrH(#6>5:!1-Vrq? mJdn!r;?NnrVZZiqu6NlmI18TrUp*gr;[H2!rrH(#6>5:!1-Vrq? mJdn!r;?NnrVZZiqu6NlmI18TrUp*gr;[H2!rrH(#6>5:!1-Vrq? nc'I*s8W)sr;?NmpAP!dq>Sae#64c'm/R(brW!T5!sJ`4"Tf8:"9\f-0`M+Mp\jN2s+13$s1/.O rqlZkq#C?loDederr)Nio`"[Yrr)Wjpt40Ef[p3'jSs`~> nc'I*s8W)sr;?NmpAP!dq>Sae#64c'm/R(brW!T5!sJ`4"Tf8:"9\f-0`M+Mp\jN2s+13$s1/.O rqlZkq#C?loDederr)Nio`"[Yrr)Wjpt40Ef[p3'jSs`~> nc'I*s8W)sr;?NmpAP!dq>Sae#64c'm/R(brW!T5!sJ`4"Tf8:"9\f-0`M+Mp\jN2s+13$s1/.O rqlZkq#C?loDederr)Nio`"[Yrr)Wjpt40Ef[p3'jSs`~> nc/Xg"TSK!qtpBj-2[W<]>+^R!X&T&qu?Nm!!!$%":#&1"U,/;!XV7Yr;6EfqYC)@s+13$s1/.O qYgC-cnbVqNrqZ3dr;6Ki]stnk^^'uC!!33"jSs`~> nc/Xg"TSK!qtpBj-2[W<]>+^R!X&T&qu?Nm!!!$%":#&1"U,/;!XV7Yr;6EfqYC)@s+13$s1/.O qYgC-cnbVqNrqZ3dr;6Ki]stnk^^'uC!!33"jSs`~> nc/Xg"TSK!qtpBj-2[W<]>+^R!X&T&qu?Nm!!!$%":#&1"U,/;!XV7Yr;6EfqYC)@s+13$s1/.O qYgC-cnbVqNrqZ3dr;6Ki]stnk^^'uC!!33"jSs`~> nc/Xg(B=C3qtp nc/Xg(B=C3qtp nc/Xg(B=C3qtp nc/Xg(B=C3qtp nc/Xg(B=C3qtp nc/Xg(B=C3qtp nc'I*s8W)sr;?M&4#6Y2?!W;$YJ,~> nc'I*s8W)sr;?M&4#6Y2?!W;$YJ,~> nc'I*s8W)sr;?M&4#6Y2?!W;$YJ,~> mJdn!r;?Kq"U5#1!!s\o/"Te`-"Te]1#Q3Z_J,~> mJdn!r;?Kq"U5#1!!s\o/"Te`-"Te]1#Q3Z_J,~> mJdn!r;?Kq"U5#1!!s\o/"Te`-"Te]1#Q3Z_J,~> mJm4cs8Dru!!E0"rrE?)! mJm4cs8Dru!!E0"rrE?)! mJm4cs8Dru!!E0"rrE?)! li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"T+8#C7!X/l1%0?V8$3:51!<`W0!Xf#3 !WW6%#11]9roF*0~> li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"T+8#C7!X/l1%0?V8$3:51!<`W0!Xf#3 !WW6%#11]9roF*0~> li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"T+8#C7!X/l1%0?V8$3:51!<`W0!Xf#3 !WW6%#11]9roF*0~> li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"Ts8F#=%KHM@!<<-#!=T&3!XJf,'*/(6 #Nt:,jS&?Hn`9_#~> li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"Ts8F#=%KHM@!<<-#!=T&3!XJf,'*/(6 #Nt:,jS&?Hn`9_#~> li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"Ts8F#=%KHM@!<<-#!=T&3!XJf,'*/(6 #Nt:,jS&?Hn`9_#~> li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"T+7]"0#64`/$jI%H!sAW*"TeArp&G'n !;PgXqu-*bp>l7(~> li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"T+7]"0#64`/$jI%H!sAW*"TeArp&G'n !;PgXqu-*bp>l7(~> li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"T+7]"0#64`/$jI%H!sAW*"TeArp&G'n !;PgXqu-*bp>l7(~> li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"T+8Pm9!=029"V1Y7"nV`np%JCQrs/T3 #laf"o_JLUroF*0~> li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"T+8Pm9!=029"V1Y7"nV`np%JCQrs/T3 #laf"o_JLUroF*0~> li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"T+8Pm9!=029"V1Y7"nV`np%JCQrs/T3 #laf"o_JLUroF*0~> li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"T+8u!k0aIgc!!<9,!6W=-c--(arVup& "9%lfrqlEgqW.[,~> li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"T+8u!k0aIgc!!<9,!6W=-c--(arVup& "9%lfrqlEgqW.[,~> li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcE"T+8u!k0aIgc!!<9,!6W=-c--(arVup& "9%lfrqlEgqW.[,~> li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcDtS*rG[07oN&N#lk/3"9Su2!O]/>"9AW5 r;,pXqu$EljSs`~> li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcDtS*rG[07oN&N#lk/3"9Su2!O]/>"9AW5 r;,pXqu$EljSs`~> li7"ar;l`p"TeZ'rr2rq!!rZ+!WW<#s8N&tJcC<$JcDtS*rG[07oN&N#lk/3"9Su2!O]/>"9AW5 r;,pXqu$EljSs`~> nc/Ufs8W)t&-2h5!<<3%!PM.rr)cis82fms82iqrVc`ps8W)?s8N#p s8W'1-is8N#hrrE&>ruUk3r:p6iqHmZB?YBEF!!WH,!!36-!1BDSq=j[_qrId-~> nc/Ufs8W)t&-2h5!<<3%!PM.rr)cis82fms82iqrVc`ps8W)?s8N#p s8W'1-is8N#hrrE&>ruUk3r:p6iqHmZB?YBEF!!WH,!!36-!1BDSq=j[_qrId-~> nc/Ufs8W)t&-2h5!<<3%!PM.rr)cis82fms82iqrVc`ps8W)?s8N#p s8W'1-is8N#hrrE&>ruUk3r:p6iqHmZB?YBEF!!WH,!!36-!1BDSq=j[_qrId-~> nc/Uf2#mRSrV_!D!WW9)!=Su5!X\i#r:g3k!WW6(!!NB."o\)kqY]s_q>:!apAFmer;HWps8L.? !r`,tr;Rl:rr)]lrVucoo`+gcrr;ums7cKbr;HEfrVHQhs8;fnrr)lsrq$-prqufmq>:3jq>^Kk "oe8rrr;iRrt#,,r;QZmrVZTgqt^9gr;#UW$2FGmq>1!cqYpKks7uZYrs/;nrVHBfp\Xdcq>UHl rqlrup\4Ubrr)lsrosI_rql^#r:p6fqY:$drVllsmf*Ugr:g$`qtp6hrql`krlP0^r;- nc/Uf2#mRSrV_!D!WW9)!=Su5!X\i#r:g3k!WW6(!!NB."o\)kqY]s_q>:!apAFmer;HWps8L.? !r`,tr;Rl:rr)]lrVucoo`+gcrr;ums7cKbr;HEfrVHQhs8;fnrr)lsrq$-prqufmq>:3jq>^Kk "oe8rrr;iRrt#,,r;QZmrVZTgqt^9gr;#UW$2FGmq>1!cqYpKks7uZYrs/;nrVHBfp\Xdcq>UHl rqlrup\4Ubrr)lsrosI_rql^#r:p6fqY:$drVllsmf*Ugr:g$`qtp6hrql`krlP0^r;- nc/Uf2#mRSrV_!D!WW9)!=Su5!X\i#r:g3k!WW6(!!NB."o\)kqY]s_q>:!apAFmer;HWps8L.? !r`,tr;Rl:rr)]lrVucoo`+gcrr;ums7cKbr;HEfrVHQhs8;fnrr)lsrq$-prqufmq>:3jq>^Kk "oe8rrr;iRrt#,,r;QZmrVZTgqt^9gr;#UW$2FGmq>1!cqYpKks7uZYrs/;nrVHBfp\Xdcq>UHl rqlrup\4Ubrr)lsrosI_rql^#r:p6fqY:$drVllsmf*Ugr:g$`qtp6hrql`krlP0^r;- mJf!ArVZTmP)TME"p##5"Tf&.p]($g!<`B)"onc,#m>&AoDJRbr:Tpdq"spdr;?Nms8W)?s8W)q ruq7U]sr;?Nk q"FXas8MutrTX@^rql`qqu?Hoqu6NjrVllsmf*UiqtU*cqu$Bkrql`krlP0Jr:p9do(r+Yo_\I_ rq6p$q#$58P)te+"UtP:"TrT mJf!ArVZTmP)TME"p##5"Tf&.p]($g!<`B)"onc,#m>&AoDJRbr:Tpdq"spdr;?Nms8W)?s8W)q ruq7U]sr;?Nk q"FXas8MutrTX@^rql`qqu?Hoqu6NjrVllsmf*UiqtU*cqu$Bkrql`krlP0Jr:p9do(r+Yo_\I_ rq6p$q#$58P)te+"UtP:"TrT mJf!ArVZTmP)TME"p##5"Tf&.p]($g!<`B)"onc,#m>&AoDJRbr:Tpdq"spdr;?Nms8W)?s8W)q ruq7U]sr;?Nk q"FXas8MutrTX@^rql`qqu?Hoqu6NjrVllsmf*UiqtU*cqu$Bkrql`krlP0Jr:p9do(r+Yo_\I_ rq6p$q#$58P)te+"UtP:"TrT mJf!ArVZTfrU[&k$31J9!s/N%r:g*f!!<3'"TST("p"g+>5eHus7ZBbrVQQlr;?Nms8W)7rri<" pAX[_q$Hiqp](6lrVcZorql`ks89pd#4qfjrVQEaiVsGd q>Bg`r;??ep](-hq#1*Srs/B!qYU9dq>:!f!<2ip!<29`!<)oo"8r,qrVZ]prqZR!rpp'grV$3b rr;rr!<)*\qu-fhs82`lrVZWnrVllsnc&jirqcNkp\F^^rrE&prrE&@ru_16qu6?[p\OI[r:g0d p\k$gpAFjbq5L0hWs8Y-!;tpXJ,~> mJf!ArVZTfrU[&k$31J9!s/N%r:g*f!!<3'"TST("p"g+>5eHus7ZBbrVQQlr;?Nms8W)7rri<" pAX[_q$Hiqp](6lrVcZorql`ks89pd#4qfjrVQEaiVsGd q>Bg`r;??ep](-hq#1*Srs/B!qYU9dq>:!f!<2ip!<29`!<)oo"8r,qrVZ]prqZR!rpp'grV$3b rr;rr!<)*\qu-fhs82`lrVZWnrVllsnc&jirqcNkp\F^^rrE&prrE&@ru_16qu6?[p\OI[r:g0d p\k$gpAFjbq5L0hWs8Y-!;tpXJ,~> mJf!ArVZTfrU[&k$31J9!s/N%r:g*f!!<3'"TST("p"g+>5eHus7ZBbrVQQlr;?Nms8W)7rri<" pAX[_q$Hiqp](6lrVcZorql`ks89pd#4qfjrVQEaiVsGd q>Bg`r;??ep](-hq#1*Srs/B!qYU9dq>:!f!<2ip!<29`!<)oo"8r,qrVZ]prqZR!rpp'grV$3b rr;rr!<)*\qu-fhs82`lrVZWnrVllsnc&jirqcNkp\F^^rrE&prrE&@ru_16qu6?[p\OI[r:g0d p\k$gpAFjbq5L0hWs8Y-!;tpXJ,~> nc/Xgs8OGFrVcZloDJBp_ug5E"pP)-qt^3h!!<3'"TST4!LL nc/Xgs8OGFrVcZloDJBp_ug5E"pP)-qt^3h!!<3'"TST4!LL nc/Xgs8OGFrVcZloDJBp_ug5E"pP)-qt^3h!!<3'"TST4!LL nc/Ufs8W,u0`Ckqtp?erV6*_s7H!^rqcTcrVcZlp\t0Qs*t~> nc/Ufs8W,u0`Ckqtp?erV6*_s7H!^rqcTcrVcZlp\t0Qs*t~> nc/Ufs8W,u0`Ckqtp?erV6*_s7H!^rqcTcrVcZlp\t0Qs*t~> nc/Ufs8NZ0rVcHhl1k8Dp\jFJ!W`5orr*r=!rrE-!U*cqu6Nrp\t-jkl2Rqrr)Kgo_JLbrVlfrs8N#trr)clqu$EjrVlcq !<2Ng%Jp)'kl1SCrqlWlrr<#lrX8;or;66fp\asfrVkmX&H;Y+r;HWmrr2Wkkl1>Rr;HWps8MQg )Ya70o`"LYrr)fprr<#trr;urr;6BhrVZWnrVllsdJs7Grr nc/Ufs8NZ0rVcHhl1k8Dp\jFJ!W`5orr*r=!rrE-!U*cqu6Nrp\t-jkl2Rqrr)Kgo_JLbrVlfrs8N#trr)clqu$EjrVlcq !<2Ng%Jp)'kl1SCrqlWlrr<#lrX8;or;66fp\asfrVkmX&H;Y+r;HWmrr2Wkkl1>Rr;HWps8MQg )Ya70o`"LYrr)fprr<#trr;urr;6BhrVZWnrVllsdJs7Grr nc/Ufs8NZ0rVcHhl1k8Dp\jFJ!W`5orr*r=!rrE-!U*cqu6Nrp\t-jkl2Rqrr)Kgo_JLbrVlfrs8N#trr)clqu$EjrVlcq !<2Ng%Jp)'kl1SCrqlWlrr<#lrX8;or;66fp\asfrVkmX&H;Y+r;HWmrr2Wkkl1>Rr;HWps8MQg )Ya70o`"LYrr)fprr<#trr;urr;6BhrVZWnrVllsdJs7Grr mJd4drVl^Iq"t$iqY^!!N?-!!;ZZrVZZn!rW&r rr2Wk$i0esrW!'$!W`?'!W2p%!WW6&!!)rrroF(iq>U9i!!*'%!!)rso_nghl2M"brqH3fn,NLg !<3'&!!*'#!WE''!u!!!'!!!if+r;HWos8N#frs/E"p\=dX!!3'!rrE6&!<<-$rW!-'!sADsrr;rre,TII +8,R2rqd'7$P mJd4drVl^Iq"t$iqY^!!N?-!!;ZZrVZZn!rW&r rr2Wk$i0esrW!'$!W`?'!W2p%!WW6&!!)rrroF(iq>U9i!!*'%!!)rso_nghl2M"brqH3fn,NLg !<3'&!!*'#!WE''!u!!!'!!!if+r;HWos8N#frs/E"p\=dX!!3'!rrE6&!<<-$rW!-'!sADsrr;rre,TII +8,R2rqd'7$P mJd4drVl^Iq"t$iqY^!!N?-!!;ZZrVZZn!rW&r rr2Wk$i0esrW!'$!W`?'!W2p%!WW6&!!)rrroF(iq>U9i!!*'%!!)rso_nghl2M"brqH3fn,NLg !<3'&!!*'#!WE''!u!!!'!!!if+r;HWos8N#frs/E"p\=dX!!3'!rrE6&!<<-$rW!-'!sADsrr;rre,TII +8,R2rqd'7$P i;`fU'EA%.q#1@%!WWK+!!<3)!!*'$"o\K'!<<,Gs8N#rs$6S\rr)Tjqu6BerqQ?ern#m,!!E<1 !rrW2!!3Q/"U4r0!rrT-"pFu5!LU0g!=8f-%0HVL?irVHN` ruq@U6^pA"U@!XA]-!!abGr;HQm nc'^1q>U0g!=8f-%0HVL?irVHNBs8W'>q>0pcqu6NkrZi^B+u99,!rs&< !sdW2gXFpRqtp?Ps*t~> i;`fU'EA%.q#1@%!WWK+!!<3)!!*'$"o\K'!<<,Gs8N#rs$6S\rr)Tjqu6BerqQ?ern#m,!!E<1 !rrW2!!3Q/"U4r0!rrT-"pFu5!LU0g!=8f-%0HVL?irVHN` ruq@U6^pA"U@!XA]-!!abGr;HQm nc'^1q>U0g!=8f-%0HVL?irVHNBs8W'>q>0pcqu6NkrZi^B+u99,!rs&< !sdW2gXFpRqtp?Ps*t~> i;`fU'EA%.q#1@%!WWK+!!<3)!!*'$"o\K'!<<,Gs8N#rs$6S\rr)Tjqu6BerqQ?ern#m,!!E<1 !rrW2!!3Q/"U4r0!rrT-"pFu5!LU0g!=8f-%0HVL?irVHN` ruq@U6^pA"U@!XA]-!!abGr;HQm nc'^1q>U0g!=8f-%0HVL?irVHNBs8W'>q>0pcqu6NkrZi^B+u99,!rs&< !sdW2gXFpRqtp?Ps*t~> i;`cT')h_&s#:#f!X8Z/!< !W`H+!'ND)4$Z.r5=,GU!sf#8%06J3!t,24%Do^QrqZ'^pA=gcp\FjhrY>J4!s/Q+!<<<("98E) !!N?+!!NZ#rr1jU#QXo+!<<-!s8D*[+8bp5s1emB#Qt/A"T\]*"98c5!X8`1$O-D!rr)llrUKn2 q#:9dqu,se!s8Z."U,D<"9Sl6"p=o8":5)+q=a^\rr1sX');M'qu$6fpC.-/!s/T-qY^>kA !s\f+!lMjl]]9$B~> i;`cT')h_&s#:#f!X8Z/!< !W`H+!'ND)4$Z.r5=,GU!sf#8%06J3!t,24%Do^QrqZ'^pA=gcp\FjhrY>J4!s/Q+!<<<("98E) !!N?+!!NZ#rr1jU#QXo+!<<-!s8D*[+8bp5s1emB#Qt/A"T\]*"98c5!X8`1$O-D!rr)llrUKn2 q#:9dqu,se!s8Z."U,D<"9Sl6"p=o8":5)+q=a^\rr1sX');M'qu$6fpC.-/!s/T-qY^>kA !s\f+!lMjl]]9$B~> i;`cT')h_&s#:#f!X8Z/!< !W`H+!'ND)4$Z.r5=,GU!sf#8%06J3!t,24%Do^QrqZ'^pA=gcp\FjhrY>J4!s/Q+!<<<("98E) !!N?+!!NZ#rr1jU#QXo+!<<-!s8D*[+8bp5s1emB#Qt/A"T\]*"98c5!X8`1$O-D!rr)llrUKn2 q#:9dqu,se!s8Z."U,D<"9Sl6"p=o8":5)+q=a^\rr1sX');M'qu$6fpC.-/!s/T-qY^>kA !s\f+!lMjl]]9$B~> i;`cT')h_'rUj(h"9AZ,!sSo/!W`?+rW!!#!!(4Bs8N&us8>+[p\t'ho_A@aWW<8'#6G>9$P*4C >>\@!;uQUjs7?*dq>!rp;c@'("9Ai9!rrc7"9o($YPA(lo`+^crVZZos8W)urr<0#"TJK3"p4u/ !s&B'"UG)2"T&,si;X&`!!**#!<3#slMph^+T;*5rrN33":#/8"Tnl.!WW3%"p5>8!s,D#r;-Hk rVlBf+oM<:q#BsW%0-J:!rV6 i;`cT')h_'rUj(h"9AZ,!sSo/!W`?+rW!!#!!(4Bs8N&us8>+[p\t'ho_A@aWW<8'#6G>9$P*4C >>\@!;uQUjs7?*dq>!rp;c@'("9Ai9!rrc7"9o($YPA(lo`+^crVZZos8W)urr<0#"TJK3"p4u/ !s&B'"UG)2"T&,si;X&`!!**#!<3#slMph^+T;*5rrN33":#/8"Tnl.!WW3%"p5>8!s,D#r;-Hk rVlBf+oM<:q#BsW%0-J:!rV6 i;`cT')h_'rUj(h"9AZ,!sSo/!W`?+rW!!#!!(4Bs8N&us8>+[p\t'ho_A@aWW<8'#6G>9$P*4C >>\@!;uQUjs7?*dq>!rp;c@'("9Ai9!rrc7"9o($YPA(lo`+^crVZZos8W)urr<0#"TJK3"p4u/ !s&B'"UG)2"T&,si;X&`!!**#!<3#slMph^+T;*5rrN33":#/8"Tnl.!WW3%"p5>8!s,D#r;-Hk rVlBf+oM<:q#BsW%0-J:!rV6 huE]T&cMY)q>L/*CB4P?!!iQ."98W(!!30$!6tQDrr;rsrYPJ0r:p*ZrVZMRP6V-k"U##0#6A[W F85b3-2dZ;r;6Herq?9go)JO`BQ%Yn!!`N5!!iZ."pgFhrqcQbrqcTlrr)j3rr;s!!s8T+C27[$ CM[d%!XT#1"9e]&i;X&`!!**#!<3#sli7"arr!?(q"k!n!XJi0":>9IDJK/d%rZ1d%0-S4#l+Gp rV?Klrq$.5q#C3hqXON"!s&K*"orFUCM7I)D/0O\!sK#6rVZWbrr1sX'DqM$rVQNd"9AZ.!XSu) rqu]mrVc`hs8W)tr=8`"qYp["#Qb)2$3Y-^CAquZDe]Fb!!WE/q#C-fq>^Emec5XJ*r,[-q=t!e o)JLbq=aa_r:L$fPF7R:!!WN/!WiZ(jSs`~> huE]T&cMY)q>L/*CB4P?!!iQ."98W(!!30$!6tQDrr;rsrYPJ0r:p*ZrVZMRP6V-k"U##0#6A[W F85b3-2dZ;r;6Herq?9go)JO`BQ%Yn!!`N5!!iZ."pgFhrqcQbrqcTlrr)j3rr;s!!s8T+C27[$ CM[d%!XT#1"9e]&i;X&`!!**#!<3#sli7"arr!?(q"k!n!XJi0":>9IDJK/d%rZ1d%0-S4#l+Gp rV?Klrq$.5q#C3hqXON"!s&K*"orFUCM7I)D/0O\!sK#6rVZWbrr1sX'DqM$rVQNd"9AZ.!XSu) rqu]mrVc`hs8W)tr=8`"qYp["#Qb)2$3Y-^CAquZDe]Fb!!WE/q#C-fq>^Emec5XJ*r,[-q=t!e o)JLbq=aa_r:L$fPF7R:!!WN/!WiZ(jSs`~> huE]T&cMY)q>L/*CB4P?!!iQ."98W(!!30$!6tQDrr;rsrYPJ0r:p*ZrVZMRP6V-k"U##0#6A[W F85b3-2dZ;r;6Herq?9go)JO`BQ%Yn!!`N5!!iZ."pgFhrqcQbrqcTlrr)j3rr;s!!s8T+C27[$ CM[d%!XT#1"9e]&i;X&`!!**#!<3#sli7"arr!?(q"k!n!XJi0":>9IDJK/d%rZ1d%0-S4#l+Gp rV?Klrq$.5q#C3hqXON"!s&K*"orFUCM7I)D/0O\!sK#6rVZWbrr1sX'DqM$rVQNd"9AZ.!XSu) rqu]mrVc`hs8W)tr=8`"qYp["#Qb)2$3Y-^CAquZDe]Fb!!WE/q#C-fq>^Emec5XJ*r,[-q=t!e o)JLbq=aa_r:L$fPF7R:!!WN/!WiZ(jSs`~> iVroWrr<#s&H)M*qYC$gJV!q(!s8].!Xel+!W`9$cMmqErVl`pr>>S.rV66^qYPO>"pb8<"p+l1 K7E[kqY1!fq]c"U?lrr2p"rr;rurW!H1 q>9s]s7lQk!q#C&6!Y5>8":>85s7Q?ip&+g`#QtJ9 !t"eur;-6hr;HWeruq@UU$ !sA]/KD><@r;HTmrqHHmrr;rsr$(q9p3HcN!X&W5"9SVrrVlKfrq?[$$3C;9q=smaq>^Bkrmq,L rZD%6p&"L^qYU$cq=sjbI=6HjH@>i""U+o/$3:52!WD*ZJ,~> iVroWrr<#s&H)M*qYC$gJV!q(!s8].!Xel+!W`9$cMmqErVl`pr>>S.rV66^qYPO>"pb8<"p+l1 K7E[kqY1!fq]c"U?lrr2p"rr;rurW!H1 q>9s]s7lQk!q#C&6!Y5>8":>85s7Q?ip&+g`#QtJ9 !t"eur;-6hr;HWeruq@UU$ !sA]/KD><@r;HTmrqHHmrr;rsr$(q9p3HcN!X&W5"9SVrrVlKfrq?[$$3C;9q=smaq>^Bkrmq,L rZD%6p&"L^qYU$cq=sjbI=6HjH@>i""U+o/$3:52!WD*ZJ,~> iVroWrr<#s&H)M*qYC$gJV!q(!s8].!Xel+!W`9$cMmqErVl`pr>>S.rV66^qYPO>"pb8<"p+l1 K7E[kqY1!fq]c"U?lrr2p"rr;rurW!H1 q>9s]s7lQk!q#C&6!Y5>8":>85s7Q?ip&+g`#QtJ9 !t"eur;-6hr;HWeruq@UU$ !sA]/KD><@r;HTmrqHHmrr;rsr$(q9p3HcN!X&W5"9SVrrVlKfrq?[$$3C;9q=smaq>^Bkrmq,L rZD%6p&"L^qYU$cq=sjbI=6HjH@>i""U+o/$3:52!WD*ZJ,~> iVroWrr3Z1r;HWioD84]r;)nL"p+c.!=/`*!!30$!7(TFrr)ios8rVlinrqu`jrVcKcpA=a\q#C2\TE#6#!X/Z+!+fX9qt0garr)lrrr<#t!W<&u !"K,-qu?Hks82cq#QOr.!8RS[!<<-$!!*#urTsP4rr)fnqtp6ip]q37"p"]2! iVroWrr3Z1r;HWioD84]r;)nL"p+c.!=/`*!!30$!7(TFrr)ios8rVlinrqu`jrVcKcpA=a\q#C2\TE#6#!X/Z+!+fX9qt0garr)lrrr<#t!W<&u !"K,-qu?Hks82cq#QOr.!8RS[!<<-$!!*#urTsP4rr)fnqtp6ip]q37"p"]2! iVroWrr3Z1r;HWioD84]r;)nL"p+c.!=/`*!!30$!7(TFrr)ios8rVlinrqu`jrVcKcpA=a\q#C2\TE#6#!X/Z+!+fX9qt0garr)lrrr<#t!W<&u !"K,-qu?Hks82cq#QOr.!8RS[!<<-$!!*#urTsP4rr)fnqtp6ip]q37"p"]2! iVroWrr3W0r;HZmqu6KlqYgBj[Bp#:#m1&*!W`9$c2UH9rVZTlrVZ]lqYg:c!!*B+":"o1!<;fd p\+OSr;Q]mqY^?js82flq#C3_rVZHjr:]sarVZT#!!i`0"TS]1!)!4`s8;fnrVlfqs8W'!r;llt% g2S*r;HWjrVccu!WWE*r;-EnroO.c!<<-$!!*#urTsP4rr)cmqtp6i9EY_'"onc2!!r](rV?0ar Up0n!*cX8P2VZ%g31?!!EB0!!NB0"9\`9!!36'"oRH]J,~> iVroWrr3W0r;HZmqu6KlqYgBj[Bp#:#m1&*!W`9$c2UH9rVZTlrVZ]lqYg:c!!*B+":"o1!<;fd p\+OSr;Q]mqY^?js82flq#C3_rVZHjr:]sarVZT#!!i`0"TS]1!)!4`s8;fnrVlfqs8W'!r;llt% g2S*r;HWjrVccu!WWE*r;-EnroO.c!<<-$!!*#urTsP4rr)cmqtp6i9EY_'"onc2!!r](rV?0ar Up0n!*cX8P2VZ%g31?!!EB0!!NB0"9\`9!!36'"oRH]J,~> iVroWrr3W0r;HZmqu6KlqYgBj[Bp#:#m1&*!W`9$c2UH9rVZTlrVZ]lqYg:c!!*B+":"o1!<;fd p\+OSr;Q]mqY^?js82flq#C3_rVZHjr:]sarVZT#!!i`0"TS]1!)!4`s8;fnrVlfqs8W'!r;llt% g2S*r;HWjrVccu!WWE*r;-EnroO.c!<<-$!!*#urTsP4rr)cmqtp6i9EY_'"onc2!!r](rV?0ar Up0n!*cX8P2VZ%g31?!!EB0!!NB0"9\`9!!36'"oRH]J,~> iVroWrr;us!rr9"rr*i7s8W)toZbJZ"98H&!sJc-pAP!gqYL3ks8CRL!<2ur)#F(-r9aLU2$^HhrpB^Ur:^Bq$3151 !r;?7#!"&]3#;PrHrU]sYrQGBP !X&TbrVQEdqYp?kqu,aY(B+74pG3!U!s&c0`r,c5r;HWps8N#rq>W,Ds8MfmmJc\SpBCU)!!NB( !WrN2qZ$Hbs8W#jbQ%hJ!=L[Xp&=pequ$Korr)iNs8N!=q(Xo2#QP/ iVroWrr;us!rr9"rr*i7s8W)toZbJZ"98H&!sJc-pAP!gqYL3ks8CRL!<2ur)#F(-r9aLU2$^HhrpB^Ur:^Bq$3151 !r;?7#!"&]3#;PrHrU]sYrQGBP !X&TbrVQEdqYp?kqu,aY(B+74pG3!U!s&c0`r,c5r;HWps8N#rq>W,Ds8MfmmJc\SpBCU)!!NB( !WrN2qZ$Hbs8W#jbQ%hJ!=L[Xp&=pequ$Korr)iNs8N!=q(Xo2#QP/ iVroWrr;us!rr9"rr*i7s8W)toZbJZ"98H&!sJc-pAP!gqYL3ks8CRL!<2ur)#F(-r9aLU2$^HhrpB^Ur:^Bq$3151 !r;?7#!"&]3#;PrHrU]sYrQGBP !X&TbrVQEdqYp?kqu,aY(B+74pG3!U!s&c0`r,c5r;HWps8N#rq>W,Ds8MfmmJc\SpBCU)!!NB( !WrN2qZ$Hbs8W#jbQ%hJ!=L[Xp&=pequ$Korr)iNs8N!=q(Xo2#QP/ dJjFGo_nL\jP9_=%0-S7!<)Zkr;$3gs8W&Ls8N!1rVQEdr;?@."p#26$31G:!!E<"qYpBlr;Z`o rqZQorr2p7rquTdqu6<_r7qkb!XK&3!#ke6qu$Elrql]rrW2uu!!3#t"9&8u!WL[&!<<3%!tG;;!@R[ArU]sVq#:L%"98K-p\k-]r;6Els8Mujs8W)u rVud'ptu,^!<<0,rVlNgrV@$2!rr]/%K#kurqZQmp@S@Krtk;'qt9pq!"&i8"U"_qq>:$crVlis rr2`n0)k8.rqlWerV?F!!s&B(!!<]2#luFKrr)HdnG*"e"p=o-#5A)rnGN1]s8W)sfDcog%flq9 !!`c4$3UG;"9JQ*#QY53#m(23! dJjFGo_nL\jP9_=%0-S7!<)Zkr;$3gs8W&Ls8N!1rVQEdr;?@."p#26$31G:!!E<"qYpBlr;Z`o rqZQorr2p7rquTdqu6<_r7qkb!XK&3!#ke6qu$Elrql]rrW2uu!!3#t"9&8u!WL[&!<<3%!tG;;!@R[ArU]sVq#:L%"98K-p\k-]r;6Els8Mujs8W)u rVud'ptu,^!<<0,rVlNgrV@$2!rr]/%K#kurqZQmp@S@Krtk;'qt9pq!"&i8"U"_qq>:$crVlis rr2`n0)k8.rqlWerV?F!!s&B(!!<]2#luFKrr)HdnG*"e"p=o-#5A)rnGN1]s8W)sfDcog%flq9 !!`c4$3UG;"9JQ*#QY53#m(23! dJjFGo_nL\jP9_=%0-S7!<)Zkr;$3gs8W&Ls8N!1rVQEdr;?@."p#26$31G:!!E<"qYpBlr;Z`o rqZQorr2p7rquTdqu6<_r7qkb!XK&3!#ke6qu$Elrql]rrW2uu!!3#t"9&8u!WL[&!<<3%!tG;;!@R[ArU]sVq#:L%"98K-p\k-]r;6Els8Mujs8W)u rVud'ptu,^!<<0,rVlNgrV@$2!rr]/%K#kurqZQmp@S@Krtk;'qt9pq!"&i8"U"_qq>:$crVlis rr2`n0)k8.rqlWerV?F!!s&B(!!<]2#luFKrr)HdnG*"e"p=o-#5A)rnGN1]s8W)sfDcog%flq9 !!`c4$3UG;"9JQ*#QY53#m(23! dJk$^qYpElr;QTg!!iQ)$ig)&r;-1$grr2ut q>W)Grr2igs5j%T!WWZ0"pk>2!s8Q)#Q45oo^i(Lrr<$+'EAI;o(2bUqY^Bnrr1RM+7/t,$k dJk$^qYpElr;QTg!!iQ)$ig)&r;-1$grr2ut q>W)Grr2igs5j%T!WWZ0"pk>2!s8Q)#Q45oo^i(Lrr<$+'EAI;o(2bUqY^Bnrr1RM+7/t,$k dJk$^qYpElr;QTg!!iQ)$ig)&r;-1$grr2ut q>W)Grr2igs5j%T!WWZ0"pk>2!s8Q)#Q45oo^i(Lrr<$+'EAI;o(2bUqY^Bnrr1RM+7/t,$k dJk$]o)J[Ys7uWgrr*WI#Q"Dtr;6Eks8W)OrrW3"s8N#trt#+n!WW3.#RLV/!!N]0&-2V,s8W)s r;QHjs8E#srr*T0qY^3Vs760g)uq#VrqZQkrVlfmrrN*"rVup!r;Qlts8;us!!*-!hZ!WU!W2p! rr;rbs!n$Hp\=a`s8Cs]#QP/2"<.7>%06_:$ceGgW_rWiK.!<<68#6G#:!! dJk$]o)J[Ys7uWgrr*WI#Q"Dtr;6Eks8W)OrrW3"s8N#trt#+n!WW3.#RLV/!!N]0&-2V,s8W)s r;QHjs8E#srr*T0qY^3Vs760g)uq#VrqZQkrVlfmrrN*"rVup!r;Qlts8;us!!*-!hZ!WU!W2p! rr;rbs!n$Hp\=a`s8Cs]#QP/2"<.7>%06_:$ceGgW_rWiK.!<<68#6G#:!! dJk$]o)J[Ys7uWgrr*WI#Q"Dtr;6Eks8W)OrrW3"s8N#trt#+n!WW3.#RLV/!!N]0&-2V,s8W)s r;QHjs8E#srr*T0qY^3Vs760g)uq#VrqZQkrVlfmrrN*"rVup!r;Qlts8;us!!*-!hZ!WU!W2p! rr;rbs!n$Hp\=a`s8Cs]#QP/2"<.7>%06_:$ceGgW_rWiK.!<<68#6G#:!! dJjaSrr;`jrq-0es7Q*`/FWQ:quH]Gs8Drsr=f21q#CX'!rr<3/cPeT!!!0/rVcWmrr;rr!<)Zl rVlis'(l)!oDS^bqt0h;q>U*eq>L9kq>UKp!WE'!!W;s"rVufsr;Zj!rSIPTrW2os!ri5umf+d2 qYpEfnbqtZ"9A`/#R:2*.fp.\!X[9Qs6p!boDL6M"T\Z)dd@#1qYU9l!<2Zkr;Ic7r:MZF$ip>5 _Z'E1rqc6_0FIj\'+N%Pq#1'es7>[Ys8N&ss83K/rVk1E":,54%/Betrqufqrq$.>p\Omeq!n=Q !X&N/!XK#-r[S$Z!U*Wr:g'YrU9[\r;PdWJ,~> dJjaSrr;`jrq-0es7Q*`/FWQ:quH]Gs8Drsr=f21q#CX'!rr<3/cPeT!!!0/rVcWmrr;rr!<)Zl rVlis'(l)!oDS^bqt0h;q>U*eq>L9kq>UKp!WE'!!W;s"rVufsr;Zj!rSIPTrW2os!ri5umf+d2 qYpEfnbqtZ"9A`/#R:2*.fp.\!X[9Qs6p!boDL6M"T\Z)dd@#1qYU9l!<2Zkr;Ic7r:MZF$ip>5 _Z'E1rqc6_0FIj\'+N%Pq#1'es7>[Ys8N&ss83K/rVk1E":,54%/Betrqufqrq$.>p\Omeq!n=Q !X&N/!XK#-r[S$Z!U*Wr:g'YrU9[\r;PdWJ,~> dJjaSrr;`jrq-0es7Q*`/FWQ:quH]Gs8Drsr=f21q#CX'!rr<3/cPeT!!!0/rVcWmrr;rr!<)Zl rVlis'(l)!oDS^bqt0h;q>U*eq>L9kq>UKp!WE'!!W;s"rVufsr;Zj!rSIPTrW2os!ri5umf+d2 qYpEfnbqtZ"9A`/#R:2*.fp.\!X[9Qs6p!boDL6M"T\Z)dd@#1qYU9l!<2Zkr;Ic7r:MZF$ip>5 _Z'E1rqc6_0FIj\'+N%Pq#1'es7>[Ys8N&ss83K/rVk1E":,54%/Betrqufqrq$.>p\Omeq!n=Q !X&N/!XK#-r[S$Z!U*Wr:g'YrU9[\r;PdWJ,~> dJjmWrr)`mp\t$^rUTaUqYp9fr;HWFs8Drsr"K&/\-3$<"98Qnrr)m"!s/f0rVcWmrVulr!<)Wk !<2rs%fYtkrV?Hlqt0^Rr;6Kirr2]m!WE-!!!!&trr`6"r;lis!U?iqZ?g&rW3?)p$r(Us8N#drtYP3rVZQirqZBp!X])2"Ut5*s8;ionc(6>rVZ?fq>'ph#R(29 !_3.eoa1a+$O-Y-s8)`irqQEm"9f#4#5n5mqY^Bnrr1RM*rG^7$3^E(7Rg?Gs82Zjo_S+Xq=FUY qYU0cs7Q9fj8XW~> dJjmWrr)`mp\t$^rUTaUqYp9fr;HWFs8Drsr"K&/\-3$<"98Qnrr)m"!s/f0rVcWmrVulr!<)Wk !<2rs%fYtkrV?Hlqt0^Rr;6Kirr2]m!WE-!!!!&trr`6"r;lis!U?iqZ?g&rW3?)p$r(Us8N#drtYP3rVZQirqZBp!X])2"Ut5*s8;ionc(6>rVZ?fq>'ph#R(29 !_3.eoa1a+$O-Y-s8)`irqQEm"9f#4#5n5mqY^Bnrr1RM*rG^7$3^E(7Rg?Gs82Zjo_S+Xq=FUY qYU0cs7Q9fj8XW~> dJjmWrr)`mp\t$^rUTaUqYp9fr;HWFs8Drsr"K&/\-3$<"98Qnrr)m"!s/f0rVcWmrVulr!<)Wk !<2rs%fYtkrV?Hlqt0^Rr;6Kirr2]m!WE-!!!!&trr`6"r;lis!U?iqZ?g&rW3?)p$r(Us8N#drtYP3rVZQirqZBp!X])2"Ut5*s8;ionc(6>rVZ?fq>'ph#R(29 !_3.eoa1a+$O-Y-s8)`irqQEm"9f#4#5n5mqY^Bnrr1RM*rG^7$3^E(7Rg?Gs82Zjo_S+Xq=FUY qYU0cs7Q9fj8XW~> dJjjXrqlHep&=jeqtp6drqlZkrVk=H(]OI7rqu]mrrEQ7"U5$Aqu-Et!X/c."8r/ts8W)ss8W)g rt52/qY^3fr:^$Yo_e[fp\k*jq#:Bo!WE'!!W;s"rVufsr;Zj!rSIPTrW2os!ri5umf+p8pAb$h oD>0\"98Q+#Q+ArqZI-)!X&T&qY:'[rr;q)#6G/6"ebkmqu$Korr)?drqmc1!XSl.!snc'qt0m_ qtjb%#lt24U&+6SrVucon,F.%rVZTjqu-D^%gN(?!t&B,qYg9jq>C6cs"=-@s82feqk*ol!!E?. qtg9g":"r/"9SMtq#9g_s8?=1!XJo4T`4ldr;ZfrrRh,lq"nB%CKUK4r;-Bjp\Oaap&"UXo_A=[ pA4[bs7i;djSs`~> dJjjXrqlHep&=jeqtp6drqlZkrVk=H(]OI7rqu]mrrEQ7"U5$Aqu-Et!X/c."8r/ts8W)ss8W)g rt52/qY^3fr:^$Yo_e[fp\k*jq#:Bo!WE'!!W;s"rVufsr;Zj!rSIPTrW2os!ri5umf+p8pAb$h oD>0\"98Q+#Q+ArqZI-)!X&T&qY:'[rr;q)#6G/6"ebkmqu$Korr)?drqmc1!XSl.!snc'qt0m_ qtjb%#lt24U&+6SrVucon,F.%rVZTjqu-D^%gN(?!t&B,qYg9jq>C6cs"=-@s82feqk*ol!!E?. qtg9g":"r/"9SMtq#9g_s8?=1!XJo4T`4ldr;ZfrrRh,lq"nB%CKUK4r;-Bjp\Oaap&"UXo_A=[ pA4[bs7i;djSs`~> dJjjXrqlHep&=jeqtp6drqlZkrVk=H(]OI7rqu]mrrEQ7"U5$Aqu-Et!X/c."8r/ts8W)ss8W)g rt52/qY^3fr:^$Yo_e[fp\k*jq#:Bo!WE'!!W;s"rVufsr;Zj!rSIPTrW2os!ri5umf+p8pAb$h oD>0\"98Q+#Q+ArqZI-)!X&T&qY:'[rr;q)#6G/6"ebkmqu$Korr)?drqmc1!XSl.!snc'qt0m_ qtjb%#lt24U&+6SrVucon,F.%rVZTjqu-D^%gN(?!t&B,qYg9jq>C6cs"=-@s82feqk*ol!!E?. qtg9g":"r/"9SMtq#9g_s8?=1!XJo4T`4ldr;ZfrrRh,lq"nB%CKUK4r;-Bjp\Oaap&"UXo_A=[ pA4[bs7i;djSs`~> mf3+^r;R?,s82ims8)`mrr;rqs8;oprVd9(rquTjq>L!cqYg9grRCiWrqZTmr;?GM"U"f8!-e/9 qum?+#64`,r;Q]qs8M?a"8r2qrr2g!rVlfiqu$Hn!<2`m!WE-!!!!&trr`6"r;lis! mf3+^r;R?,s82ims8)`mrr;rqs8;oprVd9(rquTjq>L!cqYg9grRCiWrqZTmr;?GM"U"f8!-e/9 qum?+#64`,r;Q]qs8M?a"8r2qrr2g!rVlfiqu$Hn!<2`m!WE-!!!!&trr`6"r;lis! mf3+^r;R?,s82ims8)`mrr;rqs8;oprVd9(rquTjq>L!cqYg9grRCiWrqZTmr;?GM"U"f8!-e/9 qum?+#64`,r;Q]qs8M?a"8r2qrr2g!rVlfiqu$Hn!<2`m!WE-!!!!&trr`6"r;lis! mf37b!<)oprr)lr&,H8"qYL6arqcWcrVZTcs8N#tr=8c(rV?3crV$6aqtg0drVlfsrn7;crqZ?f oDEb5!X8`5!;cHfr;H]s!r`3"ro*kZrr)cmr;HZpoD\jj!WE'!!W;s"rVufsr;Zj!rSIPTrW2os !ri5upAb-krVnSNp\FaZo_i\4"onl.!K?pLnbr@g#6P,5!W)Kes7Q9_rWNN5":5/.rV-9irr)lm nc'^-rqufl!"&c.!sJH!q>U*dqXt'p!!E?.E;KS1r;HB[rtbP3qYg?[qtU$a":5&2#6BVRnG`Fe q"Xmgrr)jNrqH6do^r*#"pP&4!!/&Up@8+Z":##4"TeJmr;ZHepAP4##m:P9rVcKhrr2lrq:Yci q=a^]p&=jdp\4R`qYU mf37b!<)oprr)lr&,H8"qYL6arqcWcrVZTcs8N#tr=8c(rV?3crV$6aqtg0drVlfsrn7;crqZ?f oDEb5!X8`5!;cHfr;H]s!r`3"ro*kZrr)cmr;HZpoD\jj!WE'!!W;s"rVufsr;Zj!rSIPTrW2os !ri5upAb-krVnSNp\FaZo_i\4"onl.!K?pLnbr@g#6P,5!W)Kes7Q9_rWNN5":5/.rV-9irr)lm nc'^-rqufl!"&c.!sJH!q>U*dqXt'p!!E?.E;KS1r;HB[rtbP3qYg?[qtU$a":5&2#6BVRnG`Fe q"Xmgrr)jNrqH6do^r*#"pP&4!!/&Up@8+Z":##4"TeJmr;ZHepAP4##m:P9rVcKhrr2lrq:Yci q=a^]p&=jdp\4R`qYU mf37b!<)oprr)lr&,H8"qYL6arqcWcrVZTcs8N#tr=8c(rV?3crV$6aqtg0drVlfsrn7;crqZ?f oDEb5!X8`5!;cHfr;H]s!r`3"ro*kZrr)cmr;HZpoD\jj!WE'!!W;s"rVufsr;Zj!rSIPTrW2os !ri5upAb-krVnSNp\FaZo_i\4"onl.!K?pLnbr@g#6P,5!W)Kes7Q9_rWNN5":5/.rV-9irr)lm nc'^-rqufl!"&c.!sJH!q>U*dqXt'p!!E?.E;KS1r;HB[rtbP3qYg?[qtU$a":5&2#6BVRnG`Fe q"Xmgrr)jNrqH6do^r*#"pP&4!!/&Up@8+Z":##4"TeJmr;ZHepAP4##m:P9rVcKhrr2lrq:Yci q=a^]p&=jdp\4R`qYU mf3=dqYgBl&,c(sr:Tm_p\js_rUTp_q>C6lr"/`&oCr:Vqtp6eqYU3is8W)OrtPJ(qtTsb"Tec1 !X,Ctn,*%^!<<3#!<<&XrrN,trqu`ns8MTh!WE-!!!!&trr`6"r;lis!:!]qss^anGiOe +8l-:"p4r1$N^2(q"OFYrVcd(!=8i;rVZQkqYpHmrq-4,rqHEio)JFZr!!3/"9JQ(p%JFcp\t!e p&G'ks8ObNqY'^X56qDp"p=t@q=XX_p]'db"U555#l4>lq#9sapAkEt!/+ p&+Xbp&"=Q7R9:/4Tbll"9&K(":#)8!"T&1#Q!N]J,~> mf*:drquippcoKU5sY>Bqt^4T5X.S#5XI_$5s[d757[GcqYU*bp\t-hr;Q`rrn7;hqtg$`p@e^k !:!]qss^anGiOe +8l-:"p4r1$N^2(q"OFYrVcd(!=8i;rVZQkqYpHmrq-4,rqHEio)JFZr!!3/"9JQ(p%JFcp\t!e p&G'ks8ObNqY'^X56qDp"p=t@q=XX_p]'db"U555#l4>lq#9sapAkEt!/+ p&+Xbp&"=Q7R9:/4Tbll"9&K(":#)8!"T&1#Q!N]J,~> mf*:drquippcoKU5sY>Bqt^4T5X.S#5XI_$5s[d757[GcqYU*bp\t-hr;Q`rrn7;hqtg$`p@e^k !:!]qss^anGiOe +8l-:"p4r1$N^2(q"OFYrVcd(!=8i;rVZQkqYpHmrq-4,rqHEio)JFZr!!3/"9JQ(p%JFcp\t!e p&G'ks8ObNqY'^X56qDp"p=t@q=XX_p]'db"U555#l4>lq#9sapAkEt!/+ p&+Xbp&"=Q7R9:/4Tbll"9&K(":#)8!"T&1#Q!N]J,~> n,NFes8DuqrrW0#r;[<7":"`"pAY$k$j?_5!!N9&&HMq7!sA`[/H5D:rVccqrVc`Hru(e8qYpF? #R(55!7pr?qY^9j!<<-#!!3)uiW&rWs8Dlpnc&Xh!WE'!!W;s"rVufsr;Zj!rSIPTrW2os!ri5u o`"pjrV\GLq"4:Yr;Zs$#lk&/qu-EfrqHHj!U3` pAY-lrV\GLq"4:Yr;Zs$#lk&/qu-EfrqHHj!#;5"U>&8!<<-2!=/c-#n?Cbs*t~> n,NFes8DuqrrW0#r;[<7":"`"pAY$k$j?_5!!N9&&HMq7!sA`[/H5D:rVccqrVc`Hru(e8qYpF? #R(55!7pr?qY^9j!<<-#!!3)uiW&rWs8Dlpnc&Xh!WE'!!W;s"rVufsr;Zj!rSIPTrW2os!ri5u o`"pjrV\GLq"4:Yr;Zs$#lk&/qu-EfrqHHj!U3` pAY-lrV\GLq"4:Yr;Zs$#lk&/qu-EfrqHHj!#;5"U>&8!<<-2!=/c-#n?Cbs*t~> n,NFes8DuqrrW0#r;[<7":"`"pAY$k$j?_5!!N9&&HMq7!sA`[/H5D:rVccqrVc`Hru(e8qYpF? #R(55!7pr?qY^9j!<<-#!!3)uiW&rWs8Dlpnc&Xh!WE'!!W;s"rVufsr;Zj!rSIPTrW2os!ri5u o`"pjrV\GLq"4:Yr;Zs$#lk&/qu-EfrqHHj!U3` pAY-lrV\GLq"4:Yr;Zs$#lk&/qu-EfrqHHj!#;5"U>&8!<<-2!=/c-#n?Cbs*t~> n,NFe"9&/pqu-Ws!W)j'"9AGqrr)[(!!3'!!!2rs!!<-%"ooG! n,NFe"9&/pqu-Ws!W)j'"9AGqrr)[(!!3'!!!2rs!!<-%"ooG! n,NFe"9&/pqu-Ws!W)j'"9AGqrr)[(!!3'!!!2rs!!<-%"ooG! n,F4'rVZTjq?7$*"9S]+!=&l1$2FMpqYCp*!!*9*qu@B2!!**#"9Jc-p\X1Pqu$Ems8MrLrt55( rr29b!sSf1o(`+]qYpHmr;Zp#!ri2Zs8N#rrrE&drrN*"rVup!r;Qlts8;us!!*-!hZ!WU!W2p! rr;rhrr`9!r;?Qm!qlH^rW">O!!!c,q#BmYrqZNlkSsa-#QbD-q"F^[rp]mu!!rf/!;H6\rqlZh nc'g3q>U$clM_"u!<3&-*@B!"oA@!WrE(!!E<(!!*B+$j[1Zp#Q.'~> n,F4'rVZTjq?7$*"9S]+!=&l1$2FMpqYCp*!!*9*qu@B2!!**#"9Jc-p\X1Pqu$Ems8MrLrt55( rr29b!sSf1o(`+]qYpHmr;Zp#!ri2Zs8N#rrrE&drrN*"rVup!r;Qlts8;us!!*-!hZ!WU!W2p! rr;rhrr`9!r;?Qm!qlH^rW">O!!!c,q#BmYrqZNlkSsa-#QbD-q"F^[rp]mu!!rf/!;H6\rqlZh nc'g3q>U$clM_"u!<3&-*@B!"oA@!WrE(!!E<(!!*B+$j[1Zp#Q.'~> n,F4'rVZTjq?7$*"9S]+!=&l1$2FMpqYCp*!!*9*qu@B2!!**#"9Jc-p\X1Pqu$Ems8MrLrt55( rr29b!sSf1o(`+]qYpHmr;Zp#!ri2Zs8N#rrrE&drrN*"rVup!r;Qlts8;us!!*-!hZ!WU!W2p! rr;rhrr`9!r;?Qm!qlH^rW">O!!!c,q#BmYrqZNlkSsa-#QbD-q"F^[rp]mu!!rf/!;H6\rqlZh nc'g3q>U$clM_"u!<3&-*@B!"oA@!WrE(!!E<(!!*B+$j[1Zp#Q.'~> n,EUkrVZTjq?$WsqZ$p,!<)Tiqu6X."n_j'!rrN-!;u]mr;?Nmrr2usg&DQVrUp'g$NU>6!;c]l rVc`pr;Zp#!ri2rrrE&ts8W)rs8N#ls8N#rrrE&ts8;lirrN*"rVup!r;Qlts8;us!!*-!hZ!WU !W2p!rr;rjrr`9#rr)io0E(hErSIVW$31,6+S#.(nG`C_rU'XZ!<`T.!!3&sp&=ddq>UF#!W`H, rVZ?fp[J2,r;Q`kn,E:X!!!6)#R9o"r;?Nlq>LKs#6529rqZQfqYU6irrE&ortkV0rqH*bq?-d& !! n,EUkrVZTjq?$WsqZ$p,!<)Tiqu6X."n_j'!rrN-!;u]mr;?Nmrr2usg&DQVrUp'g$NU>6!;c]l rVc`pr;Zp#!ri2rrrE&ts8W)rs8N#ls8N#rrrE&ts8;lirrN*"rVup!r;Qlts8;us!!*-!hZ!WU !W2p!rr;rjrr`9#rr)io0E(hErSIVW$31,6+S#.(nG`C_rU'XZ!<`T.!!3&sp&=ddq>UF#!W`H, rVZ?fp[J2,r;Q`kn,E:X!!!6)#R9o"r;?Nlq>LKs#6529rqZQfqYU6irrE&ortkV0rqH*bq?-d& !! n,EUkrVZTjq?$WsqZ$p,!<)Tiqu6X."n_j'!rrN-!;u]mr;?Nmrr2usg&DQVrUp'g$NU>6!;c]l rVc`pr;Zp#!ri2rrrE&ts8W)rs8N#ls8N#rrrE&ts8;lirrN*"rVup!r;Qlts8;us!!*-!hZ!WU !W2p!rr;rjrr`9#rr)io0E(hErSIVW$31,6+S#.(nG`C_rU'XZ!<`T.!!3&sp&=ddq>UF#!W`H, rVZ?fp[J2,r;Q`kn,E:X!!!6)#R9o"r;?Nlq>LKs#6529rqZQfqYU6irrE&ortkV0rqH*bq?-d& !! li7"ar;l`p"TeZ'rr2rq!!!&o!"K&1"TuX?r;QZmrVlisrn7;hrqHBa!s8f1"?l_Zrr2Ths8N*" !<<-%rr2fp!<2utrr2lrrr29ar;QEi!WE-!!!!&trr`6"r;lis! li7"ar;l`p"TeZ'rr2rq!!!&o!"K&1"TuX?r;QZmrVlisrn7;hrqHBa!s8f1"?l_Zrr2Ths8N*" !<<-%rr2fp!<2utrr2lrrr29ar;QEi!WE-!!!!&trr`6"r;lis! li7"ar;l`p"TeZ'rr2rq!!!&o!"K&1"TuX?r;QZmrVlisrn7;hrqHBa!s8f1"?l_Zrr2Ths8N*" !<<-%rr2fp!<2utrr2lrrr29ar;QEi!WE-!!!!&trr`6"r;lis! li7"ar;l`p"TeZ'rr2rq!!!&o!"K,4!=T)(r;?Hgqu-NnrRh/Mq%il7"9JZ.s8Dfgs8)TlrrE*# !!*0#rql]qrr2rsrW)urrnIGRrW2uu!!3#t"9&8u!W>S/kqsb$q!s%lbq"t!crVP[UJ,~> li7"ar;l`p"TeZ'rr2rq!!!&o!"K,4!=T)(r;?Hgqu-NnrRh/Mq%il7"9JZ.s8Dfgs8)TlrrE*# !!*0#rql]qrr2rsrW)urrnIGRrW2uu!!3#t"9&8u!W>S/kqsb$q!s%lbq"t!crVP[UJ,~> li7"ar;l`p"TeZ'rr2rq!!!&o!"K,4!=T)(r;?Hgqu-NnrRh/Mq%il7"9JZ.s8Dfgs8)TlrrE*# !!*0#rql]qrr2rsrW)urrnIGRrW2uu!!3#t"9&8u!W>S/kqsb$q!s%lbq"t!crVP[UJ,~> li7"ar;l`p"TeZ'rr2rq!!!&n!!^d$#n%%;rq$!boD8>u"U>A<"-WTXrVc`is8N!0qY:'bq3D!f"p>/4C&I`&rr2?c2?*RPm.ukM "pG)0!<;ilqt]s`qXj^\nGW=h"UbD8#5nMjqXja]pB^j+"TS`#s8MolrVlfQs8W'?q"Xss!sA]+ #Qt86s7lHiq=s[U"98Z0r:L$aqYU0hjSs`~> li7"ar;l`p"TeZ'rr2rq!!!&n!!^d$#n%%;rq$!boD8>u"U>A<"-WTXrVc`is8N!0qY:'bq3D!f"p>/4C&I`&rr2?c2?*RPm.ukM "pG)0!<;ilqt]s`qXj^\nGW=h"UbD8#5nMjqXja]pB^j+"TS`#s8MolrVlfQs8W'?q"Xss!sA]+ #Qt86s7lHiq=s[U"98Z0r:L$aqYU0hjSs`~> li7"ar;l`p"TeZ'rr2rq!!!&n!!^d$#n%%;rq$!boD8>u"U>A<"-WTXrVc`is8N!0qY:'bq3D!f"p>/4C&I`&rr2?c2?*RPm.ukM "pG)0!<;ilqt]s`qXj^\nGW=h"UbD8#5nMjqXja]pB^j+"TS`#s8MolrVlfQs8W'?q"Xss!sA]+ #Qt86s7lHiq=s[U"98Z0r:L$aqYU0hjSs`~> li7"ar;l`p"TeZ'rr2rq!!!&n!"B#5!=Af&r;?Nmrr;usg&Drgr;Q`u#Qau+qXsddrVlWmrrE*# !!*0#rqHHlr<*&sr;QZp!<2Ed#6+T"r;?Nmq#:Bo!WE'!!W;s"rVufsr;Zj!rSIPTrW2os!ri5u pAb$hrr"SF"pbG:"9Sc(q"ashs7uKcqu$*bomd2G$j6ies8;]hq#(/I!<`E*"F:%Fqtg6hrpp*h rr2j8r:tgF!s\lBI/a-Aq#($eq?dT2":>2'q#10jq#;*.rVZThqtg-f!"&f3!!`N'p]('grq$0e rr2jNp'(d-"9\f/r:p*frr;fiq"t!]rUk[E!"8u9JcGZDqY:!gLB.MY!sEoLr;6?grVk[Rs8E2p q1+(u#6"]?"U"jTL4+\up\X^f"pG2,rVHBhp&4^Is*t~> li7"ar;l`p"TeZ'rr2rq!!!&n!"B#5!=Af&r;?Nmrr;usg&Drgr;Q`u#Qau+qXsddrVlWmrrE*# !!*0#rqHHlr<*&sr;QZp!<2Ed#6+T"r;?Nmq#:Bo!WE'!!W;s"rVufsr;Zj!rSIPTrW2os!ri5u pAb$hrr"SF"pbG:"9Sc(q"ashs7uKcqu$*bomd2G$j6ies8;]hq#(/I!<`E*"F:%Fqtg6hrpp*h rr2j8r:tgF!s\lBI/a-Aq#($eq?dT2":>2'q#10jq#;*.rVZThqtg-f!"&f3!!`N'p]('grq$0e rr2jNp'(d-"9\f/r:p*frr;fiq"t!]rUk[E!"8u9JcGZDqY:!gLB.MY!sEoLr;6?grVk[Rs8E2p q1+(u#6"]?"U"jTL4+\up\X^f"pG2,rVHBhp&4^Is*t~> li7"ar;l`p"TeZ'rr2rq!!!&n!"B#5!=Af&r;?Nmrr;usg&Drgr;Q`u#Qau+qXsddrVlWmrrE*# !!*0#rqHHlr<*&sr;QZp!<2Ed#6+T"r;?Nmq#:Bo!WE'!!W;s"rVufsr;Zj!rSIPTrW2os!ri5u pAb$hrr"SF"pbG:"9Sc(q"ashs7uKcqu$*bomd2G$j6ies8;]hq#(/I!<`E*"F:%Fqtg6hrpp*h rr2j8r:tgF!s\lBI/a-Aq#($eq?dT2":>2'q#10jq#;*.rVZThqtg-f!"&f3!!`N'p]('grq$0e rr2jNp'(d-"9\f/r:p*frr;fiq"t!]rUk[E!"8u9JcGZDqY:!gLB.MY!sEoLr;6?grVk[Rs8E2p q1+(u#6"]?"U"jTL4+\up\X^f"pG2,rVHBhp&4^Is*t~> li7"ar;l`p"TeZ'rr2rq!!!&p!"/r1!s&E5s7uNhrr;usf`2!N(\nOD"onr4nbN.Vs8W#srrE*# !!*0#rqHErrVZTlr;?Qn!<;Nes8W,u#6"Jsqu$Elq>UKp!WE'!!W;s"rVufsr;Zj!rSIPTrW2os !ri5upAb-kr;ADFBF4hM!Xf.!qYp-epAFd`s8)Zjq=spo!!WK+#Q"E!q>:$_o*>Bt$3gM/r;$?h r;HTo!<2forVclsr;-EgrrX#:!XJi(qY9p\p](*r#QY2:#5\>trVlTl(&n1/qY^'_q#:=!!sAl3 R/HaWq>UBbs8N#qrA++\$3L\<$Numorq-6ar;-9iqY^6dq#1Ku"p+i2qYgHiqtg'Y#Qau5"p"W" q>U9hrVc`rro=%YrZCn2r;DqHR$@dS#6b8>"9\m?An(oH#m0qqqtU3brqb^UJ,~> li7"ar;l`p"TeZ'rr2rq!!!&p!"/r1!s&E5s7uNhrr;usf`2!N(\nOD"onr4nbN.Vs8W#srrE*# !!*0#rqHErrVZTlr;?Qn!<;Nes8W,u#6"Jsqu$Elq>UKp!WE'!!W;s"rVufsr;Zj!rSIPTrW2os !ri5upAb-kr;ADFBF4hM!Xf.!qYp-epAFd`s8)Zjq=spo!!WK+#Q"E!q>:$_o*>Bt$3gM/r;$?h r;HTo!<2forVclsr;-EgrrX#:!XJi(qY9p\p](*r#QY2:#5\>trVlTl(&n1/qY^'_q#:=!!sAl3 R/HaWq>UBbs8N#qrA++\$3L\<$Numorq-6ar;-9iqY^6dq#1Ku"p+i2qYgHiqtg'Y#Qau5"p"W" q>U9hrVc`rro=%YrZCn2r;DqHR$@dS#6b8>"9\m?An(oH#m0qqqtU3brqb^UJ,~> li7"ar;l`p"TeZ'rr2rq!!!&p!"/r1!s&E5s7uNhrr;usf`2!N(\nOD"onr4nbN.Vs8W#srrE*# !!*0#rqHErrVZTlr;?Qn!<;Nes8W,u#6"Jsqu$Elq>UKp!WE'!!W;s"rVufsr;Zj!rSIPTrW2os !ri5upAb-kr;ADFBF4hM!Xf.!qYp-epAFd`s8)Zjq=spo!!WK+#Q"E!q>:$_o*>Bt$3gM/r;$?h r;HTo!<2forVclsr;-EgrrX#:!XJi(qY9p\p](*r#QY2:#5\>trVlTl(&n1/qY^'_q#:=!!sAl3 R/HaWq>UBbs8N#qrA++\$3L\<$Numorq-6ar;-9iqY^6dq#1Ku"p+i2qYgHiqtg'Y#Qau5"p"W" q>U9hrVc`rro=%YrZCn2r;DqHR$@dS#6b8>"9\m?An(oH#m0qqqtU3brqb^UJ,~> li7"ar;l`p"TeZ'rr2rq!!!&p!"0&4!<`i:rq?3drr;usfDc]ep]h'4&-N(/rq?3es8)cq!<<-# !lp&=mZq5=E/!sf$( qY'pcr;HTo!<2$Ys8F,8qYgEjo`+fhYc>%6!s8N7!!r],"UG3':Ajnar9sXGs*t~> li7"ar;l`p"TeZ'rr2rq!!!&p!"0&4!<`i:rq?3drr;usfDc]ep]h'4&-N(/rq?3es8)cq!<<-# !lp&=mZq5=E/!sf$( qY'pcr;HTo!<2$Ys8F,8qYgEjo`+fhYc>%6!s8N7!!r],"UG3':Ajnar9sXGs*t~> li7"ar;l`p"TeZ'rr2rq!!!&p!"0&4!<`i:rq?3drr;usfDc]ep]h'4&-N(/rq?3es8)cq!<<-# !lp&=mZq5=E/!sf$( qY'pcr;HTo!<2$Ys8F,8qYgEjo`+fhYc>%6!s8N7!!r],"UG3':Ajnar9sXGs*t~> li7"ar;l`p"TeZ'rr2rq!!!&p!"/f6!!39.rqZEgrr;usf`)igp&,-s"U,,?q=FO]rq$'frrE*# !!*0#rqQKorr)ios8N&s!W;obrr2isrr)iq!rMoprVllsrr3#u!WE'!!W;s"rVufsr;Zj!rSIPT rW2os!ri5up&G'ks8Drp1A(\K"9SW)a8>l5qtg9hqu$Emp\t$erQ##0!ri,urqucrrr2p4rquWg rUg*e![11 s*t~> li7"ar;l`p"TeZ'rr2rq!!!&p!"/f6!!39.rqZEgrr;usf`)igp&,-s"U,,?q=FO]rq$'frrE*# !!*0#rqQKorr)ios8N&s!W;obrr2isrr)iq!rMoprVllsrr3#u!WE'!!W;s"rVufsr;Zj!rSIPT rW2os!ri5up&G'ks8Drp1A(\K"9SW)a8>l5qtg9hqu$Emp\t$erQ##0!ri,urqucrrr2p4rquWg rUg*e![11 s*t~> li7"ar;l`p"TeZ'rr2rq!!!&p!"/f6!!39.rqZEgrr;usf`)igp&,-s"U,,?q=FO]rq$'frrE*# !!*0#rqQKorr)ios8N&s!W;obrr2isrr)iq!rMoprVllsrr3#u!WE'!!W;s"rVufsr;Zj!rSIPT rW2os!ri5up&G'ks8Drp1A(\K"9SW)a8>l5qtg9hqu$Emp\t$erQ##0!ri,urqucrrr2p4rquWg rUg*e![11 s*t~> li7"ap#5rNrr2oU(#\!-i8*>l!1-k !<<-#!U3hqXOR\qYpElr;HWo&,?2!qu$Elrr<#ts8N#r !WE'*!WN,ur;Zcpr;lis! qu$?irVcg"$ighApA4gfp%nR]!s&B(#m)RSpA+^`s8Dp3rVZNfrq?!%.UCq>9p`o\ocL +pe5irr)Whs82Tkrr;upqu-Nnr:9_*!XAu2!Wh9Yr;-EerVc]oq>V0,s8MfhrUp.9!(!hrr!rrpopbp&=mdrr)io rVZHji8!>JecZ!V#m(81+T(7"J,~> li7"ap#5rNrr2oU(#\!-i8*>l!1-k !<<-#!U3hqXOR\qYpElr;HWo&,?2!qu$Elrr<#ts8N#r !WE'*!WN,ur;Zcpr;lis! qu$?irVcg"$ighApA4gfp%nR]!s&B(#m)RSpA+^`s8Dp3rVZNfrq?!%.UCq>9p`o\ocL +pe5irr)Whs82Tkrr;upqu-Nnr:9_*!XAu2!Wh9Yr;-EerVc]oq>V0,s8MfhrUp.9!(!hrr!rrpopbp&=mdrr)io rVZHji8!>JecZ!V#m(81+T(7"J,~> li7"ap#5rNrr2oU(#\!-i8*>l!1-k !<<-#!U3hqXOR\qYpElr;HWo&,?2!qu$Elrr<#ts8N#r !WE'*!WN,ur;Zcpr;lis! qu$?irVcg"$ighApA4gfp%nR]!s&B(#m)RSpA+^`s8Dp3rVZNfrq?!%.UCq>9p`o\ocL +pe5irr)Whs82Tkrr;upqu-Nnr:9_*!XAu2!Wh9Yr;-EerVc]oq>V0,s8MfhrUp.9!(!hrr!rrpopbp&=mdrr)io rVZHji8!>JecZ!V#m(81+T(7"J,~> g&D'Orr3Z1r;HTas5<\Q!"B#2!<<0$!<2uFru(h/rW3'/!!)uso`+d^rqcZp!<<-#!/r;HWorVuos!W<&t!!rT(rql`qrqulr !!*-!hZ!WU!W2p!rr;rjs#L)WpAY'arpC$n!!!T2!<2rnq>UEnrVlisrVZQjr;HN_!rri7!#PY. q=O[cp%JFd#6=u0qtp?jqu6Ek!<2ut"TJ>qq=jma!#GP61CO9_qt^!co`"7Y#QP)0!rDioqt0mc n,E@dqtp?jqu6Td$4[%@!!!*!o`"FUrqu]mrVc`ks#L)WpAY'arpC$n!!!T2!<2rnq>UEnrVlis rVZQjr;HN_!rri7!#PY.q=O[cp%JFd#6=u0qtp?jqu5XUs8F,9qu6Nmj6cmAq>1!cqYBpco(W"N rr2NXo^`%b!!rSbs*t~> g&D'Orr3Z1r;HTas5<\Q!"B#2!<<0$!<2uFru(h/rW3'/!!)uso`+d^rqcZp!<<-#!/r;HWorVuos!W<&t!!rT(rql`qrqulr !!*-!hZ!WU!W2p!rr;rjs#L)WpAY'arpC$n!!!T2!<2rnq>UEnrVlisrVZQjr;HN_!rri7!#PY. q=O[cp%JFd#6=u0qtp?jqu6Ek!<2ut"TJ>qq=jma!#GP61CO9_qt^!co`"7Y#QP)0!rDioqt0mc n,E@dqtp?jqu6Td$4[%@!!!*!o`"FUrqu]mrVc`ks#L)WpAY'arpC$n!!!T2!<2rnq>UEnrVlis rVZQjr;HN_!rri7!#PY.q=O[cp%JFd#6=u0qtp?jqu5XUs8F,9qu6Nmj6cmAq>1!cqYBpco(W"N rr2NXo^`%b!!rSbs*t~> g&D'Orr3Z1r;HTas5<\Q!"B#2!<<0$!<2uFru(h/rW3'/!!)uso`+d^rqcZp!<<-#!/r;HWorVuos!W<&t!!rT(rql`qrqulr !!*-!hZ!WU!W2p!rr;rjs#L)WpAY'arpC$n!!!T2!<2rnq>UEnrVlisrVZQjr;HN_!rri7!#PY. q=O[cp%JFd#6=u0qtp?jqu6Ek!<2ut"TJ>qq=jma!#GP61CO9_qt^!co`"7Y#QP)0!rDioqt0mc n,E@dqtp?jqu6Td$4[%@!!!*!o`"FUrqu]mrVc`ks#L)WpAY'arpC$n!!!T2!<2rnq>UEnrVlis rVZQjr;HN_!rri7!#PY.q=O[cp%JFd#6=u0qtp?jqu5XUs8F,9qu6Nmj6cmAq>1!cqYBpco(W"N rr2NXo^`%b!!rSbs*t~> f)GdMr;QR(rqu]]rW*$(!WiB(!!*#tdJk*`oDK(*!!!Q1pAOdbq#:9mrrE*#!!*0#rqcX$rVlE[ p]1a'!sAE#)?^$A!Wrc1!!!W3!"/c1!WWE>!!!c9r;?NmrVuoss8NN0!V, r;d6+!! f)GdMr;QR(rqu]]rW*$(!WiB(!!*#tdJk*`oDK(*!!!Q1pAOdbq#:9mrrE*#!!*0#rqcX$rVlE[ p]1a'!sAE#)?^$A!Wrc1!!!W3!"/c1!WWE>!!!c9r;?NmrVuoss8NN0!V, r;d6+!! f)GdMr;QR(rqu]]rW*$(!WiB(!!*#tdJk*`oDK(*!!!Q1pAOdbq#:9mrrE*#!!*0#rqcX$rVlE[ p]1a'!sAE#)?^$A!Wrc1!!!W3!"/c1!WWE>!!!c9r;?NmrVuoss8NN0!V, r;d6+!! f)GdMr;QR(qYfLSpAbU%!WiB(!!*#sdJjRLrUBjh"UP51rqZQl$i]o#rrE*#!!*0#rql^)rq$0h rV.$,!!33%!!3'#)?BgB!!395#m()-#m125!WiB&!rrE)r;HWorVuoss8NN1!W`9$r;Q]nrr;ur !W f)GdMr;QR(qYfLSpAbU%!WiB(!!*#sdJjRLrUBjh"UP51rqZQl$i]o#rrE*#!!*0#rql^)rq$0h rV.$,!!33%!!3'#)?BgB!!395#m()-#m125!WiB&!rrE)r;HWorVuoss8NN1!W`9$r;Q]nrr;ur !W f)GdMr;QR(qYfLSpAbU%!WiB(!!*#sdJjRLrUBjh"UP51rqZQl$i]o#rrE*#!!*0#rql^)rq$0h rV.$,!!33%!!3'#)?BgB!!395#m()-#m125!WiB&!rrE)r;HWorVuoss8NN1!W`9$r;Q]nrr;ur !W f)GdMr;QR(rr)lomKEXp!s/K)!!*#sdJk*]q>UF'!=8o0qtKsbp\FggrrE*#!!*0#rql^'rqucn q"t.!!sJi/qu@T?![l3!!3<0q#V$."T\T/!s/l9!X&N6"2!UnJ,~> f)GdMr;QR(rr)lomKEXp!s/K)!!*#sdJk*]q>UF'!=8o0qtKsbp\FggrrE*#!!*0#rql^'rqucn q"t.!!sJi/qu@T?![l3!!3<0q#V$."T\T/!s/l9!X&N6"2!UnJ,~> f)GdMr;QR(rr)lomKEXp!s/K)!!*#sdJk*]q>UF'!=8o0qtKsbp\FggrrE*#!!*0#rql^'rqucn q"t.!!sJi/qu@T?![l3!!3<0q#V$."T\T/!s/l9!X&N6"2!UnJ,~> g&Dlfs8W)rqu$Bgqtg*b"oo&8"9Sc-!WW/Hru(_5rrN?+#7U_.qt'^aqYUUd! qYp:m?!1H>>l7b/>?Y3;"p"W+%guKG='/^4@g*&;!rrK'rqcZprXSl-!WrK,qYC-is8Mrp!W5/$cqYpNprr<#tq>V9.s8$%("98T+V"FBMr;Z`m r;Zs(!WW?#rpKeFo_A@XrVZj(!X/i7rqu?eq>^Bi!XB#5!s8DqnbN"Yr;HNfq>C6kqZ6j(#6>&1 r:]g_qtg?krVulr!<)`n(]O4/qu?Bl!so5<"BtR!nG<.as8N&urqZR1qu?M!!sAT-!MoA]nGN=b qu$Kt"TeZ+r;PXSs8E9!rW g&Dlfs8W)rqu$Bgqtg*b"oo&8"9Sc-!WW/Hru(_5rrN?+#7U_.qt'^aqYUUd! qYp:m?!1H>>l7b/>?Y3;"p"W+%guKG='/^4@g*&;!rrK'rqcZprXSl-!WrK,qYC-is8Mrp!W5/$cqYpNprr<#tq>V9.s8$%("98T+V"FBMr;Z`m r;Zs(!WW?#rpKeFo_A@XrVZj(!X/i7rqu?eq>^Bi!XB#5!s8DqnbN"Yr;HNfq>C6kqZ6j(#6>&1 r:]g_qtg?krVulr!<)`n(]O4/qu?Bl!so5<"BtR!nG<.as8N&urqZR1qu?M!!sAT-!MoA]nGN=b qu$Kt"TeZ+r;PXSs8E9!rW g&Dlfs8W)rqu$Bgqtg*b"oo&8"9Sc-!WW/Hru(_5rrN?+#7U_.qt'^aqYUUd! qYp:m?!1H>>l7b/>?Y3;"p"W+%guKG='/^4@g*&;!rrK'rqcZprXSl-!WrK,qYC-is8Mrp!W5/$cqYpNprr<#tq>V9.s8$%("98T+V"FBMr;Z`m r;Zs(!WW?#rpKeFo_A@XrVZj(!X/i7rqu?eq>^Bi!XB#5!s8DqnbN"Yr;HNfq>C6kqZ6j(#6>&1 r:]g_qtg?krVulr!<)`n(]O4/qu?Bl!so5<"BtR!nG<.as8N&urqZR1qu?M!!sAT-!MoA]nGN=b qu$Kt"TeZ+r;PXSs8E9!rW g&D'Orr3Z1r;HThs7cNg"98H*"9S`+!<2rEru(e7qK)i@$igD#rV?BjrVHQo!<<-#!Np\OgdqtU!brr.iV"pG,2 !-J,,s82cpqu$HmrVuosq>^Hm%f,gW!X8Z3$jQ\,p]($er;ZfrqYqN2qtU-n"U5/6!<)`iqYC*f qum-'!s/T%qu-NOs8W''q>G8]Ec,o>q/QIXrGi5G!!N?*!!E9%#Q*T^J,~> g&D'Orr3Z1r;HThs7cNg"98H*"9S`+!<2rEru(e7qK)i@$igD#rV?BjrVHQo!<<-#!Np\OgdqtU!brr.iV"pG,2 !-J,,s82cpqu$HmrVuosq>^Hm%f,gW!X8Z3$jQ\,p]($er;ZfrqYqN2qtU-n"U5/6!<)`iqYC*f qum-'!s/T%qu-NOs8W''q>G8]Ec,o>q/QIXrGi5G!!N?*!!E9%#Q*T^J,~> g&D'Orr3Z1r;HThs7cNg"98H*"9S`+!<2rEru(e7qK)i@$igD#rV?BjrVHQo!<<-#!Np\OgdqtU!brr.iV"pG,2 !-J,,s82cpqu$HmrVuosq>^Hm%f,gW!X8Z3$jQ\,p]($er;ZfrqYqN2qtU-n"U5/6!<)`iqYC*f qum-'!s/T%qu-NOs8W''q>G8]Ec,o>q/QIXrGi5G!!N?*!!E9%#Q*T^J,~> g&D'Orr;rr&,cJ,rquit!W`<%!<<-!rmCcGr"o5*"Tnf-"T/,mqYp3grr)lt!W`<%rr2fp.Js,B rr)Ngqtg3frVlirrVc`nr;?]u!W`H)qtp0cqYU3k#QXu.!WN)qs8W$.rquj!!s/Jup](6jrVl`r r;Zj!rTX@]rr)j%rr)fqq#CO!rW!$!s8DZks83K*s7HTu!!rV?Kgr/C[\#6P*Mqtg6fs826q"sm]rVlp,"Tei.qXjg^ qYp9er;HKgrW39*#QOo+s8Dlpqu-Qls8N#hs8W!/qZ$3n!WW<0!!W<"q"spdrr2oss8Mios8!]6 M#[qa"oroIqYg6iq#$*O"pY55F8Ph3qu?QQrsSi(pAFjfr;$'bs8W&ss8W,t"oJ g&D'Orr;rr&,cJ,rquit!W`<%!<<-!rmCcGr"o5*"Tnf-"T/,mqYp3grr)lt!W`<%rr2fp.Js,B rr)Ngqtg3frVlirrVc`nr;?]u!W`H)qtp0cqYU3k#QXu.!WN)qs8W$.rquj!!s/Jup](6jrVl`r r;Zj!rTX@]rr)j%rr)fqq#CO!rW!$!s8DZks83K*s7HTu!!rV?Kgr/C[\#6P*Mqtg6fs826q"sm]rVlp,"Tei.qXjg^ qYp9er;HKgrW39*#QOo+s8Dlpqu-Qls8N#hs8W!/qZ$3n!WW<0!!W<"q"spdrr2oss8Mios8!]6 M#[qa"oroIqYg6iq#$*O"pY55F8Ph3qu?QQrsSi(pAFjfr;$'bs8W&ss8W,t"oJ g&D'Orr;rr&,cJ,rquit!W`<%!<<-!rmCcGr"o5*"Tnf-"T/,mqYp3grr)lt!W`<%rr2fp.Js,B rr)Ngqtg3frVlirrVc`nr;?]u!W`H)qtp0cqYU3k#QXu.!WN)qs8W$.rquj!!s/Jup](6jrVl`r r;Zj!rTX@]rr)j%rr)fqq#CO!rW!$!s8DZks83K*s7HTu!!rV?Kgr/C[\#6P*Mqtg6fs826q"sm]rVlp,"Tei.qXjg^ qYp9er;HKgrW39*#QOo+s8Dlpqu-Qls8N#hs8W!/qZ$3n!WW<0!!W<"q"spdrr2oss8Mios8!]6 M#[qa"oroIqYg6iq#$*O"pY55F8Ph3qu?QQrsSi(pAFjfr;$'bs8W&ss8W,t"oJ dJjINs8N&s!WW<$!!30$!71ZJr;HKf$N0u:A,5lpqtg?lrVup"!U!r*9I6"pY24UAaQZrqufps8N&uq>MK/q#1*g#7^_C!t"i&oD8@\ rVQX'"9SZ*rq?C3\s8VsLrq--c!!NW2!W`)roDJ1Wr;?Wt$3pY9rU^!er;?Hiqu?TkqZ-m' !seq&o_nafm/IRnrq61p"UbM>!X,7rn,<7`s8Duss8Voo+8,F-qu$a0!"B#:qYg$^qtg9h!"/o3 ! dJjINs8N&s!WW<$!!30$!71ZJr;HKf$N0u:A,5lpqtg?lrVup"!U!r*9I6"pY24UAaQZrqufps8N&uq>MK/q#1*g#7^_C!t"i&oD8@\ rVQX'"9SZ*rq?C3\s8VsLrq--c!!NW2!W`)roDJ1Wr;?Wt$3pY9rU^!er;?Hiqu?TkqZ-m' !seq&o_nafm/IRnrq61p"UbM>!X,7rn,<7`s8Duss8Voo+8,F-qu$a0!"B#:qYg$^qtg9h!"/o3 ! dJjINs8N&s!WW<$!!30$!71ZJr;HKf$N0u:A,5lpqtg?lrVup"!U!r*9I6"pY24UAaQZrqufps8N&uq>MK/q#1*g#7^_C!t"i&oD8@\ rVQX'"9SZ*rq?C3\s8VsLrq--c!!NW2!W`)roDJ1Wr;?Wt$3pY9rU^!er;?Hiqu?TkqZ-m' !seq&o_nafm/IRnrq61p"UbM>!X,7rn,<7`s8Duss8Voo+8,F-qu$a0!"B#:qYg$^qtg9h!"/o3 ! dJjINs8N&s!WW<$!!30$!71Z_q#C6a!t5/5#R()&rr)Zjs8N'!!<<-$rr2`n-iX)Bqtg0fr;?Nm s8W)ts8Doo!W`E+!s&>rrVHEhr;cm!!!*0#rqcZprXSi,!UEk*W>j6!X&f4"pb)%qY0manFF0n% g2n97/ZWRqY0jVs"aTPp@S7Op:CD2!!iiro_\[arVZE%"Tnl:!CQPXq"=UWqu-Hmo0r]f!=Ju5q >1'grp9Xrrq$$Y&-W1E!X&_ts7lEcrVZZps7uZoq]5Y3rW33/"9o,/q>0j_qsa0g!tPM8"@W1Yr ;-0akPkP]rr3<(rUB^\qtKsbpA"Uiqu-6b#6"T&!W2rXs*t~> dJjINs8N&s!WW<$!!30$!71Z_q#C6a!t5/5#R()&rr)Zjs8N'!!<<-$rr2`n-iX)Bqtg0fr;?Nm s8W)ts8Doo!W`E+!s&>rrVHEhr;cm!!!*0#rqcZprXSi,!UEk*W>j6!X&f4"pb)%qY0manFF0n% g2n97/ZWRqY0jVs"aTPp@S7Op:CD2!!iiro_\[arVZE%"Tnl:!CQPXq"=UWqu-Hmo0r]f!=Ju5q >1'grp9Xrrq$$Y&-W1E!X&_ts7lEcrVZZps7uZoq]5Y3rW33/"9o,/q>0j_qsa0g!tPM8"@W1Yr ;-0akPkP]rr3<(rUB^\qtKsbpA"Uiqu-6b#6"T&!W2rXs*t~> dJjINs8N&s!WW<$!!30$!71Z_q#C6a!t5/5#R()&rr)Zjs8N'!!<<-$rr2`n-iX)Bqtg0fr;?Nm s8W)ts8Doo!W`E+!s&>rrVHEhr;cm!!!*0#rqcZprXSi,!UEk*W>j6!X&f4"pb)%qY0manFF0n% g2n97/ZWRqY0jVs"aTPp@S7Op:CD2!!iiro_\[arVZE%"Tnl:!CQPXq"=UWqu-Hmo0r]f!=Ju5q >1'grp9Xrrq$$Y&-W1E!X&_ts7lEcrVZZps7uZoq]5Y3rW33/"9o,/q>0j_qsa0g!tPM8"@W1Yr ;-0akPkP]rr3<(rUB^\qtKsbpA"Uiqu-6b#6"T&!W2rXs*t~> dJjINs8N&s!WW<$!!30$!71Z_rUp-X%KZh8!=8Aoqt^3ds8N'!!<<-%rr2`n$3'o$r;6BirVZWn s8W'8s8Drp!W`B)!s&AtrqcNirW*!"!!*0#rqcZpr=8])!1$T!!LC%"Tn`*rVZWlqu$HfqYU0k! s/H("9JAprVc`bs8N!/s7uTfquZs"!X01`r;H9dr;?NmrqZL7o`"U[s3h)P!!rZ]rV$3`rq63e! !CWkr:U$a!!NK*!W2rXs*t~> dJjINs8N&s!WW<$!!30$!71Z_rUp-X%KZh8!=8Aoqt^3ds8N'!!<<-%rr2`n$3'o$r;6BirVZWn s8W'8s8Drp!W`B)!s&AtrqcNirW*!"!!*0#rqcZpr=8])!1$T!!LC%"Tn`*rVZWlqu$HfqYU0k! s/H("9JAprVc`bs8N!/s7uTfquZs"!X01`r;H9dr;?NmrqZL7o`"U[s3h)P!!rZ]rV$3`rq63e! !CWkr:U$a!!NK*!W2rXs*t~> dJjINs8N&s!WW<$!!30$!71Z_rUp-X%KZh8!=8Aoqt^3ds8N'!!<<-%rr2`n$3'o$r;6BirVZWn s8W'8s8Drp!W`B)!s&AtrqcNirW*!"!!*0#rqcZpr=8])!1$T!!LC%"Tn`*rVZWlqu$HfqYU0k! s/H("9JAprVc`bs8N!/s7uTfquZs"!X01`r;H9dr;?NmrqZL7o`"U[s3h)P!!rZ]rV$3`rq63e! !CWkr:U$a!!NK*!W2rXs*t~> dJjINs8N&s!WW<$!!30$!71Z_qYp'ali7Lq#lkb%g)e8',hN#',UQ\p(\Vb'-/,-* dJjINs8N&s!WW<$!!30$!71Z_qYp'ali7Lq#lkb%g)e8',hN#',UQ\p(\Vb'-/,-* dJjINs8N&s!WW<$!!30$!71Z_qYp'ali7Lq#lkb%g)e8',hN#',UQ\p(\Vb'-/,-* dJjINs8N&s!WW<$!!30$!71Z_rVQWfkQ_:n!"B#/p%n=[qu-Wt!<<*$rr2Hfs8N#ts8E6&rr;ou !!3'!#QO`%rr;ut!W6!ri6!s8W)ts8W&oqY^Bkq"b"&"TSo<"TSi7!Ug$g![.^I$NLA?!!rW/!;ZKjrVl]lrW3'(% 0Qb3rqlNjrVc`pp&?E;rq6!_s8M`i!^s'!!<6/r Up0g!<2Wj(&n75rVHBgs8;Zg!>#D7$O[+<#m^S#!<3*D"TSo1"q:P=!!NAuqYpHmqu$Ep!!Wl8! ri2rq>U?krr26`!<2ut#laesrq6Kq!Xn`&#S.(=!< dJjINs8N&s!WW<$!!30$!71Z_rVQWfkQ_:n!"B#/p%n=[qu-Wt!<<*$rr2Hfs8N#ts8E6&rr;ou !!3'!#QO`%rr;ut!W6!ri6!s8W)ts8W&oqY^Bkq"b"&"TSo<"TSi7!Ug$g![.^I$NLA?!!rW/!;ZKjrVl]lrW3'(% 0Qb3rqlNjrVc`pp&?E;rq6!_s8M`i!^s'!!<6/r Up0g!<2Wj(&n75rVHBgs8;Zg!>#D7$O[+<#m^S#!<3*D"TSo1"q:P=!!NAuqYpHmqu$Ep!!Wl8! ri2rq>U?krr26`!<2ut#laesrq6Kq!Xn`&#S.(=!< dJjINs8N&s!WW<$!!30$!71Z_rVQWfkQ_:n!"B#/p%n=[qu-Wt!<<*$rr2Hfs8N#ts8E6&rr;ou !!3'!#QO`%rr;ut!W6!ri6!s8W)ts8W&oqY^Bkq"b"&"TSo<"TSi7!Ug$g![.^I$NLA?!!rW/!;ZKjrVl]lrW3'(% 0Qb3rqlNjrVc`pp&?E;rq6!_s8M`i!^s'!!<6/r Up0g!<2Wj(&n75rVHBgs8;Zg!>#D7$O[+<#m^S#!<3*D"TSo1"q:P=!!NAuqYpHmqu$Ep!!Wl8! ri2rq>U?krr26`!<2ut#laesrq6Kq!Xn`&#S.(=!< dJjINs8N&s!WW<$!!30$!71ZSrVlforuM.I$3C=`rr2on#lXo-!WW3$rr2Wkrr2rts8N#ts8E6& rr;ou!!3'!#QOc&rVlis!WQ&R!!`]1rr;uts8N#ts8Dfir;Z]\!!303$31&,#6Y&.&-)_3qZ-En*s2NL!s&T-#m127!sn]% qY^!_rTPa6"9JQ+iV!-Ip\t-krq6:Gp&Fshs8Dcd-NjSS!!_'SoCr7_s7uWo#QOi-#k\)op\+UX ":kM;$k!(0rU^$erVlHh)?0[9rVH?fs8;0_!W`f=!!!$)"9AN7!!*,t!;Q[ dJjINs8N&s!WW<$!!30$!71ZSrVlforuM.I$3C=`rr2on#lXo-!WW3$rr2Wkrr2rts8N#ts8E6& rr;ou!!3'!#QOc&rVlis!WQ&R!!`]1rr;uts8N#ts8Dfir;Z]\!!303$31&,#6Y&.&-)_3qZ-En*s2NL!s&T-#m127!sn]% qY^!_rTPa6"9JQ+iV!-Ip\t-krq6:Gp&Fshs8Dcd-NjSS!!_'SoCr7_s7uWo#QOi-#k\)op\+UX ":kM;$k!(0rU^$erVlHh)?0[9rVH?fs8;0_!W`f=!!!$)"9AN7!!*,t!;Q[ dJjINs8N&s!WW<$!!30$!71ZSrVlforuM.I$3C=`rr2on#lXo-!WW3$rr2Wkrr2rts8N#ts8E6& rr;ou!!3'!#QOc&rVlis!WQ&R!!`]1rr;uts8N#ts8Dfir;Z]\!!303$31&,#6Y&.&-)_3qZ-En*s2NL!s&T-#m127!sn]% qY^!_rTPa6"9JQ+iV!-Ip\t-krq6:Gp&Fshs8Dcd-NjSS!!_'SoCr7_s7uWo#QOi-#k\)op\+UX ":kM;$k!(0rU^$erVlHh)?0[9rVH?fs8;0_!W`f=!!!$)"9AN7!!*,t!;Q[ dJjINs8N&s!WW<$!!30$!71Z_r;-9es8<'#"9JZ0`;'B)qYgU!!WW3$rr2Wkrr2rt!<2rss8El8 rr;ou!!*'#!<;usrVZZo! dJjINs8N&s!WW<$!!30$!71Z_r;-9es8<'#"9JZ0`;'B)qYgU!!WW3$rr2Wkrr2rt!<2rss8El8 rr;ou!!*'#!<;usrVZZo! dJjINs8N&s!WW<$!!30$!71Z_r;-9es8<'#"9JZ0`;'B)qYgU!!WW3$rr2Wkrr2rt!<2rss8El8 rr;ou!!*'#!<;usrVZZo! dJjINs8N&s!WW<$!!30$!71Z_q#C4t!Wrc-r:p0ds8;X'!!EE/ "0__%rVZNgrVuospAb0ls8Duq-MmX7#6Y/8!4MY"q=s^^r(R.m!sSk4s8)BdqQL)&"9no8qY^-d rVccqpAY["r;$'`rV-3cZN179!s/N&9`Rre:%:n(:/"DU:eOSX! dJjINs8N&s!WW<$!!30$!71Z_q#C4t!Wrc-r:p0ds8;X'!!EE/ "0__%rVZNgrVuospAb0ls8Duq-MmX7#6Y/8!4MY"q=s^^r(R.m!sSk4s8)BdqQL)&"9no8qY^-d rVccqpAY["r;$'`rV-3cZN179!s/N&9`Rre:%:n(:/"DU:eOSX! dJjINs8N&s!WW<$!!30$!71Z_q#C4t!Wrc-r:p0ds8;X'!!EE/ "0__%rVZNgrVuospAb0ls8Duq-MmX7#6Y/8!4MY"q=s^^r(R.m!sSk4s8)BdqQL)&"9no8qY^-d rVccqpAY["r;$'`rV-3cZN179!s/N&9`Rre:%:n(:/"DU:eOSX! dJjINs8N&s!WW<$!!30$!71]Frr;g0p\FUh!<1F(!!*<,rr26`)?0[8s8KgTr;-0n!=Al/!WN)qrt5/'s82fs"U>)3!;lBequ$Bnr;Zj!rT4&,rr)clp@n7^!XAl0"Rl?g q"jjcqtBpepA4OXq@!B3#6Y&4qu$ElrVuBds8;rprVR^I"pFu5!hK5cpAasdqdp'>%fce;qtg3g qYU9ls8Mfnrr2oqs84DC,%#71n@"pOo#qu-Bg rr<#tlMpn`#QOB""T\u:!V$0i!X/Z3!< dJjINs8N&s!WW<$!!30$!71]Frr;g0p\FUh!<1F(!!*<,rr26`)?0[8s8KgTr;-0n!=Al/!WN)qrt5/'s82fs"U>)3!;lBequ$Bnr;Zj!rT4&,rr)clp@n7^!XAl0"Rl?g q"jjcqtBpepA4OXq@!B3#6Y&4qu$ElrVuBds8;rprVR^I"pFu5!hK5cpAasdqdp'>%fce;qtg3g qYU9ls8Mfnrr2oqs84DC,%#71n@"pOo#qu-Bg rr<#tlMpn`#QOB""T\u:!V$0i!X/Z3!< dJjINs8N&s!WW<$!!30$!71]Frr;g0p\FUh!<1F(!!*<,rr26`)?0[8s8KgTr;-0n!=Al/!WN)qrt5/'s82fs"U>)3!;lBequ$Bnr;Zj!rT4&,rr)clp@n7^!XAl0"Rl?g q"jjcqtBpepA4OXq@!B3#6Y&4qu$ElrVuBds8;rprVR^I"pFu5!hK5cpAasdqdp'>%fce;qtg3g qYU9ls8Mfnrr2oqs84DC,%#71n@"pOo#qu-Bg rr<#tlMpn`#QOB""T\u:!V$0i!X/Z3!< dJjINs8N&s!WW<$!!30$!71ZYq>U3]qYg&9!W`T/$j(tUnc&surW!!(rr26`)ZKd9s8L0hr9mbrUKa[I0T`X#QfMRp@a"r;H0b,5qQ?s7uWirqup&!s8Z1rUfj_p\X^Z#mC_?#7(/!s8Mro rr2utlMpn`#Pe*!"TeZ5"7Z?r"9SZ*!X&Z(jSs`~> dJjINs8N&s!WW<$!!30$!71ZYq>U3]qYg&9!W`T/$j(tUnc&surW!!(rr26`)ZKd9s8L0hr9mbrUKa[I0T`X#QfMRp@a"r;H0b,5qQ?s7uWirqup&!s8Z1rUfj_p\X^Z#mC_?#7(/!s8Mro rr2utlMpn`#Pe*!"TeZ5"7Z?r"9SZ*!X&Z(jSs`~> dJjINs8N&s!WW<$!!30$!71ZYq>U3]qYg&9!W`T/$j(tUnc&surW!!(rr26`)ZKd9s8L0hr9mbrUKa[I0T`X#QfMRp@a"r;H0b,5qQ?s7uWirqup&!s8Z1rUfj_p\X^Z#mC_?#7(/!s8Mro rr2utlMpn`#Pe*!"TeZ5"7Z?r"9SZ*!X&Z(jSs`~> dJjINs8N&s!WW<$!!30$!71Z_qYC*bqY^$cPlUpm"p5),qYg^%!X&K+rr26`)ufm:s8)/!XShus7?$^qY$-V!sA]+ Dtj&,r;?Qo!<2cnqu6Wo-i0[[q"jpi!2<"7lNm!=&`.!W`B*!<2'ZJ,~> dJjINs8N&s!WW<$!!30$!71Z_qYC*bqY^$cPlUpm"p5),qYg^%!X&K+rr26`)ufm:s8)/!XShus7?$^qY$-V!sA]+ Dtj&,r;?Qo!<2cnqu6Wo-i0[[q"jpi!2<"7lNm!=&`.!W`B*!<2'ZJ,~> dJjINs8N&s!WW<$!!30$!71Z_qYC*bqY^$cPlUpm"p5),qYg^%!X&K+rr26`)ufm:s8)/!XShus7?$^qY$-V!sA]+ Dtj&,r;?Qo!<2cnqu6Wo-i0[[q"jpi!2<"7lNm!=&`.!W`B*!<2'ZJ,~> dJjINs8N&s!WW<$!!30$!71]FqA8u-qu-K`quI*-!!<=$qYCEs! dJjINs8N&s!WW<$!!30$!71]FqA8u-qu-K`quI*-!!<=$qYCEs! dJjINs8N&s!WW<$!!30$!71]FqA8u-qu-K`quI*-!!<=$qYCEs! dJjINs8N&s!WW<$!!30$!71Z_p\sd[p\sj^qSNC?!=B8?2tma`!"&`,rr26`)ufm:s8 dJjINs8N&s!WW<$!!30$!71Z_p\sd[p\sj^qSNC?!=B8?2tma`!"&`,rr26`)ufm:s8 dJjINs8N&s!WW<$!!30$!71Z_p\sd[p\sj^qSNC?!=B8?2tma`!"&`,rr26`)ufm:s8 dJjINs8N&s!WW<$!!30$!71Z_rV-6hrUp-arqkIP";1b@$7#ZS!s&Q+rr26`*<-!;s8CrVQHj!='&7 !X%6Wp](3jnGiIdqtp3ep&4sr!Wiu7'`.G"rWE3"rVc6c-2dc:s7lKcrVk=J!"B28+92'4rUp3g nHAmr"T\i+r;-9gs8W)ns8;lqrtYJ1rVlEl!!rc.#5nGpq#($apBh0-rW!H,!!NB)!WWMurqQHk s8MQg&,uJ'q>Bpb!^'bp\aaarT+!/~> dJjINs8N&s!WW<$!!30$!71Z_rV-6hrUp-arqkIP";1b@$7#ZS!s&Q+rr26`*<-!;s8CrVQHj!='&7 !X%6Wp](3jnGiIdqtp3ep&4sr!Wiu7'`.G"rWE3"rVc6c-2dc:s7lKcrVk=J!"B28+92'4rUp3g nHAmr"T\i+r;-9gs8W)ns8;lqrtYJ1rVlEl!!rc.#5nGpq#($apBh0-rW!H,!!NB)!WWMurqQHk s8MQg&,uJ'q>Bpb!^'bp\aaarT+!/~> dJjINs8N&s!WW<$!!30$!71Z_rV-6hrUp-arqkIP";1b@$7#ZS!s&Q+rr26`*<-!;s8CrVQHj!='&7 !X%6Wp](3jnGiIdqtp3ep&4sr!Wiu7'`.G"rWE3"rVc6c-2dc:s7lKcrVk=J!"B28+92'4rUp3g nHAmr"T\i+r;-9gs8W)ns8;lqrtYJ1rVlEl!!rc.#5nGpq#($apBh0-rW!H,!!NB)!WWMurqQHk s8MQg&,uJ'q>Bpb!^'bp\aaarT+!/~> dJjFMs8;ik!W`3%"T\Z)!<2rDs8W'CrVZQiqY^'co`+t%!!!-%!WW?'!WMinrr)ciqY^Bgs7lWl rr42:qZ$3ds8;iprquit#71A1rq[32!!!*$!!qlho_eXcrr2os?iKcuq>L'd#6587#6>J6o_eao !!!'$rVuZmq>^?ks8)cis8Dutrr;oppAapfs8MZjr9jR`nd5a)"p"](rqlWmrVlfrrVQTkqXOOm !!WQ-!!;llq>1!es8W)trUBjerZhC@rVZTno(W@m!!<3)qY'jcrqQH`&-*1B!"SPpq>U$crVcNk r;QZp,5h98rWE33%0-G9p&"a_o)ALK":"o5!"&]0!Trr2utq#CBnr;RT1rqlQ^rX/]1 "9JQ)pAFa_qu-Qprr2lcs8W'CrVlcnr;Z?_"U4r/!!W5mr;HWirUUR#%Kc\@nbN"[o`"gflMpk_ *qfL<#os?Y%MK-YqYpEj#ndgU%1*j^#oa6e#mgS.jSs`~> dJjFMs8;ik!W`3%"T\Z)!<2rDs8W'CrVZQiqY^'co`+t%!!!-%!WW?'!WMinrr)ciqY^Bgs7lWl rr42:qZ$3ds8;iprquit#71A1rq[32!!!*$!!qlho_eXcrr2os?iKcuq>L'd#6587#6>J6o_eao !!!'$rVuZmq>^?ks8)cis8Dutrr;oppAapfs8MZjr9jR`nd5a)"p"](rqlWmrVlfrrVQTkqXOOm !!WQ-!!;llq>1!es8W)trUBjerZhC@rVZTno(W@m!!<3)qY'jcrqQH`&-*1B!"SPpq>U$crVcNk r;QZp,5h98rWE33%0-G9p&"a_o)ALK":"o5!"&]0!Trr2utq#CBnr;RT1rqlQ^rX/]1 "9JQ)pAFa_qu-Qprr2lcs8W'CrVlcnr;Z?_"U4r/!!W5mr;HWirUUR#%Kc\@nbN"[o`"gflMpk_ *qfL<#os?Y%MK-YqYpEj#ndgU%1*j^#oa6e#mgS.jSs`~> dJjFMs8;ik!W`3%"T\Z)!<2rDs8W'CrVZQiqY^'co`+t%!!!-%!WW?'!WMinrr)ciqY^Bgs7lWl rr42:qZ$3ds8;iprquit#71A1rq[32!!!*$!!qlho_eXcrr2os?iKcuq>L'd#6587#6>J6o_eao !!!'$rVuZmq>^?ks8)cis8Dutrr;oppAapfs8MZjr9jR`nd5a)"p"](rqlWmrVlfrrVQTkqXOOm !!WQ-!!;llq>1!es8W)trUBjerZhC@rVZTno(W@m!!<3)qY'jcrqQH`&-*1B!"SPpq>U$crVcNk r;QZp,5h98rWE33%0-G9p&"a_o)ALK":"o5!"&]0!Trr2utq#CBnr;RT1rqlQ^rX/]1 "9JQ)pAFa_qu-Qprr2lcs8W'CrVlcnr;Z?_"U4r/!!W5mr;HWirUUR#%Kc\@nbN"[o`"gflMpk_ *qfL<#os?Y%MK-YqYpEj#ndgU%1*j^#oa6e#mgS.jSs`~> dJjaGqYp9h"on]."9Sc-!WW/FruM+;rVZQip\t0erXf,;!"T/4%fcb5r;?Qlo`"gfrr+>>rqu`o o`"jgoD\^frr)KepBM0.!<<5k!!!*-"ToGQrqH']rVc`prVn;FrVuNip\aCa!!`o4!"SJs!!!'# !<`>urq6*drVlZmp\t!Zs8N#nrr*Z2s7-'brq?$`n*(Md"p=o4&cVM%rVlfrrtGD3rql`fjT>Jl !qtfp_oFCp-"98Ggrq6!ar;QWm&HDq>!!*#ujSnWIrUBh2rr;uq p@naj!!WH/rqlWiq>0[^&-)kA!WiT,!"f2Dqu$HlrrE&mrrE&qrt58-s7GCT!"Ar4#S-n2rqlWl rVllsmf+O2rVZQhoDS:l!!i]-!:9^XpAY!hr;@3-":+u-rr;'Yn,E:LrttY5!!WQ+!WW6$"T\Jq rrX#G!"o88!"9A:!!<<-!WM0[J,~> dJjaGqYp9h"on]."9Sc-!WW/FruM+;rVZQip\t0erXf,;!"T/4%fcb5r;?Qlo`"gfrr+>>rqu`o o`"jgoD\^frr)KepBM0.!<<5k!!!*-"ToGQrqH']rVc`prVn;FrVuNip\aCa!!`o4!"SJs!!!'# !<`>urq6*drVlZmp\t!Zs8N#nrr*Z2s7-'brq?$`n*(Md"p=o4&cVM%rVlfrrtGD3rql`fjT>Jl !qtfp_oFCp-"98Ggrq6!ar;QWm&HDq>!!*#ujSnWIrUBh2rr;uq p@naj!!WH/rqlWiq>0[^&-)kA!WiT,!"f2Dqu$HlrrE&mrrE&qrt58-s7GCT!"Ar4#S-n2rqlWl rVllsmf+O2rVZQhoDS:l!!i]-!:9^XpAY!hr;@3-":+u-rr;'Yn,E:LrttY5!!WQ+!WW6$"T\Jq rrX#G!"o88!"9A:!!<<-!WM0[J,~> dJjaGqYp9h"on]."9Sc-!WW/FruM+;rVZQip\t0erXf,;!"T/4%fcb5r;?Qlo`"gfrr+>>rqu`o o`"jgoD\^frr)KepBM0.!<<5k!!!*-"ToGQrqH']rVc`prVn;FrVuNip\aCa!!`o4!"SJs!!!'# !<`>urq6*drVlZmp\t!Zs8N#nrr*Z2s7-'brq?$`n*(Md"p=o4&cVM%rVlfrrtGD3rql`fjT>Jl !qtfp_oFCp-"98Ggrq6!ar;QWm&HDq>!!*#ujSnWIrUBh2rr;uq p@naj!!WH/rqlWiq>0[^&-)kA!WiT,!"f2Dqu$HlrrE&mrrE&qrt58-s7GCT!"Ar4#S-n2rqlWl rVllsmf+O2rVZQhoDS:l!!i]-!:9^XpAY!hr;@3-":+u-rr;'Yn,E:LrttY5!!WQ+!WW6$"T\Jq rrX#G!"o88!"9A:!!<<-!WM0[J,~> dJjaUqXaIZ"98T.!s/Q)!<2uDs8W)urVud\qt0[Jq"lZE"9AT9!!<3&r:Bparqu9YrVHEkq#13e rqc?eo_eO`r:Kgar!NT2%LN1G!!*9(#q#KDrVQWgrVlfpruM+6s82`nme\C7"onl/"T[!P#6=l: !<2cjs8MTdrr"kWrVZWlq#C9hp[S4]q>U3cr;>s6!rrc2!rrKOqtp?jrr<#trr;uoqu6U'!!3<6 !!)ionbW.\rVc`rrpKe3rr)clqYfm]rr<*$!U-f q=u`M"pP&.cMdJ7rV6-cr!X#8!<<<*!"]8'rVc`ppAY-lrr;us'EA(.qu6U'!!3<6!!)ionbW.\ rVc`rrpKe3rr)clqYfm]rr<*$!(q#19u!XL2$0J4Y% qXjaf!!+Yt-jL7_"p"c0!!<;ujSs`~> dJjaUqXaIZ"98T.!s/Q)!<2uDs8W)urVud\qt0[Jq"lZE"9AT9!!<3&r:Bparqu9YrVHEkq#13e rqc?eo_eO`r:Kgar!NT2%LN1G!!*9(#q#KDrVQWgrVlfpruM+6s82`nme\C7"onl/"T[!P#6=l: !<2cjs8MTdrr"kWrVZWlq#C9hp[S4]q>U3cr;>s6!rrc2!rrKOqtp?jrr<#trr;uoqu6U'!!3<6 !!)ionbW.\rVc`rrpKe3rr)clqYfm]rr<*$!U-f q=u`M"pP&.cMdJ7rV6-cr!X#8!<<<*!"]8'rVc`ppAY-lrr;us'EA(.qu6U'!!3<6!!)ionbW.\ rVc`rrpKe3rr)clqYfm]rr<*$!(q#19u!XL2$0J4Y% qXjaf!!+Yt-jL7_"p"c0!!<;ujSs`~> dJjaUqXaIZ"98T.!s/Q)!<2uDs8W)urVud\qt0[Jq"lZE"9AT9!!<3&r:Bparqu9YrVHEkq#13e rqc?eo_eO`r:Kgar!NT2%LN1G!!*9(#q#KDrVQWgrVlfpruM+6s82`nme\C7"onl/"T[!P#6=l: !<2cjs8MTdrr"kWrVZWlq#C9hp[S4]q>U3cr;>s6!rrc2!rrKOqtp?jrr<#trr;uoqu6U'!!3<6 !!)ionbW.\rVc`rrpKe3rr)clqYfm]rr<*$!U-f q=u`M"pP&.cMdJ7rV6-cr!X#8!<<<*!"]8'rVc`ppAY-lrr;us'EA(.qu6U'!!3<6!!)ionbW.\ rVc`rrpKe3rr)clqYfm]rr<*$!(q#19u!XL2$0J4Y% qXjaf!!+Yt-jL7_"p"c0!!<;ujSs`~> dJjaLrVH?e!!N?(!W`?&!<2rBs8W)trBL;Yr;ZW^q`k;k!!"Ao.#m(5oqu6Ejr;HZqrVccnr;$9h!X/]-!Wtae qY:'frVl'],l[c@r;?7_#O0-r;HNhqud''!!NGtqtg0hq=sL[+TD96qu-Kb"Tel4 #718%r:g3hq"G1!#7(;3#64cpqY^?k!<2]l!<2utrr!N0qu$9fr;m-*! dJjaLrVH?e!!N?(!W`?&!<2rBs8W)trBL;Yr;ZW^q`k;k!!"Ao.#m(5oqu6Ejr;HZqrVccnr;$9h!X/]-!Wtae qY:'frVl'],l[c@r;?7_#O0-r;HNhqud''!!NGtqtg0hq=sL[+TD96qu-Kb"Tel4 #718%r:g3hq"G1!#7(;3#64cpqY^?k!<2]l!<2utrr!N0qu$9fr;m-*! dJjaLrVH?e!!N?(!W`?&!<2rBs8W)trBL;Yr;ZW^q`k;k!!"Ao.#m(5oqu6Ejr;HZqrVccnr;$9h!X/]-!Wtae qY:'frVl'],l[c@r;?7_#O0-r;HNhqud''!!NGtqtg0hq=sL[+TD96qu-Kb"Tel4 #718%r:g3hq"G1!#7(;3#64cpqY^?k!<2]l!<2utrr!N0qu$9fr;m-*! dJjaUqt'je!<`N,!W`?&!<2rAs8Dp7r;-3fo)/IWXXsr:p!aq>1$cs&K++!=&`2%06\9"Uk&&qtg!a oCqqXp\+R^s7GjZq#(!dqu?QjVkO;!!!rW/#6k2+r;$ dJjaUqt'je!<`N,!W`?&!<2rAs8Dp7r;-3fo)/IWXXsr:p!aq>1$cs&K++!=&`2%06\9"Uk&&qtg!a oCqqXp\+R^s7GjZq#(!dqu?QjVkO;!!!rW/#6k2+r;$ dJjaUqt'je!<`N,!W`?&!<2rAs8Dp7r;-3fo)/IWXXsr:p!aq>1$cs&K++!=&`2%06\9"Uk&&qtg!a oCqqXp\+R^s7GjZq#(!dqu?QjVkO;!!!rW/#6k2+r;$ dJj[Ts7lVS!XJl0!W`B'!QY6>q`O]So_eXcDf5sd#Qt,3!!`^oN0!l8qtU-]qt^!]q>Ks`qXaUT rJuet"pG)0#mCS8!d4D9s8DQbq>:'brtt_0qtU'cp\=XQrGM`?"T],6!!3<0#E/HXrB'oNqsXOX p\OpenG<%XqY9mbO->D2"pY,3!sAr2Df>LOpAFsfqu?]nqu6HjqY::"!s]8;!VuNiq>L:O'":5&4N/s'[P)Yig!s&K1 !!WH6qtBR[!<)os'E%b*rqcTiq#q!*#7Ub9q=ssbrVlfWru_+;qu-A1!/o)Aal!sJf/"To#:qrId-~> dJj[Ts7lVS!XJl0!W`B'!QY6>q`O]So_eXcDf5sd#Qt,3!!`^oN0!l8qtU-]qt^!]q>Ks`qXaUT rJuet"pG)0#mCS8!d4D9s8DQbq>:'brtt_0qtU'cp\=XQrGM`?"T],6!!3<0#E/HXrB'oNqsXOX p\OpenG<%XqY9mbO->D2"pY,3!sAr2Df>LOpAFsfqu?]nqu6HjqY::"!s]8;!VuNiq>L:O'":5&4N/s'[P)Yig!s&K1 !!WH6qtBR[!<)os'E%b*rqcTiq#q!*#7Ub9q=ssbrVlfWru_+;qu-A1!/o)Aal!sJf/"To#:qrId-~> dJj[Ts7lVS!XJl0!W`B'!QY6>q`O]So_eXcDf5sd#Qt,3!!`^oN0!l8qtU-]qt^!]q>Ks`qXaUT rJuet"pG)0#mCS8!d4D9s8DQbq>:'brtt_0qtU'cp\=XQrGM`?"T],6!!3<0#E/HXrB'oNqsXOX p\OpenG<%XqY9mbO->D2"pY,3!sAr2Df>LOpAFsfqu?]nqu6HjqY::"!s]8;!VuNiq>L:O'":5&4N/s'[P)Yig!s&K1 !!WH6qtBR[!<)os'E%b*rqcTiq#q!*#7Ub9q=ssbrVlfWru_+;qu-A1!/o)Aal!sJf/"To#:qrId-~> dJs7G%JK`%#mUS6!<<-#!<2u>s8W$\q=ss^qYL0fre^j`!X&Q,#65/6#'Y<8G]iu]s8;Tdrq6)/ H$==P#6Fo2"onc-$3Z3Cp\amfp\sscqtp3h=8i$nr;-L6iqY^6jFE_qXEcu[.$3185"p##5"9jGXq"+O`qYp?fs8VrkrquKgEWcOK#6>$^r;$9crT4(Z rr;p=r;Z]nq>(*p"Teo1!,r;QWfrGi#E":"r3K`(ZDq#0=Ss8N&s+8l0:rV?9j"9ei3 !W`<'!!*0(!!*''":521rUg-crTX>(qYgHs!X/;nr;QZpq>^6l!Wi>hrrN0'"ptD7#QP#*jSs`~> dJs7G%JK`%#mUS6!<<-#!<2u>s8W$\q=ss^qYL0fre^j`!X&Q,#65/6#'Y<8G]iu]s8;Tdrq6)/ H$==P#6Fo2"onc-$3Z3Cp\amfp\sscqtp3h=8i$nr;-L6iqY^6jFE_qXEcu[.$3185"p##5"9jGXq"+O`qYp?fs8VrkrquKgEWcOK#6>$^r;$9crT4(Z rr;p=r;Z]nq>(*p"Teo1!,r;QWfrGi#E":"r3K`(ZDq#0=Ss8N&s+8l0:rV?9j"9ei3 !W`<'!!*0(!!*''":521rUg-crTX>(qYgHs!X/;nr;QZpq>^6l!Wi>hrrN0'"ptD7#QP#*jSs`~> dJs7G%JK`%#mUS6!<<-#!<2u>s8W$\q=ss^qYL0fre^j`!X&Q,#65/6#'Y<8G]iu]s8;Tdrq6)/ H$==P#6Fo2"onc-$3Z3Cp\amfp\sscqtp3h=8i$nr;-L6iqY^6jFE_qXEcu[.$3185"p##5"9jGXq"+O`qYp?fs8VrkrquKgEWcOK#6>$^r;$9crT4(Z rr;p=r;Z]nq>(*p"Teo1!,r;QWfrGi#E":"r3K`(ZDq#0=Ss8N&s+8l0:rV?9j"9ei3 !W`<'!!*0(!!*''":521rUg-crTX>(qYgHs!X/;nr;QZpq>^6l!Wi>hrrN0'"ptD7#QP#*jSs`~> li7"aoj@b!s8E#uq-X,-!s&T+!r`0&!<<-!rlG->rVudVqt^'[qYp;aScK?*"TSZ2"U+o2!!EL4 ?=I2N>@V#F!=&W-!!ic0"TSN*!=#(irqQNir:p9krVulms&T.!r;HQlrV?9apA=Z\S-/fq#6=r/ $31&:!WW<.!F];??X@#F?NC30"p+f2!rr?2!!NB+!s54prqZ6aq=agbqu-KiqY^B^rWE9/!X/W5 oDS[^qW.\TrX\u-rVlZg$j-S7!s&E&!W`3#$j$M3!<<3+B)D9#qtfj_,l@T=rquWeqO[`p!X\o. "TSW-"TSf1!!3E-! li7"aoj@b!s8E#uq-X,-!s&T+!r`0&!<<-!rlG->rVudVqt^'[qYp;aScK?*"TSZ2"U+o2!!EL4 ?=I2N>@V#F!=&W-!!ic0"TSN*!=#(irqQNir:p9krVulms&T.!r;HQlrV?9apA=Z\S-/fq#6=r/ $31&:!WW<.!F];??X@#F?NC30"p+f2!rr?2!!NB+!s54prqZ6aq=agbqu-KiqY^B^rWE9/!X/W5 oDS[^qW.\TrX\u-rVlZg$j-S7!s&E&!W`3#$j$M3!<<3+B)D9#qtfj_,l@T=rquWeqO[`p!X\o. "TSW-"TSf1!!3E-! li7"aoj@b!s8E#uq-X,-!s&T+!r`0&!<<-!rlG->rVudVqt^'[qYp;aScK?*"TSZ2"U+o2!!EL4 ?=I2N>@V#F!=&W-!!ic0"TSN*!=#(irqQNir:p9krVulms&T.!r;HQlrV?9apA=Z\S-/fq#6=r/ $31&:!WW<.!F];??X@#F?NC30"p+f2!rr?2!!NB+!s54prqZ6aq=agbqu-KiqY^B^rWE9/!X/W5 oDS[^qW.\TrX\u-rVlZg$j-S7!s&E&!W`3#$j$M3!<<3+B)D9#qtfj_,l@T=rquWeqO[`p!X\o. "TSW-"TSf1!!3E-! li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6>->rr;pFr;6BfpAO[]rVih-!<`l5"9AT)!W`?("p4u1 !s&]0"9ei1!=&W-!<*-/#dCl4o`"R_qYU6irrE&mrr`9!r;?Qm)Z'1(r:0Zh[fQm:!W`N7":>,/ !WiT/!!39+rLEu"pb2#0!Wi3!%0?V6!WW3% #6Xr%r;?NVrtbY>!XJ`#s8;lorpooo[^Yr.r li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6>->rr;pFr;6BfpAO[]rVih-!<`l5"9AT)!W`?("p4u1 !s&]0"9ei1!=&W-!<*-/#dCl4o`"R_qYU6irrE&mrr`9!r;?Qm)Z'1(r:0Zh[fQm:!W`N7":>,/ !WiT/!!39+rLEu"pb2#0!Wi3!%0?V6!WW3% #6Xr%r;?NVrtbY>!XJ`#s8;lorpooo[^Yr.r li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6>->rr;pFr;6BfpAO[]rVih-!<`l5"9AT)!W`?("p4u1 !s&]0"9ei1!=&W-!<*-/#dCl4o`"R_qYU6irrE&mrr`9!r;?Qm)Z'1(r:0Zh[fQm:!W`N7":>,/ !WiT/!!39+rLEu"pb2#0!Wi3!%0?V6!WW3% #6Xr%r;?NVrtbY>!XJ`#s8;lorpooo[^Yr.r li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6>->rr;osr;QRKrVHBgp$hkVd*U5A$O?_@!X&N+!jF.qYL*^r:\:W!!!B-!s&Z;% 0-A/!!!'!!YGG5!<<*%":bV?!!3-.d*0f6rqQWlqu$Hjs8Duqrqd9'r;&#G!"/f7"oJ;up%JF`i Vs8aqt9a`r;6j&!^?`mf3=d!<)op(B2JW#lt56!!*6,!WiN/!+rq6!br8IY_rqlB`rqu[#!W`>o!!WH2$2OVuoB?2loD8Lg!!W2tr Vlikp\XR]p%e+NrrE-(!!<&u!<2'ZJ,~> li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6>->rr;osr;QRKrVHBgp$hkVd*U5A$O?_@!X&N+!jF.qYL*^r:\:W!!!B-!s&Z;% 0-A/!!!'!!YGG5!<<*%":bV?!!3-.d*0f6rqQWlqu$Hjs8Duqrqd9'r;&#G!"/f7"oJ;up%JF`i Vs8aqt9a`r;6j&!^?`mf3=d!<)op(B2JW#lt56!!*6,!WiN/!+rq6!br8IY_rqlB`rqu[#!W`>o!!WH2$2OVuoB?2loD8Lg!!W2tr Vlikp\XR]p%e+NrrE-(!!<&u!<2'ZJ,~> li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6>->rr;osr;QRKrVHBgp$hkVd*U5A$O?_@!X&N+!jF.qYL*^r:\:W!!!B-!s&Z;% 0-A/!!!'!!YGG5!<<*%":bV?!!3-.d*0f6rqQWlqu$Hjs8Duqrqd9'r;&#G!"/f7"oJ;up%JF`i Vs8aqt9a`r;6j&!^?`mf3=d!<)op(B2JW#lt56!!*6,!WiN/!+rq6!br8IY_rqlB`rqu[#!W`>o!!WH2$2OVuoB?2loD8Lg!!W2tr Vlikp\XR]p%e+NrrE-(!!<&u!<2'ZJ,~> li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!65':rr;p0qt0mer;H9ds8M?Jg#W27!!!'!!riHC!!rW. !WrE(!#>RrjOreqoDe^fs8)Hdqu$EkrrE&nrrN,trqufp)>s7.rpKg[o_SOcjlGLa#m^M9! li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!65':rr;p0qt0mer;H9ds8M?Jg#W27!!!'!!riHC!!rW. !WrE(!#>RrjOreqoDe^fs8)Hdqu$EkrrE&nrrN,trqufp)>s7.rpKg[o_SOcjlGLa#m^M9! li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!65':rr;p0qt0mer;H9ds8M?Jg#W27!!!'!!riHC!!rW. !WrE(!#>RrjOreqoDe^fs8)Hdqu$EkrrE&nrrN,trqufp)>s7.rpKg[o_SOcjlGLa#m^M9! li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!5ed6rWi)np@S(XpA"Uc'D_Y-rr2]s!1-]s8Mrprr2Ees8N&u!Vl]oq%E`,rql`jr;Zcqo_/:Yqu$Hp#l4T5!WDo^s8MW` rr2lks8MThrr2rt"9/8tr;HZorX\f'rqc9`s8N#mrr2]krVPRR&cVV'r;Q]jrr)fnr;HTnrr)fo r;Z^#rq69gs6]@Umf3=drr33%p[S:ZrVH:*hrqQKkrVZTlrVlfprVcZorprquf`nc%eQ+8,=4!<<-!rUp3crql?erqkmVqtpHp#64f* !!*'"roF*0~> li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!5ed6rWi)np@S(XpA"Uc'D_Y-rr2]s!1-]s8Mrprr2Ees8N&u!Vl]oq%E`,rql`jr;Zcqo_/:Yqu$Hp#l4T5!WDo^s8MW` rr2lks8MThrr2rt"9/8tr;HZorX\f'rqc9`s8N#mrr2]krVPRR&cVV'r;Q]jrr)fnr;HTnrr)fo r;Z^#rq69gs6]@Umf3=drr33%p[S:ZrVH:*hrqQKkrVZTlrVlfprVcZorprquf`nc%eQ+8,=4!<<-!rUp3crql?erqkmVqtpHp#64f* !!*'"roF*0~> li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!5ed6rWi)np@S(XpA"Uc'D_Y-rr2]s!1-]s8Mrprr2Ees8N&u!Vl]oq%E`,rql`jr;Zcqo_/:Yqu$Hp#l4T5!WDo^s8MW` rr2lks8MThrr2rt"9/8tr;HZorX\f'rqc9`s8N#mrr2]krVPRR&cVV'r;Q]jrr)fnr;HTnrr)fo r;Z^#rq69gs6]@Umf3=drr33%p[S:ZrVH:*hrqQKkrVZTlrVlfprVcZorprquf`nc%eQ+8,=4!<<-!rUp3crql?erqkmVqtpHp#64f* !!*'"roF*0~> li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!5nj8r[RjAqu6WirqcTmoD\L]r;HWnrr)WirVlWjo`+dZ rU^$fo`+U`p&G'fs8MuuqY1!go`"pjqYqE*rqQ*arVuHfrUU!fpA=ggrr2rsr:p6hrquco')_D$ qYp'as8)6_p&4gfrqQKloD]9uoCi1`qYg'ZrquQko\]ZSrr;`mp&"a[s76-opAag`s8)`nli7"a #l"/orpp$erVZQk#lOPurpK[]pAX=V%K5nlrr;ino_&4]q#C!Drs8W(p]'p`rq$0\rWi/sp&+jd rr)*]+9)3G!!!P^jlGOah li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!5nj8r[RjAqu6WirqcTmoD\L]r;HWnrr)WirVlWjo`+dZ rU^$fo`+U`p&G'fs8MuuqY1!go`"pjqYqE*rqQ*arVuHfrUU!fpA=ggrr2rsr:p6hrquco')_D$ qYp'as8)6_p&4gfrqQKloD]9uoCi1`qYg'ZrquQko\]ZSrr;`mp&"a[s76-opAag`s8)`nli7"a #l"/orpp$erVZQk#lOPurpK[]pAX=V%K5nlrr;ino_&4]q#C!Drs8W(p]'p`rq$0\rWi/sp&+jd rr)*]+9)3G!!!P^jlGOah li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!5nj8r[RjAqu6WirqcTmoD\L]r;HWnrr)WirVlWjo`+dZ rU^$fo`+U`p&G'fs8MuuqY1!go`"pjqYqE*rqQ*arVuHfrUU!fpA=ggrr2rsr:p6hrquco')_D$ qYp'as8)6_p&4gfrqQKloD]9uoCi1`qYg'ZrquQko\]ZSrr;`mp&"a[s76-opAag`s8)`nli7"a #l"/orpp$erVZQk#lOPurpK[]pAX=V%K5nlrr;ino_&4]q#C!Drs8W(p]'p`rq$0\rWi/sp&+jd rr)*]+9)3G!!!P^jlGOah li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!5nj7rYG#&q#CBlp\"=\p\t0brV$6hnGi(Prr2j0s7uT` pAFgbrVQTnrVliqrqucpnGiLerVuos0`(\Gq=adcp\+L^q#C^BbrquNhqu$0frSdb^r;HHjpAOmbs8)`prVc`qrVuj# mJm.Zq"sCW$i^,'q>C-hs7ZBjrr)j'rr;unp](0kq>Ta\rr*H!s8)Qkr:L!dp\k!epAb*Mrs8Q$ q>U*dqtg?hrr;rqrr;rsrWV]hrV-*al2M.eo`>4"";CkC!WWE'!"];7!!iQ*"98T*!s/N+!W`5\ s*t~> li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!5nj7rYG#&q#CBlp\"=\p\t0brV$6hnGi(Prr2j0s7uT` pAFgbrVQTnrVliqrqucpnGiLerVuos0`(\Gq=adcp\+L^q#C^BbrquNhqu$0frSdb^r;HHjpAOmbs8)`prVc`qrVuj# mJm.Zq"sCW$i^,'q>C-hs7ZBjrr)j'rr;unp](0kq>Ta\rr*H!s8)Qkr:L!dp\k!epAb*Mrs8Q$ q>U*dqtg?hrr;rqrr;rsrWV]hrV-*al2M.eo`>4"";CkC!WWE'!"];7!!iQ*"98T*!s/N+!W`5\ s*t~> li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!5nj7rYG#&q#CBlp\"=\p\t0brV$6hnGi(Prr2j0s7uT` pAFgbrVQTnrVliqrqucpnGiLerVuos0`(\Gq=adcp\+L^q#C^BbrquNhqu$0frSdb^r;HHjpAOmbs8)`prVc`qrVuj# mJm.Zq"sCW$i^,'q>C-hs7ZBjrr)j'rr;unp](0kq>Ta\rr*H!s8)Qkr:L!dp\k!epAb*Mrs8Q$ q>U*dqtg?hrr;rqrr;rsrWV]hrV-*al2M.eo`>4"";CkC!WWE'!"];7!!iQ*"98T*!s/N+!W`5\ s*t~> n,N@c!WDrp!W)j'!W`5srr)is"Te>trW*3'!W`9lrr;usrVllsao<%Qrr2cos8)cqqu$KkrVu`o r;-6grtkV5qYgHipAameq>^3hs8Dfks8)cis8;Bdrr2lr(]OC5r;QQmqYL!eoCi4aqZ$Noq#CBm rVlisrr)j-r;Z]or;Z?frr)Qhs8Drnr;Zfr!<)Wk%/U"us8;`nrVcKjs8([R"T&,ss8)Ki!<2lq #QF]"rVu`oqWe(grr)]ns8N#tqu?]qrVm3's82ims7ZKmrTsR`rr2p+qZ$ n,N@c!WDrp!W)j'!W`5srr)is"Te>trW*3'!W`9lrr;usrVllsao<%Qrr2cos8)cqqu$KkrVu`o r;-6grtkV5qYgHipAameq>^3hs8Dfks8)cis8;Bdrr2lr(]OC5r;QQmqYL!eoCi4aqZ$Noq#CBm rVlisrr)j-r;Z]or;Z?frr)Qhs8Drnr;Zfr!<)Wk%/U"us8;`nrVcKjs8([R"T&,ss8)Ki!<2lq #QF]"rVu`oqWe(grr)]ns8N#tqu?]qrVm3's82ims7ZKmrTsR`rr2p+qZ$ n,N@c!WDrp!W)j'!W`5srr)is"Te>trW*3'!W`9lrr;usrVllsao<%Qrr2cos8)cqqu$KkrVu`o r;-6grtkV5qYgHipAameq>^3hs8Dfks8)cis8;Bdrr2lr(]OC5r;QQmqYL!eoCi4aqZ$Noq#CBm rVlisrr)j-r;Z]or;Z?frr)Qhs8Drnr;Zfr!<)Wk%/U"us8;`nrVcKjs8([R"T&,ss8)Ki!<2lq #QF]"rVu`oqWe(grr)]ns8N#tqu?]qrVm3's82ims7ZKmrTsR`rr2p+qZ$ n,FC,rVZTjq?-m&!W`<%!!<<+"8hlkqY^[.!rrE(qu@B2!sAc/"9nu1qu$6equ$Hns8MqIs+13$ s24m:rWiDuqH[N n,FC,rVZTjq?-m&!W`<%!!<<+"8hlkqY^[.!rrE(qu@B2!sAc/"9nu1qu$6equ$Hns8MqIs+13$ s24m:rWiDuqH[N n,FC,rVZTjq?-m&!W`<%!!<<+"8hlkqY^[.!rrE(qu@B2!sAc/"9nu1qu$6equ$Hns8MqIs+13$ s24m:rWiDuqH[N n,NFe#lX\uqZI$(!s8H&rr`?'"o\!dX_>pAFgcr;QZqr.4m!s+13f s8W''r:fpXs8;E`nbi^jnG3+Wp\O[Gs*t~> n,NFe#lX\uqZI$(!s8H&rr`?'"o\!dX_>pAFgcr;QZqr.4m!s+13f s8W''r:fpXs8;E`nbi^jnG3+Wp\O[Gs*t~> n,NFe#lX\uqZI$(!s8H&rr`?'"o\!dX_>pAFgcr;QZqr.4m!s+13f s8W''r:fpXs8;E`nbi^jnG3+Wp\O[Gs*t~> n,NFe"9&/pqu-Zs!W),q>($f#7(G5!!!)t!WN3/%06_=q"ajdrr)cmrVhBJJcC<$_uKc9 #Q+Jks8;]gqtC'irr;p&r;6EbpAFUZroF*0~> n,NFe"9&/pqu-Zs!W),q>($f#7(G5!!!)t!WN3/%06_=q"ajdrr)cmrVhBJJcC<$_uKc9 #Q+Jks8;]gqtC'irr;p&r;6EbpAFUZroF*0~> n,NFe"9&/pqu-Zs!W),q>($f#7(G5!!!)t!WN3/%06_=q"ajdrr)cmrVhBJJcC<$_uKc9 #Q+Jks8;]gqtC'irr;p&r;6EbpAFUZroF*0~> n,NFes8Duqp](d,!Wr>rq#(*k"9Jf.!!W6"rrN-&s/H@tq#C-hrr)fpJcC<$JcEOcrr2rm"TSGt s8DZkr;Hrso_S4Zq>1$Ms*t~> n,NFes8Duqp](d,!Wr>rq#(*k"9Jf.!!W6"rrN-&s/H@tq#C-hrr)fpJcC<$JcEOcrr2rm"TSGt s8DZkr;Hrso_S4Zq>1$Ms*t~> n,NFes8Duqp](d,!Wr>rq#(*k"9Jf.!!W6"rrN-&s/H@tq#C-hrr)fpJcC<$JcEOcrr2rm"TSGt s8DZkr;Hrso_S4Zq>1$Ms*t~> mf*:drquiprPAEK%^s6koCi.Urk61a[_fnpqniBL&&,mYrVZTdr;?Hhr;Q`rrdk*#s+13fs8W'' s82]go)AR`q>UEmrr2os#Q=;pr:g*_roF*0~> mf*:drquiprPAEK%^s6koCi.Urk61a[_fnpqniBL&&,mYrVZTdr;?Hhr;Q`rrdk*#s+13fs8W'' s82]go)AR`q>UEmrr2os#Q=;pr:g*_roF*0~> mf*:drquiprPAEK%^s6koCi.Urk61a[_fnpqniBL&&,mYrVZTdr;?Hhr;Q`rrdk*#s+13fs8W'' s82]go)AR`q>UEmrr2os#Q=;pr:g*_roF*0~> mf3=drr)fns8Dus&Gc8!q#(*`rVHK[rqcK^rVlcq$3'o$p&=OTp\=Xbq??corr<#tJcC<$JcEXf s8E6&rVZWir:T[\rVm*#nc&F_rV>OSJ,~> mf3=drr)fns8Dus&Gc8!q#(*`rVHK[rqcK^rVlcq$3'o$p&=OTp\=Xbq??corr<#tJcC<$JcEXf s8E6&rVZWir:T[\rVm*#nc&F_rV>OSJ,~> mf3=drr)fns8Dus&Gc8!q#(*`rVHK[rqcK^rVlcq$3'o$p&=OTp\=Xbq??corr<#tJcC<$JcEXf s8E6&rVZWir:T[\rVm*#nc&F_rV>OSJ,~> mf37b"9&/rrVZX+qZ$ mf37b"9&/rrVZX+qZ$ mf37b"9&/rrVZX+qZ$ nc/Xgs8O#:r;-6gqu6?hrqlB_rr2cnrV-9brUfa]s7H:-hr;HWps8L^O q>M')s8Mlorr)lsrqucmrr2iorr2lqrW2orrr2lrs8EK*qu-Niqssa]s8N#mqtpBms8W)qrs/;u rVc`erqucp!<)ip!<<&t!r_cjqu?]qq>V!%rq-3gq#:3^rqQNmrqQBfrqHErrq??ip\"Ob#l+Du qY^?gs8W)trr3B(rqH-cqu?Zirr2cnrW)ims8N!/qYpKgqu6U*bs8W(Ls0VfV~> nc/Xgs8O#:r;-6gqu6?hrqlB_rr2cnrV-9brUfa]s7H:-hr;HWps8L^O q>M')s8Mlorr)lsrqucmrr2iorr2lqrW2orrr2lrs8EK*qu-Niqssa]s8N#mqtpBms8W)qrs/;u rVc`erqucp!<)ip!<<&t!r_cjqu?]qq>V!%rq-3gq#:3^rqQNmrqQBfrqHErrq??ip\"Ob#l+Du qY^?gs8W)trr3B(rqH-cqu?Zirr2cnrW)ims8N!/qYpKgqu6U*bs8W(Ls0VfV~> nc/Xgs8O#:r;-6gqu6?hrqlB_rr2cnrV-9brUfa]s7H:-hr;HWps8L^O q>M')s8Mlorr)lsrqucmrr2iorr2lqrW2orrr2lrs8EK*qu-Niqssa]s8N#mqtpBms8W)qrs/;u rVc`erqucp!<)ip!<<&t!r_cjqu?]qq>V!%rq-3gq#:3^rqQNmrqQBfrqHErrq??ip\"Ob#l+Du qY^?gs8W)trr3B(rqH-cqu?Zirr2cnrW)ims8N!/qYpKgqu6U*bs8W(Ls0VfV~> nc&Ugrr4#^Hnr:p$Zr;HWmrqQEipA4ggrXSi*rqlTlrr)<_rq6$bqY^Bkrqud&rr)lqp@J:O rr2ios8E?"r;Q]lr;Z]ps8Drkrt#,#rqQHer;Z`aqu69_rqcQmrr2`n&,6(prVlfjp%J@Zqt^6h q"t*krX\esrVlTerqQHio_A4Yr;QTnrVd<&oD\IZrr)`mq>L6arr2lrs8E<&pAb0hrqQKfnGWRf p\+I[rVd&rmJ[%Vrr<#srdk*Ts*t~> nc&Ugrr4#^Hnr:p$Zr;HWmrqQEipA4ggrXSi*rqlTlrr)<_rq6$bqY^Bkrqud&rr)lqp@J:O rr2ios8E?"r;Q]lr;Z]ps8Drkrt#,#rqQHer;Z`aqu69_rqcQmrr2`n&,6(prVlfjp%J@Zqt^6h q"t*krX\esrVlTerqQHio_A4Yr;QTnrVd<&oD\IZrr)`mq>L6arr2lrs8E<&pAb0hrqQKfnGWRf p\+I[rVd&rmJ[%Vrr<#srdk*Ts*t~> nc&Ugrr4#^Hnr:p$Zr;HWmrqQEipA4ggrXSi*rqlTlrr)<_rq6$bqY^Bkrqud&rr)lqp@J:O rr2ios8E?"r;Q]lr;Z]ps8Drkrt#,#rqQHer;Z`aqu69_rqcQmrr2`n&,6(prVlfjp%J@Zqt^6h q"t*krX\esrVlTerqQHio_A4Yr;QTnrVd<&oD\IZrr)`mq>L6arr2lrs8E<&pAb0hrqQKfnGWRf p\+I[rVd&rmJ[%Vrr<#srdk*Ts*t~> nc'^1s8W)tr;6?bn&)oX!WWN/%LE.8p[nLb%06M9!!!9&!!!'!!XAhF_tEQqo`"jc!W2lIs8W&u s8;j4s82Zlp]'pbr;ZchrquTeqt9gcqY9scr;RE/rVZ]cqYU-gr;$'dmf!(^rV61(#rVlBcr;$6gqu?Zor;?NgrrrE"p\Fa^rqcros6fj`rVcNhrW<&trqcX+rqQKm pAOsfr;ZKgq>U9bs8N#ts8N!#rVufmrr2g#q"t!foDS^dqu6Tn%f-,'qu-Efp%eLbp&4pdr;R*& rVZNjqu-KkqsaS"q>UEfrqlQhrV6EkqYU6es8Mupr;D3HZN#F~> nc'^1s8W)tr;6?bn&)oX!WWN/%LE.8p[nLb%06M9!!!9&!!!'!!XAhF_tEQqo`"jc!W2lIs8W&u s8;j4s82Zlp]'pbr;ZchrquTeqt9gcqY9scr;RE/rVZ]cqYU-gr;$'dmf!(^rV61(#rVlBcr;$6gqu?Zor;?NgrrrE"p\Fa^rqcros6fj`rVcNhrW<&trqcX+rqQKm pAOsfr;ZKgq>U9bs8N#ts8N!#rVufmrr2g#q"t!foDS^dqu6Tn%f-,'qu-Efp%eLbp&4pdr;R*& rVZNjqu-KkqsaS"q>UEfrqlQhrV6EkqYU6es8Mupr;D3HZN#F~> nc'^1s8W)tr;6?bn&)oX!WWN/%LE.8p[nLb%06M9!!!9&!!!'!!XAhF_tEQqo`"jc!W2lIs8W&u s8;j4s82Zlp]'pbr;ZchrquTeqt9gcqY9scr;RE/rVZ]cqYU-gr;$'dmf!(^rV61(#rVlBcr;$6gqu?Zor;?NgrrrE"p\Fa^rqcros6fj`rVcNhrW<&trqcX+rqQKm pAOsfr;ZKgq>U9bs8N#ts8N!#rVufmrr2g#q"t!foDS^dqu6Tn%f-,'qu-Efp%eLbp&4pdr;R*& rVZNjqu-KkqsaS"q>UEfrqlQhrV6EkqYU6es8Mupr;D3HZN#F~> mf3=d)ZBU2kl1Ve!%mJQqZq>1!fs8W)Ls8W': rVZQgr;-3ZqsaIXs82ZjpAas]s76-cr;HBfru1n7qY^6[r:^-fr;-9er:p-`rVQKir;HTnrql`q rWrDnqu?6]rVcZmrVl^$qu-Qeo)&7Zrr)io!<)`ns8Ei3rVcKjoD\@XqYU3cqY:$dqu$BjrVlfn s""*Iq>:'bp\Fa]qY^-`rqu0\qY^L$`rV$3`rVlHcqXaaar;?Qm')_Y'q>^?io_JOU p]'a]rqlTjrVm6(rVZTip\".Tq"F4U&buD&qtfsaq#0^[qssd`qu6QnquH\Hs0DZT~> mf3=d)ZBU2kl1Ve!%mJQqZq>1!fs8W)Ls8W': rVZQgr;-3ZqsaIXs82ZjpAas]s76-cr;HBfru1n7qY^6[r:^-fr;-9er:p-`rVQKir;HTnrql`q rWrDnqu?6]rVcZmrVl^$qu-Qeo)&7Zrr)io!<)`ns8Ei3rVcKjoD\@XqYU3cqY:$dqu$BjrVlfn s""*Iq>:'bp\Fa]qY^-`rqu0\qY^L$`rV$3`rVlHcqXaaar;?Qm')_Y'q>^?io_JOU p]'a]rqlTjrVm6(rVZTip\".Tq"F4U&buD&qtfsaq#0^[qssd`qu6QnquH\Hs0DZT~> mf3=d)ZBU2kl1Ve!%mJQqZq>1!fs8W)Ls8W': rVZQgr;-3ZqsaIXs82ZjpAas]s76-cr;HBfru1n7qY^6[r:^-fr;-9er:p-`rVQKir;HTnrql`q rWrDnqu?6]rVcZmrVl^$qu-Qeo)&7Zrr)io!<)`ns8Ei3rVcKjoD\@XqYU3cqY:$dqu$BjrVlfn s""*Iq>:'bp\Fa]qY^-`rqu0\qY^L$`rV$3`rVlHcqXaaar;?Qm')_Y'q>^?io_JOU p]'a]rqlTjrVm6(rVZTip\".Tq"F4U&buD&qtfsaq#0^[qssd`qu6QnquH\Hs0DZT~> mf3=d!<)op"-NWe"8i30#6Feur;6L$!qpA+[bq3(cA#aCGNp\a^WqYgBj!WE#prttb6rV66hOctfoP*LrdP*5b:s8)Thr;HWks![mF r;D\8P`UfdP)kfjr:p$^p\=U`rVZTlrqlH_rV66ho_al3O-5LtOoUXDOpm_@q#'jUr;-<^s7ZEi rsJc(r;63^p5,-!R-p+IP`h/iPk4nPqXsmdp@nOaquQcqJcE(VJ,~> mf3=d!<)op"-NWe"8i30#6Feur;6L$!qpA+[bq3(cA#aCGNp\a^WqYgBj!WE#prttb6rV66hOctfoP*LrdP*5b:s8)Thr;HWks![mF r;D\8P`UfdP)kfjr:p$^p\=U`rVZTlrqlH_rV66ho_al3O-5LtOoUXDOpm_@q#'jUr;-<^s7ZEi rsJc(r;63^p5,-!R-p+IP`h/iPk4nPqXsmdp@nOaquQcqJcE(VJ,~> mf3=d!<)op"-NWe"8i30#6Feur;6L$!qpA+[bq3(cA#aCGNp\a^WqYgBj!WE#prttb6rV66hOctfoP*LrdP*5b:s8)Thr;HWks![mF r;D\8P`UfdP)kfjr:p$^p\=U`rVZTlrqlH_rV66ho_al3O-5LtOoUXDOpm_@q#'jUr;-<^s7ZEi rsJc(r;63^p5,-!R-p+IP`h/iPk4nPqXsmdp@nOaquQcqJcE(VJ,~> mf3=drr!X`!!ET1!sSf."UY80pAFmb"p"o1!s&Q'!"T,6"9SZ.!=/i+pA"[erVlfr!<1[O!WE#r ru(h7o_J7Wq#CU!#65)4"p+dPp\F=YoDJLarr36&rVcZkp\4Ub!>,D<$3^J7#($.Gq>'mar;?Nl r;Zfr#lXVuqt0a`!=8Q&rrNK4"FBqBoCVnVqu6KprVlforu:t9r;ZEe"p=o4$OR%="U9;Ls7uKe qu$BjrVlcq#laf#rW:-hqtp?lr:]jYpAB>`H3"ES!so,3qZ-Ws%gr^L "pom*I/3^8rU'X_rVlisrX&Q$qtL$\"pY,:n,O%'!"&i4! mf3=drr!X`!!ET1!sSf."UY80pAFmb"p"o1!s&Q'!"T,6"9SZ.!=/i+pA"[erVlfr!<1[O!WE#r ru(h7o_J7Wq#CU!#65)4"p+dPp\F=YoDJLarr36&rVcZkp\4Ub!>,D<$3^J7#($.Gq>'mar;?Nl r;Zfr#lXVuqt0a`!=8Q&rrNK4"FBqBoCVnVqu6KprVlforu:t9r;ZEe"p=o4$OR%="U9;Ls7uKe qu$BjrVlcq#laf#rW:-hqtp?lr:]jYpAB>`H3"ES!so,3qZ-Ws%gr^L "pom*I/3^8rU'X_rVlisrX&Q$qtL$\"pY,:n,O%'!"&i4! mf3=drr!X`!!ET1!sSf."UY80pAFmb"p"o1!s&Q'!"T,6"9SZ.!=/i+pA"[erVlfr!<1[O!WE#r ru(h7o_J7Wq#CU!#65)4"p+dPp\F=YoDJLarr36&rVcZkp\4Ub!>,D<$3^J7#($.Gq>'mar;?Nl r;Zfr#lXVuqt0a`!=8Q&rrNK4"FBqBoCVnVqu6KprVlforu:t9r;ZEe"p=o4$OR%="U9;Ls7uKe qu$BjrVlcq#laf#rW:-hqtp?lr:]jYpAB>`H3"ES!so,3qZ-Ws%gr^L "pom*I/3^8rU'X_rVlisrX&Q$qtL$\"pY,:n,O%'!"&i4! n,N:a(^1-H!s&E-!!!''!WW)pqYC3s!W`?&!s/B$%fl_5! n,N:a(^1-H!s&E-!!!''!WW)pqYC3s!W`?&!s/B$%fl_5! n,N:a(^1-H!s&E-!!!''!WW)pqYC3s!W`?&!s/B$%fl_5! n,N:a!1-eqYpKorVliq(]*M!!rrl4!59)eP`o]lGOrqud&rr)fqoC)YU 9EP.m'a+L:"p,)4! n,N:a!1-eqYpKorVliq(]*M!!rrl4!59)eP`o]lGOrqud&rr)fqoC)YU 9EP.m'a+L:"p,)4! n,N:a!1-eqYpKorVliq(]*M!!rrl4!59)eP`o]lGOrqud&rr)fqoC)YU 9EP.m'a+L:"p,)4! li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6Y?ArX8]%r;?Ej!!*3&!s/B$$4I7J">To@q>C6kr;RZ6 rVZKl"U+u7!<<6/!WWr="?68Uo_J+Wo)/M0rr)fcq>0[Q!rr<(!"8l3!!W`2!WW6(1ApnEr;HWp rVlcq(]OC2rU]pe!"8o/!!`].!=B584oYBRrVc]ss760gq^MFC"9AK*!X&K)!=Ai-!'C#SrqH li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6Y?ArX8]%r;?Ej!!*3&!s/B$$4I7J">To@q>C6kr;RZ6 rVZKl"U+u7!<<6/!WWr="?68Uo_J+Wo)/M0rr)fcq>0[Q!rr<(!"8l3!!W`2!WW6(1ApnEr;HWp rVlcq(]OC2rU]pe!"8o/!!`].!=B584oYBRrVc]ss760gq^MFC"9AK*!X&K)!=Ai-!'C#SrqH li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6Y?ArX8]%r;?Ej!!*3&!s/B$$4I7J">To@q>C6kr;RZ6 rVZKl"U+u7!<<6/!WWr="?68Uo_J+Wo)/M0rr)fcq>0[Q!rr<(!"8l3!!W`2!WW6(1ApnEr;HWp rVlcq(]OC2rU]pe!"8o/!!`].!=B584oYBRrVc]ss760gq^MFC"9AK*!X&K)!=Ai-!'C#SrqH li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6Y?@rYYP.qtp!G!!!X>7 rq$$erVuEb*!$?G$31qD":,)5!!!&q!%%^M"Te`/"T\f2!X'bArqZm2pAb*brq1jB[/YX~> li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6Y?@rYYP.qtp!G!!!X>7 rq$$erVuEb*!$?G$31qD":,)5!!!&q!%%^M"Te`/"T\f2!X'bArqZm2pAb*brq1jB[/YX~> li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6Y?@rYYP.qtp!G!!!X>7 rq$$erVuEb*!$?G$31qD":,)5!!!&q!%%^M"Te`/"T\f2!X'bArqZm2pAb*brq1jB[/YX~> li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6Y?@rYYV5rql]p!s8T,!3$NLA2lM^PVr:9spoD\adqY^9k,Q@Z?o)A@[q??p(!!iQ)%/fr"r;6H^quZunqu$Ej qu$Hnrr)j6rr)cknbW.k"TSN*"Ru9_r:]U^!<2uqqu6RJpAb-lr;Q6m!!!0&#RLP.rV>s]qu?iu rqcTiqu-Nk":P86!!iQ.!"/i.":>M5r;?Tl./Ec'pbp]^a!&c_t-qYp'_rquTerr)io!WW9% !!3Z%r:Ta\r;6Kks82Wi&c;G%qum')!!<8err2B[rq?>Bs0VfV~> li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6Y?@rYYV5rql]p!s8T,!3$NLA2lM^PVr:9spoD\adqY^9k,Q@Z?o)A@[q??p(!!iQ)%/fr"r;6H^quZunqu$Ej qu$Hnrr)j6rr)cknbW.k"TSN*"Ru9_r:]U^!<2uqqu6RJpAb-lr;Q6m!!!0&#RLP.rV>s]qu?iu rqcTiqu-Nk":P86!!iQ.!"/i.":>M5r;?Tl./Ec'pbp]^a!&c_t-qYp'_rquTerr)io!WW9% !!3Z%r:Ta\r;6Kks82Wi&c;G%qum')!!<8err2B[rq?>Bs0VfV~> li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6Y?@rYYV5rql]p!s8T,!3$NLA2lM^PVr:9spoD\adqY^9k,Q@Z?o)A@[q??p(!!iQ)%/fr"r;6H^quZunqu$Ej qu$Hnrr)j6rr)cknbW.k"TSN*"Ru9_r:]U^!<2uqqu6RJpAb-lr;Q6m!!!0&#RLP.rV>s]qu?iu rqcTiqu-Nk":P86!!iQ.!"/i.":>M5r;?Tl./Ec'pbp]^a!&c_t-qYp'_rquTerr)io!WW9% !!3Z%r:Ta\r;6Kks82Wi&c;G%qum')!!<8err2B[rq?>Bs0VfV~> li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6>->rY>A0rq?Er!=]eFs7Z3^q"k%!iV*L1.r;Q]or;HZpqtKsYqYg6i'IF+gkjn]LrqD!D[/YX~> li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6>->rY>A0rq?Er!=]eFs7Z3^q"k%!iV*L1.r;Q]or;HZpqtKsYqYg6i'IF+gkjn]LrqD!D[/YX~> li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6>->rY>A0rq?Er!=]eFs7Z3^q"k%!iV*L1.r;Q]or;HZpqtKsYqYg6i'IF+gkjn]LrqD!D[/YX~> li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6>*@rr)cor=LXi%0-D4rTaF[q#3#K%F!2Jqp>Aj(WcX\ "Ut\=%0c_-r;?Ek!C!]q=b$or:g-_p%n4M ciXCR#lju9!WWZ_q>L!arVHBfqu-Hkqu?L/q=spdrVHFJ/cu7Trr2]er;Q`rqZ-ZtrW!E=nG`Ie qu-Ejs8Muqrr;lp&cMV*q"F=YrU]h8&-:/Uq>1)As0VfV~> li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6>*@rr)cor=LXi%0-D4rTaF[q#3#K%F!2Jqp>Aj(WcX\ "Ut\=%0c_-r;?Ek!C!]q=b$or:g-_p%n4M ciXCR#lju9!WWZ_q>L!arVHBfqu-Hkqu?L/q=spdrVHFJ/cu7Trr2]er;Q`rqZ-ZtrW!E=nG`Ie qu-Ejs8Muqrr;lp&cMV*q"F=YrU]h8&-:/Uq>1)As0VfV~> li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!6>*@rr)cor=LXi%0-D4rTaF[q#3#K%F!2Jqp>Aj(WcX\ "Ut\=%0c_-r;?Ek!C!]q=b$or:g-_p%n4M ciXCR#lju9!WWZ_q>L!arVHBfqu-Hkqu?L/q=spdrVHFJ/cu7Trr2]er;Q`rqZ-ZtrW!E=nG`Ie qu-Ejs8Muqrr;lp&cMV*q"F=YrU]h8&-:/Uq>1)As0VfV~> li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!71ZFrqcX2rqucjrqQEo!!3B1[Jp.#p&+gi"9AT2r;ciu rrNuB!WiN+%1NCAq#C![rVQa!rV->J3ncf:!#RUY9$hF;oq>L9hrV6-u$2aYs rr)j3rr)clqt0jc!"&l1"1A+"qYK^V!Wi9%!s\r8!r`?Q!!ic6!qp%nXQ r;Qa.!WrW,"p5249)/8VqtBd_q#pQkr;?Nlr;QO2qt'[^o_\Y[!4_h"rr)`lrr;ir!!*'#!=e`$ r<`8rqu-Qor;6Hmqu.3*qu-3doDAC_rUitj#d4.*r.4mTs*t~> li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!71ZFrqcX2rqucjrqQEo!!3B1[Jp.#p&+gi"9AT2r;ciu rrNuB!WiN+%1NCAq#C![rVQa!rV->J3ncf:!#RUY9$hF;oq>L9hrV6-u$2aYs rr)j3rr)clqt0jc!"&l1"1A+"qYK^V!Wi9%!s\r8!r`?Q!!ic6!qp%nXQ r;Qa.!WrW,"p5249)/8VqtBd_q#pQkr;?Nlr;QO2qt'[^o_\Y[!4_h"rr)`lrr;ir!!*'#!=e`$ r<`8rqu-Qor;6Hmqu.3*qu-3doDAC_rUitj#d4.*r.4mTs*t~> li7"ar;l`p"TeZ'rr2rq!!!&m!!30$!71ZFrqcX2rqucjrqQEo!!3B1[Jp.#p&+gi"9AT2r;ciu rrNuB!WiN+%1NCAq#C![rVQa!rV->J3ncf:!#RUY9$hF;oq>L9hrV6-u$2aYs rr)j3rr)clqt0jc!"&l1"1A+"qYK^V!Wi9%!s\r8!r`?Q!!ic6!qp%nXQ r;Qa.!WrW,"p5249)/8VqtBd_q#pQkr;?Nlr;QO2qt'[^o_\Y[!4_h"rr)`lrr;ir!!*'#!=e`$ r<`8rqu-Qor;6Hmqu.3*qu-3doDAC_rUitj#d4.*r.4mTs*t~> li7"ar;l`p"TeZ'rr2rq!!!*"!!`W-!!EE)!Wi6"ci4"EqYqB1qu6Qms8*'+!Wi?*q>9pdr;?Zs #RCM2!<3''dh!!WE'"p"o*rUp#Z s7#sarE^)+r;HNhrVQTnrVoRjr;6 li7"ar;l`p"TeZ'rr2rq!!!*"!!`W-!!EE)!Wi6"ci4"EqYqB1qu6Qms8*'+!Wi?*q>9pdr;?Zs #RCM2!<3''dh!!WE'"p"o*rUp#Z s7#sarE^)+r;HNhrVQTnrVoRjr;6 li7"ar;l`p"TeZ'rr2rq!!!*"!!`W-!!EE)!Wi6"ci4"EqYqB1qu6Qms8*'+!Wi?*q>9pdr;?Zs #RCM2!<3''dh!!WE'"p"o*rUp#Z s7#sarE^)+r;HNhrVQTnrVoRjr;6 li7"ar;l`p"TeZ'rr2rs!<3*/"9AK,FEV^0"pG26!WE)=rtbA+r;QQj"U5&5!1!sO#GrVQEpo_/7Y qtL-krVH6aqtpEmrVmf8r;6BeqY^!j#m1;1"oJ,oqu6Kp!"K#8"TnK##6P/3%0-S+p&=edr;-[* r;#sRoDea\$3156"9JZ1G4tk,qtp3epkXf`LlI"BKoC\@LkCM>NVW/Co_SI_rGr#GqtTs^pAY*i !WW6$! li7"ar;l`p"TeZ'rr2rs!<3*/"9AK,FEV^0"pG26!WE)=rtbA+r;QQj"U5&5!1!sO#GrVQEpo_/7Y qtL-krVH6aqtpEmrVmf8r;6BeqY^!j#m1;1"oJ,oqu6Kp!"K#8"TnK##6P/3%0-S+p&=edr;-[* r;#sRoDea\$3156"9JZ1G4tk,qtp3epkXf`LlI"BKoC\@LkCM>NVW/Co_SI_rGr#GqtTs^pAY*i !WW6$! li7"ar;l`p"TeZ'rr2rs!<3*/"9AK,FEV^0"pG26!WE)=rtbA+r;QQj"U5&5!1!sO#GrVQEpo_/7Y qtL-krVH6aqtpEmrVmf8r;6BeqY^!j#m1;1"oJ,oqu6Kp!"K#8"TnK##6P/3%0-S+p&=edr;-[* r;#sRoDea\$3156"9JZ1G4tk,qtp3epkXf`LlI"BKoC\@LkCM>NVW/Co_SI_rGr#GqtTs^pAY*i !WW6$! li7"ar;l`p"TeZ'rr2rs!<3*2"9AK/o_A=a"UY>6!D3!<3'=!W`<(!s/K)"9&&mq>Kr,!KR$PnFuYOrr;usrr42@qtp3f!L*cp]^p)!!?iBnG*%]pBV00"p4i2!;QQjrVQNhD0c3l!038&Nf'!ZO,T/PQlpA+L\qt^!l!H%c0q>:0k quQj!!!**#rr;utrVH^+N0!Xl&dAG_D/T4Aqt^'^NWTOWs8DoqJcE4ZJ,~> li7"ar;l`p"TeZ'rr2rs!<3*2"9AK/o_A=a"UY>6!D3!<3'=!W`<(!s/K)"9&&mq>Kr,!KR$PnFuYOrr;usrr42@qtp3f!L*cp]^p)!!?iBnG*%]pBV00"p4i2!;QQjrVQNhD0c3l!038&Nf'!ZO,T/PQlpA+L\qt^!l!H%c0q>:0k quQj!!!**#rr;utrVH^+N0!Xl&dAG_D/T4Aqt^'^NWTOWs8DoqJcE4ZJ,~> li7"ar;l`p"TeZ'rr2rs!<3*2"9AK/o_A=a"UY>6!D3!<3'=!W`<(!s/K)"9&&mq>Kr,!KR$PnFuYOrr;usrr42@qtp3f!L*cp]^p)!!?iBnG*%]pBV00"p4i2!;QQjrVQNhD0c3l!038&Nf'!ZO,T/PQlpA+L\qt^!l!H%c0q>:0k quQj!!!**#rr;utrVH^+N0!Xl&dAG_D/T4Aqt^'^NWTOWs8DoqJcE4ZJ,~> li7"ar;l`p"TeZ'rr2rs!<3*2"9AN-nG2te"9S],!'^_q#UNkr;RN2r;6Bfqu?p'!X\o3"T%ujqYUBrr;QR! q#LKqo_\FWqtpC3rr)cnqu$0XV?[D.!Xel"s82]eq?R3/!s&]'!FH*6#QOo.rVl``qtgKtq>:!b p\k!e=onp1!"K#:VY^2grq-(i#6pj$VXs]`oD&4^rr)eg#m1;2<<)dep&"]f!!N?"pAFpiquQj! !!**#rr;utrVQX#q>L-_r;HHj'*ACC!!ZR'qu$?frWWQ(qYU3hrr2otrdk*^s*t~> li7"ar;l`p"TeZ'rr2rs!<3*2"9AN-nG2te"9S],!'^_q#UNkr;RN2r;6Bfqu?p'!X\o3"T%ujqYUBrr;QR! q#LKqo_\FWqtpC3rr)cnqu$0XV?[D.!Xel"s82]eq?R3/!s&]'!FH*6#QOo.rVl``qtgKtq>:!b p\k!e=onp1!"K#:VY^2grq-(i#6pj$VXs]`oD&4^rr)eg#m1;2<<)dep&"]f!!N?"pAFpiquQj! !!**#rr;utrVQX#q>L-_r;HHj'*ACC!!ZR'qu$?frWWQ(qYU3hrr2otrdk*^s*t~> li7"ar;l`p"TeZ'rr2rs!<3*2"9AN-nG2te"9S],!'^_q#UNkr;RN2r;6Bfqu?p'!X\o3"T%ujqYUBrr;QR! q#LKqo_\FWqtpC3rr)cnqu$0XV?[D.!Xel"s82]eq?R3/!s&]'!FH*6#QOo.rVl``qtgKtq>:!b p\k!e=onp1!"K#:VY^2grq-(i#6pj$VXs]`oD&4^rr)eg#m1;2<<)dep&"]f!!N?"pAFpiquQj! !!**#rr;utrVQX#q>L-_r;HHj'*ACC!!ZR'qu$?frWWQ(qYU3hrr2otrdk*^s*t~> li7"ar;l`p"TeZ'rr2rs!<3*4"9A`5q#1!j!!WH*!WrE's8L.?(B4./rVHHdrX&i0"9:^_r;?0b r!&q>U!h%fH;#qtfm`r;?R=rquZioDSpq$NU>8!5uq>C-_qu$L&!XAr4q#Fb(#6P22"SM`bqYC%!!<)opq>C0hqZ-m) !s&Q0"98E"qtp4Z!XQC7o_84[rV?9erVH6eqZ6p("TUscqt'jep&YHoq>9pcs82ou!<<-%!<3#t s8Mrs!;ZHgqu-Nirt>A6$46h9rr)i]p&;c-62gZWrVlfr!<.QL]`3K~> li7"ar;l`p"TeZ'rr2rs!<3*4"9A`5q#1!j!!WH*!WrE's8L.?(B4./rVHHdrX&i0"9:^_r;?0b r!&q>U!h%fH;#qtfm`r;?R=rquZioDSpq$NU>8!5uq>C-_qu$L&!XAr4q#Fb(#6P22"SM`bqYC%!!<)opq>C0hqZ-m) !s&Q0"98E"qtp4Z!XQC7o_84[rV?9erVH6eqZ6p("TUscqt'jep&YHoq>9pcs82ou!<<-%!<3#t s8Mrs!;ZHgqu-Nirt>A6$46h9rr)i]p&;c-62gZWrVlfr!<.QL]`3K~> li7"ar;l`p"TeZ'rr2rs!<3*4"9A`5q#1!j!!WH*!WrE's8L.?(B4./rVHHdrX&i0"9:^_r;?0b r!&q>U!h%fH;#qtfm`r;?R=rquZioDSpq$NU>8!5uq>C-_qu$L&!XAr4q#Fb(#6P22"SM`bqYC%!!<)opq>C0hqZ-m) !s&Q0"98E"qtp4Z!XQC7o_84[rV?9erVH6eqZ6p("TUscqt'jep&YHoq>9pcs82ou!<<-%!<3#t s8Mrs!;ZHgqu-Nirt>A6$46h9rr)i]p&;c-62gZWrVlfr!<.QL]`3K~> li7"ar;l`p"TeZ'rr2rs!<3*#"TAE2rqHBp#QXr-!WrE's8L.?(ARk(s8;lprW<0)"onf)q"4L^ p23 o(i+ZrrE5Oq>^-\s8MZirVldIpAb'k!sJ]/!;cHfq>C3C$MaSsqu6Wn!WW6$! li7"ar;l`p"TeZ'rr2rs!<3*#"TAE2rqHBp#QXr-!WrE's8L.?(ARk(s8;lprW<0)"onf)q"4L^ p23 o(i+ZrrE5Oq>^-\s8MZirVldIpAb'k!sJ]/!;cHfq>C3C$MaSsqu6Wn!WW6$! li7"ar;l`p"TeZ'rr2rs!<3*#"TAE2rqHBp#QXr-!WrE's8L.?(ARk(s8;lprW<0)"onf)q"4L^ p23 o(i+ZrrE5Oq>^-\s8MZirVldIpAb'k!sJ]/!;cHfq>C3C$MaSsqu6Wn!WW6$! li7"ar;l`p"TeZ'rr2rs!<3*4"9AZ+qu6El!!EB*!WrE&rr1%>(]411s7#XZoa1['!X&N'q#16d qu6Kgr;?TorW)utrrUTp_rqd-)":5&6"9@cerZh=O$39Yro_JIcs7>sXqtpEhs8)d+"U5)0+o;33rqc-g*qB7/$ig,+ !!*'#!Wi<#rr2p"!!2lkp&=sk! li7"ar;l`p"TeZ'rr2rs!<3*4"9AZ+qu6El!!EB*!WrE&rr1%>(]411s7#XZoa1['!X&N'q#16d qu6Kgr;?TorW)utrrUTp_rqd-)":5&6"9@cerZh=O$39Yro_JIcs7>sXqtpEhs8)d+"U5)0+o;33rqc-g*qB7/$ig,+ !!*'#!Wi<#rr2p"!!2lkp&=sk! li7"ar;l`p"TeZ'rr2rs!<3*4"9AZ+qu6El!!EB*!WrE&rr1%>(]411s7#XZoa1['!X&N'q#16d qu6Kgr;?TorW)utrrUTp_rqd-)":5&6"9@cerZh=O$39Yro_JIcs7>sXqtpEhs8)d+"U5)0+o;33rqc-g*qB7/$ig,+ !!*'#!Wi<#rr2p"!!2lkp&=sk! li7"ar;l`p"TeZ'rr2rs!<3'3!rrT.rVlR$"TSZ-!s8)corUp0er<`Q' q>UE[s8M`k!"T,2$k!(7rpTj[rX/`*q"sd_rqu?_rqlZoo`"mh!WW6$!=Su+rq?!`rW!!!qYgEn quQj!!!**#rr;uts8E0%rr)`mrVHQorr2rss8E'%!!!'%!;cKis7$!f"7Z9fr;?NmhuE]Ts8W)t ec5[Krr<#ts8W,upAY li7"ar;l`p"TeZ'rr2rs!<3'3!rrT.rVlR$"TSZ-!s8)corUp0er<`Q' q>UE[s8M`k!"T,2$k!(7rpTj[rX/`*q"sd_rqu?_rqlZoo`"mh!WW6$!=Su+rq?!`rW!!!qYgEn quQj!!!**#rr;uts8E0%rr)`mrVHQorr2rss8E'%!!!'%!;cKis7$!f"7Z9fr;?NmhuE]Ts8W)t ec5[Krr<#ts8W,upAY li7"ar;l`p"TeZ'rr2rs!<3'3!rrT.rVlR$"TSZ-!s8)corUp0er<`Q' q>UE[s8M`k!"T,2$k!(7rpTj[rX/`*q"sd_rqu?_rqlZoo`"mh!WW6$!=Su+rq?!`rW!!!qYgEn quQj!!!**#rr;uts8E0%rr)`mrVHQorr2rss8E'%!!!'%!;cKis7$!f"7Z9fr;?NmhuE]Ts8W)t ec5[Krr<#ts8W,upAY li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W^Hmrq>s]rVlZjrVZTlrTjI\qtC@"rVcQkru:q: rVus#!1*erBjarS7F'~> li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W^Hmrq>s]rVlZjrVZTlrTjI\qtC@"rVcQkru:q: rVus#!1*erBjarS7F'~> li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W^Hmrq>s]rVlZjrVZTlrTjI\qtC@"rVcQkru:q: rVus#!1*erBjarS7F'~> li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W0d_s82co p%%tYrVH?irV-9Uq#0jYq"G'tq>:'er;HWoqu7i;qY^C!"Tn`3"9n_uq"jL[!U(!bqu?lur;Z]qrnmbUrr)lsrnd\Srr2rtrr)ll rqZTorX/Mprql`ks8W)srVZZprr`8tqu6Tpqu6Km!ri6"rVlis#P\2or:g3cp>#[u~> li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W0d_s82co p%%tYrVH?irV-9Uq#0jYq"G'tq>:'er;HWoqu7i;qY^C!"Tn`3"9n_uq"jL[!U(!bqu?lur;Z]qrnmbUrr)lsrnd\Srr2rtrr)ll rqZTorX/Mprql`ks8W)srVZZprr`8tqu6Tpqu6Km!ri6"rVlis#P\2or:g3cp>#[u~> li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W0d_s82co p%%tYrVH?irV-9Uq#0jYq"G'tq>:'er;HWoqu7i;qY^C!"Tn`3"9n_uq"jL[!U(!bqu?lur;Z]qrnmbUrr)lsrnd\Srr2rtrr)ll rqZTorX/Mprql`ks8W)srVZZprr`8tqu6Tpqu6Km!ri6"rVlis#P\2or:g3cp>#[u~> li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!WU3i#Q4AfrVcWl qYpKor<3-"s8DoqrrN)tr;Z`pqu?]qq>Ua"q#C'dqWn1\h>`!~> li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!WU3i#Q4AfrVcWl qYpKor<3-"s8DoqrrN)tr;Z`pqu?]qq>Ua"q#C'dqWn1\h>`!~> li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!WU3i#Q4AfrVcWl qYpKor<3-"s8DoqrrN)tr;Z`pqu?]qq>Ua"q#C'dqWn1\h>`!~> li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W0aXr;cn5@r#XjCBOeB!<`f5"T%ljrql?m"o.rjrVlg1 rVuis!<<*#!!E6#rr<#s! li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W0aXr;cn5@r#XjCBOeB!<`f5"T%ljrql?m"o.rjrVlg1 rVuis!<<*#!!E6#rr<#s! li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W0aXr;cn5@r#XjCBOeB!<`f5"T%ljrql?m"o.rjrVlg1 rVuis!<<*#!!E6#rr<#s! li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W1!]p&tQuq"XmgrrB^V"U+Mmr;-0f#Qb)."To58pA4daqt:3qqu$3erri<#rVuut !!r`*s8W)ur;Ziso`#!ks8Mlq/HYnNrr;lq!!*&ss8N&r!WW6$!<<-"s8N&urW<2trqH-dp&+IV qtg?crW!#t!!rT(r;Zcr!!<0!s8N#RrrrE#rVlisq>UEorr2io"9/?#rqu`orrUEj)#!n*qt^6irr<#tr;6?fr;?Bdqu6Tlqu$Bj!rr9!rr)lr!WE#r rs\o*rV$9br;QTmr;HWPs*t~> li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W1!]p&tQuq"XmgrrB^V"U+Mmr;-0f#Qb)."To58pA4daqt:3qqu$3erri<#rVuut !!r`*s8W)ur;Ziso`#!ks8Mlq/HYnNrr;lq!!*&ss8N&r!WW6$!<<-"s8N&urW<2trqH-dp&+IV qtg?crW!#t!!rT(r;Zcr!!<0!s8N#RrrrE#rVlisq>UEorr2io"9/?#rqu`orrUEj)#!n*qt^6irr<#tr;6?fr;?Bdqu6Tlqu$Bj!rr9!rr)lr!WE#r rs\o*rV$9br;QTmr;HWPs*t~> li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!W1!]p&tQuq"XmgrrB^V"U+Mmr;-0f#Qb)."To58pA4daqt:3qqu$3erri<#rVuut !!r`*s8W)ur;Ziso`#!ks8Mlq/HYnNrr;lq!!*&ss8N&r!WW6$!<<-"s8N&urW<2trqH-dp&+IV qtg?crW!#t!!rT(r;Zcr!!<0!s8N#RrrrE#rVlisq>UEorr2io"9/?#rqu`orrUEj)#!n*qt^6irr<#tr;6?fr;?Bdqu6Tlqu$Bj!rr9!rr)lr!WE#r rs\o*rV$9br;QTmr;HWPs*t~> li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!WU0]qYgHrqu@*'s82fprr<-"s8W&shZ!fZrVZTlrr;fmrr2rrs83?'r;?Nmrr)cmqu$Bj rVld4rVQKis8W#mr;Q`pqtg9kq>C0dq>C0dq>CQjs8Vflq"FU`rVufqq@WApqY9mbs8Momr;HQj qYC*grqufp'E7q.rr<#trVZNhs7Z6drUg$drr)isroF*0~> li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!WU0]qYgHrqu@*'s82fprr<-"s8W&shZ!fZrVZTlrr;fmrr2rrs83?'r;?Nmrr)cmqu$Bj rVld4rVQKis8W#mr;Q`pqtg9kq>C0dq>C0dq>CQjs8Vflq"FU`rVufqq@WApqY9mbs8Momr;HQj qYC*grqufp'E7q.rr<#trVZNhs7Z6drUg$drr)isroF*0~> li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!WU0]qYgHrqu@*'s82fprr<-"s8W&shZ!fZrVZTlrr;fmrr2rrs83?'r;?Nmrr)cmqu$Bj rVld4rVQKis8W#mr;Q`pqtg9kq>C0dq>C0dq>CQjs8Vflq"FU`rVufqq@WApqY9mbs8Momr;HQj qYC*grqufp'E7q.rr<#trVZNhs7Z6drUg$drr)isroF*0~> li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!WL3r!rVii q".Db!WW<'$39i#q#'aWq>_!%rVlWm-3!lArr;us"9SZ6!WrQ+r:9aYo_JOk#7L\;q>U0eq>UKu rVcQes"F!Bq>^14!#S-t;s760cnGWIls8)ckr(R/"!WiH)"on,lq>0pe!!`;qrVc`q"o\K# !!*-"!"8o+s8MoqrVurus8DrkrrrB$r;ZfurVus#rVlgFqu6Wrs8;ors82ou!<<-#!<<)us8W&u #u+)k9i4Vc9(VuVq>C-j!rN$'rr;lprr2s"qYoCP!WN&rquQcqq>:6lrquiprVHcrrVlfpr;HKm r;QX3rr)`kr;Zfpq>:-jqtKj_s8)`oqYL3jqYC$nqYa.br;HNjq@!2urVcHerVZQjqY0se&cDM# p\asdqu$Bjrqu]mrr2lqr!E5prqQ@kq"t!grVllsjSs`~> li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!WL3r!rVii q".Db!WW<'$39i#q#'aWq>_!%rVlWm-3!lArr;us"9SZ6!WrQ+r:9aYo_JOk#7L\;q>U0eq>UKu rVcQes"F!Bq>^14!#S-t;s760cnGWIls8)ckr(R/"!WiH)"on,lq>0pe!!`;qrVc`q"o\K# !!*-"!"8o+s8MoqrVurus8DrkrrrB$r;ZfurVus#rVlgFqu6Wrs8;ors82ou!<<-#!<<)us8W&u #u+)k9i4Vc9(VuVq>C-j!rN$'rr;lprr2s"qYoCP!WN&rquQcqq>:6lrquiprVHcrrVlfpr;HKm r;QX3rr)`kr;Zfpq>:-jqtKj_s8)`oqYL3jqYC$nqYa.br;HNjq@!2urVcHerVZQjqY0se&cDM# p\asdqu$Bjrqu]mrr2lqr!E5prqQ@kq"t!grVllsjSs`~> li7"ar;l`p"TeZ'rr2rs!WN-*!WW6$s8;ls!WL3r!rVii q".Db!WW<'$39i#q#'aWq>_!%rVlWm-3!lArr;us"9SZ6!WrQ+r:9aYo_JOk#7L\;q>U0eq>UKu rVcQes"F!Bq>^14!#S-t;s760cnGWIls8)ckr(R/"!WiH)"on,lq>0pe!!`;qrVc`q"o\K# !!*-"!"8o+s8MoqrVurus8DrkrrrB$r;ZfurVus#rVlgFqu6Wrs8;ors82ou!<<-#!<<)us8W&u #u+)k9i4Vc9(VuVq>C-j!rN$'rr;lprr2s"qYoCP!WN&rquQcqq>:6lrquiprVHcrrVlfpr;HKm r;QX3rr)`kr;Zfpq>:-jqtKj_s8)`oqYL3jqYC$nqYa.br;HNjq@!2urVcHerVZQjqY0se&cDM# p\asdqu$Bjrqu]mrr2lqr!E5prqQ@kq"t!grVllsjSs`~> li7"ar;l`p&cqq/r;?Qq!WW<'!<<3%r;QEqqu?d!!!'n9/,oMGp\b'u!!!?+r;Z`ls7aV?5jnIF r!`W1!!`K+"oJ>drqu4B%DV];rqZR?q>C6es7Q?l!!*6+!!36!qu?T]r<**+!sK/2o_eafp](iu qtg0hs8G"Ts8;lps8Mrs"To&2!<;Was7$'+!Bp5Pr;6X("98N*"9JDsrVZWd4oib#qu?Tns8W&t rVup!rW!?-r;ZcqrVccss8DrrqYpj#s8W&trVup!rW!N3rVulqr;Q`ss8;oprqlft!W<#urtYJ1 rr)p!!!<<'"9\l12?*.BrVZ]tqu@$$s8DorqZ$Wrqu5LQ')qk&rqucpq#(-drr2Ecrqu]mrr-p9 r:g!_rqlHdrV?Hgrq6-err)inqu?*`rU^$`rqcTas8Mfkq"Og_rVQTmrr)Wgrr"\^3r8aQrVHEg r;?Nkr:^-io_\L_q#:![rqc li7"ar;l`p&cqq/r;?Qq!WW<'!<<3%r;QEqqu?d!!!'n9/,oMGp\b'u!!!?+r;Z`ls7aV?5jnIF r!`W1!!`K+"oJ>drqu4B%DV];rqZR?q>C6es7Q?l!!*6+!!36!qu?T]r<**+!sK/2o_eafp](iu qtg0hs8G"Ts8;lps8Mrs"To&2!<;Was7$'+!Bp5Pr;6X("98N*"9JDsrVZWd4oib#qu?Tns8W&t rVup!rW!?-r;ZcqrVccss8DrrqYpj#s8W&trVup!rW!N3rVulqr;Q`ss8;oprqlft!W<#urtYJ1 rr)p!!!<<'"9\l12?*.BrVZ]tqu@$$s8DorqZ$Wrqu5LQ')qk&rqucpq#(-drr2Ecrqu]mrr-p9 r:g!_rqlHdrV?Hgrq6-err)inqu?*`rU^$`rqcTas8Mfkq"Og_rVQTmrr)Wgrr"\^3r8aQrVHEg r;?Nkr:^-io_\L_q#:![rqc li7"ar;l`p&cqq/r;?Qq!WW<'!<<3%r;QEqqu?d!!!'n9/,oMGp\b'u!!!?+r;Z`ls7aV?5jnIF r!`W1!!`K+"oJ>drqu4B%DV];rqZR?q>C6es7Q?l!!*6+!!36!qu?T]r<**+!sK/2o_eafp](iu qtg0hs8G"Ts8;lps8Mrs"To&2!<;Was7$'+!Bp5Pr;6X("98N*"9JDsrVZWd4oib#qu?Tns8W&t rVup!rW!?-r;ZcqrVccss8DrrqYpj#s8W&trVup!rW!N3rVulqr;Q`ss8;oprqlft!W<#urtYJ1 rr)p!!!<<'"9\l12?*.BrVZ]tqu@$$s8DorqZ$Wrqu5LQ')qk&rqucpq#(-drr2Ecrqu]mrr-p9 r:g!_rqlHdrV?Hgrq6-err)inqu?*`rU^$`rqcTas8Mfkq"Og_rVQTmrr)Wgrr"\^3r8aQrVHEg r;?Nkr:^-io_\L_q#:![rqc li7"ar;l]o'E%h,r;@**!X&K)"pG8/qu$Nt!WE'#!<<,9s8W'GrV$9o!!iW9s8D]irVcWs!W;Q\ rW*!*$3gS4)"I%kp[A%k"oA5gq#;]>rqHElr>bk@"onl.$NU2)rq$%.!Y,84%KZS+rUp3`ikqZrZ;+7 3WB!SoD\^fo)AO_rpg$V,TS9R)]^"Drr2Bcli$DHrr2Zkn,3._qtC'hrquQj$3:8!rr2`jqu$Bj r@[jDn,+4O+C13-64KT+=J9\,l7B4r;HEiq>^-g#R'l!rVl]npA4ghrp9Z8~> li7"ar;l]o'E%h,r;@**!X&K)"pG8/qu$Nt!WE'#!<<,9s8W'GrV$9o!!iW9s8D]irVcWs!W;Q\ rW*!*$3gS4)"I%kp[A%k"oA5gq#;]>rqHElr>bk@"onl.$NU2)rq$%.!Y,84%KZS+rUp3`ikqZrZ;+7 3WB!SoD\^fo)AO_rpg$V,TS9R)]^"Drr2Bcli$DHrr2Zkn,3._qtC'hrquQj$3:8!rr2`jqu$Bj r@[jDn,+4O+C13-64KT+=J9\,l7B4r;HEiq>^-g#R'l!rVl]npA4ghrp9Z8~> li7"ar;l]o'E%h,r;@**!X&K)"pG8/qu$Nt!WE'#!<<,9s8W'GrV$9o!!iW9s8D]irVcWs!W;Q\ rW*!*$3gS4)"I%kp[A%k"oA5gq#;]>rqHElr>bk@"onl.$NU2)rq$%.!Y,84%KZS+rUp3`ikqZrZ;+7 3WB!SoD\^fo)AO_rpg$V,TS9R)]^"Drr2Bcli$DHrr2Zkn,3._qtC'hrquQj$3:8!rr2`jqu$Bj r@[jDn,+4O+C13-64KT+=J9\,l7B4r;HEiq>^-g#R'l!rVl]npA4ghrp9Z8~> li7"ar;l]orVQcp!!Ei3!!io5!<2lc!!EW-!!30$!5\^8rYG2+o`,-q!WWc0o`"LQrVurhrr2Np "o\K2'F4^M.rr2Ta!^`us8N&uqucit $Npb?"V(bCq#:*i!r`0+!L1"r;HWo &HrXO!Wi?'":G,.,6\G\$312E!!ic/"Te]#rr)WiqsFC^lP0C*$hj8jr:U'crqufrrp9Z8~> li7"ar;l]orVQcp!!Ei3!!io5!<2lc!!EW-!!30$!5\^8rYG2+o`,-q!WWc0o`"LQrVurhrr2Np "o\K2'F4^M.rr2Ta!^`us8N&uqucit $Npb?"V(bCq#:*i!r`0+!L1"r;HWo &HrXO!Wi?'":G,.,6\G\$312E!!ic/"Te]#rr)WiqsFC^lP0C*$hj8jr:U'crqufrrp9Z8~> li7"ar;l]orVQcp!!Ei3!!io5!<2lc!!EW-!!30$!5\^8rYG2+o`,-q!WWc0o`"LQrVurhrr2Np "o\K2'F4^M.rr2Ta!^`us8N&uqucit $Npb?"V(bCq#:*i!r`0+!L1"r;HWo &HrXO!Wi?'":G,.,6\G\$312E!!ic/"Te]#rr)WiqsFC^lP0C*$hj8jr:U'crqufrrp9Z8~> li7"ar;lfr'EJ16qu$Bjqu[!#!!WT,":Fr&r!E9$!W`9$_>jQ7-hd?4"UkS li7"ar;lfr'EJ16qu$Bjqu[!#!!WT,":Fr&r!E9$!W`9$_>jQ7-hd?4"UkS li7"ar;lfr'EJ16qu$Bjqu[!#!!WT,":Fr&r!E9$!W`9$_>jQ7-hd?4"UkS li7"ar;lfr('+C8qu$Bjk7%Ur$31A7!u1%krW!$'rW!!#!!'k8s8FDEp@e[i!!<<3%#mLG0p%n^fo@+!pqYC-gs""*Ir;Z`cp&4@,!)r;HTl"TA?"rr2os1]I:IrsJl'#583&!0mj"Tg5+-n6r#0f&e4rqufjrq#p_q"aF, !<)lr$iotps8Murr;Z^8!"&]&p&+d]qXsb9"9JN"r;H3cr;QH?!!+SIo`"afq@NSR$NBu$!<`;s qZ$9brVlfZs*t~> li7"ar;lfr('+C8qu$Bjk7%Ur$31A7!u1%krW!$'rW!!#!!'k8s8FDEp@e[i!!<<3%#mLG0p%n^fo@+!pqYC-gs""*Ir;Z`cp&4@,!)r;HTl"TA?"rr2os1]I:IrsJl'#583&!0mj"Tg5+-n6r#0f&e4rqufjrq#p_q"aF, !<)lr$iotps8Murr;Z^8!"&]&p&+d]qXsb9"9JN"r;H3cr;QH?!!+SIo`"afq@NSR$NBu$!<`;s qZ$9brVlfZs*t~> li7"ar;lfr('+C8qu$Bjk7%Ur$31A7!u1%krW!$'rW!!#!!'k8s8FDEp@e[i!!<<3%#mLG0p%n^fo@+!pqYC-gs""*Ir;Z`cp&4@,!)r;HTl"TA?"rr2os1]I:IrsJl'#583&!0mj"Tg5+-n6r#0f&e4rqufjrq#p_q"aF, !<)lr$iotps8Murr;Z^8!"&]&p&+d]qXsb9"9JN"r;H3cr;QH?!!+SIo`"afq@NSR$NBu$!<`;s qZ$9brVlfZs*t~> li7"ar;lisrrN-"')VV)rqla%"TSf.#6Fo&rV?Qtr;Zm"!!'k8s8FGBqYN__"9Jc1rqQEis82?i $MjN#"TSZ*$3:G1o_\[cq#L`tqtg3hrVnGJrVZTeqtg'e"UPVA!sJf15k4aNq"qZ(q*G&e!WWK& q#(!eq*YOsr:Kparqlrurr2rsrr2pQr;-@Z$31G;!WW)qo_JO`!s8E""9Ac2!!36&r;Q?gr;6[" qt0^`nbiCds8N&u!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'[!r`/us8;ls!WW)pq>C-m !WrE&!Wi<#rVlZgrVZNeq>LC3jroa<3~> li7"ar;lisrrN-"')VV)rqla%"TSf.#6Fo&rV?Qtr;Zm"!!'k8s8FGBqYN__"9Jc1rqQEis82?i $MjN#"TSZ*$3:G1o_\[cq#L`tqtg3hrVnGJrVZTeqtg'e"UPVA!sJf15k4aNq"qZ(q*G&e!WWK& q#(!eq*YOsr:Kparqlrurr2rsrr2pQr;-@Z$31G;!WW)qo_JO`!s8E""9Ac2!!36&r;Q?gr;6[" qt0^`nbiCds8N&u!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'[!r`/us8;ls!WW)pq>C-m !WrE&!Wi<#rVlZgrVZNeq>LC3jroa<3~> li7"ar;lisrrN-"')VV)rqla%"TSf.#6Fo&rV?Qtr;Zm"!!'k8s8FGBqYN__"9Jc1rqQEis82?i $MjN#"TSZ*$3:G1o_\[cq#L`tqtg3hrVnGJrVZTeqtg'e"UPVA!sJf15k4aNq"qZ(q*G&e!WWK& q#(!eq*YOsr:Kparqlrurr2rsrr2pQr;-@Z$31G;!WW)qo_JO`!s8E""9Ac2!!36&r;Q?gr;6[" qt0^`nbiCds8N&u!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'[!r`/us8;ls!WW)pq>C-m !WrE&!Wi<#rVlZgrVZNeq>LC3jroa<3~> li7"ar;lisrrN-"'Dq_*rqK]">?bcD>[L_/q=k-p!WE'#!<<,9s8W'Hs7H$_!s&K/$_dFqr;? li7"ar;lisrrN-"'Dq_*rqK]">?bcD>[L_/q=k-p!WE'#!<<,9s8W'Hs7H$_!s&K/$_dFqr;? li7"ar;lisrrN-"'Dq_*rqK]">?bcD>[L_/q=k-p!WE'#!<<,9s8W'Hs7H$_!s&K/$_dFqr;? li7"ar;l]o'E%h,rVcQfr;ZZjrVHQmqYpNu!WE'#!<<,:ruqC?rVZTmp&PF!$ig;-rVQEir;lus p&kU&!!<<-G5M(,rqcm*!;cTmrVlcq!<2uq.K0;DpA,*s#Qb&0!s&AorqQBg"p"K!"98Q4!=S`$ s7Q?h!!DliqYU3grVuotrr<#ur\4'E!Wr].#QXkur;?L6fs7u_?qt0dVrV6-cp&P;=pAb0er:Tga"9A5np&+Uh!JgUIr;$'^ rr<#tlMlA~> li7"ar;l]o'E%h,rVcQfr;ZZjrVHQmqYpNu!WE'#!<<,:ruqC?rVZTmp&PF!$ig;-rVQEir;lus p&kU&!!<<-G5M(,rqcm*!;cTmrVlcq!<2uq.K0;DpA,*s#Qb&0!s&AorqQBg"p"K!"98Q4!=S`$ s7Q?h!!DliqYU3grVuotrr<#ur\4'E!Wr].#QXkur;?L6fs7u_?qt0dVrV6-cp&P;=pAb0er:Tga"9A5np&+Uh!JgUIr;$'^ rr<#tlMlA~> li7"ar;l]o'E%h,rVcQfr;ZZjrVHQmqYpNu!WE'#!<<,:ruqC?rVZTmp&PF!$ig;-rVQEir;lus p&kU&!!<<-G5M(,rqcm*!;cTmrVlcq!<2uq.K0;DpA,*s#Qb&0!s&AorqQBg"p"K!"98Q4!=S`$ s7Q?h!!DliqYU3grVuotrr<#ur\4'E!Wr].#QXkur;?L6fs7u_?qt0dVrV6-cp&P;=pAb0er:Tga"9A5np&+Uh!JgUIr;$'^ rr<#tlMlA~> li7"ar;l]o)?0[7r;HHhr;$9ho_J:XrUgC!!!33&!WW8^]tmeZeRrr2rt rr;uu!!3'!$3L2+rr;rs!!*&tq#:X!s8W)urr<$"rW!l=rVulsrVlits8Duqn,J7K!X&K(!WDrj r:p3hqu?TnrVud0qY^'`#5eH'!WrQ-!;lfqrVu`p!<)rtrndYer;H0bG6!^&qY^?mrr2rtrr2fp &cVS#s8)m"Mu<5N!W2lmrVl`orr<#t!*oO'rVl`krc&)Eq#C*fs8)KcrcnL&rV?Kjq2,C[qZ$9g nG*%[quZrtq"k$hqYpBaL]7&>r;$ li7"ar;l]o)?0[7r;HHhr;$9ho_J:XrUgC!!!33&!WW8^]tmeZeRrr2rt rr;uu!!3'!$3L2+rr;rs!!*&tq#:X!s8W)urr<$"rW!l=rVulsrVlits8Duqn,J7K!X&K(!WDrj r:p3hqu?TnrVud0qY^'`#5eH'!WrQ-!;lfqrVu`p!<)rtrndYer;H0bG6!^&qY^?mrr2rtrr2fp &cVS#s8)m"Mu<5N!W2lmrVl`orr<#t!*oO'rVl`krc&)Eq#C*fs8)KcrcnL&rV?Kjq2,C[qZ$9g nG*%[quZrtq"k$hqYpBaL]7&>r;$ li7"ar;l]o)?0[7r;HHhr;$9ho_J:XrUgC!!!33&!WW8^]tmeZeRrr2rt rr;uu!!3'!$3L2+rr;rs!!*&tq#:X!s8W)urr<$"rW!l=rVulsrVlits8Duqn,J7K!X&K(!WDrj r:p3hqu?TnrVud0qY^'`#5eH'!WrQ-!;lfqrVu`p!<)rtrndYer;H0bG6!^&qY^?mrr2rtrr2fp &cVS#s8)m"Mu<5N!W2lmrVl`orr<#t!*oO'rVl`krc&)Eq#C*fs8)KcrcnL&rV?Kjq2,C[qZ$9g nG*%[quZrtq"k$hqYpBaL]7&>r;$ li7"ar;l]o!WE#sr=o2$q"t$gp\Xjcq=k6r"p4o-!WW8,-qYgBjr1F1% !=8i1!!3B/oDeUVp%VblP5k1OrVQWpr[[gAp%A(_!X/Z+"Tne#q=spbp0@ZprVE5r#m1/9p\b$h pA1Ze?i']urVc]oqu?]q0_G,B&c`1B"o%rls7u>e!*KO-"p>&0"UFkrpAFU]>6(Php@7qTq>UEo rr;uu!!3'!$3L2+rr;rs!!*&tq#:X!s8W)urr<$"rW!l=rVulsrVlits8Dunp&=c_ScJuq!;cZi p\X[`qu?TnrVud0s7c9f!W)m#!WiH*!;ulrrVu`p!<)rtrndYaqu$0b"p"\rqu$Hns8Mcm&bc," pAP*srVZJe!W)Hdo`"dfrr<#t!*B.!rVl`lpBCU!qu??fs8MinrrWZ-rqcNirpL*o>P.mmoDSFR rLs>jr:pC6lrr)3`J,~> li7"ar;l]o!WE#sr=o2$q"t$gp\Xjcq=k6r"p4o-!WW8,-qYgBjr1F1% !=8i1!!3B/oDeUVp%VblP5k1OrVQWpr[[gAp%A(_!X/Z+"Tne#q=spbp0@ZprVE5r#m1/9p\b$h pA1Ze?i']urVc]oqu?]q0_G,B&c`1B"o%rls7u>e!*KO-"p>&0"UFkrpAFU]>6(Php@7qTq>UEo rr;uu!!3'!$3L2+rr;rs!!*&tq#:X!s8W)urr<$"rW!l=rVulsrVlits8Dunp&=c_ScJuq!;cZi p\X[`qu?TnrVud0s7c9f!W)m#!WiH*!;ulrrVu`p!<)rtrndYaqu$0b"p"\rqu$Hns8Mcm&bc," pAP*srVZJe!W)Hdo`"dfrr<#t!*B.!rVl`lpBCU!qu??fs8MinrrWZ-rqcNirpL*o>P.mmoDSFR rLs>jr:pC6lrr)3`J,~> li7"ar;l]o!WE#sr=o2$q"t$gp\Xjcq=k6r"p4o-!WW8,-qYgBjr1F1% !=8i1!!3B/oDeUVp%VblP5k1OrVQWpr[[gAp%A(_!X/Z+"Tne#q=spbp0@ZprVE5r#m1/9p\b$h pA1Ze?i']urVc]oqu?]q0_G,B&c`1B"o%rls7u>e!*KO-"p>&0"UFkrpAFU]>6(Php@7qTq>UEo rr;uu!!3'!$3L2+rr;rs!!*&tq#:X!s8W)urr<$"rW!l=rVulsrVlits8Dunp&=c_ScJuq!;cZi p\X[`qu?TnrVud0s7c9f!W)m#!WiH*!;ulrrVu`p!<)rtrndYaqu$0b"p"\rqu$Hns8Mcm&bc," pAP*srVZJe!W)Hdo`"dfrr<#t!*B.!rVl`lpBCU!qu??fs8MinrrWZ-rqcNirpL*o>P.mmoDSFR rLs>jr:pC6lrr)3`J,~> li7"ar;l]o!;uip(&7P"p&Fp_r;Q]erVZ`u!X&T,!rrA=rrE&tr?hI2o=G&(!<(!br:pU9pSs7ii%!rDcfrVuNcq>C@eqtKp[ o_eLVqtKg_q=ad[nb`Fg#lXSsqYC!e6j'mmqu-Eirr9S1$N0f!qtp li7"ar;l]o!;uip(&7P"p&Fp_r;Q]erVZ`u!X&T,!rrA=rrE&tr?hI2o=G&(!<(!br:pU9pSs7ii%!rDcfrVuNcq>C@eqtKp[ o_eLVqtKg_q=ad[nb`Fg#lXSsqYC!e6j'mmqu-Eirr9S1$N0f!qtp li7"ar;l]o!;uip(&7P"p&Fp_r;Q]erVZ`u!X&T,!rrA=rrE&tr?hI2o=G&(!<(!br:pU9pSs7ii%!rDcfrVuNcq>C@eqtKp[ o_eLVqtKg_q=ad[nb`Fg#lXSsqYC!e6j'mmqu-Eirr9S1$N0f!qtp li7"ar;l]o#5e>rrVc0Wrqd6)rr2fjrVccs#mCG5!rrA=s!n$HrVQ6]r:L3o%0lqcrV-0erUU@* !rr?5!=&W.rVQHhnbi^uoDSXeq"t*jr[.L:s7ZNt!!*6(!1'Ro_\M9!Y3HRrVQHiqYgm'rU^'grq-0^rr<)srr2oo!;ufpm/MS~> li7"ar;l]o#5e>rrVc0Wrqd6)rr2fjrVccs#mCG5!rrA=s!n$HrVQ6]r:L3o%0lqcrV-0erUU@* !rr?5!=&W.rVQHhnbi^uoDSXeq"t*jr[.L:s7ZNt!!*6(!1'Ro_\M9!Y3HRrVQHiqYgm'rU^'grq-0^rr<)srr2oo!;ufpm/MS~> li7"ar;l]o#5e>rrVc0Wrqd6)rr2fjrVccs#mCG5!rrA=s!n$HrVQ6]r:L3o%0lqcrV-0erUU@* !rr?5!=&W.rVQHhnbi^uoDSXeq"t*jr[.L:s7ZNt!!*6(!1'Ro_\M9!Y3HRrVQHiqYgm'rU^'grq-0^rr<)srr2oo!;ufpm/MS~> li7"ar;l]o)>a7.rpp$Srr2Zdq"4RbpCdN:-brVlitrV?orq6'clP0EdrU^$bqYpKkoB6Aurr2Zj q#9sb"pau%q=spcpAXXVqu6 li7"ar;l]o)>a7.rpp$Srr2Zdq"4RbpCdN:-brVlitrV?orq6'clP0EdrU^$bqYpKkoB6Aurr2Zj q#9sb"pau%q=spcpAXXVqu6 li7"ar;l]o)>a7.rpp$Srr2Zdq"4RbpCdN:-brVlitrV?orq6'clP0EdrU^$bqYpKkoB6Aurr2Zj q#9sb"pau%q=spcpAXXVqu6 li7"ar;l]o)>X.,s7Q![nbDqVq>'aUq>^Tt#QXo*!<<,:s!n$HrV60ej8KAc"UG)0rqQKlrV$[* !]s`rUgs2ir8lUo_\[grZ;%;s6]je%0-A:!!E5lpAXp`"9\T$o_\Oc!!!$#!<2s* qu6Hk!;cWkqtp^Hn0DbYJ%gW@D$L@]RmJm.h!!!?+!tYhBrp]gaq"!q["o&#lqu69err<#t s8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!#l"UBl"T[N\ s82ikrq?p[pAbL*qtg li7"ar;l]o)>X.,s7Q![nbDqVq>'aUq>^Tt#QXo*!<<,:s!n$HrV60ej8KAc"UG)0rqQKlrV$[* !]s`rUgs2ir8lUo_\[grZ;%;s6]je%0-A:!!E5lpAXp`"9\T$o_\Oc!!!$#!<2s* qu6Hk!;cWkqtp^Hn0DbYJ%gW@D$L@]RmJm.h!!!?+!tYhBrp]gaq"!q["o&#lqu69err<#t s8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!#l"UBl"T[N\ s82ikrq?p[pAbL*qtg li7"ar;l]o)>X.,s7Q![nbDqVq>'aUq>^Tt#QXo*!<<,:s!n$HrV60ej8KAc"UG)0rqQKlrV$[* !]s`rUgs2ir8lUo_\[grZ;%;s6]je%0-A:!!E5lpAXp`"9\T$o_\Oc!!!$#!<2s* qu6Hk!;cWkqtp^Hn0DbYJ%gW@D$L@]RmJm.h!!!?+!tYhBrp]gaq"!q["o&#lqu69err<#t s8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!#l"UBl"T[N\ s82ikrq?p[pAbL*qtg li7"ar;l]o)Ys7-rr2s%!!`K0!!!?+"onl3!!!$"!<<0#rr2os!<1.@!<2ur-i`llrUKRZqZ7#sr;HHes8)`jp\t0l*VTa=!Vu]irV$9ie-l*OrVuijs7ZBir;J#G #PIrmr;lorrVl6bJ,~> li7"ar;l]o)Ys7-rr2s%!!`K0!!!?+"onl3!!!$"!<<0#rr2os!<1.@!<2ur-i`llrUKRZqZ7#sr;HHes8)`jp\t0l*VTa=!Vu]irV$9ie-l*OrVuijs7ZBir;J#G #PIrmr;lorrVl6bJ,~> li7"ar;l]o)Ys7-rr2s%!!`K0!!!?+"onl3!!!$"!<<0#rr2os!<1.@!<2ur-i`llrUKRZqZ7#sr;HHes8)`jp\t0l*VTa=!Vu]irV$9ie-l*OrVuijs7ZBir;J#G #PIrmr;lorrVl6bJ,~> li7"ar;l`p"TeZ'rr2rq!!!&p!"/f6!!36-rqZEgrr;usb5_M@..d<4oD8@d!WrW4#Q!riq#($j !Pk!!*'.q=smbrV$?o#7U\;"Z?8Vqu-9h!X/K$rVm0&s 8W)urr<$"rW!9,rVulsrVlits8D`m#lal(rr;uu!!3'!$j-D-rr;rs!!*&us8Mus$NC#&qYL*er Vlfrq#2$,qZ$-cqY'so"9AK'!WE&trVu`p!<)rtrn[S\r:pBnrqZNhqtp?i#Q+JpqT$_[#Q=cpa N=Sd3;*7JqudQ-p%SFbs8N&tr;ls!rVlcqrr)cq%0Z.ur;66e$T.kZp\k!erVZQirVlcr$HDuAn b`@Wr li7"ar;l`p"TeZ'rr2rq!!!&p!"/f6!!36-rqZEgrr;usb5_M@..d<4oD8@d!WrW4#Q!riq#($j !Pk!!*'.q=smbrV$?o#7U\;"Z?8Vqu-9h!X/K$rVm0&s 8W)urr<$"rW!9,rVulsrVlits8D`m#lal(rr;uu!!3'!$j-D-rr;rs!!*&us8Mus$NC#&qYL*er Vlfrq#2$,qZ$-cqY'so"9AK'!WE&trVu`p!<)rtrn[S\r:pBnrqZNhqtp?i#Q+JpqT$_[#Q=cpa N=Sd3;*7JqudQ-p%SFbs8N&tr;ls!rVlcqrr)cq%0Z.ur;66e$T.kZp\k!erVZQirVlcr$HDuAn b`@Wr li7"ar;l`p"TeZ'rr2rq!!!&p!"/f6!!36-rqZEgrr;usb5_M@..d<4oD8@d!WrW4#Q!riq#($j !Pk!!*'.q=smbrV$?o#7U\;"Z?8Vqu-9h!X/K$rVm0&s 8W)urr<$"rW!9,rVulsrVlits8D`m#lal(rr;uu!!3'!$j-D-rr;rs!!*&us8Mus$NC#&qYL*er Vlfrq#2$,qZ$-cqY'so"9AK'!WE&trVu`p!<)rtrn[S\r:pBnrqZNhqtp?i#Q+JpqT$_[#Q=cpa N=Sd3;*7JqudQ-p%SFbs8N&tr;ls!rVlcqrr)cq%0Z.ur;66e$T.kZp\k!erVZQirVlcr$HDuAn b`@Wr li7"ar;l`p"TeZ'rr2rq!!!&p!"0&4!<`i:rq?3drr;usb5_M@./E<*qYg-g#m^YM!Ufg]q#'pf "p+l,"9SGsp\aa[qu@0'o_A4Yp&G$js8OhPr;H0a"U5;@!ppqtp6eZ2b%5 !XJc4#6b)5qY^0`o+D/oqY0sfs8N&ur li7"ar;l`p"TeZ'rr2rq!!!&p!"0&4!<`i:rq?3drr;usb5_M@./E<*qYg-g#m^YM!Ufg]q#'pf "p+l,"9SGsp\aa[qu@0'o_A4Yp&G$js8OhPr;H0a"U5;@!ppqtp6eZ2b%5 !XJc4#6b)5qY^0`o+D/oqY0sfs8N&ur li7"ar;l`p"TeZ'rr2rq!!!&p!"0&4!<`i:rq?3drr;usb5_M@./E<*qYg-g#m^YM!Ufg]q#'pf "p+l,"9SGsp\aa[qu@0'o_A4Yp&G$js8OhPr;H0a"U5;@!ppqtp6eZ2b%5 !XJc4#6b)5qY^0`o+D/oqY0sfs8N&ur li7"ar;l`p"TeZ'rr2rq!!!&p!"/r1!s&E5s7uNhrr;usb5_M@7.gBSpA4dh#mCS:#Q=Vns8M`m "TST,!sJ;sq>'pcR/parq"Xm^qu?]qs8W)squ??f#Rq(B!W`B+q>U-drr!!(q#(-i([q69!!`W0 $N'AhqY^>(#*o&[qtp?irql`qr\411"!!*3'rVQKlqt^9s"9eo/!VlQkmf3$M!G20+r;HWo s8W)us8N&u!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'0!r`/us8Drt!<<#rr;?NlrVlfp r;QZnrVdT-p\4I_rVlBg"Te]*!W`3!rr)lo!!)uts8LmT#5\;i".];err$^5rVcZkqtBgg"U"f1 "U"r4$jHd$r;QWk#n-Ius8DrsrVulq!W`<"s8N&urqZcu#k[carUU*qs7lE^rVQNkr;6BirqH0f% /'MkrqQ3`r's\#R9qsq#13krVc`pm f.e~> li7"ar;l`p"TeZ'rr2rq!!!&p!"/r1!s&E5s7uNhrr;usb5_M@7.gBSpA4dh#mCS:#Q=Vns8M`m "TST,!sJ;sq>'pcR/parq"Xm^qu?]qs8W)squ??f#Rq(B!W`B+q>U-drr!!(q#(-i([q69!!`W0 $N'AhqY^>(#*o&[qtp?irql`qr\411"!!*3'rVQKlqt^9s"9eo/!VlQkmf3$M!G20+r;HWo s8W)us8N&u!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'0!r`/us8Drt!<<#rr;?NlrVlfp r;QZnrVdT-p\4I_rVlBg"Te]*!W`3!rr)lo!!)uts8LmT#5\;i".];err$^5rVcZkqtBgg"U"f1 "U"r4$jHd$r;QWk#n-Ius8DrsrVulq!W`<"s8N&urqZcu#k[carUU*qs7lE^rVQNkr;6BirqH0f% /'MkrqQ3`r's\#R9qsq#13krVc`pm f.e~> li7"ar;l`p"TeZ'rr2rq!!!&p!"/r1!s&E5s7uNhrr;usb5_M@7.gBSpA4dh#mCS:#Q=Vns8M`m "TST,!sJ;sq>'pcR/parq"Xm^qu?]qs8W)squ??f#Rq(B!W`B+q>U-drr!!(q#(-i([q69!!`W0 $N'AhqY^>(#*o&[qtp?irql`qr\411"!!*3'rVQKlqt^9s"9eo/!VlQkmf3$M!G20+r;HWo s8W)us8N&u!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'0!r`/us8Drt!<<#rr;?NlrVlfp r;QZnrVdT-p\4I_rVlBg"Te]*!W`3!rr)lo!!)uts8LmT#5\;i".];err$^5rVcZkqtBgg"U"f1 "U"r4$jHd$r;QWk#n-Ius8DrsrVulq!W`<"s8N&urqZcu#k[carUU*qs7lE^rVQNkr;6BirqH0f% /'MkrqQ3`r's\#R9qsq#13krVc`pm f.e~> li7"ar;l`p"TeZ'rr2rq!!!&n!"B#5!=Af&r;?Nmrr;usbQ%VA-i`]5rqcNt"pP)3#Q4Dpq#0r8 "onZ,":4Vjq>C0c":+\sp@J:^qY^@Krr)`ipAPC&$igG2"U"Jps82Ng#7(/&s8;]mq#::*`I0^)`!"/l*p\ssdo`bHmqtp"up\t!apB(R$!WrK(rVulqs8)crrVuoshZ!o]r9jdpqYg9gr;HTor&F_*#7(D3#R:J7 #R(S=!JC+CrWEQ,q>1'is8DurquHctrVuirs8Md"!XSZ%s7gp@L&:T>qZ$Hlr;ZXCr;QTe!^^'qu$E`qYu$LIJj!As8N]-rqHBfnH&fCrVQNhqYgBlrpKf:~> li7"ar;l`p"TeZ'rr2rq!!!&n!"B#5!=Af&r;?Nmrr;usbQ%VA-i`]5rqcNt"pP)3#Q4Dpq#0r8 "onZ,":4Vjq>C0c":+\sp@J:^qY^@Krr)`ipAPC&$igG2"U"Jps82Ng#7(/&s8;]mq#::*`I0^)`!"/l*p\ssdo`bHmqtp"up\t!apB(R$!WrK(rVulqs8)crrVuoshZ!o]r9jdpqYg9gr;HTor&F_*#7(D3#R:J7 #R(S=!JC+CrWEQ,q>1'is8DurquHctrVuirs8Md"!XSZ%s7gp@L&:T>qZ$Hlr;ZXCr;QTe!^^'qu$E`qYu$LIJj!As8N]-rqHBfnH&fCrVQNhqYgBlrpKf:~> li7"ar;l`p"TeZ'rr2rq!!!&n!"B#5!=Af&r;?Nmrr;usbQ%VA-i`]5rqcNt"pP)3#Q4Dpq#0r8 "onZ,":4Vjq>C0c":+\sp@J:^qY^@Krr)`ipAPC&$igG2"U"Jps82Ng#7(/&s8;]mq#::*`I0^)`!"/l*p\ssdo`bHmqtp"up\t!apB(R$!WrK(rVulqs8)crrVuoshZ!o]r9jdpqYg9gr;HTor&F_*#7(D3#R:J7 #R(S=!JC+CrWEQ,q>1'is8DurquHctrVuirs8Md"!XSZ%s7gp@L&:T>qZ$Hlr;ZXCr;QTe!^^'qu$E`qYu$LIJj!As8N]-rqHBfnH&fCrVQNhqYgBlrpKf:~> li7"ar;l`p"TeZ'rr2rq!!!&n!!s8W(*s7c3aq=U-e"p=r.C&7c'qYU0n "on`.#k7Ner;??n"TA/qnG`I_s8W)us8Muoo`'"5"98N1!s&W(oDe^^rWWH%qYC'erpp$l"T\Z, !r_WgoD8:b"S_ihpAXjaqu?]q,l%<:oT]Rc!!i^Aq=OI\qt14-!!ro2r;6^Hkr;65Q!rDZhrVulrrVc`ls8N'!Q1FkIp\O^f"9.rkrVHL)rVQWdrf@3_s7uTgqu-9grpKf:~> li7"ar;l`p"TeZ'rr2rq!!!&n!!s8W(*s7c3aq=U-e"p=r.C&7c'qYU0n "on`.#k7Ner;??n"TA/qnG`I_s8W)us8Muoo`'"5"98N1!s&W(oDe^^rWWH%qYC'erpp$l"T\Z, !r_WgoD8:b"S_ihpAXjaqu?]q,l%<:oT]Rc!!i^Aq=OI\qt14-!!ro2r;6^Hkr;65Q!rDZhrVulrrVc`ls8N'!Q1FkIp\O^f"9.rkrVHL)rVQWdrf@3_s7uTgqu-9grpKf:~> li7"ar;l`p"TeZ'rr2rq!!!&n!!s8W(*s7c3aq=U-e"p=r.C&7c'qYU0n "on`.#k7Ner;??n"TA/qnG`I_s8W)us8Muoo`'"5"98N1!s&W(oDe^^rWWH%qYC'erpp$l"T\Z, !r_WgoD8:b"S_ihpAXjaqu?]q,l%<:oT]Rc!!i^Aq=OI\qt14-!!ro2r;6^Hkr;65Q!rDZhrVulrrVc`ls8N'!Q1FkIp\O^f"9.rkrVHL)rVQWdrf@3_s7uTgqu-9grpKf:~> li7"ar;l`p"TeZ'rr2rq!!!&o!"K,4!=T)(r;?Hgqu-NnrQG6@rXAbtq>C0fp^7',#7(>.r"o8/ !s8N,!Nu+er;?6d!W`8qpAFdcqu?Zps8OhPr;$*l#R^V9":#14o_/1]o_0""o(`+[q>U-f!s&B. !Xn\pq>1'a!=&/frV69iqtpEnrZCq.rqc-k$3:D4&bGMjs8;[#"pP21Xnr%ar;H?q!VlZls8Doq s8N9%s8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!"/l,s8N#rrr<'!qtg9h!r`,toD]^- r;6Nln+ubKq=k!m!!lp&4^Y rrWK/p]()l!<;]kqu-Kks8Dis!s/E#r;HNhrW!"qrVlNj"0MFtrql6_qYpBlqA/u,pA4[f##k9q qXa^`oF+Uiqu-Norr2g+pA@br"SDEUqY'se$E!:grr)co&bc5&p%eL_!sVd(pAXj]qu6T_s*t~> li7"ar;l`p"TeZ'rr2rq!!!&o!"K,4!=T)(r;?Hgqu-NnrQG6@rXAbtq>C0fp^7',#7(>.r"o8/ !s8N,!Nu+er;?6d!W`8qpAFdcqu?Zps8OhPr;$*l#R^V9":#14o_/1]o_0""o(`+[q>U-f!s&B. !Xn\pq>1'a!=&/frV69iqtpEnrZCq.rqc-k$3:D4&bGMjs8;[#"pP21Xnr%ar;H?q!VlZls8Doq s8N9%s8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!"/l,s8N#rrr<'!qtg9h!r`,toD]^- r;6Nln+ubKq=k!m!!lp&4^Y rrWK/p]()l!<;]kqu-Kks8Dis!s/E#r;HNhrW!"qrVlNj"0MFtrql6_qYpBlqA/u,pA4[f##k9q qXa^`oF+Uiqu-Norr2g+pA@br"SDEUqY'se$E!:grr)co&bc5&p%eL_!sVd(pAXj]qu6T_s*t~> li7"ar;l`p"TeZ'rr2rq!!!&o!"K,4!=T)(r;?Hgqu-NnrQG6@rXAbtq>C0fp^7',#7(>.r"o8/ !s8N,!Nu+er;?6d!W`8qpAFdcqu?Zps8OhPr;$*l#R^V9":#14o_/1]o_0""o(`+[q>U-f!s&B. !Xn\pq>1'a!=&/frV69iqtpEnrZCq.rqc-k$3:D4&bGMjs8;[#"pP21Xnr%ar;H?q!VlZls8Doq s8N9%s8N'!!WE'+!r`/us8Drt!<<#mrs8W(s8N&u!!!'!!"/l,s8N#rrr<'!qtg9h!r`,toD]^- r;6Nln+ubKq=k!m!!lp&4^Y rrWK/p]()l!<;]kqu-Kks8Dis!s/E#r;HNhrW!"qrVlNj"0MFtrql6_qYpBlqA/u,pA4[f##k9q qXa^`oF+Uiqu-Norr2g+pA@br"SDEUqY'se$E!:grr)co&bc5&p%eL_!sVd(pAXj]qu6T_s*t~> li7"ar;l`p"TeZ'rr2rq!!!&o!"K&1"U)[>r;QZmrVlisrlb?@r[7U7rVlTj!!WT.!XAZ'qYg6g $j$D0!<)flq#($`"9\;ir:p$cp](6ls8OhQr;QR$!XJf-"p+l)oDJR^q`G(mqY0jcrV?Hg_?p8H "9\K!qtp?j`W8=$m/H_Yrql`qrZD(5s7l?k"9ei."oJ/ps7c0l$3LA6q#0g\qt^'j!;ucnrVlis "oeQ%!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'5!r`/urqucr!<;olrVcZlrVlfrrq69u rVQHdq>BmYqY*#L!"/i3!s&?#rr)lo!!)uts8LjS#Q">o&HVk-qu-Hmqe5j)pVm@>"SMZhs7uQl !Bs_rr2?cJ,~> li7"ar;l`p"TeZ'rr2rq!!!&o!"K&1"U)[>r;QZmrVlisrlb?@r[7U7rVlTj!!WT.!XAZ'qYg6g $j$D0!<)flq#($`"9\;ir:p$cp](6ls8OhQr;QR$!XJf-"p+l)oDJR^q`G(mqY0jcrV?Hg_?p8H "9\K!qtp?j`W8=$m/H_Yrql`qrZD(5s7l?k"9ei."oJ/ps7c0l$3LA6q#0g\qt^'j!;ucnrVlis "oeQ%!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'5!r`/urqucr!<;olrVcZlrVlfrrq69u rVQHdq>BmYqY*#L!"/i3!s&?#rr)lo!!)uts8LjS#Q">o&HVk-qu-Hmqe5j)pVm@>"SMZhs7uQl !Bs_rr2?cJ,~> li7"ar;l`p"TeZ'rr2rq!!!&o!"K&1"U)[>r;QZmrVlisrlb?@r[7U7rVlTj!!WT.!XAZ'qYg6g $j$D0!<)flq#($`"9\;ir:p$cp](6ls8OhQr;QR$!XJf-"p+l)oDJR^q`G(mqY0jcrV?Hg_?p8H "9\K!qtp?j`W8=$m/H_Yrql`qrZD(5s7l?k"9ei."oJ/ps7c0l$3LA6q#0g\qt^'j!;ucnrVlis "oeQ%!!!'!!"&f+s8N&srr<'!rV6Burr<#ts8N'!!WE'5!r`/urqucr!<;olrVcZlrVlfrrq69u rVQHdq>BmYqY*#L!"/i3!s&?#rr)lo!!)uts8LjS#Q">o&HVk-qu-Hmqe5j)pVm@>"SMZhs7uQl !Bs_rr2?cJ,~> nGiLe)ZTg6pt>rX!=&T/!!!-(!<;lirr**%!WW<+q>gKq%KH_7!WN)_rVZTlrr<#tbQ%VA-ia/A rr2lq"9f,5"TeMqqt^6Z"UtG8"9&,pq#9t;"lB+Lp\=^erVc`qs"XNNs7Q^("TSN)!=n\qrr2iq !=\>prV?HmrqZEi!W`T-!%RmDrqQNe!!<2ts8;fnqu?]q,Ph>sq#1Ht#QOi2n,*+WrVQd!"9]&. rpg$dp+?O's7Q*^rVZX"r;ZcrrW*!"rW!9,rVulsrVlits8D`m#lac%rr;ru!!3'!$Ng;,rr2iq !!*#oqu6R'p@nRcqu6WqqY:!bs8;j!rVlf]rr2j7,Td9s!sJ],!!<,qrqufd!###'rr;oos8W&V s"= nGiLe)ZTg6pt>rX!=&T/!!!-(!<;lirr**%!WW<+q>gKq%KH_7!WN)_rVZTlrr<#tbQ%VA-ia/A rr2lq"9f,5"TeMqqt^6Z"UtG8"9&,pq#9t;"lB+Lp\=^erVc`qs"XNNs7Q^("TSN)!=n\qrr2iq !=\>prV?HmrqZEi!W`T-!%RmDrqQNe!!<2ts8;fnqu?]q,Ph>sq#1Ht#QOi2n,*+WrVQd!"9]&. rpg$dp+?O's7Q*^rVZX"r;ZcrrW*!"rW!9,rVulsrVlits8D`m#lac%rr;ru!!3'!$Ng;,rr2iq !!*#oqu6R'p@nRcqu6WqqY:!bs8;j!rVlf]rr2j7,Td9s!sJ],!!<,qrqufd!###'rr;oos8W&V s"= nGiLe)ZTg6pt>rX!=&T/!!!-(!<;lirr**%!WW<+q>gKq%KH_7!WN)_rVZTlrr<#tbQ%VA-ia/A rr2lq"9f,5"TeMqqt^6Z"UtG8"9&,pq#9t;"lB+Lp\=^erVc`qs"XNNs7Q^("TSN)!=n\qrr2iq !=\>prV?HmrqZEi!W`T-!%RmDrqQNe!!<2ts8;fnqu?]q,Ph>sq#1Ht#QOi2n,*+WrVQd!"9]&. rpg$dp+?O's7Q*^rVZX"r;ZcrrW*!"rW!9,rVulsrVlits8D`m#lac%rr;ru!!3'!$Ng;,rr2iq !!*#oqu6R'p@nRcqu6WqqY:!bs8;j!rVlf]rr2j7,Td9s!sJ],!!<,qrqufd!###'rr;oos8W&V s"= nGiLe)uom6q#17#$31b?!Wi?(#5\2qs8E'&!!N?&"TAE$!WE-2!!`K/kl9W@rVZTlrr<#taT!UQ rr1jTrW!!&!<^6hr;ZWarr`?&"pY/*pAaOWrW!H$rUg*gq"aq=pYc#Lp&Ga+"9\`(rTa%MrpKgj$ip:n rpKdb!!WB!q"adarVlirs8;lr"9&?%!WE'+!r`/us8Drt!<<#lrrDurrr`6%!!3'!3Wf9[rr2iq !sUrWiK3q"FabrqZm, rqlEcrqlWmqYpKorql0\rV-0b#QP;4oDS[dr;HZqrr2KgJ,~> nGiLe)uom6q#17#$31b?!Wi?(#5\2qs8E'&!!N?&"TAE$!WE-2!!`K/kl9W@rVZTlrr<#taT!UQ rr1jTrW!!&!<^6hr;ZWarr`?&"pY/*pAaOWrW!H$rUg*gq"aq=pYc#Lp&Ga+"9\`(rTa%MrpKgj$ip:n rpKdb!!WB!q"adarVlirs8;lr"9&?%!WE'+!r`/us8Drt!<<#lrrDurrr`6%!!3'!3Wf9[rr2iq !sUrWiK3q"FabrqZm, rqlEcrqlWmqYpKorql0\rV-0b#QP;4oDS[dr;HZqrr2KgJ,~> nGiLe)uom6q#17#$31b?!Wi?(#5\2qs8E'&!!N?&"TAE$!WE-2!!`K/kl9W@rVZTlrr<#taT!UQ rr1jTrW!!&!<^6hr;ZWarr`?&"pY/*pAaOWrW!H$rUg*gq"aq=pYc#Lp&Ga+"9\`(rTa%MrpKgj$ip:n rpKdb!!WB!q"adarVlirs8;lr"9&?%!WE'+!r`/us8Drt!<<#lrrDurrr`6%!!3'!3Wf9[rr2iq !sUrWiK3q"FabrqZm, rqlEcrqlWmqYpKorql0\rV-0b#QP;4oDS[dr;HZqrr2KgJ,~> nGiId)ZBR/rpgR,!s&B,!!N?)r;QEhqZ@*("p"])quH]srr:0[s*t~> nGiId)ZBR/rpgR,!s&B,!!N?)r;QEhqZ@*("p"])quH]srr:0[s*t~> nGiId)ZBR/rpgR,!s&B,!!N?)r;QEhqZ@*("p"])quH]srr:0[s*t~> n,NCd)?'L1r:g.=.46Gi.jleprV-6br[9-I.k!"K./taq-kIaZ./:!bq#<)Le,9.CqYg$b"jd)Gp$__Lr;cp!r;HNgrV6^!rr;K[q#(-kqu$Kq rV?B^rq?$]qu.rIfDkXDqY9sen,In~> n,NCd)?'L1r:g.=.46Gi.jleprV-6br[9-I.k!"K./taq-kIaZ./:!bq#<)Le,9.CqYg$b"jd)Gp$__Lr;cp!r;HNgrV6^!rr;K[q#(-kqu$Kq rV?B^rq?$]qu.rIfDkXDqY9sen,In~> n,NCd)?'L1r:g.=.46Gi.jleprV-6br[9-I.k!"K./taq-kIaZ./:!bq#<)Le,9.CqYg$b"jd)Gp$__Lr;cp!r;HNgrV6^!rr;K[q#(-kqu$Kq rV?B^rq?$]qu.rIfDkXDqY9sen,In~> nc&Ugrr<#ss84PFrUp!]rqlQhrVQQiq=FR`r;H^YD' r;QHg_?3=+p&4jgs8N0"s8Dor&-N%:!1!dqs=4Urr2]n$2j\srq-'c!=SAorUg!epBM!,p&"C\q>LU`qu6QkrVQTo q>C9nrVc nc&Ugrr<#ss84PFrUp!]rqlQhrVQQiq=FR`r;H^YD' r;QHg_?3=+p&4jgs8N0"s8Dor&-N%:!1!dqs=4Urr2]n$2j\srq-'c!=SAorUg!epBM!,p&"C\q>LU`qu6QkrVQTo q>C9nrVc nc&Ugrr<#ss84PFrUp!]rqlQhrVQQiq=FR`r;H^YD' r;QHg_?3=+p&4jgs8N0"s8Dor&-N%:!1!dqs=4Urr2]n$2j\srq-'c!=SAorUg!epBM!,p&"C\q>LU`qu6QkrVQTo q>C9nrVc nc&Ugrr3r9r;HWmq"F[dr;?*`q>L6kq>LVW;qYC$crW*0*";Cq;q=sFUq-O7* rUTa[rqd!(qtTsbrr)lsrW3&trVmE4!s8T+!5eBfr;?Ee#mp+ss8;fps8DoqiVsPd rquZerV6?hrE!2+"fJ&mUoOBkH_[R:Vl'LurV$0eq#('cq=@YoVk^0_o)>S`VkaLt!!ZI%rVQEo W2HJhVl-AfVl6Bm!N5PeqYU3_pSFa^!X,G"q#C9]r*'3&T;ABSWM]au?iKTop&+diW2HJiUnX]` VkU'h!N>elqXsaVp8=LY#RRF$qYU-erpTl;~> nc&Ugrr3r9r;HWmq"F[dr;?*`q>L6kq>LVW;qYC$crW*0*";Cq;q=sFUq-O7* rUTa[rqd!(qtTsbrr)lsrW3&trVmE4!s8T+!5eBfr;?Ee#mp+ss8;fps8DoqiVsPd rquZerV6?hrE!2+"fJ&mUoOBkH_[R:Vl'LurV$0eq#('cq=@YoVk^0_o)>S`VkaLt!!ZI%rVQEo W2HJhVl-AfVl6Bm!N5PeqYU3_pSFa^!X,G"q#C9]r*'3&T;ABSWM]au?iKTop&+diW2HJiUnX]` VkU'h!N>elqXsaVp8=LY#RRF$qYU-erpTl;~> nc&Ugrr3r9r;HWmq"F[dr;?*`q>L6kq>LVW;qYC$crW*0*";Cq;q=sFUq-O7* rUTa[rqd!(qtTsbrr)lsrW3&trVmE4!s8T+!5eBfr;?Ee#mp+ss8;fps8DoqiVsPd rquZerV6?hrE!2+"fJ&mUoOBkH_[R:Vl'LurV$0eq#('cq=@YoVk^0_o)>S`VkaLt!!ZI%rVQEo W2HJhVl-AfVl6Bm!N5PeqYU3_pSFa^!X,G"q#C9]r*'3&T;ABSWM]au?iKTop&+diW2HJiUnX]` VkU'h!N>elqXsaVp8=LY#RRF$qYU-erpTl;~> nc&Ugrr3r9r;HZkqYU6jrql]mr;6EhrqlZoqYg(!bqu$Bgr;HQkrVlisrlG*\ qY^3hqu-J2"U52:!0$OCqtU*b"9\Ssp&"R^!=/H!r;ccprVlfqrrW/s!WE9R!XAr2F8>h4qu;HV EW#Y-p&+a^s7uN^rriT-"U>8,o_\1Xo*kp!q#16jq#;N7rV$'bDZ^LR#7$=irV-9cp]gltrr2cj qud3&p[nIas8;iss8Dor&-`7?!WrH*rVulsrVlits8D]l!<)lr,6e8R!WrH*rVulsr;Q`ss8Dum q"asm!!!'$#&e>.4!!NN-"Tn`) "9AQ+",W(rN/WgT"UP>9!XJVoq>C3ks8N#gs*t~> nc&Ugrr3r9r;HZkqYU6jrql]mr;6EhrqlZoqYg(!bqu$Bgr;HQkrVlisrlG*\ qY^3hqu-J2"U52:!0$OCqtU*b"9\Ssp&"R^!=/H!r;ccprVlfqrrW/s!WE9R!XAr2F8>h4qu;HV EW#Y-p&+a^s7uN^rriT-"U>8,o_\1Xo*kp!q#16jq#;N7rV$'bDZ^LR#7$=irV-9cp]gltrr2cj qud3&p[nIas8;iss8Dor&-`7?!WrH*rVulsrVlits8D]l!<)lr,6e8R!WrH*rVulsr;Q`ss8Dum q"asm!!!'$#&e>.4!!NN-"Tn`) "9AQ+",W(rN/WgT"UP>9!XJVoq>C3ks8N#gs*t~> nc&Ugrr3r9r;HZkqYU6jrql]mr;6EhrqlZoqYg(!bqu$Bgr;HQkrVlisrlG*\ qY^3hqu-J2"U52:!0$OCqtU*b"9\Ssp&"R^!=/H!r;ccprVlfqrrW/s!WE9R!XAr2F8>h4qu;HV EW#Y-p&+a^s7uN^rriT-"U>8,o_\1Xo*kp!q#16jq#;N7rV$'bDZ^LR#7$=irV-9cp]gltrr2cj qud3&p[nIas8;iss8Dor&-`7?!WrH*rVulsrVlits8D]l!<)lr,6e8R!WrH*rVulsr;Q`ss8Dum q"asm!!!'$#&e>.4!!NN-"Tn`) "9AQ+",W(rN/WgT"UP>9!XJVoq>C3ks8N#gs*t~> nc&Ugrr3o9rVliqs8;iprr;utr;HZlrr2lrqu?TorqcNl')qk.q>L?kr;Zcorr)fprr<#taT!U` s8;lpr;-0n!<<-(!VuZjq"Xjl"8r2ls7l*e!r`&mq"t!erVulr)?9^7r;6Zt!U3i+8Ps8r;Z]l":5,7#QXo"pA=mb!X&;p rr2]i!W`5rrVliprYGP/s82ip!XJu1#m:;-s8)cjr<<8srqHF@q#C6kr;m6/!!rc/rVu`mp\t6o s8;oks7lWs!!WH(!WW≺-Hmrr2lqrYkb7r;Q]qrJ?F%r;QNdr;-Emq#LPOs7Z?dqYg?mro*lB rql`prVuoprr;cmrV;M1LPPp1#QXr+!!*0,KSKF%r;HQgqtp0eq"fo)! nc&Ugrr3o9rVliqs8;iprr;utr;HZlrr2lrqu?TorqcNl')qk.q>L?kr;Zcorr)fprr<#taT!U` s8;lpr;-0n!<<-(!VuZjq"Xjl"8r2ls7l*e!r`&mq"t!erVulr)?9^7r;6Zt!U3i+8Ps8r;Z]l":5,7#QXo"pA=mb!X&;p rr2]i!W`5rrVliprYGP/s82ip!XJu1#m:;-s8)cjr<<8srqHF@q#C6kr;m6/!!rc/rVu`mp\t6o s8;oks7lWs!!WH(!WW≺-Hmrr2lqrYkb7r;Q]qrJ?F%r;QNdr;-Emq#LPOs7Z?dqYg?mro*lB rql`prVuoprr;cmrV;M1LPPp1#QXr+!!*0,KSKF%r;HQgqtp0eq"fo)! nc&Ugrr3o9rVliqs8;iprr;utr;HZlrr2lrqu?TorqcNl')qk.q>L?kr;Zcorr)fprr<#taT!U` s8;lpr;-0n!<<-(!VuZjq"Xjl"8r2ls7l*e!r`&mq"t!erVulr)?9^7r;6Zt!U3i+8Ps8r;Z]l":5,7#QXo"pA=mb!X&;p rr2]i!W`5rrVliprYGP/s82ip!XJu1#m:;-s8)cjr<<8srqHF@q#C6kr;m6/!!rc/rVu`mp\t6o s8;oks7lWs!!WH(!WW≺-Hmrr2lqrYkb7r;Q]qrJ?F%r;QNdr;-Emq#LPOs7Z?dqYg?mro*lB rql`prVuoprr;cmrV;M1LPPp1#QXr+!!*0,KSKF%r;HQgqtp0eq"fo)! JcG`Ks8O8@qt^0k!!NH-#l"2qqY'pkSH&EXrU]de"9&,jpAFsgr;?R8rr)cm!s&N."98i3r:p6g oD&aqs8Dors8DorrUKmY')MY5"9f-=p@J1[pAY-nq=sg`q>VQ6p&G$^rq?Qt"9\f.q=jmdr;Qb_ qtom_qtpHsq#(!artbG-s8)Nh"UG;5#Qb,+o_eL]rWE5tnbE,3q>:3gq#(@%"p"u2"8qfhpA4^g !WV`hrqlWq"onf1!!)fmrVQTmp](3ks89dYS"cRISXobP$_X&WU7_5Yq#(*i rp]r<~> JcG`Ks8O8@qt^0k!!NH-#l"2qqY'pkSH&EXrU]de"9&,jpAFsgr;?R8rr)cm!s&N."98i3r:p6g oD&aqs8Dors8DorrUKmY')MY5"9f-=p@J1[pAY-nq=sg`q>VQ6p&G$^rq?Qt"9\f.q=jmdr;Qb_ qtom_qtpHsq#(!artbG-s8)Nh"UG;5#Qb,+o_eL]rWE5tnbE,3q>:3gq#(@%"p"u2"8qfhpA4^g !WV`hrqlWq"onf1!!)fmrVQTmp](3ks89dYS"cRISXobP$_X&WU7_5Yq#(*i rp]r<~> JcG`Ks8O8@qt^0k!!NH-#l"2qqY'pkSH&EXrU]de"9&,jpAFsgr;?R8rr)cm!s&N."98i3r:p6g oD&aqs8Dors8DorrUKmY')MY5"9f-=p@J1[pAY-nq=sg`q>VQ6p&G$^rq?Qt"9\f.q=jmdr;Qb_ qtom_qtpHsq#(!artbG-s8)Nh"UG;5#Qb,+o_eL]rWE5tnbE,3q>:3gq#(@%"p"u2"8qfhpA4^g !WV`hrqlWq"onf1!!)fmrVQTmp](3ks89dYS"cRISXobP$_X&WU7_5Yq#(*i rp]r<~> JcGcK,l[iDrquWmZNC:1!"/]'nbqtM#Q"/lrVlXf!Oht*q>($irVcZo1]I@Nqu?j(!so2=!<;rp qYBsq!<<#rrr2inrqQ<`q"jou!X/]/"nqceq==Lb$N9Ytp\FjhqAoV5q>C0#!=o84"T8#crV69p qXF4Rrr,@o[efXpq>V6)s8)Wjqmlk8#6=u6qYKp`q#:U3crq6-cpAb*gqu$Bgq#1*enG`7]r;ZEfq"+F\qY^9jqZd#us8;flqu-Et pAOFNs7Q JcGcK,l[iDrquWmZNC:1!"/]'nbqtM#Q"/lrVlXf!Oht*q>($irVcZo1]I@Nqu?j(!so2=!<;rp qYBsq!<<#rrr2inrqQ<`q"jou!X/]/"nqceq==Lb$N9Ytp\FjhqAoV5q>C0#!=o84"T8#crV69p qXF4Rrr,@o[efXpq>V6)s8)Wjqmlk8#6=u6qYKp`q#:U3crq6-cpAb*gqu$Bgq#1*enG`7]r;ZEfq"+F\qY^9jqZd#us8;flqu-Et pAOFNs7Q JcGcK,l[iDrquWmZNC:1!"/]'nbqtM#Q"/lrVlXf!Oht*q>($irVcZo1]I@Nqu?j(!so2=!<;rp qYBsq!<<#rrr2inrqQ<`q"jou!X/]/"nqceq==Lb$N9Ytp\FjhqAoV5q>C0#!=o84"T8#crV69p qXF4Rrr,@o[efXpq>V6)s8)Wjqmlk8#6=u6qYKp`q#:U3crq6-cpAb*gqu$Bgq#1*enG`7]r;ZEfq"+F\qY^9jqZd#us8;flqu-Et pAOFNs7Q JcGcK!<2ut+T;32qp>QI!s/Aoq=4@V"9.Z`pAY'm"oeAtr;?Tprr2iqs8EE)r5ep>"Te`1d/!_@ rW=bV_uK`7rqmW4qZ$Herql`9!='/@pAXXZr:14!q"t!fq>VQ8qt^0iqssL,!s/H,p\Xmfr;6T_ qt]m_mLBb6qYL$f-iO);rq?6h`rc>B$N^8,qYTa[ 'a"4-rVc3[ciXCN!!<5eqY^-fp%JD"rr)fnr:p'bpA=mf/h[50aSPZ)rV?HGs8W&urVl`pr@7I; o)8O\rqZTmqt'abqu$KmqtprqYU3hrr*`4p[/"PpAFjYr;6BhrVlcnp\t-^o)/+Y r;cics*t~> JcGcK!<2ut+T;32qp>QI!s/Aoq=4@V"9.Z`pAY'm"oeAtr;?Tprr2iqs8EE)r5ep>"Te`1d/!_@ rW=bV_uK`7rqmW4qZ$Herql`9!='/@pAXXZr:14!q"t!fq>VQ8qt^0iqssL,!s/H,p\Xmfr;6T_ qt]m_mLBb6qYL$f-iO);rq?6h`rc>B$N^8,qYTa[ 'a"4-rVc3[ciXCN!!<5eqY^-fp%JD"rr)fnr:p'bpA=mf/h[50aSPZ)rV?HGs8W&urVl`pr@7I; o)8O\rqZTmqt'abqu$KmqtprqYU3hrr*`4p[/"PpAFjYr;6BhrVlcnp\t-^o)/+Y r;cics*t~> JcGcK!<2ut+T;32qp>QI!s/Aoq=4@V"9.Z`pAY'm"oeAtr;?Tprr2iqs8EE)r5ep>"Te`1d/!_@ rW=bV_uK`7rqmW4qZ$Herql`9!='/@pAXXZr:14!q"t!fq>VQ8qt^0iqssL,!s/H,p\Xmfr;6T_ qt]m_mLBb6qYL$f-iO);rq?6h`rc>B$N^8,qYTa[ 'a"4-rVc3[ciXCN!!<5eqY^-fp%JD"rr)fnr:p'bpA=mf/h[50aSPZ)rV?HGs8W&urVl`pr@7I; o)8O\rqZTmqt'abqu$KmqtprqYU3hrr*`4p[/"PpAFjYr;6BhrVlcnp\t-^o)/+Y r;cics*t~> JcG`Krr4,>qu6Nej8]Gj)#jI.p\rq@rVlchqZd-$rVuips8W&rr;Zfrs8T:\#6u(Em.p>Qj8K#M r;QWq!rVHbrqZToq%`ntrr2rrkQM=p"T.ijqYp?n(&S".q>^Kj-3!B4rr;r\"Ub>6qt0mequ6^, rVZKeqYpHLk6V7t!;u]hqssUUrr2j,qu-BjmM6]C!9iYErq??jdJs7Gqu&,=s7,jZqX=FZrqlZ` q>('jrqu]mrVZQiq>'[]q>:'crquEfnc&Fcs8Mupr;QZpr!rW%rVlfrrU^!\rqZBhrqlZorWW#a qY0sQq"tKrqYL*erVcZlrVc]os8<<)q"XIUrVlcmr;HTn#l4JqrV$-]rr2?cJ,~> JcG`Krr4,>qu6Nej8]Gj)#jI.p\rq@rVlchqZd-$rVuips8W&rr;Zfrs8T:\#6u(Em.p>Qj8K#M r;QWq!rVHbrqZToq%`ntrr2rrkQM=p"T.ijqYp?n(&S".q>^Kj-3!B4rr;r\"Ub>6qt0mequ6^, rVZKeqYpHLk6V7t!;u]hqssUUrr2j,qu-BjmM6]C!9iYErq??jdJs7Gqu&,=s7,jZqX=FZrqlZ` q>('jrqu]mrVZQiq>'[]q>:'crquEfnc&Fcs8Mupr;QZpr!rW%rVlfrrU^!\rqZBhrqlZorWW#a qY0sQq"tKrqYL*erVcZlrVc]os8<<)q"XIUrVlcmr;HTn#l4JqrV$-]rr2?cJ,~> JcG`Krr4,>qu6Nej8]Gj)#jI.p\rq@rVlchqZd-$rVuips8W&rr;Zfrs8T:\#6u(Em.p>Qj8K#M r;QWq!rVHbrqZToq%`ntrr2rrkQM=p"T.ijqYp?n(&S".q>^Kj-3!B4rr;r\"Ub>6qt0mequ6^, rVZKeqYpHLk6V7t!;u]hqssUUrr2j,qu-BjmM6]C!9iYErq??jdJs7Gqu&,=s7,jZqX=FZrqlZ` q>('jrqu]mrVZQiq>'[]q>:'crquEfnc&Fcs8Mupr;QZpr!rW%rVlfrrU^!\rqZBhrqlZorWW#a qY0sQq"tKrqYL*erVcZlrVc]os8<<)q"XIUrVlcmr;HTn#l4JqrV$-]rr2?cJ,~> JcGcM!<2ut*W>p(p]'m\!=&tpoDSLYq>KdUn,<)"!;$-err<#trVlfqs8W'8rUTmc!^Ko(&@Rrp&=a]q#^d*meuPGp\>$po)AXas8W'Eq=aLSrqQ9a!sJqtrU'4T pB^ics82iqp?)AAqZ-[#oCVtZl2C;PrVR04!!39."pjo!o)AFRoDe:Xs8DrFs8W'.p&>!jrr)]m qt0m[rr2`hrtG;/rqucqqu6ThrqcWeq#:6jrr2fprr2rtrr*)tq>:$fpAY*irW3&krr*&trr)fp rVm*$rVulqrVlNj(]"!tqu6Kirr;urr;HZqrr;fnp\FCZp?_g0~> JcGcM!<2ut*W>p(p]'m\!=&tpoDSLYq>KdUn,<)"!;$-err<#trVlfqs8W'8rUTmc!^Ko(&@Rrp&=a]q#^d*meuPGp\>$po)AXas8W'Eq=aLSrqQ9a!sJqtrU'4T pB^ics82iqp?)AAqZ-[#oCVtZl2C;PrVR04!!39."pjo!o)AFRoDe:Xs8DrFs8W'.p&>!jrr)]m qt0m[rr2`hrtG;/rqucqqu6ThrqcWeq#:6jrr2fprr2rtrr*)tq>:$fpAY*irW3&krr*&trr)fp rVm*$rVulqrVlNj(]"!tqu6Kirr;urr;HZqrr;fnp\FCZp?_g0~> JcGcM!<2ut*W>p(p]'m\!=&tpoDSLYq>KdUn,<)"!;$-err<#trVlfqs8W'8rUTmc!^Ko(&@Rrp&=a]q#^d*meuPGp\>$po)AXas8W'Eq=aLSrqQ9a!sJqtrU'4T pB^ics82iqp?)AAqZ-[#oCVtZl2C;PrVR04!!39."pjo!o)AFRoDe:Xs8DrFs8W'.p&>!jrr)]m qt0m[rr2`hrtG;/rqucqqu6ThrqcWeq#:6jrr2fprr2rtrr*)tq>:$fpAY*irW3&krr*&trr)fp rVm*$rVulqrVlNj(]"!tqu6Kirr;urr;HZqrr;fnp\FCZp?_g0~> Jc>`Mrr2os)?':-rV6!`)'^+H)&XG;))3!^*$#n;rr2lqs8W$"rr;usrr;us0E(qJrZE'r*ZQ1< )'g(Eq=jgerVQQnrq?9`rr)HfpA4aM)'(%E*>p+>*$"qNrqZR9rVlilq>($eqt^6e-mTZI+;l7B )''e:)&jeV9-rV$3gr;H3brr3iS-lF$G(a0b=rr2Zfs!R[ApAOsfrUTpdrtu_')''S5 *?-:'rV-<^o`!hJrr4#V)B]k7,T6+j"X"^')'JeTrW`^Ko"o\GrqYp Jc>`Mrr2os)?':-rV6!`)'^+H)&XG;))3!^*$#n;rr2lqs8W$"rr;usrr;us0E(qJrZE'r*ZQ1< )'g(Eq=jgerVQQnrq?9`rr)HfpA4aM)'(%E*>p+>*$"qNrqZR9rVlilq>($eqt^6e-mTZI+;l7B )''e:)&jeV9-rV$3gr;H3brr3iS-lF$G(a0b=rr2Zfs!R[ApAOsfrUTpdrtu_')''S5 *?-:'rV-<^o`!hJrr4#V)B]k7,T6+j"X"^')'JeTrW`^Ko"o\GrqYp Jc>`Mrr2os)?':-rV6!`)'^+H)&XG;))3!^*$#n;rr2lqs8W$"rr;usrr;us0E(qJrZE'r*ZQ1< )'g(Eq=jgerVQQnrq?9`rr)HfpA4aM)'(%E*>p+>*$"qNrqZR9rVlilq>($eqt^6e-mTZI+;l7B )''e:)&jeV9-rV$3gr;H3brr3iS-lF$G(a0b=rr2Zfs!R[ApAOsfrUTpdrtu_')''S5 *?-:'rV-<^o`!hJrr4#V)B]k7,T6+j"X"^')'JeTrW`^Ko"o\GrqYp Jc>`Mq>M3(o)A:Xrr)ierr2fkrq?q#9j` p\b$hqu-Qos8N&no)JUcrq-3go`"d_rq#g^p%&.Zq>VQ8r;ZKjrqHEbrqlHhp&=acrqcHcrVu]k rV-U]ss8;osqu?Tns8W)trrE&t rr`5tr;HHk#5e>urqufpqYpm$r;-HjpAb0lqX"64~> Jc>`Mq>M3(o)A:Xrr)ierr2fkrq?q#9j` p\b$hqu-Qos8N&no)JUcrq-3go`"d_rq#g^p%&.Zq>VQ8r;ZKjrqHEbrqlHhp&=acrqcHcrVu]k rV-U]ss8;osqu?Tns8W)trrE&t rr`5tr;HHk#5e>urqufpqYpm$r;-HjpAb0lqX"64~> Jc>`Mq>M3(o)A:Xrr)ierr2fkrq?q#9j` p\b$hqu-Qos8N&no)JUcrq-3go`"d_rq#g^p%&.Zq>VQ8r;ZKjrqHEbrqlHhp&=acrqcHcrVu]k rV-U]ss8;osqu?Tns8W)trrE&t rr`5tr;HHk#5e>urqufpqYpm$r;-HjpAb0lqX"64~> Jc>`Lrr3*"rVQHerr;p+r;6BhrVcThqu$Bjrr)Hgs8N&p"oJ5rrr2rnrr2lrrq?@#qu-NmqtpUHorVlrur;63cs8Drrq>UHorVlru r;6 Jc>`Lrr3*"rVQHerr;p+r;6BhrVcThqu$Bjrr)Hgs8N&p"oJ5rrr2rnrr2lrrq?@#qu-NmqtpUHorVlrur;63cs8Drrq>UHorVlru r;6 Jc>`Lrr3*"rVQHerr;p+r;6BhrVcThqu$Bjrr)Hgs8N&p"oJ5rrr2rnrr2lrrq?@#qu-NmqtpUHorVlrur;63cs8Drrq>UHorVlru r;6 Jc>`LrVlrur;69prVlcnr;HWoqZ$Hl r;$?mrr)j0rr)cprr)cmrVlipr;6BhrVuorrVc`krrE&srrW2ur;$ Jc>`LrVlrur;69prVlcnr;HWoqZ$Hl r;$?mrr)j0rr)cprr)cmrVlipr;6BhrVuorrVc`krrE&srrW2ur;$ Jc>`LrVlrur;69prVlcnr;HWoqZ$Hl r;$?mrr)j0rr)cprr)cmrVlipr;6BhrVuorrVc`krrE&srrW2ur;$ Jc>`Lr;QfsrV-UElrr)iqo`#!lrVZKjrr)lrrr!-&rr)cmrVuorrVl6brr)co r;HZpJcE(VJ,~> Jc>`Lr;QfsrV-UElrr)iqo`#!lrVZKjrr)lrrr!-&rr)cmrVuorrVl6brr)co r;HZpJcE(VJ,~> Jc>`Lr;QfsrV-UElrr)iqo`#!lrVZKjrr)lrrr!-&rr)cmrVuorrVl6brr)co r;HZpJcE(VJ,~> JcGQGq>U3irr)otrr)oroDejiqu?]qq>^Hno`"pjrr<#tl2LkbrVuorrr)lqrr<#trpKderr)Zm rr2?c!WN&ns7uZos8DrlrrE&as8W)ts8N"Ks0DZT~> JcGQGq>U3irr)otrr)oroDejiqu?]qq>^Hno`"pjrr<#tl2LkbrVuorrr)lqrr<#trpKderr)Zm rr2?c!WN&ns7uZos8DrlrrE&as8W)ts8N"Ks0DZT~> JcGQGq>U3irr)otrr)oroDejiqu?]qq>^Hno`"pjrr<#tl2LkbrVuorrr)lqrr<#trpKderr)Zm rr2?c!WN&ns7uZos8DrlrrE&as8W)ts8N"Ks0DZT~> JcGQGq>U3i!<2utrVlEgs8LpU!<2*[!<2Ngs8MBb!<2foq>Tsb!<2fop\sgb!<20]r;M9IZi>O~> JcGQGq>U3i!<2utrVlEgs8LpU!<2*[!<2Ngs8MBb!<2foq>Tsb!<2fop\sgb!<20]r;M9IZi>O~> JcGQGq>U3i!<2utrVlEgs8LpU!<2*[!<2Ngs8MBb!<2foq>Tsb!<2fop\sgb!<20]r;M9IZi>O~> JcG9?s8Muss8E'!rr2irrpg$grnmbUrr2otrosI_rr)lsrqZTmroO1UrosIWrql`qro*nTrdk*U s*t~> JcG9?s8Muss8E'!rr2irrpg$grnmbUrr2otrosI_rr)lsrqZTmroO1UrosIWrql`qro*nTrdk*U s*t~> JcG9?s8Muss8E'!rr2irrpg$grnmbUrr2otrosI_rr)lsrqZTmroO1UrosIWrql`qro*nTrdk*U s*t~> JcG]Ks8Mcms8Muss8E)urr)cooDeghi;`iVrr2utrr;oqnc/Ufs8W#rqu?Tnjo>2Vkl:PZ!rr9! qu?Tnmf*:dq#CBnJcDtSJ,~> JcG]Ks8Mcms8Muss8E)urr)cooDeghi;`iVrr2utrr;oqnc/Ufs8W#rqu?Tnjo>2Vkl:PZ!rr9! qu?Tnmf*:dq#CBnJcDtSJ,~> JcG]Ks8Mcms8Muss8E)urr)cooDeghi;`iVrr2utrr;oqnc/Ufs8W#rqu?Tnjo>2Vkl:PZ!rr9! qu?Tnmf*:dq#CBnJcDtSJ,~> JcG]Ks8MKerr2oss8MWirr1jUs8N#t!<2utr;Q6drr2rtr;QTnr;O\8qu6Bjr;Q-a!<2cns8ITL YlB4~> JcG]Ks8MKerr2oss8MWirr1jUs8N#t!<2utr;Q6drr2rtr;QTnr;O\8qu6Bjr;Q-a!<2cns8ITL YlB4~> JcG]Ks8MKerr2oss8MWirr1jUs8N#t!<2utr;Q6drr2rtr;QTnr;O\8qu6Bjr;Q-a!<2cns8ITL YlB4~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> JcC<$JcC<$]`3K~> %%EndData showpage %%Trailer end %%EOFguava-3.6/guavapage/guava.jpg0000644017361200001450000024102711026723452016117 0ustar tabbottcrontabJFIFHHExifMM*.GUAVA is an error-correcting package for GAPC  !"$"$CAE" |  !1A"Q 2a#7BVqv89G$34RTWdt&'6HSUer%5DEfu()CFbcgwsX ?p                                                uBG@wGK(ls#;@s(zs ݎIp:s7q$hGGOœ(I<`/GzrjӨ^FEMf}T2p yQ<ef~cÈBEkۯR:tĺXQSp.YwnJ *9xYt`0QumrKZ,AM*iĩ,AiKO̷BbW[C8`G ) d@V`{}3]>,A308`8'==ViMjӏL%$RC+)d"AP9MM_S2!+% ɇ)A! enW,i-AONU5CR-)6aLԬ lAVV Fq?)#,<:K!diR!- ` vJB@ ڼe,ܔK̆ɘln>G>ќ@DL3Wu6ܑZ5Oκm)JZN[Q9yŅ)8EEy֪)E)@RI^0;QR*yA{3$gq㫺ݓQ8z, Sz'JT8O5}Q tMgPڥ`%nPn_7L.!SvnR8<2P9RS\'d%zƣnO[mR\b`%.! I9q$c ]^O[~ڐfSH͔6ڕ$ I~1 u`m\ /^ 6Ym1^T -|Sd<b0:gIZzM)< il# tgM~zVmd/JrSeMnJ5ԟq8,JN > b/^<}S9d1n;UzfܲϾ%{ >{OGkNK0%!(I@D8uGJ$ѫaOඟxPmG *ۈ1=(= $QW)* ۗ#ެ1Ryv!!!!!2;fBBBBB|Rv~V*ן}BFT(rIDu])(LpaM gTk=YCARv^O#eLjZI\p6'x:ZkWCsJ0x!^~Խx1-{%G>Dl]{KuŸ4꒵-g*Q>6I'6X`3ևT+ڏgieJWLN6Q*%\%øh) 8`\iM,JVB97Yiv1tݵe+m,vffQaL̈́x%FTO>0oEvנ1j{v+Guʦhbj82o2HPVp RQIFU"=_5KJe'&ufy^0JVN8'=YupʲR؝CNd%4VqqN?r&TʕHw+O%0cǶdg|e.޳uxI3=3!__)A[ɴ+ D 23;Y+{գvYU[-ɼH@x9%j}:ލNkjRZRLA%ןz2;VsƧuzYty9LRo *9%`$\ײNOfN}r51oȰ .`)!H^wCm3GΪiO)[,TU!X JMͧ:{LvVp-Eǖ !kҴvU)õI\imN3V}׾3e>?7O&hsXKzsLUnSZ,XCՌpqvJT{nn5 DTjiJS $R RlD3:a56h37M]T4]B|E2U-X)*W9 f֚֯h.&IMRh3%.I)a!W𒅒BiG b~OFvV\eB~[XTRZJ W HB_QjR0@$y=6XkU;*oz#jR/՗ @x 6Ρ[zA驝RJw C-*I'CDyė"I۶Q1wLRe'B$d w&UMoznjuSV.[L/ ԹQ)q;9˄~)ī[%e4%C.Dr}{?{oZ"+m*6S?]lx*a+QY@qB\ZФ9ˊ;mUN[,*R!Ki m<ŁK˱+),Ya[m$%#@PsY2E:CV&[j& fkD*XYiHQՄ[nVots!Gc1fc :uFؖD&zU ]H#rI'ZӅ0+bG~ѯCZ7C\I,mo攆e)EKZ~KRqptŦ5s&JLmtK+mXZ7O$n*$1s\w>-WqTӛd&)zwĝqNJθTT әIrHb饑niݩ+lfVM,vaSp9@৳?Ko˜t,d9P  (V.~ܗhmTh4R]dg+,^rrKKͰHm&Ua)JG Ho(ZS`ihK28VA}EEN) HQ(. \j?Fʹ)4RId2"{Y_w?7UFqT|vg?sfb螐ZZE)SR}ʛ\χP@!RrVrHh뒘؛% OH8,KK*J8 )@U9m8YW 떯p\鲷h0%(&P3O*PE]tL[,NLOϺ&CRIJRddۇ^})xU.IےJf2' x9ZҔ7+r2RzuGKT[Edəgt,<]|kUoOM i!+%{~2T?O-HkݲN:a[MɨU7q]a68I$rBH+F/fS+eaTUeQ qU('J1c'5B$ߓi2 v]š(`I(x='isk Vyل14m+ujZ8ʎ2Iy+W%Q_:֕SnVe'Ylj KVT{Jq#bRؚZ٧,Tgf]F⠜%;xBS*Ė@sBBBB+Nc@Wj/5~:~FuӍW RI ->j97:}RD9tчЏԑ KͧYsRj.MgLܦ7xD5ֺ}dZ*B_R V6J)I;;g#4>BB]pj`J۔E7Ïm eRqRv7UbFfFP,e]imkDZB$8Gpp#:Bnv rB62J' D;;ljV*KryPQNʔ)rtӑ/Vj2\DrH`w(ܫ0PO-'55^# ]~%G.Fs=T\Ȧ~g.d+6~V=]F,VmD9>_CoQi??)fbB56oN38ᏻ!!pRq@#@#9GS `B`g0  dq>B d!#d!ќ9#0!b#d!C@!@03sB!!!!!921VٱoI]D'g-#uFmЖܫrVBJViP);Hd-3K46:*?2L`=MOoyIkRirtn*9y5M3K~"@p;@lN@}#9s!!S=%:4E~S2_}y~ QR15P&&u[yR T >NuuAo֥h@-m< m3 *; HS4Ӛhe1Rs l8ҠOB ']u*BI'j|B$r$Ay[O:^>z*kj1nNࢴJRg>Gx4\=7t]Ӧ(b6~ms3(%tu !E $JQ _&eD\P֤+IPP>`0`b67xY:MԭbUJMMdaܖBTgi(%III/-.$EZĬҡ(`Xs3@U2)#ʢ!@qg^M*\NӧhS$Y)9x`|`S0`>Ȱ.g b'_QRzo\ө5*rߥKF}S<kiQ!穚n2U4W*i }E )h 'so'kV EOrˍEZUKQ'9$`ym>ؐRsx0#BBB >UssL˷'$x$pi*UtN12S28<#/2 .eRV >JUsKo~1n#8BgQ5#4ԺV`<}OOHJjziYtc{,! <xtzpRSŬx\ٞN3:;pZ5RvNDʦPZ/8'W@zp~i9)ؘ\SNNlZ{X"ٖc[.:∘sid }dL}SD+#>c0BBzР.iz؞j\d 3wK^ʛi5mSܴk,̦uN%ƤUI^ps3^5:Ӻ Lg˓*~qK> A< /'qbONO=GdVT(Fy܀Mm"i2KJ$,@JQ$TI9KV\Xj쪗O]2InZ08@JJy<^z*8iuGiͼ҆N@m >q{uY^VUh k2s@$wWU]?*M<TJfw#1#JhM)PAyi@QOAyd{m'1IoMʰ^~nbiC  ?.OH_KzEiKJ7(xo {JV96)~ȦNa4ӎ!Հ|Y.سם}rddٞvbq6'ep p#v̘ \R[Kx3&e$RrTDVW/ສO $]Te<[iA{%^jnP뫘u\-<ܺA$4"1c:UbYpeī/M8MiFuM^;-htRjJI88?DU}7:k5UC V ,9.PC,))q1j%%>oSn)(%Sy!ߦT:ޟP)֪;0SR9%J>b}rǴE2ձhVb&U);?4(\uG*>@b SJ-JaɉӮ|g[R~RI?v/!!=Se蒟n6{F'aSrśtwLJL9.♗eJiDfZmؤ-I#mRBdlzcM:6&M=-$^!(2[eeG w dTdٜ.7m.) AG/_FCDqX R%k\]]hǮBfQ/rP*TVn]MHnԫ m7 tMy%TN+.Rz JݗuN36R͉gPBS썔Fz&2~6e!!!!$3 )S:\uf~F ˰iQeR@_Ff}7-56QYU6%֖AJ* $s`Do BtģvD>5 V ”38]QeXtNBiPiҕ+<ĭ9GIkJ@Zp+# >9ZmS>M/3/M߷KW"FѬ뤄2aHLJRHZ!!!` 4O1F靧6WTy,Kʶ>²7l^‡ @"kO^U$A66xI) d<S/OJ5+0ښy CP’;{c]^zQbl4JXQ.J0ڕY`ϪCXHR)vRf'gV[}HPyȀ^o?LQs"o򨹐Ba^YSBf%&jQ6WHʶpFHը5zk阐D̳ZByI4 vU u4TmRw$2 g@u&Ji i)bASd"c}}OI BBBX-M.;]r]K̡0]ZmǔT#yHOt>K}siMI@YTRDuI[&\˳*UMiZѹ*P%$85}6M^YR?,I$$IVzB.- feN.e_*lDž$8 D'gP;VjƢFViJraǔ"䁜l#K+nP:I.{S }[\䒓-'(#)^qD`z3Ғr*`N0?1_tQ[]|^+Y1NBKxl:x]$XIR\ -R:5EkY vٹYΌ%E\ˇI5[~ոuJu%stu:[e򢑂[e$AKi'<ҳieҥD;L a$p +GA!GQ2tT-,y?/Q]1["iW+RRaKRn̡ .cqo5}J <ʥФXV8!E.! ) S*_QW}BKړoGo1uPOt)8I}fYT2ˈPJR vALZmc;o"FڔʟnT[) )ӨYH'N2coiqs u.`$ U^+MRfE&d[RUjHL1r{T#^LO_ZW:\nU˔suJq6r 8HBzyw֬[Λua{mxAI(ZT)' 6Ŷ{*ٵvgH>*%^m֓۵J)'g sx_ J?ND3b6OY85 _Qtf̤C؟ 9‰ b0NZ?ٔk7o9h;'fPBBBBG9n !Ֆηcw+2MK<* %Hq*IVTZ=WFYw6NZ٫5:%ҶBBeH8ȋQ>(F4Ʃ`>35Ih(:0H {h!G!$%hG0BBܺM]z.kLڧ[m*F~7HFr|ҺC~]yz]mE*B r>p)lYl5-LkRxw @FHp,OHM;)0]aۍd)*( ?d#9Bb}~ک&Ic%\LjR/zA u#¹J+[z:ҫJ+׽2b]MͷNrRnUElLN2!@%mNsBGBNG퀅:fm+rEq\KɥRҕyQBo3(}`Rmi7 Kmf$ crʕ'h  :ѯU\ZY[Pwڬ(+j[QfR;@v!!!LO,bjKZ{JY nVT̢aJ [WC> #t>ʽIjK~U֤(r'DQuH!.$+ԗӻΆ_]at - .#`$TWmHI.uv^Qm[5MSJҩ']KqJ[J0*&Թ-J5*!RP_ x)y}Yd[R҇!9cJ 6Ŏ)–Լz 3'}7WOѧ|NgK}RVڊ$_*ۨaljuO 2{q#? R!|iTYץI˥2JRqcta9%H)&gI jL%jai>"H@* Fv_+Ztضhbe I~Ck.8㭩;xiIX`@ˆΪUdkuW)o*ɹW Jq*dpy)3d$]o4)3M;8ierRVø]MHX77X]ATÓ0J yln~^Q2m uadȤ>f՛nԃ~ġJpG P$OνZu7fS4YsoZCO)-]K $'>{tiKKS&nz-::쫌N:ʆkƒQYO*R QP=ANN-/"]]K~)m(VЕndh`\Z z.mD==3X:)m!h-**I$Ap}zQ]DN盚CJK)iM2*ͥIRg Q*PuBԮ,SRss.4Rrql:sX7С],M>.4)!J$(`rxZƫ4ե7/_Ng|ŧ@(J<AI"VW+┡%˪er󻒬IJ}*];+r 2WR5J[*bԫ!Ծp Zy݋}0KDѿ=~*EoS~ΝK4>5Oq› :q<`8}MSpeffe-Ly96Ьp)*G@Lp  >tL~^Z374)S{ l2>Uͩ^rpc~y)EOIKy+#)<@0vRHH>6pW9VT%0I LxЍ@ "@=dy ^ f:Ѿz)@zHDX('/E>(G'BSNZ?ٔG鍳^[֕&B,U 'F+D~(7󙨿@}Ѯu>s5Y}&כK%%0JC/R]PBܦyB'%YQ1kQVPZnb]Ԅ>$ތA0@2#Pօqnv<,NlZ{-$@btԭQf-)\d /8H!I)$V9 Gh!!! wS+jزݶ\]v{HCj(ZJPV@)9)īLM w3K_93DުWNIH7'o! J2:J;t6-һRZӊ,NC.-u$Yµcte$y#    B`p=`g8c` #@0=B`{s `as{!!!hBԛbXjk݃9ud8֭)R4zAw.B(I A8P@5W^heߥ%\[q"^>Rcqr"#-RެVTK̲- 8 A W V[^enT-JqjRݒ*$JQ!M81h` Y´i1fbj'i`{a:J|Y{a:J|Y!!!pH>QA]KMWM'(zj,]'`ʉ>PrJTQ8"]G#Lܭ:w-M!=;Dt]qAzvJ6pp'z^DvnVBԉ&i~0OˈjʜcLm!D)E>̀JSBՁ?]37*{n4? (rN;Ժo Ѵn~psMǨ0e_0 >ozԫ֤-wJ566)@! JrrQ;vFK3R;"߈R%@XvnEFE=4:6Kj SzlxH0y@1( NɈЄ   cWFm ۪q^ޡ6$w"Fjra{fe- I`##`-i"Vzչ&)Kis}žz%9AUkfQYQ&)wba)D^|Cin:U'];/]GXfۡʚ*|NJ-A*cn\,F|1#,k?_z@[Κg.M9n) uZPCo,~k((|_U,tvkյolB7^<-< "EKH5*jpZ}6WҼiBvtNp|ԤBBBBBBBBBBG >U=6bTbNFYϼB@I'`٭nH)J;.^4OV2E;b6ZSLnm-M*D;H$ c_GE],Z4nPArq FsqÙ)ͧuVDwJ7W'쉣NͲ"Z) x TI$o#`)_$a C嵦ܹ.[rb-z8l4STr1ݏȴ6]+o[i6>jQ'+6~V=]F,VmD9{Ol'QO3Ol'QO3!!!uuJf6Ԓ曥32R *q?r.,y՚5.(ejiH#}pZuh.TK6AZi.^H~R烴D=,i jRm{˳r1ru ?*=b ҔUsw"1zңC]EaJz㓷 3qe"U2 Ya8Ehtց9# {o4T۔)?xEZS;Vt&egWS()>g`-#X9Gl!!! u2]ǿiZٴfe&,L2w!0( G6b@4+aSrMBԥXrѪ~Hj+h%{>qNa."{gϾ_b=b%2)PcB~6;i^dl?w͛@|\!$3Rv6 [$1* T@ )(RNR3܌:F&U/7˥)y^=ƱA*瀸s! sMfTVB27p o>@m GuV6MˮSP})SR'jf2Yq.V'y %YIAH$pqV*&b^ҡ謫m|$KX%+H,gÕpf5 iԶJhɠFPē}b3g@mG@XMSI?ǵok)']B.ON8@ }+PTw86<)-)}-p5G+>A9‰%<xAhȬuiZ=kSa#q1B8jښmCEb V]p4HNVFv rpIɧge%^f^Y,Vm{9]*t)׮ +xҲίi8?cx?mLiQ8)k?[CH(9P# IRT 3L6NsNۭ)B{=ٖim%@ JG!!! ľzP |w~%"hR϶?Op_3|̊e~%BZ^ߕ,i7)))fݨ)/%׹` 2<>|%[{61oJGR4w9.ٕ)+)C`$#2_^_k_O'~H B~6;iҧ454B’i!@1c(Bz+/w^ykn\ *b0>Va炦Ӝwx;_=b+)+5ufeyZ˭hLaOVŭ9JK?~L~czuyZTGm1neHԫDm8S:+-/96L KpH6N$) BA l:b@$u?ľz3NZ?ٔk7o9h;'fPBB8: "GH rɨWIXJ+>]tBP`1ʓ֚5sQrqUʗx=>RusRRuͱ:[a`CHC`E )@7)X/LZM!:}$sO0jajAJp8J:7)QZ'KZ[iJq9fCtMjF_O-[kvJeTU8+ND;r#1N97(SO4C IHGO9], ǀw݌Tݸݜd㹉Op1vfu=3pIqr4)P^%A^JH܀"MTT3sXnJ}E ̤G89ڰ2pT$?o?4FeddJEa@ΥkBO9I$(,^[̧T\Tdu!.4mdं;x A9P9@z꫶|{p/h)dd Am.$=/> EFTT['<ffr?/PtoGc3P2[ ɺ/ZTGut% C` kY @2$.C,ZR$(1gNjJM :pɦR&0P_99R8 'nlKkWBZq@iGrXI\OH9ηtz.KH4InZUI9$% I&==a!!!&5]cj%}ۖnKTSU a[' H܌ŊSKO&fu榧(ۛqJ0Zq F|T/nX"09- SRߣ&*A;~SFISu4mJK %ImJQPmB GW_Inr|ZreKMKOg> 82nBy:ffbfMv=2hҡԜhpJ!17݈@!@!@":< #mGэ=EnޗLˊ%@j``sDqtɨ6d=&&B(>r.Dt) ) Rө躯gN6GyH5U2)i)Y|0R˜EE>ړ552fKnf<5$JO#F;`m-!HZTbN#YyZa6~1CSCbʖ҇!#'ፑ[nOiəVPO`TN?ф!!!kUZ xſ 97'vJ1c9DM-g^ہ5=HLrӵYpye%a ^89H# ʚk])[v4ڼLJ6>Օ $psm<7%M[QҮMS-[x5 龴.;oNH0yywTPq8NVjy8L랃YV4N٠-M6*ye.l=FHZ-әjw&gF|G%iHڕ%da8*9# D->܌sH*iWad(4# g{fbY,ʋѩSo7,rZ\%; hc'ͥ̎/* w=Yyfj:*B]BHn{qԫc0Г} DcS5V8%?[!Pthku6fD_|hz|sIrMJO^={y]N> tz( )~tvjJSTxԉrJ𬰓a9r@mڦz{kfaG!!(JUyGh^ ]W鑣ӌ)`ҳ1kW-[Q 2BBsr1ߣ w/ Yڼ4S'dX!{?9c!!!Xx{ErR/{nl)y9˅ii3jZNxNwEo*bN,K}Ў <nkPgIR)o7RhT{f-qՄcX47J%HT ܔ*qg)0x:<69'$ nSHI]s)Zw+Dz2[j^iU;9sT\QRsw+ƦJ$*k>䤝A.[ڒR) '䋻kK)m&$icjZ ZmH a{NOs9d~ 9!!!H>Q!!@"%/r}M?6n3H'#aSlfЄ3&Zs xa,q. /YDEAj1`_>:;[Fƭp?8*HD}!h3ռ13G姘4 [s%* ؎8_Pokfš=XjͶ X^@!wZ5 EA^kUSՁGNBlɇHpmRrQld?cYSԻErw:\ԼKj%]15Ѣ5>m_*peR89+XcdBBuNn2.yleN8JR'F]"<1<+L:EjZvL73NB )fR7)sqs?ħq |_Z[zeF{=SрFzjSnBuW!QlxfJ;e%8l13.y*m' JVA}79:i~wc0~:wrK\O:ӭ,KuRv 19~SV᫱Qå&@g1Ԥ>:Qm/~>:Qm/~V]= nBY IT>G~01\B~ZOmR 3Seku +%DOBBBN${O܀Yey6I*Zp2I'fwkLWz(gdv$z('ɩ*W xiU<%rk;Op01U[]uQ~T^< H#.0|.g~*?{ÈBBEf߯|Y!{?90   Tδ(CTljFSh%:߄f-t-fS:|;dL4TL^q儁p3lMoZwa4߼]A铘ya?&'hfgh6H1cTjreOͱ**[ >bԎؙ4&.Ym<G? c!߮u 5(6ȗiIA R9N3 hvLZԇYq$Z{$BBBp#Qx?,N+nDɯcJi*  Q $HAeS*3ҭ5l6Zc)ekYR3MRs ӥF76dd'=z]$T6a{F##?t{bR1j3S7mI}[<7e[zyn`.x[pq߃(*MJ5:2ώԲ ǣ# 3ҙ5jMN <$BԂl)$ݓ1gG1,Z0m =K2*J$JoCFԧ i@'9=;}C^r˖yt+eY&׹Cr{4-A:%ajf5KJ*35}-*~@ZB'#$2!u'v\y%Ej JrTp=*usGAө3U#{ҸO%eC'jrFB%ؤ9WjҔN&*NuRiZaNiye*(VKLz%$)yPF xS5q'-dʔJʕ pܬ`p fѮ.*׃ikpFyg RA4 Rrv)*"}q%.W*BFa哵 9?'ˌEjUIZUKpSd VְPJNsMӹEiSkܥ${egó,jͥki2)aZJ$dE@!@!@#Gx5a7#,&aM.fy mRIn3]J^v]4x0 >J{$v>BiE_ugj Vn:Vf]*Pʔ~*rUsQF*Uj.LSp.BqV*Lֹv8œi8.p`  p1*Z5ۭWbP4K10IIܧRr9h Q5I. d<.¼WU3<P3P/4śq@eɄnA+|hnbpB'*'[zb]-!*ll/ᵻ˄f}:}*|> ^S@'%?֎~{nToe#QE 51=ǀ֝u.Wm'˫o9AJ{3JZil+^/jiLJ$ڴ>Gljuu%)%DYjM>q3+|d))6l;'nS$HK4Rremd6#csBBB[ |>1|x@#@moi='NgI$C>RWΝUDzVIOlBEDy( UDu.nZ2rmdrъuE~L5e=FzsfZGϡўDGo}ߤPnOfI3OMxIyU{v)@qZdiJKgrm!9>g ǫ@ akvYQDeM.m$%%D kzĬ^FNz:Qzmm.(8RY[A'ަ-ݚ w/x꧙R~"r]A9%E9ji H ?'ɘ h# >P/+])Ѐ@N9NРT1GK8ϖs_lkCԿolkCԿƦ3 mƋ6-n.yە)KJUu%GjRN$4k?:R;O   k SI ]>Yɩɺ출ҔI ~Ryy ; Xۮϋ')0pNPӭI)mێ3-OR%'df0ʂO"(/VSw.f)iU-kVCj 'X`%X;J'[MCVejxN$)*O$$ F`6 }GCVf?[ƣڟf?[}#ᱨk6ᱨk6_xElj?ͩ&clj?ͩ&cJ4뫫~n߶Ued[M=uԠ\@!@#\ }b U=Q`xh.ce@9"tǥ&U%%uj{/\ǥy䝪 $7NJRMK5.3&R:D$V󒔪ܓ y@4򐒢XHg^# g.dS?s3@U2B?^H5{DZsKgnh S&J Z׸zϰ&DknݟV{ };!'>@Ic]^WDܭ&35`RX^Ɗ*JiK9 =}һFNNz۩dQ 30 J6THY4*RLa$eCR404'b}Gb~wef޹c0OBI,pR (45֏sN,qC=qi -XN%wv[x>]etz=D@IJ|f)p{@}Ay%~r: qQSAY*Ghќb*KZ?9r0ܽHVh,>R^F܅Y'ۑ_KڻlSu*n (6_cB<%n\nzQpp,G`9!!!"=Yt5N6gddT'#rpTR^unjT*j~kz)Յ- g'b\#tEܵRkJ)-_DJW\bi]@XSXl$KS%!g'$J*J+{M-nYMʴθ0 qg`0 ?vYT;Ч.7%"-qTTXEJQ7$C0@v|0+Bd1BA֘\4Y*eS4dJ^ 3DͮKZp^R|̍ljRYi8A!A@$ ʹHd?,_?%igyY-Gᱨk6ZD C/6y*+PJ VigyY-GK?o*?9r0uT3?tQs"o򨹐BWZ^!tzQ2OFv꧒>{"fO ӟ~-J5{֬Zï=D^ZH }iI9&bU[3ybD=K=-5nU)AskW)R |sTG%)Ilzmk'2Rο@XkNBsb#89BBC0= [VLgOleKYlVP18qT/SڙPr7m\i B%IP!@R4+N36e'D w1 9zNҏSUmLi JkFI<Oߩv EU=-[(nI gnOU}ŵG5 Yl{w|hֳڡ*SF[&T=R#Cؓ1/>ðuSri/2 $%jBs 81^{Sn9vYF ʴO@>2{ 6YMKڪu 0`>^SIQLٌyfbS3mS4}+6fKQYIRR@y$FQm4ehZ{TfS^#k‰@OKw5AjJѱge&jS mR2AQm|;](ԕîxэg%;AyHcڛԄ\ebjJJ]L%?ҨVTrLdHNWyk˺C,RAR8Rb, )j &HKHhpQ@'dqVaꘪ嘞yNKTyVUc$BşxMH>wZ@m閛q?qHZ~k(?cXOҕ qkRkzL:-:w'o@;O EH8s5˷^f۹7 )9Ìgk2pG 5ebSH*͵47VJG;TI\-?=b(>!?lﭟw~% )D䞦yѿ2|cY~Gߙ?2BBF79G[jfJisВq ld}AipM '_7WhãN?﷏2x{nJ{{Cg~߾_`!ՋJf(R˒[seP8_YOteL<~ۙyԴ0Iu@d$ '<O/;tRf$ DNV N>6Ƥ8=4{ѩ12q\ߣ].u&TԴL̮[^89` QOh%tлJ_m7T>TQ8K#-,n#*O}Vb%}D@H {ު6jdUx7(gv^HV2w$nlH~el6jBFiPK'!C(T vыƺ:ǽw]b2wy)QIR8P=#MY4PI}!lL')ܒ81wkHUP-"nb073(HRtczxrvn *.3`gU2 t^sG뷊VbH)jS0JNAtRHV2BsN0BډaZsu1Y´i0;߼2\a!{?9+Om:+\5>䟒iUz=|:xDX ϾTzBBGa? s q3&u'Rs0Sح=Dջ *''ZN_ -տQnC3ÛCʦƕ[t2NyC83?v2jOUFП} CS SGBBBF}ZV‡MiͅwaP%E+0w*nN:-θI<+dgW 17nYV}Z%%3>?6ω;wmH7+=3ORN1%!(& % R;~AzBFOTؓmN>6RxQ56{U-XWHRh`iU%JZU$I}o^E O;1ﴈ3 jBڐOVJlwlsfmk4la/#'ڐIR(hsz]A7eNU-]nQ;Ԡj @ (+  gu?R»<~g`Fu Gh!!!1*̳L6/ ֜HRV0ATx@G2Vks^vݠ51ᴆh#I%DlJz?5䜸.bq-R }BAQS$FIDДi7=NeW|>o2  ܡ~6lo BB:GB`/΍E3 z#)d!k9O&?Y8씜|GSɏGO]fm@Éq#8RT29ILj %PbR6mƛYISeڔ`%MqE!"̌2rrJZeRp0#!@!@#Y$))9x}a Sb)Х?X!Rجzc32 )לC-[ڑϡJb,GQ-$F}b#K_3PXkI2vU '@>RKbT] ׸ޝ`AWc-їģ?x=kZRk~\RBJJ+o|dyוԞ"M1LnX-p Q$eek=QeURm y̩D!>}8`6'1Զ.ZYJ- I5P^ R 95 j5qO/NTPK+Cj%$$@ #aBBBGu[tk;@ide r2 A=fRj4yTTTi9[F2JvңX&%y&[/4ZJTA7Z/P8[:1y. } i6=N(&13?tQs"t'c:}]m!tꛦ:h>%i%*G;"!@"!ӥ㵶F,W.Ez[ˉt+Sr$$څM)8A +I}N Ч.ePXq#>>y>țkUGէIK0В!v{Qu.Zf$#gL\ T` v`  ]wzEV(Vkuh}AnLɠFq>SGQmQٔvr-HBr6clz52N57Jթ(+fUMyCwHI!BR%#>vܨ]};ޘoam==FsBBziqCCi@*RNs|Èt}Ԥ]ו)ɜVV{)8^W; AX65d<%+NBRA?t{7 >HB8 :wWPoj}?3W%x;}G_ݵjs<=zFtNTJN%eDĤP<8xNᜈ˷+:9\rbR-gsQh![tHڠ=[NT'Y9v>#0-[R*'<< JBSPdiJK6TUp|:)';Ii7&2˅ mb]e*I#xj h\m%ȗB_qY gzRA$BX}Iql[@.3 AFIIX+$' <3A0w{#QQ bI m3o2h)$('$ ?ݽ]je^Lҥi4ln dRF19爆n[󺝙rsUj&gofUhԞ=蕝FmSjaܵd N#qK6M-M:lNXt2mmzD!:VJ7QHc[?@vTU6dVH]Xv#3um'(qAR))}UIl<uPcPX._J-RgiiMڃYVv'NG}/[6ͿnHNF2C{eXKeI@!!D N{l{B8!V:)*UB^fSaJu a -Q۽(|6w7J* -WnO{۽(4nnQPiuk2**}S)E@sdc<:Ͳ*S~o($w-!# ''8F8܎3++^^OShR-=Ҵ( BA9 lԎ^tJܶ1<8A#`F|FZOɲ:m9dVv*$+jHIᤎݣ!!&(=bpH5Qڠ%'Goh7 Ng!{*JUm{`0H2^R^^]iv,!HJP01GBBB/sV^ҩᖟtLLPBI#*8&-Tϥe4}Nz?7~ YFFS[l6HJRzDq qgix 1Y[n\[ޅZ7bRQyͫM;K>̩MSJeg8c0VbjבNXqN( 8bYdW-]]#(#䃏m>\ޝmoT6c1Lqg>w1@!@!@? !E@ I-gzbPmҥPR\qÑ[   #۟aSYx@N)_bNO~@UvZJrWT' g“)-4GjIs@WVWW|?IOwhYFO' -2te34ᤄ:j9'~+ңYV:ط[{e k+Qʊܕ)D!!${b4Ɠ$I,KNp VGDBH8cW6%0*3:HKG ~;z #Lt~i PV$Wi4CP  7ƭ)G6%ekM)s2&PTT6{#Xݥ}^bzjqu˽Lr쳨}4<ҩIF[[%'o'p.i}_EٺjN4\)БxHRڒN8$q'a7|f.eyQIl8ʷ$zޱ$f #[m6.̲i$P@_<1lFoy&EvK5n̴&m HQ  a'x` qAGӾܞ#RT.XmZ'|l,6 `HVx b![עvʼˉ-Uk%Ǩ8<9S=YN:i]uI&UzE9a᷃I##Q!=_g\dҎRJJ2>Hz9}Q\ſr9)pQ)9wRL V9Uکmjܝ$ׂ|6(c+s9f'b"i ' %Y 82'NzLV8l a!<#hb:5iH[֥zq4ҢӉ9W% RHI ʜNyXۦ{HU&痢ҝTԥ+IJq؃&%3.o2 JFAwy#Uj-۸m*iq-ߊ–n.#)Qx{b 3gքl੡j?&Y_'q[UkLCοI8HNRmXm XWNNr76(C4ee.J, F+H9Dyܒ*#XU\iTgK&eC$ D0AVTN!01fBBBBBB슡;#T,`2MxJHNI&Դ."ǃ|ZמkȘh e> @Gu% R PvAB2~#߷)OP 4]HivY%~RӵCj(Q粢slN911Cfm%l?:O#B$"wS4rzqxfkD:raOLE)u5w|~"ՙMfvW*B< DddüYFQ56BӍ>bpBRG [iQBfV)fvԁ=# J{]7A2[A>yT#;DY8@!@!@"5ם]i5I*ME6Aj2J ܝ$کyX}Z/3LRQIyR #X\ڑtp4efp{'O$`3N}u7OW(7MGʅ`63*QRw*/Zrͱ$%%N-G.L:@ uqgh@ Wc T&T>M;75>ί)m%gH95tѨsݳ=KqexrU/1VW%'$.IW0Ɋl=UWf.sq\O&ghn6v&Q5,2Ym#'1%ҴuSBt7+RWwz7(1Q{6q#cbmmm֜H[kBA?Tc-VŕCțt-{E!cOLh-,uz} Re I9I-ztڹ֩ҷ(VٗE"i+Kh~'@P >Arz#y[r3KWfiżd8hnaN%a;prU970gٷRrު!.-I= NG#֜U~^ Y*wNӮ3! iśD^r510*ğݵzdh2$[u+ vcX'kǗ3>;3#Xl~anycp=FOQ;ӿ1w#lI#HtjIZ[hqQIF9`JƳS λv} ԣE$r2rJZmUaƠP楖U5>R9l{8;=&uZziiIIL'mMHJP*RAI'ec:{y[ݱ-r[5NHJNmiA9<1ݒ P$JdݕuA)R$ $)9 # 0cubBFu.i촳 m(H''91@_sfQzG\naM5_[ΰ!r-I=BE33??o򨹐BBBBBB#@~6J"BUgPNrTpA^_JZ)4IvrE;}=veo`< Qa=H~tGR]-vf@ G6#<ăNc@!@!@!@xEF4J5:k`~]JڠDxUJ]De\)Tʈ9P'G?c4IS'!)/),v2ANI'  O᏶ќh@u= ;BH=!!B `B d0!BBer%\OQ*bB.;ԍ8) y{ǧg๡h\пaw3B.h_0;ri} W^_O=6LZ]/S?t>K/8M-Vw)kNʶ5 kHY3xGKcsg]o}ih#'9LI.͢웎6!jsEm)%I'#pPWNXu ʜ]N$zbVeCJRKd8 oy LManLhi)*YQ=.) )OGu ϔvBB#&gQۮhTy :Ypo)m|wF3~ʻt2iK[>HBARO4"Uh0?zW<}L~k\tRB\գ_i#(yds@!oc钶gYm-ֵ!*S%)}cߺɧ-%m]UMN̅˸[ j@R )@܅dgC!TRi5:rR_}!O@~D&zy3ɏs_z]}UnwgԠr]lj 8@q)@I3=$`I DxBBBBBB땉 %~T|圚xiXH$ OGRfwsdJ5).#) |T9h G?o?LaП&w1UOG|{o~^Ѐ_ M ygS]Pu+?*ﯽޝ_Џ3Ns}۟(~z/WGo?[Zqz]S]4סL= mr(c9N#= xgSc}@ͽzB:|{o~^ЀՎVF̥7Tyv& Pp '*"ԭ_Qn[r+uJP p!;i-yJ#WmWFk]:r2#zJo A#`0.vԩ;vNe~}3^zqS,Yac# 8'yvoPI$)MlK@I$I$cB'8TkK&o z=&WWA8iZF~Z}>Z}ġakpakp3ߜq!5^* #ߊkH40|WxTTKaJ!4%JM)Y1{yb k9[O?RsĘyYR@y~)9ٶdޙ}imZAZZ JR9$$l/+QTP POrɰ鵲ݡ`[ 4{2-!EJܣJ<2h !>)Ru@!KVh)BJqT(9GYxZaR|/ oN?N<> :/?99< ԟOgctjr"[[ZFVRN#l'ԷfVe%}IPV`h5̤ߖ^TOx~0a͋K(2#"J-jK!Uf_.-aO`J=FVΦѴb6akN]߉|Ɉ | 0ѳ>rWFl.{\_F5YU}iEJDUIi0l˭A)iqn5so޽RN]WSV\KM?JPj$EOI'ErwzNKUPj- \tx=pJ^T8 5S5Y9p˕ ҁ'q.Y8>'ػkt=|+gҢfGe롗7 #:M貝R]yrM.=<emnNS'{礭>9;;%08l@k$@3MJUf]k%We/Y.g8> #<Bbb !#h>#   @}ѿumEH9  d݋w܏hV^/(eq<Q>b!.v&fIumӛp̀aI9J PDZ͹4*z4ytRyJ Sٳ>2 pnU*OS6$ 0(Ch qhB:aR|/PdJIHǴĺFG$}sj%ǧlKQ}n^g 0)h^ 8$#~?fo#]#>UkN\qJxK;JNTx}D)[A'%U8qmC`(#`-Lk;9w~%&#f1d̘ى  (~\%w@4k+0PU :~^"]ЧC8#T}"{wi`g%wqo)ոg%##odVʶ?OR JZGysoFccn8>_O~SDg&eȞ컫Fp=cwqV}κ<]iuT8,SrI$|]@MEF3r2!jJV[pARP``dEC6]voުlx~/җvpq)'M{Wk#$4돲P)Imy*=qd@C_8]g} 0R&ڙi)G#sn\[[ ϒXGܚ}q۲.2V5$QJiHIV;AVN>Ȧ~5VuQ )yw8͡g}рpws>KX9珬~Y6ZBB4ZAT< &j 8ۉ$.Qmԧu(e-$!*u0pY$*ڍOű[c Ŕ(ѦʈOw_gZ=ҡg @#]&j:)U%Z1]Za!mBZMAWbML=cޔ:}ԄS6oxa[+r|(z.#jBס̀x4WVgWL֗3)_-KFH}@(IYN#H)D;@sBBBBGa#Q֍?Ӑn*fҀ=3p#$g9 w8"rQUr.NH-$JGu$9=_^vlvܡ8ze_b6R9 :>*UZYޙ?2qxy#*Q$>%#c`BBB-r:)g!jKҥeQjII9J+Ɍ(753#)7ݗ}zYƝie+mi)RH(A NPȵcя}DъwTR)130%%%>;$Wr 1sٝfrNeiì*?9rh_CVGnFG.t .LB `#Np'}%.W)iiIm,$G)<Qs  (~T% $_aR'h_E]qvB`-ڡzXk{Dc o kN]߉|Ɉٌk;9v%& 6b|(Bh}WFl.{\_Uiƭ:NML<8Kg=cN[i=#H%S5)*^a KnzQKHRH =jUhKO)tZ}c [Skd; zjDnbN&ԣ",6 8H|T> @l_Egjҗ;KI;;4ǾNe%d+9cl϶ojZ,IL1*FJS%եQD\IYWfژ}uHq`@A5 ͡ԳZAiMN^@X>Dq疇2|%dzl =Iϔ䳳)<ҲG(q'%EvڰqɆ\S%M!@y8c!W?r$گ;EZP뒍ʩKHPmv8pbh.jfP5./Ffe2A=!Ġ/48>꓅b{e4BLk sT^D%n0p{d R$Js9J|DXQۈvE5&ӗZR}-]CiBӐոs>'BBBVH"6hLSϫpj,CA`(g)XY#Ms<[+֢ /Mz55{b2HTɣ+y~*2mv;9'[OD_?ʢk׾{wPLAFʒV;]g2%7),R pp {}\}$k9dfx :ߓ!!PtoGc3Q^?9f:ԻSSv*~۞3j2 +Xani_9[;}ub7윴1Mk׾,jk]~%G.@aIZg&U*㋜iJR0i99#ӸiSM;)4[QJA 2  .g~*?{È@ )_S9okڝc&d% B}!| !YzԾsƗsŹGfu}/fu}n!GJ.Y6oO+MqL 90[҂VⰝJ@ tFX~ҩXS)_v] =|B MOO˲uʓJ$% !%# U!NfQ tԀ$|7Gg'$ߦgWں_~@{Q:~Nb];[ }Fø#=E=3Bz>S5Y6lj4ۛqǻNNIZNO".!MJZt2h Vik(-j\{9mIBB'{.eLQ_UIc YtwzP8t!W:ۇPufRRk[%ƒTeG+ܷc/4fٮVCXʅNQ$F.t *|iܜmHKHF✌d#tS/SwS횏i(Hm(khHR@NoT >Hq1Sw7,i'*Kӽ'[nr|+ OaJؠPSi B$8(B|Rq1BB{E=Io{Vbz ˌ0fBǶY]K]Z*MPLf6'yB'ˏR0]Z5mҙd &_B9(IV@'<Əi+֋r.K;!p[+wp ض^R{`YMNIw74Hz5]tV@J Q()Io{6gXjeۛrYT6>Y[F@LG+u1$Ait=Ք qE K$G)R!8~нS{RKʧ8\SvNA*.mi%`9'BBBV;pLR=g$i{ʫqr;0>\VI`]N1Q=5^QJmr;Ko)̨e*"*ι Q#kH\C\\ՋğjiڃNS&e啭 }*Ԝcwp>EFFYQ.Jm Rށ8Pp]mtU-ܕRQXRP[V*C#"5Gv5Nҧf(*E;{-$@)9E3 u+lmmԥd(%_$))8{ʁ(7󙨿@}ѿum@VX&2~!&2~f1uߟ|eMk׾ 2/}?iX1OcJSMuߟ|dfz>*?9r0 fwQs"T\!#!@! s!w80@!d@!$9-vBB829`9!qG0B8*H8'0 7ls!#BO18  krU}e%-9*. N]=b]=Rm*_,Mʊn>m㐗%*gٴq-KNߵ%f-L.^rmۗ!O,9 H@WY/dלj%5V>SJ[ qkI>@tZ$Þ#BBB;Vj^jYgyj JFApAqP<`5SǨo2ڭ r2|iWyFAm]N *A'keWXiTY:tWW1ՒY'H0c_W@Y'*$I v  gBBEF>s5(EDgP{YYJ@'zVêZ"e]U:*AGSv?ݧB'W- e$kn̾mKmV`H9@m55^#l%$[1*?9r ج}ΏdGZ*΅esh$(I U&b2 Jw #aoekf@t`]}2*?k}?_=[U8# ZKݗhcZfRM/aik ${"cnrb/^UBڐͮi[tOnp)q;SvLa~zv?DwL=G#LDZ4iǘ2T^H ڂR2NIJ~?ѿ Pz#3꣟x:kU0/F=a fC'/&OHk!#g"I#Dg [&r+X5rת//-\!U K+i $Qi)o_ŊkfsU-c)_Wjhu.YۈyzaAӜ9"aS 2QĺNrT S^(؊|Bۖ͋p\M2ҩ3dhpҜ 31]z$OKMZnHiAKi}k;|4)RPr S2s&}XtvL̥%ړʂIZy mN9$FDYpP "'>RjGQ7n;'ϗQ³#*č PԜSR4g&TRh+QrpxN˨]J;1̚]}8 Rl+v R՚fcIiYm%hjD}|7?:ԢfU)D}ƟZ7^[#pQ종82pT=~C5~i25 )dX'$xc1itMRީ5u˕δoB86/#B[#5Grr3)mRZ^@#ne m DȎR?MA-c6Z&%)0\$/9uJw86qƿ= KtH.ԩ L}Q-ƁmF#ܒoXЩkvB*ܲ Jq!I8<8Hگ[P:j4Z>u}H~]҅ro}Qːu~P7,<)娱4oqRI-f<*U~Z0ێ&=. mJ7BvmV5| L$`o~f P#1p<!!Tt&չE:0^$cqg6YGYqZ|xj(O * WB V}>323Nʿ-4Êi^lm-' JyIA#;XdJRu!]K`7>þ$w wdPUZ5W4ԝ=_i 2) eq)RW>\Jy yUMy<x1a.uFjJH&onijHHO 'tҩjT*(Ča%l% v[Z)gOY%/W.)WXX ARrG#g#f vZ;tE&0AgsJJH;BA"Tu 9ٙٷq?0qx D@~8B2m57GiE"j0 8H$d% R`rD6?O>\5G >| c&Gl$:O:Q9p(6pOzЁ@}O}gmE'>'׾e\v;=O6ڷ6JET336!]SO@@8w0־<:Qр/[K,L;KߞXguU=+~x_6nϫ2W}{M:Íɗ\@R{-'؀AOZ_ىOZ_ pFY ng#33]~G@Vos/AU-]{okzUfna ̅V m ^ߑ6c)=bj?.ǷY#ͫqxSs$RPeTOlI؟oI*3um,)LPfV2a*Z8$T?F[L QI~O3ȽxLpwֶq[tɝmr:hmhǮÇ=A!)#Ӎ2̺Yzyٹ຿HqOc>Ĉ}7n)NѝS(z2qOI)Ӵm,F< $%@m%i$d(# "2iʑ ۃ2.Ǟdg1("XBd5Jļa.>6[pOLjz֖ If]ޟY֒N3$`88Q!CfqYq*)_&JQz/?fuMTmن'Xyܜʐg]$(OՖ+)gՙ\]"]TTl6I!`#?His,ryҴ1HqaO͗Hm5F^*Yyަ(bNrN2y,_TW*?Oa,5NVuiRsU/{fIϪއMKḼ$+ҩPmJɽի5@D QJ&d>oM3ȽxLq 5yuYW XT:NE'C3HCWg$,|!!!!!!!$1SQȺj;+dhҪmI2PPH! )V3W#J5lw%6ܥCTqE(X%)FG.Wy]w7u\5:èrEƄ–KdA;[jxH1"k7k]~$]4Ҫm1t&z6f^Vς@q$m' I*}PUT„/o* ' }<эFm+fq2B\i,1IR+i'_5ۉ*^*Y캛!NR\W`AţC-!)J 0B;<g18:|w"wD$u 㒓eNe,tH_%g쨟X)s B#_ԧK3sl.[tDA$KX#V:Emf5OeE.30BBOg#ˀB>@WX+ 쾪)S [mJ}T$ 0;6Ѷ>nB.* eKzҵ=]ɏӧK[4nKXqHk$ګ^ԧ&R'ejy.(|2ӈ(ZF OcDP>]XZj/JN)RZ}Օ1,< 6+09^1?I*sR,:Ĕ%<KDP4ːnaS!bgJ6f 1Iwn|RZIJ14T f[B^X JضAQ(--Gʷ+,+cM% ʉ'I>p!!!!!!!?ISQҲm$% ˶ ?| 8ڟ`cyE?~*;iY4vN9$BxƖccd8rH  -]~H˩WT6iʀR~I[H7l%󏙺E(RP,ŠҜm8 yERfLùJ=TONBS 'D9ho̟z #&;BBBB`{;BEr۠YyPC̖Y-ANH9?/H?ݽ(iTr K,J')RNA39 t=̄JQQC $;??l 8=!!9z0];nlWe[tK\S(' Gk])4/iL~K#WfQe\tRsERܥa>o? F_U“BGg{Su*h|s_u6>@YT}+236LBsc,GsR]7LJ.naPRJumJIl̚mMӉ_򔅀AڡqR4Ļ( h BR(}DMJ"{ @Ƚ-L$x\ʖԿJp N;G# cr7m>lfy;ީ*!BJ;)0VIJ>GTs4`j#{EˈHtҳThT/I|-1xDߔEMrN7^+j@V܍ݜdgPޑ5&OG&JW9Hx\yTK~"@.$w)9)D]z\fqRMA%J;~>60 {0HC1{;.o+ʃm^A)l%)%D ('zCѳyֿ8&ҕ*hK&ԉs)O<,3%HeNAA88͵u[j-K8a8rTID xv2[3_ DZz^yIt2-SʔxwDQic9)W&fHmԢ␞{#phUK*4:JrF*Jq J#pH0=_RZQuNPiu^e[BOPB]W(-LI))Wf.;0T}J.) ܤF$1ϫ؟wj/42$5@e@/LOd%Zݑ T6$Fc 95& [sa+c̫#;!]p 0{SBGN) XIV=hت$b0],ҋMYq26ꋏA*Y1Ns|BB`GBBBW"7XyStQln 2 TdžxPQ<#bѦy-QBZHRT |.@5wVu rgjx.$q[;!JQ H Z@ #?撣"ިsEgQ}%G.@J.tƬRj%G7e)ig>RR3Zq֦Pyy&lzDNjFxN { nGZ,ZO`92!!!!!B880BGc#A` 2=GDs!!q>GIbBBB8ܟh7' 9!!!!TNpS:j'aTePB yN0stSuKVꗅ:'RfˌL2ׯ)QI9ǘdWYtlPH6eyHe/f@P@d=g_SF_KrL۸=)s>/m;qϷ99-+ 9ɽX5"^Yn6܂=l8VR)y?.7ZOMz}Aw=EM/&`X_>)> 灌@ez}vjݯJݎQRm#Tdf=R (Nv#ޚftMϫ e>[*'o8ĉ!!!†DEZ)3UrhQPXi+F ZOK%WѺjJ!T?CyۿRK'O.0d nҤ<#2?AgX5wBLfGdžwݜ3 yiNiXEB٪:ԺZkkl20{`.O]Mu2'iU(e#̖ ^|fvQʈjIw MI(6vN!#yxs J~!ܥ+qtm'7NْzZjYa8'0$  @l h(G(ϔD}DeI`,P*B2y+|Vu@좐+nӗQdirM{o ʈ"+MKuLZ:n>,2T()̅a8SiM5V~{ĺp RmB ۀx~tm1mɊZ CfwaIRH@G0A /ʋ2$ݍ>u ZrBGsOFyYY/BJYekNrRj QPԢP(tRTj}4=Id5vd>jebY2ZdA,--M0P`(>0vbxGd֩v0o7gW쑛9*SI(yTӝ# d 9RJnU3?k'0n=NQR`N2 EYޙ/>!ɺrAln&TleiQ*ZH#U࿫h?H2ʞ-x 'jvrEAcZlh呬͚{kx{oqc=|6iw?# LK_bQ ҊjMILL:Bw$`?ն\=&ݧnƦɲ%iqՄ$ ʆp Eb$d=b)ȖKK2h# ~"s{cG%x^F?c2SOt>Kh4%M(NOxsBO;T'g1?|pG8 +X&UfÓb^MϸN JFT01ܤᥥ />{A" >&ٔS.H[ ].4WeԡO䧶Ҕ6RyJySl[R'-+ރO rR^k*R6\Q*RpB4t",}6~NNH̵5)2^a T8 >`B'CLwYt:2Thuhls%@–|9A-*~ԛKޙl:%ArsRpRy,#9Ƶ薲lڝ;OTe)%ؐh8op PJF Q$%*>Qm̟N[*LS&u3#6ؙeyÍ%*IǑ4}A?DB̳RX hp qȀ -/^q"dmAjeo*a28H%)JTIRrsWg95׍.}XM(\T\iį|˩BOm(l!] ᥥ />{A!F(r􈯝Sl[R'-+ރO rR^k*R6\Q*Rpe^t:ѷuH.EA}V9R\-d )g?'QK$fZi/0K CP*IA0cl"]ťOړi{-Rqd.]⵴2Nr \NJQۛkRueJmY \bk_S^m^~Kg:Zo{mŠ9ǞDW:S_:xQ)9CjJ[AA'xAk_O{NeRf@-zͺI9no9f١[zv?p@^FN(`;P52KielҤk)*'( j鞁VJmg\izRy'rrrX};XW[T,z>լGn+2ZeClb8ر$ F    8'C~ά~d5p;߮OosH{qi87~2oJMiړ)[k JVA **Ѯη_CP\ qluc׭VWy*2JK!i.6R'%'vqH3%U꘲f']֥,ʂ6hOZ B#{BB^?*}Uޔ6)@+qJZ[BF{eKHϖs'D,:PXܳ !;XhXn]Ĕs5 "_Gn&ײ~YE睪Mό2{bP1 Y~[eSuE^mԥ o;$;BwOupQr^FF^-,Q!!.$p$΀g?NݣLFGh! |}1[Qi9)ș#nִIk7 fLE ,(R〆 U>Lݻub,k;_PIQpX ,7OiΓQǧڟqL8w/*nB%(O܊Smժlm\Vs;ApS9 =>bqw?NtulZZ*—+)m$$(E FɘԽq0R ⪕wOP$.\tW*O1$w+NoЩMF})IXPm rU°DMXJjR6}j8ӽ,)mK2 ![:õ*zoT0&* SGZBVr6T8".ݧYKK媨=h~YJ %Z$c$yAc.Es2Jг? [JB*TU&I$$+b+qG<" -=ŤWxϪbDl} HStNSQ5Qn(Hl'+q TTy@6CmP@̥88}fNRWa!17I,x~4iF60H)Wf5x9J,RvTt7-FmKR@V\\c84Y5mZ"enԒF=awqg5uyHmm8JIڵ`r=\6 q뢿M$?Rj\a;K|Cv=zŤ7ҭF7.:$.x[P*58)$}k}[[UmQ-zUu)Ampe@;XǤ[rչnUMӧe$Ļr i{%°HOy9BBB?6e, # ;kGէ}<O[jxvB{sFxt%Wn !JqKPNZ'$28 ꏧy}&\t{څnu2B^m&Yh.$6 #G5i+seѐTb8?D|f+?D䞧mߙ?0a!! (kvC3< -3~,zXH[}]qg8(ytP oL@H[Z[u%Hm)ܩ^<'ľdlvgu'nľdlvµ:s[޿}=}#0v8$uܷZ7VPup\myb 8ʉǴ’؜#]?EFqNNu#Ok6Xi(Bs&8H lv~?K/f4(Dl?͛U_b[h9$MR!ԀJǀ7y8t6eNQ(!S?t>K/#bVT%v=~&hz&;Gߞ1 =tFtV-SeJw/ j)JA#*P 1Uu6B].TXJi]HPܤ  RbTJFSBA!xe$8;эZmoUu-+]L:yvVjQ$BQxmMP %)#Sh69OhofUNy9:<˓&rAPPy$-{T>'> #|nMU4nn.:N9*-5m9Iذ]fߚGV.jܒӷ%2gjQs -eTa J&982@zsOBtU7Ex9'%+hv#ttUt3i+M:^0=U72(0Hw !.,=aX>=M!J0+yᨶ(JPJ{EgqjzըMF[zm*[;WU{%`cǶ;{z~v2YO6RwYU> r}`"t~P4fRLfGtLA^+|%J*[Z a,6Zӊ0a }3'R@B\JII:*`E:aR]mj 'iP;Զp0V #i։?I1Z2u[@mjR\^М#!mI?SR}l.;ԥ\t三:S%$(m$ppNb]㣊SiڅңʕۇВTB\=p$FyOM:}NSxVH2RCN:w fF>O.C:9ΟIhPB^On(+BXHTb.n] Ĭ]DLSeˁ^Y!-kR`nјխynݫ*OR[FC!'> #q~ٿE~6=JiuV䖝);RCin,%+P P1 [vRht&vqw8P@uliNńE"6oPfӸVtFatz+%hne*PaCa B\YzsP[iՓ?=U(NʶHByܠ7$mb/A/zo U1^G EYBRW+<#j>Qg-^kJ9zq>X&EBф^v*LSn)8VS %ġG_ɜ|!K ۩BM/]m8E <UK L^G&U*%SD*m@nFwi/N;tݬ]bf^U[A _RJA) @$nt?c>ڞ;iIxRM/nJVpG8o!$fGN-(L$ju-xZY$9#h91 'aJw[@!@!@!@!@!@Voto#Fc1Y%2~,w3=*&RݙlN]C2Oۗt8`\(vٌ̟!!! ZlY Iӊ;!oI- iۃFIKW4W'ٳ'U+W,N$@9ނ8LlEH!4F4P-SYFdjA?r|'J{* YTĴQ,LKԋ&RT8 A󍚎ѩ-DeG̫w9CITvP1]8OK9vk^Ou<6IH _q4BU30jmF 8{IOsDIȈ3Νmm.[ɵup͸*ގe9$YQJIkAd4zRn]MP'еK5#%/ߜ'>FFx< 9$%@?w#rFmNu6TYS,NW`d$9cfvϡ{(!۝mJZO`=G昙nY&_q-2JZR2TI_PlL EbUeA#NrH2ۏ5uíRef\rRߓnLDO疰{ LZB9GRB[EQև1ʂ0ȧfLL56@i4ښf.؉ԍ'Z!>a\H>GnAPh:jlu(i4y!] RI1tӯA-:𸩴J!MSOoIJZu0[2PRIp`2B(T7^\7?LoaX@s|"jRz̙:f1M6Կ B $BѼ{bs$3_hrzv;N.2ѽ4Lu9ջtQ^S _() qn$JI< W9Ltm++5Țw3,S)xw?mxH#VhhUVDvJba: Х(y}FcZZ!YW7-5Z~^n8Ӯd+V  lBBB{F__*pKJDCQdR[{Uzt{xΩ{sYOEn mjZjQm\u X eEDfonk>.T^/J|Qx/7M_}"SK&îa$8݌g)F?ӧggꗷ82x?%еu7i(R@>H%Pr5OR[WN J5TUb>rdmmld='% wBBGU$ lrt+i}SqWf,VX[mT-KQ*$^@&hr=mz]gҭj3jD6\2PK#8 ԢTʔOd0Fq2=bzYKZrF.ڐT+NAiP I I=hr=UqߔK8i?ݏŞ7h F4֓v~=(ꦷOHBJS)}@q<{@#v^/t*U*79ʌ¦\yQQHy_6#{c_1gah~YKST39ʟSK[MIB CO%1T;B>}SqWf,VX[mT-KQ*$^@$ץv}*֣6He-9SJ%J DC!! ~)TM$jRaͩH=Ҵ|=i,ϵg`5{؁R< &$3b j[$-Ldn$kNA # H`   :db5}CqνJj"윌DŽQnq*QW ەp8ّh0n+UVe}:mǼ=ޓnq;Z5JNee'ij 3 )HV=ڃ+>}QːY8}kqjr11[INY*{e$7h\3Gjk*Cglϭ#1m4_vĭm9%1 i`֞P ASlۚԥ֦jvU&p<@v93mOMZXrݵ)T'6$kКyPحCh9u=VqVz}K)SХT۳/-Nb9(¾Sķu~+6Y T mMygbNܜ`-~-R%or^I|Tt@ ZHG<-ܳ3R LKuZXRA J# i]:9Q-*2 Mx`An,nP/d8!)M& i )X52fxq>\v916%UB3FZܯA.D`T@0H tޅss\E+VKRHie8]ӵi?THK<`8x5rбzͽM()*{24Z]ZàFႜ)'98u \k57,$@ZI‡+Wi%#nHru&iSL) IS#}LcӞeWLnQOynH–>'|91dZ!ڹ>\ݻEΞ^:(N÷T)[IQ!<6 ,JĻ֝iaHq JGr}~bZAV&^5-ʤ䬬 qּu)*R Wܨq?fn;)MeӏKܴبY’B¶[VbuE!3MLÉu酡 ! Rp@QN $z%twW}c:TaD 9iɽ5zضLܴAq:[%GAJ{sC?e֥FttH&&)YbTXZS @J# x؈5_,|TÂBOI G PA2]]crə4lU:ZiK3{<\Þ-FZ+;Jp+Wa @Yζk>iFglۻ>_ JьJQu}VtOT vz Ti@QMNYSrĝe*ا%HV)hD?Be6Y  2Sys~F3cn$Y3+KQ) Zvk`he# N `uELe/TI+Km*h >C}?A-ZRJ-esM+h$,) OPx=KV;Jۓ$L۝^}H)*qm1&h~&fn]R7-!]R6ZuNI';rODF>s3|7n\ ?F8o\h\zE űVY6N}Kfl:fHܥ$2*z:mnnJײ&םn6+3GdڬLq>1fq{gݎD)S$ lw8gPd$9HO8)!SqH*zX{Lm򐒯 rI*| vP5)ԩ*Ug'hU֚K)2-?b|BBBBBBBBBBBBBB{F n\4 fvQZ5Ӎo>*?9r,p5TVuNu nJ\uӵ{nGʄa;hOecNSPx:%2~fP   e.CniZrpG䏴pvoLQj.(U~ߞJ%)gvܶ /dV46=)asіg\`7dIJx\'ZceTP$R Cnfu-#}rR*fȫLx*í3i>8#w#@c>sz/;oOs!j"u ֟R``Yh v_ZtzkSK6mƽ+RRG0BxU5fÍio<mL:RB%?N 8 C:65ɚeZu!հKxuR UjZ< q/dqCW_ȥ,*ط/zBfT%`}IkƴȺEӯ lJR6RUG`TR#F.읹lU.M)jCH+PH$p܁1aC(R@$be8ʎ*Z>PǧGnDIQ\Py \+ڒQ0~zR[ j'#99KK4۟VQ)#i>xH:YU*uRx<%$ey;$Ḑm7ܠJNLo02yN*U'g4vFWp*lM?@vYeor}Uυ$rb[<9luiz伝Lh,'Q<3RH &<GV'k?]o]ľPN +sy٥嚩ʶد ߅+`p9 FnU^'UM*L73'6ؘicqI?!?J Mn%E-6IFIKC#8ɀ:Ct3-KJs>+T`9ᶔ $,'ptӡ${Di-R3q;D\ͅ%>φ q"{ H_K)KR<%e[Ω+BC #Tӽ Z镹XMVTy7 RT|ȏekWԧuӷ'k ӀoMPRqҵ$y}2:a[fjTRR l(J#p3"y'-"jjI0Seǫ>h)zgD8#A"@Es_g G `'9H/cecXr}{?{oZ3Եb@]3 R`;Rci l%9V%nR[l%$DK6gi [JjR )>>1U\%oi+*kRn( s.gcXq{?{oZPKN*%:IZĄS,M.Y$s '5ѾYQ蛞/~z|)Lߢc~zT(fm,ԭ?ߘ.oW9€>15]}nD{*b0Xq̴h!lZq$jOQ}QqT 2[%n7*qs$H< h{?Jw[}JA*K56PpYK}-)HP@Țk^i  r{g$aWvY[9⛣ҥYCa;AE ) ` 8ΡvJ-^e~g6Ejކ}v3ٓ+=,K83ꭧRBqC9I2F P{*F򞳕=RSKr2YB as7߈N&y5#'-m-H.$ʂH &8f0*&RУ]N]TU>+rYm[FPʐTA w[?5rR+B\'4[vq{{x ={b&d経L~6uY&,.a ۱IS,a:OE/르2Jlw#65F\e%*}g[pJB2"u jM]l;nꘖ@ipۆF#Nkޗjm8%mgBm8ܐq@ r:1A;bfnK\<[sJ(cs# T nB!G78PRm va )Bra;p0BQy ąr#Y?2;Ia@4ܹh0'ʢUZۆWpTgÝ G6p2OB"s4g}*U:ݴJU}nrVU{eB4I@$9ϳLVͩAOVۇ*+8" cGߙ?f/:羞x >'9؞8c4ͨN@#>Ol*c8Wh2Gĕ7kt?*\a3Aۓ& ^7[ԛt+Hm)6y,^qG\+>fÓ4yyt3Ϭନ`(p1׹p:VfViS)䩷N3k˂@WirγtڡZS7VfCmB@< q[/NUSD o }$E~"P"\ImeʔTP뀒N ;EKܑ4ZBGh5n{'Ɠf+o8ˬ*QџҝRU@QM*tI}fW̬.mOZĶ` ^nEPhL!4ԺӛJ%)RZ lPN/QrV `%'ԗʱ gojG}rmKC%s R~Ą܇;q{Vow[3MSXYo/4:7c([ CVeo}{v]<.~\@emR]I=F@WJ5P3m&%ST aKIwvjicEjmVԂޔLccN:#$eC1Tsde䫲- #hR>˥^g%Yjp k Z2TqI\e'T88 qOS3nDꐅLxg E8ˆ2]Y9kTJQe-%$H>FA5,uM9pRQ&U9+]J0r2;01={ڮwKM)٩G$}I eiqۅ(HNB}AwO Ļ2L5Ymі C\OQh/jFwc8&(GPWveu )i v¬|,ԭ Fܼ/SN˲U[PI[#kٵ&:K*leTڔ˭o璕yx B)}?6[̨ q*q){|Bץ L#B-Ԓ*U ܹL:Pklrxp|NͿF{9;RR+ ZHBq僃}!EIQ錖$deۖhJD2I'0O[?KEf9>s-gw~%"{^9s&x?ӻL[?KEf9>s-gw~%"{^9]wzZe1NYQ }}=Gݳ&sOC>'蒝jŦNBH>C?5SwX|~UM#[?CS|m*&BB1ԻJ+AVҎOOv\(<-Ÿ|4wb3 &գ4Q)E<,o:Q~@MUeXvΑzM*L'& Se>e#щ'|yEu3w/A^+VVRK4myX-4T8Vf1sꆽ@9NZ /Î%*. UX0b4rԍ.j FNܬ)iy,:8ۭb I;pT`bnFNMx5YJdijaw=K䯲Nqm~lb)ow$y2iu H!e=X V;׍6r+ȳk=:Z:@{@G3Ru[E&BV~"ܫ ˦a% )XyE71_ºHfw?g䀒:أSlk^c)SI ʲjk#$Ix}C۳n]DiӧS5+/N XGrNTgt+5i˨vҐ:!D,:XH)K)j̲BU=MNY]ߢJyy?AqGiy!^Ϯ FA<zirkmQJ. ;<p`ֵnпl=n6G2_l6} /*;[7D[O.FH=$F8lf$ǩSϦFWNrauܲP|D%(lm nq9䤀g>ؤu6'xNIppw#po'6n3~^֢4kcP(Ӈ&>GtA +T I^*1U';w'!qĉAӨTI -*_Ѥ)JUᶄ9Q$$!!!*kؙN/>+JF#>#u+"e|o~R~&ԉݟGیB=S3:QTMl5=WU"H>JT+9`RZW2RҖ%@Q 2q$VTZZu:ǁGJ+S^< FA)ZIikϦ]JjYD 6)2@s tz=):Hų?R Qϸ RJ *@iMm8zw鞦U)y=SNؚ ma*Ic $('=њ_]A5 &--qH0paI>8[^ќ#<{„OKOl ܣ/97gȰhխ}&쫋 IR@Zw7';Z=*➲nt L6Qn6l'; dv䗺T,8+S )̮Jp!# ЛrQSTktKQ+TؐR3 C[Z[PR6T82ٚ eCrz<+N&y݌Uc>]P9ˊ,¥ĜjO}WsusOJPhrIKL2ʁ . 83NzOEg95ek%֢j~}FٔK$y"CѮkEԊfjja-KLLP^‚TGڠ@RTX<@npjT ̅ZU>,)bxzOEg95ek%֢j~}FٔK$y"CѮkEԊfjja-KLLP^‚TGڠ@RTX 8:ҍDmejVb<ë^:$`Ǘrc&tkT5 4V*![JH Ȉ;Xm#Ѧ) n{ê8>rn@?g,WT޳3zTL[L]hL7QzY33NoaC)#>XS^4/瀧gVک]9OZ\:]a$)Ŭ';R0Gh:i+ڪSE6)PZ># 4VGN9bOUvI98rc)P#{F1mJJ& PZѨː]BBR\Q;waFr_ODF\SqO:jT|3&b$컒fJK[L*M"]IW|%oyBFv-!! S*gY]S]6/0ʚX)pbݪTE^k]-zT* :@Cڝh?H$'v"EGvvO4#UDA[yr@`&/Sٟ%丩y^I)RR{gp"鎚SDrܒP\-!JN24%I? U4rQrqvt24p=TliɏM#Mt+V iyl*Bn^WmCg*Svʼܟ}88˨l PmCjI:ry\} q(XS.@9FTpݢq9p?M \㒎n|B"O>y<Ɨ4ϧ( ss aoS!)@HRp Y`To֪"wj]ッ*mdͶfUx50@f;'A4y/S-IWPmf@+ϫ8nbuG2Jzԕ)nN䜂=|vѷ*EB-OD"m*؄2NIǑfS j6̇!,/wm>; <ٮ.fM!(Z)PҢ <u!֝cjToΉ*n#.4s PZ"zvI':9UD\tUR՜f fU,6rҶˀ%%9QOcŪtuG9jHB\>FHbX2BLB#NjN] ^@BFO$ dT[ܬQ䪒5JOK0–P)$D)'DB=+:u Pk SM"ڊr%[HʂeRm2wCvuɛqN8I8{F_l[{f-CXeJ2 !T}(Xf.]Yr4GnpxK>¢y(B\N!8;J ]mIU}%(>z*_ߗsGڽc_L+6Er4ᄊgd㿜x?ԛҿ@tR %HZ2U; /#9M4˲fe--' 8LC'.@dNRz~ϨwYȼ|f$)Iޱ') ON Mn mu%i<AW (4Dl5Zlο*G+m<8 E)9`         8##vh@u?pߏdw!(##@psBGx@#DsSb9$GhBGa 9P#!H#|BЀЄ:1;B@϶;BBB d!0=B d!BCC!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!guava-3.6/PackageInfo.g0000644017361200001450000002611511027430322014660 0ustar tabbottcrontab############################################################################# ## #W PackageInfo.g GUAVA Package Greg Gamble #W Frank Lbeck #W David Joyner ## #H @(#)$Id: PackageInfo.g,v 1.2 2003/02/14 02:39:41 gap Exp $ SetPackageInfo( rec( PackageName := "GUAVA", Subtitle := "a GAP package for computing with error-correcting codes", Version := "3.6", Date := "20/06/2008", ArchiveURL := "http://sage.math.washington.edu/home/wdj/guava/guava3.6", ArchiveFormats := ".tar.gz", BannerString:=Concatenation(["\n ____ |\n", " / \\ / --+-- Version 3.6", "\n", " / | | |\\\\ //| |\n", "| _ | | | \\\\ // | GUAVA Group\n", "| \\ | | |--\\\\ //--| \n", " \\ || | | \\\\ // | \n", " \\___/ \\___/ | \\\\// | \n", " \n\n"]), ## - if no 'TextFiles' or 'BinaryFiles' are given and a .zoo archive is ## provided, then the files in that archive with a "!TEXT!" comment are ## taken as text files ## - otherwise: exactly the files with names matching the regular expression ## ".*\(\.txt\|\.gi\|\.gd\|\.g\|\.c\|\.h\|\.htm\|\.html\|\.xml\|\.tex\|\.six\|\.bib\|\.tst\|README.*\|INSTALL.*\|Makefile\)" ## are taken as text files ## ## These entries are *optional*. #TextFiles := ["init.g", ......], #BinaryFiles := ["doc/manual.pdf", ......], Persons := [ rec( LastName := "Baart", FirstNames := "Reinald", IsAuthor := true, IsMaintainer := false, Place := "Delft", Institution := "Delft University of Technology" ), rec( LastName := "Boothby", FirstNames := "Tom", IsAuthor := true, IsMaintainer := false, Email := "boothby@u.washington.edu", Place := "Seattle", Institution := "The University of Washington" ), rec( LastName := "Cramwinckel", FirstNames := "Jasper", IsAuthor := true, IsMaintainer := false, Place := "Delft", Institution := "Delft University of Technology" ), rec( LastName := "Joyner", FirstNames := "David", IsAuthor := true, IsMaintainer := true, Email := "wdjoyner@gmail.com", WWWHome := "http://wdjoyner.org/", PostalAddress := Concatenation( [ "W. David Joyner\n", "Mathematics Department\n", "U. S. Naval Academy\n", "Annapolis, MD 21402\n", "USA" ] ), Place := "Annapolis", Institution := "U. S. Naval Academy" ), rec( LastName := "Miller", FirstNames := "Robert", IsAuthor := true, IsMaintainer := false, Email := "rlmillster@gmail.com", Place := "Seattle", Institution := "The University of Washington" ), rec( LastName := "Minkes", FirstNames := "Eric", IsAuthor := true, IsMaintainer := false, Place := "Delft", Institution := "Delft University of Technology" ), rec( LastName := "Roijackers", FirstNames := "Erik", IsAuthor := true, IsMaintainer := false, Place := "Delft", Institution := "Delft University of Technology" ), rec( LastName := "Ruscio", FirstNames := "Lea", IsAuthor := true, IsMaintainer := false, Place := "Edinburgh", Institution := "The University of Edinburgh" ), rec( LastName := "Tjhai", FirstNames := "Cen", IsAuthor := true, IsMaintainer := false, Email := "cen.tjhai@plymouth.ac.uk", WWWHome := "http://www.plymouth.ac.uk/staff/ctjhai", PostalAddress := Concatenation( [ "Cen Tjhai\n", "School of Computing, Communications & Electronics\n", "B328, Portland Square,\n", "University of Plymouth\n", "Plymouth, Devon, PL4 8AA\n", "UK" ] ), Place := "Plymouth", Institution := "The University of Plymouth" ) ], Status := "accepted", CommunicatedBy := "Charles Wright (Eugene)", AcceptDate := "02/2003", ## For a central overview of all packages and a collection of all package ## archives it is necessary to have two files accessible which should be ## contained in each package: ## - A README file, containing a short abstract about the package ## content and installation instructions. ## - The file you are currently reading or editing! ## You must specify URLs for these two files, these allow to automate ## the updating of package information on the GAP Website, and inclusion ## and updating of the package in the GAP distribution. ## README_URL := "http://sage.math.washington.edu/home/wdj/guava/README.guava", PackageInfoURL := "http://sage.math.washington.edu/home/wdj/guava/PackageInfo.g", ## Here you must provide a short abstract explaining the package content ## in HTML format (used on the package overview Web page) and an URL ## for a Webpage with more detailed information about the package ## (not more than a few lines, less is ok): ## Please, use 'GAP' and ## 'MyPKG' for specifing package names. ## AbstractHTML := "GUAVA is a GAP package for computing with codes. GUAVA can construct unrestricted (non-linear), linear and cyclic codes; transform one code into another (for example by puncturing); construct a new code from two other codes (using direct sums for example); perform decoding/error-correction; and can calculate important data of codes (such as the minumim distance or covering radius) quickly. Limited ability to compute algebraic geometric codes.", PackageWWWHome := "http://sage.math.washington.edu/home/wdj/guava/", ## On the GAP Website there is an online version of all manuals in the ## GAP distribution. To handle the documentation of a package it is ## necessary to have: ## - an archive containing the package documentation (in at least one ## of HTML or PDF-format, preferably both formats) ## - the start file of the HTML documentation (if provided), *relative to ## package root* ## - the PDF-file (if provided) *relative to the package root* ## For links to other package manuals or the GAP manuals one can assume ## relative paths as in a standard GAP installation. ## Also, provide the information which is currently given in your packages ## init.g file in the command DeclarePackage(Auto)Documentation ## (for future simplification of the package loading mechanism). ## ## Please, don't include unnecessary files (.log, .aux, .dvi, .ps, ...) in ## the provided documentation archive. ## # in case of several help books give a list of such records here: PackageDoc := rec( # use same as in GAP BookName := "GUAVA", ArchiveURLSubset := ["doc", "htm"], # format/extension can be one of .zoo, .tar.gz, .tar.bz2, -win.zip #Archive := "http://linear-ecc.googlecode.com/files/guava3.6.tar.gz", HTMLStart := "htm/chap0.html", PDFFile := "doc/manual.pdf", # the path to the .six file used by GAP's help system SixFile := "doc/manual.six", # a longer title of the book, this together with the book name should # fit on a single text line (appears with the '?books' command in GAP) LongTitle := "GUAVA Coding Theory Package", Subtitle := "error-correcting codes computations", # Should this help book be autoloaded when GAP starts up? This should # usually be 'true', otherwise say 'false'. Autoload := true ), ## Are there restrictions on the operating system for this package? Or does ## the package need other packages to be available? Dependencies := rec( # GAP version, use version strings for specifying exact versions, # prepend a '>=' for specifying a least version. GAP := ">= 4.4.5", # list of pairs [package name, (least) version], package name is case # insensitive, least version denoted with '>=' prepended to version string. # without these, the package will not load NeededOtherPackages := [], # without these the package will issue a warning while loading SuggestedOtherPackages := [["SONATA","2.3"]], # needed external conditions (programs, operating system, ...) provide # just strings as text or # pairs [text, URL] where URL provides further information # about that point. # (no automatic test will be done for this, do this in your # 'AvailabilityTest' function below) ExternalConditions := [] ), ## Provide a test function for the availability of this package, see ## documentation of 'Declare(Auto)Package', this is the function. ## For packages which will not fully work, use 'Info(InfoWarning, 1, ## ".....")' statements. For packages containing nothing but GAP code, ## just say 'ReturnTrue' here. ## (When this is used for package loading in the future the availability ## tests of other packages, as given above, will be done automatically and ## need not be included here.) AvailabilityTest := function() local path; # Test for existence of the compiled binary path := DirectoriesPackagePrograms( "guava" ); if ForAny( ["desauto", "leonconv", "wtdist"], f -> Filename( path, f ) = fail ) then Info( InfoWarning, 1, "Package ``GUAVA'': the C code programs are not compiled." ); Info( InfoWarning, 1, "Some GUAVA functions, e.g. `IsEquivalent', ", "will be unavailable. "); Info( InfoWarning, 1, "See ?Installing GUAVA" ); fi; return true; end, ## Suggest here if the package should be *automatically loaded* when GAP is ## started. This should usually be 'false'. Say 'true' only if your package ## provides some improvements of the GAP library which are likely to enhance ## the overall system performance for many users. Autoload := false, ## *Optional*, but recommended: path relative to package root to a file which ## contains as many tests of the package functionality as sensible. TestFile := "guava.tst", ## *Optional*: Here you can list some keyword related to the topic ## of the package. Keywords := [ "code", "codeword", "Hamming", "linear code", "nonlinear code","minimum distance", "error-correcting block codes", "decoding", "generator matrix", "check matrix","covering radius", "weight distribution","automorphism group of code" ] )); guava-3.6/Makefile.in0000755017361200001450000000610411027426014014410 0ustar tabbottcrontabCC = gcc CFLAGS = -O2 SRCDIR = ../../src/leon/src CJSRCDIR= ../../src/ctjhai GAP_PATH=../.. PKG_PATH=.. SRCDISTFILE=guava all: ( test -d bin || mkdir bin; \ test -d bin/@GAPARCH@ || mkdir bin/@GAPARCH@; cd bin/@GAPARCH@; \ $(MAKE) -f ../../Makefile all2 CC="$(CC)" CFLAGS="$(CFLAGS)"; \ cd $(SRCDIR)/../; ./configure; $(MAKE); mkdir ../../bin/leon; \ cp cent ../../bin/leon; cp cjrndper ../../bin/leon; \ cp commut ../../bin/leon; cp compgrp ../../bin/leon; \ cp desauto ../../bin/leon; cp fndelt ../../bin/leon; \ cp generate ../../bin/leon; cp inter ../../bin/leon; \ cp orbdes ../../bin/leon; cp orblist ../../bin/leon; \ cp randobj ../../bin/leon; cp setstab ../../bin/leon; \ cp wtdist ../../bin/leon; cp src/*.sh ../../bin/leon; \ cp wtdist ../../bin; cp desauto ../../bin; \ cp wtdist ../../bin/@GAPARCH@; cp desauto ../../bin/@GAPARCH@ \ ) # the last two for backwards compatibility? all2: leonconv minimum-weight # rules to make the executables, just link them together leonconv: leonconv.o $(CC) $(CFLAGS) -o leonconv leonconv.o minimum-weight: minimum-weight.o minimum-weight-gf2.o minimum-weight-gf3.o popcount.o $(CC) -lm -o minimum-weight \ minimum-weight.o minimum-weight-gf2.o minimum-weight-gf3.o popcount.o # rules to make the .o files, just compile the .c file # cannot use implicit rule, because .c files are in a different directory leonconv.o: ../../src/leonconv.c $(CC) -c $(CFLAGS) -o leonconv.o -c ../../src/leonconv.c minimum-weight.o: $(CJSRCDIR)/minimum-weight.c $(CJSRCDIR)/minimum-weight-gf2.h $(CJSRCDIR)/minimum-weight-gf3.h $(CJSRCDIR)/popcount.h $(CJSRCDIR)/config.h $(CJSRCDIR)/types.h $(CC) -c -O3 -Wall -I $(CJSRCDIR) $(CJSRCDIR)/minimum-weight.c minimum-weight-gf2.o: $(CJSRCDIR)/minimum-weight-gf2.c $(CJSRCDIR)/minimum-weight-gf2.h $(CJSRCDIR)/popcount.h $(CJSRCDIR)/config.h $(CJSRCDIR)/types.h $(CC) -c -O3 -Wall -I $(CJSRCDIR) $(CJSRCDIR)/minimum-weight-gf2.c minimum-weight-gf3.o: $(CJSRCDIR)/minimum-weight-gf3.c $(CJSRCDIR)/minimum-weight-gf3.h $(CJSRCDIR)/popcount.h $(CJSRCDIR)/config.h $(CJSRCDIR)/types.h $(CC) -c -O3 -Wall -I $(CJSRCDIR) $(CJSRCDIR)/minimum-weight-gf3.c popcount.o: $(CJSRCDIR)/popcount.c $(CJSRCDIR)/popcount.h $(CJSRCDIR)/config.h $(CJSRCDIR)/types.h $(CC) -c -O3 -Wall -I $(CJSRCDIR) $(CJSRCDIR)/popcount.c # pseudo targets clean: ( cd bin/@GAPARCH@; rm -f *.o ) ( cd src && make clean ) ( cd src/leon && make clean ) distclean: clean ( rm -rf bin ) ( rm -f Makefile ) ( cd src && make distclean ) ( cd src/leon && make distclean ) # for GAP distribution src_dist: @(cmp ${PKG_PATH}/guava/doc/guava.tex \ ${GAP_PATH}/doc/guava.tex \ || echo \ "*** WARNING: current 'guava.tex' and 'doc/guava.tex' differ ***") @zoo ah ${SRCDISTFILE}.zoo \ ${PKG_PATH}/guava/Makefile \ ${PKG_PATH}/guava/doc/guava.tex \ ${PKG_PATH}/guava/init.g \ `find ${PKG_PATH}/guava/lib -name "*.g" -print` \ `find ${PKG_PATH}/guava/tbl -name "*.g" -print` \ `find ${PKG_PATH}/guava/src -print` @zoo PE ${SRCDISTFILE}.zoo guava-3.6/configure0000755017361200001450000000045111026723452014253 0ustar tabbottcrontab#!/bin/sh # usage: configure gappath # this script creates a `Makefile' from `Makefile.in' rm -f Makefile sedfile cat $1/sysinfo.gap > Makefile echo "echo s/@GAPARCH@/\$GAParch/g >sedfile" >> Makefile chmod +x Makefile ./Makefile rm -f Makefile sed -f sedfile Makefile.in >Makefile rm -f sedfile guava-3.6/bin/0000755017361200001450000000000011027427571013120 5ustar tabbottcrontab
6!Y1b D|6rwE ,uV3Hs-:2|ZA_YКL*BHZ$x|>c̛5Ԏ{X-N:_h%j> endobj 1979 0 obj << /D [1977 0 R /XYZ 81 757.935 null] >> endobj 694 0 obj << /D [1977 0 R /XYZ 81 663.42 null] >> endobj 1980 0 obj << /D [1977 0 R /XYZ 81 639.676 null] >> endobj 706 0 obj << /D [1977 0 R /XYZ 81 420.39 null] >> endobj 1981 0 obj << /D [1977 0 R /XYZ 81 396.645 null] >> endobj 1976 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1984 0 obj << /Length 1850 /Filter /FlateDecode >> stream xڽY]o6}ϯ;Y~dȀnXڥYjˮ0[Je9s.EڱLGba$K\ GGG^:,R(FID5FH 8ps_ۻ˷Π`zR6`Cw#8"&),͏np4wo#ѿU˹mM"Et 2Jp$8ai/X`B? H iL^ $%TuBHL_CApy,[xxpA-8p]pF#"|VS08C"I: Q|Pk80)(mgZ{! NRD ;$pk 8%R |Vv2`)#;a4bgD53FN8S8Qo!,`;eq5 6O" hGQ܄vaj͹mJj<+jc FRH@VUq{H8y+Qt5 ާ|vׇLOޥYe2+;bgg:5!'Bktrk5gԜ\ Mz-%O )Z2imV8!3a:Mv,O/'t b|#sEH2K'_젹I^}4s[nTu,,ln h]Kt &@ D5UkJòaE>[ځxx]9iI-2qNqeeAm)[EN0DL&x,ƮC"%Ozc<.tF؀mgo"AlZXvJIAw<5|g2J%}uM݇A .TVژ.U-`a;j{kaόY9o Qiq%\JJ"g-fSv>nNd쳝jì E2tlwG k!cHR V}\VKa%D^Ԗڀ6Iw㈃BŌ7m:(o<5 A5C *. L9, 2  \6髹Wm:a3WjWz=hde{0!Pu"9HiA. zr/`Yrg4s{d!9jcM`+]V溨=ؐ/Tt—p$ILNNdLy 0 WDMm5ˌAS$E0W'&/zĭ5VN" !'f7=9j 2Tx'F] eӽUd0\7O,BQ<%CwI)%י ^2!*8,xLRn`CX]$}hfQ;)Қ:Mk>de,IJn[k!m"hiZfPa"_nAδT40"<Gi؞Tigo+̅=]&.rYdw,$+QH IA/?so#{GmK6&)>DRf_'aS,z2BV>*\SZß_S7ϭ_:6 T`ƒ !":)łb`kPk'hv"JA&6 $h;zH^`B޸;aΤZL_ѷw}=w.!)W[W={ ~8nv0 0 endstream endobj 1983 0 obj << /Type /Page /Contents 1984 0 R /Resources 1982 0 R /MediaBox [0 0 595.276 841.89] /Parent 1953 0 R >> endobj 1985 0 obj << /D [1983 0 R /XYZ 81 757.935 null] >> endobj 707 0 obj << /D [1983 0 R /XYZ 81 591.544 null] >> endobj 1986 0 obj << /D [1983 0 R /XYZ 81 567.8 null] >> endobj 708 0 obj << /D [1983 0 R /XYZ 81 284.087 null] >> endobj 1987 0 obj << /D [1983 0 R /XYZ 81 262.555 null] >> endobj 709 0 obj << /D [1983 0 R /XYZ 81 149.898 null] >> endobj 1988 0 obj << /D [1983 0 R /XYZ 81 126.154 null] >> endobj 1982 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F14 33 0 R /F15 750 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1991 0 obj << /Length 2202 /Filter /FlateDecode >> stream xڽZms_,uMfINt@ɴͩ^.gA)@iqA v.' N>] gBD1>$TcĹJP0'ާ9p}mnp;F D"]udȱB*2n8>r>e~fOnjztS7◮4dnf:p3yv ,w7ϥSuzrEFSEְH%ϔd7ar}}3\>F0CRRקlpF'C/sh ֗7Zij'p/]޻ϛ 7|Y|'ͳE[ xcůP$$pĨLfNa# kjqy4HY-C(K2BrDx2`dIN(2^J 9"J#75K !! )Rc/ ѧ" #7$8憈BN+4+o }?h8` ZN7i vVbp p5aa Nq!>Fqdxd ApwBB25 IΌ3drljvP4L*j] B!b I]Ɇ@||֏I ɐ`{߭Ym>KmZV/;կ Í:8RFp*!kCLY3FۨEm#*w Tpc BRYAD*mղܱ;7 EBpkXtM#'+( wu,ƭ­ӬzYDn(IwK.QH?mᑁ;8X_W-)peG@2^7DL*n1u[k^F6oQ"cQ7̞'ni nbD_#!MgUzdޜz:s{U1`yoi&* ev(i1ڛO'Ylڜ I+M, c]b/:<*;~.oX0b}?b"+BR,^8寜6#FU<;I3gOmRTAY zΗqv[voZ9ߠ:8s3DFH$v y/P INߣ hZ{Xw?zv}2;]io^z܍P-st ϶z/!l~z!kzd7N]#ƇA]*u'd@l6/DRI?ۛA;;;@5х:>M]ÉEuEVTmodSK3 ŤnVߧp 6?r Y"MZ7LӢuq'eW. $?icͨ6l=UzԫP}kzWT^ j4iX 1HKi@ٶX"3MvƯO1>fiKNy:{rDk|Ї!#wb/j6{^oHR<,Vծс&|v$  _ <)P=Ye_ wqy;~u6 JfU'xa@0*XiJ^szN>CDixB eogam 0$Fp mXX{!W`NYX{B#qI[tb,ǁף9^N/թ7I*b0\杸pz*C_@m80ra 1l2LN8}!D)QsUj W5Nzn;=If[" tEh`4Oyq!>T!vċ\k;C 8Ɠ <9ۧڤ1t҂ BM*+?1fll7?II,`2;[@4QIhIg'`ksJ^aK endstream endobj 1990 0 obj << /Type /Page /Contents 1991 0 R /Resources 1989 0 R /MediaBox [0 0 595.276 841.89] /Parent 1995 0 R >> endobj 1992 0 obj << /D [1990 0 R /XYZ 81 757.935 null] >> endobj 710 0 obj << /D [1990 0 R /XYZ 81 588.163 null] >> endobj 1993 0 obj << /D [1990 0 R /XYZ 81 564.419 null] >> endobj 711 0 obj << /D [1990 0 R /XYZ 81 366.794 null] >> endobj 1994 0 obj << /D [1990 0 R /XYZ 81 343.05 null] >> endobj 1989 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F14 33 0 R /F15 750 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1999 0 obj << /Length 2666 /Filter /FlateDecode >> stream xڭr8`DJ^|y*[LbWR٬hXCKR=_hPLY,FɻgZ9̑!gZN,Rs5u#ݷB\}z}+gh#k/Dnpu]'LDP9Iqr}Ý)}r8SQ<ɝ˓w"m#< d܏hyh ^7_,/r{l=o-<)XO07̓QM ID1I|MMlMA|0}d8ǐُB&M7ߤ 6PP2_ņ~3ɭ D#%8X$LEާ:M9UZ ;x^~Hx6 efhLdۧ6\4V{"ڷZkiTFV**E"p"h]΀Lp:P?/O*gMU7WyKC,n/#u":ki6x}o\ܙH ko|hwGw͚|Zz[4"Kd䃘pls±pBpTg2i\gN#O뉊$x#Wt4QZ]R.vv]eCĀri Tͨ]ni6u5.SFXhXD( jV]/LA0^J3[cy'3kD3 ),-ۆ158Sޥ4X43hyjfkU sj7PH fBNG=͂MS'TDlI3jǠrdvp A+=.I*g*Y%R>OE\O-.HpcgitH3$~(!Hxu5V\9/di˺Jc$+vz&!E #r=mÙ`{p|CWxl+:.~4UۍN *QKgX6+pd4pTvq|ADDF];SķZ gqb4^d9 v<%jo#]NA ,V9)IR6Nh*+&MmOm9;j:^\[R{Iˆmܖ-X@0mg[U9-PΘ, G-# 4Z )ypnc" uWHKI]փ۬un@c"$CͰ w׼ׯīwr\[: APpVz>c^a"9}"@P%PZYz iutWx~{94J8 |Mߵg/#4d`#ϳ}Cy(l <5{-p0QT(" /dB_W Lˑ)wH%]|z@-ϯtG?3S݀*YiƦVf@dIZ6дgn5FBCnӂS` _d,nӚ* S'߫%>lhGQw*dHr>16 jSa6%3ܾZS#rƥL,˻ X貵g ^#fJ益ETb(3RF.BpǡN|ǪLi`f"*F楎Sxՙ-4iI߂a,M!Sbv |+}LXv%93Hq9eydZ@*]:eϚrw|\`$8$qqQmߡ-\9vr[*Uug@GMU0 Kʴ)G %S:ΪIgP{tbQ)z~-AʈnceZ\1SwEиiVLM6Yt5DܢmTFFd/CZUR(*!)D5fT0gA6ObOHU5{XJiRA3Zf>uڤ5ƔC;3&@^`vͳF8A)C=ڝ-&vk9"{nL_dePnS@&@sd nsiCL}ME> endobj 1996 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [358.615 549.159 397.568 558.744] /Subtype /Link /A << /S /GoTo /D (cite.GG03) >> >> endobj 2000 0 obj << /D [1998 0 R /XYZ 81 757.935 null] >> endobj 712 0 obj << /D [1998 0 R /XYZ 81 639.365 null] >> endobj 2001 0 obj << /D [1998 0 R /XYZ 81 615.621 null] >> endobj 713 0 obj << /D [1998 0 R /XYZ 81 340.562 null] >> endobj 2002 0 obj << /D [1998 0 R /XYZ 81 311.073 null] >> endobj 1997 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R /F29 17 0 R /F61 742 0 R /F85 743 0 R /F46 35 0 R /F14 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2006 0 obj << /Length 3268 /Filter /FlateDecode >> stream xڝZK۸W-THR4wٲSe%VDB#cmOęM2n|ƿy8VA7MWqdIDͶcֿ?&`4'H6ʗnq(YFj̶.Y,MպF5v~_jCjٍ`r]5ꈕmYZiՅL{QU*.Q{F"*nk@θ Uo\aj$;ׂ-gloЍ#E)J4,vy˝j[-z AwB4hDʩە9W Yhmbog7rE?)kQWwrssReyf)2swTS5m孱Zu\hA N2v?<{a+Ͼ~}i |p|:ө4ZFȤn;lMܦ/_6G)rN.Lw jhEf;ۧRdޝP9%1Hi?PLBBQgx _S˼) x)tٟT_u,1( fu7'1MǼކkgRХ? p # 7p9F-1Y/ Ð+>EX:jSR tOx4dz!̴m$wܙwp(U׎XӔuRɴ zԓ~tA!qֲ*uk~Qր@Kp㹑G@d%Bz^ hk V3>QfE`%+`NH ܌YN`}7`{tV0?P7Ex͌SZܹX 8|vOJ2@}@_a=0M![;MSW BEaj`6*"dgxiA 0FL =>?ZFdȑrVSBodeDqG%T3g0`ǀ)/ۈ@M RC1 /&gX-!%t`gg&v cZc&,CP @y!@=6~itMl pDvȹG iPah\Gn敿cPQdi0$fpD %fu҅ _o=i\-굦-us!ЍyPϠ8`<; Xd#3' 7I%z?Wlb3DT2 @v3&7A{ъqPDyFdxzQ7얣g;nshDW@L`Sw#352Vfeeߓa0"M˒(8K)αs)f{"tLc㈊rkځL7O#R0gȳ밎ŕ 2mˑx nշjIkT/{loǏ X8p]; <-7Oi 5c9<"LV/p;lǒ=!?ۜTJoTm_ K7Sa,fNJ7K=Ym3KZ3\EH "@u)# OF܎uDamp@Q倾֪PRimOjV`8`G!q(EA9R6,cIW9!3'uub)l7 X 3 U#5ׂ`m9-U 8$.LK)vȗ#F\T~sXO0Q:- dSmjuC98Q` ʳWu! |f TtRen {LuꄓkX)8Y" db5]V@ V'ݞ@Wlއ~$](~;s1BzܽOQElNhF7ok"0{;{?E^NUa ,kL)@(va'6Y-Ԏ5b!#YHsvg'Dv \s Ƣ %~pit׺N6%kBAX?`q1ph;'tU 8Rz4QJ R&/.#nHiWbrRp\|):8e @P w#PJ0Ju04U^vȐw>~z/oϏWb3Y\0s1) R%ey%AZڶbB &C܃\7"JbT8K 6`3I 1Aә Z֖ q4@ƅ`V4sxt H(10GzfvIim宪X.e{nQ]7\aK{gR!6LzĐ, &<o9ꡂK62b=RZB;H> h]cף(F8U!veQ2GJ?K "~`}1>CO9Di$#L/fEp$Wԁ}X&q^}G6qǃslqCZRFvN( :N+; Spq[ !L2JUU.Nbe۾|sA# >8q?m_' endstream endobj 2005 0 obj << /Type /Page /Contents 2006 0 R /Resources 2004 0 R /MediaBox [0 0 595.276 841.89] /Parent 1995 0 R >> endobj 2007 0 obj << /D [2005 0 R /XYZ 81 757.935 null] >> endobj 2004 0 obj << /Font << /F43 30 0 R /F31 18 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2010 0 obj << /Length 3134 /Filter /FlateDecode >> stream xڅɖ۸-{;Źy΋Iq9@$$1& ߧ69P(,UVG*i`(]qxu_M_mRoeG=]e2w>}ixH“VKwjƻ}0ѫ6u4 A˾b}7"y֪TӨRvax){3GϚ&jtҁ% r֥yZmok>Z\׹izUma4N #.|MUM={&B- _WO#R@ݜuһ67/~ѭ&n0Zwj# HCp4NIK1\~,|WIAN/|2W%LKȎ´l'' }"z>" pQ RyDk;Ѽu 7aFu!2H1> κG306Ey|dpt4:F=*Z ޵f=\-X3c*eB2;뒡ܓȽ:q]6y5BOjAG{[vyZ4n8m2\<5aQD_`Q]].Uɦ'C9u?F#ϝ\q3` <.+ 0b~A[C'Qg[}%M>-Zq <{ОL %- +xE vhpl'~ 9JGk0DRCp&v2DK uଐRNRTܜ] (>:ؚ ?Xhd3ZpJľk6>G^_>}X+P‰,RkA)F 1֌cpFAh<ve)Jy5>/UU 4 BI)o!W.^mkK LvnsZ$Fqh'_j'O ÁdOX$5%m1?>@]w <i d0[*\%,mnPa@t9)&:ޅ%(|gL}TͫHYt[I$pvRɼ.=4"2ݯ ZʨgdOy-U+3Np ZMeOܚnMzZ9K!%)+nc1@%#6*A)9IUqX&#~)<{iLh2pZ.ROl“ l3.mf9f9fr$0I/` BlqT|?բqPҔG7HXV{,$M@NfȮ u ձgk~^yAmWpt+XIEƠnW1 -7pg |wsVbp}_?4g,VlϤ 4f C)jHNr$V4B4}crgWK ?V)+Ӣ&¾>rZ>cnTT[HL1L_ B_7U?'SHt?0q4PXc.5눾W'H:ķȦ_k*88=A'bO|8rzi̊3K4u.7a^q*0ot8Tde0<[@y';B"F$b||W6T<g,_m}P endstream endobj 2009 0 obj << /Type /Page /Contents 2010 0 R /Resources 2008 0 R /MediaBox [0 0 595.276 841.89] /Parent 1995 0 R >> endobj 2011 0 obj << /D [2009 0 R /XYZ 81 757.935 null] >> endobj 2008 0 obj << /Font << /F43 30 0 R /F31 18 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2014 0 obj << /Length 2801 /Filter /FlateDecode >> stream xڕZY6~RUG;>sTyz(aM Afvק/ E+/Ch>>&\=Շo_z&&&w&MmIV>NzwÌ(a3l KsHKxJc8L=4'Q}) [?H2ۭ6msv BkݾmYK`u&K >v0C$FEpi:릷<Ρ#b #-I"r=8R#M lʒb-ftP[e/nͣUNrۨQsI*sS/aʎ-hZ myDo<XjcNb{J{>5Ttԫ2{y.@ɳ܉G "MGjH J[y$"P; yȪ(p`I8]]S[{)[rP'B6߂Ü 8hf&!fJ8;?rh#2A"F šɫ~(M)~$|t|]{eܟĽc~R t[: <=͙wǵ L- NyE;nvA\$X o%[uw粣j R$8ge*e*~ʎ[eO)e4ԘlezK-ٌ^?)X.Z +wcq"/儌14\1"=HРNP4GM|ܦVch/,qJXaf5nmɚyMRY0ʲ߬Pnuv>Vk/uE]H;{(40tZ.0ce:O¾b1,Q"D+Ǭ;!n 9qPSo:7 hZ8ǑY':K /ȏZ1r(]/TH߻thV&rdLj`Ă\RXC?MlX/G˸ՀkK PFp(jBn&Kb8޹/I,) kǻ_pLXv"=Ey4.&R*j`oKs0[6nZ*m-|Y^,y42h[Hꂞ7tDvU*N3MIK2"2p-#s:K}ݿ - endstream endobj 2013 0 obj << /Type /Page /Contents 2014 0 R /Resources 2012 0 R /MediaBox [0 0 595.276 841.89] /Parent 1995 0 R >> endobj 2015 0 obj << /D [2013 0 R /XYZ 81 757.935 null] >> endobj 2012 0 obj << /Font << /F43 30 0 R /F31 18 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2018 0 obj << /Length 2832 /Filter /FlateDecode >> stream xڍr8m@jNNx[fR[="laM>o@4噋6Fpx\w~Er&q>,48W*Y$:9z^^RbW)aEo yn. b dř:^/b}׌V=΢P/?Uٞ}V0L[ -C2zY!lh ,M.&=A%}]u{|4S#xr8Ykf%2a4lZ, EŰ`\V⯬M [.7L0gʁMv0sA?!\/YE0a)dw'2fNRu0GK0Y "?yS"*Zf]kGٯbf{zX6jF UMܩWQ`E 6Bp@pPc )pP J|qLL"us, ѣixÄtmr̄-N$ME:@i>\ޒBBP{!S`|R lLEͅ#b(섈o};S6-T6Plk:J:̎·_~1u;c!LWuqd]sA0Hբ1l77׼on_,_@@թX. vb\F, ٶ{0֦0YC6];<%D P6T$vڂQCdTIZdT 3G;" {(Er;$,\Α8P[:<\3l./ [E*N#Y)UɔLFmaܬA +۞a`5s\ͧ>2c=V ǚGb9?L'C/YI@@\H(a5tmY9 N8! JSljͮBfzǂ;ΕmFvDW 9p SEi.]ca莭!1S.)O󗄉4 AEJ=1E27G@1wƐ,#fYry:~v.p(wD֋ /lgH>X%=>`sEvI9bP+\(s{}>v_ 'dSCincDF1qSYlKQ3E#d );î gԟm ~aV0T P{,j r3t1T:@c΅Q@ n'בH|şKIS6 ъd(Up JU_ߣH j;e Wv@x Oq8~SX1G찰?Asjl trsDd$8YR#)둔5tir䄂k(:mj( ɏNo1?p5Ա̷O>lon}|>4J\K:Cuhx&8LmVڑY{Iw%i0*IducYZ nUxS4*l',GJ`llnׁɳq<FF)I:pڔX\_>`f+nn/yn2}l2\0Gچ0i`jF phN 2TY+[*Xj~/O'՗M\PC7; UQᦳ7uEh|zZ<@k@Qp%:1fF*7jPXћS> ^hJk9`+f]!s8踳*-#:X.2!Ht>߰>ظNwN,*~gA[v:]t 7 [qo{S2'SNx*~JIi;QOqL G+nkib}DQ”rh{Kj3{>)T 睲1sWIOEu^w谦]ϵiڭ1pJ$k( ٌs d84tSR2WG OjGFJqKy#(9UZ(ϙdp{f*hnxLz$Oi&_`FLH(v8{+MsG;igx bEM5rHPu DOMRWGqؽ`cjwx 5%r{yFj]Ƈ95]%qKMtZ]BrO$}o\ sRg1 R;%Ly-!cfH~*-ދi']? 4 endstream endobj 2017 0 obj << /Type /Page /Contents 2018 0 R /Resources 2016 0 R /MediaBox [0 0 595.276 841.89] /Parent 1995 0 R >> endobj 2019 0 obj << /D [2017 0 R /XYZ 81 757.935 null] >> endobj 2016 0 obj << /Font << /F43 30 0 R /F31 18 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2022 0 obj << /Length 1688 /Filter /FlateDecode >> stream x}XK6 Qz۶&NMhSYt_r=a>{x Y3.0%QXlp>Cy'u_@s+wŒ~+K2^ ם+[C?\A<2mآ瘂* q:ej}<9B<6"GU;JMG6#GF5s/:=ulË'ueaSyJtrEV9^L0Qq|2.*gT:(935LECJeM.jR ɕ'T WTi psiQt6uw+E^Y&uOH^TG &VѧѐO7A0VhAāzh@AF0 V)x%U(dP' u-Cf$$ƃDc(Ģb8%x91QlqGt.5+\&_^ ##Axd~*|<1e mY.jS:ٟ>@N{p GSնV˾/!T*۾x#_ړ Q4Ei9 r؏6"ETյ>A(lx ҿ= ,d0uxLx2*Ļ 2F.#w0 պ oYmdG`̘k(qYGS"W5QnG~Mk`jO:4q|ן^v/_,eu'>niy(H;Do;OPyJ$BekEYg{lpRP\ZnH1BDnm26*.JM&.^@3MQg TچيԚ7@l*΁)9\LdFNu6e3+ES4  đdDAAKSkТc.kПS55R 1Xr qeB^f"9<2]+z(˄Dz_*m `b̳PEE.S @d1axq_P:>\7m}ꗠk6HaW-MGKw7}j{`#.XU.g(喉 A8x3"'=KbrE7ϹH$}Bx&ߌNm!:tߠp JzƂoQM+NQ$IsZ/}\P iV}-] L_ےLlՐ4NHZ*GP Bq?ۖ`h`&o@1q(лJGk) V b{tQxڣ;qRz0at5`=~׻M endstream endobj 2021 0 obj << /Type /Page /Contents 2022 0 R /Resources 2020 0 R /MediaBox [0 0 595.276 841.89] /Parent 2024 0 R >> endobj 2023 0 obj << /D [2021 0 R /XYZ 81 757.935 null] >> endobj 2020 0 obj << /Font << /F43 30 0 R /F31 18 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2056 0 obj << /Length 2245 /Filter /FlateDecode >> stream xڭYr۸+"o8ve{fj*,+")k 44 xLtpWpI,eAZr"t6ߒKw!W];z %0FJ㾝e&06ϡ B& sMNoicm`2ӹ*/ 6mQ,*g]K^z{)]~8==!C/a6nC~œg4]Mҋ 40a#&} s&dmʅ@ f4AoeUa.w.{}#` r0)z|q,˒^ \$oϟVmLbߧX~)w ʀ@=s(:k㮀 J׷X`g(?i<.z5')'y EyST]R"B_Qی NwhcLJCMm~49%.=phUw̍I J[(WVj4?$A(]bnL|q;* :xZ]ݴ/{{Z7u@p_;c&*DH's;pCQ,f$%+%Qin):vcd&<}̒9ܘ6!P> ]\5㚰QSx)|ìbyv"DEٵ3Ne4p& l&T ˉ 5v`Q*<`6SJkWASrةam強IZ1Lp^4ZFFlF<엞F_"䅲͛z&c%y2=|Ob:>Fx|vj=ui@b} i"O*i"0>%Uib8Q Œqs?j5n}pv]q! -mb4g͋ID;+L!u%$`~XQ_̓yr#ܢkJvq"=y"Y-> endobj 2025 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [221.189 572.885 239.545 583.855] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 2026 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [247.839 536.422 260.74 547.79] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 2027 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.64 499.932 522.996 511.753] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 2028 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [420.553 463.501 438.909 476.343] /Subtype /Link /A << /S /GoTo /D (page.126) >> >> endobj 2029 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [442.371 463.501 460.727 476.343] /Subtype /Link /A << /S /GoTo /D (page.131) >> >> endobj 2030 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [343.488 427.802 356.39 439.596] /Subtype /Link /A << /S /GoTo /D (page.48) >> >> endobj 2031 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.607 393.859 201.963 403.531] /Subtype /Link /A << /S /GoTo /D (page.105) >> >> endobj 2032 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [212.701 342.123 225.603 353.917] /Subtype /Link /A << /S /GoTo /D (page.58) >> >> endobj 2033 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [454.62 306.058 467.521 317.88] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 2034 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [233.908 270.419 252.265 281.788] /Subtype /Link /A << /S /GoTo /D (page.121) >> >> endobj 2035 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [255.727 270.419 274.083 281.788] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 2036 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [277.545 270.419 295.901 281.788] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 2037 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [414.594 234.038 427.495 245.75] /Subtype /Link /A << /S /GoTo /D (page.91) >> >> endobj 2038 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.611 199.986 176.512 209.658] /Subtype /Link /A << /S /GoTo /D (page.72) >> >> endobj 2039 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.429 149.074 198.33 160.044] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 2040 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [192.094 113.009 204.995 123.98] /Subtype /Link /A << /S /GoTo /D (page.12) >> >> endobj 2041 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [208.457 113.009 221.359 123.98] /Subtype /Link /A << /S /GoTo /D (page.34) >> >> endobj 2042 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.821 113.009 237.723 123.98] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 2043 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [241.185 113.009 254.086 123.98] /Subtype /Link /A << /S /GoTo /D (page.56) >> >> endobj 2044 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [257.548 113.009 270.45 123.98] /Subtype /Link /A << /S /GoTo /D (page.57) >> >> endobj 2045 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [273.912 113.009 286.813 123.98] /Subtype /Link /A << /S /GoTo /D (page.63) >> >> endobj 2046 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [290.275 113.009 303.177 123.98] /Subtype /Link /A << /S /GoTo /D (page.70) >> >> endobj 2047 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [306.639 113.009 319.541 123.98] /Subtype /Link /A << /S /GoTo /D (page.71) >> >> endobj 2048 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [323.003 113.009 341.359 123.98] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 2057 0 obj << /D [2055 0 R /XYZ 81 757.935 null] >> endobj 2058 0 obj << /D [2055 0 R /XYZ 202.356 642.368 null] >> endobj 2059 0 obj << /D [2055 0 R /XYZ 81 602.171 null] >> endobj 1712 0 obj << /D [2055 0 R /XYZ 81 602.517 null] >> endobj 1379 0 obj << /D [2055 0 R /XYZ 81 566.453 null] >> endobj 1713 0 obj << /D [2055 0 R /XYZ 81 530.388 null] >> endobj 1740 0 obj << /D [2055 0 R /XYZ 81 494.323 null] >> endobj 1054 0 obj << /D [2055 0 R /XYZ 81 458.258 null] >> endobj 1537 0 obj << /D [2055 0 R /XYZ 81 422.194 null] >> endobj 1133 0 obj << /D [2055 0 R /XYZ 81 386.129 null] >> endobj 1304 0 obj << /D [2055 0 R /XYZ 81 336.515 null] >> endobj 1690 0 obj << /D [2055 0 R /XYZ 81 300.45 null] >> endobj 1445 0 obj << /D [2055 0 R /XYZ 81 264.385 null] >> endobj 1273 0 obj << /D [2055 0 R /XYZ 81 228.321 null] >> endobj 1411 0 obj << /D [2055 0 R /XYZ 81 192.256 null] >> endobj 727 0 obj << /D [2055 0 R /XYZ 81 142.642 null] >> endobj 2054 0 obj << /Font << /F29 17 0 R /F31 18 0 R /F46 35 0 R /F88 758 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2076 0 obj << /Length 1770 /Filter /FlateDecode >> stream xڵXr8+x,+qNJYJj( 8E) eŞH@ ѯA1{wY C" U8\RP3̗5:<N$F_&}_; CϤ"$Jø.DFQ5rÈEPE8료zJ"Li׶nLm ߊ|"9Bu-ϏG#R›mw3&vZQMUM@e5ML"4i3["HL۪ܘeܬM7igv`J% 5%P4]LRO"!Q`D1_SXE(j_dFBF|z3Uai(Ȗe1#B]Xa^ ,}QVic<9-D tg `L1--Q˅ltd@Ef+;VX1e,YIēF#׽yq[Vy{6eu?V|U\G.AHwwPjE_G T 5IkT"^YZ7voڮ8[FmֹmHO<-Ҽ}IW f1`8DzIID`"1^0T^XG,)-.Y e!bWz)Mc+;(@~)ePv9߸`Q^i򳼂JD}2U6B'vˬڧ-,_}&&vEƃNeԸP0}a߬}(3Wj]'Ns.&BHA)C:E8yieekeiם7ч]{qaK2FmҰ|J"qv]-G9xj]˪YO,܂[}+'O%z5PyrfU\U99:i}Ui\XqFڵ|\o>*tYVvY>tY;!كY dYkNB.p iVI n|P`to/9:rj76IF^WJHxQ!^tw, <,йW :ZyXi" n>4zl]`6c+a ='fbIJbPj6"Bg}nLQ6qFyjt۶HXopz.0l.wm1:eBړūJR\%)cWkv*iim m֩@㥙\V8ܛ!<$ O(t JpnEj7ܝݞ>UO:}qzu;b4S $%pj8A0h^UVmڀEͼ\q.6b(}2Pk,0Bf6(lQpsP,- ۂV> endobj 2049 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [201.083 705.162 213.985 716.956] /Subtype /Link /A << /S /GoTo /D (page.57) >> >> endobj 2050 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [217.447 705.162 230.348 716.956] /Subtype /Link /A << /S /GoTo /D (page.58) >> >> endobj 2051 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [233.81 705.162 246.712 716.956] /Subtype /Link /A << /S /GoTo /D (page.59) >> >> endobj 2052 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [250.174 705.162 263.075 716.956] /Subtype /Link /A << /S /GoTo /D (page.90) >> >> endobj 2053 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [313.315 669.206 326.217 680.919] /Subtype /Link /A << /S /GoTo /D (page.91) >> >> endobj 2060 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [315.42 633.032 328.322 644.854] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 2061 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.138 584.242 148.04 595.213] /Subtype /Link /A << /S /GoTo /D (page.48) >> >> endobj 2062 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.502 584.242 164.403 595.213] /Subtype /Link /A << /S /GoTo /D (page.51) >> >> endobj 2063 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.202 547.463 364.103 559.175] /Subtype /Link /A << /S /GoTo /D (page.12) >> >> endobj 2064 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [233.297 512.113 246.199 523.083] /Subtype /Link /A << /S /GoTo /D (page.12) >> >> endobj 2065 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [249.661 512.113 262.562 523.083] /Subtype /Link /A << /S /GoTo /D (page.71) >> >> endobj 2066 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [266.024 512.113 278.926 523.083] /Subtype /Link /A << /S /GoTo /D (page.77) >> >> endobj 2067 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [282.388 512.113 295.29 523.083] /Subtype /Link /A << /S /GoTo /D (page.90) >> >> endobj 2068 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [298.752 512.113 317.108 523.083] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 2069 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [462.637 475.65 480.993 487.018] /Subtype /Link /A << /S /GoTo /D (page.106) >> >> endobj 2070 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [236.647 439.983 255.003 450.953] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 2071 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [468.517 416.644 486.873 428.465] /Subtype /Link /A << /S /GoTo /D (page.104) >> >> endobj 2072 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.611 382.788 181.967 392.373] /Subtype /Link /A << /S /GoTo /D (page.158) >> >> endobj 2073 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [255.028 330.965 267.93 342.759] /Subtype /Link /A << /S /GoTo /D (page.48) >> >> endobj 2077 0 obj << /D [2075 0 R /XYZ 81 757.935 null] >> endobj 1122 0 obj << /D [2075 0 R /XYZ 81 735.618 null] >> endobj 1444 0 obj << /D [2075 0 R /XYZ 81 699.554 null] >> endobj 977 0 obj << /D [2075 0 R /XYZ 81 663.489 null] >> endobj 1053 0 obj << /D [2075 0 R /XYZ 81 627.424 null] >> endobj 725 0 obj << /D [2075 0 R /XYZ 81 577.81 null] >> endobj 726 0 obj << /D [2075 0 R /XYZ 81 541.745 null] >> endobj 1544 0 obj << /D [2075 0 R /XYZ 81 505.68 null] >> endobj 1704 0 obj << /D [2075 0 R /XYZ 81 469.616 null] >> endobj 1529 0 obj << /D [2075 0 R /XYZ 81 433.551 null] >> endobj 2003 0 obj << /D [2075 0 R /XYZ 81 411.035 null] >> endobj 1055 0 obj << /D [2075 0 R /XYZ 81 374.971 null] >> endobj 2074 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F46 35 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2157 0 obj << /Length 1593 /Filter /FlateDecode >> stream xZ]s8}ϯ1]T$ُƉ6Ll2(6@^iW|klH=ӗBs.X°ٙչ^ޟ"@p= B1CiȾ^|T-[~ueWSw@#Xت'r͠y#0pv{T,vz NSm&x#/!3㓉uP=Ӷ@ÄݯgSsXi3h9n'h1;N*6pAiXE[Z;Hhw$ s&J6[m\0Yf"~>#x!a%,ͳ A=5Ŋ>\ ,k LAlR' EvY`v#^|=${ V+U9)M}1"`#=; T[Ƅ *W, "!] my&x6[n޿SC!= jS2Ȏv ],"/"2ʒsݺrf|σKY/;ػ5Cy~:XxL(znd{@iX BqA T`̃/Q55nMNu4HӀ\ d΋4ƛEx!9ْ&R)EiB|TZ2c.NŦQ#{5y[nuLD,Ktr MH> endobj 2078 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [116.299 611.666 134.655 624.567] /Subtype /Link /A << /S /GoTo /D (page.129) >> >> endobj 2079 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [115.654 598.117 128.556 611.018] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 2080 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [114.836 584.567 127.738 597.469] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 2081 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [112.142 571.018 125.044 583.92] /Subtype /Link /A << /S /GoTo /D (page.53) >> >> endobj 2082 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [91.022 558.658 103.923 569.629] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 2083 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [91.022 545.109 103.923 556.08] /Subtype /Link /A << /S /GoTo /D (page.23) >> >> endobj 2084 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.385 545.109 120.287 556.08] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 2085 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [91.022 531.56 103.923 542.53] /Subtype /Link /A << /S /GoTo /D (page.23) >> >> endobj 2086 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [91.022 518.011 103.923 528.981] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 2087 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.385 518.011 120.287 528.981] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 2088 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.155 504.461 118.057 515.432] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 2089 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.519 504.461 134.42 515.432] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 2090 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.268 480.126 198.624 491.92] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 2091 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.086 480.126 220.442 491.92] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 2092 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [119.854 455.237 132.756 464.822] /Subtype /Link /A << /S /GoTo /D (page.15) >> >> endobj 2093 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [119.854 428.291 132.756 437.723] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 2094 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [125.309 399.654 143.665 410.625] /Subtype /Link /A << /S /GoTo /D (page.100) >> >> endobj 2095 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [119.854 373.942 138.21 383.527] /Subtype /Link /A << /S /GoTo /D (page.100) >> >> endobj 2096 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.04 359.007 198.396 369.977] /Subtype /Link /A << /S /GoTo /D (page.112) >> >> endobj 2097 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.349 345.458 146.25 356.428] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 2098 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.658 331.908 159.56 342.879] /Subtype /Link /A << /S /GoTo /D (page.92) >> >> endobj 2099 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [191.167 318.359 204.068 329.33] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 2100 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [157.785 304.81 170.687 315.781] /Subtype /Link /A << /S /GoTo /D (page.70) >> >> endobj 2101 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [218.985 291.119 237.341 302.231] /Subtype /Link /A << /S /GoTo /D (page.121) >> >> endobj 2102 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [124.403 277.712 142.76 288.682] /Subtype /Link /A << /S /GoTo /D (page.146) >> >> endobj 2103 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [157.785 264.162 170.687 275.133] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 2104 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [157.785 250.471 176.141 261.584] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 2105 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.04 236.922 192.941 248.035] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 2106 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [124.403 213.552 137.305 224.523] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 2107 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [191.167 200.003 204.068 210.974] /Subtype /Link /A << /S /GoTo /D (page.74) >> >> endobj 2108 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.912 186.312 181.814 197.272] /Subtype /Link /A << /S /GoTo /D (page.77) >> >> endobj 2109 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.349 172.763 176.25 183.875] /Subtype /Link /A << /S /GoTo /D (page.59) >> >> endobj 2110 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [207.858 159.355 226.214 170.326] /Subtype /Link /A << /S /GoTo /D (page.122) >> >> endobj 2111 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.752 145.806 158.653 156.777] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 2112 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [228.497 132.257 246.853 143.228] /Subtype /Link /A << /S /GoTo /D (page.130) >> >> endobj 2113 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [210.781 117.884 229.137 129.678] /Subtype /Link /A << /S /GoTo /D (page.130) >> >> endobj 2114 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [144.247 105.159 162.603 116.129] /Subtype /Link /A << /S /GoTo /D (page.128) >> >> endobj 2115 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [388.066 612.855 406.422 623.826] /Subtype /Link /A << /S /GoTo /D (page.128) >> >> endobj 2116 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [391.546 598.482 409.902 610.276] /Subtype /Link /A << /S /GoTo /D (page.127) >> >> endobj 2117 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [383.67 585.757 402.026 596.727] /Subtype /Link /A << /S /GoTo /D (page.127) >> >> endobj 2118 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [379.437 572.207 397.793 583.178] /Subtype /Link /A << /S /GoTo /D (page.128) >> >> endobj 2119 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [389.735 557.835 408.091 569.629] /Subtype /Link /A << /S /GoTo /D (page.126) >> >> endobj 2120 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [443.648 544.285 462.004 556.08] /Subtype /Link /A << /S /GoTo /D (page.127) >> >> endobj 2121 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [422.212 531.418 440.568 542.53] /Subtype /Link /A << /S /GoTo /D (page.132) >> >> endobj 2122 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [427.775 518.011 446.131 528.981] /Subtype /Link /A << /S /GoTo /D (page.131) >> >> endobj 2123 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [344.321 504.461 362.677 515.432] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 2124 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.448 490.912 373.805 501.883] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 2125 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [388.808 466.577 401.709 478.371] /Subtype /Link /A << /S /GoTo /D (page.29) >> >> endobj 2126 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [405.171 466.577 418.073 478.371] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 2127 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.448 453.851 368.35 464.822] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 2128 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [377.703 440.302 390.604 451.273] /Subtype /Link /A << /S /GoTo /D (page.69) >> >> endobj 2129 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [416.648 426.753 429.55 437.723] /Subtype /Link /A << /S /GoTo /D (page.69) >> >> endobj 2130 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.448 413.204 368.35 424.174] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 2131 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [377.703 399.654 390.604 410.625] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 2132 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [394.394 386.105 412.75 397.076] /Subtype /Link /A << /S /GoTo /D (page.154) >> >> endobj 2133 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [331.536 372.556 344.437 383.527] /Subtype /Link /A << /S /GoTo /D (page.28) >> >> endobj 2134 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [374.923 357.818 387.824 370.719] /Subtype /Link /A << /S /GoTo /D (page.28) >> >> endobj 2135 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.501 344.268 385.402 357.17] /Subtype /Link /A << /S /GoTo /D (page.29) >> >> endobj 2136 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.307 331.908 365.208 342.879] /Subtype /Link /A << /S /GoTo /D (page.92) >> >> endobj 2137 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [375.161 318.359 388.062 329.33] /Subtype /Link /A << /S /GoTo /D (page.70) >> >> endobj 2138 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [470.189 303.986 483.091 315.781] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 2139 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [384.837 291.261 397.739 302.231] /Subtype /Link /A << /S /GoTo /D (page.65) >> >> endobj 2140 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [409.59 276.888 422.491 288.682] /Subtype /Link /A << /S /GoTo /D (page.72) >> >> endobj 2141 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.877 263.339 375.779 275.133] /Subtype /Link /A << /S /GoTo /D (page.29) >> >> endobj 2142 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [375.892 249.79 388.794 261.584] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 2143 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [391.088 236.24 403.99 248.035] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 2144 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [389.407 223.515 402.309 234.485] /Subtype /Link /A << /S /GoTo /D (page.32) >> >> endobj 2145 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [387.586 209.966 400.487 220.936] /Subtype /Link /A << /S /GoTo /D (page.28) >> >> endobj 2146 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [381.891 196.417 394.793 207.387] /Subtype /Link /A << /S /GoTo /D (page.89) >> >> endobj 2147 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.15 182.867 370.052 193.838] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 2148 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.565 169.318 367.466 180.289] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 2149 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [380.626 155.769 393.528 166.739] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 2150 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [401.517 141.396 414.419 153.19] /Subtype /Link /A << /S /GoTo /D (page.77) >> >> endobj 2151 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [404.539 127.847 417.44 139.641] /Subtype /Link /A << /S /GoTo /D (page.78) >> >> endobj 2152 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [413.026 114.298 425.927 126.092] /Subtype /Link /A << /S /GoTo /D (page.70) >> >> endobj 2153 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [365.965 100.748 378.866 112.543] /Subtype /Link /A << /S /GoTo /D (page.67) >> >> endobj 2158 0 obj << /D [2156 0 R /XYZ 81 757.935 null] >> endobj 2159 0 obj << /D [2156 0 R /XYZ 147.8 666.546 null] >> endobj 2155 0 obj << /Font << /F29 17 0 R /F46 35 0 R /F15 750 0 R /F88 758 0 R /F31 18 0 R /F36 19 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2254 0 obj << /Length 1721 /Filter /FlateDecode >> stream xZMs6WhD A8&S[I:M{DH$TT_K PLP%zD1, |a麾C h,"k]IP~{; 7mh V/ue5PԵ]sjZ8&tC \t3 -#VqLI,G O"1Dő[1y,rF#]40}MlWY}1"ePhLf @_ iT2SQ*$O Olxx"?1R?Ķa.}e4dN_Ed6=;唑 %a*ǑδϷ^+0 f8H,ۨ=`.=pÓ1f3M3Dضe`G\?d<7%2c9Wh1AI`(֔Ig2gvd·vkBKZz ͚(EQDr2ptIŋ0<?a\=c:fߪ[Fb/lLxu\Eh~*|гdR{ªbBNpi3CRpQ)vT#^ Is3=oeTNs^LdA9H&#% TXE{Adm =GYqkG8]cqUcXYսRix̀aO~ |i)J:?<{f)%૒y vLU\2gSm4tOl:Iq =d'K`Y&p&b0!xveq. <Lw|:i@IE4PEo(]D$"=3_& 4R*rx5w!ti͹(&_& MEOBų{c]EEFvg}WW[+aQ^> endobj 2154 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.945 719.535 169.846 730.505] /Subtype /Link /A << /S /GoTo /D (page.65) >> >> endobj 2160 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.145 705.162 168.046 716.956] /Subtype /Link /A << /S /GoTo /D (page.69) >> >> endobj 2161 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.912 692.436 148.814 703.407] /Subtype /Link /A << /S /GoTo /D (page.28) >> >> endobj 2162 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [238.151 678.064 251.052 689.858] /Subtype /Link /A << /S /GoTo /D (page.35) >> >> endobj 2163 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [204.235 665.338 217.137 676.308] /Subtype /Link /A << /S /GoTo /D (page.67) >> >> endobj 2164 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.792 650.965 154.694 662.759] /Subtype /Link /A << /S /GoTo /D (page.34) >> >> endobj 2165 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [166.817 638.24 179.719 649.21] /Subtype /Link /A << /S /GoTo /D (page.70) >> >> endobj 2166 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.963 624.69 189.864 635.661] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 2167 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.679 611.141 162.581 622.112] /Subtype /Link /A << /S /GoTo /D (page.35) >> >> endobj 2168 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.163 596.768 191.064 608.562] /Subtype /Link /A << /S /GoTo /D (page.35) >> >> endobj 2169 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [161.974 583.219 174.876 595.013] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 2170 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.919 570.494 168.821 581.464] /Subtype /Link /A << /S /GoTo /D (page.71) >> >> endobj 2171 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.258 556.944 160.159 567.915] /Subtype /Link /A << /S /GoTo /D (page.33) >> >> endobj 2172 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.996 543.395 159.898 554.366] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 2173 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.505 529.846 144.407 540.816] /Subtype /Link /A << /S /GoTo /D (page.91) >> >> endobj 2174 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.01 516.297 175.912 527.267] /Subtype /Link /A << /S /GoTo /D (page.28) >> >> endobj 2175 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.658 502.606 165.014 513.718] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 2176 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [207.858 489.198 226.214 500.169] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 2177 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.912 475.507 181.814 486.62] /Subtype /Link /A << /S /GoTo /D (page.38) >> >> endobj 2178 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [218.985 462.1 237.341 473.07] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 2179 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [129.967 448.551 148.323 459.521] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 2180 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.512 435.002 164.414 445.972] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 2181 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.745 420.629 168.646 432.423] /Subtype /Link /A << /S /GoTo /D (page.32) >> >> endobj 2182 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [161.505 407.903 174.406 418.874] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 2183 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.745 393.53 168.646 405.325] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 2184 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.079 379.981 161.981 391.775] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 2185 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [196.73 367.114 215.087 378.226] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 2186 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [129.967 353.706 142.869 364.677] /Subtype /Link /A << /S /GoTo /D (page.20) >> >> endobj 2187 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.094 340.157 153.996 351.128] /Subtype /Link /A << /S /GoTo /D (page.21) >> >> endobj 2188 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [173.548 326.608 186.45 337.579] /Subtype /Link /A << /S /GoTo /D (page.23) >> >> endobj 2189 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.45 313.059 177.352 324.029] /Subtype /Link /A << /S /GoTo /D (page.23) >> >> endobj 2190 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [186.268 299.51 199.17 310.48] /Subtype /Link /A << /S /GoTo /D (page.23) >> >> endobj 2191 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [269.057 285.819 287.413 296.931] /Subtype /Link /A << /S /GoTo /D (page.155) >> >> endobj 2192 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [213.421 272.269 231.777 283.382] /Subtype /Link /A << /S /GoTo /D (page.157) >> >> endobj 2193 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.515 258.862 177.417 269.833] /Subtype /Link /A << /S /GoTo /D (page.66) >> >> endobj 2194 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.349 245.313 176.25 256.283] /Subtype /Link /A << /S /GoTo /D (page.65) >> >> endobj 2195 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.294 231.622 220.65 242.734] /Subtype /Link /A << /S /GoTo /D (page.117) >> >> endobj 2196 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.04 218.214 198.396 229.185] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 2197 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.04 204.665 198.396 215.636] /Subtype /Link /A << /S /GoTo /D (page.122) >> >> endobj 2198 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.603 191.116 203.959 202.087] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 2199 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [191.167 177.567 209.523 188.537] /Subtype /Link /A << /S /GoTo /D (page.116) >> >> endobj 2200 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.476 163.876 187.378 174.988] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 2201 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.349 150.469 181.705 161.439] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 2202 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.04 136.777 192.941 147.89] /Subtype /Link /A << /S /GoTo /D (page.72) >> >> endobj 2203 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.876 123.37 120.778 134.341] /Subtype /Link /A << /S /GoTo /D (page.23) >> >> endobj 2204 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.531 109.821 153.887 120.791] /Subtype /Link /A << /S /GoTo /D (page.116) >> >> endobj 2205 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.625 95.448 159.527 107.242] /Subtype /Link /A << /S /GoTo /D (page.53) >> >> endobj 2206 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [388.83 719.393 401.732 730.505] /Subtype /Link /A << /S /GoTo /D (page.53) >> >> endobj 2207 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [336.826 705.162 349.728 716.956] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 2208 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.139 692.295 385.041 703.407] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 2209 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [383.266 678.745 396.168 689.858] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 2210 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [399.957 665.196 418.313 676.308] /Subtype /Link /A << /S /GoTo /D (page.152) >> >> endobj 2211 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.139 641.684 385.041 652.797] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 2212 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [344.321 628.277 357.223 639.247] /Subtype /Link /A << /S /GoTo /D (page.56) >> >> endobj 2213 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.576 614.728 379.477 625.698] /Subtype /Link /A << /S /GoTo /D (page.57) >> >> endobj 2214 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [494.539 601.037 507.44 612.149] /Subtype /Link /A << /S /GoTo /D (page.51) >> >> endobj 2215 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [399.128 586.806 412.029 598.6] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 2216 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [339.848 573.257 352.75 585.051] /Subtype /Link /A << /S /GoTo /D (page.95) >> >> endobj 2217 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [466.721 560.389 485.077 571.501] /Subtype /Link /A << /S /GoTo /D (page.154) >> >> endobj 2218 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [416.648 546.84 435.004 557.952] /Subtype /Link /A << /S /GoTo /D (page.157) >> >> endobj 2219 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [472.284 533.291 490.64 544.403] /Subtype /Link /A << /S /GoTo /D (page.155) >> >> endobj 2220 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [385.164 519.06 403.52 530.854] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 2221 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.012 506.334 373.914 517.305] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 2222 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [405.521 492.785 423.877 503.755] /Subtype /Link /A << /S /GoTo /D (page.119) >> >> endobj 2223 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [383.266 479.236 401.623 490.206] /Subtype /Link /A << /S /GoTo /D (page.119) >> >> endobj 2224 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.885 465.545 362.786 476.657] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 2225 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [405.521 451.996 418.423 463.108] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 2226 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [346.688 438.588 359.59 449.559] /Subtype /Link /A << /S /GoTo /D (page.55) >> >> endobj 2227 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [399.957 425.039 412.859 436.009] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 2228 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [427.775 411.49 440.677 422.46] /Subtype /Link /A << /S /GoTo /D (page.55) >> >> endobj 2229 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [494.539 397.941 507.44 408.911] /Subtype /Link /A << /S /GoTo /D (page.15) >> >> endobj 2230 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [500.102 384.391 513.004 395.362] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 2231 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [388.83 370.842 401.732 381.813] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 2232 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [340.536 357.293 353.437 368.263] /Subtype /Link /A << /S /GoTo /D (page.94) >> >> endobj 2233 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [399.957 343.744 412.859 354.714] /Subtype /Link /A << /S /GoTo /D (page.95) >> >> endobj 2234 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [461.157 330.053 479.513 341.165] /Subtype /Link /A << /S /GoTo /D (page.101) >> >> endobj 2235 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [388.83 316.504 401.732 327.616] /Subtype /Link /A << /S /GoTo /D (page.95) >> >> endobj 2236 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.139 303.096 385.041 314.067] /Subtype /Link /A << /S /GoTo /D (page.96) >> >> endobj 2237 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [388.83 289.547 401.732 300.517] /Subtype /Link /A << /S /GoTo /D (page.96) >> >> endobj 2238 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.139 275.998 385.041 286.968] /Subtype /Link /A << /S /GoTo /D (page.96) >> >> endobj 2239 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [388.83 262.307 401.732 273.419] /Subtype /Link /A << /S /GoTo /D (page.96) >> >> endobj 2240 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [466.721 248.899 479.622 259.87] /Subtype /Link /A << /S /GoTo /D (page.98) >> >> endobj 2241 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [422.212 235.35 435.113 246.321] /Subtype /Link /A << /S /GoTo /D (page.95) >> >> endobj 2242 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [388.83 221.659 401.732 232.772] /Subtype /Link /A << /S /GoTo /D (page.96) >> >> endobj 2243 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [477.848 208.11 496.204 219.222] /Subtype /Link /A << /S /GoTo /D (page.158) >> >> endobj 2244 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [365.037 193.879 377.939 205.673] /Subtype /Link /A << /S /GoTo /D (page.35) >> >> endobj 2245 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.448 181.153 373.805 192.124] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 2246 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [377.703 157.642 390.604 168.612] /Subtype /Link /A << /S /GoTo /D (page.64) >> >> endobj 2247 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.979 143.269 379.881 155.063] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 2248 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [427.775 130.401 440.677 141.514] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 2249 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [411.085 116.852 423.986 127.964] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 2250 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [383.408 102.621 396.309 114.415] /Subtype /Link /A << /S /GoTo /D (page.38) >> >> endobj 2255 0 obj << /D [2253 0 R /XYZ 81 757.935 null] >> endobj 2252 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2349 0 obj << /Length 1865 /Filter /FlateDecode >> stream x[Ks8WpL6˖_ ,I&5dfS{F6Io 6A>X ٧16 k;r4ϴoX?|/?}H<+4, ynԙ^/5viZk[kd$eqtք3a<"yY F7_o?/ K?G vL^'iBV 6:7]ppY]CD/ |}s%ʹ;աbJ4AbNߢ k6V)n%ɒ/r-9{6|w@6eU k`^e|10һ!%ќίXDM>q>-%6`GIUވqC$DU5D0&R:A3JV\&h8j\muux!` .6YȧGҍ'o4 c9&ljI¢ .X 3g) F ZF-5x]Y^)duمr ;)J]̥ސgk Tv*ή)ؤټ9.\1ڧzL#I~>d9c,RXm֐S_[!K:v\cMmtaIyhĊUdimBaDXDĵ)5>rxՌ uf ܹ uddA͘ 9E#"ޒ탔j ]0t.FaEt $#2͏D(fkRCj2dW$3| [tNaH6Zd"z0C+}If/UI2)Ї[UVm; qlBMezIan/-E-$|{NѴsc⾃-߳h_Q9Gt@45=\cg!KNr=˷q h9^VTCVTm]c IXe 7 Ec2&P-i6Khzb@U1=!_ٿn-*] WiE-TM/&g ~JDa 8 [惥h1C"[+[ڞE> endobj 2251 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [213.421 719.535 231.777 730.505] /Subtype /Link /A << /S /GoTo /D (page.103) >> >> endobj 2256 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.548 705.986 242.905 716.956] /Subtype /Link /A << /S /GoTo /D (page.103) >> >> endobj 2257 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.349 692.436 176.25 703.407] /Subtype /Link /A << /S /GoTo /D (page.89) >> >> endobj 2258 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.618 678.887 118.52 689.858] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 2259 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.04 665.196 198.396 676.308] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 2260 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [252.367 651.647 270.723 662.759] /Subtype /Link /A << /S /GoTo /D (page.133) >> >> endobj 2261 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.349 638.098 181.705 649.21] /Subtype /Link /A << /S /GoTo /D (page.110) >> >> endobj 2262 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [213.421 624.549 226.323 635.508] /Subtype /Link /A << /S /GoTo /D (page.77) >> >> endobj 2263 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.222 611.141 170.578 622.112] /Subtype /Link /A << /S /GoTo /D (page.108) >> >> endobj 2264 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.294 597.592 220.65 608.562] /Subtype /Link /A << /S /GoTo /D (page.121) >> >> endobj 2265 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [213.421 584.043 226.323 595.013] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 2266 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [218.985 570.352 231.886 581.464] /Subtype /Link /A << /S /GoTo /D (page.78) >> >> endobj 2267 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [158.908 556.944 177.264 567.915] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 2268 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.04 534.221 192.941 545.333] /Subtype /Link /A << /S /GoTo /D (page.72) >> >> endobj 2269 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [129.967 520.813 142.869 531.784] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 2270 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [246.803 507.122 259.704 518.234] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 2271 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [257.93 493.573 270.832 504.685] /Subtype /Link /A << /S /GoTo /D (page.89) >> >> endobj 2272 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [157.785 471.133 170.687 482.103] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 2273 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [130.589 456.76 148.945 468.554] /Subtype /Link /A << /S /GoTo /D (page.141) >> >> endobj 2274 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [191.167 444.034 209.523 455.005] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 2275 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.548 430.485 237.45 441.456] /Subtype /Link /A << /S /GoTo /D (page.90) >> >> endobj 2276 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [230.112 416.936 243.014 427.907] /Subtype /Link /A << /S /GoTo /D (page.89) >> >> endobj 2277 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [263.494 403.387 276.395 414.357] /Subtype /Link /A << /S /GoTo /D (page.58) >> >> endobj 2278 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [269.057 389.838 281.959 400.808] /Subtype /Link /A << /S /GoTo /D (page.58) >> >> endobj 2279 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.548 376.288 237.45 387.259] /Subtype /Link /A << /S /GoTo /D (page.71) >> >> endobj 2280 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [257.93 362.597 276.286 373.71] /Subtype /Link /A << /S /GoTo /D (page.134) >> >> endobj 2281 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [257.93 349.048 276.286 360.161] /Subtype /Link /A << /S /GoTo /D (page.134) >> >> endobj 2282 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.079 334.817 191.981 346.611] /Subtype /Link /A << /S /GoTo /D (page.29) >> >> endobj 2283 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [195.443 334.817 208.344 346.611] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 2284 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.222 322.092 165.123 333.062] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 2285 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.476 308.542 187.378 319.513] /Subtype /Link /A << /S /GoTo /D (page.68) >> >> endobj 2286 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.222 294.993 165.123 305.964] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 2287 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.476 281.444 187.378 292.415] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 2288 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.094 267.895 153.996 278.865] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 2289 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.531 254.204 148.432 265.316] /Subtype /Link /A << /S /GoTo /D (page.71) >> >> endobj 2290 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.603 240.655 203.959 251.767] /Subtype /Link /A << /S /GoTo /D (page.103) >> >> endobj 2291 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.222 227.247 165.123 238.218] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 2292 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [124.403 213.556 142.76 224.669] /Subtype /Link /A << /S /GoTo /D (page.141) >> >> endobj 2293 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [192.617 199.325 205.519 211.119] /Subtype /Link /A << /S /GoTo /D (page.96) >> >> endobj 2294 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.094 186.458 153.996 197.57] /Subtype /Link /A << /S /GoTo /D (page.67) >> >> endobj 2295 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.374 173.05 167.73 184.021] /Subtype /Link /A << /S /GoTo /D (page.129) >> >> endobj 2296 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.222 159.501 170.578 170.472] /Subtype /Link /A << /S /GoTo /D (page.156) >> >> endobj 2297 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [162.105 136.919 175.006 147.89] /Subtype /Link /A << /S /GoTo /D (page.65) >> >> endobj 2298 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.468 136.919 196.824 147.89] /Subtype /Link /A << /S /GoTo /D (page.142) >> >> endobj 2299 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.222 123.37 165.123 134.341] /Subtype /Link /A << /S /GoTo /D (page.65) >> >> endobj 2300 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.658 109.821 165.014 120.791] /Subtype /Link /A << /S /GoTo /D (page.142) >> >> endobj 2301 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.694 95.448 172.595 107.242] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 2302 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.139 719.393 385.041 730.505] /Subtype /Link /A << /S /GoTo /D (page.70) >> >> endobj 2303 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [466.721 705.986 485.077 716.956] /Subtype /Link /A << /S /GoTo /D (page.145) >> >> endobj 2304 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [327.914 692.436 346.27 703.407] /Subtype /Link /A << /S /GoTo /D (page.120) >> >> endobj 2305 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [322.067 669.854 334.968 680.825] /Subtype /Link /A << /S /GoTo /D (page.32) >> >> endobj 2306 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [488.975 656.163 507.331 667.276] /Subtype /Link /A << /S /GoTo /D (page.132) >> >> endobj 2307 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [380.942 642.756 393.844 653.726] /Subtype /Link /A << /S /GoTo /D (page.32) >> >> endobj 2308 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [394.394 629.207 407.295 640.177] /Subtype /Link /A << /S /GoTo /D (page.32) >> >> endobj 2309 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [405.521 615.658 418.423 626.628] /Subtype /Link /A << /S /GoTo /D (page.55) >> >> endobj 2310 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [399.957 602.108 418.313 613.079] /Subtype /Link /A << /S /GoTo /D (page.120) >> >> endobj 2311 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [444.466 588.417 462.822 599.53] /Subtype /Link /A << /S /GoTo /D (page.151) >> >> endobj 2312 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [406.426 561.461 424.782 572.431] /Subtype /Link /A << /S /GoTo /D (page.100) >> >> endobj 2313 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [377.703 547.912 390.604 558.882] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 2314 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [411.085 534.362 423.986 545.333] /Subtype /Link /A << /S /GoTo /D (page.38) >> >> endobj 2315 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [433.251 519.99 446.153 531.784] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 2316 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [344.321 507.264 357.223 518.234] /Subtype /Link /A << /S /GoTo /D (page.33) >> >> endobj 2317 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.576 493.715 379.477 504.685] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 2318 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [433.339 480.024 451.695 491.136] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 2319 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [377.703 466.475 390.604 477.587] /Subtype /Link /A << /S /GoTo /D (page.33) >> >> endobj 2320 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [399.957 452.925 412.859 464.038] /Subtype /Link /A << /S /GoTo /D (page.35) >> >> endobj 2321 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [377.703 439.376 390.604 450.489] /Subtype /Link /A << /S /GoTo /D (page.38) >> >> endobj 2322 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.576 425.969 379.477 436.939] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 2323 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.448 412.42 368.35 423.39] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 2324 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [388.83 398.87 407.186 409.841] /Subtype /Link /A << /S /GoTo /D (page.129) >> >> endobj 2325 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [399.957 385.321 418.313 396.292] /Subtype /Link /A << /S /GoTo /D (page.144) >> >> endobj 2326 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [383.266 371.63 401.623 382.743] /Subtype /Link /A << /S /GoTo /D (page.146) >> >> endobj 2327 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [377.703 358.223 390.604 369.193] /Subtype /Link /A << /S /GoTo /D (page.33) >> >> endobj 2328 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.012 344.674 373.914 355.644] /Subtype /Link /A << /S /GoTo /D (page.34) >> >> endobj 2329 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [377.703 331.124 396.059 342.095] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 2330 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [383.266 317.575 396.168 328.546] /Subtype /Link /A << /S /GoTo /D (page.34) >> >> endobj 2331 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [409.305 303.202 422.207 314.997] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 2332 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [438.903 290.335 451.804 301.447] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 2333 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [388.83 276.928 401.732 287.898] /Subtype /Link /A << /S /GoTo /D (page.35) >> >> endobj 2334 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [422.212 263.237 435.113 274.349] /Subtype /Link /A << /S /GoTo /D (page.35) >> >> endobj 2335 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [399.957 249.687 412.859 260.8] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 2336 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.448 236.28 368.35 247.251] /Subtype /Link /A << /S /GoTo /D (page.33) >> >> endobj 2337 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.576 213.698 384.932 224.669] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 2338 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [383.266 200.149 401.623 211.119] /Subtype /Link /A << /S /GoTo /D (page.141) >> >> endobj 2339 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [365.168 176.743 383.524 188.537] /Subtype /Link /A << /S /GoTo /D (page.145) >> >> endobj 2340 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [338.823 164.018 357.179 174.988] /Subtype /Link /A << /S /GoTo /D (page.105) >> >> endobj 2341 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [410.942 149.645 423.843 161.439] /Subtype /Link /A << /S /GoTo /D (page.96) >> >> endobj 2342 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [399.957 136.777 412.859 147.89] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 2343 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [338.212 122.546 351.114 134.341] /Subtype /Link /A << /S /GoTo /D (page.28) >> >> endobj 2344 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [388.83 109.679 407.186 120.791] /Subtype /Link /A << /S /GoTo /D (page.113) >> >> endobj 2345 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.448 96.272 368.35 107.242] /Subtype /Link /A << /S /GoTo /D (page.68) >> >> endobj 2350 0 obj << /D [2348 0 R /XYZ 81 757.935 null] >> endobj 2347 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2441 0 obj << /Length 1859 /Filter /FlateDecode >> stream xZKs:WLfU.Z1Kfѹ J) W@+H Ȏnqt9i<q퇏gmxz64n 7x<ȸMGߎӱg}?O_MAs~5 }01s,kl|mGxf!( ' hHn4f  ϴʓ9}ƌaJOBz z n+h1#ݣf8IpeO}~ )mou cmX%O$4 3vxwG{a,wvgis 79;p49I1+Gx2,M|M_6$RQc)]Zfp &Qs ūkO•wY@`\F]]I(+ ](/(cT/?!^2\༌{pZ˅vk!XYRyHpyH-*L6ke4 A5n 6 dkwۺe9b$*)`^Z%R}RA]59(2!0QNP t6bօb^ lB}G5Zf&P2fr8gZ0#6IP]UQAAGV9iƜ@uאX9 o}.EI%ӆTXb8&KFv~iN-|eu|NAqւ'by2q,HcJS13?)C:k!3NIb) |=Ys Tx硥zֹFg^ZAsk.فꤷRsUҤ@ur`T*arTy6^hx蔃²yʱ-%+$:[60b/vr=K}7 ]Q1< endstream endobj 2440 0 obj << /Type /Page /Contents 2441 0 R /Resources 2439 0 R /MediaBox [0 0 595.276 841.89] /Parent 2443 0 R /Annots [ 2346 0 R 2351 0 R 2352 0 R 2353 0 R 2354 0 R 2355 0 R 2356 0 R 2357 0 R 2358 0 R 2359 0 R 2360 0 R 2361 0 R 2362 0 R 2363 0 R 2364 0 R 2365 0 R 2366 0 R 2367 0 R 2368 0 R 2369 0 R 2370 0 R 2371 0 R 2372 0 R 2373 0 R 2374 0 R 2375 0 R 2376 0 R 2377 0 R 2378 0 R 2379 0 R 2380 0 R 2381 0 R 2382 0 R 2383 0 R 2384 0 R 2385 0 R 2386 0 R 2387 0 R 2388 0 R 2389 0 R 2390 0 R 2391 0 R 2392 0 R 2393 0 R 2394 0 R 2395 0 R 2396 0 R 2397 0 R 2398 0 R 2399 0 R 2400 0 R 2401 0 R 2402 0 R 2403 0 R 2404 0 R 2405 0 R 2406 0 R 2407 0 R 2408 0 R 2409 0 R 2410 0 R 2411 0 R 2412 0 R 2413 0 R 2414 0 R 2415 0 R 2416 0 R 2417 0 R 2418 0 R 2419 0 R 2420 0 R 2421 0 R 2422 0 R 2423 0 R 2424 0 R 2425 0 R 2426 0 R 2427 0 R 2428 0 R 2429 0 R 2430 0 R 2431 0 R 2432 0 R 2433 0 R 2434 0 R 2435 0 R 2436 0 R 2437 0 R ] >> endobj 2346 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.621 719.535 146.523 730.505] /Subtype /Link /A << /S /GoTo /D (page.19) >> >> endobj 2351 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [119.854 693.822 138.21 703.407] /Subtype /Link /A << /S /GoTo /D (page.136) >> >> endobj 2352 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [269.057 678.745 287.413 689.858] /Subtype /Link /A << /S /GoTo /D (page.137) >> >> endobj 2353 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [269.057 665.196 287.413 676.308] /Subtype /Link /A << /S /GoTo /D (page.137) >> >> endobj 2354 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [269.057 651.647 287.413 662.759] /Subtype /Link /A << /S /GoTo /D (page.138) >> >> endobj 2355 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [119.854 626.076 138.21 635.661] /Subtype /Link /A << /S /GoTo /D (page.135) >> >> endobj 2356 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [257.93 610.999 276.286 622.112] /Subtype /Link /A << /S /GoTo /D (page.135) >> >> endobj 2357 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [257.93 597.45 276.286 608.562] /Subtype /Link /A << /S /GoTo /D (page.136) >> >> endobj 2358 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [230.112 584.043 248.468 595.013] /Subtype /Link /A << /S /GoTo /D (page.130) >> >> endobj 2359 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.548 570.494 242.905 581.464] /Subtype /Link /A << /S /GoTo /D (page.130) >> >> endobj 2360 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [213.421 556.803 231.777 567.915] /Subtype /Link /A << /S /GoTo /D (page.130) >> >> endobj 2361 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [189.551 534.362 207.907 545.333] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 2362 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [246.803 520.671 265.159 531.784] /Subtype /Link /A << /S /GoTo /D (page.151) >> >> endobj 2363 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [169.818 493.573 188.174 504.685] /Subtype /Link /A << /S /GoTo /D (page.102) >> >> endobj 2364 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [186.508 466.475 204.865 477.587] /Subtype /Link /A << /S /GoTo /D (page.154) >> >> endobj 2365 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [212.1 452.244 230.456 464.038] /Subtype /Link /A << /S /GoTo /D (page.127) >> >> endobj 2366 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [109.098 439.518 122 450.489] /Subtype /Link /A << /S /GoTo /D (page.35) >> >> endobj 2367 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [125.462 439.518 138.363 450.489] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 2368 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [166.37 425.969 179.271 436.939] /Subtype /Link /A << /S /GoTo /D (page.28) >> >> endobj 2369 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.912 412.42 181.814 423.39] /Subtype /Link /A << /S /GoTo /D (page.46) >> >> endobj 2370 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [191.167 398.87 204.068 409.841] /Subtype /Link /A << /S /GoTo /D (page.47) >> >> endobj 2371 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.294 385.321 215.196 396.292] /Subtype /Link /A << /S /GoTo /D (page.51) >> >> endobj 2372 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [157.785 371.63 170.687 382.743] /Subtype /Link /A << /S /GoTo /D (page.48) >> >> endobj 2373 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.603 358.081 198.505 369.193] /Subtype /Link /A << /S /GoTo /D (page.54) >> >> endobj 2374 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [207.858 344.674 226.214 355.644] /Subtype /Link /A << /S /GoTo /D (page.100) >> >> endobj 2375 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.713 331.124 126.069 342.095] /Subtype /Link /A << /S /GoTo /D (page.145) >> >> endobj 2376 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [129.967 317.575 142.869 328.546] /Subtype /Link /A << /S /GoTo /D (page.66) >> >> endobj 2377 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.476 304.026 192.832 314.997] /Subtype /Link /A << /S /GoTo /D (page.153) >> >> endobj 2378 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.603 290.335 203.959 301.447] /Subtype /Link /A << /S /GoTo /D (page.153) >> >> endobj 2379 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [235.446 276.104 253.802 287.898] /Subtype /Link /A << /S /GoTo /D (page.145) >> >> endobj 2380 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [230.112 254.204 243.014 265.316] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 2381 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [246.803 240.655 259.704 251.767] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 2382 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.294 227.247 215.196 238.218] /Subtype /Link /A << /S /GoTo /D (page.67) >> >> endobj 2383 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.196 213.698 169.552 224.669] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 2384 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.687 200.149 158.043 211.119] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 2385 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [108.28 186.6 121.181 197.57] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 2386 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [124.643 186.6 137.545 197.57] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 2387 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [157.785 172.909 170.687 184.021] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 2388 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [129.967 159.501 142.869 170.472] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 2389 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [129.967 145.952 142.869 156.923] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 2390 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.349 123.37 181.705 134.341] /Subtype /Link /A << /S /GoTo /D (page.104) >> >> endobj 2391 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.349 109.679 176.25 120.791] /Subtype /Link /A << /S /GoTo /D (page.74) >> >> endobj 2392 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [172.719 95.448 185.621 107.242] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 2393 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [405.521 719.535 418.423 730.505] /Subtype /Link /A << /S /GoTo /D (page.56) >> >> endobj 2394 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [365.004 695.199 383.361 706.993] /Subtype /Link /A << /S /GoTo /D (page.108) >> >> endobj 2395 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [395.768 681.65 408.669 693.444] /Subtype /Link /A << /S /GoTo /D (page.28) >> >> endobj 2396 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [341.223 668.101 359.579 679.895] /Subtype /Link /A << /S /GoTo /D (page.127) >> >> endobj 2397 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [364.546 654.552 382.902 666.346] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 2398 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [438.858 641.002 451.76 652.797] /Subtype /Link /A << /S /GoTo /D (page.38) >> >> endobj 2399 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [458.211 627.453 471.112 639.247] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 2400 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [466.721 614.586 479.622 625.698] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 2401 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [405.521 601.179 418.423 612.149] /Subtype /Link /A << /S /GoTo /D (page.62) >> >> endobj 2402 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [416.648 587.629 429.55 598.6] /Subtype /Link /A << /S /GoTo /D (page.63) >> >> endobj 2403 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [377.703 574.08 396.059 585.051] /Subtype /Link /A << /S /GoTo /D (page.110) >> >> endobj 2404 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [377.703 560.531 396.059 571.501] /Subtype /Link /A << /S /GoTo /D (page.144) >> >> endobj 2405 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [427.775 546.982 446.131 557.952] /Subtype /Link /A << /S /GoTo /D (page.118) >> >> endobj 2406 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [333.368 532.609 346.27 544.403] /Subtype /Link /A << /S /GoTo /D (page.92) >> >> endobj 2407 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [377.703 519.742 390.604 530.854] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 2408 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [387.771 505.511 400.673 517.305] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 2409 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [433.339 492.643 451.695 503.755] /Subtype /Link /A << /S /GoTo /D (page.151) >> >> endobj 2410 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [411.085 479.094 429.441 490.206] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 2411 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [338.758 465.687 351.659 476.657] /Subtype /Link /A << /S /GoTo /D (page.42) >> >> endobj 2412 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [383.266 452.137 401.623 463.108] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 2413 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [394.394 438.588 412.75 449.559] /Subtype /Link /A << /S /GoTo /D (page.143) >> >> endobj 2414 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [416.648 414.935 435.004 426.047] /Subtype /Link /A << /S /GoTo /D (page.106) >> >> endobj 2415 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.885 401.527 362.786 412.498] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 2416 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.012 387.978 373.914 398.948] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 2417 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [344.321 374.429 357.223 385.399] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 2418 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [394.394 360.738 407.295 371.85] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 2419 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.576 337.368 379.477 348.338] /Subtype /Link /A << /S /GoTo /D (page.67) >> >> endobj 2420 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [399.957 323.819 412.859 334.789] /Subtype /Link /A << /S /GoTo /D (page.73) >> >> endobj 2421 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [450.03 310.128 462.931 321.24] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 2422 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [406.982 295.896 425.338 307.691] /Subtype /Link /A << /S /GoTo /D (page.152) >> >> endobj 2423 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [422.212 283.029 440.568 294.141] /Subtype /Link /A << /S /GoTo /D (page.152) >> >> endobj 2424 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.576 269.48 379.477 280.592] /Subtype /Link /A << /S /GoTo /D (page.46) >> >> endobj 2425 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [388.83 256.073 401.732 267.043] /Subtype /Link /A << /S /GoTo /D (page.70) >> >> endobj 2426 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [394.394 242.523 407.295 253.494] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 2427 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [416.648 228.974 435.004 239.945] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 2428 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [388.83 215.283 401.732 226.395] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 2429 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.139 201.876 390.495 212.846] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 2430 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [488.975 188.185 501.877 199.297] /Subtype /Link /A << /S /GoTo /D (page.98) >> >> endobj 2431 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [444.466 174.636 457.368 185.748] /Subtype /Link /A << /S /GoTo /D (page.99) >> >> endobj 2432 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.012 161.228 373.914 172.199] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 2433 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.139 147.679 385.041 158.649] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 2434 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.576 134.13 384.932 145.1] /Subtype /Link /A << /S /GoTo /D (page.154) >> >> endobj 2435 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [420.607 109.794 433.509 121.588] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 2436 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.11 97.069 362.011 108.039] /Subtype /Link /A << /S /GoTo /D (page.89) >> >> endobj 2437 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [365.473 97.069 383.83 108.039] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 2442 0 obj << /D [2440 0 R /XYZ 81 757.935 null] >> endobj 2439 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2499 0 obj << /Length 1175 /Filter /FlateDecode >> stream xYMo:Wd 8Yv:QG K\ 14& uD|Nν>z3z7__x N7~p㌃0oyz7} {}{~/C{ aq'f]wsp XBy) ?d<&V"@lh/AHG<̫ޮkh 7@0#_Wib5Q*hL'c]vjJ#t$q N!++cY@1IuZCbV(#S`F@Y[]< GeN^m0U˴LE@.+l]*ܑ_EWѸ8B77{X{7- 7w? j]@Z"TB).$!eR6K}ɖ-S~%cdBzTlU >>qNU"ġЍjY[*;r.} 1^~|8F щX=Qu$^19o8!Pr&6rH܍w-zN*=hwK3ՌevUavjf9͵KyɃ:GX1<>4_RE6j5MYD|[xI&L^ϚGcK=؂O,6~@@P$C/#PUICI3*^+i޲NbQ[QmRULUf1rupk-XE6{]0?~=WVX2Nzߵ܅HKWb5Ktwhpoh=y}dҲ-[}1&ḡ fvP4g2Ԫ^倅 .7 ZD-6ix*+ll=e5(2Die²]}`d oy1aji+XQ6 tѣ^> endobj 2438 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.112 718.711 165.014 730.505] /Subtype /Link /A << /S /GoTo /D (page.35) >> >> endobj 2444 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.04 705.844 192.941 716.956] /Subtype /Link /A << /S /GoTo /D (page.54) >> >> endobj 2445 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [157.785 692.436 176.141 703.407] /Subtype /Link /A << /S /GoTo /D (page.112) >> >> endobj 2446 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.923 678.064 148.825 689.858] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 2447 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.713 665.338 120.614 676.308] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 2448 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [102.421 651.789 115.323 662.759] /Subtype /Link /A << /S /GoTo /D (page.28) >> >> endobj 2449 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.04 638.098 198.396 649.21] /Subtype /Link /A << /S /GoTo /D (page.156) >> >> endobj 2450 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [157.785 624.549 176.141 635.661] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 2451 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.349 611.141 176.25 622.112] /Subtype /Link /A << /S /GoTo /D (page.72) >> >> endobj 2452 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.352 597.592 164.708 608.562] /Subtype /Link /A << /S /GoTo /D (page.143) >> >> endobj 2453 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [157.785 583.901 170.687 595.013] /Subtype /Link /A << /S /GoTo /D (page.62) >> >> endobj 2454 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.476 570.494 192.832 581.464] /Subtype /Link /A << /S /GoTo /D (page.117) >> >> endobj 2455 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.607 556.121 138.963 567.915] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 2456 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [118.84 543.253 131.741 554.366] /Subtype /Link /A << /S /GoTo /D (page.42) >> >> endobj 2457 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [124.403 529.846 142.76 540.816] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 2458 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [124.403 516.155 137.305 527.267] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 2459 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [118.185 501.924 131.087 513.718] /Subtype /Link /A << /S /GoTo /D (page.94) >> >> endobj 2460 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.222 489.057 170.578 500.169] /Subtype /Link /A << /S /GoTo /D (page.141) >> >> endobj 2461 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [129.967 475.507 142.869 486.62] /Subtype /Link /A << /S /GoTo /D (page.61) >> >> endobj 2462 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.417 461.276 165.319 473.07] /Subtype /Link /A << /S /GoTo /D (page.62) >> >> endobj 2463 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [157.785 448.409 170.687 459.521] /Subtype /Link /A << /S /GoTo /D (page.62) >> >> endobj 2464 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.476 425.827 187.378 436.939] /Subtype /Link /A << /S /GoTo /D (page.78) >> >> endobj 2465 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.094 412.42 153.996 423.39] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 2466 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.531 398.87 148.432 409.841] /Subtype /Link /A << /S /GoTo /D (page.91) >> >> endobj 2467 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.658 385.321 159.56 396.292] /Subtype /Link /A << /S /GoTo /D (page.91) >> >> endobj 2468 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.531 371.772 153.887 382.743] /Subtype /Link /A << /S /GoTo /D (page.116) >> >> endobj 2469 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.658 358.081 159.56 369.193] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 2470 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [157.785 344.674 170.687 355.644] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 2471 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.531 322.092 153.887 333.062] /Subtype /Link /A << /S /GoTo /D (page.120) >> >> endobj 2472 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.094 308.401 159.45 319.513] /Subtype /Link /A << /S /GoTo /D (page.129) >> >> endobj 2473 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [274.621 294.851 292.977 305.964] /Subtype /Link /A << /S /GoTo /D (page.140) >> >> endobj 2474 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [263.494 281.302 281.85 292.415] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 2475 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [119.854 255.644 138.21 265.316] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 2476 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [274.621 240.655 292.977 251.767] /Subtype /Link /A << /S /GoTo /D (page.138) >> >> endobj 2477 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [263.494 227.105 281.85 238.218] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 2478 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.912 213.556 187.269 224.669] /Subtype /Link /A << /S /GoTo /D (page.128) >> >> endobj 2479 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.603 200.007 203.959 211.119] /Subtype /Link /A << /S /GoTo /D (page.129) >> >> endobj 2480 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.04 186.458 198.396 197.57] /Subtype /Link /A << /S /GoTo /D (page.127) >> >> endobj 2481 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.04 172.909 198.396 184.021] /Subtype /Link /A << /S /GoTo /D (page.127) >> >> endobj 2482 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.548 159.359 242.905 170.472] /Subtype /Link /A << /S /GoTo /D (page.131) >> >> endobj 2483 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.04 145.81 198.396 156.923] /Subtype /Link /A << /S /GoTo /D (page.128) >> >> endobj 2484 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [191.167 132.261 209.523 143.373] /Subtype /Link /A << /S /GoTo /D (page.127) >> >> endobj 2485 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [124.403 118.854 142.76 129.824] /Subtype /Link /A << /S /GoTo /D (page.119) >> >> endobj 2486 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.349 96.272 181.705 107.242] /Subtype /Link /A << /S /GoTo /D (page.142) >> >> endobj 2487 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [388.83 719.535 401.732 730.505] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 2488 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [455.593 705.986 473.95 716.956] /Subtype /Link /A << /S /GoTo /D (page.144) >> >> endobj 2489 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [445.469 681.65 463.825 693.444] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 2490 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [388.83 668.783 401.732 679.895] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 2491 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [411.085 655.234 423.986 666.346] /Subtype /Link /A << /S /GoTo /D (page.54) >> >> endobj 2492 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [394.394 641.684 412.75 652.797] /Subtype /Link /A << /S /GoTo /D (page.153) >> >> endobj 2493 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [377.703 628.135 390.604 639.247] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 2494 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [388.83 614.586 401.732 625.698] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 2495 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.576 601.037 379.477 612.149] /Subtype /Link /A << /S /GoTo /D (page.46) >> >> endobj 2496 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.885 577.525 368.241 588.637] /Subtype /Link /A << /S /GoTo /D (page.156) >> >> endobj 2500 0 obj << /D [2498 0 R /XYZ 81 757.935 null] >> endobj 2497 0 obj << /Font << /F43 30 0 R /F31 18 0 R /F36 19 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2501 0 obj [458.3 458.3 416.7 416.7 472.2 472.2 472.2 472.2 583.3 583.3 472.2 472.2 333.3 555.6 577.8 577.8 597.2 597.2 736.1 736.1 527.8 527.8 583.3 583.3 583.3 583.3 750 750 750 750 1044.4 1044.4 791.7 791.7 583.3 583.3 638.9 638.9 638.9 638.9 805.6 805.6] endobj 2502 0 obj [1142] endobj 2503 0 obj [795 611 333 863 333 658 500 500 631 549 549 494 439 521 411 603 329 603 549 549 576 521 549 549 521 549 603 439 576 713 686 493 686 494 480 200 480 549 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 620 247 549 167 713 500 753 753 753 753 1042 987 603 987 603 400 549 411 549 549 713 494 460 549 549 549 549 1000 603 1000 658 823 686 795 987 768 768 823 768 768 713 713 713 713 713 713 713 768 713 790 790 890 823 549 250 713 603 603 1042 987 603 987 603 494 329 790 790 786 713] endobj 2504 0 obj [611.1 777.8 722.2 555.6 666.7 722.2 722.2 1000 722.2 722.2 666.7] endobj 2505 0 obj [277.8 277.8 777.8 500 777.8 500 530.9 750 758.5 714.7 827.9 738.2 643.1 786.2 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7] endobj 2506 0 obj [388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8] endobj 2508 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 2509 0 obj [666.7] endobj 2510 0 obj [500 500 167 333 556 278 333 333 0 333 675 0 556 389 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 214 250 333 420 500 500 833 778 333 333 333 500 675 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 675 675 675 500 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389 400 275 400 541 0 0 0 333 500 556 889 500 500 333 1000 500 333 944 0 0 0 0 0 0 556 556 350 500 889 333 980 389 333 667 0 0 556 0 389 500 500 500 500 275 500 333 760 276 500 675 333 760 333 400 675 300 300 333 500] endobj 2511 0 obj [777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500] endobj 2512 0 obj [667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 222 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556] endobj 2513 0 obj [667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667] endobj 2514 0 obj [510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 510 0 0 0 510 510 510 510 510 510 510 510 510 510 510 0 0 0 0 0 0 510 510 510 510 510 510] endobj 2515 0 obj [556 556 167 333 611 278 333 333 0 333 564 0 611 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 180 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 0 0 0 333 500 444 1000 500 500 333 1000 556 333 889 0 0 0 0 0 0 444 444 350 500 1000 333 980 389 333 722 0 0 722 0 333 500 500 500 500 200 500 333] endobj 2516 0 obj [556 556 167 333 667 278 333 333 0 333 570 0 667 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 278 250 333 555 500 500 1000 833 333 333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500 500 444 394 220 394 520 0 0 0 333 500 500 1000 500 500 333 1000 556 333 1000 0 0 0 0 0 0 500 500] endobj 2517 0 obj [722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667] endobj 2518 0 obj << /Length1 966 /Length2 2393 /Length3 0 /Length 3003 /Filter /FlateDecode >> stream xڭy<YFYR<$K%b13,33%KQR"d%M!DP2H]H,z>|?>rV' 0d7N&Q`0mฅ=L)@S@@&6R| VUV?=( (?Q xE,PTc E QOx=vz3'0V!yr2c!paE Ê4 @ a@g)*TV 2%)P7 A,ՐmMz_Dl&u D†qj6,( HwvW/|Gݑ!?H%YIU04u u@SS5J5 V3XA4։< fQMGO@VԽ~{rKqrq.m#R~+ja^ )k##Zo!bAܤ嫁kOӿ4MܲR0:5/{yXJ<}@Waz4OZ"=v.w39YW?li][ٱO2{Ȳ0k% 21{o3o'Ϊ:D>thJt$7nŨKA*yՂk5K=Jh : *4Ϩ0Gʦ#͹ ݘ52AT"HHZa,2I2XLO41y{lcDcoxPY!z;v)B]Ƹ X̉Ĩ}&67wTW22"|{bN✞F~ r뼗렸+t ei ޘKFOV)SKj.U(bvWbĪ%_L1F4w|YK tGGV2&bzoZ'YЦC2a_ҁ=)w nBbE9ImĐA "ϊl0!GÓb.}0T5:NM\"gɋ0J9'164`vӏ~A'zw1`sIGkyw8J"сz)//I|FԬ:4'"|6mTUm̒H$o|CXE'ҿvb^z`oy{A\bRu]uַV&w>?Qy T>L[[l@w/G=5U+%(rYq vԳK4xB~=$F,D(j=p|4+;%p6'n/^!XŜʎ݊q *REtO>]WuQJQ4˴D gFNȬ r`Z/>^/exLm+d,a#wkwc˩校ʹY+KL)JyAB̙P)dȐ c(:%X][E[h.71Fxk9t#㣫| .͞ Gt9gpX&)*r(t|nVgYUeIy]o }oM;;bntKQy-hrT/X& hqSNz&"vyRYYYL٣$ܑ4ɝJ@aۮ)ρo lp_ɶ g64aRKIj_ &XFt s]3lJ/"s#j (s%'F<7;hYP J_^ޮ9;.V%<-I}o~VɽKЇ 3bva!bs3NJ>5W-;6q82$/"S%KՠpBY-.FCO'HxmŒ>؊e5{ W[_uݩaÖ3bC~ĭmߚTJ}0iJ[ۇpwZ-E*{$5K\qГi!^ɹ٦0~zh"86vHE#w<ܲ)L2Af9ȩIהC@èNXV)I f-Oԡ9 ?Βj6w)~$ȅn$\x]*clt?/$ҝG9=_&=K /lw~=NYIpfgr΢B3 ]zvMέd F5OeS_h44jaxJ&ioV{ L٧ (;cBվ|K9kҙR)݂^'/N]qKxڏԷ't]Ai7X)H.*+6qWF߭z~NRNƝ tLk"RQm-kJ}1voj!#O 4i^yڧĽuV _ - ?ޤ׭F6X*)Є)\D?.I˫ ¹7}5^:{Gz(.Qo[s.3;R) M:@ߑq= M0#+īqV㉿yՖ"Yn+}Kߺ;?k7+zzrkzOR<ǹ7/C$G1!;ivr5{9q5KH@"-|*>1u endstream endobj 2519 0 obj << /Type /FontDescriptor /FontName /DFYHMQ+CMEX10 /Flags 4 /FontBBox [-24 -2960 1454 772] /Ascent 40 /CapHeight 0 /Descent -600 /ItalicAngle 0 /StemV 47 /XHeight 431 /CharSet (/braceleftBigg/braceleftbigg/bracerightBigg/ceilingleftbigg/ceilingrightbigg/parenleftbig/parenleftbigg/parenrightbig/parenrightbigg) /FontFile 2518 0 R >> endobj 2520 0 obj << /Length1 846 /Length2 1613 /Length3 0 /Length 2190 /Filter /FlateDecode >> stream xڭR{8VVn7{f0FD$c1f̐{*MI:h*ڢ!E.'9II SуȽv[zZ󮅄mh@Ё `G"9qH;H094D"  q<&#H١I& 1 QA [҃Jad 1 /WwBA4&U &.kr+L ~K~#?OCKϺ;N~4?_y”ʢX5cE~)"C{uޙ]duZ^B@J.t&}X E ׷:Ns9YL-dY켢 ,W˶NU.yj`o<"0rZfr]3KcH{ѦBèf'>s+.yިYM|I6d6N}1>Lm6񢁿oW@Gݼ*2+Tn[hh%ZÒGD)i_3#d~1$ͳb41$̈ǶH5΢𧦢&4(}kDBbGtvԝIҳxu=SPɮs0<zET9`lXlw|%6#?{\!J;bhP$sY)a]kY~Yk7}%G$NX;UEHj[ COrir3XM< @P慍o.#gs S9kNOixG2;NYuΙ~6p4ۆ$:iɗΗOdwT}8_EvWkҼru3};j*jK[4K,i,Ǽ<8A"Tr{-*~kk {ξy_[t«C&hm%OAE1cȶ½^tQļjNݒ-%gI:%FH+ozOL6M ^O*i6BxA-30ŷ[Q&b1: aW'FGKBݖ"ڂF?<_E?wq Lr̢PAk_Rj~E'0CG(]c\})d;!Yo v*۞_=b'Eȃ% utfo N?/u.oQ=k)UvLKtamjXX uC˃7zrz0!1LvI!^_oҁnx,rw> endobj 2522 0 obj << /Length1 856 /Length2 1569 /Length3 0 /Length 2145 /Filter /FlateDecode >> stream xڭRy'ۣG[&=JI,fQԊ_Dbw_E'T&[[{#eTlcJ8WRד(OQ3i?7:tk:s@ &ꃩÏf}ȽEA핒A F>_Qv5: k3-7ۏwRr$|T?k5oSWiӪ3ump> endobj 2524 0 obj << /Length1 1445 /Length2 4309 /Length3 0 /Length 5175 /Filter /FlateDecode >> stream xڭTw<5W.\D{o}.WWfGF.I) WYY￿y%*disZ q1Y*H"ы`Xօ AArʪr oБ BX 2x( x Y ~d @.K;@Ӄ;2B{b@pT 'ILJH42<R.ԟ8$.JPd?/.0p3<93d`H NCr }["-:DD [%9đ߳'<dž1g_J Lp Lhq͡!,Q̵ ,L&tp28ʆ7u66!)B gPdlӡQ}F΍i^էؙ-.\SaW0 );Ru0g+%T9B4/YɄ~c?Ie|VR |3uvngޕBSr0r<|)}5`~M9XB:zw[&hfayIE&(LĆ\8j (iV;B0IGHUYyO tSH8n ^w_q8~JNeӁЕNbgʉi#\fqF`Y~I-eօ҅MQ:%ϚG'EWm4ۖ<(?}wqݑ*7++9:'^'r'8p#pW$O HңũsXR%m C?|}ܺ/%rgRƄf|;sˑh\ȄuaK>t۝ĸkўTqKF!ˋl>ܘgqk&&HZ>^ }ΧpC.gZQ4.4xX |pM9ѱzJIϭ>҆>U{wINcyZ4:j*DH}LFQK5"cs1}B.qtJ~NǙ.ѯ#ni&} 皘}m-scC5%Vwۢ="F}^#S%XL,dIHgEQQ$ׇ,a{_ Z:nT6MZѧXy0(3%FAW}eKu1uXWw7f1:wdcNVC97;_YokS.[Yb'?Q䊅G{M u ;<;oazFaиCT0|Oس0h0v r"6_0ɧPglMfn>uM 1pg[.unmzU`y[kynӍr;wTJv=F}yT>˶&"Px\=ʺF GN5N&Z;9Ћ'(ދ&gJ961V= ꬟Zl] 5>8bjgxn?Cw3GS~|dݓwd"o4g߀Sơhz"d;f潞oi N_IUng >~D''r–>)0]8Nh29Q)ͼ]8N8UuTnASV9M?W(|l'.NkMG1/@WmF|k%9،SDA##ޛ5{đ<=ÕwVr}H,Y 6⨜.'\ܟRJ'!.5f![z-в{G 9G9E68$;]s!,z<36ղ{mlӊsIDp:N2('*iqvh\,,mK)&q#rֺ K4I,0ML{5tWxe6r,I[Q jW3Bl&-9^! I͚BMXD<푠cO 'ސh0$Ruȧv׽cDPnfI{Ö}(8Q9ރj#ƟE:u n&4)Z\Ak ?Wzot-ZD)Ecmbwi<βLKbʪ+Hw5w_/VbIbLP:"jj,K/Y.搲DmYIԅK]gnآ3XA7R{RF'E֠ũ2%[b rGdjBX;29Ku Yh} gl$|ֿ5I:_?֬09>nHw &|0lQ|x׆wJ3Zإ]m>% 9f^''q_9Tֹ*qIDe"[T7.H߾}DR#4h@ӱ#gɟ\(SO7x\TG hL2d`a &7^o3/ZGOC>v~v9k wDASd0enܳj(%K?ڳʌeFc6,Q/|bvvHrK~ĮV 2K=?ѠVYt<[3$N\Q3o˵&\%d,6`jE{u%OJ4B76̧miS DN\׺T}'~9pJo&OT|!ä6Ŵܔ21}EA!A)/ݿ4(h3pW?jx~}5Fi2VydZmyţ0|Ivce;pe]ŗPs* wط=>y-l8HREN .4_k3K2Xv6LtN~4;ΰr{6oS7$BB3h]lnKG^uKQLVm\{ D&XD|fBGLMlgJC]/ߎ׌vojꪰ_9iNc}}bIE^<1ei'0UYz9_0f+ ޔOle}@ͨQU7z5ø7}͢y+wϪk+SԮ.~Dވ{Pwv{3.rlB9ј=- '2+i!Eru\z"Ag΂F-GI:v>~zTye{V-нc53S`q2 ø\Oo8"Xt 49kٛx܎1MzGi(.aR<\Jw7>>Sh-&g T:+ +i9d  |p8x!DJ3ZA5lW[HPIagNonH+hL>0+tH7+3v UR&UPo|FIm.:MxXG.;P93 endstream endobj 2525 0 obj << /Type /FontDescriptor /FontName /EHXWKP+CMSY10 /Flags 4 /FontBBox [-29 -960 1116 775] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 85 /XHeight 431 /CharSet (/angbracketleft/angbracketright/arrowdblright/arrowright/asteriskmath/backslash/bar/bardbl/braceleft/braceright/bullet/ceilingleft/ceilingright/circlecopyrt/circleplus/element/equivalence/floorleft/floorright/greaterequal/intersection/lessequal/mapsto/minus/multiply/negationslash/openbullet/periodcentered/prime/propersubset/reflexsubset) /FontFile 2524 0 R >> endobj 2526 0 obj << /Length1 764 /Length2 885 /Length3 0 /Length 1437 /Filter /FlateDecode >> stream xeRyTg (U b`L`hrE[X ,.тē *'G9UPRkP. b(H7ofof,EXRRHbm 7Pa pP $рl WچbpBBJBR0@F :#JE` X) ܂Aو!/XizFRš,K :>z!gQb:A2!/Q%H(T]%Q 09>MCiFB 2"RS8IA>|q4 @g+p%p Xo4̂ަCB P,% YrzFD^~"wEb|uULwJQD'"+JJq"p< nrA,|%JZ-ARt FD.FC % rq! Gc6|}ds'3c8]et ѵI;M.)k-VGs MTFڧN+`M8!?M2SweYioݳȗ*EgKq:}Z%=~y_oǡnUpu恄G9dؕ2>9gK푄 FZ1_^)Fىʂk4ʹϹ֒ZӪء=⯊. zm>:fo7,{^}6J%`b^71+29(7h/yy=KGnMa4,c%M">we-rմxBBXxҹkƽϏ\\3Rr%}SqKO7v~f>%dٕ:{W<(OV^T29/1.8;.v)b^V<iԝ/_piEݏY&.f)Snj(]8LhS0Oh]6Drh>q-K“V}92ܲy\\'T׃u\ Öo5[ɴ{{x ~~ :fsxu3`ؔvPpQْvE&JS$6p-7qÎbFLZMbxI,<%)9𘤿n-By15}TJʂI,9+Egz̈3Qs}8 ةmz5d̵Y OPM/ppmc0Hk~O? rel #Zo V}ߩ3?)f֍]:Wsϙ1 IΝ,gvu;X}iw8L_? endstream endobj 2527 0 obj << /Type /FontDescriptor /FontName /ZPNLVP+TeX-cmex9 /Flags 4 /FontBBox [-26 -2961 1503 773] /Ascent 42 /CapHeight 0 /Descent -600 /ItalicAngle 0 /StemV 278 /XHeight 431 /CharSet (/bracketleft) /FontFile 2526 0 R >> endobj 2528 0 obj << /Length1 805 /Length2 1082 /Length3 0 /Length 1633 /Filter /FlateDecode >> stream xڭRiTg GTv ـ %Je)#@2 RZ6 ( D+VAQT=BNcq+ڃPPSz޻w<]H8K$'PL$yIH6d B <=]A8L<zzq^\. $J)DG R 9T ʁT$DJBe>JW` Գ)"YBI$pwGaP0*-i<2Hi g+DrM˒Ԕ9@uU9czjD' 51trÂ%E?% "H(G5Օ$2 NPAyJʒ@"dԺ&9kB%Nd1Aq2Bz2S[Q:es< H}/_qq!GqpDB4.EuSz{UgէDۑֵ9Wv>H[x7p"ت6=ylCI&b+8qD{-i z65\`M뎿Y$1ĝ̝[ɫ93=KƮF_mޫEfr_/ PXw&?Z׺Etˆ+[ZmR  1lh;ىϜF ?{GD|ySa[lGئ謃彽^謅oK},J8,?N^cIiVhIS2"2;YڞβM}Mz9oy+0en}GH%5]ޣ q9;؃qv?Ҳ6Ui mb^{/ymc^8r=#x9c?CrֱehY[[+joax#U\kBMG[͠ץv|{[w*|c~%EmfrbicEGX3kN ٺ>ul!@ k݇+__8-ZUp,_}q##55m|u"v:\U|~td+sf] endstream endobj 2529 0 obj << /Type /FontDescriptor /FontName /VLQMQY+MSAM10 /Flags 4 /FontBBox [8 -463 1331 1003] /Ascent 692 /CapHeight 550 /Descent 0 /ItalicAngle 0 /StemV 40 /XHeight 431 /CharSet (/diamond) /FontFile 2528 0 R >> endobj 2530 0 obj << /Length1 829 /Length2 1680 /Length3 0 /Length 2244 /Filter /FlateDecode >> stream xڭR{R$n-V~-̈́9wEZUK/RZu ?.ǃiY}7gDܬQQ_Ѧ)(GoF*rm ٜ=I+̬yGhepxXg'Uwv赸.Tkvn29}'wuZ1h>ҡwKI-Z50joev"S\{lE#<E}J Ru[V.:Q5KA\{^|e*5Ұ#j̭{6鋫;bHؼawڻ'^i/^$dpKɑVBްx64R)1Մ|xrzUo8W[2;W޵k\;z:jjr2zIe+zMŐ'& LNWHW'Z2-{kv)k׉DCϋ)VuYlY , ogI<;pwO4"#w=%[)/]֨0N240WLP"q^ZGRL##ڸwiݺ '[QƼ KuRlZllTP];N9||n Ƈ{)7?Mo2,{햒#FUT l4 /7Us}=PȠC8@5H.;5q}"~x8sgygD+1]4]D(:M=-[^6L-ng83Ys3<5{'zp$n_ƌ[ğ=ߝv^)%WBdđ^;?8PN&i&qJOM]bܖ _.W'l%7}q%,ڰ _v 2r]EC$&\;[)2ͶZh27# 6e8emTeAJO m-`TmξZ;ȂW#x1n{ev4ZZy$ \%c@sɾ Y*Qh,k!Cö[g^Pp\lkcΏqJkm*o}~BGCe'>HP3M)^'Yc.z^Ƞ`%vZWH qBN*r\SW(3&ŧ{rtcp^MA=*HL lAOOy|-90o_s\M3"*mt2ڇn#'k/؂WWY7Jw_9,C7'׬}d@PlEe}Xn=0S'LV_O7?+,1/ŜGjByma7I7.  V endstream endobj 2531 0 obj << /Type /FontDescriptor /FontName /INYQND+MSBM10 /Flags 4 /FontBBox [-55 -420 2343 920] /Ascent 464 /CapHeight 689 /Descent 0 /ItalicAngle 0 /StemV 40 /XHeight 463 /CharSet (/P/Q/Z) /FontFile 2530 0 R >> endobj 2532 0 obj << /Length1 1618 /Length2 19208 /Length3 0 /Length 20059 /Filter /FlateDecode >> stream xڬcݲ%\iҶm۶m۶QJ۶+mTڼݧ}{30bDs-2"e:A{#S1{;:&zF. +௑LNŔ nj1503899aN.JU%u*0Ζvn6v.!MM.3KS8R\N njgdhPp54X9R6>L,i͙/3`jl7-7`dhw.K;cWۿ` .N.UDΖ{&Ʈ/_^CK;g?L&6ksp WgK;b@ p257t21uv W{Ce+qtq61ab[omsK;Eo:k@ _&v6S39{%w* -?5.b66r c: m-m< no8.!hgWFz-,=LM,]-f6'/_E5L#T,,=]v&IHΠ!()(Ao*,}w \T<r]ڛ?pBBo7P_0Lu5tqh힑/(?`dח ۛ1.v&q:9_ou7505Y_7tic u(oR)) ψ6oj\>w<>ðM3*%/B"d9 b+ϼP^bcT;ڛRT+dq~ q+ @#}r@3NoGBjBi(> O>}~?ĥɋ&v'pRlý"T+ #!yS0/ܰHIuh;YLt%ui& ͆l$ypn~G_U*oto8$ctAnsp&Y0ȍOzZR7웷1ujR?~~Vl|+28-3r%7)ARzw6KX [\*2Sڎn+JǙ A@a3}>xmQ}u:A 3Xlp@YUHj#hQ2I^uY>2(}tba&''7#F/ FɎpei]{u A&+ s" ֑P1*ՒgNjި؟$zey$ 3/EA"/5o IBŐU $ L&t{wLȔ/%j.ST1޼>MǨi£_ _滵VIߴZݒNSx] @ak,+}Yp8-V.d!'j i]nҬlzͣ&Үlccv ICRڠؔt #UbHk-ѹ%l n#Mō<1![whw6Zҽ4Ǭp@EB0+{t Ϯ9k:ۙ S}LN[rv*GyoF'pa3duL/(jwlͦCX3O"ˬ3'VTEoug|4oCyS,t<_ws/Iaψjۘd)P1Ys5<簜 x : + sܼ#VM™eހ8)=GSUU*$}=KHVd1[_CIpBz; AƗ3=*~2q"nR'jA-]LU]`uo#Ce1eD>:[,W5MdL U72153p˯ǁ+(K"Cؤ?q}%f쌸>J>~ԧqR92$\+7IHEI|b~#xAjP:}|[C&|SͩezV<;nxВZ2cmi̕N+=dm&ݾB>4Ͼ9TH'G^}=T lb7I}'G[`7;> .I\2e!pR9,+q- ?ׄ/n C+q Vz+͵wF^Ҵ *8jҜq . jO5-RG$%fr}qĬL[qlOGAX:5a,S|ܡN,LJQWX9BWVu]#bW K&8m5q"Y:yX_mt~տu|<3Pc맰46Ձ];Cх: *A2`kF<>jUz=f*KJX+U:LByaNmx6|(k j'?|^61.S\_GYk3]Wd)1gOL50"2b 1m,J 0lv~}1^>twR,E>̏kuz:=*"eFwpo톋(Ͷd^fWN5H}ψ`/])Jlu18؀'Zl|T<`@uE]i nB {KP-!dzNњ !%G1S%YJa24Nu!-\ۘ[ ̡LG}Xd0&( ݦ rDof˭?=sE&lzl`R%[:Aɹ߀AuuGkaFS~M@j]V$ԋTAU2Kp #"x8Ӄ!`ʾCP3@Df溿@Ȼ"8'cCK;l4 GWwi:qh*, D)֑{1c9@K a_T~VhYBG?,XEݤ6Ahd_TFd#n <ɨ] Xe6vˏ#p[}B#_:ap#6LˤT7e8,ܾ*w3^G4| g]*n˓=p1D{f2U}}I7Z B)?T'*QJ ST6"u* Rإb7`Udj)6s1UY_gz@)2,+Bp( uSSׁODteV\2`' t, RF XPEAF3Y1D9 X[,T.laO%E{a-l3oOػ,j܌^ɃV\)Pg_`)V@vDߖtBcň}X$600;Ych2|a3xQ?3̨:1$9THCL>xycƜ >3);sqos>cBywZ0Ky 4aU_kUCa}DoC` _Mh(4YśM2M$nXcsj*1^|XLmt3 Gbˤ \2Gw)=WŽ^\>dݷ=0-HB{qmxn|rhm+i/~,ԟR-%(Kvͭۼ4iW谢\}yQ?N.g rbBf&2 ZhDu&r ";z#"g =٭9WO|ȐUʷn/]w M Cq{+ai(7Y/b{wYN2'U2DX[,kz{]{Ke9.fDg.+7>.|:9 $L0Ӝ ʱoe+ڀ=w@0AHQ=+1>}39$֪b$".xQ 1R})B(zod4vyi(Ԍ;V#8.HUdX=4$y·8Y}=ɪ1a8WfCD=o&)=d;7P~얢ĢY0B ׺ JlB!dOPԾih=Ek{ɑLo]ށ9&Cl=/BTr=IX$v}eueX97 :W%>FnԶQZC:Iӫԝ%R%4+rlxM#nc"|@[K[(F.]UEۮ9GT uZgGg9ӉC3ӱ.+lC0h9ql*k#B 27DE`Zhd"qvYD]N~kɄ=\+FUY.6ڄ>T6^8_ مЉ*=Ɇ,xoIdk`żi6ep7}10~c ;>e΅ AgPf 1f~ :_I|WJ{ #x:# %0Z²G!ȇ ?5sLm8DG(i=CY@EڗKJ/b*6ŘHu3\oB:| yipFs,8;6oY9$wom\M-jWe2o(`#VH7@qA&0EӮn`~PL{jƛbv߰ g!qO]?,#jq"+kxHmdvC;ARmKX.,_ͻR-YVcxCdO*L9@.>&\q$#i?L+Ccu1lQRTF!\JX}VOW1i|lNQ{UTvRa( w;UZlR' ;F mE!): ќ}U)+WɑOF~~qnmND6󴤍t赺z2],:!1Zi]~!hѬv)"OsY#nY6CPMRsŲ;PCwiİ|Kϙ/IlWG b62r0P}wp.ly>.rZRҎe: ,lD6hMUe g6 [%Os,~&BI?G h;Kjk\\;qXR^U$ Sڸ~@!xk@զKEj4g\3޴hʼn6XdYč~ѥ[',0^6uFH%B)0qX }u\S=v+߯uʊm& P⪩:gpZ-z(DG?B'xJYz9R&.s{k s/Э2,Uӏ|"Fl!U;8Z( A ޶'q)rq`8:qwXUJ7f812$yvRg[֓Z>TA''#SVG?^+XU%LEEBNEIAW[  M2sK$/7%mdO|P ӯ h&tI1]#Q^EH'&xqo[Ajd'T56\&rp^.ᰚL4d0 ?5 8`w2b?}ҧ\.>u~{-gv\m=Lor8buS+[QoP~R&?kpf\7@_}..#bR ~1bԗ3JYu Nϗ32>C"Wmf~%ii1'~b>|*y ei m~6. o4H@ՉOɡF?@iny%BG8zpM ) dHD5x;9J}g:3IJ#O-q'ۆgS Y;DH?Y {t1%FGAW:c0TUv[\;]i@.4L.gV2Pk`ZZc`$:e9JF2F {i:l3 )"Y8l\|#0iEVV"|J8G}˫A ìzZ]AN:$Kq`$q^gKmwH?08]F0)\̵~aZq 22\VT0Tbv(H`NyW-^bz&>)*Mtk{i§H~>DRDukg]GonnE_)L0g@h_;xqn@[ ^YvsRrѩ5HVFLq#i^P9;Q̺>a*}߬$Wz(%=4ѾT%vc&\䵏^ H>T3!%UF& FS'Xm{r+8E dSckni,6bE5{ON5w\84eCMWDS57_O| F-Rx%ف=; N=.9ih`[ŹXE"-(wg VJϽlȺX{zIKy"Q"Лcc˒*ꮡV H[ W8ϥ. /!k%V|H/vV yWIQ8c{KGzm? 1;Pn$([N},$W3`񷩃 i~ܡ_KgկqPDWOB\f?t؟[=¬jq.>`%+74)p ڔ[ SJB+ZA= *DwaQ1!/}@{ҩ/ ܧRii=U `+\˝k^ॼ#9=FYڝ_ӣy55^*tqOE `=`UL$dF %LU%㚄|t_ɚ+ ~׍둛F?!{JfMr?&Լ^ o@cQ'(HP}Jb- T'Px Y>㺨O͞ydfFc@q1,ߠEt=X\uCv {#ҴS4nCfny U!'@OU^mp(ږoݥ`U'/uH>Ro @Bz_viSi'q>ǩ8ΖFIPMa`RL.OM!ûjI\p FwBuYX~ h7儼G4-Sұ+ܛ,*2IC&?]iW#`ZGgTq@RdhHa[@\ (4L)E)@Qb0% nuX5<|b;'2t:_v4^kh!;ӝmb2Pl^3.L0,\ݓR2[EmQR$soa}n5t' hnb՜dǟ%||gR .8S3ؒ9ѭ 2t4m}g46ԫ&0PξoL+jh5sw(NM!'6eU @! r1A aDl qK#? 5R }ƶt "e4 Wr`@5i:tn諱mD׺ⱄpl :R -+z?W:|f,'J0^eD1\7N1q`-<=9 a C)M܉!< ZqRv/-վ-l&ߤ~uJS&|F$^T0'e)>  CM@<\hwRWg?Ijq{ARekf305eݨoT5@W'c˛ZϠ- U=U's ae& ^΢yX:~,!~g5h˷yx IN?ˋ5Pg^2  {;sT߱ޯ"f O He媽} n\$a*idt][j07ݼ3tՍއ1kJZNҼo#\SX`G8[Nmd"[ZߗaDOS\梽W6}Yo,TU^xϐW\[:4cI#zB>yscb93au^ƢA`X rv0rQ$[rDA \-BQ%;o+uPH!nes >E&^"3$(\+â2&|^o ֨^u;\c#0$9.q={f ": %U)*9< _ԼEirE^b^( TkrA]? E!p.꾩'9qO÷tV'TJ_3[WY%V`}V<&~ ;*-wi6] ;8{8 Dȼ8tDvКSV<.z*[VLYu(qs#=Ѐr0g{Nʐ'Sc575X}2oݺ .la4 %d*1=i(葊Į7,jnv/.%p_#2=>Tt.$.W>. T"<6d9>lЁ9T-5BisQ8|.1vv"K3giHw]U1+u9v$"y]03BO i{*̹lLp}%E ȑ}{1S-0GδBǛ>! ,*]^抿/PDgE5O 24& \;Q;@[*.!˪Lq@d 3IOrYirԱk"z|ňʔf@VKZ-|x3~? QUTwHhGFEDžnF{W1 ˧?(I솾#nRU 4sGv;rvS/+7܈25?37GTӻ̏n+ FǓS .km}u *f%v/pWj1BhgL ivNE}V7 BU ,sE/ύiA:>1,xᗣ tua.h|-ګ陼M8Pw3}bT&_q(ĊŠp Ϸ޸^%7KtK\+6X֒bUȟW5sn[n|jʗvE%Px>;Uº% 8?-{yKc̟IC@K\ȳ.C ƶUJmDkǏz1by~qKcgKt# Y-"~čckZt#'!z!ֿi@FnVUYgnlڬqH"xPFU$zoa/xYTfkgaϸ KFn2TTD:]_~TE{YZ$-ڲdnJ ٮ)óPJ\ "OSyQ`>-]מ*~څhFQ-` #!<"T|m tWO-rdž#j4snfjf,|cGUQL׿Ѫ]͈ QQ7(Y\Q:7g7C^lS1%2olՙѹ66 GYEy>kHܤ v/_|:ᝰJ73hc~,`9B%Np2 5dqݠm\?˞iߩy9hl v,i] (@ F:Y.ipHKXw쒀^:i9Z^KA#L T\fzX~F%| qKﻝ:܋JS  7Y䳗qQ&k@^W:K[}C\$tKl8Κ,Q2>PkY~@1B,/uc5')Κʸ;Y {TƑ鲨ph>+'>>A%z5Cjfn%(%n*gwT#=Aio8Kff|<2$r_%LyMU])7|T;'@D7˯KsS}pt,{':yϻPOF-3`%<=,ӖˍcBJ;hY_֚.ovre/ gP3Rlea9AC Ւc']V0ՇIF_&61 H=+3j~@ۇ{ISD<*GJ١%}:IV)%䏖F"ou45mXӆG_; OÈns/JBJSg3ǽcQ )so1nfK~,yu0PECvl\h3N!8-=z=x[;V<]ɑ/кn[% L'[t:>#||$.B#aJzY*SSNo CNoN {YP-38V"!KzSfd3vkIS$]NJߪ7xEK,^igiM[3Mӓv1^Ӑ2Zdܑv-OaH>S(C$Ңza!^>[ 1r5+dޏ{oE3OqƲҡE>bf^uR3Mt͵;h3%nee G*?򵂸Е~\C!* QÏ6g:FTpk+"iv ?@TTݧ.+ F9#q|Ơ4LP"tD<z^T'HEv:<.#N]8M;_}4 rlgSyx/ݵX5 Wp%f`5JNyωǒql5NCȫgH:nn(fۺz (R^u%9g [f̋v[>L-/11crYYHk+2GSxW=;XeG ZHs"[ݾ< xߟ 孆F#GMd8{IB{~Ix\6 rfLgY[=l{[,5F4mSVK_oo_ᔯi n^md E)iw$e:>gL2O<|z'UxrTS+(pHmM5O@ 0uPJkCi[^X R#5 BҾ2A, k*R}(xݜp-S*"AFbںļziIs`Wp Nd!+ \Lj$XwLCVޤ`6Rc׀wmޠ땦X,&}{>3͎1#D*ARk5c5 1_\>?i'b(^ujFó|\ N]]}͚'p> endobj 2534 0 obj << /Length1 1630 /Length2 12247 /Length3 0 /Length 13096 /Filter /FlateDecode >> stream xڭwcxuǶfǶJRQضNǶm騃Η=su53?kﵱs_U$J f&@ {;Ff^YNAhhb|N@c  4Mx @ICGG/_." ;ǃhA?T.@9UTҖVPK*$v@'cG+9)H0w03՚334}=LA-rX8۹|3q598x~`dJ.ΦN GV%1biWng 747ud pz09;{~ sp]3_Nf6@g>{cϿ@.@sFx֏.-@vL-=v3Wbn@D|alfog 03)ػ|PTf@O߉>;|29_௻ۂl<wwXc(v022 ry͔@.scmW3:ـ=֏ f,AvhgwLb*2t &y:FS?{2pXٸ\\n&4,:8<̌,~u7q;S{6GclG<@~eޔ/*5#ͥ'gp\Lb0ءA0߿ھ/5l&qO©۾ p7 UW22Ї'm ɠ)L3ռ'θA+4d#?[?&iJ} V;j'ڂ3ʄ}8 >7H$Hl/:_>4F7=-u -WWDW.EWB+fc:2y7/>)8YMoo.m{q{be /8ʮ\GgVv ] c!HM~CpMMZ~lpVN#6?x?y)ʼn$v=SrqƫXݘ⤟nz e1l˙e~EuڍI_sv5⦹kA@ F0 U'_rV h $dBCz ڠI@ov8MRv ^U*"Nw_uE3ϣ~<ޯFY8_}pSHTGɈyl#"kBc M=CL!ۀ*5(geGxXί gZ-d8SwTn4l`-NpFv9_3&aKZ%6YsgRoV֛1*3qjtGvcjָؗq0KEsIR󌁆iGWT@Q$F}>]P[m`7߷`JF6"To_w VH39Dup-t RXx~QP&? j[ qW6w#X.[N2B (C˥Y)Wl8?áuQ#T؅ag뵛Fѷx}zm#:{Ąa&&Nb}L+ftY{( X?H^k/]o04 4ǁ ګMĪ;XAWH뼇RY "$Iͅ u]'|fhۧ{z i %^55U줆z}HF-g+o8lCBSRd|J_WޮwG5{W"I$!"}[mkFszf ê'f!!<9KV='ECN.tljFH7ѫ?u핇ڢ2 \Ebgj]r{u$ r>17o84PS;<2IN5jkMmL=Q58vZۜxZ1,Z!p3x9A>&/Uw;!ݭ6Yla$i4 q+hП􈔊X = Qϖ+@kQ^?`+,Q9hh IYT^=eJ`G =L&OU޹ {I?g#"zf x|nR8s}RcxӞsTJMA&9'B:CY)~}8٧=혊fF-ߣtoit~?e`yzwds!lFbXګ<\^Or))|o}lyט-Z&'@̥$:@;5"R/>2Y§nCo\c0W4#f:b$b,y> zGE[H";UHTIwfY08gY~:ݞ)? @Ǹ0[^-G+P\LPN8V)|qFꗩ<$i@Lpavżbя7*S(It#AU^`qUt8~ɟbXiZ-0̀4 L l6A0&EYۖùO؟&d8v_FG&j)4)YrW}{u}xl?h} z:vY5a)=0Y\Ҧ ʍвf3I g3TUXinq !4O8L"%ɫN: hB޻Ъ4W^z^S5.5a3ÿc5gM  SZ 0KJ2ba;ZrA!&88_ L FrR l3kS^ ; &|0mhcgcG gAqUtOMY_.#x'B4UPQ \X GB\B8L  =;)]d|;}hE\Z!6TaI+ `4yqctIitlkqĹ\g\Rz.gpΌ}Z=-ԗ3]"$z[|Vzq%R-/O0D9"cNuw] Ex'2lr1F["5m4zmsEiLl>ɾ!La#2M?wFQB]ø~8&<-W=Iz$*ޮw;T{0]lduP>(Rnѯ`lHhf"Dh"i0_iR]wmfˋ uds0H&Ȥ0cc7.Ǻ9EK󨎕K^Sap]8)r D&\QR=RGeό,֞AB ]>As1/Hr cǸ  O['3>plti=rOO_?n0YEW"ojAu.J!)@lY%W;IWmQ^Zп3y~Rk?1Ӵ d6epb!'sc+֗9J)TᕼvIshB%%a tC*nP[^ F=绵[F}qG6BB藄#+.PAM2;n}a?:@l5E`=׉9?BO]=OLY T]Czf y?3 ?&3'wurٮ_ 89jq;_rq !HӤGÌDԱb Pȵ:*vP{:ήFbh ~Yc?zlm%jjwz[ ojzVįx %~"ϯsM5UאW8D08ip tGZSCt@J0QdVԳ=Gk/3iN "S(exRlˆf\(r61JjzvcE4Ƒ[>"m5-'VQy{PCEcm.7EΓxɯAv')?"h c5;M7:Bqi ;s7렄\9G6t{4clv"&ap7W 9aQ%tAK>7ōt[{soT1Z]~4|?"׿vl47d.F:@N-pUI:.`PȶHpe&]KW`9rkyu¿M Qڃ_e~1C]Bt J]]"Ta=)iwU-!5ؙ\8)KPRTCk 2iAZj\@eQ~ш B|Rt [1.+mXX!cZφ_w?9˚ ܮƃCb?w1K+(V<2E6C5A ϯ}$D:SpApRb2#xN:Ɨu: MSx";[AhE_yU<6Y8Wn.H ^}zM~7%17'9c?ۙF$,[j94k6C%]N֫R9QA/I:FRK(K\-w/0 T|m7׋DUiY,܅4Ѻg^/G`? h^y&mXAӆ4^ifT!$3>AH9 @>緫jWZ& >+<4уIu"u6 ?JEҪEMB\I~l}%AG_1L|ԁ fݙPXm,.w~>yĖuo fN.9$ mw$+rӇ1K4lVe(TeC/HFb=a$7Wr=I=(U@,!L| [}~.Q"R˳GmAUT&1  !^6U )|3sFZS sc,qh$$]mȳ.Aj_|S$×v߈㱯,'pUTSnRO97.ziRJjJC7' `(Y_9*)]ϣ;77 awpEBWKkd#,j%>IJvजڤ-$ 6.34 RW89FZ6zKC ;V8Fzc0=#9pk,Nqi$,51o|JϤ硏 N0fPӅVyqm]G9ALZ|͆-|σU|%(tOkĘ{'[egxJBȵE }+xmT㨝CqϹc,2&>l]swg o3PU[>IYV;dZ;V<ւ͵\$uL :$xN3&%rכLӚ +)K'U(H$=9ZVʱETfS?wu[/;~PmQ.i/q`foh?jhiˍG=E,HR>G1WG7igGUg ;ʹi3`I]D/,5`3\i1TDB`Pƈ~̵9\4jt9WaGjW5ny1 m|1|| *8pXu~#}֓̃FF1زwd{~J.)E8SxrlaQj\?oSDth7(YZEK w\b*YigP!+:B v{=3&6QkۍwJf.J9~.0ăGSfQ)@}e#t*w_ -|>8-Ʀ2;R#30+>3NȬ7י{Q}EOet[nI( 4\f¦.FO߷1AC]vL&O:b*̮gHTb!hEs&D%4RwNչ4\\TEn8ie2v# v=)tJ/:;5ZeCux0mt  -B|TECp<+ OVv|1cQ-T9VMֹnTBNiEKż,9-NUѕR4HZV,Tտg.G.n ?n+sJCo˔-p&*?CLf! g,1c 2up-r6[ 0pJIU2MbyJ]ڔ,!sMNh6]QZ<Ѣ(’C:Q[-K*)li0?!8! ^8CZ6QɖB iy`~%$mROw*Hlrl52b!8͖8vɤ!<l q}O㝸+enN8j3F&pl\ΓEumUz'Pja6`*2T{{NʱL_ IHGVl»ڴGW) 3"Ŝ7̱Q[|kpٮlH $Zmnei$S=38̳!b}8m>>I-÷N]*6Q}y&IRM<Ќ+c|9νsG5JIf>Ѧg~qCr-eentLD$1ɲ0( :ݫe/ȚƇȟ?K5ȱC ~'D(_)CQZr T[(̫YX]S,0$"Z߽ w/oѨ?-}22<`[" ɷHdgj#B9PsW;F.Q/yP ti,nRϥC=Qɶ:s(gx ˖V`R>6ք 'JԒ'$5rXis܅!vkF֣oEv# }L3Ef.אcV|"c;3K±?jƱq{%KE^Rn*>- )_چW άLǙ{wJٸOy"ʧ4,(}6L~eY^~I]{'Sz&G)A!xC|ν[֘z UniCS:$l/R/*o:d_>RmFKl,U $iNhnI:˧S>U51r=*<7?)D1m>-Ң5bʐAA (bK7jL! !F批9pN)m^cYi`^=r&`^@B"]1M*pyI:Oj, Y;O@Fy+t96Rcjeq^aWm}X8:iИOUJU;PqD56)0!=]Z'#wYo킒5|/X[E*W{fUzj7t'UCH@KJCEuqh^jh-J`&xS焛imSG+%$6]y#ԑm$q>/;G='dM^A.Mv67}k O,tInƧ6JJ YLK%q?wxpv%f*5Ae̜l@dWٸ])_K3|ΔCsC)鰺8 4 &Fa|l  &Oa'LI=-RIɛ{D0X+fqVL[λC[]cQƮ|pˏ>9Aи(7i (:%'Xh~ -^W_҉BX:ܹ݃g#͜W?bzy\f ;2 #3BAm\E o&'*i:#ΖFQ g8[8%8ο(Q\G ʉb>p\v,GXZŤ-GHOꠧ >.$]2+)şSq0󆑑iPnmR%-kAhA`v5Ch'Ad_}+iuM'Fl/xF0WR(LCG?WUu|9|1I?֕\z1]@{=_bw Aן\e_)ȶ1Q#֡F.Q*i}" '½;Wb+j4 CB-c~Ҙ͜x-/:.|ys`nmt"j8F})tWNME}Uj@%1I9_~PZ1,$1oq!258(FwH Fp}L߫sk'`|.<^@*\Skqi=;'#(mR moNXC!k0 ,1JœOvp QT2OɨS WjhQg]>6f0F荚"TYacBd(,˱9rɩDcLZԟ+;dXx-*MJeŚPZgv7DFL- 2)>Ou)w+gqe3w_0h-S/54WEި6k#ߵPxͤN%ѳt R1R7?qQ}]Tfv{-ǽ?q~ I:qKFSORXp[7jМ_/w^  L7]%{sGo8 p۝+OQ㱉& >*wy  Cφ#eh̓_m}p*7Dʽs*FfĹBxYNZIfºЀ26aM%+'3]ตHs\i^A|7?CO\ZJz,k[V\03.X>k_]]g_P(H|]3N)F$ݣ]xnLqZIYXASKy!DsiՕWObs܍QS.mn χv&"^5Jjc'mJ;iZ@旋>He]g QQě;;Y۵!_OV?U NLͻ^AM6D75C|aKcuޘ~mpG!|_7 }hg+t#b}evCEN!BQbWΖ@8pYhbdiH4T^Ͼk&~vdr&]{!>4.E5ғvFL`~Mz[1!kWIzfPG/=hѓ]¸t֍BU َ˸bDw%PT~"޹ nEzcU*L]#љgnrabWWQ,GF'Cxk%!3QTNҗ)D{yL, ~>ޮuh OLYmO}\bhzt^/zc !GO޷sdܸ_]ǨJt"HEALm}⬐J$ZBn!uC܇EUB̻=VA {Af- endstream endobj 2535 0 obj << /Type /FontDescriptor /FontName /DGFRIJ+NimbusMonL-ReguObli /Flags 4 /FontBBox [-61 -237 774 811] /Ascent 625 /CapHeight 557 /Descent -147 /ItalicAngle -12 /StemV 43 /XHeight 426 /CharSet (/A/B/C/D/E/F/G/H/I/L/M/O/P/R/S/X/Y/a/b/bracketleft/bracketright/c/comma/d/e/f/g/h/i/j/k/l/m/n/o/one/p/parenleft/parenright/period/q/quoteright/r/s/t/three/two/u/v/w/x/y/z) /FontFile 2534 0 R >> endobj 2536 0 obj << /Length1 1608 /Length2 2575 /Length3 0 /Length 3364 /Filter /FlateDecode >> stream xڭTy<{/d),ƌ"ɮl!i9;b2ZX3OSdP*`y8{-xm FEf11@. 1RQQatD_F$JJIIξxd? @o_A.t- 3kă$4rA€x2( HXh42"hL1| ]4@I p%18/.B#D$Y2)BWO nGb ݒ|0 쥠!<>\ D I /2w@ h0 ۝uS=H&EA %PܮYvwP .fzyIΌ$L%qta5#PS/HQy=Ù=`xÐ`w_,E􏁶7bHAm»R oFX q\8G{vk<$ <kF@ \6]Ie?2-{VHOWmeN%[)aC[ɠy2ؐ򀊂_B}?)$pFJCΉ%£a׍"`E^;\!AjQ uu;7[סEF[au'7x+Jɥa^կ|_NN?o<;p\lWx%u6=d쀽fz칋G{I%DsE׈88/'[_;ڰL4% $}E<:3S@޺s*41ZB~thp՘<`?TQyPVCl]^o1oW:?{-0**'8lh41pO>tNŸ[SM7 'Ji6.W';SZu\KQga]lȓ)|9c@,GcMǂT͒.*6xTHHHڍ?C~K#MƭRtHf\2mԈaQlNpK"()-fRW}VJE5x` &s[ r4I*ms] qWy:'d̟׀.9F[\pEkitbODsa!#/왼Ysފ6r.N˰Y[4$EZX I蠜߲kiDkeD-M<yPb-9SOAZW!j$f(V:Gd68*{e#P2ӓ^k>LG1v Yf7T0gF*{*qs8[S(RClTSaXf4 .S,Gd~ :QƝ捫T9Q|T&bW|׭XrC D\[e =&僷9klwSrN?;L0j~44 XU]w}8`e9-LՀTkTX#Gz\ k>J~)P734P;vg lE?miCEu2ڕ[{]|RzPL@k7C _Up:wq}ztFNs9<`ezQ*Tj\*Yc!QL-[Hz7܄F#.ǥ3}qսd(C_H`a<a>ˠD+ٙ[JY}>gl8d+j|XkeZd[WXqg%6 ;{"uۗ-Gz_beK1cEgiE) _9T'K?HЕ].>|QSCl\ey/BjQPRSeU4R<4BwO / yANP|AQ+JJyl^YDQ#~j|ת;SuOr/bUGRJi4,{..Ocy0&hp8 zW^; U+SR՝&uge/{v>F MxX3Z6,q=cc؇s NԖk*qz3ʙ>ƦpQv'ɞKF?-^\,6Tq\%-[.&l"I`~z1Ѹmwv?MuЏ͞kWQM%3(.q;ElWH-w0OhMD\'WziܤC7#n0 +fMҙ#z׳:#*jk~>{ف7TNqJX>&*!q~uVd}k4%hZhoiS']Sɱ_y~ƌ`f[$_(ZL?5kPdf4yV&IlO~\u0'_^ WyFul9ϰ=zfe:i8"H'f+*ŽGJ>m*\, z^ڶ/(qMs+fJcV\OҸLم\JhSLYX |O3™Je I[V29V,mUi٠FA0ZNQ"6=,7p@_wa$$߷\2wʌ3tKY7/QF>cIbHr3{W2nO* F&s"M-k p\U4EV#]JV:&C\-5N;#VkEVS^|I endstream endobj 2537 0 obj << /Type /FontDescriptor /FontName /QEMJED+NimbusSanL-Bold /Flags 4 /FontBBox [-173 -307 1003 949] /Ascent 722 /CapHeight 722 /Descent -217 /ItalicAngle 0 /StemV 141 /XHeight 532 /CharSet (/A/G/P/U/V) /FontFile 2536 0 R >> endobj 2538 0 obj << /Length1 1166 /Length2 2585 /Length3 0 /Length 3325 /Filter /FlateDecode >> stream xuSy<[vIHeSݘ5{.<0flג\K^(DE-"*Y" $%w[{s;{Gql Q RlLl sD D !i AMp lp4@  )4 `O#S{HD221A2ÉI S4?Y0PhD親Ah7;t?P,X BݨIaAiF=g'26T *p Ӥ4 iԔ7o$C643!@?Pa_u "SB D2Hx&B&b& @?P-0/Q9 ~%0RGDA"80hL02 H$'1_Пs ?s`mocЈ'B@ B2)g-.&GKᤄ!w0-=)hh]=>?SZ mGb4:ǛWoKa@@u(5_-7_k 3&Uor=5 GG8.H X2p$>?LD1~]ewSč (/s/ 霻Jd/%M~<818? ڏIqzA"A  C?W6,W MnuY”ׁ$&4on$Sgb`Xc*c;$m8&m =6ň <|h>=+6w; ŝ(r/(+*PEo]}kgAru4Ag oCnvIQܧ EEřCW|e/nZ ('TuPPR5u^& 5Eݹ LKʜz@a -fiMx#Utnz[y⎖-iclD|M|yuqgK.hqL$ވn4 ]!+l LSJzN ;+XF7hz.o=8}?e3mثm8B֞@h>9DD9ץ7NGY,N_/c4Y.BV隨橈QuVg3m:Oy<@e7J́va͒/BtQ=\mUUkt.͢rz+\%ƗZbBcaB1̭l]$(CF;W8l,\XƃS q<]`x#r@J"ZSh^h5WL 3S7 zH\㒭twrK ARD'p7~w-?-Ai*1#Ӧ)%\X2?3V\˜ kh{}-/qzOF m~ӨUp~ؓ/?^(}_~ {˘ps-b&v! ['wuf=>b!1~L4qMW3u >rcϬ[l%A~\KHT[)#J vCYXI-}EOsOթ< -i=]:hIuHtvۃjS-X6V1ݮ iS{d#,u .w>sN =mJox"M.U w׍H.zXyL9-X^?~SByp f}ȧXЕ*4?G-uIVh@/8=TVf`ީ Ǧ`K=zdRzUd-0J;}٪H^ighcɦ'5%ϜR >qrl}b sm|xʒדңzK7BVѸݛȿ~:[uoO+{$Re/[V9ŊpC8/I_22VXm+W)A25֎$.@<^u_._ ]& i7+tfkO;ZjBGG&a2R{cD23&fJWrzZteΗ0Q _Nj1LC {>qaѸ[GnQW=|z%OfNf[.\u  jI"Qof(eWӬ7 ϼ(?ўMr ɌygiK[ONZ6RkV\R_JE“wv rXzEclFIgJb\&dS? Ꜩ*!ᢙ<^Wr\GWy9Zor V9dA5Ŝ/;=9@zKùI~VuB2^Q ,P0jcȟKqt~Р~`=uތܭˤmgW)[;nf:i0 y|\(CEfZMљ|=+1PϞC_JІGJ&ūrT>j3ۯ&WS #zAzE{2]M+둁qgW_lʏ^MHRJzF?Cto+}zPm[.-7;E*fRz3v'Qp[ou)H#ƣ\۳DCղ]9i :paSl])XGWv%}ǻjT`Ak2,°醾ԳIeΏ Wrrtժh{O> endobj 2540 0 obj << /Length1 1199 /Length2 1648 /Length3 0 /Length 2387 /Filter /FlateDecode >> stream xmS{0ʢU15nxsBXuG|gKȊ36ti`Ւgu3V&q`jC;Hm4ؓE-sO' [xd~zz#֪)m3c ' ]-[TmmcSCRs\:w ^]a͵oMqo Ku.Y]jYcQa~i utO{^;bˊ?)UeFu/3z4RZ?W >8KpmL̊e8f-sO}-P0r 5ɿɹ}}8ނW.r ~Tj1@ޯ:•wr~f򱖗cJSvoT-g_P4ӖO-T!ͣܨ~za/;~^KW mJUy~J-A$/Jнz斃FVZYfSggr)|3rrjucsDW<{૤kewҔ#knoc9a4k[y~ *ʝ^`ӡ^圸HXBN :B<3`SI*ql$p{fІGnr ` C?V63%Lpڦ}5+5 ]HVe&J=>jY6YD_Q-tÇ8omd;jYOi,|72lY(\_S ?g=A%սkGkV7{ޱݵ)xJ٨Aklr(D" Gie?Asy8>6p~=[uNOa殬$JY {:N͐Dmܲ|TYE ^{l* 8]i,<ሇ!eS !x1H/5eG}^e_(>Y=JcViQzCNʓʰxYũ/K{)z;W4;ɭ o .hUKvHЗ!Ɏ} w>CM>. >>Të+u;mDi)r6#Nf>eqiI~[ZA'ۨ> endobj 2542 0 obj << /Length1 1717 /Length2 2892 /Length3 0 /Length 3784 /Filter /FlateDecode >> stream xڭUy<,!Xdie9a<0f(;B,Eىs I9Ud/{:~g^=Rb=<CdXl`,m> PjRRT !![O_ZSSC 0( * v'RAD GY 'xI `p hfeȘX& bIםDDHDH u4EK`c RCi47@* x"Gů@Ȁ B2|h0 G%R`14iD$ @H&dx# QK$AOQHXRP4|iD2y qH ' q΁@"Zd+`F4K+R7$煐Ex`#U' ""O̟1zfcK"Ya}izapH4b}$?>~g |IXa3G& G)94c"c0lxJ"AD ʚ?l=8oU7B s&1fVrn`a[agс ( N( _m ؖXJH(F~~X'1" PVST*C,54x"#\) ? (ahu熍\%,AJ F$!TWd"3 (Q<ѪXEovpT*r7 D=A:p^I)p6C'-ܻ7B!|H-Fem聱gOvkdJfPCn,L%+yąӟ^X⤎{v%guގ*TOeC$BvJ.Rpb(W=1?EM 53{cIip?r*}]~fIMjt}AVZc^A/4Bo$$xq-3Px^7u ־|Q&g۴E$9>OA xEdKl?S6#3>X5*Q.[Zkp0pK=u Я2"p&RfDVSb.*ަhWmM]LxI35Cnwњ^\\NY'#gdn"/($WX;_bfQ @e`aՍ RGHIr|a^FU-z%V-9F9u%2Ǖ2]{2z?OLj 1{[ejG#ͲCe ʇކuMYF;veU0.<}iyRO7k1!"+}sּs^N\J [6ex  2#3wLo\_VNxAD:ȩ"ҡ kX7:"&g7^i*0*ep;k@cy"P!9>֤ie-KCŴ/L۴|Eѡm9[rZ[H@I`k_i'2R$CyTe _D;rW'L78Ǽ,7 l&:%Lv`筠눭oB2 e ~ّ2ݰ˱A7HuyZeE}!]c-ҠeC6Z(Wu@N-fB i+Js˳49kij+4uyRCc*i>_eJdUBx-R}]MAtԬ1jZi;= dv;]=cP:kNZCQQxְ Фhfnۥ)EFKqwG+i!HZI=CLgwdjL8'E*, U^y`b}"-t=c_RړYܾ=˱ϙM"z~;_b#*=P^pV~xܥߌ7~(VsU6=/9$dLJfvk{]b.Ba`3i'Mŵ$AϞ1Rγ3i7<|`z78jؽmL12 &cy AaQ$i?s ^ea*wcgf<Ž.C%i$e@C|߬%ڻC痉o魲ty'u, uvm6-Ď%O?0tN;I--`9|v,1_6?xW,WwjL5ѫBd͓ނaBmYv [j=v7_~;k1Q%YRdTq' omfjdU_'6rqH.O0>N{ QJljqSܐsQ̨깁kbZ5^\>J4Q:O%i-Xa/>v.3FX}_kGerFrL\w, B}FEpbՖjԛ?w36~t 0Rsr'wVdȅ$ҵj4ǵ>\n"RD>Ag Z1N fQ*FE|mƅj΢W{o2>eV)4> њ>{]xu <8F_\^;WT|$dY<%SNNLΟ,%1jмxELemgsZ^YF]-W(,e*D] O}uW+A'<7:}hHemJgVfn*H|.\ i LƕSi\,3zH.{6H̝~/r͊Gm,q-ȝATi;O3s& "Քlݮ<$)(l\4LBm_ fBIC_ﵱ7zLp5ji'w+kv-ёbO=[U5s-q̞5g!/ endstream endobj 2543 0 obj << /Type /FontDescriptor /FontName /BPTCIN+StandardSymL /Flags 4 /FontBBox [-180 -293 1090 1010] /Ascent 504 /CapHeight 687 /Descent -228 /ItalicAngle 0 /StemV 0 /XHeight 400 /CharSet (/Psi/alpha/epsilon/infinity/phi/rho/summation) /FontFile 2542 0 R >> endobj 2544 0 obj << /Length1 1626 /Length2 16481 /Length3 0 /Length 17333 /Filter /FlateDecode >> stream xڬctf&v6*m۶mWm۶TԻww=ckks-2"e:A{#S1{;:&zFn= %௜ LNŔnj1503`N.JU%u*c0Ζv/n6v.C_;*\,Lf6ayMI9q*@jdci 46s6;l}ۙXS3XC_7ScSTS'[KgKg,m\MWnf/@N-lSwvq6vtpͪ "o..v؛47vu1sz`b`c7`Nlig_hNN&6OwNV翼e0X8ژ01i7 ?"igf`bL f/C{;O ߔ;Hozo}b66r;w Ejr1rOku1OߖڙBKg1KSKc ~Kjgbdcig@: Kck`?_D$i_ E/Q:FHM cae{bg?W :8Yz_'#jglo(ڙ%Gm]Uffmޘ'*-3ݥ3wxRD t8ԡQ ƾ?-b6isPhÆ':ϗy(A>B=fQfLQhoRQI *ĭ WCXg;ϐJIk,C*z+ F~9Na{ )2S1SlϲC ДxF"Ȕ^Yy0גr2"(C+:%N;ȃ6Qt}^ֳ_8o)Ņ (O_$p2Pp ߎQOuS˟Y99|uDjKڱ𡪷ui#ƍn vH &O) `cehwgىL(lG PC*{N++gj~daЖGҎ| ou OtjFpdf( 4"K`.Uu|fA [kS%!Yjٛ5-RzC]ėuΑ=_}2 ZM$ʘ1SSJ<ÑHPcmB-)VL'6ĞU[?ɻ>ɏt3a@=z}9)N[%^/E9Yyv$ZW\EEa5ZJ;C1!#NmD€~Å22vud qC5Tt\Gb:=ẓjf.%EG_=@$}O> XK6-\/p5>_OPTBؐ7gKuző\+hwՄ Nw=q5wYS0V(q,(jiKc֤'}nՈJ kl})YJj7^kGx"D+jM׵}x%f tEnԩ'hp"P'tힶko/BlC:WA^@ًǙ+Jͥ1> !V aV Kgkk4I^TrD^4kG\N0^-;˄pX- =F~WgU"X..eDC[͗;ṅYY {5OO;EZ١:gJ!TPK i@'j,"\ $CZȕg|;T97[j$0*T5H5_ˢFaܾFY7ymDG7a*i;5-C|QC%4 ww9mEA w'毳dUs7a(Cby.׀GJBX}8=&a &D`B6T]M15Hϗ SIhWeY:K\lHYl$~j,PMbaB$=BOL vjeO_ͨ VP\'${ ׄI WN2rE:A>k/”(7F/>-Q1|M5eI$ၐB%,طv+'PRT*(TrS3٘Y2fRo#fکQދGO'TB y _d iߎs+~Bܷls16Xu )0HCgǺӃeO$Eԏu& uL’L)vx0JF-z۸ʋ΋^L21zIckL{@ul(1ULyF1:8<6\ѷ#+*- #QU%L`ӀdH,X h4P&&0*q<6$8ǼIGF¬ bIw֢,@(xՓ{Ӓ Hr0ZY3B#JVbOS>{ 1 wEhpy'w(ԜL:FT|2GA< !F8RWgjx fX.봓 )!pѝ^A` >G./=SvR|w9{9!0@UDLdڐ2M܉ 3iTN oُ(Ose052PƼ@;~Ž轳$o%#%E*L; Fɚc :߸սlp%,;8`U!O.F:|FJ-nW XNC?Y[TigZg\ ˃' _[?]M+}6 ҞpɏnI9׬$0%V :H{<a~>p$U/oY~Ew}it2Т.A-¶wjߪd;ܿP-&|:7Do]J0rFLYC~+uWAm:ޖuG=,Z'<Pqg=IVl4Ä7mJSnw7}a6NPCOa xc7Pp)p>ѨSlY%SD"Ezk NRT,NIP|G+N?]LmW,e~Z'TB7p |ۋ n')\#>o;Iv%ݵ_8kzkvHe]ᗛzPVa&-%;eڪ[;RPkXA4OA撦Yx @2y(9OULK'ڥ-#CiG=4L]՗:wwpt]ztRs7f VBMvtЮcBCaHhj~G(^NJ"-#DڴOx9X|7X Y w KY,􌕎'zE4 *D|C%m. x爳|lI>+3oa*(8xY,+{]Ų lB;7Y8R ץ]V4%`IPs&Ԧ{I Pz5v{DQwc1Fci? .mEԸ3Ta\wECt8Jhp ^I$e0,o4NK#y0.:HR\Q5as/$oLsFq>%d}*12ݴS_m` 2%Ǘ9|aKB o33b8iAc #%$#cq\/V""I\bjgSt>P7n:բy4AViARlM$g^IoBfQN1SbeJ;'(h 0aъhbp5ص ~OE+X6Еeߛ]|% <r6:B]I*So GN8_M<<9lweqFN$ޅ2թ-cw@ r]e$pks åǀ~G$09do%)}w;v2=p%}yS4\ g~H:I<+]']G&H'/d21ݘ--ρl"DG%|j0X+čΈ̉bxUIf?gFa(?n7Ҡz;mFt㩢±v,,b|n+͙ZckAhQтL-Nnƃ*}%^mmh)nb,6@Ce_RDw(?)u^D}e^1o G36_=Jލ0SG=q2A)/niu*xvP|iiUuCSR wr 2mZC!2ިmr)1Fe[)PS'2 _Sj y;kkO{8%ȡ"`X}6NFZ (i?hb^= G#Hhd`}qXE$Film`•@Bt%gv~t}⁌a[lHp3NF?)ck?m;.Dq't)[n_HfέIot6^~4M|;$%6S .t9[QȃV~q" @UcV"LļsiK˻yRn/7o)(a .~m߰gR7!U _u50B b#Ww-^@oR6~ zEtft1l)b I 6v _0bzC?x6oSksqOUsȞ ^ (z{ ?h~5|[Mv^(#/1ӽӉN|Ѻw8Eɜa˟蛺KO@ LsK~IM[BIɼOO[^lsWܦ,d-)˕' ʅԢU)} 4hyv#A:Wp6_vVoO 2<b6cO4ʲP*^;W@{QW5{{)gu-! ͐iYP֛O﹇2*;!C\z}=HwXES4)JjExg܃ޫ' eWMՉf8FjgYQ.1j/f&k ,Fuo _=~"OP56>/ V0)Jca6ڍ*wmp+h<.'We7267"B.a@l-K>XK3O'Н~t4 M"is})Rj0[ nD`[4oZ!+3#wg A0~Gخi)Z.ZnzYxhdgƫ+ hnB!.Zob * {}5f/QC<Ԧᶣ$mhRā .Ωs#WSpTiE}XNpJ5:= mlC+7\Ȑ*Kj`X 9}˰3k#)TP}@PaƹP)tbb5/9?w>x@!j7Ð8J>{ UMrv 5n^"wEgHAѨf9. ֭r,r3ہ:8~'Y?7 YHCdFԜ)nh 0-STQho f^vrlHջ`G=;QشZh[)/%+B1ETC3$@WdQHAƏՔ 5%iAPr< #jG0_,* _lBrXKh2ɗB~GE.Ov8?&ȋ;8}SxщFYn"'e`2ѳH$G,Qȼ4vz"L:Ѳ,"$ur hf)xnf9~nXfLd dܢ~GiR`W:גkHPJ+_a,GC}w3/#wA~{2M'C<4Rb79t:mqNtj&]LT8OK,?RN2ϔi[;O~u~3Ȫc8"*k}1 ?o,Yi]1[Z{G˂BK綛k*g֠e@)pZvZwƢ-+TjoѢԾ }Ϋ`BIsooq'gꩽGxs+%~3e0]<,Gv:{d}~xN9gx1q)PԢ jsZm@6o8ϬJ΢m$-R*!PEN7-x,6-z}*ԝouS=QV-9ի-?:3:@6gCkw_{ ?`rJ/Ed<@Fιxr*x&0[AJ"v%I[)Me^աe(#.Rm A8>uGpD6e| oNԈ=]ǫ)0ZV2|w @9u Tmp>Rf˓AvI/7c10q WD'#w PWJc߈<$9Ìma?}F5R!LQ/>6ҹM|-,GF\j; N~FUHkk^2e[m.`j6*)u=tIGnЂM^3ҩ2C^,fBUz/jH+H?_ մz05:B֖H.o#T[ӏE[.*?u hCצY $n͌0dTJFqElc`Ad#S -BvB' $]j8,HZQ(sӞL~,{t/{ [1'fP]~<u<^+RgFTg/ l2''j粐lPg@|KISbT! >M[#=Ƕ{#c ."n\?S?7ޯpBe x( deqi 5"3V04eeokb?VuF#3uvFWAQE]㏋0ݠU]]oٕ+ X_/ ܣ"` Mf(}OLT"Ͻ-VCLŐmM3`Uk'Y8<'2 ^<߯TQ^W2WG&<ޜ)S*~Jwb,.WhF'~m5^iΈeN7BXEt$3{F Tyk)ܾ9T_b& SZ ]fQ]p&^6>>:7Z@7膖+޾ذ/ }R{j37{[<'d1gbPPa=8rJP^Q'_4%ƚ~!MPi wM,a}UPUDX$jl-1/oȀS~BUiDV\m1V!|HhyamEnoeMig~rpAn ndj7bL)Yя$wqrUk BU770R: q"|]67ꉬ,LP' 31fF?Z, f:JD|\Y)T% wޑWŅ}}j+N>D48lxv ?!k'[ǹJr`gx9^68 `f"fLYٛݒ]D.٩M?ҍeL5U!քF$h"LOЮ:n|<&q("ڮm9139j pP͝&x#QZ_H⚯D5kbAM2y10ƒ&ܸu;zt `-slSpR7׳Il8uʥ#[M=P[0’S ۋSX1 ;/Eۙ`c4 {鈔Y?0oc y5@yw΢ Z88nTN< 1oKz݇(=FCIsbn/,ݤiziLL9&о(nzyzt/ɔ; >Oə{lK |8^ r~JgUjMn7BSOl"F H!<9\Y`Sn,oHym|iƦ-% ~d!uG3'IA &xyXUC28Q%WGڴ> qo>ZAƁy.'#Nw +C /PiZϋ&C|%^[:P.)fHxʌA=QGܝbޡJ lC6E^%c[_(}rȫ<_~iG8>U/K^k]f́fî-F'Rj$$0D |.r:Т_wa* q39>h X^ ̨"[F %i؊: vEYa P;$QTR=Him3I[.Ia[$fz@zX4X Hb@rN4y|Df%/M3խmEC #7?GM0xgo|uQ#j /7=0X d4f/Xw ¨00$TKNidV (j4ExRsf,IZ~R`=|kFݟIѡ^ :%t)gE(_ ΤAO)X-xJYJڃXMfE[ ?Q.T񪱌Sr l,$4gD~!4f Ey /:Î(JPUghMP^qCS88ԃNs` n̲7:g{*@tj$NZT3E lG$5{mP#֐+ `8wot &!\-r!USPI[~BNW)%.Hz'QѰNi=׼a0"zASr8W*s`xRW[6uf HZ(+&wqA4(p/{\eJN^XkO^_|Wu=- g.zОpq&ǨܯSs OfD[ ٻ_ˣ,_ZÝט8õGZz腔8.( N$zi\)|he%^-񀮢DŽfRS|[A'EKB/XQwKG M^xE.ʭw@ݍT_ݞAa&Fޢą1Dmڤn!-"v1UvJ,6Bz~[Ł`{u39QՍ8ܒc+Qr$Rb3T0/nk ơ3=zi K@ T`8ook_׿g|/_󦬜SC8b^܍zWb,2K }a2Bx) .]gQd*ވUBwPwzp2]f[-Yäkt28|%f= )Mu6FzM 5)r2@l" 拱ٷ(--{_5OdzG,<Ƃw, ]_4'ye,78>Zk! ~"3+|T*pdY"jDz0sEӜZ$u1hb/ٸ/Cp]sۦr3[ؓ#X8#Qa#%[҇U0wxN#}v\Hť\^,g*ѯ=ͼ(sRP5dy΄2Tq!Hܘ풵Ɇ")=v jS\Հe&C1 GCy}EեbZJL3'u(PZEMw5ɳQy 絰q~KP5 uJkT羌{݆HdA'^$2 󛯲nF F4wֶ{y$\q s;)` Vv5q5u%)TǏ5XCJӅE`Io-Z&bRG 7f/8@g,G,)z׾uΎ4}G D Q1h'jEp53e&˪WZ1¶6OCZ޻!M+( *a;,AN,RU>Gl<2ksz:  CC:t~% ˱i$ٻ)[uq-xn΂B4ïSo{:})9< צsn"FL!uhX?VEm_ R9մlԠHZ7EnRPa,y,-S_RT gXmՇO~Nj- Ym+^>6+ASaBt ɯqmnG:r^фG^X}l!]-”+a) j\OUBA@ZxrQ )|(]3'?NNB3}/,>(`;0[ö޺PXԨ\1ZNp\qw4)3HxL('LTRMY&3X(drI7HI^ם^gZ\b͇Mh+kpOpL$-SpbbGEDm 7mu! k6 6IwCBTr[ƼiM~9G,.A2g1ӅUH/q5TB;տ[lX8]쪐Q?%F'3Q-}{v)~?jZ'\ ޵^3AG[n(X$ 0܂cQmZAY^5'ΞܢfL T & YhmnV3\pHr e0zchop=8ިg6(Z34eda¢r: 2o-Pf<iv"al> endobj 2546 0 obj << /Length1 1630 /Length2 19452 /Length3 0 /Length 20306 /Filter /FlateDecode >> stream xڬctem&vvŶ+*Ύ*dǶmVEUy>}zOX5q5ǽ((2%lYX 6.N*v6 vr*@sRhlig+n hM@ fghin QWѤgO?&c|z:Y>_\v6@[OkGU lYZbJ2 R)uhd Pr14Ym3;G;[SJsbu&n@w?*=`0w4u쁳>fvJS ddhi $.<-dؙ}ZڙSҿt0Zg#K['3X@gO0{Gdik0F@'OOu=m/ڌ 3glsK[fEo\j?3Ch`@2 B#+{>-s,k#ZkL-԰0[h$i4Ut6Y_ru[S-_tj&?l!*,'%(FY2Tg5G5vׯv/FV.#/&俀X,oh_?OzFQu65)GmIgq@_v&Viε9Ó!% jv=~ۼ5!L|mK'o{G{q{RyD>}T%i^rtX4L*Ow;]钥5u%`c/g#9E;{YP{T)G&ia>I")%(ڔFEW'7(DrT ()B},Io4'Zн_\x"~wWDe\-7 pI#/z Y\mTz¦00"a#}{H\~̝D[H9Zr8kbR3'L\|ôDMLE-p.5i%3R(,=JP0zf! 2Sfy"S/IdI!zv|fu[jSlV{ RoZ~E(jȠP%󒾇Tk.+tWkMLPWsD""HRܟW>~ߊODx+8_U+XLcc][K5=Vѱc;OةK7h"ڮ8C 9OpÚ;} #zC=P38*y1WipOmL>=ؼ:]W xB!x.˫|pvT%KFdmlOjQ!=-A%( g2d~tTj;HPlۺ)+dЎU)D!0Cv !r)7˚F2Ott0;lZ8.txXG/ߠl/e F[|^[`4FUsaFeuճq09C5` .3(J`tĒmo6vo܍%|8>8O\^@Unoǵxˣ$_|``F1 P)5(χ%+ _PMޥ.CؒJu2sBy^«)FBzf2cY#Ƌ2O$ vZwyfm|`vnk0/(M"SjN[.f! ݿV8ay3hta⑸E;z<;ONRڽ\npUx "JzS^vi͚##` ? O 5Z!W8Grs~Ny/L<(NJꑨiT8irEIcG=}G? k#g1 *ytޯֻE/5P䄄ѢEf0xPl8;d-b#dxlZAuxv8hS v$*B,;jd%X5Mi &-m^"BW] DS*F: HU2^zLYGJ^ֳ;9v,ABNفEn_R"څf)%_0GLǒ]^4_fviudM=ceKBLCu)W1y򉷆"Q?%WvŞ]q~_KBˏ?u~EA+"kܽ] Ur}ۺCf>-f7}p2rQS7~ 7+ikMd$:X5cf!̋d4h%."Cnx9}xUco{^m[ r؊~ΔevxW_"Ob !l?~ڶcBVߡF ЅQ,Ft1F(QD :\^+A;K1)bT[#uI!T6 EeS-ɲ44{Â;g0%~;6 ٱBqȭ]Vf1ZztǼܴ47BĔ |S\j2}xz 7_Ac^YDC rcG+eޞuagt}V͋ܐFIc&f` ?@DzЗ Fh *oi c6vYI %mr/MoɜZRk|C!K͚6G\dg(@c|] ;EZ. ?PJ jbxRP3TW /8bCA* h^lQpI:4j ulNV&9 t= ~2ӷ@:J6B0_66H^Τ~zild{V/} I~x/ucB#"-;| o9Bm*Ro^IzK^H|| d~5mB d4xW^MBYK ֝,OrZ;n܄׉ɵ5X? CLnj#Eΰ,- a:R\_7v,8P|e$P{ 4e]@Όˡ%g6cI]8qȯ.H+tamvmTf`^:z*iR\Yө!珥A9bR0'pK0WRׁ } r ]ZbD{W q E5ڎ9%"+M@ّv[ܺ+DddC+i؟-OrC䍒Dar7s08wt/T`ck&?(6iT&8 ,l=(/%9t_渠8U~{Â3\*Ҽ*21zuBc;WX(_zN[@K3rt~}kiJY9){GV2 7#säZ!B1~WEɀTUG2nms.pM$e*I>r9`)*0D=bkw %&kv^}LGR0ULǓMMއ3 5Fѽ,-if~c:g,x!۩BG  j,LlѣDKNpfa޻bY}z-Zk.r b*_Nݳ ޷bTU BcfF/&<|)5_ў_ Xj 9Ci2 O371z-gtMʄˋS&; xF-Db59SBԝ } 9i 1V+D;X# SyUG ec/;(k8K{ f6 j\DP=JWH>DY-յǒigUur؃ 9D#w1%e/He12;&`C-kޮց'쐾 >HW )m >D35ouƳ˂ qLtwSJwi/-0r*QJ+rW$ądSL {Xo8Ñ%6d/K/pZ Cs(jSOk -: >|$>!%ŋ&rwT(\ǸFS8Cob+gS]F1-YMug#L"53.וJ b9S01g꤄= 1=ziMZ>؋Qڙ[Ik'W+Op%"/-L `߁_.^Ϳ$2\۴#/VMt7>)"9wH?T"e >)M/j$ݲNΏ} vvӵ ؒ`ld: H~J,:@BiЊ0dJQ4RxvOrIƶN_#5OEVQ6`Z`yRkV hus  v̰r{8憫%ߍ}*KL 4K7yw "z(^g{G/su]1z݂{3V>fd#)R%#GG:m !!8{i1ba:a; <:O0szLu\8G8'T^~ uE/[2Ji./ASl(GHAW - p\caŅz؉ɆGJv8ҝ"?I X-XG }EMDȃ,J>f_.JL6LGy͈tBh=Q؏L~o(PAǢK =+qA* ֕Th+w*"Z>R$# ѠY FhN9ȏ@U4#v磀Wi991Zp8(MZ{Li~~ pTE0AΑ3z :OFBV4Q/o3>"WsJ۞*7==3=]Pyzxđ7cq0El Ul+|+\2AiǣۉÎyk\<7fzDm* IB tZlӈߠMI5f|׽vïbIxơ~0{Vz|dXU3z>gۍ,Z"w>_^S]KNԖ]cLϣV𠡂Vǥ*;CmMe yrE`"-A#-\EݟԤik[;{ k/x"pnuPtYI҉W4J yO)} n|A TgAվf3u-=j]c2'z@ǰ2h.["}Hj<T;&8I~E ":LHп+Fҙ:!KM(`Aי1}/䲴0ѻb-=]a#goF?YmٷgG3(軙ǣ23{SS:jh*8mӸkbn'+c 𾫩w_3RbG>ˢ/bm q;POj6Ɗw1_oeqsQ78܊Vt ,HS+幺qA=ڧ__7*`̩{쬬+4g$+b?Ay ,g!%{PxFO}y&I,40䱨ZA-Pr-'|˚HXTZ5y_KvTĪ66y ms "64p"m-NU<؈4ZC&kCП/aoKu(\#rw o/*u6"8osIm'*mG&DBjdnJC{fdD,U^Z>2~I1BY)&"48HYWC"fڽ2 KJAnž^qO<(rdΔwaÿɚP{m)C5vܫז0KXg˿pQ34Zn%?\p銜QtC"/˄A)Y=QTo^%DWj,/q(ݖeðkcznU8:KN[.'B_-᣼=^߮,\jr'GTG/?E ᣫFvDRus9O஖ "kn#Q MqRjY<'mUțn447DPo*ZLITWH|QfB?0Yz ˅ǂ$(+x ]?灋L]lboveQdkآgPJkiIo#/Ul ~]eBqZ&5k(E͘ '`D .*Vj,Gx A4kC~I`RUpGõu3c|4+QUb|! aꒃa$V}*")U mM}7Xm5֍*1aIg7k@B==CW>`&^WӋᏚd} ҲPTy/#/^cS _:ⅯoWhb0s>lDU#aݓ.۱_2hO^w"36q tY`p:Ka=xԁ 5n va!/*M_+n\"CtBfpZE`ȡ`aZ5dM32v1늮j `E4l1ne+0 uWt75p൒+E+Vכo<4cf^,dϴA,[5|$/ [x:doڰO&Ι;mf=fP蔶}$S&+C |+I'\P0y)rbEj_z3 UUR!;G]>\Tg1Dl ݐl{ecST IS1PC+nM|`48@vڻz$5J?I/ש%a8#jC2+2"aF$;i35Œxz!H{PNAfURV*Jm r&K]66g dis$' Hl'Y\+28sD%nX43 =ExgiX"\~)qf90{"څ/{yaZ\o %=  m}kT$cxtRÏpaӤΧ晴:"1pڲǒz$.BT ЊArja ߃/-C;(;(x#0]?̙9g{ =FL{ K`'1אXkZh2<Ô4MXⵕS2 oi, X?A!FLyg2"*ÄBՇOAIi?1n+J sgРWUrh pp 1Wٸ3\W{J-P/v ]Rؑq7h~_,ÎA~X hfK0耣%@sxL Ap>ym<󎋵ֱj3k ""NT0sLKs!4Tl2ܐ]}$v= $_R Tr 鏶Yb#hYQW6jkNe5 f¬T# 88ZPfS=X{Qa(XNΐ Z)rP9-(˷`ZvqFo N3h>1YJd2;-hB$b ۓP&ӞGkzz|Eip8#ڌ,'ih N[xPG2&dQ7p \{i<7|wG6 g?9Tk#KiY,̬nYj8A(>#3 A/ÃT!>М3]qHc `?u_E\Kfaz#JLiO9F}7ތmLCz49d*|UV .#Gjֹ[ ڰON:jen)QP@Մ>u!4 х}&<^B%C~6ot\g jYTtٯU;2EJldvȓy39CyRzOSz`'?Om 4щtZux)o(p`KqGf~H{Z*K΁ɤJAcPj8%.4Х(˩q!|t}W2bժzXi&H' 3oCxM['X@1FX5<ܔ FӧaeKR4Ыqc ګ)M/svL <Mb5QV]vͥecHJ h%m&3RbB' s{j;_1`m6Kz80iCoWDގO/X0$Bc;,oylGqD_s*jj8o YA͈PK`LÏfQ幜Tÿɛc #P2O>Fa0"MV,,3usr'&'E/,+;]wP=*+;>xjx_!߮StڜYOAۭDȥZ 9)[>0ZٺOb ;1A}; .dI򐼕n8Z -׺8fK#VN`|fhN*U> :tޣoB?8) u'>VyPLAّJQӏ0KYw'-a%A,vb!YVDt+BC /Bg)m1Y%/STͰ\SyWs0ZʕVYn];%2 V+uC$&V~l>hVSs8V\M/Äp+n r31΅SĔ>zzOHh,A([}U b<9 ndNgY~,ӧ"$,U K!!V̍_mbpLI.tsmnM6uFuaC9ѵG-CVwtQ")ĔCl+P)lZ`q@Ma!߹V64SF1!A9*`Ѝ <޼S#<DN[΋0U'Jf7PqJi <\=xxia95+o ~G,\K0b-e:(o/NNTd*g"ŜQg$0ao n|0<0j?3/c5mgDY/z] ܺ:{<4Et]X-FgAi$,ƙ?!'>tBR2tHWI?&F$T$febH,<]bot`A+iMUמ\(MxZhvw$us%r%S-+x㕓Ü;?zP^ $0U1#krXjtHrZt\RrŻQ);Q+AAǽRލ#G Zy?I*!Ւ3H$3UU GARЗFRֲ _e'Mx;4ҷ 3!h# KnBAPct$ {2R3*Yex^@)/L7DŪ{W, 8G$tۛǃD\[ψrs=R B&2f3`qW{ :v8!og3==#)ZT^ %b߼C_ ag&$-9?9@Ҡ8*)  n?b3 cɘJ7q؟IJw@Qr G"\YSY LDu5,g} ZĶ-]Hk+|r \m-Bj 1U}p~ė7H`Ô3_z >(%H xd꓉ݡ8c!&'-pi2unkQ,F$^Y(1AM.ܕÙS ?K5ˣ}6DELjWRCPvmEˡ>-|pΠ#8)xɒBMAӋM!n4;RxpEJYs"ϥ`pw%$|mгst#IOh'Iŏz0c,1->|6}rǚH=dk ۴օW(erBܬ) +0y{7s %h[#E'4;I/\Rؔ* \> Ϥ <%z;l[e/N6۶w<9n~>fKqa05FiyJ:ij)? KWcDƧ/܁낌R+_)s)n7ԁҟa0}^}YzlB1x ?R[,iJ6 ' H}E4Q6Xo ֜w$Q^fs/zaR>\cSݬg&"a" S6ƒ@ݫ,mBhOrFo/cĨ/|K~W)dІU_|_Xe w'aTޭ|>؈wl!1Zr~wKo8Q. IDLhAk QG2w>X? $RI:,HU}<9S\-Q1Q$'zg ߃'/Tݽ. X4pѼ|ְoɚxhOfS: .0hnV22 PʺңEobnIQ¡IuXنK̨7M\trw +U%ڒ:%͎1NFm\\:iYfnpT+Xu- ?'j5O,QPʵԓ^zVH }s?m~E$;9 !+~UE3e[4jм@]2vG瞺eiB;Y[3ScmWH5+c8=0Oo `|+ M]'& J#} 6nO[lf1Biĥ]~pSUF0߾4'Yj-U sj 1BWBYBFsGb).8s+!| l@n)?29:@$ܬ((&|VxPG^Բ ''…y J8}%H.S& n-qn.6,#u\0>:е[*{q~0 _nAE /7j?́fBflAHY~T=F=I~2NKauOnke//~-^rv|KriWU4s)ԃF`5dfQrOt0qѶA \T>z\05=&ёacY+;nV׬#^Xn9HU5D\`H;tDIGcX?[~>#m7 7wNZXBc2e0 #e${q.WI&0I3Hn~aG^Nv>5%]Lu겐w6Ȝ@Pl^ۍ@3萎TDV$ rbu&5CH:y-ϘSx//Jv,Z0uV)#'ܞޢy^־ΓrW&|dDXL1\hAO\勨]՚Ni9\M .#O} OJ\>샲~ɏΧ/ˌdY]'K(Qv0A@&J mdKp FFTrWQ6(}V9a.k0Q?-`+h#_NoYi4tX! 1^qcX ^1?B /շnQ˚뛀xUʽ16Z66V ]Bˇ[K =O.ꫫsca#X45$x3 UU 9$̴U.6cxOdd\n¨cFpk701,W~yz*vI&E jlAӰ>Y05][dhiw&Hv,Q؈(LVԪҦđ9l"A(X/x$=-4Jðgf#|:ny5?CՕP^q 䃂^ێLpBuȪ uVpz5R`׶#7Uz;)&:ƿe3CJ}mOĎă%5o k3Dm'lW9Msx V=n%aD5 Xb SgȻ; bȱ|WL|1b09GabNcjJJ Q8p@$,_Q4*Vn{ &߃!.B@G^@_+@ OE<~^8]wهL. -)n;T[eO:DGL*{ƻkfo26psW~2^0 9J%]'5\Ǐ/71b굅1{D5EgFDZX ҃l΍WD&B!XWug5W6ݐqs[g !90\D-|"V-U[l,VA-_#2ڭ%BALalj?Cu:FjH]8&yf$&_K צ*)kxUFvU0ɣGA"90arl}<5^zՂ"1V,eB'(‡ap$:t(PO!Hh۸:dn5l O^"V+’%R dlId;gNuq;&S/APkM1.51NgRUE>d\bq]u [V&v2Q޴7VVפi>C80"Ji҈Z\46^hDVmZ<9u&d̷'cj z+i9f0fl߱AIú!V)jZ2"h5ˤsD,#&$g:z؎4G"ST>aNJ@"k92&iΗG&HҜ#$`oGH(7ը_h{eqͅÃs'#ݛ~.gDb2OQ\nih\ثTp8*Uh&A8"Azc87 ۵}3RxgWsIe˥+'qpTUTPc0]KX碠-Gju&b^yУ6OM,AA-k[is,مQo cWW(gc֭#nDi2nÓD{[[- endstream endobj 2547 0 obj << /Type /FontDescriptor /FontName /LKXCOC+NimbusRomNo9L-Regu /Flags 4 /FontBBox [-168 -281 1000 924] /Ascent 678 /CapHeight 651 /Descent -216 /ItalicAngle 0 /StemV 85 /XHeight 450 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/asterisk/at/b/bracketleft/bracketright/c/colon/comma/d/dieresis/dollar/e/eight/emdash/endash/equal/exclam/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/plus/q/quotedblleft/quotedblright/quoteleft/quoteright/r/s/semicolon/seven/six/slash/t/three/tilde/two/u/v/w/x/y/z/zero) /FontFile 2546 0 R >> endobj 2548 0 obj << /Length1 1647 /Length2 15557 /Length3 0 /Length 16405 /Filter /FlateDecode >> stream xڭc]&\e۶mreٶm]fl.L?;gά}g\+⊈̵XI^ atgf`!R3quVS疣WXJaE.V@1c&H `JB KN$jdeaBDIMKKTL<kle$w]R_D."s+[$:$p)) &2w"hfOj V :"g"+g" 'c;p'ں_rpaKdldB׫Ŀt4vǷ_?) Ku1:<\e 2rv5/տpuZgtDN c'3[_Ieo`/ki\ ,}mae_DL:pQ306za]$2_JRy v{15DrD,'d_5rW.+DoLԒK48Zk_05K+S?`7_0*(IKvzҔ7_DD=9Y8qfaq/"<8Yy21011} 8>Ru1m%6uur[m_CxLaזMyC33]'t{CʛJj{3"vBy>=>dhG{1m){Wx}E([A1׋r;:L{*ePӝNnEdO~] g'Oc#C=}y0ny:Uqhr-U Y l} TY;gŝrDKa>#`@9+ΏS`}&E5ܩ؀ôw kT;l7dЗfL.XE]h<|w*1& d}.ǦG9"d ɹJxM=O-U$YhzEKR55k0akӨ, HԠ5f"<$,%G(k #Z5{΃. !G¢q5>x 8$IIڐ?dg2*B]rRg0ֱq ôh T>^7Pzaf(b/WwL B'*gZ&x1w]HE/9HyzMrgJ Wp:DP?P[V}El򋲲x`1ϋҟ dHSpX5bbMWU=fNMSZ?{yM:\pqe'LLW7m$+vQbb\wzxkeu0O_ % GI/K1c6q O[Y2xT]0=y^9\T✙r> +_֢wW2.vfl  fJ9MU@KDuHd*FQ~VPu~_D%Ti9BeԦ_5ǫKT"4v!h \RC6a뛭c#Od9J1 0u ؃'WGxat[)~[3ӱX c#{BLjoY_Hy 4*l[g}3m2$1"9"sZ \K6xHV+??њ3 _PS jpFtTY=r<Ҽ\uE_w갼w cL63:Y֤Ʊ󙁼z H0*vZ^Co)l `C/'lLk*԰y桤O U&vcI碏FP1ЌvdV6kOxtc52N2?w %^o6q8M K3Jly"pbk@e&k`s$ eYBJ<$q^)+[u'Nm|ĝ 2=r jk5㎬s#xOͺ12`S /rut>x0HV6w4!R\r'wCF?ucKVu#i𬝰nc_k" 7,cffNz-G . ϔ931: ōv2wo\iU=-1N,41fQr-Q+.jቄul"{a G:0GhQ;>}*m4~jpk{ >̓+f=AgLB4ip-7̑Etk6w5;nS̚RK M싃$EtQ,"^scϡ>iv'{u0;}}|w/X-_vqsEsm=111<2=E\Ub$B[)WJĐڳXEoս6M"=KkAgK`l<~p!`gS4/ytطt3xwe'mo"*7+d7[gANyilYYP3z0!DiV# /K! [_sqCJTb#~%~ /X0nTtU|+)-Ui\rS.p[΀ɰ 5sΥ] L!'gr'ǻD %@5AVDy&F $j,YmVG ^5>1n}q0Ť]ozxp5 z߃ඃj_|"zA{OJ fLѯ+Mm8^DN:牑62 4ҼG=:د%d#w*xOo\deG:J[QF$WūJQ;WH_1? xoPrVW{PS`&"i: yxZQ"m`U_v;Bhk`ʪc:rt{lXC&pSr Rh;<1_&s5jBUnh{o44Zs -.lNXk…G&Ϊlw*=hWoŊ,ҪmhCx;[S2?-Fײ5 0BpW0PYn[Dž^-FR 5j- !.AufEUR՘t#ٌE`W]RYNitfF:1e2w"ֳJH_uE=jDA47Vhc =_ˬb|1΁ 3E;HsoOzO0G^y)w©!q5ixQUdQMW} h Guŝ_\_&:s`M;/T~#ՄKE_0f[ y{OQIv7H엒&ڶGSR&3sdj?./R,]Z {s '-sx* A9|6!tR>6TאH> f{!"G8^QNWS(y6M֪ѵȪ{0-wɩ&|e􂜶6UԆt/`ĢT/tq)M/!47LuޞO]sHx{jT$ f^51LD -FNv`FTlH(]t6! 㐮KBsC($sB-&hƥ*dNA%N<:m?շ(ɷ|Ab؜r2jG5n71[~ cp^4PS ct_w E*鐌j)AC'cHCnutN\OvAΩ!"6?qpE闷(E90>>WSx7qCT}ϱnIPG~h3jw6&J6ſI?jŕ_ pHhY7Pk82s^oGim/=E~md yIͅlG簾C ;iI&nzգFB ?IН*83~6a8*.A!f$LcJ"N4SGS~F]; s*z-jlqAǼkԥ66eytO2H, 1}/~JlYK0NNYJЂf#:ʹiZ̬dGDA{mk*YIuzc/\t :v(>I7vic@#D~xW0=/pV! Uk_]=NˊЁ)~a&l&IZFb;K!-@LS_EQ4Jآuyn(!Y D\UM:$Mm0 Uխ<" qo:3 ])A3TlP(c]0H&Dޓuy!gein W{䊯կwz;Õ NGJi7C!"RIg}}uQ(c0 fyL/<{G6Lkr]N#y'薦1UPfz i hqcVBC_0j N=e8wRG(S#ri(%ɻ}AZ{e8Y]BpW=[J?sfGɒfi9$ޞ3l5!-=t%Px2. |Eh8$j~ s1ǩOtKZY(hFY+iK!͖H)|PJh=8SW%)MG5Ι10 zɄ%Nη\@?v[٣IZ,޾j0y::ۦPS[>7KVΘiug lAuJּjGj&1{"Xvdy%wl'UY[-t74(".2irfsv`jIߦH;_&uKB5wB5_L1?3q,7ت %G=|ʉ^ ISVܽfe&sfItmz-JY 6Nԃ|hۑm2PڃrImN}J<'|:Dz-3h5;9"liʳN2wLߐCVam+&$ӛmvƺ*؋΀T7\nMaI7_&ZtVEϼIKAЪ],89]#9|uD.@W6:{Hܛ}N<'e$^ܰ~VP3mo98߯M&#!,P];&ƭ}1vƵlݺBT%(,VT=ۏA@|*J ,i0I?w9n6'Cm}՚ժA& ۪a$nX2b^9M #bSN~O 2z#_{S} \uԨ2%|E{$>uLrtü+eLm'o( e 1xP۫W9c@J9/a@y2%Rʜ0b+rlu#-KFd`uߠPDTz4H6Hi^zڙ{zb"CBMq?cۙ ;oqã!^`͞Ow>X#('sWE=lyGQ($ 7 NG/NJtZ)We*09,1 SɑN!LAUb@SMcE>g A_fS1KB]IC#8񤔟 񽳮50CY9[vڻpyxLa"eY)QVI C~ڹUM;> kYNֳ[EhtWVe4~V;$ș3-H*!<;R_=ʏJB"B hǖ}c[1Nǰ2%F@|ơAcJ2˫V 9%TBݤlOn}mA xh39oj1}ih$>ǰFB>l( GNv寄H |i~ 7dW1QŸDYʼnP8.^ ؄R<'9oWG3(zՠ~ai1%?z+fD9ny0AoM{w2sS5hTiGX!"&X*bd+ySsN_+MW1BQshlHd_+t0Xao$ 5MK(  fV\S#4c.pn j[Jw+g҅Nc<(]@a5o1HQM5%$ qă_)DK(M*+/qػb z?ZֱrB2|SNȵ*#QZ6o+YEO%Jʊ۳т|}?6s/h.68՘J'sg>PmH9qguI0e 1x쟺V5F;#Ͼ&aw2VZEfy^זaGc~AI2.M7 JɦDݜ}SLaԘ{Xγ%qR#~*~*M6?@Ө2a%d UBҬ)hb4*fP8x2[idj`;% Wt!>z}8')Nn u9?%^yCckv7@[,%Ϋ"RKa%d(h0ic^^ʢAY;W%Jb*Gî{!5yBg2:ر+^݌z[hxhŐ QzJ# ܨiџ=U s3j~V`bh(ԡ}E'0.9,L8t]ed_uzr:F;br JpHRy _@h iη7 %D6v\V0IF51c`=EyO[;4ID> blSފWg y^Klݵ* kDdŮH.HsN,ZE녆9r8zAD}[ K?^o2oNskN#Z܇^/+vC$,7bCZMmMCmF_M!@AHJ,E$h]gd F.OYfh&!K >bvTr>y.J7IoZJ &G`pG^ BU] 0W5efBljU5Ƣ?$ cT HO!Vr;xp)prTNoqŶǹb\6!ֺאQ$ʲu!^WX njIIBQ!"@{paddvdl8d3CnQ`oM+~Cx1͊a1h1{q%;̷=&qnևdN`rKJ~ y{aNJBcDTEc%1 .8&{\ ɌXɧ Euݴs'I0.v;aqk6@jI 1I% 4;: ?B|۪)|Xcj Y}s8& (:SkBe%>مq ɹI!<9^J7I7.}'>}xTboKH;2i؇,#mc)e>ox3}a 'prl =Lhޟ<eKM'oHbqu"þx?mQH K؞Rw}Ƌ~ NG71ŤI&Rv_]=F2%@)to6efn1nxR*Jr.sbfg@Ge9>ɅV぀oXO#ULTs;]haARP+%ULH?1%z9R&H֏B,nA [׸Y%tCA$M|T]?Uey;u`8Z4T#=80,+7m6-.˥\1һQMuZnCb #0R(+seGb ,uǑbB#Xb$\m6; .AIPvpny(*[ƳO / _$S4KHj~yT' *l}+| A:~U};[~Rr!l䎜ch0Z (KXO3hE2L`gYD b 8)qpvh܄)0񂐐Iޢ [΅/ЦBS"R :aŨ' |гP`6 SlxU6LyOP hZxoMȝΦ 517 7.i-I#~\4 ܙrn{Kw Tqg[0u g(:wBs1'b2Rc{gA|S?ڜIKlJH_f#3׹fa&rrZU۝\p=]2T\fBv.bBp!wiLTĽStmO8_UoicwS_2?+c|7);C#Sa_XU$P5{e5oem8<\ Mw9t ~)I1(g!^vXt~4L9磰J7SQbְ̆)ec}lF'UU<(N(P91yS\񚽔Bp%0mGw<2Go^tJucL:Hq!|5 I~KՔ$ۃ'Yͽ+Y)%$=p3c :5sSP.3])LJZ$S?I;O/`{E6x훯b(i~\lT_i[2rԨFC1ew!.NxV8ޜhk9Qco2/7}cIUlm!P2Cf38pl~\-dϫ82ݼ қCrͤmMh|(rprK@2 ʰp>N#YMKh?Uݯ`P$zjqŞӑ#-1uB筥W(X[-IMKL8Dui2w͟y"w&؅"TanlTCP {e"ȝ귁S4OamH|uCF5L>43w1|nKTs AP״KR?-cJxT,U2ewk;z (Cq/rk,*wYIE&,-R('C)nU0kŐۄIDA2-_Q~((@lԬTK *Ƨ$ND {xG$߶岢.f< tyHMz(*j& yE*2h_{Rf` T; UߚGr-XdxYsUTG='%5- <=E]H"7Ď>KnPx1ݙTg (ngDW4UEpH#BjTK32&;؊'B(:n%k#Ÿ~7ʤ6ŝ4e55V ȝ>|tu9Zb e~o 2̈&rU (.ENv^09zm=툊l-2 N'NS4+B3^3c=c=sXraGR;X$Sg>{e9]9u[W3eK ,;EO#X 3`0Z,ǟhC10~ZZVLZLEDvu<~ \ƟMF8Q7!9cGƔ]k.Jvڋo-aIûfKp"K͉r `Y̙ג&k#=nr.ƽj|Z倈 GN-t i6[dT GΓf,[yod$I]pf=V[QUȝo9QˌMclۛVb1T#JyO5ŋgD%-}c.&}z!WŊ%m#wMɚjkvdjG{4 G~ _4q,I>}~lm7h2>]yHiʠdYt\Etĩy@njqB8rqR_~-b*Υƞ&V}d~^Շ.WȪḛ#y7@rTf‹}lL$*K%rHyFr4*/ncJ|(!܏Gzp$F6}:iY F 5)?Lz[](}tԅ^jqQ7e"E |Fʹ$dVܟ sOo:dI_;<>~hדt8x|]D$Aȵ 7^k,J7g,_LHCo(\Ӿ5ô~\є'N6%\=[i`_F2Yٕu1(!u `gԿqm(=X%Zv+l؏9=,(s2djd'qV?DF=oXTCTϔr]<(疔adƺRwNz-ԷoBgHa+EIhΆ%.Q&@VaMpy%պ 5X B6m#;*FO|O䏅d[]\oÎX;`h6|J2; ˰*rN#T.Pf+l׌1|m hmtBA^q>njejLPFE=~_/wǕ{I3|=5_/p2qLn "0Ik77u HG$-TPҼ9Zg sm.Y^8D٨i'hm8; rk.%,,D~%jhbǭ8r7 Fp-N:4j%~;/Rm#sP\vnE,N[ 9VĨ}HTꬑ士*z> HӯEHG4b;X+~_0xB6NQ57pq ס8r)sӎZSl+,LVz "{" E6P"]N\;-C8'sMHd(,SN,o?kM>f ӯ~;佼"efHǐ6CQT6J9gPkՓ*gZ(4è_|$IZ|>O|62NJ ~) ftƗӮTONVx Z  #6~CMY'I+*/|l!ɖb`Mֵ^+ꗺHG{Vd>S2P鳮i }.w> endobj 2507 0 obj << /Type /Encoding /Differences [2/fi/fl 33/exclam/quotedbl/numbersign/dollar/percent 39/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright 95/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright 136/circumflex 147/quotedblleft/quotedblright 150/endash/emdash/tilde 168/dieresis 181/mu] >> endobj 1817 0 obj << /Type /Font /Subtype /Type1 /BaseFont /DFYHMQ+CMEX10 /FontDescriptor 2519 0 R /FirstChar 0 /LastChar 41 /Widths 2501 0 R >> endobj 1696 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ZPNLVP+TeX-cmex9 /FontDescriptor 2527 0 R /FirstChar 91 /LastChar 91 /Widths 2502 0 R >> endobj 758 0 obj << /Type /Font /Subtype /Type1 /BaseFont /VZTUNF+CMMI10 /FontDescriptor 2521 0 R /FirstChar 58 /LastChar 96 /Widths 2505 0 R >> endobj 750 0 obj << /Type /Font /Subtype /Type1 /BaseFont /SOSTRQ+CMR10 /FontDescriptor 2523 0 R /FirstChar 40 /LastChar 93 /Widths 2506 0 R >> endobj 33 0 obj << /Type /Font /Subtype /Type1 /BaseFont /EHXWKP+CMSY10 /FontDescriptor 2525 0 R /FirstChar 0 /LastChar 110 /Widths 2511 0 R >> endobj 742 0 obj << /Type /Font /Subtype /Type1 /BaseFont /VLQMQY+MSAM10 /FontDescriptor 2529 0 R /FirstChar 6 /LastChar 6 /Widths 2509 0 R >> endobj 765 0 obj << /Type /Font /Subtype /Type1 /BaseFont /INYQND+MSBM10 /FontDescriptor 2531 0 R /FirstChar 80 /LastChar 90 /Widths 2504 0 R >> endobj 19 0 obj << /Type /Font /Subtype /Type1 /BaseFont /XAIIQH+NimbusMonL-Regu-Extend_850 /FontDescriptor 2533 0 R /FirstChar 33 /LastChar 152 /Widths 2514 0 R /Encoding 2507 0 R >> endobj 743 0 obj << /Type /Font /Subtype /Type1 /BaseFont /DGFRIJ+NimbusMonL-ReguObli /FontDescriptor 2535 0 R /FirstChar 39 /LastChar 122 /Widths 2508 0 R /Encoding 2507 0 R >> endobj 16 0 obj << /Type /Font /Subtype /Type1 /BaseFont /QEMJED+NimbusSanL-Bold /FontDescriptor 2537 0 R /FirstChar 65 /LastChar 86 /Widths 2517 0 R /Encoding 2507 0 R >> endobj 32 0 obj << /Type /Font /Subtype /Type1 /BaseFont /VZEIDX+NimbusSanL-Regu /FontDescriptor 2539 0 R /FirstChar 65 /LastChar 111 /Widths 2512 0 R /Encoding 2507 0 R >> endobj 30 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GXJRLN+NimbusSanL-ReguItal /FontDescriptor 2541 0 R /FirstChar 65 /LastChar 86 /Widths 2513 0 R /Encoding 2507 0 R >> endobj 766 0 obj << /Type /Font /Subtype /Type1 /BaseFont /BPTCIN+StandardSymL /FontDescriptor 2543 0 R /FirstChar 89 /LastChar 229 /Widths 2503 0 R >> endobj 17 0 obj << /Type /Font /Subtype /Type1 /BaseFont /DBRSZI+NimbusRomNo9L-Medi /FontDescriptor 2545 0 R /FirstChar 2 /LastChar 148 /Widths 2516 0 R /Encoding 2507 0 R >> endobj 18 0 obj << /Type /Font /Subtype /Type1 /BaseFont /LKXCOC+NimbusRomNo9L-Regu /FontDescriptor 2547 0 R /FirstChar 2 /LastChar 168 /Widths 2515 0 R /Encoding 2507 0 R >> endobj 35 0 obj << /Type /Font /Subtype /Type1 /BaseFont /NPGEGZ+NimbusRomNo9L-ReguItal /FontDescriptor 2549 0 R /FirstChar 2 /LastChar 181 /Widths 2510 0 R /Encoding 2507 0 R >> endobj 20 0 obj << /Type /Pages /Count 6 /Parent 2550 0 R /Kids [6 0 R 27 0 R 37 0 R 76 0 R 161 0 R 257 0 R] >> endobj 357 0 obj << /Type /Pages /Count 6 /Parent 2550 0 R /Kids [354 0 R 452 0 R 548 0 R 645 0 R 703 0 R 719 0 R] >> endobj 734 0 obj << /Type /Pages /Count 6 /Parent 2550 0 R /Kids [730 0 R 736 0 R 745 0 R 752 0 R 761 0 R 769 0 R] >> endobj 778 0 obj << /Type /Pages /Count 6 /Parent 2550 0 R /Kids [774 0 R 796 0 R 802 0 R 807 0 R 815 0 R 823 0 R] >> endobj 838 0 obj << /Type /Pages /Count 6 /Parent 2550 0 R /Kids [832 0 R 840 0 R 848 0 R 854 0 R 863 0 R 901 0 R] >> endobj 913 0 obj << /Type /Pages /Count 6 /Parent 2550 0 R /Kids [909 0 R 916 0 R 923 0 R 933 0 R 942 0 R 949 0 R] >> endobj 960 0 obj << /Type /Pages /Count 6 /Parent 2551 0 R /Kids [955 0 R 963 0 R 973 0 R 979 0 R 989 0 R 997 0 R] >> endobj 1010 0 obj << /Type /Pages /Count 6 /Parent 2551 0 R /Kids [1005 0 R 1012 0 R 1020 0 R 1030 0 R 1040 0 R 1049 0 R] >> endobj 1060 0 obj << /Type /Pages /Count 6 /Parent 2551 0 R /Kids [1057 0 R 1062 0 R 1067 0 R 1073 0 R 1080 0 R 1088 0 R] >> endobj 1104 0 obj << /Type /Pages /Count 6 /Parent 2551 0 R /Kids [1099 0 R 1109 0 R 1118 0 R 1128 0 R 1137 0 R 1142 0 R] >> endobj 1153 0 obj << /Type /Pages /Count 6 /Parent 2551 0 R /Kids [1149 0 R 1158 0 R 1165 0 R 1186 0 R 1194 0 R 1201 0 R] >> endobj 1214 0 obj << /Type /Pages /Count 6 /Parent 2551 0 R /Kids [1208 0 R 1229 0 R 1238 0 R 1247 0 R 1259 0 R 1267 0 R] >> endobj 1280 0 obj << /Type /Pages /Count 6 /Parent 2552 0 R /Kids [1276 0 R 1284 0 R 1291 0 R 1295 0 R 1310 0 R 1320 0 R] >> endobj 1342 0 obj << /Type /Pages /Count 6 /Parent 2552 0 R /Kids [1338 0 R 1348 0 R 1357 0 R 1366 0 R 1374 0 R 1381 0 R] >> endobj 1394 0 obj << /Type /Pages /Count 6 /Parent 2552 0 R /Kids [1387 0 R 1396 0 R 1401 0 R 1407 0 R 1413 0 R 1429 0 R] >> endobj 1443 0 obj << /Type /Pages /Count 6 /Parent 2552 0 R /Kids [1438 0 R 1448 0 R 1454 0 R 1461 0 R 1465 0 R 1472 0 R] >> endobj 1484 0 obj << /Type /Pages /Count 6 /Parent 2552 0 R /Kids [1481 0 R 1486 0 R 1492 0 R 1497 0 R 1505 0 R 1510 0 R] >> endobj 1522 0 obj << /Type /Pages /Count 6 /Parent 2552 0 R /Kids [1516 0 R 1525 0 R 1533 0 R 1540 0 R 1546 0 R 1574 0 R] >> endobj 1589 0 obj << /Type /Pages /Count 6 /Parent 2553 0 R /Kids [1584 0 R 1594 0 R 1603 0 R 1613 0 R 1623 0 R 1629 0 R] >> endobj 1640 0 obj << /Type /Pages /Count 6 /Parent 2553 0 R /Kids [1636 0 R 1644 0 R 1652 0 R 1658 0 R 1666 0 R 1675 0 R] >> endobj 1689 0 obj << /Type /Pages /Count 6 /Parent 2553 0 R /Kids [1684 0 R 1692 0 R 1700 0 R 1708 0 R 1715 0 R 1735 0 R] >> endobj 1753 0 obj << /Type /Pages /Count 6 /Parent 2553 0 R /Kids [1747 0 R 1756 0 R 1767 0 R 1775 0 R 1787 0 R 1793 0 R] >> endobj 1804 0 obj << /Type /Pages /Count 6 /Parent 2553 0 R /Kids [1800 0 R 1806 0 R 1812 0 R 1819 0 R 1825 0 R 1831 0 R] >> endobj 1844 0 obj << /Type /Pages /Count 6 /Parent 2553 0 R /Kids [1838 0 R 1859 0 R 1866 0 R 1874 0 R 1880 0 R 1886 0 R] >> endobj 1901 0 obj << /Type /Pages /Count 6 /Parent 2554 0 R /Kids [1896 0 R 1905 0 R 1912 0 R 1921 0 R 1929 0 R 1939 0 R] >> endobj 1953 0 obj << /Type /Pages /Count 6 /Parent 2554 0 R /Kids [1947 0 R 1955 0 R 1961 0 R 1968 0 R 1977 0 R 1983 0 R] >> endobj 1995 0 obj << /Type /Pages /Count 6 /Parent 2554 0 R /Kids [1990 0 R 1998 0 R 2005 0 R 2009 0 R 2013 0 R 2017 0 R] >> endobj 2024 0 obj << /Type /Pages /Count 6 /Parent 2554 0 R /Kids [2021 0 R 2055 0 R 2075 0 R 2156 0 R 2253 0 R 2348 0 R] >> endobj 2443 0 obj << /Type /Pages /Count 2 /Parent 2554 0 R /Kids [2440 0 R 2498 0 R] >> endobj 2550 0 obj << /Type /Pages /Count 36 /Parent 2555 0 R /Kids [20 0 R 357 0 R 734 0 R 778 0 R 838 0 R 913 0 R] >> endobj 2551 0 obj << /Type /Pages /Count 36 /Parent 2555 0 R /Kids [960 0 R 1010 0 R 1060 0 R 1104 0 R 1153 0 R 1214 0 R] >> endobj 2552 0 obj << /Type /Pages /Count 36 /Parent 2555 0 R /Kids [1280 0 R 1342 0 R 1394 0 R 1443 0 R 1484 0 R 1522 0 R] >> endobj 2553 0 obj << /Type /Pages /Count 36 /Parent 2555 0 R /Kids [1589 0 R 1640 0 R 1689 0 R 1753 0 R 1804 0 R 1844 0 R] >> endobj 2554 0 obj << /Type /Pages /Count 26 /Parent 2555 0 R /Kids [1901 0 R 1953 0 R 1995 0 R 2024 0 R 2443 0 R] >> endobj 2555 0 obj << /Type /Pages /Count 170 /Kids [2550 0 R 2551 0 R 2552 0 R 2553 0 R 2554 0 R] >> endobj 2556 0 obj << /Names [(Doc-Start) 15 0 R (L.X7805D2BB7CE4D455) 1958 0 R (L.X784E1255874FCA8A) 1616 0 R (L.X787D826579603719) 723 0 R (L.X7880D34485C60BAF) 1213 0 R (L.X7881E03E812140F4) 1798 0 R] /Limits [(Doc-Start) (L.X7881E03E812140F4)] >> endobj 2557 0 obj << /Names [(L.X789380D28018EC3F) 937 0 R (L.X789DC358819A8F54) 1475 0 R (L.X78AEA40F7AD9D541) 1950 0 R (L.X78E078567D19D433) 1418 0 R (L.X78E33C3A843B0261) 1023 0 R (L.X78F0B1BC81FB109C) 1678 0 R] /Limits [(L.X789380D28018EC3F) (L.X78F0B1BC81FB109C)] >> endobj 2558 0 obj << /Names [(L.X7903286078F8051B) 1934 0 R (L.X790C614985BFAE16) 1711 0 R (L.X794679BE7F9EB5C1) 1579 0 R (L.X79577EB27BE8524B) 1597 0 R (L.X7964BF0081CC8352) 1669 0 R (L.X7969103F7A8598F9) 1973 0 R] /Limits [(L.X7903286078F8051B) (L.X7969103F7A8598F9)] >> endobj 2559 0 obj << /Names [(L.X79742B7183051D99) 1468 0 R (L.X797F43607AD8660D) 1878 0 R (L.X79826B16785E8BD3) 1399 0 R (L.X7982D699803ECD0F) 1632 0 R (L.X799B12F085ACB609) 1639 0 R (L.X79ACAEF5865414A0) 952 0 R] /Limits [(L.X79742B7183051D99) (L.X79ACAEF5865414A0)] >> endobj 2560 0 obj << /Names [(L.X79BE5D497CB2E59E) 1299 0 R (L.X79C878697F99A10F) 1489 0 R (L.X79CA175481F8105F) 926 0 R (L.X79E00D3A8367D65A) 1670 0 R (L.X79E76B6F7D177E27) 1986 0 R (L.X79F3261F86C29F6D) 982 0 R] /Limits [(L.X79BE5D497CB2E59E) (L.X79F3261F86C29F6D)] >> endobj 2561 0 obj << /Names [(L.X79FD980E7B24DB9C) 1503 0 R (L.X7A11F29F7BBF45BB) 1233 0 R (L.X7A195E317D2AB7CE) 1083 0 R (L.X7A26E2537DFF4409) 1759 0 R (L.X7A2B54EF868AA752) 1951 0 R (L.X7A36C3C67B0062E8) 1034 0 R] /Limits [(L.X79FD980E7B24DB9C) (L.X7A36C3C67B0062E8)] >> endobj 2562 0 obj << /Names [(L.X7A38EB3178961F3E) 1270 0 R (L.X7A42FF7D87FC34AC) 1114 0 R (L.X7A4EA98D794CF410) 1964 0 R (L.X7A5CB74485184FEE) 1772 0 R (L.X7A5D5419846FC867) 1626 0 R (L.X7A679B0A7816B030) 1071 0 R] /Limits [(L.X7A38EB3178961F3E) (L.X7A679B0A7816B030)] >> endobj 2563 0 obj << /Names [(L.X7A6828148490BD2E) 837 0 R (L.X7A6F98FD85F02BFE) 2058 0 R (L.X7A814D518460862E) 1738 0 R (L.X7A85F8AF8154D387) 1687 0 R (L.X7A93308C82637F4F) 739 0 R (L.X7A97AD477E7638DE) 1890 0 R] /Limits [(L.X7A6828148490BD2E) (L.X7A97AD477E7638DE)] >> endobj 2564 0 obj << /Names [(L.X7AA203A380BC4C79) 1656 0 R (L.X7AB5E5CE7FDF7132) 1915 0 R (L.X7ACDC5377CD17451) 1943 0 R (L.X7AD61C237D8D3849) 851 0 R (L.X7AD9F1D27C52BC0F) 1803 0 R (L.X7ADE7E95867A14E1) 818 0 R] /Limits [(L.X7AA203A380BC4C79) (L.X7ADE7E95867A14E1)] >> endobj 2565 0 obj << /Names [(L.X7AE2B2CD7C647990) 1451 0 R (L.X7AEA9F807E6FFEFF) 1959 0 R (L.X7AEE64467FB1E0B9) 1093 0 R (L.X7AFA64D97A1F39A3) 1001 0 R (L.X7AFD3844859B20BF) 959 0 R (L.X7B0A6E1F82686B43) 1607 0 R] /Limits [(L.X7AE2B2CD7C647990) (L.X7B0A6E1F82686B43)] >> endobj 2566 0 obj << /Names [(L.X7B0C81B88604C448) 1829 0 R (L.X7B24748A7CE8D4B9) 928 0 R (L.X7B24BE418010F596) 1442 0 R (L.X7B2A0CC481D2366F) 946 0 R (L.X7B31613D8538BD29) 1036 0 R (L.X7B3858B27A9E509A) 1791 0 R] /Limits [(L.X7B0C81B88604C448) (L.X7B3858B27A9E509A)] >> endobj 2567 0 obj << /Names [(L.X7B47D82485B66F1D) 1883 0 R (L.X7B4EF2017B2C61AD) 1390 0 R (L.X7B50943B8014134F) 1703 0 R (L.X7B50D3417F6FD7C6) 1952 0 R (L.X7B68119F85E9EC6D) 1891 0 R (L.X7B689C0284AC4296) 846 0 R] /Limits [(L.X7B47D82485B66F1D) (L.X7B689C0284AC4296)] >> endobj 2568 0 obj << /Names [(L.X7B6C2BED8319C811) 1521 0 R (L.X7B6DB8CC84FCAC1C) 958 0 R (L.X7B88DEB37F28404A) 1145 0 R (L.X7B9E353D852851AA) 800 0 R (L.X7B9E71987E4294A7) 1161 0 R (L.X7BBA5DCD7A8BD60D) 826 0 R] /Limits [(L.X7B6C2BED8319C811) (L.X7BBA5DCD7A8BD60D)] >> endobj 2569 0 obj << /Names [(L.X7BC245E37EB7B23F) 1385 0 R (L.X7BCA10CE8660357F) 1279 0 R (L.X7BFBBA5784C293C1) 1672 0 R (L.X7BFEDA52835A601D) 1404 0 R (L.X7C1B374583AFB923) 1232 0 R (L.X7C2425A786F09054) 767 0 R] /Limits [(L.X7BC245E37EB7B23F) (L.X7C2425A786F09054)] >> endobj 2570 0 obj << /Names [(L.X7C37D467791CE99B) 1697 0 R (L.X7C45AA317BB1195F) 1024 0 R (L.X7C5407EF87849857) 1971 0 R (L.X7C6A58327BD6B685) 1790 0 R (L.X7C6BB07C87853C00) 1360 0 R (L.X7C72994A825228E7) 1822 0 R] /Limits [(L.X7C37D467791CE99B) (L.X7C72994A825228E7)] >> endobj 2571 0 obj << /Names [(L.X7C8C1E6A7E3497F0) 1993 0 R (L.X7C9F4D657F9BA5A1) 756 0 R (L.X7CD08C8C780543C4) 1009 0 R (L.X7CDA1B547D55E6FB) 845 0 R (L.X7CDDDFE47A10A008) 1241 0 R (L.X7CE150ED7C3DC455) 953 0 R] /Limits [(L.X7C8C1E6A7E3497F0) (L.X7CE150ED7C3DC455)] >> endobj 2572 0 obj << /Names [(L.X7CF15D2084499869) 1779 0 R (L.X7CFF98D483502053) 1132 0 R (L.X7D02E0FE8735D3E6) 1152 0 R (L.X7D0F48B685A3ECDD) 1015 0 R (L.X7D24F8BF7F9A7BF1) 1918 0 R (L.X7D27F6E27B9A0D35) 1834 0 R] /Limits [(L.X7CF15D2084499869) (L.X7D27F6E27B9A0D35)] >> endobj 2573 0 obj << /Names [(L.X7D48DE2A84474C6A) 1131 0 R (L.X7D4EDA0A854EBFEF) 1889 0 R (L.X7D6583347C0D4292) 1303 0 R (L.X7D870C9387C47D9F) 1121 0 R (L.X7D87DD6380B2CE69) 1211 0 R (L.X7D8981AF7DFE9814) 1695 0 R] /Limits [(L.X7D48DE2A84474C6A) (L.X7D8981AF7DFE9814)] >> endobj 2574 0 obj << /Names [(L.X7D9A39BF801948C8) 1113 0 R (L.X7DECB0A57C798583) 1250 0 R (L.X7DFB63A97E67C0A1) 722 0 R (L.X7E0CCCD7866ADB94) 1323 0 R (L.X7E17107686A845DB) 1688 0 R (L.X7E1E7C5287919CDB) 1871 0 R] /Limits [(L.X7D9A39BF801948C8) (L.X7E1E7C5287919CDB)] >> endobj 2575 0 obj << /Names [(L.X7E2CB7DF83B514A8) 724 0 R (L.X7E33FD56792DBF3D) 1035 0 R (L.X7E3E174B7954AA6B) 836 0 R (L.X7E48F9C67E7FB7B5) 1502 0 R (L.X7E6926C6850E7C4E) 993 0 R (L.X7E6E4DDA79574FDB) 1587 0 R] /Limits [(L.X7E2CB7DF83B514A8) (L.X7E6E4DDA79574FDB)] >> endobj 2576 0 obj << /Names [(L.X7E7ED91C79BF3EF3) 805 0 R (L.X7E7FBCC87D5562AB) 1815 0 R (L.X7E9021697A61A60F) 1981 0 R (L.X7E92DC9581F96594) 1634 0 R (L.X7EBBE86D85CC90C0) 1988 0 R (L.X7ECC593583E68A6C) 772 0 R] /Limits [(L.X7E7ED91C79BF3EF3) (L.X7ECC593583E68A6C)] >> endobj 2577 0 obj << /Names [(L.X7ECE60E1873B49A6) 904 0 R (L.X7ED2EF368203AF47) 1917 0 R (L.X7EE68B58872D7E82) 1441 0 R (L.X7EE808BB7D1E487A) 1262 0 R (L.X7EF49A257D6DB53B) 1661 0 R (L.X7F25479781E6E109) 810 0 R] /Limits [(L.X7ECE60E1873B49A6) (L.X7F25479781E6E109)] >> endobj 2578 0 obj << /Names [(L.X7F2703417F270341) 819 0 R (L.X7F2F630984A9D3D6) 755 0 R (L.X7F34306B81DC2776) 1908 0 R (L.X7F3B8CC8831DA0E4) 1384 0 R (L.X7F40AF3B81C252DC) 1410 0 R (L.X7F4C3AD2795A8D7A) 1378 0 R] /Limits [(L.X7F2703417F270341) (L.X7F4C3AD2795A8D7A)] >> endobj 2579 0 obj << /Names [(L.X7F4CB9DB7CD97178) 1025 0 R (L.X7F5BE77B7F343182) 1301 0 R (L.X7F71186281DEA83A) 927 0 R (L.X7F95362485759ACB) 1823 0 R (L.X7F9C0A727EE075B7) 1263 0 R (L.X7FDF54BA81115D88) 1778 0 R] /Limits [(L.X7F4CB9DB7CD97178) (L.X7FDF54BA81115D88)] >> endobj 2580 0 obj << /Names [(L.X8000B6597EF0282F) 844 0 R (L.X8014A1F181ECD8AA) 1877 0 R (L.X80166D8D837FEB58) 945 0 R (L.X80171AA687FFDC70) 1987 0 R (L.X801C88D578DA6ACA) 1251 0 R (L.X8020A9357AD0BA92) 1543 0 R] /Limits [(L.X8000B6597EF0282F) (L.X8020A9357AD0BA92)] >> endobj 2581 0 obj << /Names [(L.X80283A2F7C8101BD) 1925 0 R (L.X802DD9FB79A9ACA7) 1452 0 R (L.X8032E53078264ABB) 1916 0 R (L.X8033E9A67BA155C8) 1899 0 R (L.X80433A4B792880EF) 1975 0 R (L.X804AAFF2867080F7) 1900 0 R] /Limits [(L.X80283A2F7C8101BD) (L.X804AAFF2867080F7)] >> endobj 2582 0 obj << /Names [(L.X805BF7147C68CACD) 843 0 R (L.X805DF25C84585FD6) 1965 0 R (L.X806384B4815EFF2E) 1092 0 R (L.X806EBEC77C16E657) 1863 0 R (L.X8072B0DA78FBE562) 1966 0 R (L.X807C52E67A440DEB) 1500 0 R] /Limits [(L.X805BF7147C68CACD) (L.X807C52E67A440DEB)] >> endobj 2583 0 obj << /Names [(L.X808A4061809A6E67) 984 0 R (L.X809376187C1525AA) 1633 0 R (L.X80E17FA27DCAB676) 1140 0 R (L.X80EAA631863F805B) 733 0 R (L.X80ED89C079CD0D09) 1314 0 R (L.X80EDF3D682E7EF3F) 1513 0 R] /Limits [(L.X808A4061809A6E67) (L.X80EDF3D682E7EF3F)] >> endobj 2584 0 obj << /Names [(L.X80F192497C008691) 740 0 R (L.X80F8DFAD7D67CBEC) 1835 0 R (L.X81004B007EC5DF58) 1091 0 R (L.X81088A66816BCAE4) 1324 0 R (L.X810AB3DB844FFCE9) 1419 0 R (L.X8122BA417F705997) 1198 0 R] /Limits [(L.X80F192497C008691) (L.X8122BA417F705997)] >> endobj 2585 0 obj << /Names [(L.X8123456781234567) 812 0 R (L.X8134BE2B8478BE8A) 1606 0 R (L.X813F226F855590EE) 1043 0 R (L.X816353397F25B62E) 1212 0 R (L.X816A07997D9A7075) 1477 0 R (L.X8170B52D7C154247) 1033 0 R] /Limits [(L.X8123456781234567) (L.X8170B52D7C154247)] >> endobj 2586 0 obj << /Names [(L.X817224657C9829C4) 1016 0 R (L.X817D0A647D3331EB) 1796 0 R (L.X818F0E6583E01D4B) 1352 0 R (L.X81AACBDD86E89D7D) 1191 0 R (L.X81B1391281B13912) 820 0 R (L.X81B73ABB87DA8E49) 799 0 R] /Limits [(L.X817224657C9829C4) (L.X81B73ABB87DA8E49)] >> endobj 2587 0 obj << /Names [(L.X81B7EE4279398F67) 1204 0 R (L.X81B9B40B7B2D97D5) 1909 0 R (L.X81CBEAFF7B9DE6EF) 1617 0 R (L.X81D3230A797FE6E3) 835 0 R (L.X81F6E4A785F368B0) 1313 0 R (L.X81FB5BE27903EC32) 1002 0 R] /Limits [(L.X81B7EE4279398F67) (L.X81FB5BE27903EC32)] >> endobj 2588 0 obj << /Names [(L.X81FE1F387DFCCB22) 1647 0 R (L.X820327D6854A50B5) 1718 0 R (L.X8217D830871286D8) 1780 0 R (L.X82231CF08073695F) 1479 0 R (L.X822465E884D0F484) 828 0 R (L.X82257DE97D1822AA) 2002 0 R] /Limits [(L.X81FE1F387DFCCB22) (L.X82257DE97D1822AA)] >> endobj 2589 0 obj << /Names [(L.X8228A1F57A29B8F4) 1679 0 R (L.X823386037F450B0E) 1508 0 R (L.X82366C277E218130) 1770 0 R (L.X823827927D6A8235) 1000 0 R (L.X823B9A797EE42F6D) 1070 0 R (L.X82440B78845F7F6E) 1351 0 R] /Limits [(L.X8228A1F57A29B8F4) (L.X82440B78845F7F6E)] >> endobj 2590 0 obj << /Names [(L.X8253374284B475B6) 811 0 R (L.X825E35757D778787) 1146 0 R (L.X825F42F68179D2AB) 1371 0 R (L.X8263CE4A790D294A) 1393 0 R (L.X8271A4697FDA97B2) 1578 0 R (L.X827E39957A87EB51) 1944 0 R] /Limits [(L.X8253374284B475B6) (L.X827E39957A87EB51)] >> endobj 2591 0 obj << /Names [(L.X828095537C91FDFA) 1751 0 R (L.X82899B64802A4BCE) 1869 0 R (L.X829C14A383B5BF59) 1828 0 R (L.X82A38F5F858CF3FC) 1862 0 R (L.X82D18907800FE3D9) 1648 0 R (L.X82E5987E81487D18) 741 0 R] /Limits [(L.X828095537C91FDFA) (L.X82E5987E81487D18)] >> endobj 2592 0 obj << /Names [(L.X82EBFAAB7F5BFD4A) 1752 0 R (L.X82FA9F65854D98A6) 1392 0 R (L.X8301FA9F7C6C7445) 1771 0 R (L.X8308D685809A4E2F) 1926 0 R (L.X8320D1C180A1AAAD) 1797 0 R (L.X83231E717CCB0247) 1163 0 R] /Limits [(L.X82EBFAAB7F5BFD4A) (L.X83231E717CCB0247)] >> endobj 2593 0 obj << /Names [(L.X832847A17FD0D142) 1841 0 R (L.X832DA51986A3882C) 912 0 R (L.X8358D43981EBE970) 947 0 R (L.X8366CC3685F0BC85) 1325 0 R (L.X836BAA9A7EBD08B1) 777 0 R (L.X838F3CB3872CEF95) 1369 0 R] /Limits [(L.X832847A17FD0D142) (L.X838F3CB3872CEF95)] >> endobj 2594 0 obj << /Names [(L.X839CFE4C7A567D4D) 1287 0 R (L.X83A0356F839C696F) 2159 0 R (L.X83A5C59278E13248) 1008 0 R (L.X83C5F8FE7827EAA7) 1391 0 R (L.X83F400A681CFC0D6) 1234 0 R (L.X83F44E397C56F2E0) 1980 0 R] /Limits [(L.X839CFE4C7A567D4D) (L.X83F44E397C56F2E0)] >> endobj 2595 0 obj << /Names [(L.X8422A310854C09B0) 1520 0 R (L.X842E227E8785168E) 1528 0 R (L.X843034687D9C75B0) 968 0 R (L.X8431985183B63BB7) 1994 0 R (L.X84520C7983538806) 1315 0 R (L.X845B4DBE83288D2D) 1302 0 R] /Limits [(L.X8422A310854C09B0) (L.X845B4DBE83288D2D)] >> endobj 2596 0 obj << /Names [(L.X848D3F7B805DEB66) 1242 0 R (L.X8495870687195324) 1112 0 R (L.X84B2BE66780EFBF9) 1933 0 R (L.X84D51EBB784E7C5D) 1974 0 R (L.X84DA928083B103A0) 1932 0 R (L.X84EDF67B86B4154C) 1052 0 R] /Limits [(L.X848D3F7B805DEB66) (L.X84EDF67B86B4154C)] >> endobj 2597 0 obj << /Names [(L.X84F3673D7BBF5956) 1536 0 R (L.X850A28C579137220) 1417 0 R (L.X850C23D07C9A9B19) 929 0 R (L.X85135CEB86E61D49) 749 0 R (L.X851592C7811D3D2A) 1252 0 R (L.X85303BAE7BD46D81) 1942 0 R] /Limits [(L.X84F3673D7BBF5956) (L.X85303BAE7BD46D81)] >> endobj 2598 0 obj << /Names [(L.X853D34A5796CEB73) 1341 0 R (L.X856D927378C33548) 994 0 R (L.X856DDA207EDDF256) 1490 0 R (L.X8572A3037DA66F88) 1459 0 R (L.X857B89847A649A26) 1478 0 R (L.X857E36ED814A40B8) 1458 0 R] /Limits [(L.X853D34A5796CEB73) (L.X857E36ED814A40B8)] >> endobj 2599 0 obj << /Names [(L.X857EFE567C05C981) 1457 0 R (L.X8585C6A982489FC3) 1843 0 R (L.X858721967BE44000) 1298 0 R (L.X858ADA3B7A684421) 985 0 R (L.X85A0419580ED0391) 1501 0 R (L.X85AA5C6587559C1C) 757 0 R] /Limits [(L.X857EFE567C05C981) (L.X85AA5C6587559C1C)] >> endobj 2600 0 obj << /Names [(L.X85B692177E2A745D) 1168 0 R (L.X85B8699680B9D786) 1432 0 R (L.X85D4B26E7FB38D57) 1017 0 R (L.X85D671F4824B4B0C) 1809 0 R (L.X85E20C518360AB70) 1816 0 R (L.X85E3BD26856424F7) 936 0 R] /Limits [(L.X85B692177E2A745D) (L.X85E3BD26856424F7)] >> endobj 2601 0 obj << /Names [(L.X85E526367878F72A) 1972 0 R (L.X85FDDF0B7B7D87FB) 857 0 R (L.X860EF39B841380A1) 2001 0 R (L.X861D32FB81EF0D77) 966 0 R (L.X8626E2B57D01F2DC) 1469 0 R (L.X8638F5A67D6E50C1) 1810 0 R] /Limits [(L.X85E526367878F72A) (L.X8638F5A67D6E50C1)] >> endobj 2602 0 obj << /Names [(L.X864091AA7D4AFE86) 920 0 R (L.X8642D0BD789DA9B5) 1162 0 R (L.X86442DCD7A0B2146) 967 0 R (L.X865534267C8E902A) 1272 0 R (L.X865FE28D828C1EAD) 1470 0 R (L.X866EB39483DDAE72) 983 0 R] /Limits [(L.X864091AA7D4AFE86) (L.X866EB39483DDAE72)] >> endobj 2603 0 obj << /Names [(L.X866FC1117814B64D) 1577 0 R (L.X8673277C7F6C04C3) 1750 0 R (L.X86755AAC83A0AF4B) 1197 0 R (L.X8688C0E187B5C7DB) 1476 0 R (L.X86A5A7C67F625A40) 1760 0 R (L.X86A92CB184CBD3C7) 1190 0 R] /Limits [(L.X866FC1117814B64D) (L.X86A92CB184CBD3C7)] >> endobj 2604 0 obj << /Names [(L.X86E9D6DE7F1A07E6) 1671 0 R (L.X86F070E0807DC34E) 992 0 R (L.X86F10D9E79AB8796) 1842 0 R (L.X87039FD179AD3009) 1924 0 R (L.X870DE258833C5AA0) 748 0 R (L.X871286437DE7A6A4) 1927 0 R] /Limits [(L.X86E9D6DE7F1A07E6) (L.X871286437DE7A6A4)] >> endobj 2605 0 obj << /Names [(L.X87137A257E761291) 1416 0 R (L.X871508567CB34D96) 1288 0 R (L.X871FD301820717A4) 1102 0 R (L.X8728BCC9842A6E5D) 1094 0 R (L.X8730B90A862A3B3E) 1370 0 R (L.X873950F67D4A9184) 1300 0 R] /Limits [(L.X87137A257E761291) (L.X873950F67D4A9184)] >> endobj 2606 0 obj << /Names [(L.X873EA5EE85699832) 1655 0 R (L.X8744BA5E78BCF3F9) 919 0 R (L.X874DED8E86BC180B) 969 0 R (L.X8764ABCF854C695E) 1377 0 R (L.X87677B0787B4461A) 976 0 R (L.X87691AB67FF5621B) 1588 0 R] /Limits [(L.X873EA5EE85699832) (L.X87691AB67FF5621B)] >> endobj 2607 0 obj << /Names [(L.X8777388C7885E335) 1519 0 R (L.X878970A17E580224) 1495 0 R (L.X8799F4BF81B0842B) 1649 0 R (L.X87AD54F87C5EE77E) 1103 0 R (L.X87AFE2C078031CE4) 1870 0 R (L.X87BDB89B7AAFE8AD) 921 0 R] /Limits [(L.X8777388C7885E335) (L.X87BDB89B7AAFE8AD)] >> endobj 2608 0 obj << /Names [(L.X87C3D1B984960984) 764 0 R (L.X87C753EB840C34D3) 1739 0 R (L.X87C8B0B178496F6A) 827 0 R (L.X87E5849784BC60D2) 1598 0 R (L.X87EB64ED831CCE99) 1189 0 R (L.X87F7CB8B7A8BE624) 1271 0 R] /Limits [(L.X87C3D1B984960984) (L.X87F7CB8B7A8BE624)] >> endobj 2609 0 obj << /Names [(chapter*.3) 79 0 R (chapter*.4) 2059 0 R (chapter.1) 80 0 R (chapter.2) 84 0 R (chapter.3) 95 0 R (chapter.4) 167 0 R] /Limits [(chapter*.3) (chapter.4)] >> endobj 2610 0 obj << /Names [(chapter.5) 292 0 R (chapter.6) 484 0 R (chapter.7) 569 0 R (cite.Alltop84) 1712 0 R (cite.BM03) 1379 0 R (cite.Br) 1740 0 R] /Limits [(chapter.5) (cite.Br)] >> endobj 2611 0 obj << /Names [(cite.Brouwer98) 1713 0 R (cite.Chen69) 1054 0 R (cite.GDT91) 1304 0 R (cite.GG03) 2003 0 R (cite.GS85) 1690 0 R (cite.Gallager.1962) 1537 0 R] /Limits [(cite.Brouwer98) (cite.Gallager.1962)] >> endobj 2612 0 obj << /Names [(cite.Gao03) 1133 0 R (cite.HHKK07) 1411 0 R (cite.HP03) 727 0 R (cite.Han99) 1445 0 R (cite.He72) 1273 0 R (cite.JH04) 1122 0 R] /Limits [(cite.Gao03) (cite.JH04)] >> endobj 2613 0 obj << /Names [(cite.Jo04) 1444 0 R (cite.Leon82) 977 0 R (cite.Leon88) 1053 0 R (cite.Leon91) 725 0 R (cite.MS83) 726 0 R (cite.Sloane72) 1704 0 R] /Limits [(cite.Jo04) (cite.Sloane72)] >> endobj 2614 0 obj << /Names [(cite.St93) 1529 0 R (cite.TSSFC04) 1544 0 R (cite.Zimmermann96) 1055 0 R (page.1) 14 0 R (page.10) 647 0 R (page.100) 1499 0 R] /Limits [(cite.St93) (page.100)] >> endobj 2615 0 obj << /Names [(page.101) 1507 0 R (page.102) 1512 0 R (page.103) 1518 0 R (page.104) 1527 0 R (page.105) 1535 0 R (page.106) 1542 0 R] /Limits [(page.101) (page.106)] >> endobj 2616 0 obj << /Names [(page.107) 1548 0 R (page.108) 1576 0 R (page.109) 1586 0 R (page.11) 705 0 R (page.110) 1596 0 R (page.111) 1605 0 R] /Limits [(page.107) (page.111)] >> endobj 2617 0 obj << /Names [(page.112) 1615 0 R (page.113) 1625 0 R (page.114) 1631 0 R (page.115) 1638 0 R (page.116) 1646 0 R (page.117) 1654 0 R] /Limits [(page.112) (page.117)] >> endobj 2618 0 obj << /Names [(page.118) 1660 0 R (page.119) 1668 0 R (page.12) 721 0 R (page.120) 1677 0 R (page.121) 1686 0 R (page.122) 1694 0 R] /Limits [(page.118) (page.122)] >> endobj 2619 0 obj << /Names [(page.123) 1702 0 R (page.124) 1710 0 R (page.125) 1717 0 R (page.126) 1737 0 R (page.127) 1749 0 R (page.128) 1758 0 R] /Limits [(page.123) (page.128)] >> endobj 2620 0 obj << /Names [(page.129) 1769 0 R (page.13) 732 0 R (page.130) 1777 0 R (page.131) 1789 0 R (page.132) 1795 0 R (page.133) 1802 0 R] /Limits [(page.129) (page.133)] >> endobj 2621 0 obj << /Names [(page.134) 1808 0 R (page.135) 1814 0 R (page.136) 1821 0 R (page.137) 1827 0 R (page.138) 1833 0 R (page.139) 1840 0 R] /Limits [(page.134) (page.139)] >> endobj 2622 0 obj << /Names [(page.14) 738 0 R (page.140) 1861 0 R (page.141) 1868 0 R (page.142) 1876 0 R (page.143) 1882 0 R (page.144) 1888 0 R] /Limits [(page.14) (page.144)] >> endobj 2623 0 obj << /Names [(page.145) 1898 0 R (page.146) 1907 0 R (page.147) 1914 0 R (page.148) 1923 0 R (page.149) 1931 0 R (page.15) 747 0 R] /Limits [(page.145) (page.15)] >> endobj 2624 0 obj << /Names [(page.150) 1941 0 R (page.151) 1949 0 R (page.152) 1957 0 R (page.153) 1963 0 R (page.154) 1970 0 R (page.155) 1979 0 R] /Limits [(page.150) (page.155)] >> endobj 2625 0 obj << /Names [(page.156) 1985 0 R (page.157) 1992 0 R (page.158) 2000 0 R (page.159) 2007 0 R (page.16) 754 0 R (page.160) 2011 0 R] /Limits [(page.156) (page.160)] >> endobj 2626 0 obj << /Names [(page.161) 2015 0 R (page.162) 2019 0 R (page.163) 2023 0 R (page.164) 2057 0 R (page.165) 2077 0 R (page.166) 2158 0 R] /Limits [(page.161) (page.166)] >> endobj 2627 0 obj << /Names [(page.167) 2255 0 R (page.168) 2350 0 R (page.169) 2442 0 R (page.17) 763 0 R (page.170) 2500 0 R (page.18) 771 0 R] /Limits [(page.167) (page.18)] >> endobj 2628 0 obj << /Names [(page.19) 776 0 R (page.2) 29 0 R (page.20) 798 0 R (page.21) 804 0 R (page.22) 809 0 R (page.23) 817 0 R] /Limits [(page.19) (page.23)] >> endobj 2629 0 obj << /Names [(page.24) 825 0 R (page.25) 834 0 R (page.26) 842 0 R (page.27) 850 0 R (page.28) 856 0 R (page.29) 865 0 R] /Limits [(page.24) (page.29)] >> endobj 2630 0 obj << /Names [(page.3) 39 0 R (page.30) 903 0 R (page.31) 911 0 R (page.32) 918 0 R (page.33) 925 0 R (page.34) 935 0 R] /Limits [(page.3) (page.34)] >> endobj 2631 0 obj << /Names [(page.35) 944 0 R (page.36) 951 0 R (page.37) 957 0 R (page.38) 965 0 R (page.39) 975 0 R (page.4) 78 0 R] /Limits [(page.35) (page.4)] >> endobj 2632 0 obj << /Names [(page.40) 981 0 R (page.41) 991 0 R (page.42) 999 0 R (page.43) 1007 0 R (page.44) 1014 0 R (page.45) 1022 0 R] /Limits [(page.40) (page.45)] >> endobj 2633 0 obj << /Names [(page.46) 1032 0 R (page.47) 1042 0 R (page.48) 1051 0 R (page.49) 1059 0 R (page.5) 163 0 R (page.50) 1064 0 R] /Limits [(page.46) (page.50)] >> endobj 2634 0 obj << /Names [(page.51) 1069 0 R (page.52) 1075 0 R (page.53) 1082 0 R (page.54) 1090 0 R (page.55) 1101 0 R (page.56) 1111 0 R] /Limits [(page.51) (page.56)] >> endobj 2635 0 obj << /Names [(page.57) 1120 0 R (page.58) 1130 0 R (page.59) 1139 0 R (page.6) 259 0 R (page.60) 1144 0 R (page.61) 1151 0 R] /Limits [(page.57) (page.61)] >> endobj 2636 0 obj << /Names [(page.62) 1160 0 R (page.63) 1167 0 R (page.64) 1188 0 R (page.65) 1196 0 R (page.66) 1203 0 R (page.67) 1210 0 R] /Limits [(page.62) (page.67)] >> endobj 2637 0 obj << /Names [(page.68) 1231 0 R (page.69) 1240 0 R (page.7) 356 0 R (page.70) 1249 0 R (page.71) 1261 0 R (page.72) 1269 0 R] /Limits [(page.68) (page.72)] >> endobj 2638 0 obj << /Names [(page.73) 1278 0 R (page.74) 1286 0 R (page.75) 1293 0 R (page.76) 1297 0 R (page.77) 1312 0 R (page.78) 1322 0 R] /Limits [(page.73) (page.78)] >> endobj 2639 0 obj << /Names [(page.79) 1340 0 R (page.8) 454 0 R (page.80) 1350 0 R (page.81) 1359 0 R (page.82) 1368 0 R (page.83) 1376 0 R] /Limits [(page.79) (page.83)] >> endobj 2640 0 obj << /Names [(page.84) 1383 0 R (page.85) 1389 0 R (page.86) 1398 0 R (page.87) 1403 0 R (page.88) 1409 0 R (page.89) 1415 0 R] /Limits [(page.84) (page.89)] >> endobj 2641 0 obj << /Names [(page.9) 550 0 R (page.90) 1431 0 R (page.91) 1440 0 R (page.92) 1450 0 R (page.93) 1456 0 R (page.94) 1463 0 R] /Limits [(page.9) (page.94)] >> endobj 2642 0 obj << /Names [(page.95) 1467 0 R (page.96) 1474 0 R (page.97) 1483 0 R (page.98) 1488 0 R (page.99) 1494 0 R (section*.1) 31 0 R] /Limits [(page.95) (section*.1)] >> endobj 2643 0 obj << /Names [(section*.2) 34 0 R (section.1.1) 81 0 R (section.1.2) 82 0 R (section.1.3) 83 0 R (section.2.1) 85 0 R (section.2.2) 92 0 R] /Limits [(section*.2) (section.2.2)] >> endobj 2644 0 obj << /Names [(section.3.1) 96 0 R (section.3.2) 100 0 R (section.3.3) 102 0 R (section.3.4) 106 0 R (section.3.5) 109 0 R (section.3.6) 112 0 R] /Limits [(section.3.1) (section.3.6)] >> endobj 2645 0 obj << /Names [(section.4.1) 168 0 R (section.4.10) 279 0 R (section.4.2) 170 0 R (section.4.3) 175 0 R (section.4.4) 191 0 R (section.4.5) 196 0 R] /Limits [(section.4.1) (section.4.5)] >> endobj 2646 0 obj << /Names [(section.4.6) 202 0 R (section.4.7) 207 0 R (section.4.8) 263 0 R (section.4.9) 273 0 R (section.5.1) 293 0 R (section.5.2) 302 0 R] /Limits [(section.4.6) (section.5.2)] >> endobj 2647 0 obj << /Names [(section.5.3) 369 0 R (section.5.4) 375 0 R (section.5.5) 380 0 R (section.5.6) 400 0 R (section.5.7) 456 0 R (section.5.8) 482 0 R] /Limits [(section.5.3) (section.5.8)] >> endobj 2648 0 obj << /Names [(section.6.1) 485 0 R (section.6.2) 556 0 R (section.7.1) 570 0 R (section.7.2) 584 0 R (section.7.3) 653 0 R (section.7.4) 667 0 R] /Limits [(section.6.1) (section.7.4)] >> endobj 2649 0 obj << /Names [(section.7.5) 673 0 R (section.7.6) 691 0 R (section.7.7) 713 0 R (subsection.2.1.1) 86 0 R (subsection.2.1.2) 87 0 R (subsection.2.1.3) 88 0 R] /Limits [(section.7.5) (subsection.2.1.3)] >> endobj 2650 0 obj << /Names [(subsection.2.1.4) 89 0 R (subsection.2.1.5) 90 0 R (subsection.2.1.6) 91 0 R (subsection.2.2.1) 93 0 R (subsection.2.2.2) 94 0 R (subsection.3.1.1) 97 0 R] /Limits [(subsection.2.1.4) (subsection.3.1.1)] >> endobj 2651 0 obj << /Names [(subsection.3.1.2) 98 0 R (subsection.3.1.3) 99 0 R (subsection.3.2.1) 101 0 R (subsection.3.3.1) 103 0 R (subsection.3.3.2) 104 0 R (subsection.3.3.3) 105 0 R] /Limits [(subsection.3.1.2) (subsection.3.3.3)] >> endobj 2652 0 obj << /Names [(subsection.3.4.1) 107 0 R (subsection.3.4.2) 108 0 R (subsection.3.5.1) 110 0 R (subsection.3.5.2) 111 0 R (subsection.3.6.1) 113 0 R (subsection.3.6.2) 164 0 R] /Limits [(subsection.3.4.1) (subsection.3.6.2)] >> endobj 2653 0 obj << /Names [(subsection.3.6.3) 165 0 R (subsection.3.6.4) 166 0 R (subsection.4.1.1) 169 0 R (subsection.4.10.1) 280 0 R (subsection.4.10.10) 289 0 R (subsection.4.10.11) 290 0 R] /Limits [(subsection.3.6.3) (subsection.4.10.11)] >> endobj 2654 0 obj << /Names [(subsection.4.10.12) 291 0 R (subsection.4.10.2) 281 0 R (subsection.4.10.3) 282 0 R (subsection.4.10.4) 283 0 R (subsection.4.10.5) 284 0 R (subsection.4.10.6) 285 0 R] /Limits [(subsection.4.10.12) (subsection.4.10.6)] >> endobj 2655 0 obj << /Names [(subsection.4.10.7) 286 0 R (subsection.4.10.8) 287 0 R (subsection.4.10.9) 288 0 R (subsection.4.2.1) 171 0 R (subsection.4.2.2) 172 0 R (subsection.4.2.3) 173 0 R] /Limits [(subsection.4.10.7) (subsection.4.2.3)] >> endobj 2656 0 obj << /Names [(subsection.4.2.4) 174 0 R (subsection.4.3.1) 176 0 R (subsection.4.3.10) 185 0 R (subsection.4.3.11) 186 0 R (subsection.4.3.12) 187 0 R (subsection.4.3.13) 188 0 R] /Limits [(subsection.4.2.4) (subsection.4.3.13)] >> endobj 2657 0 obj << /Names [(subsection.4.3.14) 189 0 R (subsection.4.3.15) 190 0 R (subsection.4.3.2) 177 0 R (subsection.4.3.3) 178 0 R (subsection.4.3.4) 179 0 R (subsection.4.3.5) 180 0 R] /Limits [(subsection.4.3.14) (subsection.4.3.5)] >> endobj 2658 0 obj << /Names [(subsection.4.3.6) 181 0 R (subsection.4.3.7) 182 0 R (subsection.4.3.8) 183 0 R (subsection.4.3.9) 184 0 R (subsection.4.4.1) 192 0 R (subsection.4.4.2) 193 0 R] /Limits [(subsection.4.3.6) (subsection.4.4.2)] >> endobj 2659 0 obj << /Names [(subsection.4.4.3) 194 0 R (subsection.4.4.4) 195 0 R (subsection.4.5.1) 197 0 R (subsection.4.5.2) 198 0 R (subsection.4.5.3) 199 0 R (subsection.4.5.4) 200 0 R] /Limits [(subsection.4.4.3) (subsection.4.5.4)] >> endobj 2660 0 obj << /Names [(subsection.4.5.5) 201 0 R (subsection.4.6.1) 203 0 R (subsection.4.6.2) 204 0 R (subsection.4.6.3) 205 0 R (subsection.4.6.4) 206 0 R (subsection.4.7.1) 208 0 R] /Limits [(subsection.4.5.5) (subsection.4.7.1)] >> endobj 2661 0 obj << /Names [(subsection.4.7.2) 209 0 R (subsection.4.7.3) 260 0 R (subsection.4.7.4) 261 0 R (subsection.4.7.5) 262 0 R (subsection.4.8.1) 264 0 R (subsection.4.8.2) 265 0 R] /Limits [(subsection.4.7.2) (subsection.4.8.2)] >> endobj 2662 0 obj << /Names [(subsection.4.8.3) 266 0 R (subsection.4.8.4) 267 0 R (subsection.4.8.5) 268 0 R (subsection.4.8.6) 269 0 R (subsection.4.8.7) 270 0 R (subsection.4.8.8) 271 0 R] /Limits [(subsection.4.8.3) (subsection.4.8.8)] >> endobj 2663 0 obj << /Names [(subsection.4.8.9) 272 0 R (subsection.4.9.1) 274 0 R (subsection.4.9.2) 275 0 R (subsection.4.9.3) 276 0 R (subsection.4.9.4) 277 0 R (subsection.4.9.5) 278 0 R] /Limits [(subsection.4.8.9) (subsection.4.9.5)] >> endobj 2664 0 obj << /Names [(subsection.5.1.1) 294 0 R (subsection.5.1.2) 295 0 R (subsection.5.1.3) 296 0 R (subsection.5.1.4) 297 0 R (subsection.5.1.5) 298 0 R (subsection.5.1.6) 299 0 R] /Limits [(subsection.5.1.1) (subsection.5.1.6)] >> endobj 2665 0 obj << /Names [(subsection.5.1.7) 300 0 R (subsection.5.1.8) 301 0 R (subsection.5.2.1) 303 0 R (subsection.5.2.10) 364 0 R (subsection.5.2.11) 365 0 R (subsection.5.2.12) 366 0 R] /Limits [(subsection.5.1.7) (subsection.5.2.12)] >> endobj 2666 0 obj << /Names [(subsection.5.2.13) 367 0 R (subsection.5.2.14) 368 0 R (subsection.5.2.2) 304 0 R (subsection.5.2.3) 305 0 R (subsection.5.2.4) 358 0 R (subsection.5.2.5) 359 0 R] /Limits [(subsection.5.2.13) (subsection.5.2.5)] >> endobj 2667 0 obj << /Names [(subsection.5.2.6) 360 0 R (subsection.5.2.7) 361 0 R (subsection.5.2.8) 362 0 R (subsection.5.2.9) 363 0 R (subsection.5.3.1) 370 0 R (subsection.5.3.2) 371 0 R] /Limits [(subsection.5.2.6) (subsection.5.3.2)] >> endobj 2668 0 obj << /Names [(subsection.5.3.3) 372 0 R (subsection.5.3.4) 373 0 R (subsection.5.3.5) 374 0 R (subsection.5.4.1) 376 0 R (subsection.5.4.2) 377 0 R (subsection.5.4.3) 378 0 R] /Limits [(subsection.5.3.3) (subsection.5.4.3)] >> endobj 2669 0 obj << /Names [(subsection.5.4.4) 379 0 R (subsection.5.5.1) 381 0 R (subsection.5.5.10) 390 0 R (subsection.5.5.11) 391 0 R (subsection.5.5.12) 392 0 R (subsection.5.5.13) 393 0 R] /Limits [(subsection.5.4.4) (subsection.5.5.13)] >> endobj 2670 0 obj << /Names [(subsection.5.5.14) 394 0 R (subsection.5.5.15) 395 0 R (subsection.5.5.16) 396 0 R (subsection.5.5.17) 397 0 R (subsection.5.5.18) 398 0 R (subsection.5.5.19) 399 0 R] /Limits [(subsection.5.5.14) (subsection.5.5.19)] >> endobj 2671 0 obj << /Names [(subsection.5.5.2) 382 0 R (subsection.5.5.3) 383 0 R (subsection.5.5.4) 384 0 R (subsection.5.5.5) 385 0 R (subsection.5.5.6) 386 0 R (subsection.5.5.7) 387 0 R] /Limits [(subsection.5.5.2) (subsection.5.5.7)] >> endobj 2672 0 obj << /Names [(subsection.5.5.8) 388 0 R (subsection.5.5.9) 389 0 R (subsection.5.6.1) 401 0 R (subsection.5.6.2) 402 0 R (subsection.5.6.3) 403 0 R (subsection.5.6.4) 404 0 R] /Limits [(subsection.5.5.8) (subsection.5.6.4)] >> endobj 2673 0 obj << /Names [(subsection.5.6.5) 455 0 R (subsection.5.7.1) 457 0 R (subsection.5.7.10) 466 0 R (subsection.5.7.11) 467 0 R (subsection.5.7.12) 468 0 R (subsection.5.7.13) 469 0 R] /Limits [(subsection.5.6.5) (subsection.5.7.13)] >> endobj 2674 0 obj << /Names [(subsection.5.7.14) 470 0 R (subsection.5.7.15) 471 0 R (subsection.5.7.16) 472 0 R (subsection.5.7.17) 473 0 R (subsection.5.7.18) 474 0 R (subsection.5.7.19) 475 0 R] /Limits [(subsection.5.7.14) (subsection.5.7.19)] >> endobj 2675 0 obj << /Names [(subsection.5.7.2) 458 0 R (subsection.5.7.20) 476 0 R (subsection.5.7.21) 477 0 R (subsection.5.7.22) 478 0 R (subsection.5.7.23) 479 0 R (subsection.5.7.24) 480 0 R] /Limits [(subsection.5.7.2) (subsection.5.7.24)] >> endobj 2676 0 obj << /Names [(subsection.5.7.25) 481 0 R (subsection.5.7.3) 459 0 R (subsection.5.7.4) 460 0 R (subsection.5.7.5) 461 0 R (subsection.5.7.6) 462 0 R (subsection.5.7.7) 463 0 R] /Limits [(subsection.5.7.25) (subsection.5.7.7)] >> endobj 2677 0 obj << /Names [(subsection.5.7.8) 464 0 R (subsection.5.7.9) 465 0 R (subsection.5.8.1) 483 0 R (subsection.6.1.1) 486 0 R (subsection.6.1.10) 495 0 R (subsection.6.1.11) 496 0 R] /Limits [(subsection.5.7.8) (subsection.6.1.11)] >> endobj 2678 0 obj << /Names [(subsection.6.1.12) 497 0 R (subsection.6.1.13) 498 0 R (subsection.6.1.14) 499 0 R (subsection.6.1.15) 500 0 R (subsection.6.1.16) 551 0 R (subsection.6.1.17) 552 0 R] /Limits [(subsection.6.1.12) (subsection.6.1.17)] >> endobj 2679 0 obj << /Names [(subsection.6.1.18) 553 0 R (subsection.6.1.19) 554 0 R (subsection.6.1.2) 487 0 R (subsection.6.1.20) 555 0 R (subsection.6.1.3) 488 0 R (subsection.6.1.4) 489 0 R] /Limits [(subsection.6.1.18) (subsection.6.1.4)] >> endobj 2680 0 obj << /Names [(subsection.6.1.5) 490 0 R (subsection.6.1.6) 491 0 R (subsection.6.1.7) 492 0 R (subsection.6.1.8) 493 0 R (subsection.6.1.9) 494 0 R (subsection.6.2.1) 557 0 R] /Limits [(subsection.6.1.5) (subsection.6.2.1)] >> endobj 2681 0 obj << /Names [(subsection.6.2.10) 566 0 R (subsection.6.2.11) 567 0 R (subsection.6.2.12) 568 0 R (subsection.6.2.2) 558 0 R (subsection.6.2.3) 559 0 R (subsection.6.2.4) 560 0 R] /Limits [(subsection.6.2.10) (subsection.6.2.4)] >> endobj 2682 0 obj << /Names [(subsection.6.2.5) 561 0 R (subsection.6.2.6) 562 0 R (subsection.6.2.7) 563 0 R (subsection.6.2.8) 564 0 R (subsection.6.2.9) 565 0 R (subsection.7.1.1) 571 0 R] /Limits [(subsection.6.2.5) (subsection.7.1.1)] >> endobj 2683 0 obj << /Names [(subsection.7.1.10) 580 0 R (subsection.7.1.11) 581 0 R (subsection.7.1.12) 582 0 R (subsection.7.1.13) 583 0 R (subsection.7.1.2) 572 0 R (subsection.7.1.3) 573 0 R] /Limits [(subsection.7.1.10) (subsection.7.1.3)] >> endobj 2684 0 obj << /Names [(subsection.7.1.4) 574 0 R (subsection.7.1.5) 575 0 R (subsection.7.1.6) 576 0 R (subsection.7.1.7) 577 0 R (subsection.7.1.8) 578 0 R (subsection.7.1.9) 579 0 R] /Limits [(subsection.7.1.4) (subsection.7.1.9)] >> endobj 2685 0 obj << /Names [(subsection.7.2.1) 585 0 R (subsection.7.2.10) 594 0 R (subsection.7.2.11) 595 0 R (subsection.7.2.12) 596 0 R (subsection.7.2.13) 648 0 R (subsection.7.2.14) 649 0 R] /Limits [(subsection.7.2.1) (subsection.7.2.14)] >> endobj 2686 0 obj << /Names [(subsection.7.2.15) 650 0 R (subsection.7.2.16) 651 0 R (subsection.7.2.17) 652 0 R (subsection.7.2.2) 586 0 R (subsection.7.2.3) 587 0 R (subsection.7.2.4) 588 0 R] /Limits [(subsection.7.2.15) (subsection.7.2.4)] >> endobj 2687 0 obj << /Names [(subsection.7.2.5) 589 0 R (subsection.7.2.6) 590 0 R (subsection.7.2.7) 591 0 R (subsection.7.2.8) 592 0 R (subsection.7.2.9) 593 0 R (subsection.7.3.1) 654 0 R] /Limits [(subsection.7.2.5) (subsection.7.3.1)] >> endobj 2688 0 obj << /Names [(subsection.7.3.10) 663 0 R (subsection.7.3.11) 664 0 R (subsection.7.3.12) 665 0 R (subsection.7.3.13) 666 0 R (subsection.7.3.2) 655 0 R (subsection.7.3.3) 656 0 R] /Limits [(subsection.7.3.10) (subsection.7.3.3)] >> endobj 2689 0 obj << /Names [(subsection.7.3.4) 657 0 R (subsection.7.3.5) 658 0 R (subsection.7.3.6) 659 0 R (subsection.7.3.7) 660 0 R (subsection.7.3.8) 661 0 R (subsection.7.3.9) 662 0 R] /Limits [(subsection.7.3.4) (subsection.7.3.9)] >> endobj 2690 0 obj << /Names [(subsection.7.4.1) 668 0 R (subsection.7.4.2) 669 0 R (subsection.7.4.3) 670 0 R (subsection.7.4.4) 671 0 R (subsection.7.4.5) 672 0 R (subsection.7.5.1) 674 0 R] /Limits [(subsection.7.4.1) (subsection.7.5.1)] >> endobj 2691 0 obj << /Names [(subsection.7.5.10) 683 0 R (subsection.7.5.11) 684 0 R (subsection.7.5.12) 685 0 R (subsection.7.5.13) 686 0 R (subsection.7.5.14) 687 0 R (subsection.7.5.15) 688 0 R] /Limits [(subsection.7.5.10) (subsection.7.5.15)] >> endobj 2692 0 obj << /Names [(subsection.7.5.16) 689 0 R (subsection.7.5.17) 690 0 R (subsection.7.5.2) 675 0 R (subsection.7.5.3) 676 0 R (subsection.7.5.4) 677 0 R (subsection.7.5.5) 678 0 R] /Limits [(subsection.7.5.16) (subsection.7.5.5)] >> endobj 2693 0 obj << /Names [(subsection.7.5.6) 679 0 R (subsection.7.5.7) 680 0 R (subsection.7.5.8) 681 0 R (subsection.7.5.9) 682 0 R (subsection.7.6.1) 692 0 R (subsection.7.6.10) 712 0 R] /Limits [(subsection.7.5.6) (subsection.7.6.10)] >> endobj 2694 0 obj << /Names [(subsection.7.6.2) 693 0 R (subsection.7.6.3) 694 0 R (subsection.7.6.4) 706 0 R (subsection.7.6.5) 707 0 R (subsection.7.6.6) 708 0 R (subsection.7.6.7) 709 0 R] /Limits [(subsection.7.6.2) (subsection.7.6.7)] >> endobj 2695 0 obj << /Names [(subsection.7.6.8) 710 0 R (subsection.7.6.9) 711 0 R] /Limits [(subsection.7.6.8) (subsection.7.6.9)] >> endobj 2696 0 obj << /Kids [2556 0 R 2557 0 R 2558 0 R 2559 0 R 2560 0 R 2561 0 R] /Limits [(Doc-Start) (L.X7A36C3C67B0062E8)] >> endobj 2697 0 obj << /Kids [2562 0 R 2563 0 R 2564 0 R 2565 0 R 2566 0 R 2567 0 R] /Limits [(L.X7A38EB3178961F3E) (L.X7B689C0284AC4296)] >> endobj 2698 0 obj << /Kids [2568 0 R 2569 0 R 2570 0 R 2571 0 R 2572 0 R 2573 0 R] /Limits [(L.X7B6C2BED8319C811) (L.X7D8981AF7DFE9814)] >> endobj 2699 0 obj << /Kids [2574 0 R 2575 0 R 2576 0 R 2577 0 R 2578 0 R 2579 0 R] /Limits [(L.X7D9A39BF801948C8) (L.X7FDF54BA81115D88)] >> endobj 2700 0 obj << /Kids [2580 0 R 2581 0 R 2582 0 R 2583 0 R 2584 0 R 2585 0 R] /Limits [(L.X8000B6597EF0282F) (L.X8170B52D7C154247)] >> endobj 2701 0 obj << /Kids [2586 0 R 2587 0 R 2588 0 R 2589 0 R 2590 0 R 2591 0 R] /Limits [(L.X817224657C9829C4) (L.X82E5987E81487D18)] >> endobj 2702 0 obj << /Kids [2592 0 R 2593 0 R 2594 0 R 2595 0 R 2596 0 R 2597 0 R] /Limits [(L.X82EBFAAB7F5BFD4A) (L.X85303BAE7BD46D81)] >> endobj 2703 0 obj << /Kids [2598 0 R 2599 0 R 2600 0 R 2601 0 R 2602 0 R 2603 0 R] /Limits [(L.X853D34A5796CEB73) (L.X86A92CB184CBD3C7)] >> endobj 2704 0 obj << /Kids [2604 0 R 2605 0 R 2606 0 R 2607 0 R 2608 0 R 2609 0 R] /Limits [(L.X86E9D6DE7F1A07E6) (chapter.4)] >> endobj 2705 0 obj << /Kids [2610 0 R 2611 0 R 2612 0 R 2613 0 R 2614 0 R 2615 0 R] /Limits [(chapter.5) (page.106)] >> endobj 2706 0 obj << /Kids [2616 0 R 2617 0 R 2618 0 R 2619 0 R 2620 0 R 2621 0 R] /Limits [(page.107) (page.139)] >> endobj 2707 0 obj << /Kids [2622 0 R 2623 0 R 2624 0 R 2625 0 R 2626 0 R 2627 0 R] /Limits [(page.14) (page.18)] >> endobj 2708 0 obj << /Kids [2628 0 R 2629 0 R 2630 0 R 2631 0 R 2632 0 R 2633 0 R] /Limits [(page.19) (page.50)] >> endobj 2709 0 obj << /Kids [2634 0 R 2635 0 R 2636 0 R 2637 0 R 2638 0 R 2639 0 R] /Limits [(page.51) (page.83)] >> endobj 2710 0 obj << /Kids [2640 0 R 2641 0 R 2642 0 R 2643 0 R 2644 0 R 2645 0 R] /Limits [(page.84) (section.4.5)] >> endobj 2711 0 obj << /Kids [2646 0 R 2647 0 R 2648 0 R 2649 0 R 2650 0 R 2651 0 R] /Limits [(section.4.6) (subsection.3.3.3)] >> endobj 2712 0 obj << /Kids [2652 0 R 2653 0 R 2654 0 R 2655 0 R 2656 0 R 2657 0 R] /Limits [(subsection.3.4.1) (subsection.4.3.5)] >> endobj 2713 0 obj << /Kids [2658 0 R 2659 0 R 2660 0 R 2661 0 R 2662 0 R 2663 0 R] /Limits [(subsection.4.3.6) (subsection.4.9.5)] >> endobj 2714 0 obj << /Kids [2664 0 R 2665 0 R 2666 0 R 2667 0 R 2668 0 R 2669 0 R] /Limits [(subsection.5.1.1) (subsection.5.5.13)] >> endobj 2715 0 obj << /Kids [2670 0 R 2671 0 R 2672 0 R 2673 0 R 2674 0 R 2675 0 R] /Limits [(subsection.5.5.14) (subsection.5.7.24)] >> endobj 2716 0 obj << /Kids [2676 0 R 2677 0 R 2678 0 R 2679 0 R 2680 0 R 2681 0 R] /Limits [(subsection.5.7.25) (subsection.6.2.4)] >> endobj 2717 0 obj << /Kids [2682 0 R 2683 0 R 2684 0 R 2685 0 R 2686 0 R 2687 0 R] /Limits [(subsection.6.2.5) (subsection.7.3.1)] >> endobj 2718 0 obj << /Kids [2688 0 R 2689 0 R 2690 0 R 2691 0 R 2692 0 R 2693 0 R] /Limits [(subsection.7.3.10) (subsection.7.6.10)] >> endobj 2719 0 obj << /Kids [2694 0 R 2695 0 R] /Limits [(subsection.7.6.2) (subsection.7.6.9)] >> endobj 2720 0 obj << /Kids [2696 0 R 2697 0 R 2698 0 R 2699 0 R 2700 0 R 2701 0 R] /Limits [(Doc-Start) (L.X82E5987E81487D18)] >> endobj 2721 0 obj << /Kids [2702 0 R 2703 0 R 2704 0 R 2705 0 R 2706 0 R 2707 0 R] /Limits [(L.X82EBFAAB7F5BFD4A) (page.18)] >> endobj 2722 0 obj << /Kids [2708 0 R 2709 0 R 2710 0 R 2711 0 R 2712 0 R 2713 0 R] /Limits [(page.19) (subsection.4.9.5)] >> endobj 2723 0 obj << /Kids [2714 0 R 2715 0 R 2716 0 R 2717 0 R 2718 0 R 2719 0 R] /Limits [(subsection.5.1.1) (subsection.7.6.9)] >> endobj 2724 0 obj << /Kids [2720 0 R 2721 0 R 2722 0 R 2723 0 R] /Limits [(Doc-Start) (subsection.7.6.9)] >> endobj 2725 0 obj << /Dests 2724 0 R >> endobj 2726 0 obj << /Type /Catalog /Pages 2555 0 R /Names 2725 0 R /PageMode/UseNone /OpenAction 5 0 R >> endobj 2727 0 obj << /Author(Jasper Cramwinckel ; Erik Roijackers ; Reinald Baart ; Eric Minkes)/Title(GUAVA)/Subject()/Creator(LaTeX with hyperref package / GAPDoc)/Producer(pdfTeX-1.40.3)/Keywords() /CreationDate (D:20080620170640-04'00') /ModDate (D:20080620170640-04'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX using libpoppler, Version 3.141592-1.40.3-2.2 (Web2C 7.5.6) kpathsea version 3.5.6) >> endobj xref 0 2728 0000000001 65535 f 0000000002 00000 f 0000000003 00000 f 0000000004 00000 f 0000000000 00000 f 0000000015 00000 n 0000000864 00000 n 0000001022 00000 n 0000001198 00000 n 0000001377 00000 n 0000001559 00000 n 0000001733 00000 n 0000002035 00000 n 0000000063 00000 n 0000001927 00000 n 0000001981 00000 n 0000825278 00000 n 0000825951 00000 n 0000826126 00000 n 0000824916 00000 n 0000826480 00000 n 0000006165 00000 n 0000006347 00000 n 0000006553 00000 n 0000006730 00000 n 0000006935 00000 n 0000007294 00000 n 0000006003 00000 n 0000002141 00000 n 0000007129 00000 n 0000825623 00000 n 0000007184 00000 n 0000825450 00000 n 0000824484 00000 n 0000007239 00000 n 0000826301 00000 n 0000007992 00000 n 0000007822 00000 n 0000007436 00000 n 0000007937 00000 n 0000009701 00000 n 0000009850 00000 n 0000010002 00000 n 0000010154 00000 n 0000010306 00000 n 0000010456 00000 n 0000010607 00000 n 0000010765 00000 n 0000010923 00000 n 0000011081 00000 n 0000011238 00000 n 0000011394 00000 n 0000011551 00000 n 0000011703 00000 n 0000011861 00000 n 0000012018 00000 n 0000012168 00000 n 0000012319 00000 n 0000012477 00000 n 0000012635 00000 n 0000012793 00000 n 0000012945 00000 n 0000013103 00000 n 0000013255 00000 n 0000013413 00000 n 0000013571 00000 n 0000013729 00000 n 0000013881 00000 n 0000014039 00000 n 0000014195 00000 n 0000014346 00000 n 0000014504 00000 n 0000014662 00000 n 0000014814 00000 n 0000016988 00000 n 0000015082 00000 n 0000009336 00000 n 0000008086 00000 n 0000014972 00000 n 0000015027 00000 n 0000076581 00000 n 0000076694 00000 n 0000076807 00000 n 0000079220 00000 n 0000081215 00000 n 0000081328 00000 n 0000081441 00000 n 0000084156 00000 n 0000084269 00000 n 0000086882 00000 n 0000086994 00000 n 0000087107 00000 n 0000092268 00000 n 0000092381 00000 n 0000093630 00000 n 0000096877 00000 n 0000103535 00000 n 0000103647 00000 n 0000106930 00000 n 0000109760 00000 n 0000109873 00000 n 0000109986 00000 n 0000112772 00000 n 0000112886 00000 n 0000113000 00000 n 0000113114 00000 n 0000115860 00000 n 0000115974 00000 n 0000116088 00000 n 0000119360 00000 n 0000119474 00000 n 0000119588 00000 n 0000122081 00000 n 0000122195 00000 n 0000017145 00000 n 0000017304 00000 n 0000017463 00000 n 0000017614 00000 n 0000017767 00000 n 0000017925 00000 n 0000018078 00000 n 0000018237 00000 n 0000018396 00000 n 0000018555 00000 n 0000018714 00000 n 0000018866 00000 n 0000019025 00000 n 0000019183 00000 n 0000019342 00000 n 0000019501 00000 n 0000019660 00000 n 0000019818 00000 n 0000019977 00000 n 0000020136 00000 n 0000020294 00000 n 0000020454 00000 n 0000020613 00000 n 0000020772 00000 n 0000020932 00000 n 0000021092 00000 n 0000021252 00000 n 0000021405 00000 n 0000021564 00000 n 0000021723 00000 n 0000021881 00000 n 0000022040 00000 n 0000022193 00000 n 0000022352 00000 n 0000022511 00000 n 0000022669 00000 n 0000022827 00000 n 0000022986 00000 n 0000023139 00000 n 0000023298 00000 n 0000023457 00000 n 0000023616 00000 n 0000023773 00000 n 0000023926 00000 n 0000024085 00000 n 0000026240 00000 n 0000024301 00000 n 0000016491 00000 n 0000015176 00000 n 0000024244 00000 n 0000122309 00000 n 0000122422 00000 n 0000124412 00000 n 0000127523 00000 n 0000141058 00000 n 0000141170 00000 n 0000144414 00000 n 0000144528 00000 n 0000144585 00000 n 0000144642 00000 n 0000147247 00000 n 0000147360 00000 n 0000147474 00000 n 0000149870 00000 n 0000149984 00000 n 0000150098 00000 n 0000150212 00000 n 0000154131 00000 n 0000154244 00000 n 0000157273 00000 n 0000157386 00000 n 0000157500 00000 n 0000160138 00000 n 0000160251 00000 n 0000162255 00000 n 0000162369 00000 n 0000165339 00000 n 0000165453 00000 n 0000165567 00000 n 0000165681 00000 n 0000169306 00000 n 0000171944 00000 n 0000172058 00000 n 0000172172 00000 n 0000172285 00000 n 0000175660 00000 n 0000175774 00000 n 0000175888 00000 n 0000178831 00000 n 0000178946 00000 n 0000179060 00000 n 0000181780 00000 n 0000181897 00000 n 0000184379 00000 n 0000184496 00000 n 0000184613 00000 n 0000026398 00000 n 0000026557 00000 n 0000026716 00000 n 0000026869 00000 n 0000027028 00000 n 0000027186 00000 n 0000027344 00000 n 0000027503 00000 n 0000027661 00000 n 0000027820 00000 n 0000027979 00000 n 0000028137 00000 n 0000028296 00000 n 0000028449 00000 n 0000028608 00000 n 0000028767 00000 n 0000028926 00000 n 0000029085 00000 n 0000029243 00000 n 0000029396 00000 n 0000029556 00000 n 0000029716 00000 n 0000029876 00000 n 0000030036 00000 n 0000030195 00000 n 0000030355 00000 n 0000030515 00000 n 0000030675 00000 n 0000030835 00000 n 0000030996 00000 n 0000031156 00000 n 0000031316 00000 n 0000031466 00000 n 0000031619 00000 n 0000031778 00000 n 0000031937 00000 n 0000032095 00000 n 0000032254 00000 n 0000032413 00000 n 0000032572 00000 n 0000032731 00000 n 0000032890 00000 n 0000033042 00000 n 0000033201 00000 n 0000033360 00000 n 0000035416 00000 n 0000033575 00000 n 0000025742 00000 n 0000024396 00000 n 0000033518 00000 n 0000187223 00000 n 0000187339 00000 n 0000187456 00000 n 0000190227 00000 n 0000190344 00000 n 0000190461 00000 n 0000190578 00000 n 0000195544 00000 n 0000200148 00000 n 0000208400 00000 n 0000208517 00000 n 0000214709 00000 n 0000217795 00000 n 0000217911 00000 n 0000218028 00000 n 0000218145 00000 n 0000222263 00000 n 0000222379 00000 n 0000226403 00000 n 0000226520 00000 n 0000226637 00000 n 0000230203 00000 n 0000233797 00000 n 0000233913 00000 n 0000237056 00000 n 0000240131 00000 n 0000240248 00000 n 0000243293 00000 n 0000246683 00000 n 0000246800 00000 n 0000246917 00000 n 0000250044 00000 n 0000255181 00000 n 0000255298 00000 n 0000255414 00000 n 0000259013 00000 n 0000259129 00000 n 0000263153 00000 n 0000266338 00000 n 0000266455 00000 n 0000266572 00000 n 0000271867 00000 n 0000271984 00000 n 0000272101 00000 n 0000275500 00000 n 0000275617 00000 n 0000035575 00000 n 0000035734 00000 n 0000035893 00000 n 0000036052 00000 n 0000036209 00000 n 0000036368 00000 n 0000036527 00000 n 0000036687 00000 n 0000036847 00000 n 0000037007 00000 n 0000037167 00000 n 0000037320 00000 n 0000037478 00000 n 0000037636 00000 n 0000037791 00000 n 0000037950 00000 n 0000038109 00000 n 0000038262 00000 n 0000038420 00000 n 0000038578 00000 n 0000038737 00000 n 0000038896 00000 n 0000039049 00000 n 0000039208 00000 n 0000039366 00000 n 0000039523 00000 n 0000039682 00000 n 0000039840 00000 n 0000039999 00000 n 0000040157 00000 n 0000040315 00000 n 0000040473 00000 n 0000040633 00000 n 0000040793 00000 n 0000040953 00000 n 0000041113 00000 n 0000041272 00000 n 0000041432 00000 n 0000041592 00000 n 0000041752 00000 n 0000041912 00000 n 0000042072 00000 n 0000042225 00000 n 0000042383 00000 n 0000042542 00000 n 0000042701 00000 n 0000044930 00000 n 0000042915 00000 n 0000034909 00000 n 0000033670 00000 n 0000042858 00000 n 0000826592 00000 n 0000279954 00000 n 0000280071 00000 n 0000280188 00000 n 0000285194 00000 n 0000285311 00000 n 0000289198 00000 n 0000289315 00000 n 0000289432 00000 n 0000293742 00000 n 0000297235 00000 n 0000297352 00000 n 0000302629 00000 n 0000302746 00000 n 0000302863 00000 n 0000302980 00000 n 0000303097 00000 n 0000303214 00000 n 0000306722 00000 n 0000306839 00000 n 0000306956 00000 n 0000310061 00000 n 0000310177 00000 n 0000310294 00000 n 0000315882 00000 n 0000320099 00000 n 0000320216 00000 n 0000324324 00000 n 0000328255 00000 n 0000328372 00000 n 0000328489 00000 n 0000331620 00000 n 0000331737 00000 n 0000335153 00000 n 0000335270 00000 n 0000337657 00000 n 0000337774 00000 n 0000337891 00000 n 0000338008 00000 n 0000340900 00000 n 0000343602 00000 n 0000346639 00000 n 0000349761 00000 n 0000349878 00000 n 0000349995 00000 n 0000350112 00000 n 0000355453 00000 n 0000359175 00000 n 0000045089 00000 n 0000045242 00000 n 0000045401 00000 n 0000045560 00000 n 0000045718 00000 n 0000045877 00000 n 0000046035 00000 n 0000046194 00000 n 0000046353 00000 n 0000046512 00000 n 0000046671 00000 n 0000046830 00000 n 0000046989 00000 n 0000047149 00000 n 0000047309 00000 n 0000047469 00000 n 0000047629 00000 n 0000047789 00000 n 0000047948 00000 n 0000048106 00000 n 0000048266 00000 n 0000048426 00000 n 0000048586 00000 n 0000048745 00000 n 0000048904 00000 n 0000049063 00000 n 0000049223 00000 n 0000049376 00000 n 0000049535 00000 n 0000049686 00000 n 0000049838 00000 n 0000049997 00000 n 0000050156 00000 n 0000050315 00000 n 0000050474 00000 n 0000050632 00000 n 0000050790 00000 n 0000050949 00000 n 0000051108 00000 n 0000051267 00000 n 0000051426 00000 n 0000051586 00000 n 0000051745 00000 n 0000051905 00000 n 0000052065 00000 n 0000054282 00000 n 0000052282 00000 n 0000044431 00000 n 0000042998 00000 n 0000052225 00000 n 0000359292 00000 n 0000362514 00000 n 0000362631 00000 n 0000365592 00000 n 0000365709 00000 n 0000365826 00000 n 0000371322 00000 n 0000371439 00000 n 0000371556 00000 n 0000374735 00000 n 0000374852 00000 n 0000374969 00000 n 0000375086 00000 n 0000375203 00000 n 0000380313 00000 n 0000380430 00000 n 0000382853 00000 n 0000385674 00000 n 0000385791 00000 n 0000385908 00000 n 0000386025 00000 n 0000388534 00000 n 0000391526 00000 n 0000394807 00000 n 0000394924 00000 n 0000395041 00000 n 0000398484 00000 n 0000402117 00000 n 0000405677 00000 n 0000414743 00000 n 0000414860 00000 n 0000414977 00000 n 0000418577 00000 n 0000418694 00000 n 0000422418 00000 n 0000422533 00000 n 0000426115 00000 n 0000426232 00000 n 0000430008 00000 n 0000430125 00000 n 0000433976 00000 n 0000437117 00000 n 0000437234 00000 n 0000437350 00000 n 0000440581 00000 n 0000444248 00000 n 0000054441 00000 n 0000054601 00000 n 0000054761 00000 n 0000054921 00000 n 0000055081 00000 n 0000055234 00000 n 0000055392 00000 n 0000055551 00000 n 0000055710 00000 n 0000055868 00000 n 0000056027 00000 n 0000056185 00000 n 0000056344 00000 n 0000056503 00000 n 0000056662 00000 n 0000056822 00000 n 0000056981 00000 n 0000057141 00000 n 0000057292 00000 n 0000057445 00000 n 0000057604 00000 n 0000057763 00000 n 0000057921 00000 n 0000058080 00000 n 0000058239 00000 n 0000058398 00000 n 0000058557 00000 n 0000058716 00000 n 0000058875 00000 n 0000059035 00000 n 0000059194 00000 n 0000059354 00000 n 0000059514 00000 n 0000059666 00000 n 0000059825 00000 n 0000059983 00000 n 0000060142 00000 n 0000060301 00000 n 0000060460 00000 n 0000060619 00000 n 0000060778 00000 n 0000060937 00000 n 0000061095 00000 n 0000061255 00000 n 0000061415 00000 n 0000063735 00000 n 0000061631 00000 n 0000053783 00000 n 0000052377 00000 n 0000061574 00000 n 0000444365 00000 n 0000444482 00000 n 0000447536 00000 n 0000447653 00000 n 0000451301 00000 n 0000455006 00000 n 0000455122 00000 n 0000455238 00000 n 0000455355 00000 n 0000458670 00000 n 0000458787 00000 n 0000463298 00000 n 0000463415 00000 n 0000466848 00000 n 0000466964 00000 n 0000471150 00000 n 0000475070 00000 n 0000477672 00000 n 0000482812 00000 n 0000482929 00000 n 0000486935 00000 n 0000487052 00000 n 0000487169 00000 n 0000489995 00000 n 0000490112 00000 n 0000494227 00000 n 0000494344 00000 n 0000494460 00000 n 0000497411 00000 n 0000497528 00000 n 0000497644 00000 n 0000501827 00000 n 0000501944 00000 n 0000505341 00000 n 0000505458 00000 n 0000505574 00000 n 0000508401 00000 n 0000510768 00000 n 0000510884 00000 n 0000513854 00000 n 0000513971 00000 n 0000517035 00000 n 0000517152 00000 n 0000520014 00000 n 0000520131 00000 n 0000522983 00000 n 0000063895 00000 n 0000064055 00000 n 0000064215 00000 n 0000064375 00000 n 0000064535 00000 n 0000064687 00000 n 0000064845 00000 n 0000065004 00000 n 0000065163 00000 n 0000065321 00000 n 0000065480 00000 n 0000065638 00000 n 0000065796 00000 n 0000065955 00000 n 0000066114 00000 n 0000066274 00000 n 0000066434 00000 n 0000066594 00000 n 0000066753 00000 n 0000066905 00000 n 0000067063 00000 n 0000067222 00000 n 0000067381 00000 n 0000067540 00000 n 0000067698 00000 n 0000067850 00000 n 0000068009 00000 n 0000068167 00000 n 0000068326 00000 n 0000068485 00000 n 0000068644 00000 n 0000068802 00000 n 0000068961 00000 n 0000069120 00000 n 0000069279 00000 n 0000069439 00000 n 0000069598 00000 n 0000069758 00000 n 0000069918 00000 n 0000070078 00000 n 0000070238 00000 n 0000070398 00000 n 0000070558 00000 n 0000070710 00000 n 0000070869 00000 n 0000071028 00000 n 0000072084 00000 n 0000071243 00000 n 0000063228 00000 n 0000061726 00000 n 0000071186 00000 n 0000523100 00000 n 0000525909 00000 n 0000526026 00000 n 0000526142 00000 n 0000531038 00000 n 0000531155 00000 n 0000534409 00000 n 0000534526 00000 n 0000534643 00000 n 0000538243 00000 n 0000538360 00000 n 0000541523 00000 n 0000544564 00000 n 0000544681 00000 n 0000544797 00000 n 0000548085 00000 n 0000548202 00000 n 0000551741 00000 n 0000551858 00000 n 0000554875 00000 n 0000554992 00000 n 0000555107 00000 n 0000555223 00000 n 0000558063 00000 n 0000558180 00000 n 0000558297 00000 n 0000558414 00000 n 0000561147 00000 n 0000561264 00000 n 0000561381 00000 n 0000565096 00000 n 0000565213 00000 n 0000565329 00000 n 0000568252 00000 n 0000568368 00000 n 0000568485 00000 n 0000571698 00000 n 0000571814 00000 n 0000574212 00000 n 0000574329 00000 n 0000574446 00000 n 0000577088 00000 n 0000577205 00000 n 0000577322 00000 n 0000577439 00000 n 0000577556 00000 n 0000580268 00000 n 0000072243 00000 n 0000072402 00000 n 0000072561 00000 n 0000072720 00000 n 0000072879 00000 n 0000073038 00000 n 0000073197 00000 n 0000073407 00000 n 0000071889 00000 n 0000071338 00000 n 0000073350 00000 n 0000580384 00000 n 0000582773 00000 n 0000582888 00000 n 0000583005 00000 n 0000585759 00000 n 0000585876 00000 n 0000589280 00000 n 0000589397 00000 n 0000075909 00000 n 0000076063 00000 n 0000076222 00000 n 0000076373 00000 n 0000076920 00000 n 0000075746 00000 n 0000073490 00000 n 0000076524 00000 n 0000076637 00000 n 0000076750 00000 n 0000076863 00000 n 0000617804 00000 n 0000617861 00000 n 0000612317 00000 n 0000078994 00000 n 0000079333 00000 n 0000078855 00000 n 0000077051 00000 n 0000079163 00000 n 0000079276 00000 n 0000826710 00000 n 0000081554 00000 n 0000081039 00000 n 0000079464 00000 n 0000081158 00000 n 0000081271 00000 n 0000081384 00000 n 0000081497 00000 n 0000824628 00000 n 0000825100 00000 n 0000084382 00000 n 0000083980 00000 n 0000081687 00000 n 0000084099 00000 n 0000084212 00000 n 0000084325 00000 n 0000824340 00000 n 0000087220 00000 n 0000086706 00000 n 0000084552 00000 n 0000086825 00000 n 0000086938 00000 n 0000087050 00000 n 0000087163 00000 n 0000824195 00000 n 0000091998 00000 n 0000092494 00000 n 0000091859 00000 n 0000087403 00000 n 0000092211 00000 n 0000092324 00000 n 0000824771 00000 n 0000825799 00000 n 0000092437 00000 n 0000093743 00000 n 0000093454 00000 n 0000092703 00000 n 0000093573 00000 n 0000093686 00000 n 0000096990 00000 n 0000096701 00000 n 0000093900 00000 n 0000096820 00000 n 0000096933 00000 n 0000826828 00000 n 0000100980 00000 n 0000101132 00000 n 0000101290 00000 n 0000101447 00000 n 0000101600 00000 n 0000101752 00000 n 0000101904 00000 n 0000102062 00000 n 0000102221 00000 n 0000102375 00000 n 0000102534 00000 n 0000102693 00000 n 0000102847 00000 n 0000103006 00000 n 0000103162 00000 n 0000103319 00000 n 0000103759 00000 n 0000100721 00000 n 0000097122 00000 n 0000103478 00000 n 0000103590 00000 n 0000103703 00000 n 0000107043 00000 n 0000106754 00000 n 0000103928 00000 n 0000106873 00000 n 0000106986 00000 n 0000110100 00000 n 0000109584 00000 n 0000107188 00000 n 0000109703 00000 n 0000109816 00000 n 0000109929 00000 n 0000110043 00000 n 0000112555 00000 n 0000113171 00000 n 0000112416 00000 n 0000110246 00000 n 0000112715 00000 n 0000112829 00000 n 0000112943 00000 n 0000113057 00000 n 0000115650 00000 n 0000116202 00000 n 0000115511 00000 n 0000113353 00000 n 0000115803 00000 n 0000115917 00000 n 0000116031 00000 n 0000116145 00000 n 0000118987 00000 n 0000119144 00000 n 0000119702 00000 n 0000118840 00000 n 0000116335 00000 n 0000119303 00000 n 0000119417 00000 n 0000119531 00000 n 0000119645 00000 n 0000826946 00000 n 0000122536 00000 n 0000121905 00000 n 0000119847 00000 n 0000122024 00000 n 0000122138 00000 n 0000122252 00000 n 0000122365 00000 n 0000122479 00000 n 0000124526 00000 n 0000124236 00000 n 0000122694 00000 n 0000124355 00000 n 0000124469 00000 n 0000127314 00000 n 0000127637 00000 n 0000127175 00000 n 0000124671 00000 n 0000127466 00000 n 0000127580 00000 n 0000131253 00000 n 0000131411 00000 n 0000131569 00000 n 0000131723 00000 n 0000131940 00000 n 0000131090 00000 n 0000127794 00000 n 0000131883 00000 n 0000135675 00000 n 0000135827 00000 n 0000135979 00000 n 0000136131 00000 n 0000136290 00000 n 0000136443 00000 n 0000136602 00000 n 0000136761 00000 n 0000136919 00000 n 0000137073 00000 n 0000137227 00000 n 0000137381 00000 n 0000137540 00000 n 0000137698 00000 n 0000137857 00000 n 0000138016 00000 n 0000138175 00000 n 0000138328 00000 n 0000138487 00000 n 0000138646 00000 n 0000138803 00000 n 0000138956 00000 n 0000139113 00000 n 0000139271 00000 n 0000139429 00000 n 0000139585 00000 n 0000139739 00000 n 0000139899 00000 n 0000140059 00000 n 0000140219 00000 n 0000140378 00000 n 0000140539 00000 n 0000140691 00000 n 0000140843 00000 n 0000141227 00000 n 0000135272 00000 n 0000132097 00000 n 0000141001 00000 n 0000141113 00000 n 0000143881 00000 n 0000144040 00000 n 0000144198 00000 n 0000144699 00000 n 0000143726 00000 n 0000141385 00000 n 0000144357 00000 n 0000144471 00000 n 0000827064 00000 n 0000147033 00000 n 0000147588 00000 n 0000146894 00000 n 0000144844 00000 n 0000147190 00000 n 0000147303 00000 n 0000147417 00000 n 0000147531 00000 n 0000150325 00000 n 0000149694 00000 n 0000147733 00000 n 0000149813 00000 n 0000149927 00000 n 0000150041 00000 n 0000150155 00000 n 0000150269 00000 n 0000153764 00000 n 0000153915 00000 n 0000154358 00000 n 0000153617 00000 n 0000150470 00000 n 0000154074 00000 n 0000154188 00000 n 0000154301 00000 n 0000156897 00000 n 0000157057 00000 n 0000159930 00000 n 0000157614 00000 n 0000156750 00000 n 0000154541 00000 n 0000157216 00000 n 0000157330 00000 n 0000157443 00000 n 0000157557 00000 n 0000160365 00000 n 0000159791 00000 n 0000157759 00000 n 0000160081 00000 n 0000160195 00000 n 0000160308 00000 n 0000162483 00000 n 0000162079 00000 n 0000160498 00000 n 0000162198 00000 n 0000162312 00000 n 0000162426 00000 n 0000827182 00000 n 0000168777 00000 n 0000165795 00000 n 0000165163 00000 n 0000162653 00000 n 0000165282 00000 n 0000165396 00000 n 0000165510 00000 n 0000165624 00000 n 0000165738 00000 n 0000168936 00000 n 0000169090 00000 n 0000169420 00000 n 0000168622 00000 n 0000165953 00000 n 0000169249 00000 n 0000169363 00000 n 0000617687 00000 n 0000172399 00000 n 0000171768 00000 n 0000169577 00000 n 0000171887 00000 n 0000172001 00000 n 0000172115 00000 n 0000172228 00000 n 0000172342 00000 n 0000175285 00000 n 0000175444 00000 n 0000176002 00000 n 0000175138 00000 n 0000172544 00000 n 0000175603 00000 n 0000175717 00000 n 0000175831 00000 n 0000175945 00000 n 0000178615 00000 n 0000179174 00000 n 0000178476 00000 n 0000176185 00000 n 0000178774 00000 n 0000178888 00000 n 0000179003 00000 n 0000179117 00000 n 0000181561 00000 n 0000182014 00000 n 0000181417 00000 n 0000179319 00000 n 0000181721 00000 n 0000181838 00000 n 0000181955 00000 n 0000827300 00000 n 0000184730 00000 n 0000184197 00000 n 0000182160 00000 n 0000184320 00000 n 0000184437 00000 n 0000184554 00000 n 0000184671 00000 n 0000190008 00000 n 0000187573 00000 n 0000187041 00000 n 0000184864 00000 n 0000187164 00000 n 0000187280 00000 n 0000187397 00000 n 0000187514 00000 n 0000194696 00000 n 0000194855 00000 n 0000195013 00000 n 0000190695 00000 n 0000189864 00000 n 0000187757 00000 n 0000190168 00000 n 0000190285 00000 n 0000190402 00000 n 0000190519 00000 n 0000190636 00000 n 0000195171 00000 n 0000195330 00000 n 0000195661 00000 n 0000194516 00000 n 0000190866 00000 n 0000195485 00000 n 0000195602 00000 n 0000199459 00000 n 0000199613 00000 n 0000199773 00000 n 0000199928 00000 n 0000200265 00000 n 0000199288 00000 n 0000195857 00000 n 0000200089 00000 n 0000200206 00000 n 0000617745 00000 n 0000611846 00000 n 0000618154 00000 n 0000202927 00000 n 0000202745 00000 n 0000200474 00000 n 0000202868 00000 n 0000827425 00000 n 0000204967 00000 n 0000204785 00000 n 0000203023 00000 n 0000204908 00000 n 0000208187 00000 n 0000208632 00000 n 0000208043 00000 n 0000205063 00000 n 0000208341 00000 n 0000208458 00000 n 0000208573 00000 n 0000211074 00000 n 0000210892 00000 n 0000208828 00000 n 0000211015 00000 n 0000214170 00000 n 0000214330 00000 n 0000214490 00000 n 0000214825 00000 n 0000214008 00000 n 0000211207 00000 n 0000214650 00000 n 0000214766 00000 n 0000217421 00000 n 0000217576 00000 n 0000221565 00000 n 0000218262 00000 n 0000217268 00000 n 0000215009 00000 n 0000217736 00000 n 0000217852 00000 n 0000217969 00000 n 0000218086 00000 n 0000218203 00000 n 0000221725 00000 n 0000221885 00000 n 0000222044 00000 n 0000222496 00000 n 0000221394 00000 n 0000218408 00000 n 0000222204 00000 n 0000222320 00000 n 0000222437 00000 n 0000827550 00000 n 0000226034 00000 n 0000226193 00000 n 0000229684 00000 n 0000226754 00000 n 0000225881 00000 n 0000222680 00000 n 0000226344 00000 n 0000226461 00000 n 0000226578 00000 n 0000226695 00000 n 0000229839 00000 n 0000229991 00000 n 0000230320 00000 n 0000229522 00000 n 0000226950 00000 n 0000230144 00000 n 0000230261 00000 n 0000617569 00000 n 0000233115 00000 n 0000233273 00000 n 0000233426 00000 n 0000233578 00000 n 0000234029 00000 n 0000232944 00000 n 0000230490 00000 n 0000233738 00000 n 0000233854 00000 n 0000233971 00000 n 0000611964 00000 n 0000236690 00000 n 0000236845 00000 n 0000237172 00000 n 0000236537 00000 n 0000234199 00000 n 0000236997 00000 n 0000237113 00000 n 0000240365 00000 n 0000239949 00000 n 0000237306 00000 n 0000240072 00000 n 0000240189 00000 n 0000240306 00000 n 0000243073 00000 n 0000243410 00000 n 0000242929 00000 n 0000240561 00000 n 0000243234 00000 n 0000243351 00000 n 0000827675 00000 n 0000246302 00000 n 0000246463 00000 n 0000249832 00000 n 0000247034 00000 n 0000246149 00000 n 0000243556 00000 n 0000246624 00000 n 0000246741 00000 n 0000246858 00000 n 0000246975 00000 n 0000250161 00000 n 0000249688 00000 n 0000247205 00000 n 0000249985 00000 n 0000250102 00000 n 0000252607 00000 n 0000252762 00000 n 0000252916 00000 n 0000253071 00000 n 0000253226 00000 n 0000253381 00000 n 0000253535 00000 n 0000253690 00000 n 0000253845 00000 n 0000254003 00000 n 0000254163 00000 n 0000254323 00000 n 0000254483 00000 n 0000254643 00000 n 0000254802 00000 n 0000254962 00000 n 0000255531 00000 n 0000252328 00000 n 0000250345 00000 n 0000255122 00000 n 0000255239 00000 n 0000255356 00000 n 0000255472 00000 n 0000258795 00000 n 0000259245 00000 n 0000258651 00000 n 0000255653 00000 n 0000258954 00000 n 0000259070 00000 n 0000259187 00000 n 0000262934 00000 n 0000263268 00000 n 0000262790 00000 n 0000259429 00000 n 0000263094 00000 n 0000263209 00000 n 0000265960 00000 n 0000266120 00000 n 0000266689 00000 n 0000265807 00000 n 0000263464 00000 n 0000266279 00000 n 0000266396 00000 n 0000266513 00000 n 0000266630 00000 n 0000827800 00000 n 0000269898 00000 n 0000270052 00000 n 0000270210 00000 n 0000270369 00000 n 0000270529 00000 n 0000270689 00000 n 0000270848 00000 n 0000271008 00000 n 0000271168 00000 n 0000271328 00000 n 0000271488 00000 n 0000271648 00000 n 0000275122 00000 n 0000272218 00000 n 0000269655 00000 n 0000266861 00000 n 0000271808 00000 n 0000271925 00000 n 0000272042 00000 n 0000272159 00000 n 0000275281 00000 n 0000279264 00000 n 0000275733 00000 n 0000274969 00000 n 0000272352 00000 n 0000275441 00000 n 0000275558 00000 n 0000275675 00000 n 0000279425 00000 n 0000279577 00000 n 0000279737 00000 n 0000280305 00000 n 0000279093 00000 n 0000275904 00000 n 0000279895 00000 n 0000280012 00000 n 0000280129 00000 n 0000280246 00000 n 0000284351 00000 n 0000284511 00000 n 0000284664 00000 n 0000284817 00000 n 0000284976 00000 n 0000285428 00000 n 0000284171 00000 n 0000280489 00000 n 0000285135 00000 n 0000285252 00000 n 0000285369 00000 n 0000288827 00000 n 0000288978 00000 n 0000289549 00000 n 0000288674 00000 n 0000285624 00000 n 0000289139 00000 n 0000289256 00000 n 0000289373 00000 n 0000289490 00000 n 0000612199 00000 n 0000293524 00000 n 0000293859 00000 n 0000293380 00000 n 0000289733 00000 n 0000293683 00000 n 0000293800 00000 n 0000827925 00000 n 0000296855 00000 n 0000297015 00000 n 0000297469 00000 n 0000296702 00000 n 0000294043 00000 n 0000297176 00000 n 0000297293 00000 n 0000297410 00000 n 0000302417 00000 n 0000299925 00000 n 0000299743 00000 n 0000297653 00000 n 0000299866 00000 n 0000303331 00000 n 0000302273 00000 n 0000300021 00000 n 0000302570 00000 n 0000302687 00000 n 0000302804 00000 n 0000302921 00000 n 0000303038 00000 n 0000303155 00000 n 0000303272 00000 n 0000612023 00000 n 0000306033 00000 n 0000306184 00000 n 0000306343 00000 n 0000306503 00000 n 0000307073 00000 n 0000305862 00000 n 0000303502 00000 n 0000306663 00000 n 0000306780 00000 n 0000306897 00000 n 0000307014 00000 n 0000309523 00000 n 0000309683 00000 n 0000309842 00000 n 0000310411 00000 n 0000309361 00000 n 0000307232 00000 n 0000310002 00000 n 0000310118 00000 n 0000310235 00000 n 0000310352 00000 n 0000314071 00000 n 0000314230 00000 n 0000314389 00000 n 0000314549 00000 n 0000314709 00000 n 0000314868 00000 n 0000315028 00000 n 0000315187 00000 n 0000315346 00000 n 0000315507 00000 n 0000315668 00000 n 0000315999 00000 n 0000313837 00000 n 0000310582 00000 n 0000315823 00000 n 0000315940 00000 n 0000828050 00000 n 0000319406 00000 n 0000319561 00000 n 0000319720 00000 n 0000319880 00000 n 0000320332 00000 n 0000319235 00000 n 0000316195 00000 n 0000320040 00000 n 0000320157 00000 n 0000320273 00000 n 0000323785 00000 n 0000323945 00000 n 0000324106 00000 n 0000324441 00000 n 0000323623 00000 n 0000320541 00000 n 0000324265 00000 n 0000324382 00000 n 0000327558 00000 n 0000327718 00000 n 0000327878 00000 n 0000328038 00000 n 0000328604 00000 n 0000327387 00000 n 0000324637 00000 n 0000328196 00000 n 0000328313 00000 n 0000328430 00000 n 0000328547 00000 n 0000331409 00000 n 0000331854 00000 n 0000331265 00000 n 0000328775 00000 n 0000331561 00000 n 0000331678 00000 n 0000331795 00000 n 0000611669 00000 n 0000335387 00000 n 0000334971 00000 n 0000332038 00000 n 0000335094 00000 n 0000335211 00000 n 0000335328 00000 n 0000338125 00000 n 0000337475 00000 n 0000335558 00000 n 0000337598 00000 n 0000337715 00000 n 0000337832 00000 n 0000337949 00000 n 0000338066 00000 n 0000828175 00000 n 0000341017 00000 n 0000340718 00000 n 0000338283 00000 n 0000340841 00000 n 0000340958 00000 n 0000343719 00000 n 0000343420 00000 n 0000341188 00000 n 0000343543 00000 n 0000343660 00000 n 0000346425 00000 n 0000346756 00000 n 0000346281 00000 n 0000343903 00000 n 0000346580 00000 n 0000346697 00000 n 0000612258 00000 n 0000350229 00000 n 0000349579 00000 n 0000346940 00000 n 0000349702 00000 n 0000349819 00000 n 0000349936 00000 n 0000350053 00000 n 0000350170 00000 n 0000354137 00000 n 0000354297 00000 n 0000354449 00000 n 0000354610 00000 n 0000354771 00000 n 0000354922 00000 n 0000355075 00000 n 0000355235 00000 n 0000355570 00000 n 0000353930 00000 n 0000350413 00000 n 0000355394 00000 n 0000355511 00000 n 0000358490 00000 n 0000358650 00000 n 0000358803 00000 n 0000358957 00000 n 0000359409 00000 n 0000358319 00000 n 0000355754 00000 n 0000359116 00000 n 0000359233 00000 n 0000359350 00000 n 0000828300 00000 n 0000617628 00000 n 0000612140 00000 n 0000362295 00000 n 0000362748 00000 n 0000362151 00000 n 0000359580 00000 n 0000362455 00000 n 0000362572 00000 n 0000362689 00000 n 0000365942 00000 n 0000365410 00000 n 0000362957 00000 n 0000365533 00000 n 0000365650 00000 n 0000365767 00000 n 0000365883 00000 n 0000368839 00000 n 0000368657 00000 n 0000366139 00000 n 0000368780 00000 n 0000371673 00000 n 0000371140 00000 n 0000368985 00000 n 0000371263 00000 n 0000371380 00000 n 0000371497 00000 n 0000371614 00000 n 0000375319 00000 n 0000374553 00000 n 0000371869 00000 n 0000374676 00000 n 0000374793 00000 n 0000374910 00000 n 0000375027 00000 n 0000375144 00000 n 0000375260 00000 n 0000377776 00000 n 0000377594 00000 n 0000375491 00000 n 0000377717 00000 n 0000828425 00000 n 0000380547 00000 n 0000380131 00000 n 0000377923 00000 n 0000380254 00000 n 0000380371 00000 n 0000380488 00000 n 0000382970 00000 n 0000382671 00000 n 0000380744 00000 n 0000382794 00000 n 0000382911 00000 n 0000386142 00000 n 0000385492 00000 n 0000383142 00000 n 0000385615 00000 n 0000385732 00000 n 0000385849 00000 n 0000385966 00000 n 0000386083 00000 n 0000388651 00000 n 0000388352 00000 n 0000386339 00000 n 0000388475 00000 n 0000388592 00000 n 0000391643 00000 n 0000391344 00000 n 0000388835 00000 n 0000391467 00000 n 0000391584 00000 n 0000394588 00000 n 0000395157 00000 n 0000394444 00000 n 0000391827 00000 n 0000394748 00000 n 0000394865 00000 n 0000394982 00000 n 0000395098 00000 n 0000828550 00000 n 0000398272 00000 n 0000398600 00000 n 0000398128 00000 n 0000395354 00000 n 0000398425 00000 n 0000398542 00000 n 0000618036 00000 n 0000401739 00000 n 0000401899 00000 n 0000402234 00000 n 0000401586 00000 n 0000398797 00000 n 0000402058 00000 n 0000402175 00000 n 0000611905 00000 n 0000405462 00000 n 0000405794 00000 n 0000405318 00000 n 0000402405 00000 n 0000405618 00000 n 0000405735 00000 n 0000617919 00000 n 0000407850 00000 n 0000407668 00000 n 0000405991 00000 n 0000407791 00000 n 0000410857 00000 n 0000411011 00000 n 0000411170 00000 n 0000411330 00000 n 0000411490 00000 n 0000411650 00000 n 0000411810 00000 n 0000411969 00000 n 0000412128 00000 n 0000412288 00000 n 0000412448 00000 n 0000412609 00000 n 0000412770 00000 n 0000412931 00000 n 0000413091 00000 n 0000413252 00000 n 0000413412 00000 n 0000413571 00000 n 0000413731 00000 n 0000413885 00000 n 0000414044 00000 n 0000414204 00000 n 0000414364 00000 n 0000414524 00000 n 0000415094 00000 n 0000410506 00000 n 0000407946 00000 n 0000414684 00000 n 0000414801 00000 n 0000414918 00000 n 0000415035 00000 n 0000418039 00000 n 0000418198 00000 n 0000418358 00000 n 0000418811 00000 n 0000417877 00000 n 0000415228 00000 n 0000418518 00000 n 0000418635 00000 n 0000418752 00000 n 0000828675 00000 n 0000421879 00000 n 0000422039 00000 n 0000422199 00000 n 0000422650 00000 n 0000421717 00000 n 0000418957 00000 n 0000422359 00000 n 0000422474 00000 n 0000422591 00000 n 0000425577 00000 n 0000425737 00000 n 0000425896 00000 n 0000426349 00000 n 0000425415 00000 n 0000422834 00000 n 0000426056 00000 n 0000426173 00000 n 0000426290 00000 n 0000429311 00000 n 0000429470 00000 n 0000429630 00000 n 0000429790 00000 n 0000430242 00000 n 0000429140 00000 n 0000426483 00000 n 0000429949 00000 n 0000430066 00000 n 0000430183 00000 n 0000433279 00000 n 0000433439 00000 n 0000433598 00000 n 0000433758 00000 n 0000434093 00000 n 0000433108 00000 n 0000430426 00000 n 0000433917 00000 n 0000434034 00000 n 0000436897 00000 n 0000437467 00000 n 0000436753 00000 n 0000434265 00000 n 0000437058 00000 n 0000437175 00000 n 0000437292 00000 n 0000437408 00000 n 0000440698 00000 n 0000440399 00000 n 0000437651 00000 n 0000440522 00000 n 0000440639 00000 n 0000828800 00000 n 0000443874 00000 n 0000444035 00000 n 0000444598 00000 n 0000443721 00000 n 0000440882 00000 n 0000444189 00000 n 0000444306 00000 n 0000444423 00000 n 0000444540 00000 n 0000451082 00000 n 0000447769 00000 n 0000447354 00000 n 0000444782 00000 n 0000447477 00000 n 0000447594 00000 n 0000447710 00000 n 0000451417 00000 n 0000450938 00000 n 0000447915 00000 n 0000451242 00000 n 0000451359 00000 n 0000454474 00000 n 0000454629 00000 n 0000454787 00000 n 0000455472 00000 n 0000454312 00000 n 0000451614 00000 n 0000454947 00000 n 0000455064 00000 n 0000455179 00000 n 0000455296 00000 n 0000455413 00000 n 0000458451 00000 n 0000458904 00000 n 0000458307 00000 n 0000455656 00000 n 0000458611 00000 n 0000458728 00000 n 0000458845 00000 n 0000462766 00000 n 0000462919 00000 n 0000463079 00000 n 0000463531 00000 n 0000462604 00000 n 0000459088 00000 n 0000463239 00000 n 0000463356 00000 n 0000463473 00000 n 0000828925 00000 n 0000612082 00000 n 0000467081 00000 n 0000466666 00000 n 0000463728 00000 n 0000466789 00000 n 0000466905 00000 n 0000824046 00000 n 0000467022 00000 n 0000470934 00000 n 0000471267 00000 n 0000470790 00000 n 0000467280 00000 n 0000471091 00000 n 0000471208 00000 n 0000617977 00000 n 0000474696 00000 n 0000474853 00000 n 0000475187 00000 n 0000474543 00000 n 0000471464 00000 n 0000475011 00000 n 0000475128 00000 n 0000611610 00000 n 0000611728 00000 n 0000477789 00000 n 0000477490 00000 n 0000475384 00000 n 0000477613 00000 n 0000477730 00000 n 0000480391 00000 n 0000480546 00000 n 0000480699 00000 n 0000480854 00000 n 0000481009 00000 n 0000481158 00000 n 0000481318 00000 n 0000481478 00000 n 0000481638 00000 n 0000481798 00000 n 0000481958 00000 n 0000482118 00000 n 0000482273 00000 n 0000482433 00000 n 0000482594 00000 n 0000483046 00000 n 0000480121 00000 n 0000477923 00000 n 0000482753 00000 n 0000482870 00000 n 0000482987 00000 n 0000611787 00000 n 0000486079 00000 n 0000486237 00000 n 0000486397 00000 n 0000486557 00000 n 0000486717 00000 n 0000487286 00000 n 0000485899 00000 n 0000483179 00000 n 0000486876 00000 n 0000486993 00000 n 0000487110 00000 n 0000487227 00000 n 0000829050 00000 n 0000489777 00000 n 0000490229 00000 n 0000489633 00000 n 0000487470 00000 n 0000489936 00000 n 0000490053 00000 n 0000490170 00000 n 0000493370 00000 n 0000493529 00000 n 0000493689 00000 n 0000493849 00000 n 0000494009 00000 n 0000494576 00000 n 0000493190 00000 n 0000490413 00000 n 0000494168 00000 n 0000494285 00000 n 0000494402 00000 n 0000494518 00000 n 0000497191 00000 n 0000497761 00000 n 0000497047 00000 n 0000494773 00000 n 0000497352 00000 n 0000497469 00000 n 0000497585 00000 n 0000497702 00000 n 0000500945 00000 n 0000501106 00000 n 0000501266 00000 n 0000501417 00000 n 0000501607 00000 n 0000502061 00000 n 0000500765 00000 n 0000497945 00000 n 0000501768 00000 n 0000501885 00000 n 0000502002 00000 n 0000505690 00000 n 0000505159 00000 n 0000502257 00000 n 0000505282 00000 n 0000505399 00000 n 0000505516 00000 n 0000505632 00000 n 0000508518 00000 n 0000508219 00000 n 0000505849 00000 n 0000508342 00000 n 0000508459 00000 n 0000829175 00000 n 0000511001 00000 n 0000510586 00000 n 0000508664 00000 n 0000510709 00000 n 0000510825 00000 n 0000510942 00000 n 0000514088 00000 n 0000513672 00000 n 0000511172 00000 n 0000513795 00000 n 0000513912 00000 n 0000514029 00000 n 0000823901 00000 n 0000517269 00000 n 0000516853 00000 n 0000514287 00000 n 0000516976 00000 n 0000517093 00000 n 0000517210 00000 n 0000520248 00000 n 0000519832 00000 n 0000517481 00000 n 0000519955 00000 n 0000520072 00000 n 0000520189 00000 n 0000523216 00000 n 0000522801 00000 n 0000520460 00000 n 0000522924 00000 n 0000523041 00000 n 0000523158 00000 n 0000525697 00000 n 0000526259 00000 n 0000525553 00000 n 0000523415 00000 n 0000525850 00000 n 0000525967 00000 n 0000526084 00000 n 0000526200 00000 n 0000829300 00000 n 0000529063 00000 n 0000529223 00000 n 0000529382 00000 n 0000529542 00000 n 0000529701 00000 n 0000529862 00000 n 0000530020 00000 n 0000530179 00000 n 0000530339 00000 n 0000530498 00000 n 0000530658 00000 n 0000530818 00000 n 0000534190 00000 n 0000531272 00000 n 0000528820 00000 n 0000526430 00000 n 0000530979 00000 n 0000531096 00000 n 0000531213 00000 n 0000537865 00000 n 0000534759 00000 n 0000534046 00000 n 0000531508 00000 n 0000534350 00000 n 0000534467 00000 n 0000534584 00000 n 0000534701 00000 n 0000538025 00000 n 0000538477 00000 n 0000537712 00000 n 0000534931 00000 n 0000538184 00000 n 0000538301 00000 n 0000538418 00000 n 0000541640 00000 n 0000541341 00000 n 0000538673 00000 n 0000541464 00000 n 0000541581 00000 n 0000544345 00000 n 0000544914 00000 n 0000544201 00000 n 0000541811 00000 n 0000544505 00000 n 0000544622 00000 n 0000544739 00000 n 0000544855 00000 n 0000547546 00000 n 0000547706 00000 n 0000547866 00000 n 0000548319 00000 n 0000547384 00000 n 0000545098 00000 n 0000548026 00000 n 0000548143 00000 n 0000548260 00000 n 0000829425 00000 n 0000551361 00000 n 0000551521 00000 n 0000551975 00000 n 0000551208 00000 n 0000548490 00000 n 0000551682 00000 n 0000551799 00000 n 0000551916 00000 n 0000554663 00000 n 0000555340 00000 n 0000554519 00000 n 0000552171 00000 n 0000554816 00000 n 0000554933 00000 n 0000555049 00000 n 0000555165 00000 n 0000555281 00000 n 0000557852 00000 n 0000558531 00000 n 0000557708 00000 n 0000555537 00000 n 0000558004 00000 n 0000558121 00000 n 0000558238 00000 n 0000558355 00000 n 0000558472 00000 n 0000561498 00000 n 0000560965 00000 n 0000558728 00000 n 0000561088 00000 n 0000561205 00000 n 0000561322 00000 n 0000561439 00000 n 0000564564 00000 n 0000564724 00000 n 0000564884 00000 n 0000565446 00000 n 0000564402 00000 n 0000561695 00000 n 0000565037 00000 n 0000565154 00000 n 0000565270 00000 n 0000565387 00000 n 0000568035 00000 n 0000568602 00000 n 0000567891 00000 n 0000565643 00000 n 0000568193 00000 n 0000568309 00000 n 0000568426 00000 n 0000568543 00000 n 0000829550 00000 n 0000571931 00000 n 0000571516 00000 n 0000568812 00000 n 0000571639 00000 n 0000571756 00000 n 0000571872 00000 n 0000574563 00000 n 0000574030 00000 n 0000572115 00000 n 0000574153 00000 n 0000574270 00000 n 0000574387 00000 n 0000574504 00000 n 0000577673 00000 n 0000576906 00000 n 0000574710 00000 n 0000577029 00000 n 0000577146 00000 n 0000577263 00000 n 0000577380 00000 n 0000577497 00000 n 0000577614 00000 n 0000580500 00000 n 0000580086 00000 n 0000577869 00000 n 0000580209 00000 n 0000580325 00000 n 0000580441 00000 n 0000583122 00000 n 0000582591 00000 n 0000580659 00000 n 0000582714 00000 n 0000582831 00000 n 0000582946 00000 n 0000583063 00000 n 0000585992 00000 n 0000585577 00000 n 0000583293 00000 n 0000585700 00000 n 0000585817 00000 n 0000585934 00000 n 0000829675 00000 n 0000589068 00000 n 0000589514 00000 n 0000588924 00000 n 0000586176 00000 n 0000589221 00000 n 0000589338 00000 n 0000589455 00000 n 0000618095 00000 n 0000593204 00000 n 0000593022 00000 n 0000589672 00000 n 0000593145 00000 n 0000596686 00000 n 0000596504 00000 n 0000593288 00000 n 0000596627 00000 n 0000599835 00000 n 0000599653 00000 n 0000596770 00000 n 0000599776 00000 n 0000603015 00000 n 0000602833 00000 n 0000599919 00000 n 0000602956 00000 n 0000605051 00000 n 0000604869 00000 n 0000603099 00000 n 0000604992 00000 n 0000829800 00000 n 0000607813 00000 n 0000607965 00000 n 0000608114 00000 n 0000608265 00000 n 0000608417 00000 n 0000608569 00000 n 0000608719 00000 n 0000608871 00000 n 0000609022 00000 n 0000609171 00000 n 0000609323 00000 n 0000609475 00000 n 0000609627 00000 n 0000609777 00000 n 0000609928 00000 n 0000610078 00000 n 0000610228 00000 n 0000610378 00000 n 0000610528 00000 n 0000610678 00000 n 0000610827 00000 n 0000610977 00000 n 0000611127 00000 n 0000611277 00000 n 0000614642 00000 n 0000614793 00000 n 0000614944 00000 n 0000615094 00000 n 0000615245 00000 n 0000612375 00000 n 0000607462 00000 n 0000605135 00000 n 0000611428 00000 n 0000611487 00000 n 0000611551 00000 n 0000615396 00000 n 0000615546 00000 n 0000615696 00000 n 0000615847 00000 n 0000615998 00000 n 0000616149 00000 n 0000616300 00000 n 0000616451 00000 n 0000616601 00000 n 0000616753 00000 n 0000616904 00000 n 0000617056 00000 n 0000617208 00000 n 0000617360 00000 n 0000618213 00000 n 0000614336 00000 n 0000612484 00000 n 0000617510 00000 n 0000620803 00000 n 0000620955 00000 n 0000621106 00000 n 0000621257 00000 n 0000621407 00000 n 0000621557 00000 n 0000621706 00000 n 0000621856 00000 n 0000622004 00000 n 0000622154 00000 n 0000622305 00000 n 0000622456 00000 n 0000622606 00000 n 0000622757 00000 n 0000622908 00000 n 0000623059 00000 n 0000623210 00000 n 0000623362 00000 n 0000623513 00000 n 0000623664 00000 n 0000623814 00000 n 0000623964 00000 n 0000624114 00000 n 0000624264 00000 n 0000624416 00000 n 0000624567 00000 n 0000624718 00000 n 0000624870 00000 n 0000625020 00000 n 0000625171 00000 n 0000625322 00000 n 0000625473 00000 n 0000625623 00000 n 0000625775 00000 n 0000625926 00000 n 0000626078 00000 n 0000626230 00000 n 0000626382 00000 n 0000626534 00000 n 0000626686 00000 n 0000626837 00000 n 0000626989 00000 n 0000627141 00000 n 0000627292 00000 n 0000627443 00000 n 0000627595 00000 n 0000627747 00000 n 0000627899 00000 n 0000628050 00000 n 0000628201 00000 n 0000628351 00000 n 0000628502 00000 n 0000628652 00000 n 0000628802 00000 n 0000628953 00000 n 0000629104 00000 n 0000629255 00000 n 0000629406 00000 n 0000629556 00000 n 0000629707 00000 n 0000629857 00000 n 0000630008 00000 n 0000630159 00000 n 0000630309 00000 n 0000630460 00000 n 0000630610 00000 n 0000630759 00000 n 0000630910 00000 n 0000631061 00000 n 0000631212 00000 n 0000631362 00000 n 0000631513 00000 n 0000631664 00000 n 0000631814 00000 n 0000631964 00000 n 0000632115 00000 n 0000635287 00000 n 0000632387 00000 n 0000619984 00000 n 0000618309 00000 n 0000632266 00000 n 0000632325 00000 n 0000635438 00000 n 0000635589 00000 n 0000635740 00000 n 0000635891 00000 n 0000636042 00000 n 0000636193 00000 n 0000636342 00000 n 0000636492 00000 n 0000636643 00000 n 0000636794 00000 n 0000636945 00000 n 0000637096 00000 n 0000637247 00000 n 0000637398 00000 n 0000637549 00000 n 0000637699 00000 n 0000637851 00000 n 0000638003 00000 n 0000638153 00000 n 0000638302 00000 n 0000638454 00000 n 0000638605 00000 n 0000638756 00000 n 0000638907 00000 n 0000639057 00000 n 0000639208 00000 n 0000639359 00000 n 0000639510 00000 n 0000639661 00000 n 0000639811 00000 n 0000639961 00000 n 0000640109 00000 n 0000640261 00000 n 0000640413 00000 n 0000640564 00000 n 0000640714 00000 n 0000640865 00000 n 0000641016 00000 n 0000641167 00000 n 0000641319 00000 n 0000641471 00000 n 0000641622 00000 n 0000641774 00000 n 0000641923 00000 n 0000642073 00000 n 0000642225 00000 n 0000642375 00000 n 0000642525 00000 n 0000642676 00000 n 0000642827 00000 n 0000642978 00000 n 0000643130 00000 n 0000643281 00000 n 0000643432 00000 n 0000643583 00000 n 0000643733 00000 n 0000643882 00000 n 0000644032 00000 n 0000644184 00000 n 0000644335 00000 n 0000644486 00000 n 0000644636 00000 n 0000644787 00000 n 0000644939 00000 n 0000645091 00000 n 0000645242 00000 n 0000645393 00000 n 0000645543 00000 n 0000645694 00000 n 0000645843 00000 n 0000645993 00000 n 0000646144 00000 n 0000646294 00000 n 0000646445 00000 n 0000646596 00000 n 0000646748 00000 n 0000646898 00000 n 0000647049 00000 n 0000647199 00000 n 0000647350 00000 n 0000647500 00000 n 0000647650 00000 n 0000647800 00000 n 0000647950 00000 n 0000648101 00000 n 0000648252 00000 n 0000648404 00000 n 0000648555 00000 n 0000648706 00000 n 0000648857 00000 n 0000649008 00000 n 0000652215 00000 n 0000649218 00000 n 0000634324 00000 n 0000632521 00000 n 0000649159 00000 n 0000652367 00000 n 0000652519 00000 n 0000652669 00000 n 0000652819 00000 n 0000652970 00000 n 0000653122 00000 n 0000653273 00000 n 0000653424 00000 n 0000653576 00000 n 0000653727 00000 n 0000653878 00000 n 0000654029 00000 n 0000654181 00000 n 0000654331 00000 n 0000654482 00000 n 0000654633 00000 n 0000654783 00000 n 0000654934 00000 n 0000655085 00000 n 0000655237 00000 n 0000655387 00000 n 0000655538 00000 n 0000655689 00000 n 0000655840 00000 n 0000655990 00000 n 0000656140 00000 n 0000656291 00000 n 0000656442 00000 n 0000656593 00000 n 0000656744 00000 n 0000656895 00000 n 0000657046 00000 n 0000657197 00000 n 0000657348 00000 n 0000657499 00000 n 0000657651 00000 n 0000657802 00000 n 0000657953 00000 n 0000658104 00000 n 0000658254 00000 n 0000658404 00000 n 0000658556 00000 n 0000658706 00000 n 0000658857 00000 n 0000659007 00000 n 0000659159 00000 n 0000659309 00000 n 0000659460 00000 n 0000659612 00000 n 0000659763 00000 n 0000659914 00000 n 0000660066 00000 n 0000660217 00000 n 0000660368 00000 n 0000660519 00000 n 0000660671 00000 n 0000660822 00000 n 0000660974 00000 n 0000661125 00000 n 0000661276 00000 n 0000661426 00000 n 0000661577 00000 n 0000661728 00000 n 0000661880 00000 n 0000662031 00000 n 0000662182 00000 n 0000662333 00000 n 0000662484 00000 n 0000662632 00000 n 0000662782 00000 n 0000662934 00000 n 0000663085 00000 n 0000663236 00000 n 0000663387 00000 n 0000663539 00000 n 0000663690 00000 n 0000663841 00000 n 0000663992 00000 n 0000664142 00000 n 0000664293 00000 n 0000664442 00000 n 0000664591 00000 n 0000664743 00000 n 0000664895 00000 n 0000665047 00000 n 0000665199 00000 n 0000665350 00000 n 0000665500 00000 n 0000665651 00000 n 0000665802 00000 n 0000668974 00000 n 0000666010 00000 n 0000651261 00000 n 0000649314 00000 n 0000665951 00000 n 0000669125 00000 n 0000669276 00000 n 0000669428 00000 n 0000669580 00000 n 0000669732 00000 n 0000669883 00000 n 0000670034 00000 n 0000670184 00000 n 0000670336 00000 n 0000670488 00000 n 0000670640 00000 n 0000670792 00000 n 0000670944 00000 n 0000671096 00000 n 0000671248 00000 n 0000671398 00000 n 0000671545 00000 n 0000671696 00000 n 0000671846 00000 n 0000671995 00000 n 0000672145 00000 n 0000672296 00000 n 0000672446 00000 n 0000672597 00000 n 0000672749 00000 n 0000672901 00000 n 0000673052 00000 n 0000673204 00000 n 0000673356 00000 n 0000673508 00000 n 0000673659 00000 n 0000673810 00000 n 0000673961 00000 n 0000674113 00000 n 0000674265 00000 n 0000674412 00000 n 0000674560 00000 n 0000674711 00000 n 0000674862 00000 n 0000675013 00000 n 0000675164 00000 n 0000675314 00000 n 0000675464 00000 n 0000675615 00000 n 0000675767 00000 n 0000675917 00000 n 0000676069 00000 n 0000676221 00000 n 0000676371 00000 n 0000676522 00000 n 0000676673 00000 n 0000676824 00000 n 0000676972 00000 n 0000677123 00000 n 0000677275 00000 n 0000677427 00000 n 0000677577 00000 n 0000677728 00000 n 0000677879 00000 n 0000678031 00000 n 0000678183 00000 n 0000678334 00000 n 0000678486 00000 n 0000678637 00000 n 0000678789 00000 n 0000678940 00000 n 0000679091 00000 n 0000679242 00000 n 0000679392 00000 n 0000679543 00000 n 0000679694 00000 n 0000679843 00000 n 0000679995 00000 n 0000680147 00000 n 0000680297 00000 n 0000680447 00000 n 0000680598 00000 n 0000680750 00000 n 0000680900 00000 n 0000681052 00000 n 0000681203 00000 n 0000681354 00000 n 0000681505 00000 n 0000681656 00000 n 0000681805 00000 n 0000681956 00000 n 0000682105 00000 n 0000684288 00000 n 0000682314 00000 n 0000668047 00000 n 0000666106 00000 n 0000682255 00000 n 0000829925 00000 n 0000684439 00000 n 0000684589 00000 n 0000684741 00000 n 0000684892 00000 n 0000685043 00000 n 0000685194 00000 n 0000685344 00000 n 0000685496 00000 n 0000685646 00000 n 0000685798 00000 n 0000685949 00000 n 0000686101 00000 n 0000686253 00000 n 0000686403 00000 n 0000686554 00000 n 0000686705 00000 n 0000686856 00000 n 0000687008 00000 n 0000687158 00000 n 0000687308 00000 n 0000687459 00000 n 0000687610 00000 n 0000687759 00000 n 0000687909 00000 n 0000688059 00000 n 0000688211 00000 n 0000688361 00000 n 0000688512 00000 n 0000688664 00000 n 0000688815 00000 n 0000688967 00000 n 0000689118 00000 n 0000689269 00000 n 0000689421 00000 n 0000689572 00000 n 0000689724 00000 n 0000689876 00000 n 0000690026 00000 n 0000690177 00000 n 0000690329 00000 n 0000690479 00000 n 0000690631 00000 n 0000690782 00000 n 0000690933 00000 n 0000691083 00000 n 0000691234 00000 n 0000691385 00000 n 0000691535 00000 n 0000691686 00000 n 0000691837 00000 n 0000691988 00000 n 0000692138 00000 n 0000692289 00000 n 0000692500 00000 n 0000683667 00000 n 0000682410 00000 n 0000692441 00000 n 0000692596 00000 n 0000692862 00000 n 0000692887 00000 n 0000693407 00000 n 0000693492 00000 n 0000693736 00000 n 0000823343 00000 n 0000694039 00000 n 0000694395 00000 n 0000694421 00000 n 0000695110 00000 n 0000695747 00000 n 0000695955 00000 n 0000696063 00000 n 0000696545 00000 n 0000697184 00000 n 0000697751 00000 n 0000697859 00000 n 0000700982 00000 n 0000701332 00000 n 0000703642 00000 n 0000703904 00000 n 0000706169 00000 n 0000706446 00000 n 0000711742 00000 n 0000712302 00000 n 0000713858 00000 n 0000714092 00000 n 0000715845 00000 n 0000716069 00000 n 0000718433 00000 n 0000718656 00000 n 0000738837 00000 n 0000739487 00000 n 0000752705 00000 n 0000753109 00000 n 0000756594 00000 n 0000756835 00000 n 0000760281 00000 n 0000760535 00000 n 0000763043 00000 n 0000763287 00000 n 0000767192 00000 n 0000767464 00000 n 0000784919 00000 n 0000785396 00000 n 0000805824 00000 n 0000806419 00000 n 0000822946 00000 n 0000830014 00000 n 0000830133 00000 n 0000830258 00000 n 0000830384 00000 n 0000830510 00000 n 0000830627 00000 n 0000830728 00000 n 0000830978 00000 n 0000831250 00000 n 0000831523 00000 n 0000831795 00000 n 0000832066 00000 n 0000832339 00000 n 0000832612 00000 n 0000832883 00000 n 0000833154 00000 n 0000833426 00000 n 0000833697 00000 n 0000833969 00000 n 0000834239 00000 n 0000834511 00000 n 0000834784 00000 n 0000835054 00000 n 0000835327 00000 n 0000835600 00000 n 0000835872 00000 n 0000836142 00000 n 0000836413 00000 n 0000836684 00000 n 0000836955 00000 n 0000837227 00000 n 0000837498 00000 n 0000837771 00000 n 0000838043 00000 n 0000838314 00000 n 0000838586 00000 n 0000838858 00000 n 0000839129 00000 n 0000839401 00000 n 0000839673 00000 n 0000839946 00000 n 0000840218 00000 n 0000840490 00000 n 0000840763 00000 n 0000841033 00000 n 0000841306 00000 n 0000841578 00000 n 0000841851 00000 n 0000842122 00000 n 0000842394 00000 n 0000842665 00000 n 0000842937 00000 n 0000843208 00000 n 0000843478 00000 n 0000843751 00000 n 0000844022 00000 n 0000844295 00000 n 0000844565 00000 n 0000844837 00000 n 0000845108 00000 n 0000845295 00000 n 0000845485 00000 n 0000845709 00000 n 0000845906 00000 n 0000846110 00000 n 0000846304 00000 n 0000846489 00000 n 0000846672 00000 n 0000846857 00000 n 0000847040 00000 n 0000847225 00000 n 0000847408 00000 n 0000847593 00000 n 0000847775 00000 n 0000847957 00000 n 0000848142 00000 n 0000848325 00000 n 0000848510 00000 n 0000848690 00000 n 0000848859 00000 n 0000849030 00000 n 0000849198 00000 n 0000849366 00000 n 0000849540 00000 n 0000849715 00000 n 0000849892 00000 n 0000850067 00000 n 0000850244 00000 n 0000850419 00000 n 0000850596 00000 n 0000850771 00000 n 0000850948 00000 n 0000851122 00000 n 0000851303 00000 n 0000851498 00000 n 0000851700 00000 n 0000851904 00000 n 0000852107 00000 n 0000852310 00000 n 0000852513 00000 n 0000852733 00000 n 0000852970 00000 n 0000853211 00000 n 0000853454 00000 n 0000853704 00000 n 0000853957 00000 n 0000854204 00000 n 0000854452 00000 n 0000854698 00000 n 0000854941 00000 n 0000855184 00000 n 0000855427 00000 n 0000855670 00000 n 0000855913 00000 n 0000856156 00000 n 0000856399 00000 n 0000856646 00000 n 0000856892 00000 n 0000857135 00000 n 0000857378 00000 n 0000857626 00000 n 0000857877 00000 n 0000858120 00000 n 0000858363 00000 n 0000858611 00000 n 0000858862 00000 n 0000859111 00000 n 0000859356 00000 n 0000859602 00000 n 0000859853 00000 n 0000860100 00000 n 0000860343 00000 n 0000860590 00000 n 0000860833 00000 n 0000861081 00000 n 0000861324 00000 n 0000861573 00000 n 0000861820 00000 n 0000862063 00000 n 0000862311 00000 n 0000862554 00000 n 0000862797 00000 n 0000863048 00000 n 0000863294 00000 n 0000863539 00000 n 0000863782 00000 n 0000863917 00000 n 0000864047 00000 n 0000864187 00000 n 0000864327 00000 n 0000864467 00000 n 0000864607 00000 n 0000864747 00000 n 0000864887 00000 n 0000865027 00000 n 0000865157 00000 n 0000865276 00000 n 0000865394 00000 n 0000865510 00000 n 0000865626 00000 n 0000865742 00000 n 0000865862 00000 n 0000865991 00000 n 0000866125 00000 n 0000866259 00000 n 0000866394 00000 n 0000866530 00000 n 0000866665 00000 n 0000866799 00000 n 0000866935 00000 n 0000867033 00000 n 0000867163 00000 n 0000867291 00000 n 0000867416 00000 n 0000867550 00000 n 0000867659 00000 n 0000867699 00000 n 0000867806 00000 n trailer << /Size 2728 /Root 2726 0 R /Info 2727 0 R /ID [ ] >> startxref 868218 %%EOF guava-3.6/doc/guava.brf0000644017361200001450000000414211027015742014705 0ustar tabbottcrontab\backcite {Leon91}{{12}{1.1}{section.1.1}} \backcite {MS83}{{12}{1.1}{section.1.1}} \backcite {HP03}{{12}{1.1}{section.1.1}} \backcite {HP03}{{34}{4.3.6}{subsection.4.3.6}} \backcite {HP03}{{36}{4.3.10}{subsection.4.3.10}} \backcite {Leon82}{{39}{4.4.3}{subsection.4.4.3}} \backcite {Leon88}{{48}{4.8.4}{subsection.4.8.4}} \backcite {Chen69}{{48}{4.8.5}{subsection.4.8.5}} \backcite {Zimmermann96}{{48}{4.8.5}{subsection.4.8.5}} \backcite {Leon88}{{51}{4.8.6}{subsection.4.8.6}} \backcite {HP03}{{56}{4.10.1}{subsection.4.10.1}} \backcite {HP03}{{57}{4.10.2}{subsection.4.10.2}} \backcite {JH04}{{57}{4.10.2}{subsection.4.10.2}} \backcite {Gao03}{{58}{4.10.3}{subsection.4.10.3}} \backcite {JH04}{{58}{4.10.4}{subsection.4.10.4}} \backcite {JH04}{{59}{4.10.5}{subsection.4.10.5}} \backcite {HP03}{{63}{4.10.11}{subsection.4.10.11}} \backcite {HP03}{{70}{5.2.5}{subsection.5.2.5}} \backcite {HP03}{{71}{5.2.7}{subsection.5.2.7}} \backcite {MS83}{{71}{5.2.7}{subsection.5.2.7}} \backcite {He72}{{72}{5.2.9}{subsection.5.2.9}} \backcite {GDT91}{{76}{5.3}{section.5.3}} \backcite {MS83}{{77}{5.4}{section.5.4}} \backcite {BM03}{{83}{5.5.9}{subsection.5.5.9}} \backcite {HHKK07}{{88}{5.5.18}{subsection.5.5.18}} \backcite {JH04}{{90}{5.6.2}{subsection.5.6.2}} \backcite {MS83}{{90}{5.6.2}{subsection.5.6.2}} \backcite {JH04}{{90}{5.6.2}{subsection.5.6.2}} \backcite {Jo04}{{91}{5.6.5}{subsection.5.6.5}} \backcite {Han99}{{91}{5.6.5}{subsection.5.6.5}} \backcite {St93}{{104}{5.7.25}{subsection.5.7.25}} \backcite {Gallager.1962}{{105}{5.8}{section.5.8}} \backcite {TSSFC04}{{106}{5.8.1}{subsection.5.8.1}} \backcite {GS85}{{121}{6.2.6}{subsection.6.2.6}} \backcite {Sloane72}{{123}{6.2.9}{subsection.6.2.9}} \backcite {Alltop84}{{124}{6.2.10}{subsection.6.2.10}} \backcite {Brouwer98}{{124}{6.2.11}{subsection.6.2.11}} \backcite {Br}{{126}{7.1}{section.7.1}} \backcite {Br}{{131}{7.1.13}{subsection.7.1.13}} \backcite {HP03}{{139}{7.2.14}{subsection.7.2.14}} \backcite {GS85}{{147}{7.4}{section.7.4}} \backcite {GS85}{{148}{7.4.5}{subsection.7.4.5}} \backcite {MS83}{{150}{7.5.6}{subsection.7.5.6}} \backcite {GG03}{{158}{7.6.10}{subsection.7.6.10}} guava-3.6/doc/manual.idx0000644017361200001450000003633511026723452015106 0ustar tabbottcrontab\indexentry {guava}{0} \indexentry {Acknowledgements@Acknowledgements|indexit}{0} \indexentry {Installing GUAVA@Installing GUAVA|indexit}{0} \indexentry {Loading GUAVA@Loading GUAVA|indexit}{0} \indexentry {codeword}{0} \indexentry {Construction of Codewords@Construction of Codewords|indexit}{0} \indexentry {Codeword@`Codeword'}{0} \indexentry {Codeword@`Codeword'}{0} \indexentry {IsCodeword@`IsCodeword'}{0} \indexentry {Comparisons of Codewords@Comparisons of Codewords|indexit}{0} \indexentry {codewords!equality}{0} \indexentry {codewords!inequality}{0} \indexentry {Arithmetic Operations for Codewords@Arithmetic Operations for Codewords|indexit}{0} \indexentry {codewords!addition}{0} \indexentry {codewords!subtraction}{0} \indexentry {code!cosets}{0} \indexentry {code!cosets}{0} \indexentry {Functions that Convert Codewords to Vectors or Polynomials@Functions that Convert Codewords to Vectors or Polynomials|indexit}{0} \indexentry {VectorCodeword@`VectorCodeword'}{0} \indexentry {PolyCodeword@`PolyCodeword'}{0} \indexentry {Functions that Change the Display Form of a Codeword@Functions that Change the Display Form of a Codeword|indexit}{0} \indexentry {TreatAsVector@`TreatAsVector'}{0} \indexentry {TreatAsPoly@`TreatAsPoly'}{0} \indexentry {Other Codeword Functions@Other Codeword Functions|indexit}{0} \indexentry {NullWord@`NullWord'}{0} \indexentry {NullWord@`NullWord'}{0} \indexentry {NullWord@`NullWord'}{0} \indexentry {DistanceCodeword@`DistanceCodeword'}{0} \indexentry {Support@`Support'}{0} \indexentry {WeightCodeword@`WeightCodeword'}{0} \indexentry {code}{0} \indexentry {linear code}{0} \indexentry {code!linear}{0} \indexentry {unrestricted code}{0} \indexentry {code!unrestricted}{0} \indexentry {cyclic code}{0} \indexentry {code!cyclic}{0} \indexentry {Comparisons of Codes@Comparisons of Codes|indexit}{0} \indexentry {codes!equality}{0} \indexentry {codes!inequality}{0} \indexentry {Operations for Codes@Operations for Codes|indexit}{0} \indexentry {codes!adition}{0} \indexentry {codes!coset}{0} \indexentry {codes!coset}{0} \indexentry {codes!product}{0} \indexentry {code!evaluation}{0} \indexentry {code!element test}{0} \indexentry {code!subcode}{0} \indexentry {Boolean Functions for Codes@Boolean Functions for Codes|indexit}{0} \indexentry {IsCode@`IsCode'}{0} \indexentry {IsLinearCode@`IsLinearCode'}{0} \indexentry {IsCyclicCode@`IsCyclicCode'}{0} \indexentry {IsPerfectCode@`IsPerfectCode'}{0} \indexentry {IsMDSCode@`IsMDSCode'}{0} \indexentry {IsSelfDualCode@`IsSelfDualCode'}{0} \indexentry {IsSelfOrthogonalCode@`IsSelfOrthogonalCode'}{0} \indexentry {Equivalence and Isomorphism of Codes@Equivalence and Isomorphism of Codes|indexit}{0} \indexentry {IsEquivalent@`IsEquivalent'}{0} \indexentry {CodeIsomorphism@`CodeIsomorphism'}{0} \indexentry {AutomorphismGroup@`AutomorphismGroup'}{0} \indexentry {PermutationGroup@`PermutationGroup'}{0} \indexentry {Domain Functions for Codes@Domain Functions for Codes|indexit}{0} \indexentry {IsFinite@`IsFinite'}{0} \indexentry {Size@`Size'}{0} \indexentry {LeftActingDomain@`LeftActingDomain'}{0} \indexentry {Dimension@`Dimension'}{0} \indexentry {AsSSortedList@`AsSSortedList'}{0} \indexentry {CodewordNr@`CodewordNr'}{0} \indexentry {Printing and Displaying Codes@Printing and Displaying Codes|indexit}{0} \indexentry {Print@`Print'}{0} \indexentry {String@`String'}{0} \indexentry {Display@`Display'}{0} \indexentry {Generating (Check) Matrices and Polynomials@Generating (Check) Matrices and Polynomials|indexit}{0} \indexentry {GeneratorMat@`GeneratorMat'}{0} \indexentry {CheckMat@`CheckMat'}{0} \indexentry {GeneratorPol@`GeneratorPol'}{0} \indexentry {CheckPol@`CheckPol'}{0} \indexentry {RootsOfCode@`RootsOfCode'}{0} \indexentry {Parameters of Codes@Parameters of Codes|indexit}{0} \indexentry {WordLength@`WordLength'}{0} \indexentry {Redundancy@`Redundancy'}{0} \indexentry {MinimumDistance@`MinimumDistance'}{0} \indexentry {MinimumDistance@`MinimumDistance'}{0} \indexentry {MinimumDistanceLeon@`MinimumDistanceLeon'}{0} \indexentry {Distributions@Distributions|indexit}{0} \indexentry {WeightDistribution@`WeightDistribution'}{0} \indexentry {InnerDistribution@`InnerDistribution'}{0} \indexentry {OuterDistribution@`OuterDistribution'}{0} \indexentry {DistancesDistribution@`DistancesDistribution'}{0} \indexentry {Decoding Functions@Decoding Functions|indexit}{0} \indexentry {Decode@`Decode'}{0} \indexentry {Syndrome@`Syndrome'}{0} \indexentry {SyndromeTable@`SyndromeTable'}{0} \indexentry {StandardArray@`StandardArray'}{0} \indexentry {PermutationDecode@`PermutationDecode'}{0} \indexentry {Generating Unrestricted Codes@Generating Unrestricted Codes|indexit}{0} \indexentry {ElementsCode@`ElementsCode'}{0} \indexentry {HadamardCode@`HadamardCode'}{0} \indexentry {HadamardCode@`HadamardCode'}{0} \indexentry {HadamardCode@`HadamardCode'}{0} \indexentry {HadamardCode@`HadamardCode'}{0} \indexentry {ConferenceCode@`ConferenceCode'!from a matrix}{0} \indexentry {ConferenceCode@`ConferenceCode'!from an integer}{0} \indexentry {MOLSCode@`MOLSCode'}{0} \indexentry {MOLSCode@`MOLSCode'}{0} \indexentry {RandomCode@`RandomCode'}{0} \indexentry {NordstromRobinsonCode@`NordstromRobinsonCode'}{0} \indexentry {GreedyCode@`GreedyCode'}{0} \indexentry {LexiCode@`LexiCode'}{0} \indexentry {LexiCode@`LexiCode'!using a basis}{0} \indexentry {Generating Linear Codes@Generating Linear Codes|indexit}{0} \indexentry {GeneratorMatCode@`GeneratorMatCode'}{0} \indexentry {CheckMatCode@`CheckMatCode'}{0} \indexentry {HammingCode@`HammingCode'}{0} \indexentry {ReedMullerCode@`ReedMullerCode'}{0} \indexentry {AlternantCode@`AlternantCode'}{0} \indexentry {AlternantCode@`AlternantCode'}{0} \indexentry {GoppaCode@`GoppaCode'!with list of field elements parameter}{0} \indexentry {GoppaCode@`GoppaCode'!with integer parameter}{0} \indexentry {GeneralizedSrivastavaCode@`GeneralizedSrivastavaCode'}{0} \indexentry {GeneralizedSrivastavaCode@`GeneralizedSrivastavaCode'}{0} \indexentry {SrivastavaCode@`SrivastavaCode'}{0} \indexentry {SrivastavaCode@`SrivastavaCode'}{0} \indexentry {CordaroWagnerCode@`CordaroWagnerCode'}{0} \indexentry {RandomLinearCode@`RandomLinearCode'}{0} \indexentry {BestKnownLinearCode@`BestKnownLinearCode'}{0} \indexentry {BestKnownLinearCode@`BestKnownLinearCode'!of a record}{0} \indexentry {Golay Codes@Golay Codes|indexit}{0} \indexentry {BinaryGolayCode@`BinaryGolayCode'}{0} \indexentry {ExtendedBinaryGolayCode@`ExtendedBinaryGolayCode'}{0} \indexentry {TernaryGolayCode@`TernaryGolayCode'}{0} \indexentry {ExtendedTernaryGolayCode@`ExtendedTernaryGolayCode'}{0} \indexentry {Generating Cyclic Codes@Generating Cyclic Codes|indexit}{0} \indexentry {check polynomial}{0} \indexentry {GeneratorPolCode@`GeneratorPolCode'}{0} \indexentry {CheckPolCode@`CheckPolCode'}{0} \indexentry {RootsCode@`RootsCode'}{0} \indexentry {RootsCode@`RootsCode'!with field}{0} \indexentry {BCHCode@`BCHCode'}{0} \indexentry {BCHCode@`BCHCode'}{0} \indexentry {Bose distance}{0} \indexentry {ReedSolomonCode@`ReedSolomonCode'}{0} \indexentry {QRCode@`QRCode'}{0} \indexentry {FireCode@`FireCode'}{0} \indexentry {WholeSpaceCode@`WholeSpaceCode'}{0} \indexentry {NullCode@`NullCode'}{0} \indexentry {RepetitionCode@`RepetitionCode'}{0} \indexentry {CyclicCodes@`CyclicCodes'}{0} \indexentry {NrCyclicCodes@`NrCyclicCodes'}{0} \indexentry {Toric codes@Toric codes|indexit}{0} \indexentry {ToricCode@`ToricCode'}{0} \indexentry {ToricPoints@`ToricPoints'}{0} \indexentry {Functions that Generate a New Code from a Given Code@Functions that Generate a New Code from a Given Code|indexit}{0} \indexentry {Parity check}{0} \indexentry {ExtendedCode@`ExtendedCode'}{0} \indexentry {PuncturedCode@`PuncturedCode'}{0} \indexentry {PuncturedCode@`PuncturedCode'!with list of punctures}{0} \indexentry {EvenWeightSubcode@`EvenWeightSubcode'}{0} \indexentry {PermutedCode@`PermutedCode'}{0} \indexentry {ExpurgatedCode@`ExpurgatedCode'}{0} \indexentry {AugmentedCode@`AugmentedCode'}{0} \indexentry {AugmentedCode@`AugmentedCode'!without a list of codewords}{0} \indexentry {RemovedElementsCode@`RemovedElementsCode'}{0} \indexentry {AddedElementsCode@`AddedElementsCode'}{0} \indexentry {ShortenedCode@`ShortenedCode'}{0} \indexentry {ShortenedCode@`ShortenedCode'!with list of columns}{0} \indexentry {LengthenedCode@`LengthenedCode'}{0} \indexentry {ResidueCode@`ResidueCode'}{0} \indexentry {ConstructionBCode@`ConstructionBCode'}{0} \indexentry {DualCode@`DualCode'}{0} \indexentry {ConversionFieldCode@`ConversionFieldCode'}{0} \indexentry {CosetCode@`CosetCode'}{0} \indexentry {ConstantWeightSubcode@`ConstantWeightSubcode'}{0} \indexentry {ConstantWeightSubcode@`ConstantWeightSubcode'!for all minimum weight codewords}{0} \indexentry {StandardFormCode@`StandardFormCode'}{0} \indexentry {Functions that Generate a New Code from Two Given Codes@Functions that Generate a New Code from Two Given Codes|indexit}{0} \indexentry {DirectSumCode@`DirectSumCode'}{0} \indexentry {UUVCode@`UUVCode'}{0} \indexentry {DirectProductCode@`DirectProductCode'}{0} \indexentry {IntersectionCode@`IntersectionCode'}{0} \indexentry {UnionCode@`UnionCode'}{0} \indexentry {Bounds on codes@Bounds on codes|indexit}{0} \indexentry {Bounds@bounds!Singleton}{0} \indexentry {UpperBoundSingleton@`UpperBoundSingleton'}{0} \indexentry {maximum distance separable}{0} \indexentry {Bounds@bounds!Hamming}{0} \indexentry {Bounds!Sphere packing bound}{0} \indexentry {UpperBoundHamming@`UpperBoundHamming'}{0} \indexentry {Bounds@bounds!Johnson}{0} \indexentry {UpperBoundJohnson@`UpperBoundJohnson'}{0} \indexentry {Bounds@bounds!Plotkin}{0} \indexentry {UpperBoundPlotkin@`UpperBoundPlotkin'}{0} \indexentry {Bounds@bounds!Elias}{0} \indexentry {UpperBoundElias@`UpperBoundElias'}{0} \indexentry {Bounds@bounds!Griesmer}{0} \indexentry {UpperBoundGriesmer@`UpperBoundGriesmer'}{0} \indexentry {Bounds!Upper Bound}{0} \indexentry {UpperBound@`UpperBound'}{0} \indexentry {LowerBoundMinimumDistance@`LowerBoundMinimumDistance'}{0} \indexentry {LowerBoundMinimumDistance@`LowerBoundMinimumDistance'!of codes over a field}{0} \indexentry {UpperBoundMinimumDistance@`UpperBoundMinimumDistance'}{0} \indexentry {UpperBoundMinimumDistance@`UpperBoundMinimumDistance'!of codes over a field}{0} \indexentry {BoundsMinimumDistance@`BoundsMinimumDistance'}{0} \indexentry {Special matrices in GUAVA@Special matrices in GUAVA|indexit}{0} \indexentry {KrawtchoukMat@`KrawtchoukMat'}{0} \indexentry {GrayMat@`GrayMat'}{0} \indexentry {SylvesterMat@`SylvesterMat'}{0} \indexentry {HadamardMat@`HadamardMat'}{0} \indexentry {Mutually Orthogonal Latin Squares@mutually orthogonal Latin squares}{0} \indexentry {MOLS@`MOLS'}{0} \indexentry {MOLS@`MOLS'}{0} \indexentry {PutStandardForm@`PutStandardForm'}{0} \indexentry {PutStandardForm@`PutStandardForm'}{0} \indexentry {IsInStandardForm@`IsInStandardForm'}{0} \indexentry {IsInStandardForm@`IsInStandardForm'}{0} \indexentry {PermutedCols@`PermutedCols'}{0} \indexentry {VerticalConversionFieldMat@`VerticalConversionFieldMat'}{0} \indexentry {HorizontalConversionFieldMat@`HorizontalConversionFieldMat'}{0} \indexentry {IsLatinSquare@`IsLatinSquare'}{0} \indexentry {AreMOLS@`AreMOLS'}{0} \indexentry {Miscellaneous functions@Miscellaneous functions|indexit}{0} \indexentry {SphereContent@`SphereContent'}{0} \indexentry {Krawtchouk@`Krawtchouk'}{0} \indexentry {PrimitiveUnityRoot@`PrimitiveUnityRoot'}{0} \indexentry {ReciprocalPolynomial@`ReciprocalPolynomial'}{0} \indexentry {ReciprocalPolynomial@`ReciprocalPolynomial'}{0} \indexentry {CyclotomicCosets@`CyclotomicCosets'}{0} \indexentry {WeightHistogram@`WeightHistogram'}{0} \indexentry {WeightHistogram@`WeightHistogram'}{0} \indexentry {Some functions for the covering radius@Some functions for the covering radius|indexit}{0} \indexentry {CoveringRadius@`CoveringRadius'}{0} \indexentry {BoundsCoveringRadius@`BoundsCoveringRadius'}{0} \indexentry {SetCoveringRadius@`SetCoveringRadius'}{0} \indexentry {IncreaseCoveringRadiusLowerBound@`IncreaseCoveringRadiusLowerBound'}{0} \indexentry {ExhaustiveSearchCoveringRadius@`ExhaustiveSearchCoveringRadius'}{0} \indexentry {GeneralLowerBoundCoveringRadius@`GeneralLowerBoundCoveringRadius'}{0} \indexentry {GeneralUpperBoundCoveringRadius@`GeneralUpperBoundCoveringRadius'}{0} \indexentry {LowerBoundCoveringRadiusSphereCovering@`LowerBoundCoveringRadiusSphereCovering'}{0} \indexentry {LowerBoundCoveringRadiusSphereCovering@`LowerBoundCoveringRadiusSphereCovering'}{0} \indexentry {LowerBoundCoveringRadiusVanWee1@`LowerBoundCoveringRadiusVanWee1'}{0} \indexentry {LowerBoundCoveringRadiusVanWee1@`LowerBoundCoveringRadiusVanWee1'}{0} \indexentry {LowerBoundCoveringRadiusVanWee2@`LowerBoundCoveringRadiusVanWee2'}{0} \indexentry {LowerBoundCoveringRadiusVanWee2@`LowerBoundCoveringRadiusVanWee2'}{0} \indexentry {LowerBoundCoveringRadiusCountingExcess@`LowerBoundCoveringRadiusCountingExcess'}{0} \indexentry {LowerBoundCoveringRadiusCountingExcess@`LowerBoundCoveringRadiusCountingExcess'}{0} \indexentry {LowerBoundCoveringRadiusEmbedded1@`LowerBoundCoveringRadiusEmbedded1'}{0} \indexentry {LowerBoundCoveringRadiusEmbedded1@`LowerBoundCoveringRadiusEmbedded1'}{0} \indexentry {LowerBoundCoveringRadiusEmbedded2@`LowerBoundCoveringRadiusEmbedded2'}{0} \indexentry {LowerBoundCoveringRadiusEmbedded2@`LowerBoundCoveringRadiusEmbedded2'}{0} \indexentry {LowerBoundCoveringRadiusInduction@`LowerBoundCoveringRadiusInduction'}{0} \indexentry {UpperBoundCoveringRadiusRedundancy@`UpperBoundCoveringRadiusRedundancy'}{0} \indexentry {external distance}{0} \indexentry {UpperBoundCoveringRadiusDelsarte@`UpperBoundCoveringRadiusDelsarte'}{0} \indexentry {UpperBoundCoveringRadiusStrength@`UpperBoundCoveringRadiusStrength'}{0} \indexentry {UpperBoundCoveringRadiusGriesmerLike@`UpperBoundCoveringRadiusGriesmerLike'}{0} \indexentry {UpperBoundCoveringRadiusCyclicCode@`UpperBoundCoveringRadiusCyclicCode'}{0} \indexentry {New code constructions@New code constructions|indexit}{0} \indexentry {ExtendedDirectSumCode@`ExtendedDirectSumCode'}{0} \indexentry {AmalgamatedDirectSumCode@`AmalgamatedDirectSumCode'}{0} \indexentry {BlockwiseDirectSumCode@`BlockwiseDirectSumCode'}{0} \indexentry {PiecewiseConstantCode@`PiecewiseConstantCode'}{0} \indexentry {Gabidulin codes@Gabidulin codes|indexit}{0} \indexentry {GabidulinCode@`GabidulinCode'}{0} \indexentry {EnlargedGabidulinCode@`EnlargedGabidulinCode'}{0} \indexentry {DavydovCode@`DavydovCode'}{0} \indexentry {TombakCode@`TombakCode'}{0} \indexentry {EnlargedTombakCode@`EnlargedTombakCode'}{0} \indexentry {Some functions related to the norm of a code@Some functions related to the norm of a code|indexit}{0} \indexentry {CoordinateNorm@`CoordinateNorm'}{0} \indexentry {CodeNorm@`CodeNorm'}{0} \indexentry {IsCoordinateAcceptable@`IsCoordinateAcceptable'}{0} \indexentry {GeneralizedCodeNorm@`GeneralizedCodeNorm'}{0} \indexentry {IsNormalCode@`IsNormalCode'}{0} \indexentry {DecreaseMinimumDistanceLowerBound@`DecreaseMinimumDistanceLowerBound'}{0} \indexentry {New miscellaneous functions@New miscellaneous functions|indexit}{0} \indexentry {CodeWeightEnumerator@`CodeWeightEnumerator'}{0} \indexentry {CodeDistanceEnumerator@`CodeDistanceEnumerator'}{0} \indexentry {CodeMacWilliamsTransform@`CodeMacWilliamsTransform'}{0} \indexentry {IsSelfComplementaryCode@`IsSelfComplementaryCode'}{0} \indexentry {IsAffineCode@`IsAffineCode'}{0} \indexentry {IsAlmostAffineCode@`IsAlmostAffineCode'}{0} \indexentry {IsGriesmerCode@`IsGriesmerCode'}{0} \indexentry {CodeDensity@`CodeDensity'}{0} guava-3.6/doc/guava.xml0000644017361200001450000147040311027015714014743 0ustar tabbottcrontab <Package>GUAVA</Package> A &GAP;4 Package for computing with error-correcting codes   Version 3.6 Jasper Cramwinckel Erik Roijackers Reinald Baart Eric Minkes, Lea Ruscio Robert L Miller, rlm@robertlmiller.com Tom Boothby Cen (``CJ'') Tjhai cen.tjhai@plymouth.ac.uk http://www.plymouth.ac.uk/staff/ctjhai David Joyner (Maintainer), wdjoyner@gmail.com http://sage.math.washington.edu/home/wdj/guava/ June 20, 2008 GUAVA: ©right; The GUAVA Group: 1992-2003 Jasper Cramwinckel, Erik Roijackers,Reinald Baart, Eric Minkes, Lea Ruscio (for the tex version), Jeffrey Leon ©right; 2004 David Joyner, Cen Tjhai, Jasper Cramwinckel, Erik Roijackers, Reinald Baart, Eric Minkes, Lea Ruscio. ©right; 2007 Robert L Miller, Tom Boothby

GUAVA is released under the GNU General Public License (GPL).

GUAVA is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

GUAVA 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 GUAVA; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

For more details, see http://www.fsf.org/licenses/gpl.html.

For many years GUAVA has been released along with the ``backtracking'' C programs of J. Leon. In one of his *.c files the following statements occur: ``Copyright (C) 1992 by Jeffrey S. Leon. This software may be used freely for educational and research purposes. Any other use requires permission from the author.'' The following should now be appended: ``I, Jeffrey S. Leon, agree to license all the partition backtrack code which I have written under the GPL (www.fsf.org) as of this date, April 17, 2007.''

GUAVA documentation: ©right; Jasper Cramwinckel, Erik Roijackers,Reinald Baart, Eric Minkes, Lea Ruscio (for the tex version), David Joyner, Cen Tjhai, Jasper Cramwinckel, Erik Roijackers, Reinald Baart, Eric Minkes, Lea Ruscio. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".

GUAVA was originally written by Jasper Cramwinckel, Erik Roijackers, and Reinald Baart in the early-to-mid 1990's as a final project during their study of Mathematics at the Delft University of Technology, Department of Pure Mathematics, under the direction of Professor Juriaan Simonis. This work was continued in Aachen, at Lehrstuhl D fur Mathematik. In version 1.3, new functions were added by Eric Minkes, also from Delft University of Technology.

JC, ER and RB would like to thank the GAP people at the RWTH Aachen for their support, A.E. Brouwer for his advice and J. Simonis for his supervision.

The GAP 4 version of GUAVA (versions 1.4 and 1.5) was created by Lea Ruscio and (since 2001, starting with version 1.6) is currently maintained by David Joyner, who (with the help of several students) has added several new functions. Starting with version 2.7, the ``best linear code'' tables have been updated. For further details, see the CHANGES file in the GUAVA directory, also available at http://sage.math.washington.edu/home/wdj/guava/CHANGES.guava.

This documentation was prepared with the GAPDoc package of Frank Lübeck and Max Neunhöffer. The conversion from TeX to GAPDoc's XML was done by David Joyner in 2004.

Please send bug reports, suggestions and other comments about GUAVA to support@gap-system.org. Currently known bugs and suggested GUAVA projects are listed on the bugs and projects web page http://sage.math.washington.edu/home/wdj/guava/guava2do.html. Older releases and further history can be found on the GUAVA web page http://sage.math.washington.edu/home/wdj/guava/.

Contributors: Other than the authors listed on the title page, the following people have contributed code to the GUAVA project: Alexander Hulpke, Steve Linton, Frank Lübeck, Aron Foster, Wayne Irons, Clifton (Clipper) Lennon, Jason McGowan, Shuhong Gao, Greg Gamble.

For documentation on Leon's programs, see the src/leon/doc subdirectory of GUAVA. Introduction

Introduction to the GUAVA package

This is the manual of the GAP package GUAVA that provides implementations of some routines designed for the construction and analysis of in the theory of error-correcting codes. This version of GUAVA requires GAP 4.4.5 or later.

The functions can be divided into three subcategories: Construction of codes: GUAVA can construct unrestricted, linear and cyclic codes. Information about the code, such as operations applicable to the code, is stored in a record-like data structure called a GAP object. Manipulations of codes: Manipulation transforms one code into another, or constructs a new code from two codes. The new code can profit from the data in the record of the old code(s), so in these cases calculation time decreases. Computations of information about codes: GUAVA can calculate important parameters of codes quickly. The results are stored in the codes' object components.

Except for the automorphism group and isomorphism testing functions, which make use of J.S. Leon's programs (see and the documentation in the 'src/leon' subdirectory of the 'guava' directory for some details), and function, GUAVA is written in the GAP language, and runs on any system supporting GAP4.3 and above. Several algorithms that need the speed were integrated in the GAP kernel.

Good general references for error-correcting codes and the technical terms in this manual are MacWilliams and Sloane Huffman and Pless .

Installing GUAVA
Loading GUAVA After starting up GAP, the GUAVA package needs to be loaded. Load GUAVA by typing at the GAP prompt: gap> LoadPackage( "guava" ); If GUAVA isn't already in memory, it is loaded and the author information is displayed. If you are a frequent user of GUAVA, you might consider putting this line in your `.gaprc' file.
Coding theory functions in GAP
Distance functions F-linear combinations of the vectors in the rows of the matrix mat that can be written as linear combinations of exactly r rows (that is without using zero as a coefficient) and returns a vector from these that is closest to the vector vec. The length of the rows of mat and the length of vec must be equal, and all elements must lie in F. The rows of mat must be linearly independent. If it finds a vector of distance at most st, which must be a nonnegative integer, then it stops immediately and returns this vector. gap> F:=GF(3);; gap> x:= Indeterminate( F );; pol:= x^2+1; x_1^2+Z(3)^0 gap> C := GeneratorPolCode(pol,8,F); a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3) gap> v:=Codeword("12101111"); [ 1 2 1 0 1 1 1 1 ] gap> v:=VectorCodeword(v); [ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ] gap> G:=GeneratorMat(C); [ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ], [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ] gap> AClosestVectorCombinationsMatFFEVecFFE(G,F,v,1,1); [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] AClosestVectorCombinationsMatFFEVecFFECoords returns a two element list containing (a) the same closest vector as in AClosestVectorCombinationsMatFFEVecFFE, and (b) a vector v with exactly r non-zero entries, such that v*mat is the closest vector. gap> F:=GF(3);; gap> x:= Indeterminate( F );; pol:= x^2+1; x_1^2+Z(3)^0 gap> C := GeneratorPolCode(pol,8,F); a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3) gap> v:=Codeword("12101111"); v:=VectorCodeword(v);; [ 1 2 1 0 1 1 1 1 ] gap> G:=GeneratorMat(C);; gap> AClosestVectorCombinationsMatFFEVecFFECoords(G,F,v,1,1); [ [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ], [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0 ] ] DistancesDistributionMatFFEVecFFE returns the distances distribution of the vector vec to the vectors in the vector space generated by the rows of the matrix mat over the finite field f. All vectors must have the same length, and all elements must lie in a common field. The distances distribution is a list d of length Length(vec)+1, such that the value d[i] is the number of vectors in vecs that have distance i+1 to vec. gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];; gap> vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], > [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], > [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ], > [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ], > [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ], > [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];; gap> DistancesDistributionMatFFEVecFFE(vecs,GF(3),v); [ 0, 4, 6, 60, 109, 216, 192, 112, 30 ] DistancesDistributionVecFFEsVecFFE returns the distances distribution of the vector vec to the vectors in the list vecs. All vectors must have the same length, and all elements must lie in a common field. The distances distribution is a list d of length Length(vec)+1, such that the value d[i] is the number of vectors in vecs that have distance i+1 to vec. gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];; gap> vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], > [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], > [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ], > [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ], > [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ], > [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];; gap> DistancesDistributionVecFFEsVecFFE(vecs,v); [ 0, 0, 0, 0, 0, 4, 0, 1, 1 ] WeightVecFFE returns the weight of the finite field vector vec, i.e. the number of nonzero entries. gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];; gap> WeightVecFFE(v); 7 Hamming metric The Hamming metric on GF(q)^n is the function dist((v_1,...,v_n),(w_1,...,w_n)) =|\{i\in [1..n]\ |\ v_i\not= w_i\}|. This is also called the (Hamming) distance between v=(v_1,...,v_n) and w=(w_1,...,w_n). DistanceVecFFE returns the distance between the two vectors vec1 and vec2, which must have the same length and whose elements must lie in a common field. The distance is the number of places where vec1 and vec2 differ. gap> v1:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];; gap> v2:=[ Z(3), Z(3)^0, Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];; gap> DistanceVecFFE(v1,v2); 2
Other functions
Codewords Codes Generating Codes Manipulating Codes Bounds on codes, special matrices and miscellaneous functions In this chapter we describe functions that determine bounds on the size and minimum distance of codes (Section ), functions that determine bounds on the size and covering radius of codes (Section ), functions that work with special matrices GUAVA needs for several codes (see Section ), and constructing codes or performing calculations with codes (see Section ).
Distance bounds on codes
Covering radius bounds on codes
Special matrices in GUAVA
Some functions related to the norm of a code
Miscellaneous functions
Miscellaneous polynomial functions
GNU Free Documentation License GNU Free Documentation License Version 1.2, November 2002

Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

0. PREAMBLE

The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

1. APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".

Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.

A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.

The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

2. VERBATIM COPYING

You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

You may also lend copies, under the same conditions stated above, and you may publicly display copies.

3. COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

4. MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.

B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.

C. State on the Title page the name of the publisher of the Modified Version, as the publisher.

D. Preserve all the copyright notices of the Document.

E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.

G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.

H. Include an unaltered copy of this License.

I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.

J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.

K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.

L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.

M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.

N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.

O. Preserve any Warranty Disclaimers.

If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.

You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

5. COMBINING DOCUMENTS

You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".

6. COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

7. AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.

If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

8. TRANSLATION

Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

9. TERMINATION

You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

10. FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

guava-3.6/doc/guava.idx0000644017361200001450000006346611027015742014736 0ustar tabbottcrontab\indexentry{AClosestVectorCombinationsMatFFEVecFFE@\texttt {AClosestVectorCombinationsMatFFEVecFFE}|hyperpage}{14} \indexentry{AClosestVectorComb..MatFFEVecFFECoords@\texttt {AClosestVectorComb..MatFFEVecFFECoords}|hyperpage}{15} \indexentry{DistancesDistributionMatFFEVecFFE@\texttt {DistancesDistributionMatFFEVecFFE}|hyperpage}{15} \indexentry{DistancesDistributionVecFFEsVecFFE@\texttt {DistancesDistributionVecFFEsVecFFE}|hyperpage}{16} \indexentry{WeightVecFFE@\texttt {WeightVecFFE}|hyperpage}{16} \indexentry{Hamming metric|hyperpage}{16} \indexentry{DistanceVecFFE@\texttt {DistanceVecFFE}|hyperpage}{16} \indexentry{$GF(p)$|hyperpage}{17} \indexentry{$GF(q)$|hyperpage}{17} \indexentry{defining polynomial|hyperpage}{17} \indexentry{primitive element|hyperpage}{17} \indexentry{ConwayPolynomial@\texttt {ConwayPolynomial}|hyperpage}{17} \indexentry{IsCheapConwayPolynomial|hyperpage}{17} \indexentry{RandomPrimitivePolynomial@\texttt {RandomPrimitivePolynomial}|hyperpage}{18} \indexentry{IsPrimitivePolynomial|hyperpage}{18} \indexentry{linear code|hyperpage}{19} \indexentry{Codeword@\texttt {Codeword}|hyperpage}{20} \indexentry{CodewordNr@\texttt {CodewordNr}|hyperpage}{21} \indexentry{IsCodeword@\texttt {IsCodeword}|hyperpage}{22} \indexentry{=@\texttt {=}|hyperpage}{22} \indexentry{not =|hyperpage}{22} \indexentry{{\textless} {\textgreater}|hyperpage}{22} \indexentry{+@\texttt {+}|hyperpage}{23} \indexentry{codewords, addition|hyperpage}{23} \indexentry{-@\texttt {-}|hyperpage}{23} \indexentry{codewords, subtraction|hyperpage}{23} \indexentry{+@\texttt {+}|hyperpage}{23} \indexentry{codewords, cosets|hyperpage}{23} \indexentry{coset|hyperpage}{23} \indexentry{VectorCodeword@\texttt {VectorCodeword}|hyperpage}{24} \indexentry{PolyCodeword@\texttt {PolyCodeword}|hyperpage}{24} \indexentry{TreatAsVector@\texttt {TreatAsVector}|hyperpage}{25} \indexentry{TreatAsPoly@\texttt {TreatAsPoly}|hyperpage}{25} \indexentry{NullWord@\texttt {NullWord}|hyperpage}{26} \indexentry{DistanceCodeword@\texttt {DistanceCodeword}|hyperpage}{26} \indexentry{Support@\texttt {Support}|hyperpage}{26} \indexentry{WeightCodeword@\texttt {WeightCodeword}|hyperpage}{27} \indexentry{code|hyperpage}{28} \indexentry{code, elements of|hyperpage}{28} \indexentry{code, unrestricted|hyperpage}{28} \indexentry{code, $(n,M,d)$|hyperpage}{28} \indexentry{minimum distance|hyperpage}{28} \indexentry{length|hyperpage}{28} \indexentry{size|hyperpage}{28} \indexentry{code, linear|hyperpage}{28} \indexentry{parity check matrix|hyperpage}{28} \indexentry{code, $[n, k, d]r$|hyperpage}{29} \indexentry{code, cyclic|hyperpage}{29} \indexentry{generator polynomial|hyperpage}{29} \indexentry{check polynomial|hyperpage}{29} \indexentry{=@\texttt {=}|hyperpage}{30} \indexentry{not =|hyperpage}{30} \indexentry{{\textless} {\textgreater}|hyperpage}{30} \indexentry{+@\texttt {+}|hyperpage}{31} \indexentry{codes, addition|hyperpage}{31} \indexentry{codes, direct sum|hyperpage}{31} \indexentry{*@\texttt {*}|hyperpage}{31} \indexentry{codes, product|hyperpage}{31} \indexentry{*@\texttt {*}|hyperpage}{31} \indexentry{codes, encoding|hyperpage}{31} \indexentry{encoder map|hyperpage}{31} \indexentry{InformationWord@\texttt {InformationWord}|hyperpage}{32} \indexentry{codes, decoding|hyperpage}{32} \indexentry{information bits|hyperpage}{32} \indexentry{in@\texttt {in}|hyperpage}{32} \indexentry{code, element test|hyperpage}{32} \indexentry{IsSubset@\texttt {IsSubset}|hyperpage}{33} \indexentry{code, subcode|hyperpage}{33} \indexentry{IsCode@\texttt {IsCode}|hyperpage}{33} \indexentry{IsLinearCode@\texttt {IsLinearCode}|hyperpage}{33} \indexentry{IsCyclicCode@\texttt {IsCyclicCode}|hyperpage}{33} \indexentry{IsPerfectCode@\texttt {IsPerfectCode}|hyperpage}{34} \indexentry{code, perfect|hyperpage}{34} \indexentry{IsMDSCode@\texttt {IsMDSCode}|hyperpage}{34} \indexentry{code, maximum distance separable|hyperpage}{35} \indexentry{MDS|hyperpage}{35} \indexentry{IsSelfDualCode@\texttt {IsSelfDualCode}|hyperpage}{35} \indexentry{code, self-dual|hyperpage}{35} \indexentry{self-orthogonal|hyperpage}{35} \indexentry{IsSelfOrthogonalCode@\texttt {IsSelfOrthogonalCode}|hyperpage}{35} \indexentry{code, self-orthogonal|hyperpage}{35} \indexentry{doubly-even|hyperpage}{35} \indexentry{IsDoublyEvenCode@\texttt {IsDoublyEvenCode}|hyperpage}{35} \indexentry{code, doubly-even|hyperpage}{36} \indexentry{singly-even|hyperpage}{36} \indexentry{IsSinglyEvenCode@\texttt {IsSinglyEvenCode}|hyperpage}{36} \indexentry{code, singly-even|hyperpage}{36} \indexentry{even|hyperpage}{36} \indexentry{IsEvenCode@\texttt {IsEvenCode}|hyperpage}{36} \indexentry{code, even|hyperpage}{36} \indexentry{self complementary code|hyperpage}{37} \indexentry{IsSelfComplementaryCode@\texttt {IsSelfComplementaryCode}|hyperpage}{37} \indexentry{affine code|hyperpage}{37} \indexentry{IsAffineCode@\texttt {IsAffineCode}|hyperpage}{37} \indexentry{IsAlmostAffineCode@\texttt {IsAlmostAffineCode}|hyperpage}{38} \indexentry{permutation equivalent codes|hyperpage}{38} \indexentry{equivalent codes|hyperpage}{38} \indexentry{IsEquivalent@\texttt {IsEquivalent}|hyperpage}{38} \indexentry{CodeIsomorphism@\texttt {CodeIsomorphism}|hyperpage}{38} \indexentry{AutomorphismGroup@\texttt {AutomorphismGroup}|hyperpage}{39} \indexentry{PermutationAutomorphismGroup|hyperpage}{39} \indexentry{PermutationAutomorphismGroup@\texttt {PermutationAutomorphismGroup}|hyperpage}{40} \indexentry{IsFinite@\texttt {IsFinite}|hyperpage}{40} \indexentry{Size@\texttt {Size}|hyperpage}{40} \indexentry{LeftActingDomain@\texttt {LeftActingDomain}|hyperpage}{41} \indexentry{Dimension@\texttt {Dimension}|hyperpage}{41} \indexentry{AsSSortedList@\texttt {AsSSortedList}|hyperpage}{41} \indexentry{Print@\texttt {Print}|hyperpage}{42} \indexentry{String@\texttt {String}|hyperpage}{42} \indexentry{Display@\texttt {Display}|hyperpage}{43} \indexentry{DisplayBoundsInfo@\texttt {DisplayBoundsInfo}|hyperpage}{43} \indexentry{GeneratorMat@\texttt {GeneratorMat}|hyperpage}{44} \indexentry{CheckMat@\texttt {CheckMat}|hyperpage}{44} \indexentry{GeneratorPol@\texttt {GeneratorPol}|hyperpage}{45} \indexentry{CheckPol@\texttt {CheckPol}|hyperpage}{45} \indexentry{RootsOfCode@\texttt {RootsOfCode}|hyperpage}{45} \indexentry{WordLength@\texttt {WordLength}|hyperpage}{46} \indexentry{Redundancy@\texttt {Redundancy}|hyperpage}{46} \indexentry{MinimumDistance@\texttt {MinimumDistance}|hyperpage}{46} \indexentry{MinimumDistanceLeon@\texttt {MinimumDistanceLeon}|hyperpage}{47} \indexentry{MinimumWeight@\texttt {MinimumWeight}|hyperpage}{48} \indexentry{DecreaseMinimumDistanceUpperBound@\texttt {DecreaseMinimumDistanceUpperBound}|hyperpage}{51} \indexentry{MinimumDistanceRandom@\texttt {MinimumDistanceRandom}|hyperpage}{51} \indexentry{$t(n,k)$|hyperpage}{53} \indexentry{covering code|hyperpage}{53} \indexentry{CoveringRadius@\texttt {CoveringRadius}|hyperpage}{53} \indexentry{SetCoveringRadius@\texttt {SetCoveringRadius}|hyperpage}{54} \indexentry{MinimumWeightWords@\texttt {MinimumWeightWords}|hyperpage}{54} \indexentry{WeightDistribution@\texttt {WeightDistribution}|hyperpage}{54} \indexentry{InnerDistribution@\texttt {InnerDistribution}|hyperpage}{55} \indexentry{distance|hyperpage}{55} \indexentry{DistancesDistribution@\texttt {DistancesDistribution}|hyperpage}{55} \indexentry{OuterDistribution@\texttt {OuterDistribution}|hyperpage}{56} \indexentry{Decode@\texttt {Decode}|hyperpage}{56} \indexentry{Decodeword@\texttt {Decodeword}|hyperpage}{57} \indexentry{GeneralizedReedSolomonDecoderGao@\texttt {GeneralizedReedSolomonDecoderGao}|hyperpage}{58} \indexentry{GeneralizedReedSolomonListDecoder@\texttt {GeneralizedReedSolomonListDecoder}|hyperpage}{58} \indexentry{BitFlipDecoder@\texttt {BitFlipDecoder}|hyperpage}{59} \indexentry{NearestNeighborGRSDecodewords@\texttt {NearestNeighborGRSDecodewords}|hyperpage}{60} \indexentry{NearestNeighborDecodewords@\texttt {NearestNeighborDecodewords}|hyperpage}{60} \indexentry{Syndrome@\texttt {Syndrome}|hyperpage}{61} \indexentry{SyndromeTable@\texttt {SyndromeTable}|hyperpage}{62} \indexentry{syndrome table|hyperpage}{62} \indexentry{StandardArray@\texttt {StandardArray}|hyperpage}{62} \indexentry{PermutationDecode@\texttt {PermutationDecode}|hyperpage}{62} \indexentry{PermutationDecodeNC@\texttt {PermutationDecodeNC}|hyperpage}{63} \indexentry{ElementsCode@\texttt {ElementsCode}|hyperpage}{64} \indexentry{code, Hadamard|hyperpage}{65} \indexentry{HadamardCode@\texttt {HadamardCode}|hyperpage}{65} \indexentry{Hadamard matrix|hyperpage}{65} \indexentry{code, conference|hyperpage}{65} \indexentry{ConferenceCode@\texttt {ConferenceCode}|hyperpage}{65} \indexentry{conference matrix|hyperpage}{66} \indexentry{MOLSCode@\texttt {MOLSCode}|hyperpage}{66} \indexentry{RandomCode@\texttt {RandomCode}|hyperpage}{67} \indexentry{code, Nordstrom-Robinson|hyperpage}{67} \indexentry{NordstromRobinsonCode@\texttt {NordstromRobinsonCode}|hyperpage}{67} \indexentry{code, greedy|hyperpage}{67} \indexentry{GreedyCode@\texttt {GreedyCode}|hyperpage}{67} \indexentry{LexiCode@\texttt {LexiCode}|hyperpage}{68} \indexentry{GeneratorMatCode@\texttt {GeneratorMatCode}|hyperpage}{68} \indexentry{CheckMatCodeMutable@\texttt {CheckMatCodeMutable}|hyperpage}{69} \indexentry{CheckMatCode@\texttt {CheckMatCode}|hyperpage}{69} \indexentry{code, Hamming|hyperpage}{69} \indexentry{HammingCode@\texttt {HammingCode}|hyperpage}{70} \indexentry{code, Reed-Muller|hyperpage}{70} \indexentry{ReedMullerCode@\texttt {ReedMullerCode}|hyperpage}{70} \indexentry{code, alternant|hyperpage}{70} \indexentry{AlternantCode@\texttt {AlternantCode}|hyperpage}{70} \indexentry{code, Goppa (classical)|hyperpage}{70} \indexentry{GoppaCode@\texttt {GoppaCode}|hyperpage}{71} \indexentry{code, Srivastava|hyperpage}{71} \indexentry{GeneralizedSrivastavaCode@\texttt {GeneralizedSrivastavaCode}|hyperpage}{71} \indexentry{SrivastavaCode@\texttt {SrivastavaCode}|hyperpage}{72} \indexentry{code, Cordaro-Wagner|hyperpage}{72} \indexentry{CordaroWagnerCode@\texttt {CordaroWagnerCode}|hyperpage}{72} \indexentry{FerreroDesignCode@\texttt {FerreroDesignCode}|hyperpage}{72} \indexentry{RandomLinearCode@\texttt {RandomLinearCode}|hyperpage}{73} \indexentry{OptimalityCode@\texttt {OptimalityCode}|hyperpage}{74} \indexentry{BestKnownLinearCode@\texttt {BestKnownLinearCode}|hyperpage}{74} \indexentry{code, Gabidulin|hyperpage}{76} \indexentry{GabidulinCode@\texttt {GabidulinCode}|hyperpage}{76} \indexentry{EnlargedGabidulinCode@\texttt {EnlargedGabidulinCode}|hyperpage}{76} \indexentry{code, Davydov|hyperpage}{76} \indexentry{DavydovCode@\texttt {DavydovCode}|hyperpage}{76} \indexentry{code, Tombak|hyperpage}{76} \indexentry{TombakCode@\texttt {TombakCode}|hyperpage}{76} \indexentry{EnlargedTombakCode@\texttt {EnlargedTombakCode}|hyperpage}{76} \indexentry{code, Golay (binary)|hyperpage}{77} \indexentry{BinaryGolayCode@\texttt {BinaryGolayCode}|hyperpage}{77} \indexentry{ExtendedBinaryGolayCode@\texttt {ExtendedBinaryGolayCode}|hyperpage}{77} \indexentry{code, Golay (ternary)|hyperpage}{78} \indexentry{TernaryGolayCode@\texttt {TernaryGolayCode}|hyperpage}{78} \indexentry{ExtendedTernaryGolayCode@\texttt {ExtendedTernaryGolayCode}|hyperpage}{78} \indexentry{generator polynomial|hyperpage}{79} \indexentry{check polynomial|hyperpage}{79} \indexentry{GeneratorPolCode@\texttt {GeneratorPolCode}|hyperpage}{79} \indexentry{CheckPolCode@\texttt {CheckPolCode}|hyperpage}{80} \indexentry{RootsCode@\texttt {RootsCode}|hyperpage}{80} \indexentry{code, Bose-Chaudhuri-Hockenghem|hyperpage}{81} \indexentry{BCHCode@\texttt {BCHCode}|hyperpage}{81} \indexentry{Bose distance|hyperpage}{81} \indexentry{code, Reed-Solomon|hyperpage}{81} \indexentry{ReedSolomonCode@\texttt {ReedSolomonCode}|hyperpage}{82} \indexentry{ExtendedReedSolomonCode@\texttt {ExtendedReedSolomonCode}|hyperpage}{82} \indexentry{QRCode@\texttt {QRCode}|hyperpage}{82} \indexentry{QQRCodeNC@\texttt {QQRCodeNC}|hyperpage}{83} \indexentry{QQRCode@\texttt {QQRCode}|hyperpage}{83} \indexentry{code, Fire|hyperpage}{84} \indexentry{FireCode@\texttt {FireCode}|hyperpage}{84} \indexentry{order of polynomial|hyperpage}{84} \indexentry{WholeSpaceCode@\texttt {WholeSpaceCode}|hyperpage}{84} \indexentry{NullCode@\texttt {NullCode}|hyperpage}{85} \indexentry{RepetitionCode@\texttt {RepetitionCode}|hyperpage}{85} \indexentry{CyclicCodes@\texttt {CyclicCodes}|hyperpage}{85} \indexentry{NrCyclicCodes@\texttt {NrCyclicCodes}|hyperpage}{85} \indexentry{QuasiCyclicCode@\texttt {QuasiCyclicCode}|hyperpage}{86} \indexentry{CyclicMDSCode@\texttt {CyclicMDSCode}|hyperpage}{87} \indexentry{MDS|hyperpage}{87} \indexentry{cyclic|hyperpage}{87} \indexentry{FourNegacirculantSelfDualCode@\texttt {FourNegacirculantSelfDualCode}|hyperpage}{88} \indexentry{self-dual|hyperpage}{89} \indexentry{FourNegacirculantSelfDualCodeNC@\texttt {FourNegacirculantSelfDualCodeNC}|hyperpage}{89} \indexentry{code, evaluation|hyperpage}{89} \indexentry{EvaluationCode@\texttt {EvaluationCode}|hyperpage}{89} \indexentry{GeneralizedReedSolomonCode@\texttt {GeneralizedReedSolomonCode}|hyperpage}{89} \indexentry{GeneralizedReedMullerCode@\texttt {GeneralizedReedMullerCode}|hyperpage}{90} \indexentry{ToricPoints@\texttt {ToricPoints}|hyperpage}{91} \indexentry{code, toric|hyperpage}{91} \indexentry{ToricCode@\texttt {ToricCode}|hyperpage}{91} \indexentry{code, AG|hyperpage}{92} \indexentry{AffineCurve@\texttt {AffineCurve}|hyperpage}{92} \indexentry{point|hyperpage}{92} \indexentry{AffinePointsOnCurve@\texttt {AffinePointsOnCurve}|hyperpage}{93} \indexentry{GenusCurve@\texttt {GenusCurve}|hyperpage}{93} \indexentry{GOrbitPoint @\texttt {GOrbitPoint }|hyperpage}{93} \indexentry{divisor|hyperpage}{94} \indexentry{support|hyperpage}{94} \indexentry{DivisorOnAffineCurve@\texttt {DivisorOnAffineCurve}|hyperpage}{95} \indexentry{DivisorAddition @\texttt {DivisorAddition }|hyperpage}{95} \indexentry{DivisorDegree @\texttt {DivisorDegree }|hyperpage}{95} \indexentry{degree|hyperpage}{95} \indexentry{DivisorNegate @\texttt {DivisorNegate }|hyperpage}{96} \indexentry{DivisorIsZero @\texttt {DivisorIsZero }|hyperpage}{96} \indexentry{DivisorsEqual @\texttt {DivisorsEqual }|hyperpage}{96} \indexentry{DivisorGCD @\texttt {DivisorGCD }|hyperpage}{96} \indexentry{greatest common divisor|hyperpage}{96} \indexentry{DivisorLCM @\texttt {DivisorLCM }|hyperpage}{96} \indexentry{least common multiple|hyperpage}{96} \indexentry{RiemannRochSpaceBasisFunctionP1 @\texttt {RiemannRochSpaceBasisFunctionP1 }|hyperpage}{98} \indexentry{DivisorOfRationalFunctionP1 @\texttt {DivisorOfRationalFunctionP1 }|hyperpage}{98} \indexentry{RiemannRochSpaceBasisP1 @\texttt {RiemannRochSpaceBasisP1 }|hyperpage}{99} \indexentry{MoebiusTransformation @\texttt {MoebiusTransformation }|hyperpage}{100} \indexentry{ActionMoebiusTransformationOnFunction @\texttt {ActionMoebiusTransformationOnFunction }|hyperpage}{100} \indexentry{ActionMoebiusTransformationOnDivisorP1 @\texttt {ActionMoebiusTransformationOnDivisorP1 }|hyperpage}{100} \indexentry{IsActionMoebiusTransformationOnDivisorDefinedP1 @\texttt {IsAction}\discretionary {-}{}{}\texttt {Moebius}\discretionary {-}{}{}\texttt {Transformation}\discretionary {-}{}{}\texttt {On}\discretionary {-}{}{}\texttt {Divisor}\discretionary {-}{}{}\texttt {DefinedP1 }|hyperpage}{100} \indexentry{DivisorAutomorphismGroupP1 @\texttt {DivisorAutomorphismGroupP1 }|hyperpage}{101} \indexentry{MatrixRepresentationOnRiemannRochSpaceP1 @\texttt {Matrix}\discretionary {-}{}{}\texttt {Representation}\discretionary {-}{}{}\texttt {On}\discretionary {-}{}{}\texttt {Riemann}\discretionary {-}{}{}\texttt {Roch}\discretionary {-}{}{}\texttt {SpaceP1 }|hyperpage}{102} \indexentry{GoppaCodeClassical@\texttt {GoppaCodeClassical}|hyperpage}{103} \indexentry{EvaluationBivariateCode@\texttt {EvaluationBivariateCode}|hyperpage}{103} \indexentry{EvaluationBivariateCodeNC@\texttt {EvaluationBivariateCodeNC}|hyperpage}{103} \indexentry{OnePointAGCode@\texttt {OnePointAGCode}|hyperpage}{104} \indexentry{LDPC|hyperpage}{105} \indexentry{QCLDPCCodeFromGroup@\texttt {QCLDPCCodeFromGroup}|hyperpage}{106} \indexentry{Parity check|hyperpage}{108} \indexentry{ExtendedCode@\texttt {ExtendedCode}|hyperpage}{108} \indexentry{PuncturedCode@\texttt {PuncturedCode}|hyperpage}{109} \indexentry{EvenWeightSubcode@\texttt {EvenWeightSubcode}|hyperpage}{109} \indexentry{PermutedCode@\texttt {PermutedCode}|hyperpage}{110} \indexentry{ExpurgatedCode@\texttt {ExpurgatedCode}|hyperpage}{110} \indexentry{AugmentedCode@\texttt {AugmentedCode}|hyperpage}{111} \indexentry{RemovedElementsCode@\texttt {RemovedElementsCode}|hyperpage}{111} \indexentry{AddedElementsCode@\texttt {AddedElementsCode}|hyperpage}{112} \indexentry{ShortenedCode@\texttt {ShortenedCode}|hyperpage}{112} \indexentry{LengthenedCode@\texttt {LengthenedCode}|hyperpage}{113} \indexentry{SubCode@\texttt {SubCode}|hyperpage}{114} \indexentry{ResidueCode@\texttt {ResidueCode}|hyperpage}{114} \indexentry{ConstructionBCode@\texttt {ConstructionBCode}|hyperpage}{114} \indexentry{DualCode@\texttt {DualCode}|hyperpage}{115} \indexentry{self-dual|hyperpage}{115} \indexentry{ConversionFieldCode@\texttt {ConversionFieldCode}|hyperpage}{116} \indexentry{TraceCode@\texttt {TraceCode}|hyperpage}{116} \indexentry{CosetCode@\texttt {CosetCode}|hyperpage}{116} \indexentry{ConstantWeightSubcode@\texttt {ConstantWeightSubcode}|hyperpage}{117} \indexentry{StandardFormCode@\texttt {StandardFormCode}|hyperpage}{117} \indexentry{PiecewiseConstantCode@\texttt {PiecewiseConstantCode}|hyperpage}{118} \indexentry{DirectSumCode@\texttt {DirectSumCode}|hyperpage}{119} \indexentry{UUVCode@\texttt {UUVCode}|hyperpage}{119} \indexentry{DirectProductCode@\texttt {DirectProductCode}|hyperpage}{119} \indexentry{IntersectionCode@\texttt {IntersectionCode}|hyperpage}{120} \indexentry{hull|hyperpage}{120} \indexentry{UnionCode@\texttt {UnionCode}|hyperpage}{120} \indexentry{ExtendedDirectSumCode@\texttt {ExtendedDirectSumCode}|hyperpage}{121} \indexentry{AmalgamatedDirectSumCode@\texttt {AmalgamatedDirectSumCode}|hyperpage}{121} \indexentry{BlockwiseDirectSumCode@\texttt {BlockwiseDirectSumCode}|hyperpage}{122} \indexentry{ConstructionXCode@\texttt {ConstructionXCode}|hyperpage}{122} \indexentry{ConstructionXXCode@\texttt {ConstructionXXCode}|hyperpage}{123} \indexentry{BZCode@\texttt {BZCode}|hyperpage}{124} \indexentry{BZCodeNC@\texttt {BZCodeNC}|hyperpage}{125} \indexentry{bounds, Singleton|hyperpage}{126} \indexentry{UpperBoundSingleton@\texttt {UpperBoundSingleton}|hyperpage}{127} \indexentry{maximum distance separable|hyperpage}{127} \indexentry{bounds, Hamming|hyperpage}{127} \indexentry{bounds, sphere packing bound|hyperpage}{127} \indexentry{perfect|hyperpage}{127} \indexentry{UpperBoundHamming@\texttt {UpperBoundHamming}|hyperpage}{127} \indexentry{bounds, Johnson|hyperpage}{127} \indexentry{UpperBoundJohnson@\texttt {UpperBoundJohnson}|hyperpage}{127} \indexentry{bounds, Plotkin|hyperpage}{128} \indexentry{UpperBoundPlotkin@\texttt {UpperBoundPlotkin}|hyperpage}{128} \indexentry{bounds, Elias|hyperpage}{128} \indexentry{UpperBoundElias@\texttt {UpperBoundElias}|hyperpage}{128} \indexentry{bounds, Griesmer|hyperpage}{128} \indexentry{UpperBoundGriesmer@\texttt {UpperBoundGriesmer}|hyperpage}{129} \indexentry{Griesmer code|hyperpage}{129} \indexentry{IsGriesmerCode@\texttt {IsGriesmerCode}|hyperpage}{129} \indexentry{$A(n,d)$|hyperpage}{129} \indexentry{UpperBound@\texttt {UpperBound}|hyperpage}{129} \indexentry{LowerBoundMinimumDistance@\texttt {LowerBoundMinimumDistance}|hyperpage}{130} \indexentry{bound, Gilbert-Varshamov lower|hyperpage}{130} \indexentry{LowerBoundGilbertVarshamov@\texttt {LowerBoundGilbertVarshamov}|hyperpage}{130} \indexentry{bound, sphere packing lower|hyperpage}{130} \indexentry{LowerBoundSpherePacking@\texttt {LowerBoundSpherePacking}|hyperpage}{130} \indexentry{UpperBoundMinimumDistance@\texttt {UpperBoundMinimumDistance}|hyperpage}{131} \indexentry{BoundsMinimumDistance@\texttt {BoundsMinimumDistance}|hyperpage}{131} \indexentry{BoundsCoveringRadius@\texttt {BoundsCoveringRadius}|hyperpage}{132} \indexentry{IncreaseCoveringRadiusLowerBound@\texttt {IncreaseCoveringRadiusLowerBound}|hyperpage}{132} \indexentry{ExhaustiveSearchCoveringRadius@\texttt {ExhaustiveSearchCoveringRadius}|hyperpage}{133} \indexentry{GeneralLowerBoundCoveringRadius@\texttt {GeneralLowerBoundCoveringRadius}|hyperpage}{134} \indexentry{GeneralUpperBoundCoveringRadius@\texttt {GeneralUpperBoundCoveringRadius}|hyperpage}{134} \indexentry{LowerBoundCoveringRadiusSphereCovering@\texttt {LowerBoundCoveringRadiusSphereCovering}|hyperpage}{135} \indexentry{LowerBoundCoveringRadiusVanWee1@\texttt {LowerBoundCoveringRadiusVanWee1}|hyperpage}{135} \indexentry{LowerBoundCoveringRadiusVanWee2@\texttt {LowerBoundCoveringRadiusVanWee2}|hyperpage}{136} \indexentry{LowerBoundCoveringRadiusCountingExcess@\texttt {LowerBoundCoveringRadiusCountingExcess}|hyperpage}{136} \indexentry{LowerBoundCoveringRadiusEmbedded1@\texttt {LowerBoundCoveringRadiusEmbedded1}|hyperpage}{137} \indexentry{LowerBoundCoveringRadiusEmbedded2@\texttt {LowerBoundCoveringRadiusEmbedded2}|hyperpage}{137} \indexentry{LowerBoundCoveringRadiusInduction@\texttt {LowerBoundCoveringRadiusInduction}|hyperpage}{138} \indexentry{UpperBoundCoveringRadiusRedundancy@\texttt {UpperBoundCoveringRadiusRedundancy}|hyperpage}{138} \indexentry{external distance|hyperpage}{139} \indexentry{UpperBoundCoveringRadiusDelsarte@\texttt {UpperBoundCoveringRadiusDelsarte}|hyperpage}{139} \indexentry{UpperBoundCoveringRadiusStrength@\texttt {UpperBoundCoveringRadiusStrength}|hyperpage}{139} \indexentry{strength|hyperpage}{139} \indexentry{UpperBoundCoveringRadiusGriesmerLike@\texttt {UpperBoundCoveringRadiusGriesmerLike}|hyperpage}{139} \indexentry{UpperBoundCoveringRadiusCyclicCode@\texttt {UpperBoundCoveringRadiusCyclicCode}|hyperpage}{140} \indexentry{KrawtchoukMat@\texttt {KrawtchoukMat}|hyperpage}{141} \indexentry{Gary code|hyperpage}{141} \indexentry{GrayMat@\texttt {GrayMat}|hyperpage}{141} \indexentry{SylvesterMat@\texttt {SylvesterMat}|hyperpage}{141} \indexentry{Hadamard matrix|hyperpage}{142} \indexentry{HadamardMat@\texttt {HadamardMat}|hyperpage}{142} \indexentry{VandermondeMat@\texttt {VandermondeMat}|hyperpage}{142} \indexentry{standard form|hyperpage}{143} \indexentry{PutStandardForm@\texttt {PutStandardForm}|hyperpage}{143} \indexentry{IsInStandardForm@\texttt {IsInStandardForm}|hyperpage}{144} \indexentry{PermutedCols@\texttt {PermutedCols}|hyperpage}{144} \indexentry{VerticalConversionFieldMat@\texttt {VerticalConversionFieldMat}|hyperpage}{144} \indexentry{HorizontalConversionFieldMat@\texttt {HorizontalConversionFieldMat}|hyperpage}{145} \indexentry{mutually orthogonal Latin squares|hyperpage}{145} \indexentry{Latin square|hyperpage}{145} \indexentry{MOLS@\texttt {MOLS}|hyperpage}{145} \indexentry{IsLatinSquare@\texttt {IsLatinSquare}|hyperpage}{146} \indexentry{AreMOLS@\texttt {AreMOLS}|hyperpage}{146} \indexentry{CoordinateNorm@\texttt {CoordinateNorm}|hyperpage}{147} \indexentry{norm of a code|hyperpage}{147} \indexentry{CodeNorm@\texttt {CodeNorm}|hyperpage}{147} \indexentry{acceptable coordinate|hyperpage}{147} \indexentry{IsCoordinateAcceptable@\texttt {IsCoordinateAcceptable}|hyperpage}{147} \indexentry{acceptable coordinate|hyperpage}{148} \indexentry{GeneralizedCodeNorm@\texttt {GeneralizedCodeNorm}|hyperpage}{148} \indexentry{normal code|hyperpage}{148} \indexentry{IsNormalCode@\texttt {IsNormalCode}|hyperpage}{148} \indexentry{weight enumerator polynomial|hyperpage}{148} \indexentry{CodeWeightEnumerator@\texttt {CodeWeightEnumerator}|hyperpage}{148} \indexentry{CodeDistanceEnumerator@\texttt {CodeDistanceEnumerator}|hyperpage}{149} \indexentry{MacWilliams transform|hyperpage}{149} \indexentry{CodeMacWilliamsTransform@\texttt {CodeMacWilliamsTransform}|hyperpage}{149} \indexentry{density of a code|hyperpage}{149} \indexentry{CodeDensity@\texttt {CodeDensity}|hyperpage}{149} \indexentry{perfect code|hyperpage}{150} \indexentry{SphereContent@\texttt {SphereContent}|hyperpage}{150} \indexentry{Krawtchouk@\texttt {Krawtchouk}|hyperpage}{150} \indexentry{PrimitiveUnityRoot@\texttt {PrimitiveUnityRoot}|hyperpage}{150} \indexentry{PrimitivePolynomialsNr@\texttt {PrimitivePolynomialsNr}|hyperpage}{151} \indexentry{IrreduciblePolynomialsNr@\texttt {IrreduciblePolynomialsNr}|hyperpage}{151} \indexentry{MatrixRepresentationOfElement@\texttt {MatrixRepresentationOfElement}|hyperpage}{151} \indexentry{reciprocal polynomial|hyperpage}{152} \indexentry{ReciprocalPolynomial@\texttt {ReciprocalPolynomial}|hyperpage}{152} \indexentry{CyclotomicCosets@\texttt {CyclotomicCosets}|hyperpage}{152} \indexentry{WeightHistogram@\texttt {WeightHistogram}|hyperpage}{153} \indexentry{MultiplicityInList@\texttt {MultiplicityInList}|hyperpage}{153} \indexentry{MostCommonInList@\texttt {MostCommonInList}|hyperpage}{153} \indexentry{RotateList@\texttt {RotateList}|hyperpage}{154} \indexentry{CirculantMatrix@\texttt {CirculantMatrix}|hyperpage}{154} \indexentry{MatrixTransformationOnMultivariatePolynomial @\texttt {Matrix}\discretionary {-}{}{}\texttt {Transformation}\discretionary {-}{}{}\texttt {On}\discretionary {-}{}{}\texttt {Multivariate}\discretionary {-}{}{}\texttt {Polynomial }|hyperpage}{154} \indexentry{DegreeMultivariatePolynomial@\texttt {DegreeMultivariatePolynomial}|hyperpage}{154} \indexentry{DegreesMultivariatePolynomial@\texttt {DegreesMultivariatePolynomial}|hyperpage}{155} \indexentry{CoefficientMultivariatePolynomial@\texttt {CoefficientMultivariatePolynomial}|hyperpage}{155} \indexentry{SolveLinearSystem@\texttt {SolveLinearSystem}|hyperpage}{156} \indexentry{GuavaVersion@\texttt {GuavaVersion}|hyperpage}{156} \indexentry{ZechLog@\texttt {ZechLog}|hyperpage}{156} \indexentry{CoefficientToPolynomial@\texttt {CoefficientToPolynomial}|hyperpage}{157} \indexentry{DegreesMonomialTerm@\texttt {DegreesMonomialTerm}|hyperpage}{157} \indexentry{DivisorsMultivariatePolynomial@\texttt {DivisorsMultivariatePolynomial}|hyperpage}{158} guava-3.6/doc/manual.lab0000644017361200001450000002747511026723452015065 0ustar tabbottcrontab\makelabel{guava:The GAP error-correcting codes package GUAVA}{1} \makelabel{guava:Acknowledgements}{1.1} \makelabel{guava:Installing GUAVA}{1.2} \makelabel{guava:Loading GUAVA}{1.3} \makelabel{guava:Codewords}{2} \makelabel{guava:Construction of Codewords}{2.1} \makelabel{guava:Codeword}{2.1.1} \makelabel{guava:Codeword}{2.1.2} \makelabel{guava:IsCodeword}{2.1.3} \makelabel{guava:Comparisons of Codewords}{2.2} \makelabel{guava:codewords!equality}{2.2.1} \makelabel{guava:codewords!inequality}{2.2.1} \makelabel{guava:Arithmetic Operations for Codewords}{2.3} \makelabel{guava:codewords!addition}{2.3.1} \makelabel{guava:codewords!subtraction}{2.3.2} \makelabel{guava:code!cosets}{2.3.3} \makelabel{guava:code!cosets}{2.3.3} \makelabel{guava:Functions that Convert Codewords to Vectors or Polynomials}{2.4} \makelabel{guava:VectorCodeword}{2.4.1} \makelabel{guava:PolyCodeword}{2.4.2} \makelabel{guava:Functions that Change the Display Form of a Codeword}{2.5} \makelabel{guava:TreatAsVector}{2.5.1} \makelabel{guava:TreatAsPoly}{2.5.2} \makelabel{guava:Other Codeword Functions}{2.6} \makelabel{guava:NullWord}{2.6.1} \makelabel{guava:NullWord}{2.6.1} \makelabel{guava:NullWord}{2.6.1} \makelabel{guava:DistanceCodeword}{2.6.2} \makelabel{guava:Support}{2.6.3} \makelabel{guava:WeightCodeword}{2.6.4} \makelabel{guava:Codes}{3} \makelabel{guava:Comparisons of Codes}{3.1} \makelabel{guava:codes!equality}{3.1.1} \makelabel{guava:codes!inequality}{3.1.1} \makelabel{guava:Operations for Codes}{3.2} \makelabel{guava:codes!adition}{3.2.1} \makelabel{guava:codes!coset}{3.2.2} \makelabel{guava:codes!coset}{3.2.2} \makelabel{guava:codes!product}{3.2.3} \makelabel{guava:code!evaluation}{3.2.4} \makelabel{guava:code!element test}{3.2.5} \makelabel{guava:code!subcode}{3.2.6} \makelabel{guava:Boolean Functions for Codes}{3.3} \makelabel{guava:IsCode}{3.3.1} \makelabel{guava:IsLinearCode}{3.3.2} \makelabel{guava:IsCyclicCode}{3.3.3} \makelabel{guava:IsPerfectCode}{3.3.4} \makelabel{guava:IsMDSCode}{3.3.5} \makelabel{guava:IsSelfDualCode}{3.3.6} \makelabel{guava:IsSelfOrthogonalCode}{3.3.7} \makelabel{guava:Equivalence and Isomorphism of Codes}{3.4} \makelabel{guava:IsEquivalent}{3.4.1} \makelabel{guava:CodeIsomorphism}{3.4.2} \makelabel{guava:AutomorphismGroup}{3.4.3} \makelabel{guava:PermutationGroup}{3.4.4} \makelabel{guava:Domain Functions for Codes}{3.5} \makelabel{guava:IsFinite}{3.5.1} \makelabel{guava:Size}{3.5.2} \makelabel{guava:LeftActingDomain}{3.5.3} \makelabel{guava:Dimension}{3.5.4} \makelabel{guava:AsSSortedList}{3.5.5} \makelabel{guava:CodewordNr}{3.5.6} \makelabel{guava:Printing and Displaying Codes}{3.6} \makelabel{guava:Print}{3.6.1} \makelabel{guava:String}{3.6.2} \makelabel{guava:Display}{3.6.3} \makelabel{guava:Generating (Check) Matrices and Polynomials}{3.7} \makelabel{guava:GeneratorMat}{3.7.1} \makelabel{guava:CheckMat}{3.7.2} \makelabel{guava:GeneratorPol}{3.7.3} \makelabel{guava:CheckPol}{3.7.4} \makelabel{guava:RootsOfCode}{3.7.5} \makelabel{guava:Parameters of Codes}{3.8} \makelabel{guava:WordLength}{3.8.1} \makelabel{guava:Redundancy}{3.8.2} \makelabel{guava:MinimumDistance}{3.8.3} \makelabel{guava:MinimumDistance}{3.8.4} \makelabel{guava:MinimumDistanceLeon}{3.8.5} \makelabel{guava:Distributions}{3.9} \makelabel{guava:WeightDistribution}{3.9.1} \makelabel{guava:InnerDistribution}{3.9.2} \makelabel{guava:OuterDistribution}{3.9.3} \makelabel{guava:DistancesDistribution}{3.9.4} \makelabel{guava:Decoding Functions}{3.10} \makelabel{guava:Decode}{3.10.1} \makelabel{guava:Syndrome}{3.10.2} \makelabel{guava:SyndromeTable}{3.10.3} \makelabel{guava:StandardArray}{3.10.4} \makelabel{guava:PermutationDecode}{3.10.5} \makelabel{guava:Generating Codes}{4} \makelabel{guava:Generating Unrestricted Codes}{4.1} \makelabel{guava:ElementsCode}{4.1.1} \makelabel{guava:HadamardCode}{4.1.2} \makelabel{guava:HadamardCode}{4.1.2} \makelabel{guava:HadamardCode}{4.1.3} \makelabel{guava:HadamardCode}{4.1.3} \makelabel{guava:ConferenceCode!from a matrix}{4.1.4} \makelabel{guava:ConferenceCode!from an integer}{4.1.5} \makelabel{guava:MOLSCode}{4.1.6} \makelabel{guava:MOLSCode}{4.1.6} \makelabel{guava:RandomCode}{4.1.7} \makelabel{guava:NordstromRobinsonCode}{4.1.8} \makelabel{guava:GreedyCode}{4.1.9} \makelabel{guava:LexiCode}{4.1.10} \makelabel{guava:LexiCode!using a basis}{4.1.11} \makelabel{guava:Generating Linear Codes}{4.2} \makelabel{guava:GeneratorMatCode}{4.2.1} \makelabel{guava:CheckMatCode}{4.2.2} \makelabel{guava:HammingCode}{4.2.3} \makelabel{guava:ReedMullerCode}{4.2.4} \makelabel{guava:AlternantCode}{4.2.5} \makelabel{guava:AlternantCode}{4.2.5} \makelabel{guava:GoppaCode!with list of field elements parameter}{4.2.6} \makelabel{guava:GoppaCode!with integer parameter}{4.2.7} \makelabel{guava:GeneralizedSrivastavaCode}{4.2.8} \makelabel{guava:GeneralizedSrivastavaCode}{4.2.8} \makelabel{guava:SrivastavaCode}{4.2.9} \makelabel{guava:SrivastavaCode}{4.2.9} \makelabel{guava:CordaroWagnerCode}{4.2.10} \makelabel{guava:RandomLinearCode}{4.2.11} \makelabel{guava:BestKnownLinearCode}{4.2.12} \makelabel{guava:BestKnownLinearCode!of a record}{4.2.13} \makelabel{guava:Golay Codes}{4.3} \makelabel{guava:BinaryGolayCode}{4.3.1} \makelabel{guava:ExtendedBinaryGolayCode}{4.3.2} \makelabel{guava:TernaryGolayCode}{4.3.3} \makelabel{guava:ExtendedTernaryGolayCode}{4.3.4} \makelabel{guava:Generating Cyclic Codes}{4.4} \makelabel{guava:GeneratorPolCode}{4.4.1} \makelabel{guava:CheckPolCode}{4.4.2} \makelabel{guava:RootsCode}{4.4.3} \makelabel{guava:RootsCode!with field}{4.4.4} \makelabel{guava:BCHCode}{4.4.5} \makelabel{guava:BCHCode}{4.4.5} \makelabel{guava:ReedSolomonCode}{4.4.6} \makelabel{guava:QRCode}{4.4.7} \makelabel{guava:FireCode}{4.4.8} \makelabel{guava:WholeSpaceCode}{4.4.9} \makelabel{guava:NullCode}{4.4.10} \makelabel{guava:RepetitionCode}{4.4.11} \makelabel{guava:CyclicCodes}{4.4.12} \makelabel{guava:NrCyclicCodes}{4.4.13} \makelabel{guava:Toric codes}{4.5} \makelabel{guava:ToricCode}{4.5.1} \makelabel{guava:ToricPoints}{4.5.2} \makelabel{guava:Manipulating Codes}{5} \makelabel{guava:Functions that Generate a New Code from a Given Code}{5.1} \makelabel{guava:ExtendedCode}{5.1.1} \makelabel{guava:PuncturedCode}{5.1.2} \makelabel{guava:PuncturedCode!with list of punctures}{5.1.3} \makelabel{guava:EvenWeightSubcode}{5.1.4} \makelabel{guava:PermutedCode}{5.1.5} \makelabel{guava:ExpurgatedCode}{5.1.6} \makelabel{guava:AugmentedCode}{5.1.7} \makelabel{guava:AugmentedCode!without a list of codewords}{5.1.8} \makelabel{guava:RemovedElementsCode}{5.1.9} \makelabel{guava:AddedElementsCode}{5.1.10} \makelabel{guava:ShortenedCode}{5.1.11} \makelabel{guava:ShortenedCode!with list of columns}{5.1.12} \makelabel{guava:LengthenedCode}{5.1.13} \makelabel{guava:ResidueCode}{5.1.14} \makelabel{guava:ConstructionBCode}{5.1.15} \makelabel{guava:DualCode}{5.1.16} \makelabel{guava:ConversionFieldCode}{5.1.17} \makelabel{guava:CosetCode}{5.1.18} \makelabel{guava:ConstantWeightSubcode}{5.1.19} \makelabel{guava:ConstantWeightSubcode!for all minimum weight codewords}{5.1.20} \makelabel{guava:StandardFormCode}{5.1.21} \makelabel{guava:Functions that Generate a New Code from Two Given Codes}{5.2} \makelabel{guava:DirectSumCode}{5.2.1} \makelabel{guava:UUVCode}{5.2.2} \makelabel{guava:DirectProductCode}{5.2.3} \makelabel{guava:IntersectionCode}{5.2.4} \makelabel{guava:UnionCode}{5.2.5} \makelabel{guava:Bounds on Codes, Special Matrices and Miscellaneous Functions}{6} \makelabel{guava:Bounds on codes}{6.1} \makelabel{guava:UpperBoundSingleton}{6.1.1} \makelabel{guava:UpperBoundHamming}{6.1.2} \makelabel{guava:UpperBoundJohnson}{6.1.3} \makelabel{guava:UpperBoundPlotkin}{6.1.4} \makelabel{guava:UpperBoundElias}{6.1.5} \makelabel{guava:UpperBoundGriesmer}{6.1.6} \makelabel{guava:UpperBound}{6.1.7} \makelabel{guava:LowerBoundMinimumDistance}{6.1.8} \makelabel{guava:LowerBoundMinimumDistance!of codes over a field}{6.1.9} \makelabel{guava:UpperBoundMinimumDistance}{6.1.10} \makelabel{guava:UpperBoundMinimumDistance!of codes over a field}{6.1.11} \makelabel{guava:BoundsMinimumDistance}{6.1.12} \makelabel{guava:Special matrices in GUAVA}{6.2} \makelabel{guava:KrawtchoukMat}{6.2.1} \makelabel{guava:GrayMat}{6.2.2} \makelabel{guava:SylvesterMat}{6.2.3} \makelabel{guava:HadamardMat}{6.2.4} \makelabel{guava:MOLS}{6.2.5} \makelabel{guava:MOLS}{6.2.5} \makelabel{guava:PutStandardForm}{6.2.6} \makelabel{guava:PutStandardForm}{6.2.6} \makelabel{guava:IsInStandardForm}{6.2.7} \makelabel{guava:IsInStandardForm}{6.2.7} \makelabel{guava:PermutedCols}{6.2.8} \makelabel{guava:VerticalConversionFieldMat}{6.2.9} \makelabel{guava:HorizontalConversionFieldMat}{6.2.10} \makelabel{guava:IsLatinSquare}{6.2.11} \makelabel{guava:AreMOLS}{6.2.12} \makelabel{guava:Miscellaneous functions}{6.3} \makelabel{guava:SphereContent}{6.3.1} \makelabel{guava:Krawtchouk}{6.3.2} \makelabel{guava:PrimitiveUnityRoot}{6.3.3} \makelabel{guava:ReciprocalPolynomial}{6.3.4} \makelabel{guava:ReciprocalPolynomial}{6.3.5} \makelabel{guava:CyclotomicCosets}{6.3.6} \makelabel{guava:WeightHistogram}{6.3.7} \makelabel{guava:WeightHistogram}{6.3.7} \makelabel{guava:Extensions to GUAVA}{7} \makelabel{guava:Some functions for the covering radius}{7.1} \makelabel{guava:CoveringRadius}{7.1.1} \makelabel{guava:BoundsCoveringRadius}{7.1.2} \makelabel{guava:SetCoveringRadius}{7.1.3} \makelabel{guava:IncreaseCoveringRadiusLowerBound}{7.1.4} \makelabel{guava:ExhaustiveSearchCoveringRadius}{7.1.5} \makelabel{guava:GeneralLowerBoundCoveringRadius}{7.1.6} \makelabel{guava:GeneralUpperBoundCoveringRadius}{7.1.7} \makelabel{guava:LowerBoundCoveringRadiusSphereCovering}{7.1.8} \makelabel{guava:LowerBoundCoveringRadiusSphereCovering}{7.1.8} \makelabel{guava:LowerBoundCoveringRadiusVanWee1}{7.1.9} \makelabel{guava:LowerBoundCoveringRadiusVanWee1}{7.1.9} \makelabel{guava:LowerBoundCoveringRadiusVanWee2}{7.1.10} \makelabel{guava:LowerBoundCoveringRadiusVanWee2}{7.1.10} \makelabel{guava:LowerBoundCoveringRadiusCountingExcess}{7.1.11} \makelabel{guava:LowerBoundCoveringRadiusCountingExcess}{7.1.11} \makelabel{guava:LowerBoundCoveringRadiusEmbedded1}{7.1.12} \makelabel{guava:LowerBoundCoveringRadiusEmbedded1}{7.1.12} \makelabel{guava:LowerBoundCoveringRadiusEmbedded2}{7.1.13} \makelabel{guava:LowerBoundCoveringRadiusEmbedded2}{7.1.13} \makelabel{guava:LowerBoundCoveringRadiusInduction}{7.1.14} \makelabel{guava:UpperBoundCoveringRadiusRedundancy}{7.1.15} \makelabel{guava:UpperBoundCoveringRadiusDelsarte}{7.1.16} \makelabel{guava:UpperBoundCoveringRadiusStrength}{7.1.17} \makelabel{guava:UpperBoundCoveringRadiusGriesmerLike}{7.1.18} \makelabel{guava:UpperBoundCoveringRadiusCyclicCode}{7.1.19} \makelabel{guava:New code constructions}{7.2} \makelabel{guava:ExtendedDirectSumCode}{7.2.1} \makelabel{guava:AmalgamatedDirectSumCode}{7.2.2} \makelabel{guava:BlockwiseDirectSumCode}{7.2.3} \makelabel{guava:PiecewiseConstantCode}{7.2.4} \makelabel{guava:Gabidulin codes}{7.3} \makelabel{guava:GabidulinCode}{7.3.1} \makelabel{guava:EnlargedGabidulinCode}{7.3.2} \makelabel{guava:DavydovCode}{7.3.3} \makelabel{guava:TombakCode}{7.3.4} \makelabel{guava:EnlargedTombakCode}{7.3.5} \makelabel{guava:Some functions related to the norm of a code}{7.4} \makelabel{guava:CoordinateNorm}{7.4.1} \makelabel{guava:CodeNorm}{7.4.2} \makelabel{guava:IsCoordinateAcceptable}{7.4.3} \makelabel{guava:GeneralizedCodeNorm}{7.4.4} \makelabel{guava:IsNormalCode}{7.4.5} \makelabel{guava:DecreaseMinimumDistanceLowerBound}{7.4.6} \makelabel{guava:New miscellaneous functions}{7.5} \makelabel{guava:CodeWeightEnumerator}{7.5.1} \makelabel{guava:CodeDistanceEnumerator}{7.5.2} \makelabel{guava:CodeMacWilliamsTransform}{7.5.3} \makelabel{guava:IsSelfComplementaryCode}{7.5.4} \makelabel{guava:IsAffineCode}{7.5.5} \makelabel{guava:IsAlmostAffineCode}{7.5.6} \makelabel{guava:IsGriesmerCode}{7.5.7} \makelabel{guava:CodeDensity}{7.5.8} \makelabel{guava:Bibliography}{} \setcitlab {GDT91}{GDT91} \setcitlab {Han99}{Han99} \setcitlab {HP03}{HP03} \setcitlab {Leon88}{Leo88} \setcitlab {Leon91}{Leo91} \setcitlab {MS83}{MS83} \makelabel{guava:Index}{} guava-3.6/doc/chap2.html0000644017361200001450000004115211027015742014774 0ustar tabbottcrontab GAP (guava) - Chapter 2: Coding theory functions in GAP
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

2. Coding theory functions in GAP

This chapter will recall from the GAP4.4.5 manual some of the GAP coding theory and finite field functions useful for coding theory. Some of these functions are partially written in C for speed. The main functions are

  • AClosestVectorCombinationsMatFFEVecFFE,

  • AClosestVectorCombinationsMatFFEVecFFECoords,

  • CosetLeadersMatFFE,

  • DistancesDistributionMatFFEVecFFE,

  • DistancesDistributionVecFFEsVecFFE,

  • DistanceVecFFE and WeightVecFFE,

  • ConwayPolynomial and IsCheapConwayPolynomial,

  • IsPrimitivePolynomial, and RandomPrimitivePolynomial.

However, the GAP command PrimitivePolynomial returns an integer primitive polynomial not the finite field kind.

2.1 Distance functions

2.1-1 AClosestVectorCombinationsMatFFEVecFFE
> AClosestVectorCombinationsMatFFEVecFFE( mat, F, vec, r, st )( function )

This command runs through the F-linear combinations of the vectors in the rows of the matrix mat that can be written as linear combinations of exactly r rows (that is without using zero as a coefficient) and returns a vector from these that is closest to the vector vec. The length of the rows of mat and the length of vec must be equal, and all elements must lie in F. The rows of mat must be linearly independent. If it finds a vector of distance at most st, which must be a nonnegative integer, then it stops immediately and returns this vector.

gap> F:=GF(3);;
gap> x:= Indeterminate( F );; pol:= x^2+1;
x_1^2+Z(3)^0
gap> C := GeneratorPolCode(pol,8,F);
a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)
gap> v:=Codeword("12101111");
[ 1 2 1 0 1 1 1 1 ]
gap> v:=VectorCodeword(v);
[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ]
gap> G:=GeneratorMat(C);
[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
  [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
  [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
  [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
  [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
  [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ]
gap> AClosestVectorCombinationsMatFFEVecFFE(G,F,v,1,1);
[ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ]

2.1-2 AClosestVectorComb..MatFFEVecFFECoords
> AClosestVectorComb..MatFFEVecFFECoords( mat, F, vec, r, st )( function )

AClosestVectorCombinationsMatFFEVecFFECoords returns a two element list containing (a) the same closest vector as in AClosestVectorCombinationsMatFFEVecFFE, and (b) a vector v with exactly r non-zero entries, such that v*mat is the closest vector.

gap> F:=GF(3);;
gap> x:= Indeterminate( F );; pol:= x^2+1;
x_1^2+Z(3)^0
gap> C := GeneratorPolCode(pol,8,F);
a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)
gap> v:=Codeword("12101111"); v:=VectorCodeword(v);;
[ 1 2 1 0 1 1 1 1 ]
gap> G:=GeneratorMat(C);;
gap> AClosestVectorCombinationsMatFFEVecFFECoords(G,F,v,1,1);
[ [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ],
  [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0 ] ]

2.1-3 DistancesDistributionMatFFEVecFFE
> DistancesDistributionMatFFEVecFFE( mat, f, vec )( function )

DistancesDistributionMatFFEVecFFE returns the distances distribution of the vector vec to the vectors in the vector space generated by the rows of the matrix mat over the finite field f. All vectors must have the same length, and all elements must lie in a common field. The distances distribution is a list d of length Length(vec)+1, such that the value d[i] is the number of vectors in vecs that have distance i+1 to vec.

gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
gap> vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
>   [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
>   [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
>   [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
>   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
>   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];;
gap> DistancesDistributionMatFFEVecFFE(vecs,GF(3),v);
[ 0, 4, 6, 60, 109, 216, 192, 112, 30 ]

2.1-4 DistancesDistributionVecFFEsVecFFE
> DistancesDistributionVecFFEsVecFFE( vecs, vec )( function )

DistancesDistributionVecFFEsVecFFE returns the distances distribution of the vector vec to the vectors in the list vecs. All vectors must have the same length, and all elements must lie in a common field. The distances distribution is a list d of length Length(vec)+1, such that the value d[i] is the number of vectors in vecs that have distance i+1 to vec.

gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
gap> vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
>   [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],
>   [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],
>   [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],
>   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],
>   [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];;
gap> DistancesDistributionVecFFEsVecFFE(vecs,v);
[ 0, 0, 0, 0, 0, 4, 0, 1, 1 ]

2.1-5 WeightVecFFE
> WeightVecFFE( vec )( function )

WeightVecFFE returns the weight of the finite field vector vec, i.e. the number of nonzero entries.

gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
gap> WeightVecFFE(v);
7

2.1-6 DistanceVecFFE
> DistanceVecFFE( vec1, vec2 )( function )

The Hamming metric on GF(q)^n is the function

dist((v_1,...,v_n),(w_1,...,w_n)) =|\{i\in [1..n]\ |\ v_i\not= w_i\}|.

This is also called the (Hamming) distance between v=(v_1,...,v_n) and w=(w_1,...,w_n). DistanceVecFFE returns the distance between the two vectors vec1 and vec2, which must have the same length and whose elements must lie in a common field. The distance is the number of places where vec1 and vec2 differ.

gap> v1:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
gap> v2:=[ Z(3), Z(3)^0, Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];;
gap> DistanceVecFFE(v1,v2);
2

2.2 Other functions

We basically repeat, with minor variation, the material in the GAP manual or from Frank Luebeck's website http://www.math.rwth-aachen.de:8001/~Frank.Luebeck/data/ConwayPol on Conway polynomials. The prime fields: If p>= 2 is a prime then GF(p) denotes the field Z}/pZ}, with addition and multiplication performed mod p.

The prime power fields: Suppose q=p^r is a prime power, r>1, and put F=GF(p). Let F[x] denote the ring of all polynomials over F and let f(x) denote a monic irreducible polynomial in F[x] of degree r. The quotient E = F[x]/(f(x))= F[x]/f(x)F[x] is a field with q elements. If f(x) and E are related in this way, we say that f(x) is the defining polynomial of E. Any defining polynomial factors completely into distinct linear factors over the field it defines.

For any finite field F, the multiplicative group of non-zero elements F^x is a cyclic group. An alpha in F is called a primitive element if it is a generator of F^x. A defining polynomial f(x) of F is said to be primitive if it has a root in F which is a primitive element.

2.2-1 ConwayPolynomial
> ConwayPolynomial( p, n )( function )

A standard notation for the elements of GF(p) is given via the representatives 0, ..., p-1 of the cosets modulo p. We order these elements by 0 < 1 < 2 < ... < p-1. We introduce an ordering of the polynomials of degree r over GF(p). Let g(x) = g_rx^r + ... + g_0 and h(x) = h_rx^r + ... + h_0 (by convention, g_i=h_i=0 for i > r). Then we define g < h if and only if there is an index k with g_i = h_i for i > k and (-1)^r-k g_k < (-1)^r-k h_k.

The Conway polynomial f_p,r(x) for GF(p^r) is the smallest polynomial of degree r with respect to this ordering such that:

  • f_p,r(x) is monic,

  • f_p,r(x) is primitive, that is, any zero is a generator of the (cyclic) multiplicative group of GF(p^r),

  • for each proper divisor m of r we have that f_p,m(x^(p^r-1) / (p^m-1)) = 0 mod f_p,r(x); that is, the (p^r-1) / (p^m-1)-th power of a zero of f_p,r(x) is a zero of f_p,m(x).

ConwayPolynomial(p,n) returns the polynomial f_p,r(x) defined above.

IsCheapConwayPolynomial(p,n) returns true if ConwayPolynomial( p, n ) will give a result in reasonable time. This is either the case when this polynomial is pre-computed, or if n,p are not too big.

2.2-2 RandomPrimitivePolynomial
> RandomPrimitivePolynomial( F, n )( function )

For a finite field F and a positive integer n this function returns a primitive polynomial of degree n over F, that is a zero of this polynomial has maximal multiplicative order |F|^n-1.

IsPrimitivePolynomial(f) can be used to check if a univariate polynomial f is primitive or not.

Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

generated by GAPDoc2HTML

guava-3.6/doc/chap6.html0000644017361200001450000020416711027015742015007 0ustar tabbottcrontab GAP (guava) - Chapter 6: Manipulating Codes
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

6. Manipulating Codes

In this chapter we describe several functions GUAVA uses to manipulate codes. Some of the best codes are obtained by starting with for example a BCH code, and manipulating it.

In some cases, it is faster to perform calculations with a manipulated code than to use the original code. For example, if the dimension of the code is larger than half the word length, it is generally faster to compute the weight distribution by first calculating the weight distribution of the dual code than by directly calculating the weight distribution of the original code. The size of the dual code is smaller in these cases.

Because GUAVA keeps all information in a code record, in some cases the information can be preserved after manipulations. Therefore, computations do not always have to start from scratch.

In Section 6.1, we describe functions that take a code with certain parameters, modify it in some way and return a different code (see ExtendedCode (6.1-1), PuncturedCode (6.1-2), EvenWeightSubcode (6.1-3), PermutedCode (6.1-4), ExpurgatedCode (6.1-5), AugmentedCode (6.1-6), RemovedElementsCode (6.1-7), AddedElementsCode (6.1-8), ShortenedCode (6.1-9), LengthenedCode (6.1-10), ResidueCode (6.1-12), ConstructionBCode (6.1-13), DualCode (6.1-14), ConversionFieldCode (6.1-15), ConstantWeightSubcode (6.1-18), StandardFormCode (6.1-19) and CosetCode (6.1-17)). In Section 6.2, we describe functions that generate a new code out of two codes (see DirectSumCode (6.2-1), UUVCode (6.2-2), DirectProductCode (6.2-3), IntersectionCode (6.2-4) and UnionCode (6.2-5)).

6.1 Functions that Generate a New Code from a Given Code

6.1-1 ExtendedCode
> ExtendedCode( C[, i] )( function )

ExtendedCode extends the code C i times and returns the result. i is equal to 1 by default. Extending is done by adding a parity check bit after the last coordinate. The coordinates of all codewords now add up to zero. In the binary case, each codeword has even weight.

The word length increases by i. The size of the code remains the same. In the binary case, the minimum distance increases by one if it was odd. In other cases, that is not always true.

A cyclic code in general is no longer cyclic after extending.

gap> C1 := HammingCode( 3, GF(2) );
a linear [7,4,3]1 Hamming (3,2) code over GF(2)
gap> C2 := ExtendedCode( C1 );
a linear [8,4,4]2 extended code
gap> IsEquivalent( C2, ReedMullerCode( 1, 3 ) );
true
gap> List( AsSSortedList( C2 ), WeightCodeword );
[ 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8 ]
gap> C3 := EvenWeightSubcode( C1 );
a linear [7,3,4]2..3 even weight subcode 

To undo extending, call PuncturedCode (see PuncturedCode (6.1-2)). The function EvenWeightSubcode (see EvenWeightSubcode (6.1-3)) also returns a related code with only even weights, but without changing its word length.

6.1-2 PuncturedCode
> PuncturedCode( C )( function )

PuncturedCode punctures C in the last column, and returns the result. Puncturing is done simply by cutting off the last column from each codeword. This means the word length decreases by one. The minimum distance in general also decrease by one.

This command can also be called with the syntax PuncturedCode( C, L ). In this case, PuncturedCode punctures C in the columns specified by L, a list of integers. All columns specified by L are omitted from each codeword. If l is the length of L (so the number of removed columns), the word length decreases by l. The minimum distance can also decrease by l or less.

Puncturing a cyclic code in general results in a non-cyclic code. If the code is punctured in all the columns where a word of minimal weight is unequal to zero, the dimension of the resulting code decreases.

gap> C1 := BCHCode( 15, 5, GF(2) );
a cyclic [15,7,5]3..5 BCH code, delta=5, b=1 over GF(2)
gap> C2 := PuncturedCode( C1 );
a linear [14,7,4]3..5 punctured code
gap> ExtendedCode( C2 ) = C1;
false
gap> PuncturedCode( C1, [1,2,3,4,5,6,7] );
a linear [8,7,1]1 punctured code
gap> PuncturedCode( WholeSpaceCode( 4, GF(5) ) );
a linear [3,3,1]0 punctured code  # The dimension decreased from 4 to 3 

ExtendedCode extends the code again (see ExtendedCode (6.1-1)), although in general this does not result in the old code.

6.1-3 EvenWeightSubcode
> EvenWeightSubcode( C )( function )

EvenWeightSubcode returns the even weight subcode of C, consisting of all codewords of C with even weight. If C is a linear code and contains words of odd weight, the resulting code has a dimension of one less. The minimum distance always increases with one if it was odd. If C is a binary cyclic code, and g(x) is its generator polynomial, the even weight subcode either has generator polynomial g(x) (if g(x) is divisible by x-1) or g(x)* (x-1) (if no factor x-1 was present in g(x)). So the even weight subcode is again cyclic.

Of course, if all codewords of C are already of even weight, the returned code is equal to C.

gap> C1 := EvenWeightSubcode( BCHCode( 8, 4, GF(3) ) );
an (8,33,4..8)3..8 even weight subcode
gap> List( AsSSortedList( C1 ), WeightCodeword );
[ 0, 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, 6, 4, 4, 6, 4, 4, 8, 6, 4, 6, 8, 4, 4, 
  4, 6, 4, 6, 8, 4, 6, 8 ]
gap> EvenWeightSubcode( ReedMullerCode( 1, 3 ) );
a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) 

ExtendedCode also returns a related code of only even weights, but without reducing its dimension (see ExtendedCode (6.1-1)).

6.1-4 PermutedCode
> PermutedCode( C, L )( function )

PermutedCode returns C after column permutations. L (in GAP disjoint cycle notation) is the permutation to be executed on the columns of C. If C is cyclic, the result in general is no longer cyclic. If a permutation results in the same code as C, this permutation belongs to the automorphism group of C (see AutomorphismGroup (4.4-3)). In any case, the returned code is equivalent to C (see IsEquivalent (4.4-1)).

gap> C1 := PuncturedCode( ReedMullerCode( 1, 4 ) );
a linear [15,5,7]5 punctured code
gap> C2 := BCHCode( 15, 7, GF(2) );
a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
gap> C2 = C1;
false
gap> p := CodeIsomorphism( C1, C2 );
( 2, 4,14, 9,13, 7,11,10, 6, 8,12, 5)
gap> C3 := PermutedCode( C1, p );
a linear [15,5,7]5 permuted code
gap> C2 = C3;
true 

6.1-5 ExpurgatedCode
> ExpurgatedCode( C, L )( function )

ExpurgatedCode expurgates the code C> by throwing away codewords in list L. C must be a linear code. L must be a list of codeword input. The generator matrix of the new code no longer is a basis for the codewords specified by L. Since the returned code is still linear, it is very likely that, besides the words of L, more codewords of C are no longer in the new code.

gap> C1 := HammingCode( 4 );; WeightDistribution( C1 );
[ 1, 0, 0, 35, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ]
gap> L := Filtered( AsSSortedList(C1), i -> WeightCodeword(i) = 3 );;
gap> C2 := ExpurgatedCode( C1, L );
a linear [15,4,3..4]5..11 code, expurgated with 7 word(s)
gap> WeightDistribution( C2 );
[ 1, 0, 0, 0, 14, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 ] 

This function does not work on non-linear codes. For removing words from a non-linear code, use RemovedElementsCode (see RemovedElementsCode (6.1-7)). For expurgating a code of all words of odd weight, use `EvenWeightSubcode' (see EvenWeightSubcode (6.1-3)).

6.1-6 AugmentedCode
> AugmentedCode( C, L )( function )

AugmentedCode returns C after augmenting. C must be a linear code, L must be a list of codeword inputs. The generator matrix of the new code is a basis for the codewords specified by L as well as the words that were already in code C. Note that the new code in general will consist of more words than only the codewords of C and the words L. The returned code is also a linear code.

This command can also be called with the syntax AugmentedCode(C). When called without a list of codewords, AugmentedCode returns C after adding the all-ones vector to the generator matrix. C must be a linear code. If the all-ones vector was already in the code, nothing happens and a copy of the argument is returned. If C is a binary code which does not contain the all-ones vector, the complement of all codewords is added.

gap> C31 := ReedMullerCode( 1, 3 );
a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
gap> C32 := AugmentedCode(C31,["00000011","00000101","00010001"]);
a linear [8,7,1..2]1 code, augmented with 3 word(s)
gap> C32 = ReedMullerCode( 2, 3 );
true 
gap> C1 := CordaroWagnerCode(6);
a linear [6,2,4]2..3 Cordaro-Wagner code over GF(2)
gap> Codeword( [0,0,1,1,1,1] ) in C1;
true
gap> C2 := AugmentedCode( C1 );
a linear [6,3,1..2]2..3 code, augmented with 1 word(s)
gap> Codeword( [1,1,0,0,0,0] ) in C2;
true

The function AddedElementsCode adds elements to the codewords instead of adding them to the basis (see AddedElementsCode (6.1-8)).

6.1-7 RemovedElementsCode
> RemovedElementsCode( C, L )( function )

RemovedElementsCode returns code C after removing a list of codewords L from its elements. L must be a list of codeword input. The result is an unrestricted code.

gap> C1 := HammingCode( 4 );; WeightDistribution( C1 );
[ 1, 0, 0, 35, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ]
gap> L := Filtered( AsSSortedList(C1), i -> WeightCodeword(i) = 3 );;
gap> C2 := RemovedElementsCode( C1, L );
a (15,2013,3..15)2..15 code with 35 word(s) removed
gap> WeightDistribution( C2 );
[ 1, 0, 0, 0, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ]
gap> MinimumDistance( C2 );
3        # C2 is not linear, so the minimum weight does not have to
         # be equal to the minimum distance 

Adding elements to a code is done by the function AddedElementsCode (see AddedElementsCode (6.1-8)). To remove codewords from the base of a linear code, use ExpurgatedCode (see ExpurgatedCode (6.1-5)).

6.1-8 AddedElementsCode
> AddedElementsCode( C, L )( function )

AddedElementsCode returns code C after adding a list of codewords L to its elements. L must be a list of codeword input. The result is an unrestricted code.

gap> C1 := NullCode( 6, GF(2) );
a cyclic [6,0,6]6 nullcode over GF(2)
gap> C2 := AddedElementsCode( C1, [ "111111" ] );
a (6,2,1..6)3 code with 1 word(s) added
gap> IsCyclicCode( C2 );
true
gap> C3 := AddedElementsCode( C2, [ "101010", "010101" ] );
a (6,4,1..6)2 code with 2 word(s) added
gap> IsCyclicCode( C3 );
true 

To remove elements from a code, use RemovedElementsCode (see RemovedElementsCode (6.1-7)). To add elements to the base of a linear code, use AugmentedCode (see AugmentedCode (6.1-6)).

6.1-9 ShortenedCode
> ShortenedCode( C[, L] )( function )

ShortenedCode( C ) returns the code C shortened by taking a cross section. If C is a linear code, this is done by removing all codewords that start with a non-zero entry, after which the first column is cut off. If C was a [n,k,d] code, the shortened code generally is a [n-1,k-1,d] code. It is possible that the dimension remains the same; it is also possible that the minimum distance increases.

If C is a non-linear code, ShortenedCode first checks which finite field element occurs most often in the first column of the codewords. The codewords not starting with this element are removed from the code, after which the first column is cut off. The resulting shortened code has at least the same minimum distance as C.

This command can also be called using the syntax ShortenedCode(C,L). When called in this format, ShortenedCode repeats the shortening process on each of the columns specified by L. L therefore is a list of integers. The column numbers in L are the numbers as they are before the shortening process. If L has l entries, the returned code has a word length of l positions shorter than C.

gap> C1 := HammingCode( 4 );
a linear [15,11,3]1 Hamming (4,2) code over GF(2)
gap> C2 := ShortenedCode( C1 );
a linear [14,10,3]2 shortened code
gap> C3 := ElementsCode( ["1000", "1101", "0011" ], GF(2) );
a (4,3,1..4)2 user defined unrestricted code over GF(2)
gap> MinimumDistance( C3 );
2
gap> C4 := ShortenedCode( C3 );
a (3,2,2..3)1..2 shortened code
gap> AsSSortedList( C4 );
[ [ 0 0 0 ], [ 1 0 1 ] ]
gap> C5 := HammingCode( 5, GF(2) );
a linear [31,26,3]1 Hamming (5,2) code over GF(2)
gap> C6 := ShortenedCode( C5, [ 1, 2, 3 ] );
a linear [28,23,3]2 shortened code
gap> OptimalityLinearCode( C6 );
0

The function LengthenedCode lengthens the code again (only for linear codes), see LengthenedCode (6.1-10). In general, this is not exactly the inverse function.

6.1-10 LengthenedCode
> LengthenedCode( C[, i] )( function )

LengthenedCode( C ) returns the code C lengthened. C must be a linear code. First, the all-ones vector is added to the generator matrix (see AugmentedCode (6.1-6)). If the all-ones vector was already a codeword, nothing happens to the code. Then, the code is extended i times (see ExtendedCode (6.1-1)). i is equal to 1 by default. If C was an [n,k] code, the new code generally is a [n+i,k+1] code.

gap> C1 := CordaroWagnerCode( 5 );
a linear [5,2,3]2 Cordaro-Wagner code over GF(2)
gap> C2 := LengthenedCode( C1 );
a linear [6,3,2]2..3 code, lengthened with 1 column(s) 

ShortenedCode' shortens the code, see ShortenedCode (6.1-9). In general, this is not exactly the inverse function.

6.1-11 SubCode
> SubCode( C[, s] )( function )

This function SubCode returns a subcode of C by taking the first k - s rows of the generator matrix of C, where k is the dimension of C. The interger s may be omitted and in this case it is assumed as 1.

gap> C := BCHCode(31,11);
a cyclic [31,11,11]7..11 BCH code, delta=11, b=1 over GF(2)
gap> S1:= SubCode(C);
a linear [31,10,11]7..13 subcode
gap> WeightDistribution(S1);
[ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 190, 0, 0, 272, 255, 0, 0, 120, 66,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
gap> S2:= SubCode(C, 8);
a linear [31,3,11]14..20 subcode
gap> History(S2);
[ "a linear [31,3,11]14..20 subcode of",
  "a cyclic [31,11,11]7..11 BCH code, delta=11, b=1 over GF(2)" ]
gap> WeightDistribution(S2);
[ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0 ]

6.1-12 ResidueCode
> ResidueCode( C[, c] )( function )

The function ResidueCode takes a codeword c of C (if c is omitted, a codeword of minimal weight is used). It removes this word and all its linear combinations from the code and then punctures the code in the coordinates where c is unequal to zero. The resulting code is an [n-w, k-1, d-lfloor w*(q-1)/q rfloor ] code. C must be a linear code and c must be non-zero. If c is not in then no change is made to C.

gap> C1 := BCHCode( 15, 7 );
a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
gap> C2 := ResidueCode( C1 );
a linear [8,4,4]2 residue code
gap> c := Codeword( [ 0,0,0,1,0,0,1,1,0,1,0,1,1,1,1 ], C1);;
gap> C3 := ResidueCode( C1, c );
a linear [7,4,3]1 residue code 

6.1-13 ConstructionBCode
> ConstructionBCode( C )( function )

The function ConstructionBCode takes a binary linear code C and calculates the minimum distance of the dual of C (see DualCode (6.1-14)). It then removes the columns of the parity check matrix of C where a codeword of the dual code of minimal weight has coordinates unequal to zero. The resulting matrix is a parity check matrix for an [n-dd, k-dd+1, >= d] code, where dd is the minimum distance of the dual of C.

gap> C1 := ReedMullerCode( 2, 5 );
a linear [32,16,8]6 Reed-Muller (2,5) code over GF(2)
gap> C2 := ConstructionBCode( C1 );
a linear [24,9,8]5..10 Construction B (8 coordinates)
gap> BoundsMinimumDistance( 24, 9, GF(2) );
rec( n := 24, k := 9, q := 2, references := rec(  ), 
  construction := [ [ Operation "UUVCode" ], 
      [ [ [ Operation "UUVCode" ], [ [ [ Operation "DualCode" ], 
                      [ [ [ Operation "RepetitionCode" ], [ 6, 2 ] ] ] ], 
                  [ [ Operation "CordaroWagnerCode" ], [ 6 ] ] ] ], 
          [ [ Operation "CordaroWagnerCode" ], [ 12 ] ] ] ], lowerBound := 8, 
  lowerBoundExplanation := [ "Lb(24,9)=8, u u+v construction of C1 and C2:", 
      "Lb(12,7)=4, u u+v construction of C1 and C2:", 
      "Lb(6,5)=2, dual of the repetition code", 
      "Lb(6,2)=4, Cordaro-Wagner code", "Lb(12,2)=8, Cordaro-Wagner code" ], 
  upperBound := 8, 
  upperBoundExplanation := [ "Ub(24,9)=8, otherwise construction B would 
                             contradict:", "Ub(18,4)=8, Griesmer bound" ] )
# so C2 is optimal

6.1-14 DualCode
> DualCode( C )( function )

DualCode returns the dual code of C. The dual code consists of all codewords that are orthogonal to the codewords of C. If C is a linear code with generator matrix G, the dual code has parity check matrix G (or if C has parity check matrix H, the dual code has generator matrix H). So if C is a linear [n, k] code, the dual code of C is a linear [n, n-k] code. If C is a cyclic code with generator polynomial g(x), the dual code has the reciprocal polynomial of g(x) as check polynomial.

The dual code is always a linear code, even if C is non-linear.

If a code C is equal to its dual code, it is called self-dual.

gap> R := ReedMullerCode( 1, 3 );
a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
gap> RD := DualCode( R );
a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
gap> R = RD;
true
gap> N := WholeSpaceCode( 7, GF(4) );
a cyclic [7,7,1]0 whole space code over GF(4)
gap> DualCode( N ) = NullCode( 7, GF(4) );
true 

6.1-15 ConversionFieldCode
> ConversionFieldCode( C )( function )

ConversionFieldCode returns the code obtained from C after converting its field. If the field of C is GF(q^m), the returned code has field GF(q). Each symbol of every codeword is replaced by a concatenation of m symbols from GF(q). If C is an (n, M, d_1) code, the returned code is a (n* m, M, d_2) code, where d_2 > d_1.

See also HorizontalConversionFieldMat (7.3-10).

gap> R := RepetitionCode( 4, GF(4) );
a cyclic [4,1,4]3 repetition code over GF(4)
gap> R2 := ConversionFieldCode( R );
a linear [8,2,4]3..4 code, converted to basefield GF(2)
gap> Size( R ) = Size( R2 );
true
gap> GeneratorMat( R );
[ [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ] ]
gap> GeneratorMat( R2 );
[ [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ],
  [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ] ] 

6.1-16 TraceCode
> TraceCode( C )( function )

Input: C is a linear code defined over an extension E of F (F is the ``base field'')

Output: The linear code generated by Tr_E/F(c), for all c in C.

TraceCode returns the image of the code C under the trace map. If the field of C is GF(q^m), the returned code has field GF(q).

Very slow. It does not seem to be easy to related the parameters of the trace code to the original except in the ``Galois closed'' case.

gap> C:=RandomLinearCode(10,4,GF(4)); MinimumDistance(C);
a  [10,4,?] randomly generated code over GF(4)
5
gap> trC:=TraceCode(C,GF(2)); MinimumDistance(trC);
a linear [10,7,1]1..3 user defined unrestricted code over GF(2)
1

6.1-17 CosetCode
> CosetCode( C, w )( function )

CosetCode returns the coset of a code C with respect to word w. w must be of the codeword type. Then, w is added to each codeword of C, yielding the elements of the new code. If C is linear and w is an element of C, the new code is equal to C, otherwise the new code is an unrestricted code.

Generating a coset is also possible by simply adding the word w to C. See 4.2.

gap> H := HammingCode(3, GF(2));
a linear [7,4,3]1 Hamming (3,2) code over GF(2)
gap> c := Codeword("1011011");; c in H;
false
gap> C := CosetCode(H, c);
a (7,16,3)1 coset code
gap> List(AsSSortedList(C), el-> Syndrome(H, el));
[ [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ],
  [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ],
  [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ] ]
# All elements of the coset have the same syndrome in H 

6.1-18 ConstantWeightSubcode
> ConstantWeightSubcode( C, w )( function )

ConstantWeightSubcode returns the subcode of C that only has codewords of weight w. The resulting code is a non-linear code, because it does not contain the all-zero vector.

This command also can be called with the syntax ConstantWeightSubcode(C) In this format, ConstantWeightSubcode returns the subcode of C consisting of all minimum weight codewords of C.

ConstantWeightSubcode first checks if Leon's binary wtdist exists on your computer (in the default directory). If it does, then this program is called. Otherwise, the constant weight subcode is computed using a GAP program which checks each codeword in C to see if it is of the desired weight.

gap> N := NordstromRobinsonCode();; WeightDistribution(N);
[ 1, 0, 0, 0, 0, 0, 112, 0, 30, 0, 112, 0, 0, 0, 0, 0, 1 ]
gap> C := ConstantWeightSubcode(N, 8);
a (16,30,6..16)5..8 code with codewords of weight 8
gap> WeightDistribution(C);
[ 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0 ] 
gap> eg := ExtendedTernaryGolayCode();; WeightDistribution(eg);
[ 1, 0, 0, 0, 0, 0, 264, 0, 0, 440, 0, 0, 24 ]
gap> C := ConstantWeightSubcode(eg);
a (12,264,6..12)3..6 code with codewords of weight 6
gap> WeightDistribution(C);
[ 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0 ] 

6.1-19 StandardFormCode
> StandardFormCode( C )( function )

StandardFormCode returns C after putting it in standard form. If C is a non-linear code, this means the elements are organized using lexicographical order. This means they form a legal GAP `Set'.

If C is a linear code, the generator matrix and parity check matrix are put in standard form. The generator matrix then has an identity matrix in its left part, the parity check matrix has an identity matrix in its right part. Although GUAVA always puts both matrices in a standard form using BaseMat, this never alters the code. StandardFormCode even applies column permutations if unavoidable, and thereby changes the code. The column permutations are recorded in the construction history of the new code (see Display (4.6-3)). C and the new code are of course equivalent.

If C is a cyclic code, its generator matrix cannot be put in the usual upper triangular form, because then it would be inconsistent with the generator polynomial. The reason is that generating the elements from the generator matrix would result in a different order than generating the elements from the generator polynomial. This is an unwanted effect, and therefore StandardFormCode just returns a copy of C for cyclic codes.

gap> G := GeneratorMatCode( Z(2) * [ [0,1,1,0], [0,1,0,1], [0,0,1,1] ], 
          "random form code", GF(2) );
a linear [4,2,1..2]1..2 random form code over GF(2)
gap> Codeword( GeneratorMat( G ) );
[ [ 0 1 0 1 ], [ 0 0 1 1 ] ]
gap> Codeword( GeneratorMat( StandardFormCode( G ) ) );
[ [ 1 0 0 1 ], [ 0 1 0 1 ] ] 

6.1-20 PiecewiseConstantCode
> PiecewiseConstantCode( part, wts[, F] )( function )

PiecewiseConstantCode returns a code with length n = sum n_i, where part=[ n_1, dots, n_k ]. wts is a list of constraints w=(w_1,...,w_k), each of length k, where 0 <= w_i <= n_i. The default field is GF(2).

A constraint is a list of integers, and a word c = ( c_1, dots, c_k ) (according to part, i.e., each c_i is a subword of length n_i) is in the resulting code if and only if, for some constraint w in wts, |c_i| = w_i for all 1 <= i <= k, where | ...| denotes the Hamming weight.

An example might make things clearer:

gap> PiecewiseConstantCode( [ 2, 3 ],
     [ [ 0, 0 ], [ 0, 3 ], [ 1, 0 ], [ 2, 2 ] ],GF(2) );
the C code programs are compiled, so using Leon's binary....
the C code programs are compiled, so using Leon's binary....
the C code programs are compiled, so using Leon's binary....
the C code programs are compiled, so using Leon's binary....
a (5,7,1..5)1..5 piecewise constant code over GF(2)
gap> AsSSortedList(last);
[ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 0 0 ], [ 1 0 0 0 0 ], 
  [ 1 1 0 1 1 ], [ 1 1 1 0 1 ], [ 1 1 1 1 0 ] ]
gap>

The first constraint is satisfied by codeword 1, the second by codeword 2, the third by codewords 3 and 4, and the fourth by codewords 5, 6 and 7.

6.2 Functions that Generate a New Code from Two or More Given Codes

6.2-1 DirectSumCode
> DirectSumCode( C1, C2 )( function )

DirectSumCode returns the direct sum of codes C1 and C2. The direct sum code consists of every codeword of C1 concatenated by every codeword of C2. Therefore, if Ci was a (n_i,M_i,d_i) code, the result is a (n_1+n_2,M_1*M_2,min(d_1,d_2)) code.

If both C1 and C2 are linear codes, the result is also a linear code. If one of them is non-linear, the direct sum is non-linear too. In general, a direct sum code is not cyclic.

Performing a direct sum can also be done by adding two codes (see Section 4.2). Another often used method is the `u, u+v'-construction, described in UUVCode (6.2-2).

gap> C1 := ElementsCode( [ [1,0], [4,5] ], GF(7) );;
gap> C2 := ElementsCode( [ [0,0,0], [3,3,3] ], GF(7) );;
gap> D := DirectSumCode(C1, C2);;
gap> AsSSortedList(D);
[ [ 1 0 0 0 0 ], [ 1 0 3 3 3 ], [ 4 5 0 0 0 ], [ 4 5 3 3 3 ] ]
gap> D = C1 + C2;   # addition = direct sum
true 

6.2-2 UUVCode
> UUVCode( C1, C2 )( function )

UUVCode returns the so-called (u|u+v) construction applied to C1 and C2. The resulting code consists of every codeword u of C1 concatenated by the sum of u and every codeword v of C2. If C1 and C2 have different word lengths, sufficient zeros are added to the shorter code to make this sum possible. If Ci is a (n_i,M_i,d_i) code, the result is an (n_1+max(n_1,n_2),M_1* M_2,min(2* d_1,d_2)) code.

If both C1 and C2 are linear codes, the result is also a linear code. If one of them is non-linear, the UUV sum is non-linear too. In general, a UUV sum code is not cyclic.

The function DirectSumCode returns another sum of codes (see DirectSumCode (6.2-1)).

gap> C1 := EvenWeightSubcode(WholeSpaceCode(4, GF(2)));
a cyclic [4,3,2]1 even weight subcode
gap> C2 := RepetitionCode(4, GF(2));
a cyclic [4,1,4]2 repetition code over GF(2)
gap> R := UUVCode(C1, C2);
a linear [8,4,4]2 U U+V construction code
gap> R = ReedMullerCode(1,3);
true 

6.2-3 DirectProductCode
> DirectProductCode( C1, C2 )( function )

DirectProductCode returns the direct product of codes C1 and C2. Both must be linear codes. Suppose Ci has generator matrix G_i. The direct product of C1 and C2 then has the Kronecker product of G_1 and G_2 as the generator matrix (see the GAP command KroneckerProduct).

If Ci is a [n_i, k_i, d_i] code, the direct product then is an [n_1* n_2,k_1* k_2,d_1* d_2] code.

gap> L1 := LexiCode(10, 4, GF(2));
a linear [10,5,4]2..4 lexicode over GF(2)
gap> L2 := LexiCode(8, 3, GF(2));
a linear [8,4,3]2..3 lexicode over GF(2)
gap> D := DirectProductCode(L1, L2);
a linear [80,20,12]20..45 direct product code 

6.2-4 IntersectionCode
> IntersectionCode( C1, C2 )( function )

IntersectionCode returns the intersection of codes C1 and C2. This code consists of all codewords that are both in C1 and C2. If both codes are linear, the result is also linear. If both are cyclic, the result is also cyclic.

gap> C := CyclicCodes(7, GF(2));
[ a cyclic [7,7,1]0 enumerated code over GF(2),
  a cyclic [7,6,1..2]1 enumerated code over GF(2),
  a cyclic [7,3,1..4]2..3 enumerated code over GF(2),
  a cyclic [7,0,7]7 enumerated code over GF(2),
  a cyclic [7,3,1..4]2..3 enumerated code over GF(2),
  a cyclic [7,4,1..3]1 enumerated code over GF(2),
  a cyclic [7,1,7]3 enumerated code over GF(2),
  a cyclic [7,4,1..3]1 enumerated code over GF(2) ]
gap> IntersectionCode(C[6], C[8]) = C[7];
true 

The hull of a linear code is the intersection of the code with its dual code. In other words, the hull of C is IntersectionCode(C, DualCode(C)).

6.2-5 UnionCode
> UnionCode( C1, C2 )( function )

UnionCode returns the union of codes C1 and C2. This code consists of the union of all codewords of C1 and C2 and all linear combinations. Therefore this function works only for linear codes. The function AddedElementsCode can be used for non-linear codes, or if the resulting code should not include linear combinations. See AddedElementsCode (6.1-8). If both arguments are cyclic, the result is also cyclic.

gap> G := GeneratorMatCode([[1,0,1],[0,1,1]]*Z(2)^0, GF(2));
a linear [3,2,1..2]1 code defined by generator matrix over GF(2)
gap> H := GeneratorMatCode([[1,1,1]]*Z(2)^0, GF(2));
a linear [3,1,3]1 code defined by generator matrix over GF(2)
gap> U := UnionCode(G, H);
a linear [3,3,1]0 union code
gap> c := Codeword("010");; c in G;
false
gap> c in H;
false
gap> c in U;
true 

6.2-6 ExtendedDirectSumCode
> ExtendedDirectSumCode( L, B, m )( function )

The extended direct sum construction is described in section V of Graham and Sloane [GS85]. The resulting code consists of m copies of L, extended by repeating the codewords of B m times.

Suppose L is an [n_L, k_L]r_L code, and B is an [n_L, k_B]r_B code (non-linear codes are also permitted). The length of B must be equal to the length of L. The length of the new code is n = m n_L, the dimension (in the case of linear codes) is k <= m k_L + k_B, and the covering radius is r <= lfloor m Psi( L, B ) rfloor, with

\Psi( L, B ) = \max_{u \in F_2^{n_L}} \frac{1}{2^{k_B}} \sum_{v \in B} {\rm d}( L, v + u ).

However, this computation will not be executed, because it may be too time consuming for large codes.

If L subseteq B, and L and B are linear codes, the last copy of L is omitted. In this case the dimension is k = m k_L + (k_B - k_L).

gap> c := HammingCode( 3, GF(2) );
a linear [7,4,3]1 Hamming (3,2) code over GF(2)
gap> d := WholeSpaceCode( 7, GF(2) );
a cyclic [7,7,1]0 whole space code over GF(2)
gap> e := ExtendedDirectSumCode( c, d, 3 );
a linear [21,15,1..3]2 3-fold extended direct sum code

6.2-7 AmalgamatedDirectSumCode
> AmalgamatedDirectSumCode( c1, c2[, check] )( function )

AmalgamatedDirectSumCode returns the amalgamated direct sum of the codes c1 and c2. The amalgamated direct sum code consists of all codewords of the form (u , | ,0 , | , v) if (u , | , 0) in c_1 and (0 , | , v) in c_2 and all codewords of the form (u , | , 1 , | , v) if (u , | , 1) in c_1 and (1 , | , v) in c_2. The result is a code with length n = n_1 + n_2 - 1 and size M <= M_1 * M_2 / 2.

If both codes are linear, they will first be standardized, with information symbols in the last and first coordinates of the first and second code, respectively.

If c1 is a normal code (see IsNormalCode (7.4-5)) with the last coordinate acceptable (see IsCoordinateAcceptable (7.4-3)), and c2 is a normal code with the first coordinate acceptable, then the covering radius of the new code is r <= r_1 + r_2. However, checking whether a code is normal or not is a lot of work, and almost all codes seem to be normal. Therefore, an option check can be supplied. If check is true, then the codes will be checked for normality. If check is false or omitted, then the codes will not be checked. In this case it is assumed that they are normal. Acceptability of the last and first coordinate of the first and second code, respectively, is in the last case also assumed to be done by the user.

gap> c := HammingCode( 3, GF(2) );
a linear [7,4,3]1 Hamming (3,2) code over GF(2)
gap> d := ReedMullerCode( 1, 4 );
a linear [16,5,8]6 Reed-Muller (1,4) code over GF(2)
gap> e := DirectSumCode( c, d );
a linear [23,9,3]7 direct sum code
gap> f := AmalgamatedDirectSumCode( c, d );;
gap> MinimumDistance( f );;
gap> CoveringRadius( f );; 
gap> f;
a linear [22,8,3]7 amalgamated direct sum code

6.2-8 BlockwiseDirectSumCode
> BlockwiseDirectSumCode( C1, L1, C2, L2 )( function )

BlockwiseDirectSumCode returns a subcode of the direct sum of C1 and C2. The fields of C1 and C2 must be same. The lists L1 and L2 are two equally long with elements from the ambient vector spaces of C1 and C2, respectively, or L1 and L2 are two equally long lists containing codes. The union of the codes in L1 and L2 must be C1 and C2, respectively.

In the first case, the blockwise direct sum code is defined as

bds = \bigcup_{1 \leq i \leq \ell} ( C_1 + (L_1)_i ) \oplus ( C_2 + (L_2)_i ),

where ell is the length of L1 and L2, and oplus is the direct sum.

In the second case, it is defined as

bds = \bigcup_{1 \leq i \leq \ell} ( (L_1)_i \oplus (L_2)_i ).

The length of the new code is n = n_1 + n_2.

gap> C1 := HammingCode( 3, GF(2) );;
gap> C2 := EvenWeightSubcode( WholeSpaceCode( 6, GF(2) ) );;
gap> BlockwiseDirectSumCode( C1, [[ 0,0,0,0,0,0,0 ],[ 1,0,1,0,1,0,0 ]],
> C2, [[ 0,0,0,0,0,0 ],[ 1,0,1,0,1,0 ]] );
a (13,1024,1..13)1..2 blockwise direct sum code

6.2-9 ConstructionXCode
> ConstructionXCode( C, A )( function )

Consider a list of j linear codes of the same length N over the same field F, C = C_1, C_2, ..., C_j, where the parameter of the ith code is C_i = [N, K_i, D_i] and C_j subset C_j-1 subset ... subset C_2 subset C_1. Consider a list of j-1 auxiliary linear codes of the same field F, A = A_1, A_2, ..., A_j-1 where the parameter of the ith code A_i is [n_i, k_i=(K_i-K_i+1), d_i], an [n, K_1, d] linear code over field F can be constructed where n = N + sum_i=1^j-1 n_i, and d = min D_j, D_j-1 + d_j-1, D_j-2 + d_j-2 + d_j-1, ..., D_1 + sum_i=1^j-1 d_i.

For more information on Construction X, refer to [SRC72].

gap> C1 := BCHCode(127, 43);
a cyclic [127,29,43]31..59 BCH code, delta=43, b=1 over GF(2)
gap> C2 := BCHCode(127, 47);
a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2)
gap> C3 := BCHCode(127, 55);
a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2)
gap> G1 := ShallowCopy( GeneratorMat(C2) );;
gap> Append(G1, [ GeneratorMat(C1)[23] ]);;
gap> C1 := GeneratorMatCode(G1, GF(2));
a linear [127,23,1..43]35..63 code defined by generator matrix over GF(2)
gap> MinimumDistance(C1);
43
gap> C := [ C1, C2, C3 ];
[ a linear [127,23,43]35..63 code defined by generator matrix over GF(2), 
  a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2), 
  a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2) ]
gap> IsSubset(C[1], C[2]);
true
gap> IsSubset(C[2], C[3]);
true
gap> A := [ RepetitionCode(4, GF(2)), EvenWeightSubcode( QRCode(17, GF(2)) ) ];
[ a cyclic [4,1,4]2 repetition code over GF(2), a cyclic [17,8,6]3..6 even weight subcode ]
gap> CX := ConstructionXCode(C, A);
a linear [148,23,53]43..74 Construction X code
gap> History(CX);
[ "a linear [148,23,53]43..74 Construction X code of", 
  "Base codes: [ a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2)\
, a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2), a linear \
[127,23,43]35..63 code defined by generator matrix over GF(2) ]", 
  "Auxiliary codes: [ a cyclic [4,1,4]2 repetition code over GF(2), a cyclic [\
17,8,6]3..6 even weight subcode ]" ]

6.2-10 ConstructionXXCode
> ConstructionXXCode( C1, C2, C3, A1, A2 )( function )

Consider a set of linear codes over field F of the same length, n, C_1=[n, k_1, d_1], C_2=[n, k_2, d_2] and C_3=[n, k_3, d_3] such that C_2 subset C_1, C_3 subset C_1 and C_4 = C_2 cap C_3. Given two auxiliary codes A_1=[n_1, k_1-k_2, e_1] and A_2=[n_2, k_1-k_3, e_2] over the same field F, there exists an [n+n_1+n_2, k_1, d] linear code C_XX over field F, where d = mind_4, d_3 + e_1, d_2 + e_2, d_1 + e_1 + e_2.

The codewords of C_XX can be partitioned into three sections ( v;|;a;|;b ) where v has length n, a has length n_1 and b has length n_2. A codeword from Construction XX takes the following form:

  • ( v ; | ; 0 ; | ; 0 ) if v in C_4

  • ( v ; | ; a_1 ; | ; 0 ) if v in C_3 backslash C_4

  • ( v ; | ; 0 ; | ; a_2 ) if v in C_2 backslash C_4

  • ( v ; | ; a_1 ; | ; a_2 ) otherwise

For more information on Construction XX, refer to [All84].

gap> a := PrimitiveRoot(GF(32));
Z(2^5)
gap> f0 := MinimalPolynomial( GF(2), a^0 );
x_1+Z(2)^0
gap> f1 := MinimalPolynomial( GF(2), a^1 );
x_1^5+x_1^2+Z(2)^0
gap> f5 := MinimalPolynomial( GF(2), a^5 );
x_1^5+x_1^4+x_1^2+x_1+Z(2)^0
gap> C2 := CheckPolCode( f0 * f1, 31, GF(2) );; MinimumDistance(C2);; Display(C2);
a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
gap> C3 := CheckPolCode( f0 * f5, 31, GF(2) );; MinimumDistance(C3);; Display(C3);
a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
gap> C1 := UnionCode(C2, C3);; MinimumDistance(C1);; Display(C1);
a linear [31,11,11]7..11 union code of
U: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
V: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)
gap> A1 := BestKnownLinearCode( 10, 5, GF(2) );
a linear [10,5,4]2..4 shortened code
gap> A2 := DualCode( RepetitionCode(6, GF(2)) );
a cyclic [6,5,2]1 dual code
gap> CXX:= ConstructionXXCode(C1, C2, C3, A1, A2 );
a linear [47,11,15..17]13..23 Construction XX code
gap> MinimumDistance(CXX);
17
gap> History(CXX);        
[ "a linear [47,11,17]13..23 Construction XX code of", 
  "C1: a cyclic [31,11,11]7..11 union code", 
  "C2: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)", 
  "C3: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)", 
  "A1: a linear [10,5,4]2..4 shortened code", 
  "A2: a cyclic [6,5,2]1 dual code" ]

6.2-11 BZCode
> BZCode( O, I )( function )

Given a set of outer codes of the same length O_i = [N, K_i, D_i] over GF(q^e_i), where i=1,2,...,t and a set of inner codes of the same length I_i = [n, k_i, d_i] over GF(q), BZCode returns a Blokh-Zyablov multilevel concatenated code with parameter [ n x N, sum_i=1^t e_i x K_i, min_i=1,...,td_i x D_i ] over GF(q).

Note that the set of inner codes must satisfy chain condition, i.e. I_1 = [n, k_1, d_1] subset I_2=[n, k_2, d_2] subset ... subset I_t=[n, k_t, d_t] where 0=k_0 < k_1 < k_2 < ... < k_t. The dimension of the inner codes must satisfy the condition e_i = k_i - k_i-1, where GF(q^e_i) is the field of the ith outer code.

For more information on Blokh-Zyablov multilevel concatenated code, refer to [Bro98].

6.2-12 BZCodeNC
> BZCodeNC( O, I )( function )

This function is the same as BZCode, except this version is faster as it does not estimate the covering radius of the code. Users are encouraged to use this version unless you are working on very small codes.

gap> #
gap> # Binary code
gap> #
gap> O := [ CyclicMDSCode(2,3,7), BestKnownLinearCode(9,5,GF(2)), CyclicMDSCode(2,3,4) ];
[ a cyclic [9,7,3]1 MDS code over GF(8), a linear [9,5,3]2..3 shortened code, 
  a cyclic [9,4,6]4..5 MDS code over GF(8) ]
gap> A := ExtendedCode( HammingCode(3,GF(2)) );;
gap> I := [ SubCode(A), A, DualCode( RepetitionCode(8, GF(2)) ) ];
[ a linear [8,3,4]3..4 subcode, a linear [8,4,4]2 extended code, a cyclic [8,7,2]1 dual code ]
gap> C := BZCodeNC(O, I);
a linear [72,38,12]0..72 Blokh Zyablov concatenated code
gap> #
gap> # Non binary code
gap> #
gap> O2 := ExtendedCode(GoppaCode(ConwayPolynomial(5,2), Elements(GF(5))));;
gap> O3 := ExtendedCode(GoppaCode(ConwayPolynomial(5,3), Elements(GF(5))));;
gap> O1 := DualCode( O3 );;
gap> MinimumDistance(O1);; MinimumDistance(O2);; MinimumDistance(O3);;
gap> Cy := CyclicCodes(5, GF(5));;
gap> for i in [4, 5] do; MinimumDistance(Cy[i]);; od;
gap> O  := [ O1, O2, O3 ];
[ a linear [6,4,3]1 dual code, a linear [6,3,4]2..3 extended code,
  a linear [6,2,5]3..4 extended code ]
gap> I  := [ Cy[5], Cy[4], Cy[3] ];
[ a cyclic [5,1,5]3..4 enumerated code over GF(5),
  a cyclic [5,2,4]2..3 enumerated code over GF(5),
  a cyclic [5,3,1..3]2 enumerated code over GF(5) ]
gap> C  := BZCodeNC( O, I );
a linear [30,9,5..15]0..30 Blokh Zyablov concatenated code
gap> MinimumDistance(C);
15
gap> History(C);
[ "a linear [30,9,15]0..30 Blokh Zyablov concatenated code of",
  "Inner codes: [ a cyclic [5,1,5]3..4 enumerated code over GF(5), a cyclic [5\
,2,4]2..3 enumerated code over GF(5), a cyclic [5,3,1..3]2 enumerated code ove\
r GF(5) ]",
  "Outer codes: [ a linear [6,4,3]1 dual code, a linear [6,3,4]2..3 extended c\
ode, a linear [6,2,5]3..4 extended code ]" ]
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

generated by GAPDoc2HTML

guava-3.6/doc/guava.tex0000644017361200001450000161113711027015735014747 0ustar tabbottcrontab% generated by GAPDoc2LaTeX from XML source (Frank Luebeck) \documentclass[a4paper,11pt]{report} \usepackage{a4wide} \sloppy \pagestyle{myheadings} \usepackage{amssymb} \usepackage[latin1]{inputenc} \usepackage{makeidx} \makeindex \usepackage{color} \definecolor{DarkOlive}{rgb}{0.1047,0.2412,0.0064} \definecolor{FireBrick}{rgb}{0.5812,0.0074,0.0083} \definecolor{RoyalBlue}{rgb}{0.0236,0.0894,0.6179} \definecolor{RoyalGreen}{rgb}{0.0236,0.6179,0.0894} \definecolor{RoyalRed}{rgb}{0.6179,0.0236,0.0894} \definecolor{LightBlue}{rgb}{0.8544,0.9511,1.0000} \definecolor{Black}{rgb}{0.0,0.0,0.0} \definecolor{FuncColor}{rgb}{1.0,0.0,0.0} %% strange name because of pdflatex bug: \definecolor{Chapter }{rgb}{0.0,0.0,1.0} \usepackage{fancyvrb} \usepackage{pslatex} \usepackage[pdftex=true, a4paper=true,bookmarks=false,pdftitle={Written with GAPDoc}, pdfcreator={LaTeX with hyperref package / GAPDoc}, colorlinks=true,backref=page,breaklinks=true,linkcolor=RoyalBlue, citecolor=RoyalGreen,filecolor=RoyalRed, urlcolor=RoyalRed,pagecolor=RoyalBlue]{hyperref} % write page numbers to a .pnr log file for online help \newwrite\pagenrlog \immediate\openout\pagenrlog =\jobname.pnr \immediate\write\pagenrlog{PAGENRS := [} \newcommand{\logpage}[1]{\protect\write\pagenrlog{#1, \thepage,}} \newcommand{\Q}{\mathbb{Q}} \newcommand{\R}{\mathbb{R}} \newcommand{\C}{\mathbb{C}} \newcommand{\Z}{\mathbb{Z}} \newcommand{\N}{\mathbb{N}} \newcommand{\F}{\mathbb{F}} \newcommand{\GAP}{\textsf{GAP}} \begin{document} \logpage{[ 0, 0, 0 ]} \begin{titlepage} \begin{center}{\Huge \textbf{ \textsf{GUAVA} \mbox{}}}\\[1cm] \hypersetup{pdftitle= \textsf{GUAVA} } \markright{\scriptsize \mbox{}\hfill \textsf{GUAVA} \hfill\mbox{}} {\Large \textbf{ A \textsf{GAP}4 Package for computing with error-correcting codes {\nobreakspace} \mbox{}}}\\[1cm] {Version 3.6\mbox{}}\\[1cm] {June 20, 2008\mbox{}}\\[1cm] \mbox{}\\[2cm] {\large \textbf{ Jasper Cramwinckel \mbox{}}}\\ {\large \textbf{ Erik Roijackers \mbox{}}}\\ {\large \textbf{ Reinald Baart \mbox{}}}\\ {\large \textbf{Eric Minkes, Lea Ruscio \mbox{}}}\\ {\large \textbf{ Robert L Miller, \mbox{}}}\\ {\large \textbf{ Tom Boothby \mbox{}}}\\ {\large \textbf{ Cen (``CJ'') Tjhai \mbox{}}}\\ {\large \textbf{ David Joyner (Maintainer), \mbox{}}}\\ \hypersetup{pdfauthor= Jasper Cramwinckel ; Erik Roijackers ; Reinald Baart ; Eric Minkes, Lea Ruscio ; Robert L Miller, ; Tom Boothby ; Cen (``CJ'') Tjhai ; David Joyner (Maintainer), } \end{center}\vfill \mbox{}\\ {\mbox{}\\ \small \noindent \textbf{ Robert L Miller, } --- Email: \href{mailto://rlm@robertlmiller.com} {\texttt{rlm@robertlmiller.com}}}\\ {\mbox{}\\ \small \noindent \textbf{ Cen (``CJ'') Tjhai } --- Email: \href{mailto://cen.tjhai@plymouth.ac.uk} {\texttt{cen.tjhai@plymouth.ac.uk}}\\ --- Homepage: \href{http://www.plymouth.ac.uk/staff/ctjhai} {\texttt{http://www.plymouth.ac.uk/staff/ctjhai}}}\\ {\mbox{}\\ \small \noindent \textbf{ David Joyner (Maintainer), } --- Email: \href{mailto://wdjoyner@gmail.com} {\texttt{wdjoyner@gmail.com}}\\ --- Homepage: \href{http://sage.math.washington.edu/home/wdj/guava/} {\texttt{http://sage.math.washington.edu/home/wdj/guava/}}}\\ \end{titlepage} \newpage\setcounter{page}{2} {\small \section*{Copyright} \logpage{[ 0, 0, 1 ]} \textsf{GUAVA}: {\copyright} The GUAVA Group: 1992-2003 Jasper Cramwinckel, Erik Roijackers,Reinald Baart, Eric Minkes, Lea Ruscio (for the tex version), Jeffrey Leon {\copyright} 2004 David Joyner, Cen Tjhai, Jasper Cramwinckel, Erik Roijackers, Reinald Baart, Eric Minkes, Lea Ruscio. {\copyright} 2007 Robert L Miller, Tom Boothby \textsf{GUAVA} is released under the GNU General Public License (GPL). \textsf{GUAVA} is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. \textsf{GUAVA} 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 \textsf{GUAVA}; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA For more details, see \href{http://www.fsf.org/licenses/gpl.html} {\texttt{http://www.fsf.org/licenses/gpl.html}}. For many years \textsf{GUAVA} has been released along with the ``backtracking'' C programs of J. Leon. In one of his *.c files the following statements occur: ``Copyright (C) 1992 by Jeffrey S. Leon. This software may be used freely for educational and research purposes. Any other use requires permission from the author.'' The following should now be appended: ``I, Jeffrey S. Leon, agree to license all the partition backtrack code which I have written under the GPL (www.fsf.org) as of this date, April 17, 2007.'' \textsf{GUAVA} documentation: {\copyright} Jasper Cramwinckel, Erik Roijackers,Reinald Baart, Eric Minkes, Lea Ruscio (for the tex version), David Joyner, Cen Tjhai, Jasper Cramwinckel, Erik Roijackers, Reinald Baart, Eric Minkes, Lea Ruscio. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". \mbox{}}\\[1cm] {\small \section*{Acknowledgements} \logpage{[ 0, 0, 2 ]} \textsf{GUAVA} was originally written by Jasper Cramwinckel, Erik Roijackers, and Reinald Baart in the early-to-mid 1990's as a final project during their study of Mathematics at the Delft University of Technology, Department of Pure Mathematics, under the direction of Professor Juriaan Simonis. This work was continued in Aachen, at Lehrstuhl D fur Mathematik. In version 1.3, new functions were added by Eric Minkes, also from Delft University of Technology. JC, ER and RB would like to thank the GAP people at the RWTH Aachen for their support, A.E. Brouwer for his advice and J. Simonis for his supervision. The GAP 4 version of \textsf{GUAVA} (versions 1.4 and 1.5) was created by Lea Ruscio and (since 2001, starting with version 1.6) is currently maintained by David Joyner, who (with the help of several students) has added several new functions. Starting with version 2.7, the ``best linear code'' tables have been updated. For further details, see the CHANGES file in the \textsf{GUAVA} directory, also available at \href{http://sage.math.washington.edu/home/wdj/guava/CHANGES.guava} {\texttt{http://sage.math.washington.edu/home/wdj/guava/CHANGES.guava}}. This documentation was prepared with the \textsf{GAPDoc} package of Frank L{\"u}beck and Max Neunh{\"o}ffer. The conversion from TeX to \textsf{GAPDoc}'s XML was done by David Joyner in 2004. Please send bug reports, suggestions and other comments about \textsf{GUAVA} to \href{mailto://support@gap-system.org} {\texttt{support@gap-system.org}}. Currently known bugs and suggested \textsf{GUAVA} projects are listed on the bugs and projects web page \href{http://sage.math.washington.edu/home/wdj/guava/guava2do.html} {\texttt{http://sage.math.washington.edu/home/wdj/guava/guava2do.html}}. Older releases and further history can be found on the \textsf{GUAVA} web page \href{http://sage.math.washington.edu/home/wdj/guava/} {\texttt{http://sage.math.washington.edu/home/wdj/guava/}}. \emph{Contributors}: Other than the authors listed on the title page, the following people have contributed code to the \textsf{GUAVA} project: Alexander Hulpke, Steve Linton, Frank L{\"u}beck, Aron Foster, Wayne Irons, Clifton (Clipper) Lennon, Jason McGowan, Shuhong Gao, Greg Gamble. For documentation on Leon's programs, see the src/leon/doc subdirectory of \textsf{GUAVA}. \mbox{}}\\[1cm] \newpage \def\contentsname{Contents\logpage{[ 0, 0, 3 ]}} \tableofcontents \newpage \chapter{\textcolor{Chapter }{Introduction}}\logpage{[ 1, 0, 0 ]} \hyperdef{L}{X7DFB63A97E67C0A1}{} { \section{\textcolor{Chapter }{Introduction to the \textsf{GUAVA} package}}\logpage{[ 1, 1, 0 ]} \hyperdef{L}{X787D826579603719}{} { This is the manual of the GAP package \textsf{GUAVA} that provides implementations of some routines designed for the construction and analysis of in the theory of error-correcting codes. This version of \textsf{GUAVA} requires GAP 4.4.5 or later. The functions can be divided into three subcategories: \begin{itemize} \item Construction of codes: \textsf{GUAVA} can construct unrestricted, linear and cyclic codes. Information about the code, such as operations applicable to the code, is stored in a record-like data structure called a GAP object. \item Manipulations of codes: Manipulation transforms one code into another, or constructs a new code from two codes. The new code can profit from the data in the record of the old code(s), so in these cases calculation time decreases. \item Computations of information about codes: \textsf{GUAVA} can calculate important parameters of codes quickly. The results are stored in the codes' object components. \end{itemize} Except for the automorphism group and isomorphism testing functions, which make use of J.S. Leon's programs (see \cite{Leon91} and the documentation in the 'src/leon' subdirectory of the 'guava' directory for some details), and \texttt{MinimumWeight} (\ref{MinimumWeight}) function, \textsf{GUAVA} is written in the GAP language, and runs on any system supporting GAP4.3 and above. Several algorithms that need the speed were integrated in the GAP kernel. Good general references for error-correcting codes and the technical terms in this manual are MacWilliams and Sloane \cite{MS83} Huffman and Pless \cite{HP03}. } \section{\textcolor{Chapter }{Installing \textsf{GUAVA}}}\logpage{[ 1, 2, 0 ]} \hyperdef{L}{X7E2CB7DF83B514A8}{} { \label{Installing GUAVA} To install \textsf{GUAVA} (as a GAP 4 Package) unpack the archive file in a directory in the `pkg' hierarchy of your version of GAP 4. After unpacking \textsf{GUAVA} the GAP-only part of \textsf{GUAVA} is installed. The parts of \textsf{GUAVA} depending on J. Leon's backtrack programs package (for computing automorphism groups) are only available in a UNIX environment, where you should proceed as follows: Go to the newly created `guava' directory and call \texttt{`./configure /gappath'} where \texttt{/gappath} is the path to the GAP home directory. So for example, if you install the package in the main `pkg' directory call \begin{verbatim} ./configure ../.. \end{verbatim} This will fetch the architecture type for which GAP has been compiled last and create a `Makefile'. Now call \begin{verbatim} make \end{verbatim} to compile the binary and to install it in the appropriate place. (For a windows machine with CYGWIN installed - see \href{http://www.cygwin.com/} {\texttt{http://www.cygwin.com/}} - instructions for compiling Leon's binaries are likely to be similar to those above. On a 64-bit SUSE linux computer, instead of the configure command above - which will only compile the 32-bit binary - type \begin{verbatim} ./configure ../.. --enable-libsuffix=64 make \end{verbatim} to compile Leon's program as a 64 bit native binary. This may also work for other 64-bit linux distributions as well.) Starting with version 2.5, you should also install the GAP package \textsf{SONATA} to load GAP. You can download this from the GAP website and unpack it in the `pkg' subdirectory. This completes the installation of \textsf{GUAVA} for a single architecture. If you use this installation of \textsf{GUAVA} on different hardware platforms you will have to compile the binary for each platform separately. } \section{\textcolor{Chapter }{Loading \textsf{GUAVA}}}\logpage{[ 1, 3, 0 ]} \hyperdef{L}{X80EAA631863F805B}{} { After starting up GAP, the \textsf{GUAVA} package needs to be loaded. Load \textsf{GUAVA} by typing at the GAP prompt: \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> LoadPackage( "guava" ); \end{Verbatim} If \textsf{GUAVA} isn't already in memory, it is loaded and the author information is displayed. If you are a frequent user of \textsf{GUAVA}, you might consider putting this line in your `.gaprc' file. } } \chapter{\textcolor{Chapter }{Coding theory functions in GAP}}\logpage{[ 2, 0, 0 ]} \hyperdef{L}{X7A93308C82637F4F}{} { \label{Coding theory functions in the GAP} This chapter will recall from the GAP4.4.5 manual some of the GAP coding theory and finite field functions useful for coding theory. Some of these functions are partially written in C for speed. The main functions are \begin{itemize} \item \texttt{AClosestVectorCombinationsMatFFEVecFFE}, \item \texttt{AClosestVectorCombinationsMatFFEVecFFECoords}, \item \texttt{CosetLeadersMatFFE}, \item \texttt{DistancesDistributionMatFFEVecFFE}, \item \texttt{DistancesDistributionVecFFEsVecFFE}, \item \texttt{DistanceVecFFE} and \texttt{WeightVecFFE}, \item \texttt{ConwayPolynomial} and \texttt{IsCheapConwayPolynomial}, \item \texttt{IsPrimitivePolynomial}, and \texttt{RandomPrimitivePolynomial}. \end{itemize} However, the GAP command \texttt{PrimitivePolynomial} returns an integer primitive polynomial not the finite field kind. \section{\textcolor{Chapter }{ Distance functions }}\logpage{[ 2, 1, 0 ]} \hyperdef{L}{X80F192497C008691}{} { \label{Distance functions} \subsection{\textcolor{Chapter }{AClosestVectorCombinationsMatFFEVecFFE}} \logpage{[ 2, 1, 1 ]}\nobreak \hyperdef{L}{X82E5987E81487D18}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{AClosestVectorCombinationsMatFFEVecFFE({\slshape mat, F, vec, r, st})\index{AClosestVectorCombinationsMatFFEVecFFE@\texttt{AClosestVectorCombinationsMatFFEVecFFE}} \label{AClosestVectorCombinationsMatFFEVecFFE} }\hfill{\scriptsize (function)}}\\ This command runs through the \mbox{\texttt{\slshape F}}-linear combinations of the vectors in the rows of the matrix \mbox{\texttt{\slshape mat}} that can be written as linear combinations of exactly \mbox{\texttt{\slshape r}} rows (that is without using zero as a coefficient) and returns a vector from these that is closest to the vector \mbox{\texttt{\slshape vec}}. The length of the rows of \mbox{\texttt{\slshape mat}} and the length of \mbox{\texttt{\slshape vec}} must be equal, and all elements must lie in \mbox{\texttt{\slshape F}}. The rows of \mbox{\texttt{\slshape mat}} must be linearly independent. If it finds a vector of distance at most \mbox{\texttt{\slshape st}}, which must be a nonnegative integer, then it stops immediately and returns this vector. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> F:=GF(3);; gap> x:= Indeterminate( F );; pol:= x^2+1; x_1^2+Z(3)^0 gap> C := GeneratorPolCode(pol,8,F); a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3) gap> v:=Codeword("12101111"); [ 1 2 1 0 1 1 1 1 ] gap> v:=VectorCodeword(v); [ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ] gap> G:=GeneratorMat(C); [ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ], [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ] gap> AClosestVectorCombinationsMatFFEVecFFE(G,F,v,1,1); [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] \end{Verbatim} \subsection{\textcolor{Chapter }{AClosestVectorComb..MatFFEVecFFECoords}} \logpage{[ 2, 1, 2 ]}\nobreak \hyperdef{L}{X870DE258833C5AA0}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{AClosestVectorComb..MatFFEVecFFECoords({\slshape mat, F, vec, r, st})\index{AClosestVectorComb..MatFFEVecFFECoords@\texttt{AClosestVectorComb..MatFFEVecFFECoords}} \label{AClosestVectorComb..MatFFEVecFFECoords} }\hfill{\scriptsize (function)}}\\ \texttt{AClosestVectorCombinationsMatFFEVecFFECoords} returns a two element list containing (a) the same closest vector as in \texttt{AClosestVectorCombinationsMatFFEVecFFE}, and (b) a vector \mbox{\texttt{\slshape v}} with exactly \mbox{\texttt{\slshape r}} non-zero entries, such that $v*mat$ is the closest vector. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> F:=GF(3);; gap> x:= Indeterminate( F );; pol:= x^2+1; x_1^2+Z(3)^0 gap> C := GeneratorPolCode(pol,8,F); a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3) gap> v:=Codeword("12101111"); v:=VectorCodeword(v);; [ 1 2 1 0 1 1 1 1 ] gap> G:=GeneratorMat(C);; gap> AClosestVectorCombinationsMatFFEVecFFECoords(G,F,v,1,1); [ [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ], [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0 ] ] \end{Verbatim} \subsection{\textcolor{Chapter }{DistancesDistributionMatFFEVecFFE}} \logpage{[ 2, 1, 3 ]}\nobreak \hyperdef{L}{X85135CEB86E61D49}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DistancesDistributionMatFFEVecFFE({\slshape mat, f, vec})\index{DistancesDistributionMatFFEVecFFE@\texttt{DistancesDistributionMatFFEVecFFE}} \label{DistancesDistributionMatFFEVecFFE} }\hfill{\scriptsize (function)}}\\ \texttt{DistancesDistributionMatFFEVecFFE} returns the distances distribution of the vector \mbox{\texttt{\slshape vec}} to the vectors in the vector space generated by the rows of the matrix \mbox{\texttt{\slshape mat}} over the finite field \mbox{\texttt{\slshape f}}. All vectors must have the same length, and all elements must lie in a common field. The distances distribution is a list $d$ of length $Length(vec)+1$, such that the value $d[i]$ is the number of vectors in vecs that have distance $i+1$ to \mbox{\texttt{\slshape vec}}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];; gap> vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], > [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], > [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ], > [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ], > [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ], > [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];; gap> DistancesDistributionMatFFEVecFFE(vecs,GF(3),v); [ 0, 4, 6, 60, 109, 216, 192, 112, 30 ] \end{Verbatim} \subsection{\textcolor{Chapter }{DistancesDistributionVecFFEsVecFFE}} \logpage{[ 2, 1, 4 ]}\nobreak \hyperdef{L}{X7F2F630984A9D3D6}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DistancesDistributionVecFFEsVecFFE({\slshape vecs, vec})\index{DistancesDistributionVecFFEsVecFFE@\texttt{DistancesDistributionVecFFEsVecFFE}} \label{DistancesDistributionVecFFEsVecFFE} }\hfill{\scriptsize (function)}}\\ \texttt{DistancesDistributionVecFFEsVecFFE} returns the distances distribution of the vector \mbox{\texttt{\slshape vec}} to the vectors in the list \mbox{\texttt{\slshape vecs}}. All vectors must have the same length, and all elements must lie in a common field. The distances distribution is a list $d$ of length $Length(vec)+1$, such that the value $d[i]$ is the number of vectors in \mbox{\texttt{\slshape vecs}} that have distance $i+1$ to \mbox{\texttt{\slshape vec}}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];; gap> vecs:=[ [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], > [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], > [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ], > [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ], > [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ], > [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ] ];; gap> DistancesDistributionVecFFEsVecFFE(vecs,v); [ 0, 0, 0, 0, 0, 4, 0, 1, 1 ] \end{Verbatim} \subsection{\textcolor{Chapter }{WeightVecFFE}} \logpage{[ 2, 1, 5 ]}\nobreak \hyperdef{L}{X7C9F4D657F9BA5A1}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{WeightVecFFE({\slshape vec})\index{WeightVecFFE@\texttt{WeightVecFFE}} \label{WeightVecFFE} }\hfill{\scriptsize (function)}}\\ \texttt{WeightVecFFE} returns the weight of the finite field vector \mbox{\texttt{\slshape vec}}, i.e. the number of nonzero entries. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> v:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];; gap> WeightVecFFE(v); 7 \end{Verbatim} \index{Hamming metric} \subsection{\textcolor{Chapter }{DistanceVecFFE}} \logpage{[ 2, 1, 6 ]}\nobreak \hyperdef{L}{X85AA5C6587559C1C}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DistanceVecFFE({\slshape vec1, vec2})\index{DistanceVecFFE@\texttt{DistanceVecFFE}} \label{DistanceVecFFE} }\hfill{\scriptsize (function)}}\\ The \emph{Hamming metric} on $GF(q)^n$ is the function \[ dist((v_1,...,v_n),(w_1,...,w_n)) =|\{i\in [1..n]\ |\ v_i\not= w_i\}|. \] This is also called the (Hamming) distance between $v=(v_1,...,v_n)$ and $w=(w_1,...,w_n)$. \texttt{DistanceVecFFE} returns the distance between the two vectors \mbox{\texttt{\slshape vec1}} and \mbox{\texttt{\slshape vec2}}, which must have the same length and whose elements must lie in a common field. The distance is the number of places where \mbox{\texttt{\slshape vec1}} and \mbox{\texttt{\slshape vec2}} differ. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> v1:=[ Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];; gap> v2:=[ Z(3), Z(3)^0, Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ];; gap> DistanceVecFFE(v1,v2); 2 \end{Verbatim} } \section{\textcolor{Chapter }{ Other functions }}\logpage{[ 2, 2, 0 ]} \hyperdef{L}{X87C3D1B984960984}{} { \label{Other functions} We basically repeat, with minor variation, the material in the GAP manual or from Frank Luebeck's website \href{http://www.math.rwth-aachen.de:8001/~Frank.Luebeck/data/ConwayPol} {\texttt{http://www.math.rwth-aachen.de:8001/\texttt{\symbol{126}}Frank.Luebeck/data/ConwayPol}} on Conway polynomials. \index{$GF(p)$} The \textsc{prime fields}: If $p\geq 2$ is a prime then $GF(p)$ denotes the field ${\mathbb{Z}}/p{\mathbb{Z}}$, with addition and multiplication performed mod $p$. \index{$GF(q)$} The \textsc{prime power fields}: Suppose $q=p^r$ is a prime power, $r>1$, and put $F=GF(p)$. Let $F[x]$ denote the ring of all polynomials over $F$ and let $f(x)$ denote a monic irreducible polynomial in $F[x]$ of degree $r$. The quotient $E = F[x]/(f(x))= F[x]/f(x)F[x]$ is a field with $q$ elements. If $f(x)$ and $E$ are related in this way, we say that $f(x)$ is the \textsc{defining polynomial} of $E$. \index{defining polynomial} Any defining polynomial factors completely into distinct linear factors over the field it defines. For any finite field $F$, the multiplicative group of non-zero elements $F^\times$ is a cyclic group. An $\alpha \in F$ is called a \textsc{primitive element} if it is a generator of $F^\times$. A defining polynomial $f(x)$ of $F$ is said to be \textsc{primitive} if it has a root in $F$ which is a primitive element. \index{primitive element} \subsection{\textcolor{Chapter }{ConwayPolynomial}} \logpage{[ 2, 2, 1 ]}\nobreak \hyperdef{L}{X7C2425A786F09054}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ConwayPolynomial({\slshape p, n})\index{ConwayPolynomial@\texttt{ConwayPolynomial}} \label{ConwayPolynomial} }\hfill{\scriptsize (function)}}\\ A standard notation for the elements of $GF(p)$ is given via the representatives $0, ..., p-1$ of the cosets modulo $p$. We order these elements by $0 \ \ \langle\ \ 1 \ \ \langle\ \ 2 \ \ \langle\ \ ... \ \ \langle\ \ p-1$. We introduce an ordering of the polynomials of degree $r$ over $GF(p)$. Let $g(x) = g_rx^r + ... + g_0$ and $h(x) = h_rx^r + ... + h_0$ (by convention, $g_i=h_i=0$ for $i\ \ \rangle\ \ r$). Then we define $g \ \ \langle\ \ h$ if and only if there is an index $k$ with $g_i = h_i$ for $i \ \ \rangle\ \ k$ and $(-1)^{r-k} g_k \ \ \langle\ \ (-1)^{r-k} h_k$. The \textsc{Conway polynomial} $f_{p,r}(x)$ for $GF(p^r)$ is the smallest polynomial of degree $r$ with respect to this ordering such that: \begin{itemize} \item $f_{p,r}(x)$ is monic, \item $f_{p,r}(x)$ is primitive, that is, any zero is a generator of the (cyclic) multiplicative group of $GF(p^r)$, \item for each proper divisor $m$ of $r$ we have that $f_{p,m}(x^{(p^r-1) / (p^m-1)}) \equiv 0 \pmod{f_{p,r}(x)}$; that is, the $(p^r-1) / (p^m-1)$-th power of a zero of $f_{p,r}(x)$ is a zero of $f_{p,m}(x)$. \end{itemize} \texttt{ConwayPolynomial(p,n)} returns the polynomial $f_{p,r}(x)$ defined above. \texttt{IsCheapConwayPolynomial(p,n)} returns true if \texttt{ConwayPolynomial( p, n )} will give a result in reasonable time. This is either the case when this polynomial is pre-computed, or if $n,p$ are not too big. } \index{IsCheapConwayPolynomial} \subsection{\textcolor{Chapter }{RandomPrimitivePolynomial}} \logpage{[ 2, 2, 2 ]}\nobreak \hyperdef{L}{X7ECC593583E68A6C}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{RandomPrimitivePolynomial({\slshape F, n})\index{RandomPrimitivePolynomial@\texttt{RandomPrimitivePolynomial}} \label{RandomPrimitivePolynomial} }\hfill{\scriptsize (function)}}\\ For a finite field \mbox{\texttt{\slshape F}} and a positive integer \mbox{\texttt{\slshape n}} this function returns a primitive polynomial of degree \mbox{\texttt{\slshape n}} over \mbox{\texttt{\slshape F}}, that is a zero of this polynomial has maximal multiplicative order $|F|^n-1$. \texttt{IsPrimitivePolynomial(f)} can be used to check if a univariate polynomial \mbox{\texttt{\slshape f}} is primitive or not. } \index{IsPrimitivePolynomial} } } \chapter{\textcolor{Chapter }{Codewords}}\logpage{[ 3, 0, 0 ]} \hyperdef{L}{X836BAA9A7EBD08B1}{} { \label{Codewords} Let $GF(q)$ denote a finite field with $q$ (a prime power) elements. A \emph{code} is a subset $C$ of some finite-dimensional vector space $V$ over $GF(q)$. The \emph{length} of $C$ is the dimension of $V$. Usually, $V=GF(q)^n$ and the length is the number of coordinate entries. When $C$ is itself a vector space over $GF(q)$ then it is called a \emph{linear code} \index{linear code} and the \emph{dimension} of $C$ is its dimension as a vector space over $GF(q)$. In \textsf{GUAVA}, a `codeword' is a GAP record, with one of its components being an element in $V$. Likewise, a `code' is a GAP record, with one of its components being a subset (or subspace with given basis, if $C$ is linear) of $V$. \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=RandomLinearCode(20,10,GF(4)); a [20,10,?] randomly generated code over GF(4) gap> c:=Random(C); [ 1 a 0 0 0 1 1 a^2 0 0 a 1 1 1 a 1 1 a a 0 ] gap> NamesOfComponents(C); [ "LeftActingDomain", "GeneratorsOfLeftOperatorAdditiveGroup", "WordLength", "GeneratorMat", "name", "Basis", "NiceFreeLeftModule", "Dimension", "Representative", "ZeroImmutable" ] gap> NamesOfComponents(c); [ "VectorCodeword", "WordLength", "treatAsPoly" ] gap> c!.VectorCodeword; [ immutable compressed vector length 20 over GF(4) ] gap> Display(last); [ Z(2^2), Z(2^2), Z(2^2), Z(2)^0, Z(2^2), Z(2^2)^2, 0*Z(2), Z(2^2), Z(2^2), Z(2)^0, Z(2^2)^2, 0*Z(2), 0*Z(2), Z(2^2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2^2)^2, Z(2)^0, 0*Z(2) ] gap> C!.Dimension; 10 \end{Verbatim} Mathematically, a `codeword' is an element of a code $C$, but in \textsf{GUAVA} the \texttt{Codeword} and \texttt{VectorCodeword} commands have implementations which do not check if the codeword belongs to $C$ (i.e., are independent of the code itself). They exist primarily to make it easier for the user to construct a the associated GAP record. Using these commands, one can enter into a GAP both a codeword $c$ (belonging to $C$) and a received word $r$ (not belonging to $C$) using the same command. The user can input codewords in different formats (as strings, vectors, and polynomials), and output information is formatted in a readable way. A codeword $c$ in a linear code $C$ arises in practice by an initial encoding of a 'block' message $m$, adding enough redundancy to recover $m$ after $c$ is transmitted via a 'noisy' communication medium. In \textsf{GUAVA}, for linear codes, the map $m\longmapsto c$ is computed using the command \texttt{c:=m*C} and recovering $m$ from $c$ is obtained by the command \texttt{InformationWord(C,c)}. These commands are explained more below. Many operations are available on codewords themselves, although codewords also work together with codes (see chapter \ref{Codes} on Codes). The first section describes how codewords are constructed (see \texttt{Codeword} (\ref{Codeword}) and \texttt{IsCodeword} (\ref{IsCodeword})). Sections \ref{Comparisons of Codewords} and \ref{Arithmetic Operations for Codewords} describe the arithmetic operations applicable to codewords. Section \ref{convert Codewords to Vectors or Polynomials} describe functions that convert codewords back to vectors or polynomials (see \texttt{VectorCodeword} (\ref{VectorCodeword}) and \texttt{PolyCodeword} (\ref{PolyCodeword})). Section \ref{Functions that Change the Display Form of a Codeword} describe functions that change the way a codeword is displayed (see \texttt{TreatAsVector} (\ref{TreatAsVector}) and \texttt{TreatAsPoly} (\ref{TreatAsPoly})). Finally, Section \ref{Other Codeword Functions} describes a function to generate a null word (see \texttt{NullWord} (\ref{NullWord})) and some functions for extracting properties of codewords (see \texttt{DistanceCodeword} (\ref{DistanceCodeword}), \texttt{Support} (\ref{Support}) and \texttt{WeightCodeword} (\ref{WeightCodeword})). \section{\textcolor{Chapter }{Construction of Codewords}}\logpage{[ 3, 1, 0 ]} \hyperdef{L}{X81B73ABB87DA8E49}{} { \label{Construction of Codewords} \subsection{\textcolor{Chapter }{Codeword}} \logpage{[ 3, 1, 1 ]}\nobreak \hyperdef{L}{X7B9E353D852851AA}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{Codeword({\slshape obj[, n][, F]})\index{Codeword@\texttt{Codeword}} \label{Codeword} }\hfill{\scriptsize (function)}}\\ \texttt{Codeword} returns a codeword or a list of codewords constructed from \mbox{\texttt{\slshape obj}}. The object \mbox{\texttt{\slshape obj}} can be a vector, a string, a polynomial or a codeword. It may also be a list of those (even a mixed list). If a number \mbox{\texttt{\slshape n}} is specified, all constructed codewords have length \mbox{\texttt{\slshape n}}. This is the only way to make sure that all elements of \mbox{\texttt{\slshape obj}} are converted to codewords of the same length. Elements of \mbox{\texttt{\slshape obj}} that are longer than \mbox{\texttt{\slshape n}} are reduced in length by cutting of the last positions. Elements of \mbox{\texttt{\slshape obj}} that are shorter than \mbox{\texttt{\slshape n}} are lengthened by adding zeros at the end. If no \mbox{\texttt{\slshape n}} is specified, each constructed codeword is handled individually. If a Galois field \mbox{\texttt{\slshape F}} is specified, all codewords are constructed over this field. This is the only way to make sure that all elements of \mbox{\texttt{\slshape obj}} are converted to the same field \mbox{\texttt{\slshape F}} (otherwise they are converted one by one). Note that all elements of \mbox{\texttt{\slshape obj}} must have elements over \mbox{\texttt{\slshape F}} or over `Integers'. Converting from one Galois field to another is not allowed. If no \mbox{\texttt{\slshape F}} is specified, vectors or strings with integer elements will be converted to the smallest Galois field possible. Note that a significant speed increase is achieved if \mbox{\texttt{\slshape F}} is specified, even when all elements of \mbox{\texttt{\slshape obj}} already have elements over \mbox{\texttt{\slshape F}}. Every vector in \mbox{\texttt{\slshape obj}} can be a finite field vector over \mbox{\texttt{\slshape F}} or a vector over `Integers'. In the last case, it is converted to \mbox{\texttt{\slshape F}} or, if omitted, to the smallest Galois field possible. Every string in \mbox{\texttt{\slshape obj}} must be a string of numbers, without spaces, commas or any other characters. These numbers must be from 0 to 9. The string is converted to a codeword over \mbox{\texttt{\slshape F}} or, if \mbox{\texttt{\slshape F}} is omitted, over the smallest Galois field possible. Note that since all numbers in the string are interpreted as one-digit numbers, Galois fields of size larger than 10 are not properly represented when using strings. In fact, no finite field of size larger than 11 arises in this fashion at all. Every polynomial in \mbox{\texttt{\slshape obj}} is converted to a codeword of length \mbox{\texttt{\slshape n}} or, if omitted, of a length dictated by the degree of the polynomial. If \mbox{\texttt{\slshape F}} is specified, a polynomial in \mbox{\texttt{\slshape obj}} must be over \mbox{\texttt{\slshape F}}. Every element of \mbox{\texttt{\slshape obj}} that is already a codeword is changed to a codeword of length \mbox{\texttt{\slshape n}}. If no \mbox{\texttt{\slshape n}} was specified, the codeword doesn't change. If \mbox{\texttt{\slshape F}} is specified, the codeword must have base field \mbox{\texttt{\slshape F}}. \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> c := Codeword([0,1,1,1,0]); [ 0 1 1 1 0 ] gap> VectorCodeword( c ); [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ] gap> c2 := Codeword([0,1,1,1,0], GF(3)); [ 0 1 1 1 0 ] gap> VectorCodeword( c2 ); [ 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, 0*Z(3) ] gap> Codeword([c, c2, "0110"]); [ [ 0 1 1 1 0 ], [ 0 1 1 1 0 ], [ 0 1 1 0 ] ] gap> p := UnivariatePolynomial(GF(2), [Z(2)^0, 0*Z(2), Z(2)^0]); Z(2)^0+x_1^2 gap> Codeword(p); x^2 + 1 \end{Verbatim} This command can also be called using the syntax \texttt{Codeword(obj,C)}. In this format, the elements of \mbox{\texttt{\slshape obj}} are converted to elements of the same ambient vector space as the elements of a code \mbox{\texttt{\slshape C}}. The command \texttt{Codeword(c,C)} is the same as calling \texttt{Codeword(c,n,F)}, where \mbox{\texttt{\slshape n}} is the word length of \mbox{\texttt{\slshape C}} and the \mbox{\texttt{\slshape F}} is the ground field of \mbox{\texttt{\slshape C}}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := WholeSpaceCode(7,GF(5)); a cyclic [7,7,1]0 whole space code over GF(5) gap> Codeword(["0220110", [1,1,1]], C); [ [ 0 2 2 0 1 1 0 ], [ 1 1 1 0 0 0 0 ] ] gap> Codeword(["0220110", [1,1,1]], 7, GF(5)); [ [ 0 2 2 0 1 1 0 ], [ 1 1 1 0 0 0 0 ] ] gap> C:=RandomLinearCode(10,5,GF(3)); a linear [10,5,1..3]3..5 random linear code over GF(3) gap> Codeword("1000000000",C); [ 1 0 0 0 0 0 0 0 0 0 ] gap> Codeword("1000000000",10,GF(3)); [ 1 0 0 0 0 0 0 0 0 0 ] \end{Verbatim} \subsection{\textcolor{Chapter }{CodewordNr}} \logpage{[ 3, 1, 2 ]}\nobreak \hyperdef{L}{X7E7ED91C79BF3EF3}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CodewordNr({\slshape C, list})\index{CodewordNr@\texttt{CodewordNr}} \label{CodewordNr} }\hfill{\scriptsize (function)}}\\ \texttt{CodewordNr} returns a list of codewords of \mbox{\texttt{\slshape C}}. \mbox{\texttt{\slshape list}} may be a list of integers or a single integer. For each integer of \mbox{\texttt{\slshape list}}, the corresponding codeword of \mbox{\texttt{\slshape C}} is returned. The correspondence of a number $i$ with a codeword is determined as follows: if a list of elements of \mbox{\texttt{\slshape C}} is available, the $i^{th}$ element is taken. Otherwise, it is calculated by multiplication of the $i^{th}$ information vector by the generator matrix or generator polynomial, where the information vectors are ordered lexicographically. In particular, the returned codeword(s) could be a vector or a polynomial. So \texttt{CodewordNr(C, i)} is equal to \texttt{AsSSortedList(C)[i]}, described in the next chapter. The latter function first calculates the set of all the elements of $C$ and then returns the $i^{th}$ element of that set, whereas the former only calculates the $i^{th}$ codeword. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> B := BinaryGolayCode(); a cyclic [23,12,7]3 binary Golay code over GF(2) gap> c := CodewordNr(B, 4); x^22 + x^20 + x^17 + x^14 + x^13 + x^12 + x^11 + x^10 gap> R := ReedSolomonCode(2,2); a cyclic [2,1,2]1 Reed-Solomon code over GF(3) gap> AsSSortedList(R); [ [ 0 0 ], [ 1 1 ], [ 2 2 ] ] gap> CodewordNr(R, [1,3]); [ [ 0 0 ], [ 2 2 ] ] \end{Verbatim} \subsection{\textcolor{Chapter }{IsCodeword}} \logpage{[ 3, 1, 3 ]}\nobreak \hyperdef{L}{X7F25479781E6E109}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsCodeword({\slshape obj})\index{IsCodeword@\texttt{IsCodeword}} \label{IsCodeword} }\hfill{\scriptsize (function)}}\\ \texttt{IsCodeword} returns `true' if \mbox{\texttt{\slshape obj}}, which can be an object of arbitrary type, is of the codeword type and `false' otherwise. The function will signal an error if \mbox{\texttt{\slshape obj}} is an unbound variable. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> IsCodeword(1); false gap> IsCodeword(ReedMullerCode(2,3)); false gap> IsCodeword("11111"); false gap> IsCodeword(Codeword("11111")); true \end{Verbatim} } \section{\textcolor{Chapter }{Comparisons of Codewords}}\logpage{[ 3, 2, 0 ]} \hyperdef{L}{X8253374284B475B6}{} { \label{Comparisons of Codewords} \subsection{\textcolor{Chapter }{=}} \logpage{[ 3, 2, 1 ]}\nobreak \hyperdef{L}{X8123456781234567}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{=({\slshape c1, c2})\index{=@\texttt{=}} \label{=} }\hfill{\scriptsize (function)}}\\ The equality operator \texttt{c1 = c2} evaluates to `true' if the codewords \mbox{\texttt{\slshape c1}} and \mbox{\texttt{\slshape c2}} are equal, and to `false' otherwise. Note that codewords are equal if and only if their base vectors are equal. Whether they are represented as a vector or polynomial has nothing to do with the comparison. Comparing codewords with objects of other types is not recommended, although it is possible. If \mbox{\texttt{\slshape c2}} is the codeword, the other object \mbox{\texttt{\slshape c1}} is first converted to a codeword, after which comparison is possible. This way, a codeword can be compared with a vector, polynomial, or string. If \mbox{\texttt{\slshape c1}} is the codeword, then problems may arise if \mbox{\texttt{\slshape c2}} is a polynomial. In that case, the comparison always yields a `false', because the polynomial comparison is called. The equality operator is also denoted \texttt{EQ}, and \texttt{EQ(c1,c2)} is the same as \texttt{c1 = c2}. There is also an inequality operator, {\textless} {\textgreater}, or \texttt{not EQ}. \index{not =} \index{{\textless} {\textgreater}} } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> P := UnivariatePolynomial(GF(2), Z(2)*[1,0,0,1]); Z(2)^0+x_1^3 gap> c := Codeword(P, GF(2)); x^3 + 1 gap> P = c; # codeword operation true gap> c2 := Codeword("1001", GF(2)); [ 1 0 0 1 ] gap> c = c2; true gap> C:=HammingCode(3); a linear [7,4,3]1 Hamming (3,2) code over GF(2) gap> c1:=Random(C); [ 1 0 0 1 1 0 0 ] gap> c2:=Random(C); [ 0 1 0 0 1 0 1 ] gap> EQ(c1,c2); false gap> not EQ(c1,c2); true \end{Verbatim} } \section{\textcolor{Chapter }{Arithmetic Operations for Codewords}}\logpage{[ 3, 3, 0 ]} \hyperdef{L}{X7ADE7E95867A14E1}{} { \label{Arithmetic Operations for Codewords} \subsection{\textcolor{Chapter }{+}} \logpage{[ 3, 3, 1 ]}\nobreak \hyperdef{L}{X7F2703417F270341}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{+({\slshape c1, c2})\index{+@\texttt{+}} \label{+} }\hfill{\scriptsize (function)}}\\ The following operations are always available for codewords. The operands must have a common base field, and must have the same length. No implicit conversions are performed. \index{codewords, addition} The operator \texttt{+} evaluates to the sum of the codewords \mbox{\texttt{\slshape c1}} and \mbox{\texttt{\slshape c2}}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=RandomLinearCode(10,5,GF(3)); a linear [10,5,1..3]3..5 random linear code over GF(3) gap> c:=Random(C); [ 1 0 2 2 2 2 1 0 2 0 ] gap> Codeword(c+"2000000000"); [ 0 0 2 2 2 2 1 0 2 0 ] gap> Codeword(c+"1000000000"); \end{Verbatim} The last command returns a GAP ERROR since the `codeword' which \textsf{GUAVA} associates to "1000000000" belongs to $GF(2)$ and not $GF(3)$. \subsection{\textcolor{Chapter }{-}} \logpage{[ 3, 3, 2 ]}\nobreak \hyperdef{L}{X81B1391281B13912}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{-({\slshape c1, c2})\index{-@\texttt{-}} \label{-} }\hfill{\scriptsize (function)}}\\ Similar to addition: the operator \texttt{-} evaluates to the difference of the codewords \mbox{\texttt{\slshape c1}} and \mbox{\texttt{\slshape c2}}. \index{codewords, subtraction} } \subsection{\textcolor{Chapter }{+}} \logpage{[ 3, 3, 3 ]}\nobreak \hyperdef{L}{X7F2703417F270341}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{+({\slshape v, C})\index{+@\texttt{+}} \label{+} }\hfill{\scriptsize (function)}}\\ The operator \texttt{v+C} evaluates to the coset code of code \mbox{\texttt{\slshape C}} after adding a `codeword' \mbox{\texttt{\slshape v}} to all codewords in \mbox{\texttt{\slshape C}}. Note that if $c \in C$ then mathematically $c+C=C$ but \textsf{GUAVA} only sees them equal as \emph{sets}. See \texttt{CosetCode} (\ref{CosetCode}). Note that the command \texttt{C+v} returns the same output as the command \texttt{v+C}. \index{codewords, cosets} } \index{coset} \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=RandomLinearCode(10,5); a [10,5,?] randomly generated code over GF(2) gap> c:=Random(C); [ 0 0 0 0 0 0 0 0 0 0 ] gap> c+C; [ add. coset of a [10,5,?] randomly generated code over GF(2) ] gap> c+C=C; true gap> IsLinearCode(c+C); false gap> v:=Codeword("100000000"); [ 1 0 0 0 0 0 0 0 0 ] gap> v+C; [ add. coset of a [10,5,?] randomly generated code over GF(2) ] gap> C=v+C; false gap> C := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) ); a linear [4,2,1]1 code defined by generator matrix over GF(2) gap> Elements(C); [ [ 0 0 0 0 ], [ 0 1 0 0 ], [ 1 0 0 0 ], [ 1 1 0 0 ] ] gap> v:=Codeword("0011"); [ 0 0 1 1 ] gap> C+v; [ add. coset of a linear [4,2,4]1 code defined by generator matrix over GF(2) ] gap> Elements(C+v); [ [ 0 0 1 1 ], [ 0 1 1 1 ], [ 1 0 1 1 ], [ 1 1 1 1 ] ] \end{Verbatim} In general, the operations just described can also be performed on codewords expressed as vectors, strings or polynomials, although this is not recommended. The vector, string or polynomial is first converted to a codeword, after which the normal operation is performed. For this to go right, make sure that at least one of the operands is a codeword. Further more, it will not work when the right operand is a polynomial. In that case, the polynomial operations (\texttt{FiniteFieldPolynomialOps}) are called, instead of the codeword operations (\texttt{CodewordOps}). Some other code-oriented operations with codewords are described in \ref{Operations for Codes}. } \section{\textcolor{Chapter }{ Functions that Convert Codewords to Vectors or Polynomials }}\logpage{[ 3, 4, 0 ]} \hyperdef{L}{X7BBA5DCD7A8BD60D}{} { \label{convert Codewords to Vectors or Polynomials} \subsection{\textcolor{Chapter }{VectorCodeword}} \logpage{[ 3, 4, 1 ]}\nobreak \hyperdef{L}{X87C8B0B178496F6A}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{VectorCodeword({\slshape obj})\index{VectorCodeword@\texttt{VectorCodeword}} \label{VectorCodeword} }\hfill{\scriptsize (function)}}\\ Here \mbox{\texttt{\slshape obj}} can be a code word or a list of code words. This function returns the corresponding vectors over a finite field. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> a := Codeword("011011");; gap> VectorCodeword(a); [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ] \end{Verbatim} \subsection{\textcolor{Chapter }{PolyCodeword}} \logpage{[ 3, 4, 2 ]}\nobreak \hyperdef{L}{X822465E884D0F484}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PolyCodeword({\slshape obj})\index{PolyCodeword@\texttt{PolyCodeword}} \label{PolyCodeword} }\hfill{\scriptsize (function)}}\\ \texttt{PolyCodeword} returns a polynomial or a list of polynomials over a Galois field, converted from \mbox{\texttt{\slshape obj}}. The object \mbox{\texttt{\slshape obj}} can be a codeword, or a list of codewords. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> a := Codeword("011011");; gap> PolyCodeword(a); x_1+x_1^2+x_1^4+x_1^5 \end{Verbatim} } \section{\textcolor{Chapter }{ Functions that Change the Display Form of a Codeword }}\logpage{[ 3, 5, 0 ]} \hyperdef{L}{X81D3230A797FE6E3}{} { \label{Functions that Change the Display Form of a Codeword} \subsection{\textcolor{Chapter }{TreatAsVector}} \logpage{[ 3, 5, 1 ]}\nobreak \hyperdef{L}{X7E3E174B7954AA6B}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{TreatAsVector({\slshape obj})\index{TreatAsVector@\texttt{TreatAsVector}} \label{TreatAsVector} }\hfill{\scriptsize (function)}}\\ \texttt{TreatAsVector} adapts the codewords in \mbox{\texttt{\slshape obj}} to make sure they are printed as vectors. \mbox{\texttt{\slshape obj}} may be a codeword or a list of codewords. Elements of \mbox{\texttt{\slshape obj}} that are not codewords are ignored. After this function is called, the codewords will be treated as vectors. The vector representation is obtained by using the coefficient list of the polynomial. Note that this \emph{only} changes the way a codeword is \emph{printed}. \texttt{TreatAsVector} returns nothing, it is called only for its side effect. The function \texttt{VectorCodeword} converts codewords to vectors (see \texttt{VectorCodeword} (\ref{VectorCodeword})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> B := BinaryGolayCode(); a cyclic [23,12,7]3 binary Golay code over GF(2) gap> c := CodewordNr(B, 4); x^22 + x^20 + x^17 + x^14 + x^13 + x^12 + x^11 + x^10 gap> TreatAsVector(c); gap> c; [ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 0 0 1 0 1 ] \end{Verbatim} \subsection{\textcolor{Chapter }{TreatAsPoly}} \logpage{[ 3, 5, 2 ]}\nobreak \hyperdef{L}{X7A6828148490BD2E}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{TreatAsPoly({\slshape obj})\index{TreatAsPoly@\texttt{TreatAsPoly}} \label{TreatAsPoly} }\hfill{\scriptsize (function)}}\\ \texttt{TreatAsPoly} adapts the codewords in \mbox{\texttt{\slshape obj}} to make sure they are printed as polynomials. \mbox{\texttt{\slshape obj}} may be a codeword or a list of codewords. Elements of \mbox{\texttt{\slshape obj}} that are not codewords are ignored. After this function is called, the codewords will be treated as polynomials. The finite field vector that defines the codeword is used as a coefficient list of the polynomial representation, where the first element of the vector is the coefficient of degree zero, the second element is the coefficient of degree one, etc, until the last element, which is the coefficient of highest degree. Note that this \emph{only} changes the way a codeword is \emph{printed}. \texttt{TreatAsPoly} returns nothing, it is called only for its side effect. The function \texttt{PolyCodeword} converts codewords to polynomials (see \texttt{PolyCodeword} (\ref{PolyCodeword})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> a := Codeword("00001",GF(2)); [ 0 0 0 0 1 ] gap> TreatAsPoly(a); a; x^4 gap> b := NullWord(6,GF(4)); [ 0 0 0 0 0 0 ] gap> TreatAsPoly(b); b; 0 \end{Verbatim} } \section{\textcolor{Chapter }{ Other Codeword Functions }}\logpage{[ 3, 6, 0 ]} \hyperdef{L}{X805BF7147C68CACD}{} { \label{Other Codeword Functions} \subsection{\textcolor{Chapter }{NullWord}} \logpage{[ 3, 6, 1 ]}\nobreak \hyperdef{L}{X8000B6597EF0282F}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{NullWord({\slshape n, F})\index{NullWord@\texttt{NullWord}} \label{NullWord} }\hfill{\scriptsize (function)}}\\ Other uses: \texttt{NullWord( n )} (default $F=GF(2)$) and \texttt{NullWord( C )}. \texttt{NullWord} returns a codeword of length \mbox{\texttt{\slshape n}} over the field \mbox{\texttt{\slshape F}} of only zeros. The integer \mbox{\texttt{\slshape n}} must be greater then zero. If only a code \mbox{\texttt{\slshape C}} is specified, \texttt{NullWord} will return a null word with both the word length and the Galois field of \mbox{\texttt{\slshape C}}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> NullWord(8); [ 0 0 0 0 0 0 0 0 ] gap> Codeword("0000") = NullWord(4); true gap> NullWord(5,GF(16)); [ 0 0 0 0 0 ] gap> NullWord(ExtendedTernaryGolayCode()); [ 0 0 0 0 0 0 0 0 0 0 0 0 ] \end{Verbatim} \subsection{\textcolor{Chapter }{DistanceCodeword}} \logpage{[ 3, 6, 2 ]}\nobreak \hyperdef{L}{X7CDA1B547D55E6FB}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DistanceCodeword({\slshape c1, c2})\index{DistanceCodeword@\texttt{DistanceCodeword}} \label{DistanceCodeword} }\hfill{\scriptsize (function)}}\\ \texttt{DistanceCodeword} returns the Hamming distance from \mbox{\texttt{\slshape c1}} to \mbox{\texttt{\slshape c2}}. Both variables must be codewords with equal word length over the same Galois field. The Hamming distance between two words is the number of places in which they differ. As a result, \texttt{DistanceCodeword} always returns an integer between zero and the word length of the codewords. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> a := Codeword([0, 1, 2, 0, 1, 2]);; b := NullWord(6, GF(3));; gap> DistanceCodeword(a, b); 4 gap> DistanceCodeword(b, a); 4 gap> DistanceCodeword(a, a); 0 \end{Verbatim} \subsection{\textcolor{Chapter }{Support}} \logpage{[ 3, 6, 3 ]}\nobreak \hyperdef{L}{X7B689C0284AC4296}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{Support({\slshape c})\index{Support@\texttt{Support}} \label{Support} }\hfill{\scriptsize (function)}}\\ \texttt{Support} returns a set of integers indicating the positions of the non-zero entries in a codeword \mbox{\texttt{\slshape c}}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> a := Codeword("012320023002");; Support(a); [ 2, 3, 4, 5, 8, 9, 12 ] gap> Support(NullWord(7)); [ ] \end{Verbatim} The support of a list with codewords can be calculated by taking the union of the individual supports. The weight of the support is the length of the set. \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> L := Codeword(["000000", "101010", "222000"], GF(3));; gap> S := Union(List(L, i -> Support(i))); [ 1, 2, 3, 5 ] gap> Length(S); 4 \end{Verbatim} \subsection{\textcolor{Chapter }{WeightCodeword}} \logpage{[ 3, 6, 4 ]}\nobreak \hyperdef{L}{X7AD61C237D8D3849}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{WeightCodeword({\slshape c})\index{WeightCodeword@\texttt{WeightCodeword}} \label{WeightCodeword} }\hfill{\scriptsize (function)}}\\ \texttt{WeightCodeword} returns the weight of a codeword $c$, the number of non-zero entries in \mbox{\texttt{\slshape c}}. As a result, \texttt{WeightCodeword} always returns an integer between zero and the word length of the codeword. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> WeightCodeword(Codeword("22222")); 5 gap> WeightCodeword(NullWord(3)); 0 gap> C := HammingCode(3); a linear [7,4,3]1 Hamming (3,2) code over GF(2) gap> Minimum(List(AsSSortedList(C){[2..Size(C)]}, WeightCodeword ) ); 3 \end{Verbatim} } } \chapter{\textcolor{Chapter }{Codes}}\logpage{[ 4, 0, 0 ]} \hyperdef{L}{X85FDDF0B7B7D87FB}{} { \label{Codes} A \emph{code} is a set of codewords (recall a \index{code} \index{code, elements of} codeword in \textsf{GUAVA} is simply a sequence of elements of a finite field $GF(q)$, where $q$ is a prime power). We call these the \emph{elements} of the code. Depending on the type of code, a codeword can be interpreted as a vector or as a polynomial. This is explained in more detail in Chapter \ref{Codewords}. In \textsf{GUAVA}, codes can be a set specified by its elements (this will be called an \emph{unrestricted code}), \index{code, unrestricted} by a generator matrix listing a set of basis elements (for a linear code) or by a generator polynomial (for a cyclic code). Any code can be defined by its elements. If you like, you can give the code a name. \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := ElementsCode(["1100", "1010", "0001"], "example code", GF(2) ); a (4,3,1..4)2..4 example code over GF(2) \end{Verbatim} An $(n,M,d)$ code is a code with word \emph{length} $n$, \emph{size} $M$ and \emph{minimum distance} $d$. \index{code, $(n,M,d)$} \index{minimum distance} \index{length} \index{size} If the minimum distance has not yet been calculated, the lower bound and upper bound are printed (except in the case where the code is a random linear codes, where these are not printed for efficiency reasons). So \begin{verbatim} a (4,3,1..4)2..4 code over GF(2) \end{verbatim} means a binary unrestricted code of length $4$, with $3$ elements and the minimum distance is greater than or equal to $1$ and less than or equal to $4$ and the covering radius is greater than or equal to $2$ and less than or equal to $4$. \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := ElementsCode(["1100", "1010", "0001"], "example code", GF(2) ); a (4,3,1..4)2..4 example code over GF(2) gap> MinimumDistance(C); 2 gap> C; a (4,3,2)2..4 example code over GF(2) \end{Verbatim} If the set of elements is a linear subspace of $GF(q)^n$, the code is called \emph{linear}. If a code is linear, it can be defined by its \emph{generator matrix} or \emph{parity check matrix}. \index{code, linear} \index{parity check matrix} By definition, the rows of the generator matrix is a basis for the code (as a vector space over $GF(q)$). By definition, the rows of the parity check matrix is a basis for the dual space of the code, \[ C^* = \{ v \in GF(q)^n\ |\ v\cdot c = 0,\ for \ all\ c \in C \}. \] \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> G := GeneratorMatCode([[1,0,1],[0,1,2]], "demo code", GF(3) ); a linear [3,2,1..2]1 demo code over GF(3) \end{Verbatim} So a linear $[n, k, d]r$ code \index{code, $[n, k, d]r$} is a code with word \emph{length} $n$, \emph{dimension} $k$, \emph{minimum distance} $d$ and \emph{covering radius} $r$. If the code is linear and all cyclic shifts of its codewords (regarded as $n$-tuples) are again codewords, the code is called \emph{cyclic}. \index{code, cyclic} All elements of a cyclic code are multiples of the monic polynomial modulo a polynomial $x^n -1$, where $n$ is the word length of the code. Such a polynomial is called a \emph{generator polynomial} \index{generator polynomial} The generator polynomial must divide $x^n-1$ and its quotient is called a \emph{check polynomial}. \index{check polynomial} Multiplying a codeword in a cyclic code by the check polynomial yields zero (modulo the polynomial $x^n -1$). In \textsf{GUAVA}, a cyclic code can be defined by either its generator polynomial or check polynomial. \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> G := GeneratorPolCode(Indeterminate(GF(2))+Z(2)^0, 7, GF(2) ); a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2) \end{Verbatim} It is possible that \textsf{GUAVA} does not know that an unrestricted code is in fact linear. This situation occurs for example when a code is generated from a list of elements with the function \texttt{ElementsCode} (see \texttt{ElementsCode} (\ref{ElementsCode})). By calling the function \texttt{IsLinearCode} (see \texttt{IsLinearCode} (\ref{IsLinearCode})), \textsf{GUAVA} tests if the code can be represented by a generator matrix. If so, the code record and the operations are converted accordingly. \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> L := Z(2)*[ [0,0,0], [1,0,0], [0,1,1], [1,1,1] ];; gap> C := ElementsCode( L, GF(2) ); a (3,4,1..3)1 user defined unrestricted code over GF(2) # so far, GUAVA does not know what kind of code this is gap> IsLinearCode( C ); true # it is linear gap> C; a linear [3,2,1]1 user defined unrestricted code over GF(2) \end{Verbatim} Of course the same holds for unrestricted codes that in fact are cyclic, or codes, defined by a generator matrix, that actually are cyclic. Codes are printed simply by giving a small description of their parameters, the word length, size or dimension and perhaps the minimum distance, followed by a short description and the base field of the code. The function \texttt{Display} gives a more detailed description, showing the construction history of the code. \textsf{GUAVA} doesn't place much emphasis on the actual encoding and decoding processes; some algorithms have been included though. Encoding works simply by multiplying an information vector with a code, decoding is done by the functions \texttt{Decode} or \texttt{Decodeword}. For more information about encoding and decoding, see sections \ref{Operations for Codes} and \ref{Decode}. \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> R := ReedMullerCode( 1, 3 ); a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) gap> w := [ 1, 0, 1, 1 ] * R; [ 1 0 0 1 1 0 0 1 ] gap> Decode( R, w ); [ 1 0 1 1 ] gap> Decode( R, w + "10000000" ); # One error at the first position [ 1 0 1 1 ] # Corrected by Guava \end{Verbatim} Sections \ref{Comparisons of Codes} and \ref{Operations for Codes} describe the operations that are available for codes. Section \ref{Boolean Functions for Codes} describe the functions that tests whether an object is a code and what kind of code it is (see \texttt{IsCode}, \texttt{IsLinearCode} (\ref{IsLinearCode}) and \texttt{IsCyclicCode}) and various other boolean functions for codes. Section \ref{Equivalence and Isomorphism of Codes} describe functions about equivalence and isomorphism of codes (see \texttt{IsEquivalent} (\ref{IsEquivalent}), \texttt{CodeIsomorphism} (\ref{CodeIsomorphism}) and \texttt{AutomorphismGroup} (\ref{AutomorphismGroup})). Section \ref{Domain Functions for Codes} describes functions that work on \emph{domains} (see Chapter "Domains and their Elements" in the GAP Reference Manual). Section \ref{Printing and Displaying Codes} describes functions for printing and displaying codes. Section \ref{Generating (Check) Matrices and Polynomials} describes functions that return the matrices and polynomials that define a code (see \texttt{GeneratorMat} (\ref{GeneratorMat}), \texttt{CheckMat} (\ref{CheckMat}), \texttt{GeneratorPol} (\ref{GeneratorPol}), \texttt{CheckPol} (\ref{CheckPol}), \texttt{RootsOfCode} (\ref{RootsOfCode})). Section \ref{Parameters of Codes} describes functions that return the basic parameters of codes (see \texttt{WordLength} (\ref{WordLength}), \texttt{Redundancy} (\ref{Redundancy}) and \texttt{MinimumDistance} (\ref{MinimumDistance})). Section \ref{Distributions} describes functions that return distance and weight distributions (see \texttt{WeightDistribution} (\ref{WeightDistribution}), \texttt{InnerDistribution} (\ref{InnerDistribution}), \texttt{OuterDistribution} (\ref{OuterDistribution}) and \texttt{DistancesDistribution} (\ref{DistancesDistribution})). Section \ref{Decoding Functions} describes functions that are related to decoding (see \texttt{Decode} (\ref{Decode}), \texttt{Decodeword} (\ref{Decodeword}), \texttt{Syndrome} (\ref{Syndrome}), \texttt{SyndromeTable} (\ref{SyndromeTable}) and \texttt{StandardArray} (\ref{StandardArray})). In Chapters \ref{Generating Codes} and \ref{Manipulating Codes} which follow, we describe functions that generate and manipulate codes. \section{\textcolor{Chapter }{Comparisons of Codes}}\logpage{[ 4, 1, 0 ]} \hyperdef{L}{X7ECE60E1873B49A6}{} { \label{Comparisons of Codes} \subsection{\textcolor{Chapter }{=}} \logpage{[ 4, 1, 1 ]}\nobreak \hyperdef{L}{X8123456781234567}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{=({\slshape C1, C2})\index{=@\texttt{=}} \label{=} }\hfill{\scriptsize (function)}}\\ The equality operator \texttt{C1 = C2} evaluates to `true' if the codes \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}} are equal, and to `false' otherwise. The equality operator is also denoted \texttt{EQ}, and \texttt{Eq(C1,C2)} is the same as \texttt{C1 = C2}. There is also an inequality operator, {\textless} {\textgreater}, or \texttt{not EQ}. Note that codes are equal if and only if their set of elements are equal. Codes can also be compared with objects of other types. Of course they are never equal. } \index{not =} \index{{\textless} {\textgreater}} \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> M := [ [0, 0], [1, 0], [0, 1], [1, 1] ];; gap> C1 := ElementsCode( M, GF(2) ); a (2,4,1..2)0 user defined unrestricted code over GF(2) gap> M = C1; false gap> C2 := GeneratorMatCode( [ [1, 0], [0, 1] ], GF(2) ); a linear [2,2,1]0 code defined by generator matrix over GF(2) gap> C1 = C2; true gap> ReedMullerCode( 1, 3 ) = HadamardCode( 8 ); true gap> WholeSpaceCode( 5, GF(4) ) = WholeSpaceCode( 5, GF(2) ); false \end{Verbatim} Another way of comparing codes is \texttt{IsEquivalent}, which checks if two codes are equivalent (see \texttt{IsEquivalent} (\ref{IsEquivalent})). By the way, this called \texttt{CodeIsomorphism}. For the current version of \textsf{GUAVA}, unless one of the codes is unrestricted, this calls Leon's C program (which only works for binary linear codes and only on a unix/linux computer). } \section{\textcolor{Chapter }{ Operations for Codes }}\logpage{[ 4, 2, 0 ]} \hyperdef{L}{X832DA51986A3882C}{} { \label{Operations for Codes} \subsection{\textcolor{Chapter }{+}} \logpage{[ 4, 2, 1 ]}\nobreak \hyperdef{L}{X7F2703417F270341}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{+({\slshape C1, C2})\index{+@\texttt{+}} \label{+} }\hfill{\scriptsize (function)}}\\ \index{codes, addition} \index{codes, direct sum} The operator `+' evaluates to the direct sum of the codes \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}}. See \texttt{DirectSumCode} (\ref{DirectSumCode}). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1:=RandomLinearCode(10,5); a [10,5,?] randomly generated code over GF(2) gap> C2:=RandomLinearCode(9,4); a [9,4,?] randomly generated code over GF(2) gap> C1+C2; a linear [10,9,1]0..10 unknown linear code over GF(2) \end{Verbatim} \subsection{\textcolor{Chapter }{*}} \logpage{[ 4, 2, 2 ]}\nobreak \hyperdef{L}{X8123456781234567}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{*({\slshape C1, C2})\index{*@\texttt{*}} \label{*} }\hfill{\scriptsize (function)}}\\ \index{codes, product} The operator `*' evaluates to the direct product of the codes \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}}. See \texttt{DirectProductCode} (\ref{DirectProductCode}). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) ); a linear [4,2,1]1 code defined by generator matrix over GF(2) gap> C2 := GeneratorMatCode( [ [0,0,1, 1], [0,0,0, 1] ], GF(2) ); a linear [4,2,1]1 code defined by generator matrix over GF(2) gap> C1*C2; a linear [16,4,1]4..12 direct product code \end{Verbatim} \subsection{\textcolor{Chapter }{*}} \logpage{[ 4, 2, 3 ]}\nobreak \hyperdef{L}{X8123456781234567}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{*({\slshape m, C})\index{*@\texttt{*}} \label{*} }\hfill{\scriptsize (function)}}\\ \index{codes, encoding} \index{encoder map} The operator \texttt{m*C} evaluates to the element of \mbox{\texttt{\slshape C}} belonging to information word ('message') \mbox{\texttt{\slshape m}}. Here \mbox{\texttt{\slshape m}} may be a vector, polynomial, string or codeword or a list of those. This is the way to do encoding in \textsf{GUAVA}. \mbox{\texttt{\slshape C}} must be linear, because in \textsf{GUAVA}, encoding by multiplication is only defined for linear codes. If \mbox{\texttt{\slshape C}} is a cyclic code, this multiplication is the same as multiplying an information polynomial \mbox{\texttt{\slshape m}} by the generator polynomial of \mbox{\texttt{\slshape C}}. If \mbox{\texttt{\slshape C}} is a linear code, it is equal to the multiplication of an information vector \mbox{\texttt{\slshape m}} by a generator matrix of \mbox{\texttt{\slshape C}}. To invert this, use the function \texttt{InformationWord} (see \texttt{InformationWord} (\ref{InformationWord}), which simply calls the function \texttt{Decode}). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) ); a linear [4,2,1]1 code defined by generator matrix over GF(2) gap> m:=Codeword("11"); [ 1 1 ] gap> m*C; [ 1 1 0 0 ] \end{Verbatim} \subsection{\textcolor{Chapter }{InformationWord}} \logpage{[ 4, 2, 4 ]}\nobreak \hyperdef{L}{X8744BA5E78BCF3F9}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{InformationWord({\slshape C, c})\index{InformationWord@\texttt{InformationWord}} \label{InformationWord} }\hfill{\scriptsize (function)}}\\ \index{codes, decoding} \index{information bits} Here \mbox{\texttt{\slshape C}} is a linear code and \mbox{\texttt{\slshape c}} is a codeword in it. The command \texttt{InformationWord} returns the message word (or 'information digits') $m$ satisfying \texttt{c=m*C}. This command simply calls \texttt{Decode}, provided \texttt{c in C} is true. Otherwise, it returns an error. To invert this, use the encoding function \texttt{*} (see \texttt{*} (\ref{*})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=HammingCode(3); a linear [7,4,3]1 Hamming (3,2) code over GF(2) gap> c:=Random(C); [ 0 0 0 1 1 1 1 ] gap> InformationWord(C,c); [ 0 1 1 1 ] gap> c:=Codeword("1111100"); [ 1 1 1 1 1 0 0 ] gap> InformationWord(C,c); "ERROR: codeword must belong to code" gap> C:=NordstromRobinsonCode(); a (16,256,6)4 Nordstrom-Robinson code over GF(2) gap> c:=Random(C); [ 0 0 0 1 0 0 0 1 0 0 1 0 1 1 0 1 ] gap> InformationWord(C,c); "ERROR: code must be linear" \end{Verbatim} } \section{\textcolor{Chapter }{ Boolean Functions for Codes }}\logpage{[ 4, 3, 0 ]} \hyperdef{L}{X864091AA7D4AFE86}{} { \label{Boolean Functions for Codes} \subsection{\textcolor{Chapter }{in}} \logpage{[ 4, 3, 1 ]}\nobreak \hyperdef{L}{X87BDB89B7AAFE8AD}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{in({\slshape c, C})\index{in@\texttt{in}} \label{in} }\hfill{\scriptsize (function)}}\\ \index{code, element test} The command \texttt{c in C} evaluates to `true' if \mbox{\texttt{\slshape C}} contains the codeword or list of codewords specified by \mbox{\texttt{\slshape c}}. Of course, \mbox{\texttt{\slshape c}} and \mbox{\texttt{\slshape C}} must have the same word lengths and base fields. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:= HammingCode( 2 );; eC:= AsSSortedList( C ); [ [ 0 0 0 ], [ 1 1 1 ] ] gap> eC[2] in C; true gap> [ 0 ] in C; false \end{Verbatim} \subsection{\textcolor{Chapter }{IsSubset}} \logpage{[ 4, 3, 2 ]}\nobreak \hyperdef{L}{X79CA175481F8105F}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsSubset({\slshape C1, C2})\index{IsSubset@\texttt{IsSubset}} \label{IsSubset} }\hfill{\scriptsize (function)}}\\ \index{code, subcode} The command \texttt{IsSubset(C1,C2)} returns `true' if \mbox{\texttt{\slshape C2}} is a subcode of \mbox{\texttt{\slshape C1}}, i.e. if \mbox{\texttt{\slshape C1}} contains all the elements of \mbox{\texttt{\slshape C2}}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> IsSubset( HammingCode(3), RepetitionCode( 7 ) ); true gap> IsSubset( RepetitionCode( 7 ), HammingCode( 3 ) ); false gap> IsSubset( WholeSpaceCode( 7 ), HammingCode( 3 ) ); true \end{Verbatim} \subsection{\textcolor{Chapter }{IsCode}} \logpage{[ 4, 3, 3 ]}\nobreak \hyperdef{L}{X7F71186281DEA83A}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsCode({\slshape obj})\index{IsCode@\texttt{IsCode}} \label{IsCode} }\hfill{\scriptsize (function)}}\\ \texttt{IsCode} returns `true' if \mbox{\texttt{\slshape obj}}, which can be an object of arbitrary type, is a code and `false' otherwise. Will cause an error if \mbox{\texttt{\slshape obj}} is an unbound variable. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> IsCode( 1 ); false gap> IsCode( ReedMullerCode( 2,3 ) ); true \end{Verbatim} \subsection{\textcolor{Chapter }{IsLinearCode}} \logpage{[ 4, 3, 4 ]}\nobreak \hyperdef{L}{X7B24748A7CE8D4B9}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsLinearCode({\slshape obj})\index{IsLinearCode@\texttt{IsLinearCode}} \label{IsLinearCode} }\hfill{\scriptsize (function)}}\\ \texttt{IsLinearCode} checks if object \mbox{\texttt{\slshape obj}} (not necessarily a code) is a linear code. If a code has already been marked as linear or cyclic, the function automatically returns `true'. Otherwise, the function checks if a basis $G$ of the elements of \mbox{\texttt{\slshape obj}} exists that generates the elements of \mbox{\texttt{\slshape obj}}. If so, $G$ is recorded as a generator matrix of \mbox{\texttt{\slshape obj}} and the function returns `true'. If not, the function returns `false'. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := ElementsCode( [ [0,0,0],[1,1,1] ], GF(2) ); a (3,2,1..3)1 user defined unrestricted code over GF(2) gap> IsLinearCode( C ); true gap> IsLinearCode( ElementsCode( [ [1,1,1] ], GF(2) ) ); false gap> IsLinearCode( 1 ); false \end{Verbatim} \subsection{\textcolor{Chapter }{IsCyclicCode}} \logpage{[ 4, 3, 5 ]}\nobreak \hyperdef{L}{X850C23D07C9A9B19}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsCyclicCode({\slshape obj})\index{IsCyclicCode@\texttt{IsCyclicCode}} \label{IsCyclicCode} }\hfill{\scriptsize (function)}}\\ \texttt{IsCyclicCode} checks if the object \mbox{\texttt{\slshape obj}} is a cyclic code. If a code has already been marked as cyclic, the function automatically returns `true'. Otherwise, the function checks if a polynomial $g$ exists that generates the elements of \mbox{\texttt{\slshape obj}}. If so, $g$ is recorded as a generator polynomial of \mbox{\texttt{\slshape obj}} and the function returns `true'. If not, the function returns `false'. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := ElementsCode( [ [0,0,0], [1,1,1] ], GF(2) ); a (3,2,1..3)1 user defined unrestricted code over GF(2) gap> # GUAVA does not know the code is cyclic gap> IsCyclicCode( C ); # this command tells GUAVA to find out true gap> IsCyclicCode( HammingCode( 4, GF(2) ) ); false gap> IsCyclicCode( 1 ); false \end{Verbatim} \subsection{\textcolor{Chapter }{IsPerfectCode}} \logpage{[ 4, 3, 6 ]}\nobreak \hyperdef{L}{X85E3BD26856424F7}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsPerfectCode({\slshape C})\index{IsPerfectCode@\texttt{IsPerfectCode}} \label{IsPerfectCode} }\hfill{\scriptsize (function)}}\\ \texttt{IsPerfectCode(C)} returns `true' if \mbox{\texttt{\slshape C}} is a perfect code. If $C\subset GF(q)^n$ then, by definition, this means that for some positive integer $t$, the space $GF(q)^n$ is covered by non-overlapping spheres of (Hamming) radius $t$ centered at the codewords in \mbox{\texttt{\slshape C}}. For a code with odd minimum distance $d = 2t+1$, this is the case when every word of the vector space of \mbox{\texttt{\slshape C}} is at distance at most $t$ from exactly one element of \mbox{\texttt{\slshape C}}. Codes with even minimum distance are never perfect. In fact, a code that is not "trivially perfect" (the binary repetition codes of odd length, the codes consisting of one word, and the codes consisting of the whole vector space), and does not have the parameters of a Hamming or Golay code, cannot be perfect (see section 1.12 in \cite{HP03}). } \index{code, perfect} \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> H := HammingCode(2); a linear [3,1,3]1 Hamming (2,2) code over GF(2) gap> IsPerfectCode( H ); true gap> IsPerfectCode( ElementsCode([[1,1,0],[0,0,1]],GF(2)) ); true gap> IsPerfectCode( ReedSolomonCode( 6, 3 ) ); false gap> IsPerfectCode( BinaryGolayCode() ); true \end{Verbatim} \subsection{\textcolor{Chapter }{IsMDSCode}} \logpage{[ 4, 3, 7 ]}\nobreak \hyperdef{L}{X789380D28018EC3F}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsMDSCode({\slshape C})\index{IsMDSCode@\texttt{IsMDSCode}} \label{IsMDSCode} }\hfill{\scriptsize (function)}}\\ \texttt{IsMDSCode(C)} returns true if \mbox{\texttt{\slshape C}} is a maximum distance separable (MDS) code. A linear $[n, k, d]$-code of length $n$, dimension $k$ and minimum distance $d$ is an MDS code if $k=n-d+1$, in other words if \mbox{\texttt{\slshape C}} meets the Singleton bound (see \texttt{UpperBoundSingleton} (\ref{UpperBoundSingleton})). An unrestricted $(n, M, d)$ code is called \emph{MDS} if $k=n-d+1$, with $k$ equal to the largest integer less than or equal to the logarithm of $M$ with base $q$, the size of the base field of \mbox{\texttt{\slshape C}}. Well-known MDS codes include the repetition codes, the whole space codes, the even weight codes (these are the only \emph{binary} MDS codes) and the Reed-Solomon codes. } \index{code, maximum distance separable} \index{MDS} \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := ReedSolomonCode( 6, 3 ); a cyclic [6,4,3]2 Reed-Solomon code over GF(7) gap> IsMDSCode( C1 ); true # 6-3+1 = 4 gap> IsMDSCode( QRCode( 23, GF(2) ) ); false \end{Verbatim} \subsection{\textcolor{Chapter }{IsSelfDualCode}} \logpage{[ 4, 3, 8 ]}\nobreak \hyperdef{L}{X80166D8D837FEB58}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsSelfDualCode({\slshape C})\index{IsSelfDualCode@\texttt{IsSelfDualCode}} \label{IsSelfDualCode} }\hfill{\scriptsize (function)}}\\ \texttt{IsSelfDualCode(C)} returns `true' if \mbox{\texttt{\slshape C}} is self-dual, i.e. when \mbox{\texttt{\slshape C}} is equal to its dual code (see also \texttt{DualCode} (\ref{DualCode})). A code is self-dual if it contains all vectors that its elements are orthogonal to. If a code is self-dual, it automatically is self-orthogonal (see \texttt{IsSelfOrthogonalCode} (\ref{IsSelfOrthogonalCode})). If \mbox{\texttt{\slshape C}} is a non-linear code, it cannot be self-dual (the dual code is always linear), so `false' is returned. A linear code can only be self-dual when its dimension $k$ is equal to the redundancy $r$. } \index{code, self-dual} \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> IsSelfDualCode( ExtendedBinaryGolayCode() ); true gap> C := ReedMullerCode( 1, 3 ); a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) gap> DualCode( C ) = C; true \end{Verbatim} \index{self-orthogonal} \subsection{\textcolor{Chapter }{IsSelfOrthogonalCode}} \logpage{[ 4, 3, 9 ]}\nobreak \hyperdef{L}{X7B2A0CC481D2366F}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsSelfOrthogonalCode({\slshape C})\index{IsSelfOrthogonalCode@\texttt{IsSelfOrthogonalCode}} \label{IsSelfOrthogonalCode} }\hfill{\scriptsize (function)}}\\ \texttt{IsSelfOrthogonalCode(C)} returns `true' if \mbox{\texttt{\slshape C}} is self-orthogonal. A code is \emph{self-orthogonal} if every element of \mbox{\texttt{\slshape C}} is orthogonal to all elements of \mbox{\texttt{\slshape C}}, including itself. (In the linear case, this simply means that the generator matrix of \mbox{\texttt{\slshape C}} multiplied with its transpose yields a null matrix.) } \index{code, self-orthogonal} \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> R := ReedMullerCode(1,4); a linear [16,5,8]6 Reed-Muller (1,4) code over GF(2) gap> IsSelfOrthogonalCode(R); true gap> IsSelfDualCode(R); false \end{Verbatim} \index{doubly-even} \subsection{\textcolor{Chapter }{IsDoublyEvenCode}} \logpage{[ 4, 3, 10 ]}\nobreak \hyperdef{L}{X8358D43981EBE970}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsDoublyEvenCode({\slshape C})\index{IsDoublyEvenCode@\texttt{IsDoublyEvenCode}} \label{IsDoublyEvenCode} }\hfill{\scriptsize (function)}}\\ \texttt{IsDoublyEvenCode(C)} returns `true' if \mbox{\texttt{\slshape C}} is a binary linear code which has codewords of weight divisible by 4 only. According to \cite{HP03}, a doubly-even code is self-orthogonal and every row in its generator matrix has weight that is divisible by 4. } \index{code, doubly-even} \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=BinaryGolayCode(); a cyclic [23,12,7]3 binary Golay code over GF(2) gap> WeightDistribution(C); [ 1, 0, 0, 0, 0, 0, 0, 253, 506, 0, 0, 1288, 1288, 0, 0, 506, 253, 0, 0, 0, 0, 0, 0, 1 ] gap> IsDoublyEvenCode(C); false gap> C:=ExtendedCode(C); a linear [24,12,8]4 extended code gap> WeightDistribution(C); [ 1, 0, 0, 0, 0, 0, 0, 0, 759, 0, 0, 0, 2576, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 1 ] gap> IsDoublyEvenCode(C); true \end{Verbatim} \index{singly-even} \subsection{\textcolor{Chapter }{IsSinglyEvenCode}} \logpage{[ 4, 3, 11 ]}\nobreak \hyperdef{L}{X79ACAEF5865414A0}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsSinglyEvenCode({\slshape C})\index{IsSinglyEvenCode@\texttt{IsSinglyEvenCode}} \label{IsSinglyEvenCode} }\hfill{\scriptsize (function)}}\\ \texttt{IsSinglyEvenCode(C)} returns `true' if \mbox{\texttt{\slshape C}} is a binary self-orthogonal linear code which is not doubly-even. In other words, \mbox{\texttt{\slshape C}} is a binary self-orthogonal code which has codewords of even weight. } \index{code, singly-even} \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> x:=Indeterminate(GF(2)); x_1 gap> C:=QuasiCyclicCode( [x^0, 1+x^3+x^5+x^6+x^7], 11, GF(2) ); a linear [22,11,1..6]4..7 quasi-cyclic code over GF(2) gap> IsSelfDualCode(C); # self-dual is a restriction of self-orthogonal true gap> IsDoublyEvenCode(C); false gap> IsSinglyEvenCode(C); true \end{Verbatim} \index{even} \subsection{\textcolor{Chapter }{IsEvenCode}} \logpage{[ 4, 3, 12 ]}\nobreak \hyperdef{L}{X7CE150ED7C3DC455}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsEvenCode({\slshape C})\index{IsEvenCode@\texttt{IsEvenCode}} \label{IsEvenCode} }\hfill{\scriptsize (function)}}\\ \texttt{IsEvenCode(C)} returns `true' if \mbox{\texttt{\slshape C}} is a binary linear code which has codewords of even weight--regardless whether or not it is self-orthogonal. } \index{code, even} \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=BinaryGolayCode(); a cyclic [23,12,7]3 binary Golay code over GF(2) gap> IsSelfOrthogonalCode(C); false gap> IsEvenCode(C); false gap> C:=ExtendedCode(C); a linear [24,12,8]4 extended code gap> IsSelfOrthogonalCode(C); true gap> IsEvenCode(C); true gap> C:=ExtendedCode(QRCode(17,GF(2))); a linear [18,9,6]3..5 extended code gap> IsSelfOrthogonalCode(C); false gap> IsEvenCode(C); true \end{Verbatim} \index{self complementary code} \subsection{\textcolor{Chapter }{IsSelfComplementaryCode}} \logpage{[ 4, 3, 13 ]}\nobreak \hyperdef{L}{X7B6DB8CC84FCAC1C}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsSelfComplementaryCode({\slshape C})\index{IsSelfComplementaryCode@\texttt{IsSelfComplementaryCode}} \label{IsSelfComplementaryCode} }\hfill{\scriptsize (function)}}\\ \texttt{IsSelfComplementaryCode} returns `true' if \[ v \in C \Rightarrow 1 - v \in C, \] where $1$ is the all-one word of length $n$. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> IsSelfComplementaryCode( HammingCode( 3, GF(2) ) ); true gap> IsSelfComplementaryCode( EvenWeightSubcode( > HammingCode( 3, GF(2) ) ) ); false \end{Verbatim} \index{affine code} \subsection{\textcolor{Chapter }{IsAffineCode}} \logpage{[ 4, 3, 14 ]}\nobreak \hyperdef{L}{X7AFD3844859B20BF}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsAffineCode({\slshape C})\index{IsAffineCode@\texttt{IsAffineCode}} \label{IsAffineCode} }\hfill{\scriptsize (function)}}\\ \texttt{IsAffineCode} returns `true' if \mbox{\texttt{\slshape C}} is an affine code. A code is called \emph{affine} if it is an affine space. In other words, a code is affine if it is a coset of a linear code. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> IsAffineCode( HammingCode( 3, GF(2) ) ); true gap> IsAffineCode( CosetCode( HammingCode( 3, GF(2) ), > [ 1, 0, 0, 0, 0, 0, 0 ] ) ); true gap> IsAffineCode( NordstromRobinsonCode() ); false \end{Verbatim} \subsection{\textcolor{Chapter }{IsAlmostAffineCode}} \logpage{[ 4, 3, 15 ]}\nobreak \hyperdef{L}{X861D32FB81EF0D77}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsAlmostAffineCode({\slshape C})\index{IsAlmostAffineCode@\texttt{IsAlmostAffineCode}} \label{IsAlmostAffineCode} }\hfill{\scriptsize (function)}}\\ \texttt{IsAlmostAffineCode} returns `true' if \mbox{\texttt{\slshape C}} is an almost affine code. A code is called \emph{almost affine} if the size of any punctured code of \mbox{\texttt{\slshape C}} is $q^r$ for some $r$, where $q$ is the size of the alphabet of the code. Every affine code is also almost affine, and every code over $GF(2)$ and $GF(3)$ that is almost affine is also affine. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> code := ElementsCode( [ [0,0,0], [0,1,1], [0,2,2], [0,3,3], > [1,0,1], [1,1,0], [1,2,3], [1,3,2], > [2,0,2], [2,1,3], [2,2,0], [2,3,1], > [3,0,3], [3,1,2], [3,2,1], [3,3,0] ], > GF(4) );; gap> IsAlmostAffineCode( code ); true gap> IsAlmostAffineCode( NordstromRobinsonCode() ); false \end{Verbatim} } \section{\textcolor{Chapter }{ Equivalence and Isomorphism of Codes }}\logpage{[ 4, 4, 0 ]} \hyperdef{L}{X86442DCD7A0B2146}{} { \label{Equivalence and Isomorphism of Codes} \index{permutation equivalent codes} \index{equivalent codes} \subsection{\textcolor{Chapter }{IsEquivalent}} \logpage{[ 4, 4, 1 ]}\nobreak \hyperdef{L}{X843034687D9C75B0}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsEquivalent({\slshape C1, C2})\index{IsEquivalent@\texttt{IsEquivalent}} \label{IsEquivalent} }\hfill{\scriptsize (function)}}\\ We say that \mbox{\texttt{\slshape C1}} is \emph{permutation equivalent} to \mbox{\texttt{\slshape C2}} if \mbox{\texttt{\slshape C1}} can be obtained from \mbox{\texttt{\slshape C2}} by carrying out column permutations. \texttt{IsEquivalent} returns true if \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}} are equivalent codes. At this time, \texttt{IsEquivalent} only handles \emph{binary} codes. (The external unix/linux program \textsc{desauto} from J. S. Leon is called by \texttt{IsEquivalent}.) Of course, if \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}} are equal, they are also equivalent. Note that the algorithm is \emph{very slow} for non-linear codes. More generally, we say that \mbox{\texttt{\slshape C1}} is \emph{equivalent} to \mbox{\texttt{\slshape C2}} if \mbox{\texttt{\slshape C1}} can be obtained from \mbox{\texttt{\slshape C2}} by carrying out column permutations and a permutation of the alphabet. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> x:= Indeterminate( GF(2) );; pol:= x^3+x+1; Z(2)^0+x_1+x_1^3 gap> H := GeneratorPolCode( pol, 7, GF(2)); a cyclic [7,4,1..3]1 code defined by generator polynomial over GF(2) gap> H = HammingCode(3, GF(2)); false gap> IsEquivalent(H, HammingCode(3, GF(2))); true # H is equivalent to a Hamming code gap> CodeIsomorphism(H, HammingCode(3, GF(2))); (3,4)(5,6,7) \end{Verbatim} \subsection{\textcolor{Chapter }{CodeIsomorphism}} \logpage{[ 4, 4, 2 ]}\nobreak \hyperdef{L}{X874DED8E86BC180B}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CodeIsomorphism({\slshape C1, C2})\index{CodeIsomorphism@\texttt{CodeIsomorphism}} \label{CodeIsomorphism} }\hfill{\scriptsize (function)}}\\ If the two codes \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}} are permutation equivalent codes (see \texttt{IsEquivalent} (\ref{IsEquivalent})), \texttt{CodeIsomorphism} returns the permutation that transforms \mbox{\texttt{\slshape C1}} into \mbox{\texttt{\slshape C2}}. If the codes are not equivalent, it returns `false'. At this time, \texttt{IsEquivalent} only computes isomorphisms between \emph{binary} codes on a linux/unix computer (since it calls Leon's C program \textsc{desauto}). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> x:= Indeterminate( GF(2) );; pol:= x^3+x+1; Z(2)^0+x_1+x_1^3 gap> H := GeneratorPolCode( pol, 7, GF(2)); a cyclic [7,4,1..3]1 code defined by generator polynomial over GF(2) gap> CodeIsomorphism(H, HammingCode(3, GF(2))); (3,4)(5,6,7) gap> PermutedCode(H, (3,4)(5,6,7)) = HammingCode(3, GF(2)); true \end{Verbatim} \subsection{\textcolor{Chapter }{AutomorphismGroup}} \logpage{[ 4, 4, 3 ]}\nobreak \hyperdef{L}{X87677B0787B4461A}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{AutomorphismGroup({\slshape C})\index{AutomorphismGroup@\texttt{AutomorphismGroup}} \label{AutomorphismGroup} }\hfill{\scriptsize (function)}}\\ \texttt{AutomorphismGroup} returns the automorphism group of a linear code \mbox{\texttt{\slshape C}}. For a binary code, the automorphism group is the largest permutation group of degree $n$ such that each permutation applied to the columns of \mbox{\texttt{\slshape C}} again yields \mbox{\texttt{\slshape C}}. \textsf{GUAVA} calls the external program \textsc{desauto} written by J. S. Leon, if it exists, to compute the automorphism group. If Leon's program is not compiled on the system (and in the default directory) then it calls instead the much slower program \texttt{PermutationAutomorphismGroup}. See Leon \cite{Leon82} for a more precise description of the method, and the \texttt{guava/src/leon/doc} subdirectory for for details about Leon's C programs. The function \texttt{PermutedCode} permutes the columns of a code (see \texttt{PermutedCode} (\ref{PermutedCode})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> R := RepetitionCode(7,GF(2)); a cyclic [7,1,7]3 repetition code over GF(2) gap> AutomorphismGroup(R); Sym( [ 1 .. 7 ] ) # every permutation keeps R identical gap> C := CordaroWagnerCode(7); a linear [7,2,4]3 Cordaro-Wagner code over GF(2) gap> AsSSortedList(C); [ [ 0 0 0 0 0 0 0 ], [ 0 0 1 1 1 1 1 ], [ 1 1 0 0 0 1 1 ], [ 1 1 1 1 1 0 0 ] ] gap> AutomorphismGroup(C); Group([ (3,4), (4,5), (1,6)(2,7), (1,2), (6,7) ]) gap> C2 := PermutedCode(C, (1,6)(2,7)); a linear [7,2,4]3 permuted code gap> AsSSortedList(C2); [ [ 0 0 0 0 0 0 0 ], [ 0 0 1 1 1 1 1 ], [ 1 1 0 0 0 1 1 ], [ 1 1 1 1 1 0 0 ] ] gap> C2 = C; true \end{Verbatim} \index{PermutationAutomorphismGroup} \subsection{\textcolor{Chapter }{PermutationAutomorphismGroup}} \logpage{[ 4, 4, 4 ]}\nobreak \hyperdef{L}{X79F3261F86C29F6D}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PermutationAutomorphismGroup({\slshape C})\index{PermutationAutomorphismGroup@\texttt{PermutationAutomorphismGroup}} \label{PermutationAutomorphismGroup} }\hfill{\scriptsize (function)}}\\ \texttt{PermutationAutomorphismGroup} returns the permutation automorphism group of a linear code \mbox{\texttt{\slshape C}}. This is the largest permutation group of degree $n$ such that each permutation applied to the columns of \mbox{\texttt{\slshape C}} again yields \mbox{\texttt{\slshape C}}. It is written in GAP, so is much slower than \texttt{AutomorphismGroup}. When \mbox{\texttt{\slshape C}} is binary \texttt{PermutationAutomorphismGroup} does \emph{not} call \texttt{AutomorphismGroup}, even though they agree mathematically in that case. This way \texttt{PermutationAutomorphismGroup} can be called on any platform which runs GAP. The older name for this command, \texttt{PermutationGroup}, will become obsolete in the next version of GAP. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> R := RepetitionCode(3,GF(3)); a cyclic [3,1,3]2 repetition code over GF(3) gap> G:=PermutationAutomorphismGroup(R); Group([ (), (1,3), (1,2,3), (2,3), (1,3,2), (1,2) ]) gap> G=SymmetricGroup(3); true \end{Verbatim} } \section{\textcolor{Chapter }{ Domain Functions for Codes }}\logpage{[ 4, 5, 0 ]} \hyperdef{L}{X866EB39483DDAE72}{} { \label{Domain Functions for Codes} These are some GAP functions that work on `Domains' in general. Their specific effect on `Codes' is explained here. \subsection{\textcolor{Chapter }{IsFinite}} \logpage{[ 4, 5, 1 ]}\nobreak \hyperdef{L}{X808A4061809A6E67}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsFinite({\slshape C})\index{IsFinite@\texttt{IsFinite}} \label{IsFinite} }\hfill{\scriptsize (function)}}\\ \texttt{IsFinite} is an implementation of the GAP domain function \texttt{IsFinite}. It returns true for a code \mbox{\texttt{\slshape C}}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> IsFinite( RepetitionCode( 1000, GF(11) ) ); true \end{Verbatim} \subsection{\textcolor{Chapter }{Size}} \logpage{[ 4, 5, 2 ]}\nobreak \hyperdef{L}{X858ADA3B7A684421}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{Size({\slshape C})\index{Size@\texttt{Size}} \label{Size} }\hfill{\scriptsize (function)}}\\ \texttt{Size} returns the size of \mbox{\texttt{\slshape C}}, the number of elements of the code. If the code is linear, the size of the code is equal to $q^k$, where $q$ is the size of the base field of \mbox{\texttt{\slshape C}} and $k$ is the dimension. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> Size( RepetitionCode( 1000, GF(11) ) ); 11 gap> Size( NordstromRobinsonCode() ); 256 \end{Verbatim} \subsection{\textcolor{Chapter }{LeftActingDomain}} \logpage{[ 4, 5, 3 ]}\nobreak \hyperdef{L}{X86F070E0807DC34E}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LeftActingDomain({\slshape C})\index{LeftActingDomain@\texttt{LeftActingDomain}} \label{LeftActingDomain} }\hfill{\scriptsize (function)}}\\ \texttt{LeftActingDomain} returns the base field of a code \mbox{\texttt{\slshape C}}. Each element of \mbox{\texttt{\slshape C}} consists of elements of this base field. If the base field is $F$, and the word length of the code is $n$, then the codewords are elements of $F^n$. If \mbox{\texttt{\slshape C}} is a cyclic code, its elements are interpreted as polynomials with coefficients over $F$. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := ElementsCode([[0,0,0], [1,0,1], [0,1,0]], GF(4)); a (3,3,1..3)2..3 user defined unrestricted code over GF(4) gap> LeftActingDomain( C1 ); GF(2^2) gap> LeftActingDomain( HammingCode( 3, GF(9) ) ); GF(3^2) \end{Verbatim} \subsection{\textcolor{Chapter }{Dimension}} \logpage{[ 4, 5, 4 ]}\nobreak \hyperdef{L}{X7E6926C6850E7C4E}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{Dimension({\slshape C})\index{Dimension@\texttt{Dimension}} \label{Dimension} }\hfill{\scriptsize (function)}}\\ \texttt{Dimension} returns the parameter $k$ of \mbox{\texttt{\slshape C}}, the dimension of the code, or the number of information symbols in each codeword. The dimension is not defined for non-linear codes; \texttt{Dimension} then returns an error. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> Dimension( NullCode( 5, GF(5) ) ); 0 gap> C := BCHCode( 15, 4, GF(4) ); a cyclic [15,9,5]3..4 BCH code, delta=5, b=1 over GF(4) gap> Dimension( C ); 9 gap> Size( C ) = Size( LeftActingDomain( C ) ) ^ Dimension( C ); true \end{Verbatim} \subsection{\textcolor{Chapter }{AsSSortedList}} \logpage{[ 4, 5, 5 ]}\nobreak \hyperdef{L}{X856D927378C33548}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{AsSSortedList({\slshape C})\index{AsSSortedList@\texttt{AsSSortedList}} \label{AsSSortedList} }\hfill{\scriptsize (function)}}\\ \texttt{AsSSortedList} (as strictly sorted list) returns an immutable, duplicate free list of the elements of \mbox{\texttt{\slshape C}}. For a finite field $GF(q)$ generated by powers of $Z(q)$, the ordering on \[ GF(q)=\{ 0 , Z(q)^0, Z(q), Z(q)^2, ...Z(q)^{q-2} \} \] is that determined by the exponents $i$. These elements are of the type codeword (see \texttt{Codeword} (\ref{Codeword})). Note that for large codes, generating the elements may be very time- and memory-consuming. For generating a specific element or a subset of the elements, use \texttt{CodewordNr} (see \texttt{CodewordNr} (\ref{CodewordNr})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := ConferenceCode( 5 ); a (5,12,2)1..4 conference code over GF(2) gap> AsSSortedList( C ); [ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 1 1 ], [ 0 1 1 0 1 ], [ 0 1 1 1 0 ], [ 1 0 0 1 1 ], [ 1 0 1 0 1 ], [ 1 0 1 1 0 ], [ 1 1 0 0 1 ], [ 1 1 0 1 0 ], [ 1 1 1 0 0 ], [ 1 1 1 1 1 ] ] gap> CodewordNr( C, [ 1, 2 ] ); [ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ] ] \end{Verbatim} } \section{\textcolor{Chapter }{ Printing and Displaying Codes }}\logpage{[ 4, 6, 0 ]} \hyperdef{L}{X823827927D6A8235}{} { \label{Printing and Displaying Codes} \subsection{\textcolor{Chapter }{Print}} \logpage{[ 4, 6, 1 ]}\nobreak \hyperdef{L}{X7AFA64D97A1F39A3}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{Print({\slshape C})\index{Print@\texttt{Print}} \label{Print} }\hfill{\scriptsize (function)}}\\ \texttt{Print} prints information about \mbox{\texttt{\slshape C}}. This is the same as typing the identifier \mbox{\texttt{\slshape C}} at the GAP-prompt. If the argument is an unrestricted code, information in the form \begin{verbatim} a (n,M,d)r ... code over GF(q) \end{verbatim} is printed, where \mbox{\texttt{\slshape n}} is the word length, \mbox{\texttt{\slshape M}} the number of elements of the code, \mbox{\texttt{\slshape d}} the minimum distance and \mbox{\texttt{\slshape r}} the covering radius. If the argument is a linear code, information in the form \begin{verbatim} a linear [n,k,d]r ... code over GF(q) \end{verbatim} is printed, where \mbox{\texttt{\slshape n}} is the word length, \mbox{\texttt{\slshape k}} the dimension of the code, \mbox{\texttt{\slshape d}} the minimum distance and \mbox{\texttt{\slshape r}} the covering radius. Except for codes produced by \texttt{RandomLinearCode}, if \mbox{\texttt{\slshape d}} is not yet known, it is displayed in the form \begin{verbatim} lowerbound..upperbound \end{verbatim} and if \mbox{\texttt{\slshape r}} is not yet known, it is displayed in the same way. For certain ranges of $n$, the values of \mbox{\texttt{\slshape lowerbound}} and \mbox{\texttt{\slshape upperbound}} are obtained from tables. The function \texttt{Display} gives more information. See \texttt{Display} (\ref{Display}). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := ExtendedCode( HammingCode( 3, GF(2) ) ); a linear [8,4,4]2 extended code gap> Print( "This is ", NordstromRobinsonCode(), ". \n"); This is a (16,256,6)4 Nordstrom-Robinson code over GF(2). \end{Verbatim} \subsection{\textcolor{Chapter }{String}} \logpage{[ 4, 6, 2 ]}\nobreak \hyperdef{L}{X81FB5BE27903EC32}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{String({\slshape C})\index{String@\texttt{String}} \label{String} }\hfill{\scriptsize (function)}}\\ \texttt{String} returns information about \mbox{\texttt{\slshape C}} in a string. This function is used by \texttt{Print}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> x:= Indeterminate( GF(3) );; pol:= x^2+1; x_1^2+Z(3)^0 gap> Factors(pol); [ x_1^2+Z(3)^0 ] gap> H := GeneratorPolCode( pol, 8, GF(3)); a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3) gap> String(H); "a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)" \end{Verbatim} \subsection{\textcolor{Chapter }{Display}} \logpage{[ 4, 6, 3 ]}\nobreak \hyperdef{L}{X83A5C59278E13248}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{Display({\slshape C})\index{Display@\texttt{Display}} \label{Display} }\hfill{\scriptsize (function)}}\\ \texttt{Display} prints the method of construction of code \mbox{\texttt{\slshape C}}. With this history, in most cases an equal or equivalent code can be reconstructed. If \mbox{\texttt{\slshape C}} is an unmanipulated code, the result is equal to output of the function \texttt{Print} (see \texttt{Print} (\ref{Print})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> Display( RepetitionCode( 6, GF(3) ) ); a cyclic [6,1,6]4 repetition code over GF(3) gap> C1 := ExtendedCode( HammingCode(2) );; gap> C2 := PuncturedCode( ReedMullerCode( 2, 3 ) );; gap> Display( LengthenedCode( UUVCode( C1, C2 ) ) ); a linear [12,8,2]2..4 code, lengthened with 1 column(s) of a linear [11,8,1]1..2 U U+V construction code of U: a linear [4,1,4]2 extended code of a linear [3,1,3]1 Hamming (2,2) code over GF(2) V: a linear [7,7,1]0 punctured code of a cyclic [8,7,2]1 Reed-Muller (2,3) code over GF(2) \end{Verbatim} \subsection{\textcolor{Chapter }{DisplayBoundsInfo}} \logpage{[ 4, 6, 4 ]}\nobreak \hyperdef{L}{X7CD08C8C780543C4}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DisplayBoundsInfo({\slshape bds})\index{DisplayBoundsInfo@\texttt{DisplayBoundsInfo}} \label{DisplayBoundsInfo} }\hfill{\scriptsize (function)}}\\ \texttt{DisplayBoundsInfo} prints the method of construction of the code $C$ indicated in \texttt{bds:= BoundsMinimumDistance( n, k, GF(q) )}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> bounds := BoundsMinimumDistance( 20, 17, GF(4) ); gap> DisplayBoundsInfo(bounds); an optimal linear [20,17,d] code over GF(4) has d=3 -------------------------------------------------------------------------------------------------- Lb(20,17)=3, by shortening of: Lb(21,18)=3, by applying contruction B to a [81,77,3] code Lb(81,77)=3, by shortening of: Lb(85,81)=3, reference: Ham -------------------------------------------------------------------------------------------------- Ub(20,17)=3, by considering shortening to: Ub(7,4)=3, by considering puncturing to: Ub(6,4)=2, by construction B applied to: Ub(2,1)=2, repetition code -------------------------------------------------------------------------------------------------- Reference Ham: %T this reference is unknown, for more info %T contact A.E. Brouwer (aeb@cwi.nl) \end{Verbatim} } \section{\textcolor{Chapter }{ Generating (Check) Matrices and Polynomials }}\logpage{[ 4, 7, 0 ]} \hyperdef{L}{X7D0F48B685A3ECDD}{} { \label{Generating (Check) Matrices and Polynomials} \subsection{\textcolor{Chapter }{GeneratorMat}} \logpage{[ 4, 7, 1 ]}\nobreak \hyperdef{L}{X817224657C9829C4}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneratorMat({\slshape C})\index{GeneratorMat@\texttt{GeneratorMat}} \label{GeneratorMat} }\hfill{\scriptsize (function)}}\\ \texttt{GeneratorMat} returns a generator matrix of \mbox{\texttt{\slshape C}}. The code consists of all linear combinations of the rows of this matrix. If until now no generator matrix of \mbox{\texttt{\slshape C}} was determined, it is computed from either the parity check matrix, the generator polynomial, the check polynomial or the elements (if possible), whichever is available. If \mbox{\texttt{\slshape C}} is a non-linear code, the function returns an error. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> GeneratorMat( HammingCode( 3, GF(2) ) ); [ [ an immutable GF2 vector of length 7], [ an immutable GF2 vector of length 7], [ an immutable GF2 vector of length 7], [ an immutable GF2 vector of length 7] ] gap> Display(last); 1 1 1 . . . . 1 . . 1 1 . . . 1 . 1 . 1 . 1 1 . 1 . . 1 gap> GeneratorMat( RepetitionCode( 5, GF(25) ) ); [ [ Z(5)^0, Z(5)^0, Z(5)^0, Z(5)^0, Z(5)^0 ] ] gap> GeneratorMat( NullCode( 14, GF(4) ) ); [ ] \end{Verbatim} \subsection{\textcolor{Chapter }{CheckMat}} \logpage{[ 4, 7, 2 ]}\nobreak \hyperdef{L}{X85D4B26E7FB38D57}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CheckMat({\slshape C})\index{CheckMat@\texttt{CheckMat}} \label{CheckMat} }\hfill{\scriptsize (function)}}\\ \texttt{CheckMat} returns a parity check matrix of \mbox{\texttt{\slshape C}}. The code consists of all words orthogonal to each of the rows of this matrix. The transpose of the matrix is a right inverse of the generator matrix. The parity check matrix is computed from either the generator matrix, the generator polynomial, the check polynomial or the elements of \mbox{\texttt{\slshape C}} (if possible), whichever is available. If \mbox{\texttt{\slshape C}} is a non-linear code, the function returns an error. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> CheckMat( HammingCode(3, GF(2) ) ); [ [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ] ] gap> Display(last); . . . 1 1 1 1 . 1 1 . . 1 1 1 . 1 . 1 . 1 gap> CheckMat( RepetitionCode( 5, GF(25) ) ); [ [ Z(5)^0, Z(5)^2, 0*Z(5), 0*Z(5), 0*Z(5) ], [ 0*Z(5), Z(5)^0, Z(5)^2, 0*Z(5), 0*Z(5) ], [ 0*Z(5), 0*Z(5), Z(5)^0, Z(5)^2, 0*Z(5) ], [ 0*Z(5), 0*Z(5), 0*Z(5), Z(5)^0, Z(5)^2 ] ] gap> CheckMat( WholeSpaceCode( 12, GF(4) ) ); [ ] \end{Verbatim} \subsection{\textcolor{Chapter }{GeneratorPol}} \logpage{[ 4, 7, 3 ]}\nobreak \hyperdef{L}{X78E33C3A843B0261}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneratorPol({\slshape C})\index{GeneratorPol@\texttt{GeneratorPol}} \label{GeneratorPol} }\hfill{\scriptsize (function)}}\\ \texttt{GeneratorPol} returns the generator polynomial of \mbox{\texttt{\slshape C}}. The code consists of all multiples of the generator polynomial modulo $x^{n}-1$, where $n$ is the word length of \mbox{\texttt{\slshape C}}. The generator polynomial is determined from either the check polynomial, the generator or check matrix or the elements of \mbox{\texttt{\slshape C}} (if possible), whichever is available. If \mbox{\texttt{\slshape C}} is not a cyclic code, the function returns `false'. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> GeneratorPol(GeneratorMatCode([[1, 1, 0], [0, 1, 1]], GF(2))); Z(2)^0+x_1 gap> GeneratorPol( WholeSpaceCode( 4, GF(2) ) ); Z(2)^0 gap> GeneratorPol( NullCode( 7, GF(3) ) ); -Z(3)^0+x_1^7 \end{Verbatim} \subsection{\textcolor{Chapter }{CheckPol}} \logpage{[ 4, 7, 4 ]}\nobreak \hyperdef{L}{X7C45AA317BB1195F}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CheckPol({\slshape C})\index{CheckPol@\texttt{CheckPol}} \label{CheckPol} }\hfill{\scriptsize (function)}}\\ \texttt{CheckPol} returns the check polynomial of \mbox{\texttt{\slshape C}}. The code consists of all polynomials $f$ with \[ f\cdot h \equiv 0 \ ({\rm mod}\ x^n-1), \] where $h$ is the check polynomial, and $n$ is the word length of \mbox{\texttt{\slshape C}}. The check polynomial is computed from the generator polynomial, the generator or parity check matrix or the elements of \mbox{\texttt{\slshape C}} (if possible), whichever is available. If \mbox{\texttt{\slshape C}} if not a cyclic code, the function returns an error. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> CheckPol(GeneratorMatCode([[1, 1, 0], [0, 1, 1]], GF(2))); Z(2)^0+x_1+x_1^2 gap> CheckPol(WholeSpaceCode(4, GF(2))); Z(2)^0+x_1^4 gap> CheckPol(NullCode(7,GF(3))); Z(3)^0 \end{Verbatim} \subsection{\textcolor{Chapter }{RootsOfCode}} \logpage{[ 4, 7, 5 ]}\nobreak \hyperdef{L}{X7F4CB9DB7CD97178}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{RootsOfCode({\slshape C})\index{RootsOfCode@\texttt{RootsOfCode}} \label{RootsOfCode} }\hfill{\scriptsize (function)}}\\ \texttt{RootsOfCode} returns a list of all zeros of the generator polynomial of a cyclic code \mbox{\texttt{\slshape C}}. These are finite field elements in the splitting field of the generator polynomial, $GF(q^m)$, $m$ is the multiplicative order of the size of the base field of the code, modulo the word length. The reverse process, constructing a code from a set of roots, can be carried out by the function \texttt{RootsCode} (see \texttt{RootsCode} (\ref{RootsCode})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := ReedSolomonCode( 16, 5 ); a cyclic [16,12,5]3..4 Reed-Solomon code over GF(17) gap> RootsOfCode( C1 ); [ Z(17), Z(17)^2, Z(17)^3, Z(17)^4 ] gap> C2 := RootsCode( 16, last ); a cyclic [16,12,5]3..4 code defined by roots over GF(17) gap> C1 = C2; true \end{Verbatim} } \section{\textcolor{Chapter }{ Parameters of Codes }}\logpage{[ 4, 8, 0 ]} \hyperdef{L}{X8170B52D7C154247}{} { \label{Parameters of Codes} \subsection{\textcolor{Chapter }{WordLength}} \logpage{[ 4, 8, 1 ]}\nobreak \hyperdef{L}{X7A36C3C67B0062E8}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{WordLength({\slshape C})\index{WordLength@\texttt{WordLength}} \label{WordLength} }\hfill{\scriptsize (function)}}\\ \texttt{WordLength} returns the parameter $n$ of \mbox{\texttt{\slshape C}}, the word length of the elements. Elements of cyclic codes are polynomials of maximum degree $n-1$, as calculations are carried out modulo $x^{n}-1$. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> WordLength( NordstromRobinsonCode() ); 16 gap> WordLength( PuncturedCode( WholeSpaceCode(7) ) ); 6 gap> WordLength( UUVCode( WholeSpaceCode(7), RepetitionCode(7) ) ); 14 \end{Verbatim} \subsection{\textcolor{Chapter }{Redundancy}} \logpage{[ 4, 8, 2 ]}\nobreak \hyperdef{L}{X7E33FD56792DBF3D}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{Redundancy({\slshape C})\index{Redundancy@\texttt{Redundancy}} \label{Redundancy} }\hfill{\scriptsize (function)}}\\ \texttt{Redundancy} returns the redundancy $r$ of \mbox{\texttt{\slshape C}}, which is equal to the number of check symbols in each element. If \mbox{\texttt{\slshape C}} is not a linear code the redundancy is not defined and \texttt{Redundancy} returns an error. If a linear code \mbox{\texttt{\slshape C}} has dimension $k$ and word length $n$, it has redundancy $r=n-k$. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := TernaryGolayCode(); a cyclic [11,6,5]2 ternary Golay code over GF(3) gap> Redundancy(C); 5 gap> Redundancy( DualCode(C) ); 6 \end{Verbatim} \subsection{\textcolor{Chapter }{MinimumDistance}} \logpage{[ 4, 8, 3 ]}\nobreak \hyperdef{L}{X7B31613D8538BD29}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MinimumDistance({\slshape C})\index{MinimumDistance@\texttt{MinimumDistance}} \label{MinimumDistance} }\hfill{\scriptsize (function)}}\\ \texttt{MinimumDistance} returns the minimum distance of \mbox{\texttt{\slshape C}}, the largest integer $d$ with the property that every element of \mbox{\texttt{\slshape C}} has at least a Hamming distance $d$ (see \texttt{DistanceCodeword} (\ref{DistanceCodeword})) to any other element of \mbox{\texttt{\slshape C}}. For linear codes, the minimum distance is equal to the minimum weight. This means that $d$ is also the smallest positive value with $w[d+1] \neq 0$, where $w=(w[1],w[2],...,w[n])$ is the weight distribution of \mbox{\texttt{\slshape C}} (see \texttt{WeightDistribution} (\ref{WeightDistribution})). For unrestricted codes, $d$ is the smallest positive value with $w[d+1] \neq 0$, where $w$ is the inner distribution of \mbox{\texttt{\slshape C}} (see \texttt{InnerDistribution} (\ref{InnerDistribution})). For codes with only one element, the minimum distance is defined to be equal to the word length. For linear codes \mbox{\texttt{\slshape C}}, the algorithm used is the following: After replacing \mbox{\texttt{\slshape C}} by a permutation equivalent \mbox{\texttt{\slshape C'}}, one may assume the generator matrix has the following form $G=(I_{k} \, | \, A)$, for some $k\times (n-k)$ matrix $A$. If $A=0$ then return $d(C)=1$. Next, find the minimum distance of the code spanned by the rows of $A$. Call this distance $d(A)$. Note that $d(A)$ is equal to the the Hamming distance $d(v,0)$ where $v$ is some proper linear combination of $i$ distinct rows of $A$. Return $d(C)=d(A)+i$, where $i$ is as in the previous step. This command may also be called using the syntax \texttt{MinimumDistance(C, w)}. In this form, \texttt{MinimumDistance} returns the minimum distance of a codeword \mbox{\texttt{\slshape w}} to the code \mbox{\texttt{\slshape C}}, also called the \emph{distance from \mbox{\texttt{\slshape w}} to} \mbox{\texttt{\slshape C}}. This is the smallest value $d$ for which there is an element $c$ of the code \mbox{\texttt{\slshape C}} which is at distance $d$ from \mbox{\texttt{\slshape w}}. So $d$ is also the minimum value for which $D[d+1] \neq 0$, where $D$ is the distance distribution of \mbox{\texttt{\slshape w}} to \mbox{\texttt{\slshape C}} (see \texttt{DistancesDistribution} (\ref{DistancesDistribution})). Note that \mbox{\texttt{\slshape w}} must be an element of the same vector space as the elements of \mbox{\texttt{\slshape C}}. \mbox{\texttt{\slshape w}} does not necessarily belong to the code (if it does, the minimum distance is zero). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := MOLSCode(7);; MinimumDistance(C); 3 gap> WeightDistribution(C); [ 1, 0, 0, 24, 24 ] gap> MinimumDistance( WholeSpaceCode( 5, GF(3) ) ); 1 gap> MinimumDistance( NullCode( 4, GF(2) ) ); 4 gap> C := ConferenceCode(9);; MinimumDistance(C); 4 gap> InnerDistribution(C); [ 1, 0, 0, 0, 63/5, 9/5, 18/5, 0, 9/10, 1/10 ] gap> C := MOLSCode(7);; w := CodewordNr( C, 17 ); [ 3 3 6 2 ] gap> MinimumDistance( C, w ); 0 gap> C := RemovedElementsCode( C, w );; MinimumDistance( C, w ); 3 # so w no longer belongs to C \end{Verbatim} See also the \textsf{GUAVA} commands relating to bounds on the minimum distance in section \ref{Distance bounds on codes}. \subsection{\textcolor{Chapter }{MinimumDistanceLeon}} \logpage{[ 4, 8, 4 ]}\nobreak \hyperdef{L}{X813F226F855590EE}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MinimumDistanceLeon({\slshape C})\index{MinimumDistanceLeon@\texttt{MinimumDistanceLeon}} \label{MinimumDistanceLeon} }\hfill{\scriptsize (function)}}\\ \texttt{MinimumDistanceLeon} returns the ``probable'' minimum distance $d_{Leon}$ of a linear binary code \mbox{\texttt{\slshape C}}, using an implementation of Leon's probabilistic polynomial time algorithm. Briefly: Let \mbox{\texttt{\slshape C}} be a linear code of dimension $k$ over $GF(q)$ as above. The algorithm has input parameters $s$ and $\rho$, where $s$ is an integer between $2$ and $n-k$, and $\rho$ is an integer between $2$ and $k$. \begin{itemize} \item Find a generator matrix $G$ of $C$. \item Randomly permute the columns of $G$. \item Perform Gaussian elimination on the permuted matrix to obtain a new matrix of the following form: \[ G=(I_{k} \, | \, Z \, | \, B) \] with $Z$ a $k\times s$ matrix. If $(Z,B)$ is the zero matrix then return $1$ for the minimum distance. If $Z=0$ but not $B$ then either choose another permutation of the rows of \mbox{\texttt{\slshape C}} or return `method fails'. \item Search $Z$ for at most $\rho$ rows that lead to codewords of weight less than $\rho$. \item For these codewords, compute the weight of the whole word in \mbox{\texttt{\slshape C}}. Return this weight. \end{itemize} (See for example J. S. Leon, \cite{Leon88} for more details.) Sometimes (as is the case in \textsf{GUAVA}) this probabilistic algorithm is repeated several times and the most commonly occurring value is taken. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=RandomLinearCode(50,22,GF(2)); a [50,22,?] randomly generated code over GF(2) gap> MinimumDistanceLeon(C); time; 6 211 gap> MinimumDistance(C); time; 6 1204 \end{Verbatim} \subsection{\textcolor{Chapter }{MinimumWeight}} \logpage{[ 4, 8, 5 ]}\nobreak \hyperdef{L}{X84EDF67B86B4154C}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MinimumWeight({\slshape C})\index{MinimumWeight@\texttt{MinimumWeight}} \label{MinimumWeight} }\hfill{\scriptsize (function)}}\\ \texttt{MinimumWeight} returns the minimum Hamming weight of a linear code \mbox{\texttt{\slshape C}}. At the moment, this function works for binary and ternary codes only. The \texttt{MinimumWeight} function relies on an external executable program which is written in C language. As a consequence, the execution time of \texttt{MinimumWeight} function is faster than that of \texttt{MinimumDistance} (\ref{MinimumDistance}) function. The \texttt{MinimumWeight} function implements Chen's \cite{Chen69} algorithm if \mbox{\texttt{\slshape C}} is cyclic, and Zimmermann's \cite{Zimmermann96} algorithm if \mbox{\texttt{\slshape C}} is a general linear code. This function has a built-in check on the constraints of the minimum weight codewords. For example, for a self-orthogonal code over GF(3), the minimum weight codewords have weight that is divisible by 3, i.e. 0 mod 3 congruence. Similary, self-orthogonal codes over GF(2) have codeword weights that are divisible by 4 and even codes over GF(2) have codewords weights that are divisible by 2. By taking these constraints into account, in many cases, the execution time may be significantly reduced. Consider the minimum Hamming weight enumeration of the $[151,45]$ binary cyclic code (second example below). This cyclic code is self-orthogonal, so the weight of all codewords is divisible by 4. Without considering this constraint, the computation will finish at information weight $10$, rather than $9$. We can see that, this 0 mod 4 constraint on the codeword weights, has allowed us to avoid enumeration of $b(45,10) = 3,190,187,286$ additional codewords, where $b(n,k)=n!/((n-k)!k!)$ is the binomial coefficient of integers $n$ and $k$. Note that the C source code for this minimum weight computation has not yet been optimised, especially the code for GF(3), and there are chances to improve the speed of this function. Your contributions are most welcomed. If you find any bugs on this function, please report it to ctjhai@plymouth.ac.uk. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> # Extended ternary quadratic residue code of length 48 gap> n := 47;; gap> x := Indeterminate(GF(3));; gap> F := Factors(x^n-1);; gap> v := List([1..n], i->Zero(GF(3)));; gap> v := v + MutableCopyMat(VectorCodeword( Codeword(F[2]) ));; gap> G := CirculantMatrix(24, v);; gap> for i in [1..Size(G)] do; s:=Zero(GF(3)); > for j in [1..Size(G[i])] do; s:=s+G[i][j]; od; Append(G[i], [ s ]); > od;; gap> C := GeneratorMatCodeNC(G, GF(3)); a [48,24,?] randomly generated code over GF(3) gap> MinimumWeight(C); [48,24] linear code over GF(3) - minimum weight evaluation Known lower-bound: 1 There are 2 generator matrices, ranks : 24 24 The weight of the minimum weight codeword satisfies 0 mod 3 congruence Enumerating codewords with information weight 1 (w=1) Found new minimum weight 15 Number of matrices required for codeword enumeration 2 Completed w= 1, 48 codewords enumerated, lower-bound 6, upper-bound 15 Termination expected with information weight 6 at matrix 1 ----------------------------------------------------------------------------- Enumerating codewords with information weight 2 (w=2) using 2 matrices Completed w= 2, 1104 codewords enumerated, lower-bound 6, upper-bound 15 Termination expected with information weight 6 at matrix 1 ----------------------------------------------------------------------------- Enumerating codewords with information weight 3 (w=3) using 2 matrices Completed w= 3, 16192 codewords enumerated, lower-bound 9, upper-bound 15 Termination expected with information weight 6 at matrix 1 ----------------------------------------------------------------------------- Enumerating codewords with information weight 4 (w=4) using 2 matrices Completed w= 4, 170016 codewords enumerated, lower-bound 12, upper-bound 15 Termination expected with information weight 6 at matrix 1 ----------------------------------------------------------------------------- Enumerating codewords with information weight 5 (w=5) using 2 matrices Completed w= 5, 1360128 codewords enumerated, lower-bound 12, upper-bound 15 Termination expected with information weight 6 at matrix 1 ----------------------------------------------------------------------------- Enumerating codewords with information weight 6 (w=6) using 1 matrices Completed w= 6, 4307072 codewords enumerated, lower-bound 15, upper-bound 15 ----------------------------------------------------------------------------- Minimum weight: 15 15 gap> gap> # Binary cyclic code [151,45,36] gap> n := 151;; gap> x := Indeterminate(GF(2));; gap> F := Factors(x^n-1);; gap> C := CheckPolCode(F[2]*F[3]*F[3]*F[4], n, GF(2)); a cyclic [151,45,1..50]31..75 code defined by check polynomial over GF(2) gap> MinimumWeight(C); [151,45] cyclic code over GF(2) - minimum weight evaluation Known lower-bound: 1 The weight of the minimum weight codeword satisfies 0 mod 4 congruence Enumerating codewords with information weight 1 (w=1) Found new minimum weight 56 Found new minimum weight 44 Number of matrices required for codeword enumeration 1 Completed w= 1, 45 codewords enumerated, lower-bound 8, upper-bound 44 Termination expected with information weight 11 ----------------------------------------------------------------------------- Enumerating codewords with information weight 2 (w=2) using 1 matrix Completed w= 2, 990 codewords enumerated, lower-bound 12, upper-bound 44 Termination expected with information weight 11 ----------------------------------------------------------------------------- Enumerating codewords with information weight 3 (w=3) using 1 matrix Found new minimum weight 40 Found new minimum weight 36 Completed w= 3, 14190 codewords enumerated, lower-bound 16, upper-bound 36 Termination expected with information weight 9 ----------------------------------------------------------------------------- Enumerating codewords with information weight 4 (w=4) using 1 matrix Completed w= 4, 148995 codewords enumerated, lower-bound 20, upper-bound 36 Termination expected with information weight 9 ----------------------------------------------------------------------------- Enumerating codewords with information weight 5 (w=5) using 1 matrix Completed w= 5, 1221759 codewords enumerated, lower-bound 24, upper-bound 36 Termination expected with information weight 9 ----------------------------------------------------------------------------- Enumerating codewords with information weight 6 (w=6) using 1 matrix Completed w= 6, 8145060 codewords enumerated, lower-bound 24, upper-bound 36 Termination expected with information weight 9 ----------------------------------------------------------------------------- Enumerating codewords with information weight 7 (w=7) using 1 matrix Completed w= 7, 45379620 codewords enumerated, lower-bound 28, upper-bound 36 Termination expected with information weight 9 ----------------------------------------------------------------------------- Enumerating codewords with information weight 8 (w=8) using 1 matrix Completed w= 8, 215553195 codewords enumerated, lower-bound 32, upper-bound 36 Termination expected with information weight 9 ----------------------------------------------------------------------------- Enumerating codewords with information weight 9 (w=9) using 1 matrix Completed w= 9, 886163135 codewords enumerated, lower-bound 36, upper-bound 36 ----------------------------------------------------------------------------- Minimum weight: 36 36 \end{Verbatim} \subsection{\textcolor{Chapter }{DecreaseMinimumDistanceUpperBound}} \logpage{[ 4, 8, 6 ]}\nobreak \hyperdef{L}{X823B9A797EE42F6D}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DecreaseMinimumDistanceUpperBound({\slshape C, t, m})\index{DecreaseMinimumDistanceUpperBound@\texttt{DecreaseMinimumDistanceUpperBound}} \label{DecreaseMinimumDistanceUpperBound} }\hfill{\scriptsize (function)}}\\ \texttt{DecreaseMinimumDistanceUpperBound} is an implementation of the algorithm for the minimum distance of a linear binary code \mbox{\texttt{\slshape C}} by Leon \cite{Leon88}. This algorithm tries to find codewords with small minimum weights. The parameter \mbox{\texttt{\slshape t}} is at least $1$ and less than the dimension of \mbox{\texttt{\slshape C}}. The best results are obtained if it is close to the dimension of the code. The parameter \mbox{\texttt{\slshape m}} gives the number of runs that the algorithm will perform. The result returned is a record with two fields; the first, \texttt{mindist}, gives the lowest weight found, and \texttt{word} gives the corresponding codeword. (This was implemented before \texttt{MinimumDistanceLeon} but independently. The older manual had given the command incorrectly, so the command was only found after reading all the \emph{*.gi} files in the \textsf{GUAVA} library. Though both \texttt{MinimumDistance} and \texttt{MinimumDistanceLeon} often run much faster than \texttt{DecreaseMinimumDistanceUpperBound}, \texttt{DecreaseMinimumDistanceUpperBound} appears to be more accurate than \texttt{MinimumDistanceLeon}.) } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=RandomLinearCode(5,2,GF(2)); a [5,2,?] randomly generated code over GF(2) gap> DecreaseMinimumDistanceUpperBound(C,1,4); rec( mindist := 3, word := [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ] ) gap> MinimumDistance(C); 3 gap> C:=RandomLinearCode(8,4,GF(2)); a [8,4,?] randomly generated code over GF(2) gap> DecreaseMinimumDistanceUpperBound(C,3,4); rec( mindist := 2, word := [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ] ) gap> MinimumDistance(C); 2 \end{Verbatim} \subsection{\textcolor{Chapter }{MinimumDistanceRandom}} \logpage{[ 4, 8, 7 ]}\nobreak \hyperdef{L}{X7A679B0A7816B030}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MinimumDistanceRandom({\slshape C, num, s})\index{MinimumDistanceRandom@\texttt{MinimumDistanceRandom}} \label{MinimumDistanceRandom} }\hfill{\scriptsize (function)}}\\ \texttt{MinimumDistanceRandom} returns an upper bound for the minimum distance $d_{random}$ of a linear binary code \mbox{\texttt{\slshape C}}, using a probabilistic polynomial time algorithm. Briefly: Let \mbox{\texttt{\slshape C}} be a linear code of dimension $k$ over $GF(q)$ as above. The algorithm has input parameters $num$ and $s$, where $s$ is an integer between $2$ and $n-1$, and $num$ is an integer greater than or equal to $1$. \begin{itemize} \item Find a generator matrix $G$ of $C$. \item Randomly permute the columns of $G$, written $G_p$.. \item \[ G=(A, B) \] with $A$ a $k\times s$ matrix. If $A$ is the zero matrix then return `method fails'. \item Search $A$ for at most $5$ rows that lead to codewords, in the code $C_A$ with generator matrix $A$, of minimum weight. \item For these codewords, use the associated linear combination to compute the weight of the whole word in \mbox{\texttt{\slshape C}}. Return this weight and codeword. \end{itemize} This probabilistic algorithm is repeated \mbox{\texttt{\slshape num}} times (with different random permutations of the rows of $G$ each time) and the weight and codeword of the lowest occurring weight is taken. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=RandomLinearCode(60,20,GF(2)); a [60,20,?] randomly generated code over GF(2) gap> #mindist(C);time; gap> #mindistleon(C,10,30);time; #doesn't work well gap> a:=MinimumDistanceRandom(C,10,30);time; # done 10 times -with fastest time!! This is a probabilistic algorithm which may return the wrong answer. [ 12, [ 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 ] ] 130 gap> a[2] in C; true gap> b:=DecreaseMinimumDistanceUpperBound(C,10,1); time; #only done once! rec( mindist := 12, word := [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ] ) 649 gap> Codeword(b!.word) in C; true gap> MinimumDistance(C);time; 12 196 gap> c:=MinimumDistanceLeon(C);time; 12 66 gap> C:=RandomLinearCode(30,10,GF(3)); a [30,10,?] randomly generated code over GF(3) gap> a:=MinimumDistanceRandom(C,10,10);time; This is a probabilistic algorithm which may return the wrong answer. [ 13, [ 0 0 0 1 0 0 0 0 0 0 1 0 2 2 1 1 0 2 2 0 1 0 2 1 0 0 0 1 0 2 ] ] 229 gap> a[2] in C; true gap> MinimumDistance(C);time; 9 45 gap> c:=MinimumDistanceLeon(C); Code must be binary. Quitting. 0 gap> a:=MinimumDistanceRandom(C,1,29);time; This is a probabilistic algorithm which may return the wrong answer. [ 10, [ 0 0 1 0 2 0 2 0 1 0 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 2 2 2 0 ] ] 53 \end{Verbatim} \index{$t(n,k)$} \index{covering code} \subsection{\textcolor{Chapter }{CoveringRadius}} \logpage{[ 4, 8, 8 ]}\nobreak \hyperdef{L}{X7A195E317D2AB7CE}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CoveringRadius({\slshape C})\index{CoveringRadius@\texttt{CoveringRadius}} \label{CoveringRadius} }\hfill{\scriptsize (function)}}\\ \texttt{CoveringRadius} returns the \emph{covering radius} of a linear code \mbox{\texttt{\slshape C}}. This is the smallest number $r$ with the property that each element $v$ of the ambient vector space of \mbox{\texttt{\slshape C}} has at most a distance $r$ to the code \mbox{\texttt{\slshape C}}. So for each vector $v$ there must be an element $c$ of \mbox{\texttt{\slshape C}} with $d(v,c) \leq r$. The smallest covering radius of any $[n,k]$ binary linear code is denoted $t(n,k)$. A binary linear code with reasonable small covering radius is called a \emph{covering code}. If \mbox{\texttt{\slshape C}} is a perfect code (see \texttt{IsPerfectCode} (\ref{IsPerfectCode})), the covering radius is equal to $t$, the number of errors the code can correct, where $d = 2t+1$, with $d$ the minimum distance of \mbox{\texttt{\slshape C}} (see \texttt{MinimumDistance} (\ref{MinimumDistance})). If there exists a function called \texttt{SpecialCoveringRadius} in the `operations' field of the code, then this function will be called to compute the covering radius of the code. At the moment, no code-specific functions are implemented. If the length of \texttt{BoundsCoveringRadius} (see \texttt{BoundsCoveringRadius} (\ref{BoundsCoveringRadius})), is 1, then the value in \begin{verbatim} C.boundsCoveringRadius \end{verbatim} is returned. Otherwise, the function \begin{verbatim} C.operations.CoveringRadius \end{verbatim} is executed, unless the redundancy of \mbox{\texttt{\slshape C}} is too large. In the last case, a warning is issued. The algorithm used to compute the covering radius is the following. First, \texttt{CosetLeadersMatFFE} is used to compute the list of coset leaders (which returns a codeword in each coset of $GF(q)^n/C$ of minimum weight). Then \texttt{WeightVecFFE} is used to compute the weight of each of these coset leaders. The program returns the maximum of these weights. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> H := RandomLinearCode(10, 5, GF(2)); a [10,5,?] randomly generated code over GF(2) gap> CoveringRadius(H); 3 gap> H := HammingCode(4, GF(2));; IsPerfectCode(H); true gap> CoveringRadius(H); 1 # Hamming codes have minimum distance 3 gap> CoveringRadius(ReedSolomonCode(7,4)); 3 gap> CoveringRadius( BCHCode( 17, 3, GF(2) ) ); 3 gap> CoveringRadius( HammingCode( 5, GF(2) ) ); 1 gap> C := ReedMullerCode( 1, 9 );; gap> CoveringRadius( C ); CoveringRadius: warning, the covering radius of this code cannot be computed straightforward. Try to use IncreaseCoveringRadiusLowerBound( code ). (see the manual for more details). The covering radius of code lies in the interval: [ 240 .. 248 ] \end{Verbatim} See also the \textsf{GUAVA} commands relating to bounds on the minimum distance in section \ref{Covering radius bounds on codes}. \subsection{\textcolor{Chapter }{SetCoveringRadius}} \logpage{[ 4, 8, 9 ]}\nobreak \hyperdef{L}{X81004B007EC5DF58}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{SetCoveringRadius({\slshape C, intlist})\index{SetCoveringRadius@\texttt{SetCoveringRadius}} \label{SetCoveringRadius} }\hfill{\scriptsize (function)}}\\ \texttt{SetCoveringRadius} enables the user to set the covering radius herself, instead of letting \textsf{GUAVA} compute it. If \mbox{\texttt{\slshape intlist}} is an integer, \textsf{GUAVA} will simply put it in the `boundsCoveringRadius' field. If it is a list of integers, however, it will intersect this list with the `boundsCoveringRadius' field, thus taking the best of both lists. If this would leave an empty list, the field is set to \mbox{\texttt{\slshape intlist}}. Because some other computations use the covering radius of the code, it is important that the entered value is not wrong, otherwise new results may be invalid. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := BCHCode( 17, 3, GF(2) );; gap> BoundsCoveringRadius( C ); [ 3 .. 4 ] gap> SetCoveringRadius( C, [ 2 .. 3 ] ); gap> BoundsCoveringRadius( C ); [ [ 2 .. 3 ] ] \end{Verbatim} } \section{\textcolor{Chapter }{ Distributions }}\logpage{[ 4, 9, 0 ]} \hyperdef{L}{X806384B4815EFF2E}{} { \label{Distributions} \subsection{\textcolor{Chapter }{MinimumWeightWords}} \logpage{[ 4, 9, 1 ]}\nobreak \hyperdef{L}{X7AEE64467FB1E0B9}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MinimumWeightWords({\slshape C})\index{MinimumWeightWords@\texttt{MinimumWeightWords}} \label{MinimumWeightWords} }\hfill{\scriptsize (function)}}\\ \texttt{MinimumWeightWords} returns the list of minimum weight codewords of \mbox{\texttt{\slshape C}}. This algorithm is written in GAP is slow, so is only suitable for small codes. This does not call the very fast function \texttt{MinimumWeight} (see \texttt{MinimumWeight} (\ref{MinimumWeight})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=HammingCode(3,GF(2)); a linear [7,4,3]1 Hamming (3,2) code over GF(2) gap> MinimumWeightWords(C); [ [ 1 0 0 0 0 1 1 ], [ 0 1 0 1 0 1 0 ], [ 0 1 0 0 1 0 1 ], [ 1 0 0 1 1 0 0 ], [ 0 0 1 0 1 1 0 ], [ 0 0 1 1 0 0 1 ], [ 1 1 1 0 0 0 0 ] ] \end{Verbatim} \subsection{\textcolor{Chapter }{WeightDistribution}} \logpage{[ 4, 9, 2 ]}\nobreak \hyperdef{L}{X8728BCC9842A6E5D}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{WeightDistribution({\slshape C})\index{WeightDistribution@\texttt{WeightDistribution}} \label{WeightDistribution} }\hfill{\scriptsize (function)}}\\ \texttt{WeightDistribution} returns the weight distribution of \mbox{\texttt{\slshape C}}, as a vector. The $i^{th}$ element of this vector contains the number of elements of \mbox{\texttt{\slshape C}} with weight $i-1$. For linear codes, the weight distribution is equal to the inner distribution (see \texttt{InnerDistribution} (\ref{InnerDistribution})). If $w$ is the weight distribution of a linear code \mbox{\texttt{\slshape C}}, it must have the zero codeword, so $w[1] = 1$ (one word of weight 0). Some codes, such as the Hamming codes, have precomputed weight distributions. For others, the program WeightDistribution calls the GAP program \texttt{DistancesDistributionMatFFEVecFFE}, which is written in C. See also \texttt{CodeWeightEnumerator}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> WeightDistribution( ConferenceCode(9) ); [ 1, 0, 0, 0, 0, 18, 0, 0, 0, 1 ] gap> WeightDistribution( RepetitionCode( 7, GF(4) ) ); [ 1, 0, 0, 0, 0, 0, 0, 3 ] gap> WeightDistribution( WholeSpaceCode( 5, GF(2) ) ); [ 1, 5, 10, 10, 5, 1 ] \end{Verbatim} \subsection{\textcolor{Chapter }{InnerDistribution}} \logpage{[ 4, 9, 3 ]}\nobreak \hyperdef{L}{X871FD301820717A4}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{InnerDistribution({\slshape C})\index{InnerDistribution@\texttt{InnerDistribution}} \label{InnerDistribution} }\hfill{\scriptsize (function)}}\\ \texttt{InnerDistribution} returns the inner distribution of \mbox{\texttt{\slshape C}}. The $i^{th}$ element of the vector contains the average number of elements of \mbox{\texttt{\slshape C}} at distance $i-1$ to an element of \mbox{\texttt{\slshape C}}. For linear codes, the inner distribution is equal to the weight distribution (see \texttt{WeightDistribution} (\ref{WeightDistribution})). Suppose $w$ is the inner distribution of \mbox{\texttt{\slshape C}}. Then $w[1] = 1$, because each element of \mbox{\texttt{\slshape C}} has exactly one element at distance zero (the element itself). The minimum distance of \mbox{\texttt{\slshape C}} is the smallest value $d > 0$ with $w[d+1] \neq 0$, because a distance between zero and $d$ never occurs. See \texttt{MinimumDistance} (\ref{MinimumDistance}). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> InnerDistribution( ConferenceCode(9) ); [ 1, 0, 0, 0, 63/5, 9/5, 18/5, 0, 9/10, 1/10 ] gap> InnerDistribution( RepetitionCode( 7, GF(4) ) ); [ 1, 0, 0, 0, 0, 0, 0, 3 ] \end{Verbatim} \index{distance} \subsection{\textcolor{Chapter }{DistancesDistribution}} \logpage{[ 4, 9, 4 ]}\nobreak \hyperdef{L}{X87AD54F87C5EE77E}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DistancesDistribution({\slshape C, w})\index{DistancesDistribution@\texttt{DistancesDistribution}} \label{DistancesDistribution} }\hfill{\scriptsize (function)}}\\ \texttt{DistancesDistribution} returns the distribution of the distances of all elements of \mbox{\texttt{\slshape C}} to a codeword \mbox{\texttt{\slshape w}} in the same vector space. The $i^{th}$ element of the distance distribution is the number of codewords of \mbox{\texttt{\slshape C}} that have distance $i-1$ to \mbox{\texttt{\slshape w}}. The smallest value $d$ with $w[d+1] \neq 0$, is defined as the \emph{distance to} \mbox{\texttt{\slshape C}} (see \texttt{MinimumDistance} (\ref{MinimumDistance})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> H := HadamardCode(20); a (20,40,10)6..8 Hadamard code of order 20 over GF(2) gap> c := Codeword("10110101101010010101", H); [ 1 0 1 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 ] gap> DistancesDistribution(H, c); [ 0, 0, 0, 0, 0, 1, 0, 7, 0, 12, 0, 12, 0, 7, 0, 1, 0, 0, 0, 0, 0 ] gap> MinimumDistance(H, c); 5 # distance to H \end{Verbatim} \subsection{\textcolor{Chapter }{OuterDistribution}} \logpage{[ 4, 9, 5 ]}\nobreak \hyperdef{L}{X8495870687195324}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{OuterDistribution({\slshape C})\index{OuterDistribution@\texttt{OuterDistribution}} \label{OuterDistribution} }\hfill{\scriptsize (function)}}\\ The function \texttt{OuterDistribution} returns a list of length $q^n$, where $q$ is the size of the base field of \mbox{\texttt{\slshape C}} and $n$ is the word length. The elements of the list consist of pairs, the first coordinate being an element of $GF(q)^n$ (this is a codeword type) and the second coordinate being a distribution of distances to the code (a list of integers). This table is \emph{very} large, and for $n > 20$ it will not fit in the memory of most computers. The function \texttt{DistancesDistribution} (see \texttt{DistancesDistribution} (\ref{DistancesDistribution})) can be used to calculate one entry of the list. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := RepetitionCode( 3, GF(2) ); a cyclic [3,1,3]1 repetition code over GF(2) gap> OD := OuterDistribution(C); [ [ [ 0 0 0 ], [ 1, 0, 0, 1 ] ], [ [ 1 1 1 ], [ 1, 0, 0, 1 ] ], [ [ 0 0 1 ], [ 0, 1, 1, 0 ] ], [ [ 1 1 0 ], [ 0, 1, 1, 0 ] ], [ [ 1 0 0 ], [ 0, 1, 1, 0 ] ], [ [ 0 1 1 ], [ 0, 1, 1, 0 ] ], [ [ 0 1 0 ], [ 0, 1, 1, 0 ] ], [ [ 1 0 1 ], [ 0, 1, 1, 0 ] ] ] gap> WeightDistribution(C) = OD[1][2]; true gap> DistancesDistribution( C, Codeword("110") ) = OD[4][2]; true \end{Verbatim} } \section{\textcolor{Chapter }{ Decoding Functions }}\logpage{[ 4, 10, 0 ]} \hyperdef{L}{X7D9A39BF801948C8}{} { \label{Decoding Functions} \subsection{\textcolor{Chapter }{Decode}} \logpage{[ 4, 10, 1 ]}\nobreak \hyperdef{L}{X7A42FF7D87FC34AC}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{Decode({\slshape C, r})\index{Decode@\texttt{Decode}} \label{Decode} }\hfill{\scriptsize (function)}}\\ \texttt{Decode} decodes \mbox{\texttt{\slshape r}} (a 'received word') with respect to code \mbox{\texttt{\slshape C}} and returns the `message word' (i.e., the information digits associated to the codeword $c \in C$ closest to \mbox{\texttt{\slshape r}}). Here \mbox{\texttt{\slshape r}} can be a \textsf{GUAVA} codeword or a list of codewords. First, possible errors in \mbox{\texttt{\slshape r}} are corrected, then the codeword is decoded to an \emph{information codeword} $m$ (and not an element of \mbox{\texttt{\slshape C}}). If the code record has a field `specialDecoder', this special algorithm is used to decode the vector. Hamming codes, BCH codes, cyclic codes, and generalized Reed-Solomon have such a special algorithm. (The algorithm used for BCH codes is the Sugiyama algorithm described, for example, in section 5.4.3 of \cite{HP03}. A special decoder has also being written for the generalized Reed-Solomon code using the interpolation algorithm. For cyclic codes, the error-trapping algorithm is used.) If \mbox{\texttt{\slshape C}} is linear and no special decoder field has been set then syndrome decoding is used. Otherwise (when \mbox{\texttt{\slshape C}} is non-linear), the nearest neighbor decoding algorithm is used (which is very slow). A special decoder can be created by defining a function \begin{verbatim} C!.SpecialDecoder := function(C, r) ... end; \end{verbatim} The function uses the arguments \mbox{\texttt{\slshape C}} (the code record itself) and \mbox{\texttt{\slshape r}} (a vector of the codeword type) to decode \mbox{\texttt{\slshape r}} to an information vector. A normal decoder would take a codeword \mbox{\texttt{\slshape r}} of the same word length and field as \mbox{\texttt{\slshape C}}, and would return an information vector of length $k$, the dimension of \mbox{\texttt{\slshape C}}. The user is not restricted to these normal demands though, and can for instance define a decoder for non-linear codes. Encoding is done by multiplying the information vector with the code (see \ref{Operations for Codes}). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := HammingCode(3); a linear [7,4,3]1 Hamming (3,2) code over GF(2) gap> c := "1010"*C; # encoding [ 1 0 1 1 0 1 0 ] gap> Decode(C, c); # decoding [ 1 0 1 0 ] gap> Decode(C, Codeword("0010101")); [ 1 1 0 1 ] # one error corrected gap> C!.SpecialDecoder := function(C, c) > return NullWord(Dimension(C)); > end; function ( C, c ) ... end gap> Decode(C, c); [ 0 0 0 0 ] # new decoder always returns null word \end{Verbatim} \subsection{\textcolor{Chapter }{Decodeword}} \logpage{[ 4, 10, 2 ]}\nobreak \hyperdef{L}{X7D870C9387C47D9F}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{Decodeword({\slshape C, r})\index{Decodeword@\texttt{Decodeword}} \label{Decodeword} }\hfill{\scriptsize (function)}}\\ \texttt{Decodeword} decodes \mbox{\texttt{\slshape r}} (a 'received word') with respect to code \mbox{\texttt{\slshape C}} and returns the codeword $c \in C$ closest to \mbox{\texttt{\slshape r}}. Here \mbox{\texttt{\slshape r}} can be a \textsf{GUAVA} codeword or a list of codewords. If the code record has a field `specialDecoder', this special algorithm is used to decode the vector. Hamming codes, generalized Reed-Solomon codes, and BCH codes have such a special algorithm. (The algorithm used for BCH codes is the Sugiyama algorithm described, for example, in section 5.4.3 of \cite{HP03}. The algorithm used for generalized Reed-Solomon codes is the ``interpolation algorithm'' described for example in chapter 5 of \cite{JH04}.) If \mbox{\texttt{\slshape C}} is linear and no special decoder field has been set then syndrome decoding is used. Otherwise, when \mbox{\texttt{\slshape C}} is non-linear, the nearest neighbor algorithm has been implemented (which should only be used for small-sized codes). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := HammingCode(3); a linear [7,4,3]1 Hamming (3,2) code over GF(2) gap> c := "1010"*C; # encoding [ 1 0 1 1 0 1 0 ] gap> Decodeword(C, c); # decoding [ 1 0 1 1 0 1 0 ] gap> gap> R:=PolynomialRing(GF(11),["t"]); GF(11)[t] gap> P:=List([1,3,4,5,7],i->Z(11)^i); [ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ] gap> C:=GeneralizedReedSolomonCode(P,3,R); a linear [5,3,1..3]2 generalized Reed-Solomon code over GF(11) gap> MinimumDistance(C); 3 gap> c:=Random(C); [ 0 9 6 2 1 ] gap> v:=Codeword("09620"); [ 0 9 6 2 0 ] gap> GeneralizedReedSolomonDecoderGao(C,v); [ 0 9 6 2 1 ] gap> Decodeword(C,v); # calls the special interpolation decoder [ 0 9 6 2 1 ] gap> G:=GeneratorMat(C); [ [ Z(11)^0, 0*Z(11), 0*Z(11), Z(11)^8, Z(11)^9 ], [ 0*Z(11), Z(11)^0, 0*Z(11), Z(11)^0, Z(11)^8 ], [ 0*Z(11), 0*Z(11), Z(11)^0, Z(11)^3, Z(11)^8 ] ] gap> C1:=GeneratorMatCode(G,GF(11)); a linear [5,3,1..3]2 code defined by generator matrix over GF(11) gap> Decodeword(C,v); # calls syndrome decoding [ 0 9 6 2 1 ] \end{Verbatim} \subsection{\textcolor{Chapter }{GeneralizedReedSolomonDecoderGao}} \logpage{[ 4, 10, 3 ]}\nobreak \hyperdef{L}{X7D48DE2A84474C6A}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneralizedReedSolomonDecoderGao({\slshape C, r})\index{GeneralizedReedSolomonDecoderGao@\texttt{GeneralizedReedSolomonDecoderGao}} \label{GeneralizedReedSolomonDecoderGao} }\hfill{\scriptsize (function)}}\\ \texttt{GeneralizedReedSolomonDecoderGao} decodes \mbox{\texttt{\slshape r}} (a 'received word') to a codeword $c \in C$ in a generalized Reed-Solomon code \mbox{\texttt{\slshape C}} (see \texttt{GeneralizedReedSolomonCode} (\ref{GeneralizedReedSolomonCode})), closest to \mbox{\texttt{\slshape r}}. Here \mbox{\texttt{\slshape r}} must be a \textsf{GUAVA} codeword. If the code record does not have name `generalized Reed-Solomon code' then an error is returned. Otherwise, the Gao decoder \cite{Gao03} is used to compute $c$. For long codes, this method is faster in practice than the interpolation method used in \texttt{Decodeword}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> R:=PolynomialRing(GF(11),["t"]); GF(11)[t] gap> P:=List([1,3,4,5,7],i->Z(11)^i); [ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ] gap> C:=GeneralizedReedSolomonCode(P,3,R); a linear [5,3,1..3]2 generalized Reed-Solomon code over GF(11) gap> MinimumDistance(C); 3 gap> c:=Random(C); [ 0 9 6 2 1 ] gap> v:=Codeword("09620"); [ 0 9 6 2 0 ] gap> GeneralizedReedSolomonDecoderGao(C,v); [ 0 9 6 2 1 ] \end{Verbatim} \subsection{\textcolor{Chapter }{GeneralizedReedSolomonListDecoder}} \logpage{[ 4, 10, 4 ]}\nobreak \hyperdef{L}{X7CFF98D483502053}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneralizedReedSolomonListDecoder({\slshape C, r, tau})\index{GeneralizedReedSolomonListDecoder@\texttt{GeneralizedReedSolomonListDecoder}} \label{GeneralizedReedSolomonListDecoder} }\hfill{\scriptsize (function)}}\\ \texttt{GeneralizedReedSolomonListDecoder} implements Sudans list-decoding algorithm (see section 12.1 of \cite{JH04}) for ``low rate'' Reed-Solomon codes. It returns the list of all codewords in C which are a distance of at most \mbox{\texttt{\slshape tau}} from \mbox{\texttt{\slshape r}} (a 'received word'). \mbox{\texttt{\slshape C}} must be a generalized Reed-Solomon code \mbox{\texttt{\slshape C}} (see \texttt{GeneralizedReedSolomonCode} (\ref{GeneralizedReedSolomonCode})) and \mbox{\texttt{\slshape r}} must be a \textsf{GUAVA} codeword. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> F:=GF(16); GF(2^4) gap> gap> a:=PrimitiveRoot(F);; b:=a^7;; b^4+b^3+1; 0*Z(2) gap> Pts:=List([0..14],i->b^i); [ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12, Z(2^4)^4, Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4), Z(2^4)^8 ] gap> x:=X(F);; gap> R1:=PolynomialRing(F,[x]);; gap> vars:=IndeterminatesOfPolynomialRing(R1);; gap> y:=X(F,vars);; gap> R2:=PolynomialRing(F,[x,y]);; gap> C:=GeneralizedReedSolomonCode(Pts,3,R1); a linear [15,3,1..13]10..12 generalized Reed-Solomon code over GF(16) gap> MinimumDistance(C); ## 6 error correcting 13 gap> z:=Zero(F);; gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];; gap> r:=Codeword(r); [ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ] gap> cs:=GeneralizedReedSolomonListDecoder(C,r,2); time; [ [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ], [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] ] 250 gap> c1:=cs[1]; c1 in C; [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ] true gap> c2:=cs[2]; c2 in C; [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] true gap> WeightCodeword(c1-r); 7 gap> WeightCodeword(c2-r); 7 \end{Verbatim} \subsection{\textcolor{Chapter }{BitFlipDecoder}} \logpage{[ 4, 10, 5 ]}\nobreak \hyperdef{L}{X80E17FA27DCAB676}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BitFlipDecoder({\slshape C, r})\index{BitFlipDecoder@\texttt{BitFlipDecoder}} \label{BitFlipDecoder} }\hfill{\scriptsize (function)}}\\ The iterative decoding method \texttt{BitFlipDecoder} must only be applied to LDPC codes. For more information on LDPC codes, refer to Section \ref{LDPC}. For these codes, \texttt{BitFlipDecoder} decodes very quickly. (Warning: it can give wildly wrong results for arbitrary binary linear codes.) The bit flipping algorithm is described for example in Chapter 13 of \cite{JH04}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=HammingCode(4,GF(2)); a linear [15,11,3]1 Hamming (4,2) code over GF(2) gap> c:=Random(C); [ 0 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ] gap> v:=List(c); [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ] gap> v[1]:=Z(2)+v[1]; # flip 1st bit of c to create an error Z(2)^0 gap> v:=Codeword(v); [ 1 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ] gap> BitFlipDecoder(C,v); [ 0 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ] \end{Verbatim} \subsection{\textcolor{Chapter }{NearestNeighborGRSDecodewords}} \logpage{[ 4, 10, 6 ]}\nobreak \hyperdef{L}{X7B88DEB37F28404A}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{NearestNeighborGRSDecodewords({\slshape C, v, dist})\index{NearestNeighborGRSDecodewords@\texttt{NearestNeighborGRSDecodewords}} \label{NearestNeighborGRSDecodewords} }\hfill{\scriptsize (function)}}\\ \texttt{NearestNeighborGRSDecodewords} finds all generalized Reed-Solomon codewords within distance \mbox{\texttt{\slshape dist}} from \mbox{\texttt{\slshape v}} \emph{and} the associated polynomial, using ``brute force''. Input: \mbox{\texttt{\slshape v}} is a received vector (a \textsf{GUAVA} codeword), \mbox{\texttt{\slshape C}} is a GRS code, \mbox{\texttt{\slshape dist}} {\textgreater} 0 is the distance from \mbox{\texttt{\slshape v}} to search in \mbox{\texttt{\slshape C}}. Output: a list of pairs $[c,f(x)]$, where $wt(c-v)\leq dist-1$ and $c = (f(x_1),...,f(x_n))$. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> F:=GF(16); GF(2^4) gap> a:=PrimitiveRoot(F);; b:=a^7; b^4+b^3+1; Z(2^4)^7 0*Z(2) gap> Pts:=List([0..14],i->b^i); [ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12, Z(2^4)^4, Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4), Z(2^4)^8 ] gap> x:=X(F);; gap> R1:=PolynomialRing(F,[x]);; gap> vars:=IndeterminatesOfPolynomialRing(R1);; gap> y:=X(F,vars);; gap> R2:=PolynomialRing(F,[x,y]);; gap> C:=GeneralizedReedSolomonCode(Pts,3,R1); a linear [15,3,1..13]10..12 generalized Reed-Solomon code over GF(16) gap> MinimumDistance(C); # 6 error correcting 13 gap> z:=Zero(F); 0*Z(2) gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];; # 7 errors gap> r:=Codeword(r); [ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ] gap> cs:=NearestNeighborGRSDecodewords(C,r,7); [ [ [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ], 0*Z(2) ], [ [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ], x_1+Z(2)^0 ] ] \end{Verbatim} \subsection{\textcolor{Chapter }{NearestNeighborDecodewords}} \logpage{[ 4, 10, 7 ]}\nobreak \hyperdef{L}{X825E35757D778787}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{NearestNeighborDecodewords({\slshape C, v, dist})\index{NearestNeighborDecodewords@\texttt{NearestNeighborDecodewords}} \label{NearestNeighborDecodewords} }\hfill{\scriptsize (function)}}\\ \texttt{NearestNeighborDecodewords} finds all codewords in a linear code \mbox{\texttt{\slshape C}} within distance \mbox{\texttt{\slshape dist}} from \mbox{\texttt{\slshape v}}, using ``brute force''. Input: \mbox{\texttt{\slshape v}} is a received vector (a \textsf{GUAVA} codeword), \mbox{\texttt{\slshape C}} is a linear code, \mbox{\texttt{\slshape dist}} {\textgreater} 0 is the distance from \mbox{\texttt{\slshape v}} to search in \mbox{\texttt{\slshape C}}. Output: a list of $c \in C$, where $wt(c-v)\leq dist-1$. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> F:=GF(16); GF(2^4) gap> a:=PrimitiveRoot(F);; b:=a^7; b^4+b^3+1; Z(2^4)^7 0*Z(2) gap> Pts:=List([0..14],i->b^i); [ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12, Z(2^4)^4, Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4), Z(2^4)^8 ] gap> x:=X(F);; gap> R1:=PolynomialRing(F,[x]);; gap> vars:=IndeterminatesOfPolynomialRing(R1);; gap> y:=X(F,vars);; gap> R2:=PolynomialRing(F,[x,y]);; gap> C:=GeneralizedReedSolomonCode(Pts,3,R1); a linear [15,3,1..13]10..12 generalized Reed-Solomon code over GF(16) gap> MinimumDistance(C); 13 gap> z:=Zero(F); 0*Z(2) gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];; gap> r:=Codeword(r); [ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ] gap> cs:=NearestNeighborDecodewords(C,r,7); [ [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ], [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ] ] \end{Verbatim} \subsection{\textcolor{Chapter }{Syndrome}} \logpage{[ 4, 10, 8 ]}\nobreak \hyperdef{L}{X7D02E0FE8735D3E6}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{Syndrome({\slshape C, v})\index{Syndrome@\texttt{Syndrome}} \label{Syndrome} }\hfill{\scriptsize (function)}}\\ \texttt{Syndrome} returns the syndrome of word \mbox{\texttt{\slshape v}} with respect to a linear code \mbox{\texttt{\slshape C}}. \mbox{\texttt{\slshape v}} is a codeword in the ambient vector space of \mbox{\texttt{\slshape C}}. If \mbox{\texttt{\slshape v}} is an element of \mbox{\texttt{\slshape C}}, the syndrome is a zero vector. The syndrome can be used for looking up an error vector in the syndrome table (see \texttt{SyndromeTable} (\ref{SyndromeTable})) that is needed to correct an error in $v$. A syndrome is not defined for non-linear codes. \texttt{Syndrome} then returns an error. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := HammingCode(4); a linear [15,11,3]1 Hamming (4,2) code over GF(2) gap> v := CodewordNr( C, 7 ); [ 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 ] gap> Syndrome( C, v ); [ 0 0 0 0 ] gap> Syndrome( C, Codeword( "000000001100111" ) ); [ 1 1 1 1 ] gap> Syndrome( C, Codeword( "000000000000001" ) ); [ 1 1 1 1 ] # the same syndrome: both codewords are in the same # coset of C \end{Verbatim} \subsection{\textcolor{Chapter }{SyndromeTable}} \logpage{[ 4, 10, 9 ]}\nobreak \hyperdef{L}{X7B9E71987E4294A7}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{SyndromeTable({\slshape C})\index{SyndromeTable@\texttt{SyndromeTable}} \label{SyndromeTable} }\hfill{\scriptsize (function)}}\\ \texttt{SyndromeTable} returns a \emph{syndrome table} of a linear code \mbox{\texttt{\slshape C}}, consisting of two columns. The first column consists of the error vectors that correspond to the syndrome vectors in the second column. These vectors both are of the codeword type. After calculating the syndrome of a word \mbox{\texttt{\slshape v}} with \texttt{Syndrome} (see \texttt{Syndrome} (\ref{Syndrome})), the error vector needed to correct \mbox{\texttt{\slshape v}} can be found in the syndrome table. Subtracting this vector from \mbox{\texttt{\slshape v}} yields an element of \mbox{\texttt{\slshape C}}. To make the search for the syndrome as fast as possible, the syndrome table is sorted according to the syndrome vectors. } \index{syndrome table} \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> H := HammingCode(2); a linear [3,1,3]1 Hamming (2,2) code over GF(2) gap> SyndromeTable(H); [ [ [ 0 0 0 ], [ 0 0 ] ], [ [ 1 0 0 ], [ 0 1 ] ], [ [ 0 1 0 ], [ 1 0 ] ], [ [ 0 0 1 ], [ 1 1 ] ] ] gap> c := Codeword("101"); [ 1 0 1 ] gap> c in H; false # c is not an element of H gap> Syndrome(H,c); [ 1 0 ] # according to the syndrome table, # the error vector [ 0 1 0 ] belongs to this syndrome gap> c - Codeword("010") in H; true # so the corrected codeword is # [ 1 0 1 ] - [ 0 1 0 ] = [ 1 1 1 ], # this is an element of H \end{Verbatim} \subsection{\textcolor{Chapter }{StandardArray}} \logpage{[ 4, 10, 10 ]}\nobreak \hyperdef{L}{X8642D0BD789DA9B5}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{StandardArray({\slshape C})\index{StandardArray@\texttt{StandardArray}} \label{StandardArray} }\hfill{\scriptsize (function)}}\\ \texttt{StandardArray} returns the standard array of a code \mbox{\texttt{\slshape C}}. This is a matrix with elements of the codeword type. It has $q^r$ rows and $q^k$ columns, where $q$ is the size of the base field of \mbox{\texttt{\slshape C}}, $r=n-k$ is the redundancy of \mbox{\texttt{\slshape C}}, and $k$ is the dimension of \mbox{\texttt{\slshape C}}. The first row contains all the elements of \mbox{\texttt{\slshape C}}. Each other row contains words that do not belong to the code, with in the first column their syndrome vector (see \texttt{Syndrome} (\ref{Syndrome})). A non-linear code does not have a standard array. \texttt{StandardArray} then returns an error. Note that calculating a standard array can be very time- and memory- consuming. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> StandardArray(RepetitionCode(3)); [ [ [ 0 0 0 ], [ 1 1 1 ] ], [ [ 0 0 1 ], [ 1 1 0 ] ], [ [ 0 1 0 ], [ 1 0 1 ] ], [ [ 1 0 0 ], [ 0 1 1 ] ] ] \end{Verbatim} \subsection{\textcolor{Chapter }{PermutationDecode}} \logpage{[ 4, 10, 11 ]}\nobreak \hyperdef{L}{X83231E717CCB0247}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PermutationDecode({\slshape C, v})\index{PermutationDecode@\texttt{PermutationDecode}} \label{PermutationDecode} }\hfill{\scriptsize (function)}}\\ \texttt{PermutationDecode} performs permutation decoding when possible and returns original vector and prints 'fail' when not possible. This uses \texttt{AutomorphismGroup} in the binary case, and (the slower) \texttt{PermutationAutomorphismGroup} otherwise, to compute the permutation automorphism group $P$ of \mbox{\texttt{\slshape C}}. The algorithm runs through the elements $p$ of $P$ checking if the weight of $H(p\cdot v)$ is less than $(d-1)/2$. If it is then the vector $p\cdot v$ is used to decode $v$: assuming \mbox{\texttt{\slshape C}} is in standard form then $c=p^{-1}Em$ is the decoded word, where $m$ is the information digits part of $p\cdot v$. If no such $p$ exists then ``fail'' is returned. See, for example, section 10.2 of Huffman and Pless \cite{HP03} for more details. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C0:=HammingCode(3,GF(2)); a linear [7,4,3]1 Hamming (3,2) code over GF(2) gap> G0:=GeneratorMat(C0);; gap> G := List(G0, ShallowCopy);; gap> PutStandardForm(G); () gap> Display(G); 1 . . . . 1 1 . 1 . . 1 . 1 . . 1 . 1 1 . . . . 1 1 1 1 gap> H0:=CheckMat(C0);; gap> Display(H0); . . . 1 1 1 1 . 1 1 . . 1 1 1 . 1 . 1 . 1 gap> c0:=Random(C0); [ 0 0 0 1 1 1 1 ] gap> v01:=c0[1]+Z(2)^2;; gap> v1:=List(c0, ShallowCopy);; gap> v1[1]:=v01;; gap> v1:=Codeword(v1); [ 1 0 0 1 1 1 1 ] gap> c1:=PermutationDecode(C0,v1); [ 0 0 0 1 1 1 1 ] gap> c1=c0; true \end{Verbatim} \subsection{\textcolor{Chapter }{PermutationDecodeNC}} \logpage{[ 4, 10, 12 ]}\nobreak \hyperdef{L}{X85B692177E2A745D}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PermutationDecodeNC({\slshape C, v, P})\index{PermutationDecodeNC@\texttt{PermutationDecodeNC}} \label{PermutationDecodeNC} }\hfill{\scriptsize (function)}}\\ Same as \texttt{PermutationDecode} except that one may enter the permutation automorphism group \mbox{\texttt{\slshape P}} in as an argument, saving time. Here \mbox{\texttt{\slshape P}} is a subgroup of the symmetric group on $n$ letters, where $n$ is the word length of \mbox{\texttt{\slshape C}}. } } } \chapter{\textcolor{Chapter }{Generating Codes}}\logpage{[ 5, 0, 0 ]} \hyperdef{L}{X87EB64ED831CCE99}{} { \label{Generating Codes} In this chapter we describe functions for generating codes. Section \ref{Generating Unrestricted Codes} describes functions for generating unrestricted codes. Section \ref{Generating Linear Codes} describes functions for generating linear codes. Section \ref{Gabidulin Codes} describes functions for constructing certain covering codes, such as the Gabidulin codes. Section \ref{Golay Codes} describes functions for constructing the Golay codes. Section \ref{Generating Cyclic Codes} describes functions for generating cyclic codes. Section \ref{Evaluation Codes} describes functions for generating codes as the image of an evaluation map applied to a space of functions. For example, generalized Reed-Solomon codes and toric codes are described there. Section \ref{Algebraic geometric codes} describes functions for generating algebraic geometry codes. Section \ref{LDPC} describes functions for constructing low-density parity-check (LDPC) codes. \section{\textcolor{Chapter }{ Generating Unrestricted Codes }}\logpage{[ 5, 1, 0 ]} \hyperdef{L}{X86A92CB184CBD3C7}{} { \label{Generating Unrestricted Codes} In this section we start with functions that creating code from user defined matrices or special matrices (see \texttt{ElementsCode} (\ref{ElementsCode}), \texttt{HadamardCode} (\ref{HadamardCode}), \texttt{ConferenceCode} (\ref{ConferenceCode}) and \texttt{MOLSCode} (\ref{MOLSCode})). These codes are unrestricted codes; they may later be discovered to be linear or cyclic. The next functions generate random codes (see \texttt{RandomCode} (\ref{RandomCode})) and the Nordstrom-Robinson code (see \texttt{NordstromRobinsonCode} (\ref{NordstromRobinsonCode})), respectively. Finally, we describe two functions for generating Greedy codes. These are codes that contructed by gathering codewords from a space (see \texttt{GreedyCode} (\ref{GreedyCode}) and \texttt{LexiCode} (\ref{LexiCode})). \subsection{\textcolor{Chapter }{ElementsCode}} \logpage{[ 5, 1, 1 ]}\nobreak \hyperdef{L}{X81AACBDD86E89D7D}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ElementsCode({\slshape L[, name], F})\index{ElementsCode@\texttt{ElementsCode}} \label{ElementsCode} }\hfill{\scriptsize (function)}}\\ \texttt{ElementsCode} creates an unrestricted code of the list of elements \mbox{\texttt{\slshape L}}, in the field \mbox{\texttt{\slshape F}}. \mbox{\texttt{\slshape L}} must be a list of vectors, strings, polynomials or codewords. \mbox{\texttt{\slshape name}} can contain a short description of the code. If \mbox{\texttt{\slshape L}} contains a codeword more than once, it is removed from the list and a GAP set is returned. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> M := Z(3)^0 * [ [1, 0, 1, 1], [2, 2, 0, 0], [0, 1, 2, 2] ];; gap> C := ElementsCode( M, "example code", GF(3) ); a (4,3,1..4)2 example code over GF(3) gap> MinimumDistance( C ); 4 gap> AsSSortedList( C ); [ [ 0 1 2 2 ], [ 1 0 1 1 ], [ 2 2 0 0 ] ] \end{Verbatim} \index{code, Hadamard} \subsection{\textcolor{Chapter }{HadamardCode}} \logpage{[ 5, 1, 2 ]}\nobreak \hyperdef{L}{X86755AAC83A0AF4B}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{HadamardCode({\slshape H[, t]})\index{HadamardCode@\texttt{HadamardCode}} \label{HadamardCode} }\hfill{\scriptsize (function)}}\\ The four forms this command can take are \texttt{HadamardCode(H,t)}, \texttt{HadamardCode(H)}, \texttt{HadamardCode(n,t)}, and \texttt{HadamardCode(n)}. In the case when the arguments \mbox{\texttt{\slshape H}} and \mbox{\texttt{\slshape t}} are both given, \texttt{HadamardCode} returns a Hadamard code of the $t^{th}$ kind from the Hadamard matrix \mbox{\texttt{\slshape H}} In case only \mbox{\texttt{\slshape H}} is given, $t = 3$ is used. By definition, a Hadamard matrix is a square matrix \mbox{\texttt{\slshape H}} with $H\cdot H^T = -n\cdot I_n$, where $n$ is the size of \mbox{\texttt{\slshape H}}. The entries of \mbox{\texttt{\slshape H}} are either 1 or -1. \index{Hadamard matrix} The matrix \mbox{\texttt{\slshape H}} is first transformed into a binary matrix $A_n$ by replacing the $1$'s by $0$'s and the $-1$'s by $1$s). The Hadamard matrix of the \emph{first kind} ($t=1$) is created by using the rows of $A_n$ as elements, after deleting the first column. This is a $(n-1, n, n/2)$ code. We use this code for creating the Hadamard code of the \emph{second kind} ($t=2$), by adding all the complements of the already existing codewords. This results in a $(n-1, 2n, n/2 -1)$ code. The \emph{third kind} ($t=3$) is created by using the rows of $A_n$ (without cutting a column) and their complements as elements. This way, we have an $(n, 2n, n/2)$-code. The returned code is generally an unrestricted code, but for $n = 2^r$, the code is linear. The command \texttt{HadamardCode(n,t)} returns a Hadamard code with parameter \mbox{\texttt{\slshape n}} of the $t^{th}$ kind. For the command \texttt{HadamardCode(n)}, $t=3$ is used. When called in these forms, \texttt{HadamardCode} first creates a Hadamard matrix (see \texttt{HadamardMat} (\ref{HadamardMat})), of size \mbox{\texttt{\slshape n}} and then follows the same procedure as described above. Therefore the same restrictions with respect to \mbox{\texttt{\slshape n}} as for Hadamard matrices hold. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> H4 := [[1,1,1,1],[1,-1,1,-1],[1,1,-1,-1],[1,-1,-1,1]];; gap> HadamardCode( H4, 1 ); a (3,4,2)1 Hadamard code of order 4 over GF(2) gap> HadamardCode( H4, 2 ); a (3,8,1)0 Hadamard code of order 4 over GF(2) gap> HadamardCode( H4 ); a (4,8,2)1 Hadamard code of order 4 over GF(2) gap> H4 := [[1,1,1,1],[1,-1,1,-1],[1,1,-1,-1],[1,-1,-1,1]];; gap> C := HadamardCode( 4 ); a (4,8,2)1 Hadamard code of order 4 over GF(2) gap> C = HadamardCode( H4 ); true \end{Verbatim} \index{code, conference} \subsection{\textcolor{Chapter }{ConferenceCode}} \logpage{[ 5, 1, 3 ]}\nobreak \hyperdef{L}{X8122BA417F705997}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ConferenceCode({\slshape H})\index{ConferenceCode@\texttt{ConferenceCode}} \label{ConferenceCode} }\hfill{\scriptsize (function)}}\\ \texttt{ConferenceCode} returns a code of length $n-1$ constructed from a symmetric 'conference matrix' \mbox{\texttt{\slshape H}}. A \emph{conference matrix} \mbox{\texttt{\slshape H}} is a symmetric matrix of order $n$, which satisfies $H\cdot H^T = ((n-1)\cdot I$, with $n \equiv 2 \pmod 4$. The rows of $\frac{1}{2}(H+I+J)$, $\frac{1}{2}(-H+I+J)$, plus the zero and all-ones vectors form the elements of a binary non-linear $(n-1, 2n, (n-2)/2)$ code. \index{conference matrix} \textsf{GUAVA} constructs a symmetric conference matrix of order $n+1$ ($n\equiv 1 \pmod 4$) and uses the rows of that matrix, plus the zero and all-ones vectors, to construct a binary non-linear $(n, 2(n+1), (n-1)/2)$-code. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> H6 := [[0,1,1,1,1,1],[1,0,1,-1,-1,1],[1,1,0,1,-1,-1], > [1,-1,1,0,1,-1],[1,-1,-1,1,0,1],[1,1,-1,-1,1,0]];; gap> C1 := ConferenceCode( H6 ); a (5,12,2)1..4 conference code over GF(2) gap> IsLinearCode( C1 ); false gap> C2 := ConferenceCode( 5 ); a (5,12,2)1..4 conference code over GF(2) gap> AsSSortedList( C2 ); [ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 1 1 ], [ 0 1 1 0 1 ], [ 0 1 1 1 0 ], [ 1 0 0 1 1 ], [ 1 0 1 0 1 ], [ 1 0 1 1 0 ], [ 1 1 0 0 1 ], [ 1 1 0 1 0 ], [ 1 1 1 0 0 ], [ 1 1 1 1 1 ] ] \end{Verbatim} \subsection{\textcolor{Chapter }{MOLSCode}} \logpage{[ 5, 1, 4 ]}\nobreak \hyperdef{L}{X81B7EE4279398F67}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MOLSCode({\slshape [n][,]q})\index{MOLSCode@\texttt{MOLSCode}} \label{MOLSCode} }\hfill{\scriptsize (function)}}\\ \texttt{MOLSCode} returns an $(n, q^2, n-1)$ code over $GF(q)$. The code is created from $n-2$ 'Mutually Orthogonal Latin Squares' (MOLS) of size $q \times q$. The default for \mbox{\texttt{\slshape n}} is $4$. \textsf{GUAVA} can construct a MOLS code for $n-2 \leq q$. Here \mbox{\texttt{\slshape q}} must be a prime power, $q > 2$. If there are no $n-2$ MOLS, an error is signalled. Since each of the $n-2$ MOLS is a $q\times q$ matrix, we can create a code of size $q^2$ by listing in each code element the entries that are in the same position in each of the MOLS. We precede each of these lists with the two coordinates that specify this position, making the word length become $n$. The MOLS codes are MDS codes (see \texttt{IsMDSCode} (\ref{IsMDSCode})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := MOLSCode( 6, 5 ); a (6,25,5)3..4 code generated by 4 MOLS of order 5 over GF(5) gap> mols := List( [1 .. WordLength(C1) - 2 ], function( nr ) > local ls, el; > ls := NullMat( Size(LeftActingDomain(C1)), Size(LeftActingDomain(C1)) ); > for el in VectorCodeword( AsSSortedList( C1 ) ) do > ls[IntFFE(el[1])+1][IntFFE(el[2])+1] := el[nr + 2]; > od; > return ls; > end );; gap> AreMOLS( mols ); true gap> C2 := MOLSCode( 11 ); a (4,121,3)2 code generated by 2 MOLS of order 11 over GF(11) \end{Verbatim} \subsection{\textcolor{Chapter }{RandomCode}} \logpage{[ 5, 1, 5 ]}\nobreak \hyperdef{L}{X7D87DD6380B2CE69}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{RandomCode({\slshape n, M, F})\index{RandomCode@\texttt{RandomCode}} \label{RandomCode} }\hfill{\scriptsize (function)}}\\ \texttt{RandomCode} returns a random unrestricted code of size \mbox{\texttt{\slshape M}} with word length \mbox{\texttt{\slshape n}} over \mbox{\texttt{\slshape F}}. \mbox{\texttt{\slshape M}} must be less than or equal to the number of elements in the space $GF(q)^n$. The function \texttt{RandomLinearCode} returns a random linear code (see \texttt{RandomLinearCode} (\ref{RandomLinearCode})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := RandomCode( 6, 10, GF(8) ); a (6,10,1..6)4..6 random unrestricted code over GF(8) gap> MinimumDistance(C1); 3 gap> C2 := RandomCode( 6, 10, GF(8) ); a (6,10,1..6)4..6 random unrestricted code over GF(8) gap> C1 = C2; false \end{Verbatim} \index{code, Nordstrom-Robinson} \subsection{\textcolor{Chapter }{NordstromRobinsonCode}} \logpage{[ 5, 1, 6 ]}\nobreak \hyperdef{L}{X816353397F25B62E}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{NordstromRobinsonCode({\slshape })\index{NordstromRobinsonCode@\texttt{NordstromRobinsonCode}} \label{NordstromRobinsonCode} }\hfill{\scriptsize (function)}}\\ \texttt{NordstromRobinsonCode} returns a Nordstrom-Robinson code, the best code with word length $n=16$ and minimum distance $d=6$ over $GF(2)$. This is a non-linear $(16, 256, 6)$ code. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := NordstromRobinsonCode(); a (16,256,6)4 Nordstrom-Robinson code over GF(2) gap> OptimalityCode( C ); 0 \end{Verbatim} \index{code, greedy} \subsection{\textcolor{Chapter }{GreedyCode}} \logpage{[ 5, 1, 7 ]}\nobreak \hyperdef{L}{X7880D34485C60BAF}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GreedyCode({\slshape L, d, F})\index{GreedyCode@\texttt{GreedyCode}} \label{GreedyCode} }\hfill{\scriptsize (function)}}\\ \texttt{GreedyCode} returns a Greedy code with design distance \mbox{\texttt{\slshape d}} over the finite field \mbox{\texttt{\slshape F}}. The code is constructed using the greedy algorithm on the list of vectors \mbox{\texttt{\slshape L}}. (The greedy algorithm checks each vector in \mbox{\texttt{\slshape L}} and adds it to the code if its distance to the current code is greater than or equal to \mbox{\texttt{\slshape d}}. It is obvious that the resulting code has a minimum distance of at least \mbox{\texttt{\slshape d}}. Greedy codes are often linear codes. The function \texttt{LexiCode} creates a greedy code from a basis instead of an enumerated list (see \texttt{LexiCode} (\ref{LexiCode})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := GreedyCode( Tuples( AsSSortedList( GF(2) ), 5 ), 3, GF(2) ); a (5,4,3..5)2 Greedy code, user defined basis over GF(2) gap> C2 := GreedyCode( Permuted( Tuples( AsSSortedList( GF(2) ), 5 ), > (1,4) ), 3, GF(2) ); a (5,4,3..5)2 Greedy code, user defined basis over GF(2) gap> C1 = C2; false \end{Verbatim} \subsection{\textcolor{Chapter }{LexiCode}} \logpage{[ 5, 1, 8 ]}\nobreak \hyperdef{L}{X7C1B374583AFB923}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LexiCode({\slshape n, d, F})\index{LexiCode@\texttt{LexiCode}} \label{LexiCode} }\hfill{\scriptsize (function)}}\\ In this format, \texttt{Lexicode} returns a lexicode with word length \mbox{\texttt{\slshape n}}, design distance \mbox{\texttt{\slshape d}} over \mbox{\texttt{\slshape F}}. The code is constructed using the greedy algorithm on the lexicographically ordered list of all vectors of length \mbox{\texttt{\slshape n}} over \mbox{\texttt{\slshape F}}. Every time a vector is found that has a distance to the current code of at least \mbox{\texttt{\slshape d}}, it is added to the code. This results, obviously, in a code with minimum distance greater than or equal to \mbox{\texttt{\slshape d}}. Another syntax which one can use is \texttt{LexiCode( B, d, F )}. When called in this format, \texttt{LexiCode} uses the basis \mbox{\texttt{\slshape B}} instead of the standard basis. \mbox{\texttt{\slshape B}} is a matrix of vectors over \mbox{\texttt{\slshape F}}. The code is constructed using the greedy algorithm on the list of vectors spanned by \mbox{\texttt{\slshape B}}, ordered lexicographically with respect to \mbox{\texttt{\slshape B}}. Note that binary lexicodes are always linear. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := LexiCode( 4, 3, GF(5) ); a (4,17,3..4)2..4 lexicode over GF(5) gap> B := [ [Z(2)^0, 0*Z(2), 0*Z(2)], [Z(2)^0, Z(2)^0, 0*Z(2)] ];; gap> C := LexiCode( B, 2, GF(2) ); a linear [3,1,2]1..2 lexicode over GF(2) \end{Verbatim} The function \texttt{GreedyCode} creates a greedy code that is not restricted to a lexicographical order (see \texttt{GreedyCode} (\ref{GreedyCode})). } \section{\textcolor{Chapter }{ Generating Linear Codes }}\logpage{[ 5, 2, 0 ]} \hyperdef{L}{X7A11F29F7BBF45BB}{} { \label{Generating Linear Codes} In this section we describe functions for constructing linear codes. A linear code always has a generator or check matrix. The first two functions generate linear codes from the generator matrix (\texttt{GeneratorMatCode} (\ref{GeneratorMatCode})) or check matrix (\texttt{CheckMatCode} (\ref{CheckMatCode})). All linear codes can be constructed with these functions. The next functions we describe generate some well-known codes, like Hamming codes (\texttt{HammingCode} (\ref{HammingCode})), Reed-Muller codes (\texttt{ReedMullerCode} (\ref{ReedMullerCode})) and the extended Golay codes (\texttt{ExtendedBinaryGolayCode} (\ref{ExtendedBinaryGolayCode}) and \texttt{ExtendedTernaryGolayCode} (\ref{ExtendedTernaryGolayCode})). A large and powerful family of codes are alternant codes. They are obtained by a small modification of the parity check matrix of a BCH code (see \texttt{AlternantCode} (\ref{AlternantCode}), \texttt{GoppaCode} (\ref{GoppaCode}), \texttt{GeneralizedSrivastavaCode} (\ref{GeneralizedSrivastavaCode}) and \texttt{SrivastavaCode} (\ref{SrivastavaCode})). Finally, we describe a function for generating random linear codes (see \texttt{RandomLinearCode} (\ref{RandomLinearCode})). \subsection{\textcolor{Chapter }{GeneratorMatCode}} \logpage{[ 5, 2, 1 ]}\nobreak \hyperdef{L}{X83F400A681CFC0D6}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneratorMatCode({\slshape G[, name], F})\index{GeneratorMatCode@\texttt{GeneratorMatCode}} \label{GeneratorMatCode} }\hfill{\scriptsize (function)}}\\ \texttt{GeneratorMatCode} returns a linear code with generator matrix \mbox{\texttt{\slshape G}}. \mbox{\texttt{\slshape G}} must be a matrix over finite field \mbox{\texttt{\slshape F}}. \mbox{\texttt{\slshape name}} can contain a short description of the code. The generator matrix is the basis of the elements of the code. The resulting code has word length $n$, dimension $k$ if \mbox{\texttt{\slshape G}} is a $k \times n$-matrix. If $GF(q)$ is the field of the code, the size of the code will be $q^k$. If the generator matrix does not have full row rank, the linearly dependent rows are removed. This is done by the GAP function \texttt{BaseMat} and results in an equal code. The generator matrix can be retrieved with the function \texttt{GeneratorMat} (see \texttt{GeneratorMat} (\ref{GeneratorMat})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> G := Z(3)^0 * [[1,0,1,2,0],[0,1,2,1,1],[0,0,1,2,1]];; gap> C1 := GeneratorMatCode( G, GF(3) ); a linear [5,3,1..2]1..2 code defined by generator matrix over GF(3) gap> C2 := GeneratorMatCode( IdentityMat( 5, GF(2) ), GF(2) ); a linear [5,5,1]0 code defined by generator matrix over GF(2) gap> GeneratorMatCode( List( AsSSortedList( NordstromRobinsonCode() ), > x -> VectorCodeword( x ) ), GF( 2 ) ); a linear [16,11,1..4]2 code defined by generator matrix over GF(2) # This is the smallest linear code that contains the N-R code \end{Verbatim} \subsection{\textcolor{Chapter }{CheckMatCodeMutable}} \logpage{[ 5, 2, 2 ]}\nobreak \hyperdef{L}{X7CDDDFE47A10A008}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CheckMatCodeMutable({\slshape H[, name], F})\index{CheckMatCodeMutable@\texttt{CheckMatCodeMutable}} \label{CheckMatCodeMutable} }\hfill{\scriptsize (function)}}\\ \texttt{CheckMatCodeMutable} is the same as \texttt{CheckMatCode} except that the check matrix and generator matrix are mutable. } \subsection{\textcolor{Chapter }{CheckMatCode}} \logpage{[ 5, 2, 3 ]}\nobreak \hyperdef{L}{X848D3F7B805DEB66}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CheckMatCode({\slshape H[, name], F})\index{CheckMatCode@\texttt{CheckMatCode}} \label{CheckMatCode} }\hfill{\scriptsize (function)}}\\ \texttt{CheckMatCode} returns a linear code with check matrix \mbox{\texttt{\slshape H}}. \mbox{\texttt{\slshape H}} must be a matrix over Galois field \mbox{\texttt{\slshape F}}. \mbox{\texttt{\slshape [name.}} can contain a short description of the code. The parity check matrix is the transposed of the nullmatrix of the generator matrix of the code. Therefore, $c\cdot H^T = 0$ where $c$ is an element of the code. If \mbox{\texttt{\slshape H}} is a $r\times n$-matrix, the code has word length $n$, redundancy $r$ and dimension $n-r$. If the check matrix does not have full row rank, the linearly dependent rows are removed. This is done by the GAP function \texttt{BaseMat}. and results in an equal code. The check matrix can be retrieved with the function \texttt{CheckMat} (see \texttt{CheckMat} (\ref{CheckMat})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> G := Z(3)^0 * [[1,0,1,2,0],[0,1,2,1,1],[0,0,1,2,1]];; gap> C1 := CheckMatCode( G, GF(3) ); a linear [5,2,1..2]2..3 code defined by check matrix over GF(3) gap> CheckMat(C1); [ [ Z(3)^0, 0*Z(3), Z(3)^0, Z(3), 0*Z(3) ], [ 0*Z(3), Z(3)^0, Z(3), Z(3)^0, Z(3)^0 ], [ 0*Z(3), 0*Z(3), Z(3)^0, Z(3), Z(3)^0 ] ] gap> C2 := CheckMatCode( IdentityMat( 5, GF(2) ), GF(2) ); a cyclic [5,0,5]5 code defined by check matrix over GF(2) \end{Verbatim} \index{code, Hamming} \subsection{\textcolor{Chapter }{HammingCode}} \logpage{[ 5, 2, 4 ]}\nobreak \hyperdef{L}{X7DECB0A57C798583}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{HammingCode({\slshape r, F})\index{HammingCode@\texttt{HammingCode}} \label{HammingCode} }\hfill{\scriptsize (function)}}\\ \texttt{HammingCode} returns a Hamming code with redundancy \mbox{\texttt{\slshape r}} over \mbox{\texttt{\slshape F}}. A Hamming code is a single-error-correcting code. The parity check matrix of a Hamming code has all nonzero vectors of length \mbox{\texttt{\slshape r}} in its columns, except for a multiplication factor. The decoding algorithm of the Hamming code (see \texttt{Decode} (\ref{Decode})) makes use of this property. If $q$ is the size of its field \mbox{\texttt{\slshape F}}, the returned Hamming code is a linear $[(q^r-1)/(q-1), (q^r-1)/(q-1) - r, 3]$ code. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := HammingCode( 4, GF(2) ); a linear [15,11,3]1 Hamming (4,2) code over GF(2) gap> C2 := HammingCode( 3, GF(9) ); a linear [91,88,3]1 Hamming (3,9) code over GF(9) \end{Verbatim} \index{code, Reed-Muller} \subsection{\textcolor{Chapter }{ReedMullerCode}} \logpage{[ 5, 2, 5 ]}\nobreak \hyperdef{L}{X801C88D578DA6ACA}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ReedMullerCode({\slshape r, k})\index{ReedMullerCode@\texttt{ReedMullerCode}} \label{ReedMullerCode} }\hfill{\scriptsize (function)}}\\ \texttt{ReedMullerCode} returns a binary 'Reed-Muller code' \mbox{\texttt{\slshape R(r, k)}} with dimension \mbox{\texttt{\slshape k}} and order \mbox{\texttt{\slshape r}}. This is a code with length $2^k$ and minimum distance $2^{k-r}$ (see for example, section 1.10 in \cite{HP03}). By definition, the $r^{th}$ order binary Reed-Muller code of length $n=2^m$, for $0 \leq r \leq m$, is the set of all vectors $f$, where $f$ is a Boolean function which is a polynomial of degree at most $r$. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> ReedMullerCode( 1, 3 ); a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) \end{Verbatim} See \texttt{GeneralizedReedMullerCode} (\ref{GeneralizedReedMullerCode}) for a more general construction. \index{code, alternant} \subsection{\textcolor{Chapter }{AlternantCode}} \logpage{[ 5, 2, 6 ]}\nobreak \hyperdef{L}{X851592C7811D3D2A}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{AlternantCode({\slshape r, Y[, alpha], F})\index{AlternantCode@\texttt{AlternantCode}} \label{AlternantCode} }\hfill{\scriptsize (function)}}\\ \texttt{AlternantCode} returns an 'alternant code', with parameters \mbox{\texttt{\slshape r}}, \mbox{\texttt{\slshape Y}} and \mbox{\texttt{\slshape alpha}} (optional). \mbox{\texttt{\slshape F}} denotes the (finite) base field. Here, \mbox{\texttt{\slshape r}} is the design redundancy of the code. \mbox{\texttt{\slshape Y}} and \mbox{\texttt{\slshape alpha}} are both vectors of length \mbox{\texttt{\slshape n}} from which the parity check matrix is constructed. The check matrix has the form $H=([a_i^j y_i])$, where $0 \leq j\leq r-1$, $1 \leq i\leq n$, and where $[...]$ is as in \texttt{VerticalConversionFieldMat} (\ref{VerticalConversionFieldMat})). If no \mbox{\texttt{\slshape alpha}} is specified, the vector $[1, a, a^2, .., a^{n-1}]$ is used, where $a$ is a primitive element of a Galois field \mbox{\texttt{\slshape F}}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> Y := [ 1, 1, 1, 1, 1, 1, 1];; a := PrimitiveUnityRoot( 2, 7 );; gap> alpha := List( [0..6], i -> a^i );; gap> C := AlternantCode( 2, Y, alpha, GF(8) ); a linear [7,3,3..4]3..4 alternant code over GF(8) \end{Verbatim} \index{code, Goppa (classical)} \subsection{\textcolor{Chapter }{GoppaCode}} \logpage{[ 5, 2, 7 ]}\nobreak \hyperdef{L}{X7EE808BB7D1E487A}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GoppaCode({\slshape G, L})\index{GoppaCode@\texttt{GoppaCode}} \label{GoppaCode} }\hfill{\scriptsize (function)}}\\ \texttt{GoppaCode} returns a Goppa code \mbox{\texttt{\slshape C}} from Goppa polynomial \mbox{\texttt{\slshape g}}, having coefficients in a Galois Field $GF(q)$. \mbox{\texttt{\slshape L}} must be a list of elements in $GF(q)$, that are not roots of \mbox{\texttt{\slshape g}}. The word length of the code is equal to the length of \mbox{\texttt{\slshape L}}. The parity check matrix has the form $H=([a_i^j / G(a_i)])_{0 \leq j \leq deg(g)-1,\ a_i \in L}$, where $a_i\in L$ and $[...]$ is as in \texttt{VerticalConversionFieldMat} (\ref{VerticalConversionFieldMat}), so $H$ has entries in $GF(q)$, $q=p^m$. It is known that $d(C)\geq deg(g)+1$, with a better bound in the binary case provided $g$ has no multiple roots. See Huffman and Pless \cite{HP03} section 13.2.2, and MacWilliams and Sloane \cite{MS83} section 12.3, for more details. One can also call \texttt{GoppaCode} using the syntax \texttt{GoppaCode(g,n)}. When called with parameter \mbox{\texttt{\slshape n}}, \textsf{GUAVA} constructs a list $L$ of length \mbox{\texttt{\slshape n}}, such that no element of \mbox{\texttt{\slshape L}} is a root of \mbox{\texttt{\slshape g}}. This is a special case of an alternant code. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> x:=Indeterminate(GF(8),"x"); x gap> L:=Elements(GF(8)); [ 0*Z(2), Z(2)^0, Z(2^3), Z(2^3)^2, Z(2^3)^3, Z(2^3)^4, Z(2^3)^5, Z(2^3)^6 ] gap> g:=x^2+x+1; x^2+x+Z(2)^0 gap> C:=GoppaCode(g,L); a linear [8,2,5]3 Goppa code over GF(2) gap> xx := Indeterminate( GF(2), "xx" );; gap> gg := xx^2 + xx + 1;; L := AsSSortedList( GF(8) );; gap> C1 := GoppaCode( gg, L ); a linear [8,2,5]3 Goppa code over GF(2) gap> y := Indeterminate( GF(2), "y" );; gap> h := y^2 + y + 1;; gap> C2 := GoppaCode( h, 8 ); a linear [8,2,5]3 Goppa code over GF(2) gap> C1=C2; true gap> C=C1; true \end{Verbatim} \index{code, Srivastava} \subsection{\textcolor{Chapter }{GeneralizedSrivastavaCode}} \logpage{[ 5, 2, 8 ]}\nobreak \hyperdef{L}{X7F9C0A727EE075B7}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneralizedSrivastavaCode({\slshape a, w, z[, t], F})\index{GeneralizedSrivastavaCode@\texttt{GeneralizedSrivastavaCode}} \label{GeneralizedSrivastavaCode} }\hfill{\scriptsize (function)}}\\ \texttt{GeneralizedSrivastavaCode} returns a generalized Srivastava code with parameters \mbox{\texttt{\slshape a}}, \mbox{\texttt{\slshape w}}, \mbox{\texttt{\slshape z}}, \mbox{\texttt{\slshape t}}. $a =\{ a_1, ..., a_n\}$ and $w =\{ w_1, ..., w_s\}$ are lists of $n+s$ distinct elements of $F=GF(q^m)$, $z$ is a list of length $n$ of nonzero elements of $GF(q^m)$. The parameter \mbox{\texttt{\slshape t}} determines the designed distance: $d \geq st + 1$. The check matrix of this code is the form \[ H=([\frac{z_i}{(a_i - w_j)^k}]), \] $1\leq k\leq t$, where $[...]$ is as in \texttt{VerticalConversionFieldMat} (\ref{VerticalConversionFieldMat}). We use this definition of $H$ to define the code. The default for \mbox{\texttt{\slshape t}} is 1. The original Srivastava codes (see \texttt{SrivastavaCode} (\ref{SrivastavaCode})) are a special case $t=1$, $z_i=a_i^\mu$, for some $\mu$. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> a := Filtered( AsSSortedList( GF(2^6) ), e -> e in GF(2^3) );; gap> w := [ Z(2^6) ];; z := List( [1..8], e -> 1 );; gap> C := GeneralizedSrivastavaCode( a, w, z, 1, GF(64) ); a linear [8,2,2..5]3..4 generalized Srivastava code over GF(2) \end{Verbatim} \subsection{\textcolor{Chapter }{SrivastavaCode}} \logpage{[ 5, 2, 9 ]}\nobreak \hyperdef{L}{X7A38EB3178961F3E}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{SrivastavaCode({\slshape a, w[, mu], F})\index{SrivastavaCode@\texttt{SrivastavaCode}} \label{SrivastavaCode} }\hfill{\scriptsize (function)}}\\ $SrivastavaCode$ returns a Srivastava code with parameters \mbox{\texttt{\slshape a}}, \mbox{\texttt{\slshape w}} (and optionally \mbox{\texttt{\slshape mu}}). $a =\{ a_1, ..., a_n\}$ and $w =\{ w_1, ..., w_s\}$ are lists of $n+s$ distinct elements of $F=GF(q^m)$. The default for \mbox{\texttt{\slshape mu}} is 1. The Srivastava code is a generalized Srivastava code, in which $z_i = a_i^{mu}$ for some \mbox{\texttt{\slshape mu}} and $t=1$. J. N. Srivastava introduced this code in 1967, though his work was not published. See Helgert \cite{He72} for more details on the properties of this code. Related reference: G. Roelofsen, \textsc{On Goppa and Generalized Srivastava Codes} PhD thesis, Dept. Math. and Comp. Sci., Eindhoven Univ. of Technology, the Netherlands, 1982. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> a := AsSSortedList( GF(11) ){[2..8]};; gap> w := AsSSortedList( GF(11) ){[9..10]};; gap> C := SrivastavaCode( a, w, 2, GF(11) ); a linear [7,5,3]2 Srivastava code over GF(11) gap> IsMDSCode( C ); true # Always true if F is a prime field \end{Verbatim} \index{code, Cordaro-Wagner} \subsection{\textcolor{Chapter }{CordaroWagnerCode}} \logpage{[ 5, 2, 10 ]}\nobreak \hyperdef{L}{X87F7CB8B7A8BE624}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CordaroWagnerCode({\slshape n})\index{CordaroWagnerCode@\texttt{CordaroWagnerCode}} \label{CordaroWagnerCode} }\hfill{\scriptsize (function)}}\\ \texttt{CordaroWagnerCode} returns a binary Cordaro-Wagner code. This is a code of length \mbox{\texttt{\slshape n}} and dimension $2$ having the best possible minimum distance $d$. This code is just a little bit less trivial than \texttt{RepetitionCode} (see \texttt{RepetitionCode} (\ref{RepetitionCode})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := CordaroWagnerCode( 11 ); a linear [11,2,7]5 Cordaro-Wagner code over GF(2) gap> AsSSortedList(C); [ [ 0 0 0 0 0 0 0 0 0 0 0 ], [ 0 0 0 0 1 1 1 1 1 1 1 ], [ 1 1 1 1 0 0 0 1 1 1 1 ], [ 1 1 1 1 1 1 1 0 0 0 0 ] ] \end{Verbatim} \subsection{\textcolor{Chapter }{FerreroDesignCode}} \logpage{[ 5, 2, 11 ]}\nobreak \hyperdef{L}{X865534267C8E902A}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{FerreroDesignCode({\slshape P, m})\index{FerreroDesignCode@\texttt{FerreroDesignCode}} \label{FerreroDesignCode} }\hfill{\scriptsize (function)}}\\ \emph{Requires the GAP package SONATA} A group $K$ together with a group of automorphism $H$ of $K$ such that the semidirect product $KH$ is a Frobenius group with complement $H$ is called a Ferrero pair $(K, H)$ in SONATA. Take a Frobenius $(G,+)$ group with kernel $K$ and complement $H$. Consider the design $D$ with point set $K$ and block set $\{ a^H + b\ |\ a, b \in K, a \not= 0 \}$. Here $a^H$ denotes the orbit of a under conjugation by elements of $H$. Every planar near-ring design of type "*" can be obtained in this way from groups. These designs (from a Frobenius kernel of order $v$ and a Frobenius complement of order $k$) have $v(v-1)/k$ distinct blocks and they are all of size $k$. Moreover each of the $v$ points occurs in exactly $v-1$ distinct blocks. Hence the rows and the columns of the incidence matrix $M$ of the design are always of constant weight. \texttt{FerreroDesignCode} constructs binary linear code arising from the incdence matrix of a design associated to a "Ferrero pair" arising from a fixed-point-free (fpf) automorphism groups and Frobenius group. INPUT: $P$ is a list of prime powers describing an abelian group $G$. $m > 0$ is an integer such that $G$ admits a cyclic fpf automorphism group of size $m$. This means that for all $q = p^k \in P$, OrderMod($p$, $m$) must divide $q$ (see the SONATA documentation for \texttt{FpfAutomorphismGroupsCyclic}). OUTPUT: The binary linear code whose generator matrix is the incidence matrix of a design associated to a "Ferrero pair" arising from the fixed-point-free (fpf) automorphism group of $G$. The pair $(H,K)$ is called a Ferraro pair and the semidirect product $KH$ is a Frobenius group with complement $H$. AUTHORS: Peter Mayr and David Joyner } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> G:=AbelianGroup([5,5] ); [ pc group of size 25 with 2 generators ] gap> FpfAutomorphismGroupsMaxSize( G ); [ 24, 2 ] gap> L:=FpfAutomorphismGroupsCyclic( [5,5], 3 ); [ [ [ f1, f2 ] -> [ f1*f2^2, f1*f2^3 ] ], [ pc group of size 25 with 2 generators ] ] gap> D := DesignFromFerreroPair( L[2], Group(L[1][1]), "*" ); [ a 2 - ( 25, 3, 2 ) nearring generated design ] gap> M:=IncidenceMat( D );; Length(M); Length(TransposedMat(M)); 25 200 gap> C1:=GeneratorMatCode(M*Z(2),GF(2)); a linear [200,25,1..24]62..100 code defined by generator matrix over GF(2) gap> MinimumDistance(C1); 24 gap> C2:=FerreroDesignCode( [5,5],3); a linear [200,25,1..24]62..100 code defined by generator matrix over GF(2) gap> C1=C2; true \end{Verbatim} \subsection{\textcolor{Chapter }{RandomLinearCode}} \logpage{[ 5, 2, 12 ]}\nobreak \hyperdef{L}{X7BCA10CE8660357F}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{RandomLinearCode({\slshape n, k, F})\index{RandomLinearCode@\texttt{RandomLinearCode}} \label{RandomLinearCode} }\hfill{\scriptsize (function)}}\\ \texttt{RandomLinearCode} returns a random linear code with word length \mbox{\texttt{\slshape n}}, dimension \mbox{\texttt{\slshape k}} over field \mbox{\texttt{\slshape F}}. The method used is to first construct a $k\times n$ matrix of the block form $(I,A)$, where $I$ is a $k\times k$ identity matrix and $A$ is a $k\times (n-k)$ matrix constructed using \texttt{Random(F)} repeatedly. Then the columns are permuted using a randomly selected element of \texttt{SymmetricGroup(n)}. To create a random unrestricted code, use \texttt{RandomCode} (see \texttt{RandomCode} (\ref{RandomCode})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := RandomLinearCode( 15, 4, GF(3) ); a [15,4,?] randomly generated code over GF(3) gap> Display(C); a linear [15,4,1..6]6..10 random linear code over GF(3) \end{Verbatim} The method \textsf{GUAVA} chooses to output the result of a \texttt{RandomLinearCode} command is different than other codes. For example, the bounds on the minimum distance is not displayed. Howeer, you can use the \texttt{Display} command to print this information. This new display method was added in version 1.9 to speed up the command (if $n$ is about 80 and $k$ about 40, for example, the time it took to look up and/or calculate the bounds on the minimum distance was too long). \subsection{\textcolor{Chapter }{OptimalityCode}} \logpage{[ 5, 2, 13 ]}\nobreak \hyperdef{L}{X839CFE4C7A567D4D}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{OptimalityCode({\slshape C})\index{OptimalityCode@\texttt{OptimalityCode}} \label{OptimalityCode} }\hfill{\scriptsize (function)}}\\ \texttt{OptimalityCode} returns the difference between the smallest known upper bound and the actual size of the code. Note that the value of the function \texttt{UpperBound} is not always equal to the actual upper bound $A(n,d)$ thus the result may not be equal to $0$ even if the code is optimal! \texttt{OptimalityLinearCode} is similar but applies only to linear codes. } \subsection{\textcolor{Chapter }{BestKnownLinearCode}} \logpage{[ 5, 2, 14 ]}\nobreak \hyperdef{L}{X871508567CB34D96}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BestKnownLinearCode({\slshape n, k, F})\index{BestKnownLinearCode@\texttt{BestKnownLinearCode}} \label{BestKnownLinearCode} }\hfill{\scriptsize (function)}}\\ \texttt{BestKnownLinearCode} returns the best known (as of 11 May 2006) linear code of length \mbox{\texttt{\slshape n}}, dimension \mbox{\texttt{\slshape k}} over field \mbox{\texttt{\slshape F}}. The function uses the tables described in section \texttt{BoundsMinimumDistance} (\ref{BoundsMinimumDistance}) to construct this code. This command can also be called using the syntax \texttt{BestKnownLinearCode( rec )}, where \mbox{\texttt{\slshape rec}} must be a record containing the fields `lowerBound', `upperBound' and `construction'. It uses the information in this field to construct a code. This form is meant to be used together with the function \texttt{BoundsMinimumDistance} (see \texttt{BoundsMinimumDistance} (\ref{BoundsMinimumDistance})), if the bounds are already calculated. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := BestKnownLinearCode( 23, 12, GF(2) ); a linear [23,12,7]3 punctured code gap> C1 = BinaryGolayCode(); false # it's constructed differently gap> C1 := BestKnownLinearCode( 23, 12, GF(2) ); a linear [23,12,7]3 punctured code gap> G1 := MutableCopyMat(GeneratorMat(C1));; gap> PutStandardForm(G1); () gap> Display(G1); 1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . . . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1 . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . 1 . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 1 . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 gap> C2 := BinaryGolayCode(); a cyclic [23,12,7]3 binary Golay code over GF(2) gap> G2 := MutableCopyMat(GeneratorMat(C2));; gap> PutStandardForm(G2); () gap> Display(G2); 1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . 1 . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1 . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 1 . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 . . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 ## Despite their generator matrices are different, they are equivalent codes, see below. gap> IsEquivalent(C1,C2); true gap> CodeIsomorphism(C1,C2); (4,14,6,12,5)(7,17,18,11,19)(8,22,13,21,16)(10,23,15,20) gap> Display( BestKnownLinearCode( 81, 77, GF(4) ) ); a linear [81,77,3]2..3 shortened code of a linear [85,81,3]1 Hamming (4,4) code over GF(4) gap> C:=BestKnownLinearCode(174,72); a linear [174,72,31..36]26..87 code defined by generator matrix over GF(2) gap> bounds := BoundsMinimumDistance( 81, 77, GF(4) ); rec( n := 81, k := 77, q := 4, references := rec( Ham := [ "%T this reference is unknown, for more info", "%T contact A.E. Brouwer (aeb@cwi.nl)" ], cap := [ "%T this reference is unknown, for more info", "%T contact A.E. Brouwer (aeb@cwi.nl)" ] ), construction := [ (Operation "ShortenedCode"), [ [ (Operation "HammingCode"), [ 4, 4 ] ], [ 1, 2, 3, 4 ] ] ], lowerBound := 3, lowerBoundExplanation := [ "Lb(81,77)=3, by shortening of:", "Lb(85,81)=3, reference: Ham" ], upperBound := 3, upperBoundExplanation := [ "Ub(81,77)=3, by considering shortening to:", "Ub(18,14)=3, reference: cap" ] ) gap> C := BestKnownLinearCode( bounds ); a linear [81,77,3]2..3 shortened code gap> C = BestKnownLinearCode(81, 77, GF(4) ); true \end{Verbatim} } \section{\textcolor{Chapter }{ Gabidulin Codes }}\logpage{[ 5, 3, 0 ]} \hyperdef{L}{X858721967BE44000}{} { \label{Gabidulin Codes} These five binary, linear codes are derived from an article by Gabidulin, Davydov and Tombak \cite{GDT91}. All these codes are defined by check matrices. Exact definitions can be found in the article. The Gabidulin code, the enlarged Gabidulin code, the Davydov code, the Tombak code, and the enlarged Tombak code, correspond with theorem 1, 2, 3, 4, and 5, respectively in the article. Like the Hamming codes, these codes have fixed minimum distance and covering radius, but can be arbitrarily long. \index{code, Gabidulin} \subsection{\textcolor{Chapter }{GabidulinCode}} \logpage{[ 5, 3, 1 ]}\nobreak \hyperdef{L}{X79BE5D497CB2E59E}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GabidulinCode({\slshape m, w1, w2})\index{GabidulinCode@\texttt{GabidulinCode}} \label{GabidulinCode} }\hfill{\scriptsize (function)}}\\ \texttt{GabidulinCode} yields a code of length $5$ . $2^{m-2}-1$, redundancy $2m-1$, minimum distance $3$ and covering radius $2$. \mbox{\texttt{\slshape w1}} and \mbox{\texttt{\slshape w2}} should be elements of $GF(2^{m-2})$. } \subsection{\textcolor{Chapter }{EnlargedGabidulinCode}} \logpage{[ 5, 3, 2 ]}\nobreak \hyperdef{L}{X873950F67D4A9184}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{EnlargedGabidulinCode({\slshape m, w1, w2, e})\index{EnlargedGabidulinCode@\texttt{EnlargedGabidulinCode}} \label{EnlargedGabidulinCode} }\hfill{\scriptsize (function)}}\\ \texttt{EnlargedGabidulinCode} yields a code of length $7$. $2^{m-2}-2$, redundancy $2m$, minimum distance $3$ and covering radius $2$. \mbox{\texttt{\slshape w1}} and \mbox{\texttt{\slshape w2}} are elements of $GF(2^{m-2})$. \mbox{\texttt{\slshape e}} is an element of $GF(2^m)$. } \index{code, Davydov} \subsection{\textcolor{Chapter }{DavydovCode}} \logpage{[ 5, 3, 3 ]}\nobreak \hyperdef{L}{X7F5BE77B7F343182}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DavydovCode({\slshape r, v, ei, ej})\index{DavydovCode@\texttt{DavydovCode}} \label{DavydovCode} }\hfill{\scriptsize (function)}}\\ \texttt{DavydovCode} yields a code of length $2^v + 2^{r-v} - 3$, redundancy \mbox{\texttt{\slshape r}}, minimum distance $4$ and covering radius $2$. \mbox{\texttt{\slshape v}} is an integer between $2$ and $r-2$. \mbox{\texttt{\slshape ei}} and \mbox{\texttt{\slshape ej}} are elements of $GF(2^v)$ and $GF(2^{r-v})$, respectively. } \index{code, Tombak} \subsection{\textcolor{Chapter }{TombakCode}} \logpage{[ 5, 3, 4 ]}\nobreak \hyperdef{L}{X845B4DBE83288D2D}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{TombakCode({\slshape m, e, beta, gamma, w1, w2})\index{TombakCode@\texttt{TombakCode}} \label{TombakCode} }\hfill{\scriptsize (function)}}\\ \texttt{TombakCode} yields a code of length $15 \cdot 2^{m-3} - 3$, redundancy $2m$, minimum distance $4$ and covering radius $2$. \mbox{\texttt{\slshape e}} is an element of $GF(2^m)$. \mbox{\texttt{\slshape beta}} and \mbox{\texttt{\slshape gamma}} are elements of $GF(2^{m-1})$. \mbox{\texttt{\slshape w1}} and \mbox{\texttt{\slshape w2}} are elements of $GF(2^{m-3})$. } \subsection{\textcolor{Chapter }{EnlargedTombakCode}} \logpage{[ 5, 3, 5 ]}\nobreak \hyperdef{L}{X7D6583347C0D4292}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{EnlargedTombakCode({\slshape m, e, beta, gamma, w1, w2, u})\index{EnlargedTombakCode@\texttt{EnlargedTombakCode}} \label{EnlargedTombakCode} }\hfill{\scriptsize (function)}}\\ \texttt{EnlargedTombakCode} yields a code of length $23 \cdot 2^{m-4} - 3$, redundancy $2m-1$, minimum distance $4$ and covering radius $2$. The parameters \mbox{\texttt{\slshape m}}, \mbox{\texttt{\slshape e}}, \mbox{\texttt{\slshape beta}}, \mbox{\texttt{\slshape gamma}}, \mbox{\texttt{\slshape w1}} and \mbox{\texttt{\slshape w2}} are defined as in \texttt{TombakCode}. \mbox{\texttt{\slshape u}} is an element of $GF(2^{m-1})$. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> GabidulinCode( 4, Z(4)^0, Z(4)^1 ); a linear [19,12,3]2 Gabidulin code (m=4) over GF(2) gap> EnlargedGabidulinCode( 4, Z(4)^0, Z(4)^1, Z(16)^11 ); a linear [26,18,3]2 enlarged Gabidulin code (m=4) over GF(2) gap> DavydovCode( 6, 3, Z(8)^1, Z(8)^5 ); a linear [13,7,4]2 Davydov code (r=6, v=3) over GF(2) gap> TombakCode( 5, Z(32)^6, Z(16)^14, Z(16)^10, Z(4)^0, Z(4)^1 ); a linear [57,47,4]2 Tombak code (m=5) over GF(2) gap> EnlargedTombakCode( 6, Z(32)^6, Z(16)^14, Z(16)^10, > Z(4)^0, Z(4)^0, Z(32)^23 ); a linear [89,78,4]2 enlarged Tombak code (m=6) over GF(2) \end{Verbatim} } \section{\textcolor{Chapter }{ Golay Codes }}\logpage{[ 5, 4, 0 ]} \hyperdef{L}{X81F6E4A785F368B0}{} { \label{Golay Codes} `` The Golay code is probably the most important of all codes for both practical and theoretical reasons. '' (\cite{MS83}, pg. 64). Though born in Switzerland, M. J. E. Golay (1902-1989) worked for the US Army Labs for most of his career. For more information on his life, see his obit in the June 1990 IEEE Information Society Newsletter. \index{code, Golay (binary)} \subsection{\textcolor{Chapter }{BinaryGolayCode}} \logpage{[ 5, 4, 1 ]}\nobreak \hyperdef{L}{X80ED89C079CD0D09}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BinaryGolayCode({\slshape })\index{BinaryGolayCode@\texttt{BinaryGolayCode}} \label{BinaryGolayCode} }\hfill{\scriptsize (function)}}\\ \texttt{BinaryGolayCode} returns a binary Golay code. This is a perfect $[23,12,7]$ code. It is also cyclic, and has generator polynomial $g(x)=1+x^2+x^4+x^5+x^6+x^{10}+x^{11}$. Extending it results in an extended Golay code (see \texttt{ExtendedBinaryGolayCode} (\ref{ExtendedBinaryGolayCode})). There's also the ternary Golay code (see \texttt{TernaryGolayCode} (\ref{TernaryGolayCode})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=BinaryGolayCode(); a cyclic [23,12,7]3 binary Golay code over GF(2) gap> ExtendedBinaryGolayCode() = ExtendedCode(BinaryGolayCode()); true gap> IsPerfectCode(C); true gap> IsCyclicCode(C); true \end{Verbatim} \subsection{\textcolor{Chapter }{ExtendedBinaryGolayCode}} \logpage{[ 5, 4, 2 ]}\nobreak \hyperdef{L}{X84520C7983538806}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ExtendedBinaryGolayCode({\slshape })\index{ExtendedBinaryGolayCode@\texttt{ExtendedBinaryGolayCode}} \label{ExtendedBinaryGolayCode} }\hfill{\scriptsize (function)}}\\ \texttt{ExtendedBinaryGolayCode} returns an extended binary Golay code. This is a $[24,12,8]$ code. Puncturing in the last position results in a perfect binary Golay code (see \texttt{BinaryGolayCode} (\ref{BinaryGolayCode})). The code is self-dual. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := ExtendedBinaryGolayCode(); a linear [24,12,8]4 extended binary Golay code over GF(2) gap> IsSelfDualCode(C); true gap> P := PuncturedCode(C); a linear [23,12,7]3 punctured code gap> P = BinaryGolayCode(); true gap> IsCyclicCode(C); false \end{Verbatim} \index{code, Golay (ternary)} \subsection{\textcolor{Chapter }{TernaryGolayCode}} \logpage{[ 5, 4, 3 ]}\nobreak \hyperdef{L}{X7E0CCCD7866ADB94}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{TernaryGolayCode({\slshape })\index{TernaryGolayCode@\texttt{TernaryGolayCode}} \label{TernaryGolayCode} }\hfill{\scriptsize (function)}}\\ \texttt{TernaryGolayCode} returns a ternary Golay code. This is a perfect $[11,6,5]$ code. It is also cyclic, and has generator polynomial $g(x)=2+x^2+2x^3+x^4+x^5$. Extending it results in an extended Golay code (see \texttt{ExtendedTernaryGolayCode} (\ref{ExtendedTernaryGolayCode})). There's also the binary Golay code (see \texttt{BinaryGolayCode} (\ref{BinaryGolayCode})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=TernaryGolayCode(); a cyclic [11,6,5]2 ternary Golay code over GF(3) gap> ExtendedTernaryGolayCode() = ExtendedCode(TernaryGolayCode()); true gap> IsCyclicCode(C); true \end{Verbatim} \subsection{\textcolor{Chapter }{ExtendedTernaryGolayCode}} \logpage{[ 5, 4, 4 ]}\nobreak \hyperdef{L}{X81088A66816BCAE4}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ExtendedTernaryGolayCode({\slshape })\index{ExtendedTernaryGolayCode@\texttt{ExtendedTernaryGolayCode}} \label{ExtendedTernaryGolayCode} }\hfill{\scriptsize (function)}}\\ \texttt{ExtendedTernaryGolayCode} returns an extended ternary Golay code. This is a $[12,6,6]$ code. Puncturing this code results in a perfect ternary Golay code (see \texttt{TernaryGolayCode} (\ref{TernaryGolayCode})). The code is self-dual. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := ExtendedTernaryGolayCode(); a linear [12,6,6]3 extended ternary Golay code over GF(3) gap> IsSelfDualCode(C); true gap> P := PuncturedCode(C); a linear [11,6,5]2 punctured code gap> P = TernaryGolayCode(); true gap> IsCyclicCode(C); false \end{Verbatim} } \section{\textcolor{Chapter }{ Generating Cyclic Codes }}\logpage{[ 5, 5, 0 ]} \hyperdef{L}{X8366CC3685F0BC85}{} { \label{Generating Cyclic Codes} The elements of a cyclic code $C$ are all multiples of a ('generator') polynomial $g(x)$, where calculations are carried out modulo $x^n-1$. Therefore, as polynomials in $x$, the elements always have degree less than $n$. A cyclic code is an ideal in the ring $F[x]/(x^n-1)$ of polynomials modulo $x^n - 1$. The unique monic polynomial of least degree that generates $C$ is called the \emph{generator polynomial} of $C$. It is a divisor of the polynomial $x^n-1$. \index{generator polynomial} \index{check polynomial} The \emph{check polynomial} is the polynomial $h(x)$ with $g(x)h(x)=x^n-1$. Therefore it is also a divisor of $x^n-1$. The check polynomial has the property that \[ c(x)h(x) \equiv 0 \pmod{x^n-1}, \] for every codeword $c(x)\in C$. The first two functions described below generate cyclic codes from a given generator or check polynomial. All cyclic codes can be constructed using these functions. Two of the Golay codes already described are cyclic (see \texttt{BinaryGolayCode} (\ref{BinaryGolayCode}) and \texttt{TernaryGolayCode} (\ref{TernaryGolayCode})). For example, the \textsf{GUAVA} record for a binary Golay code contains the generator polynomial: \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := BinaryGolayCode(); a cyclic [23,12,7]3 binary Golay code over GF(2) gap> NamesOfComponents(C); [ "LeftActingDomain", "GeneratorsOfLeftOperatorAdditiveGroup", "WordLength", "GeneratorMat", "GeneratorPol", "Dimension", "Redundancy", "Size", "name", "lowerBoundMinimumDistance", "upperBoundMinimumDistance", "WeightDistribution", "boundsCoveringRadius", "MinimumWeightOfGenerators", "UpperBoundOptimalMinimumDistance" ] gap> C!.GeneratorPol; x_1^11+x_1^10+x_1^6+x_1^5+x_1^4+x_1^2+Z(2)^0 \end{Verbatim} Then functions that generate cyclic codes from a prescribed set of roots of the generator polynomial are described, including the BCH codes (see \texttt{RootsCode} (\ref{RootsCode}), \texttt{BCHCode} (\ref{BCHCode}), \texttt{ReedSolomonCode} (\ref{ReedSolomonCode}) and \texttt{QRCode} (\ref{QRCode})). Finally we describe the trivial codes (see \texttt{WholeSpaceCode} (\ref{WholeSpaceCode}), \texttt{NullCode} (\ref{NullCode}), \texttt{RepetitionCode} (\ref{RepetitionCode})), and the command \texttt{CyclicCodes} which lists all cyclic codes (\texttt{CyclicCodes} (\ref{CyclicCodes})). \subsection{\textcolor{Chapter }{GeneratorPolCode}} \logpage{[ 5, 5, 1 ]}\nobreak \hyperdef{L}{X853D34A5796CEB73}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneratorPolCode({\slshape g, n[, name], F})\index{GeneratorPolCode@\texttt{GeneratorPolCode}} \label{GeneratorPolCode} }\hfill{\scriptsize (function)}}\\ \texttt{GeneratorPolCode} creates a cyclic code with a generator polynomial \mbox{\texttt{\slshape g}}, word length \mbox{\texttt{\slshape n}}, over \mbox{\texttt{\slshape F}}. \mbox{\texttt{\slshape name}} can contain a short description of the code. If \mbox{\texttt{\slshape g}} is not a divisor of $x^n-1$, it cannot be a generator polynomial. In that case, a code is created with generator polynomial $gcd( g, x^n-1 )$, i.e. the greatest common divisor of \mbox{\texttt{\slshape g}} and $x^n-1$. This is a valid generator polynomial that generates the ideal $(g)$. See \texttt{Generating Cyclic Codes} (\ref{Generating Cyclic Codes}). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> x:= Indeterminate( GF(2) );; P:= x^2+1; Z(2)^0+x^2 gap> C1 := GeneratorPolCode(P, 7, GF(2)); a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2) gap> GeneratorPol( C1 ); Z(2)^0+x gap> C2 := GeneratorPolCode( x+1, 7, GF(2)); a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2) gap> GeneratorPol( C2 ); Z(2)^0+x \end{Verbatim} \subsection{\textcolor{Chapter }{CheckPolCode}} \logpage{[ 5, 5, 2 ]}\nobreak \hyperdef{L}{X82440B78845F7F6E}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CheckPolCode({\slshape h, n[, name], F})\index{CheckPolCode@\texttt{CheckPolCode}} \label{CheckPolCode} }\hfill{\scriptsize (function)}}\\ \texttt{CheckPolCode} creates a cyclic code with a check polynomial \mbox{\texttt{\slshape h}}, word length \mbox{\texttt{\slshape n}}, over \mbox{\texttt{\slshape F}}. \mbox{\texttt{\slshape name}} can contain a short description of the code (as a string). If \mbox{\texttt{\slshape h}} is not a divisor of $x^n-1$, it cannot be a check polynomial. In that case, a code is created with check polynomial $gcd( h, x^n-1 )$, i.e. the greatest common divisor of \mbox{\texttt{\slshape h}} and $x^n-1$. This is a valid check polynomial that yields the same elements as the ideal $(h)$. See \ref{Generating Cyclic Codes}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> x:= Indeterminate( GF(3) );; P:= x^2+2; -Z(3)^0+x_1^2 gap> H := CheckPolCode(P, 7, GF(3)); a cyclic [7,1,7]4 code defined by check polynomial over GF(3) gap> CheckPol(H); -Z(3)^0+x_1 gap> Gcd(P, X(GF(3))^7-1); -Z(3)^0+x_1 \end{Verbatim} \subsection{\textcolor{Chapter }{RootsCode}} \logpage{[ 5, 5, 3 ]}\nobreak \hyperdef{L}{X818F0E6583E01D4B}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{RootsCode({\slshape n, list})\index{RootsCode@\texttt{RootsCode}} \label{RootsCode} }\hfill{\scriptsize (function)}}\\ This is the generalization of the BCH, Reed-Solomon and quadratic residue codes (see \texttt{BCHCode} (\ref{BCHCode}), \texttt{ReedSolomonCode} (\ref{ReedSolomonCode}) and \texttt{QRCode} (\ref{QRCode})). The user can give a length of the code \mbox{\texttt{\slshape n}} and a prescribed set of zeros. The argument \mbox{\texttt{\slshape list}} must be a valid list of primitive $n^{th}$ roots of unity in a splitting field $GF(q^m)$. The resulting code will be over the field $GF(q)$. The function will return the largest possible cyclic code for which the list \mbox{\texttt{\slshape list}} is a subset of the roots of the code. From this list, \textsf{GUAVA} calculates the entire set of roots. This command can also be called with the syntax \texttt{RootsCode( n, list, q )}. In this second form, the second argument is a list of integers, ranging from $0$ to $n-1$. The resulting code will be over a field $GF(q)$. \textsf{GUAVA} calculates a primitive $n^{th}$ root of unity, $\alpha$, in the extension field of $GF(q)$. It uses the set of the powers of $\alpha$ in the list as a prescribed set of zeros. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> a := PrimitiveUnityRoot( 3, 14 ); Z(3^6)^52 gap> C1 := RootsCode( 14, [ a^0, a, a^3 ] ); a cyclic [14,7,3..6]3..7 code defined by roots over GF(3) gap> MinimumDistance( C1 ); 4 gap> b := PrimitiveUnityRoot( 2, 15 ); Z(2^4) gap> C2 := RootsCode( 15, [ b, b^2, b^3, b^4 ] ); a cyclic [15,7,5]3..5 code defined by roots over GF(2) gap> C2 = BCHCode( 15, 5, GF(2) ); true C3 := RootsCode( 4, [ 1, 2 ], 5 ); RootsOfCode( C3 ); C3 = ReedSolomonCode( 4, 3 ); \end{Verbatim} \index{code, Bose-Chaudhuri-Hockenghem} \subsection{\textcolor{Chapter }{BCHCode}} \logpage{[ 5, 5, 4 ]}\nobreak \hyperdef{L}{X7C6BB07C87853C00}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BCHCode({\slshape n[, b], delta, F})\index{BCHCode@\texttt{BCHCode}} \label{BCHCode} }\hfill{\scriptsize (function)}}\\ The function \texttt{BCHCode} returns a 'Bose-Chaudhuri-Hockenghem code' (or \emph{BCH code} for short). This is the largest possible cyclic code of length \mbox{\texttt{\slshape n}} over field \mbox{\texttt{\slshape F}}, whose generator polynomial has zeros \[ a^{b},a^{b+1}, ..., a^{b+delta-2}, \] where $a$ is a primitive $n^{th}$ root of unity in the splitting field $GF(q^m)$, \mbox{\texttt{\slshape b}} is an integer $0\leq b\leq n-delta+1$ and $m$ is the multiplicative order of $q$ modulo \mbox{\texttt{\slshape n}}. (The integers $\{b,...,b+delta-2\}$ typically lie in the range $\{1,...,n-1\}$.) Default value for \mbox{\texttt{\slshape b}} is $1$, though the algorithm allows $b=0$. The length \mbox{\texttt{\slshape n}} of the code and the size $q$ of the field must be relatively prime. The generator polynomial is equal to the least common multiple of the minimal polynomials of \[ a^{b}, a^{b+1}, ..., a^{b+delta-2}. \] The set of zeroes of the generator polynomial is equal to the union of the sets \[ \{a^x\ |\ x \in C_k\}, \] where $C_k$ is the $k^{th}$ cyclotomic coset of $q$ modulo $n$ and $b\leq k\leq b+delta-2$ (see \texttt{CyclotomicCosets} (\ref{CyclotomicCosets})). Special cases are $b=1$ (resulting codes are called 'narrow-sense' BCH codes), and $n=q^m-1$ (known as 'primitive' BCH codes). \textsf{GUAVA} calculates the largest value of $d$ for which the BCH code with designed distance $d$ coincides with the BCH code with designed distance \mbox{\texttt{\slshape delta}}. This distance $d$ is called the \emph{Bose distance} of the code. The true minimum distance of the code is greater than or equal to the Bose distance. \index{Bose distance} Printed are the designed distance (to be precise, the Bose distance) $d$, and the starting power $b$. The Sugiyama decoding algorithm has been implemented for this code (see \texttt{Decode} (\ref{Decode})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := BCHCode( 15, 3, 5, GF(2) ); a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2) gap> DesignedDistance( C1 ); 7 gap> C2 := BCHCode( 23, 2, GF(2) ); a cyclic [23,12,5..7]3 BCH code, delta=5, b=1 over GF(2) gap> DesignedDistance( C2 ); 5 gap> MinimumDistance(C2); 7 \end{Verbatim} See \texttt{RootsCode} (\ref{RootsCode}) for a more general construction. \index{code, Reed-Solomon} \subsection{\textcolor{Chapter }{ReedSolomonCode}} \logpage{[ 5, 5, 5 ]}\nobreak \hyperdef{L}{X838F3CB3872CEF95}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ReedSolomonCode({\slshape n, d})\index{ReedSolomonCode@\texttt{ReedSolomonCode}} \label{ReedSolomonCode} }\hfill{\scriptsize (function)}}\\ \texttt{ReedSolomonCode} returns a 'Reed-Solomon code' of length \mbox{\texttt{\slshape n}}, designed distance \mbox{\texttt{\slshape d}}. This code is a primitive narrow-sense BCH code over the field $GF(q)$, where $q=n+1$. The dimension of an RS code is $n-d+1$. According to the Singleton bound (see \texttt{UpperBoundSingleton} (\ref{UpperBoundSingleton})) the dimension cannot be greater than this, so the true minimum distance of an RS code is equal to \mbox{\texttt{\slshape d}} and the code is maximum distance separable (see \texttt{IsMDSCode} (\ref{IsMDSCode})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := ReedSolomonCode( 3, 2 ); a cyclic [3,2,2]1 Reed-Solomon code over GF(4) gap> IsCyclicCode(C1); true gap> C2 := ReedSolomonCode( 4, 3 ); a cyclic [4,2,3]2 Reed-Solomon code over GF(5) gap> RootsOfCode( C2 ); [ Z(5), Z(5)^2 ] gap> IsMDSCode(C2); true \end{Verbatim} See \texttt{GeneralizedReedSolomonCode} (\ref{GeneralizedReedSolomonCode}) for a more general construction. \subsection{\textcolor{Chapter }{ExtendedReedSolomonCode}} \logpage{[ 5, 5, 6 ]}\nobreak \hyperdef{L}{X8730B90A862A3B3E}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ExtendedReedSolomonCode({\slshape n, d})\index{ExtendedReedSolomonCode@\texttt{ExtendedReedSolomonCode}} \label{ExtendedReedSolomonCode} }\hfill{\scriptsize (function)}}\\ \texttt{ExtendedReedSolomonCode} creates a Reed-Solomon code of length $n-1$ with designed distance $d-1$ and then returns the code which is extended by adding an overall parity-check symbol. The motivation for creating this function is calling \texttt{ExtendedCode} (\ref{ExtendedCode}) function over a Reed-Solomon code will take considerably long time. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := ExtendedReedSolomonCode(17, 13); a linear [17,5,13]9..12 extended Reed Solomon code over GF(17) gap> IsMDSCode(C); true \end{Verbatim} \subsection{\textcolor{Chapter }{QRCode}} \logpage{[ 5, 5, 7 ]}\nobreak \hyperdef{L}{X825F42F68179D2AB}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{QRCode({\slshape n, F})\index{QRCode@\texttt{QRCode}} \label{QRCode} }\hfill{\scriptsize (function)}}\\ \texttt{QRCode} returns a quadratic residue code. If \mbox{\texttt{\slshape F}} is a field $GF(q)$, then $q$ must be a quadratic residue modulo \mbox{\texttt{\slshape n}}. That is, an $x$ exists with $x^2 \equiv q \pmod n$. Both \mbox{\texttt{\slshape n}} and $q$ must be primes. Its generator polynomial is the product of the polynomials $x-a^i$. $a$ is a primitive $n^{th}$ root of unity, and $i$ is an integer in the set of quadratic residues modulo \mbox{\texttt{\slshape n}}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := QRCode( 7, GF(2) ); a cyclic [7,4,3]1 quadratic residue code over GF(2) gap> IsEquivalent( C1, HammingCode( 3, GF(2) ) ); true gap> IsCyclicCode(C1); true gap> IsCyclicCode(HammingCode( 3, GF(2) )); false gap> C2 := QRCode( 11, GF(3) ); a cyclic [11,6,4..5]2 quadratic residue code over GF(3) gap> C2 = TernaryGolayCode(); true gap> Q1 := QRCode( 7, GF(2)); a cyclic [7,4,3]1 quadratic residue code over GF(2) gap> P1:=AutomorphismGroup(Q1); IdGroup(P1); Group([ (1,2)(5,7), (2,3)(4,7), (2,4)(5,6), (3,5)(6,7), (3,7)(5,6) ]) [ 168, 42 ] \end{Verbatim} \subsection{\textcolor{Chapter }{QQRCodeNC}} \logpage{[ 5, 5, 8 ]}\nobreak \hyperdef{L}{X8764ABCF854C695E}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{QQRCodeNC({\slshape p})\index{QQRCodeNC@\texttt{QQRCodeNC}} \label{QQRCodeNC} }\hfill{\scriptsize (function)}}\\ \texttt{QQRCodeNC} is the same as \texttt{QQRCode}, except that it uses \texttt{GeneratorMatCodeNC} instead of \texttt{GeneratorMatCode}. } \subsection{\textcolor{Chapter }{QQRCode}} \logpage{[ 5, 5, 9 ]}\nobreak \hyperdef{L}{X7F4C3AD2795A8D7A}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{QQRCode({\slshape p})\index{QQRCode@\texttt{QQRCode}} \label{QQRCode} }\hfill{\scriptsize (function)}}\\ \texttt{QQRCode} returns a quasi-quadratic residue code, as defined by Proposition 2.2 in Bazzi-Mittel \cite{BM03}. The parameter \mbox{\texttt{\slshape p}} must be a prime. Its generator matrix has the block form $G=(Q,N)$. Here $Q$ is a $p\times $ circulant matrix whose top row is $(0,x_1,...,x_{p-1})$, where $x_i=1$ if and only if $i$ is a quadratic residue mod $p$, and $N$ is a $p\times $ circulant matrix whose top row is $(0,y_1,...,y_{p-1})$, where $x_i+y_i=1$ for all $i$. (In fact, this matrix can be recovered as the component \texttt{DoublyCirculant} of the code.) } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := QQRCode( 7); a linear [14,7,1..4]3..5 code defined by generator matrix over GF(2) gap> G1:=GeneratorMat(C1);; gap> Display(G1); . 1 1 . 1 . . . . . 1 . 1 1 1 . 1 1 1 . . . . 1 1 1 . 1 . . . 1 1 . 1 . 1 1 . . . 1 . . 1 . 1 1 1 1 . 1 . . 1 1 . . . . . . . 1 . . 1 1 1 . . . . . . . . . . 1 1 1 . 1 . . . . . . . . 1 . . 1 1 1 gap> Display(C1!.DoublyCirculant); . 1 1 . 1 . . . . . 1 . 1 1 1 1 . 1 . . . . . 1 . 1 1 . 1 . 1 . . . 1 . 1 . 1 1 . . . 1 . . . 1 1 1 . 1 1 . . . 1 . . . 1 1 . . 1 1 . . . 1 . . . 1 1 . 1 1 1 . . . 1 . . . 1 1 . 1 . 1 . . . 1 . 1 gap> MinimumDistance(C1); 4 gap> C2 := QQRCode( 29); MinimumDistance(C2); a linear [58,28,1..14]8..29 code defined by generator matrix over GF(2) 12 gap> Aut2:=AutomorphismGroup(C2); IdGroup(Aut2); [ permutation group of size 812 with 4 generators ] [ 812, 7 ] \end{Verbatim} \index{code, Fire} \subsection{\textcolor{Chapter }{FireCode}} \logpage{[ 5, 5, 10 ]}\nobreak \hyperdef{L}{X7F3B8CC8831DA0E4}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{FireCode({\slshape g, b})\index{FireCode@\texttt{FireCode}} \label{FireCode} }\hfill{\scriptsize (function)}}\\ \texttt{FireCode} constructs a (binary) Fire code. \mbox{\texttt{\slshape g}} is a primitive polynomial of degree $m$, and a factor of $x^r-1$. \mbox{\texttt{\slshape b}} an integer $0 \leq b \leq m$ not divisible by $r$, that determines the burst length of a single error burst that can be corrected. The argument \mbox{\texttt{\slshape g}} can be a polynomial with base ring $GF(2)$, or a list of coefficients in $GF(2)$. The generator polynomial of the code is defined as the product of \mbox{\texttt{\slshape g}} and $x^{2b-1}+1$. Here is the general definition of 'Fire code', named after P. Fire, who introduced these codes in 1959 in order to correct burst errors. First, a definition. If $F=GF(q)$ and $f\in F[x]$ then we say $f$ has \emph{order} $e$ if $f(x)|(x^e-1)$. \index{order of polynomial} A \emph{Fire code} is a cyclic code over $F$ with generator polynomial $g(x)= (x^{2t-1}-1)p(x)$, where $p(x)$ does not divide $x^{2t-1}-1$ and satisfies $deg(p(x))\geq t$. The length of such a code is the order of $g(x)$. Non-binary Fire codes have not been implemented. } . \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> x:= Indeterminate( GF(2) );; G:= x^3+x^2+1; Z(2)^0+x^2+x^3 gap> Factors( G ); [ Z(2)^0+x^2+x^3 ] gap> C := FireCode( G, 3 ); a cyclic [35,27,1..4]2..6 3 burst error correcting fire code over GF(2) gap> MinimumDistance( C ); 4 # Still it can correct bursts of length 3 \end{Verbatim} \subsection{\textcolor{Chapter }{WholeSpaceCode}} \logpage{[ 5, 5, 11 ]}\nobreak \hyperdef{L}{X7BC245E37EB7B23F}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{WholeSpaceCode({\slshape n, F})\index{WholeSpaceCode@\texttt{WholeSpaceCode}} \label{WholeSpaceCode} }\hfill{\scriptsize (function)}}\\ \texttt{WholeSpaceCode} returns the cyclic whole space code of length \mbox{\texttt{\slshape n}} over \mbox{\texttt{\slshape F}}. This code consists of all polynomials of degree less than \mbox{\texttt{\slshape n}} and coefficients in \mbox{\texttt{\slshape F}}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := WholeSpaceCode( 5, GF(3) ); a cyclic [5,5,1]0 whole space code over GF(3) \end{Verbatim} \subsection{\textcolor{Chapter }{NullCode}} \logpage{[ 5, 5, 12 ]}\nobreak \hyperdef{L}{X7B4EF2017B2C61AD}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{NullCode({\slshape n, F})\index{NullCode@\texttt{NullCode}} \label{NullCode} }\hfill{\scriptsize (function)}}\\ \texttt{NullCode} returns the zero-dimensional nullcode with length \mbox{\texttt{\slshape n}} over \mbox{\texttt{\slshape F}}. This code has only one word: the all zero word. It is cyclic though! } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := NullCode( 5, GF(3) ); a cyclic [5,0,5]5 nullcode over GF(3) gap> AsSSortedList( C ); [ [ 0 0 0 0 0 ] ] \end{Verbatim} \subsection{\textcolor{Chapter }{RepetitionCode}} \logpage{[ 5, 5, 13 ]}\nobreak \hyperdef{L}{X83C5F8FE7827EAA7}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{RepetitionCode({\slshape n, F})\index{RepetitionCode@\texttt{RepetitionCode}} \label{RepetitionCode} }\hfill{\scriptsize (function)}}\\ \texttt{RepetitionCode} returns the cyclic repetition code of length \mbox{\texttt{\slshape n}} over \mbox{\texttt{\slshape F}}. The code has as many elements as \mbox{\texttt{\slshape F}}, because each codeword consists of a repetition of one of these elements. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := RepetitionCode( 3, GF(5) ); a cyclic [3,1,3]2 repetition code over GF(5) gap> AsSSortedList( C ); [ [ 0 0 0 ], [ 1 1 1 ], [ 2 2 2 ], [ 4 4 4 ], [ 3 3 3 ] ] gap> IsPerfectCode( C ); false gap> IsMDSCode( C ); true \end{Verbatim} \subsection{\textcolor{Chapter }{CyclicCodes}} \logpage{[ 5, 5, 14 ]}\nobreak \hyperdef{L}{X82FA9F65854D98A6}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CyclicCodes({\slshape n, F})\index{CyclicCodes@\texttt{CyclicCodes}} \label{CyclicCodes} }\hfill{\scriptsize (function)}}\\ \texttt{CyclicCodes} returns a list of all cyclic codes of length \mbox{\texttt{\slshape n}} over \mbox{\texttt{\slshape F}}. It constructs all possible generator polynomials from the factors of $x^n-1$. Each combination of these factors yields a generator polynomial after multiplication. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> CyclicCodes(3,GF(3)); [ a cyclic [3,3,1]0 enumerated code over GF(3), a cyclic [3,2,1..2]1 enumerated code over GF(3), a cyclic [3,1,3]2 enumerated code over GF(3), a cyclic [3,0,3]3 enumerated code over GF(3) ] \end{Verbatim} \subsection{\textcolor{Chapter }{NrCyclicCodes}} \logpage{[ 5, 5, 15 ]}\nobreak \hyperdef{L}{X8263CE4A790D294A}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{NrCyclicCodes({\slshape n, F})\index{NrCyclicCodes@\texttt{NrCyclicCodes}} \label{NrCyclicCodes} }\hfill{\scriptsize (function)}}\\ The function \texttt{NrCyclicCodes} calculates the number of cyclic codes of length \mbox{\texttt{\slshape n}} over field \mbox{\texttt{\slshape F}}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> NrCyclicCodes( 23, GF(2) ); 8 gap> codelist := CyclicCodes( 23, GF(2) ); [ a cyclic [23,23,1]0 enumerated code over GF(2), a cyclic [23,22,1..2]1 enumerated code over GF(2), a cyclic [23,11,1..8]4..7 enumerated code over GF(2), a cyclic [23,0,23]23 enumerated code over GF(2), a cyclic [23,11,1..8]4..7 enumerated code over GF(2), a cyclic [23,12,1..7]3 enumerated code over GF(2), a cyclic [23,1,23]11 enumerated code over GF(2), a cyclic [23,12,1..7]3 enumerated code over GF(2) ] gap> BinaryGolayCode() in codelist; true gap> RepetitionCode( 23, GF(2) ) in codelist; true gap> CordaroWagnerCode( 23 ) in codelist; false # This code is not cyclic \end{Verbatim} \subsection{\textcolor{Chapter }{QuasiCyclicCode}} \logpage{[ 5, 5, 16 ]}\nobreak \hyperdef{L}{X79826B16785E8BD3}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{QuasiCyclicCode({\slshape G, s, F})\index{QuasiCyclicCode@\texttt{QuasiCyclicCode}} \label{QuasiCyclicCode} }\hfill{\scriptsize (function)}}\\ \texttt{QuasiCyclicCode( G, k, F )} generates a rate $1/m$ quasi-cyclic code over field \mbox{\texttt{\slshape F}}. The input \mbox{\texttt{\slshape G}} is a list of univariate polynomials and $m$ is the cardinality of this list. Note that $m$ must be at least $2$. The input \mbox{\texttt{\slshape s}} is the size of each circulant and it may not necessarily be the same as the code dimension $k$, i.e. $k \le s$. There also exists another version, \texttt{QuasiCyclicCode( G, s )} which produces quasi-cyclic codes over $F_2$ only. Here the parameter \mbox{\texttt{\slshape s}} holds the same definition and the input \mbox{\texttt{\slshape G}} is a list of integers, where each integer is an octal representation of a binary univariate polynomial. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> # gap> # This example show the case for k = s gap> # gap> L1 := PolyCodeword( Codeword("10000000000", GF(4)) ); Z(2)^0 gap> L2 := PolyCodeword( Codeword("12223201000", GF(4)) ); x^7+Z(2^2)*x^5+Z(2^2)^2*x^4+Z(2^2)*x^3+Z(2^2)*x^2+Z(2^2)*x+Z(2)^0 gap> L3 := PolyCodeword( Codeword("31111220110", GF(4)) ); x^9+x^8+Z(2^2)*x^6+Z(2^2)*x^5+x^4+x^3+x^2+x+Z(2^2)^2 gap> L4 := PolyCodeword( Codeword("13320333010", GF(4)) ); x^9+Z(2^2)^2*x^7+Z(2^2)^2*x^6+Z(2^2)^2*x^5+Z(2^2)*x^3+Z(2^2)^2*x^2+Z(2^2)^2*x+\ Z(2)^0 gap> L5 := PolyCodeword( Codeword("20102211100", GF(4)) ); x^8+x^7+x^6+Z(2^2)*x^5+Z(2^2)*x^4+x^2+Z(2^2) gap> C := QuasiCyclicCode( [L1, L2, L3, L4, L5], 11, GF(4) ); a linear [55,11,1..32]24..41 quasi-cyclic code over GF(4) gap> MinimumDistance(C); 29 gap> Display(C); a linear [55,11,29]24..41 quasi-cyclic code over GF(4) gap> # gap> # This example show the case for k < s gap> # gap> L1 := PolyCodeword( Codeword("02212201220120211002000",GF(3)) ); -x^19+x^16+x^15-x^14-x^12+x^11-x^9-x^8+x^7-x^5-x^4+x^3-x^2-x gap> L2 := PolyCodeword( Codeword("00221100200120220001110",GF(3)) ); x^21+x^20+x^19-x^15-x^14-x^12+x^11-x^8+x^5+x^4-x^3-x^2 gap> L3 := PolyCodeword( Codeword("22021011202221111020021",GF(3)) ); x^22-x^21-x^18+x^16+x^15+x^14+x^13-x^12-x^11-x^10-x^8+x^7+x^6+x^4-x^3-x-Z(3)^0 gap> C := QuasiCyclicCode( [L1, L2, L3], 23, GF(3) ); a linear [69,12,1..37]27..46 quasi-cyclic code over GF(3) gap> MinimumDistance(C); 34 gap> Display(C); a linear [69,12,34]27..46 quasi-cyclic code over GF(3) gap> # gap> # This example show the binary case using octal representation gap> # gap> L1 := 001;; # 0 000 001 gap> L2 := 013;; # 0 001 011 gap> L3 := 015;; # 0 001 101 gap> L4 := 077;; # 0 111 111 gap> C := QuasiCyclicCode( [L1, L2, L3, L4], 7 ); a linear [28,7,1..12]8..14 quasi-cyclic code over GF(2) gap> MinimumDistance(C); 12 gap> Display(C); a linear [28,7,12]8..14 quasi-cyclic code over GF(2) \end{Verbatim} \subsection{\textcolor{Chapter }{CyclicMDSCode}} \logpage{[ 5, 5, 17 ]}\nobreak \hyperdef{L}{X7BFEDA52835A601D}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CyclicMDSCode({\slshape q, m, k})\index{CyclicMDSCode@\texttt{CyclicMDSCode}} \label{CyclicMDSCode} }\hfill{\scriptsize (function)}}\\ Given the input parameters \mbox{\texttt{\slshape q}}, \mbox{\texttt{\slshape m}} and \mbox{\texttt{\slshape k}}, this function returns a $[q^m + 1, k, q^m - k + 2]$ cyclic MDS code over GF($q^m$). If $q^m$ is even, any value of $k$ can be used, otherwise only odd value of $k$ is accepted. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=CyclicMDSCode(2,6,24); a cyclic [65,24,42]31..41 MDS code over GF(64) gap> IsMDSCode(C); true gap> C:=CyclicMDSCode(5,3,77); a cyclic [126,77,50]35..49 MDS code over GF(125) gap> IsMDSCode(C); true gap> C:=CyclicMDSCode(3,3,25); a cyclic [28,25,4]2..3 MDS code over GF(27) gap> GeneratorPol(C); x^3+Z(3^3)^7*x^2+Z(3^3)^20*x-Z(3)^0 gap> \end{Verbatim} \index{MDS} \index{cyclic} \subsection{\textcolor{Chapter }{FourNegacirculantSelfDualCode}} \logpage{[ 5, 5, 18 ]}\nobreak \hyperdef{L}{X7F40AF3B81C252DC}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{FourNegacirculantSelfDualCode({\slshape ax, bx, k})\index{FourNegacirculantSelfDualCode@\texttt{FourNegacirculantSelfDualCode}} \label{FourNegacirculantSelfDualCode} }\hfill{\scriptsize (function)}}\\ A four-negacirculant self-dual code has a generator matrix $G$ of the the following form \begin{verbatim} - - | | A | B | G = | I_2k |-----+-----| | | -B^T| A^T | - - \end{verbatim} where $AA^T + BB^T = -I_k$ and $A$, $B$ and their transposed are all $k \times k$ negacirculant matrices. The generator matrix $G$ returns a $[2k, k, d]_q$ self-dual code over GF($q$). For discussion on four-negacirculant self-dual codes, refer to \cite{HHKK07}. The input parameters \mbox{\texttt{\slshape ax}} and \mbox{\texttt{\slshape bx}} are the defining polynomials over GF($q$) of negacirculant matrices $A$ and $B$ respectively. The last parameter \mbox{\texttt{\slshape k}} is the dimension of the code. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> ax:=PolyCodeword(Codeword("1200200", GF(3))); -x_1^4-x_1+Z(3)^0 gap> bx:=PolyCodeword(Codeword("2020221", GF(3))); x_1^6-x_1^5-x_1^4-x_1^2-Z(3)^0 gap> C:=FourNegacirculantSelfDualCode(ax, bx, 14);; gap> MinimumDistance(C);; gap> CoveringRadius(C);; gap> IsSelfDualCode(C); true gap> Display(C); a linear [28,14,9]7 four-negacirculant self-dual code over GF(3) gap> Display( GeneratorMat(C) ); 1 . . . . . . . . . . . . . 1 2 . . 2 . . 2 . 2 . 2 2 1 . 1 . . . . . . . . . . . . . 1 2 . . 2 . 2 2 . 2 . 2 2 . . 1 . . . . . . . . . . . . . 1 2 . . 2 1 2 2 . 2 . 2 . . . 1 . . . . . . . . . . 1 . . 1 2 . . 1 1 2 2 . 2 . . . . . 1 . . . . . . . . . . 1 . . 1 2 . . 1 1 2 2 . 2 . . . . . 1 . . . . . . . . . . 1 . . 1 2 1 . 1 1 2 2 . . . . . . . 1 . . . . . . . 1 . . 1 . . 1 . 1 . 1 1 2 2 . . . . . . . 1 . . . . . . 1 1 2 2 . 2 . 1 . . 1 . . 1 . . . . . . . . 1 . . . . . . 1 1 2 2 . 2 2 1 . . 1 . . . . . . . . . . . 1 . . . . 1 . 1 1 2 2 . . 2 1 . . 1 . . . . . . . . . . . 1 . . . . 1 . 1 1 2 2 . . 2 1 . . 1 . . . . . . . . . . . 1 . . 1 . 1 . 1 1 2 2 . . 2 1 . . . . . . . . . . . . . . 1 . 1 1 . 1 . 1 1 . 2 . . 2 1 . . . . . . . . . . . . . . 1 2 1 1 . 1 . 1 . . 2 . . 2 1 gap> ax:=PolyCodeword(Codeword("013131000", GF(7))); x_1^5+Z(7)*x_1^4+x_1^3+Z(7)*x_1^2+x_1 gap> bx:=PolyCodeword(Codeword("425435030", GF(7))); Z(7)*x_1^7+Z(7)^5*x_1^5+Z(7)*x_1^4+Z(7)^4*x_1^3+Z(7)^5*x_1^2+Z(7)^2*x_1+Z(7)^4 gap> C:=FourNegacirculantSelfDualCodeNC(ax, bx, 18); a linear [36,18,1..13]0..36 four-negacirculant self-dual code over GF(7) gap> IsSelfDualCode(C); true \end{Verbatim} \index{self-dual} \subsection{\textcolor{Chapter }{FourNegacirculantSelfDualCodeNC}} \logpage{[ 5, 5, 19 ]}\nobreak \hyperdef{L}{X87137A257E761291}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{FourNegacirculantSelfDualCodeNC({\slshape ax, bx, k})\index{FourNegacirculantSelfDualCodeNC@\texttt{FourNegacirculantSelfDualCodeNC}} \label{FourNegacirculantSelfDualCodeNC} }\hfill{\scriptsize (function)}}\\ This function is the same as \texttt{FourNegacirculantSelfDualCode}, except this version is faster as it does not estimate the minimum distance and covering radius of the code. } } \section{\textcolor{Chapter }{ Evaluation Codes }}\logpage{[ 5, 6, 0 ]} \hyperdef{L}{X850A28C579137220}{} { \label{Evaluation Codes} \index{code, evaluation} \subsection{\textcolor{Chapter }{EvaluationCode}} \logpage{[ 5, 6, 1 ]}\nobreak \hyperdef{L}{X78E078567D19D433}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{EvaluationCode({\slshape P, L, R})\index{EvaluationCode@\texttt{EvaluationCode}} \label{EvaluationCode} }\hfill{\scriptsize (function)}}\\ Input: \mbox{\texttt{\slshape F}} is a finite field, \mbox{\texttt{\slshape L}} is a list of rational functions in $R=F[x_1,...,x_r]$, \mbox{\texttt{\slshape P}} is a list of $n$ points in $F^r$ at which all of the functions in \mbox{\texttt{\slshape L}} are defined. \\ Output: The 'evaluation code' $C$, which is the image of the evalation map \[ Eval_P:span(L)\rightarrow F^n, \] given by $f\longmapsto (f(p_1),...,f(p_n))$, where $P=\{p_1,...,p_n\}$ and $f \in L$. The generator matrix of $C$ is $G=(f_i(p_j))_{f_i\in L,p_j\in P}$. This command returns a "record" object \texttt{C} with several extra components (type \texttt{NamesOfComponents(C)} to see them all): \texttt{C!.EvaluationMat} (not the same as the generator matrix in general), \texttt{C!.points} (namely \mbox{\texttt{\slshape P}}), \texttt{C!.basis} (namely \mbox{\texttt{\slshape L}}), and \texttt{C!.ring} (namely \mbox{\texttt{\slshape R}}). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> F:=GF(11); GF(11) gap> R := PolynomialRing(F,2);; gap> indets := IndeterminatesOfPolynomialRing(R);; gap> x:=indets[1];; y:=indets[2];; gap> L:=[x^2*y,x*y,x^5,x^4,x^3,x^2,x,x^0];; gap> Pts:=[ [ Z(11)^9, Z(11) ], [ Z(11)^8, Z(11) ], [ Z(11)^7, 0*Z(11) ], [ Z(11)^6, 0*Z(11) ], [ Z(11)^5, 0*Z(11) ], [ Z(11)^4, 0*Z(11) ], [ Z(11)^3, Z(11) ], [ Z(11)^2, 0*Z(11) ], [ Z(11), 0*Z(11) ], [ Z(11)^0, 0*Z(11) ], [ 0*Z(11), Z(11) ] ];; gap> C:=EvaluationCode(Pts,L,R); a linear [11,8,1..3]2..3 evaluation code over GF(11) gap> MinimumDistance(C); 3 \end{Verbatim} \subsection{\textcolor{Chapter }{GeneralizedReedSolomonCode}} \logpage{[ 5, 6, 2 ]}\nobreak \hyperdef{L}{X810AB3DB844FFCE9}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneralizedReedSolomonCode({\slshape P, k, R})\index{GeneralizedReedSolomonCode@\texttt{GeneralizedReedSolomonCode}} \label{GeneralizedReedSolomonCode} }\hfill{\scriptsize (function)}}\\ Input: R=F[x], where \mbox{\texttt{\slshape F}} is a finite field, \mbox{\texttt{\slshape k}} is a positive integer, \mbox{\texttt{\slshape P}} is a list of $n$ points in $F$. \\ Output: The $C$ which is the image of the evaluation map \[ Eval_P:F[x]_k\rightarrow F^n, \] given by $f\longmapsto (f(p_1),...,f(p_n))$, where $P=\{p_1,...,p_n\}\subset F$ and $f$ ranges over the space $F[x]_k$ of all polynomials of degree less than $k$. This command returns a "record" object \texttt{C} with several extra components (type \texttt{NamesOfComponents(C)} to see them all): \texttt{C!.points} (namely \mbox{\texttt{\slshape P}}), \texttt{C!.degree} (namely \mbox{\texttt{\slshape k}}), and \texttt{C!.ring} (namely \mbox{\texttt{\slshape R}}). This code can be decoded using \texttt{Decodeword}, which applies the special decoder method (the interpolation method), or using \texttt{GeneralizedReedSolomonDecoderGao} which applies an algorithm of S. Gao (see \texttt{GeneralizedReedSolomonDecoderGao} (\ref{GeneralizedReedSolomonDecoderGao})). This code has a special decoder record which implements the interpolation algorithm described in section 5.2 of Justesen and Hoholdt \cite{JH04}. See \texttt{Decode} (\ref{Decode}) and \texttt{Decodeword} (\ref{Decodeword}) for more details. The weighted version has implemented with the option \texttt{GeneralizedReedSolomonCode(P,k,R,wts)}, where $wts = [v_1, ..., v_n]$ is a sequence of $n$ non-zero elements from the base field $F$ of \mbox{\texttt{\slshape R}}. See also the generalized Reed--Solomon code $GRS_k(P, V)$ described in \cite{MS83}, p.303. The list-decoding algorithm of Sudan-Guraswami (described in section 12.1 of \cite{JH04}) has been implemented for generalized Reed-Solomon codes. See \texttt{GeneralizedReedSolomonListDecoder} (\ref{GeneralizedReedSolomonListDecoder}). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> R:=PolynomialRing(GF(11),["t"]); GF(11)[t] gap> P:=List([1,3,4,5,7],i->Z(11)^i); [ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ] gap> C:=GeneralizedReedSolomonCode(P,3,R); a linear [5,3,1..3]2 generalized Reed-Solomon code over GF(11) gap> MinimumDistance(C); 3 gap> V:=[Z(11)^0,Z(11)^0,Z(11)^0,Z(11)^0,Z(11)]; [ Z(11)^0, Z(11)^0, Z(11)^0, Z(11)^0, Z(11) ] gap> C:=GeneralizedReedSolomonCode(P,3,R,V); a linear [5,3,1..3]2 weighted generalized Reed-Solomon code over GF(11) gap> MinimumDistance(C); 3 \end{Verbatim} See \texttt{EvaluationCode} (\ref{EvaluationCode}) for a more general construction. \subsection{\textcolor{Chapter }{GeneralizedReedMullerCode}} \logpage{[ 5, 6, 3 ]}\nobreak \hyperdef{L}{X85B8699680B9D786}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneralizedReedMullerCode({\slshape Pts, r, F})\index{GeneralizedReedMullerCode@\texttt{GeneralizedReedMullerCode}} \label{GeneralizedReedMullerCode} }\hfill{\scriptsize (function)}}\\ \texttt{GeneralizedReedMullerCode} returns a 'Reed-Muller code' $C$ with length $|Pts|$ and order $r$. One considers (a) a basis of monomials for the vector space over $F=GF(q)$ of all polynomials in $F[x_1,...,x_d]$ of degree at most $r$, and (b) a set $Pts$ of points in $F^d$. The generator matrix of the associated \emph{Reed-Muller code} $C$ is $G=(f(p))_{f\in B,p \in Pts}$. This code $C$ is constructed using the command \texttt{GeneralizedReedMullerCode(Pts,r,F)}. When $Pts$ is the set of all $q^d$ points in $F^d$ then the command \texttt{GeneralizedReedMuller(d,r,F)} yields the code. When $Pts$ is the set of all $(q-1)^d$ points with no coordinate equal to $0$ then this is can be constructed using the \texttt{ToricCode} command (as a special case). This command returns a "record" object \texttt{C} with several extra components (type \texttt{NamesOfComponents(C)} to see them all): \texttt{C!.points} (namely \mbox{\texttt{\slshape Pts}}) and \texttt{C!.degree} (namely \mbox{\texttt{\slshape r}}). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> Pts:=ToricPoints(2,GF(5)); [ [ Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5) ], [ Z(5)^0, Z(5)^2 ], [ Z(5)^0, Z(5)^3 ], [ Z(5), Z(5)^0 ], [ Z(5), Z(5) ], [ Z(5), Z(5)^2 ], [ Z(5), Z(5)^3 ], [ Z(5)^2, Z(5)^0 ], [ Z(5)^2, Z(5) ], [ Z(5)^2, Z(5)^2 ], [ Z(5)^2, Z(5)^3 ], [ Z(5)^3, Z(5)^0 ], [ Z(5)^3, Z(5) ], [ Z(5)^3, Z(5)^2 ], [ Z(5)^3, Z(5)^3 ] ] gap> C:=GeneralizedReedMullerCode(Pts,2,GF(5)); a linear [16,6,1..11]6..10 generalized Reed-Muller code over GF(5) \end{Verbatim} See \texttt{EvaluationCode} (\ref{EvaluationCode}) for a more general construction. \subsection{\textcolor{Chapter }{ToricPoints}} \logpage{[ 5, 6, 4 ]}\nobreak \hyperdef{L}{X7EE68B58872D7E82}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ToricPoints({\slshape n, F})\index{ToricPoints@\texttt{ToricPoints}} \label{ToricPoints} }\hfill{\scriptsize (function)}}\\ \texttt{ToricPoints(n,F)} returns the points in $(F^{\times})^n$. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> ToricPoints(2,GF(5)); [ [ Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5) ], [ Z(5)^0, Z(5)^2 ], [ Z(5)^0, Z(5)^3 ], [ Z(5), Z(5)^0 ], [ Z(5), Z(5) ], [ Z(5), Z(5)^2 ], [ Z(5), Z(5)^3 ], [ Z(5)^2, Z(5)^0 ], [ Z(5)^2, Z(5) ], [ Z(5)^2, Z(5)^2 ], [ Z(5)^2, Z(5)^3 ], [ Z(5)^3, Z(5)^0 ], [ Z(5)^3, Z(5) ], [ Z(5)^3, Z(5)^2 ], [ Z(5)^3, Z(5)^3 ] ] \end{Verbatim} \index{code, toric} \subsection{\textcolor{Chapter }{ToricCode}} \logpage{[ 5, 6, 5 ]}\nobreak \hyperdef{L}{X7B24BE418010F596}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ToricCode({\slshape L, F})\index{ToricCode@\texttt{ToricCode}} \label{ToricCode} }\hfill{\scriptsize (function)}}\\ This function returns the toric codes as in D. Joyner \cite{Jo04} (see also J. P. Hansen \cite{Han99}). This is a truncated (generalized) Reed-Muller code. Here \mbox{\texttt{\slshape L}} is a list of integral vectors and \mbox{\texttt{\slshape F}} is the finite field. The size of \mbox{\texttt{\slshape F}} must be different from $2$. This command returns a record object \texttt{C} with an extra component (type \texttt{NamesOfComponents(C)} to see them all): \texttt{C!.exponents} (namely \mbox{\texttt{\slshape L}}). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=ToricCode([[1,0],[3,4]],GF(3)); a linear [4,1,4]2 toric code over GF(3) gap> Display(GeneratorMat(C)); 1 1 2 2 gap> Elements(C); [ [ 0 0 0 0 ], [ 1 1 2 2 ], [ 2 2 1 1 ] ] \end{Verbatim} See \texttt{EvaluationCode} (\ref{EvaluationCode}) for a more general construction. } \section{\textcolor{Chapter }{ Algebraic geometric codes }}\logpage{[ 5, 7, 0 ]} \hyperdef{L}{X7AE2B2CD7C647990}{} { \label{Algebraic geometric codes} \index{code, AG} Certain \textsf{GUAVA} functions related to algebraic geometric codes are described in this section. \subsection{\textcolor{Chapter }{AffineCurve}} \logpage{[ 5, 7, 1 ]}\nobreak \hyperdef{L}{X802DD9FB79A9ACA7}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{AffineCurve({\slshape poly, ring})\index{AffineCurve@\texttt{AffineCurve}} \label{AffineCurve} }\hfill{\scriptsize (function)}}\\ This function simply defines the data structure of an affine plane curve. In \textsf{GUAVA}, an affine curve is a record \mbox{\texttt{\slshape crv}} having two components: a polynomial \mbox{\texttt{\slshape poly}}, accessed in \textsf{GUAVA} by \mbox{\texttt{\slshape crv.polynomial}}, and a polynomial ring over a field $F$ in two variables \mbox{\texttt{\slshape ring}}, accessed in \textsf{GUAVA} by \mbox{\texttt{\slshape crv.ring}}, containing \mbox{\texttt{\slshape poly}}. You use this function to define a curve in \textsf{GUAVA}. For example, for the ring, one could take ${\mathbb{Q}}[x,y]$, and for the polynomial one could take $f(x,y)=x^2+y^2-1$. For the affine line, simply taking ${\mathbb{Q}}[x,y]$ for the ring and $f(x,y)=y$ for the polynomial. (Not sure if $F$ neeeds to be a field in fact ...) To compute its degree, simply use the \texttt{DegreeMultivariatePolynomial} (\ref{DegreeMultivariatePolynomial}) command. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> gap> F:=GF(11);; gap> R2:=PolynomialRing(F,2); PolynomialRing(..., [ x_1, x_2 ]) gap> vars:=IndeterminatesOfPolynomialRing(R2);; gap> x:=vars[1];; y:=vars[2];; gap> poly:=y;; crvP1:=AffineCurve(poly,R2); rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_2 ) gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2); 1 gap> poly:=y^2-x*(x^2-1);; ell_crv:=AffineCurve(poly,R2); rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := -x_1^3+x_2^2+x_1 ) gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2); 3 gap> poly:=x^2+y^2-1;; circle:=AffineCurve(poly,R2); rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_1^2+x_2^2-Z(11)^0 ) gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2); 2 gap> q:=3;; gap> F:=GF(q^2);; gap> R:=PolynomialRing(F,2);; gap> vars:=IndeterminatesOfPolynomialRing(R); [ x_1, x_2 ] gap> x:=vars[1]; x_1 gap> y:=vars[2]; x_2 gap> crv:=AffineCurve(y^q+y-x^(q+1),R); rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := -x_1^4+x_2^3+x_2 ) gap> \end{Verbatim} In GAP, a \emph{point} \index{point} on a curve defined by $f(x,y)=0$ is simply a list \mbox{\texttt{\slshape [a,b]}} of elements of $F$ satisfying this polynomial equation. \subsection{\textcolor{Chapter }{AffinePointsOnCurve}} \logpage{[ 5, 7, 2 ]}\nobreak \hyperdef{L}{X857EFE567C05C981}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{AffinePointsOnCurve({\slshape f, R, E})\index{AffinePointsOnCurve@\texttt{AffinePointsOnCurve}} \label{AffinePointsOnCurve} }\hfill{\scriptsize (function)}}\\ \texttt{AffinePointsOnCurve(f,R,E)} returns the points $(x,y) \in E^2$ satisying $f(x,y)=0$, where \mbox{\texttt{\slshape f}} is an element of $R=F[x,y]$. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> F:=GF(11);; gap> R := PolynomialRing(F,["x","y"]); PolynomialRing(..., [ x, y ]) gap> indets := IndeterminatesOfPolynomialRing(R);; gap> x:=indets[1];; y:=indets[2];; gap> P:=AffinePointsOnCurve(y^2-x^11+x,R,F); [ [ Z(11)^9, 0*Z(11) ], [ Z(11)^8, 0*Z(11) ], [ Z(11)^7, 0*Z(11) ], [ Z(11)^6, 0*Z(11) ], [ Z(11)^5, 0*Z(11) ], [ Z(11)^4, 0*Z(11) ], [ Z(11)^3, 0*Z(11) ], [ Z(11)^2, 0*Z(11) ], [ Z(11), 0*Z(11) ], [ Z(11)^0, 0*Z(11) ], [ 0*Z(11), 0*Z(11) ] ] \end{Verbatim} \subsection{\textcolor{Chapter }{GenusCurve}} \logpage{[ 5, 7, 3 ]}\nobreak \hyperdef{L}{X857E36ED814A40B8}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GenusCurve({\slshape crv})\index{GenusCurve@\texttt{GenusCurve}} \label{GenusCurve} }\hfill{\scriptsize (function)}}\\ If \mbox{\texttt{\slshape crv}} represents $f(x,y)=0$, where $f$ is a polynomial of degree $d$, then this function simply returns $(d-1)(d-2)/2$. At the present, the function does not check if the curve is singular (in which case the result may be false). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> q:=4;; gap> F:=GF(q^2);; gap> a:=X(F);; gap> R1:=PolynomialRing(F,[a]);; gap> var1:=IndeterminatesOfPolynomialRing(R1);; gap> b:=X(F);; gap> R2:=PolynomialRing(F,[a,b]);; gap> var2:=IndeterminatesOfPolynomialRing(R2);; gap> crv:=AffineCurve(b^q+b-a^(q+1),R2);; gap> crv:=AffineCurve(b^q+b-a^(q+1),R2); rec( ring := PolynomialRing(..., [ x_1, x_1 ]), polynomial := x_1^5+x_1^4+x_1 ) gap> GenusCurve(crv); 36 \end{Verbatim} \subsection{\textcolor{Chapter }{GOrbitPoint }} \logpage{[ 5, 7, 4 ]}\nobreak \hyperdef{L}{X8572A3037DA66F88}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GOrbitPoint ({\slshape GP})\index{GOrbitPoint @\texttt{GOrbitPoint }} \label{GOrbitPoint } }\hfill{\scriptsize (function)}}\\ \mbox{\texttt{\slshape P}} must be a point in projective space $\mathbb{P}^n(F)$, \mbox{\texttt{\slshape G}} must be a finite subgroup of $GL(n+1,F)$, This function returns all (representatives of projective) points in the orbit $G\cdot P$. The example below computes the orbit of the automorphism group on the Klein quartic over the field $GF(43)$ on the ``point at infinity''. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> R:= PolynomialRing( GF(43), 3 );; gap> vars:= IndeterminatesOfPolynomialRing(R);; gap> x:= vars[1];; y:= vars[2];; z:= vars[3];; gap> zz:=Z(43)^6; Z(43)^6 gap> zzz:=Z(43); Z(43) gap> rho1:=zz^0*[[zz^4,0,0],[0,zz^2,0],[0,0,zz]]; [ [ Z(43)^24, 0*Z(43), 0*Z(43) ], [ 0*Z(43), Z(43)^12, 0*Z(43) ], [ 0*Z(43), 0*Z(43), Z(43)^6 ] ] gap> rho2:=zz^0*[[0,1,0],[0,0,1],[1,0,0]]; [ [ 0*Z(43), Z(43)^0, 0*Z(43) ], [ 0*Z(43), 0*Z(43), Z(43)^0 ], [ Z(43)^0, 0*Z(43), 0*Z(43) ] ] gap> rho3:=(-1)*[[(zz-zz^6 )/zzz^7,( zz^2-zz^5 )/ zzz^7, ( zz^4-zz^3 )/ zzz^7], > [( zz^2-zz^5 )/ zzz^7, ( zz^4-zz^3 )/ zzz^7, ( zz-zz^6 )/ zzz^7], > [( zz^4-zz^3 )/ zzz^7, ( zz-zz^6 )/ zzz^7, ( zz^2-zz^5 )/ zzz^7]]; [ [ Z(43)^9, Z(43)^28, Z(43)^12 ], [ Z(43)^28, Z(43)^12, Z(43)^9 ], [ Z(43)^12, Z(43)^9, Z(43)^28 ] ] gap> G:=Group([rho1,rho2,rho3]);; #PSL(2,7) gap> Size(G); 168 gap> P:=[1,0,0]*zzz^0; [ Z(43)^0, 0*Z(43), 0*Z(43) ] gap> O:=GOrbitPoint(G,P); [ [ Z(43)^0, 0*Z(43), 0*Z(43) ], [ 0*Z(43), Z(43)^0, 0*Z(43) ], [ 0*Z(43), 0*Z(43), Z(43)^0 ], [ Z(43)^0, Z(43)^39, Z(43)^16 ], [ Z(43)^0, Z(43)^33, Z(43)^28 ], [ Z(43)^0, Z(43)^27, Z(43)^40 ], [ Z(43)^0, Z(43)^21, Z(43)^10 ], [ Z(43)^0, Z(43)^15, Z(43)^22 ], [ Z(43)^0, Z(43)^9, Z(43)^34 ], [ Z(43)^0, Z(43)^3, Z(43)^4 ], [ Z(43)^3, Z(43)^22, Z(43)^6 ], [ Z(43)^3, Z(43)^16, Z(43)^18 ], [ Z(43)^3, Z(43)^10, Z(43)^30 ], [ Z(43)^3, Z(43)^4, Z(43)^0 ], [ Z(43)^3, Z(43)^40, Z(43)^12 ], [ Z(43)^3, Z(43)^34, Z(43)^24 ], [ Z(43)^3, Z(43)^28, Z(43)^36 ], [ Z(43)^4, Z(43)^30, Z(43)^27 ], [ Z(43)^4, Z(43)^24, Z(43)^39 ], [ Z(43)^4, Z(43)^18, Z(43)^9 ], [ Z(43)^4, Z(43)^12, Z(43)^21 ], [ Z(43)^4, Z(43)^6, Z(43)^33 ], [ Z(43)^4, Z(43)^0, Z(43)^3 ], [ Z(43)^4, Z(43)^36, Z(43)^15 ] ] gap> Length(O); 24 \end{Verbatim} Informally, a \emph{divisor} \index{divisor} on a curve is a formal integer linear combination of points on the curve, $D=m_1P_1+...+m_kP_k$, where the $m_i$ are integers (the ``multiplicity'' of $P_i$ in $D$) and $P_i$ are ($F$-rational) points on the affine plane curve. In other words, a divisor is an element of the free abelian group generated by the $F$-rational affine points on the curve. The \emph{support} \index{support} of a divisor $D$ is simply the set of points which occurs in the sum defining $D$ with non-zero ``multiplicity''. The data structure for a divisor on an affine plane curve is a record having the following components: \begin{itemize} \item the coefficients (the integer weights of the points in the support), \item the support, \item the curve, itself a record which has components: polynomial and polynomial ring. \end{itemize} \subsection{\textcolor{Chapter }{DivisorOnAffineCurve}} \logpage{[ 5, 7, 5 ]}\nobreak \hyperdef{L}{X79742B7183051D99}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DivisorOnAffineCurve({\slshape cdivsdivcrv})\index{DivisorOnAffineCurve@\texttt{DivisorOnAffineCurve}} \label{DivisorOnAffineCurve} }\hfill{\scriptsize (function)}}\\ This is the command you use to define a divisor in \textsf{GUAVA}. Of course, \mbox{\texttt{\slshape crv}} is the curve on which the divisor lives, \mbox{\texttt{\slshape cdiv}} is the list of coefficients (or ``multiplicities''), \mbox{\texttt{\slshape sdiv}} is the list of points on \mbox{\texttt{\slshape crv}} in the support. \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> q:=5; 5 gap> F:=GF(q); GF(5) gap> R:=PolynomialRing(F,2);; gap> vars:=IndeterminatesOfPolynomialRing(R); [ x_1, x_2 ] gap> x:=vars[1]; x_1 gap> y:=vars[2]; x_2 gap> crv:=AffineCurve(y^3-x^3-x-1,R); rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := -x_1^3+x_2^3-x_1-Z(5)^0 ) gap> Pts:=AffinePointsOnCurve(crv,R,F);; gap> supp:=[Pts[1],Pts[2]]; [ [ 0*Z(5), Z(5)^0 ], [ Z(5)^0, Z(5) ] ] gap> D:=DivisorOnAffineCurve([1,-1],supp,crv); rec( coeffs := [ 1, -1 ], support := [ [ 0*Z(5), Z(5)^0 ], [ Z(5)^0, Z(5) ] ], curve := rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := -x_1^3+x_2^3-x_1-Z(5)^0 ) ) \end{Verbatim} } \subsection{\textcolor{Chapter }{DivisorAddition }} \logpage{[ 5, 7, 6 ]}\nobreak \hyperdef{L}{X8626E2B57D01F2DC}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DivisorAddition ({\slshape D1D2})\index{DivisorAddition @\texttt{DivisorAddition }} \label{DivisorAddition } }\hfill{\scriptsize (function)}}\\ If $D_1=m_1P_1+...+m_kP_k$ and $D_2=n_1P_1+...+n_kP_k$ are divisors then $D_1+D_2=(m_1+n_1)P_1+...+(m_k+n_k)P_k$. } \subsection{\textcolor{Chapter }{DivisorDegree }} \logpage{[ 5, 7, 7 ]}\nobreak \hyperdef{L}{X865FE28D828C1EAD}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DivisorDegree ({\slshape D})\index{DivisorDegree @\texttt{DivisorDegree }} \label{DivisorDegree } }\hfill{\scriptsize (function)}}\\ If $D=m_1P_1+...+m_kP_k$ is a divisor then the \emph{degree} \index{degree} is $m_1+...+m_k$. } \subsection{\textcolor{Chapter }{DivisorNegate }} \logpage{[ 5, 7, 8 ]}\nobreak \hyperdef{L}{X789DC358819A8F54}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DivisorNegate ({\slshape D})\index{DivisorNegate @\texttt{DivisorNegate }} \label{DivisorNegate } }\hfill{\scriptsize (function)}}\\ Self-explanatory. } \subsection{\textcolor{Chapter }{DivisorIsZero }} \logpage{[ 5, 7, 9 ]}\nobreak \hyperdef{L}{X8688C0E187B5C7DB}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DivisorIsZero ({\slshape D})\index{DivisorIsZero @\texttt{DivisorIsZero }} \label{DivisorIsZero } }\hfill{\scriptsize (function)}}\\ Self-explanatory. } \subsection{\textcolor{Chapter }{DivisorsEqual }} \logpage{[ 5, 7, 10 ]}\nobreak \hyperdef{L}{X816A07997D9A7075}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DivisorsEqual ({\slshape D1D2})\index{DivisorsEqual @\texttt{DivisorsEqual }} \label{DivisorsEqual } }\hfill{\scriptsize (function)}}\\ Self-explanatory. } \subsection{\textcolor{Chapter }{DivisorGCD }} \logpage{[ 5, 7, 11 ]}\nobreak \hyperdef{L}{X857B89847A649A26}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DivisorGCD ({\slshape D1D2})\index{DivisorGCD @\texttt{DivisorGCD }} \label{DivisorGCD } }\hfill{\scriptsize (function)}}\\ If $m=p_1^{e_1}...p_k^{e_k}$ and $n=p_1^{f_1}...p_k^{f_k}$ are two integers then their greatest common divisor is $GCD(m,n)=p_1^{min(e_1,f_1)}...p_k^{min(e_k,f_k)}$. A similar definition works for two divisors on a curve. If $D_1=e_1P_1+...+e_kP_k$ and $D_2n=f_1P_1+...+f_kP_k$ are two divisors on a curve then their \emph{greatest common divisor} \index{greatest common divisor} is $GCD(m,n)=min(e_1,f_1)P_1+...+min(e_k,f_k)P_k$. This function computes this quantity. } \subsection{\textcolor{Chapter }{DivisorLCM }} \logpage{[ 5, 7, 12 ]}\nobreak \hyperdef{L}{X82231CF08073695F}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DivisorLCM ({\slshape D1D2})\index{DivisorLCM @\texttt{DivisorLCM }} \label{DivisorLCM } }\hfill{\scriptsize (function)}}\\ If $m=p_1^{e_1}...p_k^{e_k}$ and $n=p_1^{f_1}...p_k^{f_k}$ are two integers then their least common multiple is $LCM(m,n)=p_1^{max(e_1,f_1)}...p_k^{max(e_k,f_k)}$. A similar definition works for two divisors on a curve. If $D_1=e_1P_1+...+e_kP_k$ and $D_2=f_1P_1+...+f_kP_k$ are two divisors on a curve then their \emph{least common multiple} \index{least common multiple} is $LCM(m,n)=max(e_1,f_1)P_1+...+max(e_k,f_k)P_k$. This function computes this quantity. \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> F:=GF(11); GF(11) gap> R1:=PolynomialRing(F,["a"]);; gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];; gap> b:=X(F,"b",var1); b gap> var2:=Concatenation(var1,[b]); [ a, b ] gap> R2:=PolynomialRing(F,var2); PolynomialRing(..., [ a, b ]) gap> crvP1:=AffineCurve(b,R2); rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) gap> div1:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1); rec( coeffs := [ 1, 2, 3, 4 ], support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) ) gap> DivisorDegree(div1); 10 gap> div2:=DivisorOnAffineCurve([1,2,3,4],[Z(11),Z(11)^2,Z(11)^3,Z(11)^4],crvP1); rec( coeffs := [ 1, 2, 3, 4 ], support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4 ], curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) ) gap> DivisorDegree(div2); 10 gap> div3:=DivisorAddition(div1,div2); rec( coeffs := [ 5, 3, 5, 4, 3 ], support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ], curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) ) gap> DivisorDegree(div3); 20 gap> DivisorIsEffective(div1); true gap> DivisorIsEffective(div2); true gap> gap> ndiv1:=DivisorNegate(div1); rec( coeffs := [ -1, -2, -3, -4 ], support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) ) gap> zdiv:=DivisorAddition(div1,ndiv1); rec( coeffs := [ 0, 0, 0, 0 ], support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^7 ], curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) ) gap> DivisorIsZero(zdiv); true gap> div_gcd:=DivisorGCD(div1,div2); rec( coeffs := [ 1, 1, 2, 0, 0 ], support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ], curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) ) gap> div_lcm:=DivisorLCM(div1,div2); rec( coeffs := [ 4, 2, 3, 4, 3 ], support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ], curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) ) gap> DivisorDegree(div_gcd); 4 gap> DivisorDegree(div_lcm); 16 gap> DivisorEqual(div3,DivisorAddition(div_gcd,div_lcm)); true \end{Verbatim} } Let $G$ denote a finite subgroup of $PGL(2,F)$ and let $D$ denote a divisor on the projective line $\mathbb{P}^1(F)$. If $G$ leaves $D$ unchanged (it may permute the points in the support of $D$ but must preserve their sum in $D$) then the Riemann-Roch space $L(D)$ is a $G$-module. The commands in this section help explore the $G$-module structure of $L(D)$ in the case then the ground field $F$ is finite. \subsection{\textcolor{Chapter }{RiemannRochSpaceBasisFunctionP1 }} \logpage{[ 5, 7, 13 ]}\nobreak \hyperdef{L}{X79C878697F99A10F}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{RiemannRochSpaceBasisFunctionP1 ({\slshape PkR2})\index{RiemannRochSpaceBasisFunctionP1 @\texttt{RiemannRochSpaceBasisFunctionP1 }} \label{RiemannRochSpaceBasisFunctionP1 } }\hfill{\scriptsize (function)}}\\ Input: \mbox{\texttt{\slshape R2}} is a polynomial ring in two variables, say $F[x,y]$; \mbox{\texttt{\slshape P}} is an element of the base field, say $F$; \mbox{\texttt{\slshape k}} is an integer. Output: $1/(x-P)^k$ } \subsection{\textcolor{Chapter }{DivisorOfRationalFunctionP1 }} \logpage{[ 5, 7, 14 ]}\nobreak \hyperdef{L}{X856DDA207EDDF256}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DivisorOfRationalFunctionP1 ({\slshape f, R})\index{DivisorOfRationalFunctionP1 @\texttt{DivisorOfRationalFunctionP1 }} \label{DivisorOfRationalFunctionP1 } }\hfill{\scriptsize (function)}}\\ Here $R = F[x,y]$ is a polynomial ring in the variables $x,y$ and $f$ is a rational function of $x$. Simply returns the principal divisor on ${\mathbb{P}}^1$ associated to $f$. \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> F:=GF(11); GF(11) gap> R1:=PolynomialRing(F,["a"]);; gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];; gap> b:=X(F,"b",var1); b gap> var2:=Concatenation(var1,[b]); [ a, b ] gap> R2:=PolynomialRing(F,var2); PolynomialRing(..., [ a, b ]) gap> pt:=Z(11); Z(11) gap> f:=RiemannRochSpaceBasisFunctionP1(pt,2,R2); (Z(11)^0)/(a^2+Z(11)^7*a+Z(11)^2) gap> Df:=DivisorOfRationalFunctionP1(f,R2); rec( coeffs := [ -2 ], support := [ Z(11) ], curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := a ) ) gap> Df.support; [ Z(11) ] gap> F:=GF(11);; gap> R:=PolynomialRing(F,2);; gap> vars:=IndeterminatesOfPolynomialRing(R);; gap> a:=vars[1];; gap> b:=vars[2];; gap> f:=(a^4+Z(11)^6*a^3-a^2+Z(11)^7*a+Z(11)^0)/(a^4+Z(11)*a^2+Z(11)^7*a+Z(11));; gap> divf:=DivisorOfRationalFunctionP1(f,R); rec( coeffs := [ 3, 1 ], support := [ Z(11), Z(11)^7 ], curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := a ) ) gap> denf:=DenominatorOfRationalFunction(f); RootsOfUPol(denf); a^4+Z(11)*a^2+Z(11)^7*a+Z(11) [ ] gap> numf:=NumeratorOfRationalFunction(f); RootsOfUPol(numf); a^4+Z(11)^6*a^3-a^2+Z(11)^7*a+Z(11)^0 [ Z(11)^7, Z(11), Z(11), Z(11) ] \end{Verbatim} } \subsection{\textcolor{Chapter }{RiemannRochSpaceBasisP1 }} \logpage{[ 5, 7, 15 ]}\nobreak \hyperdef{L}{X878970A17E580224}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{RiemannRochSpaceBasisP1 ({\slshape D})\index{RiemannRochSpaceBasisP1 @\texttt{RiemannRochSpaceBasisP1 }} \label{RiemannRochSpaceBasisP1 } }\hfill{\scriptsize (function)}}\\ This returns the basis of the Riemann-Roch space $L(D)$ associated to the divisor \mbox{\texttt{\slshape D}} on the projective line ${\mathbb{P}}^1$. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> F:=GF(11); GF(11) gap> R1:=PolynomialRing(F,["a"]);; gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];; gap> b:=X(F,"b",var1); b gap> var2:=Concatenation(var1,[b]); [ a, b ] gap> R2:=PolynomialRing(F,var2); PolynomialRing(..., [ a, b ]) gap> crvP1:=AffineCurve(b,R2); rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1); rec( coeffs := [ 1, 2, 3, 4 ], support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) ) gap> B:=RiemannRochSpaceBasisP1(D); [ Z(11)^0, (Z(11)^0)/(a+Z(11)^7), (Z(11)^0)/(a+Z(11)^8), (Z(11)^0)/(a^2+Z(11)^9*a+Z(11)^6), (Z(11)^0)/(a+Z(11)^2), (Z(11)^0)/(a^2+Z(11)^3*a+Z(11)^4), (Z(11)^0)/(a^3+a^2+Z(11)^2*a+Z(11)^6), (Z(11)^0)/(a+Z(11)^6), (Z(11)^0)/(a^2+Z(11)^7*a+Z(11)^2), (Z(11)^0)/(a^3+Z(11)^4*a^2+a+Z(11)^8), (Z(11)^0)/(a^4+Z(11)^8*a^3+Z(11)*a^2+a+Z(11)^4) ] gap> DivisorOfRationalFunctionP1(B[1],R2).support; [ ] gap> DivisorOfRationalFunctionP1(B[2],R2).support; [ Z(11)^2 ] gap> DivisorOfRationalFunctionP1(B[3],R2).support; [ Z(11)^3 ] gap> DivisorOfRationalFunctionP1(B[4],R2).support; [ Z(11)^3 ] gap> DivisorOfRationalFunctionP1(B[5],R2).support; [ Z(11)^7 ] gap> DivisorOfRationalFunctionP1(B[6],R2).support; [ Z(11)^7 ] gap> DivisorOfRationalFunctionP1(B[7],R2).support; [ Z(11)^7 ] gap> DivisorOfRationalFunctionP1(B[8],R2).support; [ Z(11) ] gap> DivisorOfRationalFunctionP1(B[9],R2).support; [ Z(11) ] gap> DivisorOfRationalFunctionP1(B[10],R2).support; [ Z(11) ] gap> DivisorOfRationalFunctionP1(B[11],R2).support; [ Z(11) ] \end{Verbatim} \subsection{\textcolor{Chapter }{MoebiusTransformation }} \logpage{[ 5, 7, 16 ]}\nobreak \hyperdef{L}{X807C52E67A440DEB}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MoebiusTransformation ({\slshape AR})\index{MoebiusTransformation @\texttt{MoebiusTransformation }} \label{MoebiusTransformation } }\hfill{\scriptsize (function)}}\\ The arguments are a $2\times 2$ matrix $A$ with entries in a field $F$ and a polynomial ring \mbox{\texttt{\slshape R}}of one variable, say $F[x]$. This function returns the linear fractional transformatio associated to \mbox{\texttt{\slshape A}}. These transformations can be composed with each other using GAP's \texttt{Value} command. } \subsection{\textcolor{Chapter }{ActionMoebiusTransformationOnFunction }} \logpage{[ 5, 7, 17 ]}\nobreak \hyperdef{L}{X85A0419580ED0391}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ActionMoebiusTransformationOnFunction ({\slshape AfR2})\index{ActionMoebiusTransformationOnFunction @\texttt{ActionMoebiusTransformationOnFunction }} \label{ActionMoebiusTransformationOnFunction } }\hfill{\scriptsize (function)}}\\ The arguments are a $2\times 2$ matrix $A$ with entries in a field $F$, a rational function \mbox{\texttt{\slshape f}} of one variable, say in $F(x)$, and a polynomial ring \mbox{\texttt{\slshape R2}}, say $F[x,y]$. This function simply returns the composition of the function \mbox{\texttt{\slshape f}} with the M{\"o}bius transformation of \mbox{\texttt{\slshape A}}. } \subsection{\textcolor{Chapter }{ActionMoebiusTransformationOnDivisorP1 }} \logpage{[ 5, 7, 18 ]}\nobreak \hyperdef{L}{X7E48F9C67E7FB7B5}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ActionMoebiusTransformationOnDivisorP1 ({\slshape AD})\index{ActionMoebiusTransformationOnDivisorP1 @\texttt{ActionMoebiusTransformationOnDivisorP1 }} \label{ActionMoebiusTransformationOnDivisorP1 } }\hfill{\scriptsize (function)}}\\ A M{\"o}bius transformation may be regarded as an automorphism of the projective line $\mathbb{P}^1$. This function simply returns the image of the divisor \mbox{\texttt{\slshape D}} under the M{\"o}bius transformation defined by \mbox{\texttt{\slshape A}}, provided that \texttt{IsActionMoebiusTransformationOnDivisorDefinedP1(A,D)} returns true. } \subsection{\textcolor{Chapter }{IsActionMoebiusTransformationOnDivisorDefinedP1 }} \logpage{[ 5, 7, 19 ]}\nobreak \hyperdef{L}{X79FD980E7B24DB9C}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsActionMoebiusTransformationOnDivisorDefinedP1 ({\slshape AD})\index{IsActionMoebiusTransformationOnDivisorDefinedP1 @\texttt{IsAction}\-\texttt{Moebius}\-\texttt{Transformation}\-\texttt{On}\-\texttt{Divisor}\-\texttt{DefinedP1 }} \label{IsActionMoebiusTransformationOnDivisorDefinedP1 } }\hfill{\scriptsize (function)}}\\ Returns true of none of the points in the support of the divisor \mbox{\texttt{\slshape D}} is the pole of the M{\"o}bius transformation. \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> F:=GF(11); GF(11) gap> R1:=PolynomialRing(F,["a"]);; gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];; gap> b:=X(F,"b",var1); b gap> var2:=Concatenation(var1,[b]); [ a, b ] gap> R2:=PolynomialRing(F,var2); PolynomialRing(..., [ a, b ]) gap> crvP1:=AffineCurve(b,R2); rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1); rec( coeffs := [ 1, 2, 3, 4 ], support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) ) gap> A:=Z(11)^0*[[1,2],[1,4]]; [ [ Z(11)^0, Z(11) ], [ Z(11)^0, Z(11)^2 ] ] gap> ActionMoebiusTransformationOnDivisorDefinedP1(A,D); false gap> A:=Z(11)^0*[[1,2],[3,4]]; [ [ Z(11)^0, Z(11) ], [ Z(11)^8, Z(11)^2 ] ] gap> ActionMoebiusTransformationOnDivisorDefinedP1(A,D); true gap> ActionMoebiusTransformationOnDivisorP1(A,D); rec( coeffs := [ 1, 2, 3, 4 ], support := [ Z(11)^5, Z(11)^6, Z(11)^8, Z(11)^7 ], curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) ) gap> f:=MoebiusTransformation(A,R1); (a+Z(11))/(Z(11)^8*a+Z(11)^2) gap> ActionMoebiusTransformationOnFunction(A,f,R1); -Z(11)^0+Z(11)^3*a^-1 \end{Verbatim} } \subsection{\textcolor{Chapter }{DivisorAutomorphismGroupP1 }} \logpage{[ 5, 7, 20 ]}\nobreak \hyperdef{L}{X823386037F450B0E}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DivisorAutomorphismGroupP1 ({\slshape D})\index{DivisorAutomorphismGroupP1 @\texttt{DivisorAutomorphismGroupP1 }} \label{DivisorAutomorphismGroupP1 } }\hfill{\scriptsize (function)}}\\ Input: A divisor \mbox{\texttt{\slshape D}} on $\mathbb{P}^1(F)$, where $F$ is a finite field. Output: A subgroup $Aut(D)\subset Aut(\mathbb{P}^1)$ preserving \mbox{\texttt{\slshape D}}. Very slow. \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> F:=GF(11); GF(11) gap> R1:=PolynomialRing(F,["a"]);; gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];; gap> b:=X(F,"b",var1); b gap> var2:=Concatenation(var1,[b]); [ a, b ] gap> R2:=PolynomialRing(F,var2); PolynomialRing(..., [ a, b ]) gap> crvP1:=AffineCurve(b,R2); rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1); rec( coeffs := [ 1, 2, 3, 4 ], support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) ) gap> agp:=DivisorAutomorphismGroupP1(D);; time; 7305 gap> IdGroup(agp); [ 10, 2 ] \end{Verbatim} } \subsection{\textcolor{Chapter }{MatrixRepresentationOnRiemannRochSpaceP1 }} \logpage{[ 5, 7, 21 ]}\nobreak \hyperdef{L}{X80EDF3D682E7EF3F}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MatrixRepresentationOnRiemannRochSpaceP1 ({\slshape gD})\index{MatrixRepresentationOnRiemannRochSpaceP1 @\texttt{Matrix}\-\texttt{Representation}\-\texttt{On}\-\texttt{Riemann}\-\texttt{Roch}\-\texttt{SpaceP1 }} \label{MatrixRepresentationOnRiemannRochSpaceP1 } }\hfill{\scriptsize (function)}}\\ Input: An element \mbox{\texttt{\slshape g}} in $G$, a subgroup of $Aut(D)\subset Aut(\mathbb{P}^1)$, and a divisor \mbox{\texttt{\slshape D}} on $\mathbb{P}^1(F)$, where $F$ is a finite field. Output: a $d\times d$ matrix, where $d = dim\, L(D)$, representing the action of \mbox{\texttt{\slshape g}} on $L(D)$. Note: \mbox{\texttt{\slshape g}} sends $L(D)$ to $r\cdot L(D)$, where $r$ is a polynomial of degree $1$ depending on \mbox{\texttt{\slshape g}} and \mbox{\texttt{\slshape D}}. Also very slow. The GAP command \texttt{BrauerCharacterValue} can be used to ``lift'' the eigenvalues of this matrix to the complex numbers. \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> F:=GF(11); GF(11) gap> R1:=PolynomialRing(F,["a"]);; gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];; gap> b:=X(F,"b",var1); b gap> var2:=Concatenation(var1,[b]); [ a, b ] gap> R2:=PolynomialRing(F,var2); PolynomialRing(..., [ a, b ]) gap> crvP1:=AffineCurve(b,R2); rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) gap> D:=DivisorOnAffineCurve([1,1,1,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1); rec( coeffs := [ 1, 1, 1, 4 ], support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) ) gap> agp:=DivisorAutomorphismGroupP1(D);; time; 7198 gap> IdGroup(agp); [ 20, 5 ] gap> g:=Random(agp); [ [ Z(11)^4, Z(11)^9 ], [ Z(11)^0, Z(11)^9 ] ] gap> rho:=MatrixRepresentationOnRiemannRochSpaceP1(g,D); [ [ Z(11)^0, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ], [ Z(11)^0, 0*Z(11), 0*Z(11), Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ], [ Z(11)^7, 0*Z(11), Z(11)^5, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ], [ Z(11)^4, Z(11)^9, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ], [ Z(11)^2, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^5, 0*Z(11), 0*Z(11), 0*Z(11) ], [ Z(11)^4, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^8, Z(11)^0, 0*Z(11), 0*Z(11) ], [ Z(11)^6, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^7, Z(11)^0, Z(11)^5, 0*Z(11) ], [ Z(11)^8, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^3, Z(11)^3, Z(11)^9, Z(11)^0 ] ] gap> Display(rho); 1 . . . . . . . 1 . . 2 . . . . 7 . 10 . . . . . 5 6 . . . . . . 4 . . . 10 . . . 5 . . . 3 1 . . 9 . . . 7 1 10 . 3 . . . 8 8 6 1 \end{Verbatim} } \subsection{\textcolor{Chapter }{GoppaCodeClassical}} \logpage{[ 5, 7, 22 ]}\nobreak \hyperdef{L}{X8777388C7885E335}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GoppaCodeClassical({\slshape div, pts})\index{GoppaCodeClassical@\texttt{GoppaCodeClassical}} \label{GoppaCodeClassical} }\hfill{\scriptsize (function)}}\\ Input: A divisor \mbox{\texttt{\slshape div}} on the projective line ${\mathbb{P}}^1(F)$ over a finite field $F$ and a list \mbox{\texttt{\slshape pts}} of points $\{P_1,...,P_n\}\subset F$ disjoint from the support of \mbox{\texttt{\slshape div}}. \\ Output: The classical (evaluation) Goppa code associated to this data. This is the code \[ C=\{(f(P_1),...,f(P_n))\ |\ f\in L(D)_F\}. \] } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> F:=GF(11);; gap> R2:=PolynomialRing(F,2);; gap> vars:=IndeterminatesOfPolynomialRing(R2);; gap> a:=vars[1];;b:=vars[2];; gap> cdiv:=[ 1, 2, -1, -2 ]; [ 1, 2, -1, -2 ] gap> sdiv:=[ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ]; [ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ] gap> crv:=rec(polynomial:=b,ring:=R2); rec( polynomial := x_2, ring := PolynomialRing(..., [ x_1, x_2 ]) ) gap> div:=DivisorOnAffineCurve(cdiv,sdiv,crv); rec( coeffs := [ 1, 2, -1, -2 ], support := [ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ], curve := rec( polynomial := x_2, ring := PolynomialRing(..., [ x_1, x_2 ]) ) ) gap> pts:=Difference(Elements(GF(11)),div.support); [ 0*Z(11), Z(11)^0, Z(11), Z(11)^4, Z(11)^5, Z(11)^7, Z(11)^8 ] gap> C:=GoppaCodeClassical(div,pts); a linear [7,2,1..6]4..5 code defined by generator matrix over GF(11) gap> MinimumDistance(C); 6 \end{Verbatim} \subsection{\textcolor{Chapter }{EvaluationBivariateCode}} \logpage{[ 5, 7, 23 ]}\nobreak \hyperdef{L}{X8422A310854C09B0}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{EvaluationBivariateCode({\slshape pts, L, crv})\index{EvaluationBivariateCode@\texttt{EvaluationBivariateCode}} \label{EvaluationBivariateCode} }\hfill{\scriptsize (function)}}\\ Input: \texttt{pts} is a set of affine points on \texttt{crv}, \texttt{L} is a list of rational functions on \texttt{crv}. \\ Output: The evaluation code associated to the points in \texttt{pts} and functions in \texttt{L}, but specifically for affine plane curves and this function checks if points are "bad" (if so removes them from the list \texttt{pts} automatically). A point is ``bad'' if either it does not lie on the set of non-singular $F$-rational points (places of degree 1) on the curve. Very similar to \texttt{EvaluationCode} (see \texttt{EvaluationCode} (\ref{EvaluationCode}) for a more general construction). } \subsection{\textcolor{Chapter }{EvaluationBivariateCodeNC}} \logpage{[ 5, 7, 24 ]}\nobreak \hyperdef{L}{X7B6C2BED8319C811}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{EvaluationBivariateCodeNC({\slshape pts, L, crv})\index{EvaluationBivariateCodeNC@\texttt{EvaluationBivariateCodeNC}} \label{EvaluationBivariateCodeNC} }\hfill{\scriptsize (function)}}\\ As in \texttt{EvaluationBivariateCode} but does not check if the points are ``bad''. Input: \texttt{pts} is a set of affine points on \texttt{crv}, \texttt{L} is a list of rational functions on \texttt{crv}. \\ Output: The evaluation code associated to the points in \texttt{pts} and functions in \texttt{L}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> q:=4;; gap> F:=GF(q^2);; gap> R:=PolynomialRing(F,2);; gap> vars:=IndeterminatesOfPolynomialRing(R);; gap> x:=vars[1];; gap> y:=vars[2];; gap> crv:=AffineCurve(y^q+y-x^(q+1),R); rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_1^5+x_2^4+x_2 ) gap> L:=[ x^0, x, x^2*y^-1 ]; [ Z(2)^0, x_1, x_1^2/x_2 ] gap> Pts:=AffinePointsOnCurve(crv.polynomial,crv.ring,F);; gap> C1:=EvaluationBivariateCode(Pts,L,crv); time; Automatically removed the following 'bad' points (either a pole or not on the curve): [ [ 0*Z(2), 0*Z(2) ] ] a linear [63,3,1..60]51..59 evaluation code over GF(16) 52 gap> P:=Difference(Pts,[[ 0*Z(2^4)^0, 0*Z(2)^0 ]]);; gap> C2:=EvaluationBivariateCodeNC(P,L,crv); time; a linear [63,3,1..60]51..59 evaluation code over GF(16) 48 gap> C3:=EvaluationCode(P,L,R); time; a linear [63,3,1..56]51..59 evaluation code over GF(16) 58 gap> MinimumDistance(C1); 56 gap> MinimumDistance(C2); 56 gap> MinimumDistance(C3); 56 gap> \end{Verbatim} \subsection{\textcolor{Chapter }{OnePointAGCode}} \logpage{[ 5, 7, 25 ]}\nobreak \hyperdef{L}{X842E227E8785168E}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{OnePointAGCode({\slshape f, P, m, R})\index{OnePointAGCode@\texttt{OnePointAGCode}} \label{OnePointAGCode} }\hfill{\scriptsize (function)}}\\ Input: \mbox{\texttt{\slshape f}} is a polynomial in R=F[x,y], where \mbox{\texttt{\slshape F}} is a finite field, \mbox{\texttt{\slshape m}} is a positive integer (the multiplicity of the `point at infinity' $\infty$ on the curve $f(x,y)=0$), \mbox{\texttt{\slshape P}} is a list of $n$ points on the curve over $F$. \\ Output: The $C$ which is the image of the evaluation map \[ Eval_P:L(m \cdot \infty)\rightarrow F^n, \] given by $f\longmapsto (f(p_1),...,f(p_n))$, where $p_i \in P$. Here $L(m \cdot \infty)$ denotes the Riemann-Roch space of the divisor $m \cdot \infty$ on the curve. This has a basis consisting of monomials $x^iy^j$, where $(i,j)$ range over a polygon depending on $m$ and $f(x,y)$. For more details on the Riemann-Roch space of the divisor $m \cdot \infty$ see Proposition III.10.5 in Stichtenoth \cite{St93}. This command returns a "record" object \texttt{C} with several extra components (type \texttt{NamesOfComponents(C)} to see them all): \texttt{C!.points} (namely \mbox{\texttt{\slshape P}}), \texttt{C!.multiplicity} (namely \mbox{\texttt{\slshape m}}), \texttt{C!.curve} (namely \mbox{\texttt{\slshape f}}) and \texttt{C!.ring} (namely \mbox{\texttt{\slshape R}}). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> F:=GF(11); GF(11) gap> R := PolynomialRing(F,["x","y"]); PolynomialRing(..., [ x, y ]) gap> indets := IndeterminatesOfPolynomialRing(R); [ x, y ] gap> x:=indets[1]; y:=indets[2]; x y gap> P:=AffinePointsOnCurve(y^2-x^11+x,R,F);; gap> C:=OnePointAGCode(y^2-x^11+x,P,15,R); a linear [11,8,1..0]2..3 one-point AG code over GF(11) gap> MinimumDistance(C); 4 gap> Pts:=List([1,2,4,6,7,8,9,10,11],i->P[i]);; gap> C:=OnePointAGCode(y^2-x^11+x,PT,10,R); a linear [9,6,1..4]2..3 one-point AG code over GF(11) gap> MinimumDistance(C); 4 \end{Verbatim} See \texttt{EvaluationCode} (\ref{EvaluationCode}) for a more general construction. } \section{\textcolor{Chapter }{ Low-Density Parity-Check Codes }}\logpage{[ 5, 8, 0 ]} \hyperdef{L}{X84F3673D7BBF5956}{} { \label{LDPC} \index{LDPC} Low-density parity-check (LDPC) codes form a class of linear block codes whose parity-check matrix--as the name implies, is sparse. LDPC codes were introduced by Robert Gallager in 1962 \cite{Gallager.1962} as his PhD work. Due to the decoding complexity for the technology back then, these codes were forgotten. Not until the late 1990s, these codes were rediscovered and research results have shown that LDPC codes can achieve near Shannon's capacity performance provided that their block length is long enough and soft-decision iterative decoder is employed. Note that the bit-flipping decoder (see \texttt{BitFlipDecoder}) is a hard-decision decoder and hence capacity achieving performance cannot be achieved despite having a large block length. Based on the structure of their parity-check matrix, LDPC codes may be categorised into two classes: \begin{itemize} \item Regular LDPC codes This class of codes has a fixed number of non zeros per column and per row in their parity-check matrix. These codes are usually denoted as $(n,j,k)$ codes where $n$ is the block length, $j$ is the number of non zeros per column in their parity-check matrix and $k$ is the number of non zeros per row in their parity-check matrix. \item Irregular LDPC codes The irregular codes, on the other hand, do not have a fixed number of non zeros per column and row in their parity-check matrix. This class of codes are commonly represented by two polynomials which denote the distribution of the number of non zeros in the columns and rows respectively of their parity-check matrix. \end{itemize} \subsection{\textcolor{Chapter }{QCLDPCCodeFromGroup}} \logpage{[ 5, 8, 1 ]}\nobreak \hyperdef{L}{X8020A9357AD0BA92}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{QCLDPCCodeFromGroup({\slshape m, j, k})\index{QCLDPCCodeFromGroup@\texttt{QCLDPCCodeFromGroup}} \label{QCLDPCCodeFromGroup} }\hfill{\scriptsize (function)}}\\ \texttt{QCLDCCodeFromGroup} produces an $(n,j,k)$ regular quasi-cyclic LDPC code over GF(2) of block length $n = mk$. The term quasi-cyclic in the context of LDPC codes typically refers to LDPC codes whose parity-check matrix $H$ has the following form \begin{verbatim} - - | I_P(0,0) | I_P(0,1) | ... | I_P(0,k-1) | | I_P(1,0) | I_P(1,1) | ... | I_P(1,k-1) | H = | . | . | . | . |, | . | . | . | . | | I_P(j-1,0) | I_P(j-1,1) | ... | I_P(j-1,k-1) | - - \end{verbatim} where $I_{P(s,t)}$ is an identity matrix of size $m \times m$ which has been shifted so that the $1$ on the first row starts at position $P(s,t)$. Let $F$ be a multiplicative group of integers modulo $m$. If $m$ is a prime, $F=\{0,1,...,m-1\}$, otherwise $F$ contains a set of integers which are relatively prime to $m$. In both cases, the order of $F$ is equal to $\phi(m)$. Let $a$ and $b$ be non zeros of $F$ such that the orders of $a$ and $b$ are $k$ and $j$ respectively. Note that the integers $a$ and $b$ can always be found provided that $k$ and $j$ respectively divide $\phi(m)$. Having obtain integers $a$ and $b$, construct the following $j \times k$ matrix $P$ so that the element at row $s$ and column $t$ is given by $P(s,t) = a^tb^s$, i.e. \begin{verbatim} - - | 1 | a | . . . | a^{k-1} | | b | ab | . . . | a^{k-1}b | P = | . | . | . | . |. | . | . | . | . | | b^{j-1} | ab^{j-1} | . . . | a^{k-1}b^{j-1} | - - \end{verbatim} The parity-check matrix $H$ of the LDPC code can be obtained by expanding each element of matrix $P$, i.e. $P(s,t)$, to an identity matrix $I_{P(s,t)}$ of size $m \times m$. The code rate $R$ of the constructed code is given by \[ R \geq 1 - \frac{j}{k} \] where the sign $\geq$ is due to the possible existence of some non linearly independent rows in $H$. For more details to the paper by Tanner et al \cite{TSSFC04}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := QCLDPCCodeFromGroup(7,2,3); a linear [21,8,1..6]5..10 low-density parity-check code over GF(2) gap> MinimumWeight(C); [21,8] linear code over GF(2) - minimum weight evaluation Known lower-bound: 1 There are 3 generator matrices, ranks : 8 8 5 The weight of the minimum weight codeword satisfies 0 mod 2 congruence Enumerating codewords with information weight 1 (w=1) Found new minimum weight 6 Number of matrices required for codeword enumeration 2 Completed w= 1, 24 codewords enumerated, lower-bound 4, upper-bound 6 Termination expected with information weight 2 at matrix 1 ----------------------------------------------------------------------------- Enumerating codewords with information weight 2 (w=2) using 1 matrices Completed w= 2, 28 codewords enumerated, lower-bound 6, upper-bound 6 ----------------------------------------------------------------------------- Minimum weight: 6 6 gap> # The quasi-cyclic structure is obvious from the check matrix gap> Display( CheckMat(C) ); 1 . . . . . . . 1 . . . . . . . . 1 . . . . 1 . . . . . . . 1 . . . . . . . . 1 . . . . 1 . . . . . . . 1 . . . . . . . . 1 . . . . 1 . . . . . . . 1 . . . . . . . . 1 . . . . 1 . . . . . . . 1 . 1 . . . . . . . . . . . 1 . . . . . . . 1 . 1 . . . . . . . . . . . 1 1 . . . . . . . . 1 . . . . . . . . . 1 . . . . . 1 . . . . 1 . . . . . . . . . . 1 . . . . . 1 . . . . 1 . . . 1 . . . . . . . . . . . . 1 . . . . 1 . . . 1 . . . . . 1 . . . . . . . . . . . 1 . . . 1 . . . . . 1 . . . . . . . . . . . 1 . . . 1 . . . . . 1 . . . . 1 . . . . . . . . . . 1 . . . . . 1 . . . . 1 . . . . . gap> # This is the famous [155,64,20] quasi-cyclic LDPC codes gap> C := QCLDPCCodeFromGroup(31,3,5); a linear [155,64,1..24]24..77 low-density parity-check code over GF(2) gap> # An example using non prime m, it may take a while to construct this code gap> C := QCLDPCCodeFromGroup(356,4,8); a linear [2848,1436,1..120]312..1412 low-density parity-check code over GF(2) \end{Verbatim} } } \chapter{\textcolor{Chapter }{Manipulating Codes}}\logpage{[ 6, 0, 0 ]} \hyperdef{L}{X866FC1117814B64D}{} { \label{Manipulating Codes} In this chapter we describe several functions \textsf{GUAVA} uses to manipulate codes. Some of the best codes are obtained by starting with for example a BCH code, and manipulating it. In some cases, it is faster to perform calculations with a manipulated code than to use the original code. For example, if the dimension of the code is larger than half the word length, it is generally faster to compute the weight distribution by first calculating the weight distribution of the dual code than by directly calculating the weight distribution of the original code. The size of the dual code is smaller in these cases. Because \textsf{GUAVA} keeps all information in a code record, in some cases the information can be preserved after manipulations. Therefore, computations do not always have to start from scratch. In Section \ref{Functions that Generate a New Code from a Given Code}, we describe functions that take a code with certain parameters, modify it in some way and return a different code (see \texttt{ExtendedCode} (\ref{ExtendedCode}), \texttt{PuncturedCode} (\ref{PuncturedCode}), \texttt{EvenWeightSubcode} (\ref{EvenWeightSubcode}), \texttt{PermutedCode} (\ref{PermutedCode}), \texttt{ExpurgatedCode} (\ref{ExpurgatedCode}), \texttt{AugmentedCode} (\ref{AugmentedCode}), \texttt{RemovedElementsCode} (\ref{RemovedElementsCode}), \texttt{AddedElementsCode} (\ref{AddedElementsCode}), \texttt{ShortenedCode} (\ref{ShortenedCode}), \texttt{LengthenedCode} (\ref{LengthenedCode}), \texttt{ResidueCode} (\ref{ResidueCode}), \texttt{ConstructionBCode} (\ref{ConstructionBCode}), \texttt{DualCode} (\ref{DualCode}), \texttt{ConversionFieldCode} (\ref{ConversionFieldCode}), \texttt{ConstantWeightSubcode} (\ref{ConstantWeightSubcode}), \texttt{StandardFormCode} (\ref{StandardFormCode}) and \texttt{CosetCode} (\ref{CosetCode})). In Section \ref{Functions that Generate a New Code from Two or More Given Codes}, we describe functions that generate a new code out of two codes (see \texttt{DirectSumCode} (\ref{DirectSumCode}), \texttt{UUVCode} (\ref{UUVCode}), \texttt{DirectProductCode} (\ref{DirectProductCode}), \texttt{IntersectionCode} (\ref{IntersectionCode}) and \texttt{UnionCode} (\ref{UnionCode})). \section{\textcolor{Chapter }{ Functions that Generate a New Code from a Given Code }}\logpage{[ 6, 1, 0 ]} \hyperdef{L}{X8271A4697FDA97B2}{} { \label{Functions that Generate a New Code from a Given Code} \index{Parity check} \subsection{\textcolor{Chapter }{ExtendedCode}} \logpage{[ 6, 1, 1 ]}\nobreak \hyperdef{L}{X794679BE7F9EB5C1}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ExtendedCode({\slshape C[, i]})\index{ExtendedCode@\texttt{ExtendedCode}} \label{ExtendedCode} }\hfill{\scriptsize (function)}}\\ \texttt{ExtendedCode} extends the code \mbox{\texttt{\slshape C}} \mbox{\texttt{\slshape i}} times and returns the result. \mbox{\texttt{\slshape i}} is equal to $1$ by default. Extending is done by adding a parity check bit after the last coordinate. The coordinates of all codewords now add up to zero. In the binary case, each codeword has even weight. The word length increases by \mbox{\texttt{\slshape i}}. The size of the code remains the same. In the binary case, the minimum distance increases by one if it was odd. In other cases, that is not always true. A cyclic code in general is no longer cyclic after extending. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := HammingCode( 3, GF(2) ); a linear [7,4,3]1 Hamming (3,2) code over GF(2) gap> C2 := ExtendedCode( C1 ); a linear [8,4,4]2 extended code gap> IsEquivalent( C2, ReedMullerCode( 1, 3 ) ); true gap> List( AsSSortedList( C2 ), WeightCodeword ); [ 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8 ] gap> C3 := EvenWeightSubcode( C1 ); a linear [7,3,4]2..3 even weight subcode \end{Verbatim} To undo extending, call \texttt{PuncturedCode} (see \texttt{PuncturedCode} (\ref{PuncturedCode})). The function \texttt{EvenWeightSubcode} (see \texttt{EvenWeightSubcode} (\ref{EvenWeightSubcode})) also returns a related code with only even weights, but without changing its word length. \subsection{\textcolor{Chapter }{PuncturedCode}} \logpage{[ 6, 1, 2 ]}\nobreak \hyperdef{L}{X7E6E4DDA79574FDB}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PuncturedCode({\slshape C})\index{PuncturedCode@\texttt{PuncturedCode}} \label{PuncturedCode} }\hfill{\scriptsize (function)}}\\ \texttt{PuncturedCode} punctures \mbox{\texttt{\slshape C}} in the last column, and returns the result. Puncturing is done simply by cutting off the last column from each codeword. This means the word length decreases by one. The minimum distance in general also decrease by one. This command can also be called with the syntax \texttt{PuncturedCode( C, L )}. In this case, \texttt{PuncturedCode} punctures \mbox{\texttt{\slshape C}} in the columns specified by \mbox{\texttt{\slshape L}}, a list of integers. All columns specified by \mbox{\texttt{\slshape L}} are omitted from each codeword. If $l$ is the length of \mbox{\texttt{\slshape L}} (so the number of removed columns), the word length decreases by $l$. The minimum distance can also decrease by $l$ or less. Puncturing a cyclic code in general results in a non-cyclic code. If the code is punctured in all the columns where a word of minimal weight is unequal to zero, the dimension of the resulting code decreases. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := BCHCode( 15, 5, GF(2) ); a cyclic [15,7,5]3..5 BCH code, delta=5, b=1 over GF(2) gap> C2 := PuncturedCode( C1 ); a linear [14,7,4]3..5 punctured code gap> ExtendedCode( C2 ) = C1; false gap> PuncturedCode( C1, [1,2,3,4,5,6,7] ); a linear [8,7,1]1 punctured code gap> PuncturedCode( WholeSpaceCode( 4, GF(5) ) ); a linear [3,3,1]0 punctured code # The dimension decreased from 4 to 3 \end{Verbatim} \texttt{ExtendedCode} extends the code again (see \texttt{ExtendedCode} (\ref{ExtendedCode})), although in general this does not result in the old code. \subsection{\textcolor{Chapter }{EvenWeightSubcode}} \logpage{[ 6, 1, 3 ]}\nobreak \hyperdef{L}{X87691AB67FF5621B}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{EvenWeightSubcode({\slshape C})\index{EvenWeightSubcode@\texttt{EvenWeightSubcode}} \label{EvenWeightSubcode} }\hfill{\scriptsize (function)}}\\ \texttt{EvenWeightSubcode} returns the even weight subcode of \mbox{\texttt{\slshape C}}, consisting of all codewords of \mbox{\texttt{\slshape C}} with even weight. If \mbox{\texttt{\slshape C}} is a linear code and contains words of odd weight, the resulting code has a dimension of one less. The minimum distance always increases with one if it was odd. If \mbox{\texttt{\slshape C}} is a binary cyclic code, and $g(x)$ is its generator polynomial, the even weight subcode either has generator polynomial $g(x)$ (if $g(x)$ is divisible by $x-1$) or $g(x)\cdot (x-1)$ (if no factor $x-1$ was present in $g(x)$). So the even weight subcode is again cyclic. Of course, if all codewords of \mbox{\texttt{\slshape C}} are already of even weight, the returned code is equal to \mbox{\texttt{\slshape C}}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := EvenWeightSubcode( BCHCode( 8, 4, GF(3) ) ); an (8,33,4..8)3..8 even weight subcode gap> List( AsSSortedList( C1 ), WeightCodeword ); [ 0, 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, 6, 4, 4, 6, 4, 4, 8, 6, 4, 6, 8, 4, 4, 4, 6, 4, 6, 8, 4, 6, 8 ] gap> EvenWeightSubcode( ReedMullerCode( 1, 3 ) ); a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) \end{Verbatim} \texttt{ExtendedCode} also returns a related code of only even weights, but without reducing its dimension (see \texttt{ExtendedCode} (\ref{ExtendedCode})). \subsection{\textcolor{Chapter }{PermutedCode}} \logpage{[ 6, 1, 4 ]}\nobreak \hyperdef{L}{X79577EB27BE8524B}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PermutedCode({\slshape C, L})\index{PermutedCode@\texttt{PermutedCode}} \label{PermutedCode} }\hfill{\scriptsize (function)}}\\ \texttt{PermutedCode} returns \mbox{\texttt{\slshape C}} after column permutations. \mbox{\texttt{\slshape L}} (in GAP disjoint cycle notation) is the permutation to be executed on the columns of \mbox{\texttt{\slshape C}}. If \mbox{\texttt{\slshape C}} is cyclic, the result in general is no longer cyclic. If a permutation results in the same code as \mbox{\texttt{\slshape C}}, this permutation belongs to the automorphism group of \mbox{\texttt{\slshape C}} (see \texttt{AutomorphismGroup} (\ref{AutomorphismGroup})). In any case, the returned code is equivalent to \mbox{\texttt{\slshape C}} (see \texttt{IsEquivalent} (\ref{IsEquivalent})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := PuncturedCode( ReedMullerCode( 1, 4 ) ); a linear [15,5,7]5 punctured code gap> C2 := BCHCode( 15, 7, GF(2) ); a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2) gap> C2 = C1; false gap> p := CodeIsomorphism( C1, C2 ); ( 2, 4,14, 9,13, 7,11,10, 6, 8,12, 5) gap> C3 := PermutedCode( C1, p ); a linear [15,5,7]5 permuted code gap> C2 = C3; true \end{Verbatim} \subsection{\textcolor{Chapter }{ExpurgatedCode}} \logpage{[ 6, 1, 5 ]}\nobreak \hyperdef{L}{X87E5849784BC60D2}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ExpurgatedCode({\slshape C, L})\index{ExpurgatedCode@\texttt{ExpurgatedCode}} \label{ExpurgatedCode} }\hfill{\scriptsize (function)}}\\ \texttt{ExpurgatedCode} expurgates the code \mbox{\texttt{\slshape C}}{\textgreater} by throwing away codewords in list \mbox{\texttt{\slshape L}}. \mbox{\texttt{\slshape C}} must be a linear code. \mbox{\texttt{\slshape L}} must be a list of codeword input. The generator matrix of the new code no longer is a basis for the codewords specified by \mbox{\texttt{\slshape L}}. Since the returned code is still linear, it is very likely that, besides the words of \mbox{\texttt{\slshape L}}, more codewords of \mbox{\texttt{\slshape C}} are no longer in the new code. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := HammingCode( 4 );; WeightDistribution( C1 ); [ 1, 0, 0, 35, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ] gap> L := Filtered( AsSSortedList(C1), i -> WeightCodeword(i) = 3 );; gap> C2 := ExpurgatedCode( C1, L ); a linear [15,4,3..4]5..11 code, expurgated with 7 word(s) gap> WeightDistribution( C2 ); [ 1, 0, 0, 0, 14, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 ] \end{Verbatim} This function does not work on non-linear codes. For removing words from a non-linear code, use \texttt{RemovedElementsCode} (see \texttt{RemovedElementsCode} (\ref{RemovedElementsCode})). For expurgating a code of all words of odd weight, use `EvenWeightSubcode' (see \texttt{EvenWeightSubcode} (\ref{EvenWeightSubcode})). \subsection{\textcolor{Chapter }{AugmentedCode}} \logpage{[ 6, 1, 6 ]}\nobreak \hyperdef{L}{X8134BE2B8478BE8A}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{AugmentedCode({\slshape C, L})\index{AugmentedCode@\texttt{AugmentedCode}} \label{AugmentedCode} }\hfill{\scriptsize (function)}}\\ \texttt{AugmentedCode} returns \mbox{\texttt{\slshape C}} after augmenting. \mbox{\texttt{\slshape C}} must be a linear code, \mbox{\texttt{\slshape L}} must be a list of codeword inputs. The generator matrix of the new code is a basis for the codewords specified by \mbox{\texttt{\slshape L}} as well as the words that were already in code \mbox{\texttt{\slshape C}}. Note that the new code in general will consist of more words than only the codewords of \mbox{\texttt{\slshape C}} and the words \mbox{\texttt{\slshape L}}. The returned code is also a linear code. This command can also be called with the syntax \texttt{AugmentedCode(C)}. When called without a list of codewords, \texttt{AugmentedCode} returns \mbox{\texttt{\slshape C}} after adding the all-ones vector to the generator matrix. \mbox{\texttt{\slshape C}} must be a linear code. If the all-ones vector was already in the code, nothing happens and a copy of the argument is returned. If \mbox{\texttt{\slshape C}} is a binary code which does not contain the all-ones vector, the complement of all codewords is added. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C31 := ReedMullerCode( 1, 3 ); a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) gap> C32 := AugmentedCode(C31,["00000011","00000101","00010001"]); a linear [8,7,1..2]1 code, augmented with 3 word(s) gap> C32 = ReedMullerCode( 2, 3 ); true gap> C1 := CordaroWagnerCode(6); a linear [6,2,4]2..3 Cordaro-Wagner code over GF(2) gap> Codeword( [0,0,1,1,1,1] ) in C1; true gap> C2 := AugmentedCode( C1 ); a linear [6,3,1..2]2..3 code, augmented with 1 word(s) gap> Codeword( [1,1,0,0,0,0] ) in C2; true \end{Verbatim} The function \texttt{AddedElementsCode} adds elements to the codewords instead of adding them to the basis (see \texttt{AddedElementsCode} (\ref{AddedElementsCode})). \subsection{\textcolor{Chapter }{RemovedElementsCode}} \logpage{[ 6, 1, 7 ]}\nobreak \hyperdef{L}{X7B0A6E1F82686B43}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{RemovedElementsCode({\slshape C, L})\index{RemovedElementsCode@\texttt{RemovedElementsCode}} \label{RemovedElementsCode} }\hfill{\scriptsize (function)}}\\ \texttt{RemovedElementsCode} returns code \mbox{\texttt{\slshape C}} after removing a list of codewords \mbox{\texttt{\slshape L}} from its elements. \mbox{\texttt{\slshape L}} must be a list of codeword input. The result is an unrestricted code. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := HammingCode( 4 );; WeightDistribution( C1 ); [ 1, 0, 0, 35, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ] gap> L := Filtered( AsSSortedList(C1), i -> WeightCodeword(i) = 3 );; gap> C2 := RemovedElementsCode( C1, L ); a (15,2013,3..15)2..15 code with 35 word(s) removed gap> WeightDistribution( C2 ); [ 1, 0, 0, 0, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ] gap> MinimumDistance( C2 ); 3 # C2 is not linear, so the minimum weight does not have to # be equal to the minimum distance \end{Verbatim} Adding elements to a code is done by the function \texttt{AddedElementsCode} (see \texttt{AddedElementsCode} (\ref{AddedElementsCode})). To remove codewords from the base of a linear code, use \texttt{ExpurgatedCode} (see \texttt{ExpurgatedCode} (\ref{ExpurgatedCode})). \subsection{\textcolor{Chapter }{AddedElementsCode}} \logpage{[ 6, 1, 8 ]}\nobreak \hyperdef{L}{X784E1255874FCA8A}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{AddedElementsCode({\slshape C, L})\index{AddedElementsCode@\texttt{AddedElementsCode}} \label{AddedElementsCode} }\hfill{\scriptsize (function)}}\\ \texttt{AddedElementsCode} returns code \mbox{\texttt{\slshape C}} after adding a list of codewords \mbox{\texttt{\slshape L}} to its elements. \mbox{\texttt{\slshape L}} must be a list of codeword input. The result is an unrestricted code. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := NullCode( 6, GF(2) ); a cyclic [6,0,6]6 nullcode over GF(2) gap> C2 := AddedElementsCode( C1, [ "111111" ] ); a (6,2,1..6)3 code with 1 word(s) added gap> IsCyclicCode( C2 ); true gap> C3 := AddedElementsCode( C2, [ "101010", "010101" ] ); a (6,4,1..6)2 code with 2 word(s) added gap> IsCyclicCode( C3 ); true \end{Verbatim} To remove elements from a code, use \texttt{RemovedElementsCode} (see \texttt{RemovedElementsCode} (\ref{RemovedElementsCode})). To add elements to the base of a linear code, use \texttt{AugmentedCode} (see \texttt{AugmentedCode} (\ref{AugmentedCode})). \subsection{\textcolor{Chapter }{ShortenedCode}} \logpage{[ 6, 1, 9 ]}\nobreak \hyperdef{L}{X81CBEAFF7B9DE6EF}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ShortenedCode({\slshape C[, L]})\index{ShortenedCode@\texttt{ShortenedCode}} \label{ShortenedCode} }\hfill{\scriptsize (function)}}\\ \texttt{ShortenedCode( C )} returns the code \mbox{\texttt{\slshape C}} shortened by taking a cross section. If \mbox{\texttt{\slshape C}} is a linear code, this is done by removing all codewords that start with a non-zero entry, after which the first column is cut off. If \mbox{\texttt{\slshape C}} was a $[n,k,d]$ code, the shortened code generally is a $[n-1,k-1,d]$ code. It is possible that the dimension remains the same; it is also possible that the minimum distance increases. If \mbox{\texttt{\slshape C}} is a non-linear code, \texttt{ShortenedCode} first checks which finite field element occurs most often in the first column of the codewords. The codewords not starting with this element are removed from the code, after which the first column is cut off. The resulting shortened code has at least the same minimum distance as \mbox{\texttt{\slshape C}}. This command can also be called using the syntax \texttt{ShortenedCode(C,L)}. When called in this format, \texttt{ShortenedCode} repeats the shortening process on each of the columns specified by \mbox{\texttt{\slshape L}}. \mbox{\texttt{\slshape L}} therefore is a list of integers. The column numbers in \mbox{\texttt{\slshape L}} are the numbers as they are before the shortening process. If \mbox{\texttt{\slshape L}} has $l$ entries, the returned code has a word length of $l$ positions shorter than \mbox{\texttt{\slshape C}}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := HammingCode( 4 ); a linear [15,11,3]1 Hamming (4,2) code over GF(2) gap> C2 := ShortenedCode( C1 ); a linear [14,10,3]2 shortened code gap> C3 := ElementsCode( ["1000", "1101", "0011" ], GF(2) ); a (4,3,1..4)2 user defined unrestricted code over GF(2) gap> MinimumDistance( C3 ); 2 gap> C4 := ShortenedCode( C3 ); a (3,2,2..3)1..2 shortened code gap> AsSSortedList( C4 ); [ [ 0 0 0 ], [ 1 0 1 ] ] gap> C5 := HammingCode( 5, GF(2) ); a linear [31,26,3]1 Hamming (5,2) code over GF(2) gap> C6 := ShortenedCode( C5, [ 1, 2, 3 ] ); a linear [28,23,3]2 shortened code gap> OptimalityLinearCode( C6 ); 0 \end{Verbatim} The function \texttt{LengthenedCode} lengthens the code again (only for linear codes), see \texttt{LengthenedCode} (\ref{LengthenedCode}). In general, this is not exactly the inverse function. \subsection{\textcolor{Chapter }{LengthenedCode}} \logpage{[ 6, 1, 10 ]}\nobreak \hyperdef{L}{X7A5D5419846FC867}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LengthenedCode({\slshape C[, i]})\index{LengthenedCode@\texttt{LengthenedCode}} \label{LengthenedCode} }\hfill{\scriptsize (function)}}\\ \texttt{LengthenedCode( C )} returns the code \mbox{\texttt{\slshape C}} lengthened. \mbox{\texttt{\slshape C}} must be a linear code. First, the all-ones vector is added to the generator matrix (see \texttt{AugmentedCode} (\ref{AugmentedCode})). If the all-ones vector was already a codeword, nothing happens to the code. Then, the code is extended \mbox{\texttt{\slshape i}} times (see \texttt{ExtendedCode} (\ref{ExtendedCode})). \mbox{\texttt{\slshape i}} is equal to $1$ by default. If \mbox{\texttt{\slshape C}} was an $[n,k]$ code, the new code generally is a $[n+i,k+1]$ code. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := CordaroWagnerCode( 5 ); a linear [5,2,3]2 Cordaro-Wagner code over GF(2) gap> C2 := LengthenedCode( C1 ); a linear [6,3,2]2..3 code, lengthened with 1 column(s) \end{Verbatim} \texttt{ShortenedCode}' shortens the code, see \texttt{ShortenedCode} (\ref{ShortenedCode}). In general, this is not exactly the inverse function. \subsection{\textcolor{Chapter }{SubCode}} \logpage{[ 6, 1, 11 ]}\nobreak \hyperdef{L}{X7982D699803ECD0F}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{SubCode({\slshape C[, s]})\index{SubCode@\texttt{SubCode}} \label{SubCode} }\hfill{\scriptsize (function)}}\\ This function \texttt{SubCode} returns a subcode of \mbox{\texttt{\slshape C}} by taking the first $k - s$ rows of the generator matrix of \mbox{\texttt{\slshape C}}, where $k$ is the dimension of \mbox{\texttt{\slshape C}}. The interger \mbox{\texttt{\slshape s}} may be omitted and in this case it is assumed as 1. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := BCHCode(31,11); a cyclic [31,11,11]7..11 BCH code, delta=11, b=1 over GF(2) gap> S1:= SubCode(C); a linear [31,10,11]7..13 subcode gap> WeightDistribution(S1); [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 190, 0, 0, 272, 255, 0, 0, 120, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] gap> S2:= SubCode(C, 8); a linear [31,3,11]14..20 subcode gap> History(S2); [ "a linear [31,3,11]14..20 subcode of", "a cyclic [31,11,11]7..11 BCH code, delta=11, b=1 over GF(2)" ] gap> WeightDistribution(S2); [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] \end{Verbatim} \subsection{\textcolor{Chapter }{ResidueCode}} \logpage{[ 6, 1, 12 ]}\nobreak \hyperdef{L}{X809376187C1525AA}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ResidueCode({\slshape C[, c]})\index{ResidueCode@\texttt{ResidueCode}} \label{ResidueCode} }\hfill{\scriptsize (function)}}\\ The function \texttt{ResidueCode} takes a codeword \mbox{\texttt{\slshape c}} of \mbox{\texttt{\slshape C}} (if \mbox{\texttt{\slshape c}} is omitted, a codeword of minimal weight is used). It removes this word and all its linear combinations from the code and then punctures the code in the coordinates where \mbox{\texttt{\slshape c}} is unequal to zero. The resulting code is an $[n-w, k-1, d-\lfloor w*(q-1)/q \rfloor ]$ code. \mbox{\texttt{\slshape C}} must be a linear code and \mbox{\texttt{\slshape c}} must be non-zero. If \mbox{\texttt{\slshape c}} is not in \mbox{\texttt{\slshape }} then no change is made to \mbox{\texttt{\slshape C}}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := BCHCode( 15, 7 ); a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2) gap> C2 := ResidueCode( C1 ); a linear [8,4,4]2 residue code gap> c := Codeword( [ 0,0,0,1,0,0,1,1,0,1,0,1,1,1,1 ], C1);; gap> C3 := ResidueCode( C1, c ); a linear [7,4,3]1 residue code \end{Verbatim} \subsection{\textcolor{Chapter }{ConstructionBCode}} \logpage{[ 6, 1, 13 ]}\nobreak \hyperdef{L}{X7E92DC9581F96594}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ConstructionBCode({\slshape C})\index{ConstructionBCode@\texttt{ConstructionBCode}} \label{ConstructionBCode} }\hfill{\scriptsize (function)}}\\ The function \texttt{ConstructionBCode} takes a binary linear code \mbox{\texttt{\slshape C}} and calculates the minimum distance of the dual of \mbox{\texttt{\slshape C}} (see \texttt{DualCode} (\ref{DualCode})). It then removes the columns of the parity check matrix of \mbox{\texttt{\slshape C}} where a codeword of the dual code of minimal weight has coordinates unequal to zero. The resulting matrix is a parity check matrix for an $[n-dd, k-dd+1, \geq d]$ code, where $dd$ is the minimum distance of the dual of \mbox{\texttt{\slshape C}}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := ReedMullerCode( 2, 5 ); a linear [32,16,8]6 Reed-Muller (2,5) code over GF(2) gap> C2 := ConstructionBCode( C1 ); a linear [24,9,8]5..10 Construction B (8 coordinates) gap> BoundsMinimumDistance( 24, 9, GF(2) ); rec( n := 24, k := 9, q := 2, references := rec( ), construction := [ [ Operation "UUVCode" ], [ [ [ Operation "UUVCode" ], [ [ [ Operation "DualCode" ], [ [ [ Operation "RepetitionCode" ], [ 6, 2 ] ] ] ], [ [ Operation "CordaroWagnerCode" ], [ 6 ] ] ] ], [ [ Operation "CordaroWagnerCode" ], [ 12 ] ] ] ], lowerBound := 8, lowerBoundExplanation := [ "Lb(24,9)=8, u u+v construction of C1 and C2:", "Lb(12,7)=4, u u+v construction of C1 and C2:", "Lb(6,5)=2, dual of the repetition code", "Lb(6,2)=4, Cordaro-Wagner code", "Lb(12,2)=8, Cordaro-Wagner code" ], upperBound := 8, upperBoundExplanation := [ "Ub(24,9)=8, otherwise construction B would contradict:", "Ub(18,4)=8, Griesmer bound" ] ) # so C2 is optimal \end{Verbatim} \subsection{\textcolor{Chapter }{DualCode}} \logpage{[ 6, 1, 14 ]}\nobreak \hyperdef{L}{X799B12F085ACB609}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DualCode({\slshape C})\index{DualCode@\texttt{DualCode}} \label{DualCode} }\hfill{\scriptsize (function)}}\\ \texttt{DualCode} returns the dual code of \mbox{\texttt{\slshape C}}. The dual code consists of all codewords that are orthogonal to the codewords of \mbox{\texttt{\slshape C}}. If \mbox{\texttt{\slshape C}} is a linear code with generator matrix $G$, the dual code has parity check matrix $G$ (or if \mbox{\texttt{\slshape C}} has parity check matrix $H$, the dual code has generator matrix $H$). So if \mbox{\texttt{\slshape C}} is a linear $[n, k]$ code, the dual code of \mbox{\texttt{\slshape C}} is a linear $[n, n-k]$ code. If \mbox{\texttt{\slshape C}} is a cyclic code with generator polynomial $g(x)$, the dual code has the reciprocal polynomial of $g(x)$ as check polynomial. The dual code is always a linear code, even if \mbox{\texttt{\slshape C}} is non-linear. If a code \mbox{\texttt{\slshape C}} is equal to its dual code, it is called \emph{self-dual}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> R := ReedMullerCode( 1, 3 ); a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) gap> RD := DualCode( R ); a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) gap> R = RD; true gap> N := WholeSpaceCode( 7, GF(4) ); a cyclic [7,7,1]0 whole space code over GF(4) gap> DualCode( N ) = NullCode( 7, GF(4) ); true \end{Verbatim} \index{self-dual} \subsection{\textcolor{Chapter }{ConversionFieldCode}} \logpage{[ 6, 1, 15 ]}\nobreak \hyperdef{L}{X81FE1F387DFCCB22}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ConversionFieldCode({\slshape C})\index{ConversionFieldCode@\texttt{ConversionFieldCode}} \label{ConversionFieldCode} }\hfill{\scriptsize (function)}}\\ \texttt{ConversionFieldCode} returns the code obtained from \mbox{\texttt{\slshape C}} after converting its field. If the field of \mbox{\texttt{\slshape C}} is $GF(q^m)$, the returned code has field $GF(q)$. Each symbol of every codeword is replaced by a concatenation of $m$ symbols from $GF(q)$. If \mbox{\texttt{\slshape C}} is an $(n, M, d_1)$ code, the returned code is a $(n\cdot m, M, d_2)$ code, where $d_2 > d_1$. See also \texttt{HorizontalConversionFieldMat} (\ref{HorizontalConversionFieldMat}). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> R := RepetitionCode( 4, GF(4) ); a cyclic [4,1,4]3 repetition code over GF(4) gap> R2 := ConversionFieldCode( R ); a linear [8,2,4]3..4 code, converted to basefield GF(2) gap> Size( R ) = Size( R2 ); true gap> GeneratorMat( R ); [ [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ] ] gap> GeneratorMat( R2 ); [ [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ] ] \end{Verbatim} \subsection{\textcolor{Chapter }{TraceCode}} \logpage{[ 6, 1, 16 ]}\nobreak \hyperdef{L}{X82D18907800FE3D9}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{TraceCode({\slshape C})\index{TraceCode@\texttt{TraceCode}} \label{TraceCode} }\hfill{\scriptsize (function)}}\\ Input: \mbox{\texttt{\slshape C}} is a linear code defined over an extension $E$ of \mbox{\texttt{\slshape F}} (\mbox{\texttt{\slshape F}} is the ``base field'') Output: The linear code generated by $Tr_{E/F}(c)$, for all $c \in C$. \texttt{TraceCode} returns the image of the code \mbox{\texttt{\slshape C}} under the trace map. If the field of \mbox{\texttt{\slshape C}} is $GF(q^m)$, the returned code has field $GF(q)$. Very slow. It does not seem to be easy to related the parameters of the trace code to the original except in the ``Galois closed'' case. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=RandomLinearCode(10,4,GF(4)); MinimumDistance(C); a [10,4,?] randomly generated code over GF(4) 5 gap> trC:=TraceCode(C,GF(2)); MinimumDistance(trC); a linear [10,7,1]1..3 user defined unrestricted code over GF(2) 1 \end{Verbatim} \subsection{\textcolor{Chapter }{CosetCode}} \logpage{[ 6, 1, 17 ]}\nobreak \hyperdef{L}{X8799F4BF81B0842B}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CosetCode({\slshape C, w})\index{CosetCode@\texttt{CosetCode}} \label{CosetCode} }\hfill{\scriptsize (function)}}\\ \texttt{CosetCode} returns the coset of a code \mbox{\texttt{\slshape C}} with respect to word \mbox{\texttt{\slshape w}}. \mbox{\texttt{\slshape w}} must be of the codeword type. Then, \mbox{\texttt{\slshape w}} is added to each codeword of \mbox{\texttt{\slshape C}}, yielding the elements of the new code. If \mbox{\texttt{\slshape C}} is linear and \mbox{\texttt{\slshape w}} is an element of \mbox{\texttt{\slshape C}}, the new code is equal to \mbox{\texttt{\slshape C}}, otherwise the new code is an unrestricted code. Generating a coset is also possible by simply adding the word \mbox{\texttt{\slshape w}} to \mbox{\texttt{\slshape C}}. See \ref{Operations for Codes}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> H := HammingCode(3, GF(2)); a linear [7,4,3]1 Hamming (3,2) code over GF(2) gap> c := Codeword("1011011");; c in H; false gap> C := CosetCode(H, c); a (7,16,3)1 coset code gap> List(AsSSortedList(C), el-> Syndrome(H, el)); [ [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ] ] # All elements of the coset have the same syndrome in H \end{Verbatim} \subsection{\textcolor{Chapter }{ConstantWeightSubcode}} \logpage{[ 6, 1, 18 ]}\nobreak \hyperdef{L}{X873EA5EE85699832}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ConstantWeightSubcode({\slshape C, w})\index{ConstantWeightSubcode@\texttt{ConstantWeightSubcode}} \label{ConstantWeightSubcode} }\hfill{\scriptsize (function)}}\\ \texttt{ConstantWeightSubcode} returns the subcode of \mbox{\texttt{\slshape C}} that only has codewords of weight \mbox{\texttt{\slshape w}}. The resulting code is a non-linear code, because it does not contain the all-zero vector. This command also can be called with the syntax \texttt{ConstantWeightSubcode(C)} In this format, \texttt{ConstantWeightSubcode} returns the subcode of \mbox{\texttt{\slshape C}} consisting of all minimum weight codewords of \mbox{\texttt{\slshape C}}. \texttt{ConstantWeightSubcode} first checks if Leon's binary \texttt{wtdist} exists on your computer (in the default directory). If it does, then this program is called. Otherwise, the constant weight subcode is computed using a GAP program which checks each codeword in \mbox{\texttt{\slshape C}} to see if it is of the desired weight. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> N := NordstromRobinsonCode();; WeightDistribution(N); [ 1, 0, 0, 0, 0, 0, 112, 0, 30, 0, 112, 0, 0, 0, 0, 0, 1 ] gap> C := ConstantWeightSubcode(N, 8); a (16,30,6..16)5..8 code with codewords of weight 8 gap> WeightDistribution(C); [ 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0 ] gap> eg := ExtendedTernaryGolayCode();; WeightDistribution(eg); [ 1, 0, 0, 0, 0, 0, 264, 0, 0, 440, 0, 0, 24 ] gap> C := ConstantWeightSubcode(eg); a (12,264,6..12)3..6 code with codewords of weight 6 gap> WeightDistribution(C); [ 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0 ] \end{Verbatim} \subsection{\textcolor{Chapter }{StandardFormCode}} \logpage{[ 6, 1, 19 ]}\nobreak \hyperdef{L}{X7AA203A380BC4C79}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{StandardFormCode({\slshape C})\index{StandardFormCode@\texttt{StandardFormCode}} \label{StandardFormCode} }\hfill{\scriptsize (function)}}\\ \texttt{StandardFormCode} returns \mbox{\texttt{\slshape C}} after putting it in standard form. If \mbox{\texttt{\slshape C}} is a non-linear code, this means the elements are organized using lexicographical order. This means they form a legal GAP `Set'. If \mbox{\texttt{\slshape C}} is a linear code, the generator matrix and parity check matrix are put in standard form. The generator matrix then has an identity matrix in its left part, the parity check matrix has an identity matrix in its right part. Although \textsf{GUAVA} always puts both matrices in a standard form using \texttt{BaseMat}, this never alters the code. \texttt{StandardFormCode} even applies column permutations if unavoidable, and thereby changes the code. The column permutations are recorded in the construction history of the new code (see \texttt{Display} (\ref{Display})). \mbox{\texttt{\slshape C}} and the new code are of course equivalent. If \mbox{\texttt{\slshape C}} is a cyclic code, its generator matrix cannot be put in the usual upper triangular form, because then it would be inconsistent with the generator polynomial. The reason is that generating the elements from the generator matrix would result in a different order than generating the elements from the generator polynomial. This is an unwanted effect, and therefore \texttt{StandardFormCode} just returns a copy of \mbox{\texttt{\slshape C}} for cyclic codes. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> G := GeneratorMatCode( Z(2) * [ [0,1,1,0], [0,1,0,1], [0,0,1,1] ], "random form code", GF(2) ); a linear [4,2,1..2]1..2 random form code over GF(2) gap> Codeword( GeneratorMat( G ) ); [ [ 0 1 0 1 ], [ 0 0 1 1 ] ] gap> Codeword( GeneratorMat( StandardFormCode( G ) ) ); [ [ 1 0 0 1 ], [ 0 1 0 1 ] ] \end{Verbatim} \subsection{\textcolor{Chapter }{PiecewiseConstantCode}} \logpage{[ 6, 1, 20 ]}\nobreak \hyperdef{L}{X7EF49A257D6DB53B}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PiecewiseConstantCode({\slshape part, wts[, F]})\index{PiecewiseConstantCode@\texttt{PiecewiseConstantCode}} \label{PiecewiseConstantCode} }\hfill{\scriptsize (function)}}\\ \texttt{PiecewiseConstantCode} returns a code with length $n = \sum n_i$, where \mbox{\texttt{\slshape part}}=$[ n_1, \dots, n_k ]$. \mbox{\texttt{\slshape wts}} is a list of \mbox{\texttt{\slshape constraints}} $w=(w_1,...,w_k)$, each of length $k$, where $0 \leq w_i \leq n_i$. The default field is $GF(2)$. A constraint is a list of integers, and a word $c = ( c_1, \dots, c_k )$ (according to \mbox{\texttt{\slshape part}}, i.e., each $c_i$ is a subword of length $n_i$) is in the resulting code if and only if, for some constraint $w \in$ \mbox{\texttt{\slshape wts}}, $\|c_i\| = w_i$ for all $1 \leq i \leq k$, where $\| ...\|$ denotes the Hamming weight. An example might make things clearer: } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> PiecewiseConstantCode( [ 2, 3 ], [ [ 0, 0 ], [ 0, 3 ], [ 1, 0 ], [ 2, 2 ] ],GF(2) ); the C code programs are compiled, so using Leon's binary.... the C code programs are compiled, so using Leon's binary.... the C code programs are compiled, so using Leon's binary.... the C code programs are compiled, so using Leon's binary.... a (5,7,1..5)1..5 piecewise constant code over GF(2) gap> AsSSortedList(last); [ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 0 0 ], [ 1 0 0 0 0 ], [ 1 1 0 1 1 ], [ 1 1 1 0 1 ], [ 1 1 1 1 0 ] ] gap> \end{Verbatim} The first constraint is satisfied by codeword 1, the second by codeword 2, the third by codewords 3 and 4, and the fourth by codewords 5, 6 and 7. } \section{\textcolor{Chapter }{ Functions that Generate a New Code from Two or More Given Codes }}\logpage{[ 6, 2, 0 ]} \hyperdef{L}{X7964BF0081CC8352}{} { \label{Functions that Generate a New Code from Two or More Given Codes} \subsection{\textcolor{Chapter }{DirectSumCode}} \logpage{[ 6, 2, 1 ]}\nobreak \hyperdef{L}{X79E00D3A8367D65A}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DirectSumCode({\slshape C1, C2})\index{DirectSumCode@\texttt{DirectSumCode}} \label{DirectSumCode} }\hfill{\scriptsize (function)}}\\ \texttt{DirectSumCode} returns the direct sum of codes \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}}. The direct sum code consists of every codeword of \mbox{\texttt{\slshape C1}} concatenated by every codeword of \mbox{\texttt{\slshape C2}}. Therefore, if \mbox{\texttt{\slshape Ci}} was a $(n_i,M_i,d_i)$ code, the result is a $(n_1+n_2,M_1*M_2,min(d_1,d_2))$ code. If both \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}} are linear codes, the result is also a linear code. If one of them is non-linear, the direct sum is non-linear too. In general, a direct sum code is not cyclic. Performing a direct sum can also be done by adding two codes (see Section \ref{Operations for Codes}). Another often used method is the `u, u+v'-construction, described in \texttt{UUVCode} (\ref{UUVCode}). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := ElementsCode( [ [1,0], [4,5] ], GF(7) );; gap> C2 := ElementsCode( [ [0,0,0], [3,3,3] ], GF(7) );; gap> D := DirectSumCode(C1, C2);; gap> AsSSortedList(D); [ [ 1 0 0 0 0 ], [ 1 0 3 3 3 ], [ 4 5 0 0 0 ], [ 4 5 3 3 3 ] ] gap> D = C1 + C2; # addition = direct sum true \end{Verbatim} \subsection{\textcolor{Chapter }{UUVCode}} \logpage{[ 6, 2, 2 ]}\nobreak \hyperdef{L}{X86E9D6DE7F1A07E6}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UUVCode({\slshape C1, C2})\index{UUVCode@\texttt{UUVCode}} \label{UUVCode} }\hfill{\scriptsize (function)}}\\ \texttt{UUVCode} returns the so-called $(u\|u+v)$ construction applied to \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}}. The resulting code consists of every codeword $u$ of \mbox{\texttt{\slshape C1}} concatenated by the sum of $u$ and every codeword $v$ of \mbox{\texttt{\slshape C2}}. If \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}} have different word lengths, sufficient zeros are added to the shorter code to make this sum possible. If \mbox{\texttt{\slshape Ci}} is a $(n_i,M_i,d_i)$ code, the result is an $(n_1+max(n_1,n_2),M_1\cdot M_2,min(2\cdot d_1,d_2))$ code. If both \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}} are linear codes, the result is also a linear code. If one of them is non-linear, the UUV sum is non-linear too. In general, a UUV sum code is not cyclic. The function \texttt{DirectSumCode} returns another sum of codes (see \texttt{DirectSumCode} (\ref{DirectSumCode})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := EvenWeightSubcode(WholeSpaceCode(4, GF(2))); a cyclic [4,3,2]1 even weight subcode gap> C2 := RepetitionCode(4, GF(2)); a cyclic [4,1,4]2 repetition code over GF(2) gap> R := UUVCode(C1, C2); a linear [8,4,4]2 U U+V construction code gap> R = ReedMullerCode(1,3); true \end{Verbatim} \subsection{\textcolor{Chapter }{DirectProductCode}} \logpage{[ 6, 2, 3 ]}\nobreak \hyperdef{L}{X7BFBBA5784C293C1}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DirectProductCode({\slshape C1, C2})\index{DirectProductCode@\texttt{DirectProductCode}} \label{DirectProductCode} }\hfill{\scriptsize (function)}}\\ \texttt{DirectProductCode} returns the direct product of codes \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}}. Both must be linear codes. Suppose \mbox{\texttt{\slshape Ci}} has generator matrix $G_i$. The direct product of \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}} then has the Kronecker product of $G_1$ and $G_2$ as the generator matrix (see the GAP command \texttt{KroneckerProduct}). If \mbox{\texttt{\slshape Ci}} is a $[n_i, k_i, d_i]$ code, the direct product then is an $[n_1\cdot n_2,k_1\cdot k_2,d_1\cdot d_2]$ code. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> L1 := LexiCode(10, 4, GF(2)); a linear [10,5,4]2..4 lexicode over GF(2) gap> L2 := LexiCode(8, 3, GF(2)); a linear [8,4,3]2..3 lexicode over GF(2) gap> D := DirectProductCode(L1, L2); a linear [80,20,12]20..45 direct product code \end{Verbatim} \subsection{\textcolor{Chapter }{IntersectionCode}} \logpage{[ 6, 2, 4 ]}\nobreak \hyperdef{L}{X78F0B1BC81FB109C}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IntersectionCode({\slshape C1, C2})\index{IntersectionCode@\texttt{IntersectionCode}} \label{IntersectionCode} }\hfill{\scriptsize (function)}}\\ \texttt{IntersectionCode} returns the intersection of codes \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}}. This code consists of all codewords that are both in \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}}. If both codes are linear, the result is also linear. If both are cyclic, the result is also cyclic. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := CyclicCodes(7, GF(2)); [ a cyclic [7,7,1]0 enumerated code over GF(2), a cyclic [7,6,1..2]1 enumerated code over GF(2), a cyclic [7,3,1..4]2..3 enumerated code over GF(2), a cyclic [7,0,7]7 enumerated code over GF(2), a cyclic [7,3,1..4]2..3 enumerated code over GF(2), a cyclic [7,4,1..3]1 enumerated code over GF(2), a cyclic [7,1,7]3 enumerated code over GF(2), a cyclic [7,4,1..3]1 enumerated code over GF(2) ] gap> IntersectionCode(C[6], C[8]) = C[7]; true \end{Verbatim} \index{hull} The \emph{hull} of a linear code is the intersection of the code with its dual code. In other words, the hull of $C$ is \texttt{IntersectionCode(C, DualCode(C))}. \subsection{\textcolor{Chapter }{UnionCode}} \logpage{[ 6, 2, 5 ]}\nobreak \hyperdef{L}{X8228A1F57A29B8F4}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UnionCode({\slshape C1, C2})\index{UnionCode@\texttt{UnionCode}} \label{UnionCode} }\hfill{\scriptsize (function)}}\\ \texttt{UnionCode} returns the union of codes \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}}. This code consists of the union of all codewords of \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}} and all linear combinations. Therefore this function works only for linear codes. The function \texttt{AddedElementsCode} can be used for non-linear codes, or if the resulting code should not include linear combinations. See \texttt{AddedElementsCode} (\ref{AddedElementsCode}). If both arguments are cyclic, the result is also cyclic. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> G := GeneratorMatCode([[1,0,1],[0,1,1]]*Z(2)^0, GF(2)); a linear [3,2,1..2]1 code defined by generator matrix over GF(2) gap> H := GeneratorMatCode([[1,1,1]]*Z(2)^0, GF(2)); a linear [3,1,3]1 code defined by generator matrix over GF(2) gap> U := UnionCode(G, H); a linear [3,3,1]0 union code gap> c := Codeword("010");; c in G; false gap> c in H; false gap> c in U; true \end{Verbatim} \subsection{\textcolor{Chapter }{ExtendedDirectSumCode}} \logpage{[ 6, 2, 6 ]}\nobreak \hyperdef{L}{X7A85F8AF8154D387}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ExtendedDirectSumCode({\slshape L, B, m})\index{ExtendedDirectSumCode@\texttt{ExtendedDirectSumCode}} \label{ExtendedDirectSumCode} }\hfill{\scriptsize (function)}}\\ The extended direct sum construction is described in section V of Graham and Sloane \cite{GS85}. The resulting code consists of \mbox{\texttt{\slshape m}} copies of \mbox{\texttt{\slshape L}}, extended by repeating the codewords of \mbox{\texttt{\slshape B}} \mbox{\texttt{\slshape m}} times. Suppose \mbox{\texttt{\slshape L}} is an $[n_L, k_L]r_L$ code, and \mbox{\texttt{\slshape B}} is an $[n_L, k_B]r_B$ code (non-linear codes are also permitted). The length of \mbox{\texttt{\slshape B}} must be equal to the length of \mbox{\texttt{\slshape L}}. The length of the new code is $n = m n_L$, the dimension (in the case of linear codes) is $k \leq m k_L + k_B$, and the covering radius is $r \leq \lfloor m \Psi( L, B ) \rfloor$, with \[ \Psi( L, B ) = \max_{u \in F_2^{n_L}} \frac{1}{2^{k_B}} \sum_{v \in B} {\rm d}( L, v + u ). \] However, this computation will not be executed, because it may be too time consuming for large codes. If $L \subseteq B$, and $L$ and $B$ are linear codes, the last copy of \mbox{\texttt{\slshape L}} is omitted. In this case the dimension is $k = m k_L + (k_B - k_L)$. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> c := HammingCode( 3, GF(2) ); a linear [7,4,3]1 Hamming (3,2) code over GF(2) gap> d := WholeSpaceCode( 7, GF(2) ); a cyclic [7,7,1]0 whole space code over GF(2) gap> e := ExtendedDirectSumCode( c, d, 3 ); a linear [21,15,1..3]2 3-fold extended direct sum code \end{Verbatim} \subsection{\textcolor{Chapter }{AmalgamatedDirectSumCode}} \logpage{[ 6, 2, 7 ]}\nobreak \hyperdef{L}{X7E17107686A845DB}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{AmalgamatedDirectSumCode({\slshape c1, c2[, check]})\index{AmalgamatedDirectSumCode@\texttt{AmalgamatedDirectSumCode}} \label{AmalgamatedDirectSumCode} }\hfill{\scriptsize (function)}}\\ \texttt{AmalgamatedDirectSumCode} returns the amalgamated direct sum of the codes \mbox{\texttt{\slshape c1}} and \mbox{\texttt{\slshape c2}}. The amalgamated direct sum code consists of all codewords of the form $(u \, \| \,0 \, \| \, v)$ if $(u \, \| \, 0) \in c_1$ and $(0 \, \| \, v) \in c_2$ and all codewords of the form $(u \, \| \, 1 \, \| \, v)$ if $(u \, \| \, 1) \in c_1$ and $(1 \, \| \, v) \in c_2$. The result is a code with length $ n = n_1 + n_2 - 1 $ and size $ M \leq M_1 \cdot M_2 / 2 $. If both codes are linear, they will first be standardized, with information symbols in the last and first coordinates of the first and second code, respectively. If \mbox{\texttt{\slshape c1}} is a normal code (see \texttt{IsNormalCode} (\ref{IsNormalCode})) with the last coordinate acceptable (see \texttt{IsCoordinateAcceptable} (\ref{IsCoordinateAcceptable})), and \mbox{\texttt{\slshape c2}} is a normal code with the first coordinate acceptable, then the covering radius of the new code is $r \leq r_1 + r_2 $. However, checking whether a code is normal or not is a lot of work, and almost all codes seem to be normal. Therefore, an option \mbox{\texttt{\slshape check}} can be supplied. If \mbox{\texttt{\slshape check}} is true, then the codes will be checked for normality. If \mbox{\texttt{\slshape check}} is false or omitted, then the codes will not be checked. In this case it is assumed that they are normal. Acceptability of the last and first coordinate of the first and second code, respectively, is in the last case also assumed to be done by the user. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> c := HammingCode( 3, GF(2) ); a linear [7,4,3]1 Hamming (3,2) code over GF(2) gap> d := ReedMullerCode( 1, 4 ); a linear [16,5,8]6 Reed-Muller (1,4) code over GF(2) gap> e := DirectSumCode( c, d ); a linear [23,9,3]7 direct sum code gap> f := AmalgamatedDirectSumCode( c, d );; gap> MinimumDistance( f );; gap> CoveringRadius( f );; gap> f; a linear [22,8,3]7 amalgamated direct sum code \end{Verbatim} \subsection{\textcolor{Chapter }{BlockwiseDirectSumCode}} \logpage{[ 6, 2, 8 ]}\nobreak \hyperdef{L}{X7D8981AF7DFE9814}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BlockwiseDirectSumCode({\slshape C1, L1, C2, L2})\index{BlockwiseDirectSumCode@\texttt{BlockwiseDirectSumCode}} \label{BlockwiseDirectSumCode} }\hfill{\scriptsize (function)}}\\ \texttt{BlockwiseDirectSumCode} returns a subcode of the direct sum of \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}}. The fields of \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}} must be same. The lists \mbox{\texttt{\slshape L1}} and \mbox{\texttt{\slshape L2}} are two equally long with elements from the ambient vector spaces of \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}}, respectively, \emph{or} \mbox{\texttt{\slshape L1}} and \mbox{\texttt{\slshape L2}} are two equally long lists containing codes. The union of the codes in \mbox{\texttt{\slshape L1}} and \mbox{\texttt{\slshape L2}} must be \mbox{\texttt{\slshape C1}} and \mbox{\texttt{\slshape C2}}, respectively. In the first case, the blockwise direct sum code is defined as \[ bds = \bigcup_{1 \leq i \leq \ell} ( C_1 + (L_1)_i ) \oplus ( C_2 + (L_2)_i ), \] where $\ell$ is the length of \mbox{\texttt{\slshape L1}} and \mbox{\texttt{\slshape L2}}, and $\oplus$ is the direct sum. In the second case, it is defined as \[ bds = \bigcup_{1 \leq i \leq \ell} ( (L_1)_i \oplus (L_2)_i ). \] The length of the new code is $n = n_1 + n_2$. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := HammingCode( 3, GF(2) );; gap> C2 := EvenWeightSubcode( WholeSpaceCode( 6, GF(2) ) );; gap> BlockwiseDirectSumCode( C1, [[ 0,0,0,0,0,0,0 ],[ 1,0,1,0,1,0,0 ]], > C2, [[ 0,0,0,0,0,0 ],[ 1,0,1,0,1,0 ]] ); a (13,1024,1..13)1..2 blockwise direct sum code \end{Verbatim} \subsection{\textcolor{Chapter }{ConstructionXCode}} \logpage{[ 6, 2, 9 ]}\nobreak \hyperdef{L}{X7C37D467791CE99B}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ConstructionXCode({\slshape C, A})\index{ConstructionXCode@\texttt{ConstructionXCode}} \label{ConstructionXCode} }\hfill{\scriptsize (function)}}\\ Consider a list of $j$ linear codes of the same length $N$ over the same field $F$, $C = \{ C_1, C_2, \ldots, C_j \}$, where the parameter of the $i$th code is $C_i = [N, K_i, D_i]$ and $C_j \subset C_{j-1} \subset \ldots \subset C_2 \subset C_1$. Consider a list of $j-1$ auxiliary linear codes of the same field $F$, $A = \{ A_1, A_2, \ldots, A_{j-1} \}$ where the parameter of the $i$th code $A_i$ is $[n_i, k_i=(K_i-K_{i+1}), d_i]$, an $[n, K_1, d]$ linear code over field $F$ can be constructed where $n = N + \sum_{i=1}^{j-1} n_i$, and $d = \min\{ D_j, D_{j-1} + d_{j-1}, D_{j-2} + d_{j-2} + d_{j-1}, \ldots, D_1 + \sum_{i=1}^{j-1} d_i\}$. For more information on Construction X, refer to \cite{Sloane72}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C1 := BCHCode(127, 43); a cyclic [127,29,43]31..59 BCH code, delta=43, b=1 over GF(2) gap> C2 := BCHCode(127, 47); a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2) gap> C3 := BCHCode(127, 55); a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2) gap> G1 := ShallowCopy( GeneratorMat(C2) );; gap> Append(G1, [ GeneratorMat(C1)[23] ]);; gap> C1 := GeneratorMatCode(G1, GF(2)); a linear [127,23,1..43]35..63 code defined by generator matrix over GF(2) gap> MinimumDistance(C1); 43 gap> C := [ C1, C2, C3 ]; [ a linear [127,23,43]35..63 code defined by generator matrix over GF(2), a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2), a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2) ] gap> IsSubset(C[1], C[2]); true gap> IsSubset(C[2], C[3]); true gap> A := [ RepetitionCode(4, GF(2)), EvenWeightSubcode( QRCode(17, GF(2)) ) ]; [ a cyclic [4,1,4]2 repetition code over GF(2), a cyclic [17,8,6]3..6 even weight subcode ] gap> CX := ConstructionXCode(C, A); a linear [148,23,53]43..74 Construction X code gap> History(CX); [ "a linear [148,23,53]43..74 Construction X code of", "Base codes: [ a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2)\ , a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2), a linear \ [127,23,43]35..63 code defined by generator matrix over GF(2) ]", "Auxiliary codes: [ a cyclic [4,1,4]2 repetition code over GF(2), a cyclic [\ 17,8,6]3..6 even weight subcode ]" ] \end{Verbatim} \subsection{\textcolor{Chapter }{ConstructionXXCode}} \logpage{[ 6, 2, 10 ]}\nobreak \hyperdef{L}{X7B50943B8014134F}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ConstructionXXCode({\slshape C1, C2, C3, A1, A2})\index{ConstructionXXCode@\texttt{ConstructionXXCode}} \label{ConstructionXXCode} }\hfill{\scriptsize (function)}}\\ Consider a set of linear codes over field $F$ of the same length, $n$, $C_1=[n, k_1, d_1]$, $C_2=[n, k_2, d_2]$ and $C_3=[n, k_3, d_3]$ such that $C_2 \subset C_1$, $C_3 \subset C_1$ and $C_4 = C_2 \cap C_3$. Given two auxiliary codes $A_1=[n_1, k_1-k_2, e_1]$ and $A_2=[n_2, k_1-k_3, e_2]$ over the same field $F$, there exists an $[n+n_1+n_2, k_1, d]$ linear code $C_{XX}$ over field $F$, where $d = \min\{d_4, d_3 + e_1, d_2 + e_2, d_1 + e_1 + e_2\}$. The codewords of $C_{XX}$ can be partitioned into three sections $( v\;\|\;a\;\|\;b )$ where $v$ has length $n$, $a$ has length $n_1$ and $b$ has length $n_2$. A codeword from Construction XX takes the following form: \begin{itemize} \item $( v \; \| \; 0 \; \| \; 0 )$ if $v \in C_4$ \item $( v \; \| \; a_1 \; \| \; 0 )$ if $v \in C_3 \backslash C_4$ \item $( v \; \| \; 0 \; \| \; a_2 )$ if $v \in C_2 \backslash C_4$ \item $( v \; \| \; a_1 \; \| \; a_2 )$ otherwise \end{itemize} For more information on Construction XX, refer to \cite{Alltop84}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> a := PrimitiveRoot(GF(32)); Z(2^5) gap> f0 := MinimalPolynomial( GF(2), a^0 ); x_1+Z(2)^0 gap> f1 := MinimalPolynomial( GF(2), a^1 ); x_1^5+x_1^2+Z(2)^0 gap> f5 := MinimalPolynomial( GF(2), a^5 ); x_1^5+x_1^4+x_1^2+x_1+Z(2)^0 gap> C2 := CheckPolCode( f0 * f1, 31, GF(2) );; MinimumDistance(C2);; Display(C2); a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2) gap> C3 := CheckPolCode( f0 * f5, 31, GF(2) );; MinimumDistance(C3);; Display(C3); a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2) gap> C1 := UnionCode(C2, C3);; MinimumDistance(C1);; Display(C1); a linear [31,11,11]7..11 union code of U: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2) V: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2) gap> A1 := BestKnownLinearCode( 10, 5, GF(2) ); a linear [10,5,4]2..4 shortened code gap> A2 := DualCode( RepetitionCode(6, GF(2)) ); a cyclic [6,5,2]1 dual code gap> CXX:= ConstructionXXCode(C1, C2, C3, A1, A2 ); a linear [47,11,15..17]13..23 Construction XX code gap> MinimumDistance(CXX); 17 gap> History(CXX); [ "a linear [47,11,17]13..23 Construction XX code of", "C1: a cyclic [31,11,11]7..11 union code", "C2: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)", "C3: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)", "A1: a linear [10,5,4]2..4 shortened code", "A2: a cyclic [6,5,2]1 dual code" ] \end{Verbatim} \subsection{\textcolor{Chapter }{BZCode}} \logpage{[ 6, 2, 11 ]}\nobreak \hyperdef{L}{X790C614985BFAE16}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BZCode({\slshape O, I})\index{BZCode@\texttt{BZCode}} \label{BZCode} }\hfill{\scriptsize (function)}}\\ Given a set of outer codes of the same length $O_i = [N, K_i, D_i]$ over GF($q^{e_i}$), where $i=1,2,\ldots,t$ and a set of inner codes of the same length $I_i = [n, k_i, d_i]$ over GF($q$), \texttt{BZCode} returns a Blokh-Zyablov multilevel concatenated code with parameter $[ n \times N, \sum_{i=1}^t e_i \times K_i, \min_{i=1,\ldots,t}\{d_i \times D_i\} ]$ over GF($q$). Note that the set of inner codes must satisfy chain condition, i.e. $I_1 = [n, k_1, d_1] \subset I_2=[n, k_2, d_2] \subset \ldots \subset I_t=[n, k_t, d_t]$ where $0=k_0 < k_1 < k_2 < \ldots < k_t$. The dimension of the inner codes must satisfy the condition $e_i = k_i - k_{i-1}$, where GF($q^{e_i}$) is the field of the $i$th outer code. For more information on Blokh-Zyablov multilevel concatenated code, refer to \cite{Brouwer98}. } \subsection{\textcolor{Chapter }{BZCodeNC}} \logpage{[ 6, 2, 12 ]}\nobreak \hyperdef{L}{X820327D6854A50B5}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BZCodeNC({\slshape O, I})\index{BZCodeNC@\texttt{BZCodeNC}} \label{BZCodeNC} }\hfill{\scriptsize (function)}}\\ This function is the same as \texttt{BZCode}, except this version is faster as it does not estimate the covering radius of the code. Users are encouraged to use this version unless you are working on very small codes. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> # gap> # Binary code gap> # gap> O := [ CyclicMDSCode(2,3,7), BestKnownLinearCode(9,5,GF(2)), CyclicMDSCode(2,3,4) ]; [ a cyclic [9,7,3]1 MDS code over GF(8), a linear [9,5,3]2..3 shortened code, a cyclic [9,4,6]4..5 MDS code over GF(8) ] gap> A := ExtendedCode( HammingCode(3,GF(2)) );; gap> I := [ SubCode(A), A, DualCode( RepetitionCode(8, GF(2)) ) ]; [ a linear [8,3,4]3..4 subcode, a linear [8,4,4]2 extended code, a cyclic [8,7,2]1 dual code ] gap> C := BZCodeNC(O, I); a linear [72,38,12]0..72 Blokh Zyablov concatenated code gap> # gap> # Non binary code gap> # gap> O2 := ExtendedCode(GoppaCode(ConwayPolynomial(5,2), Elements(GF(5))));; gap> O3 := ExtendedCode(GoppaCode(ConwayPolynomial(5,3), Elements(GF(5))));; gap> O1 := DualCode( O3 );; gap> MinimumDistance(O1);; MinimumDistance(O2);; MinimumDistance(O3);; gap> Cy := CyclicCodes(5, GF(5));; gap> for i in [4, 5] do; MinimumDistance(Cy[i]);; od; gap> O := [ O1, O2, O3 ]; [ a linear [6,4,3]1 dual code, a linear [6,3,4]2..3 extended code, a linear [6,2,5]3..4 extended code ] gap> I := [ Cy[5], Cy[4], Cy[3] ]; [ a cyclic [5,1,5]3..4 enumerated code over GF(5), a cyclic [5,2,4]2..3 enumerated code over GF(5), a cyclic [5,3,1..3]2 enumerated code over GF(5) ] gap> C := BZCodeNC( O, I ); a linear [30,9,5..15]0..30 Blokh Zyablov concatenated code gap> MinimumDistance(C); 15 gap> History(C); [ "a linear [30,9,15]0..30 Blokh Zyablov concatenated code of", "Inner codes: [ a cyclic [5,1,5]3..4 enumerated code over GF(5), a cyclic [5\ ,2,4]2..3 enumerated code over GF(5), a cyclic [5,3,1..3]2 enumerated code ove\ r GF(5) ]", "Outer codes: [ a linear [6,4,3]1 dual code, a linear [6,3,4]2..3 extended c\ ode, a linear [6,2,5]3..4 extended code ]" ] \end{Verbatim} } } \chapter{\textcolor{Chapter }{ Bounds on codes, special matrices and miscellaneous functions }}\logpage{[ 7, 0, 0 ]} \hyperdef{L}{X7A814D518460862E}{} { In this chapter we describe functions that determine bounds on the size and minimum distance of codes (Section \ref{Distance bounds on codes}), functions that determine bounds on the size and covering radius of codes (Section \ref{Covering radius bounds on codes}), functions that work with special matrices \textsf{GUAVA} needs for several codes (see Section \ref{Special matrices in GUAVA}), and constructing codes or performing calculations with codes (see Section \ref{Miscellaneous functions}). \section{\textcolor{Chapter }{ Distance bounds on codes }}\logpage{[ 7, 1, 0 ]} \hyperdef{L}{X87C753EB840C34D3}{} { \label{Distance bounds on codes} This section describes the functions that calculate estimates for upper bounds on the size and minimum distance of codes. Several algorithms are known to compute a largest number of words a code can have with given length and minimum distance. It is important however to understand that in some cases the true upper bound is unknown. A code which has a size equalto the calculated upper bound may not have been found. However, codes that have a larger size do not exist. A second way to obtain bounds is a table. In \textsf{GUAVA}, an extensive table is implemented for linear codes over $GF(2)$, $GF(3)$ and $GF(4)$. It contains bounds on the minimum distance for given word length and dimension. It contains entries for word lengths less than or equal to $257$, $243$ and $256$ for codes over $GF(2)$, $GF(3)$ and $GF(4)$ respectively. These entries were obtained from Brouwer's tables as of 11 May 2006. For the latest information, please see A. E. Brouwer's tables \cite{Br} on the internet. Firstly, we describe functions that compute specific upper bounds on the code size (see \texttt{UpperBoundSingleton} (\ref{UpperBoundSingleton}), \texttt{UpperBoundHamming} (\ref{UpperBoundHamming}), \texttt{UpperBoundJohnson} (\ref{UpperBoundJohnson}), \texttt{UpperBoundPlotkin} (\ref{UpperBoundPlotkin}), \texttt{UpperBoundElias} (\ref{UpperBoundElias}) and \texttt{UpperBoundGriesmer} (\ref{UpperBoundGriesmer})). Next we describe a function that computes \textsf{GUAVA}'s best upper bound on the code size (see \texttt{UpperBound} (\ref{UpperBound})). Then we describe two functions that compute a lower and upper bound on the minimum distance of a code (see \texttt{LowerBoundMinimumDistance} (\ref{LowerBoundMinimumDistance}) and \texttt{UpperBoundMinimumDistance} (\ref{UpperBoundMinimumDistance})). Finally, we describe a function that returns a lower and upper bound on the minimum distance with given parameters and a description of how the bounds were obtained (see \texttt{BoundsMinimumDistance} (\ref{BoundsMinimumDistance})). \index{bounds, Singleton} \subsection{\textcolor{Chapter }{UpperBoundSingleton}} \logpage{[ 7, 1, 1 ]}\nobreak \hyperdef{L}{X8673277C7F6C04C3}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBoundSingleton({\slshape n, d, q})\index{UpperBoundSingleton@\texttt{UpperBoundSingleton}} \label{UpperBoundSingleton} }\hfill{\scriptsize (function)}}\\ \texttt{UpperBoundSingleton} returns the Singleton bound for a code of length \mbox{\texttt{\slshape n}}, minimum distance \mbox{\texttt{\slshape d}} over a field of size \mbox{\texttt{\slshape q}}. This bound is based on the shortening of codes. By shortening an $(n, M, d)$ code $d-1$ times, an $(n-d+1,M,1)$ code results, with $M \leq q^{n-d+1}$ (see \texttt{ShortenedCode} (\ref{ShortenedCode})). Thus \[ M \leq q^{n-d+1}. \] \index{maximum distance separable} Codes that meet this bound are called \emph{maximum distance separable} (see \texttt{IsMDSCode} (\ref{IsMDSCode})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> UpperBoundSingleton(4, 3, 5); 25 gap> C := ReedSolomonCode(4,3);; Size(C); 25 gap> IsMDSCode(C); true \end{Verbatim} \index{bounds, Hamming} \index{bounds, sphere packing bound} \index{perfect} \subsection{\textcolor{Chapter }{UpperBoundHamming}} \logpage{[ 7, 1, 2 ]}\nobreak \hyperdef{L}{X828095537C91FDFA}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBoundHamming({\slshape n, d, q})\index{UpperBoundHamming@\texttt{UpperBoundHamming}} \label{UpperBoundHamming} }\hfill{\scriptsize (function)}}\\ The Hamming bound (also known as the \emph{sphere packing bound}) returns an upper bound on the size of a code of length \mbox{\texttt{\slshape n}}, minimum distance \mbox{\texttt{\slshape d}}, over a field of size \mbox{\texttt{\slshape q}}. The Hamming bound is obtained by dividing the contents of the entire space $GF(q)^n$ by the contents of a ball with radius $\lfloor(d-1) / 2\rfloor$. As all these balls are disjoint, they can never contain more than the whole vector space. \[ M \leq {q^n \over V(n,e)}, \] where $M$ is the maxmimum number of codewords and $V(n,e)$ is equal to the contents of a ball of radius $e$ (see \texttt{SphereContent} (\ref{SphereContent})). This bound is useful for small values of \mbox{\texttt{\slshape d}}. Codes for which equality holds are called \emph{perfect} (see \texttt{IsPerfectCode} (\ref{IsPerfectCode})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> UpperBoundHamming( 15, 3, 2 ); 2048 gap> C := HammingCode( 4, GF(2) ); a linear [15,11,3]1 Hamming (4,2) code over GF(2) gap> Size( C ); 2048 \end{Verbatim} \index{bounds, Johnson} \subsection{\textcolor{Chapter }{UpperBoundJohnson}} \logpage{[ 7, 1, 3 ]}\nobreak \hyperdef{L}{X82EBFAAB7F5BFD4A}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBoundJohnson({\slshape n, d})\index{UpperBoundJohnson@\texttt{UpperBoundJohnson}} \label{UpperBoundJohnson} }\hfill{\scriptsize (function)}}\\ The Johnson bound is an improved version of the Hamming bound (see \texttt{UpperBoundHamming} (\ref{UpperBoundHamming})). In addition to the Hamming bound, it takes into account the elements of the space outside the balls of radius $e$ around the elements of the code. The Johnson bound only works for binary codes. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> UpperBoundJohnson( 13, 5 ); 77 gap> UpperBoundHamming( 13, 5, 2); 89 # in this case the Johnson bound is better \end{Verbatim} \index{bounds, Plotkin} \subsection{\textcolor{Chapter }{UpperBoundPlotkin}} \logpage{[ 7, 1, 4 ]}\nobreak \hyperdef{L}{X7A26E2537DFF4409}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBoundPlotkin({\slshape n, d, q})\index{UpperBoundPlotkin@\texttt{UpperBoundPlotkin}} \label{UpperBoundPlotkin} }\hfill{\scriptsize (function)}}\\ The function \texttt{UpperBoundPlotkin} calculates the sum of the distances of all ordered pairs of different codewords. It is based on the fact that the minimum distance is at most equal to the average distance. It is a good bound if the weights of the codewords do not differ much. It results in: \[ M \leq {d \over {d-(1-1/q)n}}, \] where $M$ is the maximum number of codewords. In this case, \mbox{\texttt{\slshape d}} must be larger than $(1-1/q)n$, but by shortening the code, the case $d \ \ \langle\ \ (1-1/q)n$ is covered. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> UpperBoundPlotkin( 15, 7, 2 ); 32 gap> C := BCHCode( 15, 7, GF(2) ); a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2) gap> Size(C); 32 gap> WeightDistribution(C); [ 1, 0, 0, 0, 0, 0, 0, 15, 15, 0, 0, 0, 0, 0, 0, 1 ] \end{Verbatim} \index{bounds, Elias} \subsection{\textcolor{Chapter }{UpperBoundElias}} \logpage{[ 7, 1, 5 ]}\nobreak \hyperdef{L}{X86A5A7C67F625A40}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBoundElias({\slshape n, d, q})\index{UpperBoundElias@\texttt{UpperBoundElias}} \label{UpperBoundElias} }\hfill{\scriptsize (function)}}\\ The Elias bound is an improvement of the Plotkin bound (see \texttt{UpperBoundPlotkin} (\ref{UpperBoundPlotkin})) for large codes. Subcodes are used to decrease the size of the code, in this case the subcode of all codewords within a certain ball. This bound is useful for large codes with relatively small minimum distances. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> UpperBoundPlotkin( 16, 3, 2 ); 12288 gap> UpperBoundElias( 16, 3, 2 ); 10280 gap> UpperBoundElias( 20, 10, 3 ); 16255 \end{Verbatim} \index{bounds, Griesmer} \subsection{\textcolor{Chapter }{UpperBoundGriesmer}} \logpage{[ 7, 1, 6 ]}\nobreak \hyperdef{L}{X82366C277E218130}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBoundGriesmer({\slshape n, d, q})\index{UpperBoundGriesmer@\texttt{UpperBoundGriesmer}} \label{UpperBoundGriesmer} }\hfill{\scriptsize (function)}}\\ The Griesmer bound is valid only for linear codes. It is obtained by counting the number of equal symbols in each row of the generator matrix of the code. By omitting the coordinates in which all rows have a zero, a smaller code results. The Griesmer bound is obtained by repeating this proces until a trivial code is left in the end. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> UpperBoundGriesmer( 13, 5, 2 ); 64 gap> UpperBoundGriesmer( 18, 9, 2 ); 8 # the maximum number of words for a linear code is 8 gap> Size( PuncturedCode( HadamardCode( 20, 1 ) ) ); 20 # this non-linear code has 20 elements \end{Verbatim} \index{Griesmer code} \subsection{\textcolor{Chapter }{IsGriesmerCode}} \logpage{[ 7, 1, 7 ]}\nobreak \hyperdef{L}{X8301FA9F7C6C7445}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsGriesmerCode({\slshape C})\index{IsGriesmerCode@\texttt{IsGriesmerCode}} \label{IsGriesmerCode} }\hfill{\scriptsize (function)}}\\ \texttt{IsGriesmerCode} returns `true' if a linear code \mbox{\texttt{\slshape C}} is a Griesmer code, and `false' otherwise. A code is called \emph{Griesmer} if its length satisfies \[ n = g[k,d] = \sum_{i=0}^{k-1} \lceil \frac{d}{q^i} \rceil. \] } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> IsGriesmerCode( HammingCode( 3, GF(2) ) ); true gap> IsGriesmerCode( BCHCode( 17, 2, GF(2) ) ); false \end{Verbatim} \index{$A(n,d)$} \subsection{\textcolor{Chapter }{UpperBound}} \logpage{[ 7, 1, 8 ]}\nobreak \hyperdef{L}{X7A5CB74485184FEE}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBound({\slshape n, d, q})\index{UpperBound@\texttt{UpperBound}} \label{UpperBound} }\hfill{\scriptsize (function)}}\\ \texttt{UpperBound} returns the best known upper bound $A(n,d)$ for the size of a code of length \mbox{\texttt{\slshape n}}, minimum distance \mbox{\texttt{\slshape d}} over a field of size \mbox{\texttt{\slshape q}}. The function \texttt{UpperBound} first checks for trivial cases (like $d=1$ or $n=d$), and if the value is in the built-in table. Then it calculates the minimum value of the upper bound using the methods of Singleton (see \texttt{UpperBoundSingleton} (\ref{UpperBoundSingleton})), Hamming (see \texttt{UpperBoundHamming} (\ref{UpperBoundHamming})), Johnson (see \texttt{UpperBoundJohnson} (\ref{UpperBoundJohnson})), Plotkin (see \texttt{UpperBoundPlotkin} (\ref{UpperBoundPlotkin})) and Elias (see \texttt{UpperBoundElias} (\ref{UpperBoundElias})). If the code is binary, $A(n, 2\cdot \ell-1) = A(n+1,2\cdot \ell)$, so the \texttt{UpperBound} takes the minimum of the values obtained from all methods for the parameters $(n, 2\cdot\ell-1)$ and $(n+1, 2\cdot \ell)$. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> UpperBound( 10, 3, 2 ); 85 gap> UpperBound( 25, 9, 8 ); 1211778792827540 \end{Verbatim} \subsection{\textcolor{Chapter }{LowerBoundMinimumDistance}} \logpage{[ 7, 1, 9 ]}\nobreak \hyperdef{L}{X7FDF54BA81115D88}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LowerBoundMinimumDistance({\slshape C})\index{LowerBoundMinimumDistance@\texttt{LowerBoundMinimumDistance}} \label{LowerBoundMinimumDistance} }\hfill{\scriptsize (function)}}\\ In this form, \texttt{LowerBoundMinimumDistance} returns a lower bound for the minimum distance of code \mbox{\texttt{\slshape C}}. This command can also be called using the syntax \texttt{LowerBoundMinimumDistance( n, k, F )}. In this form, \texttt{LowerBoundMinimumDistance} returns a lower bound for the minimum distance of the best known linear code of length \mbox{\texttt{\slshape n}}, dimension \mbox{\texttt{\slshape k}} over field \mbox{\texttt{\slshape F}}. It uses the mechanism explained in section \ref{BoundsMinimumDistance}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := BCHCode( 45, 7 ); a cyclic [45,23,7..9]6..16 BCH code, delta=7, b=1 over GF(2) gap> LowerBoundMinimumDistance( C ); 7 # designed distance is lower bound for minimum distance gap> LowerBoundMinimumDistance( 45, 23, GF(2) ); 10 \end{Verbatim} \index{bound, Gilbert-Varshamov lower} \subsection{\textcolor{Chapter }{LowerBoundGilbertVarshamov}} \logpage{[ 7, 1, 10 ]}\nobreak \hyperdef{L}{X7CF15D2084499869}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LowerBoundGilbertVarshamov({\slshape n, d, q})\index{LowerBoundGilbertVarshamov@\texttt{LowerBoundGilbertVarshamov}} \label{LowerBoundGilbertVarshamov} }\hfill{\scriptsize (function)}}\\ This is the lower bound due (independently) to Gilbert and Varshamov. It says that for each \mbox{\texttt{\slshape n}} and \mbox{\texttt{\slshape d}}, there exists a linear code having length $n$ and minimum distance $d$ at least of size $q^{n-1}/ SphereContent(n-1,d-2,GF(q))$. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> LowerBoundGilbertVarshamov(3,2,2); 4 gap> LowerBoundGilbertVarshamov(3,3,2); 1 gap> LowerBoundMinimumDistance(3,3,2); 1 gap> LowerBoundMinimumDistance(3,2,2); 2 \end{Verbatim} \index{bound, sphere packing lower} \subsection{\textcolor{Chapter }{LowerBoundSpherePacking}} \logpage{[ 7, 1, 11 ]}\nobreak \hyperdef{L}{X8217D830871286D8}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LowerBoundSpherePacking({\slshape n, d, q})\index{LowerBoundSpherePacking@\texttt{LowerBoundSpherePacking}} \label{LowerBoundSpherePacking} }\hfill{\scriptsize (function)}}\\ This is the lower bound due (independently) to Gilbert and Varshamov. It says that for each \mbox{\texttt{\slshape n}} and \mbox{\texttt{\slshape r}}, there exists an unrestricted code at least of size $q^n/ SphereContent(n,d,GF(q))$ minimum distance $d$. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> LowerBoundSpherePacking(3,2,2); 2 gap> LowerBoundSpherePacking(3,3,2); 1 \end{Verbatim} \subsection{\textcolor{Chapter }{UpperBoundMinimumDistance}} \logpage{[ 7, 1, 12 ]}\nobreak \hyperdef{L}{X7C6A58327BD6B685}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBoundMinimumDistance({\slshape C})\index{UpperBoundMinimumDistance@\texttt{UpperBoundMinimumDistance}} \label{UpperBoundMinimumDistance} }\hfill{\scriptsize (function)}}\\ In this form, \texttt{UpperBoundMinimumDistance} returns an upper bound for the minimum distance of code \mbox{\texttt{\slshape C}}. For unrestricted codes, it just returns the word length. For linear codes, it takes the minimum of the possibly known value from the method of construction, the weight of the generators, and the value from the table (see \ref{BoundsMinimumDistance}). This command can also be called using the syntax \texttt{UpperBoundMinimumDistance( n, k, F )}. In this form, \texttt{UpperBoundMinimumDistance} returns an upper bound for the minimum distance of the best known linear code of length \mbox{\texttt{\slshape n}}, dimension \mbox{\texttt{\slshape k}} over field \mbox{\texttt{\slshape F}}. It uses the mechanism explained in section \ref{BoundsMinimumDistance}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := BCHCode( 45, 7 );; gap> UpperBoundMinimumDistance( C ); 9 gap> UpperBoundMinimumDistance( 45, 23, GF(2) ); 11 \end{Verbatim} \subsection{\textcolor{Chapter }{BoundsMinimumDistance}} \logpage{[ 7, 1, 13 ]}\nobreak \hyperdef{L}{X7B3858B27A9E509A}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BoundsMinimumDistance({\slshape n, k, F})\index{BoundsMinimumDistance@\texttt{BoundsMinimumDistance}} \label{BoundsMinimumDistance} }\hfill{\scriptsize (function)}}\\ The function \texttt{BoundsMinimumDistance} calculates a lower and upper bound for the minimum distance of an optimal linear code with word length \mbox{\texttt{\slshape n}}, dimension \mbox{\texttt{\slshape k}} over field \mbox{\texttt{\slshape F}}. The function returns a record with the two bounds and an explanation for each bound. The function \texttt{Display} can be used to show the explanations. The values for the lower and upper bound are obtained from a table. \textsf{GUAVA} has tables containing lower and upper bounds for $q=2 (n \leq 257), 3 (n \leq 243), 4 (n \leq 256)$. (Current as of 11 May 2006.) These tables were derived from the table of Brouwer. (See \cite{Br}, \href{http://www.win.tue.nl/~aeb/voorlincod.html} {\texttt{http://www.win.tue.nl/\texttt{\symbol{126}}aeb/voorlincod.html}} for the most recent data.) For codes over other fields and for larger word lengths, trivial bounds are used. The resulting record can be used in the function \texttt{BestKnownLinearCode} (see \texttt{BestKnownLinearCode} (\ref{BestKnownLinearCode})) to construct a code with minimum distance equal to the lower bound. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> bounds := BoundsMinimumDistance( 7, 3 );; DisplayBoundsInfo( bounds ); an optimal linear [7,3,d] code over GF(2) has d=4 ------------------------------------------------------------------------------ Lb(7,3)=4, by shortening of: Lb(8,4)=4, u u+v construction of C1 and C2: Lb(4,3)=2, dual of the repetition code Lb(4,1)=4, repetition code ------------------------------------------------------------------------------ Ub(7,3)=4, Griesmer bound # The lower bound is equal to the upper bound, so a code with # these parameters is optimal. gap> C := BestKnownLinearCode( bounds );; Display( C ); a linear [7,3,4]2..3 shortened code of a linear [8,4,4]2 U U+V construction code of U: a cyclic [4,3,2]1 dual code of a cyclic [4,1,4]2 repetition code over GF(2) V: a cyclic [4,1,4]2 repetition code over GF(2) \end{Verbatim} } \section{\textcolor{Chapter }{ Covering radius bounds on codes }}\logpage{[ 7, 2, 0 ]} \hyperdef{L}{X817D0A647D3331EB}{} { \label{Covering radius bounds on codes} \subsection{\textcolor{Chapter }{BoundsCoveringRadius}} \logpage{[ 7, 2, 1 ]}\nobreak \hyperdef{L}{X8320D1C180A1AAAD}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BoundsCoveringRadius({\slshape C})\index{BoundsCoveringRadius@\texttt{BoundsCoveringRadius}} \label{BoundsCoveringRadius} }\hfill{\scriptsize (function)}}\\ \texttt{BoundsCoveringRadius} returns a list of integers. The first entry of this list is the maximum of some lower bounds for the covering radius of \mbox{\texttt{\slshape C}}, the last entry the minimum of some upper bounds of \mbox{\texttt{\slshape C}}. If the covering radius of \mbox{\texttt{\slshape C}} is known, a list of length 1 is returned. \texttt{BoundsCoveringRadius} makes use of the functions \texttt{GeneralLowerBoundCoveringRadius} and \texttt{GeneralUpperBoundCoveringRadius}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> BoundsCoveringRadius( BCHCode( 17, 3, GF(2) ) ); [ 3 .. 4 ] gap> BoundsCoveringRadius( HammingCode( 5, GF(2) ) ); [ 1 ] \end{Verbatim} \subsection{\textcolor{Chapter }{IncreaseCoveringRadiusLowerBound}} \logpage{[ 7, 2, 2 ]}\nobreak \hyperdef{L}{X7881E03E812140F4}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IncreaseCoveringRadiusLowerBound({\slshape C[, stopdist][, startword]})\index{IncreaseCoveringRadiusLowerBound@\texttt{IncreaseCoveringRadiusLowerBound}} \label{IncreaseCoveringRadiusLowerBound} }\hfill{\scriptsize (function)}}\\ \texttt{IncreaseCoveringRadiusLowerBound} tries to increase the lower bound of the covering radius of \mbox{\texttt{\slshape C}}. It does this by means of a probabilistic algorithm. This algorithm takes a random word in $GF(q)^n$ (or \mbox{\texttt{\slshape startword}} if it is specified), and, by changing random coordinates, tries to get as far from \mbox{\texttt{\slshape C}} as possible. If changing a coordinate finds a word that has a larger distance to the code than the previous one, the change is made permanent, and the algorithm starts all over again. If changing a coordinate does not find a coset leader that is further away from the code, then the change is made permanent with a chance of 1 in 100, if it gets the word closer to the code, or with a chance of 1 in 10, if the word stays at the same distance. Otherwise, the algorithm starts again with the same word as before. If the algorithm did not allow changes that decrease the distance to the code, it might get stuck in a sub-optimal situation (the coset leader corresponding to such a situation - i.e. no coordinate of this coset leader can be changed in such a way that we get at a larger distance from the code - is called an \emph{orphan}). If the algorithm finds a word that has distance \mbox{\texttt{\slshape stopdist}} to the code, it ends and returns that word, which can be used for further investigations. The variable \mbox{\texttt{\slshape InfoCoveringRadius}} can be set to \mbox{\texttt{\slshape Print}} to print the maximum distance reached so far every 1000 runs. The algorithm can be interrupted with \textsc{ctrl-C}, allowing the user to look at the word that is currently being examined (called `current'), or to change the chances that the new word is made permanent (these are called `staychance' and `downchance'). If one of these variables is $i$, then it corresponds with a $i$ in 100 chance. At the moment, the algorithm is only useful for codes with small dimension, where small means that the elements of the code fit in the memory. It works with larger codes, however, but when you use it for codes with large dimension, you should be \emph{very} patient. If running the algorithm quits GAP (due to memory problems), you can change the global variable \mbox{\texttt{\slshape CRMemSize}} to a lower value. This might cause the algorithm to run slower, but without quitting GAP. The only way to find out the best value of \mbox{\texttt{\slshape CRMemSize}} is by experimenting. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=RandomLinearCode(10,5,GF(2)); a [10,5,?] randomly generated code over GF(2) gap> IncreaseCoveringRadiusLowerBound(C,10); Number of runs: 1000 best distance so far: 3 Number of runs: 2000 best distance so far: 3 Number of changes: 100 Number of runs: 3000 best distance so far: 3 Number of runs: 4000 best distance so far: 3 Number of runs: 5000 best distance so far: 3 Number of runs: 6000 best distance so far: 3 Number of runs: 7000 best distance so far: 3 Number of changes: 200 Number of runs: 8000 best distance so far: 3 Number of runs: 9000 best distance so far: 3 Number of runs: 10000 best distance so far: 3 Number of changes: 300 Number of runs: 11000 best distance so far: 3 Number of runs: 12000 best distance so far: 3 Number of runs: 13000 best distance so far: 3 Number of changes: 400 Number of runs: 14000 best distance so far: 3 user interrupt at... # # used ctrl-c to break out of execution # ... called from IncreaseCoveringRadiusLowerBound( code, -1, current ) called from function( arguments ) called from read-eval-loop Entering break read-eval-print loop ... you can 'quit;' to quit to outer loop, or you can 'return;' to continue brk> current; [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ] brk> gap> CoveringRadius(C); 3 \end{Verbatim} \subsection{\textcolor{Chapter }{ExhaustiveSearchCoveringRadius}} \logpage{[ 7, 2, 3 ]}\nobreak \hyperdef{L}{X7AD9F1D27C52BC0F}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ExhaustiveSearchCoveringRadius({\slshape C})\index{ExhaustiveSearchCoveringRadius@\texttt{ExhaustiveSearchCoveringRadius}} \label{ExhaustiveSearchCoveringRadius} }\hfill{\scriptsize (function)}}\\ \texttt{ExhaustiveSearchCoveringRadius} does an exhaustive search to find the covering radius of \mbox{\texttt{\slshape C}}. Every time a coset leader of a coset with weight $w$ is found, the function tries to find a coset leader of a coset with weight $w+1$. It does this by enumerating all words of weight $w+1$, and checking whether a word is a coset leader. The start weight is the current known lower bound on the covering radius. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=RandomLinearCode(10,5,GF(2)); a [10,5,?] randomly generated code over GF(2) gap> ExhaustiveSearchCoveringRadius(C); Trying 3 ... [ 3 .. 5 ] gap> CoveringRadius(C); 3 \end{Verbatim} \subsection{\textcolor{Chapter }{GeneralLowerBoundCoveringRadius}} \logpage{[ 7, 2, 4 ]}\nobreak \hyperdef{L}{X85D671F4824B4B0C}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneralLowerBoundCoveringRadius({\slshape C})\index{GeneralLowerBoundCoveringRadius@\texttt{GeneralLowerBoundCoveringRadius}} \label{GeneralLowerBoundCoveringRadius} }\hfill{\scriptsize (function)}}\\ \texttt{GeneralLowerBoundCoveringRadius} returns a lower bound on the covering radius of \mbox{\texttt{\slshape C}}. It uses as many functions which names start with \texttt{LowerBoundCoveringRadius} as possible to find the best known lower bound (at least that \textsf{GUAVA} knows of) together with tables for the covering radius of binary linear codes with length not greater than $64$. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=RandomLinearCode(10,5,GF(2)); a [10,5,?] randomly generated code over GF(2) gap> GeneralLowerBoundCoveringRadius(C); 2 gap> CoveringRadius(C); 3 \end{Verbatim} \subsection{\textcolor{Chapter }{GeneralUpperBoundCoveringRadius}} \logpage{[ 7, 2, 5 ]}\nobreak \hyperdef{L}{X8638F5A67D6E50C1}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneralUpperBoundCoveringRadius({\slshape C})\index{GeneralUpperBoundCoveringRadius@\texttt{GeneralUpperBoundCoveringRadius}} \label{GeneralUpperBoundCoveringRadius} }\hfill{\scriptsize (function)}}\\ \texttt{GeneralUpperBoundCoveringRadius} returns an upper bound on the covering radius of \mbox{\texttt{\slshape C}}. It uses as many functions which names start with \texttt{UpperBoundCoveringRadius} as possible to find the best known upper bound (at least that \textsf{GUAVA} knows of). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=RandomLinearCode(10,5,GF(2)); a [10,5,?] randomly generated code over GF(2) gap> GeneralUpperBoundCoveringRadius(C); 4 gap> CoveringRadius(C); 3 \end{Verbatim} \subsection{\textcolor{Chapter }{LowerBoundCoveringRadiusSphereCovering}} \logpage{[ 7, 2, 6 ]}\nobreak \hyperdef{L}{X7E7FBCC87D5562AB}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LowerBoundCoveringRadiusSphereCovering({\slshape n, M[, F], false})\index{LowerBoundCoveringRadiusSphereCovering@\texttt{LowerBoundCoveringRadiusSphereCovering}} \label{LowerBoundCoveringRadiusSphereCovering} }\hfill{\scriptsize (function)}}\\ This command can also be called using the syntax \texttt{LowerBoundCoveringRadiusSphereCovering( n, r, [F,] true )}. If the last argument of \texttt{LowerBoundCoveringRadiusSphereCovering} is \mbox{\texttt{\slshape false}}, then it returns a lower bound for the covering radius of a code of size \mbox{\texttt{\slshape M}} and length \mbox{\texttt{\slshape n}}. Otherwise, it returns a lower bound for the size of a code of length \mbox{\texttt{\slshape n}} and covering radius \mbox{\texttt{\slshape r}}. \mbox{\texttt{\slshape F}} is the field over which the code is defined. If \mbox{\texttt{\slshape F}} is omitted, it is assumed that the code is over $GF(2)$. The bound is computed according to the sphere covering bound: \[ M \cdot V_q(n,r) \geq q^n \] where $V_q(n,r)$ is the size of a sphere of radius $r$ in $GF(q)^n$. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=RandomLinearCode(10,5,GF(2)); a [10,5,?] randomly generated code over GF(2) gap> Size(C); 32 gap> CoveringRadius(C); 3 gap> LowerBoundCoveringRadiusSphereCovering(10,32,GF(2),false); 2 gap> LowerBoundCoveringRadiusSphereCovering(10,3,GF(2),true); 6 \end{Verbatim} \subsection{\textcolor{Chapter }{LowerBoundCoveringRadiusVanWee1}} \logpage{[ 7, 2, 7 ]}\nobreak \hyperdef{L}{X85E20C518360AB70}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LowerBoundCoveringRadiusVanWee1({\slshape n, M[, F], false})\index{LowerBoundCoveringRadiusVanWee1@\texttt{LowerBoundCoveringRadiusVanWee1}} \label{LowerBoundCoveringRadiusVanWee1} }\hfill{\scriptsize (function)}}\\ This command can also be called using the syntax \texttt{LowerBoundCoveringRadiusVanWee1( n, r, [F,] true )}. If the last argument of \texttt{LowerBoundCoveringRadiusVanWee1} is \mbox{\texttt{\slshape false}}, then it returns a lower bound for the covering radius of a code of size \mbox{\texttt{\slshape M}} and length \mbox{\texttt{\slshape n}}. Otherwise, it returns a lower bound for the size of a code of length \mbox{\texttt{\slshape n}} and covering radius \mbox{\texttt{\slshape r}}. \mbox{\texttt{\slshape F}} is the field over which the code is defined. If \mbox{\texttt{\slshape F}} is omitted, it is assumed that the code is over $GF(2)$. The Van Wee bound is an improvement of the sphere covering bound: \[ M \cdot \left\{ V_q(n,r) - \frac{{n \choose r}}{\lceil\frac{n-r}{r+1}\rceil} \left(\left\lceil\frac{n+1}{r+1}\right\rceil - \frac{n+1}{r+1}\right) \right\} \geq q^n \] } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=RandomLinearCode(10,5,GF(2)); a [10,5,?] randomly generated code over GF(2) gap> Size(C); 32 gap> CoveringRadius(C); 3 gap> LowerBoundCoveringRadiusVanWee1(10,32,GF(2),false); 2 gap> LowerBoundCoveringRadiusVanWee1(10,3,GF(2),true); 6 \end{Verbatim} \subsection{\textcolor{Chapter }{LowerBoundCoveringRadiusVanWee2}} \logpage{[ 7, 2, 8 ]}\nobreak \hyperdef{L}{X7C72994A825228E7}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LowerBoundCoveringRadiusVanWee2({\slshape n, M, false})\index{LowerBoundCoveringRadiusVanWee2@\texttt{LowerBoundCoveringRadiusVanWee2}} \label{LowerBoundCoveringRadiusVanWee2} }\hfill{\scriptsize (function)}}\\ This command can also be called using the syntax \texttt{LowerBoundCoveringRadiusVanWee2( n, r [,true] )}. If the last argument of \texttt{LowerBoundCoveringRadiusVanWee2} is \mbox{\texttt{\slshape false}}, then it returns a lower bound for the covering radius of a code of size \mbox{\texttt{\slshape M}} and length \mbox{\texttt{\slshape n}}. Otherwise, it returns a lower bound for the size of a code of length \mbox{\texttt{\slshape n}} and covering radius \mbox{\texttt{\slshape r}}. This bound only works for binary codes. It is based on the following inequality: \[ M \cdot \frac{\left( \left( V_2(n,2) - \frac{1}{2}(r+2)(r-1) \right) V_2(n,r) + \varepsilon V_2(n,r-2) \right)} {(V_2(n,2) - \frac{1}{2}(r+2)(r-1) + \varepsilon)} \geq 2^n, \] where \[ \varepsilon = {r+2 \choose 2} \left\lceil {n-r+1 \choose 2} / {r+2 \choose 2} \right\rceil - {n-r+1 \choose 2}. \] } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=RandomLinearCode(10,5,GF(2)); a [10,5,?] randomly generated code over GF(2) gap> Size(C); 32 gap> CoveringRadius(C); 3 gap> LowerBoundCoveringRadiusVanWee2(10,32,false); 2 gap> LowerBoundCoveringRadiusVanWee2(10,3,true); 7 \end{Verbatim} \subsection{\textcolor{Chapter }{LowerBoundCoveringRadiusCountingExcess}} \logpage{[ 7, 2, 9 ]}\nobreak \hyperdef{L}{X7F95362485759ACB}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LowerBoundCoveringRadiusCountingExcess({\slshape n, M, false})\index{LowerBoundCoveringRadiusCountingExcess@\texttt{LowerBoundCoveringRadiusCountingExcess}} \label{LowerBoundCoveringRadiusCountingExcess} }\hfill{\scriptsize (function)}}\\ This command can also be called with \texttt{LowerBoundCoveringRadiusCountingExcess( n, r [,true] )}. If the last argument of \texttt{LowerBoundCoveringRadiusCountingExcess} is \mbox{\texttt{\slshape false}}, then it returns a lower bound for the covering radius of a code of size \mbox{\texttt{\slshape M}} and length \mbox{\texttt{\slshape n}}. Otherwise, it returns a lower bound for the size of a code of length \mbox{\texttt{\slshape n}} and covering radius \mbox{\texttt{\slshape r}}. This bound only works for binary codes. It is based on the following inequality: \[ M \cdot \left( \rho V_2(n,r) + \varepsilon V_2(n,r-1) \right) \geq (\rho + \varepsilon) 2^n, \] where \[ \varepsilon = (r+1) \left\lceil\frac{n+1}{r+1}\right\rceil - (n+1) \] and \[ \rho = \left\{ \begin{array}{l} n-3+\frac{2}{n}, \ \ \ \ \ \ {\rm if}\ r = 2\\ n-r-1 , \ \ \ \ \ \ {\rm if}\ r \geq 3 . \end{array} \right. \] } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=RandomLinearCode(10,5,GF(2)); a [10,5,?] randomly generated code over GF(2) gap> Size(C); 32 gap> CoveringRadius(C); 3 gap> LowerBoundCoveringRadiusCountingExcess(10,32,false); 0 gap> LowerBoundCoveringRadiusCountingExcess(10,3,true); 7 \end{Verbatim} \subsection{\textcolor{Chapter }{LowerBoundCoveringRadiusEmbedded1}} \logpage{[ 7, 2, 10 ]}\nobreak \hyperdef{L}{X829C14A383B5BF59}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LowerBoundCoveringRadiusEmbedded1({\slshape n, M, false})\index{LowerBoundCoveringRadiusEmbedded1@\texttt{LowerBoundCoveringRadiusEmbedded1}} \label{LowerBoundCoveringRadiusEmbedded1} }\hfill{\scriptsize (function)}}\\ This command can also be called with \texttt{LowerBoundCoveringRadiusEmbedded1( n, r [,true] )}. If the last argument of \texttt{LowerBoundCoveringRadiusEmbedded1} is 'false', then it returns a lower bound for the covering radius of a code of size \mbox{\texttt{\slshape M}} and length \mbox{\texttt{\slshape n}}. Otherwise, it returns a lower bound for the size of a code of length \mbox{\texttt{\slshape n}} and covering radius \mbox{\texttt{\slshape r}}. This bound only works for binary codes. It is based on the following inequality: \[ M \cdot \left( V_2(n,r) - {2r \choose r} \right) \geq 2^n - A( n, 2r+1 ) {2r \choose r}, \] where $A(n,d)$ denotes the maximal cardinality of a (binary) code of length $n$ and minimum distance $d$. The function \texttt{UpperBound} is used to compute this value. Sometimes \texttt{LowerBoundCoveringRadiusEmbedded1} is better than \texttt{LowerBoundCoveringRadiusEmbedded2}, sometimes it is the other way around. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=RandomLinearCode(10,5,GF(2)); a [10,5,?] randomly generated code over GF(2) gap> Size(C); 32 gap> CoveringRadius(C); 3 gap> LowerBoundCoveringRadiusEmbedded1(10,32,false); 2 gap> LowerBoundCoveringRadiusEmbedded1(10,3,true); 7 \end{Verbatim} \subsection{\textcolor{Chapter }{LowerBoundCoveringRadiusEmbedded2}} \logpage{[ 7, 2, 11 ]}\nobreak \hyperdef{L}{X7B0C81B88604C448}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LowerBoundCoveringRadiusEmbedded2({\slshape n, M, false})\index{LowerBoundCoveringRadiusEmbedded2@\texttt{LowerBoundCoveringRadiusEmbedded2}} \label{LowerBoundCoveringRadiusEmbedded2} }\hfill{\scriptsize (function)}}\\ This command can also be called with \texttt{LowerBoundCoveringRadiusEmbedded2( n, r [,true] )}. If the last argument of \texttt{LowerBoundCoveringRadiusEmbedded2} is 'false', then it returns a lower bound for the covering radius of a code of size \mbox{\texttt{\slshape M}} and length \mbox{\texttt{\slshape n}}. Otherwise, it returns a lower bound for the size of a code of length \mbox{\texttt{\slshape n}} and covering radius \mbox{\texttt{\slshape r}}. This bound only works for binary codes. It is based on the following inequality: \[ M \cdot \left( V_2(n,r) - \frac{3}{2} {2r \choose r} \right) \geq 2^n - 2A( n, 2r+1 ) {2r \choose r}, \] where $A(n,d)$ denotes the maximal cardinality of a (binary) code of length $n$ and minimum distance $d$. The function \texttt{UpperBound} is used to compute this value. Sometimes \texttt{LowerBoundCoveringRadiusEmbedded1} is better than \texttt{LowerBoundCoveringRadiusEmbedded2}, sometimes it is the other way around. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=RandomLinearCode(15,5,GF(2)); a [15,5,?] randomly generated code over GF(2) gap> Size(C); 32 gap> CoveringRadius(C); 6 gap> LowerBoundCoveringRadiusEmbedded2(10,32,false); 2 gap> LowerBoundCoveringRadiusEmbedded2(10,3,true); 7 \end{Verbatim} \subsection{\textcolor{Chapter }{LowerBoundCoveringRadiusInduction}} \logpage{[ 7, 2, 12 ]}\nobreak \hyperdef{L}{X7D27F6E27B9A0D35}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{LowerBoundCoveringRadiusInduction({\slshape n, r})\index{LowerBoundCoveringRadiusInduction@\texttt{LowerBoundCoveringRadiusInduction}} \label{LowerBoundCoveringRadiusInduction} }\hfill{\scriptsize (function)}}\\ \texttt{LowerBoundCoveringRadiusInduction} returns a lower bound for the size of a code with length \mbox{\texttt{\slshape n}} and covering radius \mbox{\texttt{\slshape r}}. If $n = 2r+2$ and $r \geq 1$, the returned value is $4$. If $n = 2r+3$ and $r \geq 1$, the returned value is $7$. If $n = 2r+4$ and $r \geq 4$, the returned value is $8$. Otherwise, $0$ is returned. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=RandomLinearCode(15,5,GF(2)); a [15,5,?] randomly generated code over GF(2) gap> CoveringRadius(C); 5 gap> LowerBoundCoveringRadiusInduction(15,6); 7 \end{Verbatim} \subsection{\textcolor{Chapter }{UpperBoundCoveringRadiusRedundancy}} \logpage{[ 7, 2, 13 ]}\nobreak \hyperdef{L}{X80F8DFAD7D67CBEC}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBoundCoveringRadiusRedundancy({\slshape C})\index{UpperBoundCoveringRadiusRedundancy@\texttt{UpperBoundCoveringRadiusRedundancy}} \label{UpperBoundCoveringRadiusRedundancy} }\hfill{\scriptsize (function)}}\\ \texttt{UpperBoundCoveringRadiusRedundancy} returns the redundancy of \mbox{\texttt{\slshape C}} as an upper bound for the covering radius of \mbox{\texttt{\slshape C}}. \mbox{\texttt{\slshape C}} must be a linear code. } \index{external distance} \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=RandomLinearCode(15,5,GF(2)); a [15,5,?] randomly generated code over GF(2) gap> CoveringRadius(C); 5 gap> UpperBoundCoveringRadiusRedundancy(C); 10 \end{Verbatim} \subsection{\textcolor{Chapter }{UpperBoundCoveringRadiusDelsarte}} \logpage{[ 7, 2, 14 ]}\nobreak \hyperdef{L}{X832847A17FD0D142}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBoundCoveringRadiusDelsarte({\slshape C})\index{UpperBoundCoveringRadiusDelsarte@\texttt{UpperBoundCoveringRadiusDelsarte}} \label{UpperBoundCoveringRadiusDelsarte} }\hfill{\scriptsize (function)}}\\ \texttt{UpperBoundCoveringRadiusDelsarte} returns an upper bound for the covering radius of \mbox{\texttt{\slshape C}}. This upper bound is equal to the external distance of \mbox{\texttt{\slshape C}}, this is the minimum distance of the dual code, if \mbox{\texttt{\slshape C}} is a linear code. This is described in Theorem 11.3.3 of \cite{HP03}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=RandomLinearCode(15,5,GF(2)); a [15,5,?] randomly generated code over GF(2) gap> CoveringRadius(C); 5 gap> UpperBoundCoveringRadiusDelsarte(C); 13 \end{Verbatim} \subsection{\textcolor{Chapter }{UpperBoundCoveringRadiusStrength}} \logpage{[ 7, 2, 15 ]}\nobreak \hyperdef{L}{X86F10D9E79AB8796}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBoundCoveringRadiusStrength({\slshape C})\index{UpperBoundCoveringRadiusStrength@\texttt{UpperBoundCoveringRadiusStrength}} \label{UpperBoundCoveringRadiusStrength} }\hfill{\scriptsize (function)}}\\ \texttt{UpperBoundCoveringRadiusStrength} returns an upper bound for the covering radius of \mbox{\texttt{\slshape C}}. First the code is punctured at the zero coordinates (i.e. the coordinates where all codewords have a zero). If the remaining code has \emph{strength} 1 (i.e. each coordinate contains each element of the field an equal number of times), then it returns $\frac{q-1}{q}m + (n-m)$ (where $q$ is the size of the field and $m$ is the length of punctured code), otherwise it returns $n$. This bound works for all codes. } \index{strength} \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=RandomLinearCode(15,5,GF(2)); a [15,5,?] randomly generated code over GF(2) gap> CoveringRadius(C); 5 gap> UpperBoundCoveringRadiusStrength(C); 7 \end{Verbatim} \subsection{\textcolor{Chapter }{UpperBoundCoveringRadiusGriesmerLike}} \logpage{[ 7, 2, 16 ]}\nobreak \hyperdef{L}{X8585C6A982489FC3}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBoundCoveringRadiusGriesmerLike({\slshape C})\index{UpperBoundCoveringRadiusGriesmerLike@\texttt{UpperBoundCoveringRadiusGriesmerLike}} \label{UpperBoundCoveringRadiusGriesmerLike} }\hfill{\scriptsize (function)}}\\ This function returns an upper bound for the covering radius of \mbox{\texttt{\slshape C}}, which must be linear, in a Griesmer-like fashion. It returns \[ n - \sum_{i=1}^k \left\lceil \frac{d}{q^i} \right\rceil \] } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=RandomLinearCode(15,5,GF(2)); a [15,5,?] randomly generated code over GF(2) gap> CoveringRadius(C); 5 gap> UpperBoundCoveringRadiusGriesmerLike(C); 9 \end{Verbatim} \subsection{\textcolor{Chapter }{UpperBoundCoveringRadiusCyclicCode}} \logpage{[ 7, 2, 17 ]}\nobreak \hyperdef{L}{X82A38F5F858CF3FC}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UpperBoundCoveringRadiusCyclicCode({\slshape C})\index{UpperBoundCoveringRadiusCyclicCode@\texttt{UpperBoundCoveringRadiusCyclicCode}} \label{UpperBoundCoveringRadiusCyclicCode} }\hfill{\scriptsize (function)}}\\ This function returns an upper bound for the covering radius of \mbox{\texttt{\slshape C}}, which must be a cyclic code. It returns \[ n - k + 1 - \left\lceil \frac{w(g(x))}{2} \right\rceil, \] where $g(x)$ is the generator polynomial of \mbox{\texttt{\slshape C}}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C:=CyclicCodes(15,GF(2))[3]; a cyclic [15,12,1..2]1..3 enumerated code over GF(2) gap> CoveringRadius(C); 3 gap> UpperBoundCoveringRadiusCyclicCode(C); 3 \end{Verbatim} } \section{\textcolor{Chapter }{ Special matrices in \textsf{GUAVA} }}\logpage{[ 7, 3, 0 ]} \hyperdef{L}{X806EBEC77C16E657}{} { \label{Special matrices in GUAVA} This section explains functions that work with special matrices \textsf{GUAVA} needs for several codes. Firstly, we describe some matrix generating functions (see \texttt{KrawtchoukMat} (\ref{KrawtchoukMat}), \texttt{GrayMat} (\ref{GrayMat}), \texttt{SylvesterMat} (\ref{SylvesterMat}), \texttt{HadamardMat} (\ref{HadamardMat}) and \texttt{MOLS} (\ref{MOLS})). Next we describe two functions regarding a standard form of matrices (see \texttt{PutStandardForm} (\ref{PutStandardForm}) and \texttt{IsInStandardForm} (\ref{IsInStandardForm})). Then we describe functions that return a matrix after a manipulation (see \texttt{PermutedCols} (\ref{PermutedCols}), \texttt{VerticalConversionFieldMat} (\ref{VerticalConversionFieldMat}) and \texttt{HorizontalConversionFieldMat} (\ref{HorizontalConversionFieldMat})). Finally, we describe functions that do some tests on matrices (see \texttt{IsLatinSquare} (\ref{IsLatinSquare}) and \texttt{AreMOLS} (\ref{AreMOLS})). \subsection{\textcolor{Chapter }{KrawtchoukMat}} \logpage{[ 7, 3, 1 ]}\nobreak \hyperdef{L}{X82899B64802A4BCE}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{KrawtchoukMat({\slshape n, q})\index{KrawtchoukMat@\texttt{KrawtchoukMat}} \label{KrawtchoukMat} }\hfill{\scriptsize (function)}}\\ \texttt{KrawtchoukMat} returns the $n+1$ by $n+1$ matrix $K=(k_{ij})$ defined by $k_{ij}=K_i(j)$ for $i,j=0,...,n$. $K_i(j)$ is the Krawtchouk number (see \texttt{Krawtchouk} (\ref{Krawtchouk})). \mbox{\texttt{\slshape n}} must be a positive integer and \mbox{\texttt{\slshape q}} a prime power. The Krawtchouk matrix is used in the \emph{MacWilliams identities}, defining the relation between the weight distribution of a code of length \mbox{\texttt{\slshape n}} over a field of size \mbox{\texttt{\slshape q}}, and its dual code. Each call to \texttt{KrawtchoukMat} returns a new matrix, so it is safe to modify the result. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> PrintArray( KrawtchoukMat( 3, 2 ) ); [ [ 1, 1, 1, 1 ], [ 3, 1, -1, -3 ], [ 3, -1, -1, 3 ], [ 1, -1, 1, -1 ] ] gap> C := HammingCode( 3 );; a := WeightDistribution( C ); [ 1, 0, 0, 7, 7, 0, 0, 1 ] gap> n := WordLength( C );; q := Size( LeftActingDomain( C ) );; gap> k := Dimension( C );; gap> q^( -k ) * KrawtchoukMat( n, q ) * a; [ 1, 0, 0, 0, 7, 0, 0, 0 ] gap> WeightDistribution( DualCode( C ) ); [ 1, 0, 0, 0, 7, 0, 0, 0 ] \end{Verbatim} \index{Gary code} \subsection{\textcolor{Chapter }{GrayMat}} \logpage{[ 7, 3, 2 ]}\nobreak \hyperdef{L}{X87AFE2C078031CE4}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GrayMat({\slshape n, F})\index{GrayMat@\texttt{GrayMat}} \label{GrayMat} }\hfill{\scriptsize (function)}}\\ \texttt{GrayMat} returns a list of all different vectors (see GAP's \texttt{Vectors} command) of length \mbox{\texttt{\slshape n}} over the field \mbox{\texttt{\slshape F}}, using Gray ordering. \mbox{\texttt{\slshape n}} must be a positive integer. This order has the property that subsequent vectors differ in exactly one coordinate. The first vector is always the null vector. Each call to \texttt{GrayMat} returns a new matrix, so it is safe to modify the result. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> GrayMat(3); [ [ 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0 ], [ 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0 ], [ Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2) ] ] gap> G := GrayMat( 4, GF(4) );; Length(G); 256 # the length of a GrayMat is always q^n gap> G[101] - G[100]; [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ] \end{Verbatim} \subsection{\textcolor{Chapter }{SylvesterMat}} \logpage{[ 7, 3, 3 ]}\nobreak \hyperdef{L}{X7E1E7C5287919CDB}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{SylvesterMat({\slshape n})\index{SylvesterMat@\texttt{SylvesterMat}} \label{SylvesterMat} }\hfill{\scriptsize (function)}}\\ \texttt{SylvesterMat} returns the $n\times n$ Sylvester matrix of order \mbox{\texttt{\slshape n}}. This is a special case of the Hadamard matrices (see \texttt{HadamardMat} (\ref{HadamardMat})). For this construction, \mbox{\texttt{\slshape n}} must be a power of $2$. Each call to \texttt{SylvesterMat} returns a new matrix, so it is safe to modify the result. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> PrintArray(SylvesterMat(2)); [ [ 1, 1 ], [ 1, -1 ] ] gap> PrintArray( SylvesterMat(4) ); [ [ 1, 1, 1, 1 ], [ 1, -1, 1, -1 ], [ 1, 1, -1, -1 ], [ 1, -1, -1, 1 ] ] \end{Verbatim} \index{Hadamard matrix} \subsection{\textcolor{Chapter }{HadamardMat}} \logpage{[ 7, 3, 4 ]}\nobreak \hyperdef{L}{X8014A1F181ECD8AA}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{HadamardMat({\slshape n})\index{HadamardMat@\texttt{HadamardMat}} \label{HadamardMat} }\hfill{\scriptsize (function)}}\\ \texttt{HadamardMat} returns a Hadamard matrix of order \mbox{\texttt{\slshape n}}. This is an $n\times n$ matrix with the property that the matrix multiplied by its transpose returns \mbox{\texttt{\slshape n}} times the identity matrix. This is only possible for $n=1, n=2$ or in cases where \mbox{\texttt{\slshape n}} is a multiple of $4$. If the matrix does not exist or is not known (as of 1998), \texttt{HadamardMat} returns an error. A large number of construction methods is known to create these matrices for different orders. \texttt{HadamardMat} makes use of two construction methods (the Paley Type I and II constructions, and the Sylvester construction -- see \texttt{SylvesterMat} (\ref{SylvesterMat})). These methods cover most of the possible Hadamard matrices, although some special algorithms have not been implemented yet. The following orders less than $100$ do not yet have an implementation for a Hadamard matrix in \textsf{GUAVA}: $52, 92$. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> C := HadamardMat(8);; PrintArray(C); [ [ 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, -1, 1, -1, 1, -1, 1, -1 ], [ 1, 1, -1, -1, 1, 1, -1, -1 ], [ 1, -1, -1, 1, 1, -1, -1, 1 ], [ 1, 1, 1, 1, -1, -1, -1, -1 ], [ 1, -1, 1, -1, -1, 1, -1, 1 ], [ 1, 1, -1, -1, -1, -1, 1, 1 ], [ 1, -1, -1, 1, -1, 1, 1, -1 ] ] gap> C * TransposedMat(C) = 8 * IdentityMat( 8, 8 ); true \end{Verbatim} \subsection{\textcolor{Chapter }{VandermondeMat}} \logpage{[ 7, 3, 5 ]}\nobreak \hyperdef{L}{X797F43607AD8660D}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{VandermondeMat({\slshape X, a})\index{VandermondeMat@\texttt{VandermondeMat}} \label{VandermondeMat} }\hfill{\scriptsize (function)}}\\ The function \texttt{VandermondeMat} returns the $(a+1)\times n$ matrix of powers $x_i^j$ where \mbox{\texttt{\slshape X}} is a list of elements of a field, $X=\{ x_1,...,x_n\}$, and \mbox{\texttt{\slshape a}} is a non-negative integer. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> M:=VandermondeMat([Z(5),Z(5)^2,Z(5)^0,Z(5)^3],2); [ [ Z(5)^0, Z(5), Z(5)^2 ], [ Z(5)^0, Z(5)^2, Z(5)^0 ], [ Z(5)^0, Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5)^3, Z(5)^2 ] ] gap> Display(M); 1 2 4 1 4 1 1 1 1 1 3 4 \end{Verbatim} \index{standard form} \subsection{\textcolor{Chapter }{PutStandardForm}} \logpage{[ 7, 3, 6 ]}\nobreak \hyperdef{L}{X7B47D82485B66F1D}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PutStandardForm({\slshape M[, idleft]})\index{PutStandardForm@\texttt{PutStandardForm}} \label{PutStandardForm} }\hfill{\scriptsize (function)}}\\ We say that a $k\times n$ matrix is in \emph{standard form} if it is equal to the block matrix $(I\ |\ A)$, for some $k\times (n-k)$ matrix $A$ and where $I$ is the $k\times k$ identity matrix. It follows from a basis result in linear algebra that, after a possible permutation of the columns, using elementary row operations, every matrix can be reduced to standard form. \texttt{PutStandardForm} puts a matrix \mbox{\texttt{\slshape M}} in standard form, and returns the permutation needed to do so. \mbox{\texttt{\slshape idleft}} is a boolean that sets the position of the identity matrix in \mbox{\texttt{\slshape M}}. (The default for \mbox{\texttt{\slshape idleft}} is `true'.) If \mbox{\texttt{\slshape idleft}} is set to `true', the identity matrix is put on the left side of \mbox{\texttt{\slshape M}}. Otherwise, it is put at the right side. (This option is useful when putting a check matrix of a code into standard form.) The function \texttt{BaseMat} also returns a similar standard form, but does not apply column permutations. The rows of the matrix still span the same vector space after \texttt{BaseMat}, but after calling \texttt{PutStandardForm}, this is not necessarily true. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> M := Z(2)*[[1,0,0,1],[0,0,1,1]];; PrintArray(M); [ [ Z(2), 0*Z(2), 0*Z(2), Z(2) ], [ 0*Z(2), 0*Z(2), Z(2), Z(2) ] ] gap> PutStandardForm(M); # identity at the left side (2,3) gap> PrintArray(M); [ [ Z(2), 0*Z(2), 0*Z(2), Z(2) ], [ 0*Z(2), Z(2), 0*Z(2), Z(2) ] ] gap> PutStandardForm(M, false); # identity at the right side (1,4,3) gap> PrintArray(M); [ [ 0*Z(2), Z(2), Z(2), 0*Z(2) ], [ 0*Z(2), Z(2), 0*Z(2), Z(2) ] ] gap> C := BestKnownLinearCode( 23, 12, GF(2) ); a linear [23,12,7]3 punctured code gap> G:=MutableCopyMat(GeneratorMat(C));; gap> PutStandardForm(G); () gap> Display(G); 1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . . . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1 . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . 1 . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 1 . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 \end{Verbatim} \subsection{\textcolor{Chapter }{IsInStandardForm}} \logpage{[ 7, 3, 7 ]}\nobreak \hyperdef{L}{X7D4EDA0A854EBFEF}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsInStandardForm({\slshape M[, idleft]})\index{IsInStandardForm@\texttt{IsInStandardForm}} \label{IsInStandardForm} }\hfill{\scriptsize (function)}}\\ \texttt{IsInStandardForm} determines if \mbox{\texttt{\slshape M}} is in standard form. \mbox{\texttt{\slshape idleft}} is a boolean that indicates the position of the identity matrix in \mbox{\texttt{\slshape M}}, as in \texttt{PutStandardForm} (see \texttt{PutStandardForm} (\ref{PutStandardForm})). \texttt{IsInStandardForm} checks if the identity matrix is at the left side of \mbox{\texttt{\slshape M}}, otherwise if it is at the right side. The elements of \mbox{\texttt{\slshape M}} may be elements of any field. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> IsInStandardForm(IdentityMat(7, GF(2))); true gap> IsInStandardForm([[1, 1, 0], [1, 0, 1]], false); true gap> IsInStandardForm([[1, 3, 2, 7]]); true gap> IsInStandardForm(HadamardMat(4)); false \end{Verbatim} \subsection{\textcolor{Chapter }{PermutedCols}} \logpage{[ 7, 3, 8 ]}\nobreak \hyperdef{L}{X7A97AD477E7638DE}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PermutedCols({\slshape M, P})\index{PermutedCols@\texttt{PermutedCols}} \label{PermutedCols} }\hfill{\scriptsize (function)}}\\ \texttt{PermutedCols} returns a matrix \mbox{\texttt{\slshape M}} with a permutation \mbox{\texttt{\slshape P}} applied to its columns. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> M := [[1,2,3,4],[1,2,3,4]];; PrintArray(M); [ [ 1, 2, 3, 4 ], [ 1, 2, 3, 4 ] ] gap> PrintArray(PermutedCols(M, (1,2,3))); [ [ 3, 1, 2, 4 ], [ 3, 1, 2, 4 ] ] \end{Verbatim} \subsection{\textcolor{Chapter }{VerticalConversionFieldMat}} \logpage{[ 7, 3, 9 ]}\nobreak \hyperdef{L}{X7B68119F85E9EC6D}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{VerticalConversionFieldMat({\slshape M, F})\index{VerticalConversionFieldMat@\texttt{VerticalConversionFieldMat}} \label{VerticalConversionFieldMat} }\hfill{\scriptsize (function)}}\\ \texttt{VerticalConversionFieldMat} returns the matrix \mbox{\texttt{\slshape M}} with its elements converted from a field $F=GF(q^m)$, $q$ prime, to a field $GF(q)$. Each element is replaced by its representation over the latter field, placed vertically in the matrix, using the $GF(p)$-vector space isomorphism \[ [...] : GF(q)\rightarrow GF(p)^m, \] with $q=p^m$. If \mbox{\texttt{\slshape M}} is a $k$ by $n$ matrix, the result is a $k\cdot m \times n$ matrix, since each element of $GF(q^m)$ can be represented in $GF(q)$ using $m$ elements. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> M := Z(9)*[[1,2],[2,1]];; PrintArray(M); [ [ Z(3^2), Z(3^2)^5 ], [ Z(3^2)^5, Z(3^2) ] ] gap> DefaultField( Flat(M) ); GF(3^2) gap> VCFM := VerticalConversionFieldMat( M, GF(9) );; PrintArray(VCFM); [ [ 0*Z(3), 0*Z(3) ], [ Z(3)^0, Z(3) ], [ 0*Z(3), 0*Z(3) ], [ Z(3), Z(3)^0 ] ] gap> DefaultField( Flat(VCFM) ); GF(3) \end{Verbatim} A similar function is \texttt{HorizontalConversionFieldMat} (see \texttt{HorizontalConversionFieldMat} (\ref{HorizontalConversionFieldMat})). \subsection{\textcolor{Chapter }{HorizontalConversionFieldMat}} \logpage{[ 7, 3, 10 ]}\nobreak \hyperdef{L}{X8033E9A67BA155C8}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{HorizontalConversionFieldMat({\slshape M, F})\index{HorizontalConversionFieldMat@\texttt{HorizontalConversionFieldMat}} \label{HorizontalConversionFieldMat} }\hfill{\scriptsize (function)}}\\ \texttt{HorizontalConversionFieldMat} returns the matrix \mbox{\texttt{\slshape M}} with its elements converted from a field $F=GF(q^m)$, $q$ prime, to a field $GF(q)$. Each element is replaced by its representation over the latter field, placed horizontally in the matrix. If \mbox{\texttt{\slshape M}} is a $k \times n$ matrix, the result is a $k\times m\times n\cdot m$ matrix. The new word length of the resulting code is equal to $n\cdot m$, because each element of $GF(q^m)$ can be represented in $GF(q)$ using $m$ elements. The new dimension is equal to $k\times m$ because the new matrix should be a basis for the same number of vectors as the old one. \texttt{ConversionFieldCode} uses horizontal conversion to convert a code (see \texttt{ConversionFieldCode} (\ref{ConversionFieldCode})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> M := Z(9)*[[1,2],[2,1]];; PrintArray(M); [ [ Z(3^2), Z(3^2)^5 ], [ Z(3^2)^5, Z(3^2) ] ] gap> DefaultField( Flat(M) ); GF(3^2) gap> HCFM := HorizontalConversionFieldMat(M, GF(9));; PrintArray(HCFM); [ [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3) ], [ Z(3)^0, Z(3)^0, Z(3), Z(3) ], [ 0*Z(3), Z(3), 0*Z(3), Z(3)^0 ], [ Z(3), Z(3), Z(3)^0, Z(3)^0 ] ] gap> DefaultField( Flat(HCFM) ); GF(3) \end{Verbatim} A similar function is \texttt{VerticalConversionFieldMat} (see \texttt{VerticalConversionFieldMat} (\ref{VerticalConversionFieldMat})). \index{mutually orthogonal Latin squares} \index{Latin square} \subsection{\textcolor{Chapter }{MOLS}} \logpage{[ 7, 3, 11 ]}\nobreak \hyperdef{L}{X804AAFF2867080F7}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MOLS({\slshape q[, n]})\index{MOLS@\texttt{MOLS}} \label{MOLS} }\hfill{\scriptsize (function)}}\\ \texttt{MOLS} returns a list of \mbox{\texttt{\slshape n}} \emph{Mutually Orthogonal Latin Squares} (MOLS). A \emph{Latin square} of order \mbox{\texttt{\slshape q}} is a $q\times q$ matrix whose entries are from a set $F_{q}$ of \mbox{\texttt{\slshape q}} distinct symbols (\textsf{GUAVA} uses the integers from $0$ to \mbox{\texttt{\slshape q}}) such that each row and each column of the matrix contains each symbol exactly once. A set of Latin squares is a set of MOLS if and only if for each pair of Latin squares in this set, every ordered pair of elements that are in the same position in these matrices occurs exactly once. \mbox{\texttt{\slshape n}} must be less than \mbox{\texttt{\slshape q}}. If \mbox{\texttt{\slshape n}} is omitted, two MOLS are returned. If \mbox{\texttt{\slshape q}} is not a prime power, at most $2$ MOLS can be created. For all values of \mbox{\texttt{\slshape q}} with $q > 2$ and $q \neq 6$, a list of MOLS can be constructed. However, \textsf{GUAVA} does not yet construct MOLS for $q\equiv 2 \pmod 4$. If it is not possible to construct \mbox{\texttt{\slshape n}} MOLS, the function returns `false'. MOLS are used to create \mbox{\texttt{\slshape q}}-ary codes (see \texttt{MOLSCode} (\ref{MOLSCode})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> M := MOLS( 4, 3 );;PrintArray( M[1] ); [ [ 0, 1, 2, 3 ], [ 1, 0, 3, 2 ], [ 2, 3, 0, 1 ], [ 3, 2, 1, 0 ] ] gap> PrintArray( M[2] ); [ [ 0, 2, 3, 1 ], [ 1, 3, 2, 0 ], [ 2, 0, 1, 3 ], [ 3, 1, 0, 2 ] ] gap> PrintArray( M[3] ); [ [ 0, 3, 1, 2 ], [ 1, 2, 0, 3 ], [ 2, 1, 3, 0 ], [ 3, 0, 2, 1 ] ] gap> MOLS( 12, 3 ); false \end{Verbatim} \subsection{\textcolor{Chapter }{IsLatinSquare}} \logpage{[ 7, 3, 12 ]}\nobreak \hyperdef{L}{X7F34306B81DC2776}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsLatinSquare({\slshape M})\index{IsLatinSquare@\texttt{IsLatinSquare}} \label{IsLatinSquare} }\hfill{\scriptsize (function)}}\\ \texttt{IsLatinSquare} determines if a matrix \mbox{\texttt{\slshape M}} is a Latin square. For a Latin square of size $n\times n$, each row and each column contains all the integers $1,\dots,n$ exactly once. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> IsLatinSquare([[1,2],[2,1]]); true gap> IsLatinSquare([[1,2,3],[2,3,1],[1,3,2]]); false \end{Verbatim} \subsection{\textcolor{Chapter }{AreMOLS}} \logpage{[ 7, 3, 13 ]}\nobreak \hyperdef{L}{X81B9B40B7B2D97D5}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{AreMOLS({\slshape L})\index{AreMOLS@\texttt{AreMOLS}} \label{AreMOLS} }\hfill{\scriptsize (function)}}\\ \texttt{AreMOLS} determines if \mbox{\texttt{\slshape L}} is a list of mutually orthogonal Latin squares (MOLS). For each pair of Latin squares in this list, the function checks if each ordered pair of elements that are in the same position in these matrices occurs exactly once. The function \texttt{MOLS} creates MOLS (see \texttt{MOLS} (\ref{MOLS})). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> M := MOLS(4,2); [ [ [ 0, 1, 2, 3 ], [ 1, 0, 3, 2 ], [ 2, 3, 0, 1 ], [ 3, 2, 1, 0 ] ], [ [ 0, 2, 3, 1 ], [ 1, 3, 2, 0 ], [ 2, 0, 1, 3 ], [ 3, 1, 0, 2 ] ] ] gap> AreMOLS(M); true \end{Verbatim} } \section{\textcolor{Chapter }{ Some functions related to the norm of a code }}\logpage{[ 7, 4, 0 ]} \hyperdef{L}{X7AB5E5CE7FDF7132}{} { \label{Some functions related to the norm of a code} In this section, some functions that can be used to compute the norm of a code and to decide upon its normality are discussed. Typically, these are applied to binary linear codes. The definitions of this section were introduced in Graham and Sloane \cite{GS85}. \subsection{\textcolor{Chapter }{CoordinateNorm}} \logpage{[ 7, 4, 1 ]}\nobreak \hyperdef{L}{X8032E53078264ABB}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CoordinateNorm({\slshape C, coord})\index{CoordinateNorm@\texttt{CoordinateNorm}} \label{CoordinateNorm} }\hfill{\scriptsize (function)}}\\ \texttt{CoordinateNorm} returns the norm of \mbox{\texttt{\slshape C}} with respect to coordinate \mbox{\texttt{\slshape coord}}. If $C_a = \{ c \in C \ |\ c_{coord} = a \}$, then the norm of \mbox{\texttt{\slshape C}} with respect to \mbox{\texttt{\slshape coord}} is defined as \[ \max_{v \in GF(q)^n} \sum_{a=1}^q d(x,C_a), \] with the convention that $d(x,C_a) = n$ if $C_a$ is empty. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> CoordinateNorm( HammingCode( 3, GF(2) ), 3 ); 3 \end{Verbatim} \index{norm of a code} \subsection{\textcolor{Chapter }{CodeNorm}} \logpage{[ 7, 4, 2 ]}\nobreak \hyperdef{L}{X7ED2EF368203AF47}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CodeNorm({\slshape C})\index{CodeNorm@\texttt{CodeNorm}} \label{CodeNorm} }\hfill{\scriptsize (function)}}\\ \texttt{CodeNorm} returns the norm of \mbox{\texttt{\slshape C}}. The \emph{norm} of a code is defined as the minimum of the norms for the respective coordinates of the code. In effect, for each coordinate \texttt{CoordinateNorm} is called, and the minimum of the calculated numbers is returned. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> CodeNorm( HammingCode( 3, GF(2) ) ); 3 \end{Verbatim} \index{acceptable coordinate} \subsection{\textcolor{Chapter }{IsCoordinateAcceptable}} \logpage{[ 7, 4, 3 ]}\nobreak \hyperdef{L}{X7D24F8BF7F9A7BF1}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsCoordinateAcceptable({\slshape C, coord})\index{IsCoordinateAcceptable@\texttt{IsCoordinateAcceptable}} \label{IsCoordinateAcceptable} }\hfill{\scriptsize (function)}}\\ \texttt{IsCoordinateAcceptable} returns `true' if coordinate \mbox{\texttt{\slshape coord}} of \mbox{\texttt{\slshape C}} is acceptable. A coordinate is called \emph{acceptable} if the norm of the code with respect to that coordinate is not more than two times the covering radius of the code plus one. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> IsCoordinateAcceptable( HammingCode( 3, GF(2) ), 3 ); true \end{Verbatim} \index{acceptable coordinate} \subsection{\textcolor{Chapter }{GeneralizedCodeNorm}} \logpage{[ 7, 4, 4 ]}\nobreak \hyperdef{L}{X87039FD179AD3009}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneralizedCodeNorm({\slshape C, subcode1, subscode2, ..., subcodek})\index{GeneralizedCodeNorm@\texttt{GeneralizedCodeNorm}} \label{GeneralizedCodeNorm} }\hfill{\scriptsize (function)}}\\ \texttt{GeneralizedCodeNorm} returns the \mbox{\texttt{\slshape k}}-norm of \mbox{\texttt{\slshape C}} with respect to \mbox{\texttt{\slshape k}} subcodes. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> c := RepetitionCode( 7, GF(2) );; gap> ham := HammingCode( 3, GF(2) );; gap> d := EvenWeightSubcode( ham );; gap> e := ConstantWeightSubcode( ham, 3 );; gap> GeneralizedCodeNorm( ham, c, d, e ); 4 \end{Verbatim} \index{normal code} \subsection{\textcolor{Chapter }{IsNormalCode}} \logpage{[ 7, 4, 5 ]}\nobreak \hyperdef{L}{X80283A2F7C8101BD}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsNormalCode({\slshape C})\index{IsNormalCode@\texttt{IsNormalCode}} \label{IsNormalCode} }\hfill{\scriptsize (function)}}\\ \texttt{IsNormalCode} returns `true' if \mbox{\texttt{\slshape C}} is normal. A code is called \emph{normal} if the norm of the code is not more than two times the covering radius of the code plus one. Almost all codes are normal, however some (non-linear) abnormal codes have been found. Often, it is difficult to find out whether a code is normal, because it involves computing the covering radius. However, \texttt{IsNormalCode} uses much information from the literature (in particular, \cite{GS85}) about normality for certain code parameters. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> IsNormalCode( HammingCode( 3, GF(2) ) ); true \end{Verbatim} } \section{\textcolor{Chapter }{ Miscellaneous functions }}\logpage{[ 7, 5, 0 ]} \hyperdef{L}{X8308D685809A4E2F}{} { \label{Miscellaneous functions} In this section we describe several vector space functions \textsf{GUAVA} uses for constructing codes or performing calculations with codes. In this section, some new miscellaneous functions are described, including weight enumerators, the MacWilliams-transform and affinity and almost affinity of codes. \index{weight enumerator polynomial} \subsection{\textcolor{Chapter }{CodeWeightEnumerator}} \logpage{[ 7, 5, 1 ]}\nobreak \hyperdef{L}{X871286437DE7A6A4}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CodeWeightEnumerator({\slshape C})\index{CodeWeightEnumerator@\texttt{CodeWeightEnumerator}} \label{CodeWeightEnumerator} }\hfill{\scriptsize (function)}}\\ \texttt{CodeWeightEnumerator} returns a polynomial of the following form: \[ f(x) = \sum_{i=0}^{n} A_i x^i, \] where $A_i$ is the number of codewords in \mbox{\texttt{\slshape C}} with weight $i$. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> CodeWeightEnumerator( ElementsCode( [ [ 0,0,0 ], [ 0,0,1 ], > [ 0,1,1 ], [ 1,1,1 ] ], GF(2) ) ); x^3 + x^2 + x + 1 gap> CodeWeightEnumerator( HammingCode( 3, GF(2) ) ); x^7 + 7*x^4 + 7*x^3 + 1 \end{Verbatim} \subsection{\textcolor{Chapter }{CodeDistanceEnumerator}} \logpage{[ 7, 5, 2 ]}\nobreak \hyperdef{L}{X84DA928083B103A0}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CodeDistanceEnumerator({\slshape C, w})\index{CodeDistanceEnumerator@\texttt{CodeDistanceEnumerator}} \label{CodeDistanceEnumerator} }\hfill{\scriptsize (function)}}\\ \texttt{CodeDistanceEnumerator} returns a polynomial of the following form: \[ f(x) = \sum_{i=0}^{n} B_i x^i, \] where $B_i$ is the number of codewords with distance $i$ to \mbox{\texttt{\slshape w}}. If \mbox{\texttt{\slshape w}} is a codeword, then \texttt{CodeDistanceEnumerator} returns the same polynomial as \texttt{CodeWeightEnumerator}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> CodeDistanceEnumerator( HammingCode( 3, GF(2) ),[0,0,0,0,0,0,1] ); x^6 + 3*x^5 + 4*x^4 + 4*x^3 + 3*x^2 + x gap> CodeDistanceEnumerator( HammingCode( 3, GF(2) ),[1,1,1,1,1,1,1] ); x^7 + 7*x^4 + 7*x^3 + 1 # `[1,1,1,1,1,1,1]' $\in$ `HammingCode( 3, GF(2 ) )' \end{Verbatim} \index{MacWilliams transform} \subsection{\textcolor{Chapter }{CodeMacWilliamsTransform}} \logpage{[ 7, 5, 3 ]}\nobreak \hyperdef{L}{X84B2BE66780EFBF9}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CodeMacWilliamsTransform({\slshape C})\index{CodeMacWilliamsTransform@\texttt{CodeMacWilliamsTransform}} \label{CodeMacWilliamsTransform} }\hfill{\scriptsize (function)}}\\ \texttt{CodeMacWilliamsTransform} returns a polynomial of the following form: \[ f(x) = \sum_{i=0}^{n} C_i x^i, \] where $C_i$ is the number of codewords with weight $i$ in the \emph{dual} code of \mbox{\texttt{\slshape C}}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> CodeMacWilliamsTransform( HammingCode( 3, GF(2) ) ); 7*x^4 + 1 \end{Verbatim} \index{density of a code} \subsection{\textcolor{Chapter }{CodeDensity}} \logpage{[ 7, 5, 4 ]}\nobreak \hyperdef{L}{X7903286078F8051B}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CodeDensity({\slshape C})\index{CodeDensity@\texttt{CodeDensity}} \label{CodeDensity} }\hfill{\scriptsize (function)}}\\ \texttt{CodeDensity} returns the \emph{density} of \mbox{\texttt{\slshape C}}. The density of a code is defined as \[ \frac{M \cdot V_q(n,t)}{q^n}, \] where $M$ is the size of the code, $V_q(n,t)$ is the size of a sphere of radius $t$ in $GF(q^n)$ (which may be computed using \texttt{SphereContent}), $t$ is the covering radius of the code and $n$ is the length of the code. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> CodeDensity( HammingCode( 3, GF(2) ) ); 1 gap> CodeDensity( ReedMullerCode( 1, 4 ) ); 14893/2048 \end{Verbatim} \index{perfect code} \subsection{\textcolor{Chapter }{SphereContent}} \logpage{[ 7, 5, 5 ]}\nobreak \hyperdef{L}{X85303BAE7BD46D81}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{SphereContent({\slshape n, t, F})\index{SphereContent@\texttt{SphereContent}} \label{SphereContent} }\hfill{\scriptsize (function)}}\\ \texttt{SphereContent} returns the content of a ball of radius \mbox{\texttt{\slshape t}} around an arbitrary element of the vectorspace $F^n$. This is the cardinality of the set of all elements of $F^n$ that are at distance (see \texttt{DistanceCodeword} (\ref{DistanceCodeword}) less than or equal to \mbox{\texttt{\slshape t}} from an element of $F^n$. In the context of codes, the function is used to determine if a code is perfect. A code is \emph{perfect} if spheres of radius $t$ around all codewords partition the whole ambient vector space, where \emph{t} is the number of errors the code can correct. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> SphereContent( 15, 0, GF(2) ); 1 # Only one word with distance 0, which is the word itself gap> SphereContent( 11, 3, GF(4) ); 4984 gap> C := HammingCode(5); a linear [31,26,3]1 Hamming (5,2) code over GF(2) #the minimum distance is 3, so the code can correct one error gap> ( SphereContent( 31, 1, GF(2) ) * Size(C) ) = 2 ^ 31; true \end{Verbatim} \subsection{\textcolor{Chapter }{Krawtchouk}} \logpage{[ 7, 5, 6 ]}\nobreak \hyperdef{L}{X7ACDC5377CD17451}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{Krawtchouk({\slshape k, i, n, q})\index{Krawtchouk@\texttt{Krawtchouk}} \label{Krawtchouk} }\hfill{\scriptsize (function)}}\\ \texttt{Krawtchouk} returns the Krawtchouk number $K_{k}(i)$. \mbox{\texttt{\slshape q}} must be a prime power, \mbox{\texttt{\slshape n}} must be a positive integer, \mbox{\texttt{\slshape k}} must be a non-negative integer less then or equal to \mbox{\texttt{\slshape n}} and \mbox{\texttt{\slshape i}} can be any integer. (See \texttt{KrawtchoukMat} (\ref{KrawtchoukMat})). This number is the value at $x=i$ of the polynomial \[ K_k^{n,q}(x) =\sum_{j=0}^n (-1)^j(q-1)^{k-j}b(x,j)b(n-x,k-j), \] where \$b(v,u)=u!/(v!(v-u)!)\$ is the binomial coefficient if \$u,v\$ are integers. For more properties of these polynomials, see \cite{MS83}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> Krawtchouk( 2, 0, 3, 2); 3 \end{Verbatim} \subsection{\textcolor{Chapter }{PrimitiveUnityRoot}} \logpage{[ 7, 5, 7 ]}\nobreak \hyperdef{L}{X827E39957A87EB51}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PrimitiveUnityRoot({\slshape F, n})\index{PrimitiveUnityRoot@\texttt{PrimitiveUnityRoot}} \label{PrimitiveUnityRoot} }\hfill{\scriptsize (function)}}\\ \texttt{PrimitiveUnityRoot} returns a primitive \mbox{\texttt{\slshape n}}-th root of unity in an extension field of \mbox{\texttt{\slshape F}}. This is a finite field element $a$ with the property $a^n=1$ in \mbox{\texttt{\slshape F}}, and \mbox{\texttt{\slshape n}} is the smallest integer such that this equality holds. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> PrimitiveUnityRoot( GF(2), 15 ); Z(2^4) gap> last^15; Z(2)^0 gap> PrimitiveUnityRoot( GF(8), 21 ); Z(2^6)^3 \end{Verbatim} \subsection{\textcolor{Chapter }{PrimitivePolynomialsNr}} \logpage{[ 7, 5, 8 ]}\nobreak \hyperdef{L}{X78AEA40F7AD9D541}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PrimitivePolynomialsNr({\slshape n, F})\index{PrimitivePolynomialsNr@\texttt{PrimitivePolynomialsNr}} \label{PrimitivePolynomialsNr} }\hfill{\scriptsize (function)}}\\ \texttt{PrimitivePolynomialsNr} returns the number of irreducible polynomials over $F=GF(q)$ of degree \mbox{\texttt{\slshape n}} with (maximum) period $q^n-1$. (According to a theorem of S. Golomb, this is $\phi(p^n-1)/n$.) See also the GAP function \texttt{RandomPrimitivePolynomial}, \texttt{RandomPrimitivePolynomial} (\ref{RandomPrimitivePolynomial}). } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> PrimitivePolynomialsNr(3,4); 12 \end{Verbatim} \subsection{\textcolor{Chapter }{IrreduciblePolynomialsNr}} \logpage{[ 7, 5, 9 ]}\nobreak \hyperdef{L}{X7A2B54EF868AA752}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IrreduciblePolynomialsNr({\slshape n, F})\index{IrreduciblePolynomialsNr@\texttt{IrreduciblePolynomialsNr}} \label{IrreduciblePolynomialsNr} }\hfill{\scriptsize (function)}}\\ \texttt{PrimitivePolynomialsNr} returns the number of irreducible polynomials over $F=GF(q)$ of degree \mbox{\texttt{\slshape n}}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> IrreduciblePolynomialsNr(3,4); 20 \end{Verbatim} \subsection{\textcolor{Chapter }{MatrixRepresentationOfElement}} \logpage{[ 7, 5, 10 ]}\nobreak \hyperdef{L}{X7B50D3417F6FD7C6}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MatrixRepresentationOfElement({\slshape a, F})\index{MatrixRepresentationOfElement@\texttt{MatrixRepresentationOfElement}} \label{MatrixRepresentationOfElement} }\hfill{\scriptsize (function)}}\\ Here \mbox{\texttt{\slshape F}} is either a finite extension of the ``base field'' $GF(p)$ or of the rationals ${\mathbb{Q}}$, and $a\in F$. The command \texttt{MatrixRepresentationOfElement} returns a matrix representation of \mbox{\texttt{\slshape a}} over the base field. If the element \mbox{\texttt{\slshape a}} is defined over the base field then it returns the corresponding $1\times 1$ matrix. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> a:=Random(GF(4)); 0*Z(2) gap> M:=MatrixRepresentationOfElement(a,GF(4));; Display(M); . gap> a:=Random(GF(4)); Z(2^2) gap> M:=MatrixRepresentationOfElement(a,GF(4));; Display(M); . 1 1 1 gap> \end{Verbatim} \index{reciprocal polynomial} \subsection{\textcolor{Chapter }{ReciprocalPolynomial}} \logpage{[ 7, 5, 11 ]}\nobreak \hyperdef{L}{X7805D2BB7CE4D455}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ReciprocalPolynomial({\slshape P})\index{ReciprocalPolynomial@\texttt{ReciprocalPolynomial}} \label{ReciprocalPolynomial} }\hfill{\scriptsize (function)}}\\ \texttt{ReciprocalPolynomial} returns the \emph{reciprocal} of polynomial \mbox{\texttt{\slshape P}}. This is a polynomial with coefficients of \mbox{\texttt{\slshape P}} in the reverse order. So if $P=a_0 + a_1 X + ... + a_{n} X^{n}$, the reciprocal polynomial is $P'=a_{n} + a_{n-1} X + ... + a_0 X^{n}$. This command can also be called using the syntax \texttt{ReciprocalPolynomial( P , n )}. In this form, the number of coefficients of \mbox{\texttt{\slshape P}} is assumed to be less than or equal to $n+1$ (with zero coefficients added in the highest degrees, if necessary). Therefore, the reciprocal polynomial also has degree $n+1$. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> P := UnivariatePolynomial( GF(3), Z(3)^0 * [1,0,1,2] ); Z(3)^0+x_1^2-x_1^3 gap> RecP := ReciprocalPolynomial( P ); -Z(3)^0+x_1+x_1^3 gap> ReciprocalPolynomial( RecP ) = P; true gap> P := UnivariatePolynomial( GF(3), Z(3)^0 * [1,0,1,2] ); Z(3)^0+x_1^2-x_1^3 gap> ReciprocalPolynomial( P, 6 ); -x_1^3+x_1^4+x_1^6 \end{Verbatim} \subsection{\textcolor{Chapter }{CyclotomicCosets}} \logpage{[ 7, 5, 12 ]}\nobreak \hyperdef{L}{X7AEA9F807E6FFEFF}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CyclotomicCosets({\slshape q, n})\index{CyclotomicCosets@\texttt{CyclotomicCosets}} \label{CyclotomicCosets} }\hfill{\scriptsize (function)}}\\ \texttt{CyclotomicCosets} returns the cyclotomic cosets of $q \pmod n$. \mbox{\texttt{\slshape q}} and \mbox{\texttt{\slshape n}} must be relatively prime. Each of the elements of the returned list is a list of integers that belong to one cyclotomic coset. A $q$-cyclotomic coset of $s \pmod n$ is a set of the form $\{s,sq,sq^2,...,sq^{r-1}\}$, where $r$ is the smallest positive integer such that $sq^r-s$ is $0 \pmod n$. In other words, each coset contains all multiplications of the coset representative by $q \pmod n$. The coset representative is the smallest integer that isn't in the previous cosets. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> CyclotomicCosets( 2, 15 ); [ [ 0 ], [ 1, 2, 4, 8 ], [ 3, 6, 12, 9 ], [ 5, 10 ], [ 7, 14, 13, 11 ] ] gap> CyclotomicCosets( 7, 6 ); [ [ 0 ], [ 1 ], [ 2 ], [ 3 ], [ 4 ], [ 5 ] ] \end{Verbatim} \subsection{\textcolor{Chapter }{WeightHistogram}} \logpage{[ 7, 5, 13 ]}\nobreak \hyperdef{L}{X7A4EA98D794CF410}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{WeightHistogram({\slshape C[, h]})\index{WeightHistogram@\texttt{WeightHistogram}} \label{WeightHistogram} }\hfill{\scriptsize (function)}}\\ The function \texttt{WeightHistogram} plots a histogram of weights in code \mbox{\texttt{\slshape C}}. The maximum length of a column is \mbox{\texttt{\slshape h}}. Default value for \mbox{\texttt{\slshape h}} is $1/3$ of the size of the screen. The number that appears at the top of the histogram is the maximum value of the list of weights. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> H := HammingCode(2, GF(5)); a linear [6,4,3]1 Hamming (2,5) code over GF(5) gap> WeightDistribution(H); [ 1, 0, 0, 80, 120, 264, 160 ] gap> WeightHistogram(H); 264---------------- * * * * * * * * * * * * * * * * * +--------+--+--+--+-- 0 1 2 3 4 5 6 \end{Verbatim} \subsection{\textcolor{Chapter }{MultiplicityInList}} \logpage{[ 7, 5, 14 ]}\nobreak \hyperdef{L}{X805DF25C84585FD6}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MultiplicityInList({\slshape L, a})\index{MultiplicityInList@\texttt{MultiplicityInList}} \label{MultiplicityInList} }\hfill{\scriptsize (function)}}\\ This is a very simple list command which returns how many times a occurs in L. It returns 0 if a is not in L. (The GAP command \texttt{Collected} does not quite handle this "extreme" case.) } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> L:=[1,2,3,4,3,2,1,5,4,3,2,1];; gap> MultiplicityInList(L,1); 3 gap> MultiplicityInList(L,6); 0 \end{Verbatim} \subsection{\textcolor{Chapter }{MostCommonInList}} \logpage{[ 7, 5, 15 ]}\nobreak \hyperdef{L}{X8072B0DA78FBE562}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MostCommonInList({\slshape L})\index{MostCommonInList@\texttt{MostCommonInList}} \label{MostCommonInList} }\hfill{\scriptsize (function)}}\\ Input: a list L Output: an a in L which occurs at least as much as any other in L } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> L:=[1,2,3,4,3,2,1,5,4,3,2,1];; gap> MostCommonInList(L); 1 \end{Verbatim} \subsection{\textcolor{Chapter }{RotateList}} \logpage{[ 7, 5, 16 ]}\nobreak \hyperdef{L}{X7C5407EF87849857}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{RotateList({\slshape L})\index{RotateList@\texttt{RotateList}} \label{RotateList} }\hfill{\scriptsize (function)}}\\ Input: a list L Output: a list L' which is the cyclic rotation of L (to the right) } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> L:=[1,2,3,4];; gap> RotateList(L); [2,3,4,1] \end{Verbatim} \subsection{\textcolor{Chapter }{CirculantMatrix}} \logpage{[ 7, 5, 17 ]}\nobreak \hyperdef{L}{X85E526367878F72A}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CirculantMatrix({\slshape k, L})\index{CirculantMatrix@\texttt{CirculantMatrix}} \label{CirculantMatrix} }\hfill{\scriptsize (function)}}\\ Input: integer k, a list L of length n Output: kxn matrix whose rows are cyclic rotations of the list L } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> k:=3; L:=[1,2,3,4];; gap> M:=CirculantMatrix(k,L);; gap> Display(M); \end{Verbatim} } \section{\textcolor{Chapter }{ Miscellaneous polynomial functions }}\logpage{[ 7, 6, 0 ]} \hyperdef{L}{X7969103F7A8598F9}{} { \label{Miscellaneous polynomial functions} In this section we describe several multivariate polynomial GAP functions \textsf{GUAVA} uses for constructing codes or performing calculations with codes. \subsection{\textcolor{Chapter }{MatrixTransformationOnMultivariatePolynomial }} \logpage{[ 7, 6, 1 ]}\nobreak \hyperdef{L}{X84D51EBB784E7C5D}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MatrixTransformationOnMultivariatePolynomial ({\slshape AfR})\index{MatrixTransformationOnMultivariatePolynomial @\texttt{Matrix}\-\texttt{Transformation}\-\texttt{On}\-\texttt{Multivariate}\-\texttt{Polynomial }} \label{MatrixTransformationOnMultivariatePolynomial } }\hfill{\scriptsize (function)}}\\ \mbox{\texttt{\slshape A}} is an $n\times n$ matrix with entries in a field $F$, \mbox{\texttt{\slshape R}} is a polynomial ring of $n$ variables, say $F[x_1,...,x_n]$, and \mbox{\texttt{\slshape f}} is a polynomial in \mbox{\texttt{\slshape R}}. Returns the composition $f\circ A$. } \subsection{\textcolor{Chapter }{DegreeMultivariatePolynomial}} \logpage{[ 7, 6, 2 ]}\nobreak \hyperdef{L}{X80433A4B792880EF}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DegreeMultivariatePolynomial({\slshape f, R})\index{DegreeMultivariatePolynomial@\texttt{DegreeMultivariatePolynomial}} \label{DegreeMultivariatePolynomial} }\hfill{\scriptsize (function)}}\\ This command takes two arguments, \mbox{\texttt{\slshape f}}, a multivariate polynomial, and \mbox{\texttt{\slshape R}} a polynomial ring over a field $F$ containing \mbox{\texttt{\slshape f}}, say $R=F[x_1,x_2,...,x_n]$. The output is simply the maximum degrees of all the monomials occurring in \mbox{\texttt{\slshape f}}. This command can be used to compute the degree of an affine plane curve. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> F:=GF(11);; gap> R2:=PolynomialRing(F,2); PolynomialRing(..., [ x_1, x_2 ]) gap> vars:=IndeterminatesOfPolynomialRing(R2);; gap> x:=vars[1];; y:=vars[2];; gap> poly:=y^2-x*(x^2-1);; gap> DegreeMultivariatePolynomial(poly,R2); 3 \end{Verbatim} \subsection{\textcolor{Chapter }{DegreesMultivariatePolynomial}} \logpage{[ 7, 6, 3 ]}\nobreak \hyperdef{L}{X83F44E397C56F2E0}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DegreesMultivariatePolynomial({\slshape f, R})\index{DegreesMultivariatePolynomial@\texttt{DegreesMultivariatePolynomial}} \label{DegreesMultivariatePolynomial} }\hfill{\scriptsize (function)}}\\ Returns a list of information about the multivariate polynomial \mbox{\texttt{\slshape f}}. Nice for other programs but mostly unreadable by GAP users. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> F:=GF(11);; gap> R2:=PolynomialRing(F,2); PolynomialRing(..., [ x_1, x_2 ]) gap> vars:=IndeterminatesOfPolynomialRing(R2);; gap> x:=vars[1];; y:=vars[2];; gap> poly:=y^2-x*(x^2-1);; gap> DegreesMultivariatePolynomial(poly,R2); [ [ [ x_1, x_1, 1 ], [ x_1, x_2, 0 ] ], [ [ x_2^2, x_1, 0 ], [ x_2^2, x_2, 2 ] ], [ [ x_1^3, x_1, 3 ], [ x_1^3, x_2, 0 ] ] ] gap> \end{Verbatim} \subsection{\textcolor{Chapter }{CoefficientMultivariatePolynomial}} \logpage{[ 7, 6, 4 ]}\nobreak \hyperdef{L}{X7E9021697A61A60F}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CoefficientMultivariatePolynomial({\slshape f, var, power, R})\index{CoefficientMultivariatePolynomial@\texttt{CoefficientMultivariatePolynomial}} \label{CoefficientMultivariatePolynomial} }\hfill{\scriptsize (function)}}\\ The command \texttt{CoefficientMultivariatePolynomial} takes four arguments: a multivariant polynomial \mbox{\texttt{\slshape f}}, a variable name \mbox{\texttt{\slshape var}}, an integer \mbox{\texttt{\slshape power}}, and a polynomial ring \mbox{\texttt{\slshape R}} containing \mbox{\texttt{\slshape f}}. For example, if \mbox{\texttt{\slshape f}} is a multivariate polynomial in $R$ = $F$[$x_1,x_2,...,x_n$] then \mbox{\texttt{\slshape var}} must be one of the $x_i$. The output is the coefficient of $x_i^{power}$ in \mbox{\texttt{\slshape f}}. (Not sure if $F$ needs to be a field in fact ...) Related to the GAP command \texttt{PolynomialCoefficientsPolynomial}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> F:=GF(11);; gap> R2:=PolynomialRing(F,2); PolynomialRing(..., [ x_1, x_2 ]) gap> vars:=IndeterminatesOfPolynomialRing(R2);; gap> x:=vars[1];; y:=vars[2];; gap> poly:=y^2-x*(x^2-1);; gap> PolynomialCoefficientsOfPolynomial(poly,x); [ x_2^2, Z(11)^0, 0*Z(11), -Z(11)^0 ] gap> PolynomialCoefficientsOfPolynomial(poly,y); [ -x_1^3+x_1, 0*Z(11), Z(11)^0 ] gap> CoefficientMultivariatePolynomial(poly,y,0,R2); -x_1^3+x_1 gap> CoefficientMultivariatePolynomial(poly,y,1,R2); 0*Z(11) gap> CoefficientMultivariatePolynomial(poly,y,2,R2); Z(11)^0 gap> CoefficientMultivariatePolynomial(poly,x,0,R2); x_2^2 gap> CoefficientMultivariatePolynomial(poly,x,1,R2); Z(11)^0 gap> CoefficientMultivariatePolynomial(poly,x,2,R2); 0*Z(11) gap> CoefficientMultivariatePolynomial(poly,x,3,R2); -Z(11)^0 \end{Verbatim} \subsection{\textcolor{Chapter }{SolveLinearSystem}} \logpage{[ 7, 6, 5 ]}\nobreak \hyperdef{L}{X79E76B6F7D177E27}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{SolveLinearSystem({\slshape L, vars})\index{SolveLinearSystem@\texttt{SolveLinearSystem}} \label{SolveLinearSystem} }\hfill{\scriptsize (function)}}\\ Input: \mbox{\texttt{\slshape L}} is a list of linear forms in the variables \mbox{\texttt{\slshape vars}}. Output: the solution of the system, if its unique. The procedure is straightforward: Find the associated matrix $A$, find the "constant vector" $b$, and solve $A*v=b$. No error checking is performed. Related to the GAP command \texttt{SolutionMat( A, b )}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> F:=GF(11);; gap> R2:=PolynomialRing(F,2); PolynomialRing(..., [ x_1, x_2 ]) gap> vars:=IndeterminatesOfPolynomialRing(R2);; gap> x:=vars[1];; y:=vars[2];; gap> f:=3*y-3*x+1;; g:=-5*y+2*x-7;; gap> soln:=SolveLinearSystem([f,g],[x,y]); [ Z(11)^3, Z(11)^2 ] gap> Value(f,[x,y],soln); # checking okay 0*Z(11) gap> Value(g,[x,y],col); # checking okay 0*Z(11) \end{Verbatim} \subsection{\textcolor{Chapter }{GuavaVersion}} \logpage{[ 7, 6, 6 ]}\nobreak \hyperdef{L}{X80171AA687FFDC70}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GuavaVersion({\slshape })\index{GuavaVersion@\texttt{GuavaVersion}} \label{GuavaVersion} }\hfill{\scriptsize (function)}}\\ Returns the current version of Guava. Same as \texttt{guava\texttt{\symbol{92}}{\textunderscore}version()}. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> GuavaVersion(); "2.7" \end{Verbatim} \subsection{\textcolor{Chapter }{ZechLog}} \logpage{[ 7, 6, 7 ]}\nobreak \hyperdef{L}{X7EBBE86D85CC90C0}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ZechLog({\slshape x, b, F})\index{ZechLog@\texttt{ZechLog}} \label{ZechLog} }\hfill{\scriptsize (function)}}\\ Returns the Zech log of x to base b, ie the i such that \$x+1=b\texttt{\symbol{94}}i\$, so \$y+z=y(1+z/y)=b\texttt{\symbol{94}}k\$, where k=Log(y,b)+ZechLog(z/y,b) and b must be a primitive element of F. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> F:=GF(11);; l := One(F);; gap> ZechLog(2*l,8*l,F); -24 gap> 8*l+l;(2*l)^(-24); Z(11)^6 Z(11)^6 \end{Verbatim} \subsection{\textcolor{Chapter }{CoefficientToPolynomial}} \logpage{[ 7, 6, 8 ]}\nobreak \hyperdef{L}{X7C8C1E6A7E3497F0}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CoefficientToPolynomial({\slshape coeffs, R})\index{CoefficientToPolynomial@\texttt{CoefficientToPolynomial}} \label{CoefficientToPolynomial} }\hfill{\scriptsize (function)}}\\ The function \texttt{CoefficientToPolynomial} returns the degree $d-1$ polynomial $c_0+c_1x+...+c_{d-1}x^{d-1}$, where \mbox{\texttt{\slshape coeffs}} is a list of elements of a field, $coeffs=\{ c_0,...,c_{d-1}\}$, and \mbox{\texttt{\slshape R}} is a univariate polynomial ring. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> F:=GF(11); GF(11) gap> R1:=PolynomialRing(F,["a"]);; gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];; gap> coeffs:=Z(11)^0*[1,2,3,4]; [ Z(11)^0, Z(11), Z(11)^8, Z(11)^2 ] gap> CoefficientToPolynomial(coeffs,R1); Z(11)^2*a^3+Z(11)^8*a^2+Z(11)*a+Z(11)^0 \end{Verbatim} \subsection{\textcolor{Chapter }{DegreesMonomialTerm}} \logpage{[ 7, 6, 9 ]}\nobreak \hyperdef{L}{X8431985183B63BB7}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DegreesMonomialTerm({\slshape m, R})\index{DegreesMonomialTerm@\texttt{DegreesMonomialTerm}} \label{DegreesMonomialTerm} }\hfill{\scriptsize (function)}}\\ The function \texttt{DegreesMonomialTerm} returns the list of degrees to which each variable in the multivariate polynomial ring \mbox{\texttt{\slshape R}} occurs in the monomial \mbox{\texttt{\slshape m}}, where \mbox{\texttt{\slshape coeffs}} is a list of elements of a field. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> F:=GF(11); GF(11) gap> R1:=PolynomialRing(F,["a"]);; gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];; gap> b:=X(F,"b",var1); b gap> var2:=Concatenation(var1,[b]); [ a, b ] gap> R2:=PolynomialRing(F,var2); PolynomialRing(..., [ a, b ]) gap> c:=X(F,"c",var2); c gap> var3:=Concatenation(var2,[c]); [ a, b, c ] gap> R3:=PolynomialRing(F,var3); PolynomialRing(..., [ a, b, c ]) gap> m:=b^3*c^7; b^3*c^7 gap> DegreesMonomialTerm(m,R3); [ 0, 3, 7 ] \end{Verbatim} \subsection{\textcolor{Chapter }{DivisorsMultivariatePolynomial}} \logpage{[ 7, 6, 10 ]}\nobreak \hyperdef{L}{X860EF39B841380A1}{} {\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DivisorsMultivariatePolynomial({\slshape f, R})\index{DivisorsMultivariatePolynomial@\texttt{DivisorsMultivariatePolynomial}} \label{DivisorsMultivariatePolynomial} }\hfill{\scriptsize (function)}}\\ The function \texttt{DivisorsMultivariatePolynomial} returns the list of polynomial divisors of \mbox{\texttt{\slshape f}} in the multivariate polynomial ring \mbox{\texttt{\slshape R}} with coefficients in a field. This program uses a simple but slow algorithm (see Joachim von zur Gathen, J{\"u}rgen Gerhard, \cite{GG03}, exercise 16.10) which first converts the multivariate polynomial \mbox{\texttt{\slshape f}} to an associated univariate polynomial $f^*$, then \texttt{Factors} $f^*$, and finally converts these univariate factors back into the multivariate polynomial factors of \mbox{\texttt{\slshape f}}. Since \texttt{Factors} is non-deterministic, \texttt{DivisorsMultivariatePolynomial} is non-deterministic as well. } \begin{Verbatim}[fontsize=\small,frame=single,label=Example] gap> R2:=PolynomialRing(GF(3),["x1","x2"]); PolynomialRing(..., [ x1, x2 ]) gap> vars:=IndeterminatesOfPolynomialRing(R2); [ x1, x2 ] gap> x2:=vars[2]; x2 gap> x1:=vars[1]; x1 gap> f:=x1^3+x2^3;; gap> DivisorsMultivariatePolynomial(f,R2); [ x1+x2, x1+x2, x1+x2 ] \end{Verbatim} } \section{\textcolor{Chapter }{ GNU Free Documentation License }}\logpage{[ 7, 7, 0 ]} \hyperdef{L}{X82257DE97D1822AA}{} { GNU Free Documentation License Version 1.2, November 2002 Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements". 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. } } \def\bibname{References\logpage{[ "Bib", 0, 0 ]} \hyperdef{L}{X7A6F98FD85F02BFE}{} } \bibliographystyle{alpha} \bibliography{guava} \def\indexname{Index\logpage{[ "Ind", 0, 0 ]} \hyperdef{L}{X83A0356F839C696F}{} } \printindex \newpage \immediate\write\pagenrlog{["End"], \arabic{page}];} \immediate\closeout\pagenrlog \end{document} guava-3.6/doc/chap4.html0000644017361200001450000036207411027015742015007 0ustar tabbottcrontab GAP (guava) - Chapter 4: Codes
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

4. Codes

4. Codes

A code is a set of codewords (recall a codeword in GUAVA is simply a sequence of elements of a finite field GF(q), where q is a prime power). We call these the elements of the code. Depending on the type of code, a codeword can be interpreted as a vector or as a polynomial. This is explained in more detail in Chapter 3..

In GUAVA, codes can be a set specified by its elements (this will be called an unrestricted code), by a generator matrix listing a set of basis elements (for a linear code) or by a generator polynomial (for a cyclic code).

Any code can be defined by its elements. If you like, you can give the code a name.

gap> C := ElementsCode(["1100", "1010", "0001"], "example code", GF(2) );
a (4,3,1..4)2..4 example code over GF(2) 

An (n,M,d) code is a code with word length n, size M and minimum distance d. If the minimum distance has not yet been calculated, the lower bound and upper bound are printed (except in the case where the code is a random linear codes, where these are not printed for efficiency reasons). So


a (4,3,1..4)2..4 code over GF(2)

means a binary unrestricted code of length 4, with 3 elements and the minimum distance is greater than or equal to 1 and less than or equal to 4 and the covering radius is greater than or equal to 2 and less than or equal to 4.

gap> C := ElementsCode(["1100", "1010", "0001"], "example code", GF(2) );
a (4,3,1..4)2..4 example code over GF(2) 
gap> MinimumDistance(C);
2
gap> C;
a (4,3,2)2..4 example code over GF(2) 

If the set of elements is a linear subspace of GF(q)^n, the code is called linear. If a code is linear, it can be defined by its generator matrix or parity check matrix. By definition, the rows of the generator matrix is a basis for the code (as a vector space over GF(q)). By definition, the rows of the parity check matrix is a basis for the dual space of the code,

C^* = \{ v \in GF(q)^n\ |\ v\cdot c = 0,\ for \ all\ c \in C \}.

gap> G := GeneratorMatCode([[1,0,1],[0,1,2]], "demo code", GF(3) );
a linear [3,2,1..2]1 demo code over GF(3) 

So a linear [n, k, d]r code is a code with word length n, dimension k, minimum distance d and covering radius r.

If the code is linear and all cyclic shifts of its codewords (regarded as n-tuples) are again codewords, the code is called cyclic. All elements of a cyclic code are multiples of the monic polynomial modulo a polynomial x^n -1, where n is the word length of the code. Such a polynomial is called a generator polynomial The generator polynomial must divide x^n-1 and its quotient is called a check polynomial. Multiplying a codeword in a cyclic code by the check polynomial yields zero (modulo the polynomial x^n -1). In GUAVA, a cyclic code can be defined by either its generator polynomial or check polynomial.

gap> G := GeneratorPolCode(Indeterminate(GF(2))+Z(2)^0, 7, GF(2) );
a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2)

It is possible that GUAVA does not know that an unrestricted code is in fact linear. This situation occurs for example when a code is generated from a list of elements with the function ElementsCode (see ElementsCode (5.1-1)). By calling the function IsLinearCode (see IsLinearCode (4.3-4)), GUAVA tests if the code can be represented by a generator matrix. If so, the code record and the operations are converted accordingly.

gap> L := Z(2)*[ [0,0,0], [1,0,0], [0,1,1], [1,1,1] ];;
gap> C := ElementsCode( L, GF(2) );
a (3,4,1..3)1 user defined unrestricted code over GF(2)
# so far, GUAVA does not know what kind of code this is
gap> IsLinearCode( C );
true                      # it is linear
gap> C;
a linear [3,2,1]1 user defined unrestricted code over GF(2) 

Of course the same holds for unrestricted codes that in fact are cyclic, or codes, defined by a generator matrix, that actually are cyclic.

Codes are printed simply by giving a small description of their parameters, the word length, size or dimension and perhaps the minimum distance, followed by a short description and the base field of the code. The function Display gives a more detailed description, showing the construction history of the code.

GUAVA doesn't place much emphasis on the actual encoding and decoding processes; some algorithms have been included though. Encoding works simply by multiplying an information vector with a code, decoding is done by the functions Decode or Decodeword. For more information about encoding and decoding, see sections 4.2 and 4.10-1.

gap> R := ReedMullerCode( 1, 3 );
a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
gap> w := [ 1, 0, 1, 1 ] * R;
[ 1 0 0 1 1 0 0 1 ]
gap> Decode( R, w );
[ 1 0 1 1 ]
gap> Decode( R, w + "10000000" ); # One error at the first position
[ 1 0 1 1 ]                       # Corrected by Guava 

Sections 4.1 and 4.2 describe the operations that are available for codes. Section 4.3 describe the functions that tests whether an object is a code and what kind of code it is (see IsCode, IsLinearCode (4.3-4) and IsCyclicCode) and various other boolean functions for codes. Section 4.4 describe functions about equivalence and isomorphism of codes (see IsEquivalent (4.4-1), CodeIsomorphism (4.4-2) and AutomorphismGroup (4.4-3)). Section 4.5 describes functions that work on domains (see Chapter "Domains and their Elements" in the GAP Reference Manual). Section 4.6 describes functions for printing and displaying codes. Section 4.7 describes functions that return the matrices and polynomials that define a code (see GeneratorMat (4.7-1), CheckMat (4.7-2), GeneratorPol (4.7-3), CheckPol (4.7-4), RootsOfCode (4.7-5)). Section 4.8 describes functions that return the basic parameters of codes (see WordLength (4.8-1), Redundancy (4.8-2) and MinimumDistance (4.8-3)). Section 4.9 describes functions that return distance and weight distributions (see WeightDistribution (4.9-2), InnerDistribution (4.9-3), OuterDistribution (4.9-5) and DistancesDistribution (4.9-4)). Section 4.10 describes functions that are related to decoding (see Decode (4.10-1), Decodeword (4.10-2), Syndrome (4.10-8), SyndromeTable (4.10-9) and StandardArray (4.10-10)). In Chapters 5. and 6. which follow, we describe functions that generate and manipulate codes.

4.1 Comparisons of Codes

4.1-1 =
> =( C1, C2 )( function )

The equality operator C1 = C2 evaluates to `true' if the codes C1 and C2 are equal, and to `false' otherwise.

The equality operator is also denoted EQ, and Eq(C1,C2) is the same as C1 = C2. There is also an inequality operator, < >, or not EQ.

Note that codes are equal if and only if their set of elements are equal. Codes can also be compared with objects of other types. Of course they are never equal.

gap> M := [ [0, 0], [1, 0], [0, 1], [1, 1] ];;
gap> C1 := ElementsCode( M, GF(2) );
a (2,4,1..2)0 user defined unrestricted code over GF(2)
gap> M = C1;
false
gap> C2 := GeneratorMatCode( [ [1, 0], [0, 1] ], GF(2) );
a linear [2,2,1]0 code defined by generator matrix over GF(2)
gap> C1 = C2;
true
gap> ReedMullerCode( 1, 3 ) = HadamardCode( 8 );
true
gap> WholeSpaceCode( 5, GF(4) ) = WholeSpaceCode( 5, GF(2) );
false

Another way of comparing codes is IsEquivalent, which checks if two codes are equivalent (see IsEquivalent (4.4-1)). By the way, this called CodeIsomorphism. For the current version of GUAVA, unless one of the codes is unrestricted, this calls Leon's C program (which only works for binary linear codes and only on a unix/linux computer).

4.2 Operations for Codes

4.2-1 +
> +( C1, C2 )( function )

The operator `+' evaluates to the direct sum of the codes C1 and C2. See DirectSumCode (6.2-1).

gap> C1:=RandomLinearCode(10,5);
a  [10,5,?] randomly generated code over GF(2)
gap> C2:=RandomLinearCode(9,4);
a  [9,4,?] randomly generated code over GF(2)
gap> C1+C2;
a linear [10,9,1]0..10 unknown linear code over GF(2)

4.2-2 *
> *( C1, C2 )( function )

The operator `*' evaluates to the direct product of the codes C1 and C2. See DirectProductCode (6.2-3).

gap> C1 := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
a linear [4,2,1]1 code defined by generator matrix over GF(2)
gap> C2 := GeneratorMatCode( [ [0,0,1, 1], [0,0,0, 1] ], GF(2) );
a linear [4,2,1]1 code defined by generator matrix over GF(2)
gap> C1*C2;
a linear [16,4,1]4..12 direct product code

4.2-3 *
> *( m, C )( function )

The operator m*C evaluates to the element of C belonging to information word ('message') m. Here m may be a vector, polynomial, string or codeword or a list of those. This is the way to do encoding in GUAVA. C must be linear, because in GUAVA, encoding by multiplication is only defined for linear codes. If C is a cyclic code, this multiplication is the same as multiplying an information polynomial m by the generator polynomial of C. If C is a linear code, it is equal to the multiplication of an information vector m by a generator matrix of C.

To invert this, use the function InformationWord (see InformationWord (4.2-4), which simply calls the function Decode).

gap> C := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) );
a linear [4,2,1]1 code defined by generator matrix over GF(2)
gap> m:=Codeword("11");
[ 1 1 ]
gap> m*C;
[ 1 1 0 0 ]

4.2-4 InformationWord
> InformationWord( C, c )( function )

Here C is a linear code and c is a codeword in it. The command InformationWord returns the message word (or 'information digits') m satisfying c=m*C. This command simply calls Decode, provided c in C is true. Otherwise, it returns an error.

To invert this, use the encoding function * (see * (4.2-3)).

gap> C:=HammingCode(3);
a linear [7,4,3]1 Hamming (3,2) code over GF(2)
gap> c:=Random(C);
[ 0 0 0 1 1 1 1 ]
gap> InformationWord(C,c);
[ 0 1 1 1 ]
gap> c:=Codeword("1111100");
[ 1 1 1 1 1 0 0 ]
gap> InformationWord(C,c);
"ERROR: codeword must belong to code"
gap> C:=NordstromRobinsonCode();
a (16,256,6)4 Nordstrom-Robinson code over GF(2)
gap> c:=Random(C);
[ 0 0 0 1 0 0 0 1 0 0 1 0 1 1 0 1 ]
gap> InformationWord(C,c);
"ERROR: code must be linear"

4.3 Boolean Functions for Codes

4.3-1 in
> in( c, C )( function )

The command c in C evaluates to `true' if C contains the codeword or list of codewords specified by c. Of course, c and C must have the same word lengths and base fields.

gap> C:= HammingCode( 2 );; eC:= AsSSortedList( C );
[ [ 0 0 0 ], [ 1 1 1 ] ]
gap> eC[2] in C;
true
gap> [ 0 ] in C;
false 

4.3-2 IsSubset
> IsSubset( C1, C2 )( function )

The command IsSubset(C1,C2) returns `true' if C2 is a subcode of C1, i.e. if C1 contains all the elements of C2.

gap> IsSubset( HammingCode(3), RepetitionCode( 7 ) );
true
gap> IsSubset( RepetitionCode( 7 ), HammingCode( 3 ) );
false
gap> IsSubset( WholeSpaceCode( 7 ), HammingCode( 3 ) );
true

4.3-3 IsCode
> IsCode( obj )( function )

IsCode returns `true' if obj, which can be an object of arbitrary type, is a code and `false' otherwise. Will cause an error if obj is an unbound variable.

gap> IsCode( 1 );
false
gap> IsCode( ReedMullerCode( 2,3 ) );
true

4.3-4 IsLinearCode
> IsLinearCode( obj )( function )

IsLinearCode checks if object obj (not necessarily a code) is a linear code. If a code has already been marked as linear or cyclic, the function automatically returns `true'. Otherwise, the function checks if a basis G of the elements of obj exists that generates the elements of obj. If so, G is recorded as a generator matrix of obj and the function returns `true'. If not, the function returns `false'.

gap> C := ElementsCode( [ [0,0,0],[1,1,1] ], GF(2) );
a (3,2,1..3)1 user defined unrestricted code over GF(2)
gap> IsLinearCode( C );
true
gap> IsLinearCode( ElementsCode( [ [1,1,1] ], GF(2) ) );
false
gap> IsLinearCode( 1 );
false 

4.3-5 IsCyclicCode
> IsCyclicCode( obj )( function )

IsCyclicCode checks if the object obj is a cyclic code. If a code has already been marked as cyclic, the function automatically returns `true'. Otherwise, the function checks if a polynomial g exists that generates the elements of obj. If so, g is recorded as a generator polynomial of obj and the function returns `true'. If not, the function returns `false'.

gap> C := ElementsCode( [ [0,0,0], [1,1,1] ], GF(2) );
a (3,2,1..3)1 user defined unrestricted code over GF(2)
gap> # GUAVA does not know the code is cyclic
gap> IsCyclicCode( C );      # this command tells GUAVA to find out
true
gap> IsCyclicCode( HammingCode( 4, GF(2) ) );
false
gap> IsCyclicCode( 1 );
false 

4.3-6 IsPerfectCode
> IsPerfectCode( C )( function )

IsPerfectCode(C) returns `true' if C is a perfect code. If Csubset GF(q)^n then, by definition, this means that for some positive integer t, the space GF(q)^n is covered by non-overlapping spheres of (Hamming) radius t centered at the codewords in C. For a code with odd minimum distance d = 2t+1, this is the case when every word of the vector space of C is at distance at most t from exactly one element of C. Codes with even minimum distance are never perfect.

In fact, a code that is not "trivially perfect" (the binary repetition codes of odd length, the codes consisting of one word, and the codes consisting of the whole vector space), and does not have the parameters of a Hamming or Golay code, cannot be perfect (see section 1.12 in [HP03]).

gap> H := HammingCode(2);
a linear [3,1,3]1 Hamming (2,2) code over GF(2)
gap> IsPerfectCode( H );
true
gap> IsPerfectCode( ElementsCode([[1,1,0],[0,0,1]],GF(2)) );
true
gap> IsPerfectCode( ReedSolomonCode( 6, 3 ) );
false
gap> IsPerfectCode( BinaryGolayCode() );
true 

4.3-7 IsMDSCode
> IsMDSCode( C )( function )

IsMDSCode(C) returns true if C is a maximum distance separable (MDS) code. A linear [n, k, d]-code of length n, dimension k and minimum distance d is an MDS code if k=n-d+1, in other words if C meets the Singleton bound (see UpperBoundSingleton (7.1-1)). An unrestricted (n, M, d) code is called MDS if k=n-d+1, with k equal to the largest integer less than or equal to the logarithm of M with base q, the size of the base field of C.

Well-known MDS codes include the repetition codes, the whole space codes, the even weight codes (these are the only binary MDS codes) and the Reed-Solomon codes.

gap> C1 := ReedSolomonCode( 6, 3 );
a cyclic [6,4,3]2 Reed-Solomon code over GF(7)
gap> IsMDSCode( C1 );
true    # 6-3+1 = 4
gap> IsMDSCode( QRCode( 23, GF(2) ) );
false 

4.3-8 IsSelfDualCode
> IsSelfDualCode( C )( function )

IsSelfDualCode(C) returns `true' if C is self-dual, i.e. when C is equal to its dual code (see also DualCode (6.1-14)). A code is self-dual if it contains all vectors that its elements are orthogonal to. If a code is self-dual, it automatically is self-orthogonal (see IsSelfOrthogonalCode (4.3-9)).

If C is a non-linear code, it cannot be self-dual (the dual code is always linear), so `false' is returned. A linear code can only be self-dual when its dimension k is equal to the redundancy r.

gap> IsSelfDualCode( ExtendedBinaryGolayCode() );
true
gap> C := ReedMullerCode( 1, 3 );
a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)
gap> DualCode( C ) = C;
true 

4.3-9 IsSelfOrthogonalCode
> IsSelfOrthogonalCode( C )( function )

IsSelfOrthogonalCode(C) returns `true' if C is self-orthogonal. A code is self-orthogonal if every element of C is orthogonal to all elements of C, including itself. (In the linear case, this simply means that the generator matrix of C multiplied with its transpose yields a null matrix.)

gap> R := ReedMullerCode(1,4);
a linear [16,5,8]6 Reed-Muller (1,4) code over GF(2)
gap> IsSelfOrthogonalCode(R);
true
gap> IsSelfDualCode(R);
false 

4.3-10 IsDoublyEvenCode
> IsDoublyEvenCode( C )( function )

IsDoublyEvenCode(C) returns `true' if C is a binary linear code which has codewords of weight divisible by 4 only. According to [HP03], a doubly-even code is self-orthogonal and every row in its generator matrix has weight that is divisible by 4.

gap> C:=BinaryGolayCode();
a cyclic [23,12,7]3 binary Golay code over GF(2)
gap> WeightDistribution(C);
[ 1, 0, 0, 0, 0, 0, 0, 253, 506, 0, 0, 1288, 1288, 0, 0, 506, 253, 0, 0, 0, 0, 0, 0, 1 ]
gap> IsDoublyEvenCode(C);  
false
gap> C:=ExtendedCode(C);  
a linear [24,12,8]4 extended code
gap> WeightDistribution(C);
[ 1, 0, 0, 0, 0, 0, 0, 0, 759, 0, 0, 0, 2576, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 1 ]
gap> IsDoublyEvenCode(C);  
true

4.3-11 IsSinglyEvenCode
> IsSinglyEvenCode( C )( function )

IsSinglyEvenCode(C) returns `true' if C is a binary self-orthogonal linear code which is not doubly-even. In other words, C is a binary self-orthogonal code which has codewords of even weight.

gap> x:=Indeterminate(GF(2));                     
x_1
gap> C:=QuasiCyclicCode( [x^0, 1+x^3+x^5+x^6+x^7], 11, GF(2) );
a linear [22,11,1..6]4..7 quasi-cyclic code over GF(2)
gap> IsSelfDualCode(C);  # self-dual is a restriction of self-orthogonal
true
gap> IsDoublyEvenCode(C);
false
gap> IsSinglyEvenCode(C);
true

4.3-12 IsEvenCode
> IsEvenCode( C )( function )

IsEvenCode(C) returns `true' if C is a binary linear code which has codewords of even weight--regardless whether or not it is self-orthogonal.

gap> C:=BinaryGolayCode();
a cyclic [23,12,7]3 binary Golay code over GF(2)
gap> IsSelfOrthogonalCode(C);
false
gap> IsEvenCode(C);
false
gap> C:=ExtendedCode(C);
a linear [24,12,8]4 extended code
gap> IsSelfOrthogonalCode(C);
true
gap> IsEvenCode(C);
true
gap> C:=ExtendedCode(QRCode(17,GF(2)));
a linear [18,9,6]3..5 extended code
gap> IsSelfOrthogonalCode(C);
false
gap> IsEvenCode(C);
true

4.3-13 IsSelfComplementaryCode
> IsSelfComplementaryCode( C )( function )

IsSelfComplementaryCode returns `true' if

v \in C \Rightarrow 1 - v \in C,

where 1 is the all-one word of length n.

gap> IsSelfComplementaryCode( HammingCode( 3, GF(2) ) );
true
gap> IsSelfComplementaryCode( EvenWeightSubcode(
> HammingCode( 3, GF(2) ) ) );
false 

4.3-14 IsAffineCode
> IsAffineCode( C )( function )

IsAffineCode returns `true' if C is an affine code. A code is called affine if it is an affine space. In other words, a code is affine if it is a coset of a linear code.

gap> IsAffineCode( HammingCode( 3, GF(2) ) );
true
gap> IsAffineCode( CosetCode( HammingCode( 3, GF(2) ),
> [ 1, 0, 0, 0, 0, 0, 0 ] ) );
true
gap> IsAffineCode( NordstromRobinsonCode() );
false 

4.3-15 IsAlmostAffineCode
> IsAlmostAffineCode( C )( function )

IsAlmostAffineCode returns `true' if C is an almost affine code. A code is called almost affine if the size of any punctured code of C is q^r for some r, where q is the size of the alphabet of the code. Every affine code is also almost affine, and every code over GF(2) and GF(3) that is almost affine is also affine.

gap> code := ElementsCode( [ [0,0,0], [0,1,1], [0,2,2], [0,3,3],
>                             [1,0,1], [1,1,0], [1,2,3], [1,3,2],
>                             [2,0,2], [2,1,3], [2,2,0], [2,3,1],
>                             [3,0,3], [3,1,2], [3,2,1], [3,3,0] ],
>                             GF(4) );;
gap> IsAlmostAffineCode( code );
true
gap> IsAlmostAffineCode( NordstromRobinsonCode() );
false 

4.4 Equivalence and Isomorphism of Codes

4.4-1 IsEquivalent
> IsEquivalent( C1, C2 )( function )

We say that C1 is permutation equivalent to C2 if C1 can be obtained from C2 by carrying out column permutations. IsEquivalent returns true if C1 and C2 are equivalent codes. At this time, IsEquivalent only handles binary codes. (The external unix/linux program desauto from J. S. Leon is called by IsEquivalent.) Of course, if C1 and C2 are equal, they are also equivalent.

Note that the algorithm is very slow for non-linear codes.

More generally, we say that C1 is equivalent to C2 if C1 can be obtained from C2 by carrying out column permutations and a permutation of the alphabet.

gap> x:= Indeterminate( GF(2) );; pol:= x^3+x+1; 
Z(2)^0+x_1+x_1^3
gap> H := GeneratorPolCode( pol, 7, GF(2));          
a cyclic [7,4,1..3]1 code defined by generator polynomial over GF(2)
gap> H = HammingCode(3, GF(2));
false
gap> IsEquivalent(H, HammingCode(3, GF(2)));
true                        # H is equivalent to a Hamming code
gap> CodeIsomorphism(H, HammingCode(3, GF(2)));
(3,4)(5,6,7) 

4.4-2 CodeIsomorphism
> CodeIsomorphism( C1, C2 )( function )

If the two codes C1 and C2 are permutation equivalent codes (see IsEquivalent (4.4-1)), CodeIsomorphism returns the permutation that transforms C1 into C2. If the codes are not equivalent, it returns `false'.

At this time, IsEquivalent only computes isomorphisms between binary codes on a linux/unix computer (since it calls Leon's C program desauto).

gap> x:= Indeterminate( GF(2) );; pol:= x^3+x+1; 
Z(2)^0+x_1+x_1^3
gap> H := GeneratorPolCode( pol, 7, GF(2));          
a cyclic [7,4,1..3]1 code defined by generator polynomial over GF(2)
gap> CodeIsomorphism(H, HammingCode(3, GF(2)));
(3,4)(5,6,7) 
gap> PermutedCode(H, (3,4)(5,6,7)) = HammingCode(3, GF(2));
true 

4.4-3 AutomorphismGroup
> AutomorphismGroup( C )( function )

AutomorphismGroup returns the automorphism group of a linear code C. For a binary code, the automorphism group is the largest permutation group of degree n such that each permutation applied to the columns of C again yields C. GUAVA calls the external program desauto written by J. S. Leon, if it exists, to compute the automorphism group. If Leon's program is not compiled on the system (and in the default directory) then it calls instead the much slower program PermutationAutomorphismGroup.

See Leon [Leo82] for a more precise description of the method, and the guava/src/leon/doc subdirectory for for details about Leon's C programs.

The function PermutedCode permutes the columns of a code (see PermutedCode (6.1-4)).

gap> R := RepetitionCode(7,GF(2));
a cyclic [7,1,7]3 repetition code over GF(2)
gap> AutomorphismGroup(R);
Sym( [ 1 .. 7 ] )
                        # every permutation keeps R identical
gap> C := CordaroWagnerCode(7);
a linear [7,2,4]3 Cordaro-Wagner code over GF(2)
gap> AsSSortedList(C);
[ [ 0 0 0 0 0 0 0 ], [ 0 0 1 1 1 1 1 ], [ 1 1 0 0 0 1 1 ], [ 1 1 1 1 1 0 0 ] ]
gap> AutomorphismGroup(C);
Group([ (3,4), (4,5), (1,6)(2,7), (1,2), (6,7) ])
gap> C2 :=  PermutedCode(C, (1,6)(2,7));
a linear [7,2,4]3 permuted code
gap> AsSSortedList(C2);
[ [ 0 0 0 0 0 0 0 ], [ 0 0 1 1 1 1 1 ], [ 1 1 0 0 0 1 1 ], [ 1 1 1 1 1 0 0 ] ]
gap> C2 = C;
true 

4.4-4 PermutationAutomorphismGroup
> PermutationAutomorphismGroup( C )( function )

PermutationAutomorphismGroup returns the permutation automorphism group of a linear code C. This is the largest permutation group of degree n such that each permutation applied to the columns of C again yields C. It is written in GAP, so is much slower than AutomorphismGroup.

When C is binary PermutationAutomorphismGroup does not call AutomorphismGroup, even though they agree mathematically in that case. This way PermutationAutomorphismGroup can be called on any platform which runs GAP.

The older name for this command, PermutationGroup, will become obsolete in the next version of GAP.

gap> R := RepetitionCode(3,GF(3));
a cyclic [3,1,3]2 repetition code over GF(3)
gap> G:=PermutationAutomorphismGroup(R);
Group([ (), (1,3), (1,2,3), (2,3), (1,3,2), (1,2) ])
gap> G=SymmetricGroup(3);
true

4.5 Domain Functions for Codes

These are some GAP functions that work on `Domains' in general. Their specific effect on `Codes' is explained here.

4.5-1 IsFinite
> IsFinite( C )( function )

IsFinite is an implementation of the GAP domain function IsFinite. It returns true for a code C.

gap> IsFinite( RepetitionCode( 1000, GF(11) ) );
true 

4.5-2 Size
> Size( C )( function )

Size returns the size of C, the number of elements of the code. If the code is linear, the size of the code is equal to q^k, where q is the size of the base field of C and k is the dimension.

gap> Size( RepetitionCode( 1000, GF(11) ) );
11
gap> Size( NordstromRobinsonCode() );
256 

4.5-3 LeftActingDomain
> LeftActingDomain( C )( function )

LeftActingDomain returns the base field of a code C. Each element of C consists of elements of this base field. If the base field is F, and the word length of the code is n, then the codewords are elements of F^n. If C is a cyclic code, its elements are interpreted as polynomials with coefficients over F.

gap> C1 := ElementsCode([[0,0,0], [1,0,1], [0,1,0]], GF(4));
a (3,3,1..3)2..3 user defined unrestricted code over GF(4)
gap> LeftActingDomain( C1 );
GF(2^2)
gap> LeftActingDomain( HammingCode( 3, GF(9) ) );
GF(3^2) 

4.5-4 Dimension
> Dimension( C )( function )

Dimension returns the parameter k of C, the dimension of the code, or the number of information symbols in each codeword. The dimension is not defined for non-linear codes; Dimension then returns an error.

gap> Dimension( NullCode( 5, GF(5) ) );
0
gap> C := BCHCode( 15, 4, GF(4) );
a cyclic [15,9,5]3..4 BCH code, delta=5, b=1 over GF(4)
gap> Dimension( C );
9
gap> Size( C ) = Size( LeftActingDomain( C ) ) ^ Dimension( C );
true 

4.5-5 AsSSortedList
> AsSSortedList( C )( function )

AsSSortedList (as strictly sorted list) returns an immutable, duplicate free list of the elements of C. For a finite field GF(q) generated by powers of Z(q), the ordering on

GF(q)=\{ 0 , Z(q)^0, Z(q), Z(q)^2, ...Z(q)^{q-2} \}

is that determined by the exponents i. These elements are of the type codeword (see Codeword (3.1-1)). Note that for large codes, generating the elements may be very time- and memory-consuming. For generating a specific element or a subset of the elements, use CodewordNr (see CodewordNr (3.1-2)).

gap> C := ConferenceCode( 5 );
a (5,12,2)1..4 conference code over GF(2)
gap> AsSSortedList( C );
[ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 1 1 ], [ 0 1 1 0 1 ], [ 0 1 1 1 0 ], 
  [ 1 0 0 1 1 ], [ 1 0 1 0 1 ], [ 1 0 1 1 0 ], [ 1 1 0 0 1 ], [ 1 1 0 1 0 ], 
  [ 1 1 1 0 0 ], [ 1 1 1 1 1 ] ]
gap> CodewordNr( C, [ 1, 2 ] );
[ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ] ]

4.6 Printing and Displaying Codes

4.6-1 Print
> Print( C )( function )

Print prints information about C. This is the same as typing the identifier C at the GAP-prompt.

If the argument is an unrestricted code, information in the form


a (n,M,d)r ... code over GF(q)

is printed, where n is the word length, M the number of elements of the code, d the minimum distance and r the covering radius.

If the argument is a linear code, information in the form


a linear [n,k,d]r ... code over GF(q)

is printed, where n is the word length, k the dimension of the code, d the minimum distance and r the covering radius.

Except for codes produced by RandomLinearCode, if d is not yet known, it is displayed in the form


lowerbound..upperbound

and if r is not yet known, it is displayed in the same way. For certain ranges of n, the values of lowerbound and upperbound are obtained from tables.

The function Display gives more information. See Display (4.6-3).

gap> C1 := ExtendedCode( HammingCode( 3, GF(2) ) );
a linear [8,4,4]2 extended code
gap> Print( "This is ", NordstromRobinsonCode(), ". \n");
This is a (16,256,6)4 Nordstrom-Robinson code over GF(2). 

4.6-2 String
> String( C )( function )

String returns information about C in a string. This function is used by Print.

gap> x:= Indeterminate( GF(3) );; pol:= x^2+1;
x_1^2+Z(3)^0
gap> Factors(pol);
[ x_1^2+Z(3)^0 ]
gap> H := GeneratorPolCode( pol, 8, GF(3));
a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)
gap> String(H);
"a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)"

4.6-3 Display
> Display( C )( function )

Display prints the method of construction of code C. With this history, in most cases an equal or equivalent code can be reconstructed. If C is an unmanipulated code, the result is equal to output of the function Print (see Print (4.6-1)).

gap> Display( RepetitionCode( 6, GF(3) ) );
a cyclic [6,1,6]4 repetition code over GF(3)
gap> C1 := ExtendedCode( HammingCode(2) );;
gap> C2 := PuncturedCode( ReedMullerCode( 2, 3 ) );;
gap> Display( LengthenedCode( UUVCode( C1, C2 ) ) );
a linear [12,8,2]2..4 code, lengthened with 1 column(s) of
a linear [11,8,1]1..2 U U+V construction code of
U: a linear [4,1,4]2 extended code of
   a linear [3,1,3]1 Hamming (2,2) code over GF(2)
V: a linear [7,7,1]0 punctured code of
   a cyclic [8,7,2]1 Reed-Muller (2,3) code over GF(2)

4.6-4 DisplayBoundsInfo
> DisplayBoundsInfo( bds )( function )

DisplayBoundsInfo prints the method of construction of the code C indicated in bds:= BoundsMinimumDistance( n, k, GF(q) ).

gap> bounds := BoundsMinimumDistance( 20, 17, GF(4) );
gap> DisplayBoundsInfo(bounds);
an optimal linear [20,17,d] code over GF(4) has d=3
--------------------------------------------------------------------------------------------------
Lb(20,17)=3, by shortening of:
Lb(21,18)=3, by applying contruction B to a [81,77,3] code
Lb(81,77)=3, by shortening of:
Lb(85,81)=3, reference: Ham
--------------------------------------------------------------------------------------------------
Ub(20,17)=3, by considering shortening to:
Ub(7,4)=3, by considering puncturing to:
Ub(6,4)=2, by construction B applied to:
Ub(2,1)=2, repetition code
--------------------------------------------------------------------------------------------------
Reference Ham:
%T this reference is unknown, for more info
%T contact A.E. Brouwer (aeb@cwi.nl)

4.7 Generating (Check) Matrices and Polynomials

4.7-1 GeneratorMat
> GeneratorMat( C )( function )

GeneratorMat returns a generator matrix of C. The code consists of all linear combinations of the rows of this matrix.

If until now no generator matrix of C was determined, it is computed from either the parity check matrix, the generator polynomial, the check polynomial or the elements (if possible), whichever is available.

If C is a non-linear code, the function returns an error.

gap> GeneratorMat( HammingCode( 3, GF(2) ) );
[ [ an immutable GF2 vector of length 7], 
  [ an immutable GF2 vector of length 7], 
  [ an immutable GF2 vector of length 7], 
  [ an immutable GF2 vector of length 7] ]
gap> Display(last);
 1 1 1 . . . .
 1 . . 1 1 . .
 . 1 . 1 . 1 .
 1 1 . 1 . . 1
gap> GeneratorMat( RepetitionCode( 5, GF(25) ) );
[ [ Z(5)^0, Z(5)^0, Z(5)^0, Z(5)^0, Z(5)^0 ] ]
gap> GeneratorMat( NullCode( 14, GF(4) ) );
[  ]

4.7-2 CheckMat
> CheckMat( C )( function )

CheckMat returns a parity check matrix of C. The code consists of all words orthogonal to each of the rows of this matrix. The transpose of the matrix is a right inverse of the generator matrix. The parity check matrix is computed from either the generator matrix, the generator polynomial, the check polynomial or the elements of C (if possible), whichever is available.

If C is a non-linear code, the function returns an error.

gap> CheckMat( HammingCode(3, GF(2) ) );
[ [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
  [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ],
  [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ] ]
gap> Display(last);
 . . . 1 1 1 1
 . 1 1 . . 1 1
 1 . 1 . 1 . 1
gap> CheckMat( RepetitionCode( 5, GF(25) ) );
[ [ Z(5)^0, Z(5)^2, 0*Z(5), 0*Z(5), 0*Z(5) ],
  [ 0*Z(5), Z(5)^0, Z(5)^2, 0*Z(5), 0*Z(5) ],
  [ 0*Z(5), 0*Z(5), Z(5)^0, Z(5)^2, 0*Z(5) ],
  [ 0*Z(5), 0*Z(5), 0*Z(5), Z(5)^0, Z(5)^2 ] ]
gap> CheckMat( WholeSpaceCode( 12, GF(4) ) );
[  ] 

4.7-3 GeneratorPol
> GeneratorPol( C )( function )

GeneratorPol returns the generator polynomial of C. The code consists of all multiples of the generator polynomial modulo x^n-1, where n is the word length of C. The generator polynomial is determined from either the check polynomial, the generator or check matrix or the elements of C (if possible), whichever is available.

If C is not a cyclic code, the function returns `false'.

gap> GeneratorPol(GeneratorMatCode([[1, 1, 0], [0, 1, 1]], GF(2)));
Z(2)^0+x_1
gap> GeneratorPol( WholeSpaceCode( 4, GF(2) ) );
Z(2)^0
gap> GeneratorPol( NullCode( 7, GF(3) ) );
-Z(3)^0+x_1^7

4.7-4 CheckPol
> CheckPol( C )( function )

CheckPol returns the check polynomial of C. The code consists of all polynomials f with

f\cdot h \equiv 0 \ ({\rm mod}\ x^n-1),

where h is the check polynomial, and n is the word length of C. The check polynomial is computed from the generator polynomial, the generator or parity check matrix or the elements of C (if possible), whichever is available.

If C if not a cyclic code, the function returns an error.

gap> CheckPol(GeneratorMatCode([[1, 1, 0], [0, 1, 1]], GF(2)));
Z(2)^0+x_1+x_1^2
gap> CheckPol(WholeSpaceCode(4, GF(2)));
Z(2)^0+x_1^4
gap> CheckPol(NullCode(7,GF(3)));
Z(3)^0

4.7-5 RootsOfCode
> RootsOfCode( C )( function )

RootsOfCode returns a list of all zeros of the generator polynomial of a cyclic code C. These are finite field elements in the splitting field of the generator polynomial, GF(q^m), m is the multiplicative order of the size of the base field of the code, modulo the word length.

The reverse process, constructing a code from a set of roots, can be carried out by the function RootsCode (see RootsCode (5.5-3)).

gap> C1 := ReedSolomonCode( 16, 5 );
a cyclic [16,12,5]3..4 Reed-Solomon code over GF(17)
gap> RootsOfCode( C1 );
[ Z(17), Z(17)^2, Z(17)^3, Z(17)^4 ]
gap> C2 := RootsCode( 16, last );
a cyclic [16,12,5]3..4 code defined by roots over GF(17)
gap> C1 = C2;
true 

4.8 Parameters of Codes

4.8-1 WordLength
> WordLength( C )( function )

WordLength returns the parameter n of C, the word length of the elements. Elements of cyclic codes are polynomials of maximum degree n-1, as calculations are carried out modulo x^n-1.

gap> WordLength( NordstromRobinsonCode() );
16
gap> WordLength( PuncturedCode( WholeSpaceCode(7) ) );
6
gap> WordLength( UUVCode( WholeSpaceCode(7), RepetitionCode(7) ) );
14 

4.8-2 Redundancy
> Redundancy( C )( function )

Redundancy returns the redundancy r of C, which is equal to the number of check symbols in each element. If C is not a linear code the redundancy is not defined and Redundancy returns an error.

If a linear code C has dimension k and word length n, it has redundancy r=n-k.

gap> C := TernaryGolayCode();
a cyclic [11,6,5]2 ternary Golay code over GF(3)
gap> Redundancy(C);
5
gap> Redundancy( DualCode(C) );
6 

4.8-3 MinimumDistance
> MinimumDistance( C )( function )

MinimumDistance returns the minimum distance of C, the largest integer d with the property that every element of C has at least a Hamming distance d (see DistanceCodeword (3.6-2)) to any other element of C. For linear codes, the minimum distance is equal to the minimum weight. This means that d is also the smallest positive value with w[d+1] <> 0, where w=(w[1],w[2],...,w[n]) is the weight distribution of C (see WeightDistribution (4.9-2)). For unrestricted codes, d is the smallest positive value with w[d+1] <> 0, where w is the inner distribution of C (see InnerDistribution (4.9-3)).

For codes with only one element, the minimum distance is defined to be equal to the word length.

For linear codes C, the algorithm used is the following: After replacing C by a permutation equivalent C', one may assume the generator matrix has the following form G=(I_k , | , A), for some kx (n-k) matrix A. If A=0 then return d(C)=1. Next, find the minimum distance of the code spanned by the rows of A. Call this distance d(A). Note that d(A) is equal to the the Hamming distance d(v,0) where v is some proper linear combination of i distinct rows of A. Return d(C)=d(A)+i, where i is as in the previous step.

This command may also be called using the syntax MinimumDistance(C, w). In this form, MinimumDistance returns the minimum distance of a codeword w to the code C, also called the distance from w to C. This is the smallest value d for which there is an element c of the code C which is at distance d from w. So d is also the minimum value for which D[d+1] <> 0, where D is the distance distribution of w to C (see DistancesDistribution (4.9-4)).

Note that w must be an element of the same vector space as the elements of C. w does not necessarily belong to the code (if it does, the minimum distance is zero).

gap> C := MOLSCode(7);; MinimumDistance(C);
3
gap> WeightDistribution(C);
[ 1, 0, 0, 24, 24 ]
gap> MinimumDistance( WholeSpaceCode( 5, GF(3) ) );
1
gap> MinimumDistance( NullCode( 4, GF(2) ) );
4
gap> C := ConferenceCode(9);; MinimumDistance(C);
4
gap> InnerDistribution(C);
[ 1, 0, 0, 0, 63/5, 9/5, 18/5, 0, 9/10, 1/10 ] 
gap> C := MOLSCode(7);; w := CodewordNr( C, 17 );
[ 3 3 6 2 ]
gap> MinimumDistance( C, w );
0
gap> C := RemovedElementsCode( C, w );; MinimumDistance( C, w );
3                           # so w no longer belongs to C 

See also the GUAVA commands relating to bounds on the minimum distance in section 7.1.

4.8-4 MinimumDistanceLeon
> MinimumDistanceLeon( C )( function )

MinimumDistanceLeon returns the ``probable'' minimum distance d_Leon of a linear binary code C, using an implementation of Leon's probabilistic polynomial time algorithm. Briefly: Let C be a linear code of dimension k over GF(q) as above. The algorithm has input parameters s and rho, where s is an integer between 2 and n-k, and rho is an integer between 2 and k.

  • Find a generator matrix G of C.

  • Randomly permute the columns of G.

  • Perform Gaussian elimination on the permuted matrix to obtain a new matrix of the following form:

    G=(I_{k} \, | \, Z \, | \, B)

    with Z a kx s matrix. If (Z,B) is the zero matrix then return 1 for the minimum distance. If Z=0 but not B then either choose another permutation of the rows of C or return `method fails'.

  • Search Z for at most rho rows that lead to codewords of weight less than rho.

  • For these codewords, compute the weight of the whole word in C. Return this weight.

(See for example J. S. Leon, [Leo88] for more details.) Sometimes (as is the case in GUAVA) this probabilistic algorithm is repeated several times and the most commonly occurring value is taken.

gap> C:=RandomLinearCode(50,22,GF(2));
a  [50,22,?] randomly generated code over GF(2)
gap> MinimumDistanceLeon(C); time;
6
211
gap> MinimumDistance(C); time;
6
1204

4.8-5 MinimumWeight
> MinimumWeight( C )( function )

MinimumWeight returns the minimum Hamming weight of a linear code C. At the moment, this function works for binary and ternary codes only. The MinimumWeight function relies on an external executable program which is written in C language. As a consequence, the execution time of MinimumWeight function is faster than that of MinimumDistance (4.8-3) function.

The MinimumWeight function implements Chen's [Che69] algorithm if C is cyclic, and Zimmermann's [Zim96] algorithm if C is a general linear code. This function has a built-in check on the constraints of the minimum weight codewords. For example, for a self-orthogonal code over GF(3), the minimum weight codewords have weight that is divisible by 3, i.e. 0 mod 3 congruence. Similary, self-orthogonal codes over GF(2) have codeword weights that are divisible by 4 and even codes over GF(2) have codewords weights that are divisible by 2. By taking these constraints into account, in many cases, the execution time may be significantly reduced. Consider the minimum Hamming weight enumeration of the [151,45] binary cyclic code (second example below). This cyclic code is self-orthogonal, so the weight of all codewords is divisible by 4. Without considering this constraint, the computation will finish at information weight 10, rather than 9. We can see that, this 0 mod 4 constraint on the codeword weights, has allowed us to avoid enumeration of b(45,10) = 3,190,187,286 additional codewords, where b(n,k)=n!/((n-k)!k!) is the binomial coefficient of integers n and k.

Note that the C source code for this minimum weight computation has not yet been optimised, especially the code for GF(3), and there are chances to improve the speed of this function. Your contributions are most welcomed.

If you find any bugs on this function, please report it to ctjhai@plymouth.ac.uk.

gap> # Extended ternary quadratic residue code of length 48
gap> n := 47;;
gap> x := Indeterminate(GF(3));;
gap> F := Factors(x^n-1);;
gap> v := List([1..n], i->Zero(GF(3)));;
gap> v := v + MutableCopyMat(VectorCodeword( Codeword(F[2]) ));;
gap> G := CirculantMatrix(24, v);;
gap> for i in [1..Size(G)] do; s:=Zero(GF(3));
> for j in [1..Size(G[i])] do; s:=s+G[i][j]; od; Append(G[i], [ s ]);
> od;;
gap> C := GeneratorMatCodeNC(G, GF(3));
a  [48,24,?] randomly generated code over GF(3)
gap> MinimumWeight(C);
[48,24] linear code over GF(3) - minimum weight evaluation
Known lower-bound: 1
There are 2 generator matrices, ranks : 24 24 
The weight of the minimum weight codeword satisfies 0 mod 3 congruence
Enumerating codewords with information weight 1 (w=1)
    Found new minimum weight 15
Number of matrices required for codeword enumeration 2
Completed w= 1, 48 codewords enumerated, lower-bound 6, upper-bound 15
Termination expected with information weight 6 at matrix 1
-----------------------------------------------------------------------------
Enumerating codewords with information weight 2 (w=2) using 2 matrices
Completed w= 2, 1104 codewords enumerated, lower-bound 6, upper-bound 15
Termination expected with information weight 6 at matrix 1
-----------------------------------------------------------------------------
Enumerating codewords with information weight 3 (w=3) using 2 matrices
Completed w= 3, 16192 codewords enumerated, lower-bound 9, upper-bound 15
Termination expected with information weight 6 at matrix 1
-----------------------------------------------------------------------------
Enumerating codewords with information weight 4 (w=4) using 2 matrices
Completed w= 4, 170016 codewords enumerated, lower-bound 12, upper-bound 15
Termination expected with information weight 6 at matrix 1
-----------------------------------------------------------------------------
Enumerating codewords with information weight 5 (w=5) using 2 matrices
Completed w= 5, 1360128 codewords enumerated, lower-bound 12, upper-bound 15
Termination expected with information weight 6 at matrix 1
-----------------------------------------------------------------------------
Enumerating codewords with information weight 6 (w=6) using 1 matrices
Completed w= 6, 4307072 codewords enumerated, lower-bound 15, upper-bound 15
-----------------------------------------------------------------------------
Minimum weight: 15
15
gap> 

gap> # Binary cyclic code [151,45,36]
gap> n := 151;;
gap> x := Indeterminate(GF(2));;
gap> F := Factors(x^n-1);;
gap> C := CheckPolCode(F[2]*F[3]*F[3]*F[4], n, GF(2));
a cyclic [151,45,1..50]31..75 code defined by check polynomial over GF(2)
gap> MinimumWeight(C);
[151,45] cyclic code over GF(2) - minimum weight evaluation
Known lower-bound: 1
The weight of the minimum weight codeword satisfies 0 mod 4 congruence
Enumerating codewords with information weight 1 (w=1)
    Found new minimum weight 56
    Found new minimum weight 44
Number of matrices required for codeword enumeration 1
Completed w= 1, 45 codewords enumerated, lower-bound 8, upper-bound 44
Termination expected with information weight 11
-----------------------------------------------------------------------------
Enumerating codewords with information weight 2 (w=2) using 1 matrix
Completed w= 2, 990 codewords enumerated, lower-bound 12, upper-bound 44
Termination expected with information weight 11
-----------------------------------------------------------------------------
Enumerating codewords with information weight 3 (w=3) using 1 matrix
   Found new minimum weight 40
   Found new minimum weight 36
Completed w= 3, 14190 codewords enumerated, lower-bound 16, upper-bound 36
Termination expected with information weight 9
-----------------------------------------------------------------------------
Enumerating codewords with information weight 4 (w=4) using 1 matrix
Completed w= 4, 148995 codewords enumerated, lower-bound 20, upper-bound 36
Termination expected with information weight 9
-----------------------------------------------------------------------------
Enumerating codewords with information weight 5 (w=5) using 1 matrix
Completed w= 5, 1221759 codewords enumerated, lower-bound 24, upper-bound 36
Termination expected with information weight 9
-----------------------------------------------------------------------------
Enumerating codewords with information weight 6 (w=6) using 1 matrix
Completed w= 6, 8145060 codewords enumerated, lower-bound 24, upper-bound 36
Termination expected with information weight 9
-----------------------------------------------------------------------------
Enumerating codewords with information weight 7 (w=7) using 1 matrix
Completed w= 7, 45379620 codewords enumerated, lower-bound 28, upper-bound 36
Termination expected with information weight 9
-----------------------------------------------------------------------------
Enumerating codewords with information weight 8 (w=8) using 1 matrix
Completed w= 8, 215553195 codewords enumerated, lower-bound 32, upper-bound 36
Termination expected with information weight 9
-----------------------------------------------------------------------------
Enumerating codewords with information weight 9 (w=9) using 1 matrix
Completed w= 9, 886163135 codewords enumerated, lower-bound 36, upper-bound 36
-----------------------------------------------------------------------------
Minimum weight: 36
36

4.8-6 DecreaseMinimumDistanceUpperBound
> DecreaseMinimumDistanceUpperBound( C, t, m )( function )

DecreaseMinimumDistanceUpperBound is an implementation of the algorithm for the minimum distance of a linear binary code C by Leon [Leo88]. This algorithm tries to find codewords with small minimum weights. The parameter t is at least 1 and less than the dimension of C. The best results are obtained if it is close to the dimension of the code. The parameter m gives the number of runs that the algorithm will perform.

The result returned is a record with two fields; the first, mindist, gives the lowest weight found, and word gives the corresponding codeword. (This was implemented before MinimumDistanceLeon but independently. The older manual had given the command incorrectly, so the command was only found after reading all the *.gi files in the GUAVA library. Though both MinimumDistance and MinimumDistanceLeon often run much faster than DecreaseMinimumDistanceUpperBound, DecreaseMinimumDistanceUpperBound appears to be more accurate than MinimumDistanceLeon.)

gap> C:=RandomLinearCode(5,2,GF(2));
a  [5,2,?] randomly generated code over GF(2)
gap> DecreaseMinimumDistanceUpperBound(C,1,4);
rec( mindist := 3, word := [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ] )
gap> MinimumDistance(C);
3
gap> C:=RandomLinearCode(8,4,GF(2));
a  [8,4,?] randomly generated code over GF(2)
gap> DecreaseMinimumDistanceUpperBound(C,3,4);
rec( mindist := 2,
  word := [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ] )
gap> MinimumDistance(C);
2

4.8-7 MinimumDistanceRandom
> MinimumDistanceRandom( C, num, s )( function )

MinimumDistanceRandom returns an upper bound for the minimum distance d_random of a linear binary code C, using a probabilistic polynomial time algorithm. Briefly: Let C be a linear code of dimension k over GF(q) as above. The algorithm has input parameters num and s, where s is an integer between 2 and n-1, and num is an integer greater than or equal to 1.

  • Find a generator matrix G of C.

  • Randomly permute the columns of G, written G_p..

  • G=(A, B)

    with A a kx s matrix. If A is the zero matrix then return `method fails'.

  • Search A for at most 5 rows that lead to codewords, in the code C_A with generator matrix A, of minimum weight.

  • For these codewords, use the associated linear combination to compute the weight of the whole word in C. Return this weight and codeword.

This probabilistic algorithm is repeated num times (with different random permutations of the rows of G each time) and the weight and codeword of the lowest occurring weight is taken.

gap> C:=RandomLinearCode(60,20,GF(2));
a  [60,20,?] randomly generated code over GF(2)
gap> #mindist(C);time;
gap> #mindistleon(C,10,30);time; #doesn't work well
gap> a:=MinimumDistanceRandom(C,10,30);time; # done 10 times -with fastest time!!

 This is a probabilistic algorithm which may return the wrong answer.
[ 12, [ 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 
        1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 ] ]
130
gap> a[2] in C;
true
gap> b:=DecreaseMinimumDistanceUpperBound(C,10,1); time; #only done once!
rec( mindist := 12, word := [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
      Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
      0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 
      Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
      0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 
      0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ] )
649
gap> Codeword(b!.word) in C;
true
gap> MinimumDistance(C);time;
12
196
gap> c:=MinimumDistanceLeon(C);time;
12
66
gap> C:=RandomLinearCode(30,10,GF(3));
a  [30,10,?] randomly generated code over GF(3)
gap> a:=MinimumDistanceRandom(C,10,10);time;

 This is a probabilistic algorithm which may return the wrong answer.
[ 13, [ 0 0 0 1 0 0 0 0 0 0 1 0 2 2 1 1 0 2 2 0 1 0 2 1 0 0 0 1 0 2 ] ]
229
gap> a[2] in C;
true
gap> MinimumDistance(C);time;
9
45
gap> c:=MinimumDistanceLeon(C);
Code must be binary. Quitting.
0
gap> a:=MinimumDistanceRandom(C,1,29);time;

 This is a probabilistic algorithm which may return the wrong answer.
[ 10, [ 0 0 1 0 2 0 2 0 1 0 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 2 2 2 0 ] ]
53

4.8-8 CoveringRadius
> CoveringRadius( C )( function )

CoveringRadius returns the covering radius of a linear code C. This is the smallest number r with the property that each element v of the ambient vector space of C has at most a distance r to the code C. So for each vector v there must be an element c of C with d(v,c) <= r. The smallest covering radius of any [n,k] binary linear code is denoted t(n,k). A binary linear code with reasonable small covering radius is called a covering code.

If C is a perfect code (see IsPerfectCode (4.3-6)), the covering radius is equal to t, the number of errors the code can correct, where d = 2t+1, with d the minimum distance of C (see MinimumDistance (4.8-3)).

If there exists a function called SpecialCoveringRadius in the `operations' field of the code, then this function will be called to compute the covering radius of the code. At the moment, no code-specific functions are implemented.

If the length of BoundsCoveringRadius (see BoundsCoveringRadius (7.2-1)), is 1, then the value in


C.boundsCoveringRadius

is returned. Otherwise, the function


C.operations.CoveringRadius

is executed, unless the redundancy of C is too large. In the last case, a warning is issued.

The algorithm used to compute the covering radius is the following. First, CosetLeadersMatFFE is used to compute the list of coset leaders (which returns a codeword in each coset of GF(q)^n/C of minimum weight). Then WeightVecFFE is used to compute the weight of each of these coset leaders. The program returns the maximum of these weights.

gap> H := RandomLinearCode(10, 5, GF(2));
a  [10,5,?] randomly generated code over GF(2)
gap> CoveringRadius(H);
3
gap> H := HammingCode(4, GF(2));; IsPerfectCode(H);
true
gap> CoveringRadius(H);
1                       # Hamming codes have minimum distance 3
gap> CoveringRadius(ReedSolomonCode(7,4));
3 
gap> CoveringRadius( BCHCode( 17, 3, GF(2) ) );
3
gap> CoveringRadius( HammingCode( 5, GF(2) ) );
1
gap> C := ReedMullerCode( 1, 9 );;
gap> CoveringRadius( C );
CoveringRadius: warning, the covering radius of
this code cannot be computed straightforward.
Try to use IncreaseCoveringRadiusLowerBound( code ).
(see the manual for more details).
The covering radius of code lies in the interval:
[ 240 .. 248 ]

See also the GUAVA commands relating to bounds on the minimum distance in section 7.2.

4.8-9 SetCoveringRadius
> SetCoveringRadius( C, intlist )( function )

SetCoveringRadius enables the user to set the covering radius herself, instead of letting GUAVA compute it. If intlist is an integer, GUAVA will simply put it in the `boundsCoveringRadius' field. If it is a list of integers, however, it will intersect this list with the `boundsCoveringRadius' field, thus taking the best of both lists. If this would leave an empty list, the field is set to intlist. Because some other computations use the covering radius of the code, it is important that the entered value is not wrong, otherwise new results may be invalid.

gap> C := BCHCode( 17, 3, GF(2) );;
gap> BoundsCoveringRadius( C );
[ 3 .. 4 ]
gap> SetCoveringRadius( C, [ 2 .. 3 ] );
gap> BoundsCoveringRadius( C );
[ [ 2 .. 3 ] ]

4.9 Distributions

4.9-1 MinimumWeightWords
> MinimumWeightWords( C )( function )

MinimumWeightWords returns the list of minimum weight codewords of C.

This algorithm is written in GAP is slow, so is only suitable for small codes.

This does not call the very fast function MinimumWeight (see MinimumWeight (4.8-5)).

gap> C:=HammingCode(3,GF(2));
a linear [7,4,3]1 Hamming (3,2) code over GF(2)
gap> MinimumWeightWords(C);
[ [ 1 0 0 0 0 1 1 ], [ 0 1 0 1 0 1 0 ], [ 0 1 0 0 1 0 1 ], [ 1 0 0 1 1 0 0 ], [ 0 0 1 0 1 1 0 ],
  [ 0 0 1 1 0 0 1 ], [ 1 1 1 0 0 0 0 ] ]

4.9-2 WeightDistribution
> WeightDistribution( C )( function )

WeightDistribution returns the weight distribution of C, as a vector. The i^th element of this vector contains the number of elements of C with weight i-1. For linear codes, the weight distribution is equal to the inner distribution (see InnerDistribution (4.9-3)). If w is the weight distribution of a linear code C, it must have the zero codeword, so w[1] = 1 (one word of weight 0).

Some codes, such as the Hamming codes, have precomputed weight distributions. For others, the program WeightDistribution calls the GAP program DistancesDistributionMatFFEVecFFE, which is written in C. See also CodeWeightEnumerator.

gap> WeightDistribution( ConferenceCode(9) );
[ 1, 0, 0, 0, 0, 18, 0, 0, 0, 1 ]
gap> WeightDistribution( RepetitionCode( 7, GF(4) ) );
[ 1, 0, 0, 0, 0, 0, 0, 3 ]
gap> WeightDistribution( WholeSpaceCode( 5, GF(2) ) );
[ 1, 5, 10, 10, 5, 1 ] 

4.9-3 InnerDistribution
> InnerDistribution( C )( function )

InnerDistribution returns the inner distribution of C. The i^th element of the vector contains the average number of elements of C at distance i-1 to an element of C. For linear codes, the inner distribution is equal to the weight distribution (see WeightDistribution (4.9-2)).

Suppose w is the inner distribution of C. Then w[1] = 1, because each element of C has exactly one element at distance zero (the element itself). The minimum distance of C is the smallest value d > 0 with w[d+1] <> 0, because a distance between zero and d never occurs. See MinimumDistance (4.8-3).

gap> InnerDistribution( ConferenceCode(9) );
[ 1, 0, 0, 0, 63/5, 9/5, 18/5, 0, 9/10, 1/10 ]
gap> InnerDistribution( RepetitionCode( 7, GF(4) ) );
[ 1, 0, 0, 0, 0, 0, 0, 3 ] 

4.9-4 DistancesDistribution
> DistancesDistribution( C, w )( function )

DistancesDistribution returns the distribution of the distances of all elements of C to a codeword w in the same vector space. The i^th element of the distance distribution is the number of codewords of C that have distance i-1 to w. The smallest value d with w[d+1] <> 0, is defined as the distance to C (see MinimumDistance (4.8-3)).

gap> H := HadamardCode(20);
a (20,40,10)6..8 Hadamard code of order 20 over GF(2)
gap> c := Codeword("10110101101010010101", H);
[ 1 0 1 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 ]
gap> DistancesDistribution(H, c);
[ 0, 0, 0, 0, 0, 1, 0, 7, 0, 12, 0, 12, 0, 7, 0, 1, 0, 0, 0, 0, 0 ]
gap> MinimumDistance(H, c);
5                           # distance to H 

4.9-5 OuterDistribution
> OuterDistribution( C )( function )

The function OuterDistribution returns a list of length q^n, where q is the size of the base field of C and n is the word length. The elements of the list consist of pairs, the first coordinate being an element of GF(q)^n (this is a codeword type) and the second coordinate being a distribution of distances to the code (a list of integers). This table is very large, and for n > 20 it will not fit in the memory of most computers. The function DistancesDistribution (see DistancesDistribution (4.9-4)) can be used to calculate one entry of the list.

gap> C := RepetitionCode( 3, GF(2) );
a cyclic [3,1,3]1 repetition code over GF(2)
gap> OD := OuterDistribution(C);
[ [ [ 0 0 0 ], [ 1, 0, 0, 1 ] ], [ [ 1 1 1 ], [ 1, 0, 0, 1 ] ],
  [ [ 0 0 1 ], [ 0, 1, 1, 0 ] ], [ [ 1 1 0 ], [ 0, 1, 1, 0 ] ],
  [ [ 1 0 0 ], [ 0, 1, 1, 0 ] ], [ [ 0 1 1 ], [ 0, 1, 1, 0 ] ],
  [ [ 0 1 0 ], [ 0, 1, 1, 0 ] ], [ [ 1 0 1 ], [ 0, 1, 1, 0 ] ] ]
gap> WeightDistribution(C) = OD[1][2];
true
gap> DistancesDistribution( C, Codeword("110") ) = OD[4][2];
true 

4.10 Decoding Functions

4.10-1 Decode
> Decode( C, r )( function )

Decode decodes r (a 'received word') with respect to code C and returns the `message word' (i.e., the information digits associated to the codeword c in C closest to r). Here r can be a GUAVA codeword or a list of codewords. First, possible errors in r are corrected, then the codeword is decoded to an information codeword m (and not an element of C). If the code record has a field `specialDecoder', this special algorithm is used to decode the vector. Hamming codes, BCH codes, cyclic codes, and generalized Reed-Solomon have such a special algorithm. (The algorithm used for BCH codes is the Sugiyama algorithm described, for example, in section 5.4.3 of [HP03]. A special decoder has also being written for the generalized Reed-Solomon code using the interpolation algorithm. For cyclic codes, the error-trapping algorithm is used.) If C is linear and no special decoder field has been set then syndrome decoding is used. Otherwise (when C is non-linear), the nearest neighbor decoding algorithm is used (which is very slow).

A special decoder can be created by defining a function


C!.SpecialDecoder := function(C, r) ... end;

The function uses the arguments C (the code record itself) and r (a vector of the codeword type) to decode r to an information vector. A normal decoder would take a codeword r of the same word length and field as C, and would return an information vector of length k, the dimension of C. The user is not restricted to these normal demands though, and can for instance define a decoder for non-linear codes.

Encoding is done by multiplying the information vector with the code (see 4.2).

gap> C := HammingCode(3);
a linear [7,4,3]1 Hamming (3,2) code over GF(2)
gap> c := "1010"*C;                    # encoding
[ 1 0 1 1 0 1 0 ]
gap> Decode(C, c);                     # decoding
[ 1 0 1 0 ]
gap> Decode(C, Codeword("0010101"));
[ 1 1 0 1 ]                            # one error corrected
gap> C!.SpecialDecoder := function(C, c)
> return NullWord(Dimension(C));
> end;
function ( C, c ) ... end
gap> Decode(C, c);
[ 0 0 0 0 ]           # new decoder always returns null word 

4.10-2 Decodeword
> Decodeword( C, r )( function )

Decodeword decodes r (a 'received word') with respect to code C and returns the codeword c in C closest to r. Here r can be a GUAVA codeword or a list of codewords. If the code record has a field `specialDecoder', this special algorithm is used to decode the vector. Hamming codes, generalized Reed-Solomon codes, and BCH codes have such a special algorithm. (The algorithm used for BCH codes is the Sugiyama algorithm described, for example, in section 5.4.3 of [HP03]. The algorithm used for generalized Reed-Solomon codes is the ``interpolation algorithm'' described for example in chapter 5 of [JH04].) If C is linear and no special decoder field has been set then syndrome decoding is used. Otherwise, when C is non-linear, the nearest neighbor algorithm has been implemented (which should only be used for small-sized codes).

gap> C := HammingCode(3);
a linear [7,4,3]1 Hamming (3,2) code over GF(2)
gap> c := "1010"*C;                    # encoding
[ 1 0 1 1 0 1 0 ]
gap> Decodeword(C, c);                     # decoding
[ 1 0 1 1 0 1 0 ]
gap>
gap> R:=PolynomialRing(GF(11),["t"]);
GF(11)[t]
gap> P:=List([1,3,4,5,7],i->Z(11)^i);
[ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ]
gap> C:=GeneralizedReedSolomonCode(P,3,R);
a linear [5,3,1..3]2  generalized Reed-Solomon code over GF(11)
gap> MinimumDistance(C);
3
gap> c:=Random(C);
[ 0 9 6 2 1 ]
gap> v:=Codeword("09620");
[ 0 9 6 2 0 ]
gap> GeneralizedReedSolomonDecoderGao(C,v);
[ 0 9 6 2 1 ]
gap> Decodeword(C,v); # calls the special interpolation decoder
[ 0 9 6 2 1 ]
gap> G:=GeneratorMat(C);
[ [ Z(11)^0, 0*Z(11), 0*Z(11), Z(11)^8, Z(11)^9 ],
  [ 0*Z(11), Z(11)^0, 0*Z(11), Z(11)^0, Z(11)^8 ],
  [ 0*Z(11), 0*Z(11), Z(11)^0, Z(11)^3, Z(11)^8 ] ]
gap> C1:=GeneratorMatCode(G,GF(11));
a linear [5,3,1..3]2 code defined by generator matrix over GF(11)
gap> Decodeword(C,v); # calls syndrome decoding
[ 0 9 6 2 1 ]

4.10-3 GeneralizedReedSolomonDecoderGao
> GeneralizedReedSolomonDecoderGao( C, r )( function )

GeneralizedReedSolomonDecoderGao decodes r (a 'received word') to a codeword c in C in a generalized Reed-Solomon code C (see GeneralizedReedSolomonCode (5.6-2)), closest to r. Here r must be a GUAVA codeword. If the code record does not have name `generalized Reed-Solomon code' then an error is returned. Otherwise, the Gao decoder [Gao03] is used to compute c.

For long codes, this method is faster in practice than the interpolation method used in Decodeword.

gap> R:=PolynomialRing(GF(11),["t"]);
GF(11)[t]
gap> P:=List([1,3,4,5,7],i->Z(11)^i);
[ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ]
gap> C:=GeneralizedReedSolomonCode(P,3,R);
a linear [5,3,1..3]2  generalized Reed-Solomon code over GF(11)
gap> MinimumDistance(C);
3
gap> c:=Random(C);
[ 0 9 6 2 1 ]
gap> v:=Codeword("09620");
[ 0 9 6 2 0 ]
gap> GeneralizedReedSolomonDecoderGao(C,v); 
[ 0 9 6 2 1 ]

4.10-4 GeneralizedReedSolomonListDecoder
> GeneralizedReedSolomonListDecoder( C, r, tau )( function )

GeneralizedReedSolomonListDecoder implements Sudans list-decoding algorithm (see section 12.1 of [JH04]) for ``low rate'' Reed-Solomon codes. It returns the list of all codewords in C which are a distance of at most tau from r (a 'received word'). C must be a generalized Reed-Solomon code C (see GeneralizedReedSolomonCode (5.6-2)) and r must be a GUAVA codeword.

gap> F:=GF(16);
GF(2^4)
gap>
gap> a:=PrimitiveRoot(F);; b:=a^7;; b^4+b^3+1; 
0*Z(2)
gap> Pts:=List([0..14],i->b^i);
[ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12, Z(2^4)^4,
  Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4), Z(2^4)^8 ]
gap> x:=X(F);;
gap> R1:=PolynomialRing(F,[x]);;
gap> vars:=IndeterminatesOfPolynomialRing(R1);;
gap> y:=X(F,vars);;
gap> R2:=PolynomialRing(F,[x,y]);;
gap> C:=GeneralizedReedSolomonCode(Pts,3,R1); 
a linear [15,3,1..13]10..12  generalized Reed-Solomon code over GF(16)
gap> MinimumDistance(C); ## 6 error correcting
13
gap> z:=Zero(F);;
gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];; 
gap> r:=Codeword(r);
[ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
gap> cs:=GeneralizedReedSolomonListDecoder(C,r,2); time;
[ [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ],
  [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] ]
250
gap> c1:=cs[1]; c1 in C;
[ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
true
gap> c2:=cs[2]; c2 in C;
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
true
gap> WeightCodeword(c1-r);
7
gap> WeightCodeword(c2-r);
7

4.10-5 BitFlipDecoder
> BitFlipDecoder( C, r )( function )

The iterative decoding method BitFlipDecoder must only be applied to LDPC codes. For more information on LDPC codes, refer to Section 5.8. For these codes, BitFlipDecoder decodes very quickly. (Warning: it can give wildly wrong results for arbitrary binary linear codes.) The bit flipping algorithm is described for example in Chapter 13 of [JH04].

gap> C:=HammingCode(4,GF(2));
a linear [15,11,3]1 Hamming (4,2) code over GF(2)
gap> c:=Random(C);
[ 0 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ]
gap> v:=List(c);
[ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2),
  Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ]
gap> v[1]:=Z(2)+v[1]; # flip 1st bit of c to create an error
Z(2)^0
gap> v:=Codeword(v);
[ 1 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ]
gap> BitFlipDecoder(C,v);
[ 0 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ]


4.10-6 NearestNeighborGRSDecodewords
> NearestNeighborGRSDecodewords( C, v, dist )( function )

NearestNeighborGRSDecodewords finds all generalized Reed-Solomon codewords within distance dist from v and the associated polynomial, using ``brute force''. Input: v is a received vector (a GUAVA codeword), C is a GRS code, dist > 0 is the distance from v to search in C. Output: a list of pairs [c,f(x)], where wt(c-v)<= dist-1 and c = (f(x_1),...,f(x_n)).

gap> F:=GF(16);
GF(2^4)
gap> a:=PrimitiveRoot(F);; b:=a^7; b^4+b^3+1;
Z(2^4)^7
0*Z(2)
gap> Pts:=List([0..14],i->b^i);
[ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12,
  Z(2^4)^4, Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4),
  Z(2^4)^8 ]
gap> x:=X(F);;
gap> R1:=PolynomialRing(F,[x]);;
gap> vars:=IndeterminatesOfPolynomialRing(R1);;
gap> y:=X(F,vars);;
gap> R2:=PolynomialRing(F,[x,y]);;
gap> C:=GeneralizedReedSolomonCode(Pts,3,R1);
a linear [15,3,1..13]10..12  generalized Reed-Solomon code over GF(16)
gap> MinimumDistance(C); # 6 error correcting
13
gap> z:=Zero(F);
0*Z(2)
gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];; # 7 errors
gap> r:=Codeword(r);
[ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
gap> cs:=NearestNeighborGRSDecodewords(C,r,7);
[ [ [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ], 0*Z(2) ],
  [ [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ], x_1+Z(2)^0 ] ]

4.10-7 NearestNeighborDecodewords
> NearestNeighborDecodewords( C, v, dist )( function )

NearestNeighborDecodewords finds all codewords in a linear code C within distance dist from v, using ``brute force''. Input: v is a received vector (a GUAVA codeword), C is a linear code, dist > 0 is the distance from v to search in C. Output: a list of c in C, where wt(c-v)<= dist-1.

gap> F:=GF(16);
GF(2^4)
gap> a:=PrimitiveRoot(F);; b:=a^7; b^4+b^3+1;
Z(2^4)^7
0*Z(2)
gap> Pts:=List([0..14],i->b^i);
[ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12,
  Z(2^4)^4, Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4),
  Z(2^4)^8 ]
gap> x:=X(F);;
gap> R1:=PolynomialRing(F,[x]);;
gap> vars:=IndeterminatesOfPolynomialRing(R1);;
gap> y:=X(F,vars);;
gap> R2:=PolynomialRing(F,[x,y]);;
gap> C:=GeneralizedReedSolomonCode(Pts,3,R1);
a linear [15,3,1..13]10..12  generalized Reed-Solomon code over GF(16)
gap> MinimumDistance(C);
13
gap> z:=Zero(F);
0*Z(2)
gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];;
gap> r:=Codeword(r);
[ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ]
gap> cs:=NearestNeighborDecodewords(C,r,7);
[ [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ], 
  [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ] ]

4.10-8 Syndrome
> Syndrome( C, v )( function )

Syndrome returns the syndrome of word v with respect to a linear code C. v is a codeword in the ambient vector space of C. If v is an element of C, the syndrome is a zero vector. The syndrome can be used for looking up an error vector in the syndrome table (see SyndromeTable (4.10-9)) that is needed to correct an error in v.

A syndrome is not defined for non-linear codes. Syndrome then returns an error.

gap> C := HammingCode(4);
a linear [15,11,3]1 Hamming (4,2) code over GF(2)
gap> v := CodewordNr( C, 7 );
[ 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 ]
gap> Syndrome( C, v );
[ 0 0 0 0 ]
gap> Syndrome( C, Codeword( "000000001100111" ) );
[ 1 1 1 1 ]
gap> Syndrome( C, Codeword( "000000000000001" ) );
[ 1 1 1 1 ]    # the same syndrome: both codewords are in the same
               # coset of C 

4.10-9 SyndromeTable
> SyndromeTable( C )( function )

SyndromeTable returns a syndrome table of a linear code C, consisting of two columns. The first column consists of the error vectors that correspond to the syndrome vectors in the second column. These vectors both are of the codeword type. After calculating the syndrome of a word v with Syndrome (see Syndrome (4.10-8)), the error vector needed to correct v can be found in the syndrome table. Subtracting this vector from v yields an element of C. To make the search for the syndrome as fast as possible, the syndrome table is sorted according to the syndrome vectors.

gap> H := HammingCode(2);
a linear [3,1,3]1 Hamming (2,2) code over GF(2)
gap> SyndromeTable(H);
[ [ [ 0 0 0 ], [ 0 0 ] ], [ [ 1 0 0 ], [ 0 1 ] ],
  [ [ 0 1 0 ], [ 1 0 ] ], [ [ 0 0 1 ], [ 1 1 ] ] ]
gap> c := Codeword("101");
[ 1 0 1 ]
gap> c in H;
false          # c is not an element of H
gap> Syndrome(H,c);
[ 1 0 ]        # according to the syndrome table,
               # the error vector [ 0 1 0 ] belongs to this syndrome
gap> c - Codeword("010") in H;
true           # so the corrected codeword is
               # [ 1 0 1 ] - [ 0 1 0 ] = [ 1 1 1 ],
               # this is an element of H 

4.10-10 StandardArray
> StandardArray( C )( function )

StandardArray returns the standard array of a code C. This is a matrix with elements of the codeword type. It has q^r rows and q^k columns, where q is the size of the base field of C, r=n-k is the redundancy of C, and k is the dimension of C. The first row contains all the elements of C. Each other row contains words that do not belong to the code, with in the first column their syndrome vector (see Syndrome (4.10-8)).

A non-linear code does not have a standard array. StandardArray then returns an error.

Note that calculating a standard array can be very time- and memory- consuming.

gap> StandardArray(RepetitionCode(3)); 
[ [ [ 0 0 0 ], [ 1 1 1 ] ], [ [ 0 0 1 ], [ 1 1 0 ] ], 
  [ [ 0 1 0 ], [ 1 0 1 ] ], [ [ 1 0 0 ], [ 0 1 1 ] ] ]

4.10-11 PermutationDecode
> PermutationDecode( C, v )( function )

PermutationDecode performs permutation decoding when possible and returns original vector and prints 'fail' when not possible.

This uses AutomorphismGroup in the binary case, and (the slower) PermutationAutomorphismGroup otherwise, to compute the permutation automorphism group P of C. The algorithm runs through the elements p of P checking if the weight of H(p* v) is less than (d-1)/2. If it is then the vector p* v is used to decode v: assuming C is in standard form then c=p^-1Em is the decoded word, where m is the information digits part of p* v. If no such p exists then ``fail'' is returned. See, for example, section 10.2 of Huffman and Pless [HP03] for more details.

gap> C0:=HammingCode(3,GF(2));
a linear [7,4,3]1 Hamming (3,2) code over GF(2)
gap> G0:=GeneratorMat(C0);;
gap> G := List(G0, ShallowCopy);;
gap> PutStandardForm(G);
()
gap> Display(G);
 1 . . . . 1 1
 . 1 . . 1 . 1
 . . 1 . 1 1 .
 . . . 1 1 1 1
gap> H0:=CheckMat(C0);;
gap> Display(H0);
 . . . 1 1 1 1
 . 1 1 . . 1 1
 1 . 1 . 1 . 1
gap> c0:=Random(C0);
[ 0 0 0 1 1 1 1 ]
gap> v01:=c0[1]+Z(2)^2;;
gap> v1:=List(c0, ShallowCopy);;
gap> v1[1]:=v01;;
gap> v1:=Codeword(v1);
[ 1 0 0 1 1 1 1 ]
gap> c1:=PermutationDecode(C0,v1);
[ 0 0 0 1 1 1 1 ]
gap> c1=c0;
true

4.10-12 PermutationDecodeNC
> PermutationDecodeNC( C, v, P )( function )

Same as PermutationDecode except that one may enter the permutation automorphism group P in as an argument, saving time. Here P is a subgroup of the symmetric group on n letters, where n is the word length of C.

Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

generated by GAPDoc2HTML

guava-3.6/doc/manual.ind0000644017361200001450000001625011026723452015066 0ustar tabbottcrontab\letter A Acknowledgements, \indexit{3} `AddedElementsCode', 44 `AlternantCode', 31 `AmalgamatedDirectSumCode', 68 `AreMOLS', 59 Arithmetic Operations for Codewords, \indexit{7} `AsSSortedList', 18 `AugmentedCode', 43 \sub without a list of codewords, 43 `AutomorphismGroup', 16 \letter B `BCHCode', 37 `BestKnownLinearCode', 33 \sub of a record, 34 `BinaryGolayCode', 34 `BlockwiseDirectSumCode', 68 Boolean Functions for Codes, \indexit{14} Bose distance, 37 Bounds, Sphere packing bound, 51 \sub Upper Bound, 53 bounds, Elias, 52 \sub Griesmer, 53 \sub Hamming, 51 \sub Johnson, 52 \sub Plotkin, 52 \sub Singleton, 51 Bounds on codes, \indexit{51} `BoundsCoveringRadius', 63 `BoundsMinimumDistance', 54 \letter C check polynomial, 35 `CheckMat', 20 `CheckMatCode', 31 `CheckPol', 20 `CheckPolCode', 36 code, 11 \sub cosets, 7 \sub cyclic, 11 \sub element test, 13 \sub evaluation, 13 \sub linear, 11 \sub subcode, 14 \sub unrestricted, 11 `CodeDensity', 73 `CodeDistanceEnumerator', 72 `CodeIsomorphism', 16 `CodeMacWilliamsTransform', 72 `CodeNorm', 70 codes, adition, 13 \sub coset, 13 \sub equality, 12 \sub inequality, 12 \sub product, 13 `CodeWeightEnumerator', 71 `Codeword', 5, 6 codeword, 5 `CodewordNr', 18 codewords, addition, 7 \sub equality, 7 \sub inequality, 7 \sub subtraction, 7 Comparisons of Codes, \indexit{12} Comparisons of Codewords, \indexit{7} `ConferenceCode', from a matrix, 28 \sub from an integer, 28 `ConstantWeightSubcode', 47 \sub for all minimum weight codewords, 47 Construction of Codewords, \indexit{5} `ConstructionBCode', 46 `ConversionFieldCode', 46 `CoordinateNorm', 70 `CordaroWagnerCode', 33 `CosetCode', 47 `CoveringRadius', 62 cyclic code, 11 `CyclicCodes', 39 `CyclotomicCosets', 60 \letter D `DavydovCode', 69 `Decode', 24 Decoding Functions, \indexit{24} `DecreaseMinimumDistanceLowerBound', 71 `Dimension', 18 `DirectProductCode', 49 `DirectSumCode', 48 `Display', 19 `DistanceCodeword', 9 `DistancesDistribution', 23 Distributions, \indexit{22} Domain Functions for Codes, \indexit{17} `DualCode', 46 \letter E `ElementsCode', 27 `EnlargedGabidulinCode', 69 `EnlargedTombakCode', 70 Equivalence and Isomorphism of Codes, \indexit{16} `EvenWeightSubcode', 42 `ExhaustiveSearchCoveringRadius', 64 `ExpurgatedCode', 43 `ExtendedBinaryGolayCode', 34 `ExtendedCode', 41 `ExtendedDirectSumCode', 67 `ExtendedTernaryGolayCode', 35 external distance, 66 \letter F `FireCode', 38 Functions that Change the Display Form of a Codeword, \indexit{8} Functions that Convert Codewords to Vectors or Polynomials, \indexit{8} Functions that Generate a New Code from a Given Code, \indexit{41} Functions that Generate a New Code from Two Given Codes, \indexit{48} \letter G Gabidulin codes, \indexit{69} `GabidulinCode', 69 `GeneralizedCodeNorm', 71 `GeneralizedSrivastavaCode', 32 `GeneralLowerBoundCoveringRadius', 64 `GeneralUpperBoundCoveringRadius', 64 Generating (Check) Matrices and Polynomials, \indexit{19} Generating Cyclic Codes, \indexit{35} Generating Linear Codes, \indexit{30} Generating Unrestricted Codes, \indexit{27} `GeneratorMat', 19 `GeneratorMatCode', 30 `GeneratorPol', 20 `GeneratorPolCode', 35 Golay Codes, \indexit{34} `GoppaCode', with integer parameter, 32 \sub with list of field elements parameter, 32 `GrayMat', 55 `GreedyCode', 29 guava, 3 \letter H `HadamardCode', 27, 28 `HadamardMat', 56 `HammingCode', 31 `HorizontalConversionFieldMat', 58 \letter I `IncreaseCoveringRadiusLowerBound', 64 `InnerDistribution', 23 Installing GUAVA, \indexit{3} `IntersectionCode', 49 `IsAffineCode', 72 `IsAlmostAffineCode', 73 `IsCode', 14 `IsCodeword', 6 `IsCoordinateAcceptable', 70 `IsCyclicCode', 14 `IsEquivalent', 16 `IsFinite', 17 `IsGriesmerCode', 73 `IsInStandardForm', 57 `IsLatinSquare', 59 `IsLinearCode', 14 `IsMDSCode', 15 `IsNormalCode', 71 `IsPerfectCode', 15 `IsSelfComplementaryCode', 72 `IsSelfDualCode', 15 `IsSelfOrthogonalCode', 16 \letter K `Krawtchouk', 60 `KrawtchoukMat', 55 \letter L `LeftActingDomain', 17 `LengthenedCode', 45 `LexiCode', 30 \sub using a basis, 30 linear code, 11 Loading GUAVA, \indexit{4} `LowerBoundCoveringRadiusCountingExcess', 65 `LowerBoundCoveringRadiusEmbedded1', 66 `LowerBoundCoveringRadiusEmbedded2', 66 `LowerBoundCoveringRadiusInduction', 66 `LowerBoundCoveringRadiusSphereCovering', 65 `LowerBoundCoveringRadiusVanWee1', 65 `LowerBoundCoveringRadiusVanWee2', 65 `LowerBoundMinimumDistance', 53 \sub of codes over a field, 53 \letter M maximum distance separable, 51 `MinimumDistance', 21, 22 `MinimumDistanceLeon', 22 Miscellaneous functions, \indexit{59} `MOLS', 56 `MOLSCode', 28 mutually orthogonal Latin squares, 56 \letter N New code constructions, \indexit{67} New miscellaneous functions, \indexit{71} `NordstromRobinsonCode', 29 `NrCyclicCodes', 39 `NullCode', 38 `NullWord', 9 \letter O Operations for Codes, \indexit{13} Other Codeword Functions, \indexit{9} `OuterDistribution', 23 \letter P Parameters of Codes, \indexit{21} Parity check, 41 `PermutationDecode', 25 `PermutationGroup', 17 `PermutedCode', 42 `PermutedCols', 58 `PiecewiseConstantCode', 69 `PolyCodeword', 8 `PrimitiveUnityRoot', 60 `Print', 18 Printing and Displaying Codes, \indexit{18} `PuncturedCode', 41 \sub with list of punctures, 41 `PutStandardForm', 57 \letter Q `QRCode', 37 \letter R `RandomCode', 29 `RandomLinearCode', 33 `ReciprocalPolynomial', 60 `Redundancy', 21 `ReedMullerCode', 31 `ReedSolomonCode', 37 `RemovedElementsCode', 44 `RepetitionCode', 38 `ResidueCode', 45 `RootsCode', 36 \sub with field, 36 `RootsOfCode', 21 \letter S `SetCoveringRadius', 63 `ShortenedCode', 44 \sub with list of columns, 45 `Size', 17 Some functions for the covering radius, \indexit{62} Some functions related to the norm of a code, \indexit{70} Special matrices in GUAVA, \indexit{55} `SphereContent', 59 `SrivastavaCode', 32 `StandardArray', 25 `StandardFormCode', 48 `String', 19 `Support', 9 `SylvesterMat', 55 `Syndrome', 24 `SyndromeTable', 25 \letter T `TernaryGolayCode', 35 `TombakCode', 69 Toric codes, \indexit{39} `ToricCode', 39 `ToricPoints', 39 `TreatAsPoly', 8 `TreatAsVector', 8 \letter U `UnionCode', 49 unrestricted code, 11 `UpperBound', 53 `UpperBoundCoveringRadiusCyclicCode', 67 `UpperBoundCoveringRadiusDelsarte', 66 `UpperBoundCoveringRadiusGriesmerLike', 67 `UpperBoundCoveringRadiusRedundancy', 66 `UpperBoundCoveringRadiusStrength', 67 `UpperBoundElias', 52 `UpperBoundGriesmer', 53 `UpperBoundHamming', 51 `UpperBoundJohnson', 52 `UpperBoundMinimumDistance', 54 \sub of codes over a field, 54 `UpperBoundPlotkin', 52 `UpperBoundSingleton', 51 `UUVCode', 48 \letter V `VectorCodeword', 8 `VerticalConversionFieldMat', 58 \letter W `WeightCodeword', 10 `WeightDistribution', 22 `WeightHistogram', 61 `WholeSpaceCode', 38 `WordLength', 21 guava-3.6/doc/guava.ind0000644017361200001450000004767311027015740014724 0ustar tabbottcrontab\begin{theindex} \item $A(n,d)$, \hyperpage{129} \item $GF(p)$, \hyperpage{17} \item $GF(q)$, \hyperpage{17} \item $t(n,k)$, \hyperpage{53} \item \texttt {*}, \hyperpage{31} \item \texttt {+}, \hyperpage{23}, \hyperpage{31} \item \texttt {-}, \hyperpage{23} \item \texttt {=}, \hyperpage{22}, \hyperpage{30} \item {\textless} {\textgreater}, \hyperpage{22}, \hyperpage{30} \indexspace \item acceptable coordinate, \hyperpage{147, 148} \item \texttt {AClosestVectorComb..MatFFEVecFFECoords}, \hyperpage{15} \item \texttt {AClosestVectorCombinationsMatFFEVecFFE}, \hyperpage{14} \item \texttt {ActionMoebiusTransformationOnDivisorP1 }, \hyperpage{100} \item \texttt {ActionMoebiusTransformationOnFunction }, \hyperpage{100} \item \texttt {AddedElementsCode}, \hyperpage{112} \item affine code, \hyperpage{37} \item \texttt {AffineCurve}, \hyperpage{92} \item \texttt {AffinePointsOnCurve}, \hyperpage{93} \item \texttt {AlternantCode}, \hyperpage{70} \item \texttt {AmalgamatedDirectSumCode}, \hyperpage{121} \item \texttt {AreMOLS}, \hyperpage{146} \item \texttt {AsSSortedList}, \hyperpage{41} \item \texttt {AugmentedCode}, \hyperpage{111} \item \texttt {AutomorphismGroup}, \hyperpage{39} \indexspace \item \texttt {BCHCode}, \hyperpage{81} \item \texttt {BestKnownLinearCode}, \hyperpage{74} \item \texttt {BinaryGolayCode}, \hyperpage{77} \item \texttt {BitFlipDecoder}, \hyperpage{59} \item \texttt {BlockwiseDirectSumCode}, \hyperpage{122} \item Bose distance, \hyperpage{81} \item bound, Gilbert-Varshamov lower, \hyperpage{130} \item bound, sphere packing lower, \hyperpage{130} \item bounds, Elias, \hyperpage{128} \item bounds, Griesmer, \hyperpage{128} \item bounds, Hamming, \hyperpage{127} \item bounds, Johnson, \hyperpage{127} \item bounds, Plotkin, \hyperpage{128} \item bounds, Singleton, \hyperpage{126} \item bounds, sphere packing bound, \hyperpage{127} \item \texttt {BoundsCoveringRadius}, \hyperpage{132} \item \texttt {BoundsMinimumDistance}, \hyperpage{131} \item \texttt {BZCode}, \hyperpage{124} \item \texttt {BZCodeNC}, \hyperpage{125} \indexspace \item check polynomial, \hyperpage{29}, \hyperpage{79} \item \texttt {CheckMat}, \hyperpage{44} \item \texttt {CheckMatCode}, \hyperpage{69} \item \texttt {CheckMatCodeMutable}, \hyperpage{69} \item \texttt {CheckPol}, \hyperpage{45} \item \texttt {CheckPolCode}, \hyperpage{80} \item \texttt {CirculantMatrix}, \hyperpage{154} \item code, \hyperpage{28} \item code, $(n,M,d)$, \hyperpage{28} \item code, $[n, k, d]r$, \hyperpage{29} \item code, AG, \hyperpage{92} \item code, alternant, \hyperpage{70} \item code, Bose-Chaudhuri-Hockenghem, \hyperpage{81} \item code, conference, \hyperpage{65} \item code, Cordaro-Wagner, \hyperpage{72} \item code, cyclic, \hyperpage{29} \item code, Davydov, \hyperpage{76} \item code, doubly-even, \hyperpage{36} \item code, element test, \hyperpage{32} \item code, elements of, \hyperpage{28} \item code, evaluation, \hyperpage{89} \item code, even, \hyperpage{36} \item code, Fire, \hyperpage{84} \item code, Gabidulin, \hyperpage{76} \item code, Golay (binary), \hyperpage{77} \item code, Golay (ternary), \hyperpage{78} \item code, Goppa (classical), \hyperpage{70} \item code, greedy, \hyperpage{67} \item code, Hadamard, \hyperpage{65} \item code, Hamming, \hyperpage{69} \item code, linear, \hyperpage{28} \item code, maximum distance separable, \hyperpage{35} \item code, Nordstrom-Robinson, \hyperpage{67} \item code, perfect, \hyperpage{34} \item code, Reed-Muller, \hyperpage{70} \item code, Reed-Solomon, \hyperpage{81} \item code, self-dual, \hyperpage{35} \item code, self-orthogonal, \hyperpage{35} \item code, singly-even, \hyperpage{36} \item code, Srivastava, \hyperpage{71} \item code, subcode, \hyperpage{33} \item code, Tombak, \hyperpage{76} \item code, toric, \hyperpage{91} \item code, unrestricted, \hyperpage{28} \item \texttt {CodeDensity}, \hyperpage{149} \item \texttt {CodeDistanceEnumerator}, \hyperpage{149} \item \texttt {CodeIsomorphism}, \hyperpage{38} \item \texttt {CodeMacWilliamsTransform}, \hyperpage{149} \item \texttt {CodeNorm}, \hyperpage{147} \item codes, addition, \hyperpage{31} \item codes, decoding, \hyperpage{32} \item codes, direct sum, \hyperpage{31} \item codes, encoding, \hyperpage{31} \item codes, product, \hyperpage{31} \item \texttt {CodeWeightEnumerator}, \hyperpage{148} \item \texttt {Codeword}, \hyperpage{20} \item \texttt {CodewordNr}, \hyperpage{21} \item codewords, addition, \hyperpage{23} \item codewords, cosets, \hyperpage{23} \item codewords, subtraction, \hyperpage{23} \item \texttt {CoefficientMultivariatePolynomial}, \hyperpage{155} \item \texttt {CoefficientToPolynomial}, \hyperpage{157} \item conference matrix, \hyperpage{66} \item \texttt {ConferenceCode}, \hyperpage{65} \item \texttt {ConstantWeightSubcode}, \hyperpage{117} \item \texttt {ConstructionBCode}, \hyperpage{114} \item \texttt {ConstructionXCode}, \hyperpage{122} \item \texttt {ConstructionXXCode}, \hyperpage{123} \item \texttt {ConversionFieldCode}, \hyperpage{116} \item \texttt {ConwayPolynomial}, \hyperpage{17} \item \texttt {CoordinateNorm}, \hyperpage{147} \item \texttt {CordaroWagnerCode}, \hyperpage{72} \item coset, \hyperpage{23} \item \texttt {CosetCode}, \hyperpage{116} \item covering code, \hyperpage{53} \item \texttt {CoveringRadius}, \hyperpage{53} \item cyclic, \hyperpage{87} \item \texttt {CyclicCodes}, \hyperpage{85} \item \texttt {CyclicMDSCode}, \hyperpage{87} \item \texttt {CyclotomicCosets}, \hyperpage{152} \indexspace \item \texttt {DavydovCode}, \hyperpage{76} \item \texttt {Decode}, \hyperpage{56} \item \texttt {Decodeword}, \hyperpage{57} \item \texttt {DecreaseMinimumDistanceUpperBound}, \hyperpage{51} \item defining polynomial, \hyperpage{17} \item degree, \hyperpage{95} \item \texttt {DegreeMultivariatePolynomial}, \hyperpage{154} \item \texttt {DegreesMonomialTerm}, \hyperpage{157} \item \texttt {DegreesMultivariatePolynomial}, \hyperpage{155} \item density of a code, \hyperpage{149} \item \texttt {Dimension}, \hyperpage{41} \item \texttt {DirectProductCode}, \hyperpage{119} \item \texttt {DirectSumCode}, \hyperpage{119} \item \texttt {Display}, \hyperpage{43} \item \texttt {DisplayBoundsInfo}, \hyperpage{43} \item distance, \hyperpage{55} \item \texttt {DistanceCodeword}, \hyperpage{26} \item \texttt {DistancesDistribution}, \hyperpage{55} \item \texttt {DistancesDistributionMatFFEVecFFE}, \hyperpage{15} \item \texttt {DistancesDistributionVecFFEsVecFFE}, \hyperpage{16} \item \texttt {DistanceVecFFE}, \hyperpage{16} \item divisor, \hyperpage{94} \item \texttt {DivisorAddition }, \hyperpage{95} \item \texttt {DivisorAutomorphismGroupP1 }, \hyperpage{101} \item \texttt {DivisorDegree }, \hyperpage{95} \item \texttt {DivisorGCD }, \hyperpage{96} \item \texttt {DivisorIsZero }, \hyperpage{96} \item \texttt {DivisorLCM }, \hyperpage{96} \item \texttt {DivisorNegate }, \hyperpage{96} \item \texttt {DivisorOfRationalFunctionP1 }, \hyperpage{98} \item \texttt {DivisorOnAffineCurve}, \hyperpage{95} \item \texttt {DivisorsEqual }, \hyperpage{96} \item \texttt {DivisorsMultivariatePolynomial}, \hyperpage{158} \item doubly-even, \hyperpage{35} \item \texttt {DualCode}, \hyperpage{115} \indexspace \item \texttt {ElementsCode}, \hyperpage{64} \item encoder map, \hyperpage{31} \item \texttt {EnlargedGabidulinCode}, \hyperpage{76} \item \texttt {EnlargedTombakCode}, \hyperpage{76} \item equivalent codes, \hyperpage{38} \item \texttt {EvaluationBivariateCode}, \hyperpage{103} \item \texttt {EvaluationBivariateCodeNC}, \hyperpage{103} \item \texttt {EvaluationCode}, \hyperpage{89} \item even, \hyperpage{36} \item \texttt {EvenWeightSubcode}, \hyperpage{109} \item \texttt {ExhaustiveSearchCoveringRadius}, \hyperpage{133} \item \texttt {ExpurgatedCode}, \hyperpage{110} \item \texttt {ExtendedBinaryGolayCode}, \hyperpage{77} \item \texttt {ExtendedCode}, \hyperpage{108} \item \texttt {ExtendedDirectSumCode}, \hyperpage{121} \item \texttt {ExtendedReedSolomonCode}, \hyperpage{82} \item \texttt {ExtendedTernaryGolayCode}, \hyperpage{78} \item external distance, \hyperpage{139} \indexspace \item \texttt {FerreroDesignCode}, \hyperpage{72} \item \texttt {FireCode}, \hyperpage{84} \item \texttt {FourNegacirculantSelfDualCode}, \hyperpage{88} \item \texttt {FourNegacirculantSelfDualCodeNC}, \hyperpage{89} \indexspace \item \texttt {GabidulinCode}, \hyperpage{76} \item Gary code, \hyperpage{141} \item \texttt {GeneralizedCodeNorm}, \hyperpage{148} \item \texttt {GeneralizedReedMullerCode}, \hyperpage{90} \item \texttt {GeneralizedReedSolomonCode}, \hyperpage{89} \item \texttt {GeneralizedReedSolomonDecoderGao}, \hyperpage{58} \item \texttt {GeneralizedReedSolomonListDecoder}, \hyperpage{58} \item \texttt {GeneralizedSrivastavaCode}, \hyperpage{71} \item \texttt {GeneralLowerBoundCoveringRadius}, \hyperpage{134} \item \texttt {GeneralUpperBoundCoveringRadius}, \hyperpage{134} \item generator polynomial, \hyperpage{29}, \hyperpage{79} \item \texttt {GeneratorMat}, \hyperpage{44} \item \texttt {GeneratorMatCode}, \hyperpage{68} \item \texttt {GeneratorPol}, \hyperpage{45} \item \texttt {GeneratorPolCode}, \hyperpage{79} \item \texttt {GenusCurve}, \hyperpage{93} \item \texttt {GoppaCode}, \hyperpage{71} \item \texttt {GoppaCodeClassical}, \hyperpage{103} \item \texttt {GOrbitPoint }, \hyperpage{93} \item \texttt {GrayMat}, \hyperpage{141} \item greatest common divisor, \hyperpage{96} \item \texttt {GreedyCode}, \hyperpage{67} \item Griesmer code, \hyperpage{129} \item \texttt {GuavaVersion}, \hyperpage{156} \indexspace \item Hadamard matrix, \hyperpage{65}, \hyperpage{142} \item \texttt {HadamardCode}, \hyperpage{65} \item \texttt {HadamardMat}, \hyperpage{142} \item Hamming metric, \hyperpage{16} \item \texttt {HammingCode}, \hyperpage{70} \item \texttt {HorizontalConversionFieldMat}, \hyperpage{145} \item hull, \hyperpage{120} \indexspace \item \texttt {in}, \hyperpage{32} \item \texttt {IncreaseCoveringRadiusLowerBound}, \hyperpage{132} \item information bits, \hyperpage{32} \item \texttt {InformationWord}, \hyperpage{32} \item \texttt {InnerDistribution}, \hyperpage{55} \item \texttt {IntersectionCode}, \hyperpage{120} \item \texttt {IrreduciblePolynomialsNr}, \hyperpage{151} \item \texttt {IsAction}\discretionary {-}{}{}\texttt {Moebius}\discretionary {-}{}{}\texttt {Transformation}\discretionary {-}{}{}\texttt {On}\discretionary {-}{}{}\texttt {Divisor}\discretionary {-}{}{}\texttt {DefinedP1 }, \hyperpage{100} \item \texttt {IsAffineCode}, \hyperpage{37} \item \texttt {IsAlmostAffineCode}, \hyperpage{38} \item IsCheapConwayPolynomial, \hyperpage{17} \item \texttt {IsCode}, \hyperpage{33} \item \texttt {IsCodeword}, \hyperpage{22} \item \texttt {IsCoordinateAcceptable}, \hyperpage{147} \item \texttt {IsCyclicCode}, \hyperpage{33} \item \texttt {IsDoublyEvenCode}, \hyperpage{35} \item \texttt {IsEquivalent}, \hyperpage{38} \item \texttt {IsEvenCode}, \hyperpage{36} \item \texttt {IsFinite}, \hyperpage{40} \item \texttt {IsGriesmerCode}, \hyperpage{129} \item \texttt {IsInStandardForm}, \hyperpage{144} \item \texttt {IsLatinSquare}, \hyperpage{146} \item \texttt {IsLinearCode}, \hyperpage{33} \item \texttt {IsMDSCode}, \hyperpage{34} \item \texttt {IsNormalCode}, \hyperpage{148} \item \texttt {IsPerfectCode}, \hyperpage{34} \item IsPrimitivePolynomial, \hyperpage{18} \item \texttt {IsSelfComplementaryCode}, \hyperpage{37} \item \texttt {IsSelfDualCode}, \hyperpage{35} \item \texttt {IsSelfOrthogonalCode}, \hyperpage{35} \item \texttt {IsSinglyEvenCode}, \hyperpage{36} \item \texttt {IsSubset}, \hyperpage{33} \indexspace \item \texttt {Krawtchouk}, \hyperpage{150} \item \texttt {KrawtchoukMat}, \hyperpage{141} \indexspace \item Latin square, \hyperpage{145} \item LDPC, \hyperpage{105} \item least common multiple, \hyperpage{96} \item \texttt {LeftActingDomain}, \hyperpage{41} \item length, \hyperpage{28} \item \texttt {LengthenedCode}, \hyperpage{113} \item \texttt {LexiCode}, \hyperpage{68} \item linear code, \hyperpage{19} \item \texttt {LowerBoundCoveringRadiusCountingExcess}, \hyperpage{136} \item \texttt {LowerBoundCoveringRadiusEmbedded1}, \hyperpage{137} \item \texttt {LowerBoundCoveringRadiusEmbedded2}, \hyperpage{137} \item \texttt {LowerBoundCoveringRadiusInduction}, \hyperpage{138} \item \texttt {LowerBoundCoveringRadiusSphereCovering}, \hyperpage{135} \item \texttt {LowerBoundCoveringRadiusVanWee1}, \hyperpage{135} \item \texttt {LowerBoundCoveringRadiusVanWee2}, \hyperpage{136} \item \texttt {LowerBoundGilbertVarshamov}, \hyperpage{130} \item \texttt {LowerBoundMinimumDistance}, \hyperpage{130} \item \texttt {LowerBoundSpherePacking}, \hyperpage{130} \indexspace \item MacWilliams transform, \hyperpage{149} \item \texttt {MatrixRepresentationOfElement}, \hyperpage{151} \item \texttt {Matrix}\discretionary {-}{}{}\texttt {Representation}\discretionary {-}{}{}\texttt {On}\discretionary {-}{}{}\texttt {Riemann}\discretionary {-}{}{}\texttt {Roch}\discretionary {-}{}{}\texttt {SpaceP1 }, \hyperpage{102} \item \texttt {Matrix}\discretionary {-}{}{}\texttt {Transformation}\discretionary {-}{}{}\texttt {On}\discretionary {-}{}{}\texttt {Multivariate}\discretionary {-}{}{}\texttt {Polynomial }, \hyperpage{154} \item maximum distance separable, \hyperpage{127} \item MDS, \hyperpage{35}, \hyperpage{87} \item minimum distance, \hyperpage{28} \item \texttt {MinimumDistance}, \hyperpage{46} \item \texttt {MinimumDistanceLeon}, \hyperpage{47} \item \texttt {MinimumDistanceRandom}, \hyperpage{51} \item \texttt {MinimumWeight}, \hyperpage{48} \item \texttt {MinimumWeightWords}, \hyperpage{54} \item \texttt {MoebiusTransformation }, \hyperpage{100} \item \texttt {MOLS}, \hyperpage{145} \item \texttt {MOLSCode}, \hyperpage{66} \item \texttt {MostCommonInList}, \hyperpage{153} \item \texttt {MultiplicityInList}, \hyperpage{153} \item mutually orthogonal Latin squares, \hyperpage{145} \indexspace \item \texttt {NearestNeighborDecodewords}, \hyperpage{60} \item \texttt {NearestNeighborGRSDecodewords}, \hyperpage{60} \item \texttt {NordstromRobinsonCode}, \hyperpage{67} \item norm of a code, \hyperpage{147} \item normal code, \hyperpage{148} \item not =, \hyperpage{22}, \hyperpage{30} \item \texttt {NrCyclicCodes}, \hyperpage{85} \item \texttt {NullCode}, \hyperpage{85} \item \texttt {NullWord}, \hyperpage{26} \indexspace \item \texttt {OnePointAGCode}, \hyperpage{104} \item \texttt {OptimalityCode}, \hyperpage{74} \item order of polynomial, \hyperpage{84} \item \texttt {OuterDistribution}, \hyperpage{56} \indexspace \item Parity check, \hyperpage{108} \item parity check matrix, \hyperpage{28} \item perfect, \hyperpage{127} \item perfect code, \hyperpage{150} \item permutation equivalent codes, \hyperpage{38} \item PermutationAutomorphismGroup, \hyperpage{39} \item \texttt {PermutationAutomorphismGroup}, \hyperpage{40} \item \texttt {PermutationDecode}, \hyperpage{62} \item \texttt {PermutationDecodeNC}, \hyperpage{63} \item \texttt {PermutedCode}, \hyperpage{110} \item \texttt {PermutedCols}, \hyperpage{144} \item \texttt {PiecewiseConstantCode}, \hyperpage{118} \item point, \hyperpage{92} \item \texttt {PolyCodeword}, \hyperpage{24} \item primitive element, \hyperpage{17} \item \texttt {PrimitivePolynomialsNr}, \hyperpage{151} \item \texttt {PrimitiveUnityRoot}, \hyperpage{150} \item \texttt {Print}, \hyperpage{42} \item \texttt {PuncturedCode}, \hyperpage{109} \item \texttt {PutStandardForm}, \hyperpage{143} \indexspace \item \texttt {QCLDPCCodeFromGroup}, \hyperpage{106} \item \texttt {QQRCode}, \hyperpage{83} \item \texttt {QQRCodeNC}, \hyperpage{83} \item \texttt {QRCode}, \hyperpage{82} \item \texttt {QuasiCyclicCode}, \hyperpage{86} \indexspace \item \texttt {RandomCode}, \hyperpage{67} \item \texttt {RandomLinearCode}, \hyperpage{73} \item \texttt {RandomPrimitivePolynomial}, \hyperpage{18} \item reciprocal polynomial, \hyperpage{152} \item \texttt {ReciprocalPolynomial}, \hyperpage{152} \item \texttt {Redundancy}, \hyperpage{46} \item \texttt {ReedMullerCode}, \hyperpage{70} \item \texttt {ReedSolomonCode}, \hyperpage{82} \item \texttt {RemovedElementsCode}, \hyperpage{111} \item \texttt {RepetitionCode}, \hyperpage{85} \item \texttt {ResidueCode}, \hyperpage{114} \item \texttt {RiemannRochSpaceBasisFunctionP1 }, \hyperpage{98} \item \texttt {RiemannRochSpaceBasisP1 }, \hyperpage{99} \item \texttt {RootsCode}, \hyperpage{80} \item \texttt {RootsOfCode}, \hyperpage{45} \item \texttt {RotateList}, \hyperpage{154} \indexspace \item self complementary code, \hyperpage{37} \item self-dual, \hyperpage{89}, \hyperpage{115} \item self-orthogonal, \hyperpage{35} \item \texttt {SetCoveringRadius}, \hyperpage{54} \item \texttt {ShortenedCode}, \hyperpage{112} \item singly-even, \hyperpage{36} \item \texttt {Size}, \hyperpage{40} \item size, \hyperpage{28} \item \texttt {SolveLinearSystem}, \hyperpage{156} \item \texttt {SphereContent}, \hyperpage{150} \item \texttt {SrivastavaCode}, \hyperpage{72} \item standard form, \hyperpage{143} \item \texttt {StandardArray}, \hyperpage{62} \item \texttt {StandardFormCode}, \hyperpage{117} \item strength, \hyperpage{139} \item \texttt {String}, \hyperpage{42} \item \texttt {SubCode}, \hyperpage{114} \item \texttt {Support}, \hyperpage{26} \item support, \hyperpage{94} \item \texttt {SylvesterMat}, \hyperpage{141} \item \texttt {Syndrome}, \hyperpage{61} \item syndrome table, \hyperpage{62} \item \texttt {SyndromeTable}, \hyperpage{62} \indexspace \item \texttt {TernaryGolayCode}, \hyperpage{78} \item \texttt {TombakCode}, \hyperpage{76} \item \texttt {ToricCode}, \hyperpage{91} \item \texttt {ToricPoints}, \hyperpage{91} \item \texttt {TraceCode}, \hyperpage{116} \item \texttt {TreatAsPoly}, \hyperpage{25} \item \texttt {TreatAsVector}, \hyperpage{25} \indexspace \item \texttt {UnionCode}, \hyperpage{120} \item \texttt {UpperBound}, \hyperpage{129} \item \texttt {UpperBoundCoveringRadiusCyclicCode}, \hyperpage{140} \item \texttt {UpperBoundCoveringRadiusDelsarte}, \hyperpage{139} \item \texttt {UpperBoundCoveringRadiusGriesmerLike}, \hyperpage{139} \item \texttt {UpperBoundCoveringRadiusRedundancy}, \hyperpage{138} \item \texttt {UpperBoundCoveringRadiusStrength}, \hyperpage{139} \item \texttt {UpperBoundElias}, \hyperpage{128} \item \texttt {UpperBoundGriesmer}, \hyperpage{129} \item \texttt {UpperBoundHamming}, \hyperpage{127} \item \texttt {UpperBoundJohnson}, \hyperpage{127} \item \texttt {UpperBoundMinimumDistance}, \hyperpage{131} \item \texttt {UpperBoundPlotkin}, \hyperpage{128} \item \texttt {UpperBoundSingleton}, \hyperpage{127} \item \texttt {UUVCode}, \hyperpage{119} \indexspace \item \texttt {VandermondeMat}, \hyperpage{142} \item \texttt {VectorCodeword}, \hyperpage{24} \item \texttt {VerticalConversionFieldMat}, \hyperpage{144} \indexspace \item weight enumerator polynomial, \hyperpage{148} \item \texttt {WeightCodeword}, \hyperpage{27} \item \texttt {WeightDistribution}, \hyperpage{54} \item \texttt {WeightHistogram}, \hyperpage{153} \item \texttt {WeightVecFFE}, \hyperpage{16} \item \texttt {WholeSpaceCode}, \hyperpage{84} \item \texttt {WordLength}, \hyperpage{46} \indexspace \item \texttt {ZechLog}, \hyperpage{156} \end{theindex} guava-3.6/doc/chap1.html0000644017361200001450000001645211027015742015000 0ustar tabbottcrontab GAP (guava) - Chapter 1: Introduction
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

1. Introduction

1.1 Introduction to the GUAVA package

This is the manual of the GAP package GUAVA that provides implementations of some routines designed for the construction and analysis of in the theory of error-correcting codes. This version of GUAVA requires GAP 4.4.5 or later.

The functions can be divided into three subcategories:

  • Construction of codes: GUAVA can construct unrestricted, linear and cyclic codes. Information about the code, such as operations applicable to the code, is stored in a record-like data structure called a GAP object.

  • Manipulations of codes: Manipulation transforms one code into another, or constructs a new code from two codes. The new code can profit from the data in the record of the old code(s), so in these cases calculation time decreases.

  • Computations of information about codes: GUAVA can calculate important parameters of codes quickly. The results are stored in the codes' object components.

Except for the automorphism group and isomorphism testing functions, which make use of J.S. Leon's programs (see [Leo91] and the documentation in the 'src/leon' subdirectory of the 'guava' directory for some details), and MinimumWeight (4.8-5) function, GUAVA is written in the GAP language, and runs on any system supporting GAP4.3 and above. Several algorithms that need the speed were integrated in the GAP kernel.

Good general references for error-correcting codes and the technical terms in this manual are MacWilliams and Sloane [MS83] Huffman and Pless [HP03].

1.2 Installing GUAVA

To install GUAVA (as a GAP 4 Package) unpack the archive file in a directory in the `pkg' hierarchy of your version of GAP 4.

After unpacking GUAVA the GAP-only part of GUAVA is installed. The parts of GUAVA depending on J. Leon's backtrack programs package (for computing automorphism groups) are only available in a UNIX environment, where you should proceed as follows: Go to the newly created `guava' directory and call `./configure /gappath' where /gappath is the path to the GAP home directory. So for example, if you install the package in the main `pkg' directory call


./configure ../..

This will fetch the architecture type for which GAP has been compiled last and create a `Makefile'. Now call


make

to compile the binary and to install it in the appropriate place. (For a windows machine with CYGWIN installed - see http://www.cygwin.com/ - instructions for compiling Leon's binaries are likely to be similar to those above. On a 64-bit SUSE linux computer, instead of the configure command above - which will only compile the 32-bit binary - type


./configure ../.. --enable-libsuffix=64 
make

to compile Leon's program as a 64 bit native binary. This may also work for other 64-bit linux distributions as well.)

Starting with version 2.5, you should also install the GAP package SONATA to load GAP. You can download this from the GAP website and unpack it in the `pkg' subdirectory.

This completes the installation of GUAVA for a single architecture. If you use this installation of GUAVA on different hardware platforms you will have to compile the binary for each platform separately.

1.3 Loading GUAVA

After starting up GAP, the GUAVA package needs to be loaded. Load GUAVA by typing at the GAP prompt:

gap> LoadPackage( "guava" );

If GUAVA isn't already in memory, it is loaded and the author information is displayed. If you are a frequent user of GUAVA, you might consider putting this line in your `.gaprc' file.

Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

generated by GAPDoc2HTML

guava-3.6/doc/chap1.txt0000644017361200001450000001021511027015733014642 0ustar tabbottcrontab 1. Introduction 1.1 Introduction to the GUAVA package This is the manual of the GAP package GUAVA that provides implementations of some routines designed for the construction and analysis of in the theory of error-correcting codes. This version of GUAVA requires GAP 4.4.5 or later. The functions can be divided into three subcategories: -- Construction of codes: GUAVA can construct unrestricted, linear and cyclic codes. Information about the code, such as operations applicable to the code, is stored in a record-like data structure called a GAP object. -- Manipulations of codes: Manipulation transforms one code into another, or constructs a new code from two codes. The new code can profit from the data in the record of the old code(s), so in these cases calculation time decreases. -- Computations of information about codes: GUAVA can calculate important parameters of codes quickly. The results are stored in the codes' object components. Except for the automorphism group and isomorphism testing functions, which make use of J.S. Leon's programs (see [Leo91] and the documentation in the 'src/leon' subdirectory of the 'guava' directory for some details), and MinimumWeight (4.8-5) function, GUAVA is written in the GAP language, and runs on any system supporting GAP4.3 and above. Several algorithms that need the speed were integrated in the GAP kernel. Good general references for error-correcting codes and the technical terms in this manual are MacWilliams and Sloane [MS83] Huffman and Pless [HP03]. 1.2 Installing GUAVA To install GUAVA (as a GAP 4 Package) unpack the archive file in a directory in the `pkg' hierarchy of your version of GAP 4. After unpacking GUAVA the GAP-only part of GUAVA is installed. The parts of GUAVA depending on J. Leon's backtrack programs package (for computing automorphism groups) are only available in a UNIX environment, where you should proceed as follows: Go to the newly created `guava' directory and call `./configure /gappath' where /gappath is the path to the GAP home directory. So for example, if you install the package in the main `pkg' directory call ./configure ../.. This will fetch the architecture type for which GAP has been compiled last and create a `Makefile'. Now call make to compile the binary and to install it in the appropriate place. (For a windows machine with CYGWIN installed - see http://www.cygwin.com/ - instructions for compiling Leon's binaries are likely to be similar to those above. On a 64-bit SUSE linux computer, instead of the configure command above - which will only compile the 32-bit binary - type ./configure ../.. --enable-libsuffix=64 make to compile Leon's program as a 64 bit native binary. This may also work for other 64-bit linux distributions as well.) Starting with version 2.5, you should also install the GAP package SONATA to load GAP. You can download this from the GAP website and unpack it in the `pkg' subdirectory. This completes the installation of GUAVA for a single architecture. If you use this installation of GUAVA on different hardware platforms you will have to compile the binary for each platform separately. 1.3 Loading GUAVA After starting up GAP, the GUAVA package needs to be loaded. Load GUAVA by typing at the GAP prompt: --------------------------- Example ---------------------------- gap> LoadPackage( "guava" ); ------------------------------------------------------------------ If GUAVA isn't already in memory, it is loaded and the author information is displayed. If you are a frequent user of GUAVA, you might consider putting this line in your `.gaprc' file. guava-3.6/doc/body.tmp0000644017361200001450000447033011026723452014603 0ustar tabbottcrontab%%Page: 1 1 TeXDict begin HPSdict begin 1 0 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 0 0 a SDict begin [ /Producer (dvips + Distiller) /Title (Written with GAPDoc) /Subject () /Creator (LaTeX with hyperref package) /Author () /Keywords () /DOCINFO pdfmark end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.1) cvn H.B /DEST pdfmark end 75 100 a Black Black 75 307 a SDict begin [ /Page 1 /View [ /Fit ] /PageMode /UseNone /DOCVIEW pdfmark end 75 307 a 75 307 a SDict begin [ {Catalog} << >> /PUT pdfmark end 75 307 a 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (Doc-Start) cvn H.B /DEST pdfmark end 75 307 a Black Black 1622 445 a FN(GU)-9 b(A)-15 b(V)g(A)393 794 y FM(A)30 b FL(GAP)p FM(4)f(P)o(ackage)h(f)m(or)f(computing)i(with)g(err)n(or)l (-corr)n(ecting)e(codes)1705 1143 y FK(V)-10 b(ersion)25 b(3.1)1596 1492 y(October)f(20,)g(2007)1485 2427 y FJ(J)o(asper)h (Cramwinck)o(el)1586 2540 y(Erik)h(Roijack)o(ers)1625 2653 y(Reinald)f(Baart)1390 2766 y(Eric)g(Mink)o(es,)h(Lea)f(Ruscio) 1585 2882 y(Robert)g(L)h(Miller)1638 2998 y(T)-9 b(om)25 b(Boothby)1554 3114 y(Cen)h(\(\223CJ\224\))e(Tjhai)1354 3230 y(Da)n(vid)g(J)o(oyner)h(\(Maintainer\))75 4155 y FI(Robert)20 b(L)h(Miller)75 4268 y FH(\227)g(Email:)p 0.6179 0.0236 0.0894 TeXcolorrgb 426 4269 a SDict begin H.S end 426 4269 a 0.6179 0.0236 0.0894 TeXcolorrgb -1 x FF(rlm@robertlmiller.co)q(m)p 0.6179 0.0236 0.0894 TeXcolorrgb 1309 4214 a SDict begin H.R end 1309 4214 a 1309 4268 a SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (mailto://rlm@robertlmiller.com) >> /Subtype /Link H.B /ANN pdfmark end 1309 4268 a Black 75 4494 a FI(Cen)g(\(\223CJ\224\))d (Tjhai)75 4607 y FH(\227)j(Email:)p 0.6179 0.0236 0.0894 TeXcolorrgb 426 4620 a SDict begin H.S end 426 4620 a 0.6179 0.0236 0.0894 TeXcolorrgb -13 x FF(cen.tjhai@plymouth.a)q(c.u)q(k)p 0.6179 0.0236 0.0894 TeXcolorrgb 1436 4553 a SDict begin H.R end 1436 4553 a 1436 4607 a SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (mailto://cen.tjhai@plymouth.ac.uk) >> /Subtype /Link H.B /ANN pdfmark end 1436 4607 a Black 75 4719 a FH(\227)g(Homepage:)p 0.6179 0.0236 0.0894 TeXcolorrgb 587 4732 a SDict begin H.S end 587 4732 a 0.6179 0.0236 0.0894 TeXcolorrgb -13 x FF(http://www.plymouth)q(.ac)q (.uk)q(/st)q(aff)q(/ct)q(jh)q(ai)p 0.6179 0.0236 0.0894 TeXcolorrgb 2190 4665 a SDict begin H.R end 2190 4665 a 2190 4719 a SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (http://www.plymouth.ac.uk/staff/ctjhai) >> /Subtype /Link H.B /ANN pdfmark end 2190 4719 a Black 75 4945 a FI(Da)n(vid)f(J)o(oyner)f(\(Maintainer\))75 5058 y FH(\227)i(Email:)p 0.6179 0.0236 0.0894 TeXcolorrgb 426 5071 a SDict begin H.S end 426 5071 a 0.6179 0.0236 0.0894 TeXcolorrgb 468 5058 a FF(wdjoyner@gmail.com)p 0.6179 0.0236 0.0894 TeXcolorrgb 1224 5004 a SDict begin H.R end 1224 5004 a 1224 5058 a SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (mailto://\040wdjoyner@gmail.com) >> /Subtype /Link H.B /ANN pdfmark end 1224 5058 a Black 75 5171 a FH(\227)g(Homepage:)p 0.6179 0.0236 0.0894 TeXcolorrgb 587 5184 a SDict begin H.S end 587 5184 a 0.6179 0.0236 0.0894 TeXcolorrgb -13 x FF(http://wdjoyner.goo)q(gle)q(pag)q(es.)q(com)q(/)p 0.6179 0.0236 0.0894 TeXcolorrgb 1936 5117 a SDict begin H.R end 1936 5117 a 1936 5171 a SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (http://wdjoyner.googlepages.com/) >> /Subtype /Link H.B /ANN pdfmark end 1936 5171 a Black 75 5284 a FH(\227)g(Address:)k (Mathematics)19 b(Department,)500 5384 y(U.)h(S.)h(Na)n(v)n(al)f (Academy)-5 b(,)500 5483 y(Annapolis,)18 b(MD,)500 5583 y(21402)g(USA.)p Black Black eop end end %%Page: 2 2 TeXDict begin HPSdict begin 2 1 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.2) cvn H.B /DEST pdfmark end 75 100 a Black 1708 w FE(GU)n(A)l(V)-5 b(A)1723 b FK(2)p Black 75 399 a FM(Copyright)75 509 y SDict begin H.S end 75 509 a 75 509 a SDict begin 12 H.A end 75 509 a 75 509 a SDict begin [ /View [/XYZ H.V] /Dest (section*.1) cvn H.B /DEST pdfmark end 75 509 a 98 581 a FH(c)75 584 y FD(\015)19 b FH(The)f(GU)m(A)-11 b(V)g(A)18 b(Group:)23 b(1992-2003)15 b(Jasper)j(Cramwinck)o(el,)g(Erik)g(Roijack) o(ers,Reinald)f(Baart,)i(Eric)f(Mink)o(es,)h(Lea)f(Rus-)75 684 y(cio)j(\(for)f(the)h(te)o(x)g(v)o(ersion\),)f(Jef)n(fre)o(y)f (Leon)1367 681 y(c)1344 684 y FD(\015)i FH(2004)f(Da)n(vid)h(Jo)o(yner) m(,)f(Cen)h(Tjhai,)g(Jasper)g(Cramwinck)o(el,)f(Erik)h(Roijack)o(ers,) 75 783 y(Reinald)f(Baart,)g(Eric)g(Mink)o(es,)g(Lea)g(Ruscio.)1470 780 y(c)1447 783 y FD(\015)g FH(2007)f(Robert)h(L)g(Miller)m(,)g(T)-7 b(om)20 b(Boothby)216 883 y FC(GU)m(A)-5 b(V)f(A)72 b FH(is)h(released)e(under)g(the)h(GNU)g(General)g(Public)f(License)h (\(GPL\).)g(This)g(\002le)g(is)h(part)f(of)75 983 y FC(GU)m(A)-5 b(V)f(A)p FH(,)54 b(though)f(as)j(documentation)51 b(it)56 b(is)g(released)e(under)f(the)i(GNU)g(Free)g(Documentation)d(License)i (\(see)p 0.6179 0.0236 0.0894 TeXcolorrgb 75 1095 a SDict begin H.S end 75 1095 a 0.6179 0.0236 0.0894 TeXcolorrgb -13 x FF(http://www.gnu.org/l)q (ic)q(ens)q(es/)q(lic)q(ens)q(es.)q(htm)q(l#F)q(DL)p 0.6179 0.0236 0.0894 TeXcolorrgb 1974 1028 a SDict begin H.R end 1974 1028 a 1974 1082 a SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (http://www.gnu.org/licenses/licenses.html#FDL) >> /Subtype /Link H.B /ANN pdfmark end 1974 1082 a Black FH(\).)216 1182 y FC(GU)m(A)-5 b(V)f(A)18 b FH(is)h(free)e(softw)o(are;)i(you)e(can)g(redistrib)n(ute) g(it)i(and/or)d(modify)h(it)h(under)f(the)h(terms)g(of)f(the)h(GNU)h (General)e(Public)75 1281 y(License)22 b(as)g(published)e(by)i(the)f (Free)h(Softw)o(are)f(F)o(oundation;)g(either)g(v)o(ersion)f(2)i(of)g (the)g(License,)f(or)h(\(at)g(your)e(option\))g(an)o(y)75 1381 y(later)g(v)o(ersion.)216 1481 y FC(GU)m(A)-5 b(V)f(A)24 b FH(is)g(distrib)n(uted)e(in)i(the)f(hope)g(that)g(it)h(will)h(be)e (useful,)g(b)n(ut)h(WITHOUT)f(ANY)h(W)-10 b(ARRANTY)i(;)25 b(without)e(e)n(v)o(en)75 1580 y(the)c(implied)f(w)o(arranty)g(of)g (MERCHANT)-8 b(ABILITY)19 b(or)g(FITNESS)g(FOR)h(A)f(P)-8 b(AR)j(TICULAR)20 b(PURPOSE.)g(See)f(the)g(GNU)75 1680 y(General)h(Public)f(License)h(for)g(more)f(details.)216 1780 y(Y)-9 b(ou)24 b(should)f(ha)n(v)o(e)h(recei)n(v)o(ed)f(a)i(cop)o (y)e(of)h(the)h(GNU)g(General)e(Public)i(License)f(along)f(with)i FC(GU)m(A)-5 b(V)f(A)p FH(;)24 b(if)h(not,)g(write)f(to)75 1879 y(the)c(Free)g(Softw)o(are)g(F)o(oundation,)e(Inc.,)h(59)h(T)-6 b(emple)19 b(Place,)i(Suite)f(330,)f(Boston,)h(MA)g(02111-1307)c(USA) 216 1979 y(F)o(or)k(more)f(details,)i(see)p 0.6179 0.0236 0.0894 TeXcolorrgb 927 1992 a SDict begin H.S end 927 1992 a 0.6179 0.0236 0.0894 TeXcolorrgb -13 x FF(http://www.fsf.org)q(/li)q(cen)q(ses)q(/gp)q(l.h)q (tml)p 0.6179 0.0236 0.0894 TeXcolorrgb 2446 1925 a SDict begin H.R end 2446 1925 a 2446 1979 a SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (http://www.fsf.org/licenses/gpl.html) >> /Subtype /Link H.B /ANN pdfmark end 2446 1979 a Black FH(.)216 2078 y(F)o(or)g(man)o(y)f (years)h FC(GU)m(A)-5 b(V)f(A)21 b FH(has)g(been)g(released)f(along)h (with)g(the)g(\223backtracking\224)d(C)k(programs)e(of)h(J.)g(Leon.)27 b(In)21 b(one)g(of)75 2178 y(his)27 b(*.c)f(\002les)i(the)e(follo)n (wing)f(statements)h(occur:)37 b(\223Cop)o(yright)25 b(\(C\))i(1992)e(by)h(Jef)n(fre)o(y)f(S.)i(Leon.)43 b(This)27 b(softw)o(are)f(may)g(be)75 2278 y(used)g(freely)f(for)g(educational)f (and)i(research)f(purposes.)41 b(An)o(y)25 b(other)g(use)i(requires)e (permission)g(from)f(the)i(author)-5 b(.)f(\224)42 b(The)75 2377 y(follo)n(wing)20 b(should)g(no)n(w)h(be)g(appended:)k(\223I,)c (Jef)n(fre)o(y)f(S.)i(Leon,)f(agree)f(to)i(license)f(all)h(the)g (partition)e(backtrack)f(code)i(which)75 2477 y(I)f(ha)n(v)o(e)g (written)g(under)f(the)h(GPL)h(\(www)-5 b(.fsf.or)o(g\))16 b(as)21 b(of)f(this)h(date,)f(April)g(17,)f(2007.)-6 b(\224)75 3093 y FM(Ackno)o(wledgements)75 3203 y SDict begin H.S end 75 3203 a 75 3203 a SDict begin 12 H.A end 75 3203 a 75 3203 a SDict begin [ /View [/XYZ H.V] /Dest (section*.2) cvn H.B /DEST pdfmark end 75 3203 a 76 x FC(GU)m(A)h(V)f(A) 23 b FH(w)o(as)g(originally)e(written)i(by)f(Jasper)h(Cramwinck)o(el,)f (Erik)g(Roijack)o(ers,)h(and)f(Reinald)g(Baart)h(in)g(the)g (early-to-mid)75 3378 y(1990')-5 b(s)22 b(as)h(a)h(\002nal)f(project)f (during)f(their)i(study)f(of)h(Mathematics)f(at)i(the)e(Delft)i(Uni)n (v)o(ersity)d(of)i(T)-6 b(echnology)h(,)20 b(Department)75 3478 y(of)k(Pure)g(Mathematics,)h(under)e(the)i(direction)e(of)h (Professor)g(Juriaan)g(Simonis.)38 b(This)24 b(w)o(ork)g(w)o(as)i (continued)c(in)j(Aachen,)75 3577 y(at)k(Lehrstuhl)e(D)i(fur)f (Mathematik.)49 b(In)28 b(v)o(ersion)g(1.3,)h(ne)n(w)g(functions)e (were)h(added)f(by)i(Eric)f(Mink)o(es,)i(also)f(from)e(Delft)75 3677 y(Uni)n(v)o(ersity)19 b(of)h(T)-6 b(echnology)h(.)216 3777 y(JC,)22 b(ER)g(and)f(RB)h(w)o(ould)e(lik)o(e)i(to)f(thank)f(the)h FC(GAP)h FH(people)e(at)i(the)f(R)-5 b(WTH)22 b(Aachen)f(for)f(their)h (support,)f(A.E.)h(Brouwer)75 3876 y(for)f(his)g(advice)g(and)f(J.)i (Simonis)f(for)g(his)g(supervision.)216 3976 y(The)39 b FC(GAP)h FH(4)f(v)o(ersion)f(of)h FC(GU)m(A)-5 b(V)f(A)39 b FH(\(v)o(ersions)f(1.4)h(and)f(1.5\))g(w)o(as)i(created)f(by)g(Lea)g (Ruscio)g(and)g(\(since)g(2001,)75 4076 y(starting)i(with)g(v)o(ersion) e(1.6\))h(is)i(currently)d(maintained)h(by)g(Da)n(vid)h(Jo)o(yner)m(,)k (who)40 b(\(with)h(the)g(help)f(of)h(se)n(v)o(eral)f(stu-)75 4175 y(dents\))h(has)h(added)e(se)n(v)o(eral)h(ne)n(w)g(functions.)88 b(Starting)41 b(with)h(v)o(ersion)e(2.7,)46 b(the)c(\223best)f(linear)h (code\224)e(tables)i(ha)n(v)o(e)75 4275 y(been)h(updated.)95 b(F)o(or)44 b(further)e(details,)50 b(see)45 b(the)f(CHANGES)h(\002le)f (in)h(the)f FC(GU)m(A)-5 b(V)f(A)44 b FH(directory)-5 b(,)47 b(also)d(a)n(v)n(ailable)g(at)p 0.6179 0.0236 0.0894 TeXcolorrgb 75 4387 a SDict begin H.S end 75 4387 a 0.6179 0.0236 0.0894 TeXcolorrgb -13 x FF(http://cadigweb.ew.u)q(sn)q(a.e)q(du/)q(\230wd)q (j/g)q(ap/)q(GUA)q(VA/)q(CHA)q(NGE)q(S.g)q(uav)q(a)p 0.6179 0.0236 0.0894 TeXcolorrgb 2440 4320 a SDict begin H.R end 2440 4320 a 2440 4374 a SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (http://cadigweb.ew.usna.edu/~wdj/gap/GUAVA/CHANGES.guava) >> /Subtype /Link H.B /ANN pdfmark end 2440 4374 a Black FH(.)216 4474 y(This)24 b(documentation)d(w)o(as)j(prepared)e(with)i(the)g FC(GAPDoc)g FH(package)e(of)i(Frank)f(L)7 b(\250)-35 b(ubeck)22 b(and)h(Max)h (Neunh)7 b(\250)-35 b(of)n(fer)-5 b(.)33 b(The)75 4574 y(con)m(v)o(ersion)17 b(from)j(T)-6 b(eX)20 b(to)g FC(GAPDoc)p FH(')-5 b(s)21 b(XML)f(w)o(as)h(done)f(by)f(Da)n(vid)h(Jo)o(yner)g(in)g (2004.)216 4673 y(Please)30 b(send)f(b)n(ug)f(reports,)i(suggestions)e (and)h(other)f(comments)g(about)g FC(GU)m(A)-5 b(V)f(A)29 b FH(to)p 0.6179 0.0236 0.0894 TeXcolorrgb 2798 4686 a SDict begin H.S end 2798 4686 a 0.6179 0.0236 0.0894 TeXcolorrgb -13 x FF(support@gap-system.o)q(rg)p 0.6179 0.0236 0.0894 TeXcolorrgb 3723 4622 a SDict begin H.R end 3723 4622 a 3723 4673 a SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (mailto://support@gap-system.org) >> /Subtype /Link H.B /ANN pdfmark end 3723 4673 a Black FH(.)75 4773 y(Currently)46 b(kno)n(wn)g(b)n(ugs)i(and)f(suggested)f FC(GU)m(A)-5 b(V)f(A)48 b FH(projects)f(are)g(listed)h(on)f(the)h(b)n (ugs)f(and)g(projects)g(web)g(page)p 0.6179 0.0236 0.0894 TeXcolorrgb 75 4886 a SDict begin H.S end 75 4886 a 0.6179 0.0236 0.0894 TeXcolorrgb -13 x FF(http://cadigweb.ew.u)q(sn)q(a.e)q(du/)q(\230wd)q (j/g)q(ap/)q(GUA)q(VA/)q(gua)q(va2)q(do.)q(htm)q(l)p 0.6179 0.0236 0.0894 TeXcolorrgb 2440 4819 a SDict begin H.R end 2440 4819 a 2440 4873 a SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (http://cadigweb.ew.usna.edu/~wdj/gap/GUAVA/guava2do.html) >> /Subtype /Link H.B /ANN pdfmark end 2440 4873 a Black FH(.)35 b(Older)21 b(releases)h(and)f (further)f(history)h(can)75 4972 y(be)f(found)f(on)g(the)i FC(GU)m(A)-5 b(V)f(A)20 b FH(web)g(page)p 0.6179 0.0236 0.0894 TeXcolorrgb 1219 4985 a SDict begin H.S end 1219 4985 a 0.6179 0.0236 0.0894 TeXcolorrgb -13 x FF(http://cadigweb.ew.)q(usn)q(a.e)q(du/)q(\230w)q (dj/)q(gap)q(/GU)q(AVA)q(/)p 0.6179 0.0236 0.0894 TeXcolorrgb 3034 4918 a SDict begin H.R end 3034 4918 a 3034 4972 a SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (http://cadigweb.ew.usna.edu/~wdj/gap/GUAVA/) >> /Subtype /Link H.B /ANN pdfmark end 3034 4972 a Black FH(.)216 5072 y FB(Contrib)n(utor)o(s)p FH(:)36 b(Other)26 b(than)f(the)g(authors)g(listed)h(on)f(the)h(title)g(page,)g(the)g (follo)n(wing)e(people)h(ha)n(v)o(e)g(contrib)n(uted)e(code)75 5171 y(to)31 b(the)f FC(GU)m(A)-5 b(V)f(A)31 b FH(project:)45 b(Ale)o(xander)28 b(Hulpk)o(e,)k(Ste)n(v)o(e)e(Linton,)i(Frank)e(L)7 b(\250)-35 b(ubeck,)31 b(Aron)f(F)o(oster)m(,)i(W)-7 b(ayne)31 b(Irons,)h(Clifton)75 5271 y(\(\223Clipper\224\))19 b(Lennon,)f(Jason)i(McGo)n(w)o(an,)f(Shuhong)f(Gao,)i(Gre)o(g)g (Gamble.)216 5384 y(F)o(or)g(documentation)d(on)j(Leon')-5 b(s)20 b(programs,)e(see)j(the)f(src/leon/doc)e(subdirectory)g(of)i FC(GU)m(A)-5 b(V)f(A)p FH(.)p Black Black eop end end %%Page: 3 3 TeXDict begin HPSdict begin 3 2 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.3) cvn H.B /DEST pdfmark end 75 100 a Black 1708 w FE(GU)n(A)l(V)-5 b(A)1723 b FK(3)p Black Black Black eop end end %%Page: 4 4 TeXDict begin HPSdict begin 4 3 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.4) cvn H.B /DEST pdfmark end 75 100 a Black Black 963 x FA(Contents)75 1399 y SDict begin H.S end 75 1399 a 75 1399 a SDict begin 13.6 H.A end 75 1399 a 75 1399 a SDict begin [ /View [/XYZ H.V] /Dest (chapter*.3) cvn H.B /DEST pdfmark end 75 1399 a 0.0236 0.0894 0.6179 TeXcolorrgb 75 1599 a SDict begin H.S end 75 1599 a Fz(1)p 0.0 0.0 1.0 TeXcolorrgb 91 w(Intr)n(oduction)p 0.0236 0.0894 0.6179 TeXcolorrgb 703 1599 a SDict begin 13.6 H.L end 703 1599 a 703 1599 a SDict begin [ /Subtype /Link /Dest (chapter.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 703 1599 a Black 2956 w Fz(11)p 0.0236 0.0894 0.6179 TeXcolorrgb 211 1711 a SDict begin H.S end 211 1711 a FK(1.1)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Introduction)28 b(to)23 b(the)h Fy(GU)m(A)-6 b(V)f(A)22 b FK(package)p 0.0236 0.0894 0.6179 TeXcolorrgb 1709 1711 a SDict begin 13.6 H.L end 1709 1711 a 1709 1711 a SDict begin [ /Subtype /Link /Dest (section.1.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1709 1711 a Black 93 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(11)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 1824 a SDict begin H.S end 211 1824 a FK(1.2)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Installing)27 b Fy(GU)m(A)-6 b(V)f(A)p 0.0236 0.0894 0.6179 TeXcolorrgb 1059 1824 a SDict begin 13.6 H.L end 1059 1824 a 1059 1824 a SDict begin [ /Subtype /Link /Dest (section.1.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1059 1824 a Black 61 w FK(.)46 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)h(.)f(.)p Black 129 w(11)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 1937 a SDict begin H.S end 211 1937 a FK(1.3)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Loading)25 b Fy(GU)m(A)-6 b(V)f(A)p 0.0236 0.0894 0.6179 TeXcolorrgb 1018 1937 a SDict begin 13.6 H.L end 1018 1937 a 1018 1937 a SDict begin [ /Subtype /Link /Dest (section.1.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1018 1937 a Black 34 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(12)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 75 2141 a SDict begin H.S end 75 2141 a Fz(2)p 0.0 0.0 1.0 TeXcolorrgb 91 w(Coding)23 b(theory)h(functions)g(in)e Fx(GAP)p 0.0236 0.0894 0.6179 TeXcolorrgb 1450 2141 a SDict begin 13.6 H.L end 1450 2141 a 1450 2141 a SDict begin [ /Subtype /Link /Dest (chapter.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1450 2141 a Black 2209 w Fz(13)p 0.0236 0.0894 0.6179 TeXcolorrgb 211 2254 a SDict begin H.S end 211 2254 a FK(2.1)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Distance)j(functions)p 0.0236 0.0894 0.6179 TeXcolorrgb 1122 2254 a SDict begin 13.6 H.L end 1122 2254 a 1122 2254 a SDict begin [ /Subtype /Link /Dest (section.2.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1122 2254 a Black 67 w FK(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) h(.)f(.)p Black 129 w(13)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2367 a SDict begin H.S end 420 2367 a FK(2.1.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(A)l(ClosestV)-10 b(ectorCombinations)q(MatFFEV)g (ecFFE)p 0.0236 0.0894 0.6179 TeXcolorrgb 2381 2367 a SDict begin 13.6 H.L end 2381 2367 a 2381 2367 a SDict begin [ /Subtype /Link /Dest (subsection.2.1.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2381 2367 a Black 35 w FK(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(13)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2480 a SDict begin H.S end 420 2480 a FK(2.1.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(A)l(ClosestV)-10 b(ectorComb)l(..MatFFEV)g(ecFFECoords)p 0.0236 0.0894 0.6179 TeXcolorrgb 2398 2480 a SDict begin 13.6 H.L end 2398 2480 a 2398 2480 a SDict begin [ /Subtype /Link /Dest (subsection.2.1.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2398 2480 a Black 86 w FK(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(14)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2593 a SDict begin H.S end 420 2593 a FK(2.1.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(DistancesDistrib)n (utionMa)q(tFFEV)-10 b(ecFFE)p 0.0236 0.0894 0.6179 TeXcolorrgb 2095 2593 a SDict begin 13.6 H.L end 2095 2593 a 2095 2593 a SDict begin [ /Subtype /Link /Dest (subsection.2.1.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2095 2593 a Black 48 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(14)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2706 a SDict begin H.S end 420 2706 a FK(2.1.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(DistancesDistrib)n(utionV)-10 b(ec)q(FFEsV)g(ecFFE)p 0.0236 0.0894 0.6179 TeXcolorrgb 2120 2706 a SDict begin 13.6 H.L end 2120 2706 a 2120 2706 a SDict begin [ /Subtype /Link /Dest (subsection.2.1.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2120 2706 a Black 91 w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(15)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2819 a SDict begin H.S end 420 2819 a FK(2.1.5)p 0.0 0.0 1.0 TeXcolorrgb 110 w(W)-7 b(eightV)d(ecFFE)p 0.0236 0.0894 0.6179 TeXcolorrgb 1264 2819 a SDict begin 13.6 H.L end 1264 2819 a 1264 2819 a SDict begin [ /Subtype /Link /Dest (subsection.2.1.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1264 2819 a Black 61 w FK(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) p Black 129 w(15)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2932 a SDict begin H.S end 420 2932 a FK(2.1.6)p 0.0 0.0 1.0 TeXcolorrgb 110 w(DistanceV)-10 b(ecFFE)p 0.0236 0.0894 0.6179 TeXcolorrgb 1321 2932 a SDict begin 13.6 H.L end 1321 2932 a 1321 2932 a SDict begin [ /Subtype /Link /Dest (subsection.2.1.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1321 2932 a Black 72 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(15)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 3044 a SDict begin H.S end 211 3044 a FK(2.2)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Other)24 b(functions)p 0.0236 0.0894 0.6179 TeXcolorrgb 1011 3044 a SDict begin 13.6 H.L end 1011 3044 a 1011 3044 a SDict begin [ /Subtype /Link /Dest (section.2.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1011 3044 a Black 41 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)h(.)f(.)p Black 129 w(16)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3157 a SDict begin H.S end 420 3157 a FK(2.2.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Conw)o(ayPolynomial)p 0.0236 0.0894 0.6179 TeXcolorrgb 1429 3157 a SDict begin 13.6 H.L end 1429 3157 a 1429 3157 a SDict begin [ /Subtype /Link /Dest (subsection.2.2.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1429 3157 a Black 32 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)p Black 129 w(16)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3270 a SDict begin H.S end 420 3270 a FK(2.2.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(RandomPrimiti)n(v)o(ePolynomial)p 0.0236 0.0894 0.6179 TeXcolorrgb 1769 3270 a SDict begin 13.6 H.L end 1769 3270 a 1769 3270 a SDict begin [ /Subtype /Link /Dest (subsection.2.2.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1769 3270 a Black 33 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(17)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 75 3474 a SDict begin H.S end 75 3474 a Fz(3)p 0.0 0.0 1.0 TeXcolorrgb 91 w(Codew)o(ords)p 0.0236 0.0894 0.6179 TeXcolorrgb 649 3474 a SDict begin 13.6 H.L end 649 3474 a 649 3474 a SDict begin [ /Subtype /Link /Dest (chapter.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 649 3474 a Black 3010 w Fz(18)p 0.0236 0.0894 0.6179 TeXcolorrgb 211 3587 a SDict begin H.S end 211 3587 a FK(3.1)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Construction)27 b(of)c(Code)n(w)o(ords)p 0.0236 0.0894 0.6179 TeXcolorrgb 1420 3587 a SDict begin 13.6 H.L end 1420 3587 a 1420 3587 a SDict begin [ /Subtype /Link /Dest (section.3.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1420 3587 a Black 41 w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(19)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3700 a SDict begin H.S end 420 3700 a FK(3.1.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Code)n(w)o(ord)p 0.0236 0.0894 0.6179 TeXcolorrgb 1085 3700 a SDict begin 13.6 H.L end 1085 3700 a 1085 3700 a SDict begin [ /Subtype /Link /Dest (subsection.3.1.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1085 3700 a Black 35 w FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) h(.)f(.)p Black 129 w(19)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3813 a SDict begin H.S end 420 3813 a FK(3.1.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Code)n(w)o(ordNr)p 0.0236 0.0894 0.6179 TeXcolorrgb 1181 3813 a SDict begin 13.6 H.L end 1181 3813 a 1181 3813 a SDict begin [ /Subtype /Link /Dest (subsection.3.1.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1181 3813 a Black 76 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)h(.)f(.)p Black 129 w(20)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3926 a SDict begin H.S end 420 3926 a FK(3.1.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(IsCode)n(w)o(ord)p 0.0236 0.0894 0.6179 TeXcolorrgb 1150 3926 a SDict begin 13.6 H.L end 1150 3926 a 1150 3926 a SDict begin [ /Subtype /Link /Dest (subsection.3.1.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1150 3926 a Black 39 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)h(.)f(.)p Black 129 w(21)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 4039 a SDict begin H.S end 211 4039 a FK(3.2)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Comparisons)26 b(of)d(Code)n(w)o(ords)p 0.0236 0.0894 0.6179 TeXcolorrgb 1430 4039 a SDict begin 13.6 H.L end 1430 4039 a 1430 4039 a SDict begin [ /Subtype /Link /Dest (section.3.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1430 4039 a Black 31 w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(21)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4152 a SDict begin H.S end 420 4152 a FK(3.2.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(=)p 0.0236 0.0894 0.6179 TeXcolorrgb 762 4152 a SDict begin 13.6 H.L end 762 4152 a 762 4152 a SDict begin [ /Subtype /Link /Dest (subsection.3.2.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 762 4152 a Black 86 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(21)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 4264 a SDict begin H.S end 211 4264 a FK(3.3)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Arithmetic)25 b(Operations)h(for)d(Code)n(w)o(ords)p 0.0236 0.0894 0.6179 TeXcolorrgb 1796 4264 a SDict begin 13.6 H.L end 1796 4264 a 1796 4264 a SDict begin [ /Subtype /Link /Dest (section.3.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1796 4264 a Black 74 w FK(.)46 b(.)f(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) p Black 129 w(22)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4377 a SDict begin H.S end 420 4377 a FK(3.3.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(+)p 0.0236 0.0894 0.6179 TeXcolorrgb 762 4377 a SDict begin 13.6 H.L end 762 4377 a 762 4377 a SDict begin [ /Subtype /Link /Dest (subsection.3.3.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 762 4377 a Black 86 w FK(.)g(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(22)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4490 a SDict begin H.S end 420 4490 a FK(3.3.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(-)p 0.0236 0.0894 0.6179 TeXcolorrgb 741 4490 a SDict begin 13.6 H.L end 741 4490 a 741 4490 a SDict begin [ /Subtype /Link /Dest (subsection.3.3.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 741 4490 a Black 39 w FK(.)g(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(22)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4603 a SDict begin H.S end 420 4603 a FK(3.3.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(+)p 0.0236 0.0894 0.6179 TeXcolorrgb 762 4603 a SDict begin 13.6 H.L end 762 4603 a 762 4603 a SDict begin [ /Subtype /Link /Dest (subsection.3.3.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 762 4603 a Black 86 w FK(.)g(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(22)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 4716 a SDict begin H.S end 211 4716 a FK(3.4)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Functions)26 b(that)e(Con)l(v)o(ert)h(Code)n(w)o(ords)f(to)g(V)-10 b(ectors)24 b(or)f(Polynomials)p 0.0236 0.0894 0.6179 TeXcolorrgb 2670 4716 a SDict begin 13.6 H.L end 2670 4716 a 2670 4716 a SDict begin [ /Subtype /Link /Dest (section.3.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2670 4716 a Black 87 w FK(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(23)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4829 a SDict begin H.S end 420 4829 a FK(3.4.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(V)-10 b(ectorCode)n(w)o(ord)p 0.0236 0.0894 0.6179 TeXcolorrgb 1321 4829 a SDict begin 13.6 H.L end 1321 4829 a 1321 4829 a SDict begin [ /Subtype /Link /Dest (subsection.3.4.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1321 4829 a Black 72 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) h(.)f(.)p Black 129 w(23)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4942 a SDict begin H.S end 420 4942 a FK(3.4.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(PolyCode)n(w)o(ord)p 0.0236 0.0894 0.6179 TeXcolorrgb 1251 4942 a SDict begin 13.6 H.L end 1251 4942 a 1251 4942 a SDict begin [ /Subtype /Link /Dest (subsection.3.4.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1251 4942 a Black 74 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)h(.)f(.)p Black 129 w(23)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 5055 a SDict begin H.S end 211 5055 a FK(3.5)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Functions)26 b(that)e(Change)g(the)g(Display)h(F)o (orm)d(of)i(a)f(Code)n(w)o(ord)p 0.0236 0.0894 0.6179 TeXcolorrgb 2479 5055 a SDict begin 13.6 H.L end 2479 5055 a 2479 5055 a SDict begin [ /Subtype /Link /Dest (section.3.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2479 5055 a Black 73 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)h(.)f(.)p Black 129 w(24)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5168 a SDict begin H.S end 420 5168 a FK(3.5.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(T)m(reatAsV)-10 b(ector)p 0.0236 0.0894 0.6179 TeXcolorrgb 1236 5168 a SDict begin 13.6 H.L end 1236 5168 a 1236 5168 a SDict begin [ /Subtype /Link /Dest (subsection.3.5.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1236 5168 a Black 89 w FK(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)h(.)f(.)p Black 129 w(24)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5281 a SDict begin H.S end 420 5281 a FK(3.5.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(T)m(reatAsPoly)p 0.0236 0.0894 0.6179 TeXcolorrgb 1166 5281 a SDict begin 13.6 H.L end 1166 5281 a 1166 5281 a SDict begin [ /Subtype /Link /Dest (subsection.3.5.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1166 5281 a Black 91 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)h(.)f(.)p Black 129 w(24)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 5394 a SDict begin H.S end 211 5394 a FK(3.6)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Other)24 b(Code)n(w)o(ord)g(Functions)p 0.0236 0.0894 0.6179 TeXcolorrgb 1430 5394 a SDict begin 13.6 H.L end 1430 5394 a 1430 5394 a SDict begin [ /Subtype /Link /Dest (section.3.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1430 5394 a Black 31 w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(25)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5506 a SDict begin H.S end 420 5506 a FK(3.6.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(NullW)-7 b(ord)p 0.0236 0.0894 0.6179 TeXcolorrgb 1071 5506 a SDict begin 13.6 H.L end 1071 5506 a 1071 5506 a SDict begin [ /Subtype /Link /Dest (subsection.3.6.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1071 5506 a Black 49 w FK(.)46 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(25)p Black Black 1890 5841 a(4)p Black eop end end %%Page: 5 5 TeXDict begin HPSdict begin 5 4 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.5) cvn H.B /DEST pdfmark end 75 100 a Black 1708 w FE(GU)n(A)l(V)-5 b(A)1723 b FK(5)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 399 a SDict begin H.S end 420 399 a FK(3.6.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(DistanceCode)n(w)o(ord)p 0.0236 0.0894 0.6179 TeXcolorrgb 1401 399 a SDict begin 13.6 H.L end 1401 399 a 1401 399 a SDict begin [ /Subtype /Link /Dest (subsection.3.6.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1401 399 a Black 60 w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(25)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 511 a SDict begin H.S end 420 511 a FK(3.6.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Support)p 0.0236 0.0894 0.6179 TeXcolorrgb 997 511 a SDict begin 13.6 H.L end 997 511 a 997 511 a SDict begin [ /Subtype /Link /Dest (subsection.3.6.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 997 511 a Black 55 w FK(.)g(.)h(.)f(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(25)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 624 a SDict begin H.S end 420 624 a FK(3.6.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(W)-7 b(eightCode)n(w)o(ord)p 0.0236 0.0894 0.6179 TeXcolorrgb 1344 624 a SDict begin 13.6 H.L end 1344 624 a 1344 624 a SDict begin [ /Subtype /Link /Dest (subsection.3.6.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1344 624 a Black 49 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)p Black 129 w(26)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 75 828 a SDict begin H.S end 75 828 a Fz(4)p 0.0 0.0 1.0 TeXcolorrgb 91 w(Codes)p 0.0236 0.0894 0.6179 TeXcolorrgb 448 828 a SDict begin 13.6 H.L end 448 828 a 448 828 a SDict begin [ /Subtype /Link /Dest (chapter.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 448 828 a Black 3211 w Fz(27)p 0.0236 0.0894 0.6179 TeXcolorrgb 211 941 a SDict begin H.S end 211 941 a FK(4.1)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Comparisons)26 b(of)d(Codes)p 0.0236 0.0894 0.6179 TeXcolorrgb 1247 941 a SDict begin 13.6 H.L end 1247 941 a 1247 941 a SDict begin [ /Subtype /Link /Dest (section.4.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1247 941 a Black 78 w FK(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) h(.)f(.)p Black 129 w(29)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1054 a SDict begin H.S end 420 1054 a FK(4.1.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(=)p 0.0236 0.0894 0.6179 TeXcolorrgb 762 1054 a SDict begin 13.6 H.L end 762 1054 a 762 1054 a SDict begin [ /Subtype /Link /Dest (subsection.4.1.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 762 1054 a Black 86 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(29)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 1167 a SDict begin H.S end 211 1167 a FK(4.2)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Operations)26 b(for)e(Codes)p 0.0236 0.0894 0.6179 TeXcolorrgb 1221 1167 a SDict begin 13.6 H.L end 1221 1167 a 1221 1167 a SDict begin [ /Subtype /Link /Dest (section.4.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1221 1167 a Black 36 w FK(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)h(.)f(.)p Black 129 w(30)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1280 a SDict begin H.S end 420 1280 a FK(4.2.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(+)p 0.0236 0.0894 0.6179 TeXcolorrgb 762 1280 a SDict begin 13.6 H.L end 762 1280 a 762 1280 a SDict begin [ /Subtype /Link /Dest (subsection.4.2.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 762 1280 a Black 86 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(30)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1393 a SDict begin H.S end 420 1393 a FK(4.2.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(*)p 0.0236 0.0894 0.6179 TeXcolorrgb 756 1393 a SDict begin 13.6 H.L end 756 1393 a 756 1393 a SDict begin [ /Subtype /Link /Dest (subsection.4.2.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 756 1393 a Black 92 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(30)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1506 a SDict begin H.S end 420 1506 a FK(4.2.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(*)p 0.0236 0.0894 0.6179 TeXcolorrgb 756 1506 a SDict begin 13.6 H.L end 756 1506 a 756 1506 a SDict begin [ /Subtype /Link /Dest (subsection.4.2.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 756 1506 a Black 92 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(30)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1619 a SDict begin H.S end 420 1619 a FK(4.2.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(InformationW)-7 b(ord)p 0.0236 0.0894 0.6179 TeXcolorrgb 1341 1619 a SDict begin 13.6 H.L end 1341 1619 a 1341 1619 a SDict begin [ /Subtype /Link /Dest (subsection.4.2.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1341 1619 a Black 52 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) h(.)f(.)p Black 129 w(31)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 1731 a SDict begin H.S end 211 1731 a FK(4.3)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Boolean)25 b(Functions)h(for)d(Codes)p 0.0236 0.0894 0.6179 TeXcolorrgb 1506 1731 a SDict begin 13.6 H.L end 1506 1731 a 1506 1731 a SDict begin [ /Subtype /Link /Dest (section.4.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1506 1731 a Black 24 w FK(.)45 b(.)g(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)h(.)f(.)p Black 129 w(31)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1844 a SDict begin H.S end 420 1844 a FK(4.3.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(in)p 0.0236 0.0894 0.6179 TeXcolorrgb 781 1844 a SDict begin 13.6 H.L end 781 1844 a 781 1844 a SDict begin [ /Subtype /Link /Dest (subsection.4.3.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 781 1844 a Black 67 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(31)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1957 a SDict begin H.S end 420 1957 a FK(4.3.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(IsSubset)p 0.0236 0.0894 0.6179 TeXcolorrgb 1017 1957 a SDict begin 13.6 H.L end 1017 1957 a 1017 1957 a SDict begin [ /Subtype /Link /Dest (subsection.4.3.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1017 1957 a Black 35 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)h(.)f(.)p Black 129 w(32)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2070 a SDict begin H.S end 420 2070 a FK(4.3.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(IsCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 967 2070 a SDict begin 13.6 H.L end 967 2070 a 967 2070 a SDict begin [ /Subtype /Link /Dest (subsection.4.3.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 967 2070 a Black 85 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)h(.)f(.)p Black 129 w(32)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2183 a SDict begin H.S end 420 2183 a FK(4.3.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(IsLinearCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1203 2183 a SDict begin 13.6 H.L end 1203 2183 a 1203 2183 a SDict begin [ /Subtype /Link /Dest (subsection.4.3.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1203 2183 a Black 54 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)h(.)f(.)p Black 129 w(32)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2296 a SDict begin H.S end 420 2296 a FK(4.3.5)p 0.0 0.0 1.0 TeXcolorrgb 110 w(IsCyclicCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1203 2296 a SDict begin 13.6 H.L end 1203 2296 a 1203 2296 a SDict begin [ /Subtype /Link /Dest (subsection.4.3.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1203 2296 a Black 54 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)h(.)f(.)p Black 129 w(32)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2409 a SDict begin H.S end 420 2409 a FK(4.3.6)p 0.0 0.0 1.0 TeXcolorrgb 110 w(IsPerfectCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1223 2409 a SDict begin 13.6 H.L end 1223 2409 a 1223 2409 a SDict begin [ /Subtype /Link /Dest (subsection.4.3.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1223 2409 a Black 34 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)h(.)f(.)p Black 129 w(33)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2522 a SDict begin H.S end 420 2522 a FK(4.3.7)p 0.0 0.0 1.0 TeXcolorrgb 110 w(IsMDSCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1165 2522 a SDict begin 13.6 H.L end 1165 2522 a 1165 2522 a SDict begin [ /Subtype /Link /Dest (subsection.4.3.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1165 2522 a Black 92 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) p Black 129 w(33)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2635 a SDict begin H.S end 420 2635 a FK(4.3.8)p 0.0 0.0 1.0 TeXcolorrgb 110 w(IsSelfDualCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1289 2635 a SDict begin 13.6 H.L end 1289 2635 a 1289 2635 a SDict begin [ /Subtype /Link /Dest (subsection.4.3.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1289 2635 a Black 36 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(34)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2748 a SDict begin H.S end 420 2748 a FK(4.3.9)p 0.0 0.0 1.0 TeXcolorrgb 110 w(IsSelfOrthogonalCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1524 2748 a SDict begin 13.6 H.L end 1524 2748 a 1524 2748 a SDict begin [ /Subtype /Link /Dest (subsection.4.3.9) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1524 2748 a Black 74 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(34)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2861 a SDict begin H.S end 420 2861 a FK(4.3.10)p 0.0 0.0 1.0 TeXcolorrgb 65 w(IsSelfComplementaryCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1696 2861 a SDict begin 13.6 H.L end 1696 2861 a 1696 2861 a SDict begin [ /Subtype /Link /Dest (subsection.4.3.10) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1696 2861 a Black 38 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(34)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2973 a SDict begin H.S end 420 2973 a FK(4.3.11)p 0.0 0.0 1.0 TeXcolorrgb 65 w(IsAf)n (\002neCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1197 2973 a SDict begin 13.6 H.L end 1197 2973 a 1197 2973 a SDict begin [ /Subtype /Link /Dest (subsection.4.3.11) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1197 2973 a Black 60 w FK(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(35)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3086 a SDict begin H.S end 420 3086 a FK(4.3.12)p 0.0 0.0 1.0 TeXcolorrgb 65 w(IsAlmostAf)n (\002neCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1464 3086 a SDict begin 13.6 H.L end 1464 3086 a 1464 3086 a SDict begin [ /Subtype /Link /Dest (subsection.4.3.12) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1464 3086 a Black 66 w FK(.)g(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(35)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 3199 a SDict begin H.S end 211 3199 a FK(4.4)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Equi)n(v)n(alence)26 b(and)e(Isomorphism)i(of)d(Codes)p 0.0236 0.0894 0.6179 TeXcolorrgb 1893 3199 a SDict begin 13.6 H.L end 1893 3199 a 1893 3199 a SDict begin [ /Subtype /Link /Dest (section.4.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1893 3199 a Black 46 w FK(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(36)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3312 a SDict begin H.S end 420 3312 a FK(4.4.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(IsEqui)n(v)n(alent)p 0.0236 0.0894 0.6179 TeXcolorrgb 1163 3312 a SDict begin 13.6 H.L end 1163 3312 a 1163 3312 a SDict begin [ /Subtype /Link /Dest (subsection.4.4.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1163 3312 a Black 94 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) p Black 129 w(36)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3425 a SDict begin H.S end 420 3425 a FK(4.4.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(CodeIsomorphism)p 0.0236 0.0894 0.6179 TeXcolorrgb 1379 3425 a SDict begin 13.6 H.L end 1379 3425 a 1379 3425 a SDict begin [ /Subtype /Link /Dest (subsection.4.4.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1379 3425 a Black 82 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(36)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3538 a SDict begin H.S end 420 3538 a FK(4.4.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(AutomorphismGroup)p 0.0236 0.0894 0.6179 TeXcolorrgb 1490 3538 a SDict begin 13.6 H.L end 1490 3538 a 1490 3538 a SDict begin [ /Subtype /Link /Dest (subsection.4.4.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1490 3538 a Black 40 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(36)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3651 a SDict begin H.S end 420 3651 a FK(4.4.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(PermutationAutomorphismGroup)p 0.0236 0.0894 0.6179 TeXcolorrgb 1933 3651 a SDict begin 13.6 H.L end 1933 3651 a 1933 3651 a SDict begin [ /Subtype /Link /Dest (subsection.4.4.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1933 3651 a Black 74 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(37)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 3764 a SDict begin H.S end 211 3764 a FK(4.5)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Domain)24 b(Functions)h(for)f(Codes)p 0.0236 0.0894 0.6179 TeXcolorrgb 1496 3764 a SDict begin 13.6 H.L end 1496 3764 a 1496 3764 a SDict begin [ /Subtype /Link /Dest (section.4.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1496 3764 a Black 34 w FK(.)45 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(38)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3877 a SDict begin H.S end 420 3877 a FK(4.5.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(IsFinite)p 0.0236 0.0894 0.6179 TeXcolorrgb 987 3877 a SDict begin 13.6 H.L end 987 3877 a 987 3877 a SDict begin [ /Subtype /Link /Dest (subsection.4.5.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 987 3877 a Black 65 w FK(.)g(.)h(.)f(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(38)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3990 a SDict begin H.S end 420 3990 a FK(4.5.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Size)p 0.0236 0.0894 0.6179 TeXcolorrgb 867 3990 a SDict begin 13.6 H.L end 867 3990 a 867 3990 a SDict begin [ /Subtype /Link /Dest (subsection.4.5.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 867 3990 a Black 49 w FK(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(38)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4103 a SDict begin H.S end 420 4103 a FK(4.5.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(LeftActingDomain)p 0.0236 0.0894 0.6179 TeXcolorrgb 1400 4103 a SDict begin 13.6 H.L end 1400 4103 a 1400 4103 a SDict begin [ /Subtype /Link /Dest (subsection.4.5.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1400 4103 a Black 61 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(38)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4215 a SDict begin H.S end 420 4215 a FK(4.5.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Dimension)p 0.0236 0.0894 0.6179 TeXcolorrgb 1108 4215 a SDict begin 13.6 H.L end 1108 4215 a 1108 4215 a SDict begin [ /Subtype /Link /Dest (subsection.4.5.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1108 4215 a Black 81 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) p Black 129 w(38)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4328 a SDict begin H.S end 420 4328 a FK(4.5.5)p 0.0 0.0 1.0 TeXcolorrgb 110 w(AsSSortedList)p 0.0236 0.0894 0.6179 TeXcolorrgb 1240 4328 a SDict begin 13.6 H.L end 1240 4328 a 1240 4328 a SDict begin [ /Subtype /Link /Dest (subsection.4.5.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1240 4328 a Black 85 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(39)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 4441 a SDict begin H.S end 211 4441 a FK(4.6)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Printing)25 b(and)f(Displaying)i(Codes)p 0.0236 0.0894 0.6179 TeXcolorrgb 1562 4441 a SDict begin 13.6 H.L end 1562 4441 a 1562 4441 a SDict begin [ /Subtype /Link /Dest (section.4.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1562 4441 a Black 36 w FK(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(39)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4554 a SDict begin H.S end 420 4554 a FK(4.6.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Print)p 0.0236 0.0894 0.6179 TeXcolorrgb 887 4554 a SDict begin 13.6 H.L end 887 4554 a 887 4554 a SDict begin [ /Subtype /Link /Dest (subsection.4.6.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 887 4554 a Black 29 w FK(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(39)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4667 a SDict begin H.S end 420 4667 a FK(4.6.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(String)p 0.0236 0.0894 0.6179 TeXcolorrgb 932 4667 a SDict begin 13.6 H.L end 932 4667 a 932 4667 a SDict begin [ /Subtype /Link /Dest (subsection.4.6.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 932 4667 a Black 52 w FK(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(40)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4780 a SDict begin H.S end 420 4780 a FK(4.6.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Display)p 0.0236 0.0894 0.6179 TeXcolorrgb 992 4780 a SDict begin 13.6 H.L end 992 4780 a 992 4780 a SDict begin [ /Subtype /Link /Dest (subsection.4.6.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 992 4780 a Black 60 w FK(.)g(.)h(.)f(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(40)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4893 a SDict begin H.S end 420 4893 a FK(4.6.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(DisplayBoundsInfo)p 0.0236 0.0894 0.6179 TeXcolorrgb 1418 4893 a SDict begin 13.6 H.L end 1418 4893 a 1418 4893 a SDict begin [ /Subtype /Link /Dest (subsection.4.6.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1418 4893 a Black 43 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(41)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 5006 a SDict begin H.S end 211 5006 a FK(4.7)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Generating)26 b(\(Check\))f(Matrices)f(and)g(Polynomials)p 0.0236 0.0894 0.6179 TeXcolorrgb 2135 5006 a SDict begin 13.6 H.L end 2135 5006 a 2135 5006 a SDict begin [ /Subtype /Link /Dest (section.4.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2135 5006 a Black 76 w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(41)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5119 a SDict begin H.S end 420 5119 a FK(4.7.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(GeneratorMat)p 0.0236 0.0894 0.6179 TeXcolorrgb 1218 5119 a SDict begin 13.6 H.L end 1218 5119 a 1218 5119 a SDict begin [ /Subtype /Link /Dest (subsection.4.7.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1218 5119 a Black 39 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) p Black 129 w(41)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5232 a SDict begin H.S end 420 5232 a FK(4.7.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(CheckMat)p 0.0236 0.0894 0.6179 TeXcolorrgb 1088 5232 a SDict begin 13.6 H.L end 1088 5232 a 1088 5232 a SDict begin [ /Subtype /Link /Dest (subsection.4.7.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1088 5232 a Black 32 w FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)p Black 129 w(42)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5345 a SDict begin H.S end 420 5345 a FK(4.7.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(GeneratorPol)p 0.0236 0.0894 0.6179 TeXcolorrgb 1193 5345 a SDict begin 13.6 H.L end 1193 5345 a 1193 5345 a SDict begin [ /Subtype /Link /Dest (subsection.4.7.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1193 5345 a Black 64 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) p Black 129 w(42)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5457 a SDict begin H.S end 420 5457 a FK(4.7.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(CheckPol)p 0.0236 0.0894 0.6179 TeXcolorrgb 1063 5457 a SDict begin 13.6 H.L end 1063 5457 a 1063 5457 a SDict begin [ /Subtype /Link /Dest (subsection.4.7.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1063 5457 a Black 57 w FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)p Black 129 w(43)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5570 a SDict begin H.S end 420 5570 a FK(4.7.5)p 0.0 0.0 1.0 TeXcolorrgb 110 w(RootsOfCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1209 5570 a SDict begin 13.6 H.L end 1209 5570 a 1209 5570 a SDict begin [ /Subtype /Link /Dest (subsection.4.7.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1209 5570 a Black 48 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) p Black 129 w(43)p Black Black Black eop end end %%Page: 6 6 TeXDict begin HPSdict begin 6 5 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.6) cvn H.B /DEST pdfmark end 75 100 a Black 1708 w FE(GU)n(A)l(V)-5 b(A)1723 b FK(6)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 399 a SDict begin H.S end 211 399 a FK(4.8)p 0.0 0.0 1.0 TeXcolorrgb 96 w(P)o(arameters)25 b(of)e(Codes)p 0.0236 0.0894 0.6179 TeXcolorrgb 1194 399 a SDict begin 13.6 H.L end 1194 399 a 1194 399 a SDict begin [ /Subtype /Link /Dest (section.4.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1194 399 a Black 63 w FK(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)h(.)f(.)p Black 129 w(43)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 511 a SDict begin H.S end 420 511 a FK(4.8.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(W)-7 b(ordLength)p 0.0236 0.0894 0.6179 TeXcolorrgb 1166 511 a SDict begin 13.6 H.L end 1166 511 a 1166 511 a SDict begin [ /Subtype /Link /Dest (subsection.4.8.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1166 511 a Black 91 w FK(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)h(.)f(.)p Black 129 w(43)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 624 a SDict begin H.S end 420 624 a FK(4.8.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Redundanc)o(y)p 0.0236 0.0894 0.6179 TeXcolorrgb 1161 624 a SDict begin 13.6 H.L end 1161 624 a 1161 624 a SDict begin [ /Subtype /Link /Dest (subsection.4.8.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1161 624 a Black 28 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)h(.)f(.)p Black 129 w(44)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 737 a SDict begin H.S end 420 737 a FK(4.8.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(MinimumDistance)p 0.0236 0.0894 0.6179 TeXcolorrgb 1390 737 a SDict begin 13.6 H.L end 1390 737 a 1390 737 a SDict begin [ /Subtype /Link /Dest (subsection.4.8.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1390 737 a Black 71 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(44)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 850 a SDict begin H.S end 420 850 a FK(4.8.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(MinimumDistanceLeon)p 0.0236 0.0894 0.6179 TeXcolorrgb 1576 850 a SDict begin 13.6 H.L end 1576 850 a 1576 850 a SDict begin [ /Subtype /Link /Dest (subsection.4.8.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1576 850 a Black 90 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(45)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 963 a SDict begin H.S end 420 963 a FK(4.8.5)p 0.0 0.0 1.0 TeXcolorrgb 110 w (DecreaseMinimumDistanceUpperBo)q(und)p 0.0236 0.0894 0.6179 TeXcolorrgb 2190 963 a SDict begin 13.6 H.L end 2190 963 a 2190 963 a SDict begin [ /Subtype /Link /Dest (subsection.4.8.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2190 963 a Black 90 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)h(.)f(.)p Black 129 w(46)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1076 a SDict begin H.S end 420 1076 a FK(4.8.6)p 0.0 0.0 1.0 TeXcolorrgb 110 w(MinimumDistanceRandom)p 0.0236 0.0894 0.6179 TeXcolorrgb 1697 1076 a SDict begin 13.6 H.L end 1697 1076 a 1697 1076 a SDict begin [ /Subtype /Link /Dest (subsection.4.8.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1697 1076 a Black 37 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(46)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1189 a SDict begin H.S end 420 1189 a FK(4.8.7)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Co)o(v)o(eringRadius)p 0.0236 0.0894 0.6179 TeXcolorrgb 1296 1189 a SDict begin 13.6 H.L end 1296 1189 a 1296 1189 a SDict begin [ /Subtype /Link /Dest (subsection.4.8.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1296 1189 a Black 29 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(48)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1302 a SDict begin H.S end 420 1302 a FK(4.8.8)p 0.0 0.0 1.0 TeXcolorrgb 110 w(SetCo)o(v)o(eringRadius)p 0.0236 0.0894 0.6179 TeXcolorrgb 1412 1302 a SDict begin 13.6 H.L end 1412 1302 a 1412 1302 a SDict begin [ /Subtype /Link /Dest (subsection.4.8.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1412 1302 a Black 49 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)p Black 129 w(49)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 1415 a SDict begin H.S end 211 1415 a FK(4.9)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Distrib)n(utions)p 0.0236 0.0894 0.6179 TeXcolorrgb 916 1415 a SDict begin 13.6 H.L end 916 1415 a 916 1415 a SDict begin [ /Subtype /Link /Dest (section.4.9) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 916 1415 a Black 68 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)h(.)f(.)p Black 129 w(49)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1528 a SDict begin H.S end 420 1528 a FK(4.9.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(MinimumW)-7 b(eightW)g(ords)p 0.0236 0.0894 0.6179 TeXcolorrgb 1567 1528 a SDict begin 13.6 H.L end 1567 1528 a 1567 1528 a SDict begin [ /Subtype /Link /Dest (subsection.4.9.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1567 1528 a Black 31 w FK(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(49)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1641 a SDict begin H.S end 420 1641 a FK(4.9.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(W)-7 b(eightDistrib)n(ution)p 0.0236 0.0894 0.6179 TeXcolorrgb 1404 1641 a SDict begin 13.6 H.L end 1404 1641 a 1404 1641 a SDict begin [ /Subtype /Link /Dest (subsection.4.9.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1404 1641 a Black 57 w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)p Black 129 w(50)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1753 a SDict begin H.S end 420 1753 a FK(4.9.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(InnerDistrib)n(ution)p 0.0236 0.0894 0.6179 TeXcolorrgb 1335 1753 a SDict begin 13.6 H.L end 1335 1753 a 1335 1753 a SDict begin [ /Subtype /Link /Dest (subsection.4.9.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1335 1753 a Black 58 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(50)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1866 a SDict begin H.S end 420 1866 a FK(4.9.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(DistancesDistrib)n(ution)p 0.0236 0.0894 0.6179 TeXcolorrgb 1496 1866 a SDict begin 13.6 H.L end 1496 1866 a 1496 1866 a SDict begin [ /Subtype /Link /Dest (subsection.4.9.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1496 1866 a Black 34 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(50)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1979 a SDict begin H.S end 420 1979 a FK(4.9.5)p 0.0 0.0 1.0 TeXcolorrgb 110 w(OuterDistrib)n(ution)p 0.0236 0.0894 0.6179 TeXcolorrgb 1351 1979 a SDict begin 13.6 H.L end 1351 1979 a 1351 1979 a SDict begin [ /Subtype /Link /Dest (subsection.4.9.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1351 1979 a Black 42 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(51)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 2092 a SDict begin H.S end 211 2092 a FK(4.10)p 0.0 0.0 1.0 TeXcolorrgb 51 w(Decoding)26 b(Functions)p 0.0236 0.0894 0.6179 TeXcolorrgb 1178 2092 a SDict begin 13.6 H.L end 1178 2092 a 1178 2092 a SDict begin [ /Subtype /Link /Dest (section.4.10) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1178 2092 a Black 79 w FK(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)p Black 129 w(51)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2205 a SDict begin H.S end 420 2205 a FK(4.10.1)p 0.0 0.0 1.0 TeXcolorrgb 65 w(Decode)p 0.0236 0.0894 0.6179 TeXcolorrgb 987 2205 a SDict begin 13.6 H.L end 987 2205 a 987 2205 a SDict begin [ /Subtype /Link /Dest (subsection.4.10.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 987 2205 a Black 65 w FK(.)g(.)h(.)f(.)g(.)g(.) g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(51)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2318 a SDict begin H.S end 420 2318 a FK(4.10.2)p 0.0 0.0 1.0 TeXcolorrgb 65 w(Decode)n(w)o(ord)p 0.0236 0.0894 0.6179 TeXcolorrgb 1170 2318 a SDict begin 13.6 H.L end 1170 2318 a 1170 2318 a SDict begin [ /Subtype /Link /Dest (subsection.4.10.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1170 2318 a Black 87 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) p Black 129 w(52)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2431 a SDict begin H.S end 420 2431 a FK(4.10.3)p 0.0 0.0 1.0 TeXcolorrgb 65 w(GeneralizedReedSolomonDeco)q(der)q(Gao)p 0.0236 0.0894 0.6179 TeXcolorrgb 2119 2431 a SDict begin 13.6 H.L end 2119 2431 a 2119 2431 a SDict begin [ /Subtype /Link /Dest (subsection.4.10.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2119 2431 a Black 92 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(53)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2544 a SDict begin H.S end 420 2544 a FK(4.10.4)p 0.0 0.0 1.0 TeXcolorrgb 65 w (GeneralizedReedSolomonListDec)q(ode)q(r)p 0.0236 0.0894 0.6179 TeXcolorrgb 2109 2544 a SDict begin 13.6 H.L end 2109 2544 a 2109 2544 a SDict begin [ /Subtype /Link /Dest (subsection.4.10.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2109 2544 a Black 34 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(54)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2657 a SDict begin H.S end 420 2657 a FK(4.10.5)p 0.0 0.0 1.0 TeXcolorrgb 65 w(BitFlipDecoder)p 0.0236 0.0894 0.6179 TeXcolorrgb 1274 2657 a SDict begin 13.6 H.L end 1274 2657 a 1274 2657 a SDict begin [ /Subtype /Link /Dest (subsection.4.10.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1274 2657 a Black 51 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(54)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2770 a SDict begin H.S end 420 2770 a FK(4.10.6)p 0.0 0.0 1.0 TeXcolorrgb 65 w(NearestNeighborGRSDecode)n (w)o(ords)p 0.0236 0.0894 0.6179 TeXcolorrgb 2000 2770 a SDict begin 13.6 H.L end 2000 2770 a 2000 2770 a SDict begin [ /Subtype /Link /Dest (subsection.4.10.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2000 2770 a Black 75 w FK(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(55)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2883 a SDict begin H.S end 420 2883 a FK(4.10.7)p 0.0 0.0 1.0 TeXcolorrgb 65 w(NearestNeighborDecode)n(w)o(ord)q(s)p 0.0236 0.0894 0.6179 TeXcolorrgb 1823 2883 a SDict begin 13.6 H.L end 1823 2883 a 1823 2883 a SDict begin [ /Subtype /Link /Dest (subsection.4.10.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1823 2883 a Black 47 w FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(56)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2995 a SDict begin H.S end 420 2995 a FK(4.10.8)p 0.0 0.0 1.0 TeXcolorrgb 65 w(Syndrome)p 0.0236 0.0894 0.6179 TeXcolorrgb 1083 2995 a SDict begin 13.6 H.L end 1083 2995 a 1083 2995 a SDict begin [ /Subtype /Link /Dest (subsection.4.10.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1083 2995 a Black 37 w FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)p Black 129 w(57)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3108 a SDict begin H.S end 420 3108 a FK(4.10.9)p 0.0 0.0 1.0 TeXcolorrgb 65 w(SyndromeT)-7 b(able)p 0.0236 0.0894 0.6179 TeXcolorrgb 1282 3108 a SDict begin 13.6 H.L end 1282 3108 a 1282 3108 a SDict begin [ /Subtype /Link /Dest (subsection.4.10.9) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1282 3108 a Black 43 w FK(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) p Black 129 w(57)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3221 a SDict begin H.S end 420 3221 a FK(4.10.10)p 0.0 0.0 1.0 TeXcolorrgb 20 w(StandardArray)p 0.0236 0.0894 0.6179 TeXcolorrgb 1243 3221 a SDict begin 13.6 H.L end 1243 3221 a 1243 3221 a SDict begin [ /Subtype /Link /Dest (subsection.4.10.10) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1243 3221 a Black 82 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(58)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3334 a SDict begin H.S end 420 3334 a FK(4.10.11)p 0.0 0.0 1.0 TeXcolorrgb 20 w(PermutationDecode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1429 3334 a SDict begin 13.6 H.L end 1429 3334 a 1429 3334 a SDict begin [ /Subtype /Link /Dest (subsection.4.10.11) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1429 3334 a Black 32 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(58)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3447 a SDict begin H.S end 420 3447 a FK(4.10.12)p 0.0 0.0 1.0 TeXcolorrgb 20 w(PermutationDecodeNC)p 0.0236 0.0894 0.6179 TeXcolorrgb 1556 3447 a SDict begin 13.6 H.L end 1556 3447 a 1556 3447 a SDict begin [ /Subtype /Link /Dest (subsection.4.10.12) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1556 3447 a Black 42 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(59)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 75 3651 a SDict begin H.S end 75 3651 a Fz(5)p 0.0 0.0 1.0 TeXcolorrgb 91 w(Generating)24 b(Codes)p 0.0236 0.0894 0.6179 TeXcolorrgb 910 3651 a SDict begin 13.6 H.L end 910 3651 a 910 3651 a SDict begin [ /Subtype /Link /Dest (chapter.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 910 3651 a Black 2749 w Fz(60)p 0.0236 0.0894 0.6179 TeXcolorrgb 211 3764 a SDict begin H.S end 211 3764 a FK(5.1)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Generating)i (Unrestricted)g(Codes)p 0.0236 0.0894 0.6179 TeXcolorrgb 1569 3764 a SDict begin 13.6 H.L end 1569 3764 a 1569 3764 a SDict begin [ /Subtype /Link /Dest (section.5.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1569 3764 a Black 29 w FK(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(60)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3877 a SDict begin H.S end 420 3877 a FK(5.1.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(ElementsCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1239 3877 a SDict begin 13.6 H.L end 1239 3877 a 1239 3877 a SDict begin [ /Subtype /Link /Dest (subsection.5.1.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1239 3877 a Black 86 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(60)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3990 a SDict begin H.S end 420 3990 a FK(5.1.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(HadamardCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1279 3990 a SDict begin 13.6 H.L end 1279 3990 a 1279 3990 a SDict begin [ /Subtype /Link /Dest (subsection.5.1.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1279 3990 a Black 46 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(61)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4103 a SDict begin H.S end 420 4103 a FK(5.1.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(ConferenceCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1318 4103 a SDict begin 13.6 H.L end 1318 4103 a 1318 4103 a SDict begin [ /Subtype /Link /Dest (subsection.5.1.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1318 4103 a Black 75 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(61)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4215 a SDict begin H.S end 420 4215 a FK(5.1.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(MOLSCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1156 4215 a SDict begin 13.6 H.L end 1156 4215 a 1156 4215 a SDict begin [ /Subtype /Link /Dest (subsection.5.1.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1156 4215 a Black 33 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) p Black 129 w(62)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4328 a SDict begin H.S end 420 4328 a FK(5.1.5)p 0.0 0.0 1.0 TeXcolorrgb 110 w(RandomCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1209 4328 a SDict begin 13.6 H.L end 1209 4328 a 1209 4328 a SDict begin [ /Subtype /Link /Dest (subsection.5.1.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1209 4328 a Black 48 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(63)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4441 a SDict begin H.S end 420 4441 a FK(5.1.6)p 0.0 0.0 1.0 TeXcolorrgb 110 w(NordstromRobinsonCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1640 4441 a SDict begin 13.6 H.L end 1640 4441 a 1640 4441 a SDict begin [ /Subtype /Link /Dest (subsection.5.1.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1640 4441 a Black 94 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(63)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4554 a SDict begin H.S end 420 4554 a FK(5.1.7)p 0.0 0.0 1.0 TeXcolorrgb 110 w(GreedyCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1168 4554 a SDict begin 13.6 H.L end 1168 4554 a 1168 4554 a SDict begin [ /Subtype /Link /Dest (subsection.5.1.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1168 4554 a Black 89 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(63)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4667 a SDict begin H.S end 420 4667 a FK(5.1.8)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Le)o(xiCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1067 4667 a SDict begin 13.6 H.L end 1067 4667 a 1067 4667 a SDict begin [ /Subtype /Link /Dest (subsection.5.1.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1067 4667 a Black 53 w FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(64)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 4780 a SDict begin H.S end 211 4780 a FK(5.2)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Generating)26 b(Linear)e(Codes)p 0.0236 0.0894 0.6179 TeXcolorrgb 1357 4780 a SDict begin 13.6 H.L end 1357 4780 a 1357 4780 a SDict begin [ /Subtype /Link /Dest (section.5.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1357 4780 a Black 36 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(64)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4893 a SDict begin H.S end 420 4893 a FK(5.2.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(GeneratorMatCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1409 4893 a SDict begin 13.6 H.L end 1409 4893 a 1409 4893 a SDict begin [ /Subtype /Link /Dest (subsection.5.2.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1409 4893 a Black 52 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(64)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5006 a SDict begin H.S end 420 5006 a FK(5.2.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(CheckMatCodeMutable)p 0.0236 0.0894 0.6179 TeXcolorrgb 1580 5006 a SDict begin 13.6 H.L end 1580 5006 a 1580 5006 a SDict begin [ /Subtype /Link /Dest (subsection.5.2.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1580 5006 a Black 86 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(65)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5119 a SDict begin H.S end 420 5119 a FK(5.2.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(CheckMatCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1279 5119 a SDict begin 13.6 H.L end 1279 5119 a 1279 5119 a SDict begin [ /Subtype /Link /Dest (subsection.5.2.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1279 5119 a Black 46 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(65)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5232 a SDict begin H.S end 420 5232 a FK(5.2.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(HammingCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1265 5232 a SDict begin 13.6 H.L end 1265 5232 a 1265 5232 a SDict begin [ /Subtype /Link /Dest (subsection.5.2.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1265 5232 a Black 60 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(66)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5345 a SDict begin H.S end 420 5345 a FK(5.2.5)p 0.0 0.0 1.0 TeXcolorrgb 110 w(ReedMullerCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1334 5345 a SDict begin 13.6 H.L end 1334 5345 a 1334 5345 a SDict begin [ /Subtype /Link /Dest (subsection.5.2.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1334 5345 a Black 59 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(66)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5457 a SDict begin H.S end 420 5457 a FK(5.2.6)p 0.0 0.0 1.0 TeXcolorrgb 110 w(AlternantCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1243 5457 a SDict begin 13.6 H.L end 1243 5457 a 1243 5457 a SDict begin [ /Subtype /Link /Dest (subsection.5.2.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1243 5457 a Black 82 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(66)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5570 a SDict begin H.S end 420 5570 a FK(5.2.7)p 0.0 0.0 1.0 TeXcolorrgb 110 w(GoppaCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1143 5570 a SDict begin 13.6 H.L end 1143 5570 a 1143 5570 a SDict begin [ /Subtype /Link /Dest (subsection.5.2.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1143 5570 a Black 46 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) p Black 129 w(67)p Black Black Black eop end end %%Page: 7 7 TeXDict begin HPSdict begin 7 6 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.7) cvn H.B /DEST pdfmark end 75 100 a Black 1708 w FE(GU)n(A)l(V)-5 b(A)1723 b FK(7)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 399 a SDict begin H.S end 420 399 a FK(5.2.8)p 0.0 0.0 1.0 TeXcolorrgb 110 w(GeneralizedSri)n(v)n(asta)n(v)n(aCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1707 399 a SDict begin 13.6 H.L end 1707 399 a 1707 399 a SDict begin [ /Subtype /Link /Dest (subsection.5.2.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1707 399 a Black 95 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(67)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 511 a SDict begin H.S end 420 511 a FK(5.2.9)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Sri)n(v)n(asta)n(v)n(aCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1270 511 a SDict begin 13.6 H.L end 1270 511 a 1270 511 a SDict begin [ /Subtype /Link /Dest (subsection.5.2.9) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1270 511 a Black 55 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)p Black 129 w(68)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 624 a SDict begin H.S end 420 624 a FK(5.2.10)p 0.0 0.0 1.0 TeXcolorrgb 65 w(CordaroW)-7 b(agnerCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1477 624 a SDict begin 13.6 H.L end 1477 624 a 1477 624 a SDict begin [ /Subtype /Link /Dest (subsection.5.2.10) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1477 624 a Black 53 w FK(.)45 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(68)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 737 a SDict begin H.S end 420 737 a FK(5.2.11)p 0.0 0.0 1.0 TeXcolorrgb 65 w(FerreroDesignCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1424 737 a SDict begin 13.6 H.L end 1424 737 a 1424 737 a SDict begin [ /Subtype /Link /Dest (subsection.5.2.11) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1424 737 a Black 37 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(68)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 850 a SDict begin H.S end 420 850 a FK(5.2.12)p 0.0 0.0 1.0 TeXcolorrgb 65 w(RandomLinearCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1445 850 a SDict begin 13.6 H.L end 1445 850 a 1445 850 a SDict begin [ /Subtype /Link /Dest (subsection.5.2.12) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1445 850 a Black 85 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(69)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 963 a SDict begin H.S end 420 963 a FK(5.2.13)p 0.0 0.0 1.0 TeXcolorrgb 65 w(OptimalityCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1294 963 a SDict begin 13.6 H.L end 1294 963 a 1294 963 a SDict begin [ /Subtype /Link /Dest (subsection.5.2.13) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1294 963 a Black 31 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(70)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1076 a SDict begin H.S end 420 1076 a FK(5.2.14)p 0.0 0.0 1.0 TeXcolorrgb 65 w(BestKno)n(wnLinearCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1564 1076 a SDict begin 13.6 H.L end 1564 1076 a 1564 1076 a SDict begin [ /Subtype /Link /Dest (subsection.5.2.14) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1564 1076 a Black 34 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(70)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 1189 a SDict begin H.S end 211 1189 a FK(5.3)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Gabidulin)26 b(Codes)p 0.0236 0.0894 0.6179 TeXcolorrgb 1057 1189 a SDict begin 13.6 H.L end 1057 1189 a 1057 1189 a SDict begin [ /Subtype /Link /Dest (section.5.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1057 1189 a Black 63 w FK(.)46 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)h(.)f(.)p Black 129 w(72)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1302 a SDict begin H.S end 420 1302 a FK(5.3.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(GabidulinCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1263 1302 a SDict begin 13.6 H.L end 1263 1302 a 1263 1302 a SDict begin [ /Subtype /Link /Dest (subsection.5.3.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1263 1302 a Black 62 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)h(.)f(.)p Black 129 w(72)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1415 a SDict begin H.S end 420 1415 a FK(5.3.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Enlar)n(gedGabidulinCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1587 1415 a SDict begin 13.6 H.L end 1587 1415 a 1587 1415 a SDict begin [ /Subtype /Link /Dest (subsection.5.3.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1587 1415 a Black 79 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(72)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1528 a SDict begin H.S end 420 1528 a FK(5.3.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Da)n(vydo)o(vCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1230 1528 a SDict begin 13.6 H.L end 1230 1528 a 1230 1528 a SDict begin [ /Subtype /Link /Dest (subsection.5.3.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1230 1528 a Black 27 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) p Black 129 w(72)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1641 a SDict begin H.S end 420 1641 a FK(5.3.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(T)-7 b(ombakCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1197 1641 a SDict begin 13.6 H.L end 1197 1641 a 1197 1641 a SDict begin [ /Subtype /Link /Dest (subsection.5.3.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1197 1641 a Black 60 w FK(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)p Black 129 w(72)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1753 a SDict begin H.S end 420 1753 a FK(5.3.5)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Enlar)n(gedT)-7 b(ombakCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1521 1753 a SDict begin 13.6 H.L end 1521 1753 a 1521 1753 a SDict begin [ /Subtype /Link /Dest (subsection.5.3.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1521 1753 a Black 77 w FK(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(72)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 1866 a SDict begin H.S end 211 1866 a FK(5.4)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Golay)24 b(Codes)p 0.0236 0.0894 0.6179 TeXcolorrgb 915 1866 a SDict begin 13.6 H.L end 915 1866 a 915 1866 a SDict begin [ /Subtype /Link /Dest (section.5.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 915 1866 a Black 69 w FK(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)h(.)f(.)p Black 129 w(73)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1979 a SDict begin H.S end 420 1979 a FK(5.4.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(BinaryGolayCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1369 1979 a SDict begin 13.6 H.L end 1369 1979 a 1369 1979 a SDict begin [ /Subtype /Link /Dest (subsection.5.4.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1369 1979 a Black 92 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)p Black 129 w(73)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2092 a SDict begin H.S end 420 2092 a FK(5.4.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(ExtendedBinaryGolayCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1710 2092 a SDict begin 13.6 H.L end 1710 2092 a 1710 2092 a SDict begin [ /Subtype /Link /Dest (subsection.5.4.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1710 2092 a Black 92 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(73)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2205 a SDict begin H.S end 420 2205 a FK(5.4.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(T)-6 b(ernaryGolayCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1403 2205 a SDict begin 13.6 H.L end 1403 2205 a 1403 2205 a SDict begin [ /Subtype /Link /Dest (subsection.5.4.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1403 2205 a Black 58 w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(74)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2318 a SDict begin H.S end 420 2318 a FK(5.4.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(ExtendedT)-6 b(ernaryGolayCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1744 2318 a SDict begin 13.6 H.L end 1744 2318 a 1744 2318 a SDict begin [ /Subtype /Link /Dest (subsection.5.4.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1744 2318 a Black 58 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(74)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 2431 a SDict begin H.S end 211 2431 a FK(5.5)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Generating)26 b(Cyclic)e(Codes)p 0.0236 0.0894 0.6179 TeXcolorrgb 1357 2431 a SDict begin 13.6 H.L end 1357 2431 a 1357 2431 a SDict begin [ /Subtype /Link /Dest (section.5.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1357 2431 a Black 36 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) h(.)f(.)p Black 129 w(74)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2544 a SDict begin H.S end 420 2544 a FK(5.5.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(GeneratorPolCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1384 2544 a SDict begin 13.6 H.L end 1384 2544 a 1384 2544 a SDict begin [ /Subtype /Link /Dest (subsection.5.5.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1384 2544 a Black 77 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)p Black 129 w(75)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2657 a SDict begin H.S end 420 2657 a FK(5.5.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(CheckPolCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1254 2657 a SDict begin 13.6 H.L end 1254 2657 a 1254 2657 a SDict begin [ /Subtype /Link /Dest (subsection.5.5.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1254 2657 a Black 71 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(76)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2770 a SDict begin H.S end 420 2770 a FK(5.5.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(RootsCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1113 2770 a SDict begin 13.6 H.L end 1113 2770 a 1113 2770 a SDict begin [ /Subtype /Link /Dest (subsection.5.5.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1113 2770 a Black 76 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) p Black 129 w(76)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2883 a SDict begin H.S end 420 2883 a FK(5.5.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(BCHCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1090 2883 a SDict begin 13.6 H.L end 1090 2883 a 1090 2883 a SDict begin [ /Subtype /Link /Dest (subsection.5.5.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1090 2883 a Black 30 w FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)p Black 129 w(77)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2995 a SDict begin H.S end 420 2995 a FK(5.5.5)p 0.0 0.0 1.0 TeXcolorrgb 110 w(ReedSolomonCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1415 2995 a SDict begin 13.6 H.L end 1415 2995 a 1415 2995 a SDict begin [ /Subtype /Link /Dest (subsection.5.5.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1415 2995 a Black 46 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(78)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3108 a SDict begin H.S end 420 3108 a FK(5.5.6)p 0.0 0.0 1.0 TeXcolorrgb 110 w(QRCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1029 3108 a SDict begin 13.6 H.L end 1029 3108 a 1029 3108 a SDict begin [ /Subtype /Link /Dest (subsection.5.5.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1029 3108 a Black 91 w FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)p Black 129 w(78)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3221 a SDict begin H.S end 420 3221 a FK(5.5.7)p 0.0 0.0 1.0 TeXcolorrgb 110 w(QQRCodeNC)p 0.0236 0.0894 0.6179 TeXcolorrgb 1222 3221 a SDict begin 13.6 H.L end 1222 3221 a 1222 3221 a SDict begin [ /Subtype /Link /Dest (subsection.5.5.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1222 3221 a Black 35 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(79)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3334 a SDict begin H.S end 420 3334 a FK(5.5.8)p 0.0 0.0 1.0 TeXcolorrgb 110 w(QQRCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1095 3334 a SDict begin 13.6 H.L end 1095 3334 a 1095 3334 a SDict begin [ /Subtype /Link /Dest (subsection.5.5.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1095 3334 a Black 25 w FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)p Black 129 w(79)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3447 a SDict begin H.S end 420 3447 a FK(5.5.9)p 0.0 0.0 1.0 TeXcolorrgb 110 w(FireCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1048 3447 a SDict begin 13.6 H.L end 1048 3447 a 1048 3447 a SDict begin [ /Subtype /Link /Dest (subsection.5.5.9) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1048 3447 a Black 72 w FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)p Black 129 w(79)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3560 a SDict begin H.S end 420 3560 a FK(5.5.10)p 0.0 0.0 1.0 TeXcolorrgb 65 w(WholeSpaceCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1359 3560 a SDict begin 13.6 H.L end 1359 3560 a 1359 3560 a SDict begin [ /Subtype /Link /Dest (subsection.5.5.10) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1359 3560 a Black 34 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(80)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3673 a SDict begin H.S end 420 3673 a FK(5.5.11)p 0.0 0.0 1.0 TeXcolorrgb 65 w(NullCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1063 3673 a SDict begin 13.6 H.L end 1063 3673 a 1063 3673 a SDict begin [ /Subtype /Link /Dest (subsection.5.5.11) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1063 3673 a Black 57 w FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)p Black 129 w(80)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3786 a SDict begin H.S end 420 3786 a FK(5.5.12)p 0.0 0.0 1.0 TeXcolorrgb 65 w(RepetitionCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1278 3786 a SDict begin 13.6 H.L end 1278 3786 a 1278 3786 a SDict begin [ /Subtype /Link /Dest (subsection.5.5.12) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1278 3786 a Black 47 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(80)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3899 a SDict begin H.S end 420 3899 a FK(5.5.13)p 0.0 0.0 1.0 TeXcolorrgb 65 w(CyclicCodes)p 0.0236 0.0894 0.6179 TeXcolorrgb 1173 3899 a SDict begin 13.6 H.L end 1173 3899 a 1173 3899 a SDict begin [ /Subtype /Link /Dest (subsection.5.5.13) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1173 3899 a Black 84 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(81)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4012 a SDict begin H.S end 420 4012 a FK(5.5.14)p 0.0 0.0 1.0 TeXcolorrgb 65 w(NrCyclicCodes)p 0.0236 0.0894 0.6179 TeXcolorrgb 1269 4012 a SDict begin 13.6 H.L end 1269 4012 a 1269 4012 a SDict begin [ /Subtype /Link /Dest (subsection.5.5.14) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1269 4012 a Black 56 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(81)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 4125 a SDict begin H.S end 211 4125 a FK(5.6)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Ev)n(aluation)26 b(Codes)p 0.0236 0.0894 0.6179 TeXcolorrgb 1085 4125 a SDict begin 13.6 H.L end 1085 4125 a 1085 4125 a SDict begin [ /Subtype /Link /Dest (section.5.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1085 4125 a Black 35 w FK(.)46 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(82)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4237 a SDict begin H.S end 420 4237 a FK(5.6.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Ev)n(aluationCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1291 4237 a SDict begin 13.6 H.L end 1291 4237 a 1291 4237 a SDict begin [ /Subtype /Link /Dest (subsection.5.6.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1291 4237 a Black 34 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)h(.)f(.)p Black 129 w(82)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4350 a SDict begin H.S end 420 4350 a FK(5.6.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(GeneralizedReedSolomonCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1852 4350 a SDict begin 13.6 H.L end 1852 4350 a 1852 4350 a SDict begin [ /Subtype /Link /Dest (subsection.5.6.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1852 4350 a Black 87 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(82)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4463 a SDict begin H.S end 420 4463 a FK(5.6.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w (GeneralizedReedMullerCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1771 4463 a SDict begin 13.6 H.L end 1771 4463 a 1771 4463 a SDict begin [ /Subtype /Link /Dest (subsection.5.6.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1771 4463 a Black 31 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(83)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4576 a SDict begin H.S end 420 4576 a FK(5.6.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(T)-7 b(oricPoints)p 0.0236 0.0894 0.6179 TeXcolorrgb 1126 4576 a SDict begin 13.6 H.L end 1126 4576 a 1126 4576 a SDict begin [ /Subtype /Link /Dest (subsection.5.6.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1126 4576 a Black 63 w FK(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)p Black 129 w(84)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4689 a SDict begin H.S end 420 4689 a FK(5.6.5)p 0.0 0.0 1.0 TeXcolorrgb 110 w(T)-7 b(oricCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1091 4689 a SDict begin 13.6 H.L end 1091 4689 a 1091 4689 a SDict begin [ /Subtype /Link /Dest (subsection.5.6.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1091 4689 a Black 29 w FK(.)46 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)h(.)f(.)p Black 129 w(84)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 4802 a SDict begin H.S end 211 4802 a FK(5.7)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Algebraic)26 b(geometric)f(codes)p 0.0236 0.0894 0.6179 TeXcolorrgb 1418 4802 a SDict begin 13.6 H.L end 1418 4802 a 1418 4802 a SDict begin [ /Subtype /Link /Dest (section.5.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1418 4802 a Black 43 w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)p Black 129 w(84)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4915 a SDict begin H.S end 420 4915 a FK(5.7.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Af)n(\002neCurv)o(e)p 0.0236 0.0894 0.6179 TeXcolorrgb 1161 4915 a SDict begin 13.6 H.L end 1161 4915 a 1161 4915 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1161 4915 a Black 28 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)p Black 129 w(84)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5028 a SDict begin H.S end 420 5028 a FK(5.7.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Af)n(\002nePointsOnCurv)o(e)p 0.0236 0.0894 0.6179 TeXcolorrgb 1498 5028 a SDict begin 13.6 H.L end 1498 5028 a 1498 5028 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1498 5028 a Black 32 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(85)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5141 a SDict begin H.S end 420 5141 a FK(5.7.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(GenusCurv)o(e)p 0.0236 0.0894 0.6179 TeXcolorrgb 1162 5141 a SDict begin 13.6 H.L end 1162 5141 a 1162 5141 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1162 5141 a Black 27 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)p Black 129 w(86)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5254 a SDict begin H.S end 420 5254 a FK(5.7.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(GOrbitPoint)p 0.0236 0.0894 0.6179 TeXcolorrgb 1184 5254 a SDict begin 13.6 H.L end 1184 5254 a 1184 5254 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1184 5254 a Black 73 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) p Black 129 w(86)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5367 a SDict begin H.S end 420 5367 a FK(5.7.5)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Di)n(visorOnAf)n(\002neCurv)o(e)p 0.0236 0.0894 0.6179 TeXcolorrgb 1541 5367 a SDict begin 13.6 H.L end 1541 5367 a 1541 5367 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1541 5367 a Black 57 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(87)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5479 a SDict begin H.S end 420 5479 a FK(5.7.6)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Di)n(visorAddition)p 0.0236 0.0894 0.6179 TeXcolorrgb 1328 5479 a SDict begin 13.6 H.L end 1328 5479 a 1328 5479 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1328 5479 a Black 65 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(88)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5592 a SDict begin H.S end 420 5592 a FK(5.7.7)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Di)n(visorDe)o(gree)p 0.0236 0.0894 0.6179 TeXcolorrgb 1266 5592 a SDict begin 13.6 H.L end 1266 5592 a 1266 5592 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1266 5592 a Black 59 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(88)p Black Black Black eop end end %%Page: 8 8 TeXDict begin HPSdict begin 8 7 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.8) cvn H.B /DEST pdfmark end 75 100 a Black 1708 w FE(GU)n(A)l(V)-5 b(A)1723 b FK(8)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 399 a SDict begin H.S end 420 399 a FK(5.7.8)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Di)n(visorNe)o(gate)p 0.0236 0.0894 0.6179 TeXcolorrgb 1260 399 a SDict begin 13.6 H.L end 1260 399 a 1260 399 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1260 399 a Black 65 w FK(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(88)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 511 a SDict begin H.S end 420 511 a FK(5.7.9)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Di)n(visorIsZero)p 0.0236 0.0894 0.6179 TeXcolorrgb 1242 511 a SDict begin 13.6 H.L end 1242 511 a 1242 511 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.9) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1242 511 a Black 83 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(88)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 624 a SDict begin H.S end 420 624 a FK(5.7.10)p 0.0 0.0 1.0 TeXcolorrgb 65 w(Di)n(visorsEqual)p 0.0236 0.0894 0.6179 TeXcolorrgb 1252 624 a SDict begin 13.6 H.L end 1252 624 a 1252 624 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.10) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1252 624 a Black 73 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(89)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 737 a SDict begin H.S end 420 737 a FK(5.7.11)p 0.0 0.0 1.0 TeXcolorrgb 65 w(Di)n(visorGCD)p 0.0236 0.0894 0.6179 TeXcolorrgb 1196 737 a SDict begin 13.6 H.L end 1196 737 a 1196 737 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.11) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1196 737 a Black 61 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(89)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 850 a SDict begin H.S end 420 850 a FK(5.7.12)p 0.0 0.0 1.0 TeXcolorrgb 65 w(Di)n(visorLCM)p 0.0236 0.0894 0.6179 TeXcolorrgb 1202 850 a SDict begin 13.6 H.L end 1202 850 a 1202 850 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.12) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1202 850 a Black 55 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(89)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 963 a SDict begin H.S end 420 963 a FK(5.7.13)p 0.0 0.0 1.0 TeXcolorrgb 65 w(RiemannRochSpaceBasisFunction)q(P1)p 0.0236 0.0894 0.6179 TeXcolorrgb 2088 963 a SDict begin 13.6 H.L end 2088 963 a 2088 963 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.13) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2088 963 a Black 55 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(90)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1076 a SDict begin H.S end 420 1076 a FK(5.7.14)p 0.0 0.0 1.0 TeXcolorrgb 65 w(Di)n(visorOfRationalFunctionP1)p 0.0236 0.0894 0.6179 TeXcolorrgb 1828 1076 a SDict begin 13.6 H.L end 1828 1076 a 1828 1076 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.14) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1828 1076 a Black 42 w FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(91)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1189 a SDict begin H.S end 420 1189 a FK(5.7.15)p 0.0 0.0 1.0 TeXcolorrgb 65 w(RiemannRochSpaceBasisP1)p 0.0236 0.0894 0.6179 TeXcolorrgb 1764 1189 a SDict begin 13.6 H.L end 1764 1189 a 1764 1189 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.15) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1764 1189 a Black 38 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(91)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1302 a SDict begin H.S end 420 1302 a FK(5.7.16)p 0.0 0.0 1.0 TeXcolorrgb 65 w(MoebiusT)m (ransformation)p 0.0236 0.0894 0.6179 TeXcolorrgb 1615 1302 a SDict begin 13.6 H.L end 1615 1302 a 1615 1302 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.16) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1615 1302 a Black 51 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(92)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1415 a SDict begin H.S end 420 1415 a FK(5.7.17)p 0.0 0.0 1.0 TeXcolorrgb 65 w(ActionMoebiusT)m (ransformatio)q(nOnFun)q(ct)q(ion)p 0.0236 0.0894 0.6179 TeXcolorrgb 2296 1415 a SDict begin 13.6 H.L end 2296 1415 a 2296 1415 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.17) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2296 1415 a Black 52 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)h(.)f(.)p Black 129 w(93)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1528 a SDict begin H.S end 420 1528 a FK(5.7.18)p 0.0 0.0 1.0 TeXcolorrgb 65 w(ActionMoebiusT)m(ransformatio)q(nOnDi)n(v)q(iso)q(rP1) p 0.0236 0.0894 0.6179 TeXcolorrgb 2340 1528 a SDict begin 13.6 H.L end 2340 1528 a 2340 1528 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.18) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2340 1528 a Black 76 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(93)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1641 a SDict begin H.S end 420 1641 a FK(5.7.19)p 0.0 0.0 1.0 TeXcolorrgb 65 w(IsActionMoebiusT)m (ransforma)q(tio)q(nOnDi)n(vis)q(or)q(De\002nedP1)p 0.0236 0.0894 0.6179 TeXcolorrgb 2693 1641 a SDict begin 13.6 H.L end 2693 1641 a 2693 1641 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.19) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2693 1641 a Black 64 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(93)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1753 a SDict begin H.S end 420 1753 a FK(5.7.20)p 0.0 0.0 1.0 TeXcolorrgb 65 w(Di)n(visorAutomorphismGroupP1)p 0.0236 0.0894 0.6179 TeXcolorrgb 1883 1753 a SDict begin 13.6 H.L end 1883 1753 a 1883 1753 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.20) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1883 1753 a Black 56 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(94)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1866 a SDict begin H.S end 420 1866 a FK(5.7.21)p 0.0 0.0 1.0 TeXcolorrgb 65 w (MatrixRepresentationOnRie)q(mann)q(RochSpa)q(ce)q(P1)p 0.0236 0.0894 0.6179 TeXcolorrgb 2471 1866 a SDict begin 13.6 H.L end 2471 1866 a 2471 1866 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.21) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2471 1866 a Black 81 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(94)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1979 a SDict begin H.S end 420 1979 a FK(5.7.22)p 0.0 0.0 1.0 TeXcolorrgb 65 w(GoppaCodeClassical)p 0.0236 0.0894 0.6179 TeXcolorrgb 1469 1979 a SDict begin 13.6 H.L end 1469 1979 a 1469 1979 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.22) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1469 1979 a Black 61 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(95)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2092 a SDict begin H.S end 420 2092 a FK(5.7.23)p 0.0 0.0 1.0 TeXcolorrgb 65 w(Ev)n(aluationBi)n(v)n(ariateCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1618 2092 a SDict begin 13.6 H.L end 1618 2092 a 1618 2092 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.23) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1618 2092 a Black 48 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(96)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2205 a SDict begin H.S end 420 2205 a FK(5.7.24)p 0.0 0.0 1.0 TeXcolorrgb 65 w(Ev)n(aluationBi)n(v)n(ariateCodeNC)p 0.0236 0.0894 0.6179 TeXcolorrgb 1745 2205 a SDict begin 13.6 H.L end 1745 2205 a 1745 2205 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.24) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1745 2205 a Black 57 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(96)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2318 a SDict begin H.S end 420 2318 a FK(5.7.25)p 0.0 0.0 1.0 TeXcolorrgb 65 w(OnePointA)l(GCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1372 2318 a SDict begin 13.6 H.L end 1372 2318 a 1372 2318 a SDict begin [ /Subtype /Link /Dest (subsection.5.7.25) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1372 2318 a Black 89 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(97)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 75 2522 a SDict begin H.S end 75 2522 a Fz(6)p 0.0 0.0 1.0 TeXcolorrgb 91 w(Manipulating)24 b(Codes)p 0.0236 0.0894 0.6179 TeXcolorrgb 1002 2522 a SDict begin 13.6 H.L end 1002 2522 a 1002 2522 a SDict begin [ /Subtype /Link /Dest (chapter.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1002 2522 a Black 2657 w Fz(99)p 0.0236 0.0894 0.6179 TeXcolorrgb 211 2635 a SDict begin H.S end 211 2635 a FK(6.1)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Functions)i(that)e (Generate)h(a)e(Ne)n(w)f(Code)i(from)f(a)g(Gi)n(v)o(en)g(Code)p 0.0236 0.0894 0.6179 TeXcolorrgb 2500 2635 a SDict begin 13.6 H.L end 2500 2635 a 2500 2635 a SDict begin [ /Subtype /Link /Dest (section.6.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2500 2635 a Black 52 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(99)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2748 a SDict begin H.S end 420 2748 a FK(6.1.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(ExtendedCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1243 2748 a SDict begin 13.6 H.L end 1243 2748 a 1243 2748 a SDict begin [ /Subtype /Link /Dest (subsection.6.1.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1243 2748 a Black 82 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 129 w(99)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2861 a SDict begin H.S end 420 2861 a FK(6.1.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(PuncturedCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1268 2861 a SDict begin 13.6 H.L end 1268 2861 a 1268 2861 a SDict begin [ /Subtype /Link /Dest (subsection.6.1.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1268 2861 a Black 57 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(100)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2973 a SDict begin H.S end 420 2973 a FK(6.1.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Ev)o(enW)-7 b(eightSubcode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1466 2973 a SDict begin 13.6 H.L end 1466 2973 a 1466 2973 a SDict begin [ /Subtype /Link /Dest (subsection.6.1.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1466 2973 a Black 64 w FK(.)45 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(100)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3086 a SDict begin H.S end 420 3086 a FK(6.1.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(PermutedCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1249 3086 a SDict begin 13.6 H.L end 1249 3086 a 1249 3086 a SDict begin [ /Subtype /Link /Dest (subsection.6.1.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1249 3086 a Black 76 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(101)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3199 a SDict begin H.S end 420 3199 a FK(6.1.5)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Expur)n(gatedCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1316 3199 a SDict begin 13.6 H.L end 1316 3199 a 1316 3199 a SDict begin [ /Subtype /Link /Dest (subsection.6.1.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1316 3199 a Black 77 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(101)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3312 a SDict begin H.S end 420 3312 a FK(6.1.6)p 0.0 0.0 1.0 TeXcolorrgb 110 w(AugmentedCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1324 3312 a SDict begin 13.6 H.L end 1324 3312 a 1324 3312 a SDict begin [ /Subtype /Link /Dest (subsection.6.1.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1324 3312 a Black 69 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(102)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3425 a SDict begin H.S end 420 3425 a FK(6.1.7)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Remo)o(v)o(edElementsCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1584 3425 a SDict begin 13.6 H.L end 1584 3425 a 1584 3425 a SDict begin [ /Subtype /Link /Dest (subsection.6.1.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1584 3425 a Black 82 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(102)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3538 a SDict begin H.S end 420 3538 a FK(6.1.8)p 0.0 0.0 1.0 TeXcolorrgb 110 w(AddedElementsCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1480 3538 a SDict begin 13.6 H.L end 1480 3538 a 1480 3538 a SDict begin [ /Subtype /Link /Dest (subsection.6.1.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1480 3538 a Black 50 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(103)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3651 a SDict begin H.S end 420 3651 a FK(6.1.9)p 0.0 0.0 1.0 TeXcolorrgb 110 w(ShortenedCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1268 3651 a SDict begin 13.6 H.L end 1268 3651 a 1268 3651 a SDict begin [ /Subtype /Link /Dest (subsection.6.1.9) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1268 3651 a Black 57 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(103)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3764 a SDict begin H.S end 420 3764 a FK(6.1.10)p 0.0 0.0 1.0 TeXcolorrgb 65 w(LengthenedCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1328 3764 a SDict begin 13.6 H.L end 1328 3764 a 1328 3764 a SDict begin [ /Subtype /Link /Dest (subsection.6.1.10) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1328 3764 a Black 65 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(104)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3877 a SDict begin H.S end 420 3877 a FK(6.1.11)p 0.0 0.0 1.0 TeXcolorrgb 65 w(ResidueCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1193 3877 a SDict begin 13.6 H.L end 1193 3877 a 1193 3877 a SDict begin [ /Subtype /Link /Dest (subsection.6.1.11) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1193 3877 a Black 64 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(105)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3990 a SDict begin H.S end 420 3990 a FK(6.1.12)p 0.0 0.0 1.0 TeXcolorrgb 65 w(ConstructionBCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1429 3990 a SDict begin 13.6 H.L end 1429 3990 a 1429 3990 a SDict begin [ /Subtype /Link /Dest (subsection.6.1.12) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1429 3990 a Black 32 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(105)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4103 a SDict begin H.S end 420 4103 a FK(6.1.13)p 0.0 0.0 1.0 TeXcolorrgb 65 w(DualCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1078 4103 a SDict begin 13.6 H.L end 1078 4103 a 1078 4103 a SDict begin [ /Subtype /Link /Dest (subsection.6.1.13) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1078 4103 a Black 42 w FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)p Black 84 w(105)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4215 a SDict begin H.S end 420 4215 a FK(6.1.14)p 0.0 0.0 1.0 TeXcolorrgb 65 w(Con)l(v)o(ersionFieldCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1499 4215 a SDict begin 13.6 H.L end 1499 4215 a 1499 4215 a SDict begin [ /Subtype /Link /Dest (subsection.6.1.14) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1499 4215 a Black 31 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(106)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4328 a SDict begin H.S end 420 4328 a FK(6.1.15)p 0.0 0.0 1.0 TeXcolorrgb 65 w(T)m(raceCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1105 4328 a SDict begin 13.6 H.L end 1105 4328 a 1105 4328 a SDict begin [ /Subtype /Link /Dest (subsection.6.1.15) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1105 4328 a Black 84 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)p Black 84 w(106)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4441 a SDict begin H.S end 420 4441 a FK(6.1.16)p 0.0 0.0 1.0 TeXcolorrgb 65 w(CosetCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1108 4441 a SDict begin 13.6 H.L end 1108 4441 a 1108 4441 a SDict begin [ /Subtype /Link /Dest (subsection.6.1.16) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1108 4441 a Black 81 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) p Black 84 w(107)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4554 a SDict begin H.S end 420 4554 a FK(6.1.17)p 0.0 0.0 1.0 TeXcolorrgb 65 w(ConstantW)-7 b(eightSubcode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1602 4554 a SDict begin 13.6 H.L end 1602 4554 a 1602 4554 a SDict begin [ /Subtype /Link /Dest (subsection.6.1.17) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1602 4554 a Black 64 w FK(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(107)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4667 a SDict begin H.S end 420 4667 a FK(6.1.18)p 0.0 0.0 1.0 TeXcolorrgb 65 w(StandardF)o(ormCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1419 4667 a SDict begin 13.6 H.L end 1419 4667 a 1419 4667 a SDict begin [ /Subtype /Link /Dest (subsection.6.1.18) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1419 4667 a Black 42 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(108)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4780 a SDict begin H.S end 420 4780 a FK(6.1.19)p 0.0 0.0 1.0 TeXcolorrgb 65 w(Piece)n(wiseConstantCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1583 4780 a SDict begin 13.6 H.L end 1583 4780 a 1583 4780 a SDict begin [ /Subtype /Link /Dest (subsection.6.1.19) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1583 4780 a Black 83 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(108)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 4893 a SDict begin H.S end 211 4893 a FK(6.2)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Functions)26 b(that)e(Generate)h(a)e(Ne)n(w)f(Code)i(from)f(T)-7 b(w)o(o)22 b(Gi)n(v)o(en)h(Codes)p 0.0236 0.0894 0.6179 TeXcolorrgb 2653 4893 a SDict begin 13.6 H.L end 2653 4893 a 2653 4893 a SDict begin [ /Subtype /Link /Dest (section.6.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2653 4893 a Black 36 w FK(.)45 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)p Black 84 w(109)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5006 a SDict begin H.S end 420 5006 a FK(6.2.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(DirectSumCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1295 5006 a SDict begin 13.6 H.L end 1295 5006 a 1295 5006 a SDict begin [ /Subtype /Link /Dest (subsection.6.2.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1295 5006 a Black 30 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(109)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5119 a SDict begin H.S end 420 5119 a FK(6.2.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(UUVCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1100 5119 a SDict begin 13.6 H.L end 1100 5119 a 1100 5119 a SDict begin [ /Subtype /Link /Dest (subsection.6.2.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1100 5119 a Black 89 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) p Black 84 w(109)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5232 a SDict begin H.S end 420 5232 a FK(6.2.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(DirectProductCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1409 5232 a SDict begin 13.6 H.L end 1409 5232 a 1409 5232 a SDict begin [ /Subtype /Link /Dest (subsection.6.2.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1409 5232 a Black 52 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(110)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5345 a SDict begin H.S end 420 5345 a FK(6.2.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(IntersectionCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1327 5345 a SDict begin 13.6 H.L end 1327 5345 a 1327 5345 a SDict begin [ /Subtype /Link /Dest (subsection.6.2.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1327 5345 a Black 66 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(110)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5457 a SDict begin H.S end 420 5457 a FK(6.2.5)p 0.0 0.0 1.0 TeXcolorrgb 110 w(UnionCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1128 5457 a SDict begin 13.6 H.L end 1128 5457 a 1128 5457 a SDict begin [ /Subtype /Link /Dest (subsection.6.2.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1128 5457 a Black 61 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) p Black 84 w(111)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5570 a SDict begin H.S end 420 5570 a FK(6.2.6)p 0.0 0.0 1.0 TeXcolorrgb 110 w(ExtendedDirectSumCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1636 5570 a SDict begin 13.6 H.L end 1636 5570 a 1636 5570 a SDict begin [ /Subtype /Link /Dest (subsection.6.2.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1636 5570 a Black 30 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(111)p Black Black Black eop end end %%Page: 9 9 TeXDict begin HPSdict begin 9 8 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.9) cvn H.B /DEST pdfmark end 75 100 a Black 1708 w FE(GU)n(A)l(V)-5 b(A)1723 b FK(9)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 399 a SDict begin H.S end 420 399 a FK(6.2.7)p 0.0 0.0 1.0 TeXcolorrgb 110 w(AmalgamatedDirectSumCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1803 399 a SDict begin 13.6 H.L end 1803 399 a 1803 399 a SDict begin [ /Subtype /Link /Dest (subsection.6.2.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1803 399 a Black 67 w FK(.)46 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(112)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 511 a SDict begin H.S end 420 511 a FK(6.2.8)p 0.0 0.0 1.0 TeXcolorrgb 110 w(BlockwiseDirectSumCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1677 511 a SDict begin 13.6 H.L end 1677 511 a 1677 511 a SDict begin [ /Subtype /Link /Dest (subsection.6.2.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1677 511 a Black 57 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(112)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 75 715 a SDict begin H.S end 75 715 a Fz(7)p 0.0 0.0 1.0 TeXcolorrgb 91 w(Bounds)22 b(on)h(codes,)g (special)i(matrices)g(and)d(miscellaneous)j(functions)p 0.0236 0.0894 0.6179 TeXcolorrgb 2653 715 a SDict begin 13.6 H.L end 2653 715 a 2653 715 a SDict begin [ /Subtype /Link /Dest (chapter.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2653 715 a Black 961 w Fz(114)p 0.0236 0.0894 0.6179 TeXcolorrgb 211 828 a SDict begin H.S end 211 828 a FK(7.1)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Distance)g(bounds)h(on)d(codes)p 0.0236 0.0894 0.6179 TeXcolorrgb 1390 828 a SDict begin 13.6 H.L end 1390 828 a 1390 828 a SDict begin [ /Subtype /Link /Dest (section.7.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1390 828 a Black 71 w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) p Black 84 w(114)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 941 a SDict begin H.S end 420 941 a FK(7.1.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(UpperBoundSingleton)p 0.0236 0.0894 0.6179 TeXcolorrgb 1524 941 a SDict begin 13.6 H.L end 1524 941 a 1524 941 a SDict begin [ /Subtype /Link /Dest (subsection.7.1.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1524 941 a Black 74 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(115)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1054 a SDict begin H.S end 420 1054 a FK(7.1.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(UpperBoundHamming)p 0.0236 0.0894 0.6179 TeXcolorrgb 1541 1054 a SDict begin 13.6 H.L end 1541 1054 a 1541 1054 a SDict begin [ /Subtype /Link /Dest (subsection.7.1.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1541 1054 a Black 57 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(115)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1167 a SDict begin H.S end 420 1167 a FK(7.1.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(UpperBoundJohnson)p 0.0236 0.0894 0.6179 TeXcolorrgb 1473 1167 a SDict begin 13.6 H.L end 1473 1167 a 1473 1167 a SDict begin [ /Subtype /Link /Dest (subsection.7.1.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1473 1167 a Black 57 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(115)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1280 a SDict begin H.S end 420 1280 a FK(7.1.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(UpperBoundPlotkin)p 0.0236 0.0894 0.6179 TeXcolorrgb 1439 1280 a SDict begin 13.6 H.L end 1439 1280 a 1439 1280 a SDict begin [ /Subtype /Link /Dest (subsection.7.1.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1439 1280 a Black 91 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(116)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1393 a SDict begin H.S end 420 1393 a FK(7.1.5)p 0.0 0.0 1.0 TeXcolorrgb 110 w(UpperBoundElias)p 0.0236 0.0894 0.6179 TeXcolorrgb 1359 1393 a SDict begin 13.6 H.L end 1359 1393 a 1359 1393 a SDict begin [ /Subtype /Link /Dest (subsection.7.1.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1359 1393 a Black 34 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(116)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1506 a SDict begin H.S end 420 1506 a FK(7.1.6)p 0.0 0.0 1.0 TeXcolorrgb 110 w(UpperBoundGriesmer)p 0.0236 0.0894 0.6179 TeXcolorrgb 1515 1506 a SDict begin 13.6 H.L end 1515 1506 a 1515 1506 a SDict begin [ /Subtype /Link /Dest (subsection.7.1.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1515 1506 a Black 83 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(117)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1619 a SDict begin H.S end 420 1619 a FK(7.1.7)p 0.0 0.0 1.0 TeXcolorrgb 110 w(IsGriesmerCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1304 1619 a SDict begin 13.6 H.L end 1304 1619 a 1304 1619 a SDict begin [ /Subtype /Link /Dest (subsection.7.1.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1304 1619 a Black 89 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(117)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1731 a SDict begin H.S end 420 1731 a FK(7.1.8)p 0.0 0.0 1.0 TeXcolorrgb 110 w(UpperBound)p 0.0236 0.0894 0.6179 TeXcolorrgb 1178 1731 a SDict begin 13.6 H.L end 1178 1731 a 1178 1731 a SDict begin [ /Subtype /Link /Dest (subsection.7.1.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1178 1731 a Black 79 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(117)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1844 a SDict begin H.S end 420 1844 a FK(7.1.9)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Lo)n(werBoundMinimumDistance)p 0.0236 0.0894 0.6179 TeXcolorrgb 1866 1844 a SDict begin 13.6 H.L end 1866 1844 a 1866 1844 a SDict begin [ /Subtype /Link /Dest (subsection.7.1.9) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1866 1844 a Black 73 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(118)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1957 a SDict begin H.S end 420 1957 a FK(7.1.10)p 0.0 0.0 1.0 TeXcolorrgb 65 w(Lo)n (werBoundGilbertV)-10 b(arshamo)o(v)p 0.0236 0.0894 0.6179 TeXcolorrgb 1849 1957 a SDict begin 13.6 H.L end 1849 1957 a 1849 1957 a SDict begin [ /Subtype /Link /Dest (subsection.7.1.10) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1849 1957 a Black 90 w FK(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(118)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2070 a SDict begin H.S end 420 2070 a FK(7.1.11)p 0.0 0.0 1.0 TeXcolorrgb 65 w(Lo)n(werBoundSphereP)o(acking)p 0.0236 0.0894 0.6179 TeXcolorrgb 1728 2070 a SDict begin 13.6 H.L end 1728 2070 a 1728 2070 a SDict begin [ /Subtype /Link /Dest (subsection.7.1.11) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1728 2070 a Black 74 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(118)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2183 a SDict begin H.S end 420 2183 a FK(7.1.12)p 0.0 0.0 1.0 TeXcolorrgb 65 w(UpperBoundMinimumDistance)p 0.0236 0.0894 0.6179 TeXcolorrgb 1857 2183 a SDict begin 13.6 H.L end 1857 2183 a 1857 2183 a SDict begin [ /Subtype /Link /Dest (subsection.7.1.12) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1857 2183 a Black 82 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(119)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2296 a SDict begin H.S end 420 2296 a FK(7.1.13)p 0.0 0.0 1.0 TeXcolorrgb 65 w (BoundsMinimumDistance)p 0.0236 0.0894 0.6179 TeXcolorrgb 1666 2296 a SDict begin 13.6 H.L end 1666 2296 a 1666 2296 a SDict begin [ /Subtype /Link /Dest (subsection.7.1.13) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1666 2296 a Black 68 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(119)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 2409 a SDict begin H.S end 211 2409 a FK(7.2)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Co)o(v)o(ering)25 b(radius)g(bounds)g(on)f(codes)p 0.0236 0.0894 0.6179 TeXcolorrgb 1652 2409 a SDict begin 13.6 H.L end 1652 2409 a 1652 2409 a SDict begin [ /Subtype /Link /Dest (section.7.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1652 2409 a Black 82 w FK(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(120)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2522 a SDict begin H.S end 420 2522 a FK(7.2.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(BoundsCo)o(v)o(eringRadius)p 0.0236 0.0894 0.6179 TeXcolorrgb 1572 2522 a SDict begin 13.6 H.L end 1572 2522 a 1572 2522 a SDict begin [ /Subtype /Link /Dest (subsection.7.2.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1572 2522 a Black 94 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(120)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2635 a SDict begin H.S end 420 2635 a FK(7.2.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(IncreaseCo)o(v)o(eringRadiusLo)n(werBou)q(nd)p 0.0236 0.0894 0.6179 TeXcolorrgb 2074 2635 a SDict begin 13.6 H.L end 2074 2635 a 2074 2635 a SDict begin [ /Subtype /Link /Dest (subsection.7.2.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2074 2635 a Black 69 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(120)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2748 a SDict begin H.S end 420 2748 a FK(7.2.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Exhausti)n(v)o(eSearchCo)o(v)o(eringRadiu)q(s)p 0.0236 0.0894 0.6179 TeXcolorrgb 1941 2748 a SDict begin 13.6 H.L end 1941 2748 a 1941 2748 a SDict begin [ /Subtype /Link /Dest (subsection.7.2.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1941 2748 a Black 66 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(121)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2861 a SDict begin H.S end 420 2861 a FK(7.2.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(GeneralLo)n(werBoundCo)o(v)o(eringRadius)p 0.0236 0.0894 0.6179 TeXcolorrgb 2059 2861 a SDict begin 13.6 H.L end 2059 2861 a 2059 2861 a SDict begin [ /Subtype /Link /Dest (subsection.7.2.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2059 2861 a Black 84 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(122)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2973 a SDict begin H.S end 420 2973 a FK(7.2.5)p 0.0 0.0 1.0 TeXcolorrgb 110 w(GeneralUpperBoundCo)o(v)o (eringRad)q(iu)q(s)p 0.0236 0.0894 0.6179 TeXcolorrgb 2051 2973 a SDict begin 13.6 H.L end 2051 2973 a 2051 2973 a SDict begin [ /Subtype /Link /Dest (subsection.7.2.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2051 2973 a Black 92 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)h(.)f(.)p Black 84 w(122)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3086 a SDict begin H.S end 420 3086 a FK(7.2.6)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Lo)n(werBoundCo)o(v)o(eringRadiusSphereCov)o(erin)q (g)p 0.0236 0.0894 0.6179 TeXcolorrgb 2359 3086 a SDict begin 13.6 H.L end 2359 3086 a 2359 3086 a SDict begin [ /Subtype /Link /Dest (subsection.7.2.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2359 3086 a Black 57 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(123)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3199 a SDict begin H.S end 420 3199 a FK(7.2.7)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Lo)n(werBoundCo)o(v)o (eringRadiusV)-10 b(anW)j(ee1)p 0.0236 0.0894 0.6179 TeXcolorrgb 2117 3199 a SDict begin 13.6 H.L end 2117 3199 a 2117 3199 a SDict begin [ /Subtype /Link /Dest (subsection.7.2.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2117 3199 a Black 94 w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(123)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3312 a SDict begin H.S end 420 3312 a FK(7.2.8)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Lo)n(werBoundCo)o(v)o (eringRadiusV)-10 b(anW)j(ee2)p 0.0236 0.0894 0.6179 TeXcolorrgb 2117 3312 a SDict begin 13.6 H.L end 2117 3312 a 2117 3312 a SDict begin [ /Subtype /Link /Dest (subsection.7.2.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2117 3312 a Black 94 w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(124)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3425 a SDict begin H.S end 420 3425 a FK(7.2.9)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Lo)n(werBoundCo)o(v)o (eringRadiusCounti)q(ngExc)q(es)q(s)p 0.0236 0.0894 0.6179 TeXcolorrgb 2362 3425 a SDict begin 13.6 H.L end 2362 3425 a 2362 3425 a SDict begin [ /Subtype /Link /Dest (subsection.7.2.9) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2362 3425 a Black 54 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)h(.)f(.)p Black 84 w(124)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3538 a SDict begin H.S end 420 3538 a FK(7.2.10)p 0.0 0.0 1.0 TeXcolorrgb 65 w(Lo)n(werBoundCo)o(v)o(eringRadiusEmbedded)q(1)p 0.0236 0.0894 0.6179 TeXcolorrgb 2205 3538 a SDict begin 13.6 H.L end 2205 3538 a 2205 3538 a SDict begin [ /Subtype /Link /Dest (subsection.7.2.10) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2205 3538 a Black 75 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(125)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3651 a SDict begin H.S end 420 3651 a FK(7.2.11)p 0.0 0.0 1.0 TeXcolorrgb 65 w(Lo)n(werBoundCo)o (v)o(eringRadiusEmbedded)q(2)p 0.0236 0.0894 0.6179 TeXcolorrgb 2205 3651 a SDict begin 13.6 H.L end 2205 3651 a 2205 3651 a SDict begin [ /Subtype /Link /Dest (subsection.7.2.11) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2205 3651 a Black 75 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)h(.)f(.)p Black 84 w(125)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3764 a SDict begin H.S end 420 3764 a FK(7.2.12)p 0.0 0.0 1.0 TeXcolorrgb 65 w(Lo)n(werBoundCo)o(v)o(eringRadiusIndu)q(cti)q(on)p 0.0236 0.0894 0.6179 TeXcolorrgb 2119 3764 a SDict begin 13.6 H.L end 2119 3764 a 2119 3764 a SDict begin [ /Subtype /Link /Dest (subsection.7.2.12) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2119 3764 a Black 92 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(126)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3877 a SDict begin H.S end 420 3877 a FK(7.2.13)p 0.0 0.0 1.0 TeXcolorrgb 65 w(UpperBoundCo)o(v)o(eringRadiusRed)q(un)q(dan)q(c)o(y)p 0.0236 0.0894 0.6179 TeXcolorrgb 2216 3877 a SDict begin 13.6 H.L end 2216 3877 a 2216 3877 a SDict begin [ /Subtype /Link /Dest (subsection.7.2.13) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2216 3877 a Black 64 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(126)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3990 a SDict begin H.S end 420 3990 a FK(7.2.14)p 0.0 0.0 1.0 TeXcolorrgb 65 w(UpperBoundCo)o(v) o(eringRadiusDels)q(art)q(e)p 0.0236 0.0894 0.6179 TeXcolorrgb 2066 3990 a SDict begin 13.6 H.L end 2066 3990 a 2066 3990 a SDict begin [ /Subtype /Link /Dest (subsection.7.2.14) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2066 3990 a Black 77 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)h(.)f(.)p Black 84 w(127)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4103 a SDict begin H.S end 420 4103 a FK(7.2.15)p 0.0 0.0 1.0 TeXcolorrgb 65 w(UpperBoundCo)o(v)o(eringRadiusStre)q(ng)q(th)p 0.0236 0.0894 0.6179 TeXcolorrgb 2071 4103 a SDict begin 13.6 H.L end 2071 4103 a 2071 4103 a SDict begin [ /Subtype /Link /Dest (subsection.7.2.15) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2071 4103 a Black 72 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(127)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4215 a SDict begin H.S end 420 4215 a FK(7.2.16)p 0.0 0.0 1.0 TeXcolorrgb 65 w(UpperBoundCo)o(v)o(eringRadiusGrie)q(smerLike)p 0.0236 0.0894 0.6179 TeXcolorrgb 2267 4215 a SDict begin 13.6 H.L end 2267 4215 a 2267 4215 a SDict begin [ /Subtype /Link /Dest (subsection.7.2.16) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2267 4215 a Black 81 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(127)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4328 a SDict begin H.S end 420 4328 a FK(7.2.17)p 0.0 0.0 1.0 TeXcolorrgb 65 w(UpperBoundCo)o(v)o (eringRadiusCyc)q(lic)q(Code)p 0.0236 0.0894 0.6179 TeXcolorrgb 2192 4328 a SDict begin 13.6 H.L end 2192 4328 a 2192 4328 a SDict begin [ /Subtype /Link /Dest (subsection.7.2.17) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2192 4328 a Black 88 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)h(.)f(.)p Black 84 w(128)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 4441 a SDict begin H.S end 211 4441 a FK(7.3)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Special)25 b(matrices)g(in)e Fy(GU)m(A)-6 b(V)f(A)p 0.0236 0.0894 0.6179 TeXcolorrgb 1429 4441 a SDict begin 13.6 H.L end 1429 4441 a 1429 4441 a SDict begin [ /Subtype /Link /Dest (section.7.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1429 4441 a Black 32 w FK(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(128)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4554 a SDict begin H.S end 420 4554 a FK(7.3.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Kra)o(wtchoukMat)p 0.0236 0.0894 0.6179 TeXcolorrgb 1303 4554 a SDict begin 13.6 H.L end 1303 4554 a 1303 4554 a SDict begin [ /Subtype /Link /Dest (subsection.7.3.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1303 4554 a Black 90 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(129)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4667 a SDict begin H.S end 420 4667 a FK(7.3.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(GrayMat)p 0.0236 0.0894 0.6179 TeXcolorrgb 1038 4667 a SDict begin 13.6 H.L end 1038 4667 a 1038 4667 a SDict begin [ /Subtype /Link /Dest (subsection.7.3.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1038 4667 a Black 82 w FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)p Black 84 w(129)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4780 a SDict begin H.S end 420 4780 a FK(7.3.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Sylv)o(esterMat)p 0.0236 0.0894 0.6179 TeXcolorrgb 1192 4780 a SDict begin 13.6 H.L end 1192 4780 a 1192 4780 a SDict begin [ /Subtype /Link /Dest (subsection.7.3.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1192 4780 a Black 65 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) p Black 84 w(129)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4893 a SDict begin H.S end 420 4893 a FK(7.3.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(HadamardMat)p 0.0236 0.0894 0.6179 TeXcolorrgb 1234 4893 a SDict begin 13.6 H.L end 1234 4893 a 1234 4893 a SDict begin [ /Subtype /Link /Dest (subsection.7.3.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1234 4893 a Black 91 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(130)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5006 a SDict begin H.S end 420 5006 a FK(7.3.5)p 0.0 0.0 1.0 TeXcolorrgb 110 w(V)-10 b(andermondeMat)p 0.0236 0.0894 0.6179 TeXcolorrgb 1359 5006 a SDict begin 13.6 H.L end 1359 5006 a 1359 5006 a SDict begin [ /Subtype /Link /Dest (subsection.7.3.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1359 5006 a Black 34 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(130)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5119 a SDict begin H.S end 420 5119 a FK(7.3.6)p 0.0 0.0 1.0 TeXcolorrgb 110 w(PutStandardF)o(orm)p 0.0236 0.0894 0.6179 TeXcolorrgb 1349 5119 a SDict begin 13.6 H.L end 1349 5119 a 1349 5119 a SDict begin [ /Subtype /Link /Dest (subsection.7.3.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1349 5119 a Black 44 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(131)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5232 a SDict begin H.S end 420 5232 a FK(7.3.7)p 0.0 0.0 1.0 TeXcolorrgb 110 w(IsInStandardF)o(orm)p 0.0236 0.0894 0.6179 TeXcolorrgb 1368 5232 a SDict begin 13.6 H.L end 1368 5232 a 1368 5232 a SDict begin [ /Subtype /Link /Dest (subsection.7.3.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1368 5232 a Black 93 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(132)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5345 a SDict begin H.S end 420 5345 a FK(7.3.8)p 0.0 0.0 1.0 TeXcolorrgb 110 w(PermutedCols)p 0.0236 0.0894 0.6179 TeXcolorrgb 1224 5345 a SDict begin 13.6 H.L end 1224 5345 a 1224 5345 a SDict begin [ /Subtype /Link /Dest (subsection.7.3.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1224 5345 a Black 33 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) p Black 84 w(132)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5457 a SDict begin H.S end 420 5457 a FK(7.3.9)p 0.0 0.0 1.0 TeXcolorrgb 110 w(V)-10 b(erticalCon)l(v)o(ersionFieldMat)p 0.0236 0.0894 0.6179 TeXcolorrgb 1736 5457 a SDict begin 13.6 H.L end 1736 5457 a 1736 5457 a SDict begin [ /Subtype /Link /Dest (subsection.7.3.9) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1736 5457 a Black 66 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(132)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 5570 a SDict begin H.S end 420 5570 a FK(7.3.10)p 0.0 0.0 1.0 TeXcolorrgb 65 w(HorizontalCon)l(v)o(ersionFie)q(ldMat)p 0.0236 0.0894 0.6179 TeXcolorrgb 1842 5570 a SDict begin 13.6 H.L end 1842 5570 a 1842 5570 a SDict begin [ /Subtype /Link /Dest (subsection.7.3.10) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1842 5570 a Black 97 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(133)p Black Black Black eop end end %%Page: 10 10 TeXDict begin HPSdict begin 10 9 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.10) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(10)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 399 a SDict begin H.S end 420 399 a FK(7.3.11)p 0.0 0.0 1.0 TeXcolorrgb 65 w(MOLS)p 0.0236 0.0894 0.6179 TeXcolorrgb 965 399 a SDict begin 13.6 H.L end 965 399 a 965 399 a SDict begin [ /Subtype /Link /Dest (subsection.7.3.11) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 965 399 a Black 87 w FK(.)45 b(.)h(.)f(.)g(.)g(.) g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(133)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 511 a SDict begin H.S end 420 511 a FK(7.3.12)p 0.0 0.0 1.0 TeXcolorrgb 65 w(IsLatinSquare)p 0.0236 0.0894 0.6179 TeXcolorrgb 1218 511 a SDict begin 13.6 H.L end 1218 511 a 1218 511 a SDict begin [ /Subtype /Link /Dest (subsection.7.3.12) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1218 511 a Black 39 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(134)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 624 a SDict begin H.S end 420 624 a FK(7.3.13)p 0.0 0.0 1.0 TeXcolorrgb 65 w(AreMOLS)p 0.0236 0.0894 0.6179 TeXcolorrgb 1101 624 a SDict begin 13.6 H.L end 1101 624 a 1101 624 a SDict begin [ /Subtype /Link /Dest (subsection.7.3.13) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1101 624 a Black 88 w FK(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(134)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 737 a SDict begin H.S end 211 737 a FK(7.4)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Some)23 b(functions)j(related)f(to)f(the)g(norm)f(of)h(a)f(code)p 0.0236 0.0894 0.6179 TeXcolorrgb 2079 737 a SDict begin 13.6 H.L end 2079 737 a 2079 737 a SDict begin [ /Subtype /Link /Dest (section.7.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2079 737 a Black 64 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(135)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 850 a SDict begin H.S end 420 850 a FK(7.4.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(CoordinateNorm)p 0.0236 0.0894 0.6179 TeXcolorrgb 1324 850 a SDict begin 13.6 H.L end 1324 850 a 1324 850 a SDict begin [ /Subtype /Link /Dest (subsection.7.4.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1324 850 a Black 69 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(135)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 963 a SDict begin H.S end 420 963 a FK(7.4.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(CodeNorm)p 0.0236 0.0894 0.6179 TeXcolorrgb 1114 963 a SDict begin 13.6 H.L end 1114 963 a 1114 963 a SDict begin [ /Subtype /Link /Dest (subsection.7.4.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1114 963 a Black 75 w FK(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(135)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1076 a SDict begin H.S end 420 1076 a FK(7.4.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(IsCoordinateAcceptabl)q(e)p 0.0236 0.0894 0.6179 TeXcolorrgb 1584 1076 a SDict begin 13.6 H.L end 1584 1076 a 1584 1076 a SDict begin [ /Subtype /Link /Dest (subsection.7.4.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1584 1076 a Black 82 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(135)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1189 a SDict begin H.S end 420 1189 a FK(7.4.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(GeneralizedCodeNorm)p 0.0236 0.0894 0.6179 TeXcolorrgb 1550 1189 a SDict begin 13.6 H.L end 1550 1189 a 1550 1189 a SDict begin [ /Subtype /Link /Dest (subsection.7.4.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1550 1189 a Black 48 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(136)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1302 a SDict begin H.S end 420 1302 a FK(7.4.5)p 0.0 0.0 1.0 TeXcolorrgb 110 w(IsNormalCode)p 0.0236 0.0894 0.6179 TeXcolorrgb 1244 1302 a SDict begin 13.6 H.L end 1244 1302 a 1244 1302 a SDict begin [ /Subtype /Link /Dest (subsection.7.4.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1244 1302 a Black 81 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(136)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 1415 a SDict begin H.S end 211 1415 a FK(7.5)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Miscellaneous)27 b(functions)p 0.0236 0.0894 0.6179 TeXcolorrgb 1329 1415 a SDict begin 13.6 H.L end 1329 1415 a 1329 1415 a SDict begin [ /Subtype /Link /Dest (section.7.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1329 1415 a Black 64 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) h(.)f(.)p Black 84 w(136)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1528 a SDict begin H.S end 420 1528 a FK(7.5.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(CodeW)-7 b(eightEnumerator)p 0.0236 0.0894 0.6179 TeXcolorrgb 1588 1528 a SDict begin 13.6 H.L end 1588 1528 a 1588 1528 a SDict begin [ /Subtype /Link /Dest (subsection.7.5.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1588 1528 a Black 78 w FK(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(136)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1641 a SDict begin H.S end 420 1641 a FK(7.5.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(CodeDistanceEnumerator)p 0.0236 0.0894 0.6179 TeXcolorrgb 1645 1641 a SDict begin 13.6 H.L end 1645 1641 a 1645 1641 a SDict begin [ /Subtype /Link /Dest (subsection.7.5.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1645 1641 a Black 89 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(137)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1753 a SDict begin H.S end 420 1753 a FK(7.5.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(CodeMacW)l (illiamsT)m(ransform)p 0.0236 0.0894 0.6179 TeXcolorrgb 1770 1753 a SDict begin 13.6 H.L end 1770 1753 a 1770 1753 a SDict begin [ /Subtype /Link /Dest (subsection.7.5.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1770 1753 a Black 32 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(137)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1866 a SDict begin H.S end 420 1866 a FK(7.5.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(CodeDensity)p 0.0236 0.0894 0.6179 TeXcolorrgb 1183 1866 a SDict begin 13.6 H.L end 1183 1866 a 1183 1866 a SDict begin [ /Subtype /Link /Dest (subsection.7.5.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1183 1866 a Black 74 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(137)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 1979 a SDict begin H.S end 420 1979 a FK(7.5.5)p 0.0 0.0 1.0 TeXcolorrgb 110 w(SphereContent)p 0.0236 0.0894 0.6179 TeXcolorrgb 1248 1979 a SDict begin 13.6 H.L end 1248 1979 a 1248 1979 a SDict begin [ /Subtype /Link /Dest (subsection.7.5.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1248 1979 a Black 77 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(138)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2092 a SDict begin H.S end 420 2092 a FK(7.5.6)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Kra)o(wtchouk)p 0.0236 0.0894 0.6179 TeXcolorrgb 1157 2092 a SDict begin 13.6 H.L end 1157 2092 a 1157 2092 a SDict begin [ /Subtype /Link /Dest (subsection.7.5.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1157 2092 a Black 32 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(138)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2205 a SDict begin H.S end 420 2205 a FK(7.5.7)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Primiti)n(v)o (eUnityRoot)p 0.0236 0.0894 0.6179 TeXcolorrgb 1427 2205 a SDict begin 13.6 H.L end 1427 2205 a 1427 2205 a SDict begin [ /Subtype /Link /Dest (subsection.7.5.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1427 2205 a Black 34 w FK(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(138)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2318 a SDict begin H.S end 420 2318 a FK(7.5.8)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Primiti)n(v)o (ePolynomialsNr)p 0.0236 0.0894 0.6179 TeXcolorrgb 1593 2318 a SDict begin 13.6 H.L end 1593 2318 a 1593 2318 a SDict begin [ /Subtype /Link /Dest (subsection.7.5.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1593 2318 a Black 73 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(139)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2431 a SDict begin H.S end 420 2431 a FK(7.5.9)p 0.0 0.0 1.0 TeXcolorrgb 110 w (IrreduciblePolynomials)q(Nr)p 0.0236 0.0894 0.6179 TeXcolorrgb 1655 2431 a SDict begin 13.6 H.L end 1655 2431 a 1655 2431 a SDict begin [ /Subtype /Link /Dest (subsection.7.5.9) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1655 2431 a Black 79 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(139)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2544 a SDict begin H.S end 420 2544 a FK(7.5.10)p 0.0 0.0 1.0 TeXcolorrgb 65 w (MatrixRepresentationOfElemen)q(t)p 0.0236 0.0894 0.6179 TeXcolorrgb 1897 2544 a SDict begin 13.6 H.L end 1897 2544 a 1897 2544 a SDict begin [ /Subtype /Link /Dest (subsection.7.5.10) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1897 2544 a Black 42 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(139)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2657 a SDict begin H.S end 420 2657 a FK(7.5.11)p 0.0 0.0 1.0 TeXcolorrgb 65 w (ReciprocalPolynomial)p 0.0236 0.0894 0.6179 TeXcolorrgb 1519 2657 a SDict begin 13.6 H.L end 1519 2657 a 1519 2657 a SDict begin [ /Subtype /Link /Dest (subsection.7.5.11) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1519 2657 a Black 79 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(140)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2770 a SDict begin H.S end 420 2770 a FK(7.5.12)p 0.0 0.0 1.0 TeXcolorrgb 65 w(CyclotomicCosets)p 0.0236 0.0894 0.6179 TeXcolorrgb 1374 2770 a SDict begin 13.6 H.L end 1374 2770 a 1374 2770 a SDict begin [ /Subtype /Link /Dest (subsection.7.5.12) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1374 2770 a Black 87 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(140)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2883 a SDict begin H.S end 420 2883 a FK(7.5.13)p 0.0 0.0 1.0 TeXcolorrgb 65 w(W)-7 b(eightHistogram)p 0.0236 0.0894 0.6179 TeXcolorrgb 1352 2883 a SDict begin 13.6 H.L end 1352 2883 a 1352 2883 a SDict begin [ /Subtype /Link /Dest (subsection.7.5.13) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1352 2883 a Black 41 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(141)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 2995 a SDict begin H.S end 420 2995 a FK(7.5.14)p 0.0 0.0 1.0 TeXcolorrgb 65 w(MultiplicityInList)p 0.0236 0.0894 0.6179 TeXcolorrgb 1358 2995 a SDict begin 13.6 H.L end 1358 2995 a 1358 2995 a SDict begin [ /Subtype /Link /Dest (subsection.7.5.14) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1358 2995 a Black 35 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(141)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3108 a SDict begin H.S end 420 3108 a FK(7.5.15)p 0.0 0.0 1.0 TeXcolorrgb 65 w(MostCommonInList)p 0.0236 0.0894 0.6179 TeXcolorrgb 1451 3108 a SDict begin 13.6 H.L end 1451 3108 a 1451 3108 a SDict begin [ /Subtype /Link /Dest (subsection.7.5.15) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1451 3108 a Black 79 w FK(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(141)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3221 a SDict begin H.S end 420 3221 a FK(7.5.16)p 0.0 0.0 1.0 TeXcolorrgb 65 w(RotateList)p 0.0236 0.0894 0.6179 TeXcolorrgb 1088 3221 a SDict begin 13.6 H.L end 1088 3221 a 1088 3221 a SDict begin [ /Subtype /Link /Dest (subsection.7.5.16) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1088 3221 a Black 32 w FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.) f(.)p Black 84 w(142)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3334 a SDict begin H.S end 420 3334 a FK(7.5.17)p 0.0 0.0 1.0 TeXcolorrgb 65 w(CirculantMatrix)p 0.0236 0.0894 0.6179 TeXcolorrgb 1293 3334 a SDict begin 13.6 H.L end 1293 3334 a 1293 3334 a SDict begin [ /Subtype /Link /Dest (subsection.7.5.17) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1293 3334 a Black 32 w FK(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(142)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 211 3447 a SDict begin H.S end 211 3447 a FK(7.6)p 0.0 0.0 1.0 TeXcolorrgb 96 w(Miscellaneous)27 b(polynomial)f(functions)p 0.0236 0.0894 0.6179 TeXcolorrgb 1766 3447 a SDict begin 13.6 H.L end 1766 3447 a 1766 3447 a SDict begin [ /Subtype /Link /Dest (section.7.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1766 3447 a Black 36 w FK(.)45 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(142)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3560 a SDict begin H.S end 420 3560 a FK(7.6.1)p 0.0 0.0 1.0 TeXcolorrgb 110 w(MatrixT)m(ransformationOnMulti)n(v)o(aria)q(tePoly)q(no)q(mial)p 0.0236 0.0894 0.6179 TeXcolorrgb 2519 3560 a SDict begin 13.6 H.L end 2519 3560 a 2519 3560 a SDict begin [ /Subtype /Link /Dest (subsection.7.6.1) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 2519 3560 a Black 33 w FK(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(142)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3673 a SDict begin H.S end 420 3673 a FK(7.6.2)p 0.0 0.0 1.0 TeXcolorrgb 110 w(De)o(greeMulti)n(v)n(ariatePolynomial)p 0.0236 0.0894 0.6179 TeXcolorrgb 1831 3673 a SDict begin 13.6 H.L end 1831 3673 a 1831 3673 a SDict begin [ /Subtype /Link /Dest (subsection.7.6.2) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1831 3673 a Black 39 w FK(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(142)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3786 a SDict begin H.S end 420 3786 a FK(7.6.3)p 0.0 0.0 1.0 TeXcolorrgb 110 w(De)o(greesMulti)n(v)n(ariatePolynomia)q(l)p 0.0236 0.0894 0.6179 TeXcolorrgb 1866 3786 a SDict begin 13.6 H.L end 1866 3786 a 1866 3786 a SDict begin [ /Subtype /Link /Dest (subsection.7.6.3) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1866 3786 a Black 73 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(143)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 3899 a SDict begin H.S end 420 3899 a FK(7.6.4)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Coef)n (\002cientMulti)n(v)n(ariatePolyno)q(mial)p 0.0236 0.0894 0.6179 TeXcolorrgb 1971 3899 a SDict begin 13.6 H.L end 1971 3899 a 1971 3899 a SDict begin [ /Subtype /Link /Dest (subsection.7.6.4) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1971 3899 a Black 36 w FK(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(143)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4012 a SDict begin H.S end 420 4012 a FK(7.6.5)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Solv)o(eLinearSystem)p 0.0236 0.0894 0.6179 TeXcolorrgb 1419 4012 a SDict begin 13.6 H.L end 1419 4012 a 1419 4012 a SDict begin [ /Subtype /Link /Dest (subsection.7.6.5) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1419 4012 a Black 42 w FK(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)h(.)f(.)p Black 84 w(144)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4125 a SDict begin H.S end 420 4125 a FK(7.6.6)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Gua)n(v)n(aV)-10 b(ersion)p 0.0236 0.0894 0.6179 TeXcolorrgb 1219 4125 a SDict begin 13.6 H.L end 1219 4125 a 1219 4125 a SDict begin [ /Subtype /Link /Dest (subsection.7.6.6) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1219 4125 a Black 38 w FK(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)h(.)f(.)p Black 84 w(144)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4237 a SDict begin H.S end 420 4237 a FK(7.6.7)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Coef)n(\002cientT)-7 b(oPolynomial)p 0.0236 0.0894 0.6179 TeXcolorrgb 1622 4237 a SDict begin 13.6 H.L end 1622 4237 a 1622 4237 a SDict begin [ /Subtype /Link /Dest (subsection.7.6.7) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1622 4237 a Black 44 w FK(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)h(.)f(.)p Black 84 w(144)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4350 a SDict begin H.S end 420 4350 a FK(7.6.8)p 0.0 0.0 1.0 TeXcolorrgb 110 w(Coef)n(\002cientT)-7 b(oPolynomial)p 0.0236 0.0894 0.6179 TeXcolorrgb 1622 4350 a SDict begin 13.6 H.L end 1622 4350 a 1622 4350 a SDict begin [ /Subtype /Link /Dest (subsection.7.6.8) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1622 4350 a Black 44 w FK(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)h(.)f(.)p Black 84 w(145)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4463 a SDict begin H.S end 420 4463 a FK(7.6.9)p 0.0 0.0 1.0 TeXcolorrgb 110 w(De)o(greesMonomialT)-6 b(erm)p 0.0236 0.0894 0.6179 TeXcolorrgb 1574 4463 a SDict begin 13.6 H.L end 1574 4463 a 1574 4463 a SDict begin [ /Subtype /Link /Dest (subsection.7.6.9) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1574 4463 a Black 92 w FK(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(145)p Black 0.0236 0.0894 0.6179 TeXcolorrgb 420 4576 a SDict begin H.S end 420 4576 a FK(7.6.10)p 0.0 0.0 1.0 TeXcolorrgb 65 w(Di)n(visorsMulti)n(v)n(ariatePolyno)q(mial)p 0.0236 0.0894 0.6179 TeXcolorrgb 1875 4576 a SDict begin 13.6 H.L end 1875 4576 a 1875 4576 a SDict begin [ /Subtype /Link /Dest (subsection.7.6.10) cvn /H /I /Border [0 0 0] /Color [1 0 0] H.B /ANN pdfmark end 1875 4576 a Black 64 w FK(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)p Black 84 w(146)p Black Black Black eop end end %%Page: 11 11 TeXDict begin HPSdict begin 11 10 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.11) cvn H.B /DEST pdfmark end 75 100 a Black Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (chapter.1) cvn H.B /DEST pdfmark end 75 307 a 714 x Fw(Chapter)44 b(1)p 0.0 0.0 1.0 TeXcolorrgb 75 1436 a FA(Intr)l(oduction)p Black 75 1771 a SDict begin H.S end 75 1771 a 75 1771 a SDict begin 13.6 H.A end 75 1771 a 75 1771 a SDict begin [ /View [/XYZ H.V] /Dest (section.1.1) cvn H.B /DEST pdfmark end 75 1771 a 147 x FM(1.1)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Intr)n(oduction)31 b(to)e(the)h FL(GU)-5 b(A)c(V)g(A)29 b FM(package)p Black 75 2125 a FK(This)f(is)h(the)f (manual)i(of)e(the)h Fy(GAP)d FK(package)31 b Fy(GU)m(A)-6 b(V)f(A)26 b FK(that)j(pro)o(vides)i(implementations)g(of)e(some)f (routines)j(de-)75 2238 y(signed)i(for)e(the)g(construction)k(and)c (analysis)j(of)d(in)g(the)g(theory)h(of)f(error)n(-correcting)36 b(codes.)53 b(This)31 b(v)o(ersion)h(of)75 2351 y Fy(GU)m(A)-6 b(V)f(A)22 b FK(requires)j Fy(GAP)d FK(4.4.5)h(or)h(later)-5 b(.)216 2464 y(The)23 b(functions)j(can)e(be)g(di)n(vided)h(into)f (three)h(subcate)o(gories:)p Black 211 2651 a Fv(\017)p Black 46 w FK(Construction)i(of)d(codes:)32 b Fy(GU)m(A)-6 b(V)f(A)22 b FK(can)j(construct)i(unrestricted,)g(linear)e(and)g(c)o (yclic)g(codes.)32 b(Information)302 2764 y(about)21 b(the)g(code,)g(such)g(as)f(operations)i(applicable)h(to)d(the)g(code,) i(is)d(stored)j(in)e(a)f(record-lik)o(e)k(data)e(structure)302 2877 y(called)k(a)e Fy(GAP)f FK(object.)p Black 211 3065 a Fv(\017)p Black 46 w FK(Manipulations)34 b(of)c(codes:)44 b(Manipulation)33 b(transforms)f(one)f(code)g(into)f(another)l(,)k(or)c (constructs)j(a)d(ne)n(w)302 3178 y(code)24 b(from)e(tw)o(o)h(codes.)29 b(The)22 b(ne)n(w)h(code)g(can)g(pro\002t)g(from)f(the)h(data)h(in)e (the)h(record)h(of)f(the)g(old)g(code\(s\),)h(so)302 3290 y(in)g(these)g(cases)h(calculation)h(time)e(decreases.)p Black 211 3478 a Fv(\017)p Black 46 w FK(Computations)h(of)d (information)j(about)f(codes:)29 b Fy(GU)m(A)-6 b(V)f(A)21 b FK(can)i(calculate)h(important)g(parameters)h(of)d(codes)302 3591 y(quickly)-6 b(.)31 b(The)23 b(results)i(are)f(stored)h(in)e(the)h (codes')h(object)g(components.)216 3779 y(Except)30 b(for)f(the)h (automorphism)i(group)e(and)g(isomorphism)h(testing)g(functions,)i (which)c(mak)o(e)h(use)f(of)h(J.S.)75 3892 y(Leon')-5 b(s)21 b(programs)h(\(see)f([)p 0.0236 0.6179 0.0894 TeXcolorrgb 901 3894 a SDict begin H.S end 901 3894 a 0.0236 0.6179 0.0894 TeXcolorrgb -2 x FK(Leo91)p 0.0236 0.6179 0.0894 TeXcolorrgb 1132 3830 a SDict begin H.R end 1132 3830 a 1132 3892 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.Leon91) cvn H.B /ANN pdfmark end 1132 3892 a Black 2 w FK(])f(and)h(the)g(documentation)j(in)c(the)h(')-5 b(src')21 b(subdirectory)j(of)d(the)g('gua)n(v)n(a')h(directory)75 4004 y(for)h(some)g(details\),)i Fy(GU)m(A)-6 b(V)f(A)21 b FK(is)i(written)h(in)f(the)g Fy(GAP)e FK(language,)k(and)f(runs)f(on) h(an)o(y)f(system)g(supporting)k Fy(GAP)p FK(4.3)75 4117 y(and)d(abo)o(v)o(e.)29 b(Se)n(v)o(eral)24 b(algorithms)i(that)e(need)g (the)g(speed)h(were)e(inte)o(grated)j(in)d(the)h Fy(GAP)e FK(k)o(ernel.)216 4230 y(Good)36 b(general)h(references)h(for)e(error)n (-correcting)k(codes)d(and)f(the)g(technical)i(terms)d(in)h(this)g (manual)g(are)75 4343 y(MacW)l(illiams)25 b(and)f(Sloane)g([)p 0.0236 0.6179 0.0894 TeXcolorrgb 1043 4344 a SDict begin H.S end 1043 4344 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(MS83)p 0.0236 0.6179 0.0894 TeXcolorrgb 1265 4281 a SDict begin H.R end 1265 4281 a 1265 4343 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.MS83) cvn H.B /ANN pdfmark end 1265 4343 a Black 1 w FK(])f(Huf)n(fman)g(and)h(Pless)g([)p 0.0236 0.6179 0.0894 TeXcolorrgb 2061 4344 a SDict begin H.S end 2061 4344 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(HP03)p 0.0236 0.6179 0.0894 TeXcolorrgb 2268 4281 a SDict begin H.R end 2268 4281 a 2268 4343 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.HP03) cvn H.B /ANN pdfmark end 2268 4343 a Black FK(].)75 4501 y SDict begin H.S end 75 4501 a 75 4501 a SDict begin 13.6 H.A end 75 4501 a 75 4501 a SDict begin [ /View [/XYZ H.V] /Dest (section.1.2) cvn H.B /DEST pdfmark end 75 4501 a 135 x FM(1.2)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Installing)30 b FL(GU)-5 b(A)c(V)g(A)p Black 75 4843 a FK(T)i(o)26 b(install)j Fy(GU)m(A)-6 b(V)f(A)25 b FK(\(as)j(a)f Fy(GAP)e FK(4)i(P)o(ackage\))h(unpack)h(the)f(archi)n (v)o(e)g(\002le)f(in)g(a)g(directory)j(in)d(the)h(`pkg')g(hierarchy)75 4956 y(of)23 b(your)i(v)o(ersion)g(of)e Fy(GAP)f FK(4.)216 5069 y(After)f(unpacking)k Fy(GU)m(A)-6 b(V)f(A)19 b FK(the)j Fy(GAP)p FK(-only)f(part)h(of)f Fy(GU)m(A)-6 b(V)f(A)19 b FK(is)i(installed.)31 b(The)20 b(parts)j(of)e Fy(GU)m(A)-6 b(V)f(A)19 b FK(depending)75 5182 y(on)k(J.)f(Leon')-5 b(s)24 b(backtrack)i(programs)e(package)h(\(for)f(computing)h (automorphism)g(groups\))g(are)e(only)h(a)n(v)n(ailable)h(in)75 5294 y(a)19 b(UNIX)f(en)l(vironment,)24 b(where)c(you)g(should)h (proceed)h(as)e(follo)n(ws:)28 b(Go)19 b(to)g(the)h(ne)n(wly)g(created) h(`gua)n(v)n(a')h(directory)75 5407 y(and)27 b(call)f Ft(`./configure)51 b(/gappath')29 b FK(where)e Ft(/gappath)h FK(is)e(the)h(path)g(to)f(the)g Fy(GAP)f FK(home)h(directory)-6 b(.)40 b(So)25 b(for)75 5520 y(e)o(xample,)f(if)f(you)h(install)h(the)f (package)i(in)d(the)h(main)g(`pkg')g(directory)i(call)p Black 1867 5841 a(11)p Black eop end end %%Page: 12 12 TeXDict begin HPSdict begin 12 11 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.12) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(12)p Black Black Black 168 399 a Ft(./configure)50 b(../..)75 586 y FK(This)28 b(will)g(fetch)h(the)g(architecture)j(type) d(for)f(which)h Fy(GAP)d FK(has)j(been)g(compiled)h(last)f(and)g (create)h(a)d(`Mak)o(e\002le'.)75 699 y(No)n(w)22 b(call)p Black Black 168 887 a Ft(make)75 1074 y FK(to)d(compile)h(the)f(binary) i(and)e(to)g(install)i(it)d(in)h(the)h(appropriate)i(place.)28 b(\(F)o(or)19 b(a)f(windo)n(ws)h(machine)i(with)d(CYGWIN)75 1187 y(installed)23 b(-)e(see)p 0.6179 0.0236 0.0894 TeXcolorrgb 590 1201 a SDict begin H.S end 590 1201 a 0.6179 0.0236 0.0894 TeXcolorrgb -14 x Ft(http://www.cygwin.)q(com)q(/)p 0.6179 0.0236 0.0894 TeXcolorrgb 1604 1128 a SDict begin H.R end 1604 1128 a 1604 1187 a SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (http://www.cygwin.com/) >> /Subtype /Link H.B /ANN pdfmark end 1604 1187 a Black 26 w FK(-)g(instructions)j(for)d(compiling)i(Leon')-5 b(s)22 b(binaries)h(are)e(lik)o(ely)h(to)f(be)75 1300 y(similar)k(to)g(those)h(abo)o(v)o(e.)33 b(On)24 b(a)g(64-bit)j(SUSE)22 b(linux)k(computer)l(,)g(instead)h(of)e(the)g(con\002gure)h(command)f (abo)o(v)o(e)h(-)75 1413 y(which)e(will)f(only)h(compile)h(the)f (32-bit)h(binary)g(-)e(type)p Black Black 168 1601 a Ft(./configure)50 b(../..)e(--enable-libsuffix)q(=6)q(4)168 1714 y(make)75 1901 y FK(to)36 b(compile)i(Leon')-5 b(s)37 b(program)h(as)e(a)g(64)h(bit)f(nati)n(v)o(e)i(binary)-6 b(.)69 b(This)36 b(may)g(also)h(w)o(ork)g(for)g(other)g(64-bit)h(linux) 75 2014 y(distrib)n(utions)28 b(as)23 b(well.\))216 2127 y(Starting)k(with)e(v)o(ersion)i(2.5,)f(you)g(must)g(also)g(install)h (the)f(GAP)e(package)k Fy(SONA)-10 b(T)g(A)23 b FK(to)j(load)g(GAP)-10 b(.)23 b(Y)-10 b(ou)26 b(can)75 2240 y(do)n(wnload)f(this)f(from)g(the) f Fy(GAP)f FK(website)i(and)g(unpack)i(it)d(in)g(the)h(`pkg')h (subdirectory)-6 b(.)216 2353 y(This)33 b(completes)i(the)e (installation)j(of)d Fy(GU)m(A)-6 b(V)f(A)31 b FK(for)i(a)f(single)i (architecture.)60 b(If)33 b(you)g(use)g(this)h(installation)75 2466 y(of)g Fy(GU)m(A)-6 b(V)f(A)33 b FK(on)h(dif)n(ferent)i(hardw)o (are)g(platforms)g(you)f(will)f(ha)n(v)o(e)h(to)f(compile)h(the)g (binary)g(for)g(each)g(platform)75 2579 y(separately)-6 b(.)75 2742 y SDict begin H.S end 75 2742 a 75 2742 a SDict begin 13.6 H.A end 75 2742 a 75 2742 a SDict begin [ /View [/XYZ H.V] /Dest (section.1.3) cvn H.B /DEST pdfmark end 75 2742 a 129 x FM(1.3)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Loading)30 b FL(GU)-5 b(A)c(V)g(A)p Black 75 3078 a FK(After)28 b(starting)j(up)d Fy(GAP)p FK(,)f(the)h Fy(GU)m(A)-6 b(V)f(A)27 b FK(package)j(needs)g(to)e(be)h(loaded.)45 b(Load)28 b Fy(GU)m(A)-6 b(V)f(A)27 b FK(by)h(typing)i(at)e(the)h Fy(GAP)75 3191 y FK(prompt:)p 75 3289 1648 4 v 1764 3294 a FF(Example)p 2102 3289 V 75 3314 4 25 v 3747 3314 V 75 3413 4 100 v 188 3384 a(gap>)44 b(LoadPackage\()i("guava",)f("2.1")f (\);)p 3747 3413 V 75 3438 4 25 v 3747 3438 V 75 3441 3675 4 v 75 3629 a FK(If)27 b Fy(GU)m(A)-6 b(V)f(A)25 b FK(isn')n(t)j(already)h(in)e(memory)-6 b(,)29 b(it)d(is)h(loaded)i (and)f(the)f(author)i(information)g(is)e(displayed.)43 b(If)27 b(you)g(are)h(a)75 3742 y(frequent)e(user)e(of)f Fy(GU)m(A)-6 b(V)f(A)p FK(,)22 b(you)i(might)g(consider)h(putting)h (this)e(line)g(in)f(your)i(`.gaprc')f(\002le.)p Black Black eop end end %%Page: 13 13 TeXDict begin HPSdict begin 13 12 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.13) cvn H.B /DEST pdfmark end 75 100 a Black Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (chapter.2) cvn H.B /DEST pdfmark end 75 307 a 714 x Fw(Chapter)44 b(2)p 0.0 0.0 1.0 TeXcolorrgb 75 1436 a FA(Coding)52 b(theory)g(functions)f(in)h FN(GAP)p Black 75 1881 a FK(This)31 b(chapter)h(will)f(recall)h(from)f(the)g Fy(GAP)p FK(4.4.5)f(manual)h(some)g(of)g(the)g Fy(GAP)e FK(coding)k(theory)f(and)f(\002nite)g(\002eld)75 1994 y(functions)e(useful)e(for)f(coding)i(theory)-6 b(.)37 b(Some)26 b(of)g(these)h(functions)h(are)e(partially)j(written)d(in)g (C)f(for)h(speed.)38 b(The)75 2107 y(main)24 b(functions)i(are)p Black 211 2295 a Fv(\017)p Black 46 w Ft(AClosestVectorComb)q(in)q(ati) q(ons)q(Mat)q(FF)q(EVe)q(cFF)q(E)p FK(,)p Black 211 2482 a Fv(\017)p Black 46 w Ft(AClosestVectorComb)q(in)q(ati)q(ons)q(Mat)q (FF)q(EVe)q(cFF)q(ECo)q(or)q(ds)p FK(,)p Black 211 2670 a Fv(\017)p Black 46 w Ft(CosetLeadersMatFFE)q FK(,)p Black 211 2858 a Fv(\017)p Black 46 w Ft(DistancesDistribut)q(io)q(nMa) q(tFF)q(EVe)q(cF)q(FE)p FK(,)p Black 211 3045 a Fv(\017)p Black 46 w Ft(DistancesDistribut)q(io)q(nVe)q(cFF)q(EsV)q(ec)q(FFE)q FK(,)p Black 211 3233 a Fv(\017)p Black 46 w Ft(DistanceVecFFE)i FK(and)c Ft(WeightVecFFE)p FK(,)p Black 211 3421 a Fv(\017)p Black 46 w Ft(ConwayPolynomial)29 b FK(and)24 b Ft(IsCheapConwayPolyno) q(mia)q(l)p FK(,)p Black 211 3608 a Fv(\017)p Black 46 w Ft(IsPrimitivePolynom)q(ia)q(l)p FK(,)k(and)c Ft(RandomPrimitivePo)q (lyn)q(omi)q(al)p FK(.)75 3796 y(Ho)n(we)n(v)o(er)l(,)f(the)g Fy(GAP)e FK(command)j Ft(PrimitivePolynomial)29 b FK(returns)c(an)e (inte)o(ger)h(primiti)n(v)o(e)g(polynomial)h(not)f(the)75 3909 y(\002nite)g(\002eld)f(kind.)75 4053 y SDict begin H.S end 75 4053 a 75 4053 a SDict begin 13.6 H.A end 75 4053 a 75 4053 a SDict begin [ /View [/XYZ H.V] /Dest (section.2.1) cvn H.B /DEST pdfmark end 75 4053 a 148 x FM(2.1)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Distance)30 b(functions)p Black 75 4297 a SDict begin H.S end 75 4297 a 75 4297 a SDict begin 13.6 H.A end 75 4297 a 75 4297 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.2.1.1) cvn H.B /DEST pdfmark end 75 4297 a 115 x FJ(2.1.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(A)-5 b(ClosestV)-10 b(ectorCombinationsMatFFEV)g(ecFFE)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4586 a Fs(\006)22 b Ft(AClosestVectorCom)q(bin)q(ati)q(ons)q(Ma)q(tFF)q(EVe)q(cFF)q(E\()53 b(mat,)48 b(F,)f(vec,)h(r,)f(st)g(\))544 b Fr(\(function\))p Black 216 4812 a FK(This)21 b(command)h(runs)f(through)i(the)e Ft(F)q FK(-linear)h(combinations)i(of)d(the)g(v)o(ectors)i(in)e(the)g (ro)n(ws)f(of)h(the)g(matrix)h Ft(mat)75 4925 y FK(that)f(can)g(be)f (written)h(as)g(linear)g(combinations)j(of)c(e)o(xactly)i Ft(r)e FK(ro)n(ws)g(\(that)h(is)f(without)h(using)h(zero)f(as)f(a)g (coef)n(\002cient\))75 5038 y(and)29 b(returns)h(a)e(v)o(ector)i(from)f (these)g(that)g(is)g(closest)h(to)f(the)g(v)o(ector)g Ft(vec)q FK(.)43 b(The)29 b(length)h(of)e(the)h(ro)n(ws)f(of)h Ft(mat)g FK(and)75 5150 y(the)i(length)h(of)e Ft(vec)h FK(must)g(be)f(equal,)j(and)e(all)g(elements)h(must)e(lie)h(in)f Ft(F)q FK(.)49 b(The)30 b(ro)n(ws)g(of)g Ft(mat)h FK(must)g(be)f (linearly)75 5263 y(independent.)42 b(If)26 b(it)h(\002nds)g(a)f(v)o (ector)i(of)f(distance)h(at)f(most)g Ft(st)q FK(,)f(which)h(must)g(be)g (a)f(nonne)o(gati)n(v)o(e)j(inte)o(ger)l(,)g(then)e(it)75 5376 y(stops)e(immediately)g(and)f(returns)h(this)f(v)o(ector)-5 b(.)p Black 1867 5841 a(13)p Black eop end end %%Page: 14 14 TeXDict begin HPSdict begin 14 13 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.14) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(14)p Black 75 399 1648 4 v 1764 404 a FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188 493 a(gap>)44 b(F:=GF\(3\);;)p 3747 523 V 75 623 V 188 593 a(gap>)g(x:=)f(Indeterminate\()k(F)c(\);;)g(pol:=)h(x\2102+1;)p 3747 623 V 75 722 V 188 692 a(x_1\2102+Z\(3\)\2100)p 3747 722 V 75 822 V 188 792 a(gap>)g(C)e(:=)h(GeneratorPolCode\(po)q (l,8)q(,F)q(\);)p 3747 822 V 75 922 V 188 892 a(a)g(cyclic)h ([8,6,1..2]1..2)j(code)d(defined)h(by)e(generator)i(polynomial)h(over)d (GF\(3\))p 3747 922 V 75 1021 V 188 991 a(gap>)h (v:=Codeword\("12101111)q("\);)p 3747 1021 V 75 1121 V 188 1091 a([)f(1)f(2)h(1)g(0)f(1)h(1)g(1)f(1)h(])p 3747 1121 V 75 1220 V 188 1191 a(gap>)h(v:=VectorCodeword\(v\);)p 3747 1220 V 75 1320 V 188 1290 a([)f(Z\(3\)\2100,)h(Z\(3\),)g (Z\(3\)\2100,)h(0*Z\(3\),)g(Z\(3\)\2100,)g(Z\(3\)\2100,)f(Z\(3\)\2100,) h(Z\(3\)\2100)f(])p 3747 1320 V 75 1420 V 188 1390 a(gap>)g (G:=GeneratorMat\(C\);)p 3747 1420 V 75 1519 V 188 1489 a([)f([)f(Z\(3\)\2100,)j(0*Z\(3\),)g(Z\(3\)\2100,)f(0*Z\(3\),)h (0*Z\(3\),)g(0*Z\(3\),)g(0*Z\(3\),)f(0*Z\(3\))h(],)p 3747 1519 V 75 1619 V 273 1589 a([)d(0*Z\(3\),)j(Z\(3\)\2100,)g (0*Z\(3\),)f(Z\(3\)\2100,)h(0*Z\(3\),)g(0*Z\(3\),)g(0*Z\(3\),)f (0*Z\(3\))h(],)p 3747 1619 V 75 1719 V 273 1689 a([)d(0*Z\(3\),)j (0*Z\(3\),)g(Z\(3\)\2100,)f(0*Z\(3\),)h(Z\(3\)\2100,)g(0*Z\(3\),)g (0*Z\(3\),)f(0*Z\(3\))h(],)p 3747 1719 V 75 1818 V 273 1788 a([)d(0*Z\(3\),)j(0*Z\(3\),)g(0*Z\(3\),)f(Z\(3\)\2100,)h (0*Z\(3\),)g(Z\(3\)\2100,)g(0*Z\(3\),)f(0*Z\(3\))h(],)p 3747 1818 V 75 1918 V 273 1888 a([)d(0*Z\(3\),)j(0*Z\(3\),)g(0*Z\(3\),) f(0*Z\(3\),)h(Z\(3\)\2100,)g(0*Z\(3\),)g(Z\(3\)\2100,)f(0*Z\(3\))h(],)p 3747 1918 V 75 2017 V 273 1988 a([)d(0*Z\(3\),)j(0*Z\(3\),)g(0*Z\(3\),) f(0*Z\(3\),)h(0*Z\(3\),)g(Z\(3\)\2100,)g(0*Z\(3\),)f(Z\(3\)\2100)h(])d (])p 3747 2017 V 75 2117 V 188 2087 a(gap>)i(AClosestVectorCombina)q (tio)q(nsM)q(at)q(FFE)q(Vec)q(FFE)q(\(G,)q(F,v)q(,1,)q(1\);)p 3747 2117 V 75 2217 V 188 2187 a([)f(0*Z\(3\),)h(0*Z\(3\),)h(0*Z\(3\),) g(0*Z\(3\),)g(0*Z\(3\),)f(Z\(3\)\2100,)h(0*Z\(3\),)g(Z\(3\)\2100)f(])p 3747 2217 V 75 2242 4 25 v 3747 2242 V 75 2245 3675 4 v 75 2378 a SDict begin H.S end 75 2378 a 75 2378 a SDict begin 13.6 H.A end 75 2378 a 75 2378 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.2.1.2) cvn H.B /DEST pdfmark end 75 2378 a 116 x FJ(2.1.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(A)-5 b(ClosestV)-10 b(ectorComb)l(..MatFFEV)g(ecFFECoords)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2668 a Fs(\006)22 b Ft(AClosestVectorCom)q(b..)q(Mat)q(FFE)q(Ve)q(cFF)q(ECo)q(ord)q(s\()53 b(mat,)48 b(F,)f(vec,)h(r,)f(st)g(\))544 b Fr(\(function\))p Black 216 2894 a Ft(AClosestVectorComb)q(ina)q(tio)q(ns)q(Mat)q(FFE)q (Vec)q(FF)q(ECo)q(ord)q(s)32 b FK(returns)d(a)d(tw)o(o)g(element)i (list)f(containing)j(\(a\))75 3007 y(the)23 b(same)f(closest)j(v)o (ector)e(as)g(in)f Ft(AClosestVectorComb)q(in)q(ati)q(ons)q(Mat)q(FF)q (EVe)q(cFF)q(E)p FK(,)28 b(and)23 b(\(b\))f(a)h(v)o(ector)g Ft(v)f FK(with)75 3120 y(e)o(xactly)j Ft(r)e FK(non-zero)j(entries,)f (such)f(that)g Fq(v)13 b Fv(\003)g Fq(ma)n(t)29 b FK(is)24 b(the)f(closest)i(v)o(ector)-5 b(.)p 75 3243 1648 4 v 1764 3248 a FF(Example)p 2102 3243 V 75 3268 4 25 v 3747 3268 V 75 3367 4 100 v 188 3337 a(gap>)44 b(F:=GF\(3\);;)p 3747 3367 V 75 3467 V 188 3437 a(gap>)g(x:=)f(Indeterminate\()k(F)c (\);;)g(pol:=)h(x\2102+1;)p 3747 3467 V 75 3566 V 188 3537 a(x_1\2102+Z\(3\)\2100)p 3747 3566 V 75 3666 V 188 3636 a(gap>)g(C)e(:=)h(GeneratorPolCode\(po)q(l,8)q(,F)q(\);)p 3747 3666 V 75 3766 V 188 3736 a(a)g(cyclic)h([8,6,1..2]1..2)j(code)d (defined)h(by)e(generator)i(polynomial)h(over)d(GF\(3\))p 3747 3766 V 75 3865 V 188 3835 a(gap>)h(v:=Codeword\("12101111)q("\);) 49 b(v:=VectorCodeword\(v)q(\);;)p 3747 3865 V 75 3965 V 188 3935 a([)43 b(1)f(2)h(1)g(0)f(1)h(1)g(1)f(1)h(])p 3747 3965 V 75 4065 V 188 4035 a(gap>)h(G:=GeneratorMat\(C\);;)p 3747 4065 V 75 4164 V 188 4134 a(gap>)g(AClosestVectorCombina)q(tio)q (nsM)q(at)q(FFE)q(Vec)q(FFE)q(Coo)q(rds)q(\(G,)q(F,v)q(,1,)q(1\);)p 3747 4164 V 75 4264 V 188 4234 a([)f([)f(0*Z\(3\),)j(0*Z\(3\),)g (0*Z\(3\),)f(0*Z\(3\),)h(0*Z\(3\),)g(Z\(3\)\2100,)g(0*Z\(3\),)f (Z\(3\)\2100)h(],)p 3747 4264 V 75 4363 V 273 4334 a([)d(0*Z\(3\),)j (0*Z\(3\),)g(0*Z\(3\),)f(0*Z\(3\),)h(0*Z\(3\),)g(Z\(3\)\2100)f(])f(])p 3747 4363 V 75 4388 4 25 v 3747 4388 V 75 4391 3675 4 v 75 4525 a SDict begin H.S end 75 4525 a 75 4525 a SDict begin 13.6 H.A end 75 4525 a 75 4525 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.2.1.3) cvn H.B /DEST pdfmark end 75 4525 a 116 x FJ(2.1.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(DistancesDistrib)n (utionMatFFEV)-10 b(ecFFE)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4815 a Fs(\006)22 b Ft(DistancesDistribu)q(tio)q(nMa)q(tFF)q(EV)q (ecF)q(FE\()53 b(mat,)48 b(f,)f(vec)g(\))1101 b Fr(\(function\))p Black 216 5041 a Ft(DistancesDistribut)q(ion)q(Mat)q(FF)q(EVe)q(cFF)q (E)36 b FK(returns)c(the)f(distances)i(distrib)n(ution)h(of)c(the)h(v)o (ector)g Ft(vec)g FK(to)75 5154 y(the)g(v)o(ectors)i(in)e(the)g(v)o (ector)h(space)h(generated)g(by)f(the)f(ro)n(ws)g(of)g(the)g(matrix)h Ft(mat)f FK(o)o(v)o(er)g(the)h(\002nite)f(\002eld)g Ft(f)p FK(.)51 b(All)75 5267 y(v)o(ectors)25 b(must)g(ha)n(v)o(e)f(the)h(same) f(length,)h(and)g(all)f(elements)h(must)f(lie)g(in)g(a)g(common)h (\002eld.)30 b(The)23 b(distances)k(distri-)75 5380 y(b)n(ution)i(is)f (a)f(list)h Fq(d)k FK(of)c(length)h Fq(Leng)n(t)6 b(h)p Fo(\()p Fq(vec)p Fo(\))14 b(+)g FK(1,)31 b(such)e(that)f(the)g(v)n (alue)h Fq(d)5 b Fo([)p Fq(i)p Fo(])27 b FK(is)h(the)g(number)h(of)e(v) o(ectors)i(in)f(v)o(ecs)75 5493 y(that)c(ha)n(v)o(e)g(distance)i Fq(i)13 b Fo(+)g FK(1)22 b(to)i Ft(vec)q FK(.)p Black Black eop end end %%Page: 15 15 TeXDict begin HPSdict begin 15 14 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.15) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(15)p Black 75 399 1648 4 v 1764 404 a FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188 493 a(gap>)44 b(v:=[)f(Z\(3\)\2100,)i(Z\(3\),)f(Z\(3\)\2100,)h (0*Z\(3\),)g(Z\(3\)\2100,)f(Z\(3\)\2100,)h(Z\(3\)\2100,)g(Z\(3\)\2100)f (];;)p 3747 523 V 75 623 V 188 593 a(gap>)g(vecs:=[)g([)f(Z\(3\)\2100,) i(0*Z\(3\),)f(Z\(3\)\2100,)h(0*Z\(3\),)g(0*Z\(3\),)g(0*Z\(3\),)f (0*Z\(3\),)h(0*Z\(3\))g(],)p 3747 623 V 75 722 V 188 692 a(>)127 b([)43 b(0*Z\(3\),)i(Z\(3\)\2100,)f(0*Z\(3\),)h (Z\(3\)\2100,)g(0*Z\(3\),)g(0*Z\(3\),)f(0*Z\(3\),)h(0*Z\(3\))f(],)p 3747 722 V 75 822 V 188 792 a(>)127 b([)43 b(0*Z\(3\),)i(0*Z\(3\),)f (Z\(3\)\2100,)h(0*Z\(3\),)g(Z\(3\)\2100,)g(0*Z\(3\),)f(0*Z\(3\),)h (0*Z\(3\))f(],)p 3747 822 V 75 922 V 188 892 a(>)127 b([)43 b(0*Z\(3\),)i(0*Z\(3\),)f(0*Z\(3\),)h(Z\(3\)\2100,)g(0*Z\(3\),)g (Z\(3\)\2100,)f(0*Z\(3\),)h(0*Z\(3\))f(],)p 3747 922 V 75 1021 V 188 991 a(>)127 b([)43 b(0*Z\(3\),)i(0*Z\(3\),)f(0*Z\(3\),) h(0*Z\(3\),)g(Z\(3\)\2100,)g(0*Z\(3\),)f(Z\(3\)\2100,)h(0*Z\(3\))f(],)p 3747 1021 V 75 1121 V 188 1091 a(>)127 b([)43 b(0*Z\(3\),)i(0*Z\(3\),)f (0*Z\(3\),)h(0*Z\(3\),)g(0*Z\(3\),)g(Z\(3\)\2100,)f(0*Z\(3\),)h (Z\(3\)\2100)f(])f(];;)p 3747 1121 V 75 1220 V 188 1191 a(gap>)h(DistancesDistribution)q(Mat)q(FFE)q(Ve)q(cFF)q(E\(v)q(ecs)q (,GF)q(\(3\))q(,v\))q(;)p 3747 1220 V 75 1320 V 188 1290 a([)f(0,)g(4,)g(6,)g(60,)g(109,)h(216,)f(192,)h(112,)g(30)f(])p 3747 1320 V 75 1345 4 25 v 3747 1345 V 75 1348 3675 4 v 75 1481 a SDict begin H.S end 75 1481 a 75 1481 a SDict begin 13.6 H.A end 75 1481 a 75 1481 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.2.1.4) cvn H.B /DEST pdfmark end 75 1481 a 116 x FJ(2.1.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(DistancesDistrib)n (utionV)-10 b(ecFFEsV)g(ecFFE)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1772 a Fs(\006)22 b Ft(DistancesDistribu)q(tio)q(nVe)q(cFF)q(Es)q (Vec)q(FFE)q(\()52 b(vecs,)d(vec)e(\))1147 b Fr(\(function\))p Black 216 1998 a Ft(DistancesDistribut)q(ion)q(Vec)q(FF)q(EsV)q(ecF)q (FE)31 b FK(returns)c(the)f(distances)h(distrib)n(ution)i(of)d(the)f(v) o(ector)i Ft(vec)e FK(to)75 2110 y(the)32 b(v)o(ectors)h(in)e(the)h (list)g Ft(vecs)q FK(.)52 b(All)31 b(v)o(ectors)i(must)e(ha)n(v)o(e)i (the)e(same)h(length,)j(and)d(all)f(elements)i(must)f(lie)f(in)h(a)75 2223 y(common)24 b(\002eld.)k(The)23 b(distances)j(distrib)n(ution)h (is)d(a)f(list)h Fq(d)j FK(of)d(length)h Fq(Leng)n(t)6 b(h)p Fo(\()p Fq(vec)p Fo(\))13 b(+)g FK(1,)25 b(such)f(that)g(the)g(v) n(alue)g Fq(d)5 b Fo([)p Fq(i)p Fo(])75 2336 y FK(is)23 b(the)h(number)h(of)e(v)o(ectors)i(in)e Ft(vecs)i FK(that)f(ha)n(v)o(e) g(distance)i Fq(i)13 b Fo(+)g FK(1)22 b(to)h Ft(vec)q FK(.)p 75 2447 1648 4 v 1764 2452 a FF(Example)p 2102 2447 V 75 2472 4 25 v 3747 2472 V 75 2571 4 100 v 188 2541 a(gap>)44 b(v:=[)f(Z\(3\)\2100,)i(Z\(3\),)f(Z\(3\)\2100,)h (0*Z\(3\),)g(Z\(3\)\2100,)f(Z\(3\)\2100,)h(Z\(3\)\2100,)g(Z\(3\)\2100)f (];;)p 3747 2571 V 75 2671 V 188 2641 a(gap>)g(vecs:=[)g([)f (Z\(3\)\2100,)i(0*Z\(3\),)f(Z\(3\)\2100,)h(0*Z\(3\),)g(0*Z\(3\),)g (0*Z\(3\),)f(0*Z\(3\),)h(0*Z\(3\))g(],)p 3747 2671 V 75 2770 V 188 2741 a(>)127 b([)43 b(0*Z\(3\),)i(Z\(3\)\2100,)f (0*Z\(3\),)h(Z\(3\)\2100,)g(0*Z\(3\),)g(0*Z\(3\),)f(0*Z\(3\),)h (0*Z\(3\))f(],)p 3747 2770 V 75 2870 V 188 2840 a(>)127 b([)43 b(0*Z\(3\),)i(0*Z\(3\),)f(Z\(3\)\2100,)h(0*Z\(3\),)g (Z\(3\)\2100,)g(0*Z\(3\),)f(0*Z\(3\),)h(0*Z\(3\))f(],)p 3747 2870 V 75 2970 V 188 2940 a(>)127 b([)43 b(0*Z\(3\),)i(0*Z\(3\),)f (0*Z\(3\),)h(Z\(3\)\2100,)g(0*Z\(3\),)g(Z\(3\)\2100,)f(0*Z\(3\),)h (0*Z\(3\))f(],)p 3747 2970 V 75 3069 V 188 3039 a(>)127 b([)43 b(0*Z\(3\),)i(0*Z\(3\),)f(0*Z\(3\),)h(0*Z\(3\),)g(Z\(3\)\2100,)g (0*Z\(3\),)f(Z\(3\)\2100,)h(0*Z\(3\))f(],)p 3747 3069 V 75 3169 V 188 3139 a(>)127 b([)43 b(0*Z\(3\),)i(0*Z\(3\),)f (0*Z\(3\),)h(0*Z\(3\),)g(0*Z\(3\),)g(Z\(3\)\2100,)f(0*Z\(3\),)h (Z\(3\)\2100)f(])f(];;)p 3747 3169 V 75 3269 V 188 3239 a(gap>)h(DistancesDistribution)q(Vec)q(FFE)q(sV)q(ecF)q(FE\()q(vec)q (s,v)q(\);)p 3747 3269 V 75 3368 V 188 3338 a([)f(0,)g(0,)g(0,)g(0,)g (0,)g(4,)g(0,)g(1,)g(1)f(])p 3747 3368 V 75 3393 4 25 v 3747 3393 V 75 3396 3675 4 v 75 3529 a SDict begin H.S end 75 3529 a 75 3529 a SDict begin 13.6 H.A end 75 3529 a 75 3529 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.2.1.5) cvn H.B /DEST pdfmark end 75 3529 a 117 x FJ(2.1.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(W)-6 b(eightV)c(ecFFE)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3820 a Fs(\006)22 b Ft(WeightVecFFE\()51 b(vec)d(\))2445 b Fr(\(function\))p Black 216 4046 a Ft(WeightVecFFE)23 b FK(returns)d(the)g(weight)g(of)f (the)g(\002nite)g(\002eld)g(v)o(ector)h Ft(vec)q FK(,)f(i.e.)27 b(the)19 b(number)h(of)f(nonzero)i(entries.)p 75 4168 1648 4 v 1764 4173 a FF(Example)p 2102 4168 V 75 4193 4 25 v 3747 4193 V 75 4293 4 100 v 188 4263 a(gap>)44 b(v:=[)f(Z\(3\)\2100,)i(Z\(3\),)f(Z\(3\)\2100,)h(0*Z\(3\),)g (Z\(3\)\2100,)f(Z\(3\)\2100,)h(Z\(3\)\2100,)g(Z\(3\)\2100)f(];;)p 3747 4293 V 75 4392 V 188 4363 a(gap>)g(WeightVecFFE\(v\);)p 3747 4392 V 75 4492 V 188 4462 a(7)p 3747 4492 V 75 4517 4 25 v 3747 4517 V 75 4520 3675 4 v 75 4753 a SDict begin H.S end 75 4753 a 75 4753 a SDict begin 13.6 H.A end 75 4753 a 75 4753 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.2.1.6) cvn H.B /DEST pdfmark end 75 4753 a 116 x FJ(2.1.6)p 0.0 0.0 1.0 TeXcolorrgb 99 w(DistanceV)-10 b(ecFFE)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5043 a Fs(\006)22 b Ft(DistanceVecFFE\()52 b(vec1,)c(vec2)g(\))2028 b Fr(\(function\))p Black 216 5269 a FK(The)23 b Fq(Hamming)g(metric)h FK(on)g Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))1374 5236 y Fm(n)1435 5269 y FK(is)23 b(the)h(function)936 5473 y Fq(d)5 b(is)n(t)h Fo(\(\()p Fq(v)1185 5487 y Fr(1)1224 5473 y Fp(;)k(:::;)g Fq(v)1409 5487 y Fm(n)1448 5473 y Fo(\))p Fp(;)g Fo(\()p Fq(w)1614 5487 y Fr(1)1652 5473 y Fp(;)g(:::;)g Fq(w)1858 5487 y Fm(n)1896 5473 y Fo(\)\))20 b(=)g Fv(jf)p Fq(i)h Fv(2)f Fo([)p FK(1)p Fp(::)p Fq(n)p Fo(])k Fv(j)f Fq(v)2576 5487 y Fm(i)2619 5473 y Fv(6)p Fo(=)d Fq(w)2771 5487 y Fm(i)2794 5473 y Fv(gj)p Fp(:)p Black Black eop end end %%Page: 16 16 TeXDict begin HPSdict begin 16 15 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.16) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(16)p Black 75 399 a(This)61 b(is)h(also)g(called)h(the)e (\(Hamming\))h(distance)i(between)e Fq(v)42 b Fo(=)f(\()p Fq(v)2551 413 y Fr(1)2589 399 y Fp(;)10 b(:::;)g Fq(v)2774 413 y Fm(n)2813 399 y Fo(\))61 b FK(and)h Fq(w)41 b Fo(=)g(\()p Fq(w)3411 413 y Fr(1)3448 399 y Fp(;)10 b(:::;)g Fq(w)3654 413 y Fm(n)3692 399 y Fo(\))p FK(.)75 511 y Ft(DistanceVecFFE)40 b FK(returns)e(the)e(distance)j(between)e(the)f(tw)o(o)g(v)o(ectors)h Ft(vec1)g FK(and)f Ft(vec2)r FK(,)i(which)e(must)h(ha)n(v)o(e)75 624 y(the)22 b(same)h(length)g(and)g(whose)f(elements)i(must)e(lie)g (in)g(a)g(common)g(\002eld.)28 b(The)22 b(distance)i(is)e(the)h(number) g(of)f(places)75 737 y(where)i Ft(vec1)g FK(and)g Ft(vec2)g FK(dif)n(fer)-5 b(.)p 75 841 1648 4 v 1764 846 a FF(Example)p 2102 841 V 75 866 4 25 v 3747 866 V 75 966 4 100 v 188 936 a(gap>)44 b(v1:=[)g(Z\(3\)\2100,)g(Z\(3\),)g(Z\(3\)\2100,)h (0*Z\(3\),)g(Z\(3\)\2100,)g(Z\(3\)\2100,)f(Z\(3\)\2100,)h(Z\(3\)\2100)f (];;)p 3747 966 V 75 1066 V 188 1036 a(gap>)g(v2:=[)g(Z\(3\),)g (Z\(3\)\2100,)g(Z\(3\)\2100,)h(0*Z\(3\),)g(Z\(3\)\2100,)g(Z\(3\)\2100,) f(Z\(3\)\2100,)h(Z\(3\)\2100)f(];;)p 3747 1066 V 75 1165 V 188 1135 a(gap>)g(DistanceVecFFE\(v1,v2\))q(;)p 3747 1165 V 75 1265 V 188 1235 a(2)p 3747 1265 V 75 1290 4 25 v 3747 1290 V 75 1293 3675 4 v 75 1436 a SDict begin H.S end 75 1436 a 75 1436 a SDict begin 13.6 H.A end 75 1436 a 75 1436 a SDict begin [ /View [/XYZ H.V] /Dest (section.2.2) cvn H.B /DEST pdfmark end 75 1436 a 150 x FM(2.2)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Other)30 b(functions)p Black 75 1793 a FK(W)-7 b(e)26 b(basically)k(repeat,)f(with)e(minor)g (v)n(ariation,)j(the)d(material)i(in)e(the)g Fy(GAP)e FK(manual)j(or)f(from)g(Frank)g(Luebeck')-5 b(s)75 1906 y(website)p 0.6179 0.0236 0.0894 TeXcolorrgb 390 1920 a SDict begin H.S end 390 1920 a 0.6179 0.0236 0.0894 TeXcolorrgb -14 x Ft (http://www.math.rwt)q(h-a)q(ach)q(en)q(.de)q(:80)q(01/)q(\230F)q(ran)q (k.L)q(ueb)q(ec)q(k/d)q(ata)q(/Co)q(nw)q(ayP)q(ol)p 0.6179 0.0236 0.0894 TeXcolorrgb 3397 1849 a SDict begin H.R end 3397 1849 a 3397 1906 a SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (http://www.math.rwth-aachen.de:8001/~Frank.Luebeck/data/ConwayPol) >> /Subtype /Link H.B /ANN pdfmark end 3397 1906 a Black 43 w FK(on)38 b(Con-)75 2019 y(w)o(ay)e(polynomials.)68 b(The)38 b Fj(P)t(R)t(I)t(M)t(E)k(FI)t(E)t(L)t(D)t(S)r FK(:)57 b(If)43 b Fq(p)27 b Fv(\025)g FK(2)35 b(is)h(a)g(prime)g(then)h Fq(GF)6 b Fo(\()h Fq(p)p Fo(\))36 b FK(denotes)i(the)f(\002eld)e Fi(Z)p Fp(=)7 b Fq(p)p Fi(Z)p FK(,)75 2131 y(with)23 b(addition)j(and)e(multiplication)j(performed)e(mod)31 b Fq(p)p FK(.)216 2244 y(The)g Fj(P)t(R)t(I)t(M)t(E)j(P)t(O)r(W)t(E)t (R)g(FI)t(E)t(L)t(D)t(S)r FK(:)43 b(Suppose)30 b Fq(q)24 b Fo(=)29 b Fq(p)1844 2211 y Fm(r)1904 2244 y FK(is)g(a)f(prime)h(po)n (wer)l(,)i Fq(r)25 b Fp(>)e FK(1,)30 b(and)f(put)g Fq(F)i Fo(=)22 b Fq(GF)7 b Fo(\()g Fq(p)p Fo(\))p FK(.)45 b(Let)75 2357 y Fq(F)7 b Fo([)p Fq(x)p Fo(])25 b FK(denote)i(the)e(ring)g(of)g (all)g(polynomials)i(o)o(v)o(er)e Fq(F)32 b FK(and)25 b(let)39 b Fq(f)13 b Fo(\()p Fq(x)p Fo(\))25 b FK(denote)i(a)d(monic)h (irreducible)j(polynomial)f(in)75 2470 y Fq(F)7 b Fo([)p Fq(x)p Fo(])29 b FK(of)f(de)o(gree)i Fq(r)r FK(.)43 b(The)28 b(quotient)j Fq(E)e Fo(=)23 b Fq(F)7 b Fo([)p Fq(x)p Fo(])p Fp(=)p Fo(\()14 b Fq(f)f Fo(\()p Fq(x)p Fo(\)\))26 b(=)d Fq(F)7 b Fo([)p Fq(x)p Fo(])p Fp(=)14 b Fq(f)f Fo(\()p Fq(x)p Fo(\))p Fq(F)d Fo([)p Fq(x)p Fo(])29 b FK(is)f(a)g(\002eld)h(with)f Fq(q)g FK(elements.)45 b(If)e Fq(f)13 b Fo(\()p Fq(x)p Fo(\))75 2583 y FK(and)31 b Fq(E)k FK(are)30 b(related)i(in)e(this)h(w)o(ay)-6 b(,)31 b(we)f(say)g(that)45 b Fq(f)13 b Fo(\()p Fq(x)p Fo(\))30 b FK(is)g(the)j Fj(D)t(E)t(FI)t(N)t(I)t(N)t(G)j(P)t(O)t(L)m(Y)t(N)t(O)t (M)t(I)t(A)t(L)f FK(of)30 b Fq(E)7 b FK(.)46 b(An)o(y)30 b(de\002ning)75 2696 y(polynomial)c(f)o(actors)f(completely)h(into)e (distinct)h(linear)g(f)o(actors)g(o)o(v)o(er)f(the)g(\002eld)f(it)g (de\002nes.)216 2809 y(F)o(or)31 b(an)o(y)h(\002nite)f(\002eld)h Fq(F)7 b FK(,)32 b(the)g(multiplicati)n(v)o(e)j(group)d(of)g(non-zero)i (elements)f Fq(F)2856 2776 y Fh(\002)2943 2809 y FK(is)e(a)g(c)o(yclic) i(group.)54 b(An)75 2922 y Fu(a)21 b Fv(2)f Fq(F)30 b FK(is)24 b(called)h(a)h Fj(P)t(R)t(I)t(M)t(I)t(T)t(I)t(V)t(E)32 b(E)t(L)t(E)t(M)t(E)t(N)t(T)e FK(if)24 b(it)g(is)g(a)f(generator)k(of)d Fq(F)2362 2889 y Fh(\002)2418 2922 y FK(.)29 b(A)23 b(de\002ning)i (polynomial)40 b Fq(f)13 b Fo(\()p Fq(x)p Fo(\))25 b FK(of)f Fq(F)30 b FK(is)75 3035 y(said)24 b(to)g(be)h Fj(P)t(R)t(I)t(M)t(I)t(T)t(I)t(V)t(E)30 b FK(if)23 b(it)h(has)f(a)h (root)g(in)f Fq(F)30 b FK(which)24 b(is)f(a)g(primiti)n(v)o(e)i (element.)75 3187 y SDict begin H.S end 75 3187 a 75 3187 a SDict begin 13.6 H.A end 75 3187 a 75 3187 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.2.2.1) cvn H.B /DEST pdfmark end 75 3187 a 97 x FJ(2.2.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(ConwayP)n(olynomial)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3458 a Fs(\006)d Ft(ConwayPolynomial\()53 b(p,)47 b(n)g(\))2213 b Fr(\(function\))p Black 216 3684 a FK(A)26 b(standard)k(notation)f(for)f(the)f(elements)i(of)e Fq(GF)7 b Fo(\()g Fq(p)p Fo(\))27 b FK(is)g(gi)n(v)o(en)h(via)g(the)f (representati)n(v)o(es)k(0)p Fp(;)10 b(:::;)17 b Fq(p)d Fv(\000)g FK(1)29 b(of)e(the)75 3797 y(cosets)h(modulo)36 b Fq(p)p FK(.)i(W)-7 b(e)26 b(order)j(these)f(elements)g(by)f(0)53 b Fv(h)g FK(1)g Fv(h)g FK(2)g Fv(h)g Fp(:::)g Fv(h)59 b Fq(p)14 b Fv(\000)g FK(1.)39 b(W)-7 b(e)26 b(introduce)k(an)d (ordering)75 3910 y(of)g(the)g(polynomials)j(of)d(de)o(gree)h Fq(r)g FK(o)o(v)o(er)f Fq(GF)7 b Fo(\()g Fq(p)p Fo(\))p FK(.)39 b(Let)26 b Fq(g)p Fo(\()p Fq(x)p Fo(\))e(=)e Fq(g)2184 3924 y Fm(r)2216 3910 y Fq(x)2256 3877 y Fm(r)2302 3910 y Fo(+)14 b Fp(:::)g Fo(+)g Fq(g)2606 3924 y Fr(0)2669 3910 y FK(and)28 b Fq(h)p Fo(\()p Fq(x)p Fo(\))c(=)d Fq(h)3143 3924 y Fm(r)3175 3910 y Fq(x)3215 3877 y Fm(r)3261 3910 y Fo(+)14 b Fp(:::)g Fo(+)g Fq(h)3565 3924 y Fr(0)3629 3910 y FK(\(by)75 4023 y(con)l(v)o(ention,)26 b Fq(g)564 4037 y Fm(i)606 4023 y Fo(=)19 b Fq(h)741 4037 y Fm(i)784 4023 y Fo(=)f FK(0)23 b(for)g Fq(i)43 b Fv(i)h Fq(r)r FK(\).)29 b(Then)22 b(we)g(de\002ne)h Fq(g)44 b Fv(h)g Fq(h)22 b FK(if)h(and)g(only)g(if)f(there)i(is)e(an)h(inde)o(x)g Fq(k)h FK(with)f Fq(g)3550 4037 y Fm(i)3592 4023 y Fo(=)c Fq(h)3727 4037 y Fm(i)75 4136 y FK(for)24 b Fq(i)45 b Fv(i)h Fq(k)25 b FK(and)f Fo(\()p Fv(\000)p FK(1)p Fo(\))760 4103 y Fm(r)r Fh(\000)p Fm(k)874 4136 y Fq(g)919 4150 y Fm(k)1000 4136 y Fv(h)46 b Fo(\()p Fv(\000)p FK(1)p Fo(\))1267 4103 y Fm(r)r Fh(\000)p Fm(k)1381 4136 y Fq(h)1426 4150 y Fm(k)1461 4136 y FK(.)216 4249 y(The)31 b(C)t Fj(O)t(N)t(W)-5 b(A)l(Y)33 b(P)t(O)t(L)m(Y)t(N)t(O)t(M)t(I)t(A)t(L)47 b Fq(f)1356 4263 y Fm(p)p Fl(;)p Fm(r)1439 4249 y Fo(\()p Fq(x)p Fo(\))30 b FK(for)f Fq(GF)7 b Fo(\()g Fq(p)1929 4216 y Fm(r)1961 4249 y Fo(\))28 b FK(is)h(the)g(smallest)h(polynomial) i(of)d(de)o(gree)h Fq(r)g FK(with)f(re-)75 4361 y(spect)c(to)e(this)h (ordering)i(such)e(that:)p Black 211 4549 a Fv(\017)p Black 60 w Fq(f)348 4563 y Fm(p)p Fl(;)p Fm(r)432 4549 y Fo(\()p Fq(x)p Fo(\))f FK(is)h(monic,)p Black 211 4737 a Fv(\017)p Black 60 w Fq(f)348 4751 y Fm(p)p Fl(;)p Fm(r)432 4737 y Fo(\()p Fq(x)p Fo(\))18 b FK(is)h(primiti)n(v)o(e,)h (that)f(is,)g(an)o(y)g(zero)g(is)f(a)g(generator)j(of)e(the)g(\(c)o (yclic\))h(multiplicati)n(v)o(e)h(group)f(of)e Fq(GF)7 b Fo(\()g Fq(p)3660 4704 y Fm(r)3692 4737 y Fo(\))p FK(,)p Black 211 4924 a Fv(\017)p Black 46 w FK(for)24 b(each)f(proper)i(di)n (visor)g Fq(m)d FK(of)h Fq(r)h FK(we)f(ha)n(v)o(e)g(that)38 b Fq(f)1921 4938 y Fm(p)p Fl(;)p Fm(m)2025 4924 y Fo(\()p Fq(x)2100 4891 y Fk(\()5 b Fm(p)2164 4867 y Ff(r)2189 4891 y Fh(\000)p Fr(1)p Fk(\))p Fl(=)p Fk(\()g Fm(p)2397 4867 y Ff(m)2437 4891 y Fh(\000)p Fr(1)p Fk(\))2552 4924 y Fo(\))20 b Fv(\021)g FK(0)91 b Fo(\()p FK(mod)35 b Fq(f)3097 4938 y Fm(p)p Fl(;)p Fm(r)3180 4924 y Fo(\()p Fq(x)p Fo(\)\))p FK(;)24 b(that)g(is,)f(the)302 5037 y Fo(\()7 b Fq(p)389 5004 y Fm(r)434 5037 y Fv(\000)13 b FK(1)p Fo(\))p Fp(=)p Fo(\()7 b Fq(p)730 5004 y Fm(m)796 5037 y Fv(\000)13 b FK(1)p Fo(\))p FK(-th)23 b(po)n(wer)h(of)f(a)h (zero)g(of)37 b Fq(f)1816 5051 y Fm(p)p Fl(;)p Fm(r)1899 5037 y Fo(\()p Fq(x)p Fo(\))24 b FK(is)g(a)f(zero)h(of)37 b Fq(f)2503 5051 y Fm(p)p Fl(;)p Fm(m)2607 5037 y Fo(\()p Fq(x)p Fo(\))p FK(.)216 5225 y Ft(ConwayPolynomial\(p)q(,n\))29 b FK(returns)d(the)d(polynomial)40 b Fq(f)2104 5239 y Fm(p)p Fl(;)p Fm(r)2188 5225 y Fo(\()p Fq(x)p Fo(\))24 b FK(de\002ned)g(abo)o(v)o(e.)216 5338 y Ft(IsCheapConwayPolyn)q(omi)q (al\()q(p,)q(n\))36 b FK(returns)c(true)f(if)g Ft(ConwayPolynomial\()52 b(p,)47 b(n)g(\))30 b FK(will)g(gi)n(v)o(e)h(a)f(re-)75 5451 y(sult)22 b(in)g(reasonable)i(time.)k(This)21 b(is)h(either)h(the) e(case)i(when)e(this)h(polynomial)i(is)e(pre-computed,)i(or)e(if)f Fq(n)p Fp(;)c Fq(p)22 b FK(are)g(not)75 5564 y(too)i(big.)p Black Black eop end end %%Page: 17 17 TeXDict begin HPSdict begin 17 16 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.17) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(17)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.2.2.2) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(2.2.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(RandomPrimiti)o(v)o(eP)n(olynomial)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(RandomPrimitivePo)q(lyn)q(omi)q (al\()53 b(F,)47 b(n)g(\))1796 b Fr(\(function\))p Black 216 799 a FK(F)o(or)22 b(a)f(\002nite)i(\002eld)f Ft(F)g FK(and)g(a)g(positi)n(v)o(e)i(inte)o(ger)f Ft(n)f FK(this)h(function)i (returns)e(a)f(primiti)n(v)o(e)h(polynomial)i(of)d(de)o(gree)i Ft(n)75 912 y FK(o)o(v)o(er)g Ft(F)p FK(,)e(that)i(is)g(a)f(zero)h(of)g (this)g(polynomial)i(has)d(maximal)h(multiplicati)n(v)o(e)j(order)d Fv(j)p Fq(F)7 b Fv(j)2859 879 y Fm(n)2910 912 y Fv(\000)13 b FK(1.)216 1024 y Ft(IsPrimitivePolynom)q(ial)q(\(f\))36 b FK(can)30 b(be)g(used)h(to)f(check)h(if)e(a)h(uni)n(v)n(ariate)i (polynomial)g Ft(f)e FK(is)f(primiti)n(v)o(e)i(or)75 1137 y(not.)p Black Black eop end end %%Page: 18 18 TeXDict begin HPSdict begin 18 17 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.18) cvn H.B /DEST pdfmark end 75 100 a Black Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (chapter.3) cvn H.B /DEST pdfmark end 75 307 a 714 x Fw(Chapter)44 b(3)p 0.0 0.0 1.0 TeXcolorrgb 75 1436 a FA(Codew)n(ords)p Black 75 1881 a FK(Let)24 b Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))24 b FK(denote)i(a)e(\002nite)g(\002eld)h(with)f Fq(q)g FK(\(a)g(prime)h(po)n(wer\))f(elements.)33 b(A)23 b Fq(code)i FK(is)g(a)f(subset)c Fq(C)26 b FK(of)e(some)h(\002nite-)75 1994 y(dimensional)f(v)o(ector)f(space)18 b Fq(V)32 b FK(o)o(v)o(er)22 b Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(.)28 b(The)21 b Fq(length)j FK(of)16 b Fq(C)23 b FK(is)f(the)g(dimension)h (of)17 b Fq(V)11 b FK(.)28 b(Usually)-6 b(,)18 b Fq(V)30 b Fo(=)18 b Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))3712 1961 y Fm(n)75 2107 y FK(and)24 b(the)g(length)g(is)g(the)f(number)i(of)e (coordinate)j(entries.)31 b(When)18 b Fq(C)25 b FK(is)e(itself)i(a)e(v) o(ector)h(space)g(o)o(v)o(er)g Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))23 b FK(then)h(it)75 2220 y(is)f(called)i(a)e Fq(linear)i(code)g FK(and)f(the)f Fq(dimension)j FK(of)18 b Fq(C)25 b FK(is)e(its)h (dimension)i(as)d(a)g(v)o(ector)i(space)f(o)o(v)o(er)g Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(.)216 2333 y(In)33 b Fy(GU)m(A)-6 b(V)f(A)p FK(,)31 b(a)i(`code)n(w)o(ord')i(is)f(a)e Fy(GAP)g FK(record,)k(with)d(one)h(of)f(its)h(components)i(being)e(an)f (element)i(in)28 b Fq(V)11 b FK(.)75 2446 y(Lik)o(e)n(wise,)21 b(a)g(`code')h(is)f(a)f Fy(GAP)f FK(record,)k(with)e(one)g(of)g(its)g (components)i(being)g(a)d(subset)i(\(or)g(subspace)h(with)e(gi)n(v)o (en)75 2559 y(basis,)j(if)19 b Fq(C)24 b FK(is)g(linear\))h(of)18 b Fq(V)12 b FK(.)p 75 2653 1648 4 v 1764 2658 a FF(Example)p 2102 2653 V 75 2678 4 25 v 3747 2678 V 75 2777 4 100 v 273 2748 a(gap>)43 b(C:=RandomLinearCode)q(\(20)q(,10)q(,G)q(F\(4)q (\)\);)p 3747 2777 V 75 2877 V 273 2847 a(a)85 b([20,10,?])45 b(randomly)g(generated)h(code)d(over)h(GF\(4\))p 3747 2877 V 75 2977 V 273 2947 a(gap>)f(c:=Random\(C\);)p 3747 2977 V 75 3076 V 273 3046 a([)f(1)h(a)g(0)f(0)h(0)g(1)f(1)h (a\2102)g(0)g(0)g(a)f(1)h(1)g(1)g(a)f(1)h(1)g(a)f(a)h(0)g(])p 3747 3076 V 75 3176 V 273 3146 a(gap>)g(NamesOfComponents\(C)q(\);)p 3747 3176 V 75 3276 V 273 3246 a([)f("LeftActingDomain",)49 b("GeneratorsOfLeftOp)q(era)q(tor)q(Add)q(iti)q(veG)q(rou)q(p",)g ("WordLength",)p 3747 3276 V 75 3375 V 357 3345 a("GeneratorMat",)f ("name",)c("Basis",)i("NiceFreeLeftModule",)j("Dimension",)p 3747 3375 V 75 3475 V 400 3445 a("Representative",)f("ZeroImmutable")f (])p 3747 3475 V 75 3574 V 273 3545 a(gap>)c(NamesOfComponents\(c)q (\);)p 3747 3574 V 75 3674 V 273 3644 a([)f("VectorCodeword",)48 b("WordLength",)f("treatAsPoly")g(])p 3747 3674 V 75 3774 V 273 3744 a(gap>)c(c!.VectorCodeword;)p 3747 3774 V 75 3873 V 273 3843 a([)f(immutable)k(compressed)f(vector)g(length)f (20)f(over)h(GF\(4\))g(])p 3747 3873 V 75 3973 V 273 3943 a(gap>)f(Display\(last\);)p 3747 3973 V 75 4073 V 273 4043 a([)f(Z\(2\2102\),)j(Z\(2\2102\),)g(Z\(2\2102\),)f (Z\(2\)\2100,)h(Z\(2\2102\),)g(Z\(2\2102\)\2102,)g(0*Z\(2\),)g (Z\(2\2102\),)g(Z\(2\2102\),)p 3747 4073 V 75 4172 V 357 4142 a(Z\(2\)\2100,)g(Z\(2\2102\)\2102,)g(0*Z\(2\),)g(0*Z\(2\),)g (Z\(2\2102\),)g(0*Z\(2\),)f(0*Z\(2\),)h(0*Z\(2\),)g(Z\(2\2102\)\2102,)p 3747 4172 V 75 4272 V 357 4242 a(Z\(2\)\2100,)g(0*Z\(2\))f(])p 3747 4272 V 75 4371 V 273 4342 a(gap>)f(C!.Dimension;)p 3747 4371 V 75 4471 V 273 4441 a(10)p 3747 4471 V 75 4496 4 25 v 3747 4496 V 75 4499 3675 4 v 75 4687 a FK(Mathematically)-6 b(,)60 b(a)50 b(`code)n(w)o(ord')j(is)d(an)g(element)i(of)e(a)h(code)46 b Fq(C)r FK(,)56 b(b)n(ut)51 b(in)g Fy(GU)m(A)-6 b(V)f(A)48 b FK(the)j Ft(Codeword)i FK(and)75 4800 y Ft(VectorCodeword)27 b FK(commands)c(ha)n(v)o(e)h(implementations)i(which)c(do)h(not)g (check)h(if)e(the)h(code)n(w)o(ord)h(belongs)g(to)18 b Fq(C)75 4913 y FK(\(i.e.,)j(are)f(independent)25 b(of)20 b(the)h(code)h(itself\).)29 b(The)o(y)20 b(e)o(xist)i(primarily)g(to)f (mak)o(e)f(it)h(easier)h(for)f(the)g(user)g(to)g(construct)75 5026 y(a)29 b(the)h(associated)j Fy(GAP)27 b FK(record.)49 b(Using)30 b(these)h(commands,)h(one)e(can)g(enter)h(into)f(a)f Fy(GAP)f FK(both)i(a)f(code)n(w)o(ord)j Fq(c)75 5139 y FK(\(belonging)d(to)20 b Fq(C)r FK(\))26 b(and)g(a)f(recei)n(v)o(ed)i (w)o(ord)f Fq(r)i FK(\(not)e(belonging)j(to)20 b Fq(C)r FK(\))25 b(using)i(the)f(same)g(command.)36 b(The)25 b(user)i(can)75 5252 y(input)e(code)n(w)o(ords)g(in)f(dif)n(ferent)h (formats)f(\(as)g(strings,)h(v)o(ectors,)g(and)f(polynomials\),)i(and)e (output)h(information)h(is)75 5364 y(formatted)f(in)f(a)f(readable)i(w) o(ay)-6 b(.)216 5477 y(A)24 b(code)n(w)o(ord)j Fq(c)d FK(in)h(a)g(linear)h(code)21 b Fq(C)27 b FK(arises)f(in)f(practice)i (by)e(an)h(initial)g(encoding)i(of)d(a)f('block')j(message)g Fq(m)p FK(,)75 5590 y(adding)h(enough)g(redundanc)o(y)i(to)c(reco)o(v)o (er)i Fq(m)d FK(after)i Fq(c)f FK(is)g(transmitted)j(via)e(a)f('noisy') i(communication)h(medium.)p Black 1867 5841 a(18)p Black eop end end %%Page: 19 19 TeXDict begin HPSdict begin 19 18 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.19) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(19)p Black 75 399 a(In)22 b Fy(GU)m(A)-6 b(V)f(A)p FK(,)20 b(for)j(linear)h(codes,)f(the)g(map)f Fq(m)d Fv(7\000)-16 b(!)19 b Fq(c)j FK(is)g(computed)i(using)g(the)e (command)h Ft(c:=m*C)h FK(and)f(reco)o(v)o(ering)75 511 y Fq(m)18 b FK(from)h Fq(c)g FK(is)g(obtained)i(by)f(the)f(command)h Ft(InformationWord\(C,c)q(\))p FK(.)33 b(These)19 b(commands)h(are)g(e) o(xplained)h(more)75 624 y(belo)n(w)-6 b(.)216 737 y(Man)o(y)25 b(operations)i(are)e(a)n(v)n(ailable)i(on)e(code)n(w)o(ords)i(themselv) o(es,)f(although)h(code)n(w)o(ords)g(also)e(w)o(ork)g(together)75 850 y(with)e(codes)i(\(see)f(chapter)p 0.0236 0.0894 0.6179 TeXcolorrgb 948 850 a SDict begin H.S end 948 850 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(4)p 0.0236 0.0894 0.6179 TeXcolorrgb 993 788 a SDict begin H.R end 993 788 a 993 850 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (chapter.4) cvn H.B /ANN pdfmark end 993 850 a Black 24 w FK(on)f(Codes\).)216 963 y(The)c(\002rst)h(section)h(describes)h(ho)n(w)d(code)n(w)o(ords)j (are)d(constructed)k(\(see)d Ft(Codeword)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2905 964 a SDict begin H.S end 2905 964 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.1.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 3086 901 a SDict begin H.R end 3086 901 a 3086 963 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.1.1) cvn H.B /ANN pdfmark end 3086 963 a Black FK(\))e(and)g Ft(IsCodeword)75 1076 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 1077 a SDict begin H.S end 105 1077 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.1.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 286 1014 a SDict begin H.R end 286 1014 a 286 1076 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.1.3) cvn H.B /ANN pdfmark end 286 1076 a Black FK(\)\).)55 b(Sections)p 0.0236 0.0894 0.6179 TeXcolorrgb 764 1077 a SDict begin H.S end 764 1077 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 877 1014 a SDict begin H.R end 877 1014 a 877 1076 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.3.2) cvn H.B /ANN pdfmark end 877 1076 a Black 32 w FK(and)p 0.0236 0.0894 0.6179 TeXcolorrgb 1071 1077 a SDict begin H.S end 1071 1077 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 1184 1014 a SDict begin H.R end 1184 1014 a 1184 1076 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.3.3) cvn H.B /ANN pdfmark end 1184 1076 a Black 32 w FK(describe)35 b(the)d(arithmetic)i(operations)h(applicable)g(to)d (code)n(w)o(ords.)56 b(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 75 1190 a SDict begin H.S end 75 1190 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 188 1127 a SDict begin H.R end 188 1127 a 188 1189 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.3.4) cvn H.B /ANN pdfmark end 188 1189 a Black 26 w FK(describe)28 b(functions)g(that)f(con)l(v)o(ert)g(code)n(w)o(ords)h (back)f(to)f(v)o(ectors)h(or)f(polynomials)i(\(see)f Ft(VectorCodeword)75 1302 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 1303 a SDict begin H.S end 105 1303 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.4.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 286 1240 a SDict begin H.R end 286 1240 a 286 1302 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.4.1) cvn H.B /ANN pdfmark end 286 1302 a Black FK(\))i(and)f Ft(PolyCodeword)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1117 1303 a SDict begin H.S end 1117 1303 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.4.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 1298 1240 a SDict begin H.R end 1298 1240 a 1298 1302 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.4.2) cvn H.B /ANN pdfmark end 1298 1302 a Black FK(\)\).)44 b(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 1725 1303 a SDict begin H.S end 1725 1303 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.5)p 0.0236 0.0894 0.6179 TeXcolorrgb 1838 1240 a SDict begin H.R end 1838 1240 a 1838 1302 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.3.5) cvn H.B /ANN pdfmark end 1838 1302 a Black 28 w FK(describe)30 b(functions)h(that) e(change)h(the)e(w)o(ay)g(a)g(code)n(w)o(ord)75 1415 y(is)d(displayed)i(\(see)f Ft(TreatAsVector)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1360 1416 a SDict begin H.S end 1360 1416 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.5.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 1541 1353 a SDict begin H.R end 1541 1353 a 1541 1415 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.5.1) cvn H.B /ANN pdfmark end 1541 1415 a Black FK(\))c(and)h Ft(TreatAsPoly)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2316 1416 a SDict begin H.S end 2316 1416 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.5.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 2497 1353 a SDict begin H.R end 2497 1353 a 2497 1415 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.5.2) cvn H.B /ANN pdfmark end 2497 1415 a Black FK(\)\).)34 b(Finally)-6 b(,)26 b(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 3209 1416 a SDict begin H.S end 3209 1416 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.6)p 0.0236 0.0894 0.6179 TeXcolorrgb 3322 1353 a SDict begin H.R end 3322 1353 a 3322 1415 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.3.6) cvn H.B /ANN pdfmark end 3322 1415 a Black 25 w FK(describes)i(a)75 1528 y(function)f(to)f(generate)h(a)e(null)h (w)o(ord)f(\(see)h Ft(NullWord)h FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1867 1529 a SDict begin H.S end 1867 1529 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.6.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 2048 1466 a SDict begin H.R end 2048 1466 a 2048 1528 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.6.1) cvn H.B /ANN pdfmark end 2048 1528 a Black FK(\)\))f(and)g(some)g(functions)h(for)f(e)o(xtracting)h(properties)75 1641 y(of)c(code)n(w)o(ords)j(\(see)e Ft(DistanceCodeword)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1550 1642 a SDict begin H.S end 1550 1642 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.6.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 1731 1579 a SDict begin H.R end 1731 1579 a 1731 1641 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.6.2) cvn H.B /ANN pdfmark end 1731 1641 a Black FK(\),)c Ft(Support)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2186 1642 a SDict begin H.S end 2186 1642 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.6.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 2367 1579 a SDict begin H.R end 2367 1579 a 2367 1641 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.6.3) cvn H.B /ANN pdfmark end 2367 1641 a Black FK(\))e(and)g Ft(WeightCodeword)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3276 1642 a SDict begin H.S end 3276 1642 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.6.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 3457 1579 a SDict begin H.R end 3457 1579 a 3457 1641 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.6.4) cvn H.B /ANN pdfmark end 3457 1641 a Black FK(\)\).)75 1800 y SDict begin H.S end 75 1800 a 75 1800 a SDict begin 13.6 H.A end 75 1800 a 75 1800 a SDict begin [ /View [/XYZ H.V] /Dest (section.3.1) cvn H.B /DEST pdfmark end 75 1800 a 133 x FM(3.1)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Construction)k(of)e(Codew)o (ords)p Black 75 2029 a SDict begin H.S end 75 2029 a 75 2029 a SDict begin 13.6 H.A end 75 2029 a 75 2029 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.1.1) cvn H.B /DEST pdfmark end 75 2029 a 114 x FJ(3.1.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Codew)o(ord)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2318 a Fs(\006)22 b Ft(Codeword\()50 b(obj[,)e(n][,][F])h(\))2121 b Fr(\(function\))p Black 216 2544 a Ft(Codeword)24 b FK(returns)g(a)e(code)n(w)o(ord)i(or)e(a)g(list)g(of)g(code)n(w)o(ords) j(constructed)g(from)d Ft(obj)q FK(.)28 b(The)21 b(object)j Ft(obj)f FK(can)f(be)75 2656 y(a)h(v)o(ector)l(,)i(a)e(string,)h(a)f (polynomial)j(or)e(a)f(code)n(w)o(ord.)30 b(It)23 b(may)h(also)g(be)f (a)g(list)h(of)g(those)g(\(e)n(v)o(en)g(a)g(mix)o(ed)f(list\).)216 2769 y(If)h(a)f(number)i Ft(n)f FK(is)g(speci\002ed,)h(all)f (constructed)k(code)n(w)o(ords)d(ha)n(v)o(e)g(length)h Ft(n)p FK(.)j(This)24 b(is)g(the)g(only)h(w)o(ay)f(to)g(mak)o(e)75 2882 y(sure)g(that)g(all)f(elements)h(of)f Ft(obj)h FK(are)f(con)l(v)o (erted)j(to)d(code)n(w)o(ords)i(of)e(the)h(same)f(length.)30 b(Elements)24 b(of)f Ft(obj)g FK(that)h(are)75 2995 y(longer)k(than)g Ft(n)f FK(are)g(reduced)i(in)d(length)j(by)e(cutting)h(of)f(the)h(last) f(positions.)41 b(Elements)28 b(of)f Ft(obj)g FK(that)g(are)h(shorter) 75 3108 y(than)g Ft(n)f FK(are)h(lengthened)j(by)c(adding)i(zeros)g(at) e(the)h(end.)41 b(If)28 b(no)f Ft(n)g FK(is)h(speci\002ed,)h(each)g (constructed)h(code)n(w)o(ord)f(is)75 3221 y(handled)d(indi)n(vidually) -6 b(.)216 3334 y(If)25 b(a)g(Galois)h(\002eld)f Ft(F)g FK(is)g(speci\002ed,)h(all)g(code)n(w)o(ords)h(are)e(constructed)k(o)o (v)o(er)c(this)h(\002eld.)34 b(This)25 b(is)g(the)g(only)h(w)o(ay)75 3447 y(to)g(mak)o(e)f(sure)i(that)f(all)g(elements)h(of)e Ft(obj)h FK(are)g(con)l(v)o(erted)i(to)e(the)g(same)f(\002eld)h Ft(F)f FK(\(otherwise)j(the)o(y)e(are)g(con)l(v)o(erted)75 3560 y(one)g(by)g(one\).)35 b(Note)26 b(that)g(all)f(elements)i(of)f Ft(obj)g FK(must)f(ha)n(v)o(e)h(elements)h(o)o(v)o(er)f Ft(F)f FK(or)g(o)o(v)o(er)h(`Inte)o(gers'.)37 b(Con)l(v)o(erting)75 3673 y(from)30 b(one)g(Galois)h(\002eld)e(to)h(another)i(is)e(not)g (allo)n(wed.)48 b(If)30 b(no)g Ft(F)f FK(is)h(speci\002ed,)j(v)o (ectors)e(or)f(strings)h(with)f(inte)o(ger)75 3786 y(elements)25 b(will)e(be)h(con)l(v)o(erted)i(to)d(the)h(smallest)h(Galois)f(\002eld) f(possible.)216 3898 y(Note)i(that)h(a)f(signi\002cant)i(speed)f (increase)h(is)e(achie)n(v)o(ed)i(if)e Ft(F)g FK(is)g(speci\002ed,)h(e) n(v)o(en)g(when)f(all)g(elements)i(of)e Ft(obj)75 4011 y FK(already)g(ha)n(v)o(e)f(elements)h(o)o(v)o(er)f Ft(F)p FK(.)216 4124 y(Ev)o(ery)h(v)o(ector)g(in)g Ft(obj)g FK(can)g(be)f(a)g(\002nite)h(\002eld)f(v)o(ector)i(o)o(v)o(er)e Ft(F)h FK(or)f(a)g(v)o(ector)i(o)o(v)o(er)e(`Inte)o(gers'.)34 b(In)25 b(the)g(last)g(case,)75 4237 y(it)e(is)h(con)l(v)o(erted)i(to)d Ft(F)g FK(or)l(,)h(if)f(omitted,)h(to)g(the)g(smallest)g(Galois)h (\002eld)e(possible.)216 4350 y(Ev)o(ery)g(string)h(in)f Ft(obj)h FK(must)f(be)g(a)f(string)i(of)f(numbers,)h(without)g(spaces,) h(commas)e(or)g(an)o(y)g(other)h(characters.)75 4463 y(These)i(numbers)h(must)e(be)h(from)f(0)g(to)h(9.)34 b(The)25 b(string)i(is)e(con)l(v)o(erted)k(to)c(a)g(code)n(w)o(ord)i(o) o(v)o(er)f Ft(F)f FK(or)l(,)h(if)f Ft(F)g FK(is)g(omitted,)75 4576 y(o)o(v)o(er)c(the)h(smallest)g(Galois)g(\002eld)e(possible.)31 b(Note)21 b(that)g(since)h(all)g(numbers)g(in)f(the)h(string)g(are)f (interpreted)j(as)d(one-)75 4689 y(digit)k(numbers,)g(Galois)f (\002elds)g(of)g(size)g(lar)n(ger)h(than)g(10)f(are)g(not)g(properly)i (represented)h(when)d(using)h(strings.)31 b(In)75 4802 y(f)o(act,)24 b(no)f(\002nite)h(\002eld)f(of)h(size)g(lar)n(ger)h(than) f(11)g(arises)h(in)e(this)h(f)o(ashion)i(at)d(all.)216 4915 y(Ev)o(ery)f(polynomial)i(in)e Ft(obj)h FK(is)f(con)l(v)o(erted)i (to)e(a)g(code)n(w)o(ord)h(of)f(length)i Ft(n)d FK(or)l(,)h(if)g (omitted,)h(of)f(a)g(length)h(dictated)75 5028 y(by)h(the)f(de)o(gree)i (of)f(the)f(polynomial.)31 b(If)24 b Ft(F)f FK(is)g(speci\002ed,)i(a)e (polynomial)j(in)d Ft(obj)h FK(must)g(be)f(o)o(v)o(er)h Ft(F)p FK(.)216 5140 y(Ev)o(ery)29 b(element)h(of)f Ft(obj)h FK(that)g(is)f(already)i(a)d(code)n(w)o(ord)j(is)e(changed)i(to)e(a)g (code)n(w)o(ord)i(of)e(length)h Ft(n)q FK(.)44 b(If)29 b(no)h Ft(n)75 5253 y FK(w)o(as)23 b(speci\002ed,)i(the)f(code)n(w)o (ord)h(doesn')n(t)g(change.)31 b(If)23 b Ft(F)g FK(is)g(speci\002ed,)i (the)f(code)n(w)o(ord)h(must)e(ha)n(v)o(e)i(base)f(\002eld)f Ft(F)q FK(.)p 75 5351 1648 4 v 1764 5356 a FF(Example)p 2102 5351 V 75 5376 4 25 v 3747 5376 V 75 5476 4 100 v 188 5446 a(gap>)44 b(c)e(:=)h(Codeword\([0,1,1,1,0)q(]\);)p 3747 5476 V 75 5575 V 188 5545 a([)g(0)f(1)h(1)g(1)f(0)h(])p 3747 5575 V Black Black eop end end %%Page: 20 20 TeXDict begin HPSdict begin 20 19 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.20) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(20)p Black 75 428 4 100 v 188 399 a FF(gap>)44 b(VectorCodeword\()j(c)c(\);)p 3747 428 V 75 528 V 188 498 a([)g(0*Z\(2\),)h(Z\(2\)\2100,)h(Z\(2\)\2100,)g(Z\(2\)\2100,)g (0*Z\(2\))f(])p 3747 528 V 75 628 V 188 598 a(gap>)g(c2)f(:=)g (Codeword\([0,1,1,1,0],)49 b(GF\(3\)\);)p 3747 628 V 75 727 V 188 697 a([)43 b(0)f(1)h(1)g(1)f(0)h(])p 3747 727 V 75 827 V 188 797 a(gap>)h(VectorCodeword\()j(c2)c(\);)p 3747 827 V 75 927 V 188 897 a([)g(0*Z\(3\),)h(Z\(3\)\2100,)h (Z\(3\)\2100,)g(Z\(3\)\2100,)g(0*Z\(3\))f(])p 3747 927 V 75 1026 V 188 996 a(gap>)g(Codeword\([c,)i(c2,)d("0110"]\);)p 3747 1026 V 75 1126 V 188 1096 a([)g([)f(0)h(1)g(1)f(1)h(0)g(],)g([)f (0)h(1)g(1)f(1)h(0)g(],)g([)g(0)f(1)h(1)g(0)f(])h(])p 3747 1126 V 75 1225 V 188 1196 a(gap>)h(p)e(:=)h(UnivariatePolynomia)q (l\(G)q(F\()q(2\),)49 b([Z\(2\)\2100,)c(0*Z\(2\),)g(Z\(2\)\2100]\);)p 3747 1225 V 75 1325 V 188 1295 a(Z\(2\)\2100+x_1\2102)p 3747 1325 V 75 1425 V 188 1395 a(gap>)f(Codeword\(p\);)p 3747 1425 V 75 1524 V 188 1494 a(x\2102)f(+)g(1)p 3747 1524 V 75 1549 4 25 v 3747 1549 V 75 1552 3675 4 v 216 1738 a FK(This)20 b(command)h(can)f(also)g(be)g(called)h(using)h(the)e (syntax)h Ft(Codeword\(obj,C\))p FK(.)j(In)c(this)h(format,)g(the)f (elements)75 1851 y(of)26 b Ft(obj)h FK(are)g(con)l(v)o(erted)i(to)d (elements)i(of)f(the)f(same)h(ambient)h(v)o(ector)f(space)h(as)e(the)h (elements)h(of)e(a)g(code)h Ft(C)q FK(.)37 b(The)75 1964 y(command)24 b Ft(Codeword\(c,C\))j FK(is)d(the)f(same)h(as)f(calling)i Ft(Codeword\(c,n,F\))p FK(,)j(where)23 b Ft(n)g FK(is)g(the)h(w)o(ord)g (length)g(of)g Ft(C)75 2077 y FK(and)g(the)g Ft(F)f FK(is)g(the)h (ground)h(\002eld)f(of)f Ft(C)q FK(.)p 75 2197 1648 4 v 1764 2202 a FF(Example)p 2102 2197 V 75 2222 4 25 v 3747 2222 V 75 2321 4 100 v 188 2291 a(gap>)44 b(C)e(:=)h (WholeSpaceCode\(7,GF)q(\(5\))q(\);)p 3747 2321 V 75 2421 V 188 2391 a(a)g(cyclic)h([7,7,1]0)h(whole)f(space)g(code)g(over)g (GF\(5\))p 3747 2421 V 75 2521 V 188 2491 a(gap>)g (Codeword\(["0220110",)49 b([1,1,1]],)c(C\);)p 3747 2521 V 75 2620 V 188 2590 a([)e([)f(0)h(2)g(2)f(0)h(1)g(1)f(0)h(],)g([)g(1)f (1)h(1)g(0)f(0)h(0)g(0)g(])f(])p 3747 2620 V 75 2720 V 188 2690 a(gap>)i(Codeword\(["0220110",)49 b([1,1,1]],)c(7,)e (GF\(5\)\);)p 3747 2720 V 75 2819 V 188 2790 a([)g([)f(0)h(2)g(2)f(0)h (1)g(1)f(0)h(],)g([)g(1)f(1)h(1)g(0)f(0)h(0)g(0)g(])f(])p 3747 2819 V 75 2919 V 188 2889 a(gap>)i(C:=RandomLinearCode\(1)q(0,5)q (,GF)q(\(3)q(\)\);)p 3747 2919 V 75 3019 V 188 2989 a(a)f(linear)h ([10,5,1..3]3..5)j(random)e(linear)f(code)g(over)g(GF\(3\))p 3747 3019 V 75 3118 V 188 3088 a(gap>)g(Codeword\("1000000000")q(,C\))q (;)p 3747 3118 V 75 3218 V 188 3188 a([)f(1)f(0)h(0)g(0)f(0)h(0)g(0)f (0)h(0)g(0)f(])p 3747 3218 V 75 3318 V 188 3288 a(gap>)i (Codeword\("1000000000")q(,10)q(,GF)q(\(3)q(\)\);)p 3747 3318 V 75 3417 V 188 3387 a([)f(1)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(0)f (])p 3747 3417 V 75 3442 4 25 v 3747 3442 V 75 3445 3675 4 v 75 3578 a SDict begin H.S end 75 3578 a 75 3578 a SDict begin 13.6 H.A end 75 3578 a 75 3578 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.1.2) cvn H.B /DEST pdfmark end 75 3578 a 116 x FJ(3.1.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Codew)o(ordNr)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3868 a Fs(\006)22 b Ft(CodewordNr\()51 b(C,)c(list)h(\))2352 b Fr(\(function\))p Black 216 4094 a Ft(CodewordNr)23 b FK(returns)f(a)e(list)h(of)f(code)n(w)o(ords)i(of)f Ft(C)p FK(.)27 b Ft(list)21 b FK(may)f(be)g(a)g(list)h(of)f(inte)o (gers)i(or)f(a)e(single)j(inte)o(ger)-5 b(.)29 b(F)o(or)75 4207 y(each)d(inte)o(ger)g(of)f Ft(list)r FK(,)f(the)h(corresponding)30 b(code)n(w)o(ord)c(of)f Ft(C)g FK(is)g(returned.)35 b(The)25 b(correspondence)30 b(of)25 b(a)f(number)75 4320 y Fq(i)k FK(with)h(a)f(code)n(w)o(ord)j(is)d(determined)j(as)e(follo)n(ws:)40 b(if)29 b(a)f(list)i(of)e(elements)j(of)d Ft(C)h FK(is)f(a)n(v)n (ailable,)k(the)e Fq(i)3285 4287 y Fm(t)5 b(h)3374 4320 y FK(element)29 b(is)75 4433 y(tak)o(en.)f(Otherwise,)20 b(it)e(is)g(calculated)j(by)d(multiplication)k(of)c(the)g Fq(i)2147 4400 y Fm(t)5 b(h)2225 4433 y FK(information)21 b(v)o(ector)e(by)g(the)f(generator)j(matrix)75 4546 y(or)28 b(generator)j(polynomial,)g(where)e(the)f(information)j(v)o(ectors)e (are)g(ordered)h(le)o(xicographically)-6 b(.)47 b(In)29 b(particular)l(,)75 4659 y(the)37 b(returned)i(code)n(w)o(ord\(s\))g (could)f(be)f(a)g(v)o(ector)g(or)g(a)g(polynomial.)71 b(So)36 b Ft(CodewordNr\(C,)51 b(i\))37 b FK(is)f(equal)i(to)75 4772 y Ft(AsSSortedList\(C\)[i)q(])p FK(,)d(described)c(in)e(the)g(ne)o (xt)g(chapter)-5 b(.)47 b(The)28 b(latter)i(function)h(\002rst)e (calculates)i(the)e(set)g(of)75 4885 y(all)f(the)f(elements)i(of)23 b Fq(C)28 b FK(and)g(then)g(returns)h(the)f Fq(i)1648 4852 y Fm(t)5 b(h)1736 4885 y FK(element)28 b(of)g(that)g(set,)g (whereas)h(the)e(former)h(only)h(calculates)75 4998 y(the)24 b Fq(i)232 4965 y Fm(t)5 b(h)315 4998 y FK(code)n(w)o(ord.)p 75 5099 1648 4 v 1764 5104 a FF(Example)p 2102 5099 V 75 5124 4 25 v 3747 5124 V 75 5224 4 100 v 188 5194 a(gap>)44 b(B)e(:=)h(BinaryGolayCode\(\);)p 3747 5224 V 75 5323 V 188 5293 a(a)g(cyclic)h([23,12,7]3)i(binary)e(Golay)g(code)g(over)g (GF\(2\))p 3747 5323 V 75 5423 V 188 5393 a(gap>)g(c)e(:=)h (CodewordNr\(B,)k(4\);)p 3747 5423 V 75 5523 V 188 5493 a(x\21022)d(+)e(x\21020)i(+)f(x\21017)g(+)g(x\21014)h(+)e(x\21013)i(+)f (x\21012)h(+)e(x\21011)i(+)f(x\21010)p 3747 5523 V 75 5622 V 188 5592 a(gap>)h(R)e(:=)h(ReedSolomonCode\(2,2)q(\);)p 3747 5622 V Black Black eop end end %%Page: 21 21 TeXDict begin HPSdict begin 21 20 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.21) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(21)p Black 75 428 4 100 v 188 399 a FF(a)43 b(cyclic)h([2,1,2]1)h(Reed-Solomon)h(code)e(over)g(GF\(3\))p 3747 428 V 75 528 V 188 498 a(gap>)g(AsSSortedList\(R\);)p 3747 528 V 75 628 V 188 598 a([)f([)f(0)h(0)g(],)g([)f(1)h(1)g(],)g([)f (2)h(2)g(])f(])p 3747 628 V 75 727 V 188 697 a(gap>)i(CodewordNr\(R,)i ([1,3]\);)p 3747 727 V 75 827 V 188 797 a([)d([)f(0)h(0)g(],)g([)f(2)h (2)g(])f(])p 3747 827 V 75 852 4 25 v 3747 852 V 75 855 3675 4 v 75 986 a SDict begin H.S end 75 986 a 75 986 a SDict begin 13.6 H.A end 75 986 a 75 986 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.1.3) cvn H.B /DEST pdfmark end 75 986 a 116 x FJ(3.1.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsCodew)o(ord)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1276 a Fs(\006)22 b Ft(IsCodeword\()51 b(obj)c(\))2538 b Fr(\(function\))p Black 216 1502 a Ft(IsCodeword)34 b FK(returns)e(`true')g(if)f Ft(obj)q FK(,)h(which)f(can)h(be)e(an)h(object)i(of)e(arbitrary)i (type,)g(is)e(of)g(the)g(code)n(w)o(ord)75 1615 y(type)24 b(and)g(`f)o(alse')h(otherwise.)31 b(The)23 b(function)i(will)f(signal) h(an)e(error)h(if)g Ft(obj)g FK(is)f(an)g(unbound)j(v)n(ariable.)p 75 1725 1648 4 v 1764 1730 a FF(Example)p 2102 1725 V 75 1749 4 25 v 3747 1749 V 75 1849 4 100 v 188 1819 a(gap>)44 b(IsCodeword\(1\);)p 3747 1849 V 75 1949 V 188 1919 a(false)p 3747 1949 V 75 2048 V 188 2018 a(gap>)g(IsCodeword\(ReedMuller)q(Cod)q (e\(2)q(,3)q(\)\);)p 3747 2048 V 75 2148 V 188 2118 a(false)p 3747 2148 V 75 2248 V 188 2218 a(gap>)g(IsCodeword\("11111"\);)p 3747 2248 V 75 2347 V 188 2317 a(false)p 3747 2347 V 75 2447 V 188 2417 a(gap>)g(IsCodeword\(Codeword\(")q(111)q(11")q(\)\)) q(;)p 3747 2447 V 75 2546 V 188 2517 a(true)p 3747 2546 V 75 2571 4 25 v 3747 2571 V 75 2574 3675 4 v 75 2716 a SDict begin H.S end 75 2716 a 75 2716 a SDict begin 13.6 H.A end 75 2716 a 75 2716 a SDict begin [ /View [/XYZ H.V] /Dest (section.3.2) cvn H.B /DEST pdfmark end 75 2716 a 149 x FM(3.2)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Comparisons)29 b(of)h(Codew)o(ords)p Black 75 2984 a SDict begin H.S end 75 2984 a 75 2984 a SDict begin 13.6 H.A end 75 2984 a 75 2984 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.2.1) cvn H.B /DEST pdfmark end 75 2984 a 91 x FJ(3.2.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(=)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3250 a Fs(\006)22 b Ft(=\()47 b(c1,)h(c2)f(\))2816 b Fr(\(function\))p Black 216 3476 a FK(The)29 b(equality)j(operator)f Ft(c1)47 b(=)g(c2)29 b FK(e)n(v)n(aluates)j(to)d(`true')h(if)g(the)f (code)n(w)o(ords)j Ft(c1)d FK(and)h Ft(c2)f FK(are)h(equal,)h(and)f(to) 75 3588 y(`f)o(alse')d(otherwise.)37 b(Note)26 b(that)g(code)n(w)o (ords)i(are)e(equal)h(if)e(and)h(only)h(if)e(their)i(base)f(v)o(ectors) i(are)e(equal.)36 b(Whether)75 3701 y(the)o(y)24 b(are)g(represented)i (as)e(a)f(v)o(ector)h(or)g(polynomial)i(has)e(nothing)h(to)f(do)f(with) h(the)g(comparison.)216 3814 y(Comparing)i(code)n(w)o(ords)g(with)e (objects)i(of)e(other)h(types)h(is)e(not)g(recommended,)j(although)f (it)e(is)g(possible.)33 b(If)75 3927 y Ft(c2)d FK(is)g(the)g(code)n(w)o (ord,)j(the)e(other)g(object)g Ft(c1)f FK(is)g(\002rst)g(con)l(v)o (erted)j(to)d(a)g(code)n(w)o(ord,)j(after)d(which)h(comparison)h(is)75 4040 y(possible.)51 b(This)30 b(w)o(ay)-6 b(,)32 b(a)e(code)n(w)o(ord)i (can)e(be)h(compared)h(with)e(a)g(v)o(ector)l(,)j(polynomial,)h(or)c (string.)50 b(If)31 b Ft(c1)f FK(is)g(the)75 4153 y(code)n(w)o(ord,)c (then)g(problems)g(may)f(arise)h(if)e Ft(c2)h FK(is)g(a)f(polynomial.) 35 b(In)25 b(that)g(case,)h(the)f(comparison)i(al)o(w)o(ays)f(yields)75 4266 y(a)d(`f)o(alse',)i(because)g(the)f(polynomial)i(comparison)g(is)d (called.)216 4379 y(The)k(equality)i(operator)h(is)d(also)h(denoted)h Ft(EQ)p FK(,)e(and)h Ft(EQ\(c1,c2\))i FK(is)d(the)h(same)f(as)g Ft(c1)47 b(=)g(c2)p FK(.)40 b(There)27 b(is)h(also)75 4492 y(an)c(inequality)i(operator)l(,)g Fp(<)c(>)p FK(,)g(or)i Ft(not)47 b(EQ)p FK(.)p 75 4601 1648 4 v 1764 4606 a FF(Example)p 2102 4601 V 75 4626 4 25 v 3747 4626 V 75 4726 4 100 v 188 4696 a(gap>)d(P)e(:=)h(UnivariatePolynomia)q(l\(G)q (F\()q(2\),)49 b(Z\(2\)*[1,0,0,1]\);)p 3747 4726 V 75 4825 V 188 4795 a(Z\(2\)\2100+x_1\2103)p 3747 4825 V 75 4925 V 188 4895 a(gap>)44 b(c)e(:=)h(Codeword\(P,)j(GF\(2\)\);)p 3747 4925 V 75 5024 V 188 4995 a(x\2103)d(+)g(1)p 3747 5024 V 75 5124 V 188 5094 a(gap>)h(P)e(=)h(c;)339 b(#)43 b(codeword)i(operation)p 3747 5124 V 75 5224 V 188 5194 a(true)p 3747 5224 V 75 5323 V 188 5293 a(gap>)f(c2)f(:=)g (Codeword\("1001",)k(GF\(2\)\);)p 3747 5323 V 75 5423 V 188 5393 a([)c(1)f(0)h(0)g(1)f(])p 3747 5423 V 75 5523 V 188 5493 a(gap>)i(c)e(=)h(c2;)p 3747 5523 V 75 5622 V 188 5592 a(true)p 3747 5622 V Black Black eop end end %%Page: 22 22 TeXDict begin HPSdict begin 22 21 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.22) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(22)p Black 75 428 4 100 v 188 399 a FF(gap>)44 b(C:=HammingCode\(3\);)p 3747 428 V 75 528 V 188 498 a(a)f(linear)h([7,4,3]1)h(Hamming)g(\(3,2\))f(code)g(over)f(GF\(2\))p 3747 528 V 75 628 V 188 598 a(gap>)h(c1:=Random\(C\);)p 3747 628 V 75 727 V 188 697 a([)f(1)f(0)h(0)g(1)f(1)h(0)g(0)f(])p 3747 727 V 75 827 V 188 797 a(gap>)i(c2:=Random\(C\);)p 3747 827 V 75 927 V 188 897 a([)f(0)f(1)h(0)g(0)f(1)h(0)g(1)f(])p 3747 927 V 75 1026 V 188 996 a(gap>)i(EQ\(c1,c2\);)p 3747 1026 V 75 1126 V 188 1096 a(false)p 3747 1126 V 75 1225 V 188 1196 a(gap>)g(not)f(EQ\(c1,c2\);)p 3747 1225 V 75 1325 V 188 1295 a(true)p 3747 1325 V 75 1350 4 25 v 3747 1350 V 75 1353 3675 4 v 75 1494 a SDict begin H.S end 75 1494 a 75 1494 a SDict begin 13.6 H.A end 75 1494 a 75 1494 a SDict begin [ /View [/XYZ H.V] /Dest (section.3.3) cvn H.B /DEST pdfmark end 75 1494 a 150 x FM(3.3)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Arithmetic)31 b(Operations)f(f)m(or)f (Codew)o(ords)p Black 75 1762 a SDict begin H.S end 75 1762 a 75 1762 a SDict begin 13.6 H.A end 75 1762 a 75 1762 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.3.1) cvn H.B /DEST pdfmark end 75 1762 a 92 x FJ(3.3.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(+)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2028 a Fs(\006)22 b Ft(+\()47 b(c1,)h(c2)f(\))2816 b Fr(\(function\))p Black 216 2254 a FK(The)22 b(follo)n(wing)h (operations)j(are)c(al)o(w)o(ays)h(a)n(v)n(ailable)h(for)f(code)n(w)o (ords.)30 b(The)22 b(operands)i(must)e(ha)n(v)o(e)h(a)f(common)75 2367 y(base)i(\002eld,)f(and)h(must)g(ha)n(v)o(e)g(the)g(same)f (length.)31 b(No)22 b(implicit)j(con)l(v)o(ersions)i(are)d(performed.) 216 2480 y(The)f(operator)j Ft(+)d FK(e)n(v)n(aluates)i(to)f(the)g(sum) f(of)g(the)h(code)n(w)o(ords)i Ft(c1)d FK(and)h Ft(c2)q FK(.)p 75 2591 1648 4 v 1764 2596 a FF(Example)p 2102 2591 V 75 2615 4 25 v 3747 2615 V 75 2715 4 100 v 188 2685 a(gap>)44 b(C:=RandomLinearCode\(1)q(0,5)q(,GF)q(\(3)q(\)\);)p 3747 2715 V 75 2815 V 188 2785 a(a)f(linear)h([10,5,1..3]3..5)j(random) e(linear)f(code)g(over)g(GF\(3\))p 3747 2815 V 75 2914 V 188 2884 a(gap>)g(c:=Random\(C\);)p 3747 2914 V 75 3014 V 188 2984 a([)f(1)f(0)h(2)g(2)f(2)h(2)g(1)f(0)h(2)g(0)f(])p 3747 3014 V 75 3114 V 188 3084 a(gap>)i(Codeword\(c+"200000000)q(0"\))q (;)p 3747 3114 V 75 3213 V 188 3183 a([)f(0)f(0)h(2)g(2)f(2)h(2)g(1)f (0)h(2)g(0)f(])p 3747 3213 V 75 3313 V 188 3283 a(gap>)i (Codeword\(c+"100000000)q(0"\))q(;)p 3747 3313 V 75 3338 4 25 v 3747 3338 V 75 3341 3675 4 v 75 3541 a FK(The)50 b(last)h(command)g(returns)g(a)f Fy(GAP)e FK(ERR)l(OR)g(since)k(the)e (`code)n(w)o(ord')i(which)f Fy(GU)m(A)-6 b(V)f(A)48 b FK(associates)53 b(to)75 3654 y(\2241000000000\224)28 b(belongs)e(to)d Fq(GF)7 b Fo(\()p FK(2)p Fo(\))24 b FK(and)g(not)f Fq(GF)7 b Fo(\()p FK(3)p Fo(\))p FK(.)75 3808 y SDict begin H.S end 75 3808 a 75 3808 a SDict begin 13.6 H.A end 75 3808 a 75 3808 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.3.2) cvn H.B /DEST pdfmark end 75 3808 a 94 x FJ(3.3.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(-)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4076 a Fs(\006)22 b Ft(-\()47 b(c1,)h(c2)f(\))2816 b Fr(\(function\))p Black 216 4302 a FK(Similar)24 b(to)f(addition:)31 b(the)24 b(operator)i Ft(-)d FK(e)n(v)n(aluates)i(to)f(the)g(dif)n(ference)i(of)d(the)h(code) n(w)o(ords)h Ft(c1)f FK(and)g Ft(c2)p FK(.)75 4452 y SDict begin H.S end 75 4452 a 75 4452 a SDict begin 13.6 H.A end 75 4452 a 75 4452 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.3.3) cvn H.B /DEST pdfmark end 75 4452 a 97 x FJ(3.3.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(+)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4723 a Fs(\006)e Ft(+\()47 b(v,)h(C)e(\))2909 b Fr(\(function\))p Black 216 4949 a FK(The)18 b(operator)i Ft(v+C)f FK(e)n(v)n(aluates)h(to)e(the)h(coset)g(code)g(of)f(code)h Ft(C)f FK(after)h(adding)h(a)e(`code)n(w)o(ord')i Ft(v)e FK(to)g(all)g(code)n(w)o(ords)75 5062 y(in)25 b Ft(C)q FK(.)33 b(Note)26 b(that)g(if)f Fq(c)d Fv(2)15 b Fq(C)27 b FK(then)f(mathematically)j Fq(c)13 b Fo(+)8 b Fq(C)24 b Fo(=)16 b Fq(C)26 b FK(b)n(ut)g Fy(GU)m(A)-6 b(V)f(A)24 b FK(only)i(sees)g(them)g(equal)g(as)g Fq(sets)p FK(.)35 b(See)75 5175 y Ft(CosetCode)26 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 545 5176 a SDict begin H.S end 545 5176 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.16)p 0.0236 0.0894 0.6179 TeXcolorrgb 771 5113 a SDict begin H.R end 771 5113 a 771 5175 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.16) cvn H.B /ANN pdfmark end 771 5175 a Black FK(\).)216 5288 y(Note)e(that)g(the)f(command)i Ft(C+v)f FK(returns)h(the)f(same)f (output)i(as)f(the)f(command)i Ft(v+C)p FK(.)p 75 5398 1648 4 v 1764 5403 a FF(Example)p 2102 5398 V 75 5423 4 25 v 3747 5423 V 75 5523 4 100 v 188 5493 a(gap>)44 b(C:=RandomLinearCode\(1)q(0,5)q(\);)p 3747 5523 V 75 5622 V 188 5592 a(a)85 b([10,5,?])45 b(randomly)g(generated)g(code)f (over)g(GF\(2\))p 3747 5622 V Black Black eop end end %%Page: 23 23 TeXDict begin HPSdict begin 23 22 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.23) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(23)p Black 75 428 4 100 v 188 399 a FF(gap>)44 b(c:=Random\(C\);)p 3747 428 V 75 528 V 188 498 a([)f(0)f(0)h(0)g(0)f (0)h(0)g(0)f(0)h(0)g(0)f(])p 3747 528 V 75 628 V 188 598 a(gap>)i(c+C;)p 3747 628 V 75 727 V 188 697 a([)f(add.)g(coset)h (of)f(a)85 b([10,5,?])45 b(randomly)h(generated)f(code)f(over)f (GF\(2\))h(])p 3747 727 V 75 827 V 188 797 a(gap>)g(c+C=C;)p 3747 827 V 75 927 V 188 897 a(true)p 3747 927 V 75 1026 V 188 996 a(gap>)g(IsLinearCode\(c+C\);)p 3747 1026 V 75 1126 V 188 1096 a(false)p 3747 1126 V 75 1225 V 188 1196 a(gap>)g(v:=Codeword\("10000000)q(0"\))q(;)p 3747 1225 V 75 1325 V 188 1295 a([)f(1)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(])p 3747 1325 V 75 1425 V 188 1395 a(gap>)h(v+C;)p 3747 1425 V 75 1524 V 188 1494 a([)f(add.)g(coset)h(of)f(a)85 b([10,5,?])45 b(randomly)h(generated)f(code)f(over)f(GF\(2\))h(])p 3747 1524 V 75 1624 V 188 1594 a(gap>)g(C=v+C;)p 3747 1624 V 75 1724 V 188 1694 a(false)p 3747 1724 V 75 1823 V 188 1793 a(gap>)g(C)e(:=)h(GeneratorMatCode\()48 b([)43 b([1,)h(0,0,0],)g([0,)g(1,0,0])g(],)f(GF\(2\))h(\);)p 3747 1823 V 75 1923 V 188 1893 a(a)f(linear)h([4,2,1]1)h(code)f (defined)g(by)g(generator)h(matrix)f(over)g(GF\(2\))p 3747 1923 V 75 2022 V 188 1993 a(gap>)g(Elements\(C\);)p 3747 2022 V 75 2122 V 188 2092 a([)f([)f(0)h(0)g(0)f(0)h(],)g([)g(0)f (1)h(0)g(0)f(],)h([)g(1)g(0)g(0)f(0)h(],)g([)g(1)f(1)h(0)g(0)f(])h(])p 3747 2122 V 75 2222 V 188 2192 a(gap>)h(v:=Codeword\("0011"\);)p 3747 2222 V 75 2321 V 188 2291 a([)f(0)f(0)h(1)g(1)f(])p 3747 2321 V 75 2421 V 188 2391 a(gap>)i(C+v;)p 3747 2421 V 75 2521 V 188 2491 a([)f(add.)g(coset)h(of)f(a)g(linear)h([4,2,4]1)i (code)d(defined)i(by)e(generator)i(matrix)g(over)e(GF\(2\))i(])p 3747 2521 V 75 2620 V 188 2590 a(gap>)f(Elements\(C+v\);)p 3747 2620 V 75 2720 V 188 2690 a([)f([)f(0)h(0)g(1)f(1)h(],)g([)g(0)f (1)h(1)g(1)f(],)h([)g(1)g(0)g(1)f(1)h(],)g([)g(1)f(1)h(1)g(1)f(])h(])p 3747 2720 V 75 2745 4 25 v 3747 2745 V 75 2748 3675 4 v 75 2937 a FK(In)29 b(general,)k(the)d(operations)i(just)e(described)j (can)d(also)g(be)f(performed)j(on)d(code)n(w)o(ords)j(e)o(xpressed)g (as)d(v)o(ectors,)75 3050 y(strings)j(or)e(polynomials,)35 b(although)d(this)f(is)f(not)h(recommended.)51 b(The)30 b(v)o(ector)l(,)j(string)f(or)e(polynomial)i(is)f(\002rst)75 3163 y(con)l(v)o(erted)g(to)e(a)f(code)n(w)o(ord,)j(after)e(which)g (the)g(normal)g(operation)i(is)d(performed.)46 b(F)o(or)27 b(this)j(to)e(go)h(right,)h(mak)o(e)75 3276 y(sure)h(that)g(at)f(least) h(one)f(of)g(the)h(operands)h(is)e(a)g(code)n(w)o(ord.)50 b(Further)31 b(more,)h(it)e(will)g(not)g(w)o(ork)h(when)f(the)g(right) 75 3389 y(operand)c(is)e(a)g(polynomial.)33 b(In)24 b(that)h(case,)g (the)g(polynomial)h(operations)h(\()p Ft(FiniteFieldPolyno)q(mia)q(lO)q (ps)p FK(\))j(are)75 3502 y(called,)25 b(instead)g(of)e(the)h(code)n(w) o(ord)h(operations)i(\()p Ft(CodewordOps)p FK(\).)216 3615 y(Some)c(other)h(code-oriented)k(operations)e(with)e(code)n(w)o (ords)h(are)f(described)i(in)p 0.0236 0.0894 0.6179 TeXcolorrgb 2775 3616 a SDict begin H.S end 2775 3616 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 2888 3553 a SDict begin H.R end 2888 3553 a 2888 3615 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.2) cvn H.B /ANN pdfmark end 2888 3615 a Black FK(.)75 3774 y SDict begin H.S end 75 3774 a 75 3774 a SDict begin 13.6 H.A end 75 3774 a 75 3774 a SDict begin [ /View [/XYZ H.V] /Dest (section.3.4) cvn H.B /DEST pdfmark end 75 3774 a 130 x FM(3.4)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Functions)31 b(that)e(Con)-5 b(v)o(ert)31 b(Codew)o(ords)f(to)g(V)-12 b(ectors)29 b(or)h(P)n(olynomials)p Black 75 4022 a SDict begin H.S end 75 4022 a 75 4022 a SDict begin 13.6 H.A end 75 4022 a 75 4022 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.4.1) cvn H.B /DEST pdfmark end 75 4022 a 92 x FJ(3.4.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(V)-10 b(ectorCodew)o(ord)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4288 a Fs(\006)22 b Ft(VectorCodeword\()52 b(obj)c(\))2352 b Fr(\(function\))p Black 216 4514 a FK(Here)31 b Ft(obj)h FK(can)g(be)f(a)g(code)h(w)o (ord)g(or)f(a)g(list)h(of)f(code)i(w)o(ords.)52 b(This)32 b(function)h(returns)g(the)f(corresponding)75 4627 y(v)o(ectors)25 b(o)o(v)o(er)e(a)h(\002nite)f(\002eld.)p 75 4708 1648 4 v 1764 4713 a FF(Example)p 2102 4708 V 75 4733 4 25 v 3747 4733 V 75 4832 4 100 v 188 4802 a(gap>)44 b(a)e(:=)h (Codeword\("011011"\);)q(;)p 3747 4832 V 75 4932 V 188 4902 a(gap>)h(VectorCodeword\(a\);)p 3747 4932 V 75 5032 V 188 5002 a([)f(0*Z\(2\),)h(Z\(2\)\2100,)h(Z\(2\)\2100,)g(0*Z\(2\),)g (Z\(2\)\2100,)f(Z\(2\)\2100)h(])p 3747 5032 V 75 5056 4 25 v 3747 5056 V 75 5059 3675 4 v 75 5189 a SDict begin H.S end 75 5189 a 75 5189 a SDict begin 13.6 H.A end 75 5189 a 75 5189 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.4.2) cvn H.B /DEST pdfmark end 75 5189 a 116 x FJ(3.4.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(P)n(olyCodew)o(ord)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5479 a Fs(\006)22 b Ft(PolyCodeword\()51 b(obj)d(\))2445 b Fr(\(function\))p Black Black Black eop end end %%Page: 24 24 TeXDict begin HPSdict begin 24 23 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.24) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(24)p Black 216 399 a Ft(PolyCodeword)31 b FK(returns)d(a)f(polynomial)i(or)e(a)f(list)i(of)f(polynomials)i(o)o (v)o(er)e(a)g(Galois)g(\002eld,)h(con)l(v)o(erted)h(from)75 511 y Ft(obj)q FK(.)f(The)23 b(object)i Ft(obj)f FK(can)g(be)f(a)g (code)n(w)o(ord,)i(or)f(a)f(list)h(of)f(code)n(w)o(ords.)p 75 631 1648 4 v 1764 636 a FF(Example)p 2102 631 V 75 656 4 25 v 3747 656 V 75 756 4 100 v 188 726 a(gap>)44 b(a)e(:=)h(Codeword\("011011"\);)q(;)p 3747 756 V 75 856 V 188 826 a(gap>)h(PolyCodeword\(a\);)p 3747 856 V 75 955 V 188 925 a(x_1+x_1\2102+x_1\2104+x_1\210)q(5)p 3747 955 V 75 980 4 25 v 3747 980 V 75 983 3675 4 v 75 1126 a SDict begin H.S end 75 1126 a 75 1126 a SDict begin 13.6 H.A end 75 1126 a 75 1126 a SDict begin [ /View [/XYZ H.V] /Dest (section.3.5) cvn H.B /DEST pdfmark end 75 1126 a 150 x FM(3.5)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Functions)31 b(that)e(Change)i(the)g(Display)f(F)m(orm)f(of)h(a)f(Codew)o(ord)p Black 75 1394 a SDict begin H.S end 75 1394 a 75 1394 a SDict begin 13.6 H.A end 75 1394 a 75 1394 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.5.1) cvn H.B /DEST pdfmark end 75 1394 a 92 x FJ(3.5.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(T)-7 b(r)n(eatAsV)d(ector)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1660 a Fs(\006)22 b Ft(TreatAsVector\()52 b(obj)47 b(\))2399 b Fr(\(function\))p Black 216 1886 a Ft(TreatAsVector)30 b FK(adapts)e(the)e(code)n(w)o(ords)i(in)e Ft(obj)g FK(to)h(mak)o(e)f (sure)h(the)o(y)f(are)g(printed)i(as)e(v)o(ectors.)38 b Ft(obj)26 b FK(may)75 1999 y(be)e(a)g(code)n(w)o(ord)i(or)e(a)g(list) g(of)g(code)n(w)o(ords.)33 b(Elements)25 b(of)f Ft(obj)g FK(that)h(are)g(not)f(code)n(w)o(ords)i(are)f(ignored.)32 b(After)25 b(this)75 2112 y(function)j(is)e(called,)i(the)e(code)n(w)o (ords)i(will)d(be)h(treated)i(as)e(v)o(ectors.)37 b(The)26 b(v)o(ector)h(representation)j(is)c(obtained)i(by)75 2225 y(using)d(the)f(coef)n(\002cient)h(list)f(of)f(the)h(polynomial.) 216 2338 y(Note)30 b(that)h(this)g Fq(only)f FK(changes)i(the)f(w)o(ay) f(a)f(code)n(w)o(ord)j(is)e Fq(printed)p FK(.)50 b Ft(TreatAsVector)34 b FK(returns)e(nothing,)h(it)75 2451 y(is)28 b(called)i(only)g(for)f (its)f(side)h(ef)n(fect.)45 b(The)28 b(function)j Ft(VectorCodeword)i FK(con)l(v)o(erts)e(code)n(w)o(ords)f(to)f(v)o(ectors)h(\(see)75 2564 y Ft(VectorCodeword)e FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 777 2565 a SDict begin H.S end 777 2565 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.4.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 958 2502 a SDict begin H.R end 958 2502 a 958 2564 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.4.1) cvn H.B /ANN pdfmark end 958 2564 a Black FK(\)\).)p 75 2680 1648 4 v 1764 2685 a FF(Example)p 2102 2680 V 75 2705 4 25 v 3747 2705 V 75 2805 4 100 v 188 2775 a(gap>)44 b(B)e(:=)h(BinaryGolayCode\(\);)p 3747 2805 V 75 2904 V 188 2874 a(a)g(cyclic)h([23,12,7]3)i(binary)e(Golay)g(code)g(over)g (GF\(2\))p 3747 2904 V 75 3004 V 188 2974 a(gap>)g(c)e(:=)h (CodewordNr\(B,)k(4\);)p 3747 3004 V 75 3103 V 188 3074 a(x\21022)d(+)e(x\21020)i(+)f(x\21017)g(+)g(x\21014)h(+)e(x\21013)i(+)f (x\21012)h(+)e(x\21011)i(+)f(x\21010)p 3747 3103 V 75 3203 V 188 3173 a(gap>)h(TreatAsVector\(c\);)p 3747 3203 V 75 3303 V 188 3273 a(gap>)g(c;)p 3747 3303 V 75 3402 V 188 3372 a([)f(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(0)f(1)h(1)g(1)f(1) h(1)g(0)g(0)f(1)h(0)g(0)f(1)h(0)g(1)f(])p 3747 3402 V 75 3427 4 25 v 3747 3427 V 75 3430 3675 4 v 75 3563 a SDict begin H.S end 75 3563 a 75 3563 a SDict begin 13.6 H.A end 75 3563 a 75 3563 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.5.2) cvn H.B /DEST pdfmark end 75 3563 a 116 x FJ(3.5.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(T)-7 b(r)n(eatAsP)n(oly)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3854 a Fs(\006)22 b Ft(TreatAsPoly\()51 b(obj)d(\))2491 b Fr(\(function\))p Black 216 4079 a Ft(TreatAsPoly)23 b FK(adapts)f(the)e(code)n(w)o(ords) i(in)d Ft(obj)i FK(to)e(mak)o(e)i(sure)f(the)o(y)g(are)h(printed)g(as)f (polynomials.)30 b Ft(obj)20 b FK(may)75 4192 y(be)k(a)g(code)n(w)o (ord)i(or)e(a)g(list)g(of)g(code)n(w)o(ords.)33 b(Elements)25 b(of)f Ft(obj)g FK(that)h(are)g(not)f(code)n(w)o(ords)i(are)f(ignored.) 32 b(After)25 b(this)75 4305 y(function)31 b(is)e(called,)i(the)e(code) n(w)o(ords)i(will)d(be)h(treated)h(as)f(polynomials.)47 b(The)29 b(\002nite)g(\002eld)f(v)o(ector)i(that)f(de\002nes)75 4418 y(the)d(code)n(w)o(ord)h(is)e(used)h(as)g(a)f(coef)n(\002cient)i (list)f(of)f(the)h(polynomial)i(representation,)i(where)c(the)g (\002rst)f(element)h(of)75 4531 y(the)j(v)o(ector)i(is)e(the)g(coef)n (\002cient)i(of)e(de)o(gree)h(zero,)h(the)f(second)h(element)f(is)f (the)g(coef)n(\002cient)i(of)e(de)o(gree)h(one,)h(etc,)75 4644 y(until)24 b(the)g(last)g(element,)h(which)e(is)h(the)g(coef)n (\002cient)h(of)e(highest)j(de)o(gree.)216 4757 y(Note)k(that)h(this)g Fq(only)g FK(changes)h(the)f(w)o(ay)f(a)g(code)n(w)o(ord)h(is)g Fq(printed)p FK(.)50 b Ft(TreatAsPoly)34 b FK(returns)e(nothing,)h(it)d (is)75 4870 y(called)f(only)g(for)g(its)f(side)h(ef)n(fect.)43 b(The)28 b(function)i Ft(PolyCodeword)i FK(con)l(v)o(erts)e(code)n(w)o (ords)g(to)e(polynomials)j(\(see)75 4983 y Ft(PolyCodeword)c FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 684 4984 a SDict begin H.S end 684 4984 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.4.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 865 4921 a SDict begin H.R end 865 4921 a 865 4983 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.4.2) cvn H.B /ANN pdfmark end 865 4983 a Black FK(\)\).)p 75 5099 1648 4 v 1764 5104 a FF(Example)p 2102 5099 V 75 5124 4 25 v 3747 5124 V 75 5224 4 100 v 188 5194 a(gap>)44 b(a)e(:=)h (Codeword\("00001",GF)q(\(2\))q(\);)p 3747 5224 V 75 5323 V 188 5293 a([)g(0)f(0)h(0)g(0)f(1)h(])p 3747 5323 V 75 5423 V 188 5393 a(gap>)h(TreatAsPoly\(a\);)j(a;)p 3747 5423 V 75 5523 V 188 5493 a(x\2104)p 3747 5523 V 75 5622 V 188 5592 a(gap>)d(b)e(:=)h(NullWord\(6,GF\(4\)\);)p 3747 5622 V Black Black eop end end %%Page: 25 25 TeXDict begin HPSdict begin 25 24 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.25) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(25)p Black 75 428 4 100 v 188 399 a FF([)43 b(0)f(0)h(0)g(0)f(0)h(0)g(])p 3747 428 V 75 528 V 188 498 a(gap>)h(TreatAsPoly\(b\);)j(b;)p 3747 528 V 75 628 V 188 598 a(0)p 3747 628 V 75 653 4 25 v 3747 653 V 75 656 3675 4 v 75 799 a SDict begin H.S end 75 799 a 75 799 a SDict begin 13.6 H.A end 75 799 a 75 799 a SDict begin [ /View [/XYZ H.V] /Dest (section.3.6) cvn H.B /DEST pdfmark end 75 799 a 149 x FM(3.6)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Other)30 b(Codew)o(ord)h(Functions)p Black 75 1045 a SDict begin H.S end 75 1045 a 75 1045 a SDict begin 13.6 H.A end 75 1045 a 75 1045 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.6.1) cvn H.B /DEST pdfmark end 75 1045 a 114 x FJ(3.6.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(NullW)-7 b(ord)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1333 a Fs(\006)22 b Ft(NullWord\()50 b(n,)d(F)g(\))2584 b Fr(\(function\))p Black 216 1559 a FK(Other)20 b(uses:)28 b Ft(NullWord\()50 b(n)c(\))20 b FK(\(def)o(ault)h Fq(F)j Fo(=)16 b Fq(GF)7 b Fo(\()p FK(2)p Fo(\))p FK(\))20 b(and)g Ft(NullWord\()50 b(C)d(\))p FK(.)19 b Ft(NullWord)j FK(returns)f(a)e(code-)75 1672 y(w)o(ord)j(of)h(length)h Ft(n)d FK(o)o(v)o(er)i(the)f(\002eld)h Ft(F)e FK(of)i(only)g(zeros.)29 b(The)22 b(inte)o(ger)i Ft(n)e FK(must)g(be)g(greater)i(then)f(zero.)29 b(If)22 b(only)h(a)f(code)75 1785 y Ft(C)h FK(is)g(speci\002ed,)i Ft(NullWord)h FK(will)d(return)i(a)e(null)h(w)o(ord)g(with)f(both)h (the)g(w)o(ord)g(length)h(and)f(the)g(Galois)g(\002eld)f(of)h Ft(C)p FK(.)p 75 1907 1648 4 v 1764 1912 a FF(Example)p 2102 1907 V 75 1932 4 25 v 3747 1932 V 75 2032 4 100 v 188 2002 a(gap>)44 b(NullWord\(8\);)p 3747 2032 V 75 2132 V 188 2102 a([)f(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(])p 3747 2132 V 75 2231 V 188 2201 a(gap>)h(Codeword\("0000"\))j(=)c (NullWord\(4\);)p 3747 2231 V 75 2331 V 188 2301 a(true)p 3747 2331 V 75 2430 V 188 2401 a(gap>)h(NullWord\(5,GF\(16\)\);)p 3747 2430 V 75 2530 V 188 2500 a([)f(0)f(0)h(0)g(0)f(0)h(])p 3747 2530 V 75 2630 V 188 2600 a(gap>)h(NullWord\(ExtendedTern)q(ary)q (Gol)q(ay)q(Cod)q(e\(\))q(\);)p 3747 2630 V 75 2729 V 188 2699 a([)f(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(])p 3747 2729 V 75 2754 4 25 v 3747 2754 V 75 2757 3675 4 v 75 2890 a SDict begin H.S end 75 2890 a 75 2890 a SDict begin 13.6 H.A end 75 2890 a 75 2890 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.6.2) cvn H.B /DEST pdfmark end 75 2890 a 117 x FJ(3.6.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(DistanceCodew)o (ord)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3181 a Fs(\006)22 b Ft(DistanceCodeword\()53 b(c1,)47 b(c2)g(\))2121 b Fr(\(function\))p Black 216 3407 a Ft(DistanceCodeword)32 b FK(returns)c(the)e(Hamming)h(distance)h(from)e Ft(c1)h FK(to)f Ft(c2)q FK(.)36 b(Both)27 b(v)n(ariables)h(must)f(be)f(code-)75 3520 y(w)o(ords)e(with)f(equal)h(w)o(ord)f(length)i(o)o(v)o(er)e(the)g (same)h(Galois)f(\002eld.)29 b(The)22 b(Hamming)h(distance)j(between)e (tw)o(o)f(w)o(ords)75 3633 y(is)c(the)h(number)h(of)e(places)i(in)f (which)g(the)o(y)g(dif)n(fer)-5 b(.)28 b(As)19 b(a)g(result,)i Ft(DistanceCodeword)k FK(al)o(w)o(ays)20 b(returns)h(an)f(inte)o(ger)75 3746 y(between)25 b(zero)f(and)g(the)g(w)o(ord)f(length)i(of)f(the)g (code)n(w)o(ords.)p 75 3868 1648 4 v 1764 3873 a FF(Example)p 2102 3868 V 75 3893 4 25 v 3747 3893 V 75 3993 4 100 v 188 3963 a(gap>)44 b(a)e(:=)h(Codeword\([0,)k(1,)c(2,)g(0,)g(1,)g (2]\);;)h(b)f(:=)g(NullWord\(6,)j(GF\(3\)\);;)p 3747 3993 V 75 4092 V 188 4062 a(gap>)e(DistanceCodeword\(a,)k(b\);)p 3747 4092 V 75 4192 V 188 4162 a(4)p 3747 4192 V 75 4292 V 188 4262 a(gap>)c(DistanceCodeword\(b,)k(a\);)p 3747 4292 V 75 4391 V 188 4361 a(4)p 3747 4391 V 75 4491 V 188 4461 a(gap>)c(DistanceCodeword\(a,)k(a\);)p 3747 4491 V 75 4590 V 188 4561 a(0)p 3747 4590 V 75 4615 4 25 v 3747 4615 V 75 4618 3675 4 v 75 4752 a SDict begin H.S end 75 4752 a 75 4752 a SDict begin 13.6 H.A end 75 4752 a 75 4752 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.6.3) cvn H.B /DEST pdfmark end 75 4752 a 116 x FJ(3.6.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Support)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5042 a Fs(\006)22 b Ft(Support\()50 b(c)c(\))2770 b Fr(\(function\))p Black 216 5268 a Ft(Support)24 b FK(returns)f(a)e(set)h(of)g(inte)o(gers)h(indicating)i(the)d(positions) i(of)e(the)g(non-zero)i(entries)f(in)f(a)f(code)n(w)o(ord)i Ft(c)q FK(.)p 75 5391 1648 4 v 1764 5396 a FF(Example)p 2102 5391 V 75 5415 4 25 v 3747 5415 V 75 5515 4 100 v 188 5485 a(gap>)44 b(a)e(:=)h(Codeword\("012320023)q(002)q("\))q(;;) 49 b(Support\(a\);)p 3747 5515 V 75 5615 V 188 5585 a([)43 b(2,)g(3,)g(4,)g(5,)g(8,)g(9,)g(12)g(])p 3747 5615 V Black Black eop end end %%Page: 26 26 TeXDict begin HPSdict begin 26 25 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.26) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(26)p Black 75 428 4 100 v 188 399 a FF(gap>)44 b(Support\(NullWord\(7\)\);)p 3747 428 V 75 528 V 188 498 a([)85 b(])p 3747 528 V 75 553 4 25 v 3747 553 V 75 556 3675 4 v 75 769 a FK(The)23 b(support)i(of)e(a)g(list)g(with)g (code)n(w)o(ords)i(can)f(be)f(calculated)j(by)d(taking)i(the)e(union)i (of)e(the)g(indi)n(vidual)j(supports.)75 882 y(The)d(weight)h(of)g(the) g(support)h(is)e(the)h(length)h(of)f(the)f(set.)p 75 979 1648 4 v 1764 984 a FF(Example)p 2102 979 V 75 1004 4 25 v 3747 1004 V 75 1104 4 100 v 188 1074 a(gap>)44 b(L)e(:=)h(Codeword\(["000000",)49 b("101010",)d("222000"],)f (GF\(3\)\);;)p 3747 1104 V 75 1204 V 188 1174 a(gap>)f(S)e(:=)h (Union\(List\(L,)k(i)c(->)g(Support\(i\)\)\);)p 3747 1204 V 75 1303 V 188 1273 a([)g(1,)g(2,)g(3,)g(5)f(])p 3747 1303 V 75 1403 V 188 1373 a(gap>)i(Length\(S\);)p 3747 1403 V 75 1502 V 188 1473 a(4)p 3747 1502 V 75 1527 4 25 v 3747 1527 V 75 1530 3675 4 v 75 1664 a SDict begin H.S end 75 1664 a 75 1664 a SDict begin 13.6 H.A end 75 1664 a 75 1664 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.6.4) cvn H.B /DEST pdfmark end 75 1664 a 116 x FJ(3.6.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(W)-6 b(eightCodew)o(ord)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1954 a Fs(\006)22 b Ft(WeightCodeword\()52 b(c)47 b(\))2445 b Fr(\(function\))p Black 216 2180 a Ft(WeightCodeword)31 b FK(returns)e(the)e(weight)g(of) g(a)f(code)n(w)o(ord)i Fq(c)p FK(,)f(the)g(number)h(of)f(non-zero)i (entries)f(in)f Ft(c)p FK(.)38 b(As)26 b(a)75 2293 y(result,)21 b Ft(WeightCodeword)i FK(al)o(w)o(ays)d(returns)g(an)f(inte)o(ger)i (between)f(zero)f(and)h(the)f(w)o(ord)g(length)h(of)f(the)g(code)n(w)o (ord.)p 75 2415 1648 4 v 1764 2420 a FF(Example)p 2102 2415 V 75 2440 4 25 v 3747 2440 V 75 2540 4 100 v 188 2510 a(gap>)44 b(WeightCodeword\(Codewo)q(rd\()q("22)q(22)q(2"\))q(\);) p 3747 2540 V 75 2640 V 188 2610 a(5)p 3747 2640 V 75 2739 V 188 2709 a(gap>)g(WeightCodeword\(NullWo)q(rd\()q(3\)\))q(;)p 3747 2739 V 75 2839 V 188 2809 a(0)p 3747 2839 V 75 2939 V 188 2909 a(gap>)g(C)e(:=)h(HammingCode\(3\);)p 3747 2939 V 75 3038 V 188 3008 a(a)g(linear)h([7,4,3]1)h(Hamming)g(\(3,2\))f (code)g(over)f(GF\(2\))p 3747 3038 V 75 3138 V 188 3108 a(gap>)h(Minimum\(List\(AsSSorte)q(dLi)q(st\()q(C\))q({[2)q(..S)q(ize)q (\(C\))q(]},)49 b(WeightCodeword)e(\))c(\);)p 3747 3138 V 75 3237 V 188 3208 a(3)p 3747 3237 V 75 3262 4 25 v 3747 3262 V 75 3265 3675 4 v Black Black eop end end %%Page: 27 27 TeXDict begin HPSdict begin 27 26 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.27) cvn H.B /DEST pdfmark end 75 100 a Black Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (chapter.4) cvn H.B /DEST pdfmark end 75 307 a 714 x Fw(Chapter)44 b(4)p 0.0 0.0 1.0 TeXcolorrgb 75 1436 a FA(Codes)p Black 75 1881 a FK(A)30 b Fq(code)i FK(is)e(a)h(set)g(of)g (code)n(w)o(ords)i(\(recall)f(a)61 b(code)n(w)o(ord)32 b(in)f Fy(GU)m(A)-6 b(V)f(A)29 b FK(is)i(simply)h(a)e(sequence)k(of)c (elements)j(of)e(a)75 1994 y(\002nite)26 b(\002eld)f Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(,)26 b(where)f Fq(q)g FK(is)h(a)f(prime)h(po)n(wer\).)34 b(W)-7 b(e)25 b(call)h(these)g(the)g Fq(elements)h FK(of)e(the)h(code.)36 b(Depending)27 b(on)75 2107 y(the)h(type)g(of)f(code,)i(a)e(code)n(w)o(ord)i(can)f(be)f (interpreted)k(as)c(a)g(v)o(ector)i(or)e(as)g(a)g(polynomial.)43 b(This)27 b(is)h(e)o(xplained)h(in)75 2220 y(more)24 b(detail)g(in)g(Chapter)p 0.0236 0.0894 0.6179 TeXcolorrgb 913 2221 a SDict begin H.S end 913 2221 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3)p 0.0236 0.0894 0.6179 TeXcolorrgb 958 2158 a SDict begin H.R end 958 2158 a 958 2220 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (chapter.3) cvn H.B /ANN pdfmark end 958 2220 a Black FK(.)216 2333 y(In)i Fy(GU)m(A)-6 b(V)f(A)p FK(,)24 b(codes)j(can)g(be)f(a)f(set)h (speci\002ed)i(by)e(its)g(elements)h(\(this)g(will)f(be)g(called)h(an)f Fq(unr)m(estricted)j(code)p FK(\),)75 2446 y(by)e(a)f(generator)j (matrix)e(listing)h(a)e(set)h(of)f(basis)i(elements)g(\(for)f(a)f (linear)i(code\))g(or)e(by)h(a)f(generator)j(polynomial)75 2559 y(\(for)24 b(a)f(c)o(yclic)i(code\).)216 2672 y(An)o(y)e(code)h (can)g(be)g(de\002ned)g(by)g(its)f(elements.)31 b(If)23 b(you)h(lik)o(e,)g(you)g(can)g(gi)n(v)o(e)f(the)h(code)h(a)e(name.)p 75 2769 1648 4 v 1764 2774 a FF(Example)p 2102 2769 V 75 2794 4 25 v 3747 2794 V 75 2894 4 100 v 188 2864 a(gap>)44 b(C)e(:=)h(ElementsCode\(["1100)q(",)49 b("1010",)c("0001"],)g ("example)g(code",)f(GF\(2\))g(\);)p 3747 2894 V 75 2994 V 188 2964 a(a)f(\(4,3,1..4\)2..4)k(example)d(code)g(over)g(GF\(2\))p 3747 2994 V 75 3018 4 25 v 3747 3018 V 75 3021 3675 4 v 75 3209 a FK(An)27 b Fo(\()p Fq(n)p Fp(;)10 b Fq(M)t Fp(;)g Fq(d)5 b Fo(\))28 b FK(code)g(is)f(a)g(code)h(with)g(w)o(ord)f Fq(length)i(n)p FK(,)f Fq(size)g(M)i FK(and)e Fq(minimum)f(distance)j (d)5 b FK(.)119 b(If)28 b(the)f(minimum)75 3322 y(distance)e(has)f(not) g(yet)g(been)g(calculated,)i(the)e(lo)n(wer)f(bound)i(and)f(upper)g (bound)h(are)f(printed)h(\(e)o(xcept)g(in)e(the)h(case)75 3435 y(where)g(the)g(code)g(is)f(a)g(random)i(linear)g(codes,)f(where)g (these)g(are)g(not)g(printed)h(for)f(ef)n(\002cienc)o(y)h(reasons\).)30 b(So)p Black Black 168 3623 a Ft(a)46 b(\(4,3,1..4\)2..4)52 b(code)c(over)g(GF\(2\))75 3810 y FK(means)30 b(a)f(binary)i (unrestricted)i(code)d(of)g(length)h(4,)f(with)f(3)h(elements)h(and)f (the)f(minimum)h(distance)h(is)f(greater)75 3923 y(than)25 b(or)g(equal)h(to)e(1)g(and)h(less)h(than)f(or)f(equal)i(to)f(4)f(and)h (the)g(co)o(v)o(ering)h(radius)g(is)e(greater)i(than)g(or)e(equal)i(to) e(2)h(and)75 4036 y(less)f(than)g(or)g(equal)g(to)g(4.)p 75 4134 1648 4 v 1764 4139 a FF(Example)p 2102 4134 V 75 4159 4 25 v 3747 4159 V 75 4259 4 100 v 188 4229 a(gap>)44 b(C)e(:=)h(ElementsCode\(["1100)q(",)49 b("1010",)c("0001"],)g ("example)g(code",)f(GF\(2\))g(\);)p 3747 4259 V 75 4358 V 188 4328 a(a)f(\(4,3,1..4\)2..4)k(example)d(code)g(over)g(GF\(2\))p 3747 4358 V 75 4458 V 188 4428 a(gap>)g(MinimumDistance\(C\);)p 3747 4458 V 75 4557 V 188 4528 a(2)p 3747 4557 V 75 4657 V 188 4627 a(gap>)g(C;)p 3747 4657 V 75 4757 V 188 4727 a(a)f(\(4,3,2\)2..4)j(example)e(code)g(over)g(GF\(2\))p 3747 4757 V 75 4782 4 25 v 3747 4782 V 75 4785 3675 4 v 75 4973 a FK(If)27 b(the)h(set)g(of)f(elements)i(is)e(a)h(linear)g (subspace)i(of)e Fq(GF)6 b Fo(\()p Fq(q)p Fo(\))1969 4940 y Fm(n)2008 4973 y FK(,)27 b(the)h(code)g(is)g(called)h Fq(linear)p FK(.)42 b(If)27 b(a)g(code)h(is)g(linear)l(,)h(it)75 5085 y(can)21 b(be)g(de\002ned)h(by)f(its)f Fq(g)o(ener)o(ator)k (matrix)d FK(or)g Fq(parity)h(c)o(hec)n(k)g(matrix)p FK(.)56 b(By)20 b(de\002nition,)i(the)f(ro)n(ws)g(of)g(the)g(generator) 75 5198 y(matrix)31 b(is)e(a)h(basis)h(for)f(the)g(code)h(\(as)f(a)g(v) o(ector)g(space)i(o)o(v)o(er)e Fq(GF)6 b Fo(\()p Fq(q)p Fo(\))p FK(\).)49 b(By)29 b(de\002nition,)k(the)d(ro)n(ws)g(of)g(the)g (parity)75 5311 y(check)25 b(matrix)f(is)f(a)g(basis)i(for)f(the)f (dual)i(space)f(of)g(the)g(code,)1084 5515 y Fq(C)1147 5478 y Fh(\003)1204 5515 y Fo(=)c Fv(f)p Fq(v)h Fv(2)f Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))1726 5478 y Fm(n)1787 5515 y Fv(j)23 b Fq(v)13 b Fv(\001)g Fq(c)20 b Fo(=)g FK(0)p Fp(;)47 b Fq(f)13 b(or)26 b(al)5 b(l)28 b(c)21 b Fv(2)15 b Fq(C)r Fv(g)p Fp(:)p Black 1867 5841 a FK(27)p Black eop end end %%Page: 28 28 TeXDict begin HPSdict begin 28 27 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.28) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(28)p Black 75 399 1648 4 v 1764 404 a FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188 493 a(gap>)44 b(G)e(:=)h(GeneratorMatCode\([[)q(1,0)q(,1)q(],[)q(0,1)q (,2])q(],)49 b("demo)44 b(code",)g(GF\(3\))g(\);)p 3747 523 V 75 623 V 188 593 a(a)f(linear)h([3,2,1..2]1)i(demo)e(code)f(over) h(GF\(3\))p 3747 623 V 75 648 4 25 v 3747 648 V 75 651 3675 4 v 75 862 a FK(So)21 b(a)f(linear)j Fo([)p Fq(n)p Fp(;)10 b Fq(k)r Fp(;)g Fq(d)5 b Fo(])p Fq(r)24 b FK(code)e(is)g(a)f (code)h(with)f(w)o(ord)g Fq(length)i(n)p FK(,)e Fq(dimension)i(k)r FK(,)e Fq(minimum)g(distance)i(d)j FK(and)c Fq(co)o(vering)75 975 y(r)o(adius)j(r)r FK(.)216 1088 y(If)k(the)g(code)h(is)f(linear)i (and)e(all)g(c)o(yclic)h(shifts)h(of)e(its)g(code)n(w)o(ords)i(\(re)o (garded)g(as)e Fq(n)p FK(-tuples\))i(are)e(again)h(code-)75 1201 y(w)o(ords,)25 b(the)g(code)h(is)e(called)i Fq(cyclic)p FK(.)34 b(All)24 b(elements)i(of)f(a)f(c)o(yclic)i(code)g(are)e (multiples)j(of)e(the)g(monic)g(polynomial)75 1314 y(modulo)k(a)f (polynomial)j Fq(x)930 1281 y Fm(n)982 1314 y Fv(\000)14 b FK(1,)29 b(where)f Fq(n)g FK(is)g(the)g(w)o(ord)h(length)g(of)g(the)f (code.)44 b(Such)28 b(a)g(polynomial)i(is)e(called)i(a)75 1427 y Fq(g)o(ener)o(ator)e(polynomial)h FK(The)c(generator)j (polynomial)h(must)c(di)n(vide)j Fq(x)2357 1394 y Fm(n)2408 1427 y Fv(\000)13 b FK(1)26 b(and)g(its)g(quotient)i(is)e(called)h(a)e Fq(c)o(hec)n(k)75 1540 y(polynomial)p FK(.)46 b(Multiplying)31 b(a)e(code)n(w)o(ord)h(in)e(a)g(c)o(yclic)i(code)f(by)g(the)g(check)h (polynomial)h(yields)f(zero)f(\(modulo)75 1653 y(the)c(polynomial)h Fq(x)687 1620 y Fm(n)738 1653 y Fv(\000)13 b FK(1\).)31 b(In)24 b Fy(GU)m(A)-6 b(V)f(A)p FK(,)22 b(a)i(c)o(yclic)h(code)g(can)g (be)f(de\002ned)h(by)g(either)g(its)g(generator)i(polynomial)f(or)75 1766 y(check)f(polynomial.)p 75 1862 1648 4 v 1764 1867 a FF(Example)p 2102 1862 V 75 1887 4 25 v 3747 1887 V 75 1987 4 100 v 188 1957 a(gap>)44 b(G)e(:=)h(GeneratorPolCode\(In)q (det)q(er)q(min)q(ate)q(\(GF)q(\(2\))q(\)+Z)q(\(2\))q(\2100,)49 b(7,)43 b(GF\(2\))h(\);)p 3747 1987 V 75 2086 V 188 2057 a(a)f(cyclic)h([7,6,1..2]1)i(code)e(defined)h(by)e(generator)i (polynomial)h(over)d(GF\(2\))p 3747 2086 V 75 2111 4 25 v 3747 2111 V 75 2114 3675 4 v 75 2301 a FK(It)19 b(is)h(possible)h(that)f Fy(GU)m(A)-6 b(V)f(A)18 b FK(does)i(not)g(kno) n(w)f(that)i(an)e(unrestricted)k(code)d(is)g(in)f(f)o(act)h(linear)-5 b(.)29 b(This)19 b(situation)j(occurs)75 2414 y(for)28 b(e)o(xample)h(when)f(a)f(code)i(is)f(generated)i(from)e(a)g(list)g(of) g(elements)h(with)f(the)g(function)i Ft(ElementsCode)i FK(\(see)75 2527 y Ft(ElementsCode)27 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 684 2528 a SDict begin H.S end 684 2528 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.1.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 865 2465 a SDict begin H.R end 865 2465 a 865 2527 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.1) cvn H.B /ANN pdfmark end 865 2527 a Black FK(\)\).)i(By)23 b(calling)i(the)e(function)j Ft(IsLinearCode)h FK(\(see)c Ft(IsLinearCode)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3191 2528 a SDict begin H.S end 3191 2528 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.3.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 3372 2465 a SDict begin H.R end 3372 2465 a 3372 2527 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.3.4) cvn H.B /ANN pdfmark end 3372 2527 a Black FK(\)\),)d Fy(GU)m(A)-6 b(V)f(A)75 2640 y FK(tests)29 b(if)f(the)h(code)g(can)f (be)g(represented)k(by)c(a)g(generator)j(matrix.)43 b(If)28 b(so,)h(the)f(code)i(record)f(and)g(the)f(operations)75 2753 y(are)c(con)l(v)o(erted)i(accordingly)-6 b(.)p 75 2850 1648 4 v 1764 2855 a FF(Example)p 2102 2850 V 75 2875 4 25 v 3747 2875 V 75 2974 4 100 v 188 2944 a(gap>)44 b(L)e(:=)h(Z\(2\)*[)i([0,0,0],)g([1,0,0],)g([0,1,1],)g([1,1,1])g(];;)p 3747 2974 V 75 3074 V 188 3044 a(gap>)f(C)e(:=)h(ElementsCode\()k(L,)c (GF\(2\))h(\);)p 3747 3074 V 75 3174 V 188 3144 a(a)f(\(3,4,1..3\)1)j (user)d(defined)i(unrestricted)i(code)c(over)h(GF\(2\))p 3747 3174 V 75 3273 V 188 3243 a(#)f(so)g(far,)g(GUAVA)h(does)g(not)f (know)h(what)g(kind)g(of)f(code)g(this)h(is)p 3747 3273 V 75 3373 V 188 3343 a(gap>)g(IsLinearCode\()i(C)d(\);)p 3747 3373 V 75 3472 V 188 3443 a(true)933 b(#)42 b(it)h(is)h(linear)p 3747 3472 V 75 3572 V 188 3542 a(gap>)g(C;)p 3747 3572 V 75 3672 V 188 3642 a(a)f(linear)h([3,2,1]1)h(user)f(defined)g (unrestricted)j(code)d(over)f(GF\(2\))p 3747 3672 V 75 3697 4 25 v 3747 3697 V 75 3700 3675 4 v 75 3887 a FK(Of)20 b(course)j(the)e(same)g(holds)h(for)f(unrestricted)k(codes)d(that)g(in) f(f)o(act)g(are)h(c)o(yclic,)g(or)f(codes,)h(de\002ned)g(by)f(a)g (generator)75 4000 y(matrix,)j(that)g(actually)h(are)f(c)o(yclic.)216 4112 y(Codes)i(are)g(printed)i(simply)e(by)g(gi)n(ving)h(a)f(small)g (description)j(of)c(their)i(parameters,)h(the)e(w)o(ord)g(length,)i (size)75 4225 y(or)22 b(dimension)i(and)f(perhaps)h(the)e(minimum)g (distance,)j(follo)n(wed)e(by)f(a)g(short)h(description)i(and)e(the)f (base)h(\002eld)f(of)75 4338 y(the)27 b(code.)40 b(The)26 b(function)j Ft(Display)g FK(gi)n(v)o(es)e(a)g(more)f(detailed)j (description,)i(sho)n(wing)d(the)f(construction)j(history)75 4451 y(of)23 b(the)h(code.)216 4564 y Fy(GU)m(A)-6 b(V)f(A)28 b FK(doesn')n(t)33 b(place)e(much)g(emphasis)h(on)e(the)g(actual)i (encoding)h(and)e(decoding)h(processes;)37 b(some)30 b(al-)75 4677 y(gorithms)g(ha)n(v)o(e)f(been)h(included)h(though.)46 b(Encoding)30 b(w)o(orks)f(simply)g(by)g(multiplying)i(an)e (information)i(v)o(ector)75 4790 y(with)26 b(a)f(code,)i(decoding)h(is) d(done)i(by)f(the)g(functions)i Ft(Decode)f FK(or)f Ft(Decodeword)p FK(.)38 b(F)o(or)25 b(more)h(information)i(about)75 4903 y(encoding)e(and)e(decoding,)i(see)e(sections)p 0.0236 0.0894 0.6179 TeXcolorrgb 1418 4904 a SDict begin H.S end 1418 4904 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 1531 4841 a SDict begin H.R end 1531 4841 a 1531 4903 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.2) cvn H.B /ANN pdfmark end 1531 4903 a Black 24 w FK(and)p 0.0236 0.0894 0.6179 TeXcolorrgb 1709 4904 a SDict begin H.S end 1709 4904 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.10.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 1935 4841 a SDict begin H.R end 1935 4841 a 1935 4903 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.1) cvn H.B /ANN pdfmark end 1935 4903 a Black FK(.)p 75 5000 1648 4 v 1764 5005 a FF(Example)p 2102 5000 V 75 5024 4 25 v 3747 5024 V 75 5124 4 100 v 188 5094 a(gap>)44 b(R)e(:=)h (ReedMullerCode\()48 b(1,)43 b(3)f(\);)p 3747 5124 V 75 5224 V 188 5194 a(a)h(linear)h([8,4,4]2)h(Reed-Muller)h(\(1,3\))e (code)g(over)g(GF\(2\))p 3747 5224 V 75 5323 V 188 5293 a(gap>)g(w)e(:=)h([)g(1,)g(0,)g(1,)g(1)g(])f(*)h(R;)p 3747 5323 V 75 5423 V 188 5393 a([)g(1)f(0)h(0)g(1)f(1)h(0)g(0)f(1)h(]) p 3747 5423 V 75 5523 V 188 5493 a(gap>)h(Decode\()g(R,)f(w)g(\);)p 3747 5523 V 75 5622 V 188 5592 a([)g(1)f(0)h(1)g(1)f(])p 3747 5622 V Black Black eop end end %%Page: 29 29 TeXDict begin HPSdict begin 29 28 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.29) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(29)p Black 75 428 4 100 v 188 399 a FF(gap>)44 b(Decode\()g(R,)f(w)g(+)g("10000000")i(\);)f(#)e(One)i(error)g(at)f (the)g(first)h(position)p 3747 428 V 75 528 V 188 498 a([)f(1)f(0)h(1)g(1)f(])975 b(#)42 b(Corrected)k(by)d(Guava)p 3747 528 V 75 553 4 25 v 3747 553 V 75 556 3675 4 v 75 714 a FK(Sections)p 0.0236 0.0894 0.6179 TeXcolorrgb 424 715 a SDict begin H.S end 424 715 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 537 652 a SDict begin H.R end 537 652 a 537 714 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.1) cvn H.B /ANN pdfmark end 537 714 a Black 42 w FK(and)p 0.0236 0.0894 0.6179 TeXcolorrgb 752 715 a SDict begin H.S end 752 715 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 865 652 a SDict begin H.R end 865 652 a 865 714 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.2) cvn H.B /ANN pdfmark end 865 714 a Black 41 w FK(describe)i(the)d (operations)j(that)d(are)h(a)n(v)n(ailable)h(for)e(codes.)85 b(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 3292 715 a SDict begin H.S end 3292 715 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 3405 652 a SDict begin H.R end 3405 652 a 3405 714 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.3) cvn H.B /ANN pdfmark end 3405 714 a Black 42 w FK(describe)75 826 y(the)44 b(functions)j(that)e(tests)f(whether)i(an)e(object)h(is)f(a)g (code)g(and)h(what)f(kind)h(of)f(code)h(it)f(is)f(\(see)i Ft(IsCode)p FK(,)75 939 y Ft(IsLinearCode)d FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 699 940 a SDict begin H.S end 699 940 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.3.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 880 877 a SDict begin H.R end 880 877 a 880 939 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.3.4) cvn H.B /ANN pdfmark end 880 939 a Black FK(\))d(and)g Ft(IsCyclicCode)p FK(\))k(and)c(v)n(arious)h(other)g(boolean)g (functions)i(for)c(codes.)75 b(Sec-)75 1052 y(tion)p 0.0236 0.0894 0.6179 TeXcolorrgb 241 1053 a SDict begin H.S end 241 1053 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 354 990 a SDict begin H.R end 354 990 a 354 1052 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.4) cvn H.B /ANN pdfmark end 354 1052 a Black 24 w FK(describe)28 b(functions)f(about)f(equi)n(v)n(alence)i (and)e(isomorphism)h(of)e(codes)h(\(see)f Ft(IsEquivalent)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3515 1053 a SDict begin H.S end 3515 1053 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.4.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 3696 990 a SDict begin H.R end 3696 990 a 3696 1052 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.4.1) cvn H.B /ANN pdfmark end 3696 1052 a Black FK(\),)75 1165 y Ft(CodeIsomorphism)38 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 833 1166 a SDict begin H.S end 833 1166 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.4.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 1014 1103 a SDict begin H.R end 1014 1103 a 1014 1165 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.4.2) cvn H.B /ANN pdfmark end 1014 1165 a Black FK(\))d(and)f Ft(AutomorphismGroup)39 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2094 1166 a SDict begin H.S end 2094 1166 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.4.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 2275 1103 a SDict begin H.R end 2275 1103 a 2275 1165 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.4.3) cvn H.B /ANN pdfmark end 2275 1165 a Black FK(\)\).)61 b(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 2724 1166 a SDict begin H.S end 2724 1166 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.5)p 0.0236 0.0894 0.6179 TeXcolorrgb 2837 1103 a SDict begin H.R end 2837 1103 a 2837 1165 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.5) cvn H.B /ANN pdfmark end 2837 1165 a Black 34 w FK(describes)36 b(functions)h(that)75 1278 y(w)o(ork)28 b(on)g Fq(domains)i FK(\(see)e(Chapter)h(\224Domains) g(and)f(their)h(Elements\224)g(in)f(the)g Fy(GAP)e FK(Reference)k (Manual\).)43 b(Sec-)75 1391 y(tion)p 0.0236 0.0894 0.6179 TeXcolorrgb 258 1392 a SDict begin H.S end 258 1392 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.6)p 0.0236 0.0894 0.6179 TeXcolorrgb 371 1329 a SDict begin H.R end 371 1329 a 371 1391 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.6) cvn H.B /ANN pdfmark end 371 1391 a Black 43 w FK(describes)i(functions)g(for)e(printing)i(and)e(displaying)j (codes.)87 b(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 2876 1392 a SDict begin H.S end 2876 1392 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.7)p 0.0236 0.0894 0.6179 TeXcolorrgb 2989 1329 a SDict begin H.R end 2989 1329 a 2989 1391 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.7) cvn H.B /ANN pdfmark end 2989 1391 a Black 42 w FK(describes)46 b(functions)75 1504 y(that)33 b(return)h(the)e(matrices)i(and)f (polynomials)i(that)e(de\002ne)f(a)g(code)h(\(see)g Ft(GeneratorMat)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3110 1505 a SDict begin H.S end 3110 1505 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.7.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 3291 1442 a SDict begin H.R end 3291 1442 a 3291 1504 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.7.1) cvn H.B /ANN pdfmark end 3291 1504 a Black FK(\),)f Ft(CheckMat)75 1617 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 1618 a SDict begin H.S end 105 1618 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.7.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 286 1555 a SDict begin H.R end 286 1555 a 286 1617 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.7.2) cvn H.B /ANN pdfmark end 286 1617 a Black FK(\),)24 b Ft(GeneratorPol)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 971 1618 a SDict begin H.S end 971 1618 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.7.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 1152 1555 a SDict begin H.R end 1152 1555 a 1152 1617 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.7.3) cvn H.B /ANN pdfmark end 1152 1617 a Black FK(\),)e Ft(CheckPol)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1653 1618 a SDict begin H.S end 1653 1618 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.7.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 1834 1555 a SDict begin H.R end 1834 1555 a 1834 1617 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.7.4) cvn H.B /ANN pdfmark end 1834 1617 a Black FK(\),)d Ft(RootsOfCode)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2473 1618 a SDict begin H.S end 2473 1618 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.7.5)p 0.0236 0.0894 0.6179 TeXcolorrgb 2654 1555 a SDict begin H.R end 2654 1555 a 2654 1617 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.7.5) cvn H.B /ANN pdfmark end 2654 1617 a Black FK(\)\).)i(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 3061 1618 a SDict begin H.S end 3061 1618 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.8)p 0.0236 0.0894 0.6179 TeXcolorrgb 3174 1555 a SDict begin H.R end 3174 1555 a 3174 1617 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.8) cvn H.B /ANN pdfmark end 3174 1617 a Black 23 w FK(describes)d(func-)75 1730 y(tions)36 b(that)g(return)h(the)f(basic)g(parameters)i(of)d(codes)i(\(see)f Ft(WordLength)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2571 1731 a SDict begin H.S end 2571 1731 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.8.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 2752 1668 a SDict begin H.R end 2752 1668 a 2752 1730 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.8.1) cvn H.B /ANN pdfmark end 2752 1730 a Black FK(\),)h Ft(Redundancy)f FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3372 1731 a SDict begin H.S end 3372 1731 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.8.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 3553 1668 a SDict begin H.R end 3553 1668 a 3553 1730 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.8.2) cvn H.B /ANN pdfmark end 3553 1730 a Black FK(\))e(and)75 1843 y Ft(MinimumDistance)30 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 825 1844 a SDict begin H.S end 825 1844 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.8.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 1006 1781 a SDict begin H.R end 1006 1781 a 1006 1843 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.8.3) cvn H.B /ANN pdfmark end 1006 1843 a Black FK(\)\).)37 b(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 1423 1845 a SDict begin H.S end 1423 1845 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(4.9)p 0.0236 0.0894 0.6179 TeXcolorrgb 1536 1781 a SDict begin H.R end 1536 1781 a 1536 1843 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.9) cvn H.B /ANN pdfmark end 1536 1843 a Black 26 w FK(describes)28 b(functions)h(that)d(return)h(distance)h(and)e(weight)h(distrib)n(u-)75 1956 y(tions)f(\(see)f Ft(WeightDistribution)31 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1335 1958 a SDict begin H.S end 1335 1958 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(4.9.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 1516 1894 a SDict begin H.R end 1516 1894 a 1516 1956 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.9.2) cvn H.B /ANN pdfmark end 1516 1956 a Black FK(\),)25 b Ft(InnerDistribution)30 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2436 1958 a SDict begin H.S end 2436 1958 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(4.9.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 2617 1894 a SDict begin H.R end 2617 1894 a 2617 1956 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.9.3) cvn H.B /ANN pdfmark end 2617 1956 a Black FK(\),)25 b Ft(OuterDistribution)31 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3538 1958 a SDict begin H.S end 3538 1958 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(4.9.5)p 0.0236 0.0894 0.6179 TeXcolorrgb 3719 1894 a SDict begin H.R end 3719 1894 a 3719 1956 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.9.5) cvn H.B /ANN pdfmark end 3719 1956 a Black FK(\))75 2068 y(and)h Ft(DistancesDistributio)q(n)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1270 2070 a SDict begin H.S end 1270 2070 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(4.9.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 1451 2006 a SDict begin H.R end 1451 2006 a 1451 2068 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.9.4) cvn H.B /ANN pdfmark end 1451 2068 a Black FK(\)\).)53 b(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 1890 2069 a SDict begin H.S end 1890 2069 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.10)p 0.0236 0.0894 0.6179 TeXcolorrgb 2048 2006 a SDict begin H.R end 2048 2006 a 2048 2068 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.10) cvn H.B /ANN pdfmark end 2048 2068 a Black 31 w FK(describes)33 b(functions)h(that)e(are)f(related)i (to)e(decod-)75 2181 y(ing)k(\(see)g Ft(Decode)h FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 747 2182 a SDict begin H.S end 747 2182 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.10.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 973 2119 a SDict begin H.R end 973 2119 a 973 2181 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.1) cvn H.B /ANN pdfmark end 973 2181 a Black FK(\),)i Ft(Decodeword)g FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1592 2182 a SDict begin H.S end 1592 2182 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.10.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 1818 2119 a SDict begin H.R end 1818 2119 a 1818 2181 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.2) cvn H.B /ANN pdfmark end 1818 2181 a Black FK(\),)g Ft(Syndrome)e FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2343 2182 a SDict begin H.S end 2343 2182 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.10.8)p 0.0236 0.0894 0.6179 TeXcolorrgb 2569 2119 a SDict begin H.R end 2569 2119 a 2569 2181 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.8) cvn H.B /ANN pdfmark end 2569 2181 a Black FK(\),)j Ft(SyndromeTable)f FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3327 2183 a SDict begin H.S end 3327 2183 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(4.10.9)p 0.0236 0.0894 0.6179 TeXcolorrgb 3553 2119 a SDict begin H.R end 3553 2119 a 3553 2181 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.9) cvn H.B /ANN pdfmark end 3553 2181 a Black FK(\))e(and)75 2294 y Ft(StandardArray)e FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 737 2295 a SDict begin H.S end 737 2295 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.10.10)p 0.0236 0.0894 0.6179 TeXcolorrgb 1008 2232 a SDict begin H.R end 1008 2232 a 1008 2294 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.10) cvn H.B /ANN pdfmark end 1008 2294 a Black FK(\)\).)50 b(In)30 b(Chapters)p 0.0236 0.0894 0.6179 TeXcolorrgb 1598 2295 a SDict begin H.S end 1598 2295 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5)p 0.0236 0.0894 0.6179 TeXcolorrgb 1643 2232 a SDict begin H.R end 1643 2232 a 1643 2294 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (chapter.5) cvn H.B /ANN pdfmark end 1643 2294 a Black 30 w FK(and)p 0.0236 0.0894 0.6179 TeXcolorrgb 1833 2295 a SDict begin H.S end 1833 2295 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6)p 0.0236 0.0894 0.6179 TeXcolorrgb 1878 2232 a SDict begin H.R end 1878 2232 a 1878 2294 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (chapter.6) cvn H.B /ANN pdfmark end 1878 2294 a Black 30 w FK(which)g(follo)n(w)-6 b(,)32 b(we)d(describe)j(functions)h(that)d(generate)75 2407 y(and)24 b(manipulate)i(codes.)75 2564 y SDict begin H.S end 75 2564 a 75 2564 a SDict begin 13.6 H.A end 75 2564 a 75 2564 a SDict begin [ /View [/XYZ H.V] /Dest (section.4.1) cvn H.B /DEST pdfmark end 75 2564 a 130 x FM(4.1)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Comparisons)j(of)h(Codes)p Black 75 2812 a SDict begin H.S end 75 2812 a 75 2812 a SDict begin 13.6 H.A end 75 2812 a 75 2812 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.1.1) cvn H.B /DEST pdfmark end 75 2812 a 92 x FJ(4.1.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(=)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3078 a Fs(\006)22 b Ft(=\()47 b(C1,)h(C2)f(\))2816 b Fr(\(function\))p Black 216 3304 a FK(The)25 b(equality)i(operator)g Ft(C1)47 b(=)g(C2)25 b FK(e)n(v)n(aluates)i(to)d(`true')j(if)d(the)i(codes)g Ft(C1)f FK(and)g Ft(C2)g FK(are)g(equal,)h(and)g(to)f(`f)o(alse')75 3417 y(otherwise.)216 3530 y(The)i(equality)i(operator)h(is)d(also)h (denoted)h Ft(EQ)p FK(,)e(and)h Ft(Eq\(C1,C2\))i FK(is)d(the)h(same)f (as)g Ft(C1)47 b(=)g(C2)p FK(.)40 b(There)27 b(is)h(also)75 3643 y(an)c(inequality)i(operator)l(,)g Fp(<)c(>)p FK(,)g(or)i Ft(not)47 b(EQ)p FK(.)216 3756 y(Note)19 b(that)h(codes)h(are)e(equal)i (if)e(and)h(only)g(if)f(their)h(set)g(of)f(elements)i(are)e(equal.)29 b(Codes)19 b(can)h(also)g(be)g(compared)75 3869 y(with)j(objects)j(of)d (other)i(types.)k(Of)23 b(course)i(the)o(y)f(are)g(ne)n(v)o(er)g (equal.)p 75 3955 1648 4 v 1764 3960 a FF(Example)p 2102 3955 V 75 3980 4 25 v 3747 3980 V 75 4080 4 100 v 188 4050 a(gap>)44 b(M)e(:=)h([)g([0,)g(0],)h([1,)f(0],)g([0,)h(1],)f([1,)h (1])f(];;)p 3747 4080 V 75 4179 V 188 4149 a(gap>)h(C1)f(:=)g (ElementsCode\()j(M,)d(GF\(2\))i(\);)p 3747 4179 V 75 4279 V 188 4249 a(a)e(\(2,4,1..2\)0)j(user)d(defined)i(unrestricted)i (code)c(over)h(GF\(2\))p 3747 4279 V 75 4378 V 188 4349 a(gap>)g(M)e(=)h(C1;)p 3747 4378 V 75 4478 V 188 4448 a(false)p 3747 4478 V 75 4578 V 188 4548 a(gap>)h(C2)f(:=)g (GeneratorMatCode\()48 b([)42 b([1,)i(0],)f([0,)h(1])f(],)g(GF\(2\))h (\);)p 3747 4578 V 75 4677 V 188 4647 a(a)f(linear)h([2,2,1]0)h(code)f (defined)g(by)g(generator)h(matrix)f(over)g(GF\(2\))p 3747 4677 V 75 4777 V 188 4747 a(gap>)g(C1)f(=)f(C2;)p 3747 4777 V 75 4877 V 188 4847 a(true)p 3747 4877 V 75 4976 V 188 4946 a(gap>)i(ReedMullerCode\()j(1,)c(3)g(\))f(=)h (HadamardCode\()k(8)c(\);)p 3747 4976 V 75 5076 V 188 5046 a(true)p 3747 5076 V 75 5175 V 188 5146 a(gap>)h(WholeSpaceCode\() j(5,)c(GF\(4\))h(\))f(=)g(WholeSpaceCode\()k(5,)c(GF\(2\))h(\);)p 3747 5175 V 75 5275 V 188 5245 a(false)p 3747 5275 V 75 5300 4 25 v 3747 5300 V 75 5303 3675 4 v 75 5479 a FK(Another)32 b(w)o(ay)e(of)g(comparing)i(codes)g(is)e Ft(IsEquivalent)p FK(,)36 b(which)30 b(checks)i(if)f(tw)o(o)f(codes)h (are)g(equi)n(v)n(alent)i(\(see)75 5592 y Ft(IsEquivalent)43 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 700 5593 a SDict begin H.S end 700 5593 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.4.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 881 5530 a SDict begin H.R end 881 5530 a 881 5592 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.4.1) cvn H.B /ANN pdfmark end 881 5592 a Black FK(\)\).)76 b(By)38 b(the)i(w)o(ay)-6 b(,)42 b(this)e(called)g Ft(CodeIsomorphism)p FK(.)80 b(F)o(or)39 b(the)g(current)i(v)o(ersion)f(of)p Black Black eop end end %%Page: 30 30 TeXDict begin HPSdict begin 30 29 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.30) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(30)p Black 75 399 a Fy(GU)m(A)-6 b(V)f(A)p FK(,)27 b(unless)k(one)f(of)g(the)g(codes)g(is)g(unrestricted,)k(this)c (calls)g(Leon')-5 b(s)30 b(C)f(program)h(\(which)h(only)f(w)o(orks)g (for)75 511 y(binary)25 b(linear)g(codes)f(and)g(only)h(on)e(a)h (unix/linux)i(computer\).)75 674 y SDict begin H.S end 75 674 a 75 674 a SDict begin 13.6 H.A end 75 674 a 75 674 a SDict begin [ /View [/XYZ H.V] /Dest (section.4.2) cvn H.B /DEST pdfmark end 75 674 a 130 x FM(4.2)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Operations)k(f)m(or)g(Codes)p Black 75 922 a SDict begin H.S end 75 922 a 75 922 a SDict begin 13.6 H.A end 75 922 a 75 922 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.2.1) cvn H.B /DEST pdfmark end 75 922 a 92 x FJ(4.2.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(+)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1189 a Fs(\006)22 b Ft(+\()47 b(C1,)h(C2)f(\))2816 b Fr(\(function\))p Black 216 1414 a FK(The)23 b(operator)j(`+')d(e)n(v)n(aluates)j(to)d(the)h(direct)h (sum)e(of)h(the)f(codes)i Ft(C1)f FK(and)g Ft(C2)p FK(.)k(See)23 b Ft(DirectSumCode)28 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3513 1415 a SDict begin H.S end 3513 1415 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.2.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 3694 1352 a SDict begin H.R end 3694 1352 a 3694 1414 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.2.1) cvn H.B /ANN pdfmark end 3694 1414 a Black FK(\).)p 75 1537 1648 4 v 1764 1542 a FF(Example)p 2102 1537 V 75 1562 4 25 v 3747 1562 V 75 1662 4 100 v 188 1632 a(gap>)44 b(C1:=RandomLinearCode\()q(10,)q(5\);)p 3747 1662 V 75 1761 V 188 1731 a(a)85 b([10,5,?])45 b(randomly)g (generated)g(code)f(over)g(GF\(2\))p 3747 1761 V 75 1861 V 188 1831 a(gap>)g(C2:=RandomLinearCode\()q(9,4)q(\);)p 3747 1861 V 75 1960 V 188 1931 a(a)85 b([9,4,?])45 b(randomly)g (generated)g(code)f(over)g(GF\(2\))p 3747 1960 V 75 2060 V 188 2030 a(gap>)g(C1+C2;)p 3747 2060 V 75 2160 V 188 2130 a(a)f(linear)h([10,9,1]0..10)j(unknown)d(linear)h(code)f(over)f (GF\(2\))p 3747 2160 V 75 2185 4 25 v 3747 2185 V 75 2188 3675 4 v 75 2321 a SDict begin H.S end 75 2321 a 75 2321 a SDict begin 13.6 H.A end 75 2321 a 75 2321 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.2.2) cvn H.B /DEST pdfmark end 75 2321 a 116 x FJ(4.2.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(*)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2611 a Fs(\006)22 b Ft(*\()47 b(C1,)h(C2)f(\))2816 b Fr(\(function\))p Black 216 2837 a FK(The)22 b(operator)j(`*')d(e)n(v)n(aluates)j(to)d (the)h(direct)g(product)i(of)d(the)h(codes)g Ft(C1)g FK(and)g Ft(C2)p FK(.)28 b(See)22 b Ft(DirectProductCode)75 2950 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 2951 a SDict begin H.S end 105 2951 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.2.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 286 2888 a SDict begin H.R end 286 2888 a 286 2950 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.2.3) cvn H.B /ANN pdfmark end 286 2950 a Black FK(\).)p 75 3069 1648 4 v 1764 3074 a FF(Example)p 2102 3069 V 75 3094 4 25 v 3747 3094 V 75 3194 4 100 v 188 3164 a(gap>)44 b(C1)f(:=)g (GeneratorMatCode\()48 b([)42 b([1,)i(0,0,0],)h([0,)e(1,0,0])h(],)f (GF\(2\))h(\);)p 3747 3194 V 75 3293 V 188 3264 a(a)f(linear)h ([4,2,1]1)h(code)f(defined)g(by)g(generator)h(matrix)f(over)g(GF\(2\))p 3747 3293 V 75 3393 V 188 3363 a(gap>)g(C2)f(:=)g(GeneratorMatCode\()48 b([)42 b([0,0,1,)j(1],)f([0,0,0,)g(1])f(],)g(GF\(2\))h(\);)p 3747 3393 V 75 3493 V 188 3463 a(a)f(linear)h([4,2,1]1)h(code)f (defined)g(by)g(generator)h(matrix)f(over)g(GF\(2\))p 3747 3493 V 75 3592 V 188 3562 a(gap>)g(C1*C2;)p 3747 3592 V 75 3692 V 188 3662 a(a)f(linear)h([16,4,1]4..12)j(direct)d (product)h(code)p 3747 3692 V 75 3717 4 25 v 3747 3717 V 75 3720 3675 4 v 75 3853 a SDict begin H.S end 75 3853 a 75 3853 a SDict begin 13.6 H.A end 75 3853 a 75 3853 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.2.3) cvn H.B /DEST pdfmark end 75 3853 a 116 x FJ(4.2.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(*)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4144 a Fs(\006)22 b Ft(*\()47 b(m,)h(C)e(\))2909 b Fr(\(function\))p Black 216 4369 a FK(The)20 b(operator)i Ft(m*C)f FK(e)n(v)n(aluates)h(to)f (the)f(element)i(of)e Ft(C)g FK(belonging)j(to)d(information)j(w)o(ord) e(\('message'\))h Ft(m)q FK(.)k(Here)75 4482 y Ft(m)g FK(may)h(be)f(a)g(v)o(ector)l(,)j(polynomial,)g(string)f(or)f(code)n(w) o(ord)h(or)e(a)h(list)g(of)f(those.)39 b(This)27 b(is)f(the)h(w)o(ay)f (to)h(do)g(encoding)75 4595 y(in)e Fy(GU)m(A)-6 b(V)f(A)p FK(.)23 b Ft(C)h FK(must)h(be)g(linear)l(,)h(because)h(in)e Fy(GU)m(A)-6 b(V)f(A)p FK(,)23 b(encoding)k(by)e(multiplication)k(is)24 b(only)i(de\002ned)g(for)f(linear)75 4708 y(codes.)k(If)21 b Ft(C)f FK(is)h(a)g(c)o(yclic)h(code,)g(this)g(multiplication)i(is)d (the)g(same)g(as)g(multiplying)j(an)d(information)i(polynomial)h Ft(m)75 4821 y FK(by)19 b(the)g(generator)i(polynomial)h(of)c Ft(C)q FK(.)26 b(If)19 b Ft(C)f FK(is)h(a)f(linear)i(code,)h(it)d(is)h (equal)h(to)f(the)g(multiplication)j(of)d(an)g(information)75 4934 y(v)o(ector)25 b Ft(m)e FK(by)g(a)g(generator)j(matrix)e(of)g Ft(C)p FK(.)216 5047 y(T)-7 b(o)24 b(in)l(v)o(ert)j(this,)f(use)g(the)g (function)h Ft(InformationWord)j FK(\(see)c Ft(InformationWord)31 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2996 5048 a SDict begin H.S end 2996 5048 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.2.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 3177 4985 a SDict begin H.R end 3177 4985 a 3177 5047 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.2.4) cvn H.B /ANN pdfmark end 3177 5047 a Black FK(\),)26 b(which)f(simply)75 5160 y(calls)f(the)g(function)i Ft(Decode)p FK(\).)p 75 5279 1648 4 v 1764 5284 a FF(Example)p 2102 5279 V 75 5304 4 25 v 3747 5304 V 75 5403 4 100 v 188 5374 a(gap>)44 b(C)e(:=)h(GeneratorMatCode\()48 b([)43 b([1,)h(0,0,0],)g([0,)g(1,0,0]) g(],)f(GF\(2\))h(\);)p 3747 5403 V 75 5503 V 188 5473 a(a)f(linear)h([4,2,1]1)h(code)f(defined)g(by)g(generator)h(matrix)f (over)g(GF\(2\))p 3747 5503 V 75 5603 V 188 5573 a(gap>)g (m:=Codeword\("11"\);)p 3747 5603 V Black Black eop end end %%Page: 31 31 TeXDict begin HPSdict begin 31 30 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.31) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(31)p Black 75 428 4 100 v 188 399 a FF([)43 b(1)f(1)h(])p 3747 428 V 75 528 V 188 498 a(gap>)h(m*C;)p 3747 528 V 75 628 V 188 598 a([)f(1)f(1)h(0)g(0)f(])p 3747 628 V 75 653 4 25 v 3747 653 V 75 656 3675 4 v 75 789 a SDict begin H.S end 75 789 a 75 789 a SDict begin 13.6 H.A end 75 789 a 75 789 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.2.4) cvn H.B /DEST pdfmark end 75 789 a 116 x FJ(4.2.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Inf)n(ormationW)-7 b(ord)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1079 a Fs(\006)22 b Ft(InformationWord\()53 b(C,)47 b(c)f(\))2260 b Fr(\(function\))p Black 216 1305 a FK(Here)37 b Ft(C)f FK(is)g(a)h(linear)g(code)h(and)f Ft(c)f FK(is)h(a)f(code)n(w)o(ord)i(in)f(it.)68 b(The)36 b(command)h Ft(InformationWord)42 b FK(returns)75 1418 y(the)27 b(message)g(w)o(ord)g(\(or)f('information)k(digits'\))e Fq(m)d FK(satisfying)k Ft(c=m*C)p FK(.)e(This)g(command)g(simply)g (calls)g Ft(Decode)p FK(,)75 1531 y(pro)o(vided)f Ft(c)46 b(in)h(C)23 b FK(is)h(true.)29 b(Otherwise,)24 b(it)f(returns)j(an)d (error)-5 b(.)216 1644 y(T)e(o)23 b(in)l(v)o(ert)h(this,)g(use)g(the)g (encoding)i(function)g Ft(*)d FK(\(see)h Ft(*)f FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2036 1645 a SDict begin H.S end 2036 1645 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.2.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 2217 1582 a SDict begin H.R end 2217 1582 a 2217 1644 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.2.3) cvn H.B /ANN pdfmark end 2217 1644 a Black FK(\)\).)p 75 1767 1648 4 v 1764 1772 a FF(Example)p 2102 1767 V 75 1791 4 25 v 3747 1791 V 75 1891 4 100 v 188 1861 a(gap>)44 b(C:=HammingCode\(3\);)p 3747 1891 V 75 1991 V 188 1961 a(a)f(linear)h([7,4,3]1)h(Hamming)g (\(3,2\))f(code)g(over)f(GF\(2\))p 3747 1991 V 75 2090 V 188 2060 a(gap>)h(c:=Random\(C\);)p 3747 2090 V 75 2190 V 188 2160 a([)f(0)f(0)h(0)g(1)f(1)h(1)g(1)f(])p 3747 2190 V 75 2290 V 188 2260 a(gap>)i(InformationWord\(C,c\);)p 3747 2290 V 75 2389 V 188 2359 a([)f(0)f(1)h(1)g(1)f(])p 3747 2389 V 75 2489 V 188 2459 a(gap>)i(c:=Codeword\("1111100")q(\);)p 3747 2489 V 75 2588 V 188 2559 a([)f(1)f(1)h(1)g(1)f(1)h(0)g(0)f(])p 3747 2588 V 75 2688 V 188 2658 a(gap>)i(InformationWord\(C,c\);)p 3747 2688 V 75 2788 V 188 2758 a("ERROR:)h(codeword)g(must)e(belong)i (to)e(code")p 3747 2788 V 75 2887 V 188 2857 a(gap>)h (C:=NordstromRobinsonC)q(ode)q(\(\);)p 3747 2887 V 75 2987 V 188 2957 a(a)f(\(16,256,6\)4)j(Nordstrom-Robinson)i(code)c(over) g(GF\(2\))p 3747 2987 V 75 3087 V 188 3057 a(gap>)g(c:=Random\(C\);)p 3747 3087 V 75 3186 V 188 3156 a([)f(0)f(0)h(0)g(1)f(0)h(0)g(0)f(1)h(0) g(0)f(1)h(0)g(1)f(1)h(0)g(1)g(])p 3747 3186 V 75 3286 V 188 3256 a(gap>)h(InformationWord\(C,c\);)p 3747 3286 V 75 3385 V 188 3356 a("ERROR:)h(code)e(must)h(be)f(linear")p 3747 3385 V 75 3410 4 25 v 3747 3410 V 75 3413 3675 4 v 75 3557 a SDict begin H.S end 75 3557 a 75 3557 a SDict begin 13.6 H.A end 75 3557 a 75 3557 a SDict begin [ /View [/XYZ H.V] /Dest (section.4.3) cvn H.B /DEST pdfmark end 75 3557 a 149 x FM(4.3)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Boolean)30 b(Functions)g(f)m(or)g(Codes)p Black 75 3803 a SDict begin H.S end 75 3803 a 75 3803 a SDict begin 13.6 H.A end 75 3803 a 75 3803 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3.1) cvn H.B /DEST pdfmark end 75 3803 a 114 x FJ(4.3.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(in)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4091 a Fs(\006)22 b Ft(in\()48 b(c,)f(C)g(\))2862 b Fr(\(function\))p Black 216 4317 a FK(The)21 b(command)g Ft(c)47 b(in)g(C)21 b FK(e)n(v)n(aluates)h(to)f(`true')h(if)f Ft(C)f FK(contains)k(the)d(code)n(w)o(ord)h(or)f(list)g(of)g(code)n(w)o (ords)i(speci\002ed)75 4430 y(by)h Ft(c)p FK(.)k(Of)23 b(course,)h Ft(c)f FK(and)h Ft(C)f FK(must)h(ha)n(v)o(e)g(the)g(same)g (w)o(ord)f(lengths)j(and)e(base)g(\002elds.)p 75 4552 1648 4 v 1764 4557 a FF(Example)p 2102 4552 V 75 4577 4 25 v 3747 4577 V 75 4677 4 100 v 188 4647 a(gap>)44 b(C:=)f(HammingCode\()j(2)d(\);;)g(eC:=)h(AsSSortedList\()j(C)c(\);)p 3747 4677 V 75 4776 V 188 4747 a([)g([)f(0)h(0)g(0)f(],)h([)g(1)g(1)f (1)h(])g(])p 3747 4776 V 75 4876 V 188 4846 a(gap>)h(eC[2])g(in)f(C;)p 3747 4876 V 75 4976 V 188 4946 a(true)p 3747 4976 V 75 5075 V 188 5045 a(gap>)h([)e(0)h(])g(in)g(C;)p 3747 5075 V 75 5175 V 188 5145 a(false)p 3747 5175 V 75 5200 4 25 v 3747 5200 V 75 5203 3675 4 v Black Black eop end end %%Page: 32 32 TeXDict begin HPSdict begin 32 31 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.32) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(32)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3.2) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(4.3.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsSubset)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(IsSubset\()50 b(C1,)d(C2)h(\))2491 b Fr(\(function\))p Black 216 799 a FK(The)23 b(command)g Ft(IsSubset\(C1,C2\))28 b FK(returns)c(`true')g(if)f Ft(C2)g FK(is)f(a)h(subcode)i(of)e Ft(C1)p FK(,)f(i.e.)28 b(if)23 b Ft(C1)g FK(contains)i(all)e(the)75 912 y(elements)i(of)e Ft(C2)q FK(.)p 75 1016 1648 4 v 1764 1021 a FF(Example)p 2102 1016 V 75 1041 4 25 v 3747 1041 V 75 1141 4 100 v 188 1111 a(gap>)44 b(IsSubset\()h(HammingCode\(3\),)i (RepetitionCode\()h(7)43 b(\))f(\);)p 3747 1141 V 75 1240 V 188 1210 a(true)p 3747 1240 V 75 1340 V 188 1310 a(gap>)i(IsSubset\()h(RepetitionCode\()i(7)c(\),)g(HammingCode\()k(3)42 b(\))h(\);)p 3747 1340 V 75 1440 V 188 1410 a(false)p 3747 1440 V 75 1539 V 188 1509 a(gap>)h(IsSubset\()h(WholeSpaceCode\()i (7)c(\),)g(HammingCode\()k(3)42 b(\))h(\);)p 3747 1539 V 75 1639 V 188 1609 a(true)p 3747 1639 V 75 1664 4 25 v 3747 1664 V 75 1667 3675 4 v 75 1800 a SDict begin H.S end 75 1800 a 75 1800 a SDict begin 13.6 H.A end 75 1800 a 75 1800 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3.3) cvn H.B /DEST pdfmark end 75 1800 a 116 x FJ(4.3.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2091 a Fs(\006)22 b Ft(IsCode\()49 b(obj)f(\))2723 b Fr(\(function\))p Black 216 2316 a Ft(IsCode)26 b FK(returns)g (`true')f(if)f Ft(obj)q FK(,)g(which)g(can)h(be)f(an)h(object)g(of)g (arbitrary)h(type,)f(is)f(a)g(code)h(and)g(`f)o(alse')h(other)n(-)75 2429 y(wise.)j(W)l(ill)23 b(cause)i(an)e(error)i(if)e Ft(obj)h FK(is)f(an)h(unbound)i(v)n(ariable.)p 75 2546 1648 4 v 1764 2551 a FF(Example)p 2102 2546 V 75 2571 4 25 v 3747 2571 V 75 2671 4 100 v 188 2641 a(gap>)44 b(IsCode\()g(1)f(\);)p 3747 2671 V 75 2770 V 188 2741 a(false)p 3747 2770 V 75 2870 V 188 2840 a(gap>)h(IsCode\()g (ReedMullerCode\()k(2,3)43 b(\))g(\);)p 3747 2870 V 75 2970 V 188 2940 a(true)p 3747 2970 V 75 2995 4 25 v 3747 2995 V 75 2998 3675 4 v 75 3131 a SDict begin H.S end 75 3131 a 75 3131 a SDict begin 13.6 H.A end 75 3131 a 75 3131 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3.4) cvn H.B /DEST pdfmark end 75 3131 a 116 x FJ(4.3.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsLinearCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3421 a Fs(\006)22 b Ft(IsLinearCode\()51 b(obj)d(\))2445 b Fr(\(function\))p Black 216 3647 a Ft(IsLinearCode)25 b FK(checks)e(if)e(object)i Ft(obj)f FK(\(not)g(necessarily)i(a)d (code\))i(is)e(a)g(linear)h(code.)29 b(If)21 b(a)g(code)i(has)e (already)75 3760 y(been)33 b(mark)o(ed)h(as)e(linear)h(or)g(c)o(yclic,) i(the)e(function)h(automatically)i(returns)e(`true'.)56 b(Otherwise,)35 b(the)e(function)75 3873 y(checks)j(if)f(a)f(basis)i Fq(G)e FK(of)h(the)g(elements)h(of)f Ft(obj)g FK(e)o(xists)h(that)f (generates)j(the)d(elements)h(of)f Ft(obj)q FK(.)62 b(If)34 b(so,)k Fq(G)33 b FK(is)75 3986 y(recorded)j(as)e(a)f(generator)j (matrix)f(of)f Ft(obj)g FK(and)g(the)g(function)i(returns)g(`true'.)60 b(If)34 b(not,)i(the)f(function)h(returns)75 4099 y(`f)o(alse'.)p 75 4203 1648 4 v 1764 4208 a FF(Example)p 2102 4203 V 75 4228 4 25 v 3747 4228 V 75 4327 4 100 v 188 4297 a(gap>)44 b(C)e(:=)h(ElementsCode\()k([)c([0,0,0],[1,1,1])k(],)c(GF\(2\))h(\);)p 3747 4327 V 75 4427 V 188 4397 a(a)f(\(3,2,1..3\)1)j(user)d(defined)i (unrestricted)i(code)c(over)h(GF\(2\))p 3747 4427 V 75 4527 V 188 4497 a(gap>)g(IsLinearCode\()i(C)d(\);)p 3747 4527 V 75 4626 V 188 4596 a(true)p 3747 4626 V 75 4726 V 188 4696 a(gap>)h(IsLinearCode\()i(ElementsCode\()h([)c([1,1,1])i(],) e(GF\(2\))h(\))e(\);)p 3747 4726 V 75 4825 V 188 4796 a(false)p 3747 4825 V 75 4925 V 188 4895 a(gap>)i(IsLinearCode\()i(1)d (\);)p 3747 4925 V 75 5025 V 188 4995 a(false)p 3747 5025 V 75 5050 4 25 v 3747 5050 V 75 5053 3675 4 v 75 5186 a SDict begin H.S end 75 5186 a 75 5186 a SDict begin 13.6 H.A end 75 5186 a 75 5186 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3.5) cvn H.B /DEST pdfmark end 75 5186 a 116 x FJ(4.3.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsCyclicCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5476 a Fs(\006)22 b Ft(IsCyclicCode\()51 b(obj)d(\))2445 b Fr(\(function\))p Black Black Black eop end end %%Page: 33 33 TeXDict begin HPSdict begin 33 32 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.33) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(33)p Black 216 399 a Ft(IsCyclicCode)33 b FK(checks)f(if)d(the)h(object)i Ft(obj)e FK(is)f(a)h(c)o(yclic)g (code.)49 b(If)29 b(a)h(code)g(has)g(already)i(been)f(mark)o(ed)f(as)75 511 y(c)o(yclic,)35 b(the)e(function)h(automatically)i(returns)e (`true'.)56 b(Otherwise,)35 b(the)e(function)h(checks)g(if)e(a)g (polynomial)j Fq(g)75 624 y FK(e)o(xists)29 b(that)g(generates)i(the)d (elements)i(of)e Ft(obj)q FK(.)42 b(If)28 b(so,)h Fq(g)f FK(is)g(recorded)j(as)d(a)g(generator)i(polynomial)h(of)d Ft(obj)h FK(and)75 737 y(the)24 b(function)i(returns)f(`true'.)30 b(If)23 b(not,)g(the)h(function)i(returns)f(`f)o(alse'.)p 75 853 1648 4 v 1764 858 a FF(Example)p 2102 853 V 75 878 4 25 v 3747 878 V 75 978 4 100 v 188 948 a(gap>)44 b(C)e(:=)h(ElementsCode\()k([)c([0,0,0],)i([1,1,1])g(],)e(GF\(2\))h (\);)p 3747 978 V 75 1077 V 188 1047 a(a)f(\(3,2,1..3\)1)j(user)d (defined)i(unrestricted)i(code)c(over)h(GF\(2\))p 3747 1077 V 75 1177 V 188 1147 a(gap>)g(#)e(GUAVA)i(does)g(not)f(know)h(the) f(code)h(is)f(cyclic)p 3747 1177 V 75 1276 V 188 1247 a(gap>)h(IsCyclicCode\()i(C)d(\);)255 b(#)42 b(this)i(command)h(tells)f (GUAVA)g(to)f(find)h(out)p 3747 1276 V 75 1376 V 188 1346 a(true)p 3747 1376 V 75 1476 V 188 1446 a(gap>)g(IsCyclicCode\()i (HammingCode\()h(4,)c(GF\(2\))h(\))f(\);)p 3747 1476 V 75 1575 V 188 1545 a(false)p 3747 1575 V 75 1675 V 188 1645 a(gap>)h(IsCyclicCode\()i(1)d(\);)p 3747 1675 V 75 1775 V 188 1745 a(false)p 3747 1775 V 75 1799 4 25 v 3747 1799 V 75 1802 3675 4 v 75 1936 a SDict begin H.S end 75 1936 a 75 1936 a SDict begin 13.6 H.A end 75 1936 a 75 1936 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3.6) cvn H.B /DEST pdfmark end 75 1936 a 116 x FJ(4.3.6)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsP)n(erfectCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2226 a Fs(\006)22 b Ft(IsPerfectCode\()52 b(C)47 b(\))2491 b Fr(\(function\))p Black 216 2452 a Ft(IsPerfectCode\(C\))33 b FK(returns)d(`true')f(if)f Ft(C)f FK(is)h(a)g(perfect)i(code.)43 b(If)23 b Fq(C)h Fv(\032)f Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))2828 2419 y Fm(n)2893 2452 y FK(then,)30 b(by)e(de\002nition,)j(this)75 2565 y(means)g(that)f(for)h(some)f(positi)n(v)o(e)i(inte)o(ger)d Fq(t)6 b FK(,)31 b(the)g(space)g Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))2152 2532 y Fm(n)2220 2565 y FK(is)30 b(co)o(v)o(ered)h(by)g (non-o)o(v)o(erlapping)j(spheres)e(of)75 2678 y(\(Hamming\))20 b(radius)f Fq(t)26 b FK(centered)21 b(at)f(the)g(code)n(w)o(ords)i(in)d Ft(C)q FK(.)27 b(F)o(or)18 b(a)i(code)g(with)g(odd)g(minimum)g (distance)i Fq(d)g Fo(=)16 b FK(2)n Fq(t)g Fo(+)9 b FK(1,)75 2791 y(this)31 b(is)g(the)g(case)h(when)f(e)n(v)o(ery)h(w)o(ord)f(of)f (the)i(v)o(ector)g(space)g(of)e Ft(C)h FK(is)g(at)f(distance)k(at)c (most)f Fq(t)37 b FK(from)30 b(e)o(xactly)j(one)75 2904 y(element)25 b(of)e Ft(C)p FK(.)28 b(Codes)c(with)g(e)n(v)o(en)f (minimum)h(distance)h(are)f(ne)n(v)o(er)g(perfect.)216 3017 y(In)j(f)o(act,)h(a)f(code)h(that)f(is)g(not)g(\224tri)n(vially)i (perfect\224)g(\(the)f(binary)g(repetition)i(codes)e(of)f(odd)h (length,)h(the)e(codes)75 3130 y(consisting)32 b(of)e(one)g(w)o(ord,)g (and)g(the)g(codes)g(consisting)j(of)c(the)h(whole)g(v)o(ector)g (space\),)i(and)e(does)g(not)g(ha)n(v)o(e)g(the)75 3242 y(parameters)c(of)d(a)g(Hamming)g(or)h(Golay)g(code,)g(cannot)h(be)f (perfect)h(\(see)f(section)h(1.12)f(in)f([)p 0.0236 0.6179 0.0894 TeXcolorrgb 3008 3243 a SDict begin H.S end 3008 3243 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(HP03)p 0.0236 0.6179 0.0894 TeXcolorrgb 3215 3180 a SDict begin H.R end 3215 3180 a 3215 3242 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.HP03) cvn H.B /ANN pdfmark end 3215 3242 a Black 1 w FK(]\).)p 75 3365 1648 4 v 1764 3370 a FF(Example)p 2102 3365 V 75 3390 4 25 v 3747 3390 V 75 3490 4 100 v 188 3460 a(gap>)44 b(H)e(:=)h(HammingCode\(2\);)p 3747 3490 V 75 3589 V 188 3559 a(a)g(linear)h([3,1,3]1)h(Hamming)g(\(2,2\))f (code)g(over)f(GF\(2\))p 3747 3589 V 75 3689 V 188 3659 a(gap>)h(IsPerfectCode\()j(H)42 b(\);)p 3747 3689 V 75 3788 V 188 3759 a(true)p 3747 3788 V 75 3888 V 188 3858 a(gap>)i(IsPerfectCode\()j(ElementsCode\([[1,1,0)q(],[)q(0,0)q(,1])q (],G)q(F\(2)q(\)\))i(\);)p 3747 3888 V 75 3988 V 188 3958 a(true)p 3747 3988 V 75 4087 V 188 4057 a(gap>)44 b(IsPerfectCode\()j(ReedSolomonCode\()h(6,)43 b(3)f(\))h(\);)p 3747 4087 V 75 4187 V 188 4157 a(false)p 3747 4187 V 75 4287 V 188 4257 a(gap>)h(IsPerfectCode\()j(BinaryGolayCode\(\))h (\);)p 3747 4287 V 75 4386 V 188 4356 a(true)p 3747 4386 V 75 4411 4 25 v 3747 4411 V 75 4414 3675 4 v 75 4547 a SDict begin H.S end 75 4547 a 75 4547 a SDict begin 13.6 H.A end 75 4547 a 75 4547 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3.7) cvn H.B /DEST pdfmark end 75 4547 a 117 x FJ(4.3.7)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsMDSCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4838 a Fs(\006)22 b Ft(IsMDSCode\()50 b(C)d(\))2677 b Fr(\(function\))p Black 216 5064 a Ft(IsMDSCode\(C\))29 b FK(returns)f(true)e(if)f Ft(C)g FK(is)h(a)f(maximum)h(distance)i(separable)g(\(MDS\))c(code.)36 b(A)24 b(linear)j Fo([)p Fq(n)p Fp(;)10 b Fq(k)r Fp(;)g Fq(d)5 b Fo(])p FK(-)75 5177 y(code)21 b(of)e(length)i Fq(n)p FK(,)f(dimension)i Fq(k)f FK(and)f(minimum)f(distance)j Fq(d)i FK(is)c(an)g(MDS)d(code)k(if)e Fq(k)g Fo(=)d Fq(n)9 b Fv(\000)g Fq(d)14 b Fo(+)9 b FK(1,)20 b(in)g(other)h(w)o(ords)75 5290 y(if)27 b Ft(C)f FK(meets)h(the)g(Singleton)h(bound)h(\(see)e Ft(UpperBoundSingleto)q(n)32 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2341 5291 a SDict begin H.S end 2341 5291 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 2522 5228 a SDict begin H.R end 2522 5228 a 2522 5290 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.1) cvn H.B /ANN pdfmark end 2522 5290 a Black FK(\)\).)39 b(An)26 b(unrestricted)k Fo(\()p Fq(n)p Fp(;)10 b Fq(M)t Fp(;)g Fq(d)5 b Fo(\))27 b FK(code)75 5402 y(is)f(called)i Fq(MDS)e FK(if)h Fq(k)c Fo(=)f Fq(n)14 b Fv(\000)g Fq(d)k Fo(+)c FK(1,)26 b(with)h Fq(k)g FK(equal)h(to)e(the)h(lar)n(gest)i (inte)o(ger)e(less)g(than)h(or)e(equal)i(to)e(the)h(logarithm)75 5515 y(of)c Fq(M)k FK(with)c(base)h Fq(q)p FK(,)f(the)h(size)g(of)f (the)h(base)h(\002eld)e(of)g Ft(C)q FK(.)p Black Black eop end end %%Page: 34 34 TeXDict begin HPSdict begin 34 33 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.34) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(34)p Black 216 399 a(W)-7 b(ell-kno)n(wn)35 b(MDS)d(codes)k(include)f(the)g(repetition)h(codes,)i(the)c(whole)g (space)i(codes,)h(the)d(e)n(v)o(en)h(weight)75 511 y(codes)25 b(\(these)g(are)e(the)h(only)g Fq(binary)i FK(MDS)21 b(codes\))k(and)f(the)g(Reed-Solomon)h(codes.)p 75 634 1648 4 v 1764 639 a FF(Example)p 2102 634 V 75 659 4 25 v 3747 659 V 75 759 4 100 v 188 729 a(gap>)44 b(C1)f(:=)g (ReedSolomonCode\()k(6,)c(3)g(\);)p 3747 759 V 75 858 V 188 828 a(a)g(cyclic)h([6,4,3]2)h(Reed-Solomon)h(code)e(over)g (GF\(7\))p 3747 858 V 75 958 V 188 928 a(gap>)g(IsMDSCode\()h(C1)e(\);) p 3747 958 V 75 1057 V 188 1028 a(true)171 b(#)42 b(6-3+1)i(=)f(4)p 3747 1057 V 75 1157 V 188 1127 a(gap>)h(IsMDSCode\()h(QRCode\()g(23,)e (GF\(2\))i(\))d(\);)p 3747 1157 V 75 1257 V 188 1227 a(false)p 3747 1257 V 75 1282 4 25 v 3747 1282 V 75 1285 3675 4 v 75 1418 a SDict begin H.S end 75 1418 a 75 1418 a SDict begin 13.6 H.A end 75 1418 a 75 1418 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3.8) cvn H.B /DEST pdfmark end 75 1418 a 116 x FJ(4.3.8)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsSelfDualCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1708 a Fs(\006)22 b Ft(IsSelfDualCode\()52 b(C)47 b(\))2445 b Fr(\(function\))p Black 216 1934 a Ft(IsSelfDualCode\(C\))29 b FK(returns)d(`true')f(if)f Ft(C)f FK(is)h(self-dual,)i(i.e.)j(when)24 b Ft(C)f FK(is)h(equal)h(to)f(its)g(dual)g(code)h(\(see)g(also)75 2047 y Ft(DualCode)g FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 498 2048 a SDict begin H.S end 498 2048 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.13)p 0.0236 0.0894 0.6179 TeXcolorrgb 724 1985 a SDict begin H.R end 724 1985 a 724 2047 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.13) cvn H.B /ANN pdfmark end 724 2047 a Black FK(\)\).)k(A)22 b(code)h(is)f(self-dual)j(if)e(it)f(contains)j(all)d(v)o(ectors)i(that) f(its)g(elements)h(are)f(orthogonal)i(to.)j(If)75 2160 y(a)23 b(code)h(is)g(self-dual,)h(it)f(automatically)i(is)e (self-orthogonal)k(\(see)c Ft(IsSelfOrthogonalCod)q(e)29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3181 2162 a SDict begin H.S end 3181 2162 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(4.3.9)p 0.0236 0.0894 0.6179 TeXcolorrgb 3362 2098 a SDict begin H.R end 3362 2098 a 3362 2160 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.3.9) cvn H.B /ANN pdfmark end 3362 2160 a Black FK(\)\).)216 2273 y(If)36 b Ft(C)g FK(is)h(a)f(non-linear)j(code,)h(it)c(cannot)i(be)f(self-dual) h(\(the)f(dual)g(code)h(is)e(al)o(w)o(ays)h(linear\),)k(so)36 b(`f)o(alse')i(is)75 2386 y(returned.)31 b(A)22 b(linear)j(code)f(can)g (only)h(be)e(self-dual)j(when)e(its)f(dimension)j Fq(k)e FK(is)g(equal)g(to)g(the)g(redundanc)o(y)i Fq(r)r FK(.)p 75 2508 1648 4 v 1764 2513 a FF(Example)p 2102 2508 V 75 2533 4 25 v 3747 2533 V 75 2633 4 100 v 188 2603 a(gap>)44 b(IsSelfDualCode\()j(ExtendedBinaryGolay)q(Cod)q(e\(\))i(\);)p 3747 2633 V 75 2733 V 188 2703 a(true)p 3747 2733 V 75 2832 V 188 2802 a(gap>)44 b(C)e(:=)h(ReedMullerCode\()48 b(1,)43 b(3)f(\);)p 3747 2832 V 75 2932 V 188 2902 a(a)h(linear)h ([8,4,4]2)h(Reed-Muller)h(\(1,3\))e(code)g(over)g(GF\(2\))p 3747 2932 V 75 3032 V 188 3002 a(gap>)g(DualCode\()h(C)e(\))f(=)h(C;)p 3747 3032 V 75 3131 V 188 3101 a(true)p 3747 3131 V 75 3156 4 25 v 3747 3156 V 75 3159 3675 4 v 75 3392 a SDict begin H.S end 75 3392 a 75 3392 a SDict begin 13.6 H.A end 75 3392 a 75 3392 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3.9) cvn H.B /DEST pdfmark end 75 3392 a 116 x FJ(4.3.9)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsSelfOrthogonalCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3682 a Fs(\006)22 b Ft(IsSelfOrthogonalC)q(ode)q(\()52 b(C)47 b(\))2167 b Fr(\(function\))p Black 216 3908 a Ft(IsSelfOrthogonalCo)q(de\()q(C\)) 37 b FK(returns)c(`true')g(if)e Ft(C)g FK(is)h(self-orthogonal.)57 b(A)30 b(code)j(is)e Fq(self-ortho)o(gonal)36 b FK(if)75 4021 y(e)n(v)o(ery)26 b(element)g(of)g Ft(C)e FK(is)i(orthogonal)i(to)d (all)h(elements)h(of)e Ft(C)p FK(,)g(including)j(itself.)35 b(\(In)26 b(the)g(linear)g(case,)h(this)e(simply)75 4134 y(means)f(that)g(the)g(generator)i(matrix)e(of)f Ft(C)h FK(multiplied)h(with)e(its)h(transpose)i(yields)f(a)e(null)h(matrix.\)) p 75 4257 1648 4 v 1764 4262 a FF(Example)p 2102 4257 V 75 4282 4 25 v 3747 4282 V 75 4381 4 100 v 188 4351 a(gap>)44 b(R)e(:=)h(ReedMullerCode\(1,4\))q(;)p 3747 4381 V 75 4481 V 188 4451 a(a)g(linear)h([16,5,8]6)h(Reed-Muller)h (\(1,4\))f(code)e(over)h(GF\(2\))p 3747 4481 V 75 4581 V 188 4551 a(gap>)g(IsSelfOrthogonalCode\()q(R\);)p 3747 4581 V 75 4680 V 188 4650 a(true)p 3747 4680 V 75 4780 V 188 4750 a(gap>)g(IsSelfDualCode\(R\);)p 3747 4780 V 75 4879 V 188 4850 a(false)p 3747 4879 V 75 4904 4 25 v 3747 4904 V 75 4907 3675 4 v 75 5140 a SDict begin H.S end 75 5140 a 75 5140 a SDict begin 13.6 H.A end 75 5140 a 75 5140 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3.10) cvn H.B /DEST pdfmark end 75 5140 a 116 x FJ(4.3.10)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsSelfComplementaryCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5431 a Fs(\006)22 b Ft(IsSelfComplementa)q(ryC)q(ode)q(\()52 b(C)47 b(\))2028 b Fr(\(function\))p Black Black Black eop end end %%Page: 35 35 TeXDict begin HPSdict begin 35 34 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.35) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(35)p Black 216 399 a Ft(IsSelfComplementar)q(yCo)q(de)29 b FK(returns)c(`true')g(if)1564 603 y Fq(v)c Fv(2)14 b Fq(C)23 b Fv(\))d FK(1)13 b Fv(\000)g Fq(v)20 b Fv(2)15 b Fq(C)r Fp(;)75 807 y FK(where)24 b(1)f(is)g(the)h(all-one)h(w)o(ord)f (of)f(length)i Fq(n)p FK(.)p 75 930 1648 4 v 1764 935 a FF(Example)p 2102 930 V 75 955 4 25 v 3747 955 V 75 1054 4 100 v 188 1024 a(gap>)44 b(IsSelfComplementaryCo)q(de\()49 b(HammingCode\()e(3,)c(GF\(2\))h(\))e(\);)p 3747 1054 V 75 1154 V 188 1124 a(true)p 3747 1154 V 75 1253 V 188 1223 a(gap>)i(IsSelfComplementaryCo)q(de\()49 b(EvenWeightSubcode\()p 3747 1253 V 75 1353 V 188 1323 a(>)43 b(HammingCode\()j(3,)d(GF\(2\))h (\))f(\))f(\);)p 3747 1353 V 75 1453 V 188 1423 a(false)p 3747 1453 V 75 1478 4 25 v 3747 1478 V 75 1481 3675 4 v 75 1713 a SDict begin H.S end 75 1713 a 75 1713 a SDict begin 13.6 H.A end 75 1713 a 75 1713 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3.11) cvn H.B /DEST pdfmark end 75 1713 a 117 x FJ(4.3.11)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsAf\002neCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2004 a Fs(\006)22 b Ft(IsAffineCode\()51 b(C)c(\))2538 b Fr(\(function\))p Black 216 2230 a Ft(IsAffineCode)29 b FK(returns)e(`true')g(if)e Ft(C)g FK(is)h(an)f(af)n(\002ne)g(code.)36 b(A)24 b(code)j(is)e(called) i Fq(af)n(\002ne)g FK(if)e(it)g(is)g(an)h(af)n(\002ne)f(space.)75 2343 y(In)e(other)i(w)o(ords,)f(a)f(code)h(is)g(af)n(\002ne)f(if)g(it)h (is)f(a)g(coset)i(of)e(a)g(linear)i(code.)p 75 2458 1648 4 v 1764 2463 a FF(Example)p 2102 2458 V 75 2483 4 25 v 3747 2483 V 75 2583 4 100 v 188 2553 a(gap>)44 b(IsAffineCode\()i (HammingCode\()h(3,)c(GF\(2\))h(\))f(\);)p 3747 2583 V 75 2683 V 188 2653 a(true)p 3747 2683 V 75 2782 V 188 2752 a(gap>)h(IsAffineCode\()i(CosetCode\()g(HammingCode\()h(3,)c (GF\(2\))h(\),)p 3747 2782 V 75 2882 V 188 2852 a(>)f([)f(1,)h(0,)g(0,) g(0,)g(0,)g(0,)g(0)g(])g(\))f(\);)p 3747 2882 V 75 2981 V 188 2952 a(true)p 3747 2981 V 75 3081 V 188 3051 a(gap>)i (IsAffineCode\()i(NordstromRobinsonC)q(ode)q(\(\))j(\);)p 3747 3081 V 75 3181 V 188 3151 a(false)p 3747 3181 V 75 3206 4 25 v 3747 3206 V 75 3209 3675 4 v 75 3342 a SDict begin H.S end 75 3342 a 75 3342 a SDict begin 13.6 H.A end 75 3342 a 75 3342 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3.12) cvn H.B /DEST pdfmark end 75 3342 a 116 x FJ(4.3.12)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsAlmostAf\002neCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3632 a Fs(\006)22 b Ft(IsAlmostAffineCod)q(e\()53 b(C)46 b(\))2260 b Fr(\(function\))p Black 216 3858 a Ft(IsAlmostAffineCode)32 b FK(returns)d(`true')e(if)f Ft(C)h FK(is)f(an)g(almost)i(af)n(\002ne)e(code.)39 b(A)25 b(code)i(is)g(called)g Fq(almost)h(af)n(\002ne)75 3971 y FK(if)c(the)g(size)g(of)g(an)o(y)g(punctured)i(code)f(of)e Ft(C)h FK(is)f Fq(q)1581 3938 y Fm(r)1636 3971 y FK(for)h(some)g Fq(r)r FK(,)f(where)i Fq(q)e FK(is)h(the)g(size)g(of)g(the)g(alphabet)i (of)e(the)g(code.)75 4084 y(Ev)o(ery)g(af)n(\002ne)g(code)h(is)f(also)h (almost)g(af)n(\002ne,)f(and)g(e)n(v)o(ery)h(code)g(o)o(v)o(er)f Fq(GF)7 b Fo(\()p FK(2)p Fo(\))24 b FK(and)h Fq(GF)7 b Fo(\()p FK(3)p Fo(\))24 b FK(that)h(is)f(almost)g(af)n(\002ne)g(is)75 4197 y(also)g(af)n(\002ne.)p 75 4301 1648 4 v 1764 4306 a FF(Example)p 2102 4301 V 75 4326 4 25 v 3747 4326 V 75 4425 4 100 v 188 4396 a(gap>)44 b(code)f(:=)g(ElementsCode\()k([)c ([0,0,0],)i([0,1,1],)g([0,2,2],)g([0,3,3],)p 3747 4425 V 75 4525 V 188 4495 a(>)1228 b([1,0,1],)45 b([1,1,0],)g([1,2,3],)g ([1,3,2],)p 3747 4525 V 75 4625 V 188 4595 a(>)1228 b([2,0,2],)45 b([2,1,3],)g([2,2,0],)g([2,3,1],)p 3747 4625 V 75 4724 V 188 4694 a(>)1228 b([3,0,3],)45 b([3,1,2],)g([3,2,1],)g([3,3,0])g(],) p 3747 4724 V 75 4824 V 188 4794 a(>)1228 b(GF\(4\))44 b(\);;)p 3747 4824 V 75 4924 V 188 4894 a(gap>)g(IsAlmostAffineCode\()k (code)c(\);)p 3747 4924 V 75 5023 V 188 4993 a(true)p 3747 5023 V 75 5123 V 188 5093 a(gap>)g(IsAlmostAffineCode\()k (NordstromRobinsonC)q(ode)q(\(\))h(\);)p 3747 5123 V 75 5223 V 188 5193 a(false)p 3747 5223 V 75 5247 4 25 v 3747 5247 V 75 5250 3675 4 v Black Black eop end end %%Page: 36 36 TeXDict begin HPSdict begin 36 35 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.36) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(36)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (section.4.4) cvn H.B /DEST pdfmark end 75 307 a 92 x FM(4.4)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Equi)o(v)o(alence)31 b(and)g(Isomor)o(phism)d(of)h(Codes)p Black 75 517 a SDict begin H.S end 75 517 a 75 517 a SDict begin 13.6 H.A end 75 517 a 75 517 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.4.1) cvn H.B /DEST pdfmark end 75 517 a 92 x FJ(4.4.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsEqui)o(v)o(alent)p Black 1.0 0.0 0.0 TeXcolorrgb 75 783 a Fs(\006)22 b Ft(IsEquivalent\() 51 b(C1,)d(C2)f(\))2306 b Fr(\(function\))p Black 216 1009 a FK(W)-7 b(e)31 b(say)i(that)f Ft(C1)g FK(is)g Fq(permutation)j(equivalent)i FK(to)32 b Ft(C2)g FK(if)g Ft(C1)g FK(can)g(be)g(obtained)i(from)e Ft(C2)g FK(by)h(carrying)h(out) 75 1122 y(column)e(permutations.)53 b Ft(IsEquivalent)35 b FK(returns)d(true)g(if)e Ft(C1)h FK(and)g Ft(C2)g FK(are)g(equi)n(v)n (alent)i(codes.)52 b(At)30 b(this)i(time,)75 1235 y Ft(IsEquivalent)j FK(only)e(handles)h Fq(binary)f FK(codes.)55 b(\(The)31 b(e)o(xternal)j(unix/linux)h(program)g Fj(D)t(E)t(S)t(AU)t(T)s(O)g FK(from)d(J.)f(S.)75 1348 y(Leon)24 b(is)f(called)i(by)e Ft(IsEquivalent)p FK(.\))33 b(Of)23 b(course,)h(if)g Ft(C1)f FK(and)h Ft(C2)f FK(are)h(equal,)h(the)o(y)e(are)h(also)g(equi) n(v)n(alent.)216 1461 y(Note)g(that)g(the)f(algorithm)j(is)d Fq(very)h(slow)g FK(for)f(non-linear)k(codes.)216 1573 y(More)f(generally)-6 b(,)28 b(we)c(say)i(that)g Ft(C1)g FK(is)f Fq(equivalent)30 b FK(to)25 b Ft(C2)h FK(if)f Ft(C1)g FK(can)h(be)f(obtained)j(from)d Ft(C2)h FK(by)f(carrying)j(out) 75 1686 y(column)c(permutations)j(and)d(a)f(permutation)j(of)e(the)f (alphabet.)p 75 1809 1648 4 v 1764 1814 a FF(Example)p 2102 1809 V 75 1834 4 25 v 3747 1834 V 75 1934 4 100 v 188 1904 a(gap>)44 b(x:=)f(Indeterminate\()k(GF\(2\))d(\);;)g(pol:=)g (x\2103+x+1;)p 3747 1934 V 75 2033 V 188 2003 a (Z\(2\)\2100+x_1+x_1\2103)p 3747 2033 V 75 2133 V 188 2103 a(gap>)g(H)e(:=)h(GeneratorPolCode\()48 b(pol,)c(7,)f(GF\(2\)\);)p 3747 2133 V 75 2232 V 188 2203 a(a)g(cyclic)h([7,4,1..3]1)i(code)e (defined)h(by)e(generator)i(polynomial)h(over)d(GF\(2\))p 3747 2232 V 75 2332 V 188 2302 a(gap>)h(H)e(=)h(HammingCode\(3,)k (GF\(2\)\);)p 3747 2332 V 75 2432 V 188 2402 a(false)p 3747 2432 V 75 2531 V 188 2501 a(gap>)d(IsEquivalent\(H,)j (HammingCode\(3,)g(GF\(2\)\)\);)p 3747 2531 V 75 2631 V 188 2601 a(true)1017 b(#)43 b(H)g(is)g(equivalent)j(to)d(a)f(Hamming) j(code)p 3747 2631 V 75 2731 V 188 2701 a(gap>)f(CodeIsomorphism\(H,)k (HammingCode\(3,)f(GF\(2\)\)\);)p 3747 2731 V 75 2830 V 188 2800 a(\(3,4\)\(5,6,7\))p 3747 2830 V 75 2855 4 25 v 3747 2855 V 75 2858 3675 4 v 75 2991 a SDict begin H.S end 75 2991 a 75 2991 a SDict begin 13.6 H.A end 75 2991 a 75 2991 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.4.2) cvn H.B /DEST pdfmark end 75 2991 a 117 x FJ(4.4.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(CodeIsomor)o(phism)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3282 a Fs(\006)22 b Ft(CodeIsomorphism\()53 b(C1,)47 b(C2)g(\))2167 b Fr(\(function\))p Black 216 3508 a FK(If)45 b(the)g(tw)o(o)g(codes)h Ft(C1)f FK(and)g Ft(C2)g FK(are)g(permutation)i(equi)n(v)n(alent)h(codes)e(\(see)f Ft(IsEquivalent)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3485 3509 a SDict begin H.S end 3485 3509 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.4.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 3666 3446 a SDict begin H.R end 3666 3446 a 3666 3508 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.4.1) cvn H.B /ANN pdfmark end 3666 3508 a Black FK(\)\),)75 3621 y Ft(CodeIsomorphism)37 b FK(returns)d(the)f(permutation)i(that)e (transforms)h Ft(C1)f FK(into)g Ft(C2)p FK(.)55 b(If)32 b(the)h(codes)h(are)e(not)h(equi)n(v-)75 3734 y(alent,)24 b(it)f(returns)j(`f)o(alse'.)216 3846 y(At)f(this)h(time,)g Ft(IsEquivalent)j FK(only)d(computes)i(isomorphisms)g(between)e Fq(binary)h FK(codes)g(on)f(a)f(linux/unix)75 3959 y(computer)g (\(since)g(it)e(calls)i(Leon')-5 b(s)24 b(C)e(program)27 b Fj(D)t(E)t(S)t(AU)t(T)s(O)r FK(\).)p 75 4082 1648 4 v 1764 4087 a FF(Example)p 2102 4082 V 75 4107 4 25 v 3747 4107 V 75 4206 4 100 v 188 4177 a(gap>)44 b(x:=)f(Indeterminate\() k(GF\(2\))d(\);;)g(pol:=)g(x\2103+x+1;)p 3747 4206 V 75 4306 V 188 4276 a(Z\(2\)\2100+x_1+x_1\2103)p 3747 4306 V 75 4406 V 188 4376 a(gap>)g(H)e(:=)h(GeneratorPolCode\()48 b(pol,)c(7,)f(GF\(2\)\);)p 3747 4406 V 75 4505 V 188 4475 a(a)g(cyclic)h([7,4,1..3]1)i(code)e(defined)h(by)e(generator)i (polynomial)h(over)d(GF\(2\))p 3747 4505 V 75 4605 V 188 4575 a(gap>)h(CodeIsomorphism\(H,)k(HammingCode\(3,)f(GF\(2\)\)\);) p 3747 4605 V 75 4705 V 188 4675 a(\(3,4\)\(5,6,7\))p 3747 4705 V 75 4804 V 188 4774 a(gap>)d(PermutedCode\(H,)j (\(3,4\)\(5,6,7\)\))g(=)c(HammingCode\(3,)k(GF\(2\)\);)p 3747 4804 V 75 4904 V 188 4874 a(true)p 3747 4904 V 75 4929 4 25 v 3747 4929 V 75 4932 3675 4 v 75 5065 a SDict begin H.S end 75 5065 a 75 5065 a SDict begin 13.6 H.A end 75 5065 a 75 5065 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.4.3) cvn H.B /DEST pdfmark end 75 5065 a 116 x FJ(4.4.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(A)-5 b(utomor)o(phismGr)n(oup)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5356 a Fs(\006)22 b Ft(AutomorphismGroup)q(\()52 b(C)47 b(\))2306 b Fr(\(function\))p Black Black Black eop end end %%Page: 37 37 TeXDict begin HPSdict begin 37 36 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.37) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(37)p Black 216 399 a Ft(AutomorphismGroup)42 b FK(returns)37 b(the)g(automorphism)h(group)g(of)e(a)f(linear)i(code)g Ft(C)q FK(.)65 b(F)o(or)35 b(a)h(binary)i(code,)75 511 y(the)e(automorphism)j(group)e(is)f(the)g(lar)n(gest)i(permutation)g (group)f(of)f(de)o(gree)h Fq(n)f FK(such)g(that)h(each)g(permutation)75 624 y(applied)g(to)e(the)g(columns)h(of)f Ft(C)g FK(again)h(yields)g Ft(C)p FK(.)63 b Fy(GU)m(A)-6 b(V)f(A)33 b FK(calls)j(the)f(e)o (xternal)i(program)h Fj(D)t(E)t(S)t(AU)t(T)s(O)g FK(written)75 737 y(by)g(J.)f(S.)g(Leon,)k(if)d(it)g(e)o(xists,)k(to)c(compute)h(the) f(automorphism)j(group.)73 b(If)38 b(Leon')-5 b(s)39 b(program)g(is)f(not)g(com-)75 850 y(piled)h(on)f(the)g(system)h(\(and) f(in)g(the)g(def)o(ault)i(directory\))g(then)f(it)e(calls)i(instead)h (the)e(much)g(slo)n(wer)g(program)75 963 y Ft(PermutationAutomor)q(phi) q(smG)q(rou)q(p)p FK(.)216 1076 y(See)29 b(Leon)g([)p 0.0236 0.6179 0.0894 TeXcolorrgb 621 1077 a SDict begin H.S end 621 1077 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(Leo82)p 0.0236 0.6179 0.0894 TeXcolorrgb 852 1014 a SDict begin H.R end 852 1014 a 852 1076 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.Leon82) cvn H.B /ANN pdfmark end 852 1076 a Black 1 w FK(])g(for)g(a)g(more)g(precise)i(description)h(of)d(the)g (method,)j(and)d(the)g Ft(guava/src/leon/do)q(c)75 1189 y FK(subdirectory)e(for)d(for)g(details)h(about)f(Leon')-5 b(s)25 b(C)d(programs.)216 1302 y(The)h(function)j Ft(PermutedCode)h FK(permutes)e(the)f(columns)h(of)e(a)g(code)i(\(see)f Ft(PermutedCode)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3240 1303 a SDict begin H.S end 3240 1303 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 3421 1240 a SDict begin H.R end 3421 1240 a 3421 1302 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.4) cvn H.B /ANN pdfmark end 3421 1302 a Black FK(\)\).)p 75 1424 1648 4 v 1764 1429 a FF(Example)p 2102 1424 V 75 1449 4 25 v 3747 1449 V 75 1549 4 100 v 188 1519 a(gap>)44 b(R)e(:=)h(RepetitionCode\(7,GF)q(\(2\))q(\);)p 3747 1549 V 75 1649 V 188 1619 a(a)g(cyclic)h([7,1,7]3)h(repetition)h(code)e (over)f(GF\(2\))p 3747 1649 V 75 1748 V 188 1718 a(gap>)h (AutomorphismGroup\(R\);)p 3747 1748 V 75 1848 V 188 1818 a(Sym\()g([)e(1)h(..)g(7)g(])f(\))p 3747 1848 V 75 1947 V 1204 1918 a(#)h(every)h(permutation)i(keeps)e(R)f(identical)p 3747 1947 V 75 2047 V 188 2017 a(gap>)h(C)e(:=)h(CordaroWagnerCode\(7)q (\);)p 3747 2047 V 75 2147 V 188 2117 a(a)g(linear)h([7,2,4]3)h (Cordaro-Wagner)i(code)d(over)g(GF\(2\))p 3747 2147 V 75 2246 V 188 2216 a(gap>)g(AsSSortedList\(C\);)p 3747 2246 V 75 2346 V 188 2316 a([)f([)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(],)g([) g(0)f(0)h(1)g(1)f(1)h(1)g(1)g(],)g([)f(1)h(1)g(0)f(0)h(0)g(1)f(1)h(],)g ([)g(1)f(1)h(1)g(1)f(1)h(0)g(0)f(])h(])p 3747 2346 V 75 2446 V 188 2416 a(gap>)h(AutomorphismGroup\(C\);)p 3747 2446 V 75 2545 V 188 2515 a(Group\([)h(\(3,4\),)f(\(4,5\),)g (\(1,6\)\(2,7\),)j(\(1,2\),)d(\(6,7\))g(]\))p 3747 2545 V 75 2645 V 188 2615 a(gap>)g(C2)f(:=)85 b(PermutedCode\(C,)47 b(\(1,6\)\(2,7\)\);)p 3747 2645 V 75 2744 V 188 2715 a(a)c(linear)h([7,2,4]3)h(permuted)g(code)p 3747 2744 V 75 2844 V 188 2814 a(gap>)f(AsSSortedList\(C2\);)p 3747 2844 V 75 2944 V 188 2914 a([)f([)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h (],)g([)g(0)f(0)h(1)g(1)f(1)h(1)g(1)g(],)g([)f(1)h(1)g(0)f(0)h(0)g(1)f (1)h(],)g([)g(1)f(1)h(1)g(1)f(1)h(0)g(0)f(])h(])p 3747 2944 V 75 3043 V 188 3013 a(gap>)h(C2)f(=)f(C;)p 3747 3043 V 75 3143 V 188 3113 a(true)p 3747 3143 V 75 3168 4 25 v 3747 3168 V 75 3171 3675 4 v 75 3404 a SDict begin H.S end 75 3404 a 75 3404 a SDict begin 13.6 H.A end 75 3404 a 75 3404 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.4.4) cvn H.B /DEST pdfmark end 75 3404 a 116 x FJ(4.4.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(P)n(ermutationA)-5 b(utomor)o(phismGr)n (oup)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3694 a Fs(\006)22 b Ft(PermutationAutomo)q(rph)q(ism)q(Gro)q(up)q(\()52 b(C)47 b(\))1796 b Fr(\(function\))p Black 216 3920 a Ft(PermutationAutomor)q(phi)q(smG)q(ro)q(up)29 b FK(returns)24 b(the)g(permutation)h(automorphism)h(group)e(of)f(a)g(linear)h(code)75 4033 y Ft(C)p FK(.)j(This)21 b(is)g(the)h(lar)n(gest)h(permutation)g (group)g(of)e(de)o(gree)h Fq(n)f FK(such)h(that)f(each)h(permutation)i (applied)f(to)e(the)g(columns)75 4146 y(of)i Ft(C)h FK(again)g(yields)h Ft(C)p FK(.)j(It)23 b(is)h(written)g(in)f Fy(GAP)p FK(,)f(so)h(is)g (much)h(slo)n(wer)g(than)g Ft(AutomorphismGroup)p FK(.)216 4259 y(When)33 b Ft(C)e FK(is)h(binary)i Ft(PermutationAutomor)q(phi)q (smG)q(ro)q(up)k FK(does)33 b Fq(not)h FK(call)f Ft(AutomorphismGroup)p FK(,)39 b(e)n(v)o(en)75 4372 y(though)29 b(the)o(y)e(agree)h (mathematically)i(in)d(that)h(case.)40 b(This)27 b(w)o(ay)f Ft(PermutationAutomor)q(ph)q(ism)q(Gro)q(up)33 b FK(can)27 b(be)75 4485 y(called)e(on)e(an)o(y)h(platform)h(which)f(runs)g Fy(GAP)p FK(.)216 4598 y(The)f(older)i(name)e(for)h(this)g(command,)g Ft(PermutationGroup)p FK(,)k(will)23 b(become)i(obsolete)h(in)d(the)h (ne)o(xt)g(v)o(ersion)75 4710 y(of)f Fy(GAP)p FK(.)p 75 4815 1648 4 v 1764 4820 a FF(Example)p 2102 4815 V 75 4840 4 25 v 3747 4840 V 75 4939 4 100 v 188 4909 a(gap>)44 b(R)e(:=)h(RepetitionCode\(3,GF)q(\(3\))q(\);)p 3747 4939 V 75 5039 V 188 5009 a(a)g(cyclic)h([3,1,3]2)h(repetition)h(code)e (over)f(GF\(3\))p 3747 5039 V 75 5139 V 188 5109 a(gap>)h (G:=PermutationAutomor)q(phi)q(smG)q(ro)q(up\()q(R\);)p 3747 5139 V 75 5238 V 188 5208 a(Group\([)h(\(\),)e(\(1,3\),)h (\(1,2,3\),)h(\(2,3\),)g(\(1,3,2\),)g(\(1,2\))f(]\))p 3747 5238 V 75 5338 V 188 5308 a(gap>)g(G=SymmetricGroup\(3\);)p 3747 5338 V 75 5437 V 188 5408 a(true)p 3747 5437 V 75 5462 4 25 v 3747 5462 V 75 5465 3675 4 v Black Black eop end end %%Page: 38 38 TeXDict begin HPSdict begin 38 37 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.38) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(38)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (section.4.5) cvn H.B /DEST pdfmark end 75 307 a 92 x FM(4.5)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Domain)30 b(Functions)h(f)m(or)e(Codes)p Black 75 606 a FK(These)23 b(are)h(some)f Fy(GAP)e FK(functions)26 b(that)d(w)o(ork)g(on)h(`Domains')g(in)f(general.)30 b(Their)23 b(speci\002c)h(ef)n(fect)g(on)f(`Codes')h(is)75 718 y(e)o(xplained)i(here.)75 871 y SDict begin H.S end 75 871 a 75 871 a SDict begin 13.6 H.A end 75 871 a 75 871 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.5.1) cvn H.B /DEST pdfmark end 75 871 a 97 x FJ(4.5.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsFinite)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1142 a Fs(\006)c Ft(IsFinite\()50 b(C)d(\))2723 b Fr(\(function\))p Black 216 1368 a Ft(IsFinite)26 b FK(is)d(an)h (implementation)j(of)c(the)h Fy(GAP)e FK(domain)j(function)h Ft(IsFinite)p FK(.)31 b(It)24 b(returns)h(true)f(for)g(a)f(code)75 1481 y Ft(C)p FK(.)p 75 1585 1648 4 v 1764 1590 a FF(Example)p 2102 1585 V 75 1610 4 25 v 3747 1610 V 75 1710 4 100 v 188 1680 a(gap>)44 b(IsFinite\()h(RepetitionCode\()i(1000,)e (GF\(11\))f(\))f(\);)p 3747 1710 V 75 1809 V 188 1780 a(true)p 3747 1809 V 75 1834 4 25 v 3747 1834 V 75 1837 3675 4 v 75 1971 a SDict begin H.S end 75 1971 a 75 1971 a SDict begin 13.6 H.A end 75 1971 a 75 1971 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.5.2) cvn H.B /DEST pdfmark end 75 1971 a 116 x FJ(4.5.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Size)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2261 a Fs(\006)22 b Ft(Size\()49 b(C)d(\))2909 b Fr(\(function\))p Black 216 2487 a Ft(Size)23 b FK(returns)h(the)f(size)g(of)f Ft(C)q FK(,)f(the)i(number)g(of)g(elements)g(of)g(the)f(code.)30 b(If)22 b(the)g(code)i(is)e(linear)l(,)i(the)f(size)g(of)f(the)75 2600 y(code)i(is)g(equal)g(to)g Fq(q)711 2567 y Fm(k)746 2600 y FK(,)e(where)i Fq(q)f FK(is)h(the)g(size)g(of)f(the)h(base)g (\002eld)g(of)f Ft(C)g FK(and)h Fq(k)h FK(is)e(the)h(dimension.)p 75 2723 1648 4 v 1764 2728 a FF(Example)p 2102 2723 V 75 2747 4 25 v 3747 2747 V 75 2847 4 100 v 188 2817 a(gap>)44 b(Size\()g(RepetitionCode\()j(1000,)d(GF\(11\))h(\))d(\);)p 3747 2847 V 75 2947 V 188 2917 a(11)p 3747 2947 V 75 3046 V 188 3016 a(gap>)i(Size\()g(NordstromRobinsonCode)q(\(\))49 b(\);)p 3747 3046 V 75 3146 V 188 3116 a(256)p 3747 3146 V 75 3171 4 25 v 3747 3171 V 75 3174 3675 4 v 75 3307 a SDict begin H.S end 75 3307 a 75 3307 a SDict begin 13.6 H.A end 75 3307 a 75 3307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.5.3) cvn H.B /DEST pdfmark end 75 3307 a 116 x FJ(4.5.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(LeftActingDomain)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3598 a Fs(\006)22 b Ft(LeftActingDomain\()53 b(C)47 b(\))2352 b Fr(\(function\))p Black 216 3823 a Ft(LeftActingDomain)30 b FK(returns)d(the)e(base)h (\002eld)e(of)h(a)g(code)g Ft(C)q FK(.)32 b(Each)25 b(element)h(of)f Ft(C)f FK(consists)j(of)e(elements)h(of)75 3936 y(this)31 b(base)g(\002eld.)49 b(If)30 b(the)h(base)g(\002eld)g(is)f Fq(F)7 b FK(,)31 b(and)g(the)g(w)o(ord)f(length)i(of)e(the)h(code)g(is) f Fq(n)p FK(,)i(then)f(the)g(code)n(w)o(ords)h(are)75 4049 y(elements)23 b(of)e Fq(F)578 4016 y Fm(n)616 4049 y FK(.)27 b(If)21 b Ft(C)g FK(is)g(a)h(c)o(yclic)g(code,)g(its)g (elements)h(are)e(interpreted)k(as)c(polynomials)j(with)e(coef)n (\002cients)h(o)o(v)o(er)75 4162 y Fq(F)7 b FK(.)p 75 4266 1648 4 v 1764 4271 a FF(Example)p 2102 4266 V 75 4291 4 25 v 3747 4291 V 75 4391 4 100 v 188 4361 a(gap>)44 b(C1)f(:=)g(ElementsCode\([[0,0,0])q(,)49 b([1,0,1],)c([0,1,0]],)g (GF\(4\)\);)p 3747 4391 V 75 4490 V 188 4460 a(a)e(\(3,3,1..3\)2..3)k (user)c(defined)i(unrestricted)i(code)c(over)h(GF\(4\))p 3747 4490 V 75 4590 V 188 4560 a(gap>)g(LeftActingDomain\()k(C1)43 b(\);)p 3747 4590 V 75 4690 V 188 4660 a(GF\(2\2102\))p 3747 4690 V 75 4789 V 188 4759 a(gap>)h(LeftActingDomain\()k (HammingCode\()e(3,)d(GF\(9\))h(\))f(\);)p 3747 4789 V 75 4889 V 188 4859 a(GF\(3\2102\))p 3747 4889 V 75 4914 4 25 v 3747 4914 V 75 4917 3675 4 v 75 5050 a SDict begin H.S end 75 5050 a 75 5050 a SDict begin 13.6 H.A end 75 5050 a 75 5050 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.5.4) cvn H.B /DEST pdfmark end 75 5050 a 116 x FJ(4.5.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Dimension)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5341 a Fs(\006)22 b Ft(Dimension\()50 b(C)d(\))2677 b Fr(\(function\))p Black Black Black eop end end %%Page: 39 39 TeXDict begin HPSdict begin 39 38 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.39) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(39)p Black 216 399 a Ft(Dimension)26 b FK(returns)f(the)f(parameter)h Fq(k)g FK(of)e Ft(C)p FK(,)g(the)g(dimension)j(of)d(the)h(code,)g(or)f(the)h(number)g(of)g (information)75 511 y(symbols)38 b(in)f(each)g(code)n(w)o(ord.)70 b(The)37 b(dimension)h(is)f(not)g(de\002ned)h(for)f(non-linear)i (codes;)45 b Ft(Dimension)39 b FK(then)75 624 y(returns)25 b(an)f(error)-5 b(.)p 75 728 1648 4 v 1764 733 a FF(Example)p 2102 728 V 75 753 4 25 v 3747 753 V 75 853 4 100 v 188 823 a(gap>)44 b(Dimension\()h(NullCode\()h(5,)d(GF\(5\))h(\))f(\);)p 3747 853 V 75 952 V 188 923 a(0)p 3747 952 V 75 1052 V 188 1022 a(gap>)h(C)e(:=)h(BCHCode\()i(15,)f(4,)f(GF\(4\))h(\);)p 3747 1052 V 75 1152 V 188 1122 a(a)f(cyclic)h([15,9,5]3..4)i(BCH)e (code,)g(delta=5,)h(b=1)e(over)h(GF\(4\))p 3747 1152 V 75 1251 V 188 1221 a(gap>)g(Dimension\()h(C)e(\);)p 3747 1251 V 75 1351 V 188 1321 a(9)p 3747 1351 V 75 1451 V 188 1421 a(gap>)h(Size\()g(C)e(\))h(=)g(Size\()h(LeftActingDomain\()k (C)43 b(\))f(\))h(\210)g(Dimension\()i(C)e(\);)p 3747 1451 V 75 1550 V 188 1520 a(true)p 3747 1550 V 75 1575 4 25 v 3747 1575 V 75 1578 3675 4 v 75 1711 a SDict begin H.S end 75 1711 a 75 1711 a SDict begin 13.6 H.A end 75 1711 a 75 1711 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.5.5) cvn H.B /DEST pdfmark end 75 1711 a 117 x FJ(4.5.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(AsSSortedList)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2002 a Fs(\006)22 b Ft(AsSSortedList\()52 b(C)47 b(\))2491 b Fr(\(function\))p Black 216 2228 a Ft(AsSSortedList)33 b FK(\(as)c(strictly)h(sorted)g(list\))f(returns)i (an)d(immutable,)j(duplicate)g(free)e(list)g(of)g(the)g(elements)75 2341 y(of)23 b Ft(C)q FK(.)28 b(F)o(or)22 b(a)h(\002nite)h(\002eld)f Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))24 b FK(generated)i(by)e(po)n(wers)g(of) f Fq(Z)5 b Fo(\()p Fq(q)p Fo(\))p FK(,)23 b(the)h(ordering)h(on)1117 2545 y Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))21 b(=)f Fv(f)p FK(0)p Fp(;)10 b Fq(Z)5 b Fo(\()p Fq(q)p Fo(\))1769 2507 y Fr(0)1808 2545 y Fp(;)10 b Fq(Z)5 b Fo(\()p Fq(q)p Fo(\))p Fp(;)10 b Fq(Z)5 b Fo(\()p Fq(q)p Fo(\))2220 2507 y Fr(2)2258 2545 y Fp(;)10 b(:::)p Fq(Z)5 b Fo(\()p Fq(q)p Fo(\))2539 2507 y Fm(q)p Fh(\000)p Fr(2)2662 2545 y Fv(g)75 2749 y FK(is)18 b(that)h(determined)i(by)d(the)h(e)o (xponents)h Fq(i)p FK(.)27 b(These)18 b(elements)i(are)f(of)f(the)g (type)i(code)n(w)o(ord)f(\(see)g Ft(Codeword)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3485 2750 a SDict begin H.S end 3485 2750 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.1.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 3666 2687 a SDict begin H.R end 3666 2687 a 3666 2749 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.1.1) cvn H.B /ANN pdfmark end 3666 2749 a Black FK(\)\).)75 2862 y(Note)30 b(that)g(for)g(lar)n(ge)g (codes,)i(generating)h(the)d(elements)h(may)e(be)h(v)o(ery)g(time-)g (and)g(memory-consuming.)50 b(F)o(or)75 2975 y(generating)25 b(a)c(speci\002c)h(element)h(or)e(a)h(subset)h(of)e(the)h(elements,)h (use)f Ft(CodewordNr)j FK(\(see)d Ft(CodewordNr)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3457 2976 a SDict begin H.S end 3457 2976 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.1.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 3638 2913 a SDict begin H.R end 3638 2913 a 3638 2975 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.1.2) cvn H.B /ANN pdfmark end 3638 2975 a Black FK(\)\).)p 75 3098 1648 4 v 1764 3103 a FF(Example)p 2102 3098 V 75 3122 4 25 v 3747 3122 V 75 3222 4 100 v 188 3192 a(gap>)44 b(C)e(:=)h(ConferenceCode\()48 b(5)42 b(\);)p 3747 3222 V 75 3322 V 188 3292 a(a)h(\(5,12,2\)1..4)j (conference)g(code)d(over)h(GF\(2\))p 3747 3322 V 75 3421 V 188 3391 a(gap>)g(AsSSortedList\()j(C)42 b(\);)p 3747 3421 V 75 3521 V 188 3491 a([)h([)f(0)h(0)g(0)f(0)h(0)g(],)g([)f (0)h(0)g(1)f(1)h(1)g(],)g([)g(0)f(1)h(0)g(1)f(1)h(],)g([)g(0)f(1)h(1)g (0)f(1)h(],)g([)g(0)f(1)h(1)g(1)f(0)h(],)p 3747 3521 V 75 3621 V 273 3591 a([)f(1)h(0)g(0)f(1)h(1)g(],)g([)f(1)h(0)g(1)f(0)h (1)g(],)g([)g(1)f(0)h(1)g(1)f(0)h(],)g([)g(1)f(1)h(0)g(0)f(1)h(],)g([)g (1)f(1)h(0)g(1)f(0)h(],)p 3747 3621 V 75 3720 V 273 3690 a([)f(1)h(1)g(1)f(0)h(0)g(],)g([)f(1)h(1)g(1)f(1)h(1)g(])f(])p 3747 3720 V 75 3820 V 188 3790 a(gap>)i(CodewordNr\()i(C,)d([)f(1,)h(2) g(])g(\);)p 3747 3820 V 75 3919 V 188 3890 a([)g([)f(0)h(0)g(0)f(0)h(0) g(],)g([)f(0)h(0)g(1)f(1)h(1)g(])f(])p 3747 3919 V 75 3944 4 25 v 3747 3944 V 75 3947 3675 4 v 75 4091 a SDict begin H.S end 75 4091 a 75 4091 a SDict begin 13.6 H.A end 75 4091 a 75 4091 a SDict begin [ /View [/XYZ H.V] /Dest (section.4.6) cvn H.B /DEST pdfmark end 75 4091 a 149 x FM(4.6)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Printing)31 b(and)g(Displaying)f (Codes)p Black 75 4359 a SDict begin H.S end 75 4359 a 75 4359 a SDict begin 13.6 H.A end 75 4359 a 75 4359 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.6.1) cvn H.B /DEST pdfmark end 75 4359 a 92 x FJ(4.6.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Print)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4625 a Fs(\006)22 b Ft(Print\()49 b(C)e(\))2862 b Fr(\(function\))p Black 216 4851 a Ft(Print)25 b FK(prints)f(information)i(about)f Ft(C)q FK(.)i(This)d(is)f(the)h(same)g(as)f(typing)i(the)f (identi\002er)h Ft(C)e FK(at)g(the)h Fy(GAP)p FK(-prompt.)216 4964 y(If)f(the)h(ar)n(gument)i(is)d(an)h(unrestricted)i(code,)f (information)h(in)d(the)h(form)p Black Black 168 5151 a Ft(a)46 b(\(n,M,d\)r)k(...)d(code)h(over)g(GF\(q\))75 5339 y FK(is)23 b(printed,)j(where)d Ft(n)h FK(is)f(the)h(w)o(ord)g (length,)h Ft(M)e FK(the)h(number)g(of)g(elements)h(of)e(the)h(code,)h Ft(d)e FK(the)h(minimum)f(distance)75 5452 y(and)h Ft(r)f FK(the)h(co)o(v)o(ering)h(radius.)216 5565 y(If)e(the)h(ar)n(gument)i (is)d(a)g(linear)i(code,)f(information)i(in)d(the)h(form)p Black Black eop end end %%Page: 40 40 TeXDict begin HPSdict begin 40 39 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.40) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(40)p Black Black Black 168 399 a Ft(a)46 b(linear)j([n,k,d]r)g(...)f(code)g(over)f(GF\(q\))75 547 y FK(is)23 b(printed,)h(where)f Ft(n)g FK(is)g(the)g(w)o(ord)g (length,)h Ft(k)f FK(the)g(dimension)i(of)e(the)g(code,)h Ft(d)e FK(the)h(minimum)g(distance)i(and)e Ft(r)g FK(the)75 660 y(co)o(v)o(ering)i(radius.)216 773 y(Except)31 b(for)g(codes)g (produced)i(by)d Ft(RandomLinearCode)p FK(,)37 b(if)30 b Ft(d)g FK(is)g(not)h(yet)f(kno)n(wn,)j(it)d(is)g(displayed)j(in)d (the)75 886 y(form)p Black Black 168 1034 a Ft(lowerbound..upperbo)q (und)75 1183 y FK(and)k(if)f Ft(r)h FK(is)f(not)h(yet)g(kno)n(wn,)i(it) e(is)f(displayed)j(in)e(the)g(same)g(w)o(ay)-6 b(.)58 b(F)o(or)33 b(certain)i(ranges)g(of)f Fq(n)p FK(,)i(the)d(v)n(alues)i (of)75 1296 y Ft(lowerbound)26 b FK(and)e Ft(upperbound)j FK(are)c(obtained)j(from)e(tables.)216 1409 y(The)f(function)j Ft(Display)f FK(gi)n(v)o(es)f(more)g(information.)31 b(See)23 b Ft(Display)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2485 1410 a SDict begin H.S end 2485 1410 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.6.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 2666 1347 a SDict begin H.R end 2666 1347 a 2666 1409 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.6.3) cvn H.B /ANN pdfmark end 2666 1409 a Black FK(\).)p 75 1485 1648 4 v 1764 1490 a FF(Example)p 2102 1485 V 75 1509 4 25 v 3747 1509 V 75 1609 4 100 v 188 1579 a(gap>)44 b(C1)f(:=)g(ExtendedCode\()j(HammingCode\()h(3,)c (GF\(2\))h(\))f(\);)p 3747 1609 V 75 1709 V 188 1679 a(a)g(linear)h([8,4,4]2)h(extended)g(code)p 3747 1709 V 75 1808 V 188 1778 a(gap>)f(Print\()g("This)g(is)f(",)g (NordstromRobinsonCo)q(de\()q(\),)49 b(".)43 b(\\n"\);)p 3747 1808 V 75 1908 V 188 1878 a(This)h(is)f(a)f(\(16,256,6\)4)k (Nordstrom-Robinson)j(code)44 b(over)f(GF\(2\).)p 3747 1908 V 75 1933 4 25 v 3747 1933 V 75 1936 3675 4 v 75 2061 a SDict begin H.S end 75 2061 a 75 2061 a SDict begin 13.6 H.A end 75 2061 a 75 2061 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.6.2) cvn H.B /DEST pdfmark end 75 2061 a 117 x FJ(4.6.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(String)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2352 a Fs(\006)22 b Ft(String\()49 b(C)e(\))2816 b Fr(\(function\))p Black 216 2578 a Ft(String)25 b FK(returns)g(information)h(about)f Ft(C)e FK(in)g(a)h(string.)30 b(This)23 b(function)j(is)d(used)h(by)g Ft(Print)p FK(.)p 75 2654 1648 4 v 1764 2659 a FF(Example)p 2102 2654 V 75 2678 4 25 v 3747 2678 V 75 2778 4 100 v 188 2748 a(gap>)44 b(x:=)f(Indeterminate\()k(GF\(3\))d(\);;)g(pol:=)g (x\2102+1;)p 3747 2778 V 75 2878 V 188 2848 a(x_1\2102+Z\(3\)\2100)p 3747 2878 V 75 2977 V 188 2947 a(gap>)g(Factors\(pol\);)p 3747 2977 V 75 3077 V 188 3047 a([)f(x_1\2102+Z\(3\)\2100)j(])p 3747 3077 V 75 3177 V 188 3147 a(gap>)e(H)e(:=)h(GeneratorPolCode\()48 b(pol,)c(8,)f(GF\(3\)\);)p 3747 3177 V 75 3276 V 188 3246 a(a)g(cyclic)h([8,6,1..2]1..2)j(code)d(defined)h(by)e(generator)i (polynomial)h(over)d(GF\(3\))p 3747 3276 V 75 3376 V 188 3346 a(gap>)h(String\(H\);)p 3747 3376 V 75 3475 V 188 3446 a("a)f(cyclic)h([8,6,1..2]1..2)j(code)d(defined)h(by)e (generator)i(polynomial)h(over)e(GF\(3\)")p 3747 3475 V 75 3500 4 25 v 3747 3500 V 75 3503 3675 4 v 75 3629 a SDict begin H.S end 75 3629 a 75 3629 a SDict begin 13.6 H.A end 75 3629 a 75 3629 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.6.3) cvn H.B /DEST pdfmark end 75 3629 a 116 x FJ(4.6.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Display)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3919 a Fs(\006)22 b Ft(Display\()50 b(C)c(\))2770 b Fr(\(function\))p Black 216 4145 a Ft(Display)26 b FK(prints)f(the)f(method)h(of)f(construction)k(of)c(code)g Ft(C)q FK(.)29 b(W)l(ith)24 b(this)h(history)-6 b(,)25 b(in)f(most)g(cases)h(an)f(equal)h(or)75 4258 y(equi)n(v)n(alent)30 b(code)e(can)g(be)f(reconstructed.)45 b(If)27 b Ft(C)g FK(is)g(an)h(unmanipulated)j(code,)e(the)e(result)i(is)e(equal)i(to)e (output)i(of)75 4371 y(the)24 b(function)i Ft(Print)e FK(\(see)g Ft(Print)h FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1243 4372 a SDict begin H.S end 1243 4372 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.6.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 1424 4309 a SDict begin H.R end 1424 4309 a 1424 4371 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.6.1) cvn H.B /ANN pdfmark end 1424 4371 a Black FK(\)\).)p 75 4443 1648 4 v 1764 4448 a FF(Example)p 2102 4443 V 75 4468 4 25 v 3747 4468 V 75 4568 4 100 v 188 4538 a(gap>)44 b(Display\()h(RepetitionCode\()i(6,)c(GF\(3\))h(\))f(\);)p 3747 4568 V 75 4667 V 188 4638 a(a)g(cyclic)h([6,1,6]4)h(repetition)h (code)e(over)f(GF\(3\))p 3747 4667 V 75 4767 V 188 4737 a(gap>)h(C1)f(:=)g(ExtendedCode\()j(HammingCode\(2\))i(\);;)p 3747 4767 V 75 4867 V 188 4837 a(gap>)c(C2)f(:=)g(PuncturedCode\()k (ReedMullerCode\()g(2,)c(3)g(\))g(\);;)p 3747 4867 V 75 4966 V 188 4936 a(gap>)h(Display\()h(LengthenedCode\()i(UUVCode\()e (C1,)f(C2)f(\))f(\))h(\);)p 3747 4966 V 75 5066 V 188 5036 a(a)g(linear)h([12,8,2]2..4)i(code,)e(lengthened)i(with)e(1)f (column\(s\))i(of)p 3747 5066 V 75 5166 V 188 5136 a(a)e(linear)h ([11,8,1]1..2)i(U)d(U+V)g(construction)k(code)d(of)p 3747 5166 V 75 5265 V 188 5235 a(U:)f(a)g(linear)h([4,1,4]2)h(extended) g(code)f(of)p 3747 5265 V 75 5365 V 315 5335 a(a)f(linear)h([3,1,3]1)h (Hamming)g(\(2,2\))f(code)g(over)f(GF\(2\))p 3747 5365 V 75 5465 V 188 5435 a(V:)g(a)g(linear)h([7,7,1]0)h(punctured)g(code)f (of)p 3747 5465 V 75 5564 V 315 5534 a(a)f(cyclic)h([8,7,2]1)h (Reed-Muller)h(\(2,3\))e(code)g(over)g(GF\(2\))p 3747 5564 V 75 5589 4 25 v 3747 5589 V 75 5592 3675 4 v Black Black eop end end %%Page: 41 41 TeXDict begin HPSdict begin 41 40 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.41) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(41)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.6.4) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(4.6.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(DisplayBoundsInf)n(o)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(DisplayBoundsInfo)q(\()52 b(bds)c(\))2213 b Fr(\(function\))p Black 216 799 a Ft(DisplayBoundsInfo)54 b FK(prints)d(the)e(method)h(of)e(construction)53 b(of)c(the)g(code)c Fq(C)50 b FK(indicated)h(in)e Ft(bds:=)75 912 y(BoundsMinimumDista)q (nce)q(\()j(n,)47 b(k,)h(GF\(q\))g(\))p FK(.)p 75 1028 1648 4 v 1764 1033 a FF(Example)p 2102 1028 V 75 1053 4 25 v 3747 1053 V 75 1153 4 100 v 188 1123 a(gap>)c(bounds)g(:=)f (BoundsMinimumDistan)q(ce\()49 b(20,)43 b(17,)h(GF\(4\))g(\);)p 3747 1153 V 75 1253 V 188 1223 a(gap>)g(DisplayBoundsInfo\(bou)q(nds)q (\);)p 3747 1253 V 75 1352 V 188 1322 a(an)f(optimal)i(linear)f ([20,17,d])h(code)f(over)g(GF\(4\))g(has)f(d=3)p 3747 1352 V 75 1452 V 188 1422 a(--------------------)q(---)q(---)q(---)q (---)q(--)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q (---)q(---)q(---)q(---)q(--)q(---)q(---)q(---)q(---)q(---)q(---)q(--)p 3747 1452 V 75 1551 V 188 1522 a(Lb\(20,17\)=3,)j(by)d(shortening)j (of:)p 3747 1551 V 75 1651 V 188 1621 a(Lb\(21,18\)=3,)g(by)d(applying) i(contruction)i(B)42 b(to)h(a)g([81,77,3])i(code)p 3747 1651 V 75 1751 V 188 1721 a(Lb\(81,77\)=3,)h(by)d(shortening)j(of:)p 3747 1751 V 75 1850 V 188 1820 a(Lb\(85,81\)=3,)g(reference:)g(Ham)p 3747 1850 V 75 1950 V 188 1920 a(--------------------)q(---)q(---)q (---)q(---)q(--)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q (---)q(---)q(---)q(---)q(---)q(--)q(---)q(---)q(---)q(---)q(---)q(---)q (--)p 3747 1950 V 75 2050 V 188 2020 a(Ub\(20,17\)=3,)g(by)d (considering)j(shortening)g(to:)p 3747 2050 V 75 2149 V 188 2119 a(Ub\(7,4\)=3,)g(by)d(considering)j(puncturing)g(to:)p 3747 2149 V 75 2249 V 188 2219 a(Ub\(6,4\)=2,)g(by)d(construction)j(B)d (applied)i(to:)p 3747 2249 V 75 2349 V 188 2319 a(Ub\(2,1\)=2,)h (repetition)f(code)p 3747 2349 V 75 2448 V 188 2418 a (--------------------)q(---)q(---)q(---)q(---)q(--)q(---)q(---)q(---)q (---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(--)q (---)q(---)q(---)q(---)q(---)q(---)q(--)p 3747 2448 V 75 2548 V 188 2518 a(Reference)g(Ham:)p 3747 2548 V 75 2647 V 188 2617 a(\045T)e(this)h(reference)h(is)e(unknown,)i(for)f (more)f(info)p 3747 2647 V 75 2747 V 188 2717 a(\045T)g(contact)i(A.E.) e(Brouwer)i(\(aeb@cwi.nl\))p 3747 2747 V 75 2772 4 25 v 3747 2772 V 75 2775 3675 4 v 75 2918 a SDict begin H.S end 75 2918 a 75 2918 a SDict begin 13.6 H.A end 75 2918 a 75 2918 a SDict begin [ /View [/XYZ H.V] /Dest (section.4.7) cvn H.B /DEST pdfmark end 75 2918 a 150 x FM(4.7)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Generating)31 b(\(Check\))g(Matrices)e(and)i(P)n (olynomials)p Black 75 3186 a SDict begin H.S end 75 3186 a 75 3186 a SDict begin 13.6 H.A end 75 3186 a 75 3186 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.7.1) cvn H.B /DEST pdfmark end 75 3186 a 92 x FJ(4.7.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(GeneratorMat)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3452 a Fs(\006)22 b Ft(GeneratorMat\()51 b(C)c(\))2538 b Fr(\(function\))p Black 216 3678 a Ft(GeneratorMat)33 b FK(returns)e(a)e(generator)j(matrix)e(of)g Ft(C)p FK(.)46 b(The)29 b(code)h(consists)i(of)d(all)h(linear)h(combinations)h(of)75 3791 y(the)24 b(ro)n(ws)f(of)g(this)i(matrix.)216 3904 y(If)f(until)h(no)n(w)f(no)g(generator)j(matrix)e(of)f Ft(C)f FK(w)o(as)h(determined,)j(it)d(is)g(computed)i(from)e(either)h (the)g(parity)g(check)75 4017 y(matrix,)34 b(the)d(generator)j (polynomial,)i(the)31 b(check)i(polynomial)h(or)d(the)h(elements)h (\(if)e(possible\),)36 b(whiche)n(v)o(er)c(is)75 4130 y(a)n(v)n(ailable.)216 4243 y(If)23 b Ft(C)g FK(is)h(a)f(non-linear)j (code,)e(the)g(function)i(returns)f(an)f(error)-5 b(.)p 75 4359 1648 4 v 1764 4364 a FF(Example)p 2102 4359 V 75 4383 4 25 v 3747 4383 V 75 4483 4 100 v 188 4453 a(gap>)44 b(GeneratorMat\()i(HammingCode\()h(3,)c(GF\(2\))h(\))f(\);)p 3747 4483 V 75 4583 V 188 4553 a([)g([)f(an)h(immutable)j(GF2)d(vector) h(of)f(length)i(7],)p 3747 4583 V 75 4682 V 273 4652 a([)d(an)h(immutable)j(GF2)d(vector)h(of)f(length)i(7],)p 3747 4682 V 75 4782 V 273 4752 a([)d(an)h(immutable)j(GF2)d(vector)h (of)f(length)i(7],)p 3747 4782 V 75 4882 V 273 4852 a([)d(an)h (immutable)j(GF2)d(vector)h(of)f(length)i(7])e(])p 3747 4882 V 75 4981 V 188 4951 a(gap>)h(Display\(last\);)p 3747 4981 V 75 5081 V 230 5051 a(1)f(1)g(1)f(.)h(.)g(.)f(.)p 3747 5081 V 75 5181 V 230 5151 a(1)h(.)g(.)f(1)h(1)g(.)f(.)p 3747 5181 V 75 5280 V 230 5250 a(.)h(1)g(.)f(1)h(.)g(1)f(.)p 3747 5280 V 75 5380 V 230 5350 a(1)h(1)g(.)f(1)h(.)g(.)f(1)p 3747 5380 V 75 5479 V 188 5449 a(gap>)i(GeneratorMat\()i (RepetitionCode\()i(5,)43 b(GF\(25\))h(\))f(\);)p 3747 5479 V 75 5579 V 188 5549 a([)g([)f(Z\(5\)\2100,)j(Z\(5\)\2100,)g (Z\(5\)\2100,)f(Z\(5\)\2100,)h(Z\(5\)\2100)g(])d(])p 3747 5579 V Black Black eop end end %%Page: 42 42 TeXDict begin HPSdict begin 42 41 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.42) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(42)p Black 75 428 4 100 v 188 399 a FF(gap>)44 b(GeneratorMat\()i(NullCode\()g(14,)d(GF\(4\))h(\))f(\);)p 3747 428 V 75 528 V 188 498 a([)85 b(])p 3747 528 V 75 553 4 25 v 3747 553 V 75 556 3675 4 v 75 689 a SDict begin H.S end 75 689 a 75 689 a SDict begin 13.6 H.A end 75 689 a 75 689 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.7.2) cvn H.B /DEST pdfmark end 75 689 a 116 x FJ(4.7.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(CheckMat)p Black 1.0 0.0 0.0 TeXcolorrgb 75 980 a Fs(\006)22 b Ft(CheckMat\()50 b(C)d(\))2723 b Fr(\(function\))p Black 216 1206 a Ft(CheckMat)30 b FK(returns)f(a)f(parity)g(check)h(matrix)g(of)e Ft(C)q FK(.)40 b(The)27 b(code)i(consists)h(of)d(all)h(w)o(ords)g(orthogonal)j (to)c(each)75 1318 y(of)e(the)g(ro)n(ws)g(of)g(this)g(matrix.)34 b(The)24 b(transpose)k(of)d(the)g(matrix)h(is)e(a)h(right)h(in)l(v)o (erse)g(of)f(the)h(generator)h(matrix.)34 b(The)75 1431 y(parity)22 b(check)g(matrix)g(is)e(computed)j(from)e(either)h(the)f (generator)i(matrix,)f(the)f(generator)i(polynomial,)h(the)d(check)75 1544 y(polynomial)26 b(or)d(the)h(elements)h(of)f Ft(C)f FK(\(if)g(possible\),)j(whiche)n(v)o(er)f(is)e(a)n(v)n(ailable.)216 1657 y(If)g Ft(C)g FK(is)h(a)f(non-linear)j(code,)e(the)g(function)i (returns)f(an)f(error)-5 b(.)p 75 1773 1648 4 v 1764 1778 a FF(Example)p 2102 1773 V 75 1798 4 25 v 3747 1798 V 75 1897 4 100 v 188 1868 a(gap>)44 b(CheckMat\()h(HammingCode\(3,)i (GF\(2\))d(\))f(\);)p 3747 1897 V 75 1997 V 188 1967 a([)g([)f(0*Z\(2\),)j(0*Z\(2\),)g(0*Z\(2\),)f(Z\(2\)\2100,)h (Z\(2\)\2100,)g(Z\(2\)\2100,)g(Z\(2\)\2100)f(],)p 3747 1997 V 75 2097 V 273 2067 a([)e(0*Z\(2\),)j(Z\(2\)\2100,)g (Z\(2\)\2100,)f(0*Z\(2\),)h(0*Z\(2\),)g(Z\(2\)\2100,)g(Z\(2\)\2100)f (],)p 3747 2097 V 75 2196 V 273 2166 a([)e(Z\(2\)\2100,)j(0*Z\(2\),)g (Z\(2\)\2100,)f(0*Z\(2\),)h(Z\(2\)\2100,)g(0*Z\(2\),)g(Z\(2\)\2100)f(]) f(])p 3747 2196 V 75 2296 V 188 2266 a(gap>)h(Display\(last\);)p 3747 2296 V 75 2396 V 230 2366 a(.)f(.)g(.)f(1)h(1)g(1)f(1)p 3747 2396 V 75 2495 V 230 2465 a(.)h(1)g(1)f(.)h(.)g(1)f(1)p 3747 2495 V 75 2595 V 230 2565 a(1)h(.)g(1)f(.)h(1)g(.)f(1)p 3747 2595 V 75 2694 V 188 2665 a(gap>)i(CheckMat\()h(RepetitionCode\()i (5,)d(GF\(25\))g(\))f(\);)p 3747 2694 V 75 2794 V 188 2764 a([)g([)f(Z\(5\)\2100,)j(Z\(5\)\2102,)g(0*Z\(5\),)f(0*Z\(5\),)h (0*Z\(5\))g(],)p 3747 2794 V 75 2894 V 273 2864 a([)d(0*Z\(5\),)j (Z\(5\)\2100,)g(Z\(5\)\2102,)f(0*Z\(5\),)h(0*Z\(5\))g(],)p 3747 2894 V 75 2993 V 273 2963 a([)d(0*Z\(5\),)j(0*Z\(5\),)g (Z\(5\)\2100,)f(Z\(5\)\2102,)h(0*Z\(5\))g(],)p 3747 2993 V 75 3093 V 273 3063 a([)d(0*Z\(5\),)j(0*Z\(5\),)g(0*Z\(5\),)f (Z\(5\)\2100,)h(Z\(5\)\2102)g(])d(])p 3747 3093 V 75 3193 V 188 3163 a(gap>)i(CheckMat\()h(WholeSpaceCode\()i(12,)d(GF\(4\)) g(\))f(\);)p 3747 3193 V 75 3292 V 188 3262 a([)85 b(])p 3747 3292 V 75 3317 4 25 v 3747 3317 V 75 3320 3675 4 v 75 3453 a SDict begin H.S end 75 3453 a 75 3453 a SDict begin 13.6 H.A end 75 3453 a 75 3453 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.7.3) cvn H.B /DEST pdfmark end 75 3453 a 117 x FJ(4.7.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(GeneratorP)n(ol)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3744 a Fs(\006)22 b Ft(GeneratorPol\()51 b(C)c(\))2538 b Fr(\(function\))p Black 216 3970 a Ft(GeneratorPol)33 b FK(returns)e(the)f(generator)i (polynomial)g(of)d Ft(C)q FK(.)45 b(The)29 b(code)i(consists)g(of)f (all)f(multiples)j(of)d(the)75 4083 y(generator)i(polynomial)g(modulo)f Fq(x)1234 4050 y Fm(n)1287 4083 y Fv(\000)15 b FK(1,)28 b(where)i Fq(n)e FK(is)h(the)g(w)o(ord)g(length)h(of)f Ft(C)p FK(.)44 b(The)28 b(generator)j(polynomial)g(is)75 4196 y(determined)e(from)f(either)g(the)g(check)g(polynomial,)j(the)c (generator)j(or)d(check)i(matrix)f(or)f(the)g(elements)i(of)e Ft(C)g FK(\(if)75 4308 y(possible\),)f(whiche)n(v)o(er)e(is)g(a)n(v)n (ailable.)216 4421 y(If)f Ft(C)g FK(is)h(not)g(a)f(c)o(yclic)h(code,)g (the)g(function)i(returns)f(`f)o(alse'.)p 75 4544 1648 4 v 1764 4549 a FF(Example)p 2102 4544 V 75 4569 4 25 v 3747 4569 V 75 4669 4 100 v 188 4639 a(gap>)44 b (GeneratorPol\(Generato)q(rMa)q(tCo)q(de)q(\([[)q(1,)49 b(1,)43 b(0],)g([0,)g(1,)g(1]],)h(GF\(2\)\)\);)p 3747 4669 V 75 4768 V 188 4738 a(Z\(2\)\2100+x_1)p 3747 4768 V 75 4868 V 188 4838 a(gap>)g(GeneratorPol\()i(WholeSpaceCode\()i(4,)43 b(GF\(2\))h(\))f(\);)p 3747 4868 V 75 4967 V 188 4938 a(Z\(2\)\2100)p 3747 4967 V 75 5067 V 188 5037 a(gap>)h(GeneratorPol\() i(NullCode\()g(7,)d(GF\(3\))h(\))f(\);)p 3747 5067 V 75 5167 V 188 5137 a(-Z\(3\)\2100+x_1\2107)p 3747 5167 V 75 5192 4 25 v 3747 5192 V 75 5195 3675 4 v Black Black eop end end %%Page: 43 43 TeXDict begin HPSdict begin 43 42 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.43) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(43)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.7.4) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(4.7.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(CheckP)n(ol)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(CheckPol\()50 b(C)d(\))2723 b Fr(\(function\))p Black 216 799 a Ft(CheckPol)26 b FK(returns)f(the)f(check)g(polynomial) i(of)e Ft(C)p FK(.)k(The)23 b(code)i(consists)g(of)f(all)f(polynomials) 41 b Fq(f)35 b FK(with)1513 1003 y Fq(f)26 b Fv(\001)13 b Fq(h)20 b Fv(\021)g FK(0)j Fo(\()p FK(mod)h Fq(x)2086 965 y Fm(n)2137 1003 y Fv(\000)13 b FK(1)p Fo(\))p Fp(;)75 1207 y FK(where)28 b Fq(h)f FK(is)g(the)h(check)g(polynomial,)j(and)d Fq(n)f FK(is)g(the)h(w)o(ord)f(length)i(of)f Ft(C)p FK(.)40 b(The)27 b(check)h(polynomial)i(is)d(computed)75 1320 y(from)22 b(the)h(generator)i(polynomial,)g(the)e(generator)h(or)f (parity)h(check)f(matrix)g(or)g(the)f(elements)i(of)f Ft(C)f FK(\(if)g(possible\),)75 1433 y(whiche)n(v)o(er)j(is)e(a)n(v)n (ailable.)216 1546 y(If)g Ft(C)g FK(if)h(not)g(a)f(c)o(yclic)h(code,)g (the)g(function)i(returns)f(an)f(error)-5 b(.)p 75 1668 1648 4 v 1764 1673 a FF(Example)p 2102 1668 V 75 1693 4 25 v 3747 1693 V 75 1793 4 100 v 188 1763 a(gap>)44 b(CheckPol\(GeneratorMat)q(Cod)q(e\([)q([1)q(,)k(1,)43 b(0],)h([0,)f(1,)g(1]],)h(GF\(2\)\)\);)p 3747 1793 V 75 1893 V 188 1863 a(Z\(2\)\2100+x_1+x_1\2102)p 3747 1893 V 75 1992 V 188 1962 a(gap>)g(CheckPol\(WholeSpaceCo)q(de\()q(4,) 49 b(GF\(2\)\)\);)p 3747 1992 V 75 2092 V 188 2062 a (Z\(2\)\2100+x_1\2104)p 3747 2092 V 75 2191 V 188 2162 a(gap>)44 b(CheckPol\(NullCode\(7,G)q(F\(3)q(\)\)\))q(;)p 3747 2191 V 75 2291 V 188 2261 a(Z\(3\)\2100)p 3747 2291 V 75 2316 4 25 v 3747 2316 V 75 2319 3675 4 v 75 2452 a SDict begin H.S end 75 2452 a 75 2452 a SDict begin 13.6 H.A end 75 2452 a 75 2452 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.7.5) cvn H.B /DEST pdfmark end 75 2452 a 117 x FJ(4.7.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(RootsOfCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2743 a Fs(\006)22 b Ft(RootsOfCode\()51 b(C)c(\))2584 b Fr(\(function\))p Black 216 2969 a Ft(RootsOfCode)28 b FK(returns)f(a)d(list)h(of)g(all)g (zeros)h(of)f(the)g(generator)i(polynomial)g(of)e(a)f(c)o(yclic)i(code) g Ft(C)p FK(.)32 b(These)25 b(are)75 3082 y(\002nite)e(\002eld)g (elements)i(in)e(the)h(splitting)h(\002eld)e(of)g(the)h(generator)h (polynomial,)h Fq(GF)7 b Fo(\()p Fq(q)2811 3049 y Fm(m)2863 3082 y Fo(\))p FK(,)23 b Fq(m)f FK(is)h(the)h(multiplicati)n(v)o(e)75 3194 y(order)h(of)e(the)h(size)g(of)f(the)h(base)g(\002eld)g(of)f(the)h (code,)g(modulo)h(the)f(w)o(ord)f(length.)216 3307 y(The)29 b(re)n(v)o(erse)i(process,)i(constructing)g(a)c(code)i(from)e(a)g(set)h (of)g(roots,)i(can)e(be)f(carried)i(out)f(by)g(the)g(function)75 3420 y Ft(RootsCode)c FK(\(see)e Ft(RootsCode)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1154 3421 a SDict begin H.S end 1154 3421 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.5.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 1335 3358 a SDict begin H.R end 1335 3358 a 1335 3420 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.3) cvn H.B /ANN pdfmark end 1335 3420 a Black FK(\)\).)p 75 3539 1648 4 v 1764 3544 a FF(Example)p 2102 3539 V 75 3564 4 25 v 3747 3564 V 75 3664 4 100 v 188 3634 a(gap>)44 b(C1)f(:=)g(ReedSolomonCode\()k(16,)d (5)f(\);)p 3747 3664 V 75 3763 V 188 3734 a(a)g(cyclic)h([16,12,5]3..4) j(Reed-Solomon)f(code)e(over)g(GF\(17\))p 3747 3763 V 75 3863 V 188 3833 a(gap>)g(RootsOfCode\()i(C1)d(\);)p 3747 3863 V 75 3963 V 188 3933 a([)g(Z\(17\),)h(Z\(17\)\2102,)h (Z\(17\)\2103,)g(Z\(17\)\2104)g(])p 3747 3963 V 75 4062 V 188 4032 a(gap>)f(C2)f(:=)g(RootsCode\()i(16,)f(last)f(\);)p 3747 4062 V 75 4162 V 188 4132 a(a)g(cyclic)h([16,12,5]3..4)j(code)c (defined)i(by)e(roots)h(over)g(GF\(17\))p 3747 4162 V 75 4262 V 188 4232 a(gap>)g(C1)f(=)f(C2;)p 3747 4262 V 75 4361 V 188 4331 a(true)p 3747 4361 V 75 4386 4 25 v 3747 4386 V 75 4389 3675 4 v 75 4533 a SDict begin H.S end 75 4533 a 75 4533 a SDict begin 13.6 H.A end 75 4533 a 75 4533 a SDict begin [ /View [/XYZ H.V] /Dest (section.4.8) cvn H.B /DEST pdfmark end 75 4533 a 149 x FM(4.8)p 0.0 0.0 1.0 TeXcolorrgb 119 w(P)o(arameters)29 b(of)g(Codes)p Black 75 4778 a SDict begin H.S end 75 4778 a 75 4778 a SDict begin 13.6 H.A end 75 4778 a 75 4778 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.8.1) cvn H.B /DEST pdfmark end 75 4778 a 114 x FJ(4.8.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(W)-7 b(ordLength)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5067 a Fs(\006)22 b Ft(WordLength\()51 b(C)46 b(\))2631 b Fr(\(function\))p Black 216 5293 a Ft(WordLength)33 b FK(returns)g(the)d(parameter)i Fq(n)f FK(of)f Ft(C)p FK(,)h(the)g(w)o(ord)g(length)h(of)e(the)h (elements.)51 b(Elements)31 b(of)f(c)o(yclic)75 5405 y(codes)25 b(are)e(polynomials)k(of)c(maximum)h(de)o(gree)g Fq(n)13 b Fv(\000)g FK(1,)23 b(as)g(calculations)k(are)d(carried)h(out) f(modulo)g Fq(x)3340 5372 y Fm(n)3391 5405 y Fv(\000)13 b FK(1.)p Black Black eop end end %%Page: 44 44 TeXDict begin HPSdict begin 44 43 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.44) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(44)p Black 75 399 1648 4 v 1764 404 a FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188 493 a(gap>)44 b(WordLength\()i(NordstromRobinsonCod)q(e\(\))j(\);)p 3747 523 V 75 623 V 188 593 a(16)p 3747 623 V 75 722 V 188 692 a(gap>)44 b(WordLength\()i(PuncturedCode\()h (WholeSpaceCode\(7\))h(\))43 b(\);)p 3747 722 V 75 822 V 188 792 a(6)p 3747 822 V 75 922 V 188 892 a(gap>)h(WordLength\()i (UUVCode\()f(WholeSpaceCode\(7\),)j(RepetitionCode\(7\))g(\))43 b(\);)p 3747 922 V 75 1021 V 188 991 a(14)p 3747 1021 V 75 1046 4 25 v 3747 1046 V 75 1049 3675 4 v 75 1181 a SDict begin H.S end 75 1181 a 75 1181 a SDict begin 13.6 H.A end 75 1181 a 75 1181 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.8.2) cvn H.B /DEST pdfmark end 75 1181 a 116 x FJ(4.8.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Redundancy)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1471 a Fs(\006)22 b Ft(Redundancy\()51 b(C)46 b(\))2631 b Fr(\(function\))p Black 216 1697 a Ft(Redundancy)23 b FK(returns)f(the)f(redundanc)o(y)j Fq(r)e FK(of)e Ft(C)p FK(,)g(which)h(is)f(equal)i(to)e(the)h(number)g (of)g(check)g(symbols)h(in)e(each)75 1810 y(element.)30 b(If)23 b Ft(C)g FK(is)g(not)h(a)f(linear)i(code)g(the)e(redundanc)o(y) k(is)c(not)h(de\002ned)g(and)g Ft(Redundancy)j FK(returns)e(an)f(error) -5 b(.)216 1923 y(If)23 b(a)g(linear)i(code)g Ft(C)e FK(has)h(dimension)h Fq(k)g FK(and)f(w)o(ord)f(length)i Fq(n)p FK(,)e(it)h(has)f(redundanc)o(y)k Fq(r)c Fo(=)c Fq(n)13 b Fv(\000)g Fq(k)r FK(.)p 75 2036 1648 4 v 1764 2041 a FF(Example)p 2102 2036 V 75 2061 4 25 v 3747 2061 V 75 2160 4 100 v 188 2130 a(gap>)44 b(C)e(:=)h(TernaryGolayCode\(\);)p 3747 2160 V 75 2260 V 188 2230 a(a)g(cyclic)h([11,6,5]2)h(ternary)g (Golay)f(code)g(over)g(GF\(3\))p 3747 2260 V 75 2359 V 188 2330 a(gap>)g(Redundancy\(C\);)p 3747 2359 V 75 2459 V 188 2429 a(5)p 3747 2459 V 75 2559 V 188 2529 a(gap>)g(Redundancy\()i(DualCode\(C\))g(\);)p 3747 2559 V 75 2658 V 188 2628 a(6)p 3747 2658 V 75 2683 4 25 v 3747 2683 V 75 2686 3675 4 v 75 2818 a SDict begin H.S end 75 2818 a 75 2818 a SDict begin 13.6 H.A end 75 2818 a 75 2818 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.8.3) cvn H.B /DEST pdfmark end 75 2818 a 116 x FJ(4.8.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(MinimumDistance)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3108 a Fs(\006)22 b Ft(MinimumDistance\()53 b(C)46 b(\))2399 b Fr(\(function\))p Black 216 3334 a Ft(MinimumDistance)28 b FK(returns)c(the)f(minimum)g(distance)i(of)d Ft(C)q FK(,)g(the)h(lar)n(gest)i(inte)o(ger)f Fq(d)j FK(with)c(the)g(property)i(that)75 3447 y(e)n(v)o(ery)i(element)h(of)e Ft(C)g FK(has)h(at)g(least)g(a)g(Hamming)f(distance)j Fq(d)i FK(\(see)c Ft(DistanceCodeword)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3042 3448 a SDict begin H.S end 3042 3448 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.6.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 3223 3385 a SDict begin H.R end 3223 3385 a 3223 3447 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.6.2) cvn H.B /ANN pdfmark end 3223 3447 a Black FK(\)\))d(to)e(an)o(y)h(other)75 3560 y(element)i(of)f Ft(C)p FK(.)41 b(F)o(or)27 b(linear)i(codes,)g(the)f(minimum)g (distance)i(is)e(equal)g(to)g(the)g(minimum)g(weight.)42 b(This)28 b(means)75 3673 y(that)34 b Fq(d)39 b FK(is)33 b(also)i(the)f(smallest)h(positi)n(v)o(e)h(v)n(alue)e(with)g Fq(w)p Fo([)p Fq(d)21 b Fo(+)16 b FK(1)p Fo(])27 b Fv(6)p Fo(=)f FK(0,)36 b(where)e Fq(w)25 b Fo(=)h(\()p Fq(w)p Fo([)p FK(1)p Fo(])p Fp(;)10 b Fq(w)p Fo([)p FK(2)p Fo(])p Fp(;)g(:::;)g Fq(w)p Fo([)p Fq(n)p Fo(]\))36 b FK(is)e(the)75 3786 y(weight)25 b(distrib)n(ution)i(of)d Ft(C)g FK(\(see)g Ft(WeightDistributio)q(n)29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2012 3788 a SDict begin H.S end 2012 3788 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(4.9.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 2193 3724 a SDict begin H.R end 2193 3724 a 2193 3786 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.9.2) cvn H.B /ANN pdfmark end 2193 3786 a Black FK(\)\).)i(F)o(or)23 b(unrestricted)k(codes,)f Fq(d)i FK(is)c(the)g(smallest)75 3899 y(positi)n(v)o(e)34 b(v)n(alue)g(with)f Fq(w)p Fo([)p Fq(d)21 b Fo(+)16 b FK(1)p Fo(])26 b Fv(6)p Fo(=)f FK(0,)35 b(where)e Fq(w)f FK(is)g(the)h(inner)h(distrib)n(ution) j(of)c Ft(C)f FK(\(see)i Ft(InnerDistribution)75 4012 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 4014 a SDict begin H.S end 105 4014 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(4.9.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 286 3950 a SDict begin H.R end 286 3950 a 286 4012 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.9.3) cvn H.B /ANN pdfmark end 286 4012 a Black FK(\)\).)216 4125 y(F)o(or)22 b(codes)i(with)f(only)g(one)h(element,)f(the)h(minimum)e(distance)j(is) e(de\002ned)h(to)e(be)h(equal)h(to)f(the)g(w)o(ord)g(length.)216 4237 y(F)o(or)d(linear)j(codes)f Ft(C)p FK(,)f(the)g(algorithm)i(used)f (is)f(the)g(follo)n(wing:)29 b(After)21 b(replacing)j Ft(C)d FK(by)g(a)f(permutation)k(equi)n(v)n(a-)75 4350 y(lent)e Ft(C')p FK(,)f(one)h(may)e(assume)i(the)g(generator)h(matrix)f (has)g(the)f(follo)n(wing)i(form)e Fq(G)c Fo(=)h(\()p Fq(I)2814 4364 y Fm(k)2859 4350 y Fv(j)10 b Fq(A)p Fo(\))p FK(,)21 b(for)g(some)g Fq(k)12 b Fv(\002)e Fo(\()p Fq(n)g Fv(\000)g Fq(k)r Fo(\))75 4463 y FK(matrix)24 b Fq(A)p FK(.)j(If)c Fq(A)d Fo(=)g FK(0)j(then)h(return)h Fq(d)5 b Fo(\()-5 b Fq(C)r Fo(\))21 b(=)e FK(1.)29 b(Ne)o(xt,)22 b(\002nd)h(the)h(minimum)f(distance)j(of)d(the)h(code)g(spanned)h(by)f (the)75 4576 y(ro)n(ws)e(of)h Fq(A)p FK(.)k(Call)c(this)g(distance)i Fq(d)5 b Fo(\()p Fq(A)p Fo(\))p FK(.)28 b(Note)23 b(that)g Fq(d)5 b Fo(\()p Fq(A)p Fo(\))23 b FK(is)f(equal)i(to)f(the)g(the)g (Hamming)g(distance)i Fq(d)5 b Fo(\()p Fq(v)-7 b Fp(;)10 b FK(0)p Fo(\))24 b FK(where)75 4689 y Fq(v)i FK(is)g(some)g(proper)i (linear)f(combination)i(of)d Fq(i)g FK(distinct)i(ro)n(ws)e(of)g Fq(A)p FK(.)36 b(Return)27 b Fq(d)5 b Fo(\()-5 b Fq(C)r Fo(\))22 b(=)g Fq(d)5 b Fo(\()p Fq(A)p Fo(\))14 b(+)g Fq(i)p FK(,)25 b(where)h Fq(i)g FK(is)g(as)g(in)75 4802 y(the)e(pre)n(vious)h(step.)216 4915 y(This)36 b(command)i(may)e(also)h (be)f(called)i(using)g(the)f(syntax)h Ft(MinimumDistance\(C,)53 b(w\))p FK(.)67 b(In)37 b(this)g(form,)75 5028 y Ft(MinimumDistance)31 b FK(returns)d(the)f(minimum)g(distance)h(of)f(a)f(code)n(w)o(ord)i Ft(w)e FK(to)h(the)g(code)g Ft(C)p FK(,)g(also)g(called)h(the)f Fq(dis-)75 5141 y(tance)f(fr)l(om)f Fe(w)f Fq(to)h Ft(C)p FK(.)33 b(This)25 b(is)g(the)g(smallest)i(v)n(alue)f Fq(d)j FK(for)c(which)h(there)g(is)f(an)g(element)h Fq(c)f FK(of)g(the)g(code)h Ft(C)f FK(which)g(is)75 5254 y(at)e(distance)i Fq(d)j FK(from)23 b Ft(w)p FK(.)28 b(So)23 b Fq(d)k FK(is)c(also)h(the) g(minimum)f(v)n(alue)h(for)f(which)h Fq(D)p Fo([)p Fq(d)17 b Fo(+)12 b FK(1)p Fo(])21 b Fv(6)p Fo(=)e FK(0,)k(where)g Fq(D)g FK(is)g(the)g(distance)75 5367 y(distrib)n(ution)k(of)d Ft(w)f FK(to)g Ft(C)g FK(\(see)h Ft(DistancesDistribu)q(tio)q(n)29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2041 5369 a SDict begin H.S end 2041 5369 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(4.9.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 2222 5305 a SDict begin H.R end 2222 5305 a 2222 5367 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.9.4) cvn H.B /ANN pdfmark end 2222 5367 a Black FK(\)\).)216 5479 y(Note)d(that)h Ft(w)f FK(must)g(be)h(an)f(element)h(of)f(the)h(same)f(v)o(ector)i (space)f(as)f(the)h(elements)g(of)g Ft(C)p FK(.)36 b Ft(w)26 b FK(does)h(not)g(neces-)75 5592 y(sarily)e(belong)g(to)e(the)h (code)h(\(if)e(it)g(does,)h(the)g(minimum)g(distance)h(is)f(zero\).)p Black Black eop end end %%Page: 45 45 TeXDict begin HPSdict begin 45 44 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.45) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(45)p Black 75 399 1648 4 v 1764 404 a FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188 493 a(gap>)44 b(C)e(:=)h(MOLSCode\(7\);;)k(MinimumDistance\(C\);)p 3747 523 V 75 623 V 188 593 a(3)p 3747 623 V 75 722 V 188 692 a(gap>)d(WeightDistribution\(C\))q(;)p 3747 722 V 75 822 V 188 792 a([)f(1,)g(0,)g(0,)g(24,)g(24)g(])p 3747 822 V 75 922 V 188 892 a(gap>)h(MinimumDistance\()j (WholeSpaceCode\()h(5,)43 b(GF\(3\))h(\))f(\);)p 3747 922 V 75 1021 V 188 991 a(1)p 3747 1021 V 75 1121 V 188 1091 a(gap>)h(MinimumDistance\()j(NullCode\()f(4,)d(GF\(2\))h(\))f(\);) p 3747 1121 V 75 1220 V 188 1191 a(4)p 3747 1220 V 75 1320 V 188 1290 a(gap>)h(C)e(:=)h(ConferenceCode\(9\);;)49 b(MinimumDistance\(C\);)p 3747 1320 V 75 1420 V 188 1390 a(4)p 3747 1420 V 75 1519 V 188 1489 a(gap>)44 b (InnerDistribution\(C\);)p 3747 1519 V 75 1619 V 188 1589 a([)f(1,)g(0,)g(0,)g(0,)g(63/5,)h(9/5,)f(18/5,)h(0,)g(9/10,)g (1/10)f(])p 3747 1619 V 75 1719 V 188 1689 a(gap>)h(C)e(:=)h (MOLSCode\(7\);;)k(w)c(:=)g(CodewordNr\()j(C,)d(17)g(\);)p 3747 1719 V 75 1818 V 188 1788 a([)g(3)f(3)h(6)g(2)f(])p 3747 1818 V 75 1918 V 188 1888 a(gap>)i(MinimumDistance\()j(C,)c(w)g (\);)p 3747 1918 V 75 2017 V 188 1988 a(0)p 3747 2017 V 75 2117 V 188 2087 a(gap>)h(C)e(:=)h(RemovedElementsCode)q(\()48 b(C,)c(w)e(\);;)i(MinimumDistance\()j(C,)c(w)g(\);)p 3747 2117 V 75 2217 V 188 2187 a(3)1143 b(#)43 b(so)g(w)g(no)g(longer)h (belongs)h(to)e(C)p 3747 2217 V 75 2242 4 25 v 3747 2242 V 75 2245 3675 4 v 75 2455 a FK(See)23 b(also)h(the)g Fy(GU)m(A)-6 b(V)f(A)22 b FK(commands)i(relating)i(to)d(bounds)j(on)d (the)h(minimum)f(distance)j(in)d(section)p 0.0236 0.0894 0.6179 TeXcolorrgb 3240 2456 a SDict begin H.S end 3240 2456 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 3353 2393 a SDict begin H.R end 3353 2393 a 3353 2455 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.7.1) cvn H.B /ANN pdfmark end 3353 2455 a Black FK(.)75 2607 y SDict begin H.S end 75 2607 a 75 2607 a SDict begin 13.6 H.A end 75 2607 a 75 2607 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.8.4) cvn H.B /DEST pdfmark end 75 2607 a 97 x FJ(4.8.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(MinimumDistanceLeon)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2878 a Fs(\006)f Ft(MinimumDistanceLe)q(on\()53 b(C)47 b(\))2213 b Fr(\(function\))p Black 216 3104 a Ft(MinimumDistanceLeo)q (n)28 b FK(returns)c(the)f(\223probable\224)i(minimum)e(distance)h Fq(d)2686 3118 y Fm(Leon)2845 3104 y FK(of)f(a)f(linear)i(binary)g (code)f Ft(C)p FK(,)75 3217 y(using)g(an)g(implementation)i(of)d(Leon') -5 b(s)23 b(probabilistic)j(polynomial)f(time)d(algorithm.)30 b(Brie\003y:)e(Let)22 b Ft(C)g FK(be)g(a)g(linear)75 3330 y(code)j(of)f(dimension)i Fq(k)f FK(o)o(v)o(er)e Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))24 b FK(as)g(abo)o(v)o(e.)31 b(The)23 b(algorithm)j(has)e(input)h(parameters)h Fq(s)e FK(and)g Fu(r)p FK(,)f(where)h Fq(s)f FK(is)h(an)75 3443 y(inte)o(ger)h(between)f(2)g(and)g Fq(n)13 b Fv(\000)g Fq(k)r FK(,)21 b(and)j Fu(r)f FK(is)g(an)h(inte)o(ger)h(between)f(2)g (and)g Fq(k)r FK(.)p Black 211 3628 a Fv(\017)p Black 46 w FK(Find)g(a)f(generator)j(matrix)e Fq(G)e FK(of)d Fq(C)r FK(.)p Black 211 3815 a Fv(\017)p Black 46 w FK(Randomly)25 b(permute)f(the)g(columns)h(of)f Fq(G)p FK(.)p Black 211 4002 a Fv(\017)p Black 46 w FK(Perform)j(Gaussian)g(elimination)i (on)d(the)h(permuted)h(matrix)f(to)f(obtain)i(a)d(ne)n(w)h(matrix)h(of) f(the)h(follo)n(wing)302 4115 y(form:)1770 4228 y Fq(G)20 b Fo(=)g(\()p Fq(I)2010 4242 y Fm(k)2055 4228 y Fv(j)10 b Fq(Z)15 b Fv(j)10 b Fq(B)p Fo(\))302 4393 y FK(with)29 b Fq(Z)j FK(a)d Fq(k)16 b Fv(\002)f Fq(s)28 b FK(matrix.)46 b(If)29 b Fo(\()p Fq(Z)5 b Fp(;)10 b Fq(B)p Fo(\))27 b FK(is)i(the)g(zero)h(matrix)f(then)h(return)g(1)f(for)g(the)g (minimum)g(distance.)47 b(If)302 4506 y Fq(Z)22 b Fo(=)17 b FK(0)k(b)n(ut)g(not)g Fq(B)f FK(then)h(either)h(choose)h(another)f (permutation)h(of)e(the)g(ro)n(ws)g(of)f Ft(C)h FK(or)f(return)i (`method)g(f)o(ails'.)p Black 211 4693 a Fv(\017)p Black 46 w FK(Search)i Fq(Z)j FK(for)d(at)f(most)h Fu(r)e FK(ro)n(ws)i(that)g (lead)g(to)f(code)n(w)o(ords)j(of)d(weight)h(less)g(than)h Fu(r)p FK(.)p Black 211 4880 a Fv(\017)p Black 46 w FK(F)o(or)e(these)h (code)n(w)o(ords,)i(compute)e(the)g(weight)g(of)g(the)g(whole)g(w)o (ord)f(in)h Ft(C)p FK(.)k(Return)c(this)g(weight.)75 5065 y(\(See)31 b(for)h(e)o(xample)g(J.)e(S.)g(Leon,)j([)p 0.0236 0.6179 0.0894 TeXcolorrgb 1205 5066 a SDict begin H.S end 1205 5066 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(Leo88)p 0.0236 0.6179 0.0894 TeXcolorrgb 1436 5003 a SDict begin H.R end 1436 5003 a 1436 5065 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.Leon88) cvn H.B /ANN pdfmark end 1436 5065 a Black 2 w FK(])e(for)g(more)h(details.\))54 b(Sometimes)31 b(\(as)h(is)f(the)h(case)g(in)f Fy(GU)m(A)-6 b(V)f(A)p FK(\))30 b(this)75 5178 y(probabilistic)d(algorithm)f(is)d(repeated)j (se)n(v)o(eral)e(times)g(and)g(the)g(most)f(commonly)i(occurring)h(v)n (alue)e(is)g(tak)o(en.)p 75 5298 1648 4 v 1764 5303 a FF(Example)p 2102 5298 V 75 5323 4 25 v 3747 5323 V 75 5423 4 100 v 188 5393 a(gap>)44 b(C:=RandomLinearCode\(5)q(0,2)q(2,G)q (F\()q(2\)\))q(;)p 3747 5423 V 75 5523 V 188 5493 a(a)85 b([50,22,?])45 b(randomly)g(generated)h(code)e(over)f(GF\(2\))p 3747 5523 V 75 5622 V 188 5592 a(gap>)h(MinimumDistanceLeon\(C)q(\);)49 b(time;)p 3747 5622 V Black Black eop end end %%Page: 46 46 TeXDict begin HPSdict begin 46 45 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.46) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(46)p Black 75 428 4 100 v 188 399 a FF(6)p 3747 428 V 75 528 V 188 498 a(211)p 3747 528 V 75 628 V 188 598 a(gap>)44 b(MinimumDistance\(C\);)k(time;)p 3747 628 V 75 727 V 188 697 a(6)p 3747 727 V 75 827 V 188 797 a(1204)p 3747 827 V 75 852 4 25 v 3747 852 V 75 855 3675 4 v 75 988 a SDict begin H.S end 75 988 a 75 988 a SDict begin 13.6 H.A end 75 988 a 75 988 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.8.5) cvn H.B /DEST pdfmark end 75 988 a 116 x FJ(4.8.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Decr)n(easeMinimumDistanceUpperBound)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1279 a Fs(\006)22 b Ft(DecreaseMinimumDi)q(sta)q(nce)q (Upp)q(er)q(Bou)q(nd\()53 b(C,)47 b(t,)g(m)g(\))1286 b Fr(\(function\))p Black 216 1504 a Ft(DecreaseMinimumDis)q(tan)q(ceU) q(pp)q(erB)q(oun)q(d)26 b FK(is)20 b(an)g(implementation)j(of)e(the)f (algorithm)i(for)f(the)f(minimum)75 1617 y(distance)25 b(of)d(a)h(linear)g(binary)h(code)g Ft(C)e FK(by)h(Leon)g([)p 0.0236 0.6179 0.0894 TeXcolorrgb 1651 1618 a SDict begin H.S end 1651 1618 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(Leo88)p 0.0236 0.6179 0.0894 TeXcolorrgb 1882 1555 a SDict begin H.R end 1882 1555 a 1882 1617 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.Leon88) cvn H.B /ANN pdfmark end 1882 1617 a Black 1 w FK(].)28 b(This)22 b(algorithm)j(tries)e(to)g(\002nd)f (code)n(w)o(ords)j(with)d(small)75 1730 y(minimum)h(weights.)29 b(The)23 b(parameter)h Ft(t)f FK(is)f(at)h(least)h(1)e(and)i(less)f (than)h(the)f(dimension)i(of)e Ft(C)p FK(.)28 b(The)22 b(best)i(results)g(are)75 1843 y(obtained)i(if)d(it)g(is)g(close)i(to)e (the)h(dimension)h(of)f(the)g(code.)29 b(The)23 b(parameter)i Ft(m)e FK(gi)n(v)o(es)h(the)g(number)g(of)g(runs)g(that)g(the)75 1956 y(algorithm)h(will)e(perform.)216 2069 y(The)61 b(result)h(returned)h(is)d(a)h(record)h(with)f(tw)o(o)f(\002elds;)80 b(the)61 b(\002rst,)70 b Ft(mindist)p FK(,)h(gi)n(v)o(es)62 b(the)f(lo)n(west)75 2182 y(weight)53 b(found,)61 b(and)53 b Ft(word)g FK(gi)n(v)o(es)g(the)g(corresponding)k(code)n(w)o(ord.)117 b(\(This)52 b(w)o(as)g(implemented)j(before)75 2295 y Ft(MinimumDistanceLeo)q(n)f FK(b)n(ut)c(independently)-6 b(.)109 b(The)48 b(older)i(manual)g(had)f(gi)n(v)o(en)h(the)f(command)h (incor)n(-)75 2408 y(rectly)-6 b(,)67 b(so)58 b(the)g(command)h(w)o(as) f(only)g(found)h(after)g(reading)h(all)e(the)g Fq(*.gi)g FK(\002les)f(in)h(the)g Fy(GU)m(A)-6 b(V)f(A)56 b FK(li-)75 2521 y(brary)-6 b(.)83 b(Though)43 b(both)f Ft(MinimumDistance)k FK(and)c Ft(MinimumDistanceLeon)47 b FK(often)c(run)e(much)h(f)o(aster) g(than)75 2634 y Ft(DecreaseMinimumDis)q(tan)q(ceU)q(ppe)q(rB)q(oun)q (d)p FK(,)48 b Ft(DecreaseMinimumDis)q(tan)q(ce)q(Upp)q(erB)q(oun)q(d)d FK(appears)c(to)e(be)75 2746 y(more)24 b(accurate)h(than)f Ft(MinimumDistanceLe)q(on)p FK(.\))p 75 2865 1648 4 v 1764 2870 a FF(Example)p 2102 2865 V 75 2890 4 25 v 3747 2890 V 75 2990 4 100 v 188 2960 a(gap>)44 b(C:=RandomLinearCode\(5)q (,2,)q(GF\()q(2\))q(\);)p 3747 2990 V 75 3090 V 188 3060 a(a)85 b([5,2,?])45 b(randomly)g(generated)g(code)f(over)g(GF\(2\))p 3747 3090 V 75 3189 V 188 3159 a(gap>)g(DecreaseMinimumDistan)q(ceU)q (ppe)q(rB)q(oun)q(d\(C)q(,1,)q(4\);)p 3747 3189 V 75 3289 V 188 3259 a(rec\()g(mindist)g(:=)f(3,)g(word)h(:=)f([)g (0*Z\(2\),)i(Z\(2\)\2100,)f(Z\(2\)\2100,)h(0*Z\(2\),)g(Z\(2\)\2100)f(]) f(\))p 3747 3289 V 75 3389 V 188 3359 a(gap>)h(MinimumDistance\(C\);)p 3747 3389 V 75 3488 V 188 3458 a(3)p 3747 3488 V 75 3588 V 188 3558 a(gap>)g(C:=RandomLinearCode\(8)q(,4,)q(GF\()q(2\))q(\);)p 3747 3588 V 75 3687 V 188 3658 a(a)85 b([8,4,?])45 b(randomly)g (generated)g(code)f(over)g(GF\(2\))p 3747 3687 V 75 3787 V 188 3757 a(gap>)g(DecreaseMinimumDistan)q(ceU)q(ppe)q(rB)q(oun)q (d\(C)q(,3,)q(4\);)p 3747 3787 V 75 3887 V 188 3857 a(rec\()g(mindist)g (:=)f(2,)p 3747 3887 V 75 3986 V 273 3956 a(word)g(:=)g([)g (Z\(2\)\2100,)i(0*Z\(2\),)f(0*Z\(2\),)h(0*Z\(2\),)g(0*Z\(2\),)g (0*Z\(2\),)f(0*Z\(2\),)h(Z\(2\)\2100)f(])f(\))p 3747 3986 V 75 4086 V 188 4056 a(gap>)h(MinimumDistance\(C\);)p 3747 4086 V 75 4186 V 188 4156 a(2)p 3747 4186 V 75 4210 4 25 v 3747 4210 V 75 4213 3675 4 v 75 4347 a SDict begin H.S end 75 4347 a 75 4347 a SDict begin 13.6 H.A end 75 4347 a 75 4347 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.8.6) cvn H.B /DEST pdfmark end 75 4347 a 116 x FJ(4.8.6)p 0.0 0.0 1.0 TeXcolorrgb 99 w(MinimumDistanceRandom)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4637 a Fs(\006)22 b Ft(MinimumDistanceRa)q(ndo)q(m\()53 b(C,)47 b(num,)h(s)e(\))1750 b Fr(\(function\))p Black 216 4863 a Ft(MinimumDistanceRan)q(dom)35 b FK(returns)30 b(an)f(upper)h(bound)g(for)f(the)g(minimum)g(distance)i Fq(d)3128 4877 y Fm(r)q(and)s(om)3371 4863 y FK(of)e(a)f(linear)75 4976 y(binary)33 b(code)g Ft(C)p FK(,)g(using)g(a)e(probabilistic)k (polynomial)g(time)c(algorithm.)55 b(Brie\003y:)45 b(Let)32 b Ft(C)f FK(be)h(a)f(linear)i(code)f(of)75 5089 y(dimension)k Fq(k)e FK(o)o(v)o(er)g Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))34 b FK(as)f(abo)o(v)o(e.)60 b(The)33 b(algorithm)i(has)f(input)h (parameters)h Fq(num)d FK(and)h Fq(s)p FK(,)i(where)e Fq(s)f FK(is)g(an)75 5202 y(inte)o(ger)25 b(between)f(2)g(and)g Fq(n)13 b Fv(\000)g FK(1,)22 b(and)i Fq(num)f FK(is)h(an)f(inte)o(ger)i (greater)g(than)f(or)g(equal)g(to)g(1.)p Black 211 5389 a Fv(\017)p Black 46 w FK(Find)g(a)f(generator)j(matrix)e Fq(G)e FK(of)d Fq(C)r FK(.)p Black 211 5577 a Fv(\017)p Black 46 w FK(Randomly)25 b(permute)f(the)g(columns)h(of)f Fq(G)p FK(,)e(written)i Fq(G)2050 5591 y Fm(p)2087 5577 y FK(..)p Black Black eop end end %%Page: 47 47 TeXDict begin HPSdict begin 47 46 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.47) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(47)p Black Black 211 399 a Fv(\017)p Black 1829 598 a Fq(G)20 b Fo(=)g(\()p Fq(A)p Fp(;)10 b Fq(B)p Fo(\))302 798 y FK(with)24 b Fq(A)e FK(a)h Fq(k)14 b Fv(\002)f Fq(s)23 b FK(matrix.)29 b(If)23 b Fq(A)g FK(is)g(the)h(zero)g (matrix)g(then)g(return)h(`method)g(f)o(ails'.)p Black 211 984 a Fv(\017)p Black 46 w FK(Search)h Fq(A)d FK(for)i(at)g(most)g (5)f(ro)n(ws)g(that)i(lead)f(to)g(code)n(w)o(ords,)i(in)d(the)h(code)c Fq(C)2689 998 y Fm(A)2757 984 y FK(with)k(generator)i(matrix)f Fq(A)p FK(,)d(of)302 1097 y(minimum)h(weight.)p Black 211 1283 a Fv(\017)p Black 46 w FK(F)o(or)e(these)h(code)n(w)o(ords,)i (use)e(the)f(associated)k(linear)d(combination)j(to)c(compute)i(the)e (weight)i(of)e(the)h(whole)302 1396 y(w)o(ord)h(in)f Ft(C)q FK(.)28 b(Return)c(this)g(weight)g(and)g(code)n(w)o(ord.)75 1580 y(This)f(probabilistic)j(algorithm)f(is)e(repeated)h Ft(num)g FK(times)f(\(with)g(dif)n(ferent)h(random)g(permutations)i(of) d(the)g(ro)n(ws)f(of)75 1693 y Fq(G)g FK(each)j(time\))e(and)h(the)g (weight)g(and)g(code)n(w)o(ord)h(of)f(the)g(lo)n(west)f(occurring)j (weight)f(is)e(tak)o(en.)p 75 1812 1648 4 v 1764 1817 a FF(Example)p 2102 1812 V 75 1836 4 25 v 3747 1836 V 75 1936 4 100 v 188 1906 a(gap>)44 b(C:=RandomLinearCode\(6)q(0,2)q (0,G)q(F\()q(2\)\))q(;)p 3747 1936 V 75 2036 V 188 2006 a(a)85 b([60,20,?])45 b(randomly)g(generated)h(code)e(over)f(GF\(2\))p 3747 2036 V 75 2135 V 188 2105 a(gap>)h(#mindist\(C\);time;)p 3747 2135 V 75 2235 V 188 2205 a(gap>)g(#mindistleon\(C,10,30\))q(;ti)q (me;)49 b(#doesn't)c(work)f(well)p 3747 2235 V 75 2335 V 188 2305 a(gap>)g(a:=MinimumDistanceRan)q(dom)q(\(C,)q(10)q(,30)q (\);t)q(ime)q(;)k(#)43 b(done)h(10)f(times)h(-with)g(fastest)g(time!!)p 3747 2335 V 75 2434 V 3747 2434 V 75 2534 V 230 2504 a(This)g(is)f(a)g(probabilistic)j(algorithm)g(which)e(may)f(return)i (the)e(wrong)h(answer.)p 3747 2534 V 75 2633 V 188 2604 a([)f(12,)g([)g(0)f(0)h(0)g(0)f(0)h(0)g(1)f(0)h(1)g(0)f(0)h(0)g(0)g(0)f (0)h(0)g(1)f(1)h(0)g(0)f(1)h(0)g(0)f(0)h(1)g(0)f(0)h(0)g(0)f(0)h(0)g(1) f(0)h(0)p 3747 2633 V 75 2733 V 527 2703 a(1)f(0)h(0)g(0)f(0)h(0)g(0)f (0)h(0)g(0)f(1)h(0)g(0)g(0)f(1)h(0)g(0)f(0)h(0)g(1)f(0)h(0)g(0)f(0)h(1) g(0)f(])h(])p 3747 2733 V 75 2833 V 188 2803 a(130)p 3747 2833 V 75 2932 V 188 2902 a(gap>)h(a[2])f(in)g(C;)p 3747 2932 V 75 3032 V 188 3002 a(true)p 3747 3032 V 75 3132 V 188 3102 a(gap>)h(b:=DecreaseMinimumDis)q(tan)q(ceU)q(pp)q(erB)q (oun)q(d\(C)q(,10)q(,1\))q(;)k(time;)c(#only)g(done)g(once!)p 3747 3132 V 75 3231 V 188 3201 a(rec\()g(mindist)g(:=)f(12,)h(word)f (:=)g([)g(0*Z\(2\),)i(0*Z\(2\),)g(0*Z\(2\),)f(0*Z\(2\),)h(0*Z\(2\),)g (0*Z\(2\),)p 3747 3231 V 75 3331 V 442 3301 a(Z\(2\)\2100,)g(0*Z\(2\),) f(Z\(2\)\2100,)h(0*Z\(2\),)g(0*Z\(2\),)g(0*Z\(2\),)f(0*Z\(2\),)h (0*Z\(2\),)g(0*Z\(2\),)p 3747 3331 V 75 3430 V 442 3401 a(0*Z\(2\),)g(Z\(2\)\2100,)f(Z\(2\)\2100,)h(0*Z\(2\),)g(0*Z\(2\),)g (Z\(2\)\2100,)f(0*Z\(2\),)h(0*Z\(2\),)g(0*Z\(2\),)p 3747 3430 V 75 3530 V 442 3500 a(Z\(2\)\2100,)g(0*Z\(2\),)f(0*Z\(2\),)h (0*Z\(2\),)g(0*Z\(2\),)g(0*Z\(2\),)f(0*Z\(2\),)h(Z\(2\)\2100,)g (0*Z\(2\),)p 3747 3530 V 75 3630 V 442 3600 a(0*Z\(2\),)g(Z\(2\)\2100,) f(0*Z\(2\),)h(0*Z\(2\),)g(0*Z\(2\),)g(0*Z\(2\),)f(0*Z\(2\),)h (0*Z\(2\),)g(0*Z\(2\),)p 3747 3630 V 75 3729 V 442 3699 a(0*Z\(2\),)g(0*Z\(2\),)f(Z\(2\)\2100,)h(0*Z\(2\),)g(0*Z\(2\),)g (0*Z\(2\),)f(Z\(2\)\2100,)h(0*Z\(2\),)g(0*Z\(2\),)p 3747 3729 V 75 3829 V 442 3799 a(0*Z\(2\),)g(0*Z\(2\),)f(Z\(2\)\2100,)h (0*Z\(2\),)g(0*Z\(2\),)g(0*Z\(2\),)f(0*Z\(2\),)h(Z\(2\)\2100,)g (0*Z\(2\))f(])f(\))p 3747 3829 V 75 3929 V 188 3899 a(649)p 3747 3929 V 75 4028 V 188 3998 a(gap>)h(Codeword\(b!.word\))k(in)43 b(C;)p 3747 4028 V 75 4128 V 188 4098 a(true)p 3747 4128 V 75 4227 V 188 4198 a(gap>)h(MinimumDistance\(C\);ti)q(me;)p 3747 4227 V 75 4327 V 188 4297 a(12)p 3747 4327 V 75 4427 V 188 4397 a(196)p 3747 4427 V 75 4526 V 188 4496 a(gap>)g(c:=MinimumDistanceLeo)q(n\(C)q(\);t)q(im)q(e;)p 3747 4526 V 75 4626 V 188 4596 a(12)p 3747 4626 V 75 4726 V 188 4696 a(66)p 3747 4726 V 75 4825 V 188 4795 a(gap>)g(C:=RandomLinearCode\(3)q(0,1)q(0,G)q(F\()q(3\)\))q(;)p 3747 4825 V 75 4925 V 188 4895 a(a)85 b([30,10,?])45 b(randomly)g(generated)h(code)e(over)f(GF\(3\))p 3747 4925 V 75 5024 V 188 4995 a(gap>)h(a:=MinimumDistanceRan)q(dom)q(\(C,)q (10)q(,10)q(\);t)q(ime)q(;)p 3747 5024 V 75 5124 V 3747 5124 V 75 5224 V 230 5194 a(This)g(is)f(a)g(probabilistic)j(algorithm)g (which)e(may)f(return)i(the)e(wrong)h(answer.)p 3747 5224 V 75 5323 V 188 5293 a([)f(13,)g([)g(0)f(0)h(0)g(1)f(0)h(0)g(0)f (0)h(0)g(0)f(1)h(0)g(2)g(2)f(1)h(1)g(0)f(2)h(2)g(0)f(1)h(0)g(2)f(1)h(0) g(0)f(0)h(1)g(0)f(2)h(])g(])p 3747 5323 V 75 5423 V 188 5393 a(229)p 3747 5423 V 75 5523 V 188 5493 a(gap>)h(a[2])f(in)g(C;)p 3747 5523 V 75 5622 V 188 5592 a(true)p 3747 5622 V Black Black eop end end %%Page: 48 48 TeXDict begin HPSdict begin 48 47 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.48) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(48)p Black 75 428 4 100 v 188 399 a FF(gap>)44 b(MinimumDistance\(C\);ti)q(me;)p 3747 428 V 75 528 V 188 498 a(9)p 3747 528 V 75 628 V 188 598 a(45)p 3747 628 V 75 727 V 188 697 a(gap>)g(c:=MinimumDistanceLeo)q(n\(C)q(\);)p 3747 727 V 75 827 V 188 797 a(Code)g(must)f(be)g(binary.)i(Quitting.)p 3747 827 V 75 927 V 188 897 a(0)p 3747 927 V 75 1026 V 188 996 a(gap>)f(a:=MinimumDistanceRan)q(dom)q(\(C,)q(1,)q(29\))q (;ti)q(me;)p 3747 1026 V 75 1126 V 3747 1126 V 75 1225 V 230 1196 a(This)g(is)f(a)g(probabilistic)j(algorithm)g(which)e(may)f (return)i(the)e(wrong)h(answer.)p 3747 1225 V 75 1325 V 188 1295 a([)f(10,)g([)g(0)f(0)h(1)g(0)f(2)h(0)g(2)f(0)h(1)g(0)f(0)h (0)g(0)g(0)f(0)h(1)g(0)f(1)h(0)g(0)f(1)h(0)g(0)f(0)h(0)g(0)f(2)h(2)g(2) f(0)h(])g(])p 3747 1325 V 75 1425 V 188 1395 a(53)p 3747 1425 V 75 1450 4 25 v 3747 1450 V 75 1453 3675 4 v 75 1685 a SDict begin H.S end 75 1685 a 75 1685 a SDict begin 13.6 H.A end 75 1685 a 75 1685 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.8.7) cvn H.B /DEST pdfmark end 75 1685 a 117 x FJ(4.8.7)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Co)o(v)o(eringRadius)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1976 a Fs(\006)22 b Ft(CoveringRadius\()52 b(C)47 b(\))2445 b Fr(\(function\))p Black 216 2202 a Ft(CoveringRadius)35 b FK(returns)d(the)e Fq(co)o(vering)j(r)o(adius)f FK(of)e(a)g(linear)i(code)f Ft(C)p FK(.)49 b(This)30 b(is)g(the)h(smallest)g(number)h Fq(r)75 2315 y FK(with)25 b(the)h(property)h(that)f(each)g(element)g Fq(v)f FK(of)g(the)g(ambient)i(v)o(ector)f(space)g(of)f Ft(C)g FK(has)h(at)f(most)g(a)g(distance)i Fq(r)g FK(to)e(the)75 2428 y(code)i Ft(C)p FK(.)35 b(So)26 b(for)g(each)g(v)o(ector)h Fq(v)f FK(there)h(must)f(be)g(an)g(element)h Fq(c)e FK(of)h Ft(C)g FK(with)g Fq(d)5 b Fo(\()p Fq(v)-7 b Fp(;)10 b Fq(c)p Fo(\))23 b Fv(\024)e Fq(r)r FK(.)36 b(The)25 b(smallest)j(co)o (v)o(ering)75 2541 y(radius)h(of)f(an)o(y)g Fo([)p Fq(n)p Fp(;)10 b Fq(k)r Fo(])28 b FK(binary)h(linear)g(code)g(is)e(denoted)h Fq(t)6 b Fo(\()p Fq(n)p Fp(;)k Fq(k)r Fo(\))p FK(.)42 b(A)27 b(binary)i(linear)g(code)g(with)e(reasonable)k(small)75 2653 y(co)o(v)o(ering)25 b(radius)g(is)e(called)i(a)e Fq(co)o(vering)j(code)p FK(.)216 2766 y(If)31 b Ft(C)g FK(is)h(a)f(perfect)i(code)f(\(see)g Ft(IsPerfectCode)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1873 2767 a SDict begin H.S end 1873 2767 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.3.6)p 0.0236 0.0894 0.6179 TeXcolorrgb 2054 2704 a SDict begin H.R end 2054 2704 a 2054 2766 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.3.6) cvn H.B /ANN pdfmark end 2054 2766 a Black FK(\)\),)e(the)d(co)o(v)o(ering)j (radius)e(is)g(equal)g(to)e Fq(t)6 b FK(,)32 b(the)g(num-)75 2879 y(ber)43 b(of)g(errors)i(the)e(code)h(can)f(correct,)50 b(where)43 b Fq(d)36 b Fo(=)31 b FK(2)n Fq(t)26 b Fo(+)20 b FK(1,)47 b(with)c Fq(d)48 b FK(the)43 b(minimum)g(distance)i(of)e Ft(C)g FK(\(see)75 2992 y Ft(MinimumDistance)28 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 823 2993 a SDict begin H.S end 823 2993 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.8.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 1004 2930 a SDict begin H.R end 1004 2930 a 1004 2992 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.8.3) cvn H.B /ANN pdfmark end 1004 2992 a Black FK(\)\).)216 3105 y(If)j(there)g(e)o(xists)h(a)e(function) j(called)f Ft(SpecialCoveringRadi)q(us)k FK(in)31 b(the)g(`operations') j(\002eld)c(of)h(the)g(code,)75 3218 y(then)36 b(this)f(function)i (will)e(be)g(called)h(to)f(compute)i(the)e(co)o(v)o(ering)h(radius)h (of)e(the)g(code.)64 b(At)34 b(the)h(moment,)j(no)75 3331 y(code-speci\002c)26 b(functions)g(are)e(implemented.)216 3444 y(If)34 b(the)f(length)j(of)d Ft(BoundsCoveringRadi)q(us)39 b FK(\(see)c Ft(BoundsCoveringRadius)40 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2952 3445 a SDict begin H.S end 2952 3445 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.2.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 3133 3382 a SDict begin H.R end 3133 3382 a 3133 3444 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.2.1) cvn H.B /ANN pdfmark end 3133 3444 a Black FK(\)\),)c(is)e(1,)i(then)e(the)75 3557 y(v)n(alue)24 b(in)p Black Black 168 3744 a Ft(C.boundsCoveringRad)q(ius)75 3932 y FK(is)f(returned.)31 b(Otherwise,)24 b(the)g(function)p Black Black 168 4120 a Ft(C.operations.Coveri)q(ngR)q(adi)q(us)75 4307 y FK(is)f(e)o(x)o(ecuted,)i(unless)g(the)f(redundanc)o(y)i(of)e Ft(C)f FK(is)g(too)h(lar)n(ge.)30 b(In)24 b(the)g(last)g(case,)f(a)h(w) o(arning)g(is)g(issued.)216 4420 y(The)f(algorithm)h(used)g(to)e (compute)j(the)e(co)o(v)o(ering)h(radius)g(is)f(the)g(follo)n(wing.)30 b(First,)22 b Ft(CosetLeadersMatFF)q(E)75 4533 y FK(is)k(used)h(to)g (compute)g(the)g(list)g(of)f(coset)h(leaders)h(\(which)f(returns)h(a)e (code)n(w)o(ord)i(in)e(each)h(coset)h(of)e Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))3507 4500 y Fm(n)3545 4533 y Fp(=)-5 b Fq(C)28 b FK(of)75 4646 y(minimum)23 b(weight\).)29 b(Then)23 b Ft(WeightVecFFE)j FK(is)d(used)h(to)e(compute)i(the)g (weight)f(of)g(each)g(of)g(these)h(coset)g(leaders.)75 4759 y(The)f(program)i(returns)g(the)f(maximum)f(of)h(these)g(weights.) p 75 4881 1648 4 v 1764 4886 a FF(Example)p 2102 4881 V 75 4906 4 25 v 3747 4906 V 75 5006 4 100 v 188 4976 a(gap>)44 b(H)e(:=)h(RandomLinearCode\(10)q(,)48 b(5,)c(GF\(2\)\);)p 3747 5006 V 75 5106 V 188 5076 a(a)85 b([10,5,?])45 b(randomly)g (generated)g(code)f(over)g(GF\(2\))p 3747 5106 V 75 5205 V 188 5175 a(gap>)g(CoveringRadius\(H\);)p 3747 5205 V 75 5305 V 188 5275 a(3)p 3747 5305 V 75 5405 V 188 5375 a(gap>)g(H)e(:=)h(HammingCode\(4,)k(GF\(2\)\);;)f (IsPerfectCode\(H\);)p 3747 5405 V 75 5504 V 188 5474 a(true)p 3747 5504 V 75 5604 V 188 5574 a(gap>)e(CoveringRadius\(H\);)p 3747 5604 V Black Black eop end end %%Page: 49 49 TeXDict begin HPSdict begin 49 48 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.49) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(49)p Black 75 428 4 100 v 188 399 a FF(1)974 b(#)43 b(Hamming)i(codes)f(have)f(minimum)i(distance)g(3)p 3747 428 V 75 528 V 188 498 a(gap>)f(CoveringRadius\(ReedSo)q(lom)q (onC)q(od)q(e\(7)q(,4\))q(\);)p 3747 528 V 75 628 V 188 598 a(3)p 3747 628 V 75 727 V 188 697 a(gap>)g(CoveringRadius\()j (BCHCode\()e(17,)f(3,)f(GF\(2\))h(\))e(\);)p 3747 727 V 75 827 V 188 797 a(3)p 3747 827 V 75 927 V 188 897 a(gap>)i(CoveringRadius\()j(HammingCode\()g(5,)c(GF\(2\))h(\))e(\);)p 3747 927 V 75 1026 V 188 996 a(1)p 3747 1026 V 75 1126 V 188 1096 a(gap>)i(C)e(:=)h(ReedMullerCode\()48 b(1,)43 b(9)f(\);;)p 3747 1126 V 75 1225 V 188 1196 a(gap>)i(CoveringRadius\()j (C)c(\);)p 3747 1225 V 75 1325 V 188 1295 a(CoveringRadius:)k(warning,) e(the)f(covering)h(radius)f(of)p 3747 1325 V 75 1425 V 188 1395 a(this)g(code)f(cannot)i(be)e(computed)i(straightforward.)p 3747 1425 V 75 1524 V 188 1494 a(Try)e(to)g(use)h (IncreaseCoveringRadiu)q(sL)q(owe)q(rBo)q(und)q(\()k(code)c(\).)p 3747 1524 V 75 1624 V 188 1594 a(\(see)g(the)f(manual)h(for)g(more)f (details\).)p 3747 1624 V 75 1724 V 188 1694 a(The)g(covering)i(radius) g(of)e(code)g(lies)h(in)f(the)h(interval:)p 3747 1724 V 75 1823 V 188 1793 a([)f(240)g(..)g(248)g(])p 3747 1823 V 75 1848 4 25 v 3747 1848 V 75 1851 3675 4 v 75 2064 a FK(See)23 b(also)h(the)g Fy(GU)m(A)-6 b(V)f(A)22 b FK(commands)i(relating)i(to)d(bounds)j(on)d(the)h(minimum)f(distance) j(in)d(section)p 0.0236 0.0894 0.6179 TeXcolorrgb 3240 2065 a SDict begin H.S end 3240 2065 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 3353 2002 a SDict begin H.R end 3353 2002 a 3353 2064 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.7.2) cvn H.B /ANN pdfmark end 3353 2064 a Black FK(.)75 2217 y SDict begin H.S end 75 2217 a 75 2217 a SDict begin 13.6 H.A end 75 2217 a 75 2217 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.8.8) cvn H.B /DEST pdfmark end 75 2217 a 96 x FJ(4.8.8)p 0.0 0.0 1.0 TeXcolorrgb 99 w(SetCo)o(v)o(eringRadius)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2487 a Fs(\006)f Ft(SetCoveringRadius) q(\()52 b(C,)47 b(intlist)i(\))1889 b Fr(\(function\))p Black 216 2713 a Ft(SetCoveringRadius)28 b FK(enables)d(the)d(user)i (to)e(set)h(the)g(co)o(v)o(ering)h(radius)g(herself,)g(instead)g(of)f (letting)h Fy(GU)m(A)-6 b(V)f(A)75 2826 y FK(compute)27 b(it.)35 b(If)25 b Ft(intlist)i FK(is)f(an)g(inte)o(ger)l(,)h Fy(GU)m(A)-6 b(V)f(A)24 b FK(will)h(simply)i(put)f(it)f(in)h(the)f (`boundsCo)o(v)o(eringRadius)q(')31 b(\002eld.)75 2939 y(If)23 b(it)g(is)f(a)h(list)g(of)g(inte)o(gers,)i(ho)n(we)n(v)o(er)l (,)e(it)g(will)g(intersect)i(this)f(list)f(with)g(the)g(`boundsCo)o(v)o (eringRadius')29 b(\002eld,)22 b(thus)75 3052 y(taking)31 b(the)e(best)h(of)f(both)h(lists.)47 b(If)29 b(this)g(w)o(ould)h(lea)n (v)o(e)g(an)f(empty)h(list,)h(the)e(\002eld)g(is)g(set)h(to)f Ft(intlist)r FK(.)45 b(Because)75 3165 y(some)26 b(other)g (computations)j(use)d(the)f(co)o(v)o(ering)i(radius)g(of)f(the)g(code,) g(it)f(is)h(important)h(that)f(the)g(entered)h(v)n(alue)f(is)75 3278 y(not)e(wrong,)g(otherwise)h(ne)n(w)e(results)i(may)e(be)h(in)l(v) n(alid.)p 75 3400 1648 4 v 1764 3405 a FF(Example)p 2102 3400 V 75 3425 4 25 v 3747 3425 V 75 3525 4 100 v 188 3495 a(gap>)44 b(C)e(:=)h(BCHCode\()i(17,)f(3,)f(GF\(2\))h(\);;)p 3747 3525 V 75 3625 V 188 3595 a(gap>)g(BoundsCoveringRadius\()49 b(C)43 b(\);)p 3747 3625 V 75 3724 V 188 3694 a([)g(3)f(..)h(4)g(])p 3747 3724 V 75 3824 V 188 3794 a(gap>)h(SetCoveringRadius\()k(C,)43 b([)g(2)f(..)i(3)e(])h(\);)p 3747 3824 V 75 3923 V 188 3894 a(gap>)h(BoundsCoveringRadius\()49 b(C)43 b(\);)p 3747 3923 V 75 4023 V 188 3993 a([)g([)f(2)h(..)g(3)g(])f(])p 3747 4023 V 75 4048 4 25 v 3747 4048 V 75 4051 3675 4 v 75 4194 a SDict begin H.S end 75 4194 a 75 4194 a SDict begin 13.6 H.A end 75 4194 a 75 4194 a SDict begin [ /View [/XYZ H.V] /Dest (section.4.9) cvn H.B /DEST pdfmark end 75 4194 a 150 x FM(4.9)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Distrib)n(utions)p Black 75 4440 a SDict begin H.S end 75 4440 a 75 4440 a SDict begin 13.6 H.A end 75 4440 a 75 4440 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.9.1) cvn H.B /DEST pdfmark end 75 4440 a 114 x FJ(4.9.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(MinimumW)-6 b(eightW)f(ords)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4728 a Fs(\006)22 b Ft(MinimumWeightWord)q(s\()53 b(C)46 b(\))2260 b Fr(\(function\))p Black 216 4954 a Ft(MinimumWeightWords)29 b FK(returns)d(the)d(list)h(of)g(minimum)f (weight)h(code)n(w)o(ords)i(of)d Ft(C)p FK(.)216 5067 y(This)g(algorithm)j(is)d(written)h(in)g(GAP)d(is)j(slo)n(w)-6 b(,)23 b(so)g(is)h(only)g(suitable)i(for)d(small)h(codes.)p 75 5190 1648 4 v 1764 5195 a FF(Example)p 2102 5190 V 75 5215 4 25 v 3747 5215 V 75 5314 4 100 v 188 5284 a(gap>)44 b(C:=HammingCode\(3,GF\(2)q(\)\);)p 3747 5314 V 75 5414 V 188 5384 a(a)f(linear)h([7,4,3]1)h(Hamming)g(\(3,2\))f(code)g(over)f (GF\(2\))p 3747 5414 V 75 5514 V 188 5484 a(gap>)h (MinimumWeightWords\(C\))q(;)p 3747 5514 V 75 5613 V 188 5583 a([)f([)f(1)h(0)g(0)f(0)h(0)g(1)f(1)h(],)g([)g(0)f(1)h(0)g(1)f (0)h(1)g(0)g(],)g([)f(0)h(1)g(0)f(0)h(1)g(0)f(1)h(],)g([)g(1)f(0)h(0)g (1)f(1)h(0)g(0)f(],)i([)e(0)h(0)g(1)f(0)h(1)g(1)f(0)h(],)p 3747 5613 V Black Black eop end end %%Page: 50 50 TeXDict begin HPSdict begin 50 49 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.50) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(50)p Black 75 428 4 100 v 273 399 a FF([)42 b(0)h(0)g(1)f(1)h(0)g(0)f(1)h(],)g([)g(1)f(1)h(1)g(0)f(0)h(0)g(0)g(])f (])p 3747 428 V 75 528 V 3747 528 V 75 553 4 25 v 3747 553 V 75 556 3675 4 v 75 687 a SDict begin H.S end 75 687 a 75 687 a SDict begin 13.6 H.A end 75 687 a 75 687 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.9.2) cvn H.B /DEST pdfmark end 75 687 a 116 x FJ(4.9.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(W)-6 b(eightDistrib)n(ution)p Black 1.0 0.0 0.0 TeXcolorrgb 75 978 a Fs(\006)22 b Ft(WeightDistributio)q(n\()53 b(C)46 b(\))2260 b Fr(\(function\))p Black 216 1203 a Ft(WeightDistribution)37 b FK(returns)c(the)e(weight)h(distrib)n(ution) i(of)d Ft(C)q FK(,)h(as)f(a)f(v)o(ector)-5 b(.)53 b(The)30 b Fq(i)3103 1170 y Fm(t)5 b(h)3195 1203 y FK(element)32 b(of)f(this)75 1316 y(v)o(ector)20 b(contains)i(the)e(number)g(of)g (elements)h(of)e Ft(C)g FK(with)g(weight)h Fq(i)9 b Fv(\000)g FK(1.)27 b(F)o(or)19 b(linear)h(codes,)i(the)d(weight)i(distrib)n (ution)75 1429 y(is)k(equal)h(to)e(the)h(inner)h(distrib)n(ution)j (\(see)c Ft(InnerDistribution)30 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2275 1431 a SDict begin H.S end 2275 1431 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(4.9.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 2456 1367 a SDict begin H.R end 2456 1367 a 2456 1429 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.9.3) cvn H.B /ANN pdfmark end 2456 1429 a Black FK(\)\).)j(If)25 b Fq(w)f FK(is)g(the)h(weight)h(distrib)n(ution)i(of) 75 1542 y(a)23 b(linear)i(code)f Ft(C)q FK(,)e(it)h(must)h(ha)n(v)o(e)g (the)g(zero)g(code)n(w)o(ord,)h(so)e Fq(w)p Fo([)p FK(1)p Fo(])e(=)f FK(1)j(\(one)h(w)o(ord)g(of)f(weight)h(0\).)216 1655 y(Some)f(codes,)i(such)f(as)g(the)g(Hamming)f(codes,)i(ha)n(v)o(e) f(precomputed)j(weight)d(distrib)n(utions.)33 b(F)o(or)23 b(others,)i(the)75 1768 y(program)c(W)-7 b(eightDistrib)n(ution)25 b(calls)c(the)f Fy(GAP)e FK(program)k Ft(DistancesDistributi)q(onM)q (atF)q(FE)q(Vec)q(FFE)q FK(,)j(which)75 1881 y(is)e(written)i(in)e(C.)f (See)h(also)h Ft(CodeWeightEnumera)q(tor)q FK(.)p 75 1985 1648 4 v 1764 1990 a FF(Example)p 2102 1985 V 75 2010 4 25 v 3747 2010 V 75 2110 4 100 v 188 2080 a(gap>)44 b(WeightDistribution\()k(ConferenceCode\(9\))h(\);)p 3747 2110 V 75 2210 V 188 2180 a([)43 b(1,)g(0,)g(0,)g(0,)g(0,)g(18,)g (0,)g(0,)g(0,)g(1)g(])p 3747 2210 V 75 2309 V 188 2279 a(gap>)h(WeightDistribution\()k(RepetitionCode\()g(7,)43 b(GF\(4\))h(\))f(\);)p 3747 2309 V 75 2409 V 188 2379 a([)g(1,)g(0,)g(0,)g(0,)g(0,)g(0,)g(0,)g(3)f(])p 3747 2409 V 75 2508 V 188 2479 a(gap>)i(WeightDistribution\()k (WholeSpaceCode\()g(5,)43 b(GF\(2\))h(\))f(\);)p 3747 2508 V 75 2608 V 188 2578 a([)g(1,)g(5,)g(10,)g(10,)g(5,)g(1)g(])p 3747 2608 V 75 2633 4 25 v 3747 2633 V 75 2636 3675 4 v 75 2767 a SDict begin H.S end 75 2767 a 75 2767 a SDict begin 13.6 H.A end 75 2767 a 75 2767 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.9.3) cvn H.B /DEST pdfmark end 75 2767 a 116 x FJ(4.9.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(InnerDistrib)n (ution)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3058 a Fs(\006)22 b Ft(InnerDistribution)q(\()52 b(C)47 b(\))2306 b Fr(\(function\))p Black 216 3284 a Ft(InnerDistribution)36 b FK(returns)c(the)f(inner)g (distrib)n(ution)j(of)d Ft(C)p FK(.)49 b(The)30 b Fq(i)2538 3251 y Fm(t)5 b(h)2628 3284 y FK(element)32 b(of)e(the)h(v)o(ector)g (contains)75 3396 y(the)c(a)n(v)o(erage)h(number)g(of)f(elements)h(of)e Ft(C)h FK(at)f(distance)j Fq(i)14 b Fv(\000)g FK(1)26 b(to)g(an)h(element)h(of)e Ft(C)q FK(.)37 b(F)o(or)26 b(linear)i(codes,)g(the)f(inner)75 3509 y(distrib)n(ution)g(is)d(equal) g(to)g(the)f(weight)i(distrib)n(ution)i(\(see)d Ft(WeightDistribution) 29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2812 3511 a SDict begin H.S end 2812 3511 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(4.9.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 2993 3447 a SDict begin H.R end 2993 3447 a 2993 3509 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.9.2) cvn H.B /ANN pdfmark end 2993 3509 a Black FK(\)\).)216 3622 y(Suppose)h Fq(w)e FK(is)h(the)g(inner)h(distrib)n(ution)j(of)c Ft(C)p FK(.)45 b(Then)29 b Fq(w)p Fo([)p FK(1)p Fo(])24 b(=)e FK(1,)30 b(because)h(each)f(element)g(of)f Ft(C)f FK(has)i(e)o(xactly) 75 3735 y(one)h(element)g(at)f(distance)j(zero)e(\(the)g(element)g (itself\).)51 b(The)30 b(minimum)g(distance)j(of)d Ft(C)g FK(is)g(the)h(smallest)g(v)n(alue)75 3848 y Fq(d)24 b Fp(>)18 b FK(0)k(with)g Fq(w)p Fo([)p Fq(d)16 b Fo(+)11 b FK(1)p Fo(])19 b Fv(6)p Fo(=)f FK(0,)k(because)i(a)e(distance)i (between)f(zero)f(and)h Fq(d)j FK(ne)n(v)o(er)c(occurs.)30 b(See)22 b Ft(MinimumDistance)75 3961 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 3962 a SDict begin H.S end 105 3962 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.8.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 286 3899 a SDict begin H.R end 286 3899 a 286 3961 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.8.3) cvn H.B /ANN pdfmark end 286 3961 a Black FK(\).)p 75 4068 1648 4 v 1764 4073 a FF(Example)p 2102 4068 V 75 4093 4 25 v 3747 4093 V 75 4192 4 100 v 188 4162 a(gap>)44 b(InnerDistribution\()k(ConferenceCode\(9\))g(\);)p 3747 4192 V 75 4292 V 188 4262 a([)43 b(1,)g(0,)g(0,)g(0,)g(63/5,)h(9/5,)f (18/5,)h(0,)g(9/10,)g(1/10)f(])p 3747 4292 V 75 4391 V 188 4362 a(gap>)h(InnerDistribution\()k(RepetitionCode\()g(7,)43 b(GF\(4\))h(\))e(\);)p 3747 4391 V 75 4491 V 188 4461 a([)h(1,)g(0,)g(0,)g(0,)g(0,)g(0,)g(0,)g(3)f(])p 3747 4491 V 75 4516 4 25 v 3747 4516 V 75 4519 3675 4 v 75 4737 a SDict begin H.S end 75 4737 a 75 4737 a SDict begin 13.6 H.A end 75 4737 a 75 4737 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.9.4) cvn H.B /DEST pdfmark end 75 4737 a 117 x FJ(4.9.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(DistancesDistrib)n (ution)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5028 a Fs(\006)22 b Ft(DistancesDistribu)q(tio)q(n\()53 b(C,)47 b(w)g(\))1981 b Fr(\(function\))p Black 216 5254 a Ft(DistancesDistribut)q(ion)31 b FK(returns)26 b(the)f(distrib)n(ution)j(of)d(the)g(distances)i(of)e (all)f(elements)i(of)f Ft(C)f FK(to)h(a)f(code-)75 5367 y(w)o(ord)j Ft(w)f FK(in)h(the)g(same)g(v)o(ector)h(space.)40 b(The)26 b Fq(i)1511 5334 y Fm(t)5 b(h)1598 5367 y FK(element)28 b(of)f(the)g(distance)i(distrib)n(ution)i(is)26 b(the)i(number)f(of)g (code-)75 5479 y(w)o(ords)k(of)g Ft(C)f FK(that)i(ha)n(v)o(e)f (distance)i Fq(i)15 b Fv(\000)g FK(1)31 b(to)f Ft(w)q FK(.)49 b(The)31 b(smallest)h(v)n(alue)f Fq(d)36 b FK(with)30 b Fq(w)p Fo([)p Fq(d)20 b Fo(+)15 b FK(1)p Fo(])25 b Fv(6)p Fo(=)f FK(0,)32 b(is)f(de\002ned)g(as)g(the)75 5592 y Fq(distance)26 b(to)d Ft(C)g FK(\(see)h Ft(MinimumDistance)29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1481 5593 a SDict begin H.S end 1481 5593 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.8.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 1662 5530 a SDict begin H.R end 1662 5530 a 1662 5592 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.8.3) cvn H.B /ANN pdfmark end 1662 5592 a Black FK(\)\).)p Black Black eop end end %%Page: 51 51 TeXDict begin HPSdict begin 51 50 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.51) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(51)p Black 75 399 1648 4 v 1764 404 a FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188 493 a(gap>)44 b(H)e(:=)h(HadamardCode\(20\);)p 3747 523 V 75 623 V 188 593 a(a)g(\(20,40,10\)6..8)k(Hadamard)e(code)e(of)h (order)g(20)f(over)g(GF\(2\))p 3747 623 V 75 722 V 188 692 a(gap>)h(c)e(:=)h(Codeword\("101101011)q(010)q(10)q(010)q(101)q(",) 49 b(H\);)p 3747 722 V 75 822 V 188 792 a([)43 b(1)f(0)h(1)g(1)f(0)h(1) g(0)f(1)h(1)g(0)f(1)h(0)g(1)f(0)h(0)g(1)g(0)f(1)h(0)g(1)f(])p 3747 822 V 75 922 V 188 892 a(gap>)i(DistancesDistribution)q(\(H,)49 b(c\);)p 3747 922 V 75 1021 V 188 991 a([)43 b(0,)g(0,)g(0,)g(0,)g(0,)g (1,)g(0,)g(7,)g(0,)g(12,)g(0,)g(12,)h(0,)f(7,)g(0,)g(1,)g(0,)g(0,)g(0,) g(0,)g(0)f(])p 3747 1021 V 75 1121 V 188 1091 a(gap>)i (MinimumDistance\(H,)k(c\);)p 3747 1121 V 75 1220 V 188 1191 a(5)1143 b(#)43 b(distance)i(to)e(H)p 3747 1220 V 75 1245 4 25 v 3747 1245 V 75 1248 3675 4 v 75 1382 a SDict begin H.S end 75 1382 a 75 1382 a SDict begin 13.6 H.A end 75 1382 a 75 1382 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.9.5) cvn H.B /DEST pdfmark end 75 1382 a 116 x FJ(4.9.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(OuterDistrib)n(ution)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1672 a Fs(\006)22 b Ft(OuterDistribution)q(\()52 b(C)47 b(\))2306 b Fr(\(function\))p Black 216 1898 a FK(The)24 b(function)i Ft(OuterDistribution)k FK(returns)c(a)e(list)g(of)g(length)i Fq(q)2388 1865 y Fm(n)2426 1898 y FK(,)d(where)i Fq(q)e FK(is)h(the)h(size)g(of)f(the) g(base)h(\002eld)75 2011 y(of)33 b Ft(C)g FK(and)g Fq(n)g FK(is)g(the)g(w)o(ord)g(length.)59 b(The)33 b(elements)h(of)f(the)h (list)f(consist)i(of)e(pairs,)j(the)d(\002rst)g(coordinate)j(being)75 2124 y(an)e(element)g(of)g Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))867 2091 y Fm(n)938 2124 y FK(\(this)34 b(is)g(a)f(code)n(w)o(ord)i(type\)) f(and)g(the)g(second)i(coordinate)g(being)f(a)e(distrib)n(ution)k(of)75 2237 y(distances)30 b(to)e(the)g(code)g(\(a)f(list)h(of)g(inte)o (gers\).)43 b(This)27 b(table)i(is)e Fq(very)i FK(lar)n(ge,)g(and)f (for)g Fq(n)23 b Fp(>)f FK(20)28 b(it)f(will)h(not)g(\002t)e(in)i(the) 75 2350 y(memory)23 b(of)f(most)h(computers.)30 b(The)22 b(function)j Ft(DistancesDistributi)q(on)j FK(\(see)23 b Ft(DistancesDistribu)q(tio)q(n)75 2462 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 2464 a SDict begin H.S end 105 2464 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(4.9.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 286 2400 a SDict begin H.R end 286 2400 a 286 2462 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.9.4) cvn H.B /ANN pdfmark end 286 2462 a Black FK(\)\))h(can)g(be)g (used)g(to)g(calculate)h(one)f(entry)h(of)e(the)h(list.)p 75 2585 1648 4 v 1764 2590 a FF(Example)p 2102 2585 V 75 2610 4 25 v 3747 2610 V 75 2710 4 100 v 188 2680 a(gap>)44 b(C)e(:=)h(RepetitionCode\()48 b(3,)43 b(GF\(2\))h(\);)p 3747 2710 V 75 2809 V 188 2779 a(a)f(cyclic)h([3,1,3]1)h(repetition)h (code)e(over)f(GF\(2\))p 3747 2809 V 75 2909 V 188 2879 a(gap>)h(OD)f(:=)g(OuterDistribution\(C\);)p 3747 2909 V 75 3009 V 188 2979 a([)g([)f([)h(0)g(0)f(0)h(],)g([)g(1,)g(0,)g(0,)g (1)f(])h(],)g([)g([)g(1)f(1)h(1)g(],)g([)f(1,)h(0,)g(0,)g(1)g(])g(],)p 3747 3009 V 75 3108 V 273 3078 a([)f([)h(0)g(0)f(1)h(],)g([)g(0,)g(1,)g (1,)g(0)f(])h(],)g([)g([)g(1)f(1)h(0)g(],)g([)f(0,)h(1,)g(1,)g(0)g(])g (],)p 3747 3108 V 75 3208 V 273 3178 a([)f([)h(1)g(0)f(0)h(],)g([)g(0,) g(1,)g(1,)g(0)f(])h(],)g([)g([)g(0)f(1)h(1)g(],)g([)f(0,)h(1,)g(1,)g(0) g(])g(],)p 3747 3208 V 75 3307 V 273 3278 a([)f([)h(0)g(1)f(0)h(],)g([) g(0,)g(1,)g(1,)g(0)f(])h(],)g([)g([)g(1)f(0)h(1)g(],)g([)f(0,)h(1,)g (1,)g(0)g(])g(])f(])p 3747 3307 V 75 3407 V 188 3377 a(gap>)i(WeightDistribution\(C\))49 b(=)43 b(OD[1][2];)p 3747 3407 V 75 3507 V 188 3477 a(true)p 3747 3507 V 75 3606 V 188 3576 a(gap>)h(DistancesDistribution)q(\()k(C,)43 b(Codeword\("110"\))48 b(\))43 b(=)f(OD[4][2];)p 3747 3606 V 75 3706 V 188 3676 a(true)p 3747 3706 V 75 3731 4 25 v 3747 3731 V 75 3734 3675 4 v 75 3877 a SDict begin H.S end 75 3877 a 75 3877 a SDict begin 13.6 H.A end 75 3877 a 75 3877 a SDict begin [ /View [/XYZ H.V] /Dest (section.4.10) cvn H.B /DEST pdfmark end 75 3877 a 150 x FM(4.10)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Decoding)31 b(Functions)p Black 75 4145 a SDict begin H.S end 75 4145 a 75 4145 a SDict begin 13.6 H.A end 75 4145 a 75 4145 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.10.1) cvn H.B /DEST pdfmark end 75 4145 a 92 x FJ(4.10.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Decode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4411 a Fs(\006)22 b Ft(Decode\()49 b(C,)e(r)g(\))2677 b Fr(\(function\))p Black 216 4637 a Ft(Decode)24 b FK(decodes)h Ft(r)d FK(\(a)g(')-5 b(recei)n(v)o(ed)25 b(w)o(ord'\))e(with)g(respect)h(to)e(code)i Ft(C)e FK(and)h(returns)h(the)f(`message)h(w)o(ord')f(\(i.e.,)75 4750 y(the)c(information)i(digits)f(associated)i(to)c(the)h(code)n(w)o (ord)h Fq(c)c Fv(2)11 b Fq(C)19 b FK(closest)i(to)d Ft(r)q FK(\).)26 b(Here)19 b Ft(r)f FK(can)h(be)g(a)f Fy(GU)m(A)-6 b(V)f(A)17 b FK(code)n(w)o(ord)75 4863 y(or)29 b(a)g(list)g(of)g(code)n (w)o(ords.)47 b(First,)30 b(possible)h(errors)f(in)f Ft(r)g FK(are)g(corrected,)k(then)c(the)h(code)n(w)o(ord)g(is)f (decoded)i(to)e(an)75 4976 y Fq(information)i(code)o(wor)m(d)h(m)27 b FK(\(and)i(not)f(an)h(element)g(of)f Ft(C)q FK(\).)42 b(If)28 b(the)h(code)g(record)h(has)e(a)g(\002eld)g(`specialDecoder',) 75 5089 y(this)h(special)i(algorithm)g(is)d(used)i(to)f(decode)h(the)f (v)o(ector)-5 b(.)46 b(Hamming)29 b(codes,)i(BCH)c(codes,)k(c)o(yclic)f (codes,)h(and)75 5202 y(generalized)d(Reed-Solomon)e(ha)n(v)o(e)g(such) f(a)g(special)h(algorithm.)34 b(\(The)25 b(algorithm)h(used)g(for)f (BCH)d(codes)k(is)f(the)75 5315 y(Sugiyama)k(algorithm)h(described,)i (for)c(e)o(xample,)i(in)e(section)i(5.4.3)f(of)f([)p 0.0236 0.6179 0.0894 TeXcolorrgb 2464 5316 a SDict begin H.S end 2464 5316 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(HP03)p 0.0236 0.6179 0.0894 TeXcolorrgb 2671 5253 a SDict begin H.R end 2671 5253 a 2671 5315 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.HP03) cvn H.B /ANN pdfmark end 2671 5315 a Black FK(].)43 b(A)27 b(special)j(decoder)g(has)f(also)75 5428 y(being)i(written)g(for)g(the)g(generalized)i(Reed-Solomon)f(code) f(using)h(the)e(interpolation)k(algorithm.)51 b(F)o(or)29 b(c)o(yclic)75 5540 y(codes,)i(the)f(error)n(-trapping)j(algorithm)e (is)e(used.\))47 b(If)29 b Ft(C)f FK(is)h(linear)i(and)e(no)h(special)g (decoder)i(\002eld)c(has)i(been)g(set)p Black Black eop end end %%Page: 52 52 TeXDict begin HPSdict begin 52 51 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.52) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(52)p Black 75 399 a(then)32 b(syndrome)h(decoding)g(is)e (used.)53 b(Otherwise)32 b(\(when)f Ft(C)g FK(is)g(non-linear\),)36 b(the)31 b(nearest)i(neighbor)h(decoding)75 511 y(algorithm)25 b(is)f(used)g(\(which)g(is)g(v)o(ery)f(slo)n(w\).)216 624 y(A)g(special)i(decoder)g(can)f(be)g(created)h(by)e(de\002ning)i(a) e(function)p Black Black 168 810 a Ft(C!.SpecialDecoder)52 b(:=)47 b(function\(C,)k(r\))c(...)g(end;)75 995 y FK(The)29 b(function)i(uses)f(the)f(ar)n(guments)i Ft(C)e FK(\(the)h(code)f (record)i(itself\))f(and)g Ft(r)e FK(\(a)h(v)o(ector)h(of)f(the)h(code) n(w)o(ord)g(type\))g(to)75 1108 y(decode)k Ft(r)d FK(to)h(an)g (information)j(v)o(ector)-5 b(.)55 b(A)30 b(normal)j(decoder)h(w)o (ould)f(tak)o(e)f(a)g(code)n(w)o(ord)h Ft(r)f FK(of)g(the)g(same)g(w)o (ord)75 1221 y(length)23 b(and)f(\002eld)f(as)g Ft(C)q FK(,)f(and)i(w)o(ould)g(return)h(an)e(information)j(v)o(ector)f(of)e (length)i Fq(k)r FK(,)e(the)g(dimension)j(of)d Ft(C)p FK(.)28 b(The)21 b(user)75 1334 y(is)i(not)g(restricted)j(to)d(these)h (normal)f(demands)i(though,)f(and)g(can)f(for)g(instance)i(de\002ne)f (a)e(decoder)j(for)e(non-linear)75 1447 y(codes.)216 1560 y(Encoding)i(is)f(done)g(by)g(multiplying)i(the)e(information)i(v) o(ector)e(with)g(the)f(code)i(\(see)p 0.0236 0.0894 0.6179 TeXcolorrgb 2947 1561 a SDict begin H.S end 2947 1561 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 3060 1498 a SDict begin H.R end 3060 1498 a 3060 1560 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.2) cvn H.B /ANN pdfmark end 3060 1560 a Black FK(\).)p 75 1680 1648 4 v 1764 1685 a FF(Example)p 2102 1680 V 75 1705 4 25 v 3747 1705 V 75 1805 4 100 v 188 1775 a(gap>)44 b(C)e(:=)h(HammingCode\(3\);)p 3747 1805 V 75 1904 V 188 1874 a(a)g(linear)h([7,4,3]1)h(Hamming)g(\(3,2\))f (code)g(over)f(GF\(2\))p 3747 1904 V 75 2004 V 188 1974 a(gap>)h(c)e(:=)h("1010"*C;)850 b(#)43 b(encoding)p 3747 2004 V 75 2104 V 188 2074 a([)g(1)f(0)h(1)g(1)f(0)h(1)g(0)f(])p 3747 2104 V 75 2203 V 188 2173 a(gap>)i(Decode\(C,)h(c\);)890 b(#)43 b(decoding)p 3747 2203 V 75 2303 V 188 2273 a([)g(1)f(0)h(1)g(0) f(])p 3747 2303 V 75 2402 V 188 2373 a(gap>)i(Decode\(C,)h (Codeword\("0010101"\))q(\);)p 3747 2402 V 75 2502 V 188 2472 a([)e(1)f(1)h(0)g(1)f(])1186 b(#)43 b(one)g(error)h(corrected) p 3747 2502 V 75 2602 V 188 2572 a(gap>)g(C!.SpecialDecoder)k(:=)43 b(function\(C,)j(c\))p 3747 2602 V 75 2701 V 188 2671 a(>)d(return)h(NullWord\(Dimension\(C)q(\)\);)p 3747 2701 V 75 2801 V 188 2771 a(>)f(end;)p 3747 2801 V 75 2901 V 188 2871 a(function)i(\()e(C,)g(c)f(\))h(...)g(end)p 3747 2901 V 75 3000 V 188 2970 a(gap>)h(Decode\(C,)h(c\);)p 3747 3000 V 75 3100 V 188 3070 a([)e(0)f(0)h(0)g(0)f(])466 b(#)43 b(new)g(decoder)i(always)g(returns)f(null)g(word)p 3747 3100 V 75 3125 4 25 v 3747 3125 V 75 3128 3675 4 v 75 3261 a SDict begin H.S end 75 3261 a 75 3261 a SDict begin 13.6 H.A end 75 3261 a 75 3261 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.10.2) cvn H.B /DEST pdfmark end 75 3261 a 116 x FJ(4.10.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Decodew)o(ord)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3551 a Fs(\006)22 b Ft(Decodeword\()51 b(C,)c(r)g(\))2491 b Fr(\(function\))p Black 216 3777 a Ft(Decodeword)26 b FK(decodes)e Ft(r)f FK(\(a)f(')-5 b(recei)n(v)o(ed)25 b(w)o(ord'\))e(with)g(respect)h(to)f (code)g Ft(C)g FK(and)g(returns)h(the)f(code)n(w)o(ord)h Fq(c)c Fv(2)14 b Fq(C)75 3890 y FK(closest)28 b(to)f Ft(r)q FK(.)38 b(Here)26 b Ft(r)h FK(can)g(be)g(a)f Fy(GU)m(A)-6 b(V)f(A)25 b FK(code)n(w)o(ord)j(or)f(a)g(list)g(of)g(code)n(w)o(ords.) 40 b(If)27 b(the)g(code)g(record)i(has)e(a)f(\002eld)75 4003 y(`specialDecoder',)35 b(this)c(special)h(algorithm)f(is)f(used)h (to)f(decode)h(the)g(v)o(ector)-5 b(.)49 b(Hamming)30 b(codes,)i(generalized)75 4116 y(Reed-Solomon)d(codes,)g(and)f(BCH)e (codes)i(ha)n(v)o(e)g(such)g(a)f(special)i(algorithm.)42 b(\(The)27 b(algorithm)i(used)g(for)e(BCH)75 4229 y(codes)i(is)g(the)f (Sugiyama)h(algorithm)h(described,)i(for)c(e)o(xample,)i(in)e(section)i (5.4.3)f(of)f([)p 0.0236 0.6179 0.0894 TeXcolorrgb 2925 4230 a SDict begin H.S end 2925 4230 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(HP03)p 0.0236 0.6179 0.0894 TeXcolorrgb 3132 4167 a SDict begin H.R end 3132 4167 a 3132 4229 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.HP03) cvn H.B /ANN pdfmark end 3132 4229 a Black FK(].)43 b(The)27 b(algorithm)75 4341 y(used)i(for)f(generalized)k(Reed-Solomon) e(codes)f(is)f(the)g(\223interpolation)33 b(algorithm\224)d(described)h (for)d(e)o(xample)h(in)75 4454 y(chapter)22 b(5)e(of)g([)p 0.0236 0.6179 0.0894 TeXcolorrgb 552 4455 a SDict begin H.S end 552 4455 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(JH04)p 0.0236 0.6179 0.0894 TeXcolorrgb 743 4392 a SDict begin H.R end 743 4392 a 743 4454 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.JH04) cvn H.B /ANN pdfmark end 743 4454 a Black 2 w FK(].\))27 b(If)20 b Ft(C)g FK(is)g(linear)i(and)f(no)f (special)i(decoder)h(\002eld)d(has)g(been)i(set)e(then)h(syndrome)i (decoding)f(is)75 4567 y(used.)35 b(Otherwise,)26 b(when)f Ft(C)g FK(is)g(non-linear)l(,)k(the)c(nearest)i(neighbor)h(algorithm)f (has)e(been)h(implemented)i(\(which)75 4680 y(should)d(only)g(be)e (used)h(for)g(small-sized)i(codes\).)p 75 4800 1648 4 v 1764 4805 a FF(Example)p 2102 4800 V 75 4825 4 25 v 3747 4825 V 75 4925 4 100 v 188 4895 a(gap>)44 b(C)e(:=)h (HammingCode\(3\);)p 3747 4925 V 75 5024 V 188 4995 a(a)g(linear)h ([7,4,3]1)h(Hamming)g(\(3,2\))f(code)g(over)f(GF\(2\))p 3747 5024 V 75 5124 V 188 5094 a(gap>)h(c)e(:=)h("1010"*C;)850 b(#)43 b(encoding)p 3747 5124 V 75 5224 V 188 5194 a([)g(1)f(0)h(1)g(1) f(0)h(1)g(0)f(])p 3747 5224 V 75 5323 V 188 5293 a(gap>)i (Decodeword\(C,)i(c\);)891 b(#)42 b(decoding)p 3747 5323 V 75 5423 V 188 5393 a([)h(1)f(0)h(1)g(1)f(0)h(1)g(0)f(])p 3747 5423 V 75 5523 V 188 5493 a(gap>)p 3747 5523 V 75 5622 V 188 5592 a(gap>)i(R:=PolynomialRing\(GF\()q(11\))q(,[")q(t")q (]\);)p 3747 5622 V Black Black eop end end %%Page: 53 53 TeXDict begin HPSdict begin 53 52 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.53) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(53)p Black 75 428 4 100 v 188 399 a FF(GF\(11\)[t])p 3747 428 V 75 528 V 188 498 a(gap>)44 b(P:=List\([1,3,4,5,7],i)q(->Z)q (\(11)q(\)\210)q(i\);)p 3747 528 V 75 628 V 188 598 a([)f(Z\(11\),)h (Z\(11\)\2103,)h(Z\(11\)\2104,)g(Z\(11\)\2105,)g(Z\(11\)\2107)g(])p 3747 628 V 75 727 V 188 697 a(gap>)f(C:=GeneralizedReedSol)q(omo)q(nCo) q(de)q(\(P,)q(3,R)q(\);)p 3747 727 V 75 827 V 188 797 a(a)f(linear)h([5,3,1..3]2)88 b(generalized)47 b(Reed-Solomon)f(code)e (over)f(GF\(11\))p 3747 827 V 75 927 V 188 897 a(gap>)h (MinimumDistance\(C\);)p 3747 927 V 75 1026 V 188 996 a(3)p 3747 1026 V 75 1126 V 188 1096 a(gap>)g(c:=Random\(C\);)p 3747 1126 V 75 1225 V 188 1196 a([)f(0)f(9)h(6)g(2)f(1)h(])p 3747 1225 V 75 1325 V 188 1295 a(gap>)h(v:=Codeword\("09620"\);)p 3747 1325 V 75 1425 V 188 1395 a([)f(0)f(9)h(6)g(2)f(0)h(])p 3747 1425 V 75 1524 V 188 1494 a(gap>)h(GeneralizedReedSolomo)q(nDe)q (cod)q(er)q(Gao)q(\(C,)q(v\);)p 3747 1524 V 75 1624 V 188 1594 a([)f(0)f(9)h(6)g(2)f(1)h(])p 3747 1624 V 75 1724 V 188 1694 a(gap>)h(Decodeword\(C,v\);)j(#)c(calls)h(the)g (special)g(interpolation)j(decoder)p 3747 1724 V 75 1823 V 188 1793 a([)c(0)f(9)h(6)g(2)f(1)h(])p 3747 1823 V 75 1923 V 188 1893 a(gap>)h(G:=GeneratorMat\(C\);)p 3747 1923 V 75 2022 V 188 1993 a([)f([)f(Z\(11\)\2100,)j(0*Z\(11\),)g (0*Z\(11\),)g(Z\(11\)\2108,)h(Z\(11\)\2109)e(],)p 3747 2022 V 75 2122 V 273 2092 a([)e(0*Z\(11\),)j(Z\(11\)\2100,)g (0*Z\(11\),)g(Z\(11\)\2100,)h(Z\(11\)\2108)e(],)p 3747 2122 V 75 2222 V 273 2192 a([)e(0*Z\(11\),)j(0*Z\(11\),)g (Z\(11\)\2100,)g(Z\(11\)\2103,)h(Z\(11\)\2108)e(])f(])p 3747 2222 V 75 2321 V 188 2291 a(gap>)h(C1:=GeneratorMatCode\()q(G,G)q (F\(1)q(1\))q(\);)p 3747 2321 V 75 2421 V 188 2391 a(a)f(linear)h ([5,3,1..3]2)i(code)e(defined)h(by)e(generator)i(matrix)f(over)g (GF\(11\))p 3747 2421 V 75 2521 V 188 2491 a(gap>)g(Decodeword\(C,v\);) j(#)c(calls)h(syndrome)h(decoding)p 3747 2521 V 75 2620 V 188 2590 a([)e(0)f(9)h(6)g(2)f(1)h(])p 3747 2620 V 75 2645 4 25 v 3747 2645 V 75 2648 3675 4 v 75 2781 a SDict begin H.S end 75 2781 a 75 2781 a SDict begin 13.6 H.A end 75 2781 a 75 2781 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.10.3) cvn H.B /DEST pdfmark end 75 2781 a 117 x FJ(4.10.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w (GeneralizedReedSolomonDecoderGao)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3072 a Fs(\006)22 b Ft(GeneralizedReedSo)q(lom)q(onD)q (eco)q(de)q(rGa)q(o\()53 b(C,)47 b(r)g(\))1471 b Fr(\(function\))p Black 216 3298 a Ft(GeneralizedReedSol)q(omo)q(nDe)q(co)q(der)q(Gao)33 b FK(decodes)28 b Ft(r)e FK(\(a)h(')-5 b(recei)n(v)o(ed)29 b(w)o(ord'\))e(to)f(a)g(code)n(w)o(ord)j Fq(c)22 b Fv(2)16 b Fq(C)28 b FK(in)f(a)75 3411 y(generalized)k(Reed-Solomon)e(code)f Ft(C)f FK(\(see)h Ft(GeneralizedReedSo)q(lom)q(onC)q(ode)33 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2799 3412 a SDict begin H.S end 2799 3412 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.6.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 2980 3349 a SDict begin H.R end 2980 3349 a 2980 3411 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.6.2) cvn H.B /ANN pdfmark end 2980 3411 a Black FK(\)\),)d(closest)f(to)e Ft(r)q FK(.)39 b(Here)75 3524 y Ft(r)30 b FK(must)g(be)g(a)g Fy(GU)m(A)-6 b(V)f(A)28 b FK(code)n(w)o(ord.)50 b(If)30 b(the)g(code)h(record)h(does)e(not)h(ha)n(v)o(e)g(name)f(`generalized)k (Reed-Solomon)75 3636 y(code')25 b(then)f(an)f(error)i(is)e(returned.) 31 b(Otherwise,)24 b(the)g(Gao)f(decoder)j([)p 0.0236 0.6179 0.0894 TeXcolorrgb 2292 3637 a SDict begin H.S end 2292 3637 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(Gao03)p 0.0236 0.6179 0.0894 TeXcolorrgb 2533 3574 a SDict begin H.R end 2533 3574 a 2533 3636 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.Gao03) cvn H.B /ANN pdfmark end 2533 3636 a Black 1 w FK(])d(is)h(used)g(to)f(compute)i Fq(c)p FK(.)216 3749 y(F)o(or)53 b(long)i(codes,)62 b(this)55 b(method)g(is)e(f)o (aster)i(in)f(practice)i(than)f(the)f(interpolation)k(method)d(used)f (in)75 3862 y Ft(Decodeword)p FK(.)p 75 3966 1648 4 v 1764 3971 a FF(Example)p 2102 3966 V 75 3991 4 25 v 3747 3991 V 75 4091 4 100 v 188 4061 a(gap>)44 b(R:=PolynomialRing\(GF\()q (11\))q(,[")q(t")q(]\);)p 3747 4091 V 75 4190 V 188 4161 a(GF\(11\)[t])p 3747 4190 V 75 4290 V 188 4260 a(gap>)g (P:=List\([1,3,4,5,7],i)q(->Z)q(\(11)q(\)\210)q(i\);)p 3747 4290 V 75 4390 V 188 4360 a([)f(Z\(11\),)h(Z\(11\)\2103,)h (Z\(11\)\2104,)g(Z\(11\)\2105,)g(Z\(11\)\2107)g(])p 3747 4390 V 75 4489 V 188 4459 a(gap>)f(C:=GeneralizedReedSol)q(omo)q(nCo)q (de)q(\(P,)q(3,R)q(\);)p 3747 4489 V 75 4589 V 188 4559 a(a)f(linear)h([5,3,1..3]2)88 b(generalized)47 b(Reed-Solomon)f(code)e (over)f(GF\(11\))p 3747 4589 V 75 4689 V 188 4659 a(gap>)h (MinimumDistance\(C\);)p 3747 4689 V 75 4788 V 188 4758 a(3)p 3747 4788 V 75 4888 V 188 4858 a(gap>)g(c:=Random\(C\);)p 3747 4888 V 75 4987 V 188 4958 a([)f(0)f(9)h(6)g(2)f(1)h(])p 3747 4987 V 75 5087 V 188 5057 a(gap>)h(v:=Codeword\("09620"\);)p 3747 5087 V 75 5187 V 188 5157 a([)f(0)f(9)h(6)g(2)f(0)h(])p 3747 5187 V 75 5286 V 188 5256 a(gap>)h(GeneralizedReedSolomo)q(nDe)q (cod)q(er)q(Gao)q(\(C,)q(v\);)p 3747 5286 V 75 5386 V 188 5356 a([)f(0)f(9)h(6)g(2)f(1)h(])p 3747 5386 V 75 5411 4 25 v 3747 5411 V 75 5414 3675 4 v Black Black eop end end %%Page: 54 54 TeXDict begin HPSdict begin 54 53 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.54) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(54)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.10.4) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(4.10.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(GeneralizedReedSolomonListDecoder)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft (GeneralizedReedSo)q(lom)q(onL)q(ist)q(De)q(cod)q(er\()53 b(C,)47 b(r,)g(tau)h(\))1193 b Fr(\(function\))p Black 216 799 a Ft(GeneralizedReedSol)q(omo)q(nLi)q(st)q(Dec)q(ode)q(r)39 b FK(implements)c(Sudans)f(list-decoding)j(algorithm)f(\(see)e(sec-)75 912 y(tion)20 b(12.1)g(of)f([)p 0.0236 0.6179 0.0894 TeXcolorrgb 537 913 a SDict begin H.S end 537 913 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(JH04)p 0.0236 0.6179 0.0894 TeXcolorrgb 728 850 a SDict begin H.R end 728 850 a 728 912 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.JH04) cvn H.B /ANN pdfmark end 728 912 a Black 1 w FK(]\))g(for)h (\223lo)n(w)f(rate\224)h(Reed-Solomon)h(codes.)29 b(It)19 b(returns)i(the)f(list)f(of)h(all)f(code)n(w)o(ords)i(in)f(C)e(which)75 1024 y(are)k(a)g(distance)i(of)e(at)g(most)g Ft(tau)h FK(from)f Ft(r)f FK(\(a)h(')-5 b(recei)n(v)o(ed)25 b(w)o(ord'\).)k Ft(C)21 b FK(must)h(be)h(a)e(generalized)26 b(Reed-Solomon)d(code)75 1137 y Ft(C)g FK(\(see)h Ft(GeneralizedReedSol)q(omo)q(nC)q(ode)29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1571 1138 a SDict begin H.S end 1571 1138 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.6.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 1752 1075 a SDict begin H.R end 1752 1075 a 1752 1137 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.6.2) cvn H.B /ANN pdfmark end 1752 1137 a Black FK(\)\))c(and)f Ft(r)f FK(must)g(be)h(a)f Fy(GU)m(A)-6 b(V)f(A)22 b FK(code)n(w)o(ord.)p 75 1256 1648 4 v 1764 1261 a FF(Example)p 2102 1256 V 75 1281 4 25 v 3747 1281 V 75 1381 4 100 v 188 1351 a(gap>)44 b(F:=GF\(16\);)p 3747 1381 V 75 1481 V 188 1451 a(GF\(2\2104\))p 3747 1481 V 75 1580 V 188 1550 a(gap>)p 3747 1580 V 75 1680 V 188 1650 a(gap>)g(a:=PrimitiveRoot\(F\);;)49 b(b:=a\2107;;)c (b\2104+b\2103+1;)p 3747 1680 V 75 1779 V 188 1750 a(0*Z\(2\))p 3747 1779 V 75 1879 V 188 1849 a(gap>)f(Pts:=List\([0..14],i->)q (b\210i)q(\);)p 3747 1879 V 75 1979 V 188 1949 a([)f(Z\(2\)\2100,)h (Z\(2\2104\)\2107,)i(Z\(2\2104\)\21014,)f(Z\(2\2104\)\2106,)h (Z\(2\2104\)\21013,)g(Z\(2\2102\),)e(Z\(2\2104\)\21012,)i (Z\(2\2104\)\2104,)p 3747 1979 V 75 2078 V 273 2048 a (Z\(2\2104\)\21011,)f(Z\(2\2104\)\2103,)h(Z\(2\2102\)\2102,)f (Z\(2\2104\)\2102,)h(Z\(2\2104\)\2109,)f(Z\(2\2104\),)g (Z\(2\2104\)\2108)g(])p 3747 2078 V 75 2178 V 188 2148 a(gap>)f(x:=X\(F\);;)p 3747 2178 V 75 2278 V 188 2248 a(gap>)g(R1:=PolynomialRing\(F,)q([x])q(\);;)p 3747 2278 V 75 2377 V 188 2347 a(gap>)g(vars:=IndeterminatesO)q(fPo)q(lyn)q(om)q (ial)q(Rin)q(g\(R)q(1\);)q(;)p 3747 2377 V 75 2477 V 188 2447 a(gap>)g(y:=X\(F,vars\);;)p 3747 2477 V 75 2576 V 188 2547 a(gap>)g(R2:=PolynomialRing\(F,)q([x,)q(y]\))q(;;)p 3747 2576 V 75 2676 V 188 2646 a(gap>)g(C:=GeneralizedReedSol)q(omo)q (nCo)q(de)q(\(Pt)q(s,3)q(,R1)q(\);)p 3747 2676 V 75 2776 V 188 2746 a(a)f(linear)h([15,3,1..13]10..12)91 b(generalized)46 b(Reed-Solomon)g(code)e(over)g(GF\(16\))p 3747 2776 V 75 2875 V 188 2845 a(gap>)g(MinimumDistance\(C\);)k(##)43 b(6)g(error)h(correcting)p 3747 2875 V 75 2975 V 188 2945 a(13)p 3747 2975 V 75 3075 V 188 3045 a(gap>)g(z:=Zero\(F\);;)p 3747 3075 V 75 3174 V 188 3144 a(gap>)g(r:=[z,z,z,z,z,z,z,z,b)q(\2106,) q(b\2102)q(,b)q(\2105,)q(b\2101)q(4,b)q(,b\210)q(7,b)q(\21011)q(];;)p 3747 3174 V 75 3274 V 188 3244 a(gap>)g(r:=Codeword\(r\);)p 3747 3274 V 75 3373 V 188 3344 a([)f(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h (a\21012)h(a\21014)f(a\2105)h(a\2108)f(a\2107)h(a\2104)f(a\2102)g(])p 3747 3373 V 75 3473 V 188 3443 a(gap>)h(cs:=GeneralizedReedSo)q(lom)q (onL)q(is)q(tDe)q(cod)q(er\()q(C,r)q(,2\))q(;)k(time;)p 3747 3473 V 75 3573 V 188 3543 a([)43 b([)f(0)h(a\2109)g(a\2103)h (a\21013)f(a\2106)h(a\21010)f(a\21011)h(a)f(a\21012)h(a\21014)f(a\2105) h(a\2108)f(a\2107)g(a\2104)h(a\2102)f(],)p 3747 3573 V 75 3672 V 273 3642 a([)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g (0)f(0)h(0)g(0)g(])f(])p 3747 3672 V 75 3772 V 188 3742 a(250)p 3747 3772 V 75 3872 V 188 3842 a(gap>)i(c1:=cs[1];)h(c1)e(in)g (C;)p 3747 3872 V 75 3971 V 188 3941 a([)g(0)f(a\2109)i(a\2103)f (a\21013)h(a\2106)f(a\21010)h(a\21011)f(a)g(a\21012)h(a\21014)g(a\2105) f(a\2108)g(a\2107)h(a\2104)f(a\2102)g(])p 3747 3971 V 75 4071 V 188 4041 a(true)p 3747 4071 V 75 4170 V 188 4141 a(gap>)h(c2:=cs[2];)h(c2)e(in)g(C;)p 3747 4170 V 75 4270 V 188 4240 a([)g(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0) g(0)f(0)h(0)g(])p 3747 4270 V 75 4370 V 188 4340 a(true)p 3747 4370 V 75 4469 V 188 4439 a(gap>)h(WeightCodeword\(c1-r\);)p 3747 4469 V 75 4569 V 188 4539 a(7)p 3747 4569 V 75 4669 V 188 4639 a(gap>)g(WeightCodeword\(c2-r\);)p 3747 4669 V 75 4768 V 188 4738 a(7)p 3747 4768 V 75 4793 4 25 v 3747 4793 V 75 4796 3675 4 v 75 4929 a SDict begin H.S end 75 4929 a 75 4929 a SDict begin 13.6 H.A end 75 4929 a 75 4929 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.10.5) cvn H.B /DEST pdfmark end 75 4929 a 117 x FJ(4.10.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(BitFlipDecoder)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5220 a Fs(\006)22 b Ft(BitFlipDecoder\()52 b(C,)47 b(r)g(\))2306 b Fr(\(function\))p Black 216 5446 a FK(The)32 b(iterati)n(v)o(e)i(decoding)h(method)e Ft(BitFlipDecoder)j FK(must)d(only)g(be)f(applied)i(to)f(LDPC)d(codes.)56 b(These)75 5559 y(ha)n(v)o(e)25 b(not)f(been)h(implemented)h(in)e(GU)l (A)-12 b(V)g(A)22 b(\(b)n(ut)j(see)f Ft(FerreroDesignCode)30 b FK(for)24 b(a)g(code)g(with)g(similar)h(proper)n(-)p Black Black eop end end %%Page: 55 55 TeXDict begin HPSdict begin 55 54 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.55) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(55)p Black 75 399 a(ties\).)29 b(A)20 b(binary)i(lo)n(w)e (density)j(parity)g(check)f(\(LDPC\))d(code)j(of)f(length)h Fq(n)f FK(and)h(redundanc)o(y)i Fq(r)e FK(is)f(de\002ned)h(in)f(terms) 75 511 y(of)i(its)h(check)h(matrix)f Fq(H)7 b FK(:)p Black 211 699 a Fv(\017)p Black 46 w FK(Each)24 b(ro)n(w)f(of)g Fq(H)29 b FK(has)24 b(e)o(xactly)h Fq(x)e FK(1')-5 b(s.)p Black 211 887 a Fv(\017)p Black 46 w FK(Each)24 b(column)g(has)g(e)o (xactly)h Fq(y)e FK(1')-5 b(s.)p Black 211 1074 a Fv(\017)p Black 46 w FK(The)23 b(number)i(of)e(1')-5 b(s)24 b(in)g(common)f (between)i(an)o(y)f(tw)o(o)f(columns)i(is)e(less)h(than)g(or)g(equal)h (to)e(one.)p Black 211 1262 a Fv(\017)p Black 46 w Fq(x)p Fp(=)p Fq(n)i FK(and)f Fq(y)p Fp(=)p Fq(r)i FK(are)d(')-5 b(small'.)75 1450 y(F)o(or)25 b(these)i(codes,)g Ft(BitFlipDecoder)j FK(decodes)e(v)o(ery)e(quickly)-6 b(.)38 b(\(W)-7 b(arning:)35 b(it)26 b(can)g(gi)n(v)o(e)g(wildly)g(wrong)h(results)75 1562 y(for)c(arbitrary)i(binary)f(linear)g(codes.\))30 b(The)22 b(bit)h(\003ipping)h(algorithm)g(is)f(described)i(for)e(e)o (xample)g(in)g(chapter)h(13)f(of)75 1675 y([)p 0.0236 0.6179 0.0894 TeXcolorrgb 105 1676 a SDict begin H.S end 105 1676 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(JH04)p 0.0236 0.6179 0.0894 TeXcolorrgb 296 1613 a SDict begin H.R end 296 1613 a 296 1675 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.JH04) cvn H.B /ANN pdfmark end 296 1675 a Black 1 w FK(].)p 75 1793 1648 4 v 1764 1798 a FF(Example)p 2102 1793 V 75 1817 4 25 v 3747 1817 V 75 1917 4 100 v 188 1887 a(gap>)44 b(C:=HammingCode\(4,GF\(2)q(\)\);)p 3747 1917 V 75 2017 V 188 1987 a(a)f(linear)h([15,11,3]1)i(Hamming)e (\(4,2\))h(code)e(over)h(GF\(2\))p 3747 2017 V 75 2116 V 188 2086 a(gap>)g(c:=Random\(C\);)p 3747 2116 V 75 2216 V 188 2186 a([)f(0)f(0)h(0)g(1)f(0)h(0)g(1)f(0)h(0)g(1)f(1)h(0)g (1)f(0)h(1)g(])p 3747 2216 V 75 2316 V 188 2286 a(gap>)h(v:=List\(c\);) p 3747 2316 V 75 2415 V 188 2385 a([)f(0*Z\(2\),)h(0*Z\(2\),)h (0*Z\(2\),)g(Z\(2\)\2100,)g(0*Z\(2\),)f(0*Z\(2\),)h(Z\(2\)\2100,)g (0*Z\(2\),)f(0*Z\(2\),)p 3747 2415 V 75 2515 V 273 2485 a(Z\(2\)\2100,)g(Z\(2\)\2100,)h(0*Z\(2\),)g(Z\(2\)\2100,)g(0*Z\(2\),)f (Z\(2\)\2100)h(])p 3747 2515 V 75 2614 V 188 2585 a(gap>)f (v[1]:=Z\(2\)+v[1];)j(#)c(flip)h(1st)f(bit)h(of)f(c)f(to)h(create)i(an) e(error)p 3747 2614 V 75 2714 V 188 2684 a(Z\(2\)\2100)p 3747 2714 V 75 2814 V 188 2784 a(gap>)h(v:=Codeword\(v\);)p 3747 2814 V 75 2913 V 188 2883 a([)f(1)f(0)h(0)g(1)f(0)h(0)g(1)f(0)h(0) g(1)f(1)h(0)g(1)f(0)h(1)g(])p 3747 2913 V 75 3013 V 188 2983 a(gap>)h(BitFlipDecoder\(C,v\);)p 3747 3013 V 75 3113 V 188 3083 a([)f(0)f(0)h(0)g(1)f(0)h(0)g(1)f(0)h(0)g(1)f(1)h(0)g (1)f(0)h(1)g(])p 3747 3113 V 75 3212 V 3747 3212 V 75 3312 V 3747 3312 V 75 3337 4 25 v 3747 3337 V 75 3340 3675 4 v 75 3473 a SDict begin H.S end 75 3473 a 75 3473 a SDict begin 13.6 H.A end 75 3473 a 75 3473 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.10.6) cvn H.B /DEST pdfmark end 75 3473 a 116 x FJ(4.10.6)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Near)n(estNeighborGRSDecodew)o(ords)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3764 a Fs(\006)22 b Ft(NearestNeighborGR)q(SDe)q(cod)q (ewo)q(rd)q(s\()53 b(C,)47 b(v,)g(dist)h(\))1332 b Fr(\(function\))p Black 216 3989 a Ft(NearestNeighborGRS)q(Dec)q(ode)q(wo)q(rds)35 b FK(\002nds)29 b(all)g(generalized)j(Reed-Solomon)f(code)n(w)o(ords)g (within)f(dis-)75 4102 y(tance)23 b Ft(dist)g FK(from)f Ft(v)g Fq(and)j FK(the)d(associated)j(polynomial,)f(using)g(\223brute)f (force\224.)30 b(Input:)f Ft(v)22 b FK(is)g(a)g(recei)n(v)o(ed)h(v)o (ector)g(\(a)75 4215 y Fy(GU)m(A)-6 b(V)f(A)24 b FK(code)n(w)o(ord\),)j Ft(C)f FK(is)f(a)g(GRS)f(code,)j Ft(dist)f FK(\277)f(0)h(is)f(the)h (distance)i(from)e Ft(v)f FK(to)g(search)i(in)f Ft(C)p FK(.)35 b(Output:)f(a)25 b(list)h(of)75 4328 y(pairs)e Fo([)p Fq(c)p Fp(;)g Fq(f)13 b Fo(\()p Fq(x)p Fo(\)])p FK(,)25 b(where)f Fq(w)n(t)6 b Fo(\()p Fq(c)13 b Fv(\000)g Fq(v)p Fo(\))20 b Fv(\024)g Fq(d)5 b(is)n(t)20 b Fv(\000)13 b FK(1)22 b(and)i Fq(c)d Fo(=)f(\()14 b Fq(f)f Fo(\()p Fq(x)2074 4342 y Fr(1)2112 4328 y Fo(\))p Fp(;)d(:::;)24 b Fq(f)13 b Fo(\()p Fq(x)2419 4342 y Fm(n)2459 4328 y Fo(\)\))p FK(.)p 75 4454 1648 4 v 1764 4459 a FF(Example)p 2102 4454 V 75 4479 4 25 v 3747 4479 V 75 4578 4 100 v 188 4548 a(gap>)44 b(F:=GF\(16\);)p 3747 4578 V 75 4678 V 188 4648 a(GF\(2\2104\))p 3747 4678 V 75 4778 V 188 4748 a(gap>)g(a:=PrimitiveRoot\(F\);;)49 b(b:=a\2107;)c (b\2104+b\2103+1;)p 3747 4778 V 75 4877 V 188 4847 a(Z\(2\2104\)\2107)p 3747 4877 V 75 4977 V 188 4947 a(0*Z\(2\))p 3747 4977 V 75 5076 V 188 5047 a(gap>)f(Pts:=List\([0..14],i->)q(b\210i)q(\);)p 3747 5076 V 75 5176 V 188 5146 a([)f(Z\(2\)\2100,)h(Z\(2\2104\)\2107,)i (Z\(2\2104\)\21014,)f(Z\(2\2104\)\2106,)h(Z\(2\2104\)\21013,)g (Z\(2\2102\),)e(Z\(2\2104\)\21012,)p 3747 5176 V 75 5276 V 273 5246 a(Z\(2\2104\)\2104,)h(Z\(2\2104\)\21011,)h (Z\(2\2104\)\2103,)f(Z\(2\2102\)\2102,)h(Z\(2\2104\)\2102,)f (Z\(2\2104\)\2109,)g(Z\(2\2104\),)p 3747 5276 V 75 5375 V 273 5345 a(Z\(2\2104\)\2108)g(])p 3747 5375 V 75 5475 V 188 5445 a(gap>)f(x:=X\(F\);;)p 3747 5475 V 75 5575 V 188 5545 a(gap>)g(R1:=PolynomialRing\(F,)q([x])q(\);;)p 3747 5575 V Black Black eop end end %%Page: 56 56 TeXDict begin HPSdict begin 56 55 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.56) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(56)p Black 75 428 4 100 v 188 399 a FF(gap>)44 b(vars:=IndeterminatesO)q(fPo)q(lyn)q(om)q(ial)q(Rin)q(g\(R)q(1\);)q(;) p 3747 428 V 75 528 V 188 498 a(gap>)g(y:=X\(F,vars\);;)p 3747 528 V 75 628 V 188 598 a(gap>)g(R2:=PolynomialRing\(F,)q([x,)q (y]\))q(;;)p 3747 628 V 75 727 V 188 697 a(gap>)g (C:=GeneralizedReedSol)q(omo)q(nCo)q(de)q(\(Pt)q(s,3)q(,R1)q(\);)p 3747 727 V 75 827 V 188 797 a(a)f(linear)h([15,3,1..13]10..12)91 b(generalized)46 b(Reed-Solomon)g(code)e(over)g(GF\(16\))p 3747 827 V 75 927 V 188 897 a(gap>)g(MinimumDistance\(C\);)k(#)43 b(6)g(error)h(correcting)p 3747 927 V 75 1026 V 188 996 a(13)p 3747 1026 V 75 1126 V 188 1096 a(gap>)g(z:=Zero\(F\);)p 3747 1126 V 75 1225 V 188 1196 a(0*Z\(2\))p 3747 1225 V 75 1325 V 188 1295 a(gap>)g(r:=[z,z,z,z,z,z,z,z,b)q(\2106,)q(b\2102)q (,b)q(\2105,)q(b\2101)q(4,b)q(,b\210)q(7,b)q(\21011)q(];;)49 b(#)43 b(7)f(errors)p 3747 1325 V 75 1425 V 188 1395 a(gap>)i(r:=Codeword\(r\);)p 3747 1425 V 75 1524 V 188 1494 a([)f(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(a\21012)h(a\21014)f(a\2105)h (a\2108)f(a\2107)h(a\2104)f(a\2102)g(])p 3747 1524 V 75 1624 V 188 1594 a(gap>)h(cs:=NearestNeighborGR)q(SDe)q(cod)q(ew)q (ord)q(s\(C)q(,r,)q(7\);)p 3747 1624 V 75 1724 V 188 1694 a([)f([)f([)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g (0)g(0)f(],)h(0*Z\(2\))i(],)p 3747 1724 V 75 1823 V 273 1793 a([)d([)h(0)g(a\2109)g(a\2103)g(a\21013)h(a\2106)f(a\21010)h (a\21011)g(a)f(a\21012)g(a\21014)h(a\2105)f(a\2108)h(a\2107)f(a\2104)g (a\2102)h(],)f(x_1+Z\(2\)\2100)j(])c(])p 3746 1823 V 75 1848 4 25 v 3747 1848 V 75 1851 3675 4 v 75 1984 a SDict begin H.S end 75 1984 a 75 1984 a SDict begin 13.6 H.A end 75 1984 a 75 1984 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.10.7) cvn H.B /DEST pdfmark end 75 1984 a 116 x FJ(4.10.7)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Near)n(estNeighborDecodew)o (ords)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2274 a Fs(\006)22 b Ft(NearestNeighborDe)q(cod)q(ewo)q(rds)q(\()53 b(C,)47 b(v,)g(dist)h(\))1471 b Fr(\(function\))p Black 216 2500 a Ft(NearestNeighborDec)q(ode)q(wor)q(ds)27 b FK(\002nds)21 b(all)g(code)n(w)o(ords)h(in)f(a)g(linear)h(code)g Ft(C)e FK(within)i(distance)h Ft(dist)e FK(from)75 2613 y Ft(v)p FK(,)i(using)i(\223brute)g(force\224.)30 b(Input:)h Ft(v)23 b FK(is)g(a)g(recei)n(v)o(ed)i(v)o(ector)g(\(a)e Fy(GU)m(A)-6 b(V)f(A)22 b FK(code)n(w)o(ord\),)j Ft(C)e FK(is)h(a)f(linear)i(code,)f Ft(dist)g FK(\277)g(0)75 2726 y(is)f(the)h(distance)i(from)d Ft(v)g FK(to)h(search)h(in)e Ft(C)q FK(.)k(Output:)j(a)24 b(list)f(of)h Fq(c)c Fv(2)15 b Fq(C)r FK(,)23 b(where)h Fq(w)n(t)6 b Fo(\()p Fq(c)13 b Fv(\000)g Fq(v)p Fo(\))20 b Fv(\024)g Fq(d)5 b(is)n(t)19 b Fv(\000)13 b FK(1.)p 75 2849 1648 4 v 1764 2854 a FF(Example)p 2102 2849 V 75 2874 4 25 v 3747 2874 V 75 2974 4 100 v 188 2944 a(gap>)44 b(F:=GF\(16\);)p 3747 2974 V 75 3073 V 188 3044 a(GF\(2\2104\))p 3747 3073 V 75 3173 V 188 3143 a(gap>)g(a:=PrimitiveRoot\(F\);;)49 b(b:=a\2107;)c(b\2104+b\2103+1;)p 3747 3173 V 75 3273 V 188 3243 a(Z\(2\2104\)\2107)p 3747 3273 V 75 3372 V 188 3342 a(0*Z\(2\))p 3747 3372 V 75 3472 V 188 3442 a(gap>)f(Pts:=List\([0..14],i->)q(b\210i)q(\);)p 3747 3472 V 75 3572 V 188 3542 a([)f(Z\(2\)\2100,)h(Z\(2\2104\)\2107,)i (Z\(2\2104\)\21014,)f(Z\(2\2104\)\2106,)h(Z\(2\2104\)\21013,)g (Z\(2\2102\),)e(Z\(2\2104\)\21012,)p 3747 3572 V 75 3671 V 273 3641 a(Z\(2\2104\)\2104,)h(Z\(2\2104\)\21011,)h (Z\(2\2104\)\2103,)f(Z\(2\2102\)\2102,)h(Z\(2\2104\)\2102,)f (Z\(2\2104\)\2109,)g(Z\(2\2104\),)p 3747 3671 V 75 3771 V 273 3741 a(Z\(2\2104\)\2108)g(])p 3747 3771 V 75 3870 V 188 3841 a(gap>)f(x:=X\(F\);;)p 3747 3870 V 75 3970 V 188 3940 a(gap>)g(R1:=PolynomialRing\(F,)q([x])q(\);;)p 3747 3970 V 75 4070 V 188 4040 a(gap>)g(vars:=IndeterminatesO)q(fPo)q (lyn)q(om)q(ial)q(Rin)q(g\(R)q(1\);)q(;)p 3747 4070 V 75 4169 V 188 4139 a(gap>)g(y:=X\(F,vars\);;)p 3747 4169 V 75 4269 V 188 4239 a(gap>)g(R2:=PolynomialRing\(F,)q([x,)q(y]\))q(;;) p 3747 4269 V 75 4369 V 188 4339 a(gap>)g(C:=GeneralizedReedSol)q(omo)q (nCo)q(de)q(\(Pt)q(s,3)q(,R1)q(\);)p 3747 4369 V 75 4468 V 188 4438 a(a)f(linear)h([15,3,1..13]10..12)91 b(generalized)46 b(Reed-Solomon)g(code)e(over)g(GF\(16\))p 3747 4468 V 75 4568 V 188 4538 a(gap>)g(MinimumDistance\(C\);)p 3747 4568 V 75 4667 V 188 4638 a(13)p 3747 4667 V 75 4767 V 188 4737 a(gap>)g(z:=Zero\(F\);)p 3747 4767 V 75 4867 V 188 4837 a(0*Z\(2\))p 3747 4867 V 75 4966 V 188 4936 a(gap>)g(r:=[z,z,z,z,z,z,z,z,b)q(\2106,)q(b\2102)q(,b)q(\2105,)q (b\2101)q(4,b)q(,b\210)q(7,b)q(\21011)q(];;)p 3747 4966 V 75 5066 V 188 5036 a(gap>)g(r:=Codeword\(r\);)p 3747 5066 V 75 5166 V 188 5136 a([)f(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h (a\21012)h(a\21014)f(a\2105)h(a\2108)f(a\2107)h(a\2104)f(a\2102)g(])p 3747 5166 V 75 5265 V 188 5235 a(gap>)h(cs:=NearestNeighborDe)q(cod)q (ewo)q(rd)q(s\(C)q(,r,)q(7\);)p 3747 5265 V 75 5365 V 188 5335 a([)f([)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h (0)g(0)g(],)p 3747 5365 V 75 5465 V 273 5435 a([)f(0)h(a\2109)g(a\2103) h(a\21013)f(a\2106)h(a\21010)f(a\21011)h(a)f(a\21012)h(a\21014)f (a\2105)h(a\2108)f(a\2107)g(a\2104)h(a\2102)f(])g(])p 3747 5465 V 75 5564 V 3747 5564 V 75 5589 4 25 v 3747 5589 V 75 5592 3675 4 v Black Black eop end end %%Page: 57 57 TeXDict begin HPSdict begin 57 56 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.57) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(57)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.10.8) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(4.10.8)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Syndr)n(ome)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(Syndrome\()50 b(C,)d(v)g(\))2584 b Fr(\(function\))p Black 216 799 a Ft(Syndrome)27 b FK(returns)g(the)f(syndrome)g(of)f(w)o(ord)h Ft(v)e FK(with)h(respect)i (to)e(a)g(linear)h(code)g Ft(C)p FK(.)33 b Ft(v)25 b FK(is)g(a)f(code)n(w)o(ord)j(in)e(the)75 912 y(ambient)i(v)o(ector)g (space)g(of)f Ft(C)q FK(.)35 b(If)26 b Ft(v)g FK(is)g(an)g(element)h (of)f Ft(C)p FK(,)g(the)g(syndrome)i(is)e(a)f(zero)i(v)o(ector)-5 b(.)37 b(The)26 b(syndrome)i(can)75 1024 y(be)j(used)g(for)g(looking)i (up)e(an)f(error)i(v)o(ector)g(in)e(the)h(syndrome)i(table)e(\(see)h Ft(SyndromeTable)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3205 1026 a SDict begin H.S end 3205 1026 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(4.10.9)p 0.0236 0.0894 0.6179 TeXcolorrgb 3431 962 a SDict begin H.R end 3431 962 a 3431 1024 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.9) cvn H.B /ANN pdfmark end 3431 1024 a Black FK(\)\))e(that)f(is)75 1137 y(needed)25 b(to)f(correct)h(an)e(error)i(in)e Fq(v)p FK(.)216 1250 y(A)g(syndrome)i(is)e(not)h(de\002ned)g(for)g(non-linear) i(codes.)k Ft(Syndrome)c FK(then)e(returns)h(an)f(error)-5 b(.)p 75 1373 1648 4 v 1764 1378 a FF(Example)p 2102 1373 V 75 1398 4 25 v 3747 1398 V 75 1497 4 100 v 188 1468 a(gap>)44 b(C)e(:=)h(HammingCode\(4\);)p 3747 1497 V 75 1597 V 188 1567 a(a)g(linear)h([15,11,3]1)i(Hamming)e(\(4,2\))h (code)e(over)h(GF\(2\))p 3747 1597 V 75 1697 V 188 1667 a(gap>)g(v)e(:=)h(CodewordNr\()j(C,)d(7)g(\);)p 3747 1697 V 75 1796 V 188 1766 a([)g(1)f(1)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(0)f (0)h(0)g(1)f(1)h(0)g(])p 3747 1796 V 75 1896 V 188 1866 a(gap>)h(Syndrome\()h(C,)e(v)g(\);)p 3747 1896 V 75 1996 V 188 1966 a([)g(0)f(0)h(0)g(0)f(])p 3747 1996 V 75 2095 V 188 2065 a(gap>)i(Syndrome\()h(C,)e(Codeword\()i("000000001100111")k (\))42 b(\);)p 3747 2095 V 75 2195 V 188 2165 a([)h(1)f(1)h(1)g(1)f(])p 3747 2195 V 75 2294 V 188 2265 a(gap>)i(Syndrome\()h(C,)e(Codeword\()i ("000000000000001")k(\))42 b(\);)p 3747 2294 V 75 2394 V 188 2364 a([)h(1)f(1)h(1)g(1)f(])170 b(#)43 b(the)g(same)h(syndrome:) h(both)f(codewords)h(are)f(in)f(the)g(same)p 3747 2394 V 75 2494 V 823 2464 a(#)g(coset)h(of)f(C)p 3747 2494 V 75 2519 4 25 v 3747 2519 V 75 2522 3675 4 v 75 2655 a SDict begin H.S end 75 2655 a 75 2655 a SDict begin 13.6 H.A end 75 2655 a 75 2655 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.10.9) cvn H.B /DEST pdfmark end 75 2655 a 116 x FJ(4.10.9)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Syndr)n(omeT)-9 b(able)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2945 a Fs(\006)22 b Ft(SyndromeTable\()52 b(C)47 b(\))2491 b Fr(\(function\))p Black 216 3171 a Ft(SyndromeTable)38 b FK(returns)d(a)f Fq(syndr)l(ome)h(table)g FK(of)f(a)f(linear)i(code)g Ft(C)p FK(,)h(consisting)g(of)e(tw)o(o)g(columns.)61 b(The)75 3284 y(\002rst)27 b(column)i(consists)h(of)e(the)g(error)g(v)o (ectors)h(that)f(correspond)j(to)d(the)g(syndrome)h(v)o(ectors)h(in)d (the)h(second)i(col-)75 3397 y(umn.)36 b(These)26 b(v)o(ectors)h(both)g (are)f(of)g(the)g(code)n(w)o(ord)i(type.)36 b(After)26 b(calculating)k(the)c(syndrome)h(of)f(a)g(w)o(ord)g Ft(v)f FK(with)75 3510 y Ft(Syndrome)f FK(\(see)f Ft(Syndrome)h FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1057 3511 a SDict begin H.S end 1057 3511 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.10.8)p 0.0236 0.0894 0.6179 TeXcolorrgb 1283 3448 a SDict begin H.R end 1283 3448 a 1283 3510 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.8) cvn H.B /ANN pdfmark end 1283 3510 a Black FK(\)\),)f(the)g(error)g(v)o(ector)g (needed)h(to)e(correct)h Ft(v)f FK(can)h(be)f(found)h(in)f(the)g (syndrome)75 3623 y(table.)35 b(Subtracting)27 b(this)f(v)o(ector)g (from)f Ft(v)g FK(yields)h(an)g(element)g(of)f Ft(C)p FK(.)33 b(T)-7 b(o)24 b(mak)o(e)i(the)f(search)i(for)e(the)g(syndrome)i (as)75 3736 y(f)o(ast)d(as)g(possible,)h(the)f(syndrome)h(table)g(is)e (sorted)i(according)h(to)d(the)h(syndrome)i(v)o(ectors.)p 75 3858 1648 4 v 1764 3863 a FF(Example)p 2102 3858 V 75 3883 4 25 v 3747 3883 V 75 3983 4 100 v 188 3953 a(gap>)44 b(H)e(:=)h(HammingCode\(2\);)p 3747 3983 V 75 4083 V 188 4053 a(a)g(linear)h([3,1,3]1)h(Hamming)g(\(2,2\))f(code)g(over)f (GF\(2\))p 3747 4083 V 75 4182 V 188 4152 a(gap>)h(SyndromeTable\(H\);) p 3747 4182 V 75 4282 V 188 4252 a([)f([)f([)h(0)g(0)f(0)h(],)g([)g(0)f (0)h(])g(],)g([)f([)h(1)g(0)g(0)f(],)h([)g(0)g(1)f(])h(],)p 3747 4282 V 75 4381 V 273 4351 a([)f([)h(0)g(1)f(0)h(],)g([)g(1)f(0)h (])g(],)g([)f([)h(0)g(0)g(1)f(],)h([)g(1)g(1)f(])h(])g(])p 3747 4381 V 75 4481 V 188 4451 a(gap>)h(c)e(:=)h(Codeword\("101"\);)p 3747 4481 V 75 4581 V 188 4551 a([)g(1)f(0)h(1)g(])p 3747 4581 V 75 4680 V 188 4650 a(gap>)h(c)e(in)h(H;)p 3747 4680 V 75 4780 V 188 4750 a(false)425 b(#)43 b(c)f(is)h(not)h(an)f (element)i(of)e(H)p 3747 4780 V 75 4880 V 188 4850 a(gap>)h (Syndrome\(H,c\);)p 3747 4880 V 75 4979 V 188 4949 a([)f(1)f(0)h(])339 b(#)43 b(according)i(to)e(the)h(syndrome)h(table,)p 3747 4979 V 75 5079 V 823 5049 a(#)e(the)g(error)h(vector)h([)d(0)h(1)g(0)f (])h(belongs)i(to)e(this)g(syndrome)p 3747 5079 V 75 5178 V 188 5149 a(gap>)h(c)e(-)h(Codeword\("010"\))k(in)c(H;)p 3747 5178 V 75 5278 V 188 5248 a(true)467 b(#)43 b(so)g(the)g (corrected)j(codeword)f(is)p 3747 5278 V 75 5378 V 823 5348 a(#)e([)f(1)h(0)g(1)f(])h(-)g([)f(0)h(1)g(0)g(])f(=)h([)g(1)f(1)h (1)g(],)p 3747 5378 V 75 5477 V 823 5447 a(#)g(this)g(is)g(an)g (element)i(of)e(H)p 3747 5477 V 75 5502 4 25 v 3747 5502 V 75 5505 3675 4 v Black Black eop end end %%Page: 58 58 TeXDict begin HPSdict begin 58 57 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.58) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(58)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.10.10) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(4.10.10)p 0.0 0.0 1.0 TeXcolorrgb 99 w(StandardArray)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(StandardArray\()52 b(C)47 b(\))2491 b Fr(\(function\))p Black 216 799 a Ft(StandardArray)37 b FK(returns)e(the)f(standard)h(array)f(of)g(a)e(code)j Ft(C)p FK(.)57 b(This)33 b(is)g(a)g(matrix)h(with)f(elements)i(of)e (the)75 912 y(code)n(w)o(ord)27 b(type.)37 b(It)25 b(has)i Fq(q)942 879 y Fm(r)999 912 y FK(ro)n(ws)e(and)i Fq(q)1400 879 y Fm(k)1460 912 y FK(columns,)g(where)g Fq(q)e FK(is)h(the)g(size)g (of)g(the)g(base)h(\002eld)f(of)f Ft(C)q FK(,)g Fq(r)f Fo(=)d Fq(n)13 b Fv(\000)g Fq(k)28 b FK(is)75 1024 y(the)f(redundanc)o (y)j(of)d Ft(C)q FK(,)g(and)g Fq(k)h FK(is)f(the)h(dimension)h(of)e Ft(C)p FK(.)38 b(The)27 b(\002rst)g(ro)n(w)f(contains)j(all)f(the)f (elements)h(of)f Ft(C)q FK(.)38 b(Each)75 1137 y(other)21 b(ro)n(w)f(contains)i(w)o(ords)f(that)f(do)h(not)f(belong)i(to)e(the)g (code,)i(with)e(in)g(the)g(\002rst)g(column)h(their)g(syndrome)h(v)o (ector)75 1250 y(\(see)i Ft(Syndrome)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 668 1251 a SDict begin H.S end 668 1251 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.10.8)p 0.0236 0.0894 0.6179 TeXcolorrgb 894 1188 a SDict begin H.R end 894 1188 a 894 1250 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.8) cvn H.B /ANN pdfmark end 894 1250 a Black FK(\)\).)216 1363 y(A)d(non-linear)j(code)e(does)h(not)e(ha)n(v)o(e)i(a)e(standard)i (array)-6 b(.)30 b Ft(StandardArray)e FK(then)c(returns)h(an)f(error)-5 b(.)216 1476 y(Note)24 b(that)g(calculating)i(a)d(standard)j(array)f (can)e(be)h(v)o(ery)g(time-)g(and)g(memory-)g(consuming.)p 75 1595 1648 4 v 1764 1600 a FF(Example)p 2102 1595 V 75 1620 4 25 v 3747 1620 V 75 1720 4 100 v 188 1690 a(gap>)44 b(StandardArray\(Repetit)q(ion)q(Cod)q(e\()q(3\)\))q(;)p 3747 1720 V 75 1819 V 188 1789 a([)f([)f([)h(0)g(0)f(0)h(],)g([)g(1)f (1)h(1)g(])f(],)h([)g([)g(0)g(0)f(1)h(],)g([)g(1)f(1)h(0)g(])f(],)p 3747 1819 V 75 1919 V 273 1889 a([)g([)h(0)g(1)f(0)h(],)g([)g(1)f(0)h (1)g(])f(],)h([)g([)g(1)g(0)f(0)h(],)g([)g(0)f(1)h(1)g(])f(])h(])p 3747 1919 V 75 1944 4 25 v 3747 1944 V 75 1947 3675 4 v 75 2079 a SDict begin H.S end 75 2079 a 75 2079 a SDict begin 13.6 H.A end 75 2079 a 75 2079 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.10.11) cvn H.B /DEST pdfmark end 75 2079 a 117 x FJ(4.10.11)p 0.0 0.0 1.0 TeXcolorrgb 99 w(P)n(ermutationDecode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2370 a Fs(\006)22 b Ft(PermutationDecode)q(\()52 b(C,)47 b(v)g(\))2167 b Fr(\(function\))p Black 216 2596 a Ft (PermutationDecode)35 b FK(performs)c(permutation)h(decoding)g(when)d (possible)j(and)e(returns)h(original)g(v)o(ector)75 2709 y(and)24 b(prints)h('f)o(ail')f(when)g(not)g(possible.)216 2822 y(This)141 b(uses)h Ft(AutomorphismGroup)k FK(in)141 b(the)g(binary)i(case,)171 b(and)141 b(\(the)h(slo)n(wer\))75 2935 y Ft(PermutationAutomor)q(phi)q(smG)q(rou)q(p)40 b FK(otherwise,)f(to)34 b(compute)i(the)f(permutation)i(automorphism)h (group)d Fq(P)75 3047 y FK(of)27 b Ft(C)q FK(.)39 b(The)27 b(algorithm)i(runs)f(through)i(the)d(elements)36 b Fq(p)27 b FK(of)g Fq(P)f FK(checking)k(if)d(the)h(weight)g(of)f Fq(H)7 b Fo(\()g Fq(p)14 b Fv(\001)g Fq(v)p Fo(\))27 b FK(is)h(less)f(than)75 3160 y Fo(\()p Fq(d)22 b Fv(\000)17 b FK(1)p Fo(\))p Fp(=)p FK(2.)63 b(If)35 b(it)f(is)h(then)g(the)g(v)o (ector)43 b Fq(p)17 b Fv(\001)g Fq(v)35 b FK(is)f(used)i(to)f(decode)h Fq(v)p FK(:)52 b(assuming)36 b Ft(C)e FK(is)h(in)g(standard)i(form)d (then)75 3273 y Fq(c)23 b Fo(=)30 b Fq(p)284 3240 y Fh(\000)p Fr(1)373 3273 y Fq(E)7 b(m)26 b FK(is)j(the)f(decoded)j(w)o(ord,)e (where)g Fq(m)e FK(is)h(the)h(information)i(digits)e(part)g(of)36 b Fq(p)14 b Fv(\001)g Fq(v)p FK(.)44 b(If)28 b(no)g(such)36 b Fq(p)28 b FK(e)o(xists)75 3386 y(then)23 b(\223f)o(ail\224)h(is)f (returned.)30 b(See,)23 b(for)f(e)o(xample,)i(section)g(10.2)f(of)g (Huf)n(fman)g(and)g(Pless)g([)p 0.0236 0.6179 0.0894 TeXcolorrgb 2866 3387 a SDict begin H.S end 2866 3387 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(HP03)p 0.0236 0.6179 0.0894 TeXcolorrgb 3073 3324 a SDict begin H.R end 3073 3324 a 3073 3386 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.HP03) cvn H.B /ANN pdfmark end 3073 3386 a Black FK(])f(for)h(more)g(details.)p 75 3505 1648 4 v 1764 3510 a FF(Example)p 2102 3505 V 75 3530 4 25 v 3747 3530 V 75 3630 4 100 v 188 3600 a(gap>)44 b(C0:=HammingCode\(3,GF\()q(2\)\)) q(;)p 3747 3630 V 75 3729 V 188 3699 a(a)f(linear)h([7,4,3]1)h(Hamming) g(\(3,2\))f(code)g(over)f(GF\(2\))p 3747 3729 V 75 3829 V 188 3799 a(gap>)h(G0:=GeneratorMat\(C0\);)q(;)p 3747 3829 V 75 3929 V 188 3899 a(gap>)g(G)e(:=)h(List\(G0,)i (ShallowCopy\);;)p 3747 3929 V 75 4028 V 188 3998 a(gap>)f (PutStandardForm\(G\);)p 3747 4028 V 75 4128 V 188 4098 a(\(\))p 3747 4128 V 75 4227 V 188 4198 a(gap>)g(Display\(G\);)p 3747 4227 V 75 4327 V 230 4297 a(1)f(.)g(.)f(.)h(.)g(1)f(1)p 3747 4327 V 75 4427 V 230 4397 a(.)h(1)g(.)f(.)h(1)g(.)f(1)p 3747 4427 V 75 4526 V 230 4496 a(.)h(.)g(1)f(.)h(1)g(1)f(.)p 3747 4526 V 75 4626 V 230 4596 a(.)h(.)g(.)f(1)h(1)g(1)f(1)p 3747 4626 V 75 4726 V 188 4696 a(gap>)i(H0:=CheckMat\(C0\);;)p 3747 4726 V 75 4825 V 188 4795 a(gap>)g(Display\(H0\);)p 3747 4825 V 75 4925 V 230 4895 a(.)f(.)g(.)f(1)h(1)g(1)f(1)p 3747 4925 V 75 5024 V 230 4995 a(.)h(1)g(1)f(.)h(.)g(1)f(1)p 3747 5024 V 75 5124 V 230 5094 a(1)h(.)g(1)f(.)h(1)g(.)f(1)p 3747 5124 V 75 5224 V 188 5194 a(gap>)i(c0:=Random\(C0\);)p 3747 5224 V 75 5323 V 188 5293 a([)f(0)f(0)h(0)g(1)f(1)h(1)g(1)f(])p 3747 5323 V 75 5423 V 188 5393 a(gap>)i(v01:=c0[1]+Z\(2\)\2102;;)p 3747 5423 V 75 5523 V 188 5493 a(gap>)g(v1:=List\(c0,)i (ShallowCopy\);;)p 3747 5523 V 75 5622 V 188 5592 a(gap>)e (v1[1]:=v01;;)p 3747 5622 V Black Black eop end end %%Page: 59 59 TeXDict begin HPSdict begin 59 58 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.59) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(59)p Black 75 428 4 100 v 188 399 a FF(gap>)44 b(v1:=Codeword\(v1\);)p 3747 428 V 75 528 V 188 498 a([)f(1)f(0)h(0)g (1)f(1)h(1)g(1)f(])p 3747 528 V 75 628 V 188 598 a(gap>)i (c1:=PermutationDecode)q(\(C0)q(,v1)q(\);)p 3747 628 V 75 727 V 188 697 a([)f(0)f(0)h(0)g(1)f(1)h(1)g(1)f(])p 3747 727 V 75 827 V 188 797 a(gap>)i(c1=c0;)p 3747 827 V 75 927 V 188 897 a(true)p 3747 927 V 75 951 4 25 v 3747 951 V 75 954 3675 4 v 75 1088 a SDict begin H.S end 75 1088 a 75 1088 a SDict begin 13.6 H.A end 75 1088 a 75 1088 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.10.12) cvn H.B /DEST pdfmark end 75 1088 a 116 x FJ(4.10.12)p 0.0 0.0 1.0 TeXcolorrgb 99 w(P)n(ermutationDecodeNC)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1378 a Fs(\006)22 b Ft(PermutationDecode)q(NC\()53 b(C,)47 b(v,)g(P)g(\))1935 b Fr(\(function\))p Black 216 1604 a FK(Same)24 b(as)i Ft(PermutationDecode)k FK(e)o(xcept)c (that)g(one)g(may)e(enter)j(the)e(permutation)j(automorphism)f(group)g Ft(P)75 1717 y FK(in)e(as)h(an)f(ar)n(gument,)j(sa)n(ving)f(time.)35 b(Here)25 b Ft(P)g FK(is)g(a)g(subgroup)j(of)e(the)f(symmetric)i(group) g(on)e Fq(n)g FK(letters,)i(where)f Fq(n)f FK(is)75 1830 y(the)f(w)o(ord)f(length)i(of)f Ft(C)p FK(.)p Black Black eop end end %%Page: 60 60 TeXDict begin HPSdict begin 60 59 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.60) cvn H.B /DEST pdfmark end 75 100 a Black Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (chapter.5) cvn H.B /DEST pdfmark end 75 307 a 714 x Fw(Chapter)44 b(5)p 0.0 0.0 1.0 TeXcolorrgb 75 1436 a FA(Generating)51 b(Codes)p Black 75 1881 a FK(In)23 b(this)i(chapter)g (we)e(describe)i(functions)h(for)e(generating)i(codes.)216 1994 y(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 512 1995 a SDict begin H.S end 512 1995 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 625 1932 a SDict begin H.R end 625 1932 a 625 1994 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.5.1) cvn H.B /ANN pdfmark end 625 1994 a Black 23 w FK(describes)g(functions) g(for)e(generating)i(unrestricted)h(codes.)216 2107 y(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 512 2108 a SDict begin H.S end 512 2108 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 625 2045 a SDict begin H.R end 625 2045 a 625 2107 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.5.2) cvn H.B /ANN pdfmark end 625 2107 a Black 23 w FK(describes)f(functions)g(for)e(generating)i(linear)f (codes.)216 2220 y(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 522 2221 a SDict begin H.S end 522 2221 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 635 2158 a SDict begin H.R end 635 2158 a 635 2220 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.5.3) cvn H.B /ANN pdfmark end 635 2220 a Black 35 w FK(describes)37 b(functions)g(for)d(constructing)k(certain)e(co)o(v)o(ering)g(codes,)i (such)d(as)g(the)f(Gabidulin)75 2333 y(codes.)216 2446 y(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 512 2447 a SDict begin H.S end 512 2447 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 625 2384 a SDict begin H.R end 625 2384 a 625 2446 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.5.4) cvn H.B /ANN pdfmark end 625 2446 a Black 23 w FK(describes)26 b(functions)g(for)e (constructing)j(the)d(Golay)g(codes.)216 2559 y(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 512 2560 a SDict begin H.S end 512 2560 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.5)p 0.0236 0.0894 0.6179 TeXcolorrgb 625 2497 a SDict begin H.R end 625 2497 a 625 2559 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.5.5) cvn H.B /ANN pdfmark end 625 2559 a Black 23 w FK(describes)i(functions)g(for)e(generating)i(c)o(yclic)f (codes.)216 2672 y(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 518 2673 a SDict begin H.S end 518 2673 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.6)p 0.0236 0.0894 0.6179 TeXcolorrgb 631 2610 a SDict begin H.R end 631 2610 a 631 2672 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.5.6) cvn H.B /ANN pdfmark end 631 2672 a Black 29 w FK(describes)33 b(functions)f(for)e(generating)j(codes)d(as)g(the)g(image)g(of)g(an)g (e)n(v)n(aluation)i(map)d(applied)75 2785 y(to)24 b(a)g(space)h(of)f (functions.)34 b(F)o(or)23 b(e)o(xample,)i(generalized)j(Reed-Solomon)e (codes)f(and)g(toric)g(codes)g(are)g(described)75 2897 y(there.)75 3042 y SDict begin H.S end 75 3042 a 75 3042 a SDict begin 13.6 H.A end 75 3042 a 75 3042 a SDict begin [ /View [/XYZ H.V] /Dest (section.5.1) cvn H.B /DEST pdfmark end 75 3042 a 148 x FM(5.1)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Generating)31 b(Unr)n(estricted)f(Codes)p Black 75 3397 a FK(In)20 b(this)g(section)i(we)d(start)i(with)f(functions)i (that)f(creating)h(code)f(from)f(user)g(de\002ned)h(matrices)g(or)f (special)i(matrices)75 3510 y(\(see)h Ft(ElementsCode)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 851 3511 a SDict begin H.S end 851 3511 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.1.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 1032 3448 a SDict begin H.R end 1032 3448 a 1032 3510 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.1) cvn H.B /ANN pdfmark end 1032 3510 a Black FK(\),)d Ft(HadamardCode)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1717 3511 a SDict begin H.S end 1717 3511 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.1.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 1898 3448 a SDict begin H.R end 1898 3448 a 1898 3510 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.2) cvn H.B /ANN pdfmark end 1898 3510 a Black FK(\),)c Ft(ConferenceCode)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2675 3511 a SDict begin H.S end 2675 3511 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.1.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 2856 3448 a SDict begin H.R end 2856 3448 a 2856 3510 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.3) cvn H.B /ANN pdfmark end 2856 3510 a Black FK(\))c(and)g Ft(MOLSCode)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3485 3511 a SDict begin H.S end 3485 3511 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.1.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 3666 3448 a SDict begin H.R end 3666 3448 a 3666 3510 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.4) cvn H.B /ANN pdfmark end 3666 3510 a Black FK(\)\).)75 3623 y(These)f(codes)h(are) e(unrestricted)k(codes;)e(the)o(y)f(may)f(later)i(be)e(disco)o(v)o (ered)j(to)d(be)h(linear)h(or)e(c)o(yclic.)216 3736 y(The)c(ne)o(xt)i (functions)h(generate)g(random)e(codes)h(\(see)g Ft(RandomCode)h FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2435 3737 a SDict begin H.S end 2435 3737 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.1.5)p 0.0236 0.0894 0.6179 TeXcolorrgb 2616 3674 a SDict begin H.R end 2616 3674 a 2616 3736 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.5) cvn H.B /ANN pdfmark end 2616 3736 a Black FK(\)\))f(and)f(the)g (Nordstrom-Robinson)75 3849 y(code)k(\(see)g Ft(NordstromRobinson)q (Cod)q(e)29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1465 3850 a SDict begin H.S end 1465 3850 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.1.6)p 0.0236 0.0894 0.6179 TeXcolorrgb 1646 3787 a SDict begin H.R end 1646 3787 a 1646 3849 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.6) cvn H.B /ANN pdfmark end 1646 3849 a Black FK(\)\),)24 b(respecti)n(v)o(ely)-6 b(.)216 3962 y(Finally)g(,)27 b(we)e(describe)j(tw)o(o)d(functions)k(for)c(generating)k(Greedy)e (codes.)36 b(These)26 b(are)g(codes)h(that)f(contructed)75 4075 y(by)e(gathering)h(code)n(w)o(ords)h(from)d(a)g(space)i(\(see)f Ft(GreedyCode)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2140 4076 a SDict begin H.S end 2140 4076 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.1.7)p 0.0236 0.0894 0.6179 TeXcolorrgb 2321 4013 a SDict begin H.R end 2321 4013 a 2321 4075 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.7) cvn H.B /ANN pdfmark end 2321 4075 a Black FK(\))e(and)g Ft(LexiCode)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2953 4076 a SDict begin H.S end 2953 4076 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.1.8)p 0.0236 0.0894 0.6179 TeXcolorrgb 3134 4013 a SDict begin H.R end 3134 4013 a 3134 4075 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.8) cvn H.B /ANN pdfmark end 3134 4075 a Black FK(\)\).)75 4227 y SDict begin H.S end 75 4227 a 75 4227 a SDict begin 13.6 H.A end 75 4227 a 75 4227 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.1.1) cvn H.B /DEST pdfmark end 75 4227 a 97 x FJ(5.1.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(ElementsCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4498 a Fs(\006)c Ft(ElementsCode\()51 b(L[,)d(name,])g(F)f(\))2028 b Fr(\(function\))p Black 216 4724 a Ft(ElementsCode)32 b FK(creates)e(an)e(unrestricted)k(code)d (of)f(the)h(list)f(of)g(elements)i Ft(L)p FK(,)f(in)f(the)h(\002eld)f Ft(F)p FK(.)42 b Ft(L)28 b FK(must)g(be)h(a)75 4837 y(list)24 b(of)f(v)o(ectors,)i(strings,)g(polynomials)h(or)e(code)n(w)o(ords.)30 b Ft(name)24 b FK(can)g(contain)i(a)d(short)h(description)j(of)c(the)h (code.)216 4950 y(If)f Ft(L)g FK(contains)j(a)d(code)n(w)o(ord)i(more)f (than)g(once,)g(it)f(is)h(remo)o(v)o(ed)g(from)f(the)h(list)g(and)g(a)f Fy(GAP)f FK(set)h(is)h(returned.)p 75 5065 1648 4 v 1764 5070 a FF(Example)p 2102 5065 V 75 5090 4 25 v 3747 5090 V 75 5190 4 100 v 188 5160 a(gap>)44 b(M)e(:=)h(Z\(3\)\2100)i(*)d([)h ([1,)g(0,)g(1,)g(1],)h([2,)f(2,)g(0,)g(0],)h([0,)f(1,)g(2,)g(2])g(];;)p 3747 5190 V 75 5290 V 188 5260 a(gap>)h(C)e(:=)h(ElementsCode\()k(M,)c ("example)i(code",)g(GF\(3\))f(\);)p 3747 5290 V 75 5389 V 188 5359 a(a)f(\(4,3,1..4\)2)j(example)e(code)g(over)g(GF\(3\))p 3747 5389 V 75 5489 V 188 5459 a(gap>)g(MinimumDistance\()j(C)c(\);)p 3747 5489 V 75 5588 V 188 5559 a(4)p 3747 5588 V Black 1867 5841 a FK(60)p Black eop end end %%Page: 61 61 TeXDict begin HPSdict begin 61 60 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.61) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(61)p Black 75 428 4 100 v 188 399 a FF(gap>)44 b(AsSSortedList\()j(C)42 b(\);)p 3747 428 V 75 528 V 188 498 a([)h([)f(0)h(1)g(2)f(2)h(],)g([)g(1)f(0)h(1)g(1)f(],)h([)g(2)g (2)g(0)f(0)h(])g(])p 3747 528 V 75 553 4 25 v 3747 553 V 75 556 3675 4 v 75 789 a SDict begin H.S end 75 789 a 75 789 a SDict begin 13.6 H.A end 75 789 a 75 789 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.1.2) cvn H.B /DEST pdfmark end 75 789 a 116 x FJ(5.1.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(HadamardCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1079 a Fs(\006)22 b Ft(HadamardCode\()51 b(H[,)d(t])f(\))2306 b Fr(\(function\))p Black 216 1305 a FK(The)68 b(four)i(forms)f(this)g (command)g(can)g(tak)o(e)h(are)f Ft(HadamardCode\(H,t\))p FK(,)85 b Ft(HadamardCode\(H\))p FK(,)75 1418 y Ft(HadamardCode\(n,t\)) p FK(,)29 b(and)24 b Ft(HadamardCode\(n\))p FK(.)216 1531 y(In)h(the)g(case)h(when)f(the)h(ar)n(guments)h Ft(H)e FK(and)g Ft(t)g FK(are)g(both)h(gi)n(v)o(en,)g Ft(HadamardCode)i FK(returns)f(a)d(Hadamard)i(code)75 1644 y(of)d(the)f Fq(t)334 1611 y Fm(t)5 b(h)418 1644 y FK(kind)24 b(from)g(the)f(Hadamard)i(matrix)f Ft(H)f FK(In)g(case)i(only)f Ft(H)f FK(is)g(gi)n(v)o(en,)f Fq(t)27 b Fo(=)20 b FK(3)j(is)g(used.)216 1757 y(By)j(de\002nition,)j(a)e (Hadamard)g(matrix)h(is)e(a)h(square)h(matrix)f Ft(H)g FK(with)f Fq(H)20 b Fv(\001)14 b Fq(H)2618 1724 y Fm(T)2689 1757 y Fo(=)21 b Fv(\000)p Fq(n)14 b Fv(\001)g Fq(I)2978 1771 y Fm(n)3016 1757 y FK(,)26 b(where)h Fq(n)g FK(is)g(the)g(size)75 1870 y(of)c Ft(H)q FK(.)28 b(The)23 b(entries)i(of)e Ft(H)g FK(are)h(either)h(1)e(or)h(-1.)216 1983 y(The)h(matrix)g Ft(H)g FK(is)g(\002rst)g(transformed)i(into)f(a)e(binary)j(matrix)e Fq(A)2232 1997 y Fm(n)2294 1983 y FK(by)g(replacing)i(the)f(1')-5 b(s)25 b(by)g(0')-5 b(s)25 b(and)h(the)f Fv(\000)p FK(1')-5 b(s)75 2096 y(by)24 b(1s\).)216 2208 y(The)e(Hadamard)i(matrix)f(of)f (the)h Fq(\002r)o(st)h(kind)h FK(\()n Fq(t)h Fo(=)19 b FK(1\))k(is)f(created)i(by)f(using)h(the)f(ro)n(ws)f(of)g Fq(A)3059 2222 y Fm(n)3118 2208 y FK(as)h(elements,)g(after)75 2321 y(deleting)29 b(the)d(\002rst)g(column.)39 b(This)26 b(is)h(a)f Fo(\()p Fq(n)14 b Fv(\000)g FK(1)p Fp(;)c Fq(n)p Fp(;)g Fq(n)p Fp(=)p FK(2)p Fo(\))28 b FK(code.)39 b(W)-7 b(e)25 b(use)i(this)g(code)g(for)g(creating)i(the)d(Hadamard)75 2434 y(code)20 b(of)f(the)h Fq(second)g(kind)j FK(\()n Fq(t)f Fo(=)16 b FK(2\),)k(by)f(adding)i(all)e(the)h(complements)h(of)e (the)g(already)i(e)o(xisting)g(code)n(w)o(ords.)29 b(This)75 2547 y(results)23 b(in)e(a)g Fo(\()p Fq(n)11 b Fv(\000)g FK(1)p Fp(;)f FK(2)p Fq(n)p Fp(;)g Fq(n)p Fp(=)p FK(2)h Fv(\000)g FK(1)p Fo(\))22 b FK(code.)29 b(The)21 b Fq(thir)m(d)h(kind)i FK(\()n Fq(t)h Fo(=)18 b FK(3\))j(is)g(created)i(by)e(using)i(the)e(ro) n(ws)g(of)h Fq(A)3385 2561 y Fm(n)3442 2547 y FK(\(without)75 2660 y(cutting)29 b(a)f(column\))h(and)f(their)g(complements)i(as)e (elements.)42 b(This)28 b(w)o(ay)-6 b(,)28 b(we)f(ha)n(v)o(e)i(an)e Fo(\()p Fq(n)p Fp(;)10 b FK(2)p Fq(n)p Fp(;)g Fq(n)p Fp(=)p FK(2)p Fo(\))p FK(-code.)47 b(The)75 2773 y(returned)26 b(code)e(is)f(generally)j(an)e(unrestricted)j(code,)d(b)n(ut)g(for)g Fq(n)c Fo(=)g FK(2)2284 2740 y Fm(r)2316 2773 y FK(,)j(the)g(code)i(is) e(linear)-5 b(.)216 2886 y(The)29 b(command)h Ft(HadamardCode\(n,t\))35 b FK(returns)c(a)e(Hadamard)h(code)h(with)e(parameter)i Ft(n)e FK(of)g(the)f Fq(t)3476 2853 y Fm(t)5 b(h)3566 2886 y FK(kind.)75 2999 y(F)o(or)23 b(the)g(command)i Ft(HadamardCode\(n\))p FK(,)h Fq(t)g Fo(=)20 b FK(3)j(is)g(used.)216 3112 y(When)30 b(called)g(in)g(these)g(forms,)h Ft(HadamardCode)i FK(\002rst)c(creates)i(a)e(Hadamard)h(matrix)g(\(see)g Ft(HadamardMat)75 3225 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 3226 a SDict begin H.S end 105 3226 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 286 3163 a SDict begin H.R end 286 3163 a 286 3225 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.4) cvn H.B /ANN pdfmark end 286 3225 a Black FK(\)\),)41 b(of)c(size)g Ft(n)g FK(and)h(then)f(follo)n(ws)h(the)f(same)g (procedure)j(as)d(described)j(abo)o(v)o(e.)69 b(Therefore)39 b(the)e(same)75 3338 y(restrictions)27 b(with)c(respect)i(to)f Ft(n)f FK(as)g(for)h(Hadamard)g(matrices)h(hold.)p 75 3460 1648 4 v 1764 3465 a FF(Example)p 2102 3460 V 75 3485 4 25 v 3747 3485 V 75 3585 4 100 v 188 3555 a(gap>)44 b(H4)f(:=)g([[1,1,1,1],[1,-1,1,-1)q(],)q([1,)q(1,-)q(1,-)q(1],)q([1,)q (-1,)q(-1,)q(1]])q(;;)p 3747 3585 V 75 3684 V 188 3654 a(gap>)h(HadamardCode\()i(H4,)e(1)e(\);)p 3747 3684 V 75 3784 V 188 3754 a(a)h(\(3,4,2\)1)i(Hadamard)g(code)e(of)g(order)i(4) d(over)i(GF\(2\))p 3747 3784 V 75 3884 V 188 3854 a(gap>)g (HadamardCode\()i(H4,)e(2)e(\);)p 3747 3884 V 75 3983 V 188 3953 a(a)h(\(3,8,1\)0)i(Hadamard)g(code)e(of)g(order)i(4)d(over)i (GF\(2\))p 3747 3983 V 75 4083 V 188 4053 a(gap>)g(HadamardCode\()i(H4) d(\);)p 3747 4083 V 75 4182 V 188 4153 a(a)g(\(4,8,2\)1)i(Hadamard)g (code)e(of)g(order)i(4)d(over)i(GF\(2\))p 3747 4182 V 75 4282 V 188 4252 a(gap>)g(H4)f(:=)g([[1,1,1,1],[1,-1,1,-1)q(],)q([1,) q(1,-)q(1,-)q(1],)q([1,)q(-1,)q(-1,)q(1]])q(;;)p 3747 4282 V 75 4382 V 188 4352 a(gap>)h(C)e(:=)h(HadamardCode\()k(4)c(\);)p 3747 4382 V 75 4481 V 188 4451 a(a)g(\(4,8,2\)1)i(Hadamard)g(code)e(of) g(order)i(4)d(over)i(GF\(2\))p 3747 4481 V 75 4581 V 188 4551 a(gap>)g(C)e(=)h(HadamardCode\()k(H4)c(\);)p 3747 4581 V 75 4681 V 188 4651 a(true)p 3747 4681 V 75 4705 4 25 v 3747 4705 V 75 4708 3675 4 v 75 4941 a SDict begin H.S end 75 4941 a 75 4941 a SDict begin 13.6 H.A end 75 4941 a 75 4941 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.1.3) cvn H.B /DEST pdfmark end 75 4941 a 117 x FJ(5.1.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Confer)n(enceCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5232 a Fs(\006)22 b Ft(ConferenceCode\()52 b(H)47 b(\))2445 b Fr(\(function\))p Black 216 5458 a Ft(ConferenceCode)24 b FK(returns)d(a)d(code)j(of)e (length)i Fq(n)9 b Fv(\000)g FK(1)18 b(constructed)23 b(from)c(a)g(symmetric)h('conference)i(matrix')75 5571 y Ft(H)p FK(.)32 b(A)24 b Fq(confer)m(ence)k(matrix)e Ft(H)e FK(is)h(a)f(symmetric)i(matrix)g(of)f(order)h Fq(n)p FK(,)e(which)i(satis\002es)g Fq(H)19 b Fv(\001)13 b Fq(H)3000 5538 y Fm(T)3070 5571 y Fo(=)20 b(\(\()p Fq(n)13 b Fv(\000)g FK(1)p Fo(\))g Fv(\001)g Fq(I)5 b FK(,)26 b(with)p Black Black eop end end %%Page: 62 62 TeXDict begin HPSdict begin 62 61 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.62) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(62)p Black 75 399 a Fq(n)23 b Fv(\021)e FK(2)92 b Fo(\()p FK(mod)21 b(4)p Fo(\))p FK(.)39 b(The)27 b(ro)n(ws)f(of)1211 363 y Fr(1)p 1211 378 34 4 v 1211 430 a(2)1255 399 y Fo(\()p Fq(H)20 b Fo(+)14 b Fq(I)k Fo(+)c Fq(J)5 b Fo(\))p FK(,)1734 363 y Fr(1)p 1734 378 V 1734 430 a(2)1777 399 y Fo(\()p Fv(\000)p Fq(H)20 b Fo(+)14 b Fq(I)k Fo(+)c Fq(J)5 b Fo(\))p FK(,)26 b(plus)i(the)f(zero)h (and)g(all-ones)h(v)o(ectors)f(form)75 511 y(the)c(elements)h(of)e(a)g (binary)i(non-linear)i Fo(\()p Fq(n)13 b Fv(\000)g FK(1)p Fp(;)d FK(2)p Fq(n)p Fp(;)g Fo(\()p Fq(n)j Fv(\000)g FK(2)p Fo(\))p Fp(=)p FK(2)p Fo(\))25 b FK(code.)216 624 y Fy(GU)m(A)-6 b(V)f(A)26 b FK(constructs)k(a)e(symmetric)g (conference)j(matrix)d(of)f(order)i Fq(n)14 b Fo(+)g FK(1)28 b(\()p Fq(n)23 b Fv(\021)f FK(1)91 b Fo(\()p FK(mod)22 b(4)p Fo(\))p FK(\))27 b(and)i(uses)f(the)75 737 y(ro)n(ws)35 b(of)h(that)g(matrix,)i(plus)f(the)e(zero)h(and)g (all-ones)i(v)o(ectors,)h(to)d(construct)i(a)d(binary)i(non-linear)h Fo(\()p Fq(n)p Fp(;)10 b FK(2)p Fo(\()p Fq(n)19 b Fo(+)75 850 y FK(1)p Fo(\))p Fp(;)10 b Fo(\()p Fq(n)j Fv(\000)g FK(1)p Fo(\))p Fp(=)p FK(2)p Fo(\))p FK(-code.)p 75 976 1648 4 v 1764 981 a FF(Example)p 2102 976 V 75 1001 4 25 v 3747 1001 V 75 1100 4 100 v 188 1070 a(gap>)44 b(H6)f(:=)g ([[0,1,1,1,1,1],[1,0,1)q(,-)q(1,-)q(1,1)q(],[)q(1,1)q(,0,)q(1,-)q(1,-)q (1],)p 3747 1100 V 75 1200 V 188 1170 a(>)g([1,-1,1,0,1,-1],[1,-1)q (,-1)q(,1,)q(0,1)q(],)q([1,)q(1,-)q(1,-)q(1,1)q(,0])q(];;)p 3747 1200 V 75 1300 V 188 1270 a(gap>)h(C1)f(:=)g(ConferenceCode\()k (H6)c(\);)p 3747 1300 V 75 1399 V 188 1369 a(a)g(\(5,12,2\)1..4)j (conference)g(code)d(over)h(GF\(2\))p 3747 1399 V 75 1499 V 188 1469 a(gap>)g(IsLinearCode\()i(C1)d(\);)p 3747 1499 V 75 1598 V 188 1569 a(false)p 3747 1598 V 75 1698 V 188 1668 a(gap>)h(C2)f(:=)g(ConferenceCode\()k(5)c(\);)p 3747 1698 V 75 1798 V 188 1768 a(a)g(\(5,12,2\)1..4)j(conference)g (code)d(over)h(GF\(2\))p 3747 1798 V 75 1897 V 188 1867 a(gap>)g(AsSSortedList\()j(C2)c(\);)p 3747 1897 V 75 1997 V 188 1967 a([)g([)f(0)h(0)g(0)f(0)h(0)g(],)g([)f(0)h(0)g(1)f(1)h (1)g(],)g([)g(0)f(1)h(0)g(1)f(1)h(],)g([)g(0)f(1)h(1)g(0)f(1)h(],)g([)g (0)f(1)h(1)g(1)f(0)h(],)p 3747 1997 V 75 2097 V 273 2067 a([)f(1)h(0)g(0)f(1)h(1)g(],)g([)f(1)h(0)g(1)f(0)h(1)g(],)g([)g(1)f(0)h (1)g(1)f(0)h(],)g([)g(1)f(1)h(0)g(0)f(1)h(],)g([)g(1)f(1)h(0)g(1)f(0)h (],)p 3747 2097 V 75 2196 V 273 2166 a([)f(1)h(1)g(1)f(0)h(0)g(],)g([)f (1)h(1)g(1)f(1)h(1)g(])f(])p 3747 2196 V 75 2221 4 25 v 3747 2221 V 75 2224 3675 4 v 75 2357 a SDict begin H.S end 75 2357 a 75 2357 a SDict begin 13.6 H.A end 75 2357 a 75 2357 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.1.4) cvn H.B /DEST pdfmark end 75 2357 a 117 x FJ(5.1.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(MOLSCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2648 a Fs(\006)22 b Ft(MOLSCode\()50 b([n,])e(q)f(\)) 2491 b Fr(\(function\))p Black 216 2874 a Ft(MOLSCode)32 b FK(returns)g(an)e Fo(\()p Fq(n)p Fp(;)10 b Fq(q)1173 2841 y Fr(2)1212 2874 y Fp(;)g Fq(n)15 b Fv(\000)g FK(1)p Fo(\))30 b FK(code)h(o)o(v)o(er)f Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(.)48 b(The)29 b(code)i(is)f(created)i(from)e Fq(n)15 b Fv(\000)g FK(2)29 b('Mutually)75 2987 y(Orthogonal)35 b(Latin)e(Squares')h(\(MOLS\))d(of)i(size)g Fq(q)17 b Fv(\002)e Fq(q)p FK(.)56 b(The)33 b(def)o(ault)h(for)f Ft(n)g FK(is)f(4.)56 b Fy(GU)m(A)-6 b(V)f(A)31 b FK(can)i(construct)j (a)75 3100 y(MOLS)20 b(code)i(for)h Fq(n)11 b Fv(\000)g FK(2)19 b Fv(\024)g Fq(q)p FK(.)27 b(Here)22 b Ft(q)g FK(must)g(be)g(a)f(prime)h(po)n(wer)l(,)h Fq(q)c Fp(>)f FK(2.)28 b(If)22 b(there)h(are)f(no)g Fq(n)11 b Fv(\000)g FK(2)22 b(MOLS,)d(an)j(error)75 3212 y(is)h(signalled.)216 3325 y(Since)h(each)g(of)f(the)h Fq(n)13 b Fv(\000)g FK(2)22 b(MOLS)f(is)j(a)f Fq(q)13 b Fv(\002)g Fq(q)22 b FK(matrix,)i(we)e(can)i(create)h(a)e(code)h(of)f(size)h Fq(q)3066 3292 y Fr(2)3127 3325 y FK(by)f(listing)i(in)e(each)75 3438 y(code)h(element)g(the)f(entries)i(that)f(are)f(in)g(the)g(same)g (position)j(in)d(each)g(of)g(the)h(MOLS.)c(W)-7 b(e)22 b(precede)j(each)f(of)f(these)75 3551 y(lists)h(with)g(the)f(tw)o(o)h (coordinates)i(that)f(specify)g(this)f(position,)h(making)g(the)f(w)o (ord)f(length)i(become)g Fq(n)p FK(.)216 3664 y(The)e(MOLS)e(codes)k (are)f(MDS)e(codes)i(\(see)g Ft(IsMDSCode)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2107 3665 a SDict begin H.S end 2107 3665 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.3.7)p 0.0236 0.0894 0.6179 TeXcolorrgb 2288 3602 a SDict begin H.R end 2288 3602 a 2288 3664 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.3.7) cvn H.B /ANN pdfmark end 2288 3664 a Black FK(\)\).)p 75 3783 1648 4 v 1764 3788 a FF(Example)p 2102 3783 V 75 3808 4 25 v 3747 3808 V 75 3908 4 100 v 188 3878 a(gap>)44 b(C1)f(:=)g(MOLSCode\()i(6,)e(5)g(\);)p 3747 3908 V 75 4007 V 188 3977 a(a)g(\(6,25,5\)3..4)j(code)e(generated) h(by)e(4)g(MOLS)h(of)f(order)h(5)e(over)i(GF\(5\))p 3747 4007 V 75 4107 V 188 4077 a(gap>)g(mols)f(:=)g(List\()h([1)f(..)g (WordLength\(C1\))48 b(-)42 b(2)h(],)g(function\()i(nr)e(\))p 3747 4107 V 75 4207 V 188 4177 a(>)297 b(local)44 b(ls,)f(el;)p 3747 4207 V 75 4306 V 188 4276 a(>)297 b(ls)43 b(:=)g(NullMat\()i (Size\(LeftActingDomai)q(n\(C)q(1\)\))q(,)j(Size\(LeftActingDoma)q (in\()q(C1\))q(\))h(\);)p 3747 4306 V 75 4406 V 188 4376 a(>)297 b(for)43 b(el)g(in)g(VectorCodeword\()48 b(AsSSortedList\()f (C1)c(\))f(\))h(do)p 3747 4406 V 75 4505 V 188 4476 a(>)424 b(ls[IntFFE\(el[1]\)+1][I)q(nt)q(FFE)q(\(el)q([2])q(\)+1)q(])48 b(:=)43 b(el[nr)h(+)f(2];)p 3747 4505 V 75 4605 V 188 4575 a(>)297 b(od;)p 3747 4605 V 75 4705 V 188 4675 a(>)g(return)44 b(ls;)p 3747 4705 V 75 4804 V 188 4774 a(>)170 b(end)43 b(\);;)p 3747 4804 V 75 4904 V 188 4874 a(gap>)h(AreMOLS\()h(mols)e (\);)p 3747 4904 V 75 5004 V 188 4974 a(true)p 3747 5004 V 75 5103 V 188 5073 a(gap>)h(C2)f(:=)g(MOLSCode\()i(11)e(\);)p 3747 5103 V 75 5203 V 188 5173 a(a)g(\(4,121,3\)2)i(code)f(generated)h (by)e(2)g(MOLS)h(of)f(order)h(11)f(over)h(GF\(11\))p 3747 5203 V 75 5228 4 25 v 3747 5228 V 75 5231 3675 4 v Black Black eop end end %%Page: 63 63 TeXDict begin HPSdict begin 63 62 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.63) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(63)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.1.5) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(5.1.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(RandomCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(RandomCode\()51 b(n,)c(M,)g(F)g(\))2352 b Fr(\(function\))p Black 216 799 a Ft(RandomCode)31 b FK(returns)f(a)d(random)i(unrestricted)j(code)c(of)g(size)h Ft(M)f FK(with)f(w)o(ord)i(length)g Ft(n)f FK(o)o(v)o(er)g Ft(F)p FK(.)42 b Ft(M)27 b FK(must)h(be)75 912 y(less)c(than)g(or)g (equal)g(to)g(the)g(number)g(of)g(elements)h(in)e(the)h(space)g Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))2399 879 y Fm(n)2438 912 y FK(.)216 1024 y(The)57 b(function)j Ft(RandomLinearCode)i FK(returns)e(a)d(random)h(linear)h(code)f(\(see)g Ft(RandomLinearCode) 75 1137 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 1138 a SDict begin H.S end 105 1138 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.2.12)p 0.0236 0.0894 0.6179 TeXcolorrgb 331 1075 a SDict begin H.R end 331 1075 a 331 1137 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.2.12) cvn H.B /ANN pdfmark end 331 1137 a Black FK(\)\).)p 75 1210 1648 4 v 1764 1215 a FF(Example)p 2102 1210 V 75 1235 4 25 v 3747 1235 V 75 1334 4 100 v 188 1304 a(gap>)44 b(C1)f(:=)g(RandomCode\()j(6,)d(10,)g(GF\(8\))h(\);)p 3747 1334 V 75 1434 V 188 1404 a(a)f(\(6,10,1..6\)4..6)k(random)d (unrestricted)j(code)d(over)f(GF\(8\))p 3747 1434 V 75 1533 V 188 1504 a(gap>)h(MinimumDistance\(C1\);)p 3747 1533 V 75 1633 V 188 1603 a(3)p 3747 1633 V 75 1733 V 188 1703 a(gap>)g(C2)f(:=)g(RandomCode\()j(6,)d(10,)g(GF\(8\))h(\);)p 3747 1733 V 75 1832 V 188 1802 a(a)f(\(6,10,1..6\)4..6)k(random)d (unrestricted)j(code)d(over)f(GF\(8\))p 3747 1832 V 75 1932 V 188 1902 a(gap>)h(C1)f(=)f(C2;)p 3747 1932 V 75 2032 V 188 2002 a(false)p 3747 2032 V 75 2056 4 25 v 3747 2056 V 75 2059 3675 4 v 75 2238 a SDict begin H.S end 75 2238 a 75 2238 a SDict begin 13.6 H.A end 75 2238 a 75 2238 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.1.6) cvn H.B /DEST pdfmark end 75 2238 a 116 x FJ(5.1.6)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Nordstr)n(omRobinsonCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2528 a Fs(\006)22 b Ft(NordstromRobinson)q(Cod)q(e\()53 b(\))2213 b Fr(\(function\))p Black 216 2754 a Ft(NordstromRobinsonC)q (ode)36 b FK(returns)c(a)e(Nordstrom-Robinson)k(code,)f(the)d(best)h (code)g(with)f(w)o(ord)h(length)75 2867 y Fq(n)21 b Fo(=)e FK(16)24 b(and)g(minimum)f(distance)j Fq(d)g Fo(=)19 b FK(6)24 b(o)o(v)o(er)f Fq(GF)7 b Fo(\()p FK(2)p Fo(\))p FK(.)29 b(This)23 b(is)h(a)f(non-linear)j Fo(\()p FK(16)p Fp(;)10 b FK(256)p Fp(;)g FK(6)p Fo(\))27 b FK(code.)p 75 2946 1648 4 v 1764 2951 a FF(Example)p 2102 2946 V 75 2971 4 25 v 3747 2971 V 75 3071 4 100 v 188 3041 a(gap>)44 b(C)e(:=)h(NordstromRobinsonCo)q(de\()q(\);)p 3747 3071 V 75 3170 V 188 3140 a(a)g(\(16,256,6\)4)j(Nordstrom-Robinson)i(code)c (over)g(GF\(2\))p 3747 3170 V 75 3270 V 188 3240 a(gap>)g (OptimalityCode\()j(C)c(\);)p 3747 3270 V 75 3369 V 188 3340 a(0)p 3747 3369 V 75 3394 4 25 v 3747 3394 V 75 3397 3675 4 v 75 3576 a SDict begin H.S end 75 3576 a 75 3576 a SDict begin 13.6 H.A end 75 3576 a 75 3576 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.1.7) cvn H.B /DEST pdfmark end 75 3576 a 116 x FJ(5.1.7)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Gr)n(eedyCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3866 a Fs(\006)22 b Ft(GreedyCode\()51 b(L,)c(d,)g(F)g(\))2352 b Fr(\(function\))p Black 216 4092 a Ft(GreedyCode)36 b FK(returns)e(a)e(Greedy)i(code)f(with)g(design)h(distance)h Ft(d)d FK(o)o(v)o(er)h(the)g(\002nite)f(\002eld)h Ft(F)p FK(.)56 b(The)32 b(code)h(is)75 4205 y(constructed)f(using)f(the)e (greedy)i(algorithm)g(on)e(the)g(list)h(of)f(v)o(ectors)h Ft(L)q FK(.)44 b(\(The)29 b(greedy)i(algorithm)g(checks)f(each)75 4318 y(v)o(ector)c(in)e Ft(L)h FK(and)g(adds)g(it)g(to)f(the)h(code)h (if)e(its)h(distance)i(to)e(the)g(current)h(code)g(is)e(greater)j(than) e(or)g(equal)g(to)g Ft(d)p FK(.)32 b(It)24 b(is)75 4431 y(ob)o(vious)h(that)f(the)g(resulting)i(code)e(has)g(a)f(minimum)h (distance)h(of)f(at)f(least)i Ft(d)p FK(.)216 4544 y(Greedy)f(codes)h (are)f(often)g(linear)h(codes.)216 4657 y(The)34 b(function)j Ft(LexiCode)g FK(creates)f(a)e(greedy)i(code)g(from)e(a)h(basis)g (instead)i(of)d(an)h(enumerated)i(list)e(\(see)75 4770 y Ft(LexiCode)26 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 499 4771 a SDict begin H.S end 499 4771 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.1.8)p 0.0236 0.0894 0.6179 TeXcolorrgb 680 4708 a SDict begin H.R end 680 4708 a 680 4770 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.8) cvn H.B /ANN pdfmark end 680 4770 a Black FK(\)\).)p 75 4842 1648 4 v 1764 4847 a FF(Example)p 2102 4842 V 75 4867 4 25 v 3747 4867 V 75 4966 4 100 v 188 4936 a(gap>)44 b(C1)f(:=)g(GreedyCode\()j(Tuples\()e(AsSSortedList\()k(GF\(2\))c(\),)f (5)f(\),)h(3,)g(GF\(2\))h(\);)p 3747 4966 V 75 5066 V 188 5036 a(a)f(\(5,4,3..5\)2)j(Greedy)e(code,)g(user)g(defined)h(basis) f(over)f(GF\(2\))p 3747 5066 V 75 5166 V 188 5136 a(gap>)h(C2)f(:=)g (GreedyCode\()j(Permuted\()f(Tuples\()g(AsSSortedList\()i(GF\(2\))d (\),)f(5)g(\),)p 3747 5166 V 75 5265 V 188 5235 a(>)1059 b(\(1,4\))44 b(\),)f(3,)g(GF\(2\))h(\);)p 3747 5265 V 75 5365 V 188 5335 a(a)f(\(5,4,3..5\)2)j(Greedy)e(code,)g(user)g (defined)h(basis)f(over)f(GF\(2\))p 3747 5365 V 75 5465 V 188 5435 a(gap>)h(C1)f(=)f(C2;)p 3747 5465 V 75 5564 V 188 5534 a(false)p 3747 5564 V 75 5589 4 25 v 3747 5589 V 75 5592 3675 4 v Black Black eop end end %%Page: 64 64 TeXDict begin HPSdict begin 64 63 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.64) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(64)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.1.8) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(5.1.8)p 0.0 0.0 1.0 TeXcolorrgb 99 w(LexiCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(LexiCode\()50 b(n,)d(d,)g(F)g(\))2445 b Fr(\(function\))p Black 216 799 a FK(In)30 b(this)h(format,)i Ft(Lexicode)f FK(returns)g(a)e(le)o(xicode)j(with)d(w)o(ord)g(length)i Ft(n)q FK(,)f(design)h(distance)g Ft(d)e FK(o)o(v)o(er)h Ft(F)p FK(.)49 b(The)75 912 y(code)28 b(is)e(constructed)k(using)e(the) g(greedy)g(algorithm)h(on)e(the)g(le)o(xicographically)k(ordered)e (list)e(of)g(all)g(v)o(ectors)h(of)75 1024 y(length)e Ft(n)f FK(o)o(v)o(er)g Ft(F)p FK(.)32 b(Ev)o(ery)25 b(time)g(a)f(v)o (ector)i(is)f(found)h(that)f(has)g(a)g(distance)i(to)e(the)g(current)h (code)g(of)f(at)g(least)g Ft(d)q FK(,)f(it)g(is)75 1137 y(added)j(to)f(the)g(code.)37 b(This)25 b(results,)j(ob)o(viously)-6 b(,)29 b(in)d(a)f(code)i(with)f(minimum)f(distance)j(greater)g(than)e (or)g(equal)h(to)75 1250 y Ft(d)p FK(.)216 1363 y(Another)46 b(syntax)h(which)f(one)f(can)h(use)f(is)g Ft(LexiCode\()50 b(B,)d(d,)g(F)g(\))p FK(.)d(When)i(called)g(in)f(this)h(format,)75 1476 y Ft(LexiCode)28 b FK(uses)f(the)g(basis)g Ft(B)e FK(instead)j(of)e(the)h(standard)h(basis.)38 b Ft(B)25 b FK(is)h(a)g(matrix)h(of)f(v)o(ectors)h(o)o(v)o(er)g Ft(F)p FK(.)36 b(The)25 b(code)i(is)75 1589 y(constructed)h(using)d (the)g(greedy)h(algorithm)g(on)f(the)g(list)g(of)f(v)o(ectors)i (spanned)g(by)f Ft(B)p FK(,)f(ordered)i(le)o(xicographically)75 1702 y(with)d(respect)j(to)d Ft(B)p FK(.)216 1815 y(Note)h(that)g (binary)h(le)o(xicodes)g(are)f(al)o(w)o(ays)g(linear)-5 b(.)p 75 1937 1648 4 v 1764 1942 a FF(Example)p 2102 1937 V 75 1962 4 25 v 3747 1962 V 75 2062 4 100 v 188 2032 a(gap>)44 b(C)e(:=)h(LexiCode\()j(4,)d(3,)g(GF\(5\))h(\);)p 3747 2062 V 75 2162 V 188 2132 a(a)f(\(4,17,3..4\)2..4)k(lexicode)e (over)f(GF\(5\))p 3747 2162 V 75 2261 V 188 2231 a(gap>)g(B)e(:=)h([)g ([Z\(2\)\2100,)i(0*Z\(2\),)g(0*Z\(2\)],)g([Z\(2\)\2100,)g(Z\(2\)\2100,) g(0*Z\(2\)])f(];;)p 3747 2261 V 75 2361 V 188 2331 a(gap>)g(C)e(:=)h (LexiCode\()j(B,)d(2,)g(GF\(2\))h(\);)p 3747 2361 V 75 2460 V 188 2431 a(a)f(linear)h([3,1,2]1..2)i(lexicode)f(over)f(GF\(2\)) p 3747 2460 V 75 2485 4 25 v 3747 2485 V 75 2488 3675 4 v 75 2701 a FK(The)27 b(function)i Ft(GreedyCode)h FK(creates)f(a)e(greedy)h(code)g(that)g(is)f(not)h(restricted)h(to)e(a) g(le)o(xicographical)k(order)e(\(see)75 2814 y Ft(GreedyCode)d FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 591 2815 a SDict begin H.S end 591 2815 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.1.7)p 0.0236 0.0894 0.6179 TeXcolorrgb 772 2752 a SDict begin H.R end 772 2752 a 772 2814 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.7) cvn H.B /ANN pdfmark end 772 2814 a Black FK(\)\).)75 2973 y SDict begin H.S end 75 2973 a 75 2973 a SDict begin 13.6 H.A end 75 2973 a 75 2973 a SDict begin [ /View [/XYZ H.V] /Dest (section.5.2) cvn H.B /DEST pdfmark end 75 2973 a 134 x FM(5.2)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Generating)31 b(Linear)f(Codes)p Black 75 3314 a FK(In)24 b(this)h(section)h(we)e(describe)i(functions)h (for)e(constructing)j(linear)d(codes.)33 b(A)23 b(linear)j(code)f(al)o (w)o(ays)g(has)g(a)f(gener)n(-)75 3427 y(ator)g(or)g(check)g(matrix.) 216 3540 y(The)38 b(\002rst)g(tw)o(o)h(functions)i(generate)f(linear)g (codes)g(from)e(the)h(generator)i(matrix)e(\()p Ft(GeneratorMatCode)75 3652 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 3653 a SDict begin H.S end 105 3653 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.2.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 286 3590 a SDict begin H.R end 286 3590 a 286 3652 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.2.1) cvn H.B /ANN pdfmark end 286 3652 a Black FK(\)\))e(or)e(check)i(matrix)g(\()p Ft(CheckMatCode)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1665 3653 a SDict begin H.S end 1665 3653 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.2.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 1846 3590 a SDict begin H.R end 1846 3590 a 1846 3652 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.2.3) cvn H.B /ANN pdfmark end 1846 3652 a Black FK(\)\).)66 b(All)35 b(linear)i(codes)g(can)g(be)e(constructed)40 b(with)35 b(these)75 3765 y(functions.)216 3878 y(The)56 b(ne)o(xt)h(functions)j(we)55 b(describe)k(generate)g(some)e(well-kno)n (wn)g(codes,)66 b(lik)o(e)58 b(Hamming)e(codes)75 3991 y(\()p Ft(HammingCode)26 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 667 3992 a SDict begin H.S end 667 3992 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.2.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 848 3929 a SDict begin H.R end 848 3929 a 848 3991 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.2.4) cvn H.B /ANN pdfmark end 848 3991 a Black FK(\)\),)d (Reed-Muller)i(codes)e(\()p Ft(ReedMullerCode)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2400 3992 a SDict begin H.S end 2400 3992 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.2.5)p 0.0236 0.0894 0.6179 TeXcolorrgb 2581 3929 a SDict begin H.R end 2581 3929 a 2581 3991 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.2.5) cvn H.B /ANN pdfmark end 2581 3991 a Black FK(\)\))d(and)f(the)g(e)o(xtended)h(Golay)f(codes)75 4104 y(\()p Ft(ExtendedBinaryGola)q(yC)q(ode)29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1224 4105 a SDict begin H.S end 1224 4105 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.4.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 1405 4042 a SDict begin H.R end 1405 4042 a 1405 4104 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.4.2) cvn H.B /ANN pdfmark end 1405 4104 a Black FK(\))24 b(and)g Ft(ExtendedTernaryGo)q(lay)q(Cod)q(e)29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2779 4105 a SDict begin H.S end 2779 4105 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.4.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 2960 4042 a SDict begin H.R end 2960 4042 a 2960 4104 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.4.4) cvn H.B /ANN pdfmark end 2960 4104 a Black FK(\)\).)216 4217 y(A)h(lar)n(ge)i(and) f(po)n(werful)h(f)o(amily)f(of)g(codes)g(are)g(alternant)i(codes.)52 b(The)o(y)30 b(are)h(obtained)i(by)e(a)f(small)h(modi-)75 4330 y(\002cation)e(of)f(the)g(parity)i(check)f(matrix)g(of)f(a)f(BCH)f (code)j(\(see)g Ft(AlternantCode)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2777 4331 a SDict begin H.S end 2777 4331 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.2.6)p 0.0236 0.0894 0.6179 TeXcolorrgb 2958 4268 a SDict begin H.R end 2958 4268 a 2958 4330 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.2.6) cvn H.B /ANN pdfmark end 2958 4330 a Black FK(\),)d Ft(GoppaCode)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3515 4331 a SDict begin H.S end 3515 4331 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.2.7)p 0.0236 0.0894 0.6179 TeXcolorrgb 3696 4268 a SDict begin H.R end 3696 4268 a 3696 4330 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.2.7) cvn H.B /ANN pdfmark end 3696 4330 a Black FK(\),)75 4443 y Ft(GeneralizedSrivast)q(ava)q(Cod)q(e)e FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1287 4444 a SDict begin H.S end 1287 4444 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.2.8)p 0.0236 0.0894 0.6179 TeXcolorrgb 1468 4381 a SDict begin H.R end 1468 4381 a 1468 4443 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.2.8) cvn H.B /ANN pdfmark end 1468 4443 a Black FK(\))24 b(and)g Ft(SrivastavaCode)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2378 4445 a SDict begin H.S end 2378 4445 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(5.2.9)p 0.0236 0.0894 0.6179 TeXcolorrgb 2559 4381 a SDict begin H.R end 2559 4381 a 2559 4443 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.2.9) cvn H.B /ANN pdfmark end 2559 4443 a Black FK(\)\).)216 4556 y(Finally)-6 b(,)45 b(we)40 b(describe)i(a)e(function)i(for)e(generating)k(random)d (linear)g(codes)g(\(see)g Ft(RandomLinearCode)75 4669 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 4670 a SDict begin H.S end 105 4670 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.2.12)p 0.0236 0.0894 0.6179 TeXcolorrgb 331 4607 a SDict begin H.R end 331 4607 a 331 4669 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.2.12) cvn H.B /ANN pdfmark end 331 4669 a Black FK(\)\).)75 4818 y SDict begin H.S end 75 4818 a 75 4818 a SDict begin 13.6 H.A end 75 4818 a 75 4818 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.1) cvn H.B /DEST pdfmark end 75 4818 a 100 x FJ(5.2.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(GeneratorMatCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5092 a Fs(\006)22 b Ft(GeneratorMatCode\()53 b(G[,)47 b(name,])i(F)e(\))1842 b Fr(\(function\))p Black 216 5318 a Ft(GeneratorMatCode)30 b FK(returns)d(a)e(linear)i(code)f (with)f(generator)j(matrix)e Ft(G)p FK(.)33 b Ft(G)25 b FK(must)h(be)f(a)g(matrix)h(o)o(v)o(er)f(\002nite)75 5431 y(\002eld)31 b Ft(F)q FK(.)52 b Ft(name)32 b FK(can)g(contain)h(a) e(short)h(description)j(of)d(the)f(code.)54 b(The)31 b(generator)j(matrix)e(is)f(the)h(basis)g(of)g(the)p Black Black eop end end %%Page: 65 65 TeXDict begin HPSdict begin 65 64 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.65) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(65)p Black 75 399 a(elements)32 b(of)e(the)h(code.)50 b(The)30 b(resulting)j(code)e(has)g(w)o(ord)g(length)h Fq(n)p FK(,)f(dimension)i Fq(k)e FK(if)f Ft(G)g FK(is)h(a)f Fq(k)17 b Fv(\002)e Fq(n)p FK(-matrix.)50 b(If)75 511 y Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))24 b FK(is)f(the)h(\002eld)f(of)h(the) f(code,)h(the)g(size)g(of)g(the)g(code)g(will)f(be)h Fq(q)2236 478 y Fm(k)2271 511 y FK(.)216 624 y(If)33 b(the)h(generator)i(matrix)f(does)f(not)g(ha)n(v)o(e)g(full)g(ro)n(w)f (rank,)k(the)d(linearly)h(dependent)i(ro)n(ws)c(are)h(remo)o(v)o(ed.)75 737 y(This)24 b(is)g(done)g(by)h(the)f Fy(GAP)e FK(function)k Ft(BaseMat)g FK(and)e(results)i(in)d(an)h(equal)i(code.)k(The)24 b(generator)i(matrix)f(can)f(be)75 850 y(retrie)n(v)o(ed)h(with)f(the)f (function)j Ft(GeneratorMat)h FK(\(see)d Ft(GeneratorMat)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2418 851 a SDict begin H.S end 2418 851 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.7.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 2599 788 a SDict begin H.R end 2599 788 a 2599 850 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.7.1) cvn H.B /ANN pdfmark end 2599 850 a Black FK(\)\).)p 75 969 1648 4 v 1764 974 a FF(Example)p 2102 969 V 75 994 4 25 v 3747 994 V 75 1094 4 100 v 188 1064 a(gap>)44 b(G)e(:=)h(Z\(3\)\2100)i (*)d([[1,0,1,2,0],[0,1,)q(2,1)q(,1])q(,[0)q(,0,)q(1,2)q(,1])q(];;)p 3747 1094 V 75 1193 V 188 1163 a(gap>)i(C1)f(:=)g(GeneratorMatCode\()48 b(G,)43 b(GF\(3\))h(\);)p 3747 1193 V 75 1293 V 188 1263 a(a)f(linear)h([5,3,1..2]1..2)j(code)d(defined)h(by)e(generator)i (matrix)f(over)g(GF\(3\))p 3747 1293 V 75 1393 V 188 1363 a(gap>)g(C2)f(:=)g(GeneratorMatCode\()48 b(IdentityMat\()e(5,)d (GF\(2\))h(\),)f(GF\(2\))h(\);)p 3747 1393 V 75 1492 V 188 1462 a(a)f(linear)h([5,5,1]0)h(code)f(defined)g(by)g(generator)h (matrix)f(over)g(GF\(2\))p 3747 1492 V 75 1592 V 188 1562 a(gap>)g(GeneratorMatCode\()k(List\()c(AsSSortedList\()j (NordstromRobinsonCod)q(e\(\))i(\),)p 3747 1592 V 75 1692 V 188 1662 a(>)43 b(x)f(->)h(VectorCodeword\()48 b(x)42 b(\))h(\),)g(GF\()h(2)e(\))h(\);)p 3747 1692 V 75 1791 V 188 1761 a(a)g(linear)h([16,11,1..4]2)j(code)c(defined)i(by)e (generator)j(matrix)e(over)g(GF\(2\))p 3747 1791 V 75 1891 V 188 1861 a(#)f(This)g(is)g(the)h(smallest)h(linear)f(code)g (that)g(contains)h(the)e(N-R)g(code)p 3747 1891 V 75 1916 4 25 v 3747 1916 V 75 1919 3675 4 v 75 2052 a SDict begin H.S end 75 2052 a 75 2052 a SDict begin 13.6 H.A end 75 2052 a 75 2052 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.2) cvn H.B /DEST pdfmark end 75 2052 a 116 x FJ(5.2.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(CheckMatCodeMutable)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2342 a Fs(\006)22 b Ft(CheckMatCodeMutab)q(le\()53 b(H[,)47 b(name,])i(F)e(\))1703 b Fr(\(function\))p Black 216 2568 a Ft(CheckMatCodeMutabl)q(e)27 b FK(is)22 b(the)h(same)f(as)g Ft(CheckMatCode)j FK(e)o(xcept)e(that)g (the)f(check)i(matrix)e(and)h(generator)75 2681 y(matrix)h(are)g (mutable.)75 2815 y SDict begin H.S end 75 2815 a 75 2815 a SDict begin 13.6 H.A end 75 2815 a 75 2815 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.3) cvn H.B /DEST pdfmark end 75 2815 a 115 x FJ(5.2.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(CheckMatCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3105 a Fs(\006)e Ft(CheckMatCode\()51 b(H[,)d(name,])g(F)f(\))2028 b Fr(\(function\))p Black 216 3330 a Ft(CheckMatCode)33 b FK(returns)f(a)d(linear)i(code)g(with)e(check)i(matrix)g Ft(H)p FK(.)47 b Ft(H)29 b FK(must)h(be)g(a)f(matrix)h(o)o(v)o(er)g (Galois)g(\002eld)75 3443 y Ft(F)p FK(.)41 b Ft([name.)29 b FK(can)g(contain)g(a)f(short)g(description)j(of)d(the)g(code.)43 b(The)27 b(parity)i(check)g(matrix)g(is)e(the)h(transposed)j(of)75 3556 y(the)24 b(nullmatrix)i(of)e(the)h(generator)h(matrix)f(of)f(the)g (code.)31 b(Therefore,)26 b Fq(c)13 b Fv(\001)g Fq(H)2498 3523 y Fm(T)2567 3556 y Fo(=)20 b FK(0)k(where)g Fq(c)g FK(is)g(an)g(element)h(of)f(the)75 3669 y(code.)30 b(If)23 b Ft(H)g FK(is)g(a)g Fq(r)15 b Fv(\002)e Fq(n)p FK(-matrix,)24 b(the)g(code)g(has)g(w)o(ord)g(length)h Fq(n)p FK(,)e(redundanc)o(y)j Fq(r)f FK(and)f(dimension)i Fq(n)13 b Fv(\000)g Fq(r)r FK(.)216 3782 y(If)24 b(the)g(check)i(matrix)f(does)f(not)h(ha)n(v)o(e) g(full)f(ro)n(w)g(rank,)h(the)f(linearly)i(dependent)h(ro)n(ws)d(are)g (remo)o(v)o(ed.)31 b(This)24 b(is)75 3895 y(done)i(by)g(the)f Fy(GAP)f FK(function)j Ft(BaseMat)p FK(.)36 b(and)26 b(results)g(in)g(an)f(equal)h(code.)35 b(The)25 b(check)i(matrix)f(can) f(be)h(retrie)n(v)o(ed)75 4008 y(with)d(the)h(function)i Ft(CheckMat)g FK(\(see)e Ft(CheckMat)h FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1705 4009 a SDict begin H.S end 1705 4009 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.7.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 1886 3946 a SDict begin H.R end 1886 3946 a 1886 4008 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.7.2) cvn H.B /ANN pdfmark end 1886 4008 a Black FK(\)\).)p 75 4127 1648 4 v 1764 4132 a FF(Example)p 2102 4127 V 75 4152 4 25 v 3747 4152 V 75 4252 4 100 v 188 4222 a(gap>)44 b(G)e(:=)h(Z\(3\)\2100)i(*)d([[1,0,1,2,0],[0,1,)q (2,1)q(,1])q(,[0)q(,0,)q(1,2)q(,1])q(];;)p 3747 4252 V 75 4351 V 188 4321 a(gap>)i(C1)f(:=)g(CheckMatCode\()j(G,)d(GF\(3\))i (\);)p 3747 4351 V 75 4451 V 188 4421 a(a)e(linear)h([5,2,1..2]2..3)j (code)d(defined)h(by)e(check)h(matrix)g(over)g(GF\(3\))p 3747 4451 V 75 4550 V 188 4521 a(gap>)g(CheckMat\(C1\);)p 3747 4550 V 75 4650 V 188 4620 a([)f([)f(Z\(3\)\2100,)j(0*Z\(3\),)g (Z\(3\)\2100,)f(Z\(3\),)h(0*Z\(3\))f(],)p 3747 4650 V 75 4750 V 273 4720 a([)e(0*Z\(3\),)j(Z\(3\)\2100,)g(Z\(3\),)f (Z\(3\)\2100,)h(Z\(3\)\2100)f(],)p 3747 4750 V 75 4849 V 273 4819 a([)e(0*Z\(3\),)j(0*Z\(3\),)g(Z\(3\)\2100,)f(Z\(3\),)h (Z\(3\)\2100)f(])f(])p 3747 4849 V 75 4949 V 188 4919 a(gap>)h(C2)f(:=)g(CheckMatCode\()j(IdentityMat\()h(5,)c(GF\(2\))h(\),) f(GF\(2\))h(\);)p 3747 4949 V 75 5049 V 188 5019 a(a)f(cyclic)h ([5,0,5]5)h(code)f(defined)g(by)g(check)g(matrix)g(over)g(GF\(2\))p 3747 5049 V 75 5073 4 25 v 3747 5073 V 75 5076 3675 4 v Black Black eop end end %%Page: 66 66 TeXDict begin HPSdict begin 66 65 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.66) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(66)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.4) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(5.2.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(HammingCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(HammingCode\()51 b(r,)c(F)g(\))2445 b Fr(\(function\))p Black 216 799 a Ft(HammingCode)29 b FK(returns)f(a)d(Hamming)h(code)h(with)f(redundanc)o(y)j Ft(r)c FK(o)o(v)o(er)h Ft(F)q FK(.)35 b(A)25 b(Hamming)g(code)i(is)f(a) g(single-)75 912 y(error)n(-correcting)g(code.)j(The)21 b(parity)i(check)g(matrix)f(of)f(a)g(Hamming)g(code)i(has)e(all)h (nonzero)h(v)o(ectors)g(of)f(length)h Ft(r)75 1024 y FK(in)i(its)g(columns,)h(e)o(xcept)g(for)f(a)g(multiplication)j(f)o (actor)-5 b(.)34 b(The)24 b(decoding)k(algorithm)e(of)f(the)g(Hamming)g (code)h(\(see)75 1137 y Ft(Decode)f FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 406 1138 a SDict begin H.S end 406 1138 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.10.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 632 1075 a SDict begin H.R end 632 1075 a 632 1137 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.1) cvn H.B /ANN pdfmark end 632 1137 a Black FK(\)\))g(mak)o(es)f (use)g(of)f(this)h(property)-6 b(.)216 1250 y(If)21 b Fq(q)g FK(is)g(the)h(size)g(of)f(its)h(\002eld)f Ft(F)p FK(,)g(the)g(returned)j(Hamming)d(code)h(is)f(a)g(linear)i Fo([\()p Fq(q)2719 1217 y Fm(r)2762 1250 y Fv(\000)11 b FK(1)p Fo(\))p Fp(=)p Fo(\()p Fq(q)g Fv(\000)g FK(1)p Fo(\))p Fp(;)f Fo(\()p Fq(q)3337 1217 y Fm(r)3381 1250 y Fv(\000)h FK(1)p Fo(\))p Fp(=)p Fo(\()p Fq(q)g Fv(\000)75 1363 y FK(1)p Fo(\))i Fv(\000)g Fq(r)-8 b Fp(;)10 b FK(3)p Fo(])24 b FK(code.)p 75 1489 1648 4 v 1764 1494 a FF(Example)p 2102 1489 V 75 1514 4 25 v 3747 1514 V 75 1613 4 100 v 188 1583 a(gap>)44 b(C1)f(:=)g(HammingCode\()j(4,)d(GF\(2\))h(\);)p 3747 1613 V 75 1713 V 188 1683 a(a)f(linear)h([15,11,3]1)i(Hamming)e (\(4,2\))h(code)e(over)h(GF\(2\))p 3747 1713 V 75 1813 V 188 1783 a(gap>)g(C2)f(:=)g(HammingCode\()j(3,)d(GF\(9\))h(\);)p 3747 1813 V 75 1912 V 188 1882 a(a)f(linear)h([91,88,3]1)i(Hamming)e (\(3,9\))h(code)e(over)h(GF\(9\))p 3747 1912 V 75 1937 4 25 v 3747 1937 V 75 1940 3675 4 v 75 2173 a SDict begin H.S end 75 2173 a 75 2173 a SDict begin 13.6 H.A end 75 2173 a 75 2173 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.5) cvn H.B /DEST pdfmark end 75 2173 a 116 x FJ(5.2.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(ReedMullerCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2464 a Fs(\006)22 b Ft(ReedMullerCode\()52 b(r,)47 b(k)g(\))2306 b Fr(\(function\))p Black 216 2689 a Ft(ReedMullerCode)35 b FK(returns)e(a)d(binary)i('Reed-Muller)h (code')f Ft(R\(r,)48 b(k\))30 b FK(with)h(dimension)i Ft(k)d FK(and)h(order)h Ft(r)p FK(.)75 2802 y(This)26 b(is)h(a)f(code)i(with)e(length)i(2)1098 2769 y Fm(k)1159 2802 y FK(and)f(minimum)g(distance)i(2)2065 2769 y Fm(k)q Fh(\000)p Fm(r)2205 2802 y FK(\(see)e(for)g(e)o(xample,)h(section)g (1.10)f(in)f([)p 0.0236 0.6179 0.0894 TeXcolorrgb 3459 2803 a SDict begin H.S end 3459 2803 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(HP03)p 0.0236 0.6179 0.0894 TeXcolorrgb 3666 2740 a SDict begin H.R end 3666 2740 a 3666 2802 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.HP03) cvn H.B /ANN pdfmark end 3666 2802 a Black 1 w FK(]\).)75 2915 y(By)e(de\002nition,)j(the)e Fq(r)771 2882 y Fm(t)5 b(h)856 2915 y FK(order)25 b(binary)i(Reed-Muller)f(code)g(of)e(length) i Fq(n)c Fo(=)e FK(2)2565 2882 y Fm(m)2618 2915 y FK(,)k(for)h(0)c Fv(\024)g Fq(r)i Fv(\024)d Fq(m)p FK(,)k(is)g(the)i(set)e(of)h(all)75 3028 y(v)o(ectors)39 b Fq(f)13 b FK(,)23 b(where)37 b Fq(f)f FK(is)24 b(a)f(Boolean)h(function)i(which)e(is)f(a)h(polynomial) h(of)f(de)o(gree)h(at)e(most)g Fq(r)r FK(.)p 75 3151 1648 4 v 1764 3156 a FF(Example)p 2102 3151 V 75 3176 4 25 v 3747 3176 V 75 3275 4 100 v 188 3245 a(gap>)44 b(ReedMullerCode\()j(1,)c(3)g(\);)p 3747 3275 V 75 3375 V 188 3345 a(a)g(linear)h([8,4,4]2)h(Reed-Muller)h(\(1,3\))e(code)g (over)g(GF\(2\))p 3747 3375 V 75 3400 4 25 v 3747 3400 V 75 3403 3675 4 v 75 3616 a FK(See)23 b Ft(GeneralizedReedMul)q(ler)29 b FK(\()p Fz(??)r FK(\))23 b(for)g(a)g(more)h(general)h(construction.) 75 3768 y SDict begin H.S end 75 3768 a 75 3768 a SDict begin 13.6 H.A end 75 3768 a 75 3768 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.6) cvn H.B /DEST pdfmark end 75 3768 a 97 x FJ(5.2.6)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Alter)o(nantCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4039 a Fs(\006)d Ft(AlternantCode\()52 b(r,)47 b(Y[,)g(alpha,])i(F)e(\))1796 b Fr(\(function\))p Black 216 4265 a Ft(AlternantCode)25 b FK(returns)f(an)d('alternant)j (code',)f(with)e(parameters)i Ft(r)q FK(,)d Ft(Y)h FK(and)h Ft(alpha)h FK(\(optional\).)30 b Ft(F)21 b FK(denotes)75 4378 y(the)30 b(\(\002nite\))h(base)g(\002eld.)49 b(Here,)31 b Ft(r)f FK(is)g(the)h(design)g(redundanc)o(y)j(of)c(the)g(code.)50 b Ft(Y)29 b FK(and)i Ft(alpha)g FK(are)g(both)g(v)o(ectors)75 4491 y(of)d(length)i Ft(n)e FK(from)h(which)g(the)g(parity)g(check)h (matrix)f(is)g(constructed.)46 b(The)29 b(check)g(matrix)g(has)g(the)g (form)f Fq(H)h Fo(=)75 4604 y(\([)p Fq(a)190 4558 y Fm(j)180 4629 y(i)215 4604 y Fq(y)255 4618 y Fm(i)278 4604 y Fo(]\))p FK(,)37 b(where)e(0)27 b Fv(\024)40 b Fq(j)28 b Fv(\024)e Fq(r)19 b Fv(\000)e FK(1,)36 b(1)27 b Fv(\024)f Fq(i)h Fv(\024)f Fq(n)p FK(,)36 b(and)g(where)e Fo([)p Fp(:::)p Fo(])h FK(is)g(as)f(in)h Ft(VerticalConversionFi)q(el)q(dMa)q(t)75 4717 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 4719 a SDict begin H.S end 105 4719 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(7.3.9)p 0.0236 0.0894 0.6179 TeXcolorrgb 286 4655 a SDict begin H.R end 286 4655 a 286 4717 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.9) cvn H.B /ANN pdfmark end 286 4717 a Black FK(\)\).)40 b(If)27 b(no)g Ft(alpha)h FK(is)f(speci\002ed,)i(the)e(v)o(ector)h Fo([)p FK(1)p Fp(;)10 b Fq(a)p Fp(;)g Fq(a)1950 4684 y Fr(2)1990 4717 y Fp(;)g(::;)g Fq(a)2155 4684 y Fm(n)p Fh(\000)p Fr(1)2278 4717 y Fo(])27 b FK(is)f(used,)j(where)e Fq(a)g FK(is)g(a)f(primiti)n(v)o(e)i(element)75 4829 y(of)23 b(a)h(Galois)g(\002eld)f Ft(F)p FK(.)p 75 4934 1648 4 v 1764 4939 a FF(Example)p 2102 4934 V 75 4959 4 25 v 3747 4959 V 75 5058 4 100 v 188 5028 a(gap>)44 b(Y)e(:=)h([)g(1,)g(1,)g (1,)g(1,)g(1,)g(1,)g(1];;)h(a)f(:=)g(PrimitiveUnityRoot\()48 b(2,)43 b(7)g(\);;)p 3747 5058 V 75 5158 V 188 5128 a(gap>)h(alpha)g (:=)f(List\()h([0..6],)g(i)f(->)g(a\210i)h(\);;)p 3747 5158 V 75 5257 V 188 5228 a(gap>)g(C)e(:=)h(AlternantCode\()k(2,)c(Y,)g (alpha,)i(GF\(8\))f(\);)p 3747 5257 V 75 5357 V 188 5327 a(a)f(linear)h([7,3,3..4]3..4)j(alternant)f(code)d(over)h(GF\(8\))p 3747 5357 V 75 5382 4 25 v 3747 5382 V 75 5385 3675 4 v Black Black eop end end %%Page: 67 67 TeXDict begin HPSdict begin 67 66 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.67) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(67)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.7) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(5.2.7)p 0.0 0.0 1.0 TeXcolorrgb 99 w(GoppaCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(GoppaCode\()50 b(G,)d(L)g(\))2538 b Fr(\(function\))p Black 216 799 a Ft(GoppaCode)21 b FK(returns)f(a)e (Goppa)h(code)g Ft(C)e FK(from)i(Goppa)g(polynomial)h Ft(g)q FK(,)e(ha)n(ving)i(coef)n(\002cients)g(in)e(a)g(Galois)h(Field) 75 912 y Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(.)43 b Ft(L)28 b FK(must)g(be)g(a)g(list)g(of)h(elements)g(in)f Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(,)29 b(that)g(are)g(not)f(roots)h(of)g Ft(g)p FK(.)42 b(The)28 b(w)o(ord)g(length)i(of)e(the)g(code)75 1024 y(is)f(equal)h(to)f(the)h(length)g(of)f Ft(L)q FK(.)38 b(The)27 b(parity)h(check)h(matrix)e(has)h(the)f(form)g Fq(H)i Fo(=)21 b(\([)p Fq(a)2781 979 y Fm(j)2771 1050 y(i)2807 1024 y Fp(=)p Fq(G)p Fo(\()p Fq(a)2998 1038 y Fm(i)3021 1024 y Fo(\)]\))3116 1042 y Fr(0)p Fh(\024)10 b Fm(j)r Fh(\024)p Fm(d)s(e)m(g)p Fk(\()p Fm(g)p Fk(\))p Fh(\000)p Fr(1)p Fl(;)25 b Fm(a)3624 1052 y Ff(i)3642 1042 y Fh(2)p Fm(L)3727 1024 y FK(,)75 1137 y(where)32 b Fq(a)373 1151 y Fm(i)421 1137 y Fv(2)24 b Fq(L)31 b FK(and)h Fo([)p Fp(:::)p Fo(])g FK(is)f(as)h(in)g Ft (VerticalConversionFi)q(el)q(dMa)q(t)37 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2473 1139 a SDict begin H.S end 2473 1139 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(7.3.9)p 0.0236 0.0894 0.6179 TeXcolorrgb 2654 1075 a SDict begin H.R end 2654 1075 a 2654 1137 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.9) cvn H.B /ANN pdfmark end 2654 1137 a Black FK(\),)d(so)e Fq(H)37 b FK(has)32 b(entries)h(in)e Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(,)75 1250 y Fq(q)21 b Fo(=)27 b Fq(p)284 1217 y Fm(m)337 1250 y FK(.)i(It)24 b(is)g(kno)n(wn)h(that)f Fq(d)5 b Fo(\()-5 b Fq(C)r Fo(\))22 b Fv(\025)e Fq(d)5 b(e)l(g)p Fo(\()p Fq(g)p Fo(\))13 b(+)g FK(1,)25 b(with)f(a)g(better)h (bound)h(in)e(the)g(binary)i(case)f(pro)o(vided)h Fq(g)e FK(has)g(no)75 1363 y(multiple)j(roots.)36 b(See)25 b(Huf)n(fman)h(and) g(Pless)g([)p 0.0236 0.6179 0.0894 TeXcolorrgb 1547 1364 a SDict begin H.S end 1547 1364 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(HP03)p 0.0236 0.6179 0.0894 TeXcolorrgb 1754 1301 a SDict begin H.R end 1754 1301 a 1754 1363 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.HP03) cvn H.B /ANN pdfmark end 1754 1363 a Black FK(])f(section)i(13.2.2,)g(and)f(MacW)l (illiams)h(and)f(Sloane)g([)p 0.0236 0.6179 0.0894 TeXcolorrgb 3497 1364 a SDict begin H.S end 3497 1364 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(MS83)p 0.0236 0.6179 0.0894 TeXcolorrgb 3719 1301 a SDict begin H.R end 3719 1301 a 3719 1363 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.MS83) cvn H.B /ANN pdfmark end 3719 1363 a Black 1 w FK(])75 1476 y(section)f(12.3,)f(for)g(more)f(details.)216 1589 y(One)h(can)h(also)g(call)g Ft(GoppaCode)i FK(using)f(the)f (syntax)h Ft(GoppaCode\(g,n\))p FK(.)36 b(When)25 b(called)g(with)g (parameter)h Ft(n)p FK(,)75 1702 y Fy(GU)m(A)-6 b(V)f(A)22 b FK(constructs)k(a)d(list)h Fq(L)f FK(of)g(length)i Ft(n)p FK(,)e(such)h(that)g(no)g(element)g(of)g Ft(L)f FK(is)g(a)g(root)i(of)e Ft(g)p FK(.)216 1815 y(This)g(is)h(a)f(special) i(case)f(of)g(an)f(alternant)j(code.)p 75 1896 1648 4 v 1764 1901 a FF(Example)p 2102 1896 V 75 1920 4 25 v 3747 1920 V 75 2020 4 100 v 188 1990 a(gap>)44 b (x:=Indeterminate\(GF\(8)q(\),")q(x"\))q(;)p 3747 2020 V 75 2120 V 188 2090 a(x)p 3747 2120 V 75 2219 V 188 2189 a(gap>)g(L:=Elements\(GF\(8\)\);)p 3747 2219 V 75 2319 V 188 2289 a([)f(0*Z\(2\),)h(Z\(2\)\2100,)h(Z\(2\2103\),)g (Z\(2\2103\)\2102,)g(Z\(2\2103\)\2103,)h(Z\(2\2103\)\2104,)f (Z\(2\2103\)\2105,)g(Z\(2\2103\)\2106)g(])p 3747 2319 V 75 2419 V 188 2389 a(gap>)f(g:=x\2102+x+1;)p 3747 2419 V 75 2518 V 188 2488 a(x\2102+x+Z\(2\)\2100)p 3747 2518 V 75 2618 V 188 2588 a(gap>)g(C:=GoppaCode\(g,L\);)p 3747 2618 V 75 2717 V 188 2688 a(a)f(linear)h([8,2,5]3)h(Goppa)f(code)g (over)g(GF\(2\))p 3747 2717 V 75 2817 V 188 2787 a(gap>)g(xx)f(:=)g (Indeterminate\()k(GF\(2\),)d("xx")g(\);;)p 3747 2817 V 75 2917 V 188 2887 a(gap>)g(gg)f(:=)g(xx\2102)g(+)g(xx)g(+)g(1;;)g(L) g(:=)g(AsSSortedList\()k(GF\(8\))d(\);;)p 3747 2917 V 75 3016 V 188 2986 a(gap>)g(C1)f(:=)g(GoppaCode\()i(gg,)f(L)e(\);)p 3747 3016 V 75 3116 V 188 3086 a(a)h(linear)h([8,2,5]3)h(Goppa)f(code)g (over)g(GF\(2\))p 3747 3116 V 75 3216 V 188 3186 a(gap>)g(y)e(:=)h (Indeterminate\()k(GF\(2\),)e("y")e(\);;)p 3747 3216 V 75 3315 V 188 3285 a(gap>)h(h)e(:=)h(y\2102)h(+)e(y)h(+)g(1;;)p 3747 3315 V 75 3415 V 188 3385 a(gap>)h(C2)f(:=)g(GoppaCode\()i(h,)e(8) g(\);)p 3747 3415 V 75 3514 V 188 3485 a(a)g(linear)h([8,2,5]3)h(Goppa) f(code)g(over)g(GF\(2\))p 3747 3514 V 75 3614 V 188 3584 a(gap>)g(C1=C2;)p 3747 3614 V 75 3714 V 188 3684 a(true)p 3747 3714 V 75 3813 V 188 3783 a(gap>)g(C=C1;)p 3747 3813 V 75 3913 V 188 3883 a(true)p 3747 3913 V 75 3938 4 25 v 3747 3938 V 75 3941 3675 4 v 75 4125 a SDict begin H.S end 75 4125 a 75 4125 a SDict begin 13.6 H.A end 75 4125 a 75 4125 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.8) cvn H.B /DEST pdfmark end 75 4125 a 116 x FJ(5.2.8)p 0.0 0.0 1.0 TeXcolorrgb 99 w(GeneralizedSri)o(v)o(asta)n(v)o(aCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4415 a Fs(\006)22 b Ft(GeneralizedSrivas)q(tav)q(aCo)q(de\()53 b(a,)47 b(w,)g(z[,)h(t,])f (F)g(\))1286 b Fr(\(function\))p Black 216 4641 a Ft (GeneralizedSrivast)q(ava)q(Cod)q(e)41 b FK(returns)c(a)e(generalized)k (Sri)n(v)n(asta)n(v)n(a)e(code)f(with)g(parameters)h Ft(a)q FK(,)g Ft(w)p FK(,)h Ft(z)p FK(,)75 4754 y Ft(t)p FK(.)56 b Fq(a)26 b Fo(=)f Fv(f)p Fq(a)457 4768 y Fr(1)495 4754 y Fp(;)10 b(:::;)g Fq(a)685 4768 y Fm(n)724 4754 y Fv(g)32 b FK(and)i Fq(w)25 b Fo(=)g Fv(f)p Fq(w)1253 4768 y Fr(1)1290 4754 y Fp(;)10 b(:::;)g Fq(w)1496 4768 y Fm(s)1527 4754 y Fv(g)32 b FK(are)h(lists)h(of)e Fq(n)17 b Fo(+)e Fq(s)33 b FK(distinct)h(elements)h(of)d Fq(F)h Fo(=)25 b Fq(GF)7 b Fo(\()p Fq(q)3405 4721 y Fm(m)3457 4754 y Fo(\))p FK(,)35 b Fq(z)d FK(is)h(a)75 4867 y(list)28 b(of)g(length)h Fq(n)f FK(of)g(nonzero)i(elements)f(of)f Fq(GF)7 b Fo(\()p Fq(q)1728 4834 y Fm(m)1781 4867 y Fo(\))p FK(.)41 b(The)27 b(parameter)j Ft(t)d FK(determines)j(the)f(designed)h (distance:)75 4980 y Fq(d)25 b Fv(\025)20 b Fq(s)n(t)f Fo(+)13 b FK(1.)28 b(The)23 b(check)i(matrix)f(of)f(this)h(code)h(is)e (the)h(form)1556 5151 y Fq(H)i Fo(=)20 b(\([)1962 5089 y Fq(z)1997 5103 y Fm(i)p 1809 5130 365 4 v 1809 5213 a Fo(\()p Fq(a)1889 5227 y Fm(i)1925 5213 y Fv(\000)13 b Fq(w)2080 5227 y Fm(j)2103 5213 y Fo(\))2138 5187 y Fm(k)2183 5151 y Fo(]\))p Fp(;)75 5367 y FK(1)21 b Fv(\024)g Fq(k)i Fv(\024)c Fq(t)6 b FK(,)24 b(where)h Fo([)p Fp(:::)p Fo(])g FK(is)g(as)g(in)g Ft(VerticalConversionF)q(iel)q(dMa)q(t)30 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2399 5369 a SDict begin H.S end 2399 5369 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(7.3.9)p 0.0236 0.0894 0.6179 TeXcolorrgb 2580 5305 a SDict begin H.R end 2580 5305 a 2580 5367 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.9) cvn H.B /ANN pdfmark end 2580 5367 a Black FK(\).)k(W)-7 b(e)24 b(use)h(this)h(de\002nition)g(of)f Fq(H)30 b FK(to)75 5479 y(de\002ne)d(the)f(code.)38 b(The)26 b(def)o(ault)i(for)e Ft(t)g FK(is)g(1.)37 b(The)26 b(original)i(Sri)n(v)n(asta)n(v)n(a)g (codes)f(\(see)g Ft(SrivastavaCode)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3507 5481 a SDict begin H.S end 3507 5481 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(5.2.9)p 0.0236 0.0894 0.6179 TeXcolorrgb 3688 5417 a SDict begin H.R end 3688 5417 a 3688 5479 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.2.9) cvn H.B /ANN pdfmark end 3688 5479 a Black FK(\)\))75 5592 y(are)24 b(a)f(special)i(case)d Fq(t)27 b Fo(=)19 b FK(1,)k Fq(z)992 5606 y Fm(i)1035 5592 y Fo(=)d Fq(a)1171 5547 y Fm(\265)1171 5618 y(i)1209 5592 y FK(,)j(for)g(some)h Fq(\265)p FK(.)p Black Black eop end end %%Page: 68 68 TeXDict begin HPSdict begin 68 67 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.68) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(68)p Black 75 399 1648 4 v 1764 404 a FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188 493 a(gap>)44 b(a)e(:=)h(Filtered\()j(AsSSortedList\()h(GF\(2\2106\))e (\),)e(e)f(->)h(e)g(in)g(GF\(2\2103\))i(\);;)p 3747 523 V 75 623 V 188 593 a(gap>)f(w)e(:=)h([)g(Z\(2\2106\))h(];;)g(z)e(:=)h (List\()i([1..8],)f(e)f(->)g(1)g(\);;)p 3747 623 V 75 722 V 188 692 a(gap>)h(C)e(:=)h(GeneralizedSrivasta)q(vaC)q(od)q(e\()49 b(a,)43 b(w,)g(z,)g(1,)g(GF\(64\))h(\);)p 3747 722 V 75 822 V 188 792 a(a)f(linear)h([8,2,2..5]3..4)j(generalized)f (Srivastava)g(code)e(over)f(GF\(2\))p 3747 822 V 75 847 4 25 v 3747 847 V 75 850 3675 4 v 75 983 a SDict begin H.S end 75 983 a 75 983 a SDict begin 13.6 H.A end 75 983 a 75 983 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.9) cvn H.B /DEST pdfmark end 75 983 a 116 x FJ(5.2.9)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Sri)o(v)o(asta)n(v)o(aCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1274 a Fs(\006)22 b Ft(SrivastavaCode\()52 b(a,)47 b(w[,)h(mu,])g(F)e(\))1889 b Fr(\(function\))p Black 216 1499 a Fq(S)q(r)r(ivas)n(t)6 b(ava)-5 b(C)r(od)5 b(e)51 b FK(returns)e(a)d(Sri)n(v)n(asta)n(v)n(a)j(code)f(with)e (parameters)k Ft(a)p FK(,)i Ft(w)46 b FK(\(and)i(optionally)i Ft(mu)q FK(\).)99 b Fq(a)33 b Fo(=)75 1612 y Fv(f)p Fq(a)165 1626 y Fr(1)203 1612 y Fp(;)10 b(:::;)g Fq(a)393 1626 y Fm(n)432 1612 y Fv(g)35 b FK(and)h Fq(w)27 b Fo(=)f Fv(f)p Fq(w)969 1626 y Fr(1)1007 1612 y Fp(;)10 b(:::;)g Fq(w)1213 1626 y Fm(s)1243 1612 y Fv(g)35 b FK(are)h(lists)g(of)g Fq(n)17 b Fo(+)g Fq(s)35 b FK(distinct)i(elements)g(of)e Fq(F)f Fo(=)27 b Fq(GF)7 b Fo(\()p Fq(q)3148 1579 y Fm(m)3200 1612 y Fo(\))p FK(.)64 b(The)35 b(def)o(ault)75 1725 y(for)26 b Ft(mu)g FK(is)g(1.)35 b(The)26 b(Sri)n(v)n(asta)n(v)n(a)h (code)g(is)e(a)h(generalized)j(Sri)n(v)n(asta)n(v)n(a)e(code,)g(in)f (which)g Fq(z)2860 1739 y Fm(i)2905 1725 y Fo(=)21 b Fq(a)3042 1692 y Fm(mu)3042 1751 y(i)3153 1725 y FK(for)26 b(some)g Ft(mu)g FK(and)73 1838 y Fq(t)g Fo(=)20 b FK(1.)216 1951 y(J.)30 b(N.)f(Sri)n(v)n(asta)n(v)n(a)j(introduced)i(this)d(code)g (in)g(1967,)i(though)g(his)d(w)o(ork)h(w)o(as)f(not)i(published.)52 b(See)30 b(Helgert)75 2064 y([)p 0.0236 0.6179 0.0894 TeXcolorrgb 105 2065 a SDict begin H.S end 105 2065 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(Hel72)p 0.0236 0.6179 0.0894 TeXcolorrgb 326 2002 a SDict begin H.R end 326 2002 a 326 2064 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.He72) cvn H.B /ANN pdfmark end 326 2064 a Black 1 w FK(])25 b(for)g(more)g(details)i(on)e(the)g(properties)j(of)d(this)h (code.)34 b(Related)26 b(reference:)35 b(G.)23 b(Roelofsen,)29 b(O)t Fj(N)g FK(G)t Fj(O)t(P)t(P)m(A)77 2177 y(A)t(N)t(D)23 b FK(G)t Fj(E)t(N)t(E)t(R)t(A)t(L)t(I)t(Z)t(E)t(D)28 b FK(S)t Fj(R)t(I)t(V)-6 b(A)t(S)t(T)m(A)g(V)g(A)27 b FK(C)t Fj(O)t(D)t(E)t(S)c FK(PhD)18 b(thesis,)k(Dept.)27 b(Math.)h(and)20 b(Comp.)27 b(Sci.,)19 b(Eindho)o(v)o(en)j(Uni)n(v)-6 b(.)75 2290 y(of)23 b(T)-6 b(echnology)g(,)26 b(the)e(Netherlands,)h (1982.)p 75 2412 1648 4 v 1764 2417 a FF(Example)p 2102 2412 V 75 2437 4 25 v 3747 2437 V 75 2537 4 100 v 188 2507 a(gap>)44 b(a)e(:=)h(AsSSortedList\()k(GF\(11\))e(\){[2..8]};;)p 3747 2537 V 75 2637 V 188 2607 a(gap>)f(w)e(:=)h(AsSSortedList\()k (GF\(11\))e(\){[9..10]};;)p 3747 2637 V 75 2736 V 188 2706 a(gap>)f(C)e(:=)h(SrivastavaCode\()48 b(a,)43 b(w,)g(2,)g (GF\(11\))h(\);)p 3747 2736 V 75 2836 V 188 2806 a(a)f(linear)h ([7,5,3]2)h(Srivastava)h(code)e(over)f(GF\(11\))p 3747 2836 V 75 2935 V 188 2906 a(gap>)h(IsMDSCode\()h(C)e(\);)p 3747 2935 V 75 3035 V 188 3005 a(true)171 b(#)42 b(Always)j(true)e(if)g (F)g(is)g(a)g(prime)h(field)p 3747 3035 V 75 3060 4 25 v 3747 3060 V 75 3063 3675 4 v 75 3296 a SDict begin H.S end 75 3296 a 75 3296 a SDict begin 13.6 H.A end 75 3296 a 75 3296 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.10) cvn H.B /DEST pdfmark end 75 3296 a 116 x FJ(5.2.10)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Cordar)n(oW)-6 b(agnerCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3586 a Fs(\006)22 b Ft(CordaroWagnerCode)q(\()52 b(n)47 b(\))2306 b Fr(\(function\))p Black 216 3812 a Ft(CordaroWagnerCode)42 b FK(returns)d(a)e(binary)h (Cordaro-W)-7 b(agner)40 b(code.)70 b(This)37 b(is)f(a)h(code)h(of)f (length)h Ft(n)f FK(and)75 3925 y(dimension)24 b(2)e(ha)n(ving)i(the)e (best)h(possible)h(minimum)e(distance)i Fq(d)5 b FK(.)28 b(This)21 b(code)i(is)f(just)h(a)e(little)i(bit)g(less)f(tri)n(vial)h (than)75 4038 y Ft(RepetitionCode)28 b FK(\(see)c Ft(RepetitionCode)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1618 4039 a SDict begin H.S end 1618 4039 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.5.12)p 0.0236 0.0894 0.6179 TeXcolorrgb 1844 3976 a SDict begin H.R end 1844 3976 a 1844 4038 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.12) cvn H.B /ANN pdfmark end 1844 4038 a Black FK(\)\).)p 75 4157 1648 4 v 1764 4162 a FF(Example)p 2102 4157 V 75 4182 4 25 v 3747 4182 V 75 4282 4 100 v 188 4252 a(gap>)44 b(C)e(:=)h (CordaroWagnerCode\()49 b(11)43 b(\);)p 3747 4282 V 75 4381 V 188 4351 a(a)g(linear)h([11,2,7]5)h(Cordaro-Wagner)j(code)43 b(over)h(GF\(2\))p 3747 4381 V 75 4481 V 188 4451 a(gap>)g (AsSSortedList\(C\);)p 3747 4481 V 75 4581 V 188 4551 a([)f([)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(0)f(0)h(0)g(],)g([)f(0)h(0)g (0)g(0)f(1)h(1)g(1)f(1)h(1)g(1)f(1)h(],)p 3747 4581 V 75 4680 V 273 4650 a([)f(1)h(1)g(1)f(1)h(0)g(0)f(0)h(1)g(1)f(1)h(1)g (],)g([)f(1)h(1)g(1)g(1)f(1)h(1)g(1)f(0)h(0)g(0)f(0)h(])g(])p 3747 4680 V 75 4705 4 25 v 3747 4705 V 75 4708 3675 4 v 75 4841 a SDict begin H.S end 75 4841 a 75 4841 a SDict begin 13.6 H.A end 75 4841 a 75 4841 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.11) cvn H.B /DEST pdfmark end 75 4841 a 117 x FJ(5.2.11)p 0.0 0.0 1.0 TeXcolorrgb 99 w(F)n(err)n(er)n (oDesignCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5132 a Fs(\006)22 b Ft(FerreroDesignCode)q(\()52 b(P,)47 b(m)g(\))2167 b Fr(\(function\))p Black 216 5358 a Fq(Requir)m(es)25 b(the)e(GAP)f(pac)n(ka)o(g)o(e)k(SON)n(A)m(T)-5 b(A)216 5471 y FK(A)22 b(group)i Fq(K)i FK(together)f(with)e(a)f(group)i(of)f (automorphism)i Fq(H)j FK(of)23 b Fq(K)j FK(such)e(that)f(the)g (semidirect)i(product)g Fq(K)5 b(H)27 b FK(is)75 5583 y(a)e(Frobenius)h(group)h(with)e(complement)h Fq(H)k FK(is)25 b(called)i(a)d(Ferrero)i(pair)g Fo(\()p Fq(K)5 b Fp(;)10 b Fq(H)d Fo(\))23 b FK(in)i(SON)m(A)-10 b(T)i(A.)21 b(T)-7 b(ak)o(e)25 b(a)f(Frobenius)p Black Black eop end end %%Page: 69 69 TeXDict begin HPSdict begin 69 68 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.69) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(69)p Black 75 399 a Fo(\()p Fq(G)p Fp(;)10 b Fo(+\))22 b FK(group)i(with)e(k)o(ernel)j Fq(K)h FK(and)d(complement) i Fq(H)7 b FK(.)26 b(Consider)e(the)f(design)i Fq(D)c FK(with)i(point)h(set)e Fq(K)27 b FK(and)c(block)h(set)75 511 y Fv(f)p Fq(a)165 478 y Fm(H)235 511 y Fo(+)12 b Fq(b)23 b Fv(j)g Fq(a)p Fp(;)10 b Fq(b)21 b Fv(2)f Fq(K)5 b Fp(;)10 b Fq(a)20 b Fv(6)p Fo(=)g FK(0)p Fv(g)p FK(.)29 b(Here)23 b Fq(a)1304 478 y Fm(H)1384 511 y FK(denotes)i(the)f(orbit)g (of)f(a)g(under)i(conjugation)h(by)d(elements)i(of)e Fq(H)7 b FK(.)27 b(Ev)o(ery)75 624 y(planar)h(near)n(-ring)i(design)f (of)e(type)g(\224*\224)h(can)f(be)g(obtained)j(in)d(this)g(w)o(ay)g (from)g(groups.)41 b(These)27 b(designs)i(\(from)f(a)75 737 y(Frobenius)h(k)o(ernel)g(of)e(order)h Fq(v)f FK(and)h(a)e (Frobenius)k(complement)e(of)g(order)g Fq(k)r FK(\))e(ha)n(v)o(e)i Fq(v)p Fo(\()p Fq(v)14 b Fv(\000)g FK(1)p Fo(\))p Fp(=)p Fq(k)30 b FK(distinct)g(blocks)75 850 y(and)23 b(the)o(y)g(are)f(all)h (of)f(size)i Fq(k)r FK(.)j(Moreo)o(v)o(er)c(each)h(of)e(the)h Fq(v)f FK(points)i(occurs)g(in)e(e)o(xactly)i Fq(v)12 b Fv(\000)g FK(1)21 b(distinct)k(blocks.)30 b(Hence)75 963 y(the)24 b(ro)n(ws)f(and)h(the)g(columns)h(of)e(the)h(incidence)i (matrix)e Fq(M)i FK(of)e(the)f(design)j(are)d(al)o(w)o(ays)i(of)e (constant)j(weight.)216 1076 y Ft(FerreroDesignCode)33 b FK(constructs)d(binary)e(linear)h(code)f(arising)h(from)e(the)g (incdence)j(matrix)e(of)f(a)g(design)75 1189 y(associated)22 b(to)c(a)g(\224Ferrero)i(pair\224)g(arising)g(from)f(a)f(\002x)o (ed-point-free)k(\(fpf\))e(automorphism)h(groups)f(and)f(Frobenius)75 1302 y(group.)216 1415 y(INPUT)-5 b(:)21 b Fq(P)g FK(is)h(a)g(list)h (of)f(prime)h(po)n(wers)g(describing)i(an)e(abelian)h(group)f Fq(G)p FK(.)k Fq(m)19 b Fp(>)g FK(0)j(is)g(an)h(inte)o(ger)g(such)g (that)g Fq(G)75 1528 y FK(admits)j(a)g(c)o(yclic)g(fpf)g(automorphism)i (group)f(of)f(size)g Fq(m)p FK(.)34 b(This)26 b(means)g(that)g(for)g (all)g Fq(q)c Fo(=)28 b Fq(p)3019 1495 y Fm(k)3075 1528 y Fv(2)21 b Fq(P)p FK(,)k(OrderMod\()7 b Fq(p)p FK(,)75 1641 y Fq(m)p FK(\))23 b(must)g(di)n(vide)i Fq(q)e FK(\(see)h(the)g (SON)m(A)-10 b(T)i(A)20 b(documentation)27 b(for)c Ft (FpfAutomorphismGr)q(oup)q(sCy)q(cl)q(ic)p FK(\))q(.)216 1753 y(OUTPUT)-5 b(:)23 b(The)i(binary)j(linear)e(code)h(whose)f (generator)i(matrix)e(is)g(the)g(incidence)i(matrix)e(of)g(a)f(design)i (as-)75 1866 y(sociated)d(to)e(a)f(\224Ferrero)i(pair\224)f(arising)i (from)e(the)g(\002x)o(ed-point-free)j(\(fpf\))d(automorphism)j(group)e (of)e Fq(G)p FK(.)27 b(The)22 b(pair)75 1979 y Fo(\()p Fq(H)7 b Fp(;)j Fq(K)5 b Fo(\))23 b FK(is)i(called)g(a)g(Ferraro)g (pair)g(and)g(the)g(semidirect)h(product)h Fq(K)5 b(H)29 b FK(is)c(a)f(Frobenius)i(group)g(with)f(complement)75 2092 y Fq(H)7 b FK(.)216 2205 y(A)-5 b(UTHORS:)20 b(Peter)k(Mayr)g(and) g(Da)n(vid)g(Jo)o(yner)p 75 2328 1648 4 v 1764 2333 a FF(Example)p 2102 2328 V 75 2353 4 25 v 3747 2353 V 75 2452 4 100 v 188 2422 a(gap>)44 b(G:=AbelianGroup\([5,5])49 b(\);)p 3747 2452 V 75 2552 V 230 2522 a([)43 b(pc)g(group)h(of)f(size) h(25)f(with)g(2)g(generators)j(])p 3747 2552 V 75 2651 V 188 2622 a(gap>)e(FpfAutomorphismGroups)q(Max)q(Siz)q(e\()49 b(G)43 b(\);)p 3747 2651 V 75 2751 V 188 2721 a([)g(24,)g(2)g(])p 3747 2751 V 75 2851 V 188 2821 a(gap>)h(L:=FpfAutomorphismGro)q(ups)q (Cyc)q(li)q(c\()49 b([5,5],)44 b(3)f(\);)p 3747 2851 V 75 2950 V 188 2920 a([)g([)f([)h(f1,)g(f2)g(])g(->)g([)g(f1*f2\2102,) i(f1*f2\2103)g(])d(],)p 3747 2950 V 75 3050 V 273 3020 a([)g(pc)h(group)h(of)f(size)h(25)f(with)h(2)e(generators)k(])d(])p 3747 3050 V 75 3150 V 188 3120 a(gap>)h(D)e(:=)h(DesignFromFerreroPa)q (ir\()49 b(L[2],)44 b(Group\(L[1][1]\),)k("*")43 b(\);)p 3747 3150 V 75 3249 V 230 3219 a([)g(a)g(2)f(-)h(\()g(25,)g(3,)g(2)g (\))f(nearring)j(generated)h(design)e(])p 3747 3249 V 75 3349 V 188 3319 a(gap>)g(M:=IncidenceMat\()j(D)c(\);;)g (Length\(M\);)j(Length\(TransposedMa)q(t\(M)q(\)\);)p 3747 3349 V 75 3448 V 188 3419 a(25)p 3747 3448 V 75 3548 V 188 3518 a(200)p 3747 3548 V 75 3648 V 188 3618 a(gap>)e(C1:=GeneratorMatCode\()q(M*Z)q(\(2\))q(,G)q(F\(2)q(\)\);)p 3747 3648 V 75 3747 V 188 3717 a(a)f(linear)h([200,25,1..24]62..10)q(0) k(code)c(defined)h(by)e(generator)i(matrix)g(over)e(GF\(2\))p 3747 3747 V 75 3847 V 188 3817 a(gap>)h(MinimumDistance\(C1\);)p 3747 3847 V 75 3947 V 188 3917 a(24)p 3747 3947 V 75 4046 V 188 4016 a(gap>)g(C2:=FerreroDesignCode)q(\()k([5,5],3\);)p 3747 4046 V 75 4146 V 188 4116 a(a)43 b(linear)h([200,25,1..24]62..10)q (0)k(code)c(defined)h(by)e(generator)i(matrix)g(over)e(GF\(2\))p 3747 4146 V 75 4246 V 188 4216 a(gap>)h(C1=C2;)p 3747 4246 V 75 4345 V 188 4315 a(true)p 3747 4345 V 75 4445 V 3747 4445 V 75 4470 4 25 v 3747 4470 V 75 4473 3675 4 v 75 4606 a SDict begin H.S end 75 4606 a 75 4606 a SDict begin 13.6 H.A end 75 4606 a 75 4606 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.12) cvn H.B /DEST pdfmark end 75 4606 a 116 x FJ(5.2.12)p 0.0 0.0 1.0 TeXcolorrgb 99 w(RandomLinearCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4896 a Fs(\006)22 b Ft(RandomLinearCode\()53 b(n,)47 b(k,)g(F)g(\))2074 b Fr(\(function\))p Black 216 5122 a Ft(RandomLinearCode)33 b FK(returns)d(a)e(random)h(linear)g(code)g (with)f(w)o(ord)h(length)g Ft(n)q FK(,)f(dimension)i Ft(k)e FK(o)o(v)o(er)g(\002eld)g Ft(F)p FK(.)75 5235 y(The)22 b(method)h(used)g(is)g(to)f(\002rst)g(construct)j(a)d Fq(k)13 b Fv(\002)f Fq(n)21 b FK(matrix)i(of)g(the)f(block)i(form)e Fo(\()p Fq(I)5 b Fp(;)10 b Fq(A)p Fo(\))p FK(,)22 b(where)g Fq(I)27 b FK(is)22 b(a)g Fq(k)13 b Fv(\002)f Fq(k)23 b FK(identity)75 5348 y(matrix)k(and)g Fq(A)e FK(is)h(a)h Fq(k)15 b Fv(\002)f Fo(\()p Fq(n)g Fv(\000)g Fq(k)r Fo(\))25 b FK(matrix)i(constructed)j(using)e Ft(Random\(F\))h FK(repeatedly)-6 b(.)40 b(Then)26 b(the)h(columns)h(are)75 5461 y(permuted)d(using)g(a)e(randomly)i(selected)h(element)e(of)g Ft(SymmetricGroup\(n\))p FK(.)216 5574 y(T)-7 b(o)23 b(create)h(a)f(random)i(unrestricted)i(code,)d(use)g Ft(RandomCode)i FK(\(see)e Ft(RandomCode)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2921 5575 a SDict begin H.S end 2921 5575 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.1.5)p 0.0236 0.0894 0.6179 TeXcolorrgb 3102 5512 a SDict begin H.R end 3102 5512 a 3102 5574 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.5) cvn H.B /ANN pdfmark end 3102 5574 a Black FK(\)\).)p Black Black eop end end %%Page: 70 70 TeXDict begin HPSdict begin 70 69 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.70) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(70)p Black 75 399 1648 4 v 1764 404 a FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188 493 a(gap>)44 b(C)e(:=)h(RandomLinearCode\()48 b(15,)c(4,)f(GF\(3\))h (\);)p 3747 523 V 75 623 V 188 593 a(a)85 b([15,4,?])45 b(randomly)g(generated)g(code)f(over)g(GF\(3\))p 3747 623 V 75 722 V 188 692 a(gap>)g(Display\(C\);)p 3747 722 V 75 822 V 188 792 a(a)f(linear)h([15,4,1..6]6..10)k(random)c (linear)h(code)e(over)h(GF\(3\))p 3747 822 V 75 847 4 25 v 3747 847 V 75 850 3675 4 v 75 1063 a FK(The)25 b(method)h Fy(GU)m(A)-6 b(V)f(A)23 b FK(chooses)k(to)f(output)g(the)g(result)g(of) f(a)g Ft(RandomLinearCode)30 b FK(command)c(is)f(dif)n(ferent)i(than)75 1176 y(other)j(codes.)47 b(F)o(or)28 b(e)o(xample,)j(the)f(bounds)h(on) e(the)h(minimum)f(distance)i(is)e(not)g(displayed.)49 b(Ho)n(weer)l(,)30 b(you)g(can)75 1289 y(use)d(the)f Ft(Display)i FK(command)f(to)f(print)i(this)f(information.)39 b(This)26 b(ne)n(w)g(display)i(method)f(w)o(as)f(added)i(in)e(v)o (ersion)75 1401 y(1.9)d(to)f(speed)i(up)f(the)g(command)h(\(if)f Fq(n)f FK(is)h(about)h(80)f(and)g Fq(k)h FK(about)g(40,)e(for)h(e)o (xample,)h(the)f(time)g(it)f(took)i(to)e(look)i(up)75 1514 y(and/or)h(calculate)h(the)e(bounds)h(on)f(the)f(minimum)h (distance)h(w)o(as)f(too)g(long\).)75 1667 y SDict begin H.S end 75 1667 a 75 1667 a SDict begin 13.6 H.A end 75 1667 a 75 1667 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.13) cvn H.B /DEST pdfmark end 75 1667 a 97 x FJ(5.2.13)p 0.0 0.0 1.0 TeXcolorrgb 99 w(OptimalityCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1938 a Fs(\006)e Ft(OptimalityCode\()52 b(C)47 b(\))2445 b Fr(\(function\))p Black 216 2164 a Ft(OptimalityCode)31 b FK(returns)c(the)g(dif)n(ference)h(between)g (the)e(smallest)h(kno)n(wn)g(upper)g(bound)h(and)e(the)h(actual)75 2277 y(size)k(of)g(the)g(code.)51 b(Note)30 b(that)h(the)g(v)n(alue)h (of)e(the)h(function)i Ft(UpperBound)h FK(is)c(not)h(al)o(w)o(ays)h (equal)f(to)g(the)g(actual)75 2389 y(upper)25 b(bound)g Fq(A)p Fo(\()p Fq(n)p Fp(;)10 b Fq(d)5 b Fo(\))23 b FK(thus)i(the)f (result)g(may)g(not)f(be)h(equal)h(to)e(0)g(e)n(v)o(en)h(if)f(the)h (code)g(is)g(optimal!)216 2502 y Ft(OptimalityLinearCo)q(de)29 b FK(is)23 b(similar)i(b)n(ut)f(applies)h(only)f(to)g(linear)h(codes.) 75 2655 y SDict begin H.S end 75 2655 a 75 2655 a SDict begin 13.6 H.A end 75 2655 a 75 2655 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2.14) cvn H.B /DEST pdfmark end 75 2655 a 97 x FJ(5.2.14)p 0.0 0.0 1.0 TeXcolorrgb 99 w(BestKno)o (wnLinearCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2926 a Fs(\006)d Ft(BestKnownLinearCo)q(de\()53 b(n,)47 b(k,)g(F)g(\))1935 b Fr(\(function\))p Black 216 3152 a Ft(BestKnownLinearCod)q(e)41 b FK(returns)d(the)f(best)g(kno)n(wn)f(\(as)h(of)f(11)g(May)g(2006\))i (linear)f(code)g(of)f(length)i Ft(n)p FK(,)75 3265 y(dimension)24 b Ft(k)e FK(o)o(v)o(er)h(\002eld)f Ft(F)p FK(.)28 b(The)21 b(function)k(uses)e(the)g(tables)g(described)i(in)d(section)i Ft(BoundsMinimumDist)q(anc)q(e)75 3377 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 3378 a SDict begin H.S end 105 3378 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.13)p 0.0236 0.0894 0.6179 TeXcolorrgb 331 3315 a SDict begin H.R end 331 3315 a 331 3377 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.13) cvn H.B /ANN pdfmark end 331 3377 a Black FK(\))h(to)e (construct)j(this)e(code.)216 3490 y(This)k(command)h(can)g(also)g(be)f (called)i(using)f(the)g(syntax)h Ft(BestKnownLinearCode\()53 b(rec)48 b(\))p FK(,)28 b(where)h Ft(rec)75 3603 y FK(must)i(be)h(a)f (record)h(containing)j(the)c(\002elds)h(`lo)n(werBound',)j (`upperBound')f(and)e(`construction'.)57 b(It)31 b(uses)h(the)75 3716 y(information)g(in)e(this)g(\002eld)f(to)h(construct)i(a)d(code.) 48 b(This)29 b(form)h(is)f(meant)h(to)g(be)g(used)g(together)i(with)d (the)h(func-)75 3829 y(tion)k Ft(BoundsMinimumDistanc)q(e)k FK(\(see)c Ft(BoundsMinimumDistan)q(ce)39 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2469 3830 a SDict begin H.S end 2469 3830 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.13)p 0.0236 0.0894 0.6179 TeXcolorrgb 2695 3767 a SDict begin H.R end 2695 3767 a 2695 3829 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.13) cvn H.B /ANN pdfmark end 2695 3829 a Black FK(\)\),)d(if)c(the)i(bounds)g(are)f(already)75 3942 y(calculated.)p 75 4046 1648 4 v 1764 4051 a FF(Example)p 2102 4046 V 75 4071 4 25 v 3747 4071 V 75 4171 4 100 v 188 4141 a(gap>)44 b(C1)f(:=)g(BestKnownLinearCode\()49 b(23,)43 b(12,)h(GF\(2\))g(\);)p 3747 4171 V 75 4270 V 188 4240 a(a)f(linear)h([23,12,7]3)i(punctured)f(code)p 3747 4270 V 75 4370 V 188 4340 a(gap>)f(C1)f(=)f(BinaryGolayCode\(\);)p 3747 4370 V 75 4469 V 188 4439 a(false)213 b(#)43 b(it's)h(constructed) i(differently)p 3747 4469 V 75 4569 V 188 4539 a(gap>)e(C1)f(:=)g (BestKnownLinearCode\()49 b(23,)43 b(12,)h(GF\(2\))g(\);)p 3747 4569 V 75 4669 V 188 4639 a(a)f(linear)h([23,12,7]3)i(punctured)f (code)p 3747 4669 V 75 4768 V 188 4738 a(gap>)f(G1)f(:=)g (MutableCopyMat\(Genera)q(to)q(rMa)q(t\(C)q(1\)\))q(;;)p 3747 4768 V 75 4868 V 188 4838 a(gap>)h(PutStandardForm\(G1\);)p 3747 4868 V 75 4968 V 188 4938 a(\(\))p 3747 4968 V 75 5067 V 188 5037 a(gap>)g(Display\(G1\);)p 3747 5067 V 75 5167 V 230 5137 a(1)f(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(1) h(.)g(1)f(.)h(1)g(1)g(1)f(.)h(.)g(.)f(1)p 3747 5167 V 75 5266 V 230 5237 a(.)h(1)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(1) h(1)g(1)f(1)h(1)g(.)g(.)f(1)h(.)g(.)f(.)p 3747 5266 V 75 5366 V 230 5336 a(.)h(.)g(1)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(1) h(1)g(.)f(1)h(.)g(.)g(1)f(.)h(1)g(.)f(1)p 3747 5366 V 75 5466 V 230 5436 a(.)h(.)g(.)f(1)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(1) h(1)g(.)f(.)h(.)g(1)g(1)f(1)h(.)g(1)f(.)p 3747 5466 V 75 5565 V 230 5535 a(.)h(.)g(.)f(.)h(1)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(1) h(1)g(.)f(.)h(1)g(1)g(.)f(1)h(1)g(.)f(1)p 3747 5565 V Black Black eop end end %%Page: 71 71 TeXDict begin HPSdict begin 71 70 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.71) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(71)p Black 75 428 4 100 v 230 399 a FF(.)43 b(.)g(.)f(.)h(.)g(1)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(1)g(1)f(.)h(.)g(1)g (1)f(.)h(1)g(1)f(1)p 3747 428 V 75 528 V 230 498 a(.)h(.)g(.)f(.)h(.)g (.)f(1)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(1)f(1)h(.)g(.)g(1)f(1)h(.)g(1)f(1) p 3747 528 V 75 628 V 230 598 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(1)g(.)f(.)h (.)g(.)f(1)h(.)g(1)f(1)h(.)g(1)g(1)f(1)h(1)g(.)f(.)p 3747 628 V 75 727 V 230 697 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(1)f(.)h (.)g(.)f(.)h(1)g(.)f(1)h(1)g(.)g(1)f(1)h(1)g(1)f(.)p 3747 727 V 75 827 V 230 797 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(1)h (.)g(.)f(.)h(.)g(1)f(.)h(1)g(1)g(.)f(1)h(1)g(1)f(.)p 3747 827 V 75 927 V 230 897 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h (1)g(.)f(1)h(.)g(1)f(1)h(1)g(.)g(.)f(.)h(1)g(1)f(1)p 3747 927 V 75 1026 V 230 996 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h (.)g(1)f(.)h(1)g(.)f(1)h(1)g(1)g(.)f(.)h(.)g(1)f(1)p 3747 1026 V 75 1126 V 188 1096 a(gap>)i(C2)f(:=)g(BinaryGolayCode\(\);) p 3747 1126 V 75 1225 V 188 1196 a(a)g(cyclic)h([23,12,7]3)i(binary)e (Golay)g(code)g(over)g(GF\(2\))p 3747 1225 V 75 1325 V 188 1295 a(gap>)g(G2)f(:=)g(MutableCopyMat\(Genera)q(to)q(rMa)q(t\(C) q(2\)\))q(;;)p 3747 1325 V 75 1425 V 188 1395 a(gap>)h (PutStandardForm\(G2\);)p 3747 1425 V 75 1524 V 188 1494 a(\(\))p 3747 1524 V 75 1624 V 188 1594 a(gap>)g(Display\(G2\);)p 3747 1624 V 75 1724 V 230 1694 a(1)f(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)f(1)h(.)g(1)f(.)h(1)g(1)g(1)f(.)h(.)g(.)f(1)p 3747 1724 V 75 1823 V 230 1793 a(.)h(1)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)f(1)h(1)g(1)f(1)h(1)g(.)g(.)f(1)h(.)g(.)f(1)p 3747 1823 V 75 1923 V 230 1893 a(.)h(.)g(1)f(.)h(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)f(1)h(1)g(.)f(1)h(.)g(.)g(1)f(.)h(1)g(.)f(1)p 3747 1923 V 75 2022 V 230 1993 a(.)h(.)g(.)f(1)h(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)f(1)h(1)g(.)f(.)h(.)g(1)g(1)f(1)h(.)g(1)f(1)p 3747 2022 V 75 2122 V 230 2092 a(.)h(.)g(.)f(.)h(1)g(.)f(.)h(.)g(.)f(.) h(.)g(.)f(1)h(1)g(.)f(.)h(1)g(1)g(.)f(1)h(1)g(.)f(.)p 3747 2122 V 75 2222 V 230 2192 a(.)h(.)g(.)f(.)h(.)g(1)f(.)h(.)g(.)f(.) h(.)g(.)f(.)h(1)g(1)f(.)h(.)g(1)g(1)f(.)h(1)g(1)f(.)p 3747 2222 V 75 2321 V 230 2291 a(.)h(.)g(.)f(.)h(.)g(.)f(1)h(.)g(.)f(.) h(.)g(.)f(.)h(.)g(1)f(1)h(.)g(.)g(1)f(1)h(.)g(1)f(1)p 3747 2321 V 75 2421 V 230 2391 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(1)g(.)f(.) h(.)g(.)f(1)h(.)g(1)f(1)h(.)g(1)g(1)f(1)h(1)g(.)f(.)p 3747 2421 V 75 2521 V 230 2491 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(1)f(.) h(.)g(.)f(.)h(1)g(.)f(1)h(1)g(.)g(1)f(1)h(1)g(1)f(.)p 3747 2521 V 75 2620 V 230 2590 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(1) h(.)g(.)f(.)h(.)g(1)f(.)h(1)g(1)g(.)f(1)h(1)g(1)f(1)p 3747 2620 V 75 2720 V 230 2690 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.) h(1)g(.)f(1)h(.)g(1)f(1)h(1)g(.)g(.)f(.)h(1)g(1)f(.)p 3747 2720 V 75 2819 V 230 2790 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.) h(.)g(1)f(.)h(1)g(.)f(1)h(1)g(1)g(.)f(.)h(.)g(1)f(1)p 3747 2819 V 75 2919 V 188 2889 a(##)h(Despite)i(their)f(generator)h (matrices)g(are)f(different,)h(they)f(are)f(equivalent)j(codes,)f(see)e (below.)p 3747 2919 V 75 3019 V 188 2989 a(gap>)h (IsEquivalent\(C1,C2\);)p 3747 3019 V 75 3118 V 188 3088 a(true)p 3747 3118 V 75 3218 V 188 3188 a(gap>)g (CodeIsomorphism\(C1,C2)q(\);)p 3747 3218 V 75 3318 V 188 3288 a(\(4,14,6,12,5\)\(7,17,1)q(8,1)q(1,1)q(9\)\()q(8,2)q(2,)q (13,)q(21,)q(16\))q(\(10)q(,23)q(,15)q(,20)q(\))p 3747 3318 V 75 3417 V 188 3387 a(gap>)g(Display\()h(BestKnownLinearCode\()k (81,)43 b(77,)h(GF\(4\))g(\))e(\);)p 3747 3417 V 75 3517 V 188 3487 a(a)h(linear)h([81,77,3]2..3)j(shortened)e(code)f(of)p 3747 3517 V 75 3616 V 188 3587 a(a)f(linear)h([85,81,3]1)i(Hamming)e (\(4,4\))h(code)e(over)h(GF\(4\))p 3747 3616 V 75 3716 V 188 3686 a(gap>)g(C:=BestKnownLinearCod)q(e\(1)q(74,)q(72)q(\);)p 3747 3716 V 75 3816 V 188 3786 a(a)f(linear)h([174,72,31..36]26..8)q(7) k(code)c(defined)h(by)e(generator)i(matrix)g(over)e(GF\(2\))p 3747 3816 V 75 3915 V 188 3885 a(gap>)h(bounds)g(:=)f (BoundsMinimumDistan)q(ce\()49 b(81,)43 b(77,)h(GF\(4\))g(\);)p 3747 3915 V 75 4015 V 188 3985 a(rec\()g(n)e(:=)h(81,)h(k)e(:=)h(77,)h (q)e(:=)h(4,)p 3747 4015 V 75 4115 V 273 4085 a(references)i(:=)e (rec\()h(Ham)f(:=)g([)g("\045T)h(this)f(reference)j(is)d(unknown,)i (for)e(more)h(info",)p 3747 4115 V 75 4214 V 611 4184 a("\045T)g(contact)g(A.E.)g(Brouwer)h(\(aeb@cwi.nl\)")i(],)p 3747 4214 V 75 4314 V 442 4284 a(cap)c(:=)g([)g("\045T)g(this)h (reference)i(is)d(unknown,)i(for)e(more)h(info",)p 3747 4314 V 75 4413 V 611 4384 a("\045T)g(contact)g(A.E.)g(Brouwer)h (\(aeb@cwi.nl\)")i(])42 b(\),)p 3747 4413 V 75 4513 V 273 4483 a(construction)k(:=)d([)g(\(Operation)i("ShortenedCode"\),)p 3747 4513 V 75 4613 V 442 4583 a([)e([)f(\(Operation)k ("HammingCode"\),)i([)42 b(4,)h(4)g(])g(],)g([)f(1,)h(2,)g(3,)g(4)g(])g (])f(],)p 3747 4613 V 75 4712 V 273 4682 a(lowerBound)j(:=)e(3,)p 3747 4712 V 75 4812 V 273 4782 a(lowerBoundExplanation)49 b(:=)43 b([)g("Lb\(81,77\)=3,)k(by)c(shortening)i(of:",)p 3747 4812 V 75 4912 V 442 4882 a("Lb\(85,81\)=3,)i(reference:)e(Ham")f (],)f(upperBound)j(:=)d(3,)p 3747 4912 V 75 5011 V 273 4981 a(upperBoundExplanation)49 b(:=)43 b([)g("Ub\(81,77\)=3,)k(by)c (considering)j(shortening)f(to:",)p 3747 5011 V 75 5111 V 442 5081 a("Ub\(18,14\)=3,)i(reference:)e(cap")f(])f(\))p 3747 5111 V 75 5210 V 188 5181 a(gap>)h(C)e(:=)h(BestKnownLinearCode)q (\()48 b(bounds)d(\);)p 3747 5210 V 75 5310 V 188 5280 a(a)e(linear)h([81,77,3]2..3)j(shortened)e(code)p 3747 5310 V 75 5410 V 188 5380 a(gap>)f(C)e(=)h(BestKnownLinearCode\()q(81,) 49 b(77,)44 b(GF\(4\))g(\);)p 3747 5410 V 75 5509 V 188 5479 a(true)p 3747 5509 V 75 5534 4 25 v 3747 5534 V 75 5537 3675 4 v Black Black eop end end %%Page: 72 72 TeXDict begin HPSdict begin 72 71 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.72) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(72)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (section.5.3) cvn H.B /DEST pdfmark end 75 307 a 92 x FM(5.3)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Gabidulin)32 b(Codes)p Black 75 606 a FK(These)40 b(\002)n(v)o(e)f(binary)-6 b(,)46 b(linear)41 b(codes)g(are)g(deri)n(v) o(ed)g(from)f(an)g(article)h(by)g(Gabidulin,)k(Da)n(vydo)o(v)d(and)e(T) -7 b(ombak)75 718 y([)p 0.0236 0.6179 0.0894 TeXcolorrgb 105 720 a SDict begin H.S end 105 720 a 0.0236 0.6179 0.0894 TeXcolorrgb -2 x FK(GDT91)p 0.0236 0.6179 0.0894 TeXcolorrgb 383 656 a SDict begin H.R end 383 656 a 383 718 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.GDT91) cvn H.B /ANN pdfmark end 383 718 a Black FK(].)67 b(All)35 b(these)j(codes)f(are)g(de\002ned)g(by)f(check)i(matrices.)68 b(Exact)37 b(de\002nitions)h(can)f(be)f(found)i(in)e(the)75 831 y(article.)k(The)26 b(Gabidulin)i(code,)g(the)f(enlar)n(ged)j (Gabidulin)e(code,)g(the)f(Da)n(vydo)o(v)h(code,)g(the)f(T)-7 b(ombak)27 b(code,)h(and)75 944 y(the)c(enlar)n(ged)i(T)-7 b(ombak)23 b(code,)h(correspond)j(with)c(theorem)i(1,)e(2,)g(3,)g(4,)g (and)h(5,)f(respecti)n(v)o(ely)j(in)d(the)h(article.)216 1057 y(Lik)o(e)h(the)g(Hamming)g(codes,)h(these)g(codes)g(ha)n(v)o(e)f (\002x)o(ed)g(minimum)f(distance)j(and)f(co)o(v)o(ering)g(radius,)g(b)n (ut)g(can)75 1170 y(be)e(arbitrarily)i(long.)75 1323 y SDict begin H.S end 75 1323 a 75 1323 a SDict begin 13.6 H.A end 75 1323 a 75 1323 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.3.1) cvn H.B /DEST pdfmark end 75 1323 a 96 x FJ(5.3.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(GabidulinCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1594 a Fs(\006)c Ft(GabidulinCode\()52 b(m,)47 b(w1,)g(w2)g(\))2121 b Fr(\(function\))p Black 216 1819 a Ft(GabidulinCode)33 b FK(yields)d(a)e(code)i(of)e(length)j (5)d(.)44 b(2)1904 1786 y Fm(m)p Fh(\000)p Fr(2)2056 1819 y Fv(\000)15 b FK(1,)28 b(redundanc)o(y)k(2)p Fq(m)15 b Fv(\000)g FK(1,)28 b(minimum)h(distance)i(3)75 1932 y(and)24 b(co)o(v)o(ering)h(radius)g(2.)j Ft(w1)c FK(and)g Ft(w2)f FK(should)i(be)f(elements)h(of)e Fq(GF)7 b Fo(\()p FK(2)2320 1899 y Fm(m)p Fh(\000)p Fr(2)2458 1932 y Fo(\))p FK(.)75 2088 y SDict begin H.S end 75 2088 a 75 2088 a SDict begin 13.6 H.A end 75 2088 a 75 2088 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.3.2) cvn H.B /DEST pdfmark end 75 2088 a 93 x FJ(5.3.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Enlar)o(gedGabidulinCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2356 a Fs(\006)22 b Ft(EnlargedGabidulin)q(Cod)q(e\()53 b(m,)47 b(w1,)g(w2,)h(e)e(\))1611 b Fr(\(function\))p Black 216 2582 a Ft(EnlargedGabidulinC)q(ode)25 b FK(yields)c(a)e(code) h(of)f(length)i(7.)27 b(2)2173 2549 y Fm(m)p Fh(\000)p Fr(2)2319 2582 y Fv(\000)9 b FK(2,)19 b(redundanc)o(y)j(2)p Fq(m)p FK(,)d(minimum)g(distance)75 2694 y(3)k(and)h(co)o(v)o(ering)h (radius)g(2.)k Ft(w1)23 b FK(and)h Ft(w2)f FK(are)h(elements)h(of)f Fq(GF)6 b Fo(\()p FK(2)2148 2661 y Fm(m)p Fh(\000)p Fr(2)2286 2694 y Fo(\))p FK(.)28 b Ft(e)23 b FK(is)h(an)f(element)i(of)e Fq(GF)7 b Fo(\()p FK(2)3251 2661 y Fm(m)3304 2694 y Fo(\))p FK(.)75 2850 y SDict begin H.S end 75 2850 a 75 2850 a SDict begin 13.6 H.A end 75 2850 a 75 2850 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.3.3) cvn H.B /DEST pdfmark end 75 2850 a 94 x FJ(5.3.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Da)n(vydo)o(vCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3118 a Fs(\006)22 b Ft(DavydovCode\()51 b(r,)c(v,)g(ei,)h(ej)f(\))2074 b Fr(\(function\))p Black 216 3344 a Ft(DavydovCode)28 b FK(yields)e(a)f(code)g(of)g(length)h(2)1647 3311 y Fm(v)1694 3344 y Fo(+)13 b FK(2)1823 3311 y Fm(r)r Fh(\000)p Fm(v)1949 3344 y Fv(\000)g FK(3,)25 b(redundanc)o(y)i Ft(r)q FK(,)d(minimum)g(distance)j(4)e(and)g(co)o(v-)75 3457 y(ering)g(radius)h(2.)k Ft(v)23 b FK(is)h(an)g(inte)o(ger)i (between)f(2)f(and)g Fq(r)15 b Fv(\000)e FK(2.)30 b Ft(ei)24 b FK(and)h Ft(ej)f FK(are)g(elements)i(of)e Fq(GF)6 b Fo(\()p FK(2)3122 3424 y Fm(v)3157 3457 y Fo(\))23 b FK(and)i Fq(GF)7 b Fo(\()p FK(2)3579 3424 y Fm(r)r Fh(\000)p Fm(v)3692 3457 y Fo(\))p FK(,)75 3570 y(respecti)n(v)o(ely)-6 b(.)75 3722 y SDict begin H.S end 75 3722 a 75 3722 a SDict begin 13.6 H.A end 75 3722 a 75 3722 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.3.4) cvn H.B /DEST pdfmark end 75 3722 a 97 x FJ(5.3.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(T)d(ombakCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3993 a Fs(\006)22 b Ft(TombakCode\()51 b(m,)c(e,)g(beta,)h(gamma,)h(w1,)e (w2)g(\))1518 b Fr(\(function\))p Black 216 4219 a Ft(TombakCode)27 b FK(yields)f(a)d(code)i(of)g(length)g(15)13 b Fv(\001)g FK(2)1738 4186 y Fm(m)p Fh(\000)p Fr(3)1889 4219 y Fv(\000)g FK(3,)24 b(redundanc)o(y)j(2)p Fq(m)p FK(,)c(minimum)h(distance)i(4)e (and)h(co)o(v-)75 4332 y(ering)f(radius)f(2.)28 b Ft(e)23 b FK(is)f(an)g(element)i(of)e Fq(GF)7 b Fo(\()p FK(2)1497 4299 y Fm(m)1550 4332 y Fo(\))p FK(.)28 b Ft(beta)23 b FK(and)g Ft(gamma)h FK(are)e(elements)i(of)f Fq(GF)7 b Fo(\()p FK(2)3034 4299 y Fm(m)p Fh(\000)p Fr(1)3171 4332 y Fo(\))p FK(.)28 b Ft(w1)23 b FK(and)g Ft(w2)f FK(are)75 4445 y(elements)j(of)e Fq(GF)7 b Fo(\()p FK(2)728 4412 y Fm(m)p Fh(\000)p Fr(3)866 4445 y Fo(\))p FK(.)75 4600 y SDict begin H.S end 75 4600 a 75 4600 a SDict begin 13.6 H.A end 75 4600 a 75 4600 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.3.5) cvn H.B /DEST pdfmark end 75 4600 a 94 x FJ(5.3.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Enlar)o(gedT)-9 b(ombakCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4868 a Fs(\006)22 b Ft(EnlargedTombakCod)q(e\()53 b(m,)47 b(e,)g(beta,)h (gamma,)h(w1,)e(w2,)g(u)g(\))1008 b Fr(\(function\))p Black 216 5094 a Ft(EnlargedTombakCode)34 b FK(yields)c(a)f(code)g(of)f (length)i(23)14 b Fv(\001)g FK(2)2137 5061 y Fm(m)p Fh(\000)p Fr(4)2291 5094 y Fv(\000)g FK(3,)30 b(redundanc)o(y)h(2)p Fq(m)14 b Fv(\000)g FK(1,)30 b(minimum)f(dis-)75 5207 y(tance)39 b(4)f(and)g(co)o(v)o(ering)i(radius)f(2.)72 b(The)37 b(parameters)j Ft(m)q FK(,)g Ft(e)p FK(,)h Ft(beta)q FK(,)g Ft(gamma)r FK(,)f Ft(w1)e FK(and)h Ft(w2)e FK(are)i(de\002ned)f (as)g(in)75 5320 y Ft(TombakCode)p FK(.)32 b Ft(u)23 b FK(is)g(an)h(element)g(of)g Fq(GF)6 b Fo(\()p FK(2)1468 5287 y Fm(m)p Fh(\000)p Fr(1)1606 5320 y Fo(\))p FK(.)p Black Black eop end end %%Page: 73 73 TeXDict begin HPSdict begin 73 72 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.73) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(73)p Black 75 399 1648 4 v 1764 404 a FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188 493 a(gap>)44 b(GabidulinCode\()j(4,)c(Z\(4\)\2100,)h(Z\(4\)\2101)h (\);)p 3747 523 V 75 623 V 188 593 a(a)e(linear)h([19,12,3]2)i (Gabidulin)f(code)f(\(m=4\))g(over)g(GF\(2\))p 3747 623 V 75 722 V 188 692 a(gap>)g(EnlargedGabidulinCode)q(\()k(4,)43 b(Z\(4\)\2100,)i(Z\(4\)\2101,)g(Z\(16\)\21011)g(\);)p 3747 722 V 75 822 V 188 792 a(a)e(linear)h([26,18,3]2)i(enlarged)f (Gabidulin)g(code)f(\(m=4\))g(over)g(GF\(2\))p 3747 822 V 75 922 V 188 892 a(gap>)g(DavydovCode\()i(6,)d(3,)g(Z\(8\)\2101,)i (Z\(8\)\2105)f(\);)p 3747 922 V 75 1021 V 188 991 a(a)f(linear)h ([13,7,4]2)h(Davydov)g(code)f(\(r=6,)g(v=3\))g(over)f(GF\(2\))p 3747 1021 V 75 1121 V 188 1091 a(gap>)h(TombakCode\()i(5,)d (Z\(32\)\2106,)i(Z\(16\)\21014,)g(Z\(16\)\21010,)h(Z\(4\)\2100,)e (Z\(4\)\2101)h(\);)p 3747 1121 V 75 1220 V 188 1191 a(a)e(linear)h ([57,47,4]2)i(Tombak)e(code)g(\(m=5\))g(over)g(GF\(2\))p 3747 1220 V 75 1320 V 188 1290 a(gap>)g(EnlargedTombakCode\()k(6,)43 b(Z\(32\)\2106,)j(Z\(16\)\21014,)f(Z\(16\)\21010,)p 3747 1320 V 75 1420 V 188 1390 a(>)e(Z\(4\)\2100,)h(Z\(4\)\2100,)h (Z\(32\)\21023)g(\);)p 3747 1420 V 75 1519 V 188 1489 a(a)e(linear)h([89,78,4]2)i(enlarged)f(Tombak)f(code)g(\(m=6\))g(over)g (GF\(2\))p 3747 1519 V 75 1544 4 25 v 3747 1544 V 75 1547 3675 4 v 75 1689 a SDict begin H.S end 75 1689 a 75 1689 a SDict begin 13.6 H.A end 75 1689 a 75 1689 a SDict begin [ /View [/XYZ H.V] /Dest (section.5.4) cvn H.B /DEST pdfmark end 75 1689 a 150 x FM(5.4)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Golay)29 b(Codes)p Black 75 2046 a FK(\223)19 b(The)f(Golay)i (code)f(is)g(probably)j(the)d(most)g(important)i(of)e(all)g(codes)h (for)f(both)h(practical)h(and)f(theoretical)i(reasons.)75 2158 y(\224)50 b(\([)p 0.0236 0.6179 0.0894 TeXcolorrgb 225 2159 a SDict begin H.S end 225 2159 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(MS83)p 0.0236 0.6179 0.0894 TeXcolorrgb 447 2096 a SDict begin H.R end 447 2096 a 447 2158 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.MS83) cvn H.B /ANN pdfmark end 447 2158 a Black 1 w FK(],)32 b(pg.)51 b(64\).)f(Though)32 b(born)g(in)f(Switzerland,)i(M.)d(J.)g(E.) f(Golay)i(\(1902-1989\))k(w)o(ork)o(ed)d(for)f(the)g(US)75 2271 y(Army)20 b(Labs)h(for)g(most)g(of)g(his)g(career)-5 b(.)29 b(F)o(or)20 b(more)h(information)i(on)e(his)g(life,)h(see)f(his) g(obit)h(in)e(the)i(June)f(1990)h(IEEE)75 2384 y(Information)k(Society) e(Ne)n(wsletter)-5 b(.)75 2535 y SDict begin H.S end 75 2535 a 75 2535 a SDict begin 13.6 H.A end 75 2535 a 75 2535 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.4.1) cvn H.B /DEST pdfmark end 75 2535 a 97 x FJ(5.4.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(BinaryGolayCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2806 a Fs(\006)22 b Ft(BinaryGolayCode\()53 b(\))2491 b Fr(\(function\))p Black 216 3032 a Ft(BinaryGolayCode)27 b FK(returns)d(a)f(binary)h(Golay)e(code.)30 b(This)22 b(is)g(a)h(perfect)h Fo([)p FK(23)p Fp(;)10 b FK(12)p Fp(;)g FK(7)p Fo(])25 b FK(code.)k(It)22 b(is)g(also)i(c)o(yclic,)75 3145 y(and)36 b(has)f(generator)j(polynomial)f Fq(g)p Fo(\()p Fq(x)p Fo(\))28 b(=)f FK(1)17 b Fo(+)f Fq(x)1692 3112 y Fr(2)1747 3145 y Fo(+)h Fq(x)1875 3112 y Fr(4)1930 3145 y Fo(+)f Fq(x)2057 3112 y Fr(5)2112 3145 y Fo(+)h Fq(x)2240 3112 y Fr(6)2295 3145 y Fo(+)f Fq(x)2422 3112 y Fr(10)2510 3145 y Fo(+)h Fq(x)2638 3112 y Fr(11)2709 3145 y FK(.)63 b(Extending)37 b(it)e(results)h(in)f(an)75 3258 y(e)o(xtended)26 b(Golay)f(code)g(\(see)g Ft(ExtendedBinaryGolay)q (Cod)q(e)30 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2156 3259 a SDict begin H.S end 2156 3259 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.4.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 2337 3196 a SDict begin H.R end 2337 3196 a 2337 3258 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.4.2) cvn H.B /ANN pdfmark end 2337 3258 a Black FK(\)\).)h(There')-5 b(s)25 b(also)g(the)g(ternary)h(Golay)e(code)75 3371 y(\(see)g Ft(TernaryGolayCode)29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1039 3372 a SDict begin H.S end 1039 3372 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.4.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 1220 3309 a SDict begin H.R end 1220 3309 a 1220 3371 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.4.3) cvn H.B /ANN pdfmark end 1220 3371 a Black FK(\)\).)p 75 3480 1648 4 v 1764 3485 a FF(Example)p 2102 3480 V 75 3505 4 25 v 3747 3505 V 75 3605 4 100 v 188 3575 a(gap>)44 b(C:=BinaryGolayCode\(\);)p 3747 3605 V 75 3704 V 188 3675 a(a)f(cyclic)h([23,12,7]3)i(binary)e(Golay)g (code)g(over)g(GF\(2\))p 3747 3704 V 75 3804 V 188 3774 a(gap>)g(ExtendedBinaryGolayCo)q(de\()q(\))k(=)43 b (ExtendedCode\(Binary)q(Gol)q(ayC)q(ode)q(\(\)\))q(;)p 3747 3804 V 75 3904 V 188 3874 a(true)p 3747 3904 V 75 4003 V 188 3973 a(gap>)h(IsPerfectCode\(C\);)p 3747 4003 V 75 4103 V 188 4073 a(true)p 3747 4103 V 75 4203 V 188 4173 a(gap>)g(IsCyclicCode\(C\);)p 3747 4203 V 75 4302 V 188 4272 a(true)p 3747 4302 V 75 4327 4 25 v 3747 4327 V 75 4330 3675 4 v 75 4462 a SDict begin H.S end 75 4462 a 75 4462 a SDict begin 13.6 H.A end 75 4462 a 75 4462 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.4.2) cvn H.B /DEST pdfmark end 75 4462 a 116 x FJ(5.4.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(ExtendedBinaryGolayCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4752 a Fs(\006)22 b Ft(ExtendedBinaryGol)q(ayC)q(ode)q(\()52 b(\))2121 b Fr(\(function\))p Black 216 4978 a Ft(ExtendedBinaryGola)q (yCo)q(de)36 b FK(returns)d(an)d(e)o(xtended)j(binary)f(Golay)f(code.) 51 b(This)31 b(is)f(a)h Fo([)p FK(24)p Fp(;)10 b FK(12)p Fp(;)g FK(8)p Fo(])33 b FK(code.)75 5091 y(Puncturing)25 b(in)e(the)g(last)h(position)h(results)g(in)e(a)f(perfect)j(binary)f (Golay)g(code)f(\(see)h Ft(BinaryGolayCode)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3485 5092 a SDict begin H.S end 3485 5092 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.4.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 3666 5029 a SDict begin H.R end 3666 5029 a 3666 5091 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.4.1) cvn H.B /ANN pdfmark end 3666 5091 a Black FK(\)\).)75 5204 y(The)23 b(code)h(is)g(self-dual.)p 75 5298 1648 4 v 1764 5303 a FF(Example)p 2102 5298 V 75 5323 4 25 v 3747 5323 V 75 5423 4 100 v 188 5393 a(gap>)44 b(C)e(:=)h(ExtendedBinaryGolay)q(Cod)q(e\()q(\);)p 3747 5423 V 75 5523 V 188 5493 a(a)g(linear)h([24,12,8]4)i(extended)f (binary)f(Golay)g(code)g(over)g(GF\(2\))p 3747 5523 V 75 5622 V 188 5592 a(gap>)g(IsSelfDualCode\(C\);)p 3747 5622 V Black Black eop end end %%Page: 74 74 TeXDict begin HPSdict begin 74 73 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.74) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(74)p Black 75 428 4 100 v 188 399 a FF(true)p 3747 428 V 75 528 V 188 498 a(gap>)44 b(P)e(:=)h(PuncturedCode\(C\);)p 3747 528 V 75 628 V 188 598 a(a)g(linear)h([23,12,7]3)i(punctured)f (code)p 3747 628 V 75 727 V 188 697 a(gap>)f(P)e(=)h (BinaryGolayCode\(\);)p 3747 727 V 75 827 V 188 797 a(true)p 3747 827 V 75 927 V 188 897 a(gap>)h(IsCyclicCode\(C\);)p 3747 927 V 75 1026 V 188 996 a(false)p 3747 1026 V 75 1126 V 3747 1126 V 75 1151 4 25 v 3747 1151 V 75 1154 3675 4 v 75 1366 a SDict begin H.S end 75 1366 a 75 1366 a SDict begin 13.6 H.A end 75 1366 a 75 1366 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.4.3) cvn H.B /DEST pdfmark end 75 1366 a 117 x FJ(5.4.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(T)-9 b(er)o(naryGolayCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1657 a Fs(\006)22 b Ft(TernaryGolayCode\()53 b(\))2445 b Fr(\(function\))p Black 216 1883 a Ft(TernaryGolayCode)41 b FK(returns)c(a)f(ternary)h(Golay)g(code.)66 b(This)36 b(is)f(a)h(perfect)h Fo([)p FK(11)p Fp(;)10 b FK(6)p Fp(;)g FK(5)p Fo(])38 b FK(code.)66 b(It)36 b(is)g(also)75 1996 y(c)o(yclic,)22 b(and)f(has)h(generator)h(polynomial)g Fq(g)p Fo(\()p Fq(x)p Fo(\))d(=)d FK(2)10 b Fo(+)g Fq(x)1863 1963 y Fr(2)1912 1996 y Fo(+)g FK(2)p Fq(x)2078 1963 y Fr(3)2127 1996 y Fo(+)g Fq(x)2248 1963 y Fr(4)2296 1996 y Fo(+)g Fq(x)2417 1963 y Fr(5)2454 1996 y FK(.)27 b(Extending)c(it)e(results)h(in)f(an)g(e)o(xtended)75 2109 y(Golay)37 b(code)g(\(see)g Ft(ExtendedTernaryGol)q(ay)q(Cod)q(e) 42 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1901 2110 a SDict begin H.S end 1901 2110 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.4.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 2082 2047 a SDict begin H.R end 2082 2047 a 2082 2109 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.4.4) cvn H.B /ANN pdfmark end 2082 2109 a Black FK(\)\).)68 b(There')-5 b(s)38 b(also)f(the)f(binary)i(Golay)f(code)h(\(see)75 2222 y Ft(BinaryGolayCode)28 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 823 2223 a SDict begin H.S end 823 2223 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.4.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 1004 2160 a SDict begin H.R end 1004 2160 a 1004 2222 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.4.1) cvn H.B /ANN pdfmark end 1004 2222 a Black FK(\)\).)p 75 2323 1648 4 v 1764 2328 a FF(Example)p 2102 2323 V 75 2348 4 25 v 3747 2348 V 75 2448 4 100 v 188 2418 a(gap>)44 b(C:=TernaryGolayCode\(\))q(;)p 3747 2448 V 75 2548 V 188 2518 a(a)f(cyclic)h([11,6,5]2)h(ternary)g (Golay)f(code)g(over)g(GF\(3\))p 3747 2548 V 75 2647 V 188 2617 a(gap>)g(ExtendedTernaryGolayC)q(ode)q(\(\))49 b(=)43 b(ExtendedCode\(TernaryG)q(ola)q(yCo)q(de\()q(\)\);)p 3747 2647 V 75 2747 V 188 2717 a(true)p 3747 2747 V 75 2846 V 188 2817 a(gap>)h(IsCyclicCode\(C\);)p 3747 2846 V 75 2946 V 188 2916 a(true)p 3747 2946 V 75 2971 4 25 v 3747 2971 V 75 2974 3675 4 v 75 3104 a SDict begin H.S end 75 3104 a 75 3104 a SDict begin 13.6 H.A end 75 3104 a 75 3104 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.4.4) cvn H.B /DEST pdfmark end 75 3104 a 117 x FJ(5.4.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(ExtendedT)-9 b(er)o(naryGolayCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3395 a Fs(\006)22 b Ft(ExtendedTernaryGo)q(lay)q(Cod)q(e\()53 b(\))2074 b Fr(\(function\))p Black 216 3621 a Ft(ExtendedTernaryGol)q(ayC)q(ode)35 b FK(returns)30 b(an)f(e)o(xtended)h(ternary)h(Golay)e(code.)45 b(This)28 b(is)h(a)f Fo([)p FK(12)p Fp(;)10 b FK(6)p Fp(;)g FK(6)p Fo(])31 b FK(code.)75 3734 y(Puncturing)h(this)e(code)h (results)h(in)d(a)h(perfect)h(ternary)h(Golay)e(code)h(\(see)f Ft(TernaryGolayCode)35 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3296 3735 a SDict begin H.S end 3296 3735 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.4.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 3477 3672 a SDict begin H.R end 3477 3672 a 3477 3734 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.4.3) cvn H.B /ANN pdfmark end 3477 3734 a Black FK(\)\).)49 b(The)75 3847 y(code)24 b(is)g(self-dual.)p 75 3933 1648 4 v 1764 3938 a FF(Example)p 2102 3933 V 75 3958 4 25 v 3747 3958 V 75 4058 4 100 v 188 4028 a(gap>)44 b(C)e(:=)h(ExtendedTernaryGola)q(yCo)q(de)q(\(\);)p 3747 4058 V 75 4157 V 188 4128 a(a)g(linear)h([12,6,6]3)h(extended)g (ternary)g(Golay)f(code)g(over)g(GF\(3\))p 3747 4157 V 75 4257 V 188 4227 a(gap>)g(IsSelfDualCode\(C\);)p 3747 4257 V 75 4357 V 188 4327 a(true)p 3747 4357 V 75 4456 V 188 4426 a(gap>)g(P)e(:=)h(PuncturedCode\(C\);)p 3747 4456 V 75 4556 V 188 4526 a(a)g(linear)h([11,6,5]2)h(punctured)h (code)p 3747 4556 V 75 4656 V 188 4626 a(gap>)e(P)e(=)h (TernaryGolayCode\(\);)p 3747 4656 V 75 4755 V 188 4725 a(true)p 3747 4755 V 75 4855 V 188 4825 a(gap>)h(IsCyclicCode\(C\);)p 3747 4855 V 75 4954 V 188 4925 a(false)p 3747 4954 V 75 4979 4 25 v 3747 4979 V 75 4982 3675 4 v 75 5123 a SDict begin H.S end 75 5123 a 75 5123 a SDict begin 13.6 H.A end 75 5123 a 75 5123 a SDict begin [ /View [/XYZ H.V] /Dest (section.5.5) cvn H.B /DEST pdfmark end 75 5123 a 149 x FM(5.5)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Generating)31 b(Cyclic)f(Codes)p Black 75 5479 a FK(The)18 b(elements)h(of)f(a)g(c)o (yclic)h(code)14 b Fq(C)19 b FK(are)g(all)f(multiples)i(of)e(a)f (\('generator'\))22 b(polynomial)f Fq(g)p Fo(\()p Fq(x)p Fo(\))p FK(,)e(where)g(calculations)75 5592 y(are)27 b(carried)h(out)f(modulo)h Fq(x)976 5559 y Fm(n)1028 5592 y Fv(\000)14 b FK(1.)37 b(Therefore,)29 b(as)e(polynomials)i(in)e Fq(x)p FK(,)g(the)g(elements)h(al)o(w)o(ays)f(ha)n(v)o(e)h(de)o(gree)g (less)p Black Black eop end end %%Page: 75 75 TeXDict begin HPSdict begin 75 74 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.75) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(75)p Black 75 399 a(than)25 b Fq(n)p FK(.)32 b(A)24 b(c)o(yclic)h(code)h(is)e(an)h(ideal)g(in)g(the)g(ring)g Fq(F)7 b Fo([)p Fq(x)p Fo(])p Fp(=)p Fo(\()p Fq(x)1947 366 y Fm(n)2000 399 y Fv(\000)13 b FK(1)p Fo(\))24 b FK(of)h(polynomials)i(modulo)f Fq(x)3103 366 y Fm(n)3154 399 y Fv(\000)13 b FK(1.)31 b(The)25 b(unique)75 511 y(monic)32 b(polynomial)i(of)e(least)g(de)o(gree)h(that)f(generates)d Fq(C)k FK(is)e(called)i(the)f Fq(g)o(ener)o(ator)i(polynomial)g FK(of)27 b Fq(C)r FK(.)52 b(It)31 b(is)h(a)75 624 y(di)n(visor)25 b(of)e(the)h(polynomial)i Fq(x)1057 591 y Fm(n)1108 624 y Fv(\000)13 b FK(1.)216 737 y(The)22 b Fq(c)o(hec)n(k)h(polynomial)i FK(is)d(the)h(polynomial)h Fq(h)p Fo(\()p Fq(x)p Fo(\))f FK(with)f Fq(g)p Fo(\()p Fq(x)p Fo(\))p Fq(h)p Fo(\()p Fq(x)p Fo(\))h(=)18 b Fq(x)2508 704 y Fm(n)2558 737 y Fv(\000)11 b FK(1.)28 b(Therefore)c(it)e(is)g(also)h(a)f(di)n(visor)75 850 y(of)h Fq(x)213 817 y Fm(n)264 850 y Fv(\000)13 b FK(1.)28 b(The)23 b(check)i(polynomial)g(has)f(the)g(property)i(that) 1386 1044 y Fq(c)p Fo(\()p Fq(x)p Fo(\))p Fq(h)p Fo(\()p Fq(x)p Fo(\))e Fv(\021)19 b FK(0)92 b Fo(\()p FK(mod)21 b Fq(x)2199 1007 y Fm(n)2250 1044 y Fv(\000)13 b FK(1)p Fo(\))p Fp(;)75 1238 y FK(for)24 b(e)n(v)o(ery)g(code)n(w)o(ord)h Fq(c)p Fo(\()p Fq(x)p Fo(\))c Fv(2)15 b Fq(C)r FK(.)216 1351 y(The)31 b(\002rst)h(tw)o(o)f(functions)j(described)g(belo)n(w)e (generate)i(c)o(yclic)e(codes)h(from)f(a)f(gi)n(v)o(en)h(generator)i (or)e(check)75 1464 y(polynomial.)f(All)23 b(c)o(yclic)h(codes)h(can)f (be)g(constructed)i(using)f(these)g(functions.)216 1577 y(T)-7 b(w)o(o)50 b(of)h(the)g(Golay)g(codes)h(already)h(described)g (are)e(c)o(yclic)h(\(see)g Ft(BinaryGolayCode)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3356 1578 a SDict begin H.S end 3356 1578 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.4.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 3537 1515 a SDict begin H.R end 3537 1515 a 3537 1577 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.4.1) cvn H.B /ANN pdfmark end 3537 1577 a Black FK(\))d(and)75 1690 y Ft(TernaryGolayCode)34 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 875 1691 a SDict begin H.S end 875 1691 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.4.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 1056 1628 a SDict begin H.R end 1056 1628 a 1056 1690 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.4.3) cvn H.B /ANN pdfmark end 1056 1690 a Black FK(\)\).)46 b(F)o(or)28 b(e)o(xample,)i(the)g Fy(GU)m(A)-6 b(V)f(A)27 b FK(record)j(for)f(a)f (binary)j(Golay)e(code)h(contains)h(the)75 1803 y(generator)26 b(polynomial:)p 75 1892 1648 4 v 1764 1897 a FF(Example)p 2102 1892 V 75 1917 4 25 v 3747 1917 V 75 2017 4 100 v 188 1987 a(gap>)44 b(C)e(:=)h(BinaryGolayCode\(\);)p 3747 2017 V 75 2116 V 188 2086 a(a)g(cyclic)h([23,12,7]3)i(binary)e (Golay)g(code)g(over)g(GF\(2\))p 3747 2116 V 75 2216 V 188 2186 a(gap>)g(NamesOfComponents\(C\);)p 3747 2216 V 75 2316 V 188 2286 a([)f("LeftActingDomain",)48 b("GeneratorsOfLeftO) q(per)q(ato)q(rAd)q(dit)q(ive)q(Gro)q(up")q(,)g("WordLength",)p 3747 2316 V 75 2415 V 273 2385 a("GeneratorMat",)f("GeneratorPol",)h ("Dimension",)e("Redundancy",)h("Size",)d("name",)p 3747 2415 V 75 2515 V 273 2485 a("lowerBoundMinimumDis)q(tan)q(ce")q(,)k ("upperBoundMinimum)q(Dis)q(tan)q(ce")q(,)g("WeightDistributio)q(n",)p 3747 2515 V 75 2614 V 273 2584 a("boundsCoveringRadius)q(",)h ("MinimumWeightOfGene)q(rat)q(ors)q(",)p 3747 2614 V 75 2714 V 273 2684 a("UpperBoundOptimalMin)q(imu)q(mDi)q(sta)q(nc)q(e") g(])p 3747 2714 V 75 2814 V 188 2784 a(gap>)44 b(C!.GeneratorPol;)p 3747 2814 V 75 2913 V 188 2883 a(x_1\21011+x_1\21010+x_1\2106+)q(x_1)q (\2105+)q(x_1)q(\2104+)q(x_)q(1\2102)q(+Z\()q(2\)\210)q(0)p 3747 2913 V 75 2938 4 25 v 3747 2938 V 75 2941 3675 4 v 75 3121 a FK(Then)26 b(functions)j(that)e(generate)i(c)o(yclic)e (codes)h(from)e(a)g(prescribed)j(set)e(of)f(roots)i(of)e(the)h (generator)i(polynomial)75 3234 y(are)22 b(described,)i(including)h (the)c(BCH)f(codes)j(\(see)f Ft(RootsCode)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2166 3235 a SDict begin H.S end 2166 3235 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.5.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 2347 3172 a SDict begin H.R end 2347 3172 a 2347 3234 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.3) cvn H.B /ANN pdfmark end 2347 3234 a Black FK(\),)f Ft(BCHCode)g FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2798 3235 a SDict begin H.S end 2798 3235 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.5.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 2979 3172 a SDict begin H.R end 2979 3172 a 2979 3234 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.4) cvn H.B /ANN pdfmark end 2979 3234 a Black FK(\),)g Ft(ReedSolomonCode)75 3346 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 3347 a SDict begin H.S end 105 3347 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.5.5)p 0.0236 0.0894 0.6179 TeXcolorrgb 286 3284 a SDict begin H.R end 286 3284 a 286 3346 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.5) cvn H.B /ANN pdfmark end 286 3346 a Black FK(\))h(and)g Ft(QRCode)h FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 825 3347 a SDict begin H.S end 825 3347 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.5.6)p 0.0236 0.0894 0.6179 TeXcolorrgb 1006 3284 a SDict begin H.R end 1006 3284 a 1006 3346 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.6) cvn H.B /ANN pdfmark end 1006 3346 a Black FK(\)\).)216 3459 y(Finally)56 b(we)e(describe)i(the)f(tri)n(vial)h(codes)g(\(see)f Ft(WholeSpaceCode)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2672 3460 a SDict begin H.S end 2672 3460 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.5.10)p 0.0236 0.0894 0.6179 TeXcolorrgb 2898 3397 a SDict begin H.R end 2898 3397 a 2898 3459 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.10) cvn H.B /ANN pdfmark end 2898 3459 a Black FK(\),)64 b Ft(NullCode)56 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3469 3460 a SDict begin H.S end 3469 3460 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.5.11)p 0.0236 0.0894 0.6179 TeXcolorrgb 3695 3397 a SDict begin H.R end 3695 3397 a 3695 3459 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.11) cvn H.B /ANN pdfmark end 3695 3459 a Black FK(\),)75 3572 y Ft(RepetitionCode)73 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 822 3573 a SDict begin H.S end 822 3573 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.5.12)p 0.0236 0.0894 0.6179 TeXcolorrgb 1048 3510 a SDict begin H.R end 1048 3510 a 1048 3572 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.12) cvn H.B /ANN pdfmark end 1048 3572 a Black FK(\)\),)81 b(and)70 b(the)f(command)g Ft(CyclicCodes)j FK(which)e(lists)f(all)g(c)o(yclic)h(codes)75 3685 y(\()p Ft(CyclicCodes)27 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 668 3686 a SDict begin H.S end 668 3686 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.5.13)p 0.0236 0.0894 0.6179 TeXcolorrgb 894 3623 a SDict begin H.R end 894 3623 a 894 3685 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.13) cvn H.B /ANN pdfmark end 894 3685 a Black FK(\)\).)75 3833 y SDict begin H.S end 75 3833 a 75 3833 a SDict begin 13.6 H.A end 75 3833 a 75 3833 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.1) cvn H.B /DEST pdfmark end 75 3833 a 100 x FJ(5.5.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(GeneratorP)n(olCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4107 a Fs(\006)22 b Ft(GeneratorPolCode\()53 b(g,)47 b(n[,)g(name,])i(F)e(\))1703 b Fr(\(function\))p Black 216 4333 a Ft(GeneratorPolCode)32 b FK(creates)d(a)e(c)o(yclic)h(code)h(with)e(a)g(generator)j (polynomial)f Ft(g)q FK(,)e(w)o(ord)g(length)i Ft(n)p FK(,)f(o)o(v)o(er)f Ft(F)p FK(.)75 4446 y Ft(name)d FK(can)g(contain)h (a)f(short)g(description)j(of)c(the)h(code.)216 4559 y(If)i Ft(g)f FK(is)h(not)g(a)g(di)n(visor)h(of)f Fq(x)1082 4526 y Fm(n)1134 4559 y Fv(\000)14 b FK(1,)25 b(it)g(cannot)j(be)e(a)f (generator)k(polynomial.)38 b(In)26 b(that)h(case,)f(a)g(code)h(is)f (created)75 4672 y(with)f(generator)k(polynomial)f Fq(gcd)5 b Fo(\()p Fq(g)o Fp(;)10 b Fq(x)1358 4639 y Fm(n)1411 4672 y Fv(\000)j FK(1)p Fo(\))p FK(,)26 b(i.e.)35 b(the)26 b(greatest)h(common)f(di)n(visor)h(of)f Ft(g)f FK(and)h Fq(x)3199 4639 y Fm(n)3251 4672 y Fv(\000)13 b FK(1.)35 b(This)25 b(is)h(a)75 4784 y(v)n(alid)e(generator)i(polynomial)g(that)e (generates)i(the)e(ideal)h Fo(\()p Fq(g)p Fo(\))p FK(.)j(See)23 b Ft(Generating)50 b(Cyclic)f(Codes)25 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3379 4785 a SDict begin H.S end 3379 4785 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.5)p 0.0236 0.0894 0.6179 TeXcolorrgb 3492 4722 a SDict begin H.R end 3492 4722 a 3492 4784 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.5.5) cvn H.B /ANN pdfmark end 3492 4784 a Black FK(\).)p 75 4900 1648 4 v 1764 4905 a FF(Example)p 2102 4900 V 75 4925 4 25 v 3747 4925 V 75 5024 4 100 v 188 4995 a(gap>)44 b(x:=)f(Indeterminate\()k(GF\(2\))d(\);;)g(P:=)f (x\2102+1;)p 3747 5024 V 75 5124 V 188 5094 a(Z\(2\)\2100+x\2102)p 3747 5124 V 75 5224 V 188 5194 a(gap>)h(C1)f(:=)g(GeneratorPolCode\(P,) 48 b(7,)c(GF\(2\)\);)p 3747 5224 V 75 5323 V 188 5293 a(a)f(cyclic)h([7,6,1..2]1)i(code)e(defined)h(by)e(generator)i (polynomial)h(over)d(GF\(2\))p 3747 5323 V 75 5423 V 188 5393 a(gap>)h(GeneratorPol\()i(C1)d(\);)p 3747 5423 V 75 5523 V 188 5493 a(Z\(2\)\2100+x)p 3747 5523 V 75 5622 V 188 5592 a(gap>)h(C2)f(:=)g(GeneratorPolCode\()48 b(x+1,)c(7,)f(GF\(2\)\);)p 3747 5622 V Black Black eop end end %%Page: 76 76 TeXDict begin HPSdict begin 76 75 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.76) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(76)p Black 75 428 4 100 v 188 399 a FF(a)43 b(cyclic)h([7,6,1..2]1)i(code)e(defined)h(by)e(generator)i(polynomial)h (over)d(GF\(2\))p 3747 428 V 75 528 V 188 498 a(gap>)h(GeneratorPol\()i (C2)d(\);)p 3747 528 V 75 628 V 188 598 a(Z\(2\)\2100+x)p 3747 628 V 75 653 4 25 v 3747 653 V 75 656 3675 4 v 75 787 a SDict begin H.S end 75 787 a 75 787 a SDict begin 13.6 H.A end 75 787 a 75 787 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.2) cvn H.B /DEST pdfmark end 75 787 a 117 x FJ(5.5.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(CheckP)n(olCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1078 a Fs(\006)22 b Ft(CheckPolCode\()51 b(h,)d(n[,)f(name,])i(F)d(\))1889 b Fr(\(function\))p Black 216 1304 a Ft(CheckPolCode)28 b FK(creates)d(a)f(c)o(yclic)h(code)g(with)f(a)f(check)i(polynomial)i Ft(h)p FK(,)c(w)o(ord)h(length)i Ft(n)p FK(,)d(o)o(v)o(er)h Ft(F)q FK(.)29 b Ft(name)c FK(can)75 1417 y(contain)g(a)e(short)i (description)i(of)c(the)h(code)g(\(as)g(a)f(string\).)216 1530 y(If)h Ft(h)f FK(is)g(not)h(a)f(di)n(visor)j(of)d Fq(x)1066 1497 y Fm(n)1117 1530 y Fv(\000)13 b FK(1,)22 b(it)i(cannot)h(be)e(a)h(check)h(polynomial.)31 b(In)24 b(that)g(case,)g(a)f(code)i(is)e(created)i(with)75 1643 y(check)32 b(polynomial)i Fq(gcd)5 b Fo(\()p Fq(h)p Fp(;)10 b Fq(x)1052 1610 y Fm(n)1107 1643 y Fv(\000)15 b FK(1)p Fo(\))p FK(,)33 b(i.e.)51 b(the)31 b(greatest)i(common)f(di)n(visor)g (of)f Ft(h)g FK(and)g Fq(x)2958 1610 y Fm(n)3012 1643 y Fv(\000)15 b FK(1.)51 b(This)31 b(is)g(a)f(v)n(alid)75 1755 y(check)25 b(polynomial)h(that)e(yields)h(the)e(same)h(elements)h (as)e(the)h(ideal)h Fo(\()p Fq(h)p Fo(\))p FK(.)k(See)p 0.0236 0.0894 0.6179 TeXcolorrgb 2588 1756 a SDict begin H.S end 2588 1756 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.5)p 0.0236 0.0894 0.6179 TeXcolorrgb 2701 1693 a SDict begin H.R end 2701 1693 a 2701 1755 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.5.5) cvn H.B /ANN pdfmark end 2701 1755 a Black FK(.)p 75 1873 1648 4 v 1764 1878 a FF(Example)p 2102 1873 V 75 1898 4 25 v 3747 1898 V 75 1997 4 100 v 188 1967 a(gap>)86 b(x:=)43 b(Indeterminate\()k(GF\(3\))d(\);;)g(P:=) f(x\2102+2;)p 3747 1997 V 75 2097 V 188 2067 a(-Z\(3\)\2100+x_1\2102)p 3747 2097 V 75 2197 V 188 2167 a(gap>)h(H)e(:=)h(CheckPolCode\(P,)48 b(7,)43 b(GF\(3\)\);)p 3747 2197 V 75 2296 V 188 2266 a(a)g(cyclic)h([7,1,7]4)h(code)f(defined)g(by)g(check)g(polynomial)h (over)f(GF\(3\))p 3747 2296 V 75 2396 V 188 2366 a(gap>)g (CheckPol\(H\);)p 3747 2396 V 75 2496 V 188 2466 a(-Z\(3\)\2100+x_1)p 3747 2496 V 75 2595 V 188 2565 a(gap>)g(Gcd\(P,)g (X\(GF\(3\)\)\2107-1\);)p 3747 2595 V 75 2695 V 188 2665 a(-Z\(3\)\2100+x_1)p 3747 2695 V 75 2720 4 25 v 3747 2720 V 75 2723 3675 4 v 75 2855 a SDict begin H.S end 75 2855 a 75 2855 a SDict begin 13.6 H.A end 75 2855 a 75 2855 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.3) cvn H.B /DEST pdfmark end 75 2855 a 116 x FJ(5.5.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(RootsCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3145 a Fs(\006)22 b Ft(RootsCode\()50 b(n,)d(list)h(\))2399 b Fr(\(function\))p Black 216 3371 a FK(This)26 b(is)h(the)f (generalization)31 b(of)c(the)f(BCH,)f(Reed-Solomon)j(and)f(quadratic)i (residue)f(codes)f(\(see)g Ft(BCHCode)75 3484 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 3485 a SDict begin H.S end 105 3485 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.5.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 286 3422 a SDict begin H.R end 286 3422 a 286 3484 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.4) cvn H.B /ANN pdfmark end 286 3484 a Black FK(\),)e Ft(ReedSolomonCode)30 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1114 3485 a SDict begin H.S end 1114 3485 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.5.5)p 0.0236 0.0894 0.6179 TeXcolorrgb 1295 3422 a SDict begin H.R end 1295 3422 a 1295 3484 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.5) cvn H.B /ANN pdfmark end 1295 3484 a Black FK(\))25 b(and)g Ft(QRCode)h FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1837 3485 a SDict begin H.S end 1837 3485 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.5.6)p 0.0236 0.0894 0.6179 TeXcolorrgb 2018 3422 a SDict begin H.R end 2018 3422 a 2018 3484 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.6) cvn H.B /ANN pdfmark end 2018 3484 a Black FK(\)\).)34 b(The)24 b(user)h(can)h(gi)n(v)o(e)e(a)h(length)h(of)f(the) g(code)g Ft(n)g FK(and)75 3597 y(a)i(prescribed)i(set)f(of)f(zeros.)40 b(The)27 b(ar)n(gument)i Ft(list)e FK(must)g(be)g(a)g(v)n(alid)h(list)f (of)g(primiti)n(v)o(e)h Fq(n)3002 3564 y Fm(t)5 b(h)3089 3597 y FK(roots)29 b(of)e(unity)h(in)f(a)75 3710 y(splitting)h(\002eld) e Fq(GF)7 b Fo(\()p Fq(q)794 3677 y Fm(m)847 3710 y Fo(\))p FK(.)35 b(The)26 b(resulting)i(code)f(will)f(be)g(o)o(v)o(er)g(the)g (\002eld)g Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(.)36 b(The)26 b(function)i(will)e(return)h(the)75 3823 y(lar)n(gest)f(possible)g(c)o (yclic)f(code)g(for)g(which)f(the)g(list)h Ft(list)g FK(is)f(a)f(subset)j(of)e(the)g(roots)h(of)f(the)h(code.)31 b(From)23 b(this)i(list,)75 3935 y Fy(GU)m(A)-6 b(V)f(A)22 b FK(calculates)k(the)e(entire)g(set)g(of)g(roots.)216 4048 y(This)31 b(command)g(can)g(also)h(be)f(called)h(with)e(the)h (syntax)i Ft(RootsCode\()50 b(n,)d(list,)h(q)f(\))p FK(.)j(In)30 b(this)i(second)75 4161 y(form,)e(the)g(second)h(ar)n(gument)g(is)e(a)f (list)i(of)f(inte)o(gers,)j(ranging)f(from)e(0)g(to)g Fq(n)15 b Fv(\000)g FK(1.)45 b(The)29 b(resulting)i(code)f(will)f(be)75 4274 y(o)o(v)o(er)23 b(a)f(\002eld)h Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(.)29 b Fy(GU)m(A)-6 b(V)f(A)20 b FK(calculates)26 b(a)c(primiti)n(v)o(e)i Fq(n)1928 4241 y Fm(t)5 b(h)2011 4274 y FK(root)24 b(of)f(unity)-6 b(,)24 b Fu(a)p FK(,)e(in)h(the)g(e)o (xtension)i(\002eld)e(of)f Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(.)75 4387 y(It)23 b(uses)i(the)e(set)h(of)g(the)f(po)n(wers)h(of)g Fu(a)f FK(in)g(the)h(list)g(as)g(a)f(prescribed)j(set)e(of)f(zeros.)p 75 4501 1648 4 v 1764 4506 a FF(Example)p 2102 4501 V 75 4526 4 25 v 3747 4526 V 75 4626 4 100 v 188 4596 a(gap>)44 b(a)e(:=)h(PrimitiveUnityRoot\()49 b(3,)43 b(14)g(\);)p 3747 4626 V 75 4726 V 188 4696 a(Z\(3\2106\)\21052)p 3747 4726 V 75 4825 V 188 4795 a(gap>)h(C1)f(:=)g(RootsCode\()i(14,)f ([)e(a\2100,)i(a,)f(a\2103)h(])e(\);)p 3747 4825 V 75 4925 V 188 4895 a(a)h(cyclic)h([14,7,3..6]3..7)j(code)d(defined)h(by)e (roots)h(over)g(GF\(3\))p 3747 4925 V 75 5024 V 188 4995 a(gap>)g(MinimumDistance\()j(C1)c(\);)p 3747 5024 V 75 5124 V 188 5094 a(4)p 3747 5124 V 75 5224 V 188 5194 a(gap>)h(b)e(:=)h(PrimitiveUnityRoot\()49 b(2,)43 b(15)g(\);)p 3747 5224 V 75 5323 V 188 5293 a(Z\(2\2104\))p 3747 5323 V 75 5423 V 188 5393 a(gap>)h(C2)f(:=)g(RootsCode\()i(15,)f([)e(b,)h (b\2102,)h(b\2103,)g(b\2104)f(])g(\);)p 3747 5423 V 75 5523 V 188 5493 a(a)g(cyclic)h([15,7,5]3..5)i(code)e(defined)h(by)e (roots)h(over)g(GF\(2\))p 3747 5523 V 75 5622 V 188 5592 a(gap>)g(C2)f(=)f(BCHCode\()j(15,)f(5,)f(GF\(2\))h(\);)p 3747 5622 V Black Black eop end end %%Page: 77 77 TeXDict begin HPSdict begin 77 76 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.77) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(77)p Black 75 428 4 100 v 188 399 a FF(true)p 3747 428 V 75 528 V 188 498 a(C3)43 b(:=)g(RootsCode\()j(4,)d([)f(1,)h (2)g(],)g(5)g(\);)p 3747 528 V 75 628 V 188 598 a(RootsOfCode\()j(C3)d (\);)p 3747 628 V 75 727 V 188 697 a(C3)g(=)g(ReedSolomonCode\()k(4,)c (3)g(\);)p 3747 727 V 75 827 V 3747 827 V 75 852 4 25 v 3747 852 V 75 855 3675 4 v 75 1076 a SDict begin H.S end 75 1076 a 75 1076 a SDict begin 13.6 H.A end 75 1076 a 75 1076 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.4) cvn H.B /DEST pdfmark end 75 1076 a 117 x FJ(5.5.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(BCHCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1367 a Fs(\006)22 b Ft(BCHCode\()50 b(n[,)d(b,])h(delta,)g(F)f(\)) 2074 b Fr(\(function\))p Black 216 1593 a FK(The)30 b(function)j Ft(BCHCode)g FK(returns)f(a)f('Bose-Chaudhuri-Hock)o(engh)q(em)36 b(code')c(\(or)f Fq(BCH)e(code)i FK(for)g(short\).)75 1706 y(This)23 b(is)f(the)h(lar)n(gest)i(possible)g(c)o(yclic)f(code)f (of)g(length)h Ft(n)f FK(o)o(v)o(er)f(\002eld)h Ft(F)p FK(,)f(whose)i(generator)h(polynomial)g(has)e(zeros)1503 1900 y Fq(a)1548 1863 y Fm(b)1586 1900 y Fp(;)10 b Fq(a)1666 1863 y Fm(b)p Fk(+)p Fr(1)1789 1900 y Fp(;)g(:::;)g Fq(a)1979 1863 y Fm(b)p Fk(+)p Fm(d)s(el)q(t)5 b(a)p Fh(\000)p Fr(2)2297 1900 y Fp(;)75 2095 y FK(where)20 b Fq(a)g FK(is)g(a)g(primiti)n(v)o(e)h Fq(n)913 2062 y Fm(t)5 b(h)993 2095 y FK(root)21 b(of)f(unity)h(in)f(the)h(splitting)h (\002eld)e Fq(GF)7 b Fo(\()p Fq(q)2388 2062 y Fm(m)2441 2095 y Fo(\))p FK(,)19 b Ft(b)h FK(is)g(an)g(inte)o(ger)i(0)17 b Fv(\024)g Fq(b)g Fv(\024)g Fq(n)9 b Fv(\000)g Fq(d)c(el)s(t)h(a)j Fo(+)75 2207 y FK(1)25 b(and)h Fq(m)e FK(is)h(the)g(multiplicati)n(v)o (e)j(order)e(of)f Fq(q)g FK(modulo)h Ft(n)q FK(.)32 b(\(The)25 b(inte)o(gers)i Fv(f)p Fq(b)p Fp(;)10 b(:::;)g Fq(b)j Fo(+)g Fq(d)5 b(el)s(t)h(a)13 b Fv(\000)g FK(2)p Fv(g)29 b FK(typically)f(lie)d(in)75 2320 y(the)g(range)h Fv(f)p FK(1)p Fp(;)10 b(:::;)g Fq(n)j Fv(\000)g FK(1)p Fv(g)p FK(.\))35 b(Def)o(ault)25 b(v)n(alue)h(for)f Ft(b)f FK(is)h(1,)f (though)i(the)f(algorithm)i(allo)n(ws)e Fq(b)c Fo(=)g FK(0.)32 b(The)24 b(length)i Ft(n)e FK(of)75 2433 y(the)g(code)g(and)g (the)g(size)h Fq(q)e FK(of)g(the)h(\002eld)g(must)f(be)h(relati)n(v)o (ely)i(prime.)j(The)23 b(generator)j(polynomial)g(is)e(equal)g(to)g (the)75 2546 y(least)g(common)g(multiple)h(of)f(the)f(minimal)h (polynomials)i(of)1503 2741 y Fq(a)1548 2703 y Fm(b)1586 2741 y Fp(;)10 b Fq(a)1666 2703 y Fm(b)p Fk(+)p Fr(1)1789 2741 y Fp(;)g(:::;)g Fq(a)1979 2703 y Fm(b)p Fk(+)p Fm(d)s(el)q(t)5 b(a)p Fh(\000)p Fr(2)2297 2741 y Fp(:)75 2935 y FK(The)23 b(set)h(of)f(zeroes)i(of)f(the)f(generator)j(polynomial)g(is)e(equal)g (to)g(the)g(union)g(of)g(the)g(sets)1664 3130 y Fv(f)p Fq(a)1754 3092 y Fm(x)1812 3130 y Fv(j)f Fq(x)e Fv(2)14 b Fq(C)2055 3144 y Fm(k)2090 3130 y Fv(g)p Fp(;)75 3324 y FK(where)i Fq(C)371 3338 y Fm(k)425 3324 y FK(is)k(the)h Fq(k)676 3291 y Fm(t)5 b(h)756 3324 y FK(c)o(yclotomic)22 b(coset)g(of)e Fq(q)g FK(modulo)i Fq(n)e FK(and)g Fq(b)e Fv(\024)f Fq(k)i Fv(\024)e Fq(b)10 b Fo(+)g Fq(d)5 b(el)s(t)h(a)k Fv(\000)g FK(2)20 b(\(see)h Ft(CyclotomicCosets)75 3437 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 3438 a SDict begin H.S end 105 3438 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.5.12)p 0.0236 0.0894 0.6179 TeXcolorrgb 331 3375 a SDict begin H.R end 331 3375 a 331 3437 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.5.12) cvn H.B /ANN pdfmark end 331 3437 a Black FK(\)\).)216 3550 y(Special)30 b(cases)h(are)e Fq(b)24 b Fo(=)f FK(1)29 b(\(resulting)j(codes)f(are)e (called)i('narro)n(w-sense')h(BCH)c(codes\),)k(and)e Fq(n)24 b Fo(=)f Fq(q)3552 3517 y Fm(m)3619 3550 y Fv(\000)15 b FK(1)75 3663 y(\(kno)n(wn)25 b(as)g('primiti)n(v)o(e')h(BCH)c (codes\).)33 b Fy(GU)m(A)-6 b(V)f(A)23 b FK(calculates)k(the)e(lar)n (gest)i(v)n(alue)e(of)f Fq(d)29 b FK(for)c(which)g(the)g(BCH)d(code)75 3776 y(with)k(designed)j(distance)g Fq(d)i FK(coincides)e(with)d(the)h (BCH)d(code)k(with)e(designed)j(distance)f Ft(delta)r FK(.)37 b(This)26 b(distance)75 3889 y Fq(d)33 b FK(is)28 b(called)h(the)g Fq(Bose)f(distance)j FK(of)d(the)g(code.)44 b(The)28 b(true)h(minimum)f(distance)i(of)f(the)f(code)h(is)f(greater)i (than)f(or)75 4002 y(equal)c(to)e(the)h(Bose)f(distance.)216 4114 y(Printed)h(are)g(the)g(designed)i(distance)g(\(to)d(be)h (precise,)h(the)f(Bose)f(distance\))j Fq(d)5 b FK(,)23 b(and)h(the)f(starting)j(po)n(wer)e Fq(b)p FK(.)216 4227 y(The)f(Sugiyama)i(decoding)h(algorithm)f(has)f(been)g(implemented)i (for)d(this)h(code)h(\(see)f Ft(Decode)h FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3312 4228 a SDict begin H.S end 3312 4228 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.10.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 3538 4165 a SDict begin H.R end 3538 4165 a 3538 4227 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.1) cvn H.B /ANN pdfmark end 3538 4227 a Black FK(\)\).)p 75 4340 1648 4 v 1764 4345 a FF(Example)p 2102 4340 V 75 4365 4 25 v 3747 4365 V 75 4465 4 100 v 188 4435 a(gap>)44 b(C1)f(:=)g(BCHCode\()i(15,)e(3,)g(5,)g(GF\(2\))h (\);)p 3747 4465 V 75 4564 V 188 4534 a(a)f(cyclic)h([15,5,7]5)h(BCH)f (code,)g(delta=7,)h(b=1)e(over)h(GF\(2\))p 3747 4564 V 75 4664 V 188 4634 a(gap>)g(DesignedDistance\()k(C1)43 b(\);)p 3747 4664 V 75 4764 V 188 4734 a(7)p 3747 4764 V 75 4863 V 188 4833 a(gap>)h(C2)f(:=)g(BCHCode\()i(23,)e(2,)g(GF\(2\)) h(\);)p 3747 4863 V 75 4963 V 188 4933 a(a)f(cyclic)h([23,12,5..7]3)j (BCH)c(code,)h(delta=5,)h(b=1)f(over)f(GF\(2\))p 3747 4963 V 75 5062 V 188 5033 a(gap>)h(DesignedDistance\()k(C2)43 b(\);)p 3747 5062 V 75 5162 V 188 5132 a(5)p 3747 5162 V 75 5262 V 188 5232 a(gap>)h(MinimumDistance\(C2\);)p 3747 5262 V 75 5361 V 188 5331 a(7)p 3747 5361 V 75 5386 4 25 v 3747 5386 V 75 5389 3675 4 v 75 5592 a FK(See)23 b Ft(RootsCode)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 699 5593 a SDict begin H.S end 699 5593 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.5.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 880 5530 a SDict begin H.R end 880 5530 a 880 5592 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.5.3) cvn H.B /ANN pdfmark end 880 5592 a Black FK(\))e(for)g(a)f(more)g (general)j(construction.)p Black Black eop end end %%Page: 78 78 TeXDict begin HPSdict begin 78 77 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.78) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(78)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.5) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(5.5.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(ReedSolomonCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(ReedSolomonCode\()53 b(n,)47 b(d)f(\))2260 b Fr(\(function\))p Black 216 799 a Ft(ReedSolomonCode)35 b FK(returns)d(a)d('Reed-Solomon)j(code')g(of)e(length)h Ft(n)q FK(,)g(designed)h(distance)g Ft(d)q FK(.)47 b(This)30 b(code)75 912 y(is)e(a)g(primiti)n(v)o(e)h(narro)n(w-sense)h(BCH)d (code)i(o)o(v)o(er)f(the)g(\002eld)g Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(,)29 b(where)g Fq(q)23 b Fo(=)f Fq(n)14 b Fo(+)g FK(1.)43 b(The)28 b(dimension)i(of)e(an)75 1024 y(RS)j(code)j(is)f Fq(n)16 b Fv(\000)g Fq(d)21 b Fo(+)16 b FK(1.)57 b(According)35 b(to)d(the)i(Singleton)g(bound)h(\(see)e Ft(UpperBoundSingleto)q(n)38 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3364 1025 a SDict begin H.S end 3364 1025 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 3545 962 a SDict begin H.R end 3545 962 a 3545 1024 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.1) cvn H.B /ANN pdfmark end 3545 1024 a Black FK(\)\))c(the)75 1137 y(dimension)28 b(cannot)f(be)e(greater)i(than)f(this,)h(so)e(the)h (true)g(minimum)f(distance)j(of)e(an)f(RS)f(code)i(is)g(equal)g(to)g Ft(d)f FK(and)75 1250 y(the)f(code)g(is)g(maximum)f(distance)j (separable)g(\(see)e Ft(IsMDSCode)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2204 1251 a SDict begin H.S end 2204 1251 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.3.7)p 0.0236 0.0894 0.6179 TeXcolorrgb 2385 1188 a SDict begin H.R end 2385 1188 a 2385 1250 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.3.7) cvn H.B /ANN pdfmark end 2385 1250 a Black FK(\)\).)p 75 1373 1648 4 v 1764 1378 a FF(Example)p 2102 1373 V 75 1398 4 25 v 3747 1398 V 75 1497 4 100 v 188 1468 a(gap>)44 b(C1)f(:=)g(ReedSolomonCode\()k(3,)c(2)g(\);)p 3747 1497 V 75 1597 V 188 1567 a(a)g(cyclic)h([3,2,2]1)h(Reed-Solomon)h (code)e(over)g(GF\(4\))p 3747 1597 V 75 1697 V 188 1667 a(gap>)g(IsCyclicCode\(C1\);)p 3747 1697 V 75 1796 V 188 1766 a(true)p 3747 1796 V 75 1896 V 188 1866 a(gap>)g(C2)f(:=)g (ReedSolomonCode\()k(4,)c(3)g(\);)p 3747 1896 V 75 1996 V 188 1966 a(a)g(cyclic)h([4,2,3]2)h(Reed-Solomon)h(code)e(over)g (GF\(5\))p 3747 1996 V 75 2095 V 188 2065 a(gap>)g(RootsOfCode\()i(C2)d (\);)p 3747 2095 V 75 2195 V 188 2165 a([)g(Z\(5\),)h(Z\(5\)\2102)g(])p 3747 2195 V 75 2294 V 188 2265 a(gap>)g(IsMDSCode\(C2\);)p 3747 2294 V 75 2394 V 188 2364 a(true)p 3747 2394 V 75 2419 4 25 v 3747 2419 V 75 2422 3675 4 v 75 2635 a FK(See)23 b Ft(GeneralizedReedSol)q(omo)q(nCo)q(de)29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1487 2636 a SDict begin H.S end 1487 2636 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.6.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 1668 2573 a SDict begin H.R end 1668 2573 a 1668 2635 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.6.2) cvn H.B /ANN pdfmark end 1668 2635 a Black FK(\))24 b(for)g(a)f(more)h(general)h(construction.)75 2787 y SDict begin H.S end 75 2787 a 75 2787 a SDict begin 13.6 H.A end 75 2787 a 75 2787 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.6) cvn H.B /DEST pdfmark end 75 2787 a 97 x FJ(5.5.6)p 0.0 0.0 1.0 TeXcolorrgb 99 w(QRCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3058 a Fs(\006)d Ft(QRCode\()49 b(n,)e(F)g(\))2677 b Fr(\(function\))p Black 216 3284 a Ft(QRCode)26 b FK(returns)f(a)f(quadratic)i(residue)g(code.)31 b(If)24 b Ft(F)g FK(is)f(a)h(\002eld)g Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(,)24 b(then)h Fq(q)e FK(must)h(be)g(a)g(quadratic)i (residue)75 3397 y(modulo)31 b Ft(n)q FK(.)49 b(That)30 b(is,)i(an)e Fq(x)g FK(e)o(xists)i(with)e Fq(x)1464 3364 y Fr(2)1526 3397 y Fv(\021)24 b Fq(q)91 b Fo(\()p FK(mod)21 b Fq(n)p Fo(\))p FK(.)50 b(Both)30 b Ft(n)g FK(and)h Fq(q)f FK(must)h(be)f(primes.)50 b(Its)31 b(generator)75 3510 y(polynomial)k(is)e(the)g(product)h(of)f(the)g(polynomials)i Fq(x)17 b Fv(\000)e Fq(a)1986 3477 y Fm(i)2009 3510 y FK(.)56 b Fq(a)32 b FK(is)h(a)f(primiti)n(v)o(e)i Fq(n)2735 3477 y Fm(t)5 b(h)2828 3510 y FK(root)33 b(of)f(unity)-6 b(,)36 b(and)e Fq(i)e FK(is)g(an)75 3623 y(inte)o(ger)25 b(in)e(the)h(set)g(of)f(quadratic)j(residues)g(modulo)e Ft(n)q FK(.)p 75 3745 1648 4 v 1764 3750 a FF(Example)p 2102 3745 V 75 3770 4 25 v 3747 3770 V 75 3870 4 100 v 188 3840 a(gap>)44 b(C1)f(:=)g(QRCode\()h(7,)f(GF\(2\))h(\);)p 3747 3870 V 75 3970 V 188 3940 a(a)f(cyclic)h([7,4,3]1)h(quadratic)g (residue)g(code)f(over)g(GF\(2\))p 3747 3970 V 75 4069 V 188 4039 a(gap>)g(IsEquivalent\()i(C1,)e(HammingCode\()i(3,)d (GF\(2\))h(\))f(\);)p 3747 4069 V 75 4169 V 188 4139 a(true)p 3747 4169 V 75 4268 V 188 4239 a(gap>)h(IsCyclicCode\(C1\);)p 3747 4268 V 75 4368 V 188 4338 a(true)p 3747 4368 V 75 4468 V 188 4438 a(gap>)g(IsCyclicCode\(HammingC)q(ode)q(\()k(3,)c (GF\(2\))g(\)\);)p 3747 4468 V 75 4567 V 188 4537 a(false)p 3747 4567 V 75 4667 V 188 4637 a(gap>)g(C2)f(:=)g(QRCode\()h(11,)g (GF\(3\))g(\);)p 3747 4667 V 75 4767 V 188 4737 a(a)f(cyclic)h ([11,6,4..5]2)i(quadratic)g(residue)f(code)e(over)h(GF\(3\))p 3747 4767 V 75 4866 V 188 4836 a(gap>)g(C2)f(=)f(TernaryGolayCode\(\);) p 3747 4866 V 75 4966 V 188 4936 a(true)p 3747 4966 V 75 5065 V 188 5036 a(gap>)i(Q1)f(:=)g(QRCode\()h(7,)f(GF\(2\)\);)p 3747 5065 V 75 5165 V 188 5135 a(a)g(cyclic)h([7,4,3]1)h(quadratic)g (residue)g(code)f(over)g(GF\(2\))p 3747 5165 V 75 5265 V 188 5235 a(gap>)g(P1:=AutomorphismGroup)q(\(Q1)q(\);)49 b(IdGroup\(P1\);)p 3747 5265 V 75 5364 V 188 5334 a(Group\([)c (\(1,2\)\(5,7\),)h(\(2,3\)\(4,7\),)g(\(2,4\)\(5,6\),)g(\(3,5\)\(6,7\),) g(\(3,7\)\(5,6\))g(]\))p 3747 5364 V 75 5464 V 188 5434 a([)d(168,)g(42)g(])p 3747 5464 V 75 5489 4 25 v 3747 5489 V 75 5492 3675 4 v Black Black eop end end %%Page: 79 79 TeXDict begin HPSdict begin 79 78 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.79) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(79)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.7) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(5.5.7)p 0.0 0.0 1.0 TeXcolorrgb 99 w(QQRCodeNC)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(QQRCodeNC\()50 b(p)d(\))2677 b Fr(\(function\))p Black 216 799 a Ft(QQRCodeNC)52 b FK(is)d(the)g(same)h(as)f Ft(QQRCode)p FK(,)57 b(e)o(xcept)50 b(that)g(it)f(uses)h Ft(GeneratorMatCodeNC)55 b FK(instead)c(of)75 912 y Ft (GeneratorMatCode)p FK(.)75 1046 y SDict begin H.S end 75 1046 a 75 1046 a SDict begin 13.6 H.A end 75 1046 a 75 1046 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.8) cvn H.B /DEST pdfmark end 75 1046 a 115 x FJ(5.5.8)p 0.0 0.0 1.0 TeXcolorrgb 99 w(QQRCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1335 a Fs(\006)22 b Ft(QQRCode\()50 b(p)c(\))2770 b Fr(\(function\))p Black 216 1561 a Ft(QQRCode)36 b FK(returns)g(a)d(quasi-quadratic)39 b(residue)d(code,)h(as)d(de\002ned) h(by)f(Proposition)j(2.2)c(in)h(Bazzi-Mittel)75 1674 y([)p 0.0236 0.6179 0.0894 TeXcolorrgb 105 1674 a SDict begin H.S end 105 1674 a 0.0236 0.6179 0.0894 TeXcolorrgb FK(BMIT)p 0.0236 0.6179 0.0894 TeXcolorrgb 333 1613 a SDict begin H.R end 333 1613 a 333 1674 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.BM03) cvn H.B /ANN pdfmark end 333 1674 a Black FK(].)28 b(The)23 b(parameter)i Ft(p)e FK(must)g(be)h(a)f (prime.)29 b(Its)24 b(generator)i(matrix)e(has)f(the)h(block)h(form)e Fq(G)d Fo(=)g(\()p Fq(Q)p Fp(;)10 b Fq(N)c Fo(\))p FK(.)27 b(Here)75 1787 y Fq(Q)20 b FK(is)h(a)28 b Fq(p)p Fv(\002)21 b FK(circulant)i(matrix)f(whose)g(top)f(ro)n(w)g(is)g Fo(\()p FK(0)p Fp(;)10 b Fq(x)1828 1801 y Fr(1)1867 1787 y Fp(;)g(:::;)g Fq(x)2057 1801 y Fm(p)p Fh(\000)p Fr(1)2181 1787 y Fo(\))p FK(,)20 b(where)i Fq(x)2542 1801 y Fm(i)2583 1787 y Fo(=)c FK(1)j(if)g(and)h(only)g(if)f Fq(i)g FK(is)g(a)g (quadratic)75 1900 y(residue)k(mod)30 b Fq(p)p FK(,)22 b(and)i Fq(N)j FK(is)c(a)30 b Fq(p)p Fv(\002)22 b FK(circulant)k (matrix)e(whose)f(top)h(ro)n(w)e(is)h Fo(\()p FK(0)p Fp(;)10 b Fq(y)2567 1914 y Fr(1)2606 1900 y Fp(;)g(:::;)g Fq(y)2796 1914 y Fm(p)p Fh(\000)p Fr(1)2920 1900 y Fo(\))p FK(,)22 b(where)i Fq(x)3285 1914 y Fm(i)3320 1900 y Fo(+)12 b Fq(y)3443 1914 y Fm(i)3486 1900 y Fo(=)19 b FK(1)k(for)75 2012 y(all)h Fq(i)p FK(.)k(\(In)c(f)o(act,)f(this)h(matrix)h(can)e(be)h (reco)o(v)o(ered)h(as)f(the)g(component)h Ft(DoublyCirculant)k FK(of)23 b(the)h(code.\))p 75 2135 1648 4 v 1764 2140 a FF(Example)p 2102 2135 V 75 2160 4 25 v 3747 2160 V 75 2260 4 100 v 188 2230 a(gap>)44 b(C1)f(:=)g(QQRCode\()i(7\);)p 3747 2260 V 75 2359 V 188 2329 a(a)e(linear)h([14,7,1..4]3..5)j(code)d (defined)h(by)e(generator)i(matrix)g(over)e(GF\(2\))p 3747 2359 V 75 2459 V 188 2429 a(gap>)h(G1:=GeneratorMat\(C1\);)q(;)p 3747 2459 V 75 2558 V 188 2529 a(gap>)g(Display\(G1\);)p 3747 2558 V 75 2658 V 230 2628 a(.)f(1)g(1)f(.)h(1)g(.)f(.)h(.)g(.)f(.) h(1)g(.)f(1)h(1)p 3747 2658 V 75 2758 V 230 2728 a(1)g(.)g(1)f(1)h(1)g (.)f(.)h(.)g(.)f(1)h(1)g(1)f(.)h(1)p 3747 2758 V 75 2857 V 230 2827 a(.)g(.)g(.)f(1)h(1)g(.)f(1)h(.)g(1)f(1)h(.)g(.)f(.)h(1)p 3747 2857 V 75 2957 V 230 2927 a(.)g(.)g(1)f(.)h(1)g(1)f(1)h(1)g(.)f(1) h(.)g(.)f(1)h(1)p 3747 2957 V 75 3057 V 230 3027 a(.)g(.)g(.)f(.)h(.)g (.)f(.)h(1)g(.)f(.)h(1)g(1)f(1)h(.)p 3747 3057 V 75 3156 V 230 3126 a(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(1)h(1)g(1)f(.)h(1)p 3747 3156 V 75 3256 V 230 3226 a(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(1)f(.) h(.)g(1)f(1)h(1)p 3747 3256 V 75 3355 V 188 3326 a(gap>)h (Display\(C1!.DoublyCir)q(cul)q(ant)q(\);)p 3747 3355 V 75 3455 V 230 3425 a(.)f(1)g(1)f(.)h(1)g(.)f(.)h(.)g(.)f(.)h(1)g(.)f (1)h(1)p 3747 3455 V 75 3555 V 230 3525 a(1)g(1)g(.)f(1)h(.)g(.)f(.)h (.)g(.)f(1)h(.)g(1)f(1)h(.)p 3747 3555 V 75 3654 V 230 3624 a(1)g(.)g(1)f(.)h(.)g(.)f(1)h(.)g(1)f(.)h(1)g(1)f(.)h(.)p 3747 3654 V 75 3754 V 230 3724 a(.)g(1)g(.)f(.)h(.)g(1)f(1)h(1)g(.)f(1) h(1)g(.)f(.)h(.)p 3747 3754 V 75 3854 V 230 3824 a(1)g(.)g(.)f(.)h(1)g (1)f(.)h(.)g(1)f(1)h(.)g(.)f(.)h(1)p 3747 3854 V 75 3953 V 230 3923 a(.)g(.)g(.)f(1)h(1)g(.)f(1)h(1)g(1)f(.)h(.)g(.)f(1)h(.)p 3747 3953 V 75 4053 V 230 4023 a(.)g(.)g(1)f(1)h(.)g(1)f(.)h(1)g(.)f(.) h(.)g(1)f(.)h(1)p 3747 4053 V 75 4152 V 188 4123 a(gap>)h (MinimumDistance\(C1\);)p 3747 4152 V 75 4252 V 188 4222 a(4)p 3747 4252 V 75 4352 V 188 4322 a(gap>)g(C2)f(:=)g(QQRCode\()i (29\);)e(MinimumDistance\(C2)q(\);)p 3747 4352 V 75 4451 V 188 4421 a(a)g(linear)h([58,28,1..14]8..29)k(code)c(defined)h(by)e (generator)i(matrix)g(over)e(GF\(2\))p 3747 4451 V 75 4551 V 188 4521 a(12)p 3747 4551 V 75 4651 V 188 4621 a(gap>)h(Aut2:=AutomorphismGro)q(up\()q(C2\))q(;)49 b(IdGroup\(Aut2\);) p 3747 4651 V 75 4750 V 188 4720 a([)43 b(permutation)j(group)e(of)f (size)g(812)h(with)g(4)e(generators)k(])p 3747 4750 V 75 4850 V 188 4820 a([)d(812,)g(7)g(])p 3747 4850 V 75 4875 4 25 v 3747 4875 V 75 4878 3675 4 v 75 5111 a SDict begin H.S end 75 5111 a 75 5111 a SDict begin 13.6 H.A end 75 5111 a 75 5111 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.9) cvn H.B /DEST pdfmark end 75 5111 a 116 x FJ(5.5.9)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Fir)n(eCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5401 a Fs(\006)22 b Ft(FireCode\()50 b(g,)d(b)g(\))2584 b Fr(\(function\))p Black Black Black eop end end %%Page: 80 80 TeXDict begin HPSdict begin 80 79 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.80) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(80)p Black 216 399 a Ft(FireCode)30 b FK(constructs)g(a)d (\(binary\))j(Fire)d(code.)41 b Ft(g)27 b FK(is)h(a)f(primiti)n(v)o(e)h (polynomial)i(of)d(de)o(gree)i Fq(m)p FK(,)e(and)h(a)f(f)o(actor)75 511 y(of)e Fq(x)215 478 y Fm(r)261 511 y Fv(\000)13 b FK(1.)34 b Ft(b)25 b FK(an)h(inte)o(ger)g(0)c Fv(\024)f Fq(b)h Fv(\024)f Fq(m)j FK(not)i(di)n(visible)h(by)f Fq(r)r FK(,)f(that)h(determines)i(the)e(b)n(urst)g(length)h(of)e(a)h (single)g(error)75 624 y(b)n(urst)35 b(that)g(can)f(be)g(corrected.)62 b(The)34 b(ar)n(gument)i Ft(g)d FK(can)h(be)g(a)g(polynomial)i(with)e (base)h(ring)f Fq(GF)7 b Fo(\()p FK(2)p Fo(\))p FK(,)36 b(or)e(a)g(list)75 737 y(of)d(coef)n(\002cients)j(in)d Fq(GF)7 b Fo(\()p FK(2)p Fo(\))p FK(.)52 b(The)31 b(generator)j (polynomial)g(of)d(the)h(code)g(is)f(de\002ned)h(as)g(the)f(product)j (of)d Ft(g)g FK(and)75 850 y Fq(x)115 817 y Fr(2)p Fm(b)p Fh(\000)p Fr(1)284 850 y Fo(+)13 b FK(1.)216 963 y(Here)35 b(is)f(the)h(general)h(de\002nition)g(of)f('Fire)f(code',)k(named)e (after)f(P)-10 b(.)33 b(Fire,)k(who)d(introduced)j(these)f(codes)75 1076 y(in)f(1959)i(in)e(order)h(to)g(correct)g(b)n(urst)h(errors.)65 b(First,)38 b(a)d(de\002nition.)66 b(If)35 b Fq(F)f Fo(=)27 b Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))35 b FK(and)50 b Fq(f)40 b Fv(2)26 b Fq(F)7 b Fo([)p Fq(x)p Fo(])36 b FK(then)g(we)75 1189 y(say)45 b Fq(f)f FK(has)31 b Fq(or)m(der)j(e)d FK(if)45 b Fq(f)13 b Fo(\()p Fq(x)p Fo(\))p Fv(j)p Fo(\()p Fq(x)1110 1156 y Fm(e)1161 1189 y Fv(\000)i FK(1)p Fo(\))p FK(.)51 b(A)30 b Fq(F)l(ir)m(e)h(code)h FK(is)e(a)h(c)o(yclic)h(code)g (o)o(v)o(er)f Fq(F)37 b FK(with)31 b(generator)j(polynomial)75 1302 y Fq(g)p Fo(\()p Fq(x)p Fo(\))23 b(=)e(\()p Fq(x)420 1269 y Fr(2)n Fm(t)5 b Fh(\000)p Fr(1)578 1302 y Fv(\000)13 b FK(1)p Fo(\))7 b Fq(p)p Fo(\()p Fq(x)p Fo(\))p FK(,)27 b(where)33 b Fq(p)p Fo(\()p Fq(x)p Fo(\))26 b FK(does)g(not)g(di)n (vide)h Fq(x)2011 1269 y Fr(2)n Fm(t)5 b Fh(\000)p Fr(1)2168 1302 y Fv(\000)13 b FK(1)25 b(and)h(satis\002es)h Fq(d)5 b(e)l(g)p Fo(\()i Fq(p)p Fo(\()p Fq(x)p Fo(\)\))25 b Fv(\025)19 b Fq(t)6 b FK(.)34 b(The)25 b(length)75 1415 y(of)e(such)i(a)e(code)h(is)g(the)f(order)i(of)e Fq(g)p Fo(\()p Fq(x)p Fo(\))p FK(.)30 b(Non-binary)c(Fire)d(codes)i(ha)n(v)o (e)f(not)g(been)g(implemented.)216 1528 y(.)p 75 1582 1648 4 v 1764 1587 a FF(Example)p 2102 1582 V 75 1606 4 25 v 3747 1606 V 75 1706 4 100 v 188 1676 a(gap>)44 b(x:=)f(Indeterminate\()k(GF\(2\))d(\);;)g(G:=)f(x\2103+x\2102+1;)p 3747 1706 V 75 1806 V 188 1776 a(Z\(2\)\2100+x\2102+x\2103)p 3747 1806 V 75 1905 V 188 1875 a(gap>)h(Factors\()h(G)d(\);)p 3747 1905 V 75 2005 V 188 1975 a([)h(Z\(2\)\2100+x\2102+x\2103)k(])p 3747 2005 V 75 2105 V 188 2075 a(gap>)d(C)e(:=)h(FireCode\()j(G,)d(3)f (\);)p 3747 2105 V 75 2204 V 188 2174 a(a)h(cyclic)h([35,27,1..4]2..6)k (3)42 b(burst)j(error)f(correcting)h(fire)f(code)g(over)f(GF\(2\))p 3747 2204 V 75 2304 V 188 2274 a(gap>)h(MinimumDistance\()j(C)c(\);)p 3747 2304 V 75 2403 V 188 2374 a(4)212 b(#)43 b(Still)h(it)f(can)g (correct)i(bursts)f(of)f(length)i(3)p 3747 2403 V 75 2428 4 25 v 3747 2428 V 75 2431 3675 4 v 75 2560 a SDict begin H.S end 75 2560 a 75 2560 a SDict begin 13.6 H.A end 75 2560 a 75 2560 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.10) cvn H.B /DEST pdfmark end 75 2560 a 116 x FJ(5.5.10)p 0.0 0.0 1.0 TeXcolorrgb 99 w(WholeSpaceCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2850 a Fs(\006)22 b Ft(WholeSpaceCode\()52 b(n,)47 b(F)g(\))2306 b Fr(\(function\))p Black 216 3076 a Ft(WholeSpaceCode)26 b FK(returns)e(the)e(c)o(yclic)h (whole)f(space)h(code)g(of)f(length)h Ft(n)f FK(o)o(v)o(er)g Ft(F)p FK(.)28 b(This)21 b(code)i(consists)h(of)e(all)75 3189 y(polynomials)k(of)e(de)o(gree)g(less)g(than)h Ft(n)e FK(and)h(coef)n(\002cients)h(in)f Ft(F)p FK(.)p 75 3281 1648 4 v 1764 3286 a FF(Example)p 2102 3281 V 75 3306 4 25 v 3747 3306 V 75 3406 4 100 v 188 3376 a(gap>)44 b(C)e(:=)h(WholeSpaceCode\()48 b(5,)43 b(GF\(3\))h(\);)p 3747 3406 V 75 3506 V 188 3476 a(a)f(cyclic)h([5,5,1]0)h(whole)f(space) g(code)g(over)g(GF\(3\))p 3747 3506 V 75 3530 4 25 v 3747 3530 V 75 3533 3675 4 v 75 3662 a SDict begin H.S end 75 3662 a 75 3662 a SDict begin 13.6 H.A end 75 3662 a 75 3662 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.11) cvn H.B /DEST pdfmark end 75 3662 a 116 x FJ(5.5.11)p 0.0 0.0 1.0 TeXcolorrgb 99 w(NullCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3952 a Fs(\006)22 b Ft(NullCode\()50 b(n,)d(F)g(\))2584 b Fr(\(function\))p Black 216 4178 a Ft(NullCode)33 b FK(returns)g(the)e(zero-dimensional)36 b(nullcode)d(with)e(length)i Ft(n)d FK(o)o(v)o(er)i Ft(F)p FK(.)50 b(This)31 b(code)h(has)g(only)g (one)75 4291 y(w)o(ord:)d(the)24 b(all)g(zero)g(w)o(ord.)29 b(It)23 b(is)g(c)o(yclic)i(though!)p 75 4383 1648 4 v 1764 4388 a FF(Example)p 2102 4383 V 75 4408 4 25 v 3747 4408 V 75 4508 4 100 v 188 4478 a(gap>)44 b(C)e(:=)h(NullCode\()j(5,)d (GF\(3\))h(\);)p 3747 4508 V 75 4608 V 188 4578 a(a)f(cyclic)h ([5,0,5]5)h(nullcode)g(over)f(GF\(3\))p 3747 4608 V 75 4707 V 188 4677 a(gap>)g(AsSSortedList\()j(C)42 b(\);)p 3747 4707 V 75 4807 V 188 4777 a([)h([)f(0)h(0)g(0)f(0)h(0)g(])f(])p 3747 4807 V 75 4832 4 25 v 3747 4832 V 75 4835 3675 4 v 75 4963 a SDict begin H.S end 75 4963 a 75 4963 a SDict begin 13.6 H.A end 75 4963 a 75 4963 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.12) cvn H.B /DEST pdfmark end 75 4963 a 116 x FJ(5.5.12)p 0.0 0.0 1.0 TeXcolorrgb 99 w(RepetitionCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5254 a Fs(\006)22 b Ft(RepetitionCode\()52 b(n,)47 b(F)g(\))2306 b Fr(\(function\))p Black 216 5479 a Ft(RepetitionCode)37 b FK(returns)d(the)f(c)o(yclic)g (repetition)i(code)e(of)g(length)h Ft(n)e FK(o)o(v)o(er)g Ft(F)p FK(.)55 b(The)32 b(code)h(has)g(as)f(man)o(y)75 5592 y(elements)25 b(as)e Ft(F)q FK(,)f(because)k(each)e(code)n(w)o (ord)h(consists)h(of)d(a)g(repetition)j(of)e(one)g(of)f(these)i (elements.)p Black Black eop end end %%Page: 81 81 TeXDict begin HPSdict begin 81 80 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.81) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(81)p Black 75 399 1648 4 v 1764 404 a FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188 493 a(gap>)44 b(C)e(:=)h(RepetitionCode\()48 b(3,)43 b(GF\(5\))h(\);)p 3747 523 V 75 623 V 188 593 a(a)f(cyclic)h([3,1,3]2)h (repetition)h(code)e(over)f(GF\(5\))p 3747 623 V 75 722 V 188 692 a(gap>)h(AsSSortedList\()j(C)42 b(\);)p 3747 722 V 75 822 V 188 792 a([)h([)f(0)h(0)g(0)f(],)h([)g(1)g(1)f(1)h(],)g ([)g(2)f(2)h(2)g(],)g([)g(4)f(4)h(4)g(],)g([)f(3)h(3)g(3)f(])h(])p 3747 822 V 75 922 V 188 892 a(gap>)h(IsPerfectCode\()j(C)42 b(\);)p 3747 922 V 75 1021 V 188 991 a(false)p 3747 1021 V 75 1121 V 188 1091 a(gap>)i(IsMDSCode\()h(C)e(\);)p 3747 1121 V 75 1220 V 188 1191 a(true)p 3747 1220 V 75 1245 4 25 v 3747 1245 V 75 1248 3675 4 v 75 1382 a SDict begin H.S end 75 1382 a 75 1382 a SDict begin 13.6 H.A end 75 1382 a 75 1382 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.13) cvn H.B /DEST pdfmark end 75 1382 a 116 x FJ(5.5.13)p 0.0 0.0 1.0 TeXcolorrgb 99 w(CyclicCodes)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1672 a Fs(\006)22 b Ft(CyclicCodes\()51 b(n,)c(F)g(\))2445 b Fr(\(function\))p Black 216 1898 a Ft(CyclicCodes)31 b FK(returns)f(a)e(list)g(of)g(all)h (c)o(yclic)g(codes)g(of)f(length)h Ft(n)f FK(o)o(v)o(er)g Ft(F)q FK(.)41 b(It)28 b(constructs)j(all)d(possible)i(gen-)75 2011 y(erator)g(polynomials)i(from)d(the)g(f)o(actors)i(of)e Fq(x)1556 1978 y Fm(n)1608 2011 y Fv(\000)15 b FK(1.)44 b(Each)29 b(combination)j(of)d(these)h(f)o(actors)h(yields)f(a)f (generator)75 2124 y(polynomial)d(after)e(multiplication.)p 75 2246 1648 4 v 1764 2251 a FF(Example)p 2102 2246 V 75 2271 4 25 v 3747 2271 V 75 2371 4 100 v 188 2341 a(gap>)44 b(CyclicCodes\(3,GF\(3\)\);)p 3747 2371 V 75 2471 V 188 2441 a([)f(a)f(cyclic)j([3,3,1]0)g(enumerated)g(code)f(over)g(GF\(3\),) p 3747 2471 V 75 2570 V 188 2540 a(a)f(cyclic)h([3,2,1..2]1)i (enumerated)g(code)e(over)f(GF\(3\),)p 3747 2570 V 75 2670 V 188 2640 a(a)g(cyclic)h([3,1,3]2)h(enumerated)h(code)e(over)f (GF\(3\),)p 3747 2670 V 75 2769 V 188 2740 a(a)g(cyclic)h([3,0,3]3)h (enumerated)h(code)e(over)f(GF\(3\))h(])p 3747 2769 V 75 2794 4 25 v 3747 2794 V 75 2797 3675 4 v 75 2931 a SDict begin H.S end 75 2931 a 75 2931 a SDict begin 13.6 H.A end 75 2931 a 75 2931 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.5.14) cvn H.B /DEST pdfmark end 75 2931 a 116 x FJ(5.5.14)p 0.0 0.0 1.0 TeXcolorrgb 99 w(NrCyclicCodes)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3221 a Fs(\006)22 b Ft(NrCyclicCodes\()52 b(n,)47 b(F)g(\))2352 b Fr(\(function\))p Black 216 3447 a FK(The)23 b(function)j Ft(NrCyclicCodes)h FK(calculates)g(the)c(number)i(of)e(c)o(yclic)i(codes)f(of)g(length)h Ft(n)e FK(o)o(v)o(er)h(\002eld)f Ft(F)p FK(.)p 75 3570 1648 4 v 1764 3575 a FF(Example)p 2102 3570 V 75 3594 4 25 v 3747 3594 V 75 3694 4 100 v 188 3664 a(gap>)44 b(NrCyclicCodes\()j(23,)c(GF\(2\))h(\);)p 3747 3694 V 75 3794 V 188 3764 a(8)p 3747 3794 V 75 3893 V 188 3863 a(gap>)g(codelist)h(:=)e(CyclicCodes\()j(23,)e(GF\(2\))g(\);)p 3747 3893 V 75 3993 V 188 3963 a([)f(a)f(cyclic)j([23,23,1]0)g (enumerated)h(code)e(over)g(GF\(2\),)p 3747 3993 V 75 4093 V 273 4063 a(a)e(cyclic)j([23,22,1..2]1)h(enumerated)g(code)e (over)g(GF\(2\),)p 3747 4093 V 75 4192 V 273 4162 a(a)e(cyclic)j ([23,11,1..8]4..7)i(enumerated)f(code)e(over)g(GF\(2\),)p 3747 4192 V 75 4292 V 273 4262 a(a)e(cyclic)j([23,0,23]23)h(enumerated) g(code)d(over)h(GF\(2\),)p 3747 4292 V 75 4391 V 273 4362 a(a)e(cyclic)j([23,11,1..8]4..7)i(enumerated)f(code)e(over)g (GF\(2\),)p 3747 4391 V 75 4491 V 273 4461 a(a)e(cyclic)j ([23,12,1..7]3)h(enumerated)g(code)e(over)g(GF\(2\),)p 3747 4491 V 75 4591 V 273 4561 a(a)e(cyclic)j([23,1,23]11)h(enumerated) g(code)d(over)h(GF\(2\),)p 3747 4591 V 75 4690 V 273 4660 a(a)e(cyclic)j([23,12,1..7]3)h(enumerated)g(code)e(over)g(GF\(2\)) g(])p 3747 4690 V 75 4790 V 188 4760 a(gap>)g(BinaryGolayCode\(\))k(in) 43 b(codelist;)p 3747 4790 V 75 4890 V 188 4860 a(true)p 3747 4890 V 75 4989 V 188 4959 a(gap>)h(RepetitionCode\()j(23,)c (GF\(2\))h(\))f(in)g(codelist;)p 3747 4989 V 75 5089 V 188 5059 a(true)p 3747 5089 V 75 5188 V 188 5159 a(gap>)h (CordaroWagnerCode\()k(23)43 b(\))g(in)g(codelist;)p 3747 5188 V 75 5288 V 188 5258 a(false)171 b(#)43 b(This)g(code)h(is)f (not)g(cyclic)p 3747 5288 V 75 5313 4 25 v 3747 5313 V 75 5316 3675 4 v Black Black eop end end %%Page: 82 82 TeXDict begin HPSdict begin 82 81 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.82) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(82)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (section.5.6) cvn H.B /DEST pdfmark end 75 307 a 92 x FM(5.6)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Ev)o(aluation)30 b(Codes)p Black 75 495 a SDict begin H.S end 75 495 a 75 495 a SDict begin 13.6 H.A end 75 495 a 75 495 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.6.1) cvn H.B /DEST pdfmark end 75 495 a 114 x FJ(5.6.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Ev)o(aluationCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 783 a Fs(\006)22 b Ft(EvaluationCode\()52 b(P,)47 b(L,)g(R)g(\))2167 b Fr(\(function\))p Black 216 1009 a FK(Input:)31 b Ft(F)23 b FK(is)g(a)g(\002nite)h(\002eld,)f Ft(L)g FK(is)g(a)g(list)h(of)g(rational)h(functions)h(in)e Fq(R)c Fo(=)f Fq(F)8 b Fo([)p Fq(x)2592 1023 y Fr(1)2629 1009 y Fp(;)i(:::;)g Fq(x)2814 1023 y Fm(r)2847 1009 y Fo(])p FK(,)23 b Ft(P)g FK(is)h(a)f(list)h(of)f Fq(n)g FK(points)i(in)75 1122 y Fq(F)138 1089 y Fm(r)192 1122 y FK(at)f(which)g(all)f(of)h(the)g(functions)i(in)d Ft(L)g FK(are)h(de\002ned.)75 1235 y(Output:)30 b(The)23 b('e)n(v)n(aluation)j (code')20 b Fq(C)r FK(,)i(which)i(is)g(the)g(image)f(of)h(the)g(e)n(v)n (alation)h(map)1492 1435 y Fq(E)7 b(val)1665 1449 y Fm(P)1730 1435 y FK(:)21 b Fq(s)7 b(pan)p Fo(\()p Fq(L)p Fo(\))22 b Fv(!)e Fq(F)2270 1397 y Fm(n)2308 1435 y Fp(;)75 1635 y FK(gi)n(v)o(en)31 b(by)45 b Fq(f)37 b Fv(7\000)-15 b(!)24 b Fo(\()14 b Fq(f)f Fo(\()7 b Fq(p)845 1649 y Fr(1)883 1635 y Fo(\))p Fp(;)j(:::;)24 b Fq(f)13 b Fo(\()7 b Fq(p)1202 1649 y Fm(n)1242 1635 y Fo(\)\))p FK(,)32 b(where)e Fq(P)24 b Fo(=)g Fv(f)7 b Fq(p)1890 1649 y Fr(1)1928 1635 y Fp(;)j(:::;)17 b Fq(p)2125 1649 y Fm(n)2164 1635 y Fv(g)30 b FK(and)45 b Fq(f)38 b Fv(2)23 b Fq(L)p FK(.)49 b(The)31 b(generator)i(matrix)e(of)25 b Fq(C)32 b FK(is)75 1748 y Fq(G)20 b Fo(=)g(\()14 b Fq(f)328 1762 y Fm(i)351 1748 y Fo(\()7 b Fq(p)448 1762 y Fm(j)473 1748 y Fo(\)\))553 1762 y Fm(f)573 1772 y Ff(i)591 1762 y Fh(2)p Fm(L)p Fl(;)e Fm(p)735 1772 y Ff(j)756 1762 y Fh(2)p Fm(P)845 1748 y FK(.)216 1861 y(This)84 b(command)h(returns)h (a)e(\224record\224)i(object)g Ft(C)d FK(with)h(se)n(v)o(eral)i(e)o (xtra)e(components)j(\(type)75 1974 y Ft(NamesOfComponents\()q(C\))51 b FK(to)45 b(see)g(them)h(all\):)73 b Ft(C!.EvaluationMat)50 b FK(\(not)c(the)g(same)f(as)g(the)h(generator)75 2087 y(matrix)24 b(in)g(general\),)h Ft(C!.points)h FK(\(namely)e Ft(P)q FK(\),)f Ft(C!.basis)i FK(\(namely)g Ft(L)p FK(\),)e(and)h Ft(C!.ring)h FK(\(namely)g Ft(R)p FK(\).)p 75 2205 1648 4 v 1764 2210 a FF(Example)p 2102 2205 V 75 2230 4 25 v 3747 2230 V 75 2330 4 100 v 188 2300 a(gap>)44 b(F:=GF\(11\);)p 3747 2330 V 75 2430 V 188 2400 a(GF\(11\))p 3747 2430 V 75 2529 V 188 2499 a(gap>)g(R)e(:=)h(PolynomialRing\(F,2\))q(;;)p 3747 2529 V 75 2629 V 188 2599 a(gap>)h(indets)g(:=)f (IndeterminatesOfPol)q(yno)q(mia)q(lRi)q(ng\()q(R\);)q(;)p 3747 2629 V 75 2728 V 188 2699 a(gap>)h(x:=indets[1];;)j (y:=indets[2];;)p 3747 2728 V 75 2828 V 188 2798 a(gap>)d (L:=[x\2102*y,x*y,x\2105,x\2104)q(,x\210)q(3,x)q(\2102)q(,x,)q(x\2100)q (];;)p 3747 2828 V 75 2928 V 188 2898 a(gap>)g(Pts:=[)g([)f (Z\(11\)\2109,)i(Z\(11\))f(],)f([)g(Z\(11\)\2108,)i(Z\(11\))f(],)f([)f (Z\(11\)\2107,)j(0*Z\(11\))g(],)p 3747 2928 V 75 3027 V 315 2997 a([)e(Z\(11\)\2106,)i(0*Z\(11\))f(],)f([)g(Z\(11\)\2105,)i (0*Z\(11\))g(],)e([)g(Z\(11\)\2104,)i(0*Z\(11\))f(],)p 3747 3027 V 75 3127 V 315 3097 a([)f(Z\(11\)\2103,)i(Z\(11\))f(],)f([)f (Z\(11\)\2102,)k(0*Z\(11\))e(],)f([)g(Z\(11\),)h(0*Z\(11\))h(],)p 3747 3127 V 75 3227 V 315 3197 a([)e(Z\(11\)\2100,)i(0*Z\(11\))f(],)f ([)g(0*Z\(11\),)i(Z\(11\))f(])f(];;)p 3747 3227 V 75 3326 V 188 3296 a(gap>)h(C:=EvaluationCode\(Pts)q(,L,)q(R\);)p 3747 3326 V 75 3426 V 188 3396 a(a)f(linear)h([11,8,1..3]2..3)90 b(evaluation)46 b(code)d(over)h(GF\(11\))p 3747 3426 V 75 3525 V 188 3496 a(gap>)g(MinimumDistance\(C\);)p 3747 3525 V 75 3625 V 188 3595 a(3)p 3747 3625 V 75 3725 V 3747 3725 V 75 3750 4 25 v 3747 3750 V 75 3753 3675 4 v 75 3885 a SDict begin H.S end 75 3885 a 75 3885 a SDict begin 13.6 H.A end 75 3885 a 75 3885 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.6.2) cvn H.B /DEST pdfmark end 75 3885 a 116 x FJ(5.6.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(GeneralizedReedSolomonCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4176 a Fs(\006)22 b Ft(GeneralizedReedSo)q(lom)q(onC)q(ode)q(\()53 b(P,)47 b(k,)g(R)f(\))1611 b Fr(\(function\))p Black 216 4402 a FK(Input:)30 b(R=F[x],)23 b(where)h Ft(F)f FK(is)h(a)f(\002nite)g(\002eld,)g Ft(k)h FK(is)f(a)g(positi)n(v)o(e)i (inte)o(ger)l(,)g Ft(P)e FK(is)g(a)g(list)h(of)g Fq(n)f FK(points)i(in)e Fq(F)8 b FK(.)75 4514 y(Output:)30 b(The)18 b Fq(C)25 b FK(which)f(is)f(the)h(image)g(of)f(the)h(e)n(v)n(aluation)i (map)1548 4715 y Fq(E)7 b(val)1721 4729 y Fm(P)1786 4715 y FK(:)20 b Fq(F)8 b Fo([)p Fq(x)p Fo(])1985 4729 y Fm(k)2040 4715 y Fv(!)21 b Fq(F)2215 4677 y Fm(n)2252 4715 y Fp(;)75 4915 y FK(gi)n(v)o(en)29 b(by)42 b Fq(f)36 b Fv(7\000)-15 b(!)22 b Fo(\()14 b Fq(f)f Fo(\()7 b Fq(p)837 4929 y Fr(1)876 4915 y Fo(\))p Fp(;)j(:::;)24 b Fq(f)13 b Fo(\()7 b Fq(p)1195 4929 y Fm(n)1234 4915 y Fo(\)\))p FK(,)29 b(where)g Fq(P)22 b Fo(=)g Fv(f)7 b Fq(p)1874 4929 y Fr(1)1913 4915 y Fp(;)j(:::;)17 b Fq(p)2110 4929 y Fm(n)2148 4915 y Fv(g)24 b(\032)e Fq(F)35 b FK(and)42 b Fq(f)f FK(ranges)30 b(o)o(v)o(er)e(the)h(space)g Fq(F)7 b Fo([)p Fq(x)p Fo(])3611 4929 y Fm(k)3674 4915 y FK(of)75 5028 y(all)24 b(polynomials)i(of)d(de)o(gree)i(less)f(than)g Fq(k)r FK(.)216 5141 y(This)84 b(command)h(returns)h(a)e (\224record\224)i(object)g Ft(C)d FK(with)h(se)n(v)o(eral)i(e)o(xtra)e (components)j(\(type)75 5254 y Ft(NamesOfComponents\()q(C\))62 b FK(to)56 b(see)h(them)g(all\):)95 b Ft(C!.points)59 b FK(\(namely)f Ft(P)p FK(\),)64 b Ft(C!.degree)59 b FK(\(namely)f Ft(k)p FK(\),)75 5367 y(and)24 b Ft(C!.ring)h FK(\(namely)g Ft(R)p FK(\).)216 5479 y(This)36 b(code)g(can)g(be)g (decoded)i(using)f Ft(Decodeword)p FK(,)k(which)36 b(applies)i(the)e (special)h(decoder)h(method)f(\(the)75 5592 y(interpolation)31 b(method\),)d(or)f(using)h Ft(GeneralizedReedSol)q(omo)q(nDe)q(co)q (der)q(Gao)33 b FK(which)27 b(applies)i(an)d(algorithm)p Black Black eop end end %%Page: 83 83 TeXDict begin HPSdict begin 83 82 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.83) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(83)p Black 75 399 a(of)32 b(S.)f(Gao)h(\(see)h Ft(GeneralizedReedSolom)q(on)q(Dec)q(ode)q(rGa)q(o)38 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2193 400 a SDict begin H.S end 2193 400 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.10.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 2419 337 a SDict begin H.R end 2419 337 a 2419 399 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.3) cvn H.B /ANN pdfmark end 2419 399 a Black FK(\)\).)56 b(This)32 b(code)h(has)g(a)e (special)j(decoder)75 511 y(record)23 b(which)f(implements)h(the)e (interpolation)26 b(algorithm)d(described)h(in)d(section)j(5.2)d(of)g (Justesen)j(and)e(Hoholdt)75 624 y([)p 0.0236 0.6179 0.0894 TeXcolorrgb 105 625 a SDict begin H.S end 105 625 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(JH04)p 0.0236 0.6179 0.0894 TeXcolorrgb 296 562 a SDict begin H.R end 296 562 a 296 624 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.JH04) cvn H.B /ANN pdfmark end 296 624 a Black 1 w FK(].)28 b(See)23 b Ft(Decode)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 863 625 a SDict begin H.S end 863 625 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.10.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 1089 562 a SDict begin H.R end 1089 562 a 1089 624 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.1) cvn H.B /ANN pdfmark end 1089 624 a Black FK(\))g(and)f Ft(Decodeword)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1814 625 a SDict begin H.S end 1814 625 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.10.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 2040 562 a SDict begin H.R end 2040 562 a 2040 624 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.2) cvn H.B /ANN pdfmark end 2040 624 a Black FK(\))f(for)e(more)h (details.)216 737 y(The)242 b(weighted)i(v)o(ersion)g(has)f (implemented)h(with)f(the)g(option)75 850 y Ft(GeneralizedReedSol)q (omo)q(nCo)q(de\()q(P,)q(k,R)q(,wt)q(s\))p FK(,)59 b(where)47 b Fq(w)n(t)6 b(s)34 b Fo(=)f([)p Fq(v)2462 864 y Fr(1)2500 850 y Fp(;)10 b(:::;)g Fq(v)2685 864 y Fm(n)2724 850 y Fo(])46 b FK(is)i(a)e(sequence)k(of)d Fq(n)g FK(non-)75 963 y(zero)29 b(elements)g(from)f(the)g(base)h(\002eld)f Fq(F)35 b FK(of)28 b Ft(R)p FK(.)41 b(See)28 b(also)h(the)f (generalized)j(Reed\226Solomon)f(code)f Fq(GRS)3504 977 y Fm(k)3538 963 y Fo(\()p Fq(P)-12 b Fp(;)5 b Fq(V)12 b Fo(\))75 1076 y FK(described)26 b(in)e([)p 0.0236 0.6179 0.0894 TeXcolorrgb 570 1077 a SDict begin H.S end 570 1077 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(MS83)p 0.0236 0.6179 0.0894 TeXcolorrgb 792 1014 a SDict begin H.R end 792 1014 a 792 1076 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.MS83) cvn H.B /ANN pdfmark end 792 1076 a Black FK(],)f(p.303.)216 1189 y(The)i(list-decoding)k(algorithm)f(of)d(Sudan-Gurasw)o(ami)i (\(described)i(in)c(section)i(12.1)f(of)f([)p 0.0236 0.6179 0.0894 TeXcolorrgb 3155 1190 a SDict begin H.S end 3155 1190 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(JH04)p 0.0236 0.6179 0.0894 TeXcolorrgb 3346 1127 a SDict begin H.R end 3346 1127 a 3346 1189 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.JH04) cvn H.B /ANN pdfmark end 3346 1189 a Black 1 w FK(]\))h(has)f(been)75 1302 y(implemented)38 b(for)d(generalized)k (Reed-Solomon)f(codes.)66 b(See)35 b Ft(GeneralizedReedSol)q(omo)q(nLi) q(stD)q(ec)q(ode)q(r)75 1415 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 1416 a SDict begin H.S end 105 1416 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.10.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 331 1353 a SDict begin H.R end 331 1353 a 331 1415 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.10.4) cvn H.B /ANN pdfmark end 331 1415 a Black FK(\).)p 75 1534 1648 4 v 1764 1539 a FF(Example)p 2102 1534 V 75 1559 4 25 v 3747 1559 V 75 1658 4 100 v 188 1628 a(gap>)44 b(R:=PolynomialRing\(GF\()q(11\))q(,[")q(t")q(]\);)p 3747 1658 V 75 1758 V 188 1728 a(GF\(11\)[t])p 3747 1758 V 75 1858 V 188 1828 a(gap>)g(P:=List\([1,3,4,5,7],i)q(->Z)q(\(11)q (\)\210)q(i\);)p 3747 1858 V 75 1957 V 188 1927 a([)f(Z\(11\),)h (Z\(11\)\2103,)h(Z\(11\)\2104,)g(Z\(11\)\2105,)g(Z\(11\)\2107)g(])p 3747 1957 V 75 2057 V 188 2027 a(gap>)f(C:=GeneralizedReedSol)q(omo)q (nCo)q(de)q(\(P,)q(3,R)q(\);)p 3747 2057 V 75 2156 V 188 2127 a(a)f(linear)h([5,3,1..3]2)88 b(generalized)47 b(Reed-Solomon)f(code)e(over)f(GF\(11\))p 3747 2156 V 75 2256 V 188 2226 a(gap>)h(MinimumDistance\(C\);)p 3747 2256 V 75 2356 V 188 2326 a(3)p 3747 2356 V 75 2455 V 188 2425 a(gap>)g(V:=[Z\(11\)\2100,Z\(11\)\2100,Z)q(\(11)q(\)\2100)q (,Z)q(\(11)q(\)\2100)q(,Z\()q(11\))q(];)p 3747 2455 V 75 2555 V 188 2525 a([)f(Z\(11\)\2100,)i(Z\(11\)\2100,)g(Z\(11\)\2100,) g(Z\(11\)\2100,)g(Z\(11\))f(])p 3747 2555 V 75 2655 V 188 2625 a(gap>)g(C:=GeneralizedReedSol)q(omo)q(nCo)q(de)q(\(P,)q(3,R)q (,V\))q(;)p 3747 2655 V 75 2754 V 188 2724 a(a)f(linear)h([5,3,1..3]2) 88 b(weighted)45 b(generalized)i(Reed-Solomon)f(code)e(over)f(GF\(11\)) p 3747 2754 V 75 2854 V 188 2824 a(gap>)h(MinimumDistance\(C\);)p 3747 2854 V 75 2953 V 188 2924 a(3)p 3747 2953 V 75 2978 4 25 v 3747 2978 V 75 2981 3675 4 v 75 3194 a FK(See)23 b Ft(EvaluationCode)28 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 931 3195 a SDict begin H.S end 931 3195 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.6.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 1112 3132 a SDict begin H.R end 1112 3132 a 1112 3194 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.6.1) cvn H.B /ANN pdfmark end 1112 3194 a Black FK(\))c(for)g(a)f(more)g(general)j(construction.)75 3347 y SDict begin H.S end 75 3347 a 75 3347 a SDict begin 13.6 H.A end 75 3347 a 75 3347 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.6.3) cvn H.B /DEST pdfmark end 75 3347 a 96 x FJ(5.6.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(GeneralizedReedMullerCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3618 a Fs(\006)c Ft(GeneralizedReedMu) q(lle)q(rCo)q(de\()53 b(Pts,)48 b(r,)f(F)g(\))1564 b Fr(\(function\))p Black 216 3843 a Ft(GeneralizedReedMul)q(ler)q(Cod)q (e)41 b FK(returns)d(a)d('Reed-Muller)j(code')32 b Fq(C)37 b FK(with)e(length)i Fv(j)p Fq(P)n(t)6 b(s)p Fv(j)36 b FK(and)g(order)h Fq(r)r FK(.)75 3956 y(One)29 b(considers)j(\(a\))e (a)f(basis)i(of)e(monomials)i(for)f(the)g(v)o(ector)h(space)f(o)o(v)o (er)g Fq(F)h Fo(=)23 b Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))30 b FK(of)f(all)h(polynomials)i(in)75 4069 y Fq(F)7 b Fo([)p Fq(x)203 4083 y Fr(1)241 4069 y Fp(;)j(:::;)g Fq(x)426 4083 y Fm(d)468 4069 y Fo(])27 b FK(of)h(de)o(gree)g(at)f(most)h Fq(r)r FK(,)g(and)g(\(b\))f(a)g(set)h Fq(P)n(t)6 b(s)27 b FK(of)g(points)i(in)e Fq(F)2418 4036 y Fm(d)2458 4069 y FK(.)40 b(The)27 b(generator)j(matrix)e(of)f(the)h(asso-)75 4182 y(ciated)k Fq(Reed-Muller)g(code)26 b(C)31 b FK(is)f Fq(G)24 b Fo(=)g(\()14 b Fq(f)f Fo(\()7 b Fq(p)p Fo(\)\))1628 4196 y Fm(f)j Fh(2)p Fm(B)p Fl(;)5 b Fm(p)p Fh(2)p Fm(P)n(t)g(s)1935 4182 y FK(.)48 b(This)30 b(code)c Fq(C)32 b FK(is)e(constructed)j (using)f(the)e(command)75 4295 y Ft(GeneralizedReedMul)q(ler)q(Cod)q (e\(P)q(ts)q(,r,)q(F\))p FK(.)i(When)27 b Fq(P)n(t)6 b(s)26 b FK(is)g(the)h(set)g(of)g(all)f Fq(q)2702 4262 y Fm(d)2769 4295 y FK(points)i(in)f Fq(F)3177 4262 y Fm(d)3244 4295 y FK(then)g(the)g(com-)75 4408 y(mand)g Ft(GeneralizedReedMul)q(ler)q(\(d)q(,r,)q(F\))33 b FK(yields)28 b(the)f(code.)40 b(When)27 b Fq(P)n(t)6 b(s)27 b FK(is)f(the)i(set)f (of)g(all)g Fo(\()p Fq(q)14 b Fv(\000)g FK(1)p Fo(\))3460 4375 y Fm(d)3528 4408 y FK(points)75 4521 y(with)31 b(no)g(coordinate)j (equal)f(to)e(0)f(then)i(this)g(is)f(can)g(be)h(constructed)i(using)e (the)g Ft(ToricCode)h FK(command)f(\(as)g(a)75 4634 y(special)25 b(case\).)216 4747 y(This)84 b(command)h(returns)h(a)e(\224record\224)i (object)g Ft(C)d FK(with)h(se)n(v)o(eral)i(e)o(xtra)e(components)j (\(type)75 4860 y Ft(NamesOfComponents\()q(C\))53 b FK(to)48 b(see)h(them)f(all\):)78 b Ft(C!.points)51 b FK(\(namely)e Ft(Pts)q FK(\))e(and)i Ft(C!.degree)h FK(\(namely)75 4973 y Ft(r)p FK(\).)p 75 5092 1648 4 v 1764 5097 a FF(Example)p 2102 5092 V 75 5117 4 25 v 3747 5117 V 75 5216 4 100 v 188 5186 a(gap>)44 b(Pts:=ToricPoints\(2,GF)q(\(5\))q(\);)p 3747 5216 V 75 5316 V 188 5286 a([)f([)f(Z\(5\)\2100,)j(Z\(5\)\2100)f (],)f([)g(Z\(5\)\2100,)i(Z\(5\))f(],)f([)f(Z\(5\)\2100,)j(Z\(5\)\2102)f (],)f([)g(Z\(5\)\2100,)i(Z\(5\)\2103)f(],)p 3747 5316 V 75 5415 V 273 5386 a([)e(Z\(5\),)i(Z\(5\)\2100)h(],)e([)f(Z\(5\),)i (Z\(5\))g(],)f([)g(Z\(5\),)h(Z\(5\)\2102)g(],)f([)g(Z\(5\),)h (Z\(5\)\2103)g(],)p 3747 5415 V 75 5515 V 273 5485 a([)e(Z\(5\)\2102,)j (Z\(5\)\2100)f(],)f([)g(Z\(5\)\2102,)i(Z\(5\))f(],)f([)f(Z\(5\)\2102,)j (Z\(5\)\2102)f(],)f([)g(Z\(5\)\2102,)i(Z\(5\)\2103)f(],)p 3747 5515 V 75 5615 V 273 5585 a([)e(Z\(5\)\2103,)j(Z\(5\)\2100)f(],)f ([)g(Z\(5\)\2103,)i(Z\(5\))f(],)f([)f(Z\(5\)\2103,)j(Z\(5\)\2102)f(],)f ([)g(Z\(5\)\2103,)i(Z\(5\)\2103)f(])f(])p 3747 5615 V Black Black eop end end %%Page: 84 84 TeXDict begin HPSdict begin 84 83 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.84) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(84)p Black 75 428 4 100 v 188 399 a FF(gap>)44 b(C:=GeneralizedReedMul)q(ler)q(Cod)q(e\()q(Pts)q(,2,)q(GF\()q(5\)\))q (;)p 3747 428 V 75 528 V 188 498 a(a)f(linear)h([16,6,1..11]6..10)90 b(generalized)47 b(Reed-Muller)f(code)d(over)h(GF\(5\))p 3747 528 V 75 553 4 25 v 3747 553 V 75 556 3675 4 v 75 760 a FK(See)23 b Ft(EvaluationCode)28 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 931 761 a SDict begin H.S end 931 761 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.6.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 1112 698 a SDict begin H.R end 1112 698 a 1112 760 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.6.1) cvn H.B /ANN pdfmark end 1112 760 a Black FK(\))c(for)g(a)f (more)g(general)j(construction.)75 911 y SDict begin H.S end 75 911 a 75 911 a SDict begin 13.6 H.A end 75 911 a 75 911 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.6.4) cvn H.B /DEST pdfmark end 75 911 a 97 x FJ(5.6.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(T)-9 b(oricP)n(oints)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1182 a Fs(\006)22 b Ft(ToricPoints\()51 b(n,)c(F)g(\))2445 b Fr(\(function\))p Black 216 1408 a Ft(ToricPoints\(n,F\))29 b FK(returns)c(the)f(points)h(in)e Fo(\()p Fq(F)1827 1375 y Fh(\002)1882 1408 y Fo(\))1917 1375 y Fm(n)1955 1408 y FK(.)p 75 1524 1648 4 v 1764 1529 a FF(Example)p 2102 1524 V 75 1549 4 25 v 3747 1549 V 75 1649 4 100 v 188 1619 a(gap>)44 b(ToricPoints\(2,GF\(5\)\);)p 3747 1649 V 75 1749 V 188 1719 a([)f([)f(Z\(5\)\2100,)j(Z\(5\)\2100)f (],)f([)g(Z\(5\)\2100,)i(Z\(5\))f(],)f([)f(Z\(5\)\2100,)j(Z\(5\)\2102)f (],)p 3747 1749 V 75 1848 V 273 1818 a([)e(Z\(5\)\2100,)j(Z\(5\)\2103)f (],)f([)g(Z\(5\),)h(Z\(5\)\2100)h(],)e([)f(Z\(5\),)i(Z\(5\))g(],)f([)g (Z\(5\),)h(Z\(5\)\2102)g(],)p 3747 1848 V 75 1948 V 273 1918 a([)e(Z\(5\),)i(Z\(5\)\2103)h(],)e([)f(Z\(5\)\2102,)j(Z\(5\)\2100) g(],)e([)f(Z\(5\)\2102,)j(Z\(5\))f(],)f([)f(Z\(5\)\2102,)j(Z\(5\)\2102) f(],)p 3747 1948 V 75 2047 V 273 2017 a([)e(Z\(5\)\2102,)j(Z\(5\)\2103) f(],)f([)g(Z\(5\)\2103,)i(Z\(5\)\2100)f(],)f([)g(Z\(5\)\2103,)i(Z\(5\)) e(],)p 3747 2047 V 75 2147 V 273 2117 a([)f(Z\(5\)\2103,)j(Z\(5\)\2102) f(],)f([)g(Z\(5\)\2103,)i(Z\(5\)\2103)f(])f(])p 3747 2147 V 75 2172 4 25 v 3747 2172 V 75 2175 3675 4 v 75 2397 a SDict begin H.S end 75 2397 a 75 2397 a SDict begin 13.6 H.A end 75 2397 a 75 2397 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.6.5) cvn H.B /DEST pdfmark end 75 2397 a 117 x FJ(5.6.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(T)-9 b(oricCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2688 a Fs(\006)22 b Ft(ToricCode\()50 b(L,)d(F)g(\))2538 b Fr(\(function\))p Black 216 2914 a FK(This)22 b(function)j(returns)f(the)f(toric)g(codes) h(as)e(in)h(D.)e(Jo)o(yner)j([)p 0.0236 0.6179 0.0894 TeXcolorrgb 2141 2933 a SDict begin H.S end 2141 2933 a 0.0236 0.6179 0.0894 TeXcolorrgb -19 x FK(Jo)o(y04)p 0.0236 0.6179 0.0894 TeXcolorrgb 2355 2852 a SDict begin H.R end 2355 2852 a 2355 2914 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.Jo04) cvn H.B /ANN pdfmark end 2355 2914 a Black 3 w FK(])e(\(see)h(also)g(J.)e(P)-10 b(.)21 b(Hansen)j([)p 0.0236 0.6179 0.0894 TeXcolorrgb 3235 2916 a SDict begin H.S end 3235 2916 a 0.0236 0.6179 0.0894 TeXcolorrgb -2 x FK(Han99)p 0.0236 0.6179 0.0894 TeXcolorrgb 3476 2852 a SDict begin H.R end 3476 2852 a 3476 2914 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.Han99) cvn H.B /ANN pdfmark end 3476 2914 a Black 1 w FK(]\).)k(This)75 3027 y(is)g(a)g(truncated)j(\(generalized\))h(Reed-Muller)e(code.)45 b(Here)28 b Ft(L)g FK(is)g(a)g(list)h(of)f(inte)o(gral)i(v)o(ectors)g (and)f Ft(F)f FK(is)g(the)h(\002nite)75 3140 y(\002eld.)g(The)23 b(size)h(of)f Ft(F)g FK(must)h(be)f(dif)n(ferent)j(from)d(2.)216 3252 y(This)h(command)g(returns)h(a)f(record)h(object)g Ft(C)e FK(with)g(an)h(e)o(xtra)g(component)i(\(type)f Ft(NamesOfComponents\(C)q(\))75 3365 y FK(to)e(see)h(them)g(all\):)29 b Ft(C!.exponents)f FK(\(namely)c Ft(L)q FK(\).)p 75 3479 1648 4 v 1764 3484 a FF(Example)p 2102 3479 V 75 3504 4 25 v 3747 3504 V 75 3604 4 100 v 188 3574 a(gap>)44 b(C:=ToricCode\([[1,0],[)q(3,4)q(]],)q(GF)q(\(3\))q(\);)p 3747 3604 V 75 3703 V 188 3673 a(a)f(linear)h([4,1,4]2)h(toric)f(code)g (over)g(GF\(3\))p 3747 3703 V 75 3803 V 188 3773 a(gap>)g (Display\(GeneratorMat\()q(C\)\))q(;)p 3747 3803 V 75 3902 V 230 3873 a(1)f(1)g(2)f(2)p 3747 3902 V 75 4002 V 188 3972 a(gap>)i(Elements\(C\);)p 3747 4002 V 75 4102 V 188 4072 a([)f([)f(0)h(0)g(0)f(0)h(],)g([)g(1)f(1)h(2)g(2)f(],)h([)g (2)g(2)g(1)f(1)h(])g(])p 3747 4102 V 75 4127 4 25 v 3747 4127 V 75 4130 3675 4 v 75 4333 a FK(See)23 b Ft(EvaluationCode)28 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 931 4334 a SDict begin H.S end 931 4334 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.6.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 1112 4271 a SDict begin H.R end 1112 4271 a 1112 4333 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.6.1) cvn H.B /ANN pdfmark end 1112 4333 a Black FK(\))c(for)g(a)f(more)g(general)j (construction.)75 4495 y SDict begin H.S end 75 4495 a 75 4495 a SDict begin 13.6 H.A end 75 4495 a 75 4495 a SDict begin [ /View [/XYZ H.V] /Dest (section.5.7) cvn H.B /DEST pdfmark end 75 4495 a 130 x FM(5.7)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Algebraic)31 b(geometric)e(codes)p Black 75 4832 a FK(Certain)24 b Fy(GU)m(A)-6 b(V)f(A)22 b FK(functions)k(related)f (to)f(algebraic)i(geometric)f(codes)g(are)e(described)j(in)e(this)g (section.)75 4983 y SDict begin H.S end 75 4983 a 75 4983 a SDict begin 13.6 H.A end 75 4983 a 75 4983 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.1) cvn H.B /DEST pdfmark end 75 4983 a 96 x FJ(5.7.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Af\002neCur)o(v)o(e)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5254 a Fs(\006)e Ft(AffineCurve\()51 b(poly,)d(ring)g(\))2167 b Fr(\(function\))p Black 216 5479 a FK(This)21 b(function)j(simply)e (de\002nes)g(the)g(data)g(structure)i(of)d(an)h(af)n(\002ne)f(plane)h (curv)o(e.)29 b(In)21 b Fy(GU)m(A)-6 b(V)f(A)p FK(,)20 b(an)h(af)n(\002ne)g(curv)o(e)75 5592 y(is)e(a)h(record)h Ft(crv)f FK(ha)n(ving)h(tw)o(o)e(components:)30 b(a)19 b(polynomial)j Ft(poly)r FK(,)d(accessed)j(in)e Fy(GU)m(A)-6 b(V)f(A)17 b FK(by)j Ft(crv.polynomial)5 b FK(,)p Black Black eop end end %%Page: 85 85 TeXDict begin HPSdict begin 85 84 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.85) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(85)p Black 75 399 a(and)29 b(a)f(polynomial)j(ring)e(o)o (v)o(er)f(a)g(\002eld)h Fq(F)35 b FK(in)28 b(tw)o(o)g(v)n(ariables)j Ft(ring)q FK(,)e(accessed)h(in)f Fy(GU)m(A)-6 b(V)f(A)26 b FK(by)j Ft(crv.ring)s FK(,)f(con-)75 511 y(taining)d Ft(poly)r FK(.)j(Y)-10 b(ou)23 b(use)h(this)g(function)i(to)d(de\002ne) h(a)f(curv)o(e)h(in)g Fy(GU)m(A)-6 b(V)f(A)p FK(.)216 624 y(F)o(or)23 b(e)o(xample,)i(for)f(the)h(ring,)f(one)h(could)g(tak)o (e)g Fi(Q)p Fo([)p Fq(x)p Fp(;)10 b Fq(y)p Fo(])p FK(,)25 b(and)f(for)g(the)h(polynomial)h(one)f(could)g(tak)o(e)39 b Fq(f)13 b Fo(\()p Fq(x)p Fp(;)d Fq(y)p Fo(\))22 b(=)75 737 y Fq(x)115 704 y Fr(2)166 737 y Fo(+)13 b Fq(y)290 704 y Fr(2)339 737 y Fv(\000)g FK(1.)28 b(F)o(or)22 b(the)i(af)n (\002ne)g(line,)g(simply)g(taking)h Fi(Q)p Fo([)p Fq(x)p Fp(;)10 b Fq(y)p Fo(])24 b FK(for)g(the)f(ring)i(and)38 b Fq(f)13 b Fo(\()p Fq(x)p Fp(;)d Fq(y)p Fo(\))22 b(=)e Fq(y)j FK(for)g(the)h(polynomial.)216 850 y(\(Not)f(sure)i(if)e Fq(F)30 b FK(neeeds)25 b(to)e(be)h(a)f(\002eld)g(in)h(f)o(act)g(...\)) 216 963 y(T)-7 b(o)23 b(compute)h(its)g(de)o(gree,)g(simply)h(use)f (the)f Ft(DegreeMultivariat)q(ePo)q(lyn)q(omi)q(al)29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2962 964 a SDict begin H.S end 2962 964 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.6.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 3143 901 a SDict begin H.R end 3143 901 a 3143 963 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.6.2) cvn H.B /ANN pdfmark end 3143 963 a Black FK(\))24 b(command.)p 75 1072 1648 4 v 1764 1077 a FF(Example)p 2102 1072 V 75 1097 4 25 v 3747 1097 V 75 1197 4 100 v 188 1167 a(gap>)p 3747 1197 V 75 1296 V 188 1267 a(gap>)44 b(F:=GF\(11\);;)p 3747 1296 V 75 1396 V 188 1366 a(gap>)g(R2:=PolynomialRing\(F,)q(2\);)p 3747 1396 V 75 1496 V 188 1466 a(PolynomialRing\(...,)49 b([)42 b(x_1,)i(x_2)f(]\))p 3747 1496 V 75 1595 V 188 1565 a(gap>)h(vars:=IndeterminatesO)q(fPo)q(lyn)q(om)q(ial)q(Rin)q (g\(R)q(2\);)q(;)p 3747 1595 V 75 1695 V 188 1665 a(gap>)g (x:=vars[1];;)i(y:=vars[2];;)p 3747 1695 V 75 1795 V 188 1765 a(gap>)e(poly:=y;;)h(crvP1:=AffineCurve\()q(pol)q(y,R)q(2\);)p 3747 1795 V 75 1894 V 188 1864 a(rec\()f(ring)f(:=)g (PolynomialRing\(...,)49 b([)43 b(x_1,)h(x_2)f(]\),)g(polynomial)j(:=)d (x_2)g(\))p 3747 1894 V 75 1994 V 188 1964 a(gap>)h (degree_crv:=DegreeMul)q(tiv)q(ari)q(at)q(ePo)q(lyn)q(omi)q(al\()q(pol) q(y,R)q(2\);)p 3747 1994 V 75 2093 V 188 2064 a(1)p 3747 2093 V 75 2193 V 188 2163 a(gap>)g(poly:=y\2102-x*\(x\2102-1\);;)49 b(ell_crv:=AffineCurv)q(e\(p)q(oly)q(,R2)q(\);)p 3747 2193 V 75 2293 V 188 2263 a(rec\()44 b(ring)f(:=)g (PolynomialRing\(...,)49 b([)43 b(x_1,)h(x_2)f(]\),)g(polynomial)j(:=)d (-x_1\2103+x_2\2102+x_1)48 b(\))p 3747 2293 V 75 2392 V 188 2362 a(gap>)c(degree_crv:=DegreeMul)q(tiv)q(ari)q(at)q(ePo)q(lyn) q(omi)q(al\()q(pol)q(y,R)q(2\);)p 3747 2392 V 75 2492 V 188 2462 a(3)p 3747 2492 V 75 2592 V 188 2562 a(gap>)g (poly:=x\2102+y\2102-1;;)k(circle:=AffineCurve\()q(pol)q(y,R)q(2\);)p 3747 2592 V 75 2691 V 188 2661 a(rec\()c(ring)f(:=)g (PolynomialRing\(...,)49 b([)43 b(x_1,)h(x_2)f(]\),)g(polynomial)j(:=)d (x_1\2102+x_2\2102-Z\(11\)\2100)49 b(\))p 3747 2691 V 75 2791 V 188 2761 a(gap>)44 b(degree_crv:=DegreeMul)q(tiv)q(ari)q(at)q (ePo)q(lyn)q(omi)q(al\()q(pol)q(y,R)q(2\);)p 3747 2791 V 75 2890 V 188 2861 a(2)p 3747 2890 V 75 2990 V 188 2960 a(gap>)g(q:=3;;)p 3747 2990 V 75 3090 V 188 3060 a(gap>)g(F:=GF\(q\2102\);;)p 3747 3090 V 75 3189 V 188 3159 a(gap>)g(R:=PolynomialRing\(F,2)q(\);;)p 3747 3189 V 75 3289 V 188 3259 a(gap>)g(vars:=IndeterminatesO)q(fPo)q(lyn)q(om)q (ial)q(Rin)q(g\(R)q(\);)p 3747 3289 V 75 3389 V 188 3359 a([)f(x_1,)g(x_2)h(])p 3747 3389 V 75 3488 V 188 3458 a(gap>)g(x:=vars[1];)p 3747 3488 V 75 3588 V 188 3558 a(x_1)p 3747 3588 V 75 3687 V 188 3658 a(gap>)g(y:=vars[2];)p 3747 3687 V 75 3787 V 188 3757 a(x_2)p 3747 3787 V 75 3887 V 188 3857 a(gap>)g(crv:=AffineCurve\(y\210q+)q(y-x)q(\210\(q)q (+1)q(\),R)q(\);)p 3747 3887 V 75 3986 V 188 3956 a(rec\()g(ring)f(:=)g (PolynomialRing\(...,)49 b([)43 b(x_1,)h(x_2)f(]\),)g(polynomial)j(:=)d (-x_1\2104+x_2\2103+x_2)48 b(\))p 3747 3986 V 75 4086 V 188 4056 a(gap>)p 3747 4086 V 75 4111 4 25 v 3747 4111 V 75 4114 3675 4 v 75 4313 a FK(In)27 b Fy(GAP)p FK(,)e(a)i Fq(point)j FK(on)d(a)g(curv)o(e)h(de\002ned)g(by)41 b Fq(f)13 b Fo(\()p Fq(x)p Fp(;)d Fq(y)p Fo(\))25 b(=)c FK(0)27 b(is)g(simply)h(a)f(list)h Ft([a,b])g FK(of)f(elements)i(of)e Fq(F)33 b FK(satisfying)75 4426 y(this)24 b(polynomial)i(equation.)75 4577 y SDict begin H.S end 75 4577 a 75 4577 a SDict begin 13.6 H.A end 75 4577 a 75 4577 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.2) cvn H.B /DEST pdfmark end 75 4577 a 96 x FJ(5.7.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Af\002neP)n(ointsOnCur)o (v)o(e)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4847 a Fs(\006)c Ft(AffinePointsOnCur)q(ve\()53 b(f,)47 b(R,)g(E)g(\))1935 b Fr(\(function\))p Black 216 5073 a Ft(AffinePointsOnCurv)q(e\(f)q (,R,)q(E\))27 b FK(returns)c(the)f(points)h Fo(\()p Fq(x)p Fp(;)10 b Fq(y)p Fo(\))20 b Fv(2)e Fq(E)2437 5040 y Fr(2)2494 5073 y FK(satisying)38 b Fq(f)13 b Fo(\()p Fq(x)p Fp(;)d Fq(y)p Fo(\))20 b(=)e FK(0,)j(where)h Ft(f)f FK(is)g(an)75 5186 y(element)k(of)e Fq(R)d Fo(=)g Fq(F)7 b Fo([)p Fq(x)p Fp(;)j Fq(y)p Fo(])p FK(.)p 75 5298 1648 4 v 1764 5303 a FF(Example)p 2102 5298 V 75 5323 4 25 v 3747 5323 V 75 5423 4 100 v 188 5393 a(gap>)44 b(F:=GF\(11\);;)p 3747 5423 V 75 5523 V 188 5493 a(gap>)g(R)e(:=)h(PolynomialRing\(F,[")q (x",)q("y)q("]\))q(;)p 3747 5523 V 75 5622 V 188 5592 a(PolynomialRing\(...,)49 b([)42 b(x,)h(y)g(]\))p 3747 5622 V Black Black eop end end %%Page: 86 86 TeXDict begin HPSdict begin 86 85 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.86) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(86)p Black 75 428 4 100 v 188 399 a FF(gap>)44 b(indets)g(:=)f(IndeterminatesOfPol)q(yno)q(mia)q(lRi)q(ng\()q(R\);)q (;)p 3747 428 V 75 528 V 188 498 a(gap>)h(x:=indets[1];;)j (y:=indets[2];;)p 3747 528 V 75 628 V 188 598 a(gap>)d (P:=AffinePointsOnCurv)q(e\(y)q(\2102-)q(x\210)q(11+)q(x,R)q(,F\))q(;)p 3747 628 V 75 727 V 188 697 a([)f([)f(Z\(11\)\2109,)j(0*Z\(11\))g(],)e ([)g(Z\(11\)\2108,)i(0*Z\(11\))g(],)e([)f(Z\(11\)\2107,)j(0*Z\(11\))g (],)p 3747 727 V 75 827 V 273 797 a([)d(Z\(11\)\2106,)j(0*Z\(11\))g(],) e([)g(Z\(11\)\2105,)i(0*Z\(11\))g(],)e([)f(Z\(11\)\2104,)j(0*Z\(11\))g (],)p 3747 827 V 75 927 V 273 897 a([)d(Z\(11\)\2103,)j(0*Z\(11\))g(],) e([)g(Z\(11\)\2102,)i(0*Z\(11\))g(],)e([)f(Z\(11\),)j(0*Z\(11\))f(],)p 3747 927 V 75 1026 V 273 996 a([)e(Z\(11\)\2100,)j(0*Z\(11\))g(],)e([)g (0*Z\(11\),)i(0*Z\(11\))g(])d(])p 3747 1026 V 75 1051 4 25 v 3747 1051 V 75 1054 3675 4 v 75 1186 a SDict begin H.S end 75 1186 a 75 1186 a SDict begin 13.6 H.A end 75 1186 a 75 1186 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.3) cvn H.B /DEST pdfmark end 75 1186 a 117 x FJ(5.7.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(GenusCur)o(v)o(e)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1477 a Fs(\006)22 b Ft(GenusCurve\()51 b(crv)c(\))2538 b Fr(\(function\))p Black 216 1703 a FK(If)35 b Ft(crv)g FK(represents)52 b Fq(f)13 b Fo(\()p Fq(x)p Fp(;)d Fq(y)p Fo(\))28 b(=)e FK(0,)37 b(where)50 b Fq(f)d FK(is)35 b(a)f(polynomial)j(of)e(de)o(gree)h Fq(d)5 b FK(,)37 b(then)f(this)f(function)i(simply)75 1816 y(returns)24 b Fo(\()p Fq(d)17 b Fv(\000)11 b FK(1)p Fo(\)\()p Fq(d)17 b Fv(\000)11 b FK(2)p Fo(\))p Fp(=)p FK(2.)30 b(At)21 b(the)h(present,)i(the)f(function)h(does)f(not)g (check)h(if)d(the)i(curv)o(e)g(is)f(singular)i(\(in)f(which)75 1929 y(case)h(the)g(result)h(may)e(be)h(f)o(alse\).)p 75 2046 1648 4 v 1764 2051 a FF(Example)p 2102 2046 V 75 2071 4 25 v 3747 2071 V 75 2170 4 100 v 188 2140 a(gap>)44 b(q:=4;;)p 3747 2170 V 75 2270 V 188 2240 a(gap>)g(F:=GF\(q\2102\);;)p 3747 2270 V 75 2370 V 188 2340 a(gap>)g(a:=X\(F\);;)p 3747 2370 V 75 2469 V 188 2439 a(gap>)g(R1:=PolynomialRing\(F,)q([a])q (\);;)p 3747 2469 V 75 2569 V 188 2539 a(gap>)g(var1:=IndeterminatesO)q (fPo)q(lyn)q(om)q(ial)q(Rin)q(g\(R)q(1\);)q(;)p 3747 2569 V 75 2668 V 188 2639 a(gap>)g(b:=X\(F\);;)p 3747 2668 V 75 2768 V 188 2738 a(gap>)g(R2:=PolynomialRing\(F,)q([a,)q(b]\)) q(;;)p 3747 2768 V 75 2868 V 188 2838 a(gap>)g(var2:=IndeterminatesO)q (fPo)q(lyn)q(om)q(ial)q(Rin)q(g\(R)q(2\);)q(;)p 3747 2868 V 75 2967 V 188 2937 a(gap>)g(crv:=AffineCurve\(b\210q+)q(b-a)q (\210\(q)q(+1)q(\),R)q(2\);)q(;)p 3747 2967 V 75 3067 V 188 3037 a(gap>)g(crv:=AffineCurve\(b\210q+)q(b-a)q(\210\(q)q(+1)q (\),R)q(2\);)p 3747 3067 V 75 3167 V 188 3137 a(rec\()g(ring)f(:=)g (PolynomialRing\(...,)49 b([)43 b(x_1,)h(x_1)f(]\),)g(polynomial)j(:=)d (x_1\2105+x_1\2104+x_1)48 b(\))p 3747 3167 V 75 3266 V 188 3236 a(gap>)c(GenusCurve\(crv\);)p 3747 3266 V 75 3366 V 188 3336 a(36)p 3747 3366 V 75 3465 V 3747 3465 V 75 3490 4 25 v 3747 3490 V 75 3493 3675 4 v 75 3626 a SDict begin H.S end 75 3626 a 75 3626 a SDict begin 13.6 H.A end 75 3626 a 75 3626 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.4) cvn H.B /DEST pdfmark end 75 3626 a 116 x FJ(5.7.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(GOrbitP)n(oint)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3916 a Fs(\006)22 b Ft(GOrbitPoint)51 b(\()46 b(G,)i(P)e(\))2399 b Fr(\(function\))p Black 216 4142 a Ft(P)30 b FK(must)g(be)g(a)g(point)i(in)e(projecti)n (v)o(e)i(space)f Fi(P)1676 4109 y Fm(n)1713 4142 y Fo(\()p Fq(F)8 b Fo(\))p FK(,)31 b Ft(G)f FK(must)g(be)g(a)g(\002nite)g (subgroup)j(of)d Fq(GL)p Fo(\()p Fq(n)15 b Fo(+)g FK(1)p Fp(;)10 b Fq(F)e Fo(\))p FK(,)31 b(This)75 4255 y(function)26 b(returns)f(all)f(\(representati)n(v)o(es)j(of)d(projecti)n(v)o(e\))i (points)f(in)e(the)h(orbit)g Fq(G)13 b Fv(\001)g Fq(P)p FK(.)216 4368 y(The)26 b(e)o(xample)h(belo)n(w)g(computes)h(the)f (orbit)g(of)f(the)h(automorphism)i(group)f(on)e(the)h(Klein)f(quartic)i (o)o(v)o(er)f(the)75 4481 y(\002eld)c Fq(GF)7 b Fo(\()p FK(43)p Fo(\))24 b FK(on)g(the)g(\223point)h(at)e(in\002nity\224.)p 75 4601 1648 4 v 1764 4606 a FF(Example)p 2102 4601 V 75 4626 4 25 v 3747 4626 V 75 4726 4 100 v 188 4696 a(gap>)44 b(R:=)f(PolynomialRing\()k(GF\(43\),)e(3)e(\);;)p 3747 4726 V 75 4825 V 188 4795 a(gap>)h(vars:=)g(IndeterminatesOfPoly)q(no)q (mia)q(lRi)q(ng\()q(R\);)q(;)p 3747 4825 V 75 4925 V 188 4895 a(gap>)g(x:=)f(vars[1];;)i(y:=)f(vars[2];;)h(z:=)f(vars[3];;)p 3747 4925 V 75 5024 V 188 4995 a(gap>)g(zz:=Z\(43\)\2106;)p 3747 5024 V 75 5124 V 188 5094 a(Z\(43\)\2106)p 3747 5124 V 75 5224 V 188 5194 a(gap>)g(zzz:=Z\(43\);)p 3747 5224 V 75 5323 V 188 5293 a(Z\(43\))p 3747 5323 V 75 5423 V 188 5393 a(gap>)g(rho1:=zz\2100*[[zz\2104,0,0)q(],[)q(0,z)q (z\210)q(2,0)q(],[)q(0,0)q(,zz)q(]];)p 3747 5423 V 75 5523 V 188 5493 a([)f([)f(Z\(43\)\21024,)k(0*Z\(43\),)f(0*Z\(43\))f(],) p 3747 5523 V 75 5622 V 188 5592 a([)f(0*Z\(43\),)i(Z\(43\)\21012,)g (0*Z\(43\))g(],)p 3747 5622 V Black Black eop end end %%Page: 87 87 TeXDict begin HPSdict begin 87 86 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.87) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(87)p Black 75 428 4 100 v 188 399 a FF([)43 b(0*Z\(43\),)i(0*Z\(43\),)g(Z\(43\)\2106)f(])f(])p 3747 428 V 75 528 V 188 498 a(gap>)h(rho2:=zz\2100*[[0,1,0],[)q(0,0)q(,1])q (,[)q(1,0)q(,0])q(];)p 3747 528 V 75 628 V 188 598 a([)f([)f (0*Z\(43\),)j(Z\(43\)\2100,)g(0*Z\(43\))g(],)p 3747 628 V 75 727 V 188 697 a([)e(0*Z\(43\),)i(0*Z\(43\),)g(Z\(43\)\2100)f(],)p 3747 727 V 75 827 V 188 797 a([)f(Z\(43\)\2100,)i(0*Z\(43\),)g (0*Z\(43\))f(])f(])p 3747 827 V 75 927 V 188 897 a(gap>)h (rho3:=\(-1\)*[[\(zz-zz\2106)49 b(\)/zzz\2107,\()d(zz\2102-zz\2105)f (\)/)e(zzz\2107,)h(\()f(zz\2104-zz\2103)i(\)/)e(zzz\2107],)p 3747 927 V 75 1026 V 188 996 a(>)551 b([\()43 b(zz\2102-zz\2105)i(\)/)e (zzz\2107,)i(\()d(zz\2104-zz\2103)k(\)/)d(zzz\2107,)h(\()f(zz-zz\2106)h (\)/)f(zzz\2107],)p 3747 1026 V 75 1126 V 188 1096 a(>)551 b([\()43 b(zz\2104-zz\2103)i(\)/)e(zzz\2107,)i(\()d(zz-zz\2106)j(\)/)e (zzz\2107,)h(\()f(zz\2102-zz\2105)i(\)/)e(zzz\2107]];)p 3747 1126 V 75 1225 V 188 1196 a([)g([)f(Z\(43\)\2109,)j (Z\(43\)\21028,)h(Z\(43\)\21012)f(],)p 3747 1225 V 75 1325 V 188 1295 a([)e(Z\(43\)\21028,)i(Z\(43\)\21012,)g(Z\(43\)\2109)g (],)p 3747 1325 V 75 1425 V 188 1395 a([)e(Z\(43\)\21012,)i (Z\(43\)\2109,)g(Z\(43\)\21028)g(])e(])p 3747 1425 V 75 1524 V 188 1494 a(gap>)h(G:=Group\([rho1,rho2,r)q(ho3)q(]\);)q(;)49 b(#PSL\(2,7\))p 3747 1524 V 75 1624 V 188 1594 a(gap>)44 b(Size\(G\);)p 3747 1624 V 75 1724 V 188 1694 a(168)p 3747 1724 V 75 1823 V 188 1793 a(gap>)g(P:=[1,0,0]*zzz\2100;)p 3747 1823 V 75 1923 V 188 1893 a([)f(Z\(43\)\2100,)i(0*Z\(43\),)g (0*Z\(43\))f(])p 3747 1923 V 75 2022 V 188 1993 a(gap>)g (O:=GOrbitPoint\(G,P\);)p 3747 2022 V 75 2122 V 188 2092 a([)f([)f(Z\(43\)\2100,)j(0*Z\(43\),)g(0*Z\(43\))g(],)e([)g(0*Z\(43\),) i(Z\(43\)\2100,)g(0*Z\(43\))g(],)p 3747 2122 V 75 2222 V 188 2192 a([)e(0*Z\(43\),)i(0*Z\(43\),)g(Z\(43\)\2100)f(],)f([)g (Z\(43\)\2100,)i(Z\(43\)\21039,)h(Z\(43\)\21016)f(],)p 3747 2222 V 75 2321 V 188 2291 a([)e(Z\(43\)\2100,)i(Z\(43\)\21033,)g (Z\(43\)\21028)g(],)e([)g(Z\(43\)\2100,)i(Z\(43\)\21027,)g (Z\(43\)\21040)g(],)p 3747 2321 V 75 2421 V 188 2391 a([)e(Z\(43\)\2100,)i(Z\(43\)\21021,)g(Z\(43\)\21010)g(],)e([)g (Z\(43\)\2100,)i(Z\(43\)\21015,)g(Z\(43\)\21022)g(],)p 3747 2421 V 75 2521 V 188 2491 a([)e(Z\(43\)\2100,)i(Z\(43\)\2109,)g (Z\(43\)\21034)g(],)e([)g(Z\(43\)\2100,)i(Z\(43\)\2103,)g(Z\(43\)\2104) f(],)p 3747 2521 V 75 2620 V 188 2590 a([)f(Z\(43\)\2103,)i (Z\(43\)\21022,)g(Z\(43\)\2106)g(],)e([)g(Z\(43\)\2103,)i (Z\(43\)\21016,)g(Z\(43\)\21018)g(],)p 3747 2620 V 75 2720 V 188 2690 a([)e(Z\(43\)\2103,)i(Z\(43\)\21010,)g(Z\(43\)\21030)g (],)e([)g(Z\(43\)\2103,)i(Z\(43\)\2104,)g(Z\(43\)\2100)g(],)p 3747 2720 V 75 2819 V 188 2790 a([)e(Z\(43\)\2103,)i(Z\(43\)\21040,)g (Z\(43\)\21012)g(],)e([)g(Z\(43\)\2103,)i(Z\(43\)\21034,)g (Z\(43\)\21024)g(],)p 3747 2819 V 75 2919 V 188 2889 a([)e(Z\(43\)\2103,)i(Z\(43\)\21028,)g(Z\(43\)\21036)g(],)e([)g (Z\(43\)\2104,)i(Z\(43\)\21030,)g(Z\(43\)\21027)g(],)p 3747 2919 V 75 3019 V 188 2989 a([)e(Z\(43\)\2104,)i(Z\(43\)\21024,)g (Z\(43\)\21039)g(],)e([)g(Z\(43\)\2104,)i(Z\(43\)\21018,)g (Z\(43\)\2109)g(],)p 3747 3019 V 75 3118 V 188 3088 a([)e (Z\(43\)\2104,)i(Z\(43\)\21012,)g(Z\(43\)\21021)g(],)e([)g (Z\(43\)\2104,)i(Z\(43\)\2106,)g(Z\(43\)\21033)g(],)p 3747 3118 V 75 3218 V 188 3188 a([)e(Z\(43\)\2104,)i(Z\(43\)\2100,)g (Z\(43\)\2103)f(],)f([)g(Z\(43\)\2104,)i(Z\(43\)\21036,)h (Z\(43\)\21015)f(])d(])p 3747 3218 V 75 3318 V 188 3288 a(gap>)i(Length\(O\);)p 3747 3318 V 75 3417 V 188 3387 a(24)p 3747 3417 V 75 3517 V 3747 3517 V 75 3542 4 25 v 3747 3542 V 75 3545 3675 4 v 75 3758 a FK(Informally)-6 b(,)34 b(a)29 b Fq(divisor)34 b FK(on)d(a)f(curv)o(e)h(is)f(a)f(formal) i(inte)o(ger)h(linear)f(combination)i(of)d(points)i(on)e(the)g(curv)o (e,)j Fq(D)23 b Fo(=)75 3870 y Fq(m)141 3884 y Fr(1)178 3870 y Fq(P)225 3884 y Fr(1)278 3870 y Fo(+)16 b Fp(:::)g Fo(+)g Fq(m)609 3884 y Fm(k)643 3870 y Fq(P)690 3884 y Fm(k)725 3870 y FK(,)34 b(where)f(the)g Fq(m)1245 3884 y Fm(i)1299 3870 y FK(are)g(inte)o(gers)i(\(the)e(\223multiplicity\224) j(of)d Fq(P)2626 3884 y Fm(i)2680 3870 y FK(in)g Fq(D)p FK(\))f(and)h Fq(P)3121 3884 y Fm(i)3175 3870 y FK(are)g(\()p Fq(F)8 b FK(-rational\))75 3983 y(points)34 b(on)e(the)h(af)n(\002ne)f (plane)h(curv)o(e.)56 b(In)32 b(other)h(w)o(ords,)i(a)d(di)n(visor)i (is)e(an)g(element)h(of)g(the)f(free)h(abelian)h(group)75 4096 y(generated)e(by)d(the)g Fq(F)7 b FK(-rational)31 b(af)n(\002ne)e(points)h(on)g(the)f(curv)o(e.)46 b(The)28 b Fq(support)33 b FK(of)c(a)f(di)n(visor)i Fq(D)e FK(is)h(simply)h(the) f(set)75 4209 y(of)f(points)i(which)e(occurs)i(in)d(the)i(sum)f (de\002ning)h Fq(D)e FK(with)h(non-zero)i(\223multiplicity\224.)46 b(The)27 b(data)i(structure)h(for)f(a)75 4322 y(di)n(visor)c(on)f(an)f (af)n(\002ne)h(plane)g(curv)o(e)h(is)e(a)g(record)i(ha)n(ving)g(the)f (follo)n(wing)h(components:)p Black 211 4510 a Fv(\017)p Black 46 w FK(the)f(coef)n(\002cients)i(\(the)e(inte)o(ger)h(weights)f (of)g(the)f(points)i(in)f(the)g(support\),)p Black 211 4697 a Fv(\017)p Black 46 w FK(the)g(support,)p Black 211 4885 a Fv(\017)p Black 46 w FK(the)g(curv)o(e,)g(itself)h(a)e (record)i(which)f(has)f(components:)32 b(polynomial)26 b(and)e(polynomial)i(ring.)75 5038 y SDict begin H.S end 75 5038 a 75 5038 a SDict begin 13.6 H.A end 75 5038 a 75 5038 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.5) cvn H.B /DEST pdfmark end 75 5038 a 96 x FJ(5.7.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Di)o(visorOnAf\002neCur)o(v)o(e)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5308 a Fs(\006)c Ft(DivisorOnAffineCu)q(rve) q(\()52 b(cdiv,)d(sdiv,)f(crv)f(\))1518 b Fr(\(function\))p Black Black Black eop end end %%Page: 88 88 TeXDict begin HPSdict begin 88 87 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.88) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(88)p Black 216 399 a(This)25 b(is)f(the)h(command)h(you)f (use)h(to)e(de\002ne)h(a)g(di)n(visor)h(in)f Fy(GU)m(A)-6 b(V)f(A)p FK(.)22 b(Of)i(course,)j Ft(crv)e FK(is)f(the)h(curv)o(e)h (on)f(which)75 511 y(the)h(di)n(visor)h(li)n(v)o(es,)f Ft(cdiv)g FK(is)f(the)h(list)g(of)g(coef)n(\002cients)h(\(or)f (\223multiplicities\224\),)k Ft(sdiv)c FK(is)f(the)h(list)g(of)f (points)i(on)f Ft(crv)75 624 y FK(in)d(the)h(support.)p 75 682 1648 4 v 1764 687 a FF(Example)p 2102 682 V 75 707 4 25 v 3747 707 V 75 807 4 100 v 188 777 a(gap>)44 b(q:=5;)p 3747 807 V 75 906 V 188 876 a(5)p 3747 906 V 75 1006 V 188 976 a(gap>)g(F:=GF\(q\);)p 3747 1006 V 75 1106 V 188 1076 a(GF\(5\))p 3747 1106 V 75 1205 V 188 1175 a(gap>)g(R:=PolynomialRing\(F,2)q(\);;)p 3747 1205 V 75 1305 V 188 1275 a(gap>)g(vars:=IndeterminatesO)q(fPo)q(lyn)q (om)q(ial)q(Rin)q(g\(R)q(\);)p 3747 1305 V 75 1404 V 188 1375 a([)f(x_1,)g(x_2)h(])p 3747 1404 V 75 1504 V 188 1474 a(gap>)g(x:=vars[1];)p 3747 1504 V 75 1604 V 188 1574 a(x_1)p 3747 1604 V 75 1703 V 188 1673 a(gap>)g(y:=vars[2];)p 3747 1703 V 75 1803 V 188 1773 a(x_2)p 3747 1803 V 75 1903 V 188 1873 a(gap>)g(crv:=AffineCurve\(y\2103-)q(x\2103)q(-x-)q(1,) q(R\);)p 3747 1903 V 75 2002 V 188 1972 a(rec\()g(ring)f(:=)g (PolynomialRing\(...,)49 b([)43 b(x_1,)h(x_2)f(]\),)p 3747 2002 V 75 2102 V 400 2072 a(polynomial)i(:=)e (-x_1\2103+x_2\2103-x_1-Z)q(\(5\))q(\2100)49 b(\))p 3747 2102 V 75 2201 V 188 2172 a(gap>)44 b(Pts:=AffinePointsOnCu)q(rve)q (\(cr)q(v,)q(R,F)q(\);;)p 3747 2201 V 75 2301 V 188 2271 a(gap>)g(supp:=[Pts[1],Pts[2]])q(;)p 3747 2301 V 75 2401 V 188 2371 a([)f([)f(0*Z\(5\),)j(Z\(5\)\2100)f(],)f([)g(Z\(5\)\2100,)i (Z\(5\))f(])e(])p 3747 2401 V 75 2500 V 188 2470 a(gap>)i (D:=DivisorOnAffineCur)q(ve\()q([1,)q(-1)q(],s)q(upp)q(,cr)q(v\);)p 3747 2500 V 75 2600 V 188 2570 a(rec\()g(coeffs)g(:=)f([)g(1,)g(-1)g (],)p 3747 2600 V 75 2700 V 400 2670 a(support)h(:=)f([)g([)g (0*Z\(5\),)h(Z\(5\)\2100)h(],)e([)g(Z\(5\)\2100,)h(Z\(5\))g(])f(],)p 3747 2700 V 75 2799 V 400 2769 a(curve)h(:=)f(rec\()g(ring)h(:=)f (PolynomialRing\(...,)49 b([)43 b(x_1,)g(x_2)h(]\),)p 3747 2799 V 75 2899 V 992 2869 a(polynomial)i(:=)d (-x_1\2103+x_2\2103-x_1-Z\()q(5\)\210)q(0)48 b(\))43 b(\))p 3747 2899 V 75 2998 V 3747 2998 V 75 3023 4 25 v 3747 3023 V 75 3026 3675 4 v 75 3152 a SDict begin H.S end 75 3152 a 75 3152 a SDict begin 13.6 H.A end 75 3152 a 75 3152 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.6) cvn H.B /DEST pdfmark end 75 3152 a 116 x FJ(5.7.6)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Di)o(visorAddition)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3442 a Fs(\006)22 b Ft(DivisorAddition)52 b(\()47 b(D1,)g(D2)g(\))2121 b Fr(\(function\))p Black 216 3668 a FK(If)26 b Fq(D)368 3682 y Fr(1)427 3668 y Fo(=)21 b Fq(m)585 3682 y Fr(1)622 3668 y Fq(P)669 3682 y Fr(1)719 3668 y Fo(+)14 b Fp(:::)g Fo(+)g Fq(m)1044 3682 y Fm(k)1077 3668 y Fq(P)1124 3682 y Fm(k)1184 3668 y FK(and)26 b Fq(D)1406 3682 y Fr(2)1465 3668 y Fo(=)21 b Fq(n)1602 3682 y Fr(1)1640 3668 y Fq(P)1687 3682 y Fr(1)1737 3668 y Fo(+)14 b Fp(:::)g Fo(+)g Fq(n)2041 3682 y Fm(k)2075 3668 y Fq(P)2122 3682 y Fm(k)2181 3668 y FK(are)27 b(di)n(visors)g(then)g Fq(D)2876 3682 y Fr(1)2927 3668 y Fo(+)14 b Fq(D)3078 3682 y Fr(2)3136 3668 y Fo(=)21 b(\()p Fq(m)3329 3682 y Fr(1)3380 3668 y Fo(+)14 b Fq(n)3510 3682 y Fr(1)3547 3668 y Fo(\))p Fq(P)3629 3682 y Fr(1)3679 3668 y Fo(+)75 3781 y Fp(:::)f Fo(+)g(\()p Fq(m)348 3795 y Fm(k)395 3781 y Fo(+)g Fq(n)524 3795 y Fm(k)558 3781 y Fo(\))p Fq(P)640 3795 y Fm(k)675 3781 y FK(.)75 3929 y SDict begin H.S end 75 3929 a 75 3929 a SDict begin 13.6 H.A end 75 3929 a 75 3929 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.7) cvn H.B /DEST pdfmark end 75 3929 a 93 x FJ(5.7.7)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Di)o(visorDegr)n(ee)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4197 a Fs(\006)22 b Ft(DivisorDegree)51 b(\()c(D)g(\))2445 b Fr(\(function\))p Black 216 4422 a FK(If)23 b Fq(D)d Fo(=)g Fq(m)542 4436 y Fr(1)579 4422 y Fq(P)626 4436 y Fr(1)676 4422 y Fo(+)13 b Fp(:::)g Fo(+)g Fq(m)998 4436 y Fm(k)1031 4422 y Fq(P)1078 4436 y Fm(k)1135 4422 y FK(is)23 b(a)g(di)n(visor)i(then)f(the)g Fq(de)l(gr)m(ee)h FK(is)f Fq(m)2280 4436 y Fr(1)2329 4422 y Fo(+)13 b Fp(:::)g Fo(+)g Fq(m)2651 4436 y Fm(k)2684 4422 y FK(.)75 4566 y SDict begin H.S end 75 4566 a 75 4566 a SDict begin 13.6 H.A end 75 4566 a 75 4566 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.8) cvn H.B /DEST pdfmark end 75 4566 a 98 x FJ(5.7.8)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Di)o(visorNegate)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4838 a Fs(\006)22 b Ft(DivisorNegate)51 b(\()c(D)g(\))2445 b Fr(\(function\))p Black 216 5064 a FK(Self-e)o(xplanatory)-6 b(.)75 5209 y SDict begin H.S end 75 5209 a 75 5209 a SDict begin 13.6 H.A end 75 5209 a 75 5209 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.9) cvn H.B /DEST pdfmark end 75 5209 a 96 x FJ(5.7.9)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Di)o(visorIsZer)n(o)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5479 a Fs(\006)22 b Ft(DivisorIsZero)51 b(\()c(D)g(\))2445 b Fr(\(function\))p Black Black Black eop end end %%Page: 89 89 TeXDict begin HPSdict begin 89 88 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.89) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(89)p Black 216 399 a(Self-e)o(xplanatory)-6 b(.)75 551 y SDict begin H.S end 75 551 a 75 551 a SDict begin 13.6 H.A end 75 551 a 75 551 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.10) cvn H.B /DEST pdfmark end 75 551 a 97 x FJ(5.7.10)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Di)o(visorsEqual)p Black 1.0 0.0 0.0 TeXcolorrgb 75 822 a Fs(\006)22 b Ft(DivisorsEqual)51 b(\()c(D1,)h(D2)f(\))2213 b Fr(\(function\))p Black 216 1048 a FK(Self-e)o(xplanatory)-6 b(.)75 1200 y SDict begin H.S end 75 1200 a 75 1200 a SDict begin 13.6 H.A end 75 1200 a 75 1200 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.11) cvn H.B /DEST pdfmark end 75 1200 a 97 x FJ(5.7.11)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Di)o(visorGCD)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1471 a Fs(\006)22 b Ft(DivisorGCD)50 b(\()d(D1,)h(D2)f (\))2352 b Fr(\(function\))p Black 216 1697 a FK(If)49 b Fq(m)34 b Fo(=)41 b Fq(p)582 1655 y Fm(e)611 1665 y Fd(1)582 1724 y Fr(1)644 1697 y Fp(:::)7 b Fq(p)771 1654 y Fm(e)800 1665 y Ff(k)771 1725 y Fm(k)881 1697 y FK(and)49 b Fq(n)35 b Fo(=)41 b Fq(p)1307 1651 y Fm(f)1327 1661 y Fd(1)1297 1724 y Fr(1)1361 1697 y Fp(:::)7 b Fq(p)1498 1651 y Fm(f)1518 1662 y Ff(k)1488 1725 y Fm(k)1598 1697 y FK(are)49 b(tw)o(o)f(inte)o(gers)j(then)e(their)h(greatest)h(common)e (di)n(visor)h(is)75 1833 y Fq(G)-5 b(C)r(D)p Fo(\()p Fq(m)p Fp(;)10 b Fq(n)p Fo(\))30 b(=)37 b Fq(p)664 1784 y Fm(min)p Fk(\()p Fm(e)818 1794 y Fd(1)848 1784 y Fl(;)10 b Fm(f)896 1794 y Fd(1)926 1784 y Fk(\))664 1860 y Fr(1)956 1833 y Fp(:::)d Fq(p)1083 1784 y Fm(min)p Fk(\()p Fm(e)1237 1795 y Ff(k)1265 1784 y Fl(;)j Fm(f)1313 1795 y Ff(k)1341 1784 y Fk(\))1083 1861 y Fm(k)1371 1833 y FK(.)81 b(A)40 b(similar)i(de\002nition)h(w)o(orks)f(for)f(tw)o(o)g(di)n(visors)i(on)e (a)g(curv)o(e.)82 b(If)75 1946 y Fq(D)141 1960 y Fr(1)197 1946 y Fo(=)18 b Fq(e)326 1960 y Fr(1)364 1946 y Fq(P)411 1960 y Fr(1)459 1946 y Fo(+)11 b Fp(:::)g Fo(+)g Fq(e)749 1960 y Fm(k)785 1946 y Fq(P)832 1960 y Fm(k)888 1946 y FK(and)22 b Fq(D)1106 1960 y Fr(2)1143 1946 y Fq(n)e Fo(=)32 b Fq(f)1338 1960 y Fr(1)1376 1946 y Fq(P)1423 1960 y Fr(1)1471 1946 y Fo(+)11 b Fp(:::)g Fo(+)25 b Fq(f)1762 1960 y Fm(k)1797 1946 y Fq(P)1844 1960 y Fm(k)1900 1946 y FK(are)d(tw)o(o)g(di)n(visors)i(on)e(a)g(curv)o(e)h(then)f (their)h Fq(gr)m(eatest)h(com-)75 2059 y(mon)d(divisor)j FK(is)d Fq(G)-5 b(C)r(D)p Fo(\()p Fq(m)p Fp(;)10 b Fq(n)p Fo(\))18 b(=)f Fq(min)p Fo(\()p Fq(e)1330 2073 y Fr(1)1369 2059 y Fp(;)24 b Fq(f)1445 2073 y Fr(1)1482 2059 y Fo(\))p Fq(P)1564 2073 y Fr(1)1612 2059 y Fo(+)10 b Fp(:::)g Fo(+)g Fq(min)p Fo(\()p Fq(e)2070 2073 y Fm(k)2106 2059 y Fp(;)24 b Fq(f)2182 2073 y Fm(k)2217 2059 y Fo(\))p Fq(P)2299 2073 y Fm(k)2333 2059 y FK(.)j(This)21 b(function)i(computes) g(this)e(quantity)-6 b(.)75 2214 y SDict begin H.S end 75 2214 a 75 2214 a SDict begin 13.6 H.A end 75 2214 a 75 2214 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.12) cvn H.B /DEST pdfmark end 75 2214 a 94 x FJ(5.7.12)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Di)o(visorLCM)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2482 a Fs(\006)22 b Ft(DivisorLCM)50 b(\()d(D1,)h(D2)f(\))2352 b Fr(\(function\))p Black 216 2708 a FK(If)18 b Fq(m)d Fo(=)22 b Fq(p)513 2666 y Fm(e)542 2676 y Fd(1)513 2735 y Fr(1)576 2708 y Fp(:::)7 b Fq(p)703 2664 y Fm(e)732 2675 y Ff(k)703 2736 y Fm(k)781 2708 y FK(and)19 b Fq(n)d Fo(=)22 b Fq(p)1139 2662 y Fm(f)1159 2672 y Fd(1)1129 2735 y Fr(1)1192 2708 y Fp(:::)7 b Fq(p)1329 2662 y Fm(f)1349 2673 y Ff(k)1319 2736 y Fm(k)1399 2708 y FK(are)18 b(tw)o(o)g(inte)o (gers)h(then)g(their)g(least)g(common)g(multiple)g(is)f Fq(L)-5 b(C)r(M)t Fo(\()p Fq(m)p Fp(;)10 b Fq(n)p Fo(\))15 b(=)82 2844 y Fq(p)127 2795 y Fm(max)p Fk(\()p Fm(e)292 2805 y Fd(1)322 2795 y Fl(;)10 b Fm(f)370 2805 y Fd(1)400 2795 y Fk(\))127 2871 y Fr(1)430 2844 y Fp(:::)d Fq(p)557 2795 y Fm(max)p Fk(\()p Fm(e)722 2806 y Ff(k)751 2795 y Fl(;)j Fm(f)799 2806 y Ff(k)827 2795 y Fk(\))557 2872 y Fm(k)856 2844 y FK(.)27 b(A)20 b(similar)i(de\002nition)h(w)o(orks)e (for)g(tw)o(o)g(di)n(visors)h(on)f(a)g(curv)o(e.)29 b(If)20 b Fq(D)3031 2858 y Fr(1)3086 2844 y Fo(=)d Fq(e)3214 2858 y Fr(1)3252 2844 y Fq(P)3299 2858 y Fr(1)3346 2844 y Fo(+)10 b Fp(:::)g Fo(+)g Fq(e)3633 2858 y Fm(k)3669 2844 y Fq(P)3716 2858 y Fm(k)75 2957 y FK(and)19 b Fq(D)290 2971 y Fr(2)343 2957 y Fo(=)30 b Fq(f)471 2971 y Fr(1)508 2957 y Fq(P)555 2971 y Fr(1)600 2957 y Fo(+)8 b Fp(:::)g Fo(+)22 b Fq(f)882 2971 y Fm(k)918 2957 y Fq(P)965 2971 y Fm(k)1017 2957 y FK(are)d(tw)o(o)f(di)n(visors)j(on)e(a)f(curv)o(e)i (then)f(their)h Fq(least)g(common)f(multiple)h FK(is)e Fq(L)-5 b(C)r(M)t Fo(\()p Fq(m)p Fp(;)10 b Fq(n)p Fo(\))16 b(=)75 3069 y Fq(max)p Fo(\()p Fq(e)301 3083 y Fr(1)340 3069 y Fp(;)24 b Fq(f)416 3083 y Fr(1)454 3069 y Fo(\))p Fq(P)536 3083 y Fr(1)585 3069 y Fo(+)13 b Fp(:::)g Fo(+)g Fq(max)p Fo(\()p Fq(e)1067 3083 y Fm(k)1102 3069 y Fp(;)24 b Fq(f)1178 3083 y Fm(k)1213 3069 y Fo(\))p Fq(P)1295 3083 y Fm(k)1330 3069 y FK(.)k(This)23 b(function)j(computes)f(this)f (quantity)-6 b(.)p 75 3170 1648 4 v 1764 3175 a FF(Example)p 2102 3170 V 75 3195 4 25 v 3747 3195 V 75 3295 4 100 v 188 3265 a(gap>)44 b(F:=GF\(11\);)p 3747 3295 V 75 3394 V 188 3364 a(GF\(11\))p 3747 3394 V 75 3494 V 188 3464 a(gap>)g(R1:=PolynomialRing\(F,)q(["a)q("]\))q(;;)p 3747 3494 V 75 3594 V 188 3564 a(gap>)g(var1:=IndeterminatesO)q(fPo)q (lyn)q(om)q(ial)q(Rin)q(g\(R)q(1\);)q(;)k(a:=var1[1];;)p 3747 3594 V 75 3693 V 188 3663 a(gap>)c(b:=X\(F,"b",var1\);)p 3747 3693 V 75 3793 V 188 3763 a(b)p 3747 3793 V 75 3892 V 188 3863 a(gap>)g(var2:=Concatenation\(v)q(ar1)q(,[b)q(]\))q(;)p 3747 3892 V 75 3992 V 188 3962 a([)f(a,)g(b)f(])p 3747 3992 V 75 4092 V 188 4062 a(gap>)i(R2:=PolynomialRing\(F,)q(var)q(2\);) p 3747 4092 V 75 4191 V 188 4161 a(PolynomialRing\(...,)49 b([)42 b(a,)h(b)g(]\))p 3747 4191 V 75 4291 V 188 4261 a(gap>)h(crvP1:=AffineCurve\(b,)q(R2\))q(;)p 3747 4291 V 75 4391 V 188 4361 a(rec\()g(ring)f(:=)g(PolynomialRing\(...,)49 b([)43 b(a,)g(b)g(]\),)g(polynomial)j(:=)d(b)f(\))p 3747 4391 V 75 4490 V 188 4460 a(gap>)i(div1:=DivisorOnAffine)q(Cur)q(ve\()q ([1)q(,2,)q(3,4)q(],[)q(Z\(1)q(1\)\210)q(2,Z)q(\(11)q(\)\2103)q(,Z\()q (11\))q(\2107,)q(Z\(1)q(1\)])q(,cr)q(vP)q(1\);)p 3747 4490 V 75 4590 V 188 4560 a(rec\()g(coeffs)g(:=)f([)g(1,)g(2,)g(3,)g(4) f(],)p 3747 4590 V 75 4689 V 400 4660 a(support)i(:=)f([)g (Z\(11\)\2102,)i(Z\(11\)\2103,)g(Z\(11\)\2107,)g(Z\(11\))f(],)p 3747 4689 V 75 4789 V 400 4759 a(curve)g(:=)f(rec\()g(ring)h(:=)f (PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i(polynomial)h(:=)e(b)g (\))g(\))p 3747 4789 V 75 4889 V 188 4859 a(gap>)h (DivisorDegree\(div1\);)p 3747 4889 V 75 4988 V 188 4958 a(10)p 3747 4988 V 75 5088 V 188 5058 a(gap>)g(div2:=DivisorOnAffine)q (Cur)q(ve\()q([1)q(,2,)q(3,4)q(],[)q(Z\(1)q(1\),)q(Z\(1)q(1\)\210)q (2,Z)q(\(11)q(\)\2103)q(,Z\()q(11\))q(\2104])q(,cr)q(vP)q(1\);)p 3747 5088 V 75 5188 V 188 5158 a(rec\()g(coeffs)g(:=)f([)g(1,)g(2,)g (3,)g(4)f(],)p 3747 5188 V 75 5287 V 400 5257 a(support)i(:=)f([)g (Z\(11\),)h(Z\(11\)\2102,)i(Z\(11\)\2103,)f(Z\(11\)\2104)f(],)p 3747 5287 V 75 5387 V 400 5357 a(curve)g(:=)f(rec\()g(ring)h(:=)f (PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i(polynomial)h(:=)e(b)g (\))g(\))p 3747 5387 V 75 5487 V 188 5457 a(gap>)h (DivisorDegree\(div2\);)p 3747 5487 V 75 5586 V 188 5556 a(10)p 3747 5586 V Black Black eop end end %%Page: 90 90 TeXDict begin HPSdict begin 90 89 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.90) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(90)p Black 75 428 4 100 v 188 399 a FF(gap>)44 b(div3:=DivisorAddition)q(\(di)q(v1,)q(di)q(v2\))q(;)p 3747 428 V 75 528 V 188 498 a(rec\()g(coeffs)g(:=)f([)g(5,)g(3,)g(5,)g (4,)g(3)f(],)p 3747 528 V 75 628 V 400 598 a(support)i(:=)f([)g (Z\(11\),)h(Z\(11\)\2102,)i(Z\(11\)\2103,)f(Z\(11\)\2104,)g (Z\(11\)\2107)f(],)p 3747 628 V 75 727 V 400 697 a(curve)g(:=)f(rec\()g (ring)h(:=)f(PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i (polynomial)h(:=)e(b)g(\))g(\))p 3747 727 V 75 827 V 188 797 a(gap>)h(DivisorDegree\(div3\);)p 3747 827 V 75 927 V 188 897 a(20)p 3747 927 V 75 1026 V 188 996 a(gap>)g(DivisorIsEffective\(di)q(v1\))q(;)p 3747 1026 V 75 1126 V 188 1096 a(true)p 3747 1126 V 75 1225 V 188 1196 a(gap>)g(DivisorIsEffective\(di)q(v2\))q(;)p 3747 1225 V 75 1325 V 188 1295 a(true)p 3747 1325 V 75 1425 V 188 1395 a(gap>)p 3747 1425 V 75 1524 V 188 1494 a(gap>)g (ndiv1:=DivisorNegate\()q(div)q(1\);)p 3747 1524 V 75 1624 V 188 1594 a(rec\()g(coeffs)g(:=)f([)g(-1,)g(-2,)g(-3,)h(-4)f(],)p 3747 1624 V 75 1724 V 400 1694 a(support)h(:=)f([)g(Z\(11\)\2102,)i (Z\(11\)\2103,)g(Z\(11\)\2107,)g(Z\(11\))f(],)p 3747 1724 V 75 1823 V 400 1793 a(curve)g(:=)f(rec\()g(ring)h(:=)f (PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i(polynomial)h(:=)e(b)g (\))g(\))p 3747 1823 V 75 1923 V 188 1893 a(gap>)h (zdiv:=DivisorAddition)q(\(di)q(v1,)q(nd)q(iv1)q(\);)p 3747 1923 V 75 2022 V 188 1993 a(rec\()g(coeffs)g(:=)f([)g(0,)g(0,)g (0,)g(0)f(],)p 3747 2022 V 75 2122 V 400 2092 a(support)i(:=)f([)g (Z\(11\),)h(Z\(11\)\2102,)i(Z\(11\)\2103,)f(Z\(11\)\2107)f(],)p 3747 2122 V 75 2222 V 400 2192 a(curve)g(:=)f(rec\()g(ring)h(:=)f (PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i(polynomial)h(:=)e(b)g (\))g(\))p 3747 2222 V 75 2321 V 188 2291 a(gap>)h (DivisorIsZero\(zdiv\);)p 3747 2321 V 75 2421 V 188 2391 a(true)p 3747 2421 V 75 2521 V 188 2491 a(gap>)g (div_gcd:=DivisorGCD\(d)q(iv1)q(,di)q(v2)q(\);)p 3747 2521 V 75 2620 V 188 2590 a(rec\()g(coeffs)g(:=)f([)g(1,)g(1,)g(2,)g (0,)g(0)f(],)p 3747 2620 V 75 2720 V 400 2690 a(support)i(:=)f([)g (Z\(11\),)h(Z\(11\)\2102,)i(Z\(11\)\2103,)f(Z\(11\)\2104,)g (Z\(11\)\2107)f(],)p 3747 2720 V 75 2819 V 400 2790 a(curve)g(:=)f (rec\()g(ring)h(:=)f(PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i (polynomial)h(:=)e(b)g(\))g(\))p 3747 2819 V 75 2919 V 188 2889 a(gap>)h(div_lcm:=DivisorLCM\(d)q(iv1)q(,di)q(v2)q(\);)p 3747 2919 V 75 3019 V 188 2989 a(rec\()g(coeffs)g(:=)f([)g(4,)g(2,)g (3,)g(4,)g(3)f(],)p 3747 3019 V 75 3118 V 400 3088 a(support)i(:=)f([)g (Z\(11\),)h(Z\(11\)\2102,)i(Z\(11\)\2103,)f(Z\(11\)\2104,)g (Z\(11\)\2107)f(],)p 3747 3118 V 75 3218 V 400 3188 a(curve)g(:=)f (rec\()g(ring)h(:=)f(PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i (polynomial)h(:=)e(b)g(\))g(\))p 3747 3218 V 75 3318 V 188 3288 a(gap>)h(DivisorDegree\(div_gcd)q(\);)p 3747 3318 V 75 3417 V 188 3387 a(4)p 3747 3417 V 75 3517 V 188 3487 a(gap>)g(DivisorDegree\(div_lcm)q(\);)p 3747 3517 V 75 3616 V 188 3587 a(16)p 3747 3616 V 75 3716 V 188 3686 a(gap>)g(DivisorEqual\(div3,Div)q(iso)q(rAd)q(di)q(tio)q (n\(d)q(iv_)q(gcd)q(,di)q(v_l)q(cm\))q(\);)p 3747 3716 V 75 3816 V 188 3786 a(true)p 3747 3816 V 75 3915 V 3747 3915 V 75 3940 4 25 v 3747 3940 V 75 3943 3675 4 v 216 4131 a FK(Let)33 b Fq(G)g FK(denote)i(a)e(\002nite)h(subgroup)i(of)d Fq(PGL)p Fo(\()p FK(2)p Fp(;)10 b Fq(F)e Fo(\))33 b FK(and)h(let)f Fq(D)g FK(denote)i(a)e(di)n(visor)i(on)f(the)g(projecti)n(v)o(e)i(line) 75 4244 y Fi(P)131 4211 y Fr(1)168 4244 y Fo(\()p Fq(F)7 b Fo(\))p FK(.)49 b(If)31 b Fq(G)e FK(lea)n(v)o(es)j Fq(D)d FK(unchanged)k(\(it)e(may)f(permute)i(the)f(points)h(in)e(the)h (support)h(of)f Fq(D)e FK(b)n(ut)i(must)f(preserv)o(e)75 4357 y(their)h(sum)g(in)f Fq(D)p FK(\))g(then)h(the)g(Riemann-Roch)h (space)g Fq(L)p Fo(\()p Fq(D)p Fo(\))e FK(is)g(a)g Fq(G)p FK(-module.)51 b(The)30 b(commands)i(in)e(this)h(section)75 4470 y(help)24 b(e)o(xplore)h(the)f Fq(G)p FK(-module)g(structure)i(of) e Fq(L)p Fo(\()p Fq(D)p Fo(\))e FK(in)i(the)g(case)g(then)g(the)g (ground)h(\002eld)f Fq(F)30 b FK(is)23 b(\002nite.)75 4626 y SDict begin H.S end 75 4626 a 75 4626 a SDict begin 13.6 H.A end 75 4626 a 75 4626 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.13) cvn H.B /DEST pdfmark end 75 4626 a 93 x FJ(5.7.13)p 0.0 0.0 1.0 TeXcolorrgb 99 w (RiemannRochSpaceBasisFunctionP1)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4893 a Fs(\006)f Ft(RiemannRochSpaceB)q(asi)q(sFu)q(nct) q(io)q(nP1)53 b(\()47 b(P,)g(k,)g(R2)g(\))1286 b Fr(\(function\))p Black 216 5119 a FK(Input:)36 b Ft(R2)26 b FK(is)h(a)f(polynomial)i (ring)f(in)g(tw)o(o)f(v)n(ariables,)i(say)f Fq(F)7 b Fo([)p Fq(x)p Fp(;)j Fq(y)p Fo(])p FK(;)29 b Ft(P)d FK(is)g(an)h (element)g(of)f(the)h(base)g(\002eld,)g(say)75 5232 y Fq(F)7 b FK(;)23 b Ft(k)g FK(is)h(an)f(inte)o(ger)-5 b(.)30 b(Output:)g(1)p Fp(=)p Fo(\()p Fq(x)13 b Fv(\000)g Fq(P)p Fo(\))1403 5199 y Fm(k)p Black Black eop end end %%Page: 91 91 TeXDict begin HPSdict begin 91 90 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.91) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(91)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.14) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(5.7.14)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Di)o(visorOfRationalFunctionP1)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(DivisorOfRational)q (Fun)q(cti)q(onP)q(1)53 b(\()46 b(f,)h(R)g(\))1657 b Fr(\(function\))p Black 216 799 a FK(Here)23 b Fq(R)d Fo(=)f Fq(F)7 b Fo([)p Fq(x)p Fp(;)j Fq(y)p Fo(])24 b FK(is)f(a)g(polynomial)j(ring)e(in)f(the)g(v)n(ariables)i Fq(x)p Fp(;)10 b Fq(y)24 b FK(and)38 b Fq(f)d FK(is)23 b(a)g(rational)i(function)h(of)d Fq(x)p FK(.)28 b(Simply)75 912 y(returns)d(the)f(principal)i(di)n(visor)f(on)f Fi(P)1273 879 y Fr(1)1332 912 y FK(associated)j(to)37 b Fq(f)13 b FK(.)p 75 1009 1648 4 v 1764 1014 a FF(Example)p 2102 1009 V 75 1034 4 25 v 3747 1034 V 75 1134 4 100 v 3747 1134 V 75 1233 V 188 1204 a(gap>)44 b(F:=GF\(11\);)p 3747 1233 V 75 1333 V 188 1303 a(GF\(11\))p 3747 1333 V 75 1433 V 188 1403 a(gap>)g(R1:=PolynomialRing\(F,)q(["a)q("]\))q(;;) p 3747 1433 V 75 1532 V 188 1502 a(gap>)g(var1:=IndeterminatesO)q(fPo)q (lyn)q(om)q(ial)q(Rin)q(g\(R)q(1\);)q(;)k(a:=var1[1];;)p 3747 1532 V 75 1632 V 188 1602 a(gap>)c(b:=X\(F,"b",var1\);)p 3747 1632 V 75 1732 V 188 1702 a(b)p 3747 1732 V 75 1831 V 188 1801 a(gap>)g(var2:=Concatenation\(v)q(ar1)q(,[b)q(]\))q(;)p 3747 1831 V 75 1931 V 188 1901 a([)f(a,)g(b)f(])p 3747 1931 V 75 2030 V 188 2001 a(gap>)i(R2:=PolynomialRing\(F,)q(var)q(2\);) p 3747 2030 V 75 2130 V 188 2100 a(PolynomialRing\(...,)49 b([)42 b(a,)h(b)g(]\))p 3747 2130 V 75 2230 V 188 2200 a(gap>)h(pt:=Z\(11\);)p 3747 2230 V 75 2329 V 188 2299 a(Z\(11\))p 3747 2329 V 75 2429 V 188 2399 a(gap>)g (f:=RiemannRochSpaceBa)q(sis)q(Fun)q(ct)q(ion)q(P1\()q(pt,)q(2,R)q (2\);)p 3747 2429 V 75 2529 V 188 2499 a (\(Z\(11\)\2100\)/\(a\2102+Z\(11\))q(\2107*)q(a+Z)q(\(11)q(\)\2102)q (\))p 3747 2529 V 75 2628 V 188 2598 a(gap>)g(Df:=DivisorOfRational)q (Fun)q(cti)q(on)q(P1\()q(f,R)q(2\);)p 3747 2628 V 75 2728 V 188 2698 a(rec\()g(coeffs)g(:=)f([)g(-2)g(],)g(support)h(:=)g([) e(Z\(11\))i(],)p 3747 2728 V 75 2827 V 400 2798 a(curve)g(:=)f(rec\()g (ring)h(:=)f(PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i (polynomial)h(:=)e(a)g(\))p 3747 2827 V 75 2927 V 315 2897 a(\))p 3747 2927 V 75 3027 V 188 2997 a(gap>)h(Df.support;)p 3747 3027 V 75 3126 V 188 3096 a([)f(Z\(11\))h(])p 3747 3126 V 75 3226 V 188 3196 a(gap>)g(F:=GF\(11\);;)p 3747 3226 V 75 3326 V 188 3296 a(gap>)g(R:=PolynomialRing\(F,2)q(\);;)p 3747 3326 V 75 3425 V 188 3395 a(gap>)g(vars:=IndeterminatesO)q(fPo)q (lyn)q(om)q(ial)q(Rin)q(g\(R)q(\);;)p 3747 3425 V 75 3525 V 188 3495 a(gap>)g(a:=vars[1];;)p 3747 3525 V 75 3624 V 188 3595 a(gap>)g(b:=vars[2];;)p 3747 3624 V 75 3724 V 188 3694 a(gap>)g(f:=\(a\2104+Z\(11\)\2106*a\2103-a)q(\2102+)q (Z\(1)q(1\))q(\2107*)q(a+Z)q(\(11)q(\)\2100)q(\)/\()q(a\2104)q(+Z\()q (11\))q(*a\210)q(2+Z)q(\(11)q(\)\2107)q(*a+)q(Z\(1)q(1\))q(\);;)p 3747 3724 V 75 3824 V 188 3794 a(gap>)g(divf:=DivisorOfRation)q(alF)q (unc)q(ti)q(onP)q(1\(f)q(,R\))q(;)p 3747 3824 V 75 3923 V 188 3893 a(rec\()g(coeffs)g(:=)f([)g(3,)g(1)f(],)h(support)i(:=)e([)g (Z\(11\),)h(Z\(11\)\2107)h(],)p 3747 3923 V 75 4023 V 273 3993 a(curve)f(:=)f(rec\()g(ring)h(:=)f(PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i(polynomial)h(:=)e(a)g(\))g(\))p 3747 4023 V 75 4123 V 188 4093 a(gap>)h(denf:=DenominatorOfRa)q(tio)q (nal)q(Fu)q(nct)q(ion)q(\(f\))q(;)k(RootsOfUPol\(denf\);)p 3747 4123 V 75 4222 V 188 4192 a(a\2104+Z\(11\)*a\2102+Z\(11\)\210)q (7*a)q(+Z\()q(11\))p 3747 4222 V 75 4322 V 188 4292 a([)85 b(])p 3747 4322 V 75 4421 V 188 4392 a(gap>)44 b(numf:=NumeratorOfRati) q(ona)q(lFu)q(nc)q(tio)q(n\(f)q(\);)49 b(RootsOfUPol\(numf\);)p 3747 4421 V 75 4521 V 188 4491 a(a\2104+Z\(11\)\2106*a\2103-a\2102+)q (Z\(1)q(1\)\210)q(7*a)q(+Z\()q(11)q(\)\2100)p 3747 4521 V 75 4621 V 188 4591 a([)43 b(Z\(11\)\2107,)i(Z\(11\),)f(Z\(11\),)g (Z\(11\))g(])p 3747 4621 V 75 4720 V 3747 4720 V 75 4745 4 25 v 3747 4745 V 75 4748 3675 4 v 75 4881 a SDict begin H.S end 75 4881 a 75 4881 a SDict begin 13.6 H.A end 75 4881 a 75 4881 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.15) cvn H.B /DEST pdfmark end 75 4881 a 117 x FJ(5.7.15)p 0.0 0.0 1.0 TeXcolorrgb 99 w(RiemannRochSpaceBasisP1)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5172 a Fs(\006)22 b Ft(RiemannRochSpaceB)q(asi)q(sP1)53 b(\()47 b(D)g(\))1981 b Fr(\(function\))p Black 216 5398 a FK(This)19 b(returns)h(the)f (basis)h(of)e(the)h(Riemann-Roch)i(space)f Fq(L)p Fo(\()p Fq(D)p Fo(\))e FK(associated)j(to)e(the)g(di)n(visor)h Ft(D)e FK(on)h(the)g(projecti)n(v)o(e)75 5511 y(line)24 b Fi(P)290 5478 y Fr(1)327 5511 y FK(.)p Black Black eop end end %%Page: 92 92 TeXDict begin HPSdict begin 92 91 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.92) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(92)p Black 75 399 1648 4 v 1764 404 a FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188 493 a(gap>)44 b(F:=GF\(11\);)p 3747 523 V 75 623 V 188 593 a(GF\(11\))p 3747 623 V 75 722 V 188 692 a(gap>)g (R1:=PolynomialRing\(F,)q(["a)q("]\))q(;;)p 3747 722 V 75 822 V 188 792 a(gap>)g(var1:=IndeterminatesO)q(fPo)q(lyn)q(om)q (ial)q(Rin)q(g\(R)q(1\);)q(;)k(a:=var1[1];;)p 3747 822 V 75 922 V 188 892 a(gap>)c(b:=X\(F,"b",var1\);)p 3747 922 V 75 1021 V 188 991 a(b)p 3747 1021 V 75 1121 V 188 1091 a(gap>)g(var2:=Concatenation\(v)q(ar1)q(,[b)q(]\))q(;)p 3747 1121 V 75 1220 V 188 1191 a([)f(a,)g(b)f(])p 3747 1220 V 75 1320 V 188 1290 a(gap>)i(R2:=PolynomialRing\(F,)q(var)q(2\);) p 3747 1320 V 75 1420 V 188 1390 a(PolynomialRing\(...,)49 b([)42 b(a,)h(b)g(]\))p 3747 1420 V 75 1519 V 188 1489 a(gap>)h(crvP1:=AffineCurve\(b,)q(R2\))q(;)p 3747 1519 V 75 1619 V 188 1589 a(rec\()g(ring)f(:=)g(PolynomialRing\(...,)49 b([)43 b(a,)g(b)g(]\),)g(polynomial)j(:=)d(b)f(\))p 3747 1619 V 75 1719 V 188 1689 a(gap>)i(D:=DivisorOnAffineCur)q(ve\()q([1,)q (2,)q(3,4)q(],[)q(Z\(1)q(1\)\210)q(2,Z)q(\(11)q(\)\2103)q(,Z\()q(11\))q (\2107,)q(Z\(1)q(1\)])q(,cr)q(vP1)q(\);)p 3747 1719 V 75 1818 V 188 1788 a(rec\()g(coeffs)g(:=)f([)g(1,)g(2,)g(3,)g(4)f(],)p 3747 1818 V 75 1918 V 400 1888 a(support)i(:=)f([)g(Z\(11\)\2102,)i (Z\(11\)\2103,)g(Z\(11\)\2107,)g(Z\(11\))f(],)p 3747 1918 V 75 2017 V 400 1988 a(curve)g(:=)f(rec\()g(ring)h(:=)f (PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i(polynomial)h(:=)e(b)g (\))g(\))p 3747 2017 V 75 2117 V 188 2087 a(gap>)h (B:=RiemannRochSpaceBa)q(sis)q(P1\()q(D\))q(;)p 3747 2117 V 75 2217 V 188 2187 a([)f(Z\(11\)\2100,)i (\(Z\(11\)\2100\)/\(a+Z\(11\)\2107\))q(,)k (\(Z\(11\)\2100\)/\(a+Z\(11\)\2108\))q(,)p 3747 2217 V 75 2316 V 188 2286 a(\(Z\(11\)\2100\)/\(a\2102+Z\(11\))q(\2109*)q (a+Z)q(\(11)q(\)\2106)q(\),)g(\(Z\(11\)\2100\)/\(a+Z\(11\)\2102)q(\),)p 3747 2316 V 75 2416 V 188 2386 a(\(Z\(11\)\2100\)/\(a\2102+Z\(11\))q (\2103*)q(a+Z)q(\(11)q(\)\2104)q(\),)g (\(Z\(11\)\2100\)/\(a\2103+a\2102+Z)q(\(11)q(\)\2102)q(*a+)q(Z\(1)q (1\)\210)q(6\),)p 3747 2416 V 75 2516 V 273 2486 a (\(Z\(11\)\2100\)/\(a+Z\(11\)\2106\))q(,)f (\(Z\(11\)\2100\)/\(a\2102+Z\(1)q(1\)\210)q(7*a)q(+Z\()q(11\))q (\2102\))q(,)p 3747 2516 V 75 2615 V 188 2585 a (\(Z\(11\)\2100\)/\(a\2103+Z\(11\))q(\2104*)q(a\2102)q(+a+)q(Z\(1)q (1\))q(\2108\))q(,)p 3747 2615 V 75 2715 V 188 2685 a (\(Z\(11\)\2100\)/\(a\2104+Z\(11\))q(\2108*)q(a\2103)q(+Z\()q(11\))q (*a)q(\2102+)q(a+Z)q(\(11)q(\)\2104)q(\))g(])p 3747 2715 V 75 2814 V 188 2785 a(gap>)c(DivisorOfRationalFunc)q(tio)q(nP1)q(\(B)q ([1])q(,R2)q(\).s)q(upp)q(ort)q(;)p 3747 2814 V 75 2914 V 188 2884 a([)85 b(])p 3747 2914 V 75 3014 V 188 2984 a(gap>)44 b(DivisorOfRationalFunc)q(tio)q(nP1)q(\(B)q([2])q(,R2)q(\).s) q(upp)q(ort)q(;)p 3747 3014 V 75 3113 V 188 3083 a([)f(Z\(11\)\2102)h (])p 3747 3113 V 75 3213 V 188 3183 a(gap>)g(DivisorOfRationalFunc)q (tio)q(nP1)q(\(B)q([3])q(,R2)q(\).s)q(upp)q(ort)q(;)p 3747 3213 V 75 3313 V 188 3283 a([)f(Z\(11\)\2103)h(])p 3747 3313 V 75 3412 V 188 3382 a(gap>)g(DivisorOfRationalFunc)q(tio)q (nP1)q(\(B)q([4])q(,R2)q(\).s)q(upp)q(ort)q(;)p 3747 3412 V 75 3512 V 188 3482 a([)f(Z\(11\)\2103)h(])p 3747 3512 V 75 3611 V 188 3582 a(gap>)g(DivisorOfRationalFunc)q(tio)q(nP1)q (\(B)q([5])q(,R2)q(\).s)q(upp)q(ort)q(;)p 3747 3611 V 75 3711 V 188 3681 a([)f(Z\(11\)\2107)h(])p 3747 3711 V 75 3811 V 188 3781 a(gap>)g(DivisorOfRationalFunc)q(tio)q(nP1)q(\(B)q ([6])q(,R2)q(\).s)q(upp)q(ort)q(;)p 3747 3811 V 75 3910 V 188 3880 a([)f(Z\(11\)\2107)h(])p 3747 3910 V 75 4010 V 188 3980 a(gap>)g(DivisorOfRationalFunc)q(tio)q(nP1)q(\(B)q([7])q (,R2)q(\).s)q(upp)q(ort)q(;)p 3747 4010 V 75 4110 V 188 4080 a([)f(Z\(11\)\2107)h(])p 3747 4110 V 75 4209 V 188 4179 a(gap>)g(DivisorOfRationalFunc)q(tio)q(nP1)q(\(B)q([8])q(,R2)q (\).s)q(upp)q(ort)q(;)p 3747 4209 V 75 4309 V 188 4279 a([)f(Z\(11\))h(])p 3747 4309 V 75 4408 V 188 4379 a(gap>)g (DivisorOfRationalFunc)q(tio)q(nP1)q(\(B)q([9])q(,R2)q(\).s)q(upp)q (ort)q(;)p 3747 4408 V 75 4508 V 188 4478 a([)f(Z\(11\))h(])p 3747 4508 V 75 4608 V 188 4578 a(gap>)g(DivisorOfRationalFunc)q(tio)q (nP1)q(\(B)q([10)q(],R)q(2\).)q(sup)q(por)q(t;)p 3747 4608 V 75 4707 V 188 4677 a([)f(Z\(11\))h(])p 3747 4707 V 75 4807 V 188 4777 a(gap>)g(DivisorOfRationalFunc)q(tio)q(nP1)q(\(B)q ([11)q(],R)q(2\).)q(sup)q(por)q(t;)p 3747 4807 V 75 4907 V 188 4877 a([)f(Z\(11\))h(])p 3747 4907 V 75 5006 V 3747 5006 V 75 5031 4 25 v 3747 5031 V 75 5034 3675 4 v 75 5167 a SDict begin H.S end 75 5167 a 75 5167 a SDict begin 13.6 H.A end 75 5167 a 75 5167 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.16) cvn H.B /DEST pdfmark end 75 5167 a 117 x FJ(5.7.16)p 0.0 0.0 1.0 TeXcolorrgb 99 w(MoebiusT)-7 b(ransf)n(ormation)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5458 a Fs(\006)22 b Ft(MoebiusTransforma)q(tio)q(n)52 b(\()47 b(A,)g(R)g(\))1935 b Fr(\(function\))p Black Black Black eop end end %%Page: 93 93 TeXDict begin HPSdict begin 93 92 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.93) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(93)p Black 216 399 a(The)37 b(ar)n(guments)i(are)e(a)f(2) 18 b Fv(\002)f FK(2)37 b(matrix)g Fq(A)f FK(with)h(entries)h(in)f(a)f (\002eld)h Fq(F)43 b FK(and)37 b(a)g(polynomial)i(ring)f Ft(R)p FK(of)f(one)75 511 y(v)n(ariable,)f(say)d Fq(F)7 b Fo([)p Fq(x)p Fo(])p FK(.)56 b(This)32 b(function)j(returns)f(the)e (linear)i(fractional)h(transformatio)g(associated)h(to)c Ft(A)p FK(.)55 b(These)75 624 y(transformations)27 b(can)d(be)g (composed)h(with)f(each)g(other)g(using)h Fy(GAP)p FK(')-5 b(s)22 b Ft(Value)j FK(command.)75 776 y SDict begin H.S end 75 776 a 75 776 a SDict begin 13.6 H.A end 75 776 a 75 776 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.17) cvn H.B /DEST pdfmark end 75 776 a 96 x FJ(5.7.17)p 0.0 0.0 1.0 TeXcolorrgb 99 w(ActionMoebiusT)-7 b(ransf)n(ormationOnFunction)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1047 a Fs(\006)22 b Ft(ActionMoebiusTran)q(sfo)q(rma)q(tio)q(nO)q(nFu)q(nct)q(ion)53 b(\()47 b(A,)g(f,)g(R2)g(\))1008 b Fr(\(function\))p Black 216 1272 a FK(The)23 b(ar)n(guments)j(are)e(a)f(2)13 b Fv(\002)g FK(2)23 b(matrix)h Fq(A)f FK(with)g(entries)i(in)f(a)f (\002eld)g Fq(F)8 b FK(,)22 b(a)h(rational)j(function)g Ft(f)d FK(of)h(one)g(v)n(ariable,)75 1385 y(say)29 b(in)g Fq(F)7 b Fo(\()p Fq(x)p Fo(\))p FK(,)30 b(and)f(a)f(polynomial)j(ring)e Ft(R2)q FK(,)g(say)g Fq(F)7 b Fo([)p Fq(x)p Fp(;)j Fq(y)p Fo(])p FK(.)45 b(This)28 b(function)j(simply)f(returns)g(the)f (composition)i(of)75 1498 y(the)24 b(function)i Ft(f)d FK(with)g(the)h(M)8 b(\250)-38 b(obius)24 b(transformation)j(of)d Ft(A)p FK(.)75 1631 y SDict begin H.S end 75 1631 a 75 1631 a SDict begin 13.6 H.A end 75 1631 a 75 1631 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.18) cvn H.B /DEST pdfmark end 75 1631 a 115 x FJ(5.7.18)p 0.0 0.0 1.0 TeXcolorrgb 99 w(ActionMoebiusT)-7 b(ransf)n(ormationOnDi)o(visorP1)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1921 a Fs(\006)22 b Ft(ActionMoebiusTran)q(sfo)q(rma)q(tio)q(nO)q(nDi)q(vis)q(orP)q(1)53 b(\()46 b(A,)h(D)g(\))1147 b Fr(\(function\))p Black 216 2146 a FK(A)30 b(M)8 b(\250)-38 b(obius)33 b(transformation)i(may)c (be)g(re)o(garded)i(as)e(an)h(automorphism)i(of)d(the)h(projecti)n(v)o (e)h(line)f Fi(P)3477 2113 y Fr(1)3514 2146 y FK(.)51 b(This)75 2259 y(function)36 b(simply)f(returns)g(the)f(image)h(of)f (the)g(di)n(visor)h Ft(D)f FK(under)h(the)f(M)8 b(\250)-38 b(obius)35 b(transformation)i(de\002ned)e(by)f Ft(A)p FK(,)75 2372 y(pro)o(vided)26 b(that)e Ft(IsActionMoebiusTran)q(sfo)q (rma)q(tio)q(nO)q(nDi)q(vis)q(orD)q(ef)q(ine)q(dP1)q(\(A,)q(D\))29 b FK(returns)c(true.)75 2524 y SDict begin H.S end 75 2524 a 75 2524 a SDict begin 13.6 H.A end 75 2524 a 75 2524 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.19) cvn H.B /DEST pdfmark end 75 2524 a 96 x FJ(5.7.19)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsActionMoebiusT)-7 b(ransf)n(ormationOnDi)o (visorDe\002nedP1)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2794 a Fs(\006)22 b Ft(IsActionMoebiusTr)q(ans)q(for)q(mat)q(io)q(nOn)q (Div)q(iso)q(rD)q(efi)q(ned)q(P1)53 b(\()47 b(A,)g(D)f(\))730 b Fr(\(function\))p Black 216 3020 a FK(Returns)27 b(true)g(of)g(none)g (of)f(the)h(points)g(in)g(the)f(support)j(of)d(the)g(di)n(visor)i Ft(D)e FK(is)g(the)h(pole)g(of)f(the)h(M)8 b(\250)-38 b(obius)27 b(trans-)75 3133 y(formation.)p 75 3206 1648 4 v 1764 3211 a FF(Example)p 2102 3206 V 75 3231 4 25 v 3747 3231 V 75 3331 4 100 v 188 3301 a(gap>)44 b(F:=GF\(11\);)p 3747 3331 V 75 3430 V 188 3401 a(GF\(11\))p 3747 3430 V 75 3530 V 188 3500 a(gap>)g(R1:=PolynomialRing\(F,)q(["a)q("]\))q(;;) p 3747 3530 V 75 3630 V 188 3600 a(gap>)g(var1:=IndeterminatesO)q(fPo)q (lyn)q(om)q(ial)q(Rin)q(g\(R)q(1\);)q(;)k(a:=var1[1];;)p 3747 3630 V 75 3729 V 188 3699 a(gap>)c(b:=X\(F,"b",var1\);)p 3747 3729 V 75 3829 V 188 3799 a(b)p 3747 3829 V 75 3929 V 188 3899 a(gap>)g(var2:=Concatenation\(v)q(ar1)q(,[b)q(]\))q(;)p 3747 3929 V 75 4028 V 188 3998 a([)f(a,)g(b)f(])p 3747 4028 V 75 4128 V 188 4098 a(gap>)i(R2:=PolynomialRing\(F,)q(var)q(2\);) p 3747 4128 V 75 4227 V 188 4198 a(PolynomialRing\(...,)49 b([)42 b(a,)h(b)g(]\))p 3747 4227 V 75 4327 V 188 4297 a(gap>)h(crvP1:=AffineCurve\(b,)q(R2\))q(;)p 3747 4327 V 75 4427 V 188 4397 a(rec\()g(ring)f(:=)g(PolynomialRing\(...,)49 b([)43 b(a,)g(b)g(]\),)g(polynomial)j(:=)d(b)f(\))p 3747 4427 V 75 4526 V 188 4496 a(gap>)i(D:=DivisorOnAffineCur)q(ve\()q([1,)q (2,)q(3,4)q(],[)q(Z\(1)q(1\)\210)q(2,Z)q(\(11)q(\)\2103)q(,Z\()q(11\))q (\2107,)q(Z\(1)q(1\)])q(,cr)q(vP1)q(\);)p 3747 4526 V 75 4626 V 188 4596 a(rec\()g(coeffs)g(:=)f([)g(1,)g(2,)g(3,)g(4)f(],)p 3747 4626 V 75 4726 V 400 4696 a(support)i(:=)f([)g(Z\(11\)\2102,)i (Z\(11\)\2103,)g(Z\(11\)\2107,)g(Z\(11\))f(],)p 3747 4726 V 75 4825 V 400 4795 a(curve)g(:=)f(rec\()g(ring)h(:=)f (PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i(polynomial)h(:=)e(b)g (\))g(\))p 3747 4825 V 75 4925 V 188 4895 a(gap>)h (A:=Z\(11\)\2100*[[1,2],[1,)q(4]])q(;)p 3747 4925 V 75 5024 V 188 4995 a([)f([)f(Z\(11\)\2100,)j(Z\(11\))f(],)f([)g (Z\(11\)\2100,)i(Z\(11\)\2102)g(])e(])p 3747 5024 V 75 5124 V 188 5094 a(gap>)h(ActionMoebiusTransfor)q(mat)q(ion)q(On)q(Div)q (iso)q(rDe)q(fin)q(edP)q(1\(A)q(,D\))q(;)p 3747 5124 V 75 5224 V 188 5194 a(false)p 3747 5224 V 75 5323 V 188 5293 a(gap>)g(A:=Z\(11\)\2100*[[1,2],[3,)q(4]])q(;)p 3747 5323 V 75 5423 V 188 5393 a([)f([)f(Z\(11\)\2100,)j(Z\(11\))f(],)f ([)g(Z\(11\)\2108,)i(Z\(11\)\2102)g(])e(])p 3747 5423 V 75 5523 V 188 5493 a(gap>)h(ActionMoebiusTransfor)q(mat)q(ion)q(On)q (Div)q(iso)q(rDe)q(fin)q(edP)q(1\(A)q(,D\))q(;)p 3747 5523 V 75 5622 V 188 5592 a(true)p 3747 5622 V Black Black eop end end %%Page: 94 94 TeXDict begin HPSdict begin 94 93 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.94) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(94)p Black 75 428 4 100 v 188 399 a FF(gap>)44 b(ActionMoebiusTransfor)q(mat)q(ion)q(On)q(Div)q(iso)q(rP1)q(\(A,)q (D\);)p 3747 428 V 75 528 V 188 498 a(rec\()g(coeffs)g(:=)f([)g(1,)g (2,)g(3,)g(4)f(],)p 3747 528 V 75 628 V 400 598 a(support)i(:=)f([)g (Z\(11\)\2105,)i(Z\(11\)\2106,)g(Z\(11\)\2108,)g(Z\(11\)\2107)g(],)p 3747 628 V 75 727 V 400 697 a(curve)f(:=)f(rec\()g(ring)h(:=)f (PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i(polynomial)h(:=)e(b)g (\))g(\))p 3747 727 V 75 827 V 188 797 a(gap>)h(f:=MoebiusTransformat)q (ion)q(\(A,)q(R1)q(\);)p 3747 827 V 75 927 V 188 897 a(\(a+Z\(11\)\)/\(Z\(11\)\2108*a)q(+Z\()q(11\))q(\2102\))p 3747 927 V 75 1026 V 188 996 a(gap>)g(ActionMoebiusTransfor)q(mat)q (ion)q(On)q(Fun)q(cti)q(on\()q(A,f)q(,R1)q(\);)p 3747 1026 V 75 1126 V 188 1096 a(-Z\(11\)\2100+Z\(11\)\2103*a\210-)q(1)p 3747 1126 V 75 1225 V 3747 1225 V 75 1250 4 25 v 3747 1250 V 75 1253 3675 4 v 75 1387 a SDict begin H.S end 75 1387 a 75 1387 a SDict begin 13.6 H.A end 75 1387 a 75 1387 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.20) cvn H.B /DEST pdfmark end 75 1387 a 116 x FJ(5.7.20)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Di)o(visorA)-5 b(utomor)o(phismGr)n(oupP1)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1677 a Fs(\006)22 b Ft(DivisorAutomorphi)q(smG)q(rou)q(pP1)53 b(\()47 b(D)g(\))1842 b Fr(\(function\))p Black 216 1903 a FK(Input:)45 b(A)30 b(di)n(visor)i Ft(D)f FK(on)g Fi(P)1106 1870 y Fr(1)1143 1903 y Fo(\()p Fq(F)7 b Fo(\))p FK(,)32 b(where)f Fq(F)38 b FK(is)30 b(a)h(\002nite)g(\002eld.)50 b(Output:)45 b(A)30 b(subgroup)j Fq(A)n(u)n(t)6 b Fo(\()p Fq(D)p Fo(\))25 b Fv(\032)f Fq(A)n(u)n(t)6 b Fo(\()p Fi(P)3677 1870 y Fr(1)3715 1903 y Fo(\))75 2016 y FK(preserving)26 b Ft(D)q FK(.)216 2129 y(V)-10 b(ery)23 b(slo)n(w)-6 b(.)p 75 2226 1648 4 v 1764 2231 a FF(Example)p 2102 2226 V 75 2251 4 25 v 3747 2251 V 75 2351 4 100 v 188 2321 a(gap>)44 b(F:=GF\(11\);)p 3747 2351 V 75 2451 V 188 2421 a(GF\(11\))p 3747 2451 V 75 2550 V 188 2520 a(gap>)g(R1:=PolynomialRing\(F,)q(["a)q ("]\))q(;;)p 3747 2550 V 75 2650 V 188 2620 a(gap>)g (var1:=IndeterminatesO)q(fPo)q(lyn)q(om)q(ial)q(Rin)q(g\(R)q(1\);)q(;)k (a:=var1[1];;)p 3747 2650 V 75 2749 V 188 2720 a(gap>)c (b:=X\(F,"b",var1\);)p 3747 2749 V 75 2849 V 188 2819 a(b)p 3747 2849 V 75 2949 V 188 2919 a(gap>)g(var2:=Concatenation\(v)q (ar1)q(,[b)q(]\))q(;)p 3747 2949 V 75 3048 V 188 3018 a([)f(a,)g(b)f(])p 3747 3048 V 75 3148 V 188 3118 a(gap>)i (R2:=PolynomialRing\(F,)q(var)q(2\);)p 3747 3148 V 75 3248 V 188 3218 a(PolynomialRing\(...,)49 b([)42 b(a,)h(b)g(]\))p 3747 3248 V 75 3347 V 188 3317 a(gap>)h(crvP1:=AffineCurve\(b,)q(R2\))q (;)p 3747 3347 V 75 3447 V 188 3417 a(rec\()g(ring)f(:=)g (PolynomialRing\(...,)49 b([)43 b(a,)g(b)g(]\),)g(polynomial)j(:=)d(b)f (\))p 3747 3447 V 75 3547 V 188 3517 a(gap>)i(D:=DivisorOnAffineCur)q (ve\()q([1,)q(2,)q(3,4)q(],[)q(Z\(1)q(1\)\210)q(2,Z)q(\(11)q(\)\2103)q (,Z\()q(11\))q(\2107,)q(Z\(1)q(1\)])q(,cr)q(vP1)q(\);)p 3747 3547 V 75 3646 V 188 3616 a(rec\()g(coeffs)g(:=)f([)g(1,)g(2,)g (3,)g(4)f(],)p 3747 3646 V 75 3746 V 400 3716 a(support)i(:=)f([)g (Z\(11\)\2102,)i(Z\(11\)\2103,)g(Z\(11\)\2107,)g(Z\(11\))f(],)p 3747 3746 V 75 3845 V 400 3815 a(curve)g(:=)f(rec\()g(ring)h(:=)f (PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i(polynomial)h(:=)e(b)g (\))g(\))p 3747 3845 V 75 3945 V 188 3915 a(gap>)h (agp:=DivisorAutomorph)q(ism)q(Gro)q(up)q(P1\()q(D\);)q(;)k(time;)p 3747 3945 V 75 4045 V 188 4015 a(7305)p 3747 4045 V 75 4144 V 188 4114 a(gap>)c(IdGroup\(agp\);)p 3747 4144 V 75 4244 V 188 4214 a([)f(10,)g(2)g(])p 3747 4244 V 75 4344 V 3747 4344 V 75 4368 4 25 v 3747 4368 V 75 4371 3675 4 v 75 4505 a SDict begin H.S end 75 4505 a 75 4505 a SDict begin 13.6 H.A end 75 4505 a 75 4505 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.21) cvn H.B /DEST pdfmark end 75 4505 a 116 x FJ(5.7.21)p 0.0 0.0 1.0 TeXcolorrgb 99 w(MatrixRepr)n(esentationOnRiemannRochSpaceP1)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4795 a Fs(\006)22 b Ft(MatrixRepresentat)q (ion)q(OnR)q(iem)q(an)q(nRo)q(chS)q(pac)q(eP)q(1)52 b(\()47 b(g,)g(D)g(\))1054 b Fr(\(function\))p Black 216 5021 a FK(Input:)30 b(An)23 b(element)i Ft(g)e FK(in)g Fq(G)p FK(,)f(a)h(subgroup)j(of)e Fq(A)n(u)n(t)6 b Fo(\()p Fq(D)p Fo(\))20 b Fv(\032)g Fq(A)n(u)n(t)6 b Fo(\()p Fi(P)2296 4988 y Fr(1)2334 5021 y Fo(\))p FK(,)22 b(and)i(a)f(di)n(visor)i Ft(D)e FK(on)h Fi(P)3143 4988 y Fr(1)3180 5021 y Fo(\()p Fq(F)7 b Fo(\))p FK(,)23 b(where)h Fq(F)29 b FK(is)75 5134 y(a)23 b(\002nite)h(\002eld.)k(Output:)i(a)23 b Fq(d)18 b Fv(\002)13 b Fq(d)27 b FK(matrix,)d(where)g Fq(d)h Fo(=)20 b Fq(d)5 b(im)10 b(L)p Fo(\()p Fq(D)p Fo(\))p FK(,)23 b(representing)k(the)d(action)h(of)e Ft(g)g FK(on)h Fq(L)p Fo(\()p Fq(D)p Fo(\))p FK(.)216 5247 y(Note:)29 b Ft(g)23 b FK(sends)i Fq(L)p Fo(\()p Fq(D)p Fo(\))e FK(to)g Fq(r)15 b Fv(\001)e Fq(L)p Fo(\()p Fq(D)p Fo(\))p FK(,)23 b(where)g Fq(r)j FK(is)d(a)g(polynomial)j(of)d (de)o(gree)i(1)e(depending)k(on)c Ft(g)g FK(and)h Ft(D)q FK(.)216 5360 y(Also)g(v)o(ery)f(slo)n(w)-6 b(.)216 5473 y(The)25 b Fy(GAP)e FK(command)j Ft(BrauerCharacterVa)q(lue)31 b FK(can)26 b(be)f(used)h(to)g(\223lift\224)g(the)g(eigen)l(v)n(alues)i (of)e(this)g(matrix)75 5586 y(to)d(the)h(comple)o(x)h(numbers.)p Black Black eop end end %%Page: 95 95 TeXDict begin HPSdict begin 95 94 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.95) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(95)p Black 75 399 1648 4 v 1764 404 a FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188 493 a(gap>)44 b(F:=GF\(11\);)p 3747 523 V 75 623 V 188 593 a(GF\(11\))p 3747 623 V 75 722 V 188 692 a(gap>)g (R1:=PolynomialRing\(F,)q(["a)q("]\))q(;;)p 3747 722 V 75 822 V 188 792 a(gap>)g(var1:=IndeterminatesO)q(fPo)q(lyn)q(om)q (ial)q(Rin)q(g\(R)q(1\);)q(;)k(a:=var1[1];;)p 3747 822 V 75 922 V 188 892 a(gap>)c(b:=X\(F,"b",var1\);)p 3747 922 V 75 1021 V 188 991 a(b)p 3747 1021 V 75 1121 V 188 1091 a(gap>)g(var2:=Concatenation\(v)q(ar1)q(,[b)q(]\))q(;)p 3747 1121 V 75 1220 V 188 1191 a([)f(a,)g(b)f(])p 3747 1220 V 75 1320 V 188 1290 a(gap>)i(R2:=PolynomialRing\(F,)q(var)q(2\);) p 3747 1320 V 75 1420 V 188 1390 a(PolynomialRing\(...,)49 b([)42 b(a,)h(b)g(]\))p 3747 1420 V 75 1519 V 188 1489 a(gap>)h(crvP1:=AffineCurve\(b,)q(R2\))q(;)p 3747 1519 V 75 1619 V 188 1589 a(rec\()g(ring)f(:=)g(PolynomialRing\(...,)49 b([)43 b(a,)g(b)g(]\),)g(polynomial)j(:=)d(b)f(\))p 3747 1619 V 75 1719 V 188 1689 a(gap>)i(D:=DivisorOnAffineCur)q(ve\()q([1,)q (1,)q(1,4)q(],[)q(Z\(1)q(1\)\210)q(2,Z)q(\(11)q(\)\2103)q(,Z\()q(11\))q (\2107,)q(Z\(1)q(1\)])q(,cr)q(vP1)q(\);)p 3747 1719 V 75 1818 V 188 1788 a(rec\()g(coeffs)g(:=)f([)g(1,)g(1,)g(1,)g(4)f(],)p 3747 1818 V 75 1918 V 400 1888 a(support)i(:=)f([)g(Z\(11\)\2102,)i (Z\(11\)\2103,)g(Z\(11\)\2107,)g(Z\(11\))f(],)p 3747 1918 V 75 2017 V 400 1988 a(curve)g(:=)f(rec\()g(ring)h(:=)f (PolynomialRing\(...,)49 b([)43 b(a,)g(b)f(]\),)i(polynomial)h(:=)e(b)g (\))g(\))p 3747 2017 V 75 2117 V 188 2087 a(gap>)h (agp:=DivisorAutomorph)q(ism)q(Gro)q(up)q(P1\()q(D\);)q(;)k(time;)p 3747 2117 V 75 2217 V 188 2187 a(7198)p 3747 2217 V 75 2316 V 188 2286 a(gap>)c(IdGroup\(agp\);)p 3747 2316 V 75 2416 V 188 2386 a([)f(20,)g(5)g(])p 3747 2416 V 75 2516 V 188 2486 a(gap>)h(g:=Random\(agp\);)p 3747 2516 V 75 2615 V 188 2585 a([)f([)f(Z\(11\)\2104,)j(Z\(11\)\2109)g(],)e ([)g(Z\(11\)\2100,)i(Z\(11\)\2109)g(])d(])p 3747 2615 V 75 2715 V 188 2685 a(gap>)i(rho:=MatrixRepresenta)q(tio)q(nOn)q(Ri)q (ema)q(nnR)q(och)q(Spa)q(ceP)q(1\(g)q(,D\))q(;)p 3747 2715 V 75 2814 V 188 2785 a([)f([)f(Z\(11\)\2100,)j(0*Z\(11\),)g (0*Z\(11\),)g(0*Z\(11\),)h(0*Z\(11\),)f(0*Z\(11\),)g(0*Z\(11\),)g (0*Z\(11\))f(],)p 3747 2814 V 75 2914 V 188 2884 a([)f(Z\(11\)\2100,)i (0*Z\(11\),)g(0*Z\(11\),)g(Z\(11\),)f(0*Z\(11\),)h(0*Z\(11\),)g (0*Z\(11\),)g(0*Z\(11\))g(],)p 3747 2914 V 75 3014 V 273 2984 a([)d(Z\(11\)\2107,)j(0*Z\(11\),)g(Z\(11\)\2105,)g(0*Z\(11\),) h(0*Z\(11\),)f(0*Z\(11\),)g(0*Z\(11\),)g(0*Z\(11\))f(],)p 3747 3014 V 75 3113 V 188 3083 a([)f(Z\(11\)\2104,)i(Z\(11\)\2109,)g (0*Z\(11\),)g(0*Z\(11\),)g(0*Z\(11\),)g(0*Z\(11\),)g(0*Z\(11\),)g (0*Z\(11\))g(],)p 3747 3113 V 75 3213 V 273 3183 a([)d(Z\(11\)\2102,)j (0*Z\(11\),)g(0*Z\(11\),)g(0*Z\(11\),)h(Z\(11\)\2105,)f(0*Z\(11\),)g (0*Z\(11\),)g(0*Z\(11\))f(],)p 3747 3213 V 75 3313 V 188 3283 a([)f(Z\(11\)\2104,)i(0*Z\(11\),)g(0*Z\(11\),)g(0*Z\(11\),)g (Z\(11\)\2108,)g(Z\(11\)\2100,)g(0*Z\(11\),)g(0*Z\(11\))g(],)p 3747 3313 V 75 3412 V 273 3382 a([)d(Z\(11\)\2106,)j(0*Z\(11\),)g (0*Z\(11\),)g(0*Z\(11\),)h(Z\(11\)\2107,)f(Z\(11\)\2100,)g (Z\(11\)\2105,)g(0*Z\(11\))f(],)p 3747 3412 V 75 3512 V 188 3482 a([)f(Z\(11\)\2108,)i(0*Z\(11\),)g(0*Z\(11\),)g(0*Z\(11\),)g (Z\(11\)\2103,)g(Z\(11\)\2103,)g(Z\(11\)\2109,)g(Z\(11\)\2100)g(])d(])p 3747 3512 V 75 3611 V 188 3582 a(gap>)i(Display\(rho\);)p 3747 3611 V 75 3711 V 273 3681 a(1)85 b(.)g(.)g(.)g(.)g(.)g(.)g(.)p 3747 3711 V 75 3811 V 273 3781 a(1)g(.)g(.)g(2)g(.)g(.)g(.)g(.)p 3747 3811 V 75 3910 V 273 3880 a(7)g(.)42 b(10)86 b(.)f(.)g(.)g(.)g(.)p 3747 3910 V 75 4010 V 273 3980 a(5)g(6)g(.)g(.)g(.)g(.)g(.)g(.)p 3747 4010 V 75 4110 V 273 4080 a(4)g(.)g(.)g(.)42 b(10)86 b(.)f(.)g(.)p 3747 4110 V 75 4209 V 273 4179 a(5)g(.)g(.)g(.)g(3)g(1)g (.)g(.)p 3747 4209 V 75 4309 V 273 4279 a(9)g(.)g(.)g(.)g(7)g(1)42 b(10)86 b(.)p 3747 4309 V 75 4408 V 273 4379 a(3)f(.)g(.)g(.)g(8)g(8)g (6)g(1)p 3747 4408 V 75 4508 V 3747 4508 V 75 4533 4 25 v 3747 4533 V 75 4536 3675 4 v 75 4666 a SDict begin H.S end 75 4666 a 75 4666 a SDict begin 13.6 H.A end 75 4666 a 75 4666 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.22) cvn H.B /DEST pdfmark end 75 4666 a 116 x FJ(5.7.22)p 0.0 0.0 1.0 TeXcolorrgb 99 w(GoppaCodeClassical)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4956 a Fs(\006)22 b Ft(GoppaCodeClassica)q (l\()53 b(div,)47 b(pts)h(\))1935 b Fr(\(function\))p Black 216 5182 a FK(Input:)47 b(A)31 b(di)n(visor)j Ft(div)e FK(on)g(the)g(projecti)n(v)o(e)i(line)f Fi(P)1906 5149 y Fr(1)1943 5182 y Fo(\()p Fq(F)7 b Fo(\))32 b FK(o)o(v)o(er)g(a)f (\002nite)h(\002eld)g Fq(F)38 b FK(and)33 b(a)e(list)i Ft(pts)f FK(of)g(points)75 5295 y Fv(f)p Fq(P)167 5309 y Fr(1)204 5295 y Fp(;)10 b(:::;)g Fq(P)396 5309 y Fm(n)434 5295 y Fv(g)21 b(\032)f Fq(F)30 b FK(disjoint)25 b(from)f(the)f (support)j(of)d Ft(div)q FK(.)75 5408 y(Output:)30 b(The)23 b(classical)j(\(e)n(v)n(aluation\))g(Goppa)e(code)h(associated)h(to)e (this)g(data.)29 b(This)23 b(is)h(the)g(code)1219 5592 y Fq(C)f Fo(=)d Fv(f)p Fo(\()14 b Fq(f)f Fo(\()p Fq(P)1608 5606 y Fr(1)1646 5592 y Fo(\))p Fp(;)d(:::;)24 b Fq(f)13 b Fo(\()p Fq(P)1960 5606 y Fm(n)1998 5592 y Fo(\)\))24 b Fv(j)36 b Fq(f)e Fv(2)20 b Fq(L)p Fo(\()p Fq(D)p Fo(\))2480 5606 y Fm(F)2530 5592 y Fv(g)p Fp(:)p Black Black eop end end %%Page: 96 96 TeXDict begin HPSdict begin 96 95 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.96) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(96)p Black 75 501 1648 4 v 1764 506 a FF(Example)p 2102 501 V 75 526 4 25 v 3747 526 V 75 626 4 100 v 188 596 a(gap>)44 b(F:=GF\(11\);;)p 3747 626 V 75 726 V 188 696 a(gap>)g(R2:=PolynomialRing\(F,)q(2\);)q(;)p 3747 726 V 75 825 V 188 795 a(gap>)g(vars:=IndeterminatesO)q(fPo)q(lyn)q(om) q(ial)q(Rin)q(g\(R)q(2\);)q(;)p 3747 825 V 75 925 V 188 895 a(gap>)g(a:=vars[1];;b:=vars[2)q(];;)p 3747 925 V 75 1024 V 188 995 a(gap>)g(cdiv:=[)g(1,)f(2,)g(-1,)h(-2)f(];)p 3747 1024 V 75 1124 V 188 1094 a([)g(1,)g(2,)g(-1,)g(-2)g(])p 3747 1124 V 75 1224 V 188 1194 a(gap>)h(sdiv:=[)g(Z\(11\)\2102,)h (Z\(11\)\2103,)g(Z\(11\)\2106,)h(Z\(11\)\2109)e(];)p 3747 1224 V 75 1323 V 188 1293 a([)f(Z\(11\)\2102,)i(Z\(11\)\2103,)g (Z\(11\)\2106,)g(Z\(11\)\2109)g(])p 3747 1323 V 75 1423 V 188 1393 a(gap>)f(crv:=rec\(polynomial:=)q(b,r)q(ing)q(:=)q(R2\))q(;) p 3747 1423 V 75 1523 V 188 1493 a(rec\()g(polynomial)h(:=)e(x_2,)h (ring)g(:=)f(PolynomialRing\(...,)49 b([)42 b(x_1,)i(x_2)f(]\))g(\))p 3747 1523 V 75 1622 V 188 1592 a(gap>)h(div:=DivisorOnAffineC)q(urv)q (e\(c)q(di)q(v,s)q(div)q(,cr)q(v\);)p 3747 1622 V 75 1722 V 188 1692 a(rec\()g(coeffs)g(:=)f([)g(1,)g(2,)g(-1,)g(-2)g(],)g (support)i(:=)e([)g(Z\(11\)\2102,)i(Z\(11\)\2103,)g(Z\(11\)\2106,)g (Z\(11\)\2109)g(],)p 3747 1722 V 75 1822 V 273 1792 a(curve)f(:=)f (rec\()g(polynomial)j(:=)d(x_2,)h(ring)g(:=)f(PolynomialRing\(...,)48 b([)43 b(x_1,)h(x_2)f(]\))g(\))g(\))p 3747 1822 V 75 1921 V 188 1891 a(gap>)h(pts:=Difference\(Eleme)q(nts)q(\(GF)q(\(1)q (1\)\))q(,di)q(v.s)q(upp)q(ort)q(\);)p 3747 1921 V 75 2021 V 188 1991 a([)f(0*Z\(11\),)i(Z\(11\)\2100,)g(Z\(11\),)f (Z\(11\)\2104,)h(Z\(11\)\2105,)g(Z\(11\)\2107,)g(Z\(11\)\2108)g(])p 3747 2021 V 75 2120 V 188 2090 a(gap>)f(C:=GoppaCodeClassical)q(\(di)q (v,p)q(ts)q(\);)p 3747 2120 V 75 2220 V 188 2190 a(a)f(linear)h ([7,2,1..6]4..5)j(code)d(defined)h(by)e(generator)i(matrix)f(over)g (GF\(11\))p 3747 2220 V 75 2320 V 188 2290 a(gap>)g (MinimumDistance\(C\);)p 3747 2320 V 75 2419 V 188 2389 a(6)p 3747 2419 V 75 2444 4 25 v 3747 2444 V 75 2447 3675 4 v 75 2580 a SDict begin H.S end 75 2580 a 75 2580 a SDict begin 13.6 H.A end 75 2580 a 75 2580 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.23) cvn H.B /DEST pdfmark end 75 2580 a 117 x FJ(5.7.23)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Ev)o(aluationBi)o(v)o(ariateCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2871 a Fs(\006)22 b Ft(EvaluationBivaria)q(teC)q(ode)q (\()52 b(pts,)c(L,)f(crv)h(\))1564 b Fr(\(function\))p Black 216 3097 a FK(Input:)30 b Ft(pts)24 b FK(is)g(a)f(set)g(of)h(af)n (\002ne)f(points)i(on)f Ft(crv)p FK(,)g Ft(L)f FK(is)g(a)g(list)h(of)f (rational)j(functions)g(on)e Ft(crv)p FK(.)75 3210 y(Output:)43 b(The)29 b(e)n(v)n(aluation)k(code)e(associated)h(to)e(the)h(points)g (in)f Ft(pts)g FK(and)h(functions)h(in)e Ft(L)p FK(,)f(b)n(ut)i (speci\002cally)h(for)75 3323 y(af)n(\002ne)25 b(plane)h(curv)o(es)g (and)f(this)g(function)i(checks)f(if)f(points)h(are)f(\223bad\224)h (\(if)f(so)g(remo)o(v)o(es)g(them)g(from)g(the)g(list)g Ft(pts)75 3435 y FK(automatically\).)47 b(A)27 b(point)i(is)f (\223bad\224)i(if)e(either)i(it)e(does)h(not)g(lie)f(on)g(the)h(set)g (of)f(non-singular)k Fq(F)7 b FK(-rational)31 b(points)75 3548 y(\(places)25 b(of)f(de)o(gree)g(1\))g(on)f(the)h(curv)o(e.)216 3661 y(V)-10 b(ery)21 b(similar)h(to)e Ft(EvaluationCode)26 b FK(\(see)21 b Ft(EvaluationCode)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2306 3662 a SDict begin H.S end 2306 3662 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.6.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 2487 3599 a SDict begin H.R end 2487 3599 a 2487 3661 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.6.1) cvn H.B /ANN pdfmark end 2487 3661 a Black FK(\))d(for)f(a)g(more)g(general)h(construction\).)75 3814 y SDict begin H.S end 75 3814 a 75 3814 a SDict begin 13.6 H.A end 75 3814 a 75 3814 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.24) cvn H.B /DEST pdfmark end 75 3814 a 97 x FJ(5.7.24)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Ev)o(aluationBi)o(v)o (ariateCodeNC)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4085 a Fs(\006)g Ft(EvaluationBivaria)q(teC)q(ode)q(NC\()53 b(pts,)48 b(L,)f(crv)h(\))1471 b Fr(\(function\))p Black 216 4311 a FK(As)23 b(in)g Ft(EvaluationBivariat)q(eC)q(ode)29 b FK(b)n(ut)24 b(does)h(not)f(check)g(if)g(the)g(points)h(are)e (\223bad\224.)216 4424 y(Input:)30 b Ft(pts)24 b FK(is)g(a)f(set)g(of)h (af)n(\002ne)f(points)i(on)f Ft(crv)p FK(,)g Ft(L)f FK(is)g(a)g(list)h (of)f(rational)j(functions)g(on)e Ft(crv)p FK(.)75 4536 y(Output:)30 b(The)23 b(e)n(v)n(aluation)j(code)e(associated)j(to)c (the)h(points)h(in)e Ft(pts)h FK(and)g(functions)i(in)e Ft(L)p FK(.)p 75 4659 1648 4 v 1764 4664 a FF(Example)p 2102 4659 V 75 4684 4 25 v 3747 4684 V 75 4784 4 100 v 188 4754 a(gap>)44 b(q:=4;;)p 3747 4784 V 75 4883 V 188 4853 a(gap>)g(F:=GF\(q\2102\);;)p 3747 4883 V 75 4983 V 188 4953 a(gap>)g(R:=PolynomialRing\(F,2)q(\);;)p 3747 4983 V 75 5082 V 188 5053 a(gap>)g(vars:=IndeterminatesO)q(fPo)q (lyn)q(om)q(ial)q(Rin)q(g\(R)q(\);;)p 3747 5082 V 75 5182 V 188 5152 a(gap>)g(x:=vars[1];;)p 3747 5182 V 75 5282 V 188 5252 a(gap>)g(y:=vars[2];;)p 3747 5282 V 75 5381 V 188 5351 a(gap>)g(crv:=AffineCurve\(y\210q+)q(y-x)q(\210\(q)q (+1)q(\),R)q(\);)p 3747 5381 V 75 5481 V 188 5451 a(rec\()g(ring)f(:=)g (PolynomialRing\(...,)49 b([)43 b(x_1,)h(x_2)f(]\),)g(polynomial)j(:=)d (x_1\2105+x_2\2104+x_2)48 b(\))p 3747 5481 V 75 5581 V 188 5551 a(gap>)c(L:=[)f(x\2100,)h(x,)f(x\2102*y\210-1)i(];)p 3747 5581 V Black Black eop end end %%Page: 97 97 TeXDict begin HPSdict begin 97 96 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.97) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(97)p Black 75 428 4 100 v 188 399 a FF([)43 b(Z\(2\)\2100,)h(x_1,)g(x_1\2102/x_2)h(])p 3747 428 V 75 528 V 188 498 a(gap>)f(Pts:=AffinePointsOnCu)q(rve)q(\(cr)q(v.)q (pol)q(yno)q(mia)q(l,c)q(rv.)q(rin)q(g,F)q(\);;)p 3747 528 V 75 628 V 188 598 a(gap>)g(C1:=EvaluationBivaria)q(teC)q(ode)q (\(P)q(ts,)q(L,c)q(rv\))q(;)k(time;)p 3747 628 V 75 727 V 3747 727 V 75 827 V 3747 827 V 75 927 V 230 897 a(Automatically)f (removed)e(the)e(following)j('bad')e(points)g(\(either)h(a)d(pole)i(or) f(not)p 3747 927 V 75 1026 V 230 996 a(on)g(the)h(curve\):)p 3747 1026 V 75 1126 V 188 1096 a([)f([)f(0*Z\(2\),)j(0*Z\(2\))f(])f(])p 3747 1126 V 75 1225 V 3747 1225 V 75 1325 V 188 1295 a(a)g(linear)h([63,3,1..60]51..59)91 b(evaluation)46 b(code)d(over)h(GF\(16\))p 3747 1325 V 75 1425 V 188 1395 a(52)p 3747 1425 V 75 1524 V 188 1494 a(gap>)g (P:=Difference\(Pts,[[)49 b(0*Z\(2\2104\)\2100,)d(0*Z\(2\)\2100)f (]]\);;)p 3747 1524 V 75 1624 V 188 1594 a(gap>)f (C2:=EvaluationBivaria)q(teC)q(ode)q(NC)q(\(P,)q(L,c)q(rv\))q(;)k (time;)p 3747 1624 V 75 1724 V 188 1694 a(a)43 b(linear)h ([63,3,1..60]51..59)91 b(evaluation)46 b(code)d(over)h(GF\(16\))p 3747 1724 V 75 1823 V 188 1793 a(48)p 3747 1823 V 75 1923 V 188 1893 a(gap>)g(C3:=EvaluationCode\(P,)q(L,R)q(\);)49 b(time;)p 3747 1923 V 75 2022 V 188 1993 a(a)43 b(linear)h ([63,3,1..56]51..59)91 b(evaluation)46 b(code)d(over)h(GF\(16\))p 3747 2022 V 75 2122 V 188 2092 a(58)p 3747 2122 V 75 2222 V 188 2192 a(gap>)g(MinimumDistance\(C1\);)p 3747 2222 V 75 2321 V 188 2291 a(56)p 3747 2321 V 75 2421 V 188 2391 a(gap>)g(MinimumDistance\(C2\);)p 3747 2421 V 75 2521 V 188 2491 a(56)p 3747 2521 V 75 2620 V 188 2590 a(gap>)g(MinimumDistance\(C3\);)p 3747 2620 V 75 2720 V 188 2690 a(56)p 3747 2720 V 75 2819 V 188 2790 a(gap>)p 3747 2819 V 75 2844 4 25 v 3747 2844 V 75 2847 3675 4 v 75 2979 a SDict begin H.S end 75 2979 a 75 2979 a SDict begin 13.6 H.A end 75 2979 a 75 2979 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.7.25) cvn H.B /DEST pdfmark end 75 2979 a 116 x FJ(5.7.25)p 0.0 0.0 1.0 TeXcolorrgb 99 w(OneP)n(ointA)-5 b(GCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3269 a Fs(\006)22 b Ft(OnePointAGCode\()52 b(f,)47 b(P,)g(m,)g(R)g(\))2028 b Fr(\(function\))p Black 216 3495 a FK(Input:)30 b Ft(f)21 b FK(is)g(a)g(polynomial)j(in)e (R=F[x,y],)f(where)h Ft(F)f FK(is)g(a)h(\002nite)f(\002eld,)h Ft(m)f FK(is)g(a)g(positi)n(v)o(e)i(inte)o(ger)g(\(the)f(multiplic-)75 3608 y(ity)i(of)f(the)h(`point)h(at)e(in\002nity')i Fu(\245)e FK(on)g(the)h(curv)o(e)38 b Fq(f)13 b Fo(\()p Fq(x)p Fp(;)d Fq(y)p Fo(\))22 b(=)e FK(0\),)j Ft(P)h FK(is)f(a)g(list)h(of)f Fq(n)h FK(points)h(on)e(the)h(curv)o(e)g(o)o(v)o(er)g Fq(F)7 b FK(.)75 3721 y(Output:)30 b(The)18 b Fq(C)25 b FK(which)f(is)f(the)h(image)g(of)f(the)h(e)n(v)n(aluation)i(map)1491 3915 y Fq(E)7 b(val)1664 3929 y Fm(P)1729 3915 y FK(:)21 b Fq(L)p Fo(\()p Fq(m)13 b Fv(\001)g Fu(\245)p Fo(\))19 b Fv(!)h Fq(F)2271 3878 y Fm(n)2309 3915 y Fp(;)75 4110 y FK(gi)n(v)o(en)27 b(by)42 b Fq(f)35 b Fv(7\000)-16 b(!)22 b Fo(\()14 b Fq(f)f Fo(\()7 b Fq(p)833 4124 y Fr(1)872 4110 y Fo(\))p Fp(;)j(:::;)24 b Fq(f)13 b Fo(\()7 b Fq(p)1191 4124 y Fm(n)1230 4110 y Fo(\)\))p FK(,)27 b(where)35 b Fq(p)1651 4124 y Fm(i)1696 4110 y Fv(2)21 b Fq(P)p FK(.)38 b(Here)27 b Fq(L)p Fo(\()p Fq(m)14 b Fv(\001)g Fu(\245)p Fo(\))26 b FK(denotes)i(the)g(Riemann-Roch)g(space) g(of)75 4223 y(the)e(di)n(visor)h Fq(m)13 b Fv(\001)g Fu(\245)26 b FK(on)g(the)g(curv)o(e.)37 b(This)25 b(has)i(a)e(basis)i (consisting)i(of)c(monomials)j Fq(x)2774 4190 y Fm(i)2797 4223 y Fq(y)2847 4190 y Fm(j)2871 4223 y FK(,)e(where)g Fo(\()p Fq(i)p Fp(;)e Fq(j)r Fo(\))i FK(range)h(o)o(v)o(er)75 4336 y(a)i(polygon)i(depending)h(on)d Fq(m)f FK(and)43 b Fq(f)13 b Fo(\()p Fq(x)p Fp(;)d Fq(y)p Fo(\))p FK(.)47 b(F)o(or)28 b(more)h(details)h(on)f(the)h(Riemann-Roch)g(space)g(of)f (the)h(di)n(visor)75 4449 y Fq(m)13 b Fv(\001)g Fu(\245)22 b FK(see)h(Proposition)j(III.10.5)f(in)e(Stichtenoth)j([)p 0.0236 0.6179 0.0894 TeXcolorrgb 1715 4451 a SDict begin H.S end 1715 4451 a 0.0236 0.6179 0.0894 TeXcolorrgb -2 x FK(Sti93)p 0.0236 0.6179 0.0894 TeXcolorrgb 1906 4387 a SDict begin H.R end 1906 4387 a 1906 4449 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.St93) cvn H.B /ANN pdfmark end 1906 4449 a Black 1 w FK(].)216 4561 y(This)84 b(command)h(returns)h(a)e (\224record\224)i(object)g Ft(C)d FK(with)h(se)n(v)o(eral)i(e)o(xtra)e (components)j(\(type)75 4674 y Ft(NamesOfComponents\()q(C\))50 b FK(to)44 b(see)h(them)g(all\):)71 b Ft(C!.points)47 b FK(\(namely)f Ft(P)p FK(\),)j Ft(C!.multiplicity)g FK(\(namely)75 4787 y Ft(m)p FK(\),)23 b Ft(C!.curve)j FK(\(namely)e Ft(f)q FK(\))f(and)h Ft(C!.ring)h FK(\(namely)g Ft(R)p FK(\).)p 75 4900 1648 4 v 1764 4905 a FF(Example)p 2102 4900 V 75 4925 4 25 v 3747 4925 V 75 5024 4 100 v 188 4995 a(gap>)44 b(F:=GF\(11\);)p 3747 5024 V 75 5124 V 188 5094 a(GF\(11\))p 3747 5124 V 75 5224 V 188 5194 a(gap>)g(R)e(:=)h(PolynomialRing\(F,[")q(x",)q("y)q("]\))q(;)p 3747 5224 V 75 5323 V 188 5293 a(PolynomialRing\(...,)49 b([)42 b(x,)h(y)g(]\))p 3747 5323 V 75 5423 V 188 5393 a(gap>)h(indets)g(:=)f(IndeterminatesOfPol)q(yno)q(mia)q(lRi)q(ng\()q (R\);)p 3747 5423 V 75 5523 V 188 5493 a([)g(x,)g(y)f(])p 3747 5523 V 75 5622 V 188 5592 a(gap>)i(x:=indets[1];)i(y:=indets[2];)p 3747 5622 V Black Black eop end end %%Page: 98 98 TeXDict begin HPSdict begin 98 97 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.98) cvn H.B /DEST pdfmark end 75 100 a Black 1685 w FE(GU)n(A)l(V)-5 b(A)1700 b FK(98)p Black 75 428 4 100 v 188 399 a FF(x)p 3747 428 V 75 528 V 188 498 a(y)p 3747 528 V 75 628 V 188 598 a(gap>)44 b(P:=AffinePointsOnCurv)q(e\(y)q(\2102-)q(x\210)q (11+)q(x,R)q(,F\))q(;;)p 3747 628 V 75 727 V 188 697 a(gap>)g(C:=OnePointAGCode\(y\2102)q(-x\210)q(11+)q(x,)q(P,1)q(5,R)q (\);)p 3747 727 V 75 827 V 188 797 a(a)f(linear)h([11,8,1..0]2..3)90 b(one-point)45 b(AG)e(code)h(over)g(GF\(11\))p 3747 827 V 75 927 V 188 897 a(gap>)g(MinimumDistance\(C\);)p 3747 927 V 75 1026 V 188 996 a(4)p 3747 1026 V 75 1126 V 188 1096 a(gap>)g(Pts:=List\([1,2,4,6,7,)q(8,9)q(,10)q(,1)q(1],)q(i->)q (P[i)q(]\);)q(;)p 3747 1126 V 75 1225 V 188 1196 a(gap>)g (C:=OnePointAGCode\(y\2102)q(-x\210)q(11+)q(x,)q(PT,)q(10,)q(R\);)p 3747 1225 V 75 1325 V 188 1295 a(a)f(linear)h([9,6,1..4]2..3)j (one-point)f(AG)d(code)g(over)h(GF\(11\))p 3747 1325 V 75 1425 V 188 1395 a(gap>)g(MinimumDistance\(C\);)p 3747 1425 V 75 1524 V 188 1494 a(4)p 3747 1524 V 75 1549 4 25 v 3747 1549 V 75 1552 3675 4 v 75 1765 a FK(See)23 b Ft(EvaluationCode)28 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 931 1766 a SDict begin H.S end 931 1766 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.6.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 1112 1703 a SDict begin H.R end 1112 1703 a 1112 1765 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.6.1) cvn H.B /ANN pdfmark end 1112 1765 a Black FK(\))c(for)g(a)f(more)g(general)j(construction.)p Black Black eop end end %%Page: 99 99 TeXDict begin HPSdict begin 99 98 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.99) cvn H.B /DEST pdfmark end 75 100 a Black Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (chapter.6) cvn H.B /DEST pdfmark end 75 307 a 714 x Fw(Chapter)44 b(6)p 0.0 0.0 1.0 TeXcolorrgb 75 1436 a FA(Manipulating)53 b(Codes)p Black 75 1881 a FK(In)20 b(this)h(chapter)h(we)e(describe)i(se)n(v)o(eral)g(functions)g Fy(GU)m(A)-6 b(V)f(A)19 b FK(uses)i(to)f(manipulate)j(codes.)29 b(Some)19 b(of)h(the)h(best)g(codes)75 1994 y(are)j(obtained)i(by)d (starting)j(with)d(for)h(e)o(xample)g(a)f(BCH)f(code,)i(and)g (manipulating)i(it.)216 2107 y(In)d(some)g(cases,)h(it)e(is)h(f)o (aster)h(to)f(perform)h(calculations)j(with)22 b(a)h(manipulated)i (code)f(than)g(to)f(use)g(the)g(original)75 2220 y(code.)50 b(F)o(or)30 b(e)o(xample,)j(if)d(the)h(dimension)h(of)f(the)f(code)i (is)e(lar)n(ger)i(than)f(half)g(the)g(w)o(ord)g(length,)i(it)d(is)h (generally)75 2333 y(f)o(aster)d(to)f(compute)h(the)f(weight)h(distrib) n(ution)j(by)c(\002rst)f(calculating)k(the)d(weight)h(distrib)n(ution)j (of)26 b(the)i(dual)f(code)75 2446 y(than)g(by)g(directly)i (calculating)h(the)d(weight)g(distrib)n(ution)k(of)26 b(the)h(original)i(code.)39 b(The)26 b(size)i(of)e(the)h(dual)h(code)f (is)75 2559 y(smaller)d(in)g(these)g(cases.)216 2672 y(Because)35 b Fy(GU)m(A)-6 b(V)f(A)31 b FK(k)o(eeps)j(all)g (information)i(in)d(a)g(code)h(record,)i(in)e(some)f(cases)h(the)g (information)i(can)d(be)75 2785 y(preserv)o(ed)26 b(after)e (manipulations.)32 b(Therefore,)25 b(computations)i(do)c(not)h(al)o(w)o (ays)g(ha)n(v)o(e)h(to)e(start)h(from)g(scratch.)216 2897 y(In)47 b(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 657 2898 a SDict begin H.S end 657 2898 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 770 2835 a SDict begin H.R end 770 2835 a 770 2897 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.6.1) cvn H.B /ANN pdfmark end 770 2897 a Black FK(,)53 b(we)46 b(describe)j(functions)h(that)d(tak)o(e)h(a)f(code)g(with)g(certain)i (parameters,)55 b(modify)47 b(it)75 3010 y(in)g(some)f(w)o(ay)h(and)g (return)g(a)g(dif)n(ferent)h(code)f(\(see)h Ft(ExtendedCode)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2550 3011 a SDict begin H.S end 2550 3011 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 2731 2948 a SDict begin H.R end 2731 2948 a 2731 3010 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.1) cvn H.B /ANN pdfmark end 2731 3010 a Black FK(\),)i Ft(PuncturedCode)f FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3515 3011 a SDict begin H.S end 3515 3011 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 3696 2948 a SDict begin H.R end 3696 2948 a 3696 3010 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.2) cvn H.B /ANN pdfmark end 3696 3010 a Black FK(\),)75 3123 y Ft(EvenWeightSubcode)g FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 938 3124 a SDict begin H.S end 938 3124 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 1119 3061 a SDict begin H.R end 1119 3061 a 1119 3123 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.3) cvn H.B /ANN pdfmark end 1119 3123 a Black FK(\),)g Ft(PermutedCode)e FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1854 3124 a SDict begin H.S end 1854 3124 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 2035 3061 a SDict begin H.R end 2035 3061 a 2035 3123 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.4) cvn H.B /ANN pdfmark end 2035 3123 a Black FK(\),)i Ft(ExpurgatedCode)e FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2862 3124 a SDict begin H.S end 2862 3124 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.5)p 0.0236 0.0894 0.6179 TeXcolorrgb 3043 3061 a SDict begin H.R end 3043 3061 a 3043 3123 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.5) cvn H.B /ANN pdfmark end 3043 3123 a Black FK(\),)i Ft(AugmentedCode)75 3236 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 3237 a SDict begin H.S end 105 3237 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.6)p 0.0236 0.0894 0.6179 TeXcolorrgb 286 3174 a SDict begin H.R end 286 3174 a 286 3236 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.6) cvn H.B /ANN pdfmark end 286 3236 a Black FK(\),)62 b Ft(RemovedElementsCod)q(e)d FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1365 3237 a SDict begin H.S end 1365 3237 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.7)p 0.0236 0.0894 0.6179 TeXcolorrgb 1546 3174 a SDict begin H.R end 1546 3174 a 1546 3236 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.7) cvn H.B /ANN pdfmark end 1546 3236 a Black FK(\),)j Ft(AddedElementsCode)e FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2533 3237 a SDict begin H.S end 2533 3237 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.8)p 0.0236 0.0894 0.6179 TeXcolorrgb 2714 3174 a SDict begin H.R end 2714 3174 a 2714 3236 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.8) cvn H.B /ANN pdfmark end 2714 3236 a Black FK(\),)i Ft(ShortenedCode)c FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3515 3238 a SDict begin H.S end 3515 3238 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(6.1.9)p 0.0236 0.0894 0.6179 TeXcolorrgb 3696 3174 a SDict begin H.R end 3696 3174 a 3696 3236 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.9) cvn H.B /ANN pdfmark end 3696 3236 a Black FK(\),)75 3349 y Ft(LengthenedCode)71 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 820 3350 a SDict begin H.S end 820 3350 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.10)p 0.0236 0.0894 0.6179 TeXcolorrgb 1046 3287 a SDict begin H.R end 1046 3287 a 1046 3349 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.10) cvn H.B /ANN pdfmark end 1046 3349 a Black FK(\),)77 b Ft(ResidueCode)70 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1782 3350 a SDict begin H.S end 1782 3350 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.11)p 0.0236 0.0894 0.6179 TeXcolorrgb 2008 3287 a SDict begin H.R end 2008 3287 a 2008 3349 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.11) cvn H.B /ANN pdfmark end 2008 3349 a Black FK(\),)78 b Ft(ConstructionBCode)71 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3022 3350 a SDict begin H.S end 3022 3350 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.12)p 0.0236 0.0894 0.6179 TeXcolorrgb 3248 3287 a SDict begin H.R end 3248 3287 a 3248 3349 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.12) cvn H.B /ANN pdfmark end 3248 3349 a Black FK(\),)78 b Ft(DualCode)75 3462 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 3463 a SDict begin H.S end 105 3463 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.13)p 0.0236 0.0894 0.6179 TeXcolorrgb 331 3400 a SDict begin H.R end 331 3400 a 331 3462 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.13) cvn H.B /ANN pdfmark end 331 3462 a Black FK(\),)32 b Ft(ConversionFieldCode)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1355 3463 a SDict begin H.S end 1355 3463 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.14)p 0.0236 0.0894 0.6179 TeXcolorrgb 1581 3400 a SDict begin H.R end 1581 3400 a 1581 3462 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.14) cvn H.B /ANN pdfmark end 1581 3462 a Black FK(\),)c Ft(ConstantWeightSub)q(cod)q (e)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2698 3463 a SDict begin H.S end 2698 3463 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.17)p 0.0236 0.0894 0.6179 TeXcolorrgb 2924 3400 a SDict begin H.R end 2924 3400 a 2924 3462 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.17) cvn H.B /ANN pdfmark end 2924 3462 a Black FK(\),)c Ft(StandardFormCode)75 3575 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 3576 a SDict begin H.S end 105 3576 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.18)p 0.0236 0.0894 0.6179 TeXcolorrgb 331 3513 a SDict begin H.R end 331 3513 a 331 3575 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.18) cvn H.B /ANN pdfmark end 331 3575 a Black FK(\))46 b(and)g Ft(CosetCode)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1075 3576 a SDict begin H.S end 1075 3576 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.16)p 0.0236 0.0894 0.6179 TeXcolorrgb 1301 3513 a SDict begin H.R end 1301 3513 a 1301 3575 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.16) cvn H.B /ANN pdfmark end 1301 3575 a Black FK(\)\).)95 b(In)45 b(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 1916 3576 a SDict begin H.S end 1916 3576 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 2029 3513 a SDict begin H.R end 2029 3513 a 2029 3575 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.6.2) cvn H.B /ANN pdfmark end 2029 3575 a Black FK(,)50 b(we)45 b(describe)i(functions)h(that)e(generate)h (a)e(ne)n(w)75 3688 y(code)30 b(out)f(of)g(tw)o(o)f(codes)j(\(see)e Ft(DirectSumCode)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1757 3689 a SDict begin H.S end 1757 3689 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.2.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 1938 3626 a SDict begin H.R end 1938 3626 a 1938 3688 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.2.1) cvn H.B /ANN pdfmark end 1938 3688 a Black FK(\),)d Ft(UUVCode)h FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2404 3689 a SDict begin H.S end 2404 3689 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.2.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 2585 3626 a SDict begin H.R end 2585 3626 a 2585 3688 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.2.2) cvn H.B /ANN pdfmark end 2585 3688 a Black FK(\),)g Ft(DirectProductCode)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3515 3689 a SDict begin H.S end 3515 3689 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.2.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 3696 3626 a SDict begin H.R end 3696 3626 a 3696 3688 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.2.3) cvn H.B /ANN pdfmark end 3696 3688 a Black FK(\),)75 3801 y Ft(IntersectionCode)29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 870 3802 a SDict begin H.S end 870 3802 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.2.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 1051 3739 a SDict begin H.R end 1051 3739 a 1051 3801 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.2.4) cvn H.B /ANN pdfmark end 1051 3801 a Black FK(\))24 b(and)g Ft(UnionCode)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1729 3802 a SDict begin H.S end 1729 3802 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.2.5)p 0.0236 0.0894 0.6179 TeXcolorrgb 1910 3739 a SDict begin H.R end 1910 3739 a 1910 3801 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.2.5) cvn H.B /ANN pdfmark end 1910 3801 a Black FK(\)\).)75 3960 y SDict begin H.S end 75 3960 a 75 3960 a SDict begin 13.6 H.A end 75 3960 a 75 3960 a SDict begin [ /View [/XYZ H.V] /Dest (section.6.1) cvn H.B /DEST pdfmark end 75 3960 a 133 x FM(6.1)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Functions)31 b(that)e(Generate)i(a)e(New)i(Code)g(fr)n(om)e(a)g(Gi)o (v)o(en)h(Code)p Black 75 4190 a SDict begin H.S end 75 4190 a 75 4190 a SDict begin 13.6 H.A end 75 4190 a 75 4190 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.1) cvn H.B /DEST pdfmark end 75 4190 a 114 x FJ(6.1.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(ExtendedCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4478 a Fs(\006)22 b Ft(ExtendedCode\()51 b(C[,)d(i])f(\))2306 b Fr(\(function\))p Black 216 4704 a Ft(ExtendedCode)31 b FK(e)o(xtends)d(the)f(code)h Ft(C)e(i)g FK(times)i(and)f(returns)h (the)f(result.)40 b Ft(i)27 b FK(is)f(equal)i(to)f(1)f(by)h(def)o (ault.)41 b(Ex-)75 4817 y(tending)22 b(is)e(done)h(by)g(adding)h(a)d (parity)j(check)f(bit)g(after)g(the)f(last)h(coordinate.)31 b(The)19 b(coordinates)24 b(of)c(all)g(code)n(w)o(ords)75 4930 y(no)n(w)j(add)h(up)g(to)f(zero.)29 b(In)24 b(the)g(binary)h (case,)f(each)g(code)n(w)o(ord)h(has)f(e)n(v)o(en)g(weight.)216 5043 y(The)k(w)o(ord)g(length)i(increases)h(by)d Ft(i)q FK(.)42 b(The)28 b(size)h(of)f(the)h(code)g(remains)g(the)g(same.)43 b(In)29 b(the)f(binary)i(case,)g(the)75 5155 y(minimum)23 b(distance)j(increases)g(by)e(one)g(if)f(it)g(w)o(as)g(odd.)30 b(In)23 b(other)i(cases,)f(that)g(is)f(not)h(al)o(w)o(ays)h(true.)216 5268 y(A)e(c)o(yclic)h(code)g(in)g(general)h(is)e(no)h(longer)h(c)o (yclic)f(after)h(e)o(xtending.)p 75 5391 1648 4 v 1764 5396 a FF(Example)p 2102 5391 V 75 5416 4 25 v 3747 5416 V 75 5515 4 100 v 188 5486 a(gap>)44 b(C1)f(:=)g(HammingCode\()j(3,)d (GF\(2\))h(\);)p 3747 5515 V 75 5615 V 188 5585 a(a)f(linear)h ([7,4,3]1)h(Hamming)g(\(3,2\))f(code)g(over)f(GF\(2\))p 3747 5615 V Black 1867 5841 a FK(99)p Black eop end end %%Page: 100 100 TeXDict begin HPSdict begin 100 99 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.100) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(100)p Black 75 428 4 100 v 188 399 a FF(gap>)44 b(C2)f(:=)g(ExtendedCode\()j(C1)d(\);)p 3747 428 V 75 528 V 188 498 a(a)g(linear)h([8,4,4]2)h(extended)g(code)p 3747 528 V 75 628 V 188 598 a(gap>)f(IsEquivalent\()i(C2,)e (ReedMullerCode\()j(1,)c(3)g(\))g(\);)p 3747 628 V 75 727 V 188 697 a(true)p 3747 727 V 75 827 V 188 797 a(gap>)h(List\()g (AsSSortedList\()j(C2)c(\),)g(WeightCodeword)k(\);)p 3747 827 V 75 927 V 188 897 a([)c(0,)g(4,)g(4,)g(4,)g(4,)g(4,)g(4,)g (4,)g(4,)g(4,)g(4,)g(4,)g(4,)g(4,)g(4,)g(8)g(])p 3747 927 V 75 1026 V 188 996 a(gap>)h(C3)f(:=)g(EvenWeightSubcode\()48 b(C1)43 b(\);)p 3747 1026 V 75 1126 V 188 1096 a(a)g(linear)h ([7,3,4]2..3)i(even)e(weight)g(subcode)p 3747 1126 V 75 1151 4 25 v 3747 1151 V 75 1154 3675 4 v 75 1361 a FK(T)-7 b(o)75 b(undo)h(e)o(xtending,)91 b(call)76 b Ft(PuncturedCode)k FK(\(see)c Ft(PuncturedCode)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2781 1362 a SDict begin H.S end 2781 1362 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 2962 1299 a SDict begin H.R end 2962 1299 a 2962 1361 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.2) cvn H.B /ANN pdfmark end 2962 1361 a Black FK(\)\).)186 b(The)75 b(function)75 1474 y Ft(EvenWeightSubcode)36 b FK(\(see)c Ft(EvenWeightSubcode)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1918 1475 a SDict begin H.S end 1918 1475 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 2099 1412 a SDict begin H.R end 2099 1412 a 2099 1474 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.3) cvn H.B /ANN pdfmark end 2099 1474 a Black FK(\)\))31 b(also)h(returns)g(a)f (related)h(code)g(with)e(only)i(e)n(v)o(en)75 1587 y(weights,)24 b(b)n(ut)g(without)h(changing)h(its)e(w)o(ord)f(length.)75 1738 y SDict begin H.S end 75 1738 a 75 1738 a SDict begin 13.6 H.A end 75 1738 a 75 1738 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.2) cvn H.B /DEST pdfmark end 75 1738 a 97 x FJ(6.1.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Punctur)n(edCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2009 a Fs(\006)f Ft(PuncturedCode\()52 b(C)47 b(\))2491 b Fr(\(function\))p Black 216 2235 a Ft(PuncturedCode)28 b FK(punctures)e Ft(C)d FK(in)g(the)h(last)g (column,)h(and)f(returns)h(the)f(result.)30 b(Puncturing)c(is)d(done)h (simply)75 2348 y(by)30 b(cutting)i(of)n(f)e(the)g(last)g(column)h (from)f(each)h(code)n(w)o(ord.)49 b(This)30 b(means)h(the)f(w)o(ord)g (length)h(decreases)i(by)d(one.)75 2461 y(The)23 b(minimum)g(distance)j (in)e(general)h(also)f(decrease)i(by)d(one.)216 2574 y(This)46 b(command)h(can)g(also)g(be)f(called)i(with)e(the)g(syntax)i Ft(PuncturedCode\()j(C,)d(L)e(\))p FK(.)g(In)g(this)h(case,)75 2686 y Ft(PuncturedCode)38 b FK(punctures)e Ft(C)d FK(in)h(the)g (columns)h(speci\002ed)g(by)f Ft(L)p FK(,)h(a)e(list)h(of)g(inte)o (gers.)61 b(All)33 b(columns)i(speci-)75 2799 y(\002ed)21 b(by)h Ft(L)g FK(are)g(omitted)h(from)f(each)g(code)n(w)o(ord.)30 b(If)21 b Fq(l)26 b FK(is)c(the)g(length)h(of)f Ft(L)g FK(\(so)g(the)g(number)h(of)e(remo)o(v)o(ed)i(columns\),)75 2912 y(the)h(w)o(ord)f(length)i(decreases)h(by)e Fq(l)5 b FK(.)28 b(The)23 b(minimum)g(distance)j(can)e(also)g(decrease)i(by)d Fq(l)28 b FK(or)23 b(less.)216 3025 y(Puncturing)32 b(a)e(c)o(yclic)h (code)g(in)f(general)h(results)h(in)e(a)f(non-c)o(yclic)k(code.)49 b(If)30 b(the)g(code)h(is)e(punctured)k(in)d(all)75 3138 y(the)c(columns)g(where)g(a)e(w)o(ord)i(of)f(minimal)h(weight)g(is)f (unequal)i(to)e(zero,)h(the)g(dimension)h(of)e(the)h(resulting)h(code) 75 3251 y(decreases.)p 75 3349 1648 4 v 1764 3354 a FF(Example)p 2102 3349 V 75 3374 4 25 v 3747 3374 V 75 3474 4 100 v 188 3444 a(gap>)44 b(C1)f(:=)g(BCHCode\()i(15,)e(5,)g(GF\(2\))h(\);)p 3747 3474 V 75 3573 V 188 3543 a(a)f(cyclic)h([15,7,5]3..5)i(BCH)e (code,)g(delta=5,)h(b=1)e(over)h(GF\(2\))p 3747 3573 V 75 3673 V 188 3643 a(gap>)g(C2)f(:=)g(PuncturedCode\()k(C1)c(\);)p 3747 3673 V 75 3773 V 188 3743 a(a)g(linear)h([14,7,4]3..5)i(punctured) g(code)p 3747 3773 V 75 3872 V 188 3842 a(gap>)e(ExtendedCode\()i(C2)d (\))g(=)g(C1;)p 3747 3872 V 75 3972 V 188 3942 a(false)p 3747 3972 V 75 4071 V 188 4042 a(gap>)h(PuncturedCode\()j(C1,)c ([1,2,3,4,5,6,7])48 b(\);)p 3747 4071 V 75 4171 V 188 4141 a(a)43 b(linear)h([8,7,1]1)h(punctured)g(code)p 3747 4171 V 75 4271 V 188 4241 a(gap>)f(PuncturedCode\()j (WholeSpaceCode\()g(4,)c(GF\(5\))h(\))f(\);)p 3747 4271 V 75 4370 V 188 4340 a(a)g(linear)h([3,3,1]0)h(punctured)g(code)87 b(#)42 b(The)i(dimension)h(decreased)g(from)f(4)f(to)g(3)p 3747 4370 V 75 4395 4 25 v 3747 4395 V 75 4398 3675 4 v 75 4605 a Ft(ExtendedCode)27 b FK(e)o(xtends)e(the)f(code)g(again)g (\(see)g Ft(ExtendedCode)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2278 4606 a SDict begin H.S end 2278 4606 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 2459 4543 a SDict begin H.R end 2459 4543 a 2459 4605 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.1) cvn H.B /ANN pdfmark end 2459 4605 a Black FK(\)\),)d(although)i(in)d(general)j(this)e(does)g(not)75 4718 y(result)h(in)e(the)h(old)g(code.)75 4851 y SDict begin H.S end 75 4851 a 75 4851 a SDict begin 13.6 H.A end 75 4851 a 75 4851 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.3) cvn H.B /DEST pdfmark end 75 4851 a 115 x FJ(6.1.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Ev)o(enW)-6 b(eightSubcode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5141 a Fs(\006)22 b Ft(EvenWeightSubcode)q(\()52 b(C)47 b(\))2306 b Fr(\(function\))p Black 216 5367 a Ft(EvenWeightSubcode)29 b FK(returns)c(the)e(e)n(v)o (en)h(weight)g(subcode)h(of)e Ft(C)p FK(,)g(consisting)j(of)d(all)g (code)n(w)o(ords)i(of)f Ft(C)e FK(with)75 5479 y(e)n(v)o(en)e(weight.) 28 b(If)20 b Ft(C)f FK(is)h(a)f(linear)j(code)e(and)h(contains)h(w)o (ords)e(of)g(odd)g(weight,)h(the)f(resulting)j(code)d(has)h(a)e (dimension)75 5592 y(of)29 b(one)h(less.)47 b(The)29 b(minimum)g(distance)j(al)o(w)o(ays)e(increases)i(with)d(one)h(if)f(it) g(w)o(as)g(odd.)47 b(If)29 b Ft(C)g FK(is)g(a)g(binary)i(c)o(yclic)p Black Black eop end end %%Page: 101 101 TeXDict begin HPSdict begin 101 100 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.101) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(101)p Black 75 399 a(code,)27 b(and)g Fq(g)p Fo(\()p Fq(x)p Fo(\))g FK(is)f(its)g(generator)j(polynomial,)g(the)d(e) n(v)o(en)g(weight)h(subcode)h(either)g(has)e(generator)j(polynomial)75 511 y Fq(g)p Fo(\()p Fq(x)p Fo(\))24 b FK(\(if)g Fq(g)p Fo(\()p Fq(x)p Fo(\))g FK(is)g(di)n(visible)h(by)f Fq(x)13 b Fv(\000)g FK(1\))23 b(or)g Fq(g)p Fo(\()p Fq(x)p Fo(\))13 b Fv(\001)g Fo(\()p Fq(x)g Fv(\000)g FK(1)p Fo(\))25 b FK(\(if)e(no)h(f)o(actor)h Fq(x)13 b Fv(\000)g FK(1)23 b(w)o(as)g(present)i(in)f Fq(g)p Fo(\()p Fq(x)p Fo(\))p FK(\).)29 b(So)23 b(the)h(e)n(v)o(en)75 624 y(weight)g(subcode)i(is)d (again)h(c)o(yclic.)216 737 y(Of)f(course,)h(if)g(all)f(code)n(w)o (ords)j(of)d Ft(C)g FK(are)h(already)h(of)f(e)n(v)o(en)f(weight,)h(the) g(returned)i(code)e(is)g(equal)g(to)g Ft(C)p FK(.)p 75 860 1648 4 v 1764 865 a FF(Example)p 2102 860 V 75 885 4 25 v 3747 885 V 75 984 4 100 v 188 955 a(gap>)44 b(C1)f(:=)g (EvenWeightSubcode\()48 b(BCHCode\()d(8,)e(4,)g(GF\(3\))h(\))f(\);)p 3747 984 V 75 1084 V 188 1054 a(an)g(\(8,33,4..8\)3..8)k(even)d(weight) g(subcode)p 3747 1084 V 75 1184 V 188 1154 a(gap>)g(List\()g (AsSSortedList\()j(C1)c(\),)g(WeightCodeword)k(\);)p 3747 1184 V 75 1283 V 188 1253 a([)c(0,)g(4,)g(4,)g(4,)g(4,)g(4,)g(4,)g (6,)g(4,)g(4,)g(4,)g(4,)g(6,)g(4,)g(4,)g(6,)g(4,)g(4,)g(8,)g(6,)g(4,)g (6,)g(8,)g(4,)g(4,)p 3747 1283 V 75 1383 V 273 1353 a(4,)g(6,)g(4,)g (6,)g(8,)g(4,)g(6,)g(8)f(])p 3747 1383 V 75 1483 V 188 1453 a(gap>)i(EvenWeightSubcode\()k(ReedMullerCode\()g(1,)43 b(3)f(\))h(\);)p 3747 1483 V 75 1582 V 188 1552 a(a)g(linear)h ([8,4,4]2)h(Reed-Muller)h(\(1,3\))e(code)g(over)g(GF\(2\))p 3747 1582 V 75 1607 4 25 v 3747 1607 V 75 1610 3675 4 v 75 1823 a Ft(ExtendedCode)31 b FK(also)d(returns)h(a)e(related)i (code)g(of)e(only)h(e)n(v)o(en)g(weights,)h(b)n(ut)f(without)h (reducing)h(its)d(dimension)75 1936 y(\(see)d Ft(ExtendedCode)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 853 1937 a SDict begin H.S end 853 1937 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 1034 1874 a SDict begin H.R end 1034 1874 a 1034 1936 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.1) cvn H.B /ANN pdfmark end 1034 1936 a Black FK(\)\).)75 2085 y SDict begin H.S end 75 2085 a 75 2085 a SDict begin 13.6 H.A end 75 2085 a 75 2085 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.4) cvn H.B /DEST pdfmark end 75 2085 a 100 x FJ(6.1.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(P)n(ermutedCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2359 a Fs(\006)22 b Ft(PermutedCode\()51 b(C,)d(L)e(\))2399 b Fr(\(function\))p Black 216 2585 a Ft(PermutedCode)38 b FK(returns)d Ft(C)f FK(after)h(column)g(permutations.)63 b Ft(L)34 b FK(\(in)g Fy(GAP)e FK(disjoint)k(c)o(ycle)f(notation\))h(is)e(the)75 2698 y(permutation)j(to)d(be)g(e)o(x)o(ecuted)i(on)e(the)g(columns)i (of)e Ft(C)p FK(.)60 b(If)34 b Ft(C)f FK(is)h(c)o(yclic,)k(the)c (result)i(in)e(general)i(is)d(no)i(longer)75 2811 y(c)o(yclic.)i(If)26 b(a)f(permutation)k(results)e(in)f(the)g(same)g(code)h(as)f Ft(C)p FK(,)g(this)g(permutation)j(belongs)f(to)d(the)i(automorphism)75 2924 y(group)i(of)e Ft(C)g FK(\(see)h Ft(AutomorphismGroup)33 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1507 2925 a SDict begin H.S end 1507 2925 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.4.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 1688 2862 a SDict begin H.R end 1688 2862 a 1688 2924 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.4.3) cvn H.B /ANN pdfmark end 1688 2924 a Black FK(\)\).)42 b(In)27 b(an)o(y)h(case,)h (the)f(returned)h(code)g(is)e(equi)n(v)n(alent)j(to)e Ft(C)f FK(\(see)75 3037 y Ft(IsEquivalent)g FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 684 3038 a SDict begin H.S end 684 3038 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.4.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 865 2975 a SDict begin H.R end 865 2975 a 865 3037 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.4.1) cvn H.B /ANN pdfmark end 865 3037 a Black FK(\)\).)p 75 3156 1648 4 v 1764 3161 a FF(Example)p 2102 3156 V 75 3181 4 25 v 3747 3181 V 75 3280 4 100 v 188 3250 a(gap>)44 b(C1)f(:=)g(PuncturedCode\()k(ReedMullerCode\()g(1,)c(4)g(\))g(\);)p 3747 3280 V 75 3380 V 188 3350 a(a)g(linear)h([15,5,7]5)h(punctured)h (code)p 3747 3380 V 75 3480 V 188 3450 a(gap>)e(C2)f(:=)g(BCHCode\()i (15,)e(7,)g(GF\(2\))h(\);)p 3747 3480 V 75 3579 V 188 3549 a(a)f(cyclic)h([15,5,7]5)h(BCH)f(code,)g(delta=7,)h(b=1)e(over)h (GF\(2\))p 3747 3579 V 75 3679 V 188 3649 a(gap>)g(C2)f(=)f(C1;)p 3747 3679 V 75 3778 V 188 3749 a(false)p 3747 3778 V 75 3878 V 188 3848 a(gap>)i(p)e(:=)h(CodeIsomorphism\()48 b(C1,)43 b(C2)h(\);)p 3747 3878 V 75 3978 V 188 3948 a(\()f(2,)g(4,14,)h(9,13,)g(7,11,10,)h(6,)e(8,12,)h(5\))p 3747 3978 V 75 4077 V 188 4047 a(gap>)g(C3)f(:=)g(PermutedCode\()j(C1,) e(p)e(\);)p 3747 4077 V 75 4177 V 188 4147 a(a)h(linear)h([15,5,7]5)h (permuted)g(code)p 3747 4177 V 75 4277 V 188 4247 a(gap>)f(C2)f(=)f (C3;)p 3747 4277 V 75 4376 V 188 4346 a(true)p 3747 4376 V 75 4401 4 25 v 3747 4401 V 75 4404 3675 4 v 75 4537 a SDict begin H.S end 75 4537 a 75 4537 a SDict begin 13.6 H.A end 75 4537 a 75 4537 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.5) cvn H.B /DEST pdfmark end 75 4537 a 117 x FJ(6.1.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Expur)o(gatedCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4828 a Fs(\006)22 b Ft(ExpurgatedCode\()52 b(C,)47 b(L)g(\))2306 b Fr(\(function\))p Black 216 5054 a Ft(ExpurgatedCode)25 b FK(e)o(xpur)n(gates)e(the)d (code)i Ft(C)p FK(\277)e(by)g(thro)n(wing)i(a)o(w)o(ay)e(code)n(w)o (ords)i(in)e(list)h Ft(L)q FK(.)26 b Ft(C)20 b FK(must)h(be)f(a)g (linear)75 5167 y(code.)39 b Ft(L)27 b FK(must)g(be)f(a)h(list)g(of)g (code)n(w)o(ord)h(input.)39 b(The)27 b(generator)i(matrix)e(of)g(the)g (ne)n(w)f(code)i(no)f(longer)h(is)f(a)f(basis)75 5280 y(for)g(the)h(code)n(w)o(ords)h(speci\002ed)f(by)g Ft(L)p FK(.)36 b(Since)26 b(the)h(returned)h(code)f(is)f(still)h(linear)l(,)h (it)e(is)g(v)o(ery)h(lik)o(ely)g(that,)g(besides)75 5392 y(the)d(w)o(ords)g(of)f Ft(L)q FK(,)f(more)i(code)n(w)o(ords)h(of)e Ft(C)h FK(are)f(no)h(longer)h(in)e(the)h(ne)n(w)f(code.)p Black Black eop end end %%Page: 102 102 TeXDict begin HPSdict begin 102 101 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.102) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(102)p Black 75 399 1648 4 v 1764 404 a FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188 493 a(gap>)44 b(C1)f(:=)g(HammingCode\()j(4)d(\);;)g (WeightDistribution\()49 b(C1)43 b(\);)p 3747 523 V 75 623 V 188 593 a([)g(1,)g(0,)g(0,)g(35,)g(105,)h(168,)f(280,)h(435,)g (435,)g(280,)f(168,)h(105,)g(35,)f(0,)g(0,)g(1)g(])p 3747 623 V 75 722 V 188 692 a(gap>)h(L)e(:=)h(Filtered\()j (AsSSortedList\(C1\),)i(i)43 b(->)g(WeightCodeword\(i\))48 b(=)43 b(3)f(\);;)p 3747 722 V 75 822 V 188 792 a(gap>)i(C2)f(:=)g (ExpurgatedCode\()k(C1,)c(L)g(\);)p 3747 822 V 75 922 V 188 892 a(a)g(linear)h([15,4,3..4]5..11)k(code,)c(expurgated)i(with)d (7)g(word\(s\))p 3747 922 V 75 1021 V 188 991 a(gap>)h (WeightDistribution\()k(C2)43 b(\);)p 3747 1021 V 75 1121 V 188 1091 a([)g(1,)g(0,)g(0,)g(0,)g(14,)g(0,)g(0,)g(0,)g(1,)g(0,) g(0,)g(0,)g(0,)g(0,)g(0,)g(0)g(])p 3747 1121 V 75 1146 4 25 v 3747 1146 V 75 1149 3675 4 v 75 1362 a FK(This)29 b(function)j(does)e(not)g(w)o(ork)f(on)h(non-linear)i(codes.)48 b(F)o(or)28 b(remo)o(ving)j(w)o(ords)f(from)f(a)g(non-linear)j(code,)g (use)75 1474 y Ft(RemovedElementsCod)q(e)27 b FK(\(see)c Ft(RemovedElementsCode)28 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2077 1475 a SDict begin H.S end 2077 1475 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.7)p 0.0236 0.0894 0.6179 TeXcolorrgb 2258 1412 a SDict begin H.R end 2258 1412 a 2258 1474 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.7) cvn H.B /ANN pdfmark end 2258 1474 a Black FK(\)\).)h(F)o(or)21 b(e)o(xpur)n(gating)k(a)d(code)h(of)f(all)g(w)o (ords)g(of)75 1587 y(odd)i(weight,)g(use)g(`Ev)o(enW)-7 b(eightSubcode')27 b(\(see)d Ft(EvenWeightSubcode)29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2523 1588 a SDict begin H.S end 2523 1588 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 2704 1525 a SDict begin H.R end 2704 1525 a 2704 1587 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.3) cvn H.B /ANN pdfmark end 2704 1587 a Black FK(\)\).)75 1740 y SDict begin H.S end 75 1740 a 75 1740 a SDict begin 13.6 H.A end 75 1740 a 75 1740 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.6) cvn H.B /DEST pdfmark end 75 1740 a 97 x FJ(6.1.6)p 0.0 0.0 1.0 TeXcolorrgb 99 w(A)-5 b(ugmentedCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2011 a Fs(\006)22 b Ft(AugmentedCode\()52 b(C,)47 b(L)g(\))2352 b Fr(\(function\))p Black 216 2237 a Ft(AugmentedCode)26 b FK(returns)e Ft(C)e FK(after)h(augmenting.)31 b Ft(C)22 b FK(must)g(be)g(a)g(linear)i(code,)f Ft(L)e FK(must)i(be)f(a)g(list)h(of)f(code)n(w)o(ord)75 2350 y(inputs.)30 b(The)21 b(generator)k(matrix)d(of)g(the)g(ne)n(w)g(code)h (is)e(a)h(basis)h(for)f(the)g(code)n(w)o(ords)i(speci\002ed)g(by)e Ft(L)f FK(as)h(well)g(as)g(the)75 2462 y(w)o(ords)i(that)h(were)e (already)j(in)e(code)g Ft(C)q FK(.)29 b(Note)24 b(that)g(the)g(ne)n(w)f (code)i(in)f(general)h(will)f(consist)h(of)f(more)g(w)o(ords)g(than)75 2575 y(only)g(the)g(code)n(w)o(ords)i(of)d Ft(C)g FK(and)h(the)g(w)o (ords)g Ft(L)p FK(.)k(The)23 b(returned)j(code)e(is)g(also)g(a)f (linear)i(code.)216 2688 y(This)d(command)h(can)g(also)g(be)f(called)h (with)f(the)h(syntax)h Ft(AugmentedCode\(C\))p FK(.)j(When)22 b(called)i(without)f(a)f(list)75 2801 y(of)29 b(code)n(w)o(ords,)j Ft(AugmentedCode)h FK(returns)e Ft(C)d FK(after)i(adding)h(the)e (all-ones)j(v)o(ector)e(to)f(the)g(generator)j(matrix.)46 b Ft(C)75 2914 y FK(must)20 b(be)g(a)f(linear)j(code.)28 b(If)20 b(the)g(all-ones)i(v)o(ector)f(w)o(as)e(already)j(in)e(the)g (code,)h(nothing)h(happens)g(and)f(a)e(cop)o(y)i(of)f(the)75 3027 y(ar)n(gument)j(is)f(returned.)30 b(If)21 b Ft(C)g FK(is)g(a)g(binary)i(code)f(which)g(does)h(not)e(contain)j(the)d (all-ones)j(v)o(ector)l(,)f(the)f(complement)75 3140 y(of)h(all)h(code)n(w)o(ords)h(is)f(added.)p 75 3244 1648 4 v 1764 3249 a FF(Example)p 2102 3244 V 75 3269 4 25 v 3747 3269 V 75 3369 4 100 v 188 3339 a(gap>)44 b(C31)f(:=)g(ReedMullerCode\()k(1,)c(3)g(\);)p 3747 3369 V 75 3468 V 188 3438 a(a)g(linear)h([8,4,4]2)h(Reed-Muller)h(\(1,3\))e (code)g(over)g(GF\(2\))p 3747 3468 V 75 3568 V 188 3538 a(gap>)g(C32)f(:=)g(AugmentedCode\(C31,[")q(00)q(000)q(011)q(",")q(000) q(001)q(01")q(,"0)q(001)q(000)q(1"])q(\);)p 3747 3568 V 75 3668 V 188 3638 a(a)g(linear)h([8,7,1..2]1)i(code,)e(augmented)i (with)d(3)g(word\(s\))p 3747 3668 V 75 3767 V 188 3737 a(gap>)h(C32)f(=)g(ReedMullerCode\()k(2,)c(3)g(\);)p 3747 3767 V 75 3867 V 188 3837 a(true)p 3747 3867 V 75 3966 V 188 3937 a(gap>)h(C1)f(:=)g(CordaroWagnerCode\(6\);)p 3747 3966 V 75 4066 V 188 4036 a(a)g(linear)h([6,2,4]2..3)i (Cordaro-Wagner)h(code)d(over)g(GF\(2\))p 3747 4066 V 75 4166 V 188 4136 a(gap>)g(Codeword\()h([0,0,1,1,1,1])i(\))42 b(in)i(C1;)p 3747 4166 V 75 4265 V 188 4235 a(true)p 3747 4265 V 75 4365 V 188 4335 a(gap>)g(C2)f(:=)g(AugmentedCode\()k(C1) c(\);)p 3747 4365 V 75 4465 V 188 4435 a(a)g(linear)h([6,3,1..2]2..3)j (code,)d(augmented)i(with)d(1)g(word\(s\))p 3747 4465 V 75 4564 V 188 4534 a(gap>)h(Codeword\()h([1,1,0,0,0,0])i(\))42 b(in)i(C2;)p 3747 4564 V 75 4664 V 188 4634 a(true)p 3747 4664 V 75 4689 4 25 v 3747 4689 V 75 4692 3675 4 v 75 4905 a FK(The)34 b(function)i Ft(AddedElementsCode)k FK(adds)35 b(elements)h(to)e(the)h(code)n(w)o(ords)h(instead)g(of)e (adding)i(them)f(to)f(the)75 5018 y(basis)25 b(\(see)f Ft(AddedElementsCode)29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1290 5019 a SDict begin H.S end 1290 5019 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.8)p 0.0236 0.0894 0.6179 TeXcolorrgb 1471 4956 a SDict begin H.R end 1471 4956 a 1471 5018 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.8) cvn H.B /ANN pdfmark end 1471 5018 a Black FK(\)\).)75 5167 y SDict begin H.S end 75 5167 a 75 5167 a SDict begin 13.6 H.A end 75 5167 a 75 5167 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.7) cvn H.B /DEST pdfmark end 75 5167 a 100 x FJ(6.1.7)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Remo)o(v)o(edElementsCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5441 a Fs(\006)22 b Ft(RemovedElementsCo)q(de\()53 b(C,)47 b(L)g(\))2074 b Fr(\(function\))p Black Black Black eop end end %%Page: 103 103 TeXDict begin HPSdict begin 103 102 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.103) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(103)p Black 216 399 a Ft(RemovedElementsCod)q(e)30 b FK(returns)d(code)f Ft(C)f FK(after)h(remo)o(ving)g(a)f(list)h(of)f (code)n(w)o(ords)i Ft(L)d FK(from)h(its)h(elements.)35 b Ft(L)75 511 y FK(must)24 b(be)f(a)g(list)h(of)g(code)n(w)o(ord)h (input.)k(The)23 b(result)i(is)f(an)f(unrestricted)k(code.)p 75 633 1648 4 v 1764 638 a FF(Example)p 2102 633 V 75 658 4 25 v 3747 658 V 75 758 4 100 v 188 728 a(gap>)44 b(C1)f(:=)g(HammingCode\()j(4)d(\);;)g(WeightDistribution\()49 b(C1)43 b(\);)p 3747 758 V 75 858 V 188 828 a([)g(1,)g(0,)g(0,)g(35,)g (105,)h(168,)f(280,)h(435,)g(435,)g(280,)f(168,)h(105,)g(35,)f(0,)g(0,) g(1)g(])p 3747 858 V 75 957 V 188 927 a(gap>)h(L)e(:=)h(Filtered\()j (AsSSortedList\(C1\),)i(i)43 b(->)g(WeightCodeword\(i\))48 b(=)43 b(3)f(\);;)p 3747 957 V 75 1057 V 188 1027 a(gap>)i(C2)f(:=)g (RemovedElementsCode\()49 b(C1,)43 b(L)g(\);)p 3747 1057 V 75 1156 V 188 1127 a(a)g(\(15,2013,3..15\)2..15)49 b(code)43 b(with)h(35)f(word\(s\))i(removed)p 3747 1156 V 75 1256 V 188 1226 a(gap>)f(WeightDistribution\()k(C2)43 b(\);)p 3747 1256 V 75 1356 V 188 1326 a([)g(1,)g(0,)g(0,)g(0,)g(105,)g (168,)h(280,)g(435,)g(435,)f(280,)h(168,)g(105,)f(35,)h(0,)f(0,)g(1)f (])p 3747 1356 V 75 1455 V 188 1425 a(gap>)i(MinimumDistance\()j(C2)c (\);)p 3747 1455 V 75 1555 V 188 1525 a(3)339 b(#)43 b(C2)g(is)g(not)g(linear,)i(so)e(the)g(minimum)i(weight)f(does)g(not)f (have)h(to)p 3747 1555 V 75 1655 V 569 1625 a(#)f(be)g(equal)h(to)f (the)g(minimum)i(distance)p 3747 1655 V 75 1679 4 25 v 3747 1679 V 75 1682 3675 4 v 75 1895 a FK(Adding)29 b(elements)h(to)e(a)g(code)i(is)e(done)h(by)g(the)f(function)j Ft(AddedElementsCode)j FK(\(see)29 b Ft(AddedElementsCode)75 2008 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 2009 a SDict begin H.S end 105 2009 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.8)p 0.0236 0.0894 0.6179 TeXcolorrgb 286 1946 a SDict begin H.R end 286 1946 a 286 2008 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.8) cvn H.B /ANN pdfmark end 286 2008 a Black FK(\)\).)116 b(T)-7 b(o)52 b(remo)o(v)o(e)g(code)n(w)o(ords)j(from)d(the)h(base)g(of)f(a)g(linear) i(code,)60 b(use)53 b Ft(ExpurgatedCode)k FK(\(see)75 2120 y Ft(ExpurgatedCode)28 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 777 2121 a SDict begin H.S end 777 2121 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.5)p 0.0236 0.0894 0.6179 TeXcolorrgb 958 2058 a SDict begin H.R end 958 2058 a 958 2120 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.5) cvn H.B /ANN pdfmark end 958 2120 a Black FK(\)\).)75 2269 y SDict begin H.S end 75 2269 a 75 2269 a SDict begin 13.6 H.A end 75 2269 a 75 2269 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.8) cvn H.B /DEST pdfmark end 75 2269 a 101 x FJ(6.1.8)p 0.0 0.0 1.0 TeXcolorrgb 99 w(AddedElementsCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2544 a Fs(\006)22 b Ft(AddedElementsCode)q(\()52 b(C,)47 b(L)g(\))2167 b Fr(\(function\))p Black 216 2770 a Ft(AddedElementsCode)30 b FK(returns)c(code)f Ft(C)f FK(after)h(adding)i(a)d(list)g(of)h(code)n (w)o(ords)h Ft(L)e FK(to)g(its)h(elements.)33 b Ft(L)24 b FK(must)g(be)75 2883 y(a)f(list)h(of)f(code)n(w)o(ord)i(input.)30 b(The)23 b(result)i(is)e(an)h(unrestricted)j(code.)p 75 3004 1648 4 v 1764 3009 a FF(Example)p 2102 3004 V 75 3029 4 25 v 3747 3029 V 75 3129 4 100 v 188 3099 a(gap>)44 b(C1)f(:=)g(NullCode\()i(6,)e(GF\(2\))h(\);)p 3747 3129 V 75 3229 V 188 3199 a(a)f(cyclic)h([6,0,6]6)h(nullcode)g(over)f (GF\(2\))p 3747 3229 V 75 3328 V 188 3298 a(gap>)g(C2)f(:=)g (AddedElementsCode\()48 b(C1,)c([)e("111111")j(])e(\);)p 3747 3328 V 75 3428 V 188 3398 a(a)g(\(6,2,1..6\)3)j(code)d(with)h(1)f (word\(s\))i(added)p 3747 3428 V 75 3528 V 188 3498 a(gap>)f (IsCyclicCode\()i(C2)d(\);)p 3747 3528 V 75 3627 V 188 3597 a(true)p 3747 3627 V 75 3727 V 188 3697 a(gap>)h(C3)f(:=)g (AddedElementsCode\()48 b(C2,)c([)e("101010",)k("010101")f(])d(\);)p 3747 3727 V 75 3826 V 188 3797 a(a)h(\(6,4,1..6\)2)j(code)d(with)h(2)f (word\(s\))i(added)p 3747 3826 V 75 3926 V 188 3896 a(gap>)f (IsCyclicCode\()i(C3)d(\);)p 3747 3926 V 75 4026 V 188 3996 a(true)p 3747 4026 V 75 4051 4 25 v 3747 4051 V 75 4054 3675 4 v 75 4266 a FK(T)-7 b(o)25 b(remo)o(v)o(e)h(elements)h (from)f(a)g(code,)h(use)f Ft(RemovedElementsCod)q(e)31 b FK(\(see)c Ft(RemovedElementsCode)32 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3485 4267 a SDict begin H.S end 3485 4267 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.7)p 0.0236 0.0894 0.6179 TeXcolorrgb 3666 4204 a SDict begin H.R end 3666 4204 a 3666 4266 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.7) cvn H.B /ANN pdfmark end 3666 4266 a Black FK(\)\).)75 4379 y(T)-7 b(o)22 b(add)i(elements)h(to)f(the)g(base)g(of) f(a)g(linear)i(code,)f(use)g Ft(AugmentedCode)k FK(\(see)c Ft(AugmentedCode)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3305 4380 a SDict begin H.S end 3305 4380 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.6)p 0.0236 0.0894 0.6179 TeXcolorrgb 3486 4317 a SDict begin H.R end 3486 4317 a 3486 4379 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.6) cvn H.B /ANN pdfmark end 3486 4379 a Black FK(\)\).)75 4528 y SDict begin H.S end 75 4528 a 75 4528 a SDict begin 13.6 H.A end 75 4528 a 75 4528 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.9) cvn H.B /DEST pdfmark end 75 4528 a 100 x FJ(6.1.9)p 0.0 0.0 1.0 TeXcolorrgb 99 w(ShortenedCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4802 a Fs(\006)22 b Ft(ShortenedCode\()52 b(C[,)47 b(L])g(\))2260 b Fr(\(function\))p Black 216 5028 a Ft(ShortenedCode\()52 b(C)46 b(\))21 b FK(returns)h(the)g(code)f Ft(C)g FK(shortened)j(by)d(taking)h(a)e (cross)i(section.)30 b(If)21 b Ft(C)f FK(is)h(a)f(linear)j(code,)75 5141 y(this)g(is)f(done)i(by)e(remo)o(ving)i(all)f(code)n(w)o(ords)h (that)f(start)g(with)g(a)f(non-zero)i(entry)-6 b(,)24 b(after)f(which)g(the)g(\002rst)f(column)h(is)75 5254 y(cut)j(of)n(f.)35 b(If)26 b Ft(C)f FK(w)o(as)g(a)h Fo([)p Fq(n)p Fp(;)10 b Fq(k)r Fp(;)g Fq(d)5 b Fo(])26 b FK(code,)h(the)f (shortened)i(code)f(generally)h(is)d(a)h Fo([)p Fq(n)13 b Fv(\000)g FK(1)p Fp(;)d Fq(k)15 b Fv(\000)e FK(1)p Fp(;)d Fq(d)5 b Fo(])28 b FK(code.)36 b(It)25 b(is)h(possible)75 5367 y(that)e(the)g(dimension)h(remains)g(the)f(same;)g(it)f(is)g(also) h(possible)i(that)e(the)g(minimum)f(distance)j(increases.)216 5479 y(If)21 b Ft(C)g FK(is)g(a)g(non-linear)j(code,)e Ft(ShortenedCode)j FK(\002rst)c(checks)i(which)f(\002nite)f(\002eld)g (element)h(occurs)h(most)e(often)75 5592 y(in)j(the)g(\002rst)f(column) i(of)f(the)g(code)n(w)o(ords.)31 b(The)24 b(code)n(w)o(ords)h(not)f (starting)i(with)e(this)g(element)h(are)f(remo)o(v)o(ed)g(from)p Black Black eop end end %%Page: 104 104 TeXDict begin HPSdict begin 104 103 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.104) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(104)p Black 75 399 a(the)29 b(code,)i(after)e(which)h (the)f(\002rst)f(column)i(is)e(cut)i(of)n(f.)44 b(The)28 b(resulting)k(shortened)f(code)f(has)f(at)f(least)i(the)f(same)75 511 y(minimum)23 b(distance)j(as)d Ft(C)q FK(.)216 624 y(This)31 b(command)i(can)f(also)g(be)f(called)i(using)g(the)f(syntax)h Ft(ShortenedCode\(C,L\))p FK(.)k(When)31 b(called)i(in)f(this)75 737 y(format,)37 b Ft(ShortenedCode)i FK(repeats)d(the)e(shortening)k (process)e(on)f(each)g(of)f(the)h(columns)g(speci\002ed)h(by)f Ft(L)p FK(.)61 b Ft(L)75 850 y FK(therefore)39 b(is)e(a)g(list)g(of)g (inte)o(gers.)71 b(The)37 b(column)h(numbers)g(in)f Ft(L)g FK(are)g(the)g(numbers)i(as)e(the)o(y)g(are)g(before)i(the)75 963 y(shortening)29 b(process.)39 b(If)26 b Ft(L)g FK(has)g Fq(l)31 b FK(entries,)d(the)e(returned)j(code)e(has)f(a)g(w)o(ord)h (length)g(of)f Fq(l)31 b FK(positions)e(shorter)e(than)75 1076 y Ft(C)p FK(.)p 75 1181 1648 4 v 1764 1186 a FF(Example)p 2102 1181 V 75 1206 4 25 v 3747 1206 V 75 1305 4 100 v 188 1275 a(gap>)44 b(C1)f(:=)g(HammingCode\()j(4)d(\);)p 3747 1305 V 75 1405 V 188 1375 a(a)g(linear)h([15,11,3]1)i(Hamming)e (\(4,2\))h(code)e(over)h(GF\(2\))p 3747 1405 V 75 1504 V 188 1475 a(gap>)g(C2)f(:=)g(ShortenedCode\()k(C1)c(\);)p 3747 1504 V 75 1604 V 188 1574 a(a)g(linear)h([14,10,3]2)i(shortened)f (code)p 3747 1604 V 75 1704 V 188 1674 a(gap>)f(C3)f(:=)g (ElementsCode\()j(["1000",)g("1101",)e("0011")h(],)e(GF\(2\))h(\);)p 3747 1704 V 75 1803 V 188 1773 a(a)f(\(4,3,1..4\)2)j(user)d(defined)i (unrestricted)i(code)c(over)h(GF\(2\))p 3747 1803 V 75 1903 V 188 1873 a(gap>)g(MinimumDistance\()j(C3)c(\);)p 3747 1903 V 75 2003 V 188 1973 a(2)p 3747 2003 V 75 2102 V 188 2072 a(gap>)h(C4)f(:=)g(ShortenedCode\()k(C3)c(\);)p 3747 2102 V 75 2202 V 188 2172 a(a)g(\(3,2,2..3\)1..2)k(shortened)e (code)p 3747 2202 V 75 2301 V 188 2272 a(gap>)f(AsSSortedList\()j(C4)c (\);)p 3747 2301 V 75 2401 V 188 2371 a([)g([)f(0)h(0)g(0)f(],)h([)g(1) g(0)f(1)h(])g(])p 3747 2401 V 75 2501 V 188 2471 a(gap>)h(C5)f(:=)g (HammingCode\()j(5,)d(GF\(2\))h(\);)p 3747 2501 V 75 2600 V 188 2570 a(a)f(linear)h([31,26,3]1)i(Hamming)e(\(5,2\))h(code)e (over)h(GF\(2\))p 3747 2600 V 75 2700 V 188 2670 a(gap>)g(C6)f(:=)g (ShortenedCode\()k(C5,)c([)g(1,)g(2,)g(3)g(])f(\);)p 3747 2700 V 75 2800 V 188 2770 a(a)h(linear)h([28,23,3]2)i(shortened)f (code)p 3747 2800 V 75 2899 V 188 2869 a(gap>)f(OptimalityLinearCode\() 49 b(C6)43 b(\);)p 3747 2899 V 75 2999 V 188 2969 a(0)p 3747 2999 V 75 3024 4 25 v 3747 3024 V 75 3027 3675 4 v 75 3240 a FK(The)19 b(function)j Ft(LengthenedCode)h FK(lengthens)f(the)e(code)g(again)g(\(only)h(for)e(linear)i(codes\),)g (see)f Ft(LengthenedCode)75 3353 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 3354 a SDict begin H.S end 105 3354 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.10)p 0.0236 0.0894 0.6179 TeXcolorrgb 331 3291 a SDict begin H.R end 331 3291 a 331 3353 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.10) cvn H.B /ANN pdfmark end 331 3353 a Black FK(\).)30 b(In)23 b(general,)i(this)f(is)g(not)g(e)o(xactly)g(the)g(in)l(v)o (erse)i(function.)75 3505 y SDict begin H.S end 75 3505 a 75 3505 a SDict begin 13.6 H.A end 75 3505 a 75 3505 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.10) cvn H.B /DEST pdfmark end 75 3505 a 97 x FJ(6.1.10)p 0.0 0.0 1.0 TeXcolorrgb 99 w(LengthenedCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3776 a Fs(\006)c Ft(LengthenedCode\()52 b(C[,)c(i])f(\))2213 b Fr(\(function\))p Black 216 4002 a Ft(LengthenedCode\()52 b(C)47 b(\))21 b FK(returns)j(the)e(code)h Ft(C)f FK(lengthened.)31 b Ft(C)22 b FK(must)g(be)g(a)g(linear)h(code.)29 b(First,)22 b(the)g(all-ones)75 4115 y(v)o(ector)d(is)f(added)i(to)e(the)h (generator)i(matrix)d(\(see)h Ft(AugmentedCode)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2277 4116 a SDict begin H.S end 2277 4116 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.6)p 0.0236 0.0894 0.6179 TeXcolorrgb 2458 4053 a SDict begin H.R end 2458 4053 a 2458 4115 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.6) cvn H.B /ANN pdfmark end 2458 4115 a Black FK(\)\).)28 b(If)18 b(the)h(all-ones)h(v)o(ector)g(w)o(as) d(already)75 4228 y(a)31 b(code)n(w)o(ord,)j(nothing)f(happens)g(to)e (the)h(code.)52 b(Then,)33 b(the)e(code)h(is)f(e)o(xtended)i Ft(i)e FK(times)g(\(see)h Ft(ExtendedCode)75 4341 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 4342 a SDict begin H.S end 105 4342 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 286 4279 a SDict begin H.R end 286 4279 a 286 4341 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.1) cvn H.B /ANN pdfmark end 286 4341 a Black FK(\)\).)44 b Ft(i)28 b FK(is)g(equal)h(to)f(1)g(by)g(def)o (ault.)45 b(If)28 b Ft(C)g FK(w)o(as)g(an)g Fo([)p Fq(n)p Fp(;)10 b Fq(k)r Fo(])29 b FK(code,)h(the)e(ne)n(w)g(code)h(generally)i (is)d(a)f Fo([)p Fq(n)14 b Fo(+)g Fq(i)p Fp(;)c Fq(k)18 b Fo(+)c FK(1)p Fo(])75 4453 y FK(code.)p 75 4557 1648 4 v 1764 4562 a FF(Example)p 2102 4557 V 75 4582 4 25 v 3747 4582 V 75 4682 4 100 v 188 4652 a(gap>)44 b(C1)f(:=)g (CordaroWagnerCode\()48 b(5)43 b(\);)p 3747 4682 V 75 4782 V 188 4752 a(a)g(linear)h([5,2,3]2)h(Cordaro-Wagner)i(code)d(over) g(GF\(2\))p 3747 4782 V 75 4881 V 188 4851 a(gap>)g(C2)f(:=)g (LengthenedCode\()k(C1)c(\);)p 3747 4881 V 75 4981 V 188 4951 a(a)g(linear)h([6,3,2]2..3)i(code,)e(lengthened)i(with)e(1)e (column\(s\))p 3747 4981 V 75 5006 4 25 v 3747 5006 V 75 5009 3675 4 v 75 5222 a Ft(ShortenedCode)p FK(')34 b(shortens)f(the)d(code,)i(see)f Ft(ShortenedCode)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2243 5224 a SDict begin H.S end 2243 5224 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(6.1.9)p 0.0236 0.0894 0.6179 TeXcolorrgb 2424 5160 a SDict begin H.R end 2424 5160 a 2424 5222 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.9) cvn H.B /ANN pdfmark end 2424 5222 a Black FK(\).)49 b(In)30 b(general,)j(this)e(is)f(not)g(e)o (xactly)i(the)75 5335 y(in)l(v)o(erse)25 b(function.)p Black Black eop end end %%Page: 105 105 TeXDict begin HPSdict begin 105 104 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.105) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(105)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.11) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(6.1.11)p 0.0 0.0 1.0 TeXcolorrgb 99 w(ResidueCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(ResidueCode\()51 b(C[,)d(c])f(\))2352 b Fr(\(function\))p Black 216 799 a FK(The)19 b(function)i Ft(ResidueCode)i FK(tak)o(es)d(a)f(code)n(w)o(ord)i Ft(c)d FK(of)i Ft(C)e FK(\(if)i Ft(c)e FK(is)i(omitted,)g(a)f(code)n(w)o(ord)i (of)e(minimal)h(weight)75 912 y(is)e(used\).)29 b(It)18 b(remo)o(v)o(es)h(this)g(w)o(ord)g(and)g(all)f(its)h(linear)h (combinations)h(from)e(the)g(code)g(and)g(then)g(punctures)j(the)c (code)75 1024 y(in)h(the)g(coordinates)k(where)c Ft(c)g FK(is)g(unequal)i(to)e(zero.)28 b(The)19 b(resulting)i(code)f(is)f(an)g Fo([)p Fq(n)9 b Fv(\000)g Fq(w)-7 b Fp(;)10 b Fq(k)g Fv(\000)f FK(1)p Fp(;)h Fq(d)j Fv(\000)c(b)p Fq(w)g Fv(\003)g Fo(\()p Fq(q)g Fv(\000)g FK(1)p Fo(\))p Fp(=)p Fq(q)p Fv(c)p Fo(])75 1137 y FK(code.)30 b Ft(C)23 b FK(must)g(be)h(a)f (linear)i(code)f(and)g Ft(c)f FK(must)h(be)f(non-zero.)31 b(If)23 b Ft(c)g FK(is)h(not)g(in)46 b(then)24 b(no)g(change)h(is)e (made)h(to)f Ft(C)q FK(.)p 75 1214 1648 4 v 1764 1219 a FF(Example)p 2102 1214 V 75 1239 4 25 v 3747 1239 V 75 1339 4 100 v 188 1309 a(gap>)44 b(C1)f(:=)g(BCHCode\()i(15,)e(7)g (\);)p 3747 1339 V 75 1439 V 188 1409 a(a)g(cyclic)h([15,5,7]5)h(BCH)f (code,)g(delta=7,)h(b=1)e(over)h(GF\(2\))p 3747 1439 V 75 1538 V 188 1508 a(gap>)g(C2)f(:=)g(ResidueCode\()j(C1)d(\);)p 3747 1538 V 75 1638 V 188 1608 a(a)g(linear)h([8,4,4]2)h(residue)g (code)p 3747 1638 V 75 1737 V 188 1708 a(gap>)f(c)e(:=)h(Codeword\()j ([)c(0,0,0,1,0,0,1,1,0,)q(1,0)q(,1,)q(1,1)q(,1)49 b(],)43 b(C1\);;)p 3747 1737 V 75 1837 V 188 1807 a(gap>)h(C3)f(:=)g (ResidueCode\()j(C1,)d(c)g(\);)p 3747 1837 V 75 1937 V 188 1907 a(a)g(linear)h([7,4,3]1)h(residue)g(code)p 3747 1937 V 75 1962 4 25 v 3747 1962 V 75 1965 3675 4 v 75 2090 a SDict begin H.S end 75 2090 a 75 2090 a SDict begin 13.6 H.A end 75 2090 a 75 2090 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.12) cvn H.B /DEST pdfmark end 75 2090 a 117 x FJ(6.1.12)p 0.0 0.0 1.0 TeXcolorrgb 99 w (ConstructionBCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2381 a Fs(\006)22 b Ft(ConstructionBCode)q(\()52 b(C)47 b(\))2306 b Fr(\(function\))p Black 216 2607 a FK(The)26 b(function)i Ft(ConstructionBCode)j FK(tak)o(es)c(a)f(binary)h(linear)g (code)g Ft(C)f FK(and)g(calculates)j(the)d(minimum)g(dis-)75 2720 y(tance)c(of)f(the)h(dual)g(of)f Ft(C)g FK(\(see)h Ft(DualCode)h FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1443 2721 a SDict begin H.S end 1443 2721 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.13)p 0.0236 0.0894 0.6179 TeXcolorrgb 1669 2658 a SDict begin H.R end 1669 2658 a 1669 2720 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.13) cvn H.B /ANN pdfmark end 1669 2720 a Black FK(\)\).)29 b(It)21 b(then)h(remo)o(v)o(es)g(the)f(columns)i(of)e(the)h(parity)g (check)h(matrix)75 2832 y(of)j Ft(C)g FK(where)h(a)f(code)n(w)o(ord)i (of)f(the)f(dual)i(code)f(of)f(minimal)h(weight)g(has)g(coordinates)j (unequal)e(to)f(zero.)38 b(The)26 b(re-)75 2945 y(sulting)e(matrix)f (is)e(a)h(parity)h(check)h(matrix)e(for)h(an)f Fo([)p Fq(n)11 b Fv(\000)g Fq(d)5 b(d)g Fp(;)10 b Fq(k)j Fv(\000)e Fq(d)5 b(d)18 b Fo(+)11 b FK(1)p Fp(;)f Fv(\025)19 b Fq(d)5 b Fo(])22 b FK(code,)h(where)f Fq(d)5 b(d)27 b FK(is)22 b(the)g(minimum)75 3058 y(distance)k(of)d(the)h(dual)g(of)g Ft(C)p FK(.)p 75 3117 1648 4 v 1764 3122 a FF(Example)p 2102 3117 V 75 3142 4 25 v 3747 3142 V 75 3242 4 100 v 188 3212 a(gap>)44 b(C1)f(:=)g(ReedMullerCode\()k(2,)c(5)g(\);)p 3747 3242 V 75 3342 V 188 3312 a(a)g(linear)h([32,16,8]6)i(Reed-Muller) g(\(2,5\))e(code)g(over)f(GF\(2\))p 3747 3342 V 75 3441 V 188 3411 a(gap>)h(C2)f(:=)g(ConstructionBCode\()48 b(C1)43 b(\);)p 3747 3441 V 75 3541 V 188 3511 a(a)g(linear)h ([24,9,8]5..10)j(Construction)f(B)d(\(8)g(coordinates\))p 3747 3541 V 75 3640 V 188 3611 a(gap>)h(BoundsMinimumDistance)q(\()k (24,)c(9,)f(GF\(2\))h(\);)p 3747 3640 V 75 3740 V 188 3710 a(rec\()g(n)e(:=)h(24,)h(k)e(:=)h(9,)g(q)g(:=)g(2,)g(references)j (:=)d(rec\()86 b(\),)p 3747 3740 V 75 3840 V 273 3810 a(construction)46 b(:=)d([)g([)f(Operation)k("UUVCode")f(],)p 3747 3840 V 75 3939 V 442 3909 a([)e([)f([)h(Operation)i("UUVCode")h (],)d([)g([)f([)h(Operation)i("DualCode")h(],)p 3747 3939 V 75 4039 V 1119 4009 a([)d([)g([)f(Operation)k("RepetitionCode")i (],)43 b([)f(6,)h(2)g(])g(])f(])h(],)p 3747 4039 V 75 4139 V 950 4109 a([)g([)f(Operation)k("CordaroWagnerCode")j(],)43 b([)f(6)h(])g(])f(])h(],)p 3747 4139 V 75 4238 V 611 4208 a([)g([)g(Operation)i("CordaroWagnerCode")k(],)43 b([)g(12)g(])f(])h(])g(],)g(lowerBound)i(:=)e(8,)p 3747 4238 V 75 4338 V 273 4308 a(lowerBoundExplanation)49 b(:=)43 b([)g("Lb\(24,9\)=8,)j(u)d(u+v)g(construction)k(of)c(C1)g(and)g (C2:",)p 3747 4338 V 75 4437 V 442 4408 a("Lb\(12,7\)=4,)j(u)d(u+v)g (construction)k(of)c(C1)g(and)g(C2:",)p 3747 4437 V 75 4537 V 442 4507 a("Lb\(6,5\)=2,)j(dual)e(of)f(the)g(repetition)j (code",)p 3747 4537 V 75 4637 V 442 4607 a("Lb\(6,2\)=4,)g (Cordaro-Wagner)h(code",)e("Lb\(12,2\)=8,)h(Cordaro-Wagner)h(code")d (],)p 3747 4637 V 75 4736 V 273 4706 a(upperBound)h(:=)e(8,)p 3747 4736 V 75 4836 V 273 4806 a(upperBoundExplanation)49 b(:=)43 b([)g("Ub\(24,9\)=8,)j(otherwise)g(construction)g(B)d(would)p 3747 4836 V 75 4936 V 1416 4906 a(contradict:",)k("Ub\(18,4\)=8,)f (Griesmer)f(bound")f(])f(\))p 3747 4936 V 75 5035 V 188 5005 a(#)g(so)g(C2)g(is)g(optimal)p 3747 5035 V 75 5060 4 25 v 3747 5060 V 75 5063 3675 4 v 75 5189 a SDict begin H.S end 75 5189 a 75 5189 a SDict begin 13.6 H.A end 75 5189 a 75 5189 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.13) cvn H.B /DEST pdfmark end 75 5189 a 116 x FJ(6.1.13)p 0.0 0.0 1.0 TeXcolorrgb 99 w(DualCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5479 a Fs(\006)22 b Ft(DualCode\()50 b(C)d(\))2723 b Fr(\(function\))p Black Black Black eop end end %%Page: 106 106 TeXDict begin HPSdict begin 106 105 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.106) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(106)p Black 216 399 a Ft(DualCode)26 b FK(returns)f(the)f(dual)g(code)h(of)e Ft(C)q FK(.)28 b(The)23 b(dual)h(code)h(consists)g(of)f(all)g(code)n(w)o(ords)h(that)f (are)g(orthogonal)75 511 y(to)k(the)g(code)n(w)o(ords)i(of)d Ft(C)q FK(.)41 b(If)27 b Ft(C)h FK(is)f(a)h(linear)h(code)f(with)g (generator)i(matrix)f Fq(G)p FK(,)e(the)h(dual)h(code)g(has)f(parity)h (check)75 624 y(matrix)24 b Fq(G)f FK(\(or)h(if)g Ft(C)f FK(has)i(parity)g(check)g(matrix)g Fq(H)7 b FK(,)21 b(the)k(dual)f (code)h(has)f(generator)j(matrix)d Fq(H)7 b FK(\).)29 b(So)23 b(if)g Ft(C)h FK(is)g(a)f(linear)75 737 y Fo([)p Fq(n)p Fp(;)10 b Fq(k)r Fo(])22 b FK(code,)g(the)g(dual)g(code)g(of)f Ft(C)g FK(is)h(a)e(linear)j Fo([)p Fq(n)p Fp(;)10 b Fq(n)h Fv(\000)g Fq(k)r Fo(])21 b FK(code.)29 b(If)21 b Ft(C)g FK(is)g(a)g(c)o(yclic)i(code)f(with)f(generator)j(polynomial)75 850 y Fq(g)p Fo(\()p Fq(x)p Fo(\))p FK(,)g(the)g(dual)g(code)h(has)e (the)h(reciprocal)i(polynomial)g(of)e Fq(g)p Fo(\()p Fq(x)p Fo(\))g FK(as)g(check)g(polynomial.)216 963 y(The)f(dual)h(code) h(is)e(al)o(w)o(ays)i(a)e(linear)h(code,)g(e)n(v)o(en)g(if)f Ft(C)h FK(is)f(non-linear)-5 b(.)216 1076 y(If)23 b(a)g(code)i Ft(C)e FK(is)g(equal)i(to)e(its)h(dual)g(code,)g(it)g(is)f(called)i Fq(self-dual)p FK(.)p 75 1199 1648 4 v 1764 1204 a FF(Example)p 2102 1199 V 75 1224 4 25 v 3747 1224 V 75 1323 4 100 v 188 1293 a(gap>)44 b(R)e(:=)h(ReedMullerCode\()48 b(1,)43 b(3)f(\);)p 3747 1323 V 75 1423 V 188 1393 a(a)h(linear)h([8,4,4]2)h (Reed-Muller)h(\(1,3\))e(code)g(over)g(GF\(2\))p 3747 1423 V 75 1522 V 188 1492 a(gap>)g(RD)f(:=)g(DualCode\()i(R)e(\);)p 3747 1522 V 75 1622 V 188 1592 a(a)g(linear)h([8,4,4]2)h(Reed-Muller)h (\(1,3\))e(code)g(over)g(GF\(2\))p 3747 1622 V 75 1722 V 188 1692 a(gap>)g(R)e(=)h(RD;)p 3747 1722 V 75 1821 V 188 1791 a(true)p 3747 1821 V 75 1921 V 188 1891 a(gap>)h(N)e(:=)h (WholeSpaceCode\()48 b(7,)43 b(GF\(4\))h(\);)p 3747 1921 V 75 2021 V 188 1991 a(a)f(cyclic)h([7,7,1]0)h(whole)f(space)g(code)g (over)g(GF\(4\))p 3747 2021 V 75 2120 V 188 2090 a(gap>)g(DualCode\()h (N)e(\))f(=)h(NullCode\()i(7,)f(GF\(4\))g(\);)p 3747 2120 V 75 2220 V 188 2190 a(true)p 3747 2220 V 75 2245 4 25 v 3747 2245 V 75 2248 3675 4 v 75 2481 a SDict begin H.S end 75 2481 a 75 2481 a SDict begin 13.6 H.A end 75 2481 a 75 2481 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.14) cvn H.B /DEST pdfmark end 75 2481 a 116 x FJ(6.1.14)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Con)l(v)o(ersionFieldCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2771 a Fs(\006)22 b Ft(ConversionFieldCo)q(de\()53 b(C)47 b(\))2213 b Fr(\(function\))p Black 216 2997 a Ft(ConversionFieldCod)q(e)37 b FK(returns)d(the)e (code)h(obtained)h(from)e Ft(C)g FK(after)g(con)l(v)o(erting)j(its)d (\002eld.)54 b(If)32 b(the)g(\002eld)75 3110 y(of)26 b Ft(C)f FK(is)g Fq(GF)7 b Fo(\()p Fq(q)541 3077 y Fm(m)594 3110 y Fo(\))p FK(,)25 b(the)h(returned)i(code)f(has)f(\002eld)f Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(.)35 b(Each)26 b(symbol)h(of)e(e)n (v)o(ery)h(code)n(w)o(ord)i(is)d(replaced)j(by)e(a)75 3223 y(concatenation)e(of)d Fq(m)e FK(symbols)i(from)f Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(.)28 b(If)20 b Ft(C)g FK(is)g(an)g Fo(\()p Fq(n)p Fp(;)10 b Fq(M)t Fp(;)g Fq(d)2199 3237 y Fr(1)2238 3223 y Fo(\))20 b FK(code,)h(the)g(returned)h(code)f (is)f(a)g Fo(\()p Fq(n)10 b Fv(\001)g Fq(m)p Fp(;)g Fq(M)t Fp(;)g Fq(d)3677 3237 y Fr(2)3715 3223 y Fo(\))75 3336 y FK(code,)24 b(where)g Fq(d)582 3350 y Fr(2)640 3336 y Fp(>)c Fq(d)776 3350 y Fr(1)814 3336 y FK(.)216 3449 y(See)j(also)h Ft(HorizontalConversi)q(on)q(Fie)q(ldM)q(at)29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1890 3450 a SDict begin H.S end 1890 3450 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3.10)p 0.0236 0.0894 0.6179 TeXcolorrgb 2116 3387 a SDict begin H.R end 2116 3387 a 2116 3449 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.10) cvn H.B /ANN pdfmark end 2116 3449 a Black FK(\).)p 75 3568 1648 4 v 1764 3573 a FF(Example)p 2102 3568 V 75 3593 4 25 v 3747 3593 V 75 3692 4 100 v 188 3662 a(gap>)44 b(R)e(:=)h (RepetitionCode\()48 b(4,)43 b(GF\(4\))h(\);)p 3747 3692 V 75 3792 V 188 3762 a(a)f(cyclic)h([4,1,4]3)h(repetition)h(code)e (over)f(GF\(4\))p 3747 3792 V 75 3891 V 188 3862 a(gap>)h(R2)f(:=)g (ConversionFieldCode\()49 b(R)43 b(\);)p 3747 3891 V 75 3991 V 188 3961 a(a)g(linear)h([8,2,4]3..4)i(code,)e(converted)i(to) d(basefield)i(GF\(2\))p 3747 3991 V 75 4091 V 188 4061 a(gap>)f(Size\()g(R)e(\))h(=)g(Size\()h(R2)f(\);)p 3747 4091 V 75 4190 V 188 4160 a(true)p 3747 4190 V 75 4290 V 188 4260 a(gap>)h(GeneratorMat\()i(R)d(\);)p 3747 4290 V 75 4390 V 188 4360 a([)g([)f(Z\(2\)\2100,)j(Z\(2\)\2100,)g (Z\(2\)\2100,)f(Z\(2\)\2100)h(])e(])p 3747 4390 V 75 4489 V 188 4459 a(gap>)h(GeneratorMat\()i(R2)d(\);)p 3747 4489 V 75 4589 V 188 4559 a([)g([)f(Z\(2\)\2100,)j(0*Z\(2\),)g (Z\(2\)\2100,)f(0*Z\(2\),)h(Z\(2\)\2100,)g(0*Z\(2\),)g(Z\(2\)\2100,)f (0*Z\(2\))h(],)p 3747 4589 V 75 4688 V 273 4659 a([)d(0*Z\(2\),)j (Z\(2\)\2100,)g(0*Z\(2\),)f(Z\(2\)\2100,)h(0*Z\(2\),)g(Z\(2\)\2100,)g (0*Z\(2\),)f(Z\(2\)\2100)h(])d(])p 3747 4688 V 75 4713 4 25 v 3747 4713 V 75 4716 3675 4 v 75 4850 a SDict begin H.S end 75 4850 a 75 4850 a SDict begin 13.6 H.A end 75 4850 a 75 4850 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.15) cvn H.B /DEST pdfmark end 75 4850 a 116 x FJ(6.1.15)p 0.0 0.0 1.0 TeXcolorrgb 99 w(T)-7 b(raceCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5140 a Fs(\006)22 b Ft(TraceCode\()50 b(C)d(\))2677 b Fr(\(function\))p Black 216 5366 a FK(Input:)30 b Ft(C)24 b FK(is)f(a)g(linear)i(code)f(de\002ned)g(o)o(v)o(er)g(an)g (e)o(xtension)h Fq(E)k FK(of)24 b Ft(F)f FK(\()p Ft(F)g FK(is)h(the)f(\223base)i(\002eld\224\))216 5479 y(Output:)30 b(The)23 b(linear)i(code)f(generated)i(by)e Fq(T)6 b(r)1692 5496 y Fm(E)f Fl(=)p Fm(F)1821 5479 y Fo(\()p Fq(c)p Fo(\))p FK(,)24 b(for)g(all)f Fq(c)e Fv(2)14 b Fq(C)r FK(.)p Black Black eop end end %%Page: 107 107 TeXDict begin HPSdict begin 107 106 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.107) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(107)p Black 216 399 a Ft(TraceCode)29 b FK(returns)g(the)e(image)g(of)g(the)g(code)g Ft(C)f FK(under)i(the)f (trace)h(map.)38 b(If)26 b(the)h(\002eld)g(of)g Ft(C)f FK(is)h Fq(GF)6 b Fo(\()p Fq(q)3501 366 y Fm(m)3554 399 y Fo(\))p FK(,)27 b(the)75 511 y(returned)f(code)e(has)g(\002eld)f Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(.)216 624 y(V)-10 b(ery)27 b(slo)n(w)-6 b(.)38 b(It)26 b(does)i(not)f(seem)g(to)g(be)f (easy)i(to)e(related)j(the)e(parameters)i(of)d(the)h(trace)h(code)f(to) g(the)g(original)75 737 y(e)o(xcept)e(in)e(the)h(\223Galois)g (closed\224)i(case.)p 75 850 1648 4 v 1764 855 a FF(Example)p 2102 850 V 75 874 4 25 v 3747 874 V 75 974 4 100 v 188 944 a(gap>)44 b(C:=RandomLinearCode\(1)q(0,4)q(,GF)q(\(4)q(\)\);)49 b(MinimumDistance\(C\);)p 3747 974 V 75 1074 V 188 1044 a(a)85 b([10,4,?])45 b(randomly)g(generated)g(code)f(over)g(GF\(4\))p 3747 1074 V 75 1173 V 188 1143 a(5)p 3747 1173 V 75 1273 V 188 1243 a(gap>)g(trC:=TraceCode\(C,GF\(2)q(\)\);)49 b(MinimumDistance\(trC)q(\);)p 3747 1273 V 75 1373 V 188 1343 a(a)43 b(linear)h([10,7,1]1..3)i(user)e(defined)h (unrestricted)h(code)e(over)g(GF\(2\))p 3747 1373 V 75 1472 V 188 1442 a(1)p 3747 1472 V 75 1572 V 3747 1572 V 75 1597 4 25 v 3747 1597 V 75 1600 3675 4 v 75 1731 a SDict begin H.S end 75 1731 a 75 1731 a SDict begin 13.6 H.A end 75 1731 a 75 1731 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.16) cvn H.B /DEST pdfmark end 75 1731 a 117 x FJ(6.1.16)p 0.0 0.0 1.0 TeXcolorrgb 99 w(CosetCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2022 a Fs(\006)22 b Ft(CosetCode\()50 b(C,)d(w)g(\))2538 b Fr(\(function\))p Black 216 2248 a Ft(CosetCode)27 b FK(returns)f(the)f(coset)g(of)g(a)f (code)h Ft(C)f FK(with)g(respect)j(to)d(w)o(ord)h Ft(w)p FK(.)31 b Ft(w)24 b FK(must)g(be)h(of)f(the)h(code)n(w)o(ord)h(type.)75 2361 y(Then,)e Ft(w)g FK(is)h(added)h(to)e(each)h(code)n(w)o(ord)h(of)f Ft(C)p FK(,)f(yielding)i(the)f(elements)h(of)e(the)h(ne)n(w)f(code.)32 b(If)24 b Ft(C)g FK(is)h(linear)g(and)g Ft(w)f FK(is)75 2474 y(an)g(element)g(of)g Ft(C)p FK(,)e(the)i(ne)n(w)f(code)h(is)g (equal)g(to)g Ft(C)p FK(,)f(otherwise)i(the)f(ne)n(w)f(code)h(is)f(an)h (unrestricted)j(code.)216 2586 y(Generating)f(a)d(coset)h(is)g(also)g (possible)i(by)d(simply)i(adding)g(the)f(w)o(ord)f Ft(w)g FK(to)h Ft(C)p FK(.)k(See)p 0.0236 0.0894 0.6179 TeXcolorrgb 2899 2587 a SDict begin H.S end 2899 2587 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 3012 2524 a SDict begin H.R end 3012 2524 a 3012 2586 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.2) cvn H.B /ANN pdfmark end 3012 2586 a Black FK(.)p 75 2699 1648 4 v 1764 2704 a FF(Example)p 2102 2699 V 75 2724 4 25 v 3747 2724 V 75 2823 4 100 v 188 2793 a(gap>)44 b(H)e(:=)h(HammingCode\(3,)k(GF\(2\)\);)p 3747 2823 V 75 2923 V 188 2893 a(a)c(linear)h([7,4,3]1)h(Hamming)g(\(3,2\))f(code)g (over)f(GF\(2\))p 3747 2923 V 75 3023 V 188 2993 a(gap>)h(c)e(:=)h (Codeword\("1011011"\))q(;;)49 b(c)43 b(in)g(H;)p 3747 3023 V 75 3122 V 188 3092 a(false)p 3747 3122 V 75 3222 V 188 3192 a(gap>)h(C)e(:=)h(CosetCode\(H,)k(c\);)p 3747 3222 V 75 3321 V 188 3292 a(a)c(\(7,16,3\)1)i(coset)f(code)p 3747 3321 V 75 3421 V 188 3391 a(gap>)g(List\(AsSSortedList\(C\))q(,)k (el->)c(Syndrome\(H,)i(el\)\);)p 3747 3421 V 75 3521 V 188 3491 a([)d([)f(1)h(1)g(1)f(],)h([)g(1)g(1)f(1)h(],)g([)g(1)f(1)h (1)g(],)g([)g(1)f(1)h(1)g(],)g([)f(1)h(1)g(1)f(],)h([)g(1)g(1)f(1)h(],) p 3747 3521 V 75 3620 V 273 3590 a([)f(1)h(1)g(1)f(],)h([)g(1)g(1)f(1)h (],)g([)g(1)f(1)h(1)g(],)g([)g(1)f(1)h(1)g(],)g([)f(1)h(1)g(1)f(],)h([) g(1)g(1)f(1)h(],)p 3747 3620 V 75 3720 V 273 3690 a([)f(1)h(1)g(1)f(],) h([)g(1)g(1)f(1)h(],)g([)g(1)f(1)h(1)g(],)g([)g(1)f(1)h(1)g(])f(])p 3747 3720 V 75 3820 V 188 3790 a(#)h(All)g(elements)i(of)e(the)g(coset) h(have)g(the)g(same)f(syndrome)i(in)e(H)p 3747 3820 V 75 3844 4 25 v 3747 3844 V 75 3847 3675 4 v 75 3979 a SDict begin H.S end 75 3979 a 75 3979 a SDict begin 13.6 H.A end 75 3979 a 75 3979 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.17) cvn H.B /DEST pdfmark end 75 3979 a 116 x FJ(6.1.17)p 0.0 0.0 1.0 TeXcolorrgb 99 w(ConstantW)-6 b(eightSubcode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4270 a Fs(\006)22 b Ft(ConstantWeightSub)q(cod)q(e\()53 b(C,)47 b(w)g(\))1981 b Fr(\(function\))p Black 216 4495 a Ft (ConstantWeightSubc)q(ode)38 b FK(returns)c(the)f(subcode)h(of)f Ft(C)f FK(that)h(only)g(has)f(code)n(w)o(ords)j(of)d(weight)h Ft(w)p FK(.)55 b(The)75 4608 y(resulting)26 b(code)e(is)g(a)f (non-linear)j(code,)e(because)i(it)d(does)h(not)g(contain)i(the)d (all-zero)j(v)o(ector)-5 b(.)216 4721 y(This)29 b(command)i(also)f(can) f(be)h(called)g(with)g(the)f(syntax)i Ft(ConstantWeightSubc)q(od)q (e\(C)q(\))k FK(In)29 b(this)h(format,)75 4834 y Ft(ConstantWeightSubc) q(ode)j FK(returns)c(the)e(subcode)i(of)e Ft(C)g FK(consisting)j(of)d (all)g(minimum)g(weight)g(code)n(w)o(ords)i(of)75 4947 y Ft(C)p FK(.)216 5060 y Ft(ConstantWeightSubc)q(ode)35 b FK(\002rst)29 b(checks)h(if)f(Leon')-5 b(s)30 b(binary)g Ft(wtdist)h FK(e)o(xists)f(on)f(your)h(computer)h(\(in)e(the)75 5173 y(def)o(ault)g(directory\).)43 b(If)28 b(it)f(does,)i(then)f(this) g(program)h(is)e(called.)42 b(Otherwise,)29 b(the)f(constant)i(weight)e (subcode)h(is)75 5286 y(computed)23 b(using)g(a)d Fy(GAP)g FK(program)i(which)g(checks)h(each)f(code)n(w)o(ord)g(in)g Ft(C)f FK(to)g(see)g(if)g(it)g(is)h(of)f(the)g(desired)i(weight.)p 75 5398 1648 4 v 1764 5403 a FF(Example)p 2102 5398 V 75 5423 4 25 v 3747 5423 V 75 5523 4 100 v 188 5493 a(gap>)44 b(N)e(:=)h(NordstromRobinsonCo)q(de\()q(\);)q(;)48 b (WeightDistribution\()q(N\);)p 3747 5523 V 75 5622 V 188 5592 a([)43 b(1,)g(0,)g(0,)g(0,)g(0,)g(0,)g(112,)g(0,)g(30,)h(0,)f (112,)h(0,)f(0,)g(0,)g(0,)g(0,)g(1)f(])p 3747 5622 V Black Black eop end end %%Page: 108 108 TeXDict begin HPSdict begin 108 107 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.108) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(108)p Black 75 428 4 100 v 188 399 a FF(gap>)44 b(C)e(:=)h(ConstantWeightSubco)q(de\()q(N,)49 b(8\);)p 3747 428 V 75 528 V 188 498 a(a)43 b(\(16,30,6..16\)5..8)48 b(code)43 b(with)h(codewords)i(of)d(weight)h(8)p 3747 528 V 75 628 V 188 598 a(gap>)g(WeightDistribution\(C\))q(;)p 3747 628 V 75 727 V 188 697 a([)f(0,)g(0,)g(0,)g(0,)g(0,)g(0,)g(0,)g (0,)g(30,)g(0,)g(0,)g(0,)g(0,)g(0,)g(0,)g(0,)g(0)g(])p 3747 727 V 75 827 V 188 797 a(gap>)h(eg)f(:=)g(ExtendedTernaryGolayC)q (od)q(e\(\))q(;;)49 b(WeightDistribution\(eg)q(\);)p 3747 827 V 75 927 V 188 897 a([)43 b(1,)g(0,)g(0,)g(0,)g(0,)g(0,)g (264,)g(0,)g(0,)g(440,)h(0,)f(0,)g(24)g(])p 3747 927 V 75 1026 V 188 996 a(gap>)h(C)e(:=)h(ConstantWeightSubco)q(de\()q(eg)q (\);)p 3747 1026 V 75 1126 V 188 1096 a(a)g(\(12,264,6..12\)3..6)48 b(code)c(with)f(codewords)j(of)d(weight)h(6)p 3747 1126 V 75 1225 V 188 1196 a(gap>)g(WeightDistribution\(C\))q(;)p 3747 1225 V 75 1325 V 188 1295 a([)f(0,)g(0,)g(0,)g(0,)g(0,)g(0,)g (264,)g(0,)g(0,)g(0,)h(0,)f(0,)g(0)f(])p 3747 1325 V 75 1350 4 25 v 3747 1350 V 75 1353 3675 4 v 75 1486 a SDict begin H.S end 75 1486 a 75 1486 a SDict begin 13.6 H.A end 75 1486 a 75 1486 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.18) cvn H.B /DEST pdfmark end 75 1486 a 116 x FJ(6.1.18)p 0.0 0.0 1.0 TeXcolorrgb 99 w(StandardF)n(ormCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1777 a Fs(\006)22 b Ft(StandardFormCode\()53 b(C)47 b(\))2352 b Fr(\(function\))p Black 216 2003 a Ft(StandardFormCode)24 b FK(returns)d Ft(C)d FK(after)i(putting)h(it)e(in)g(standard)i(form.)27 b(If)19 b Ft(C)f FK(is)h(a)g(non-linear)j(code,)e(this)g(means)75 2115 y(the)k(elements)h(are)e(or)n(ganized)k(using)d(le)o (xicographical)k(order)-5 b(.)30 b(This)23 b(means)h(the)o(y)g(form)g (a)f(le)o(gal)g Fy(GAP)f FK(`Set'.)216 2228 y(If)27 b Ft(C)g FK(is)h(a)f(linear)h(code,)h(the)f(generator)i(matrix)e(and)g (parity)g(check)h(matrix)f(are)g(put)f(in)h(standard)h(form.)41 b(The)75 2341 y(generator)34 b(matrix)d(then)h(has)f(an)h(identity)h (matrix)e(in)g(its)g(left)h(part,)h(the)e(parity)i(check)f(matrix)g (has)f(an)g(identity)75 2454 y(matrix)21 b(in)f(its)g(right)i(part.)28 b(Although)22 b Fy(GU)m(A)-6 b(V)f(A)18 b FK(al)o(w)o(ays)j(puts)g (both)g(matrices)h(in)e(a)g(standard)i(form)e(using)i Ft(BaseMat)p FK(,)75 2567 y(this)i(ne)n(v)o(er)g(alters)h(the)e(code.) 30 b Ft(StandardFormCode)f FK(e)n(v)o(en)23 b(applies)i(column)g (permutations)h(if)e(una)n(v)n(oidable,)j(and)75 2680 y(thereby)k(changes)g(the)f(code.)47 b(The)29 b(column)h(permutations)i (are)e(recorded)h(in)e(the)h(construction)j(history)e(of)e(the)75 2793 y(ne)n(w)23 b(code)h(\(see)g Ft(Display)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 988 2794 a SDict begin H.S end 988 2794 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.6.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 1169 2731 a SDict begin H.R end 1169 2731 a 1169 2793 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.6.3) cvn H.B /ANN pdfmark end 1169 2793 a Black FK(\)\).)j Ft(C)23 b FK(and)h(the)g(ne)n(w)f(code)h(are)g (of)g(course)h(equi)n(v)n(alent.)216 2906 y(If)d Ft(C)g FK(is)g(a)f(c)o(yclic)i(code,)g(its)f(generator)j(matrix)d(cannot)i(be) e(put)h(in)f(the)g(usual)h(upper)h(triangular)g(form,)e(because)75 3019 y(then)d(it)g(w)o(ould)g(be)f(inconsistent)k(with)d(the)g (generator)i(polynomial.)29 b(The)18 b(reason)i(is)e(that)i(generating) h(the)e(elements)75 3132 y(from)34 b(the)h(generator)i(matrix)d(w)o (ould)h(result)h(in)e(a)g(dif)n(ferent)i(order)f(than)g(generating)i (the)e(elements)h(from)e(the)75 3245 y(generator)f(polynomial.)53 b(This)31 b(is)f(an)h(unw)o(anted)i(ef)n(fect,)g(and)e(therefore)i Ft(StandardFormCode)j FK(just)31 b(returns)i(a)75 3357 y(cop)o(y)25 b(of)e Ft(C)g FK(for)h(c)o(yclic)g(codes.)p 75 3480 1648 4 v 1764 3485 a FF(Example)p 2102 3480 V 75 3505 4 25 v 3747 3505 V 75 3605 4 100 v 188 3575 a(gap>)44 b(G)e(:=)h(GeneratorMatCode\()48 b(Z\(2\))c(*)f([)g([0,1,1,0],)i ([0,1,0,1],)h([0,0,1,1])f(],)p 3747 3605 V 75 3704 V 611 3674 a("random)g(form)f(code",)g(GF\(2\))g(\);)p 3747 3704 V 75 3804 V 188 3774 a(a)f(linear)h([4,2,1..2]1..2)j(random)d (form)g(code)g(over)g(GF\(2\))p 3747 3804 V 75 3903 V 188 3874 a(gap>)g(Codeword\()h(GeneratorMat\()i(G)42 b(\))h(\);)p 3747 3903 V 75 4003 V 188 3973 a([)g([)f(0)h(1)g(0)f(1)h (],)g([)g(0)f(0)h(1)g(1)f(])h(])p 3747 4003 V 75 4103 V 188 4073 a(gap>)h(Codeword\()h(GeneratorMat\()i(StandardFormCode\()h (G)43 b(\))f(\))h(\);)p 3747 4103 V 75 4202 V 188 4172 a([)g([)f(1)h(0)g(0)f(1)h(],)g([)g(0)f(1)h(0)g(1)f(])h(])p 3747 4202 V 75 4227 4 25 v 3747 4227 V 75 4230 3675 4 v 75 4364 a SDict begin H.S end 75 4364 a 75 4364 a SDict begin 13.6 H.A end 75 4364 a 75 4364 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.1.19) cvn H.B /DEST pdfmark end 75 4364 a 116 x FJ(6.1.19)p 0.0 0.0 1.0 TeXcolorrgb 99 w (PiecewiseConstantCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4654 a Fs(\006)22 b Ft(PiecewiseConstant)q(Cod)q(e\()53 b(part,)48 b(wts[,)g(F])f(\))1518 b Fr(\(function\))p Black 216 4880 a Ft(PiecewiseConstantC)q(ode)31 b FK(returns)26 b(a)e(code)i(with)f(length)h Fq(n)21 b Fo(=)2345 4887 y Fu(\345)2420 4880 y Fq(n)2465 4894 y Fm(i)2488 4880 y FK(,)j(where)h Ft(part)q FK(=)p Fo([)p Fq(n)3087 4894 y Fr(1)3126 4880 y Fp(;)10 b(:)g(:)g(:)h(;)f Fq(n)3347 4894 y Fm(k)3382 4880 y Fo(])p FK(.)32 b Ft(wts)25 b FK(is)g(a)75 4993 y(list)d(of)g Ft(constraints)j Fq(w)18 b Fo(=)h(\()p Fq(w)1100 5007 y Fr(1)1137 4993 y Fp(;)10 b(:::;)g Fq(w)1343 5007 y Fm(k)1379 4993 y Fo(\))p FK(,)21 b(each)i(of)e(length)j Fq(k)r FK(,)d(where)h(0)d Fv(\024)f Fq(w)2534 5007 y Fm(i)2575 4993 y Fv(\024)h Fq(n)2710 5007 y Fm(i)2733 4993 y FK(.)27 b(The)21 b(def)o(ault)j(\002eld)e(is)f Fq(GF)7 b Fo(\()p FK(2)p Fo(\))p FK(.)216 5106 y(A)26 b(constraint)j(is)e(a)f(list)h(of)g(inte)o(gers,)h(and)g(a)e(w)o(ord)h Fq(c)22 b Fo(=)g(\()p Fq(c)2085 5120 y Fr(1)2123 5106 y Fp(;)10 b(:)g(:)g(:)h(;)f Fq(c)2339 5120 y Fm(k)2374 5106 y Fo(\))26 b FK(\(according)k(to)c Ft(part)r FK(,)g(i.e.,)h(each)g Fq(c)3574 5120 y Fm(i)3623 5106 y FK(is)g(a)75 5219 y(subw)o(ord)i(of)f (length)h Fq(n)816 5233 y Fm(i)839 5219 y FK(\))e(is)h(in)g(the)g (resulting)i(code)f(if)e(and)h(only)h(if,)f(for)g(some)g(constraint)j Fq(w)22 b Fv(2)k Ft(wts)q FK(,)i Fv(k)p Fq(c)3482 5233 y Fm(i)3506 5219 y Fv(k)23 b Fo(=)f Fq(w)3728 5233 y Fm(i)75 5332 y FK(for)i(all)f(1)e Fv(\024)f Fq(i)g Fv(\024)g Fq(k)r FK(,)j(where)g Fv(k)p Fp(:::)p Fv(k)i FK(denotes)g(the)f (Hamming)f(weight.)216 5444 y(An)g(e)o(xample)h(might)g(mak)o(e)g (things)h(clearer:)p Black Black eop end end %%Page: 109 109 TeXDict begin HPSdict begin 109 108 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.109) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(109)p Black 75 399 1648 4 v 1764 404 a FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188 493 a(gap>)44 b(PiecewiseConstantCode)q(\()k([)43 b(2,)g(3)g(],)p 3747 523 V 75 623 V 400 593 a([)f([)h(0,)g(0)g(],)g([)f (0,)h(3)g(],)g([)g(1,)g(0)g(],)g([)f(2,)h(2)g(])g(],GF\(2\))h(\);)p 3747 623 V 75 722 V 188 692 a(the)f(C)g(code)h(programs)h(are)e (compiled,)j(so)d(using)h(Leon's)g(binary....)p 3747 722 V 75 822 V 188 792 a(the)f(C)g(code)h(programs)h(are)e(compiled,)j (so)d(using)h(Leon's)g(binary....)p 3747 822 V 75 922 V 188 892 a(the)f(C)g(code)h(programs)h(are)e(compiled,)j(so)d(using)h (Leon's)g(binary....)p 3747 922 V 75 1021 V 188 991 a(the)f(C)g(code)h (programs)h(are)e(compiled,)j(so)d(using)h(Leon's)g(binary....)p 3747 1021 V 75 1121 V 188 1091 a(a)f(\(5,7,1..5\)1..5)k(piecewise)e (constant)g(code)f(over)g(GF\(2\))p 3747 1121 V 75 1220 V 188 1191 a(gap>)g(AsSSortedList\(last\);)p 3747 1220 V 75 1320 V 188 1290 a([)f([)f(0)h(0)g(0)f(0)h(0)g(],)g([)f(0)h(0)g(1)f (1)h(1)g(],)g([)g(0)f(1)h(0)g(0)f(0)h(],)g([)g(1)f(0)h(0)g(0)f(0)h(],)p 3747 1320 V 75 1420 V 273 1390 a([)f(1)h(1)g(0)f(1)h(1)g(],)g([)f(1)h (1)g(1)f(0)h(1)g(],)g([)g(1)f(1)h(1)g(1)f(0)h(])g(])p 3747 1420 V 75 1519 V 188 1489 a(gap>)p 3747 1519 V 75 1619 V 3747 1619 V 75 1644 4 25 v 3747 1644 V 75 1647 3675 4 v 75 1841 a FK(The)28 b(\002rst)g(constraint)j(is)e(satis\002ed) g(by)g(code)n(w)o(ord)h(1,)f(the)g(second)h(by)e(code)n(w)o(ord)i(2,)f (the)g(third)h(by)e(code)n(w)o(ords)j(3)75 1954 y(and)24 b(4,)f(and)h(the)g(fourth)h(by)e(code)n(w)o(ords)j(5,)d(6)g(and)h(7.)75 2113 y SDict begin H.S end 75 2113 a 75 2113 a SDict begin 13.6 H.A end 75 2113 a 75 2113 a SDict begin [ /View [/XYZ H.V] /Dest (section.6.2) cvn H.B /DEST pdfmark end 75 2113 a 130 x FM(6.2)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Functions)31 b(that)e(Generate)i(a)e(New)i(Code)g(fr)n(om)e(T)-9 b(w)o(o)29 b(Gi)o(v)o(en)h(Codes)p Black 75 2339 a SDict begin H.S end 75 2339 a 75 2339 a SDict begin 13.6 H.A end 75 2339 a 75 2339 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.2.1) cvn H.B /DEST pdfmark end 75 2339 a 114 x FJ(6.2.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Dir)n(ectSumCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2628 a Fs(\006)22 b Ft(DirectSumCode\()52 b(C1,)47 b(C2)g(\))2260 b Fr(\(function\))p Black 216 2854 a Ft(DirectSumCode)27 b FK(returns)d(the)f(direct)g(sum)f(of)h (codes)h Ft(C1)e FK(and)h Ft(C2)q FK(.)k(The)22 b(direct)i(sum)e(code)i (consists)g(of)f(e)n(v)o(ery)75 2966 y(code)n(w)o(ord)29 b(of)f Ft(C1)g FK(concatenated)k(by)c(e)n(v)o(ery)g(code)n(w)o(ord)h (of)f Ft(C2)q FK(.)41 b(Therefore,)30 b(if)e Ft(Ci)g FK(w)o(as)f(a)h Fo(\()p Fq(n)3094 2980 y Fm(i)3117 2966 y Fp(;)10 b Fq(M)3228 2980 y Fm(i)3251 2966 y Fp(;)g Fq(d)3331 2980 y Fm(i)3354 2966 y Fo(\))27 b FK(code,)j(the)75 3079 y(result)25 b(is)e(a)g Fo(\()p Fq(n)526 3093 y Fr(1)577 3079 y Fo(+)13 b Fq(n)706 3093 y Fr(2)743 3079 y Fp(;)d Fq(M)854 3093 y Fr(1)904 3079 y Fv(\003)j Fq(M)1038 3093 y Fr(2)1075 3079 y Fp(;)d Fq(min)p Fo(\()p Fq(d)1326 3093 y Fr(1)1365 3079 y Fp(;)g Fq(d)1445 3093 y Fr(2)1483 3079 y Fo(\)\))23 b FK(code.)216 3192 y(If)g(both)h Ft(C1)f FK(and)g Ft(C2)g FK(are)g(linear)h(codes,)g(the)f(result)i(is)d(also)i (a)f(linear)h(code.)29 b(If)23 b(one)g(of)g(them)g(is)g(non-linear)l(,) j(the)75 3305 y(direct)f(sum)e(is)g(non-linear)k(too.)i(In)23 b(general,)i(a)e(direct)i(sum)e(code)i(is)e(not)h(c)o(yclic.)216 3418 y(Performing)29 b(a)d(direct)j(sum)e(can)g(also)h(be)f(done)h(by)f (adding)i(tw)o(o)e(codes)h(\(see)g(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 3033 3419 a SDict begin H.S end 3033 3419 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 3146 3356 a SDict begin H.R end 3146 3356 a 3146 3418 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.4.2) cvn H.B /ANN pdfmark end 3146 3418 a Black FK(\).)40 b(Another)28 b(often)75 3531 y(used)c(method)h(is)e(the)h (`u,)f(u+v'-construction,)29 b(described)d(in)d Ft(UUVCode)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2438 3532 a SDict begin H.S end 2438 3532 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.2.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 2619 3469 a SDict begin H.R end 2619 3469 a 2619 3531 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.2.2) cvn H.B /ANN pdfmark end 2619 3531 a Black FK(\).)p 75 3631 1648 4 v 1764 3636 a FF(Example)p 2102 3631 V 75 3656 4 25 v 3747 3656 V 75 3756 4 100 v 188 3726 a(gap>)44 b(C1)f(:=)g (ElementsCode\()j([)d([1,0],)i([4,5])f(],)f(GF\(7\))h(\);;)p 3747 3756 V 75 3855 V 188 3825 a(gap>)g(C2)f(:=)g(ElementsCode\()j([)d ([0,0,0],)i([3,3,3])g(],)e(GF\(7\))h(\);;)p 3747 3855 V 75 3955 V 188 3925 a(gap>)g(D)e(:=)h(DirectSumCode\(C1,)48 b(C2\);;)p 3747 3955 V 75 4055 V 188 4025 a(gap>)c(AsSSortedList\(D\);) p 3747 4055 V 75 4154 V 188 4124 a([)f([)f(1)h(0)g(0)f(0)h(0)g(],)g([)f (1)h(0)g(3)f(3)h(3)g(],)g([)g(4)f(5)h(0)g(0)f(0)h(],)g([)g(4)f(5)h(3)g (3)f(3)h(])g(])p 3747 4154 V 75 4254 V 188 4224 a(gap>)h(D)e(=)h(C1)g (+)g(C2;)128 b(#)42 b(addition)j(=)e(direct)i(sum)p 3747 4254 V 75 4353 V 188 4324 a(true)p 3747 4353 V 75 4378 4 25 v 3747 4378 V 75 4381 3675 4 v 75 4511 a SDict begin H.S end 75 4511 a 75 4511 a SDict begin 13.6 H.A end 75 4511 a 75 4511 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.2.2) cvn H.B /DEST pdfmark end 75 4511 a 117 x FJ(6.2.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(UUVCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4802 a Fs(\006)22 b Ft(UUVCode\()50 b(C1,)d(C2)g(\))2538 b Fr(\(function\))p Black 216 5028 a Ft(UUVCode)33 b FK(returns)f(the)f(so-called)j Fo(\()p Fq(u)p Fv(k)p Fq(u)17 b Fo(+)d Fq(v)p Fo(\))31 b FK(construction)k(applied)d(to)f Ft(C1)g FK(and)g Ft(C2)q FK(.)50 b(The)30 b(resulting)j(code)75 5141 y(consists)c(of)d(e)n(v)o(ery)h(code)n(w)o(ord)h Fq(u)e FK(of)g Ft(C1)h FK(concatenated)j(by)d(the)f(sum)h(of)f Fq(u)g FK(and)h(e)n(v)o(ery)g(code)n(w)o(ord)h Fq(v)e FK(of)h Ft(C2)p FK(.)37 b(If)26 b Ft(C1)75 5254 y FK(and)k Ft(C2)f FK(ha)n(v)o(e)h(dif)n(ferent)i(w)o(ord)d(lengths,)k(suf)n (\002cient)e(zeros)f(are)g(added)h(to)e(the)h(shorter)h(code)f(to)g (mak)o(e)f(this)h(sum)75 5367 y(possible.)h(If)23 b Ft(Ci)h FK(is)f(a)g Fo(\()p Fq(n)849 5381 y Fm(i)872 5367 y Fp(;)10 b Fq(M)983 5381 y Fm(i)1006 5367 y Fp(;)g Fq(d)1086 5381 y Fm(i)1109 5367 y Fo(\))23 b FK(code,)h(the)g(result)h(is)e(an)h Fo(\()p Fq(n)2015 5381 y Fr(1)2066 5367 y Fo(+)13 b Fq(max)p Fo(\()p Fq(n)2381 5381 y Fr(1)2419 5367 y Fp(;)d Fq(n)2499 5381 y Fr(2)2537 5367 y Fo(\))p Fp(;)g Fq(M)2683 5381 y Fr(1)2733 5367 y Fv(\001)j Fq(M)2847 5381 y Fr(2)2884 5367 y Fp(;)d Fq(min)p Fo(\()p FK(2)j Fv(\001)g Fq(d)3231 5381 y Fr(1)3270 5367 y Fp(;)d Fq(d)3350 5381 y Fr(2)3388 5367 y Fo(\)\))23 b FK(code.)216 5479 y(If)g(both)h Ft(C1)f FK(and)g Ft(C2)g FK(are)g(linear)h(codes,)g(the)f(result)i(is)d(also)i (a)f(linear)h(code.)29 b(If)23 b(one)g(of)g(them)g(is)g(non-linear)l(,) j(the)75 5592 y(UUV)c(sum)h(is)g(non-linear)k(too.)i(In)23 b(general,)i(a)e(UUV)f(sum)h(code)i(is)e(not)h(c)o(yclic.)p Black Black eop end end %%Page: 110 110 TeXDict begin HPSdict begin 110 109 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.110) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(110)p Black 216 399 a(The)23 b(function)j Ft(DirectSumCode)h FK(returns)f(another)f(sum)e(of)h(codes)g(\(see)g Ft(DirectSumCode)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3229 400 a SDict begin H.S end 3229 400 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.2.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 3410 337 a SDict begin H.R end 3410 337 a 3410 399 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.2.1) cvn H.B /ANN pdfmark end 3410 399 a Black FK(\)\).)p 75 515 1648 4 v 1764 520 a FF(Example)p 2102 515 V 75 540 4 25 v 3747 540 V 75 639 4 100 v 188 609 a(gap>)44 b(C1)f(:=)g(EvenWeightSubcode\(Who)q(le)q(Spa)q(ceC)q(ode)q(\(4,)49 b(GF\(2\)\)\);)p 3747 639 V 75 739 V 188 709 a(a)43 b(cyclic)h ([4,3,2]1)h(even)f(weight)g(subcode)p 3747 739 V 75 839 V 188 809 a(gap>)g(C2)f(:=)g(RepetitionCode\(4,)48 b(GF\(2\)\);)p 3747 839 V 75 938 V 188 908 a(a)43 b(cyclic)h([4,1,4]2)h(repetition)h (code)e(over)f(GF\(2\))p 3747 938 V 75 1038 V 188 1008 a(gap>)h(R)e(:=)h(UUVCode\(C1,)j(C2\);)p 3747 1038 V 75 1137 V 188 1108 a(a)d(linear)h([8,4,4]2)h(U)e(U+V)g(construction)k (code)p 3747 1137 V 75 1237 V 188 1207 a(gap>)d(R)e(=)h (ReedMullerCode\(1,3\);)p 3747 1237 V 75 1337 V 188 1307 a(true)p 3747 1337 V 75 1362 4 25 v 3747 1362 V 75 1365 3675 4 v 75 1497 a SDict begin H.S end 75 1497 a 75 1497 a SDict begin 13.6 H.A end 75 1497 a 75 1497 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.2.3) cvn H.B /DEST pdfmark end 75 1497 a 117 x FJ(6.2.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Dir)n(ectPr)n(oductCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1788 a Fs(\006)22 b Ft(DirectProductCode)q(\()52 b(C1,)c(C2)f(\)) 2074 b Fr(\(function\))p Black 216 2014 a Ft(DirectProductCode)34 b FK(returns)c(the)e(direct)i(product)g(of)e(codes)h Ft(C1)g FK(and)f Ft(C2)q FK(.)42 b(Both)28 b(must)h(be)f(linear)h (codes.)75 2127 y(Suppose)c Ft(Ci)e FK(has)h(generator)j(matrix)d Fq(G)1358 2141 y Fm(i)1380 2127 y FK(.)k(The)23 b(direct)i(product)h (of)d Ft(C1)h FK(and)g Ft(C2)f FK(then)i(has)f(the)g(Kroneck)o(er)h (product)75 2240 y(of)e Fq(G)239 2254 y Fr(1)299 2240 y FK(and)h Fq(G)519 2254 y Fr(2)579 2240 y FK(as)f(the)h(generator)i (matrix)e(\(see)g(the)g Fy(GAP)e FK(command)i Ft(KroneckerProduct)p FK(\).)216 2352 y(If)f Ft(Ci)h FK(is)f(a)g Fo([)p Fq(n)631 2366 y Fm(i)655 2352 y Fp(;)10 b Fq(k)730 2366 y Fm(i)753 2352 y Fp(;)g Fq(d)833 2366 y Fm(i)856 2352 y Fo(])23 b FK(code,)h(the)g(direct)h(product)g(then)f(is)g(an)f Fo([)p Fq(n)2226 2366 y Fr(1)2277 2352 y Fv(\001)13 b Fq(n)2360 2366 y Fr(2)2398 2352 y Fp(;)d Fq(k)2473 2366 y Fr(1)2523 2352 y Fv(\001)j Fq(k)2601 2366 y Fr(2)2639 2352 y Fp(;)d Fq(d)2719 2366 y Fr(1)2769 2352 y Fv(\001)j Fq(d)2852 2366 y Fr(2)2890 2352 y Fo(])23 b FK(code.)p 75 2475 1648 4 v 1764 2480 a FF(Example)p 2102 2475 V 75 2500 4 25 v 3747 2500 V 75 2600 4 100 v 188 2570 a(gap>)44 b(L1)f(:=)g(LexiCode\(10,)j(4,)d(GF\(2\)\);)p 3747 2600 V 75 2700 V 188 2670 a(a)g(linear)h([10,5,4]2..4)i(lexicode)f(over)f (GF\(2\))p 3747 2700 V 75 2799 V 188 2769 a(gap>)g(L2)f(:=)g (LexiCode\(8,)j(3,)d(GF\(2\)\);)p 3747 2799 V 75 2899 V 188 2869 a(a)g(linear)h([8,4,3]2..3)i(lexicode)f(over)f(GF\(2\))p 3747 2899 V 75 2998 V 188 2968 a(gap>)g(D)e(:=)h(DirectProductCode\(L)q (1,)49 b(L2\);)p 3747 2998 V 75 3098 V 188 3068 a(a)43 b(linear)h([80,20,12]20..45)k(direct)c(product)h(code)p 3747 3098 V 75 3123 4 25 v 3747 3123 V 75 3126 3675 4 v 75 3259 a SDict begin H.S end 75 3259 a 75 3259 a SDict begin 13.6 H.A end 75 3259 a 75 3259 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.2.4) cvn H.B /DEST pdfmark end 75 3259 a 116 x FJ(6.2.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IntersectionCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3549 a Fs(\006)22 b Ft(IntersectionCode\()53 b(C1,)47 b(C2)g(\))2121 b Fr(\(function\))p Black 216 3775 a Ft(IntersectionCode)33 b FK(returns)c(the)g (intersection)i(of)d(codes)h Ft(C1)e FK(and)i Ft(C2)p FK(.)41 b(This)28 b(code)g(consists)i(of)e(all)g(code-)75 3888 y(w)o(ords)f(that)f(are)g(both)h(in)f Ft(C1)g FK(and)h Ft(C2)p FK(.)36 b(If)26 b(both)h(codes)g(are)f(linear)l(,)i(the)e (result)i(is)d(also)i(linear)-5 b(.)38 b(If)25 b(both)i(are)g(c)o (yclic,)75 4001 y(the)d(result)h(is)e(also)h(c)o(yclic.)p 75 4121 1648 4 v 1764 4126 a FF(Example)p 2102 4121 V 75 4146 4 25 v 3747 4146 V 75 4245 4 100 v 188 4215 a(gap>)44 b(C)e(:=)h(CyclicCodes\(7,)k(GF\(2\)\);)p 3747 4245 V 75 4345 V 188 4315 a([)c(a)f(cyclic)j([7,7,1]0)g(enumerated)g(code)f (over)g(GF\(2\),)p 3747 4345 V 75 4444 V 273 4415 a(a)e(cyclic)j ([7,6,1..2]1)h(enumerated)g(code)d(over)h(GF\(2\),)p 3747 4444 V 75 4544 V 273 4514 a(a)e(cyclic)j([7,3,1..4]2..3)i (enumerated)f(code)d(over)h(GF\(2\),)p 3747 4544 V 75 4644 V 273 4614 a(a)e(cyclic)j([7,0,7]7)g(enumerated)g(code)f(over)g (GF\(2\),)p 3747 4644 V 75 4743 V 273 4713 a(a)e(cyclic)j ([7,3,1..4]2..3)i(enumerated)f(code)d(over)h(GF\(2\),)p 3747 4743 V 75 4843 V 273 4813 a(a)e(cyclic)j([7,4,1..3]1)h(enumerated) g(code)d(over)h(GF\(2\),)p 3747 4843 V 75 4943 V 273 4913 a(a)e(cyclic)j([7,1,7]3)g(enumerated)g(code)f(over)g(GF\(2\),)p 3747 4943 V 75 5042 V 273 5012 a(a)e(cyclic)j([7,4,1..3]1)h(enumerated) g(code)d(over)h(GF\(2\))g(])p 3747 5042 V 75 5142 V 188 5112 a(gap>)g(IntersectionCode\(C[6])q(,)k(C[8]\))d(=)d(C[7];)p 3747 5142 V 75 5241 V 188 5212 a(true)p 3747 5241 V 75 5266 4 25 v 3747 5266 V 75 5269 3675 4 v 75 5479 a FK(The)24 b Fq(hull)i FK(of)e(a)h(linear)g(code)h(is)e(the)h(intersection)k(of)24 b(the)h(code)h(with)e(its)h(dual)g(code.)33 b(In)25 b(other)h(w)o (ords,)f(the)g(hull)g(of)70 5592 y Fq(C)g FK(is)e Ft (IntersectionCode\(C)q(,)52 b(DualCode\(C\)\))p FK(.)p Black Black eop end end %%Page: 111 111 TeXDict begin HPSdict begin 111 110 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.111) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(111)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.2.5) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(6.2.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(UnionCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(UnionCode\()50 b(C1,)e(C2)f(\))2445 b Fr(\(function\))p Black 216 799 a Ft(UnionCode)24 b FK(returns)e(the)g(union)g(of)f(codes)h Ft(C1)f FK(and)h Ft(C2)q FK(.)27 b(This)21 b(code)g(consists)j(of)d(the)g(union)h(of)f (all)g(code)n(w)o(ords)75 912 y(of)29 b Ft(C1)g FK(and)g Ft(C2)g FK(and)g(all)g(linear)h(combinations.)48 b(Therefore)30 b(this)g(function)h(w)o(orks)e(only)h(for)f(linear)h(codes.)46 b(The)75 1024 y(function)32 b Ft(AddedElementsCode)j FK(can)30 b(be)f(used)i(for)f(non-linear)i(codes,)g(or)e(if)f(the)h (resulting)i(code)f(should)g(not)75 1137 y(include)21 b(linear)g(combinations.)30 b(See)19 b Ft(AddedElementsCode)25 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2113 1138 a SDict begin H.S end 2113 1138 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.8)p 0.0236 0.0894 0.6179 TeXcolorrgb 2294 1075 a SDict begin H.R end 2294 1075 a 2294 1137 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.8) cvn H.B /ANN pdfmark end 2294 1137 a Black FK(\).)j(If)19 b(both)i(ar)n(guments)h (are)d(c)o(yclic,)i(the)f(result)75 1250 y(is)j(also)i(c)o(yclic.)p 75 1373 1648 4 v 1764 1378 a FF(Example)p 2102 1373 V 75 1398 4 25 v 3747 1398 V 75 1497 4 100 v 188 1468 a(gap>)44 b(G)e(:=)h(GeneratorMatCode\([[)q(1,0)q(,1)q(],[)q(0,1)q(,1])q(]*Z)q (\(2\))q(\2100,)49 b(GF\(2\)\);)p 3747 1497 V 75 1597 V 188 1567 a(a)43 b(linear)h([3,2,1..2]1)i(code)e(defined)h(by)e (generator)i(matrix)f(over)g(GF\(2\))p 3747 1597 V 75 1697 V 188 1667 a(gap>)g(H)e(:=)h(GeneratorMatCode\([[)q(1,1)q(,1)q (]]*)q(Z\(2)q(\)\2100)q(,)48 b(GF\(2\)\);)p 3747 1697 V 75 1796 V 188 1766 a(a)43 b(linear)h([3,1,3]1)h(code)f(defined)g(by)g (generator)h(matrix)f(over)g(GF\(2\))p 3747 1796 V 75 1896 V 188 1866 a(gap>)g(U)e(:=)h(UnionCode\(G,)k(H\);)p 3747 1896 V 75 1996 V 188 1966 a(a)c(linear)h([3,3,1]0)h(union)f(code)p 3747 1996 V 75 2095 V 188 2065 a(gap>)g(c)e(:=)h(Codeword\("010"\);;)48 b(c)43 b(in)g(G;)p 3747 2095 V 75 2195 V 188 2165 a(false)p 3747 2195 V 75 2294 V 188 2265 a(gap>)h(c)e(in)h(H;)p 3747 2294 V 75 2394 V 188 2364 a(false)p 3747 2394 V 75 2494 V 188 2464 a(gap>)h(c)e(in)h(U;)p 3747 2494 V 75 2593 V 188 2563 a(true)p 3747 2593 V 75 2618 4 25 v 3747 2618 V 75 2621 3675 4 v 75 2754 a SDict begin H.S end 75 2754 a 75 2754 a SDict begin 13.6 H.A end 75 2754 a 75 2754 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.2.6) cvn H.B /DEST pdfmark end 75 2754 a 117 x FJ(6.2.6)p 0.0 0.0 1.0 TeXcolorrgb 99 w(ExtendedDir)n(ectSumCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3045 a Fs(\006)22 b Ft(ExtendedDirectSum)q(Cod)q(e\()53 b(L,)47 b(B,)g(m)g(\))1842 b Fr(\(function\))p Black 216 3271 a FK(The)30 b(e)o(xtended)j(direct)f (sum)e(construction)k(is)d(described)i(in)d(section)j(V)c(of)i(Graham)f (and)h(Sloane)h([)p 0.0236 0.6179 0.0894 TeXcolorrgb 3490 3272 a SDict begin H.S end 3490 3272 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(GS85)p 0.0236 0.6179 0.0894 TeXcolorrgb 3697 3209 a SDict begin H.R end 3697 3209 a 3697 3271 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.GS85) cvn H.B /ANN pdfmark end 3697 3271 a Black FK(].)75 3384 y(The)23 b(resulting)j(code)e(consists)i(of)d Ft(m)h FK(copies)h(of)e Ft(L)p FK(,)g(e)o(xtended)i(by)f(repeating)i(the)e (code)n(w)o(ords)h(of)f Ft(B)f(m)g FK(times.)216 3497 y(Suppose)k Ft(L)f FK(is)g(an)g Fo([)p Fq(n)888 3511 y Fm(L)930 3497 y Fp(;)10 b Fq(k)1005 3511 y Fm(L)1047 3497 y Fo(])p Fq(r)1107 3511 y Fm(L)1174 3497 y FK(code,)27 b(and)g Ft(B)e FK(is)h(an)g Fo([)p Fq(n)1889 3511 y Fm(L)1931 3497 y Fp(;)10 b Fq(k)2006 3511 y Fm(B)2052 3497 y Fo(])p Fq(r)2112 3511 y Fm(B)2182 3497 y FK(code)27 b(\(non-linear)i(codes)f (are)e(also)h(permitted\).)75 3610 y(The)20 b(length)i(of)e Ft(B)g FK(must)g(be)h(equal)g(to)f(the)h(length)h(of)e Ft(L)p FK(.)27 b(The)20 b(length)i(of)e(the)h(ne)n(w)e(code)j(is)e Fq(n)d Fo(=)g Fq(mn)3156 3624 y Fm(L)3198 3610 y FK(,)j(the)g (dimension)75 3722 y(\(in)k(the)g(case)g(of)f(linear)i(codes\))g(is)e Fq(k)f Fv(\024)e Fq(mk)1442 3736 y Fm(L)1496 3722 y Fo(+)13 b Fq(k)1620 3736 y Fm(B)1664 3722 y FK(,)23 b(and)h(the)g(co)o(v)o (ering)h(radius)g(is)e Fq(r)g Fv(\024)d(b)p Fq(m)p Fu(Y)p Fo(\()p Fq(L)p Fp(;)10 b Fq(B)p Fo(\))p Fv(c)p FK(,)23 b(with)1279 3967 y Fu(Y)p Fo(\()p Fq(L)p Fp(;)10 b Fq(B)p Fo(\))20 b(=)34 b FK(max)1674 4043 y Fm(u)p Fh(2)p Fm(F)1798 4005 y Ff(n)1823 4020 y(L)1785 4064 y Fd(2)1913 3906 y FK(1)p 1879 3946 114 4 v 1879 4030 a(2)1924 4003 y Fm(k)1953 4013 y Ff(B)2023 3987 y Fa(\345)2013 4059 y Fm(v)p Fh(2)p Fm(B)2137 3967 y FK(d)p Fo(\()p Fq(L)p Fp(;)10 b Fq(v)j Fo(+)g Fq(u)p Fo(\))p Fp(:)75 4235 y FK(Ho)n(we)n(v)o(er)l(,)37 b(this)e(computation)i(will)e(not)g(be)f(e)o (x)o(ecuted,)39 b(because)e(it)d(may)g(be)h(too)g(time)f(consuming)j (for)e(lar)n(ge)75 4347 y(codes.)216 4460 y(If)24 b Fq(L)d Fv(\022)f Fq(B)p FK(,)j(and)i Fq(L)f FK(and)h Fq(B)e FK(are)i(linear)g(codes,)h(the)f(last)g(cop)o(y)g(of)g Ft(L)f FK(is)g(omitted.)33 b(In)24 b(this)h(case)g(the)g(dimension)h (is)75 4573 y Fq(k)c Fo(=)e Fq(mk)334 4587 y Fm(L)388 4573 y Fo(+)13 b(\()p Fq(k)547 4587 y Fm(B)604 4573 y Fv(\000)g Fq(k)728 4587 y Fm(L)769 4573 y Fo(\))p FK(.)p 75 4699 1648 4 v 1764 4704 a FF(Example)p 2102 4699 V 75 4724 4 25 v 3747 4724 V 75 4823 4 100 v 188 4794 a(gap>)44 b(c)e(:=)h(HammingCode\()k(3,)c(GF\(2\))h(\);)p 3747 4823 V 75 4923 V 188 4893 a(a)f(linear)h([7,4,3]1)h(Hamming)g(\(3,2\))f (code)g(over)f(GF\(2\))p 3747 4923 V 75 5023 V 188 4993 a(gap>)h(d)e(:=)h(WholeSpaceCode\()48 b(7,)43 b(GF\(2\))h(\);)p 3747 5023 V 75 5122 V 188 5092 a(a)f(cyclic)h([7,7,1]0)h(whole)f(space) g(code)g(over)g(GF\(2\))p 3747 5122 V 75 5222 V 188 5192 a(gap>)g(e)e(:=)h(ExtendedDirectSumCo)q(de\()49 b(c,)43 b(d,)g(3)g(\);)p 3747 5222 V 75 5322 V 188 5292 a(a)g(linear)h ([21,15,1..3]2)j(3-fold)d(extended)h(direct)g(sum)e(code)p 3747 5322 V 75 5347 4 25 v 3747 5347 V 75 5350 3675 4 v Black Black eop end end %%Page: 112 112 TeXDict begin HPSdict begin 112 111 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.112) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(112)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.2.7) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(6.2.7)p 0.0 0.0 1.0 TeXcolorrgb 99 w(AmalgamatedDir)n(ectSumCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(AmalgamatedDirect)q (Sum)q(Cod)q(e\()53 b(c1,)47 b(c2[,)h(check])h(\))1332 b Fr(\(function\))p Black 216 799 a Ft(AmalgamatedDirectS)q(umC)q(ode) 34 b FK(returns)c(the)e(amalgamated)h(direct)g(sum)f(of)g(the)g(codes)h Ft(c1)f FK(and)h Ft(c2)p FK(.)42 b(The)75 912 y(amalgamated)d(direct)f (sum)f(code)h(consists)i(of)d(all)g(code)n(w)o(ords)j(of)d(the)g(form)h Fo(\()p Fq(u)10 b Fv(k)g FK(0)g Fv(k)g Fq(v)p Fo(\))39 b FK(if)e Fo(\()p Fq(u)10 b Fv(k)g FK(0)p Fo(\))30 b Fv(2)e Fq(c)3545 926 y Fr(1)3619 912 y FK(and)75 1024 y Fo(\()p FK(0)10 b Fv(k)g Fq(v)p Fo(\))27 b Fv(2)d Fq(c)447 1038 y Fr(2)515 1024 y FK(and)32 b(all)f(code)n(w)o(ords)i(of)e(the)h (form)f Fo(\()p Fq(u)10 b Fv(k)g FK(1)g Fv(k)g Fq(v)p Fo(\))34 b FK(if)d Fo(\()p Fq(u)10 b Fv(k)g FK(1)p Fo(\))27 b Fv(2)d Fq(c)2501 1038 y Fr(1)2569 1024 y FK(and)32 b Fo(\()p FK(1)10 b Fv(k)g Fq(v)p Fo(\))26 b Fv(2)e Fq(c)3102 1038 y Fr(2)3140 1024 y FK(.)51 b(The)31 b(result)h(is)g(a)75 1137 y(code)24 b(with)g(length)h Fq(n)20 b Fo(=)g Fq(n)905 1151 y Fr(1)956 1137 y Fo(+)13 b Fq(n)1085 1151 y Fr(2)1134 1137 y Fv(\000)g FK(1)23 b(and)h(size)g Fq(M)f Fv(\024)d Fq(M)1870 1151 y Fr(1)1920 1137 y Fv(\001)13 b Fq(M)2034 1151 y Fr(2)2071 1137 y Fp(=)p FK(2.)216 1250 y(If)27 b(both)i(codes)f(are)g(linear)l(,)i(the)o(y)d(will)g(\002rst)h(be)f (standardized,)32 b(with)27 b(information)j(symbols)f(in)e(the)h(last)g (and)75 1363 y(\002rst)23 b(coordinates)k(of)c(the)h(\002rst)f(and)h (second)i(code,)e(respecti)n(v)o(ely)-6 b(.)216 1476 y(If)41 b Ft(c1)g FK(is)g(a)f(normal)i(code)g(\(see)f Ft(IsNormalCode)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1954 1477 a SDict begin H.S end 1954 1477 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.4.5)p 0.0236 0.0894 0.6179 TeXcolorrgb 2135 1414 a SDict begin H.R end 2135 1414 a 2135 1476 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.4.5) cvn H.B /ANN pdfmark end 2135 1476 a Black FK(\)\))c(with)g(the)h (last)f(coordinate)j(acceptable)g(\(see)75 1589 y Ft (IsCoordinateAccept)q(abl)q(e)39 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1158 1590 a SDict begin H.S end 1158 1590 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.4.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 1339 1527 a SDict begin H.R end 1339 1527 a 1339 1589 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.4.3) cvn H.B /ANN pdfmark end 1339 1589 a Black FK(\)\),)e(and)e Ft(c2)f FK(is)g(a)f(normal)i(code)g(with)f(the)g (\002rst)g(coordinate)j(acceptable,)75 1702 y(then)25 b(the)g(co)o(v)o(ering)i(radius)f(of)e(the)h(ne)n(w)f(code)i(is)e Fq(r)f Fv(\024)e Fq(r)1848 1716 y Fr(1)1898 1702 y Fo(+)13 b Fq(r)2017 1716 y Fr(2)2055 1702 y FK(.)31 b(Ho)n(we)n(v)o(er)l(,)25 b(checking)i(whether)e(a)g(code)g(is)f(normal)75 1815 y(or)k(not)h(is)f(a)f(lot)i(of)f(w)o(ork,)h(and)f(almost)h(all)f(codes) i(seem)e(to)g(be)g(normal.)43 b(Therefore,)31 b(an)d(option)i Ft(check)f FK(can)f(be)75 1928 y(supplied.)35 b(If)25 b Ft(check)h FK(is)f(true,)g(then)h(the)f(codes)i(will)d(be)h(check)o (ed)i(for)e(normality)-6 b(.)35 b(If)25 b Ft(check)h FK(is)f(f)o(alse)h(or)e(omitted,)75 2041 y(then)k(the)f(codes)i(will)e (not)g(be)h(check)o(ed.)41 b(In)28 b(this)f(case)h(it)f(is)g(assumed)i (that)f(the)o(y)f(are)h(normal.)40 b(Acceptability)30 b(of)75 2154 y(the)25 b(last)h(and)f(\002rst)g(coordinate)j(of)d(the)h (\002rst)e(and)i(second)h(code,)f(respecti)n(v)o(ely)-6 b(,)28 b(is)d(in)g(the)g(last)g(case)h(also)g(assumed)75 2266 y(to)d(be)h(done)g(by)g(the)g(user)-5 b(.)p 75 2363 1648 4 v 1764 2368 a FF(Example)p 2102 2363 V 75 2388 4 25 v 3747 2388 V 75 2487 4 100 v 188 2458 a(gap>)44 b(c)e(:=)h(HammingCode\()k(3,)c(GF\(2\))h(\);)p 3747 2487 V 75 2587 V 188 2557 a(a)f(linear)h([7,4,3]1)h(Hamming)g(\(3,2\))f (code)g(over)f(GF\(2\))p 3747 2587 V 75 2687 V 188 2657 a(gap>)h(d)e(:=)h(ReedMullerCode\()48 b(1,)43 b(4)f(\);)p 3747 2687 V 75 2786 V 188 2756 a(a)h(linear)h([16,5,8]6)h(Reed-Muller)h (\(1,4\))f(code)e(over)h(GF\(2\))p 3747 2786 V 75 2886 V 188 2856 a(gap>)g(e)e(:=)h(DirectSumCode\()k(c,)c(d)g(\);)p 3747 2886 V 75 2986 V 188 2956 a(a)g(linear)h([23,9,3]7)h(direct)g(sum) e(code)p 3747 2986 V 75 3085 V 188 3055 a(gap>)h(f)e(:=)h (AmalgamatedDirectSu)q(mCo)q(de)q(\()48 b(c,)43 b(d)g(\);;)p 3747 3085 V 75 3185 V 188 3155 a(gap>)h(MinimumDistance\()j(f)c(\);;)p 3747 3185 V 75 3284 V 188 3255 a(gap>)h(CoveringRadius\()j(f)c(\);;)p 3747 3284 V 75 3384 V 188 3354 a(gap>)h(f;)p 3747 3384 V 75 3484 V 188 3454 a(a)f(linear)h([22,8,3]7)h(amalgamated)h(direct)f (sum)e(code)p 3747 3484 V 75 3509 4 25 v 3747 3509 V 75 3512 3675 4 v 75 3641 a SDict begin H.S end 75 3641 a 75 3641 a SDict begin 13.6 H.A end 75 3641 a 75 3641 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.6.2.8) cvn H.B /DEST pdfmark end 75 3641 a 116 x FJ(6.2.8)p 0.0 0.0 1.0 TeXcolorrgb 99 w(BlockwiseDir)n(ectSumCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3931 a Fs(\006)22 b Ft(BlockwiseDirectSu)q(mCo)q(de\()53 b(C1,)48 b(L1,)f(C2,)g(L2)h(\))1471 b Fr(\(function\))p Black 216 4157 a Ft(BlockwiseDirectSum)q(Cod)q(e)35 b FK(returns)d(a)d(subcode)k(of)c(the)i(direct)g(sum)f(of)f Ft(C1)h FK(and)h Ft(C2)p FK(.)48 b(The)29 b(\002elds)h(of)g Ft(C1)75 4270 y FK(and)22 b Ft(C2)g FK(must)g(be)g(same.)28 b(The)22 b(lists)g Ft(L1)g FK(and)g Ft(L2)g FK(are)g(tw)o(o)g(equally)i (long)e(with)g(elements)h(from)f(the)g(ambient)h(v)o(ector)75 4383 y(spaces)g(of)f Ft(C1)g FK(and)g Ft(C2)q FK(,)f(respecti)n(v)o (ely)-6 b(,)25 b Fq(or)f Ft(L1)e FK(and)g Ft(L2)g FK(are)g(tw)o(o)f (equally)j(long)f(lists)f(containing)j(codes.)k(The)22 b(union)75 4496 y(of)h(the)h(codes)h(in)e Ft(L1)h FK(and)g Ft(L2)f FK(must)h(be)f Ft(C1)h FK(and)g Ft(C2)q FK(,)e(respecti)n(v)o (ely)-6 b(.)216 4609 y(In)24 b(the)f(\002rst)h(case,)f(the)h(blockwise) i(direct)e(sum)g(code)g(is)f(de\002ned)i(as)1201 4787 y Fq(bd)5 b(s)21 b Fo(=)1488 4707 y Fb([)1443 4890 y Fr(1)p Fh(\024)p Fm(i)p Fh(\024)p Fl(`)1626 4787 y Fo(\()-5 b Fq(C)1715 4801 y Fr(1)1765 4787 y Fo(+)13 b(\()p Fq(L)1935 4801 y Fr(1)1971 4787 y Fo(\))2006 4801 y Fm(i)2029 4787 y Fo(\))g Fv(\010)g Fo(\()-5 b Fq(C)2250 4801 y Fr(2)2299 4787 y Fo(+)13 b(\()p Fq(L)2469 4801 y Fr(2)2506 4787 y Fo(\))2541 4801 y Fm(i)2564 4787 y Fo(\))p Fp(;)75 5044 y FK(where)24 b Fp(`)e FK(is)i(the)g(length)h(of)e Ft(L1)g FK(and)h Ft(L2)q FK(,)f(and)h Fv(\010)e FK(is)h(the)h(direct)h (sum.)216 5157 y(In)f(the)f(second)j(case,)d(it)h(is)f(de\002ned)h(as) 1423 5335 y Fq(bd)5 b(s)22 b Fo(=)1710 5255 y Fb([)1665 5439 y Fr(1)p Fh(\024)p Fm(i)p Fh(\024)p Fl(`)1848 5335 y Fo(\(\()p Fq(L)1969 5349 y Fr(1)2006 5335 y Fo(\))2041 5349 y Fm(i)2077 5335 y Fv(\010)13 b Fo(\()p Fq(L)2247 5349 y Fr(2)2283 5335 y Fo(\))2318 5349 y Fm(i)2341 5335 y Fo(\))p Fp(:)75 5592 y FK(The)23 b(length)i(of)f(the)f(ne)n(w)g(code) i(is)e Fq(n)e Fo(=)e Fq(n)1372 5606 y Fr(1)1423 5592 y Fo(+)13 b Fq(n)1552 5606 y Fr(2)1589 5592 y FK(.)p Black Black eop end end %%Page: 113 113 TeXDict begin HPSdict begin 113 112 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.113) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(113)p Black 75 399 1648 4 v 1764 404 a FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188 493 a(gap>)44 b(C1)f(:=)g(HammingCode\()j(3,)d(GF\(2\))h (\);;)p 3747 523 V 75 623 V 188 593 a(gap>)g(C2)f(:=)g (EvenWeightSubcode\()48 b(WholeSpaceCode\()g(6,)43 b(GF\(2\))h(\))e (\);;)p 3747 623 V 75 722 V 188 692 a(gap>)i(BlockwiseDirectSumCod)q (e\()49 b(C1,)43 b([[)g(0,0,0,0,0,0,0)k(],[)c(1,0,1,0,1,0,0)k(]],)p 3747 722 V 75 822 V 188 792 a(>)c(C2,)g([[)g(0,0,0,0,0,0)j(],[)d (1,0,1,0,1,0)k(]])c(\);)p 3747 822 V 75 922 V 188 892 a(a)g(\(13,1024,1..13\)1..2)48 b(blockwise)e(direct)e(sum)g(code)p 3747 922 V 75 946 4 25 v 3747 946 V 75 949 3675 4 v Black Black eop end end %%Page: 114 114 TeXDict begin HPSdict begin 114 113 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.114) cvn H.B /DEST pdfmark end 75 100 a Black Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (chapter.7) cvn H.B /DEST pdfmark end 75 307 a 714 x Fw(Chapter)44 b(7)p 0.0 0.0 1.0 TeXcolorrgb 75 1436 a FA(Bounds)52 b(on)f(codes,)h(special)g(matrices)g(and)75 1685 y(miscellaneous)h(functions)p Black 75 2130 a FK(In)33 b(this)h(chapter)h(we)e(describe)i(functions)h(that)e(determine)h (bounds)h(on)d(the)h(size)g(and)g(minimum)f(distance)i(of)75 2243 y(codes)22 b(\(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 625 2244 a SDict begin H.S end 625 2244 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 738 2181 a SDict begin H.R end 738 2181 a 738 2243 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.7.1) cvn H.B /ANN pdfmark end 738 2243 a Black FK(\),)f(functions)i(that)f (determine)g(bounds)h(on)d(the)h(size)h(and)f(co)o(v)o(ering)h(radius)g (of)f(codes)h(\(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 75 2357 a SDict begin H.S end 75 2357 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 188 2294 a SDict begin H.R end 188 2294 a 188 2356 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.7.2) cvn H.B /ANN pdfmark end 188 2356 a Black FK(\),)j(functions)j(that)d(w) o(ork)g(with)g(special)i(matrices)f Fy(GU)m(A)-6 b(V)f(A)23 b FK(needs)k(for)e(se)n(v)o(eral)h(codes)g(\(see)g(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 3428 2357 a SDict begin H.S end 3428 2357 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 3541 2294 a SDict begin H.R end 3541 2294 a 3541 2356 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.7.3) cvn H.B /ANN pdfmark end 3541 2356 a Black FK(\),)f(and)75 2469 y(constructing)i(codes)e(or)e (performing)j(calculations)h(with)c(codes)i(\(see)f(Section)p 0.0236 0.0894 0.6179 TeXcolorrgb 2643 2470 a SDict begin H.S end 2643 2470 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.5)p 0.0236 0.0894 0.6179 TeXcolorrgb 2756 2407 a SDict begin H.R end 2756 2407 a 2756 2469 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (section.7.5) cvn H.B /ANN pdfmark end 2756 2469 a Black FK(\).)75 2632 y SDict begin H.S end 75 2632 a 75 2632 a SDict begin 13.6 H.A end 75 2632 a 75 2632 a SDict begin [ /View [/XYZ H.V] /Dest (section.7.1) cvn H.B /DEST pdfmark end 75 2632 a 130 x FM(7.1)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Distance)30 b(bounds)h(on)f(codes)p Black 75 2969 a FK(This)18 b(section)j(describes)g(the)e(functions)i (that)e(calculate)i(estimates)f(for)f(upper)g(bounds)i(on)d(the)h(size) g(and)g(minimum)75 3082 y(distance)32 b(of)d(codes.)49 b(Se)n(v)o(eral)30 b(algorithms)h(are)f(kno)n(wn)g(to)g(compute)h(a)e (lar)n(gest)j(number)e(of)g(w)o(ords)g(a)f(code)i(can)75 3195 y(ha)n(v)o(e)g(with)g(gi)n(v)o(en)g(length)h(and)f(minimum)g (distance.)52 b(It)31 b(is)f(important)j(ho)n(we)n(v)o(er)e(to)f (understand)k(that)d(in)g(some)75 3307 y(cases)c(the)f(true)g(upper)h (bound)g(is)f(unkno)n(wn.)36 b(A)25 b(code)h(which)g(has)g(a)g(size)g (equalto)h(the)f(calculated)j(upper)e(bound)75 3420 y(may)c(not)h(ha)n (v)o(e)g(been)h(found.)30 b(Ho)n(we)n(v)o(er)l(,)23 b(codes)i(that)f (ha)n(v)o(e)g(a)f(lar)n(ger)i(size)f(do)g(not)g(e)o(xist.)216 3533 y(A)e(second)j(w)o(ay)e(to)g(obtain)h(bounds)h(is)e(a)g(table.)30 b(In)23 b Fy(GU)m(A)-6 b(V)f(A)p FK(,)21 b(an)i(e)o(xtensi)n(v)o(e)i (table)f(is)f(implemented)i(for)e(linear)75 3646 y(codes)30 b(o)o(v)o(er)e Fq(GF)7 b Fo(\()p FK(2)p Fo(\))p FK(,)30 b Fq(GF)7 b Fo(\()p FK(3)p Fo(\))28 b FK(and)h Fq(GF)7 b Fo(\()p FK(4)p Fo(\))p FK(.)44 b(It)29 b(contains)h(bounds)h(on)d (the)h(minimum)g(distance)h(for)f(gi)n(v)o(en)g(w)o(ord)75 3759 y(length)34 b(and)e(dimension.)57 b(It)32 b(contains)j(entries)f (for)e(w)o(ord)h(lengths)h(less)f(than)g(or)f(equal)h(to)f(257,)j(243)e (and)g(256)75 3872 y(for)27 b(codes)i(o)o(v)o(er)e Fq(GF)7 b Fo(\()p FK(2)p Fo(\))p FK(,)28 b Fq(GF)7 b Fo(\()p FK(3)p Fo(\))27 b FK(and)h Fq(GF)7 b Fo(\()p FK(4)p Fo(\))27 b FK(respecti)n(v)o(ely)-6 b(.)43 b(These)28 b(entries)g(were)g (obtained)h(from)e(Brouwer')-5 b(s)75 3985 y(tables)30 b(as)e(of)h(11)g(May)f(2006.)45 b(F)o(or)28 b(the)h(latest)h (information,)i(please)e(see)f(A.)e(E.)g(Brouwer')-5 b(s)30 b(tables)f([)p 0.0236 0.6179 0.0894 TeXcolorrgb 3373 3986 a SDict begin H.S end 3373 3986 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(Bro06)p 0.0236 0.6179 0.0894 TeXcolorrgb 3599 3923 a SDict begin H.R end 3599 3923 a 3599 3985 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.Br) cvn H.B /ANN pdfmark end 3599 3985 a Black 2 w FK(])f(on)75 4098 y(the)c(internet.)216 4211 y(Firstly)-6 b(,)80 b(we)67 b(describe)k(functions)g(that)d(compute)i(speci\002c)f (upper)h(bounds)g(on)e(the)h(code)g(size)75 4324 y(\(see)46 b Ft(UpperBoundSingleton)51 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1221 4325 a SDict begin H.S end 1221 4325 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 1402 4262 a SDict begin H.R end 1402 4262 a 1402 4324 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.1) cvn H.B /ANN pdfmark end 1402 4324 a Black FK(\),)f Ft(UpperBoundHamming)h FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2368 4325 a SDict begin H.S end 2368 4325 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 2549 4262 a SDict begin H.R end 2549 4262 a 2549 4324 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.2) cvn H.B /ANN pdfmark end 2549 4324 a Black FK(\),)g Ft(UpperBoundJohnson)f FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3515 4325 a SDict begin H.S end 3515 4325 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 3696 4262 a SDict begin H.R end 3696 4262 a 3696 4324 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.3) cvn H.B /ANN pdfmark end 3696 4324 a Black FK(\),)75 4437 y Ft(UpperBoundPlotkin)29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 916 4438 a SDict begin H.S end 916 4438 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 1097 4375 a SDict begin H.R end 1097 4375 a 1097 4437 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.4) cvn H.B /ANN pdfmark end 1097 4437 a Black FK(\),)24 b Ft(UpperBoundElias)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1922 4438 a SDict begin H.S end 1922 4438 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.5)p 0.0236 0.0894 0.6179 TeXcolorrgb 2103 4375 a SDict begin H.R end 2103 4375 a 2103 4437 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.5) cvn H.B /ANN pdfmark end 2103 4437 a Black FK(\))c(and)g Ft(UpperBoundGriesmer)29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3198 4438 a SDict begin H.S end 3198 4438 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.6)p 0.0236 0.0894 0.6179 TeXcolorrgb 3379 4375 a SDict begin H.R end 3379 4375 a 3379 4437 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.6) cvn H.B /ANN pdfmark end 3379 4437 a Black FK(\)\).)216 4549 y(Ne)o(xt)37 b(we)g(describe)i(a)e(function)i(that)f (computes)h Fy(GU)m(A)-6 b(V)f(A)p FK(')i(s)36 b(best)i(upper)h(bound)g (on)e(the)h(code)g(size)g(\(see)75 4662 y Ft(UpperBound)26 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 591 4663 a SDict begin H.S end 591 4663 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.8)p 0.0236 0.0894 0.6179 TeXcolorrgb 772 4600 a SDict begin H.R end 772 4600 a 772 4662 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.8) cvn H.B /ANN pdfmark end 772 4662 a Black FK(\)\).)216 4775 y(Then)e(we)g(describe) i(tw)o(o)e(functions)j(that)d(compute)i(a)e(lo)n(wer)g(and)g(upper)i (bound)f(on)g(the)f(minimum)g(distance)75 4888 y(of)f(a)h(code)g(\(see) g Ft(LowerBoundMinimumD)q(ist)q(anc)q(e)29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1812 4890 a SDict begin H.S end 1812 4890 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(7.1.9)p 0.0236 0.0894 0.6179 TeXcolorrgb 1993 4826 a SDict begin H.R end 1993 4826 a 1993 4888 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.9) cvn H.B /ANN pdfmark end 1993 4888 a Black FK(\))24 b(and)g Ft(UpperBoundMinimumDi)q(st)q(anc)q(e)29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3413 4889 a SDict begin H.S end 3413 4889 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.12)p 0.0236 0.0894 0.6179 TeXcolorrgb 3639 4826 a SDict begin H.R end 3639 4826 a 3639 4888 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.12) cvn H.B /ANN pdfmark end 3639 4888 a Black FK(\)\).)216 5001 y(Finally)-6 b(,)21 b(we)d(describe)j(a)e(function)i(that)e(returns)i(a)e(lo)n(wer)g (and)g(upper)h(bound)h(on)e(the)g(minimum)g(distance)i(with)75 5114 y(gi)n(v)o(en)k(parameters)i(and)f(a)e(description)k(of)d(ho)n(w)f (the)h(bounds)i(were)e(obtained)i(\(see)e Ft(BoundsMinimumDist)q(anc)q (e)75 5227 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 5228 a SDict begin H.S end 105 5228 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.13)p 0.0236 0.0894 0.6179 TeXcolorrgb 331 5165 a SDict begin H.R end 331 5165 a 331 5227 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.13) cvn H.B /ANN pdfmark end 331 5227 a Black FK(\)\).)p Black 1844 5841 a(114)p Black eop end end %%Page: 115 115 TeXDict begin HPSdict begin 115 114 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.115) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(115)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.1) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(7.1.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(UpperBoundSingleton)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(UpperBoundSinglet)q(on\()53 b(n,)47 b(d,)g(q)g(\))1935 b Fr(\(function\))p Black 216 799 a Ft(UpperBoundSingleto)q(n)31 b FK(returns)d(the)e(Singleton)h (bound)g(for)f(a)g(code)g(of)g(length)h Ft(n)q FK(,)e(minimum)h (distance)i Ft(d)75 912 y FK(o)o(v)o(er)22 b(a)g(\002eld)g(of)g(size)g Ft(q)q FK(.)27 b(This)22 b(bound)h(is)f(based)i(on)e(the)g(shortening)j (of)d(codes.)30 b(By)21 b(shortening)k(an)d Fo(\()p Fq(n)p Fp(;)10 b Fq(M)t Fp(;)g Fq(d)5 b Fo(\))22 b FK(code)75 1024 y Fq(d)c Fv(\000)13 b FK(1)22 b(times,)i(an)f Fo(\()p Fq(n)13 b Fv(\000)g Fq(d)18 b Fo(+)13 b FK(1)p Fp(;)d Fq(M)t Fp(;)g FK(1)p Fo(\))23 b FK(code)h(results,)h(with)e Fq(M)h Fv(\024)c Fq(q)2159 991 y Fm(n)p Fh(\000)p Fm(d)s Fk(+)p Fr(1)2392 1024 y FK(\(see)k Ft(ShortenedCode)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3217 1026 a SDict begin H.S end 3217 1026 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(6.1.9)p 0.0236 0.0894 0.6179 TeXcolorrgb 3398 962 a SDict begin H.R end 3398 962 a 3398 1024 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.9) cvn H.B /ANN pdfmark end 3398 1024 a Black FK(\)\).)h(Thus)1677 1208 y Fq(M)23 b Fv(\024)d Fq(q)1912 1171 y Fm(n)p Fh(\000)p Fm(d)s Fk(+)p Fr(1)2123 1208 y Fp(:)98 1392 y FK(Codes)k(that)g(meet)f (this)h(bound)h(are)f(called)h Fq(maximum)e(distance)j(separ)o(able)g FK(\(see)e Ft(IsMDSCode)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3205 1393 a SDict begin H.S end 3205 1393 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.3.7)p 0.0236 0.0894 0.6179 TeXcolorrgb 3386 1330 a SDict begin H.R end 3386 1330 a 3386 1392 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.3.7) cvn H.B /ANN pdfmark end 3386 1392 a Black FK(\)\).)p 75 1493 1648 4 v 1764 1498 a FF(Example)p 2102 1493 V 75 1518 4 25 v 3747 1518 V 75 1618 4 100 v 188 1588 a(gap>)44 b(UpperBoundSingleton\(4)q(,)k(3,)43 b(5\);)p 3747 1618 V 75 1717 V 188 1687 a(25)p 3747 1717 V 75 1817 V 188 1787 a(gap>)h(C)e(:=)h(ReedSolomonCode\(4,3)q(\);;)49 b(Size\(C\);)p 3747 1817 V 75 1917 V 188 1887 a(25)p 3747 1917 V 75 2016 V 188 1986 a(gap>)44 b(IsMDSCode\(C\);)p 3747 2016 V 75 2116 V 188 2086 a(true)p 3747 2116 V 75 2141 4 25 v 3747 2141 V 75 2144 3675 4 v 75 2353 a SDict begin H.S end 75 2353 a 75 2353 a SDict begin 13.6 H.A end 75 2353 a 75 2353 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.2) cvn H.B /DEST pdfmark end 75 2353 a 116 x FJ(7.1.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(UpperBoundHamming)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2643 a Fs(\006)22 b Ft(UpperBoundHamming)q(\()52 b(n,)47 b(d,)g(q)g(\))2028 b Fr(\(function\))p Black 216 2869 a FK(The)29 b(Hamming)h(bound)h (\(also)g(kno)n(wn)f(as)f(the)h Fq(spher)m(e)h(pac)n(king)h(bound)r FK(\))g(returns)f(an)f(upper)h(bound)g(on)f(the)75 2982 y(size)21 b(of)f(a)g(code)h(of)g(length)h Ft(n)p FK(,)e(minimum)g (distance)i Ft(d)q FK(,)e(o)o(v)o(er)g(a)g(\002eld)g(of)h(size)g Ft(q)p FK(.)27 b(The)20 b(Hamming)g(bound)i(is)e(obtained)75 3095 y(by)k(di)n(viding)i(the)e(contents)i(of)e(the)g(entire)i(space)f Fq(GF)6 b Fo(\()p Fq(q)p Fo(\))1905 3062 y Fm(n)1967 3095 y FK(by)24 b(the)g(contents)i(of)e(a)g(ball)g(with)g(radius)h Fv(b)p Fo(\()p Fq(d)19 b Fv(\000)13 b FK(1)p Fo(\))p Fp(=)p FK(2)p Fv(c)p FK(.)75 3208 y(As)23 b(all)g(these)i(balls)f(are)g (disjoint,)h(the)o(y)f(can)g(ne)n(v)o(er)g(contain)i(more)d(than)h(the) g(whole)g(v)o(ector)h(space.)1668 3430 y Fq(M)e Fv(\024)1954 3369 y Fq(q)1999 3336 y Fm(n)p 1868 3409 255 4 v 1863 3493 a Fq(V)12 b Fo(\()p Fq(n)p Fp(;)e Fq(e)p Fo(\))2132 3430 y Fp(;)75 3663 y FK(where)32 b Fq(M)j FK(is)d(the)g(maxmimum)g (number)h(of)f(code)n(w)o(ords)i(and)27 b Fq(V)12 b Fo(\()p Fq(n)p Fp(;)e Fq(e)p Fo(\))33 b FK(is)e(equal)j(to)e(the)g(contents)i (of)e(a)g(ball)g(of)75 3776 y(radius)d Fq(e)f FK(\(see)g Ft(SphereContent)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1225 3777 a SDict begin H.S end 1225 3777 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.5.5)p 0.0236 0.0894 0.6179 TeXcolorrgb 1406 3714 a SDict begin H.R end 1406 3714 a 1406 3776 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.5.5) cvn H.B /ANN pdfmark end 1406 3776 a Black FK(\)\).)43 b(This)28 b(bound)h(is)f(useful)h(for)g(small)f(v)n(alues)h(of)f Ft(d)p FK(.)41 b(Codes)29 b(for)f(which)75 3888 y(equality)e(holds)e (are)g(called)h Fq(perfect)i FK(\(see)d Ft(IsPerfectCode)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2085 3889 a SDict begin H.S end 2085 3889 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(4.3.6)p 0.0236 0.0894 0.6179 TeXcolorrgb 2266 3826 a SDict begin H.R end 2266 3826 a 2266 3888 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.4.3.6) cvn H.B /ANN pdfmark end 2266 3888 a Black FK(\)\).)p 75 3991 1648 4 v 1764 3996 a FF(Example)p 2102 3991 V 75 4015 4 25 v 3747 4015 V 75 4115 4 100 v 188 4085 a(gap>)44 b(UpperBoundHamming\() k(15,)43 b(3,)g(2)g(\);)p 3747 4115 V 75 4215 V 188 4185 a(2048)p 3747 4215 V 75 4314 V 188 4284 a(gap>)h(C)e(:=)h (HammingCode\()k(4,)c(GF\(2\))h(\);)p 3747 4314 V 75 4414 V 188 4384 a(a)f(linear)h([15,11,3]1)i(Hamming)e(\(4,2\))h(code)e (over)h(GF\(2\))p 3747 4414 V 75 4514 V 188 4484 a(gap>)g(Size\()g(C)e (\);)p 3747 4514 V 75 4613 V 188 4583 a(2048)p 3747 4613 V 75 4638 4 25 v 3747 4638 V 75 4641 3675 4 v 75 4850 a SDict begin H.S end 75 4850 a 75 4850 a SDict begin 13.6 H.A end 75 4850 a 75 4850 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.3) cvn H.B /DEST pdfmark end 75 4850 a 116 x FJ(7.1.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(UpperBoundJ)o(ohnson)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5141 a Fs(\006)22 b Ft(UpperBoundJohnson)q(\()52 b(n,)47 b(d)g(\))2167 b Fr(\(function\))p Black 216 5367 a FK(The)34 b(Johnson)i(bound)f(is)f (an)f(impro)o(v)o(ed)i(v)o(ersion)h(of)d(the)h(Hamming)g(bound)h(\(see) g Ft(UpperBoundHamming)75 5479 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 5480 a SDict begin H.S end 105 5480 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 286 5417 a SDict begin H.R end 286 5417 a 286 5479 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.2) cvn H.B /ANN pdfmark end 286 5479 a Black FK(\)\).)29 b(In)21 b(addition)i(to)e(the)h(Hamming)f(bound,)h(it)f(tak)o(es)h (into)g(account)h(the)f(elements)g(of)f(the)h(space)g(outside)h(the)75 5592 y(balls)h(of)g(radius)h Fq(e)e FK(around)i(the)f(elements)h(of)e (the)h(code.)30 b(The)23 b(Johnson)i(bound)g(only)g(w)o(orks)f(for)g (binary)h(codes.)p Black Black eop end end %%Page: 116 116 TeXDict begin HPSdict begin 116 115 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.116) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(116)p Black 75 399 1648 4 v 1764 404 a FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188 493 a(gap>)44 b(UpperBoundJohnson\()k(13,)43 b(5)g(\);)p 3747 523 V 75 623 V 188 593 a(77)p 3747 623 V 75 722 V 188 692 a(gap>)h(UpperBoundHamming\()k(13,)43 b(5,)g(2\);)p 3747 722 V 75 822 V 188 792 a(89)128 b(#)42 b(in)h(this)h(case)g(the)f(Johnson)i(bound)f(is)f(better)p 3747 822 V 75 847 4 25 v 3747 847 V 75 850 3675 4 v 75 1083 a SDict begin H.S end 75 1083 a 75 1083 a SDict begin 13.6 H.A end 75 1083 a 75 1083 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.4) cvn H.B /DEST pdfmark end 75 1083 a 116 x FJ(7.1.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(UpperBoundPlotkin)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1373 a Fs(\006)22 b Ft(UpperBoundPlotkin)q(\()52 b(n,)47 b(d,)g(q)g(\))2028 b Fr(\(function\))p Black 216 1599 a FK(The)36 b(function)j Ft(UpperBoundPlotkin)j FK(calculates)d(the)d(sum)h(of)f(the)h (distances)i(of)d(all)h(ordered)h(pairs)f(of)75 1712 y(dif)n(ferent)26 b(code)n(w)o(ords.)33 b(It)24 b(is)g(based)i(on)e (the)h(f)o(act)g(that)g(the)f(minimum)g(distance)j(is)d(at)g(most)g (equal)i(to)e(the)h(a)n(v)o(erage)75 1825 y(distance.)31 b(It)23 b(is)g(a)h(good)g(bound)h(if)e(the)h(weights)h(of)e(the)h(code) n(w)o(ords)h(do)f(not)g(dif)n(fer)g(much.)29 b(It)23 b(results)j(in:)1525 2068 y Fq(M)d Fv(\024)1970 2007 y Fq(d)p 1725 2047 540 4 v 1725 2131 a(d)18 b Fv(\000)13 b Fo(\()p FK(1)g Fv(\000)g FK(1)p Fp(=)p Fq(q)p Fo(\))p Fq(n)2275 2068 y Fp(;)75 2321 y FK(where)22 b Fq(M)i FK(is)e(the)g(maximum)g(number)h(of)e(code)n(w)o(ords.)30 b(In)22 b(this)h(case,)f Ft(d)f FK(must)h(be)g(lar)n(ger)i(than)e Fo(\()p FK(1)11 b Fv(\000)g FK(1)p Fp(=)p Fq(q)p Fo(\))p Fq(n)p FK(,)24 b(b)n(ut)e(by)75 2434 y(shortening)27 b(the)c(code,)h(the)g(case)g Fq(d)51 b Fv(h)46 b Fo(\()p FK(1)13 b Fv(\000)g FK(1)p Fp(=)p Fq(q)p Fo(\))p Fq(n)24 b FK(is)g(co)o(v)o(ered.)p 75 2560 1648 4 v 1764 2565 a FF(Example)p 2102 2560 V 75 2585 4 25 v 3747 2585 V 75 2684 4 100 v 188 2654 a(gap>)44 b(UpperBoundPlotkin\()k(15,)43 b(7,)g(2)g(\);)p 3747 2684 V 75 2784 V 188 2754 a(32)p 3747 2784 V 75 2884 V 188 2854 a(gap>)h(C)e(:=)h(BCHCode\()i(15,)f(7,)f (GF\(2\))h(\);)p 3747 2884 V 75 2983 V 188 2953 a(a)f(cyclic)h ([15,5,7]5)h(BCH)f(code,)g(delta=7,)h(b=1)e(over)h(GF\(2\))p 3747 2983 V 75 3083 V 188 3053 a(gap>)g(Size\(C\);)p 3747 3083 V 75 3182 V 188 3153 a(32)p 3747 3182 V 75 3282 V 188 3252 a(gap>)g(WeightDistribution\(C\))q(;)p 3747 3282 V 75 3382 V 188 3352 a([)f(1,)g(0,)g(0,)g(0,)g(0,)g(0,)g(0,)g (15,)g(15,)g(0,)h(0,)f(0,)g(0,)g(0,)g(0,)g(1)f(])p 3747 3382 V 75 3407 4 25 v 3747 3407 V 75 3410 3675 4 v 75 3643 a SDict begin H.S end 75 3643 a 75 3643 a SDict begin 13.6 H.A end 75 3643 a 75 3643 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.5) cvn H.B /DEST pdfmark end 75 3643 a 116 x FJ(7.1.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(UpperBoundElias)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3933 a Fs(\006)22 b Ft(UpperBoundElias\()53 b(n,)47 b(d,)g(q)f(\))2121 b Fr(\(function\))p Black 216 4159 a FK(The)29 b(Elias)f(bound)j(is)d(an) h(impro)o(v)o(ement)i(of)d(the)h(Plotkin)h(bound)h(\(see)e Ft(UpperBoundPlotkin)34 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3373 4160 a SDict begin H.S end 3373 4160 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 3554 4097 a SDict begin H.R end 3554 4097 a 3554 4159 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.4) cvn H.B /ANN pdfmark end 3554 4159 a Black FK(\)\))c(for)75 4272 y(lar)n(ge)38 b(codes.)71 b(Subcodes)38 b(are)g(used)f(to)g(decrease)i(the)f(size)f(of)g(the)h(code,)j(in)36 b(this)i(case)g(the)f(subcode)i(of)e(all)75 4385 y(code)n(w)o(ords)28 b(within)e(a)g(certain)i(ball.)36 b(This)26 b(bound)i(is)d(useful)j (for)e(lar)n(ge)h(codes)g(with)f(relati)n(v)o(ely)i(small)e(minimum)75 4498 y(distances.)p 75 4602 1648 4 v 1764 4607 a FF(Example)p 2102 4602 V 75 4626 4 25 v 3747 4626 V 75 4726 4 100 v 188 4696 a(gap>)44 b(UpperBoundPlotkin\()k(16,)43 b(3,)g(2)g(\);)p 3747 4726 V 75 4826 V 188 4796 a(12288)p 3747 4826 V 75 4925 V 188 4895 a(gap>)h(UpperBoundElias\()j(16,)d(3,)f(2)f(\);)p 3747 4925 V 75 5025 V 188 4995 a(10280)p 3747 5025 V 75 5125 V 188 5095 a(gap>)i(UpperBoundElias\()j(20,)d(10,)f(3)g(\);)p 3747 5125 V 75 5224 V 188 5194 a(16255)p 3747 5224 V 75 5249 4 25 v 3747 5249 V 75 5252 3675 4 v Black Black eop end end %%Page: 117 117 TeXDict begin HPSdict begin 117 116 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.117) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(117)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.6) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(7.1.6)p 0.0 0.0 1.0 TeXcolorrgb 99 w(UpperBoundGriesmer)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(UpperBoundGriesme)q(r\()53 b(n,)47 b(d,)g(q)g(\))1981 b Fr(\(function\))p Black 216 799 a FK(The)23 b(Griesmer)g(bound)i(is)d(v)n(alid)i(only)g(for)f (linear)h(codes.)30 b(It)23 b(is)f(obtained)k(by)d(counting)i(the)e (number)h(of)f(equal)75 912 y(symbols)31 b(in)g(each)g(ro)n(w)e(of)h (the)h(generator)h(matrix)f(of)f(the)h(code.)49 b(By)30 b(omitting)h(the)g(coordinates)i(in)e(which)f(all)75 1024 y(ro)n(ws)g(ha)n(v)o(e)h(a)f(zero,)j(a)c(smaller)j(code)f (results.)51 b(The)30 b(Griesmer)h(bound)h(is)e(obtained)i(by)f (repeating)i(this)e(proces)75 1137 y(until)24 b(a)g(tri)n(vial)g(code)h (is)e(left)h(in)f(the)h(end.)p 75 1199 1648 4 v 1764 1204 a FF(Example)p 2102 1199 V 75 1224 4 25 v 3747 1224 V 75 1324 4 100 v 188 1294 a(gap>)44 b(UpperBoundGriesmer\()k(13,)c(5,) f(2)g(\);)p 3747 1324 V 75 1424 V 188 1394 a(64)p 3747 1424 V 75 1523 V 188 1493 a(gap>)h(UpperBoundGriesmer\()k(18,)c(9,)f(2) g(\);)p 3747 1523 V 75 1623 V 188 1593 a(8)339 b(#)43 b(the)g(maximum)i(number)f(of)f(words)h(for)g(a)e(linear)j(code)e(is)g (8)p 3747 1623 V 75 1722 V 188 1693 a(gap>)h(Size\()g(PuncturedCode\()j (HadamardCode\()g(20,)c(1)g(\))f(\))h(\);)p 3747 1722 V 75 1822 V 188 1792 a(20)297 b(#)43 b(this)g(non-linear)j(code)e(has)f (20)g(elements)p 3747 1822 V 75 1847 4 25 v 3747 1847 V 75 1850 3675 4 v 75 2034 a SDict begin H.S end 75 2034 a 75 2034 a SDict begin 13.6 H.A end 75 2034 a 75 2034 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.7) cvn H.B /DEST pdfmark end 75 2034 a 116 x FJ(7.1.7)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsGriesmerCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2324 a Fs(\006)22 b Ft(IsGriesmerCode\()52 b(C)47 b(\))2445 b Fr(\(function\))p Black 216 2550 a Ft(IsGriesmerCode)35 b FK(returns)e(`true')f(if)e(a)g(linear)i(code)g Ft(C)e FK(is)h(a)f(Griesmer)i(code,)h(and)e(`f)o(alse')h(otherwise.)52 b(A)75 2663 y(code)24 b(is)g(called)h Fq(Griesmer)h FK(if)d(its)h (length)h(satis\002es)1512 2892 y Fq(n)c Fo(=)f Fq(g)p Fo([)p Fq(k)r Fp(;)10 b Fq(d)5 b Fo(])21 b(=)2003 2795 y Fm(k)q Fh(\000)p Fr(1)2014 2912 y Fa(\345)2009 2985 y Fm(i)p Fk(=)p Fr(0)2119 2892 y Fv(d)2178 2831 y Fq(d)p 2169 2871 69 4 v 2169 2955 a(q)2214 2928 y Fm(i)2247 2892 y Fv(e)p Fp(:)p 75 3115 1648 4 v 1764 3120 a FF(Example)p 2102 3115 V 75 3140 4 25 v 3747 3140 V 75 3240 4 100 v 188 3210 a(gap>)44 b(IsGriesmerCode\()j(HammingCode\()g(3,)c(GF\(2\)) h(\))e(\);)p 3747 3240 V 75 3339 V 188 3310 a(true)p 3747 3339 V 75 3439 V 188 3409 a(gap>)i(IsGriesmerCode\()j(BCHCode\()e (17,)f(2,)f(GF\(2\))h(\))e(\);)p 3747 3439 V 75 3539 V 188 3509 a(false)p 3747 3539 V 75 3564 4 25 v 3747 3564 V 75 3567 3675 4 v 75 3750 a SDict begin H.S end 75 3750 a 75 3750 a SDict begin 13.6 H.A end 75 3750 a 75 3750 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.8) cvn H.B /DEST pdfmark end 75 3750 a 117 x FJ(7.1.8)p 0.0 0.0 1.0 TeXcolorrgb 99 w(UpperBound)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4041 a Fs(\006)22 b Ft(UpperBound\()51 b(n,)c(d,)g(q)g(\))2352 b Fr(\(function\))p Black 216 4267 a Ft(UpperBound)42 b FK(returns)e(the)f(best)g(kno)n(wn)g(upper)h(bound)g Fq(A)p Fo(\()p Fq(n)p Fp(;)10 b Fq(d)5 b Fo(\))39 b FK(for)g(the)g (size)g(of)g(a)f(code)h(of)g(length)h Ft(n)p FK(,)75 4380 y(minimum)32 b(distance)i Ft(d)d FK(o)o(v)o(er)h(a)g(\002eld)g(of) f(size)i Ft(q)p FK(.)53 b(The)32 b(function)i Ft(UpperBound)h FK(\002rst)c(checks)j(for)e(tri)n(vial)h(cases)75 4493 y(\(lik)o(e)39 b Fq(d)34 b Fo(=)28 b FK(1)37 b(or)i Fq(n)28 b Fo(=)g Fq(d)5 b FK(\),)42 b(and)c(if)g(the)h(v)n(alue)g(is)f(in)g (the)g(b)n(uilt-in)i(table.)74 b(Then)38 b(it)g(calculates)j(the)d (minimum)75 4606 y(v)n(alue)43 b(of)f(the)h(upper)g(bound)g(using)h (the)e(methods)i(of)e(Singleton)i(\(see)e Ft(UpperBoundSinglet)q(on)48 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3485 4607 a SDict begin H.S end 3485 4607 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 3666 4544 a SDict begin H.R end 3666 4544 a 3666 4606 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.1) cvn H.B /ANN pdfmark end 3666 4606 a Black FK(\)\),)75 4718 y(Hamming)36 b(\(see)h Ft(UpperBoundHamming)42 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1510 4719 a SDict begin H.S end 1510 4719 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 1691 4656 a SDict begin H.R end 1691 4656 a 1691 4718 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.2) cvn H.B /ANN pdfmark end 1691 4718 a Black FK(\)\),)e(Johnson)f(\(see)d Ft(UpperBoundJohnson)42 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3183 4719 a SDict begin H.S end 3183 4719 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 3364 4656 a SDict begin H.R end 3364 4656 a 3364 4718 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.3) cvn H.B /ANN pdfmark end 3364 4718 a Black FK(\)\),)e(Plotkin)75 4831 y(\(see)30 b Ft(UpperBoundPlotkin)35 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1097 4832 a SDict begin H.S end 1097 4832 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 1278 4769 a SDict begin H.R end 1278 4769 a 1278 4831 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.4) cvn H.B /ANN pdfmark end 1278 4831 a Black FK(\)\))c(and)f(Elias)g(\(see)g Ft(UpperBoundElias)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2669 4832 a SDict begin H.S end 2669 4832 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.5)p 0.0236 0.0894 0.6179 TeXcolorrgb 2850 4769 a SDict begin H.R end 2850 4769 a 2850 4831 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.5) cvn H.B /ANN pdfmark end 2850 4831 a Black FK(\)\).)48 b(If)30 b(the)g(code)g(is)g (binary)-6 b(,)75 4944 y Fq(A)p Fo(\()p Fq(n)p Fp(;)10 b FK(2)j Fv(\001)g Fp(`)g Fv(\000)g FK(1)p Fo(\))20 b(=)g Fq(A)p Fo(\()p Fq(n)13 b Fo(+)g FK(1)p Fp(;)d FK(2)j Fv(\001)g Fp(`)p Fo(\))p FK(,)23 b(so)g(the)h Ft(UpperBound)j FK(tak)o(es)d(the)g(minimum)g(of)f(the)h(v)n(alues)h(obtained)h(from)d (all)75 5057 y(methods)i(for)f(the)f(parameters)j Fo(\()p Fq(n)p Fp(;)10 b FK(2)j Fv(\001)g Fp(`)g Fv(\000)g FK(1)p Fo(\))23 b FK(and)h Fo(\()p Fq(n)13 b Fo(+)g FK(1)p Fp(;)d FK(2)j Fv(\001)g Fp(`)p Fo(\))p FK(.)p 75 5141 1648 4 v 1764 5146 a FF(Example)p 2102 5141 V 75 5166 4 25 v 3747 5166 V 75 5265 4 100 v 188 5235 a(gap>)44 b(UpperBound\()i(10,)d (3,)g(2)g(\);)p 3747 5265 V 75 5365 V 188 5335 a(85)p 3747 5365 V 75 5465 V 188 5435 a(gap>)h(UpperBound\()i(25,)d(9,)g(8)g (\);)p 3747 5465 V 75 5564 V 188 5534 a(1211778792827540)p 3747 5564 V 75 5589 4 25 v 3747 5589 V 75 5592 3675 4 v Black Black eop end end %%Page: 118 118 TeXDict begin HPSdict begin 118 117 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.118) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(118)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.9) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(7.1.9)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Lo)o(werBoundMinimumDistance)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(LowerBoundMinimum)q (Dis)q(tan)q(ce\()53 b(C)47 b(\))1935 b Fr(\(function\))p Black 216 799 a FK(In)26 b(this)g(form,)g Ft(LowerBoundMinimumDi)q(sta) q(nc)q(e)31 b FK(returns)c(a)e(lo)n(wer)h(bound)h(for)f(the)g(minimum)f (distance)j(of)75 912 y(code)c Ft(C)q FK(.)216 1024 y(This)f(command)h (can)f(also)h(be)f(called)i(using)f(the)g(syntax)g Ft (LowerBoundMinimumD)q(ist)q(an)q(ce\()53 b(n,)47 b(k,)g(F)g(\))p FK(.)75 1137 y(In)26 b(this)h(form,)f Ft(LowerBoundMinimumD)q(ist)q (anc)q(e)31 b FK(returns)d(a)e(lo)n(wer)g(bound)h(for)f(the)h(minimum)f (distance)i(of)e(the)75 1250 y(best)33 b(kno)n(wn)f(linear)i(code)f(of) f(length)h Ft(n)q FK(,)g(dimension)h Ft(k)e FK(o)o(v)o(er)g(\002eld)g Ft(F)p FK(.)54 b(It)32 b(uses)h(the)f(mechanism)i(e)o(xplained)g(in)75 1363 y(section)p 0.0236 0.0894 0.6179 TeXcolorrgb 355 1364 a SDict begin H.S end 355 1364 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.13)p 0.0236 0.0894 0.6179 TeXcolorrgb 581 1301 a SDict begin H.R end 581 1301 a 581 1363 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.13) cvn H.B /ANN pdfmark end 581 1363 a Black FK(.)p 75 1466 1648 4 v 1764 1471 a FF(Example)p 2102 1466 V 75 1491 4 25 v 3747 1491 V 75 1591 4 100 v 188 1561 a(gap>)44 b(C)e(:=)h(BCHCode\()i(45,)f(7)e(\);)p 3747 1591 V 75 1690 V 188 1660 a(a)h(cyclic)h([45,23,7..9]6..16)k(BCH)43 b(code,)i(delta=7,)g(b=1)e(over)h(GF\(2\))p 3747 1690 V 75 1790 V 188 1760 a(gap>)g(LowerBoundMinimumDist)q(anc)q(e\()49 b(C)43 b(\);)p 3747 1790 V 75 1890 V 188 1860 a(7)212 b(#)43 b(designed)i(distance)g(is)e(lower)h(bound)g(for)f(minimum)i (distance)p 3747 1890 V 75 1989 V 188 1959 a(gap>)f (LowerBoundMinimumDist)q(anc)q(e\()49 b(45,)43 b(23,)h(GF\(2\))g(\);)p 3747 1989 V 75 2089 V 188 2059 a(10)p 3747 2089 V 75 2114 4 25 v 3747 2114 V 75 2117 3675 4 v 75 2348 a SDict begin H.S end 75 2348 a 75 2348 a SDict begin 13.6 H.A end 75 2348 a 75 2348 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.10) cvn H.B /DEST pdfmark end 75 2348 a 116 x FJ(7.1.10)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Lo)o(werBoundGilbertV)-9 b(arshamo)o(v)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2639 a Fs(\006)22 b Ft(LowerBoundGilbert)q(Var)q(sha)q(mov)q(\()53 b(n,)47 b(d,)g(q)f(\))1611 b Fr(\(function\))p Black 216 2864 a FK(This)36 b(is)g(the)g(lo)n(wer)g(bound)h(due)f (\(independently\))41 b(to)36 b(Gilbert)h(and)f(V)-10 b(arshamo)o(v)k(.)67 b(It)35 b(says)i(that)f(for)g(each)75 2977 y Ft(n)46 b FK(and)g Ft(d)q FK(,)k(there)d(e)o(xists)g(a)f(linear) h(code)g(ha)n(ving)h(length)g Fq(n)e FK(and)g(minimum)g(distance)i Fq(d)j FK(at)46 b(least)h(of)f(size)75 3090 y Fq(q)120 3057 y Fm(n)p Fh(\000)p Fr(1)243 3090 y Fp(=)p Fq(S)8 b(pher)o(e)-5 b(C)r(on)n(t)6 b(en)n(t)g Fo(\()p Fq(n)13 b Fv(\000)g FK(1)p Fp(;)d Fq(d)22 b Fv(\000)13 b FK(2)p Fp(;)d Fq(GF)d Fo(\()p Fq(q)p Fo(\)\))p FK(.)p 75 3215 1648 4 v 1764 3220 a FF(Example)p 2102 3215 V 75 3240 4 25 v 3747 3240 V 75 3339 4 100 v 188 3309 a(gap>)44 b(LowerBoundGilbertVars)q(ham)q(ov\()q(3,)q(2,2)q(\);)p 3747 3339 V 75 3439 V 188 3409 a(4)p 3747 3439 V 75 3538 V 188 3509 a(gap>)g(LowerBoundGilbertVars)q(ham)q(ov\()q(3,)q(3,2)q (\);)p 3747 3538 V 75 3638 V 188 3608 a(1)p 3747 3638 V 75 3738 V 188 3708 a(gap>)g(LowerBoundMinimumDist)q(anc)q(e\(3)q(,3)q (,2\))q(;)p 3747 3738 V 75 3837 V 188 3807 a(1)p 3747 3837 V 75 3937 V 188 3907 a(gap>)g(LowerBoundMinimumDist)q(anc)q(e\(3)q (,2)q(,2\))q(;)p 3747 3937 V 75 4037 V 188 4007 a(2)p 3747 4037 V 75 4061 4 25 v 3747 4061 V 75 4064 3675 4 v 75 4296 a SDict begin H.S end 75 4296 a 75 4296 a SDict begin 13.6 H.A end 75 4296 a 75 4296 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.11) cvn H.B /DEST pdfmark end 75 4296 a 116 x FJ(7.1.11)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Lo)o (werBoundSpher)n(eP)o(acking)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4586 a Fs(\006)22 b Ft(LowerBoundSphereP)q(ack)q(ing)q(\()52 b(n,)c(d,)f(q)f(\))1750 b Fr(\(function\))p Black 216 4812 a FK(This)23 b(is)f(the)h(lo)n(wer)g(bound)h(due)f (\(independently\))28 b(to)23 b(Gilbert)g(and)g(V)-10 b(arshamo)o(v)k(.)30 b(It)22 b(says)i(that)f(for)g(each)g Ft(n)g FK(and)75 4925 y Ft(r)p FK(,)g(there)h(e)o(xists)g(an)f (unrestricted)k(code)d(at)f(least)h(of)f(size)h Fq(q)1937 4892 y Fm(n)1975 4925 y Fp(=)p Fq(S)8 b(pher)o(e)-5 b(C)r(on)n(t)6 b(en)n(t)g Fo(\()p Fq(n)p Fp(;)k Fq(d)5 b Fp(;)10 b Fq(GF)i Fo(\()p Fq(q)p Fo(\)\))24 b FK(minimum)f(distance)75 5038 y Fq(d)5 b FK(.)p 75 5141 1648 4 v 1764 5146 a FF(Example)p 2102 5141 V 75 5166 4 25 v 3747 5166 V 75 5265 4 100 v 188 5235 a(gap>)44 b(LowerBoundSpherePacki)q(ng\()q(3,2)q(,2)q(\);)p 3747 5265 V 75 5365 V 188 5335 a(2)p 3747 5365 V 75 5465 V 188 5435 a(gap>)g(LowerBoundSpherePacki)q(ng\()q(3,3)q(,2)q(\);)p 3747 5465 V 75 5564 V 188 5534 a(1)p 3747 5564 V 75 5589 4 25 v 3747 5589 V 75 5592 3675 4 v Black Black eop end end %%Page: 119 119 TeXDict begin HPSdict begin 119 118 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.119) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(119)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.12) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(7.1.12)p 0.0 0.0 1.0 TeXcolorrgb 99 w(UpperBoundMinimumDistance)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(UpperBoundMinimum)q(Dis)q(tan)q (ce\()53 b(C)47 b(\))1935 b Fr(\(function\))p Black 216 799 a FK(In)22 b(this)g(form,)g Ft(UpperBoundMinimumDi)q(sta)q(nc)q(e) 27 b FK(returns)c(an)f(upper)h(bound)g(for)f(the)g(minimum)f(distance)j (of)75 912 y(code)h Ft(C)p FK(.)k(F)o(or)23 b(unrestricted)28 b(codes,)d(it)e(just)i(returns)g(the)g(w)o(ord)f(length.)31 b(F)o(or)23 b(linear)i(codes,)g(it)f(tak)o(es)h(the)f(minimum)75 1024 y(of)29 b(the)f(possibly)j(kno)n(wn)e(v)n(alue)h(from)e(the)h (method)h(of)e(construction,)34 b(the)29 b(weight)g(of)f(the)h (generators,)k(and)c(the)75 1137 y(v)n(alue)24 b(from)g(the)g(table)g (\(see)p 0.0236 0.0894 0.6179 TeXcolorrgb 994 1138 a SDict begin H.S end 994 1138 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.13)p 0.0236 0.0894 0.6179 TeXcolorrgb 1220 1075 a SDict begin H.R end 1220 1075 a 1220 1137 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.13) cvn H.B /ANN pdfmark end 1220 1137 a Black FK(\).)216 1250 y(This)f(command)h(can) f(also)h(be)f(called)i(using)f(the)g(syntax)g Ft(UpperBoundMinimumD)q (ist)q(an)q(ce\()53 b(n,)47 b(k,)g(F)g(\))p FK(.)75 1363 y(In)22 b(this)h(form,)g Ft(UpperBoundMinimumDi)q(sta)q(nce)28 b FK(returns)c(an)f(upper)h(bound)f(for)g(the)g(minimum)f(distance)j (of)d(the)75 1476 y(best)33 b(kno)n(wn)f(linear)i(code)f(of)f(length)h Ft(n)q FK(,)g(dimension)h Ft(k)e FK(o)o(v)o(er)g(\002eld)g Ft(F)p FK(.)54 b(It)32 b(uses)h(the)f(mechanism)i(e)o(xplained)g(in)75 1589 y(section)p 0.0236 0.0894 0.6179 TeXcolorrgb 355 1590 a SDict begin H.S end 355 1590 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.1.13)p 0.0236 0.0894 0.6179 TeXcolorrgb 581 1527 a SDict begin H.R end 581 1527 a 581 1589 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.1.13) cvn H.B /ANN pdfmark end 581 1589 a Black FK(.)p 75 1693 1648 4 v 1764 1698 a FF(Example)p 2102 1693 V 75 1718 4 25 v 3747 1718 V 75 1818 4 100 v 188 1788 a(gap>)44 b(C)e(:=)h(BCHCode\()i(45,)f(7)e(\);;)p 3747 1818 V 75 1917 V 188 1887 a(gap>)i(UpperBoundMinimumDist)q(anc)q(e\()49 b(C)43 b(\);)p 3747 1917 V 75 2017 V 188 1987 a(9)p 3747 2017 V 75 2117 V 188 2087 a(gap>)h(UpperBoundMinimumDist)q(anc)q(e\()49 b(45,)43 b(23,)h(GF\(2\))g(\);)p 3747 2117 V 75 2216 V 188 2186 a(11)p 3747 2216 V 75 2241 4 25 v 3747 2241 V 75 2244 3675 4 v 75 2377 a SDict begin H.S end 75 2377 a 75 2377 a SDict begin 13.6 H.A end 75 2377 a 75 2377 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.1.13) cvn H.B /DEST pdfmark end 75 2377 a 117 x FJ(7.1.13)p 0.0 0.0 1.0 TeXcolorrgb 99 w(BoundsMinimumDistance)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2668 a Fs(\006)22 b Ft(BoundsMinimumDist)q(anc)q(e\()53 b(n,)47 b(k,)g(F)g(\))1842 b Fr(\(function\))p Black 216 2894 a FK(The)35 b(function)i Ft(BoundsMinimumDistan)q(ce)k FK(calculates)c(a)e(lo)n(wer)g(and)g(upper)h(bound)h(for)e(the)g (minimum)75 3007 y(distance)26 b(of)e(an)g(optimal)i(linear)f(code)g (with)f(w)o(ord)g(length)i Ft(n)p FK(,)d(dimension)k Ft(k)c FK(o)o(v)o(er)h(\002eld)g Ft(F)q FK(.)30 b(The)23 b(function)k(returns)75 3120 y(a)e(record)h(with)f(the)g(tw)o(o)g (bounds)i(and)f(an)f(e)o(xplanation)j(for)d(each)h(bound.)35 b(The)25 b(function)i Ft(Display)g FK(can)e(be)g(used)75 3232 y(to)e(sho)n(w)h(the)g(e)o(xplanations.)216 3345 y(The)53 b(v)n(alues)h(for)f(the)g(lo)n(wer)g(and)g(upper)i(bound)f (are)f(obtained)i(from)e(a)g(table.)118 b Fy(GU)m(A)-6 b(V)f(A)51 b FK(has)i(ta-)75 3458 y(bles)42 b(containing)j(lo)n(wer)c (and)i(upper)f(bounds)i(for)e Fq(q)30 b Fo(=)g FK(2)p Fo(\()p Fq(n)i Fv(\024)e FK(257)p Fo(\))p Fp(;)10 b FK(3)p Fo(\()p Fq(n)33 b Fv(\024)d FK(243)p Fo(\))p Fp(;)10 b FK(4)p Fo(\()p Fq(n)33 b Fv(\024)d FK(256)p Fo(\))p FK(.)84 b(\(Current)75 3571 y(as)47 b(of)h(11)g(May)f(2006.\))102 b(These)48 b(tables)h(were)e(deri)n(v)o(ed)i(from)e(the)h(table)h(of)e (Brouwer)-5 b(.)101 b(\(See)47 b([)p 0.0236 0.6179 0.0894 TeXcolorrgb 3469 3572 a SDict begin H.S end 3469 3572 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(Bro06)p 0.0236 0.6179 0.0894 TeXcolorrgb 3695 3509 a SDict begin H.R end 3695 3509 a 3695 3571 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.Br) cvn H.B /ANN pdfmark end 3695 3571 a Black 2 w FK(],)p 0.6179 0.0236 0.0894 TeXcolorrgb 75 3698 a SDict begin H.S end 75 3698 a 0.6179 0.0236 0.0894 TeXcolorrgb -14 x Ft (http://www.win.tue)q(.nl)q(/\230a)q(eb/)q(vo)q(orl)q(inc)q(od.)q(ht)q (ml)p 0.6179 0.0236 0.0894 TeXcolorrgb 2016 3625 a SDict begin H.R end 2016 3625 a 2016 3684 a SDict begin [ /H /I /Border [0 0 0] /Color [0 1 1] /Action << /Subtype /URI /URI (http://www.win.tue.nl/~aeb/voorlincod.html) >> /Subtype /Link H.B /ANN pdfmark end 2016 3684 a Black 31 w FK(for)25 b(the)h(most)f (recent)i(data.\))35 b(F)o(or)24 b(codes)j(o)o(v)o(er)e(other)75 3797 y(\002elds)f(and)g(for)f(lar)n(ger)j(w)o(ord)d(lengths,)i(tri)n (vial)g(bounds)g(are)f(used.)216 3910 y(The)96 b(resulting)i(record)f (can)g(be)f(used)g(in)g(the)g(function)j Ft(BestKnownLinearCode)j FK(\(see)75 4023 y Ft(BestKnownLinearCod)q(e)45 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1025 4024 a SDict begin H.S end 1025 4024 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.2.14)p 0.0236 0.0894 0.6179 TeXcolorrgb 1251 3961 a SDict begin H.R end 1251 3961 a 1251 4023 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.2.14) cvn H.B /ANN pdfmark end 1251 4023 a Black FK(\)\))40 b(to)g(construct)h(a)e(code)i(with)e(minimum)g (distance)j(equal)e(to)g(the)f(lo)n(wer)75 4136 y(bound.)p 75 4240 1648 4 v 1764 4245 a FF(Example)p 2102 4240 V 75 4265 4 25 v 3747 4265 V 75 4364 4 100 v 188 4334 a(gap>)44 b(bounds)g(:=)f(BoundsMinimumDistan)q(ce\()49 b(7,)43 b(3)g(\);;)g(DisplayBoundsInfo\()48 b(bounds)d(\);)p 3747 4364 V 75 4464 V 188 4434 a(an)e(optimal)i(linear)f([7,3,d])h (code)e(over)h(GF\(2\))g(has)g(d=4)p 3747 4464 V 75 4564 V 188 4534 a(--------------------)q(---)q(---)q(---)q(---)q(--)q(---)q (---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---) q(---)q(--)p 3747 4564 V 75 4663 V 188 4633 a(Lb\(7,3\)=4,)i(by)d (shortening)i(of:)p 3747 4663 V 75 4763 V 188 4733 a(Lb\(8,4\)=4,)h(u)c (u+v)i(construction)i(of)d(C1)g(and)h(C2:)p 3747 4763 V 75 4862 V 188 4833 a(Lb\(4,3\)=2,)i(dual)d(of)g(the)h(repetition)i (code)p 3747 4862 V 75 4962 V 188 4932 a(Lb\(4,1\)=4,)g(repetition)f (code)p 3747 4962 V 75 5062 V 188 5032 a(--------------------)q(---)q (---)q(---)q(---)q(--)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q(---)q (---)q(---)q(---)q(---)q(---)q(---)q(--)p 3747 5062 V 75 5161 V 188 5131 a(Ub\(7,3\)=4,)h(Griesmer)f(bound)p 3747 5161 V 75 5261 V 188 5231 a(#)e(The)g(lower)h(bound)g(is)f(equal)h (to)f(the)h(upper)g(bound,)g(so)f(a)g(code)g(with)p 3747 5261 V 75 5361 V 188 5331 a(#)g(these)h(parameters)h(is)e(optimal.)p 3747 5361 V 75 5460 V 188 5430 a(gap>)h(C)e(:=)h(BestKnownLinearCode)q (\()48 b(bounds)d(\);;)e(Display\()i(C)e(\);)p 3747 5460 V 75 5560 V 188 5530 a(a)g(linear)h([7,3,4]2..3)i(shortened)f(code)f (of)p 3747 5560 V Black Black eop end end %%Page: 120 120 TeXDict begin HPSdict begin 120 119 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.120) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(120)p Black 75 428 4 100 v 188 399 a FF(a)43 b(linear)h([8,4,4]2)h(U)e(U+V)g(construction)k(code)c(of)p 3747 428 V 75 528 V 188 498 a(U:)g(a)g(cyclic)h([4,3,2]1)h(dual)f(code) f(of)p 3747 528 V 75 628 V 315 598 a(a)g(cyclic)h([4,1,4]2)h (repetition)h(code)e(over)f(GF\(2\))p 3747 628 V 75 727 V 188 697 a(V:)g(a)g(cyclic)h([4,1,4]2)h(repetition)h(code)e(over)f (GF\(2\))p 3747 727 V 75 752 4 25 v 3747 752 V 75 755 3675 4 v 75 899 a SDict begin H.S end 75 899 a 75 899 a SDict begin 13.6 H.A end 75 899 a 75 899 a SDict begin [ /View [/XYZ H.V] /Dest (section.7.2) cvn H.B /DEST pdfmark end 75 899 a 149 x FM(7.2)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Co)o(v)o(ering)30 b(radius)g(bounds)h(on)g(codes)p Black 75 1167 a SDict begin H.S end 75 1167 a 75 1167 a SDict begin 13.6 H.A end 75 1167 a 75 1167 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.1) cvn H.B /DEST pdfmark end 75 1167 a 91 x FJ(7.2.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(BoundsCo)o(v)o(eringRadius)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1433 a Fs(\006)22 b Ft(BoundsCoveringRad)q(ius)q(\()52 b(C)47 b(\))2167 b Fr(\(function\))p Black 216 1659 a Ft(BoundsCoveringRadi)q(us)33 b FK(returns)c(a)e(list)h(of)g(inte)o(gers.)42 b(The)27 b(\002rst)g(entry)h(of)g(this)g(list)g(is)f(the)h(maximum)f(of)75 1771 y(some)d(lo)n(wer)g(bounds)h(for)f(the)g(co)o(v)o(ering)i(radius)f (of)f Ft(C)p FK(,)f(the)h(last)g(entry)h(the)f(minimum)g(of)g(some)g (upper)h(bounds)g(of)75 1884 y Ft(C)p FK(.)216 1997 y(If)105 b(the)h(co)o(v)o(ering)i(radius)f(of)e Ft(C)g FK(is)h(kno)n(wn,)126 b(a)105 b(list)h(of)g(length)h(1)e(is)g(returned.)75 2110 y Ft(BoundsCoveringRadi)q(us)78 b FK(mak)o(es)c(use)f(of)g(the)g (functions)j Ft(GeneralLowerBoundCo)q(ver)q(ing)q(Ra)q(diu)q(s)75 2223 y FK(and)24 b Ft(GeneralUpperBoundC)q(ove)q(rin)q(gRa)q(di)q(us)p FK(.)p 75 2340 1648 4 v 1764 2345 a FF(Example)p 2102 2340 V 75 2365 4 25 v 3747 2365 V 75 2465 4 100 v 188 2435 a(gap>)44 b(BoundsCoveringRadius\()49 b(BCHCode\()c(17,)f(3,)f (GF\(2\))h(\))e(\);)p 3747 2465 V 75 2564 V 188 2534 a([)h(3)f(..)h(4)g(])p 3747 2564 V 75 2664 V 188 2634 a(gap>)h(BoundsCoveringRadius\()49 b(HammingCode\()e(5,)c(GF\(2\))h(\)) e(\);)p 3747 2664 V 75 2763 V 188 2734 a([)h(1)f(])p 3747 2763 V 75 2788 4 25 v 3747 2788 V 75 2791 3675 4 v 75 2925 a SDict begin H.S end 75 2925 a 75 2925 a SDict begin 13.6 H.A end 75 2925 a 75 2925 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.2) cvn H.B /DEST pdfmark end 75 2925 a 116 x FJ(7.2.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Incr)n(easeCo)o(v) o(eringRadiusLo)o(werBound)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3215 a Fs(\006)22 b Ft(IncreaseCoveringR)q(adi)q(usL)q(owe)q(rB)q (oun)q(d\()53 b(C[,)47 b(stopdist][,][start)q(wor)q(d])53 b(\))405 b Fr(\(function\))p Black 216 3441 a Ft(IncreaseCoveringRa)q (diu)q(sLo)q(we)q(rBo)q(und)33 b FK(tries)27 b(to)f(increase)j(the)e (lo)n(wer)f(bound)i(of)f(the)g(co)o(v)o(ering)h(radius)75 3554 y(of)19 b Ft(C)q FK(.)26 b(It)19 b(does)h(this)g(by)f(means)h(of)f (a)g(probabilistic)k(algorithm.)29 b(This)19 b(algorithm)i(tak)o(es)f (a)f(random)h(w)o(ord)g(in)f Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))3712 3521 y Fm(n)75 3667 y FK(\(or)28 b Ft(startword)j FK(if)d(it)g(is)g(speci\002ed\),)j(and,)f(by)e(changing)j(random)e (coordinates,)k(tries)c(to)f(get)h(as)f(f)o(ar)g(from)g Ft(C)g FK(as)75 3780 y(possible.)j(If)22 b(changing)j(a)d(coordinate)j (\002nds)d(a)g(w)o(ord)h(that)g(has)g(a)f(lar)n(ger)i(distance)g(to)e (the)h(code)g(than)g(the)g(pre)n(vious)75 3893 y(one,)k(the)f(change)i (is)d(made)h(permanent,)j(and)d(the)g(algorithm)i(starts)f(all)f(o)o(v) o(er)g(again.)37 b(If)25 b(changing)k(a)c(coordinate)75 4006 y(does)30 b(not)g(\002nd)g(a)f(coset)h(leader)h(that)f(is)g (further)h(a)o(w)o(ay)e(from)g(the)h(code,)i(then)e(the)g(change)h(is)f (made)f(permanent)75 4118 y(with)21 b(a)g(chance)i(of)f(1)f(in)g(100,)h (if)g(it)f(gets)h(the)g(w)o(ord)f(closer)i(to)f(the)f(code,)i(or)e (with)g(a)g(chance)i(of)f(1)f(in)g(10,)h(if)f(the)h(w)o(ord)75 4231 y(stays)j(at)e(the)h(same)f(distance.)31 b(Otherwise,)24 b(the)g(algorithm)h(starts)g(again)f(with)f(the)h(same)g(w)o(ord)f(as)h (before.)216 4344 y(If)g(the)g(algorithm)h(did)f(not)g(allo)n(w)g (changes)i(that)e(decrease)i(the)e(distance)i(to)d(the)h(code,)h(it)e (might)h(get)g(stuck)h(in)75 4457 y(a)g(sub-optimal)j(situation)g (\(the)e(coset)g(leader)h(corresponding)i(to)d(such)g(a)f(situation)j (-)d(i.e.)33 b(no)26 b(coordinate)i(of)e(this)75 4570 y(coset)f(leader)g(can)f(be)f(changed)j(in)d(such)i(a)e(w)o(ay)g(that)i (we)d(get)i(at)g(a)f(lar)n(ger)i(distance)h(from)d(the)h(code)h(-)e(is) g(called)i(an)75 4683 y Fq(orphan)p FK(\).)216 4796 y(If)20 b(the)h(algorithm)i(\002nds)d(a)h(w)o(ord)f(that)h(has)g(distance)i Ft(stopdist)g FK(to)d(the)h(code,)h(it)e(ends)i(and)f(returns)h(that)f (w)o(ord,)75 4909 y(which)j(can)g(be)f(used)i(for)e(further)j(in)l(v)o (estigations.)216 5022 y(The)h(v)n(ariable)j Ft(InfoCoveringRadius)j FK(can)28 b(be)g(set)g(to)f Ft(Print)i FK(to)f(print)g(the)g(maximum)g (distance)h(reached)75 5135 y(so)e(f)o(ar)h(e)n(v)o(ery)g(1000)g(runs.) 41 b(The)27 b(algorithm)i(can)f(be)f(interrupted)k(with)e Fj(C)t(T)t(R)t(L)t FK(-)t(C)r(,)g(allo)n(wing)f(the)g(user)g(to)f(look) h(at)75 5248 y(the)j(w)o(ord)g(that)g(is)g(currently)i(being)f(e)o (xamined)g(\(called)g(`current'\),)j(or)c(to)f(change)j(the)e(chances)h (that)g(the)f(ne)n(w)75 5360 y(w)o(ord)26 b(is)g(made)h(permanent)h (\(these)f(are)g(called)g(`staychance')j(and)c(`do)n(wnchance'\).)40 b(If)26 b(one)h(of)f(these)h(v)n(ariables)75 5473 y(is)c Fq(i)p FK(,)g(then)h(it)g(corresponds)j(with)c(a)g Fq(i)g FK(in)h(100)g(chance.)p Black Black eop end end %%Page: 121 121 TeXDict begin HPSdict begin 121 120 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.121) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(121)p Black 216 399 a(At)25 b(the)h(moment,)h(the)f (algorithm)i(is)d(only)i(useful)g(for)f(codes)h(with)f(small)g (dimension,)i(where)f(small)f(means)75 511 y(that)c(the)f(elements)i (of)e(the)g(code)h(\002t)e(in)i(the)f(memory)-6 b(.)28 b(It)21 b(w)o(orks)h(with)f(lar)n(ger)i(codes,)f(ho)n(we)n(v)o(er)l(,)g (b)n(ut)g(when)f(you)h(use)75 624 y(it)f(for)h(codes)g(with)g(lar)n(ge) g(dimension,)i(you)e(should)h(be)e Fq(very)h FK(patient.)30 b(If)21 b(running)j(the)d(algorithm)j(quits)e Fy(GAP)d FK(\(due)75 737 y(to)29 b(memory)g(problems\),)i(you)f(can)f(change)h (the)f(global)h(v)n(ariable)h Ft(CRMemSize)g FK(to)e(a)f(lo)n(wer)h(v)n (alue.)45 b(This)29 b(might)75 850 y(cause)e(the)f(algorithm)i(to)e (run)g(slo)n(wer)l(,)h(b)n(ut)f(without)h(quitting)h Fy(GAP)p FK(.)c(The)h(only)i(w)o(ay)f(to)g(\002nd)f(out)i(the)f(best)g (v)n(alue)75 963 y(of)d Ft(CRMemSize)j FK(is)e(by)f(e)o(xperimenting.)p 75 1086 1648 4 v 1764 1091 a FF(Example)p 2102 1086 V 75 1111 4 25 v 3747 1111 V 75 1210 4 100 v 188 1180 a(gap>)44 b(C:=RandomLinearCode\(1)q(0,5)q(,GF)q(\(2)q(\)\);)p 3747 1210 V 75 1310 V 188 1280 a(a)85 b([10,5,?])45 b(randomly)g (generated)g(code)f(over)g(GF\(2\))p 3747 1310 V 75 1409 V 188 1380 a(gap>)g(IncreaseCoveringRadiu)q(sLo)q(wer)q(Bo)q(und)q (\(C,)q(10\))q(;)p 3747 1409 V 75 1509 V 188 1479 a(Number)g(of)f (runs:)h(1000)86 b(best)44 b(distance)h(so)e(far:)h(3)p 3747 1509 V 75 1609 V 188 1579 a(Number)g(of)f(runs:)h(2000)86 b(best)44 b(distance)h(so)e(far:)h(3)p 3747 1609 V 75 1708 V 188 1678 a(Number)g(of)f(changes:)i(100)p 3747 1708 V 75 1808 V 188 1778 a(Number)f(of)f(runs:)h(3000)86 b(best)44 b(distance)h(so)e(far:)h(3)p 3747 1808 V 75 1908 V 188 1878 a(Number)g(of)f(runs:)h(4000)86 b(best)44 b(distance)h(so)e(far:)h(3)p 3747 1908 V 75 2007 V 188 1977 a(Number)g(of)f(runs:)h(5000)86 b(best)44 b(distance)h(so)e(far:)h (3)p 3747 2007 V 75 2107 V 188 2077 a(Number)g(of)f(runs:)h(6000)86 b(best)44 b(distance)h(so)e(far:)h(3)p 3747 2107 V 75 2206 V 188 2177 a(Number)g(of)f(runs:)h(7000)86 b(best)44 b(distance)h(so)e(far:)h(3)p 3747 2206 V 75 2306 V 188 2276 a(Number)g(of)f(changes:)i(200)p 3747 2306 V 75 2406 V 188 2376 a(Number)f(of)f(runs:)h(8000)86 b(best)44 b(distance)h(so)e(far:)h(3)p 3747 2406 V 75 2505 V 188 2475 a(Number)g(of)f(runs:)h(9000)86 b(best)44 b(distance)h(so)e(far:)h (3)p 3747 2505 V 75 2605 V 188 2575 a(Number)g(of)f(runs:)h(10000)87 b(best)43 b(distance)j(so)d(far:)g(3)p 3747 2605 V 75 2705 V 188 2675 a(Number)h(of)f(changes:)i(300)p 3747 2705 V 75 2804 V 188 2774 a(Number)f(of)f(runs:)h(11000)87 b(best)43 b(distance)j(so)d(far:)g(3)p 3747 2804 V 75 2904 V 188 2874 a(Number)h(of)f(runs:)h(12000)87 b(best)43 b(distance)j(so)d(far:)g(3)p 3747 2904 V 75 3003 V 188 2974 a(Number)h(of)f(runs:)h(13000)87 b(best)43 b(distance)j(so)d(far:) g(3)p 3747 3003 V 75 3103 V 188 3073 a(Number)h(of)f(changes:)i(400)p 3747 3103 V 75 3203 V 188 3173 a(Number)f(of)f(runs:)h(14000)87 b(best)43 b(distance)j(so)d(far:)g(3)p 3747 3203 V 75 3302 V 188 3272 a(user)h(interrupt)h(at...)p 3747 3302 V 75 3402 V 188 3372 a(#)p 3747 3402 V 75 3502 V 188 3472 a(#)e(used)g(ctrl-c)i(to)e(break)h(out)f(of)g(execution)p 3747 3502 V 75 3601 V 188 3571 a(#)p 3747 3601 V 75 3701 V 188 3671 a(...)g(called)i(from)p 3747 3701 V 75 3801 V 188 3771 a(IncreaseCoveringRadi)q(usL)q(owe)q(rBo)q(und)q(\()k(code,) 44 b(-1,)f(current)i(\))d(called)j(from)p 3747 3801 V 75 3900 V 230 3870 a(function\()h(arguments)f(\))e(called)h(from)g (read-eval-loop)p 3747 3900 V 75 4000 V 188 3970 a(Entering)h(break)f (read-eval-print)j(loop)d(...)p 3747 4000 V 75 4099 V 188 4069 a(you)f(can)h('quit;')g(to)f(quit)h(to)f(outer)h(loop,)g(or)p 3747 4099 V 75 4199 V 188 4169 a(you)f(can)h('return;')h(to)e(continue) p 3747 4199 V 75 4299 V 188 4269 a(brk>)h(current;)p 3747 4299 V 75 4398 V 188 4368 a([)f(Z\(2\)\2100,)h(Z\(2\)\2100,)h (Z\(2\)\2100,)g(Z\(2\)\2100,)g(0*Z\(2\),)f(Z\(2\)\2100,)h(0*Z\(2\),)g (Z\(2\)\2100,)f(0*Z\(2\),)h(Z\(2\)\2100)g(])p 3747 4398 V 75 4498 V 188 4468 a(brk>)p 3747 4498 V 75 4598 V 188 4568 a(gap>)f(CoveringRadius\(C\);)p 3747 4598 V 75 4697 V 188 4667 a(3)p 3747 4697 V 75 4797 V 3747 4797 V 75 4822 4 25 v 3747 4822 V 75 4825 3675 4 v 75 4958 a SDict begin H.S end 75 4958 a 75 4958 a SDict begin 13.6 H.A end 75 4958 a 75 4958 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.3) cvn H.B /DEST pdfmark end 75 4958 a 116 x FJ(7.2.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Exhausti)o(v)o(eSear)n(chCo)o (v)o(eringRadius)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5248 a Fs(\006)22 b Ft(ExhaustiveSearchC)q(ove)q(rin)q(gRa)q(di)q(us\()53 b(C)47 b(\))1703 b Fr(\(function\))p Black 216 5474 a Ft(ExhaustiveSearchCo)q(ver)q(ing)q(Ra)q(diu)q(s)30 b FK(does)d(an)e(e)o(xhausti)n(v)o(e)i(search)g(to)e(\002nd)g(the)g(co)o (v)o(ering)i(radius)g(of)e Ft(C)p FK(.)75 5587 y(Ev)o(ery)j(time)g(a)g (coset)h(leader)g(of)f(a)g(coset)h(with)f(weight)h Fq(w)e FK(is)h(found,)i(the)f(function)h(tries)f(to)f(\002nd)g(a)g(coset)h (leader)p Black Black eop end end %%Page: 122 122 TeXDict begin HPSdict begin 122 121 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.122) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(122)p Black 75 399 a(of)30 b(a)f(coset)i(with)e(weight)i Fq(w)15 b Fo(+)g FK(1.)46 b(It)29 b(does)i(this)f(by)g(enumerating)i (all)e(w)o(ords)g(of)g(weight)g Fq(w)15 b Fo(+)g FK(1,)30 b(and)g(checking)75 511 y(whether)d(a)e(w)o(ord)h(is)g(a)f(coset)i (leader)-5 b(.)36 b(The)26 b(start)g(weight)h(is)e(the)h(current)i(kno) n(wn)e(lo)n(wer)f(bound)j(on)e(the)g(co)o(v)o(ering)75 624 y(radius.)p 75 728 1648 4 v 1764 733 a FF(Example)p 2102 728 V 75 753 4 25 v 3747 753 V 75 853 4 100 v 188 823 a(gap>)44 b(C:=RandomLinearCode\(1)q(0,5)q(,GF)q(\(2)q(\)\);)p 3747 853 V 75 952 V 188 923 a(a)85 b([10,5,?])45 b(randomly)g (generated)g(code)f(over)g(GF\(2\))p 3747 952 V 75 1052 V 188 1022 a(gap>)g(ExhaustiveSearchCover)q(ing)q(Rad)q(iu)q(s\(C)q (\);)p 3747 1052 V 75 1152 V 188 1122 a(Trying)g(3)f(...)p 3747 1152 V 75 1251 V 188 1221 a([)g(3)f(..)h(5)g(])p 3747 1251 V 75 1351 V 188 1321 a(gap>)h(CoveringRadius\(C\);)p 3747 1351 V 75 1451 V 188 1421 a(3)p 3747 1451 V 75 1550 V 3747 1550 V 75 1575 4 25 v 3747 1575 V 75 1578 3675 4 v 75 1711 a SDict begin H.S end 75 1711 a 75 1711 a SDict begin 13.6 H.A end 75 1711 a 75 1711 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.4) cvn H.B /DEST pdfmark end 75 1711 a 117 x FJ(7.2.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(GeneralLo)o(werBoundCo)o(v)o(eringRadius)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2002 a Fs(\006)22 b Ft(GeneralLowerBound)q(Cov)q(eri)q (ngR)q(ad)q(ius)q(\()52 b(C)47 b(\))1657 b Fr(\(function\))p Black 216 2228 a Ft(GeneralLowerBoundC)q(ove)q(rin)q(gR)q(adi)q(us)29 b FK(returns)c(a)e(lo)n(wer)g(bound)i(on)e(the)h(co)o(v)o(ering)g (radius)h(of)e Ft(C)q FK(.)k(It)c(uses)75 2341 y(as)j(man)o(y)g (functions)j(which)e(names)g(start)g(with)f Ft(LowerBoundCoveringR)q (adi)q(us)32 b FK(as)26 b(possible)j(to)d(\002nd)g(the)h(best)75 2454 y(kno)n(wn)k(lo)n(wer)h(bound)g(\(at)f(least)h(that)g Fy(GU)m(A)-6 b(V)f(A)29 b FK(kno)n(ws)j(of\))f(together)i(with)e (tables)h(for)g(the)f(co)o(v)o(ering)i(radius)f(of)75 2566 y(binary)25 b(linear)g(codes)f(with)g(length)h(not)f(greater)h (than)f(64.)p 75 2689 1648 4 v 1764 2694 a FF(Example)p 2102 2689 V 75 2714 4 25 v 3747 2714 V 75 2814 4 100 v 188 2784 a(gap>)44 b(C:=RandomLinearCode\(1)q(0,5)q(,GF)q(\(2)q (\)\);)p 3747 2814 V 75 2913 V 188 2883 a(a)85 b([10,5,?])45 b(randomly)g(generated)g(code)f(over)g(GF\(2\))p 3747 2913 V 75 3013 V 188 2983 a(gap>)g(GeneralLowerBoundCove)q(rin)q(gRa)q (di)q(us\()q(C\);)p 3747 3013 V 75 3113 V 188 3083 a(2)p 3747 3113 V 75 3212 V 188 3182 a(gap>)g(CoveringRadius\(C\);)p 3747 3212 V 75 3312 V 188 3282 a(3)p 3747 3312 V 75 3411 V 3747 3411 V 75 3436 4 25 v 3747 3436 V 75 3439 3675 4 v 75 3573 a SDict begin H.S end 75 3573 a 75 3573 a SDict begin 13.6 H.A end 75 3573 a 75 3573 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.5) cvn H.B /DEST pdfmark end 75 3573 a 116 x FJ(7.2.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(GeneralUpperBoundCo)o(v)o(eringRadius)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3863 a Fs(\006)22 b Ft(GeneralUpperBound)q(Cov)q(eri)q (ngR)q(ad)q(ius)q(\()52 b(C)47 b(\))1657 b Fr(\(function\))p Black 216 4089 a Ft(GeneralUpperBoundC)q(ove)q(rin)q(gR)q(adi)q(us)39 b FK(returns)c(an)f(upper)g(bound)h(on)f(the)f(co)o(v)o(ering)i(radius) g(of)e Ft(C)q FK(.)57 b(It)75 4202 y(uses)26 b(as)g(man)o(y)f (functions)j(which)e(names)g(start)g(with)g Ft(UpperBoundCoveringR)q (adi)q(us)31 b FK(as)26 b(possible)h(to)f(\002nd)f(the)75 4315 y(best)f(kno)n(wn)g(upper)h(bound)g(\(at)e(least)i(that)f Fy(GU)m(A)-6 b(V)f(A)22 b FK(kno)n(ws)h(of\).)p 75 4437 1648 4 v 1764 4442 a FF(Example)p 2102 4437 V 75 4462 4 25 v 3747 4462 V 75 4562 4 100 v 188 4532 a(gap>)44 b(C:=RandomLinearCode\(1)q(0,5)q(,GF)q(\(2)q(\)\);)p 3747 4562 V 75 4662 V 188 4632 a(a)85 b([10,5,?])45 b(randomly)g (generated)g(code)f(over)g(GF\(2\))p 3747 4662 V 75 4761 V 188 4731 a(gap>)g(GeneralUpperBoundCove)q(rin)q(gRa)q(di)q(us\()q (C\);)p 3747 4761 V 75 4861 V 188 4831 a(4)p 3747 4861 V 75 4960 V 188 4930 a(gap>)g(CoveringRadius\(C\);)p 3747 4960 V 75 5060 V 188 5030 a(3)p 3747 5060 V 75 5160 V 3747 5160 V 75 5185 4 25 v 3747 5185 V 75 5188 3675 4 v Black Black eop end end %%Page: 123 123 TeXDict begin HPSdict begin 123 122 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.123) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(123)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.6) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(7.2.6)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Lo)o(werBoundCo)o(v)o(eringRadiusSpher)n(eCo)o(v)o (ering)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(LowerBoundCoverin)q(gRa)q(diu)q(sSp)q(he)q(reC)q(ove)q(rin)q(g\() 53 b(n,)47 b(M[,)g(F,])h(false)g(\))637 b Fr(\(function\))p Black 216 799 a FK(This)18 b(command)h(can)f(also)h(be)f(called)h (using)h(the)e(syntax)i Ft(LowerBoundCoveringR)q(adi)q(usS)q(ph)q(ere)q (Cov)q(eri)q(ng)q(\()75 912 y(n,)47 b(r,)g([F,])h(true)g(\))p FK(.)82 b(If)41 b(the)h(last)g(ar)n(gument)h(of)f Ft (LowerBoundCoveringR)q(adi)q(us)q(Sph)q(ere)q(Cov)q(er)q(ing)47 b FK(is)75 1024 y Ft(false)r FK(,)c(then)e(it)f(returns)i(a)e(lo)n(wer) h(bound)g(for)g(the)f(co)o(v)o(ering)i(radius)g(of)e(a)g(code)h(of)g (size)f Ft(M)g FK(and)h(length)h Ft(n)p FK(.)75 1137 y(Otherwise,)24 b(it)f(returns)j(a)d(lo)n(wer)g(bound)i(for)f(the)g (size)g(of)f(a)g(code)i(of)e(length)i Ft(n)e FK(and)h(co)o(v)o(ering)h (radius)g Ft(r)q FK(.)216 1250 y Ft(F)k FK(is)f(the)i(\002eld)e(o)o(v)o (er)h(which)h(the)f(code)h(is)e(de\002ned.)46 b(If)29 b Ft(F)f FK(is)h(omitted,)i(it)e(is)g(assumed)h(that)f(the)h(code)f(is) g(o)o(v)o(er)75 1363 y Fq(GF)7 b Fo(\()p FK(2)p Fo(\))p FK(.)29 b(The)23 b(bound)i(is)e(computed)i(according)i(to)c(the)h (sphere)h(co)o(v)o(ering)g(bound:)1614 1567 y Fq(M)16 b Fv(\001)8 b Fq(V)1790 1581 y Fm(q)1828 1567 y Fo(\()p Fq(n)p Fp(;)i Fq(r)r Fo(\))22 b Fv(\025)e Fq(q)2173 1530 y Fm(n)75 1772 y FK(where)f Fq(V)366 1786 y Fm(q)404 1772 y Fo(\()p Fq(n)p Fp(;)10 b Fq(r)r Fo(\))24 b FK(is)f(the)h(size)g (of)g(a)f(sphere)i(of)e(radius)i Fq(r)g FK(in)f Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))2159 1739 y Fm(n)2197 1772 y FK(.)p 75 1902 1648 4 v 1764 1907 a FF(Example)p 2102 1902 V 75 1927 4 25 v 3747 1927 V 75 2027 4 100 v 188 1997 a(gap>)44 b(C:=RandomLinearCode\(1)q(0,5)q(,GF)q(\(2)q(\)\);)p 3747 2027 V 75 2126 V 188 2096 a(a)85 b([10,5,?])45 b(randomly)g (generated)g(code)f(over)g(GF\(2\))p 3747 2126 V 75 2226 V 188 2196 a(gap>)g(Size\(C\);)p 3747 2226 V 75 2325 V 188 2296 a(32)p 3747 2325 V 75 2425 V 188 2395 a(gap>)g (CoveringRadius\(C\);)p 3747 2425 V 75 2525 V 188 2495 a(3)p 3747 2525 V 75 2624 V 188 2594 a(gap>)g(LowerBoundCoveringRad)q (ius)q(Sph)q(er)q(eCo)q(ver)q(ing)q(\(10)q(,32)q(,GF)q(\(2\))q(,fa)q (lse)q(\);)p 3747 2624 V 75 2724 V 188 2694 a(2)p 3747 2724 V 75 2824 V 188 2794 a(gap>)g(LowerBoundCoveringRad)q(ius)q(Sph)q (er)q(eCo)q(ver)q(ing)q(\(10)q(,3,)q(GF\()q(2\),)q(tru)q(e\);)p 3747 2824 V 75 2923 V 188 2893 a(6)p 3747 2923 V 75 3023 V 3747 3023 V 75 3048 4 25 v 3747 3048 V 75 3051 3675 4 v 75 3184 a SDict begin H.S end 75 3184 a 75 3184 a SDict begin 13.6 H.A end 75 3184 a 75 3184 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.7) cvn H.B /DEST pdfmark end 75 3184 a 116 x FJ(7.2.7)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Lo)o(werBoundCo)o(v)o(eringRadiusV)-9 b(anW)j(ee1)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3475 a Fs(\006)22 b Ft(LowerBoundCoverin)q(gRa)q(diu)q(sVa)q(nW)q(ee1)q(\()52 b(n,)47 b(M[,)h(F,])f(false)i(\))961 b Fr(\(function\))p Black 216 3700 a FK(This)31 b(command)g(can)g(also)h(be)f(called)h (using)g(the)f(syntax)h Ft(LowerBoundCovering)q(Ra)q(diu)q(sVa)q(nWe)q (e1)q(\()52 b(n,)75 3813 y(r,)47 b([F,])h(true)g(\))p FK(.)j(If)31 b(the)h(last)g(ar)n(gument)h(of)e Ft(LowerBoundCoverin)q (gRa)q(diu)q(sVa)q(nW)q(ee1)37 b FK(is)31 b Ft(false)r FK(,)h(then)g(it)75 3926 y(returns)26 b(a)e(lo)n(wer)g(bound)i(for)e (the)h(co)o(v)o(ering)h(radius)f(of)g(a)e(code)j(of)e(size)h Ft(M)f FK(and)g(length)i Ft(n)p FK(.)31 b(Otherwise,)25 b(it)f(returns)i(a)75 4039 y(lo)n(wer)d(bound)i(for)f(the)g(size)g(of)g (a)f(code)h(of)f(length)i Ft(n)f FK(and)g(co)o(v)o(ering)h(radius)g Ft(r)p FK(.)216 4152 y Ft(F)k FK(is)f(the)i(\002eld)e(o)o(v)o(er)h (which)h(the)f(code)h(is)e(de\002ned.)46 b(If)29 b Ft(F)f FK(is)h(omitted,)i(it)e(is)g(assumed)h(that)f(the)h(code)f(is)g(o)o(v)o (er)75 4265 y Fq(GF)7 b Fo(\()p FK(2)p Fo(\))p FK(.)216 4378 y(The)23 b(V)-10 b(an)23 b(W)-7 b(ee)23 b(bound)i(is)f(an)f(impro) o(v)o(ement)i(of)e(the)h(sphere)h(co)o(v)o(ering)g(bound:)997 4656 y Fq(M)16 b Fv(\001)1127 4501 y Fc(\()1195 4656 y Fq(V)1246 4670 y Fm(q)1284 4656 y Fo(\()p Fq(n)p Fp(;)10 b Fq(r)r Fo(\))j Fv(\000)1627 4515 y Fc(\000)1668 4549 y Fm(n)1671 4620 y(r)1702 4515 y Fc(\001)p 1579 4635 213 4 v 1579 4721 a Fv(d)1629 4685 y Fm(n)p Fh(\000)p Fm(r)p 1629 4700 113 4 v 1629 4752 a(r)r Fk(+)p Fr(1)1751 4721 y Fv(e)1812 4528 y Fc(\022)o(\030)1941 4595 y Fq(n)g Fo(+)g FK(1)p 1941 4635 187 4 v 1945 4719 a Fq(r)i Fo(+)e FK(1)2138 4528 y Fc(\031)2204 4656 y Fv(\000)2297 4595 y Fq(n)g Fo(+)g FK(1)p 2297 4635 V 2301 4719 a Fq(r)i Fo(+)e FK(1)2494 4528 y Fc(\023)2561 4501 y(\))2654 4656 y Fv(\025)20 b Fq(q)2790 4619 y Fm(n)p 75 4972 1648 4 v 1764 4977 a FF(Example)p 2102 4972 V 75 4997 4 25 v 3747 4997 V 75 5097 4 100 v 188 5067 a(gap>)44 b (C:=RandomLinearCode\(1)q(0,5)q(,GF)q(\(2)q(\)\);)p 3747 5097 V 75 5197 V 188 5167 a(a)85 b([10,5,?])45 b(randomly)g(generated)g (code)f(over)g(GF\(2\))p 3747 5197 V 75 5296 V 188 5266 a(gap>)g(Size\(C\);)p 3747 5296 V 75 5396 V 188 5366 a(32)p 3747 5396 V 75 5495 V 188 5466 a(gap>)g(CoveringRadius\(C\);)p 3747 5495 V 75 5595 V 188 5565 a(3)p 3747 5595 V Black Black eop end end %%Page: 124 124 TeXDict begin HPSdict begin 124 123 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.124) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(124)p Black 75 428 4 100 v 188 399 a FF(gap>)44 b(LowerBoundCoveringRad)q(ius)q(Van)q(We)q(e1\()q(10,)q(32,)q(GF\()q (2\),)q(fal)q(se\))q(;)p 3747 428 V 75 528 V 188 498 a(2)p 3747 528 V 75 628 V 188 598 a(gap>)g(LowerBoundCoveringRad)q(ius) q(Van)q(We)q(e1\()q(10,)q(3,G)q(F\(2)q(\),t)q(rue)q(\);)p 3747 628 V 75 727 V 188 697 a(6)p 3747 727 V 75 827 V 3747 827 V 75 852 4 25 v 3747 852 V 75 855 3675 4 v 75 984 a SDict begin H.S end 75 984 a 75 984 a SDict begin 13.6 H.A end 75 984 a 75 984 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.8) cvn H.B /DEST pdfmark end 75 984 a 116 x FJ(7.2.8)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Lo)o(werBoundCo)o(v)o (eringRadiusV)-9 b(anW)j(ee2)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1274 a Fs(\006)22 b Ft(LowerBoundCoverin)q(gRa)q(diu)q(sVa)q(nW)q (ee2)q(\()52 b(n,)47 b(M,)h(false)g(\))1193 b Fr(\(function\))p Black 216 1500 a FK(This)20 b(command)i(can)f(also)g(be)f(called)i (using)g(the)e(syntax)j Ft(LowerBoundCoveringRa)q(di)q(usV)q(anW)q(ee2) q(\()53 b(n,)47 b(r)75 1613 y([,true])i(\))p FK(.)40 b(If)27 b(the)h(last)g(ar)n(gument)h(of)f Ft(LowerBoundCoveringR)q(adi) q(usV)q(an)q(Wee)q(2)33 b FK(is)27 b Ft(false)r FK(,)g(then)h(it)g (returns)75 1726 y(a)e(lo)n(wer)g(bound)i(for)f(the)g(co)o(v)o(ering)h (radius)f(of)g(a)f(code)h(of)f(size)h Ft(M)f FK(and)h(length)h Ft(n)q FK(.)36 b(Otherwise,)28 b(it)e(returns)i(a)e(lo)n(wer)75 1839 y(bound)f(for)f(the)g(size)g(of)f(a)g(code)i(of)e(length)i Ft(n)e FK(and)h(co)o(v)o(ering)h(radius)g Ft(r)p FK(.)216 1952 y(This)e(bound)i(only)g(w)o(orks)f(for)g(binary)h(codes.)k(It)24 b(is)f(based)i(on)e(the)h(follo)n(wing)h(inequality:)765 2194 y Fq(M)16 b Fv(\001)904 2053 y Fc(\000\000)983 2127 y Fq(V)1034 2141 y Fr(2)1071 2127 y Fo(\()p Fq(n)p Fp(;)10 b FK(2)p Fo(\))j Fv(\000)1374 2091 y Fr(1)p 1374 2106 34 4 v 1374 2158 a(2)1417 2127 y Fo(\()p Fq(r)i Fo(+)e FK(2)p Fo(\)\()p Fq(r)i Fv(\000)e FK(1)p Fo(\))1915 2053 y Fc(\001)1963 2127 y Fq(V)2014 2141 y Fr(2)2051 2127 y Fo(\()p Fq(n)p Fp(;)d Fq(r)r Fo(\))j(+)g Fu(e)-5 b Fq(V)2421 2141 y Fr(2)2460 2127 y Fo(\()p Fq(n)p Fp(;)10 b Fq(r)15 b Fv(\000)e FK(2)p Fo(\))2789 2053 y Fc(\001)p 904 2173 1928 4 v 1301 2264 a Fo(\()-5 b Fq(V)1382 2278 y Fr(2)1420 2264 y Fo(\()p Fq(n)p Fp(;)10 b FK(2)p Fo(\))j Fv(\000)1722 2228 y Fr(1)p 1722 2243 34 4 v 1722 2295 a(2)1765 2264 y Fo(\()p Fq(r)i Fo(+)e FK(2)p Fo(\)\()p Fq(r)i Fv(\000)e FK(1)p Fo(\))g(+)g Fu(e)p Fo(\))2862 2194 y Fv(\025)19 b FK(2)2997 2156 y Fm(n)3035 2194 y Fp(;)75 2432 y FK(where)929 2573 y Fu(e)h Fo(=)1080 2445 y Fc(\022)1147 2512 y Fq(r)15 b Fo(+)e FK(2)1214 2636 y(2)1326 2445 y Fc(\023)d(\030\022)1523 2512 y Fq(n)j Fv(\000)g Fq(r)i Fo(+)e FK(1)1660 2636 y(2)1843 2445 y Fc(\023)1910 2573 y Fp(=)1955 2445 y Fc(\022)2022 2512 y Fq(r)i Fo(+)e FK(2)2089 2636 y(2)2201 2445 y Fc(\023\031)2333 2573 y Fv(\000)2417 2445 y Fc(\022)2484 2512 y Fq(n)g Fv(\000)g Fq(r)i Fo(+)e FK(1)2621 2636 y(2)2804 2445 y Fc(\023)2871 2573 y Fp(:)p 75 2806 1648 4 v 1764 2811 a FF(Example)p 2102 2806 V 75 2831 4 25 v 3747 2831 V 75 2930 4 100 v 188 2901 a(gap>)44 b(C:=RandomLinearCode\(1)q(0,5)q (,GF)q(\(2)q(\)\);)p 3747 2930 V 75 3030 V 188 3000 a(a)85 b([10,5,?])45 b(randomly)g(generated)g(code)f(over)g(GF\(2\))p 3747 3030 V 75 3130 V 188 3100 a(gap>)g(Size\(C\);)p 3747 3130 V 75 3229 V 188 3199 a(32)p 3747 3229 V 75 3329 V 188 3299 a(gap>)g(CoveringRadius\(C\);)p 3747 3329 V 75 3429 V 188 3399 a(3)p 3747 3429 V 75 3528 V 188 3498 a(gap>)g(LowerBoundCoveringRad)q(ius)q(Van)q(We)q(e2\()q(10,)q (32,)q(fal)q(se\))q(;)p 3747 3528 V 75 3628 V 188 3598 a(2)p 3747 3628 V 75 3727 V 188 3698 a(gap>)g(LowerBoundCoveringRad)q (ius)q(Van)q(We)q(e2\()q(10,)q(3,t)q(rue)q(\);)p 3747 3727 V 75 3827 V 188 3797 a(7)p 3747 3827 V 75 3927 V 3747 3927 V 75 3952 4 25 v 3747 3952 V 75 3955 3675 4 v 75 4084 a SDict begin H.S end 75 4084 a 75 4084 a SDict begin 13.6 H.A end 75 4084 a 75 4084 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.9) cvn H.B /DEST pdfmark end 75 4084 a 116 x FJ(7.2.9)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Lo)o(werBoundCo)o (v)o(eringRadiusCountingExcess)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4374 a Fs(\006)22 b Ft(LowerBoundCoverin)q(gRa)q(diu)q(sCo)q(un)q (tin)q(gEx)q(ces)q(s\()53 b(n,)47 b(M,)g(false)h(\))869 b Fr(\(function\))p Black 216 4600 a FK(This)35 b(command)g(can)g(also) g(be)g(called)h(with)e Ft(LowerBoundCovering)q(Rad)q(ius)q(Cou)q(nt)q (ing)q(Exc)q(ess)q(\()53 b(n,)47 b(r)75 4713 y([,true])i(\))p FK(.)29 b(If)23 b(the)h(last)h(ar)n(gument)g(of)f Ft (LowerBoundCovering)q(Rad)q(ius)q(Cou)q(nt)q(ing)q(Exc)q(ess)30 b FK(is)23 b Ft(false)r FK(,)g(then)h(it)75 4826 y(returns)i(a)e(lo)n (wer)g(bound)i(for)e(the)h(co)o(v)o(ering)h(radius)f(of)g(a)e(code)j (of)e(size)h Ft(M)f FK(and)g(length)i Ft(n)p FK(.)31 b(Otherwise,)25 b(it)f(returns)i(a)75 4939 y(lo)n(wer)d(bound)i(for)f (the)g(size)g(of)g(a)f(code)h(of)f(length)i Ft(n)f FK(and)g(co)o(v)o (ering)h(radius)g Ft(r)p FK(.)216 5052 y(This)e(bound)i(only)g(w)o (orks)f(for)g(binary)h(codes.)k(It)24 b(is)f(based)i(on)e(the)h(follo)n (wing)h(inequality:)1139 5231 y Fq(M)16 b Fv(\001)d Fo(\()p Fu(r)-5 b Fq(V)1400 5245 y Fr(2)1437 5231 y Fo(\()p Fq(n)p Fp(;)10 b Fq(r)r Fo(\))j(+)g Fu(e)-5 b Fq(V)1807 5245 y Fr(2)1846 5231 y Fo(\()p Fq(n)p Fp(;)10 b Fq(r)15 b Fv(\000)e FK(1)p Fo(\)\))21 b Fv(\025)f Fo(\()p Fu(r)13 b Fo(+)g Fu(e)p Fo(\))p FK(2)2624 5194 y Fm(n)2661 5231 y Fp(;)75 5410 y FK(where)1374 5552 y Fu(e)20 b Fo(=)g(\()p Fq(r)15 b Fo(+)e FK(1)p Fo(\))1784 5423 y Fc(\030)1848 5490 y Fq(n)g Fo(+)g FK(1)p 1848 5531 187 4 v 1852 5614 a Fq(r)i Fo(+)e FK(1)2044 5423 y Fc(\031)2110 5552 y Fv(\000)g Fo(\()p Fq(n)g Fo(+)g FK(1)p Fo(\))p Black Black eop end end %%Page: 125 125 TeXDict begin HPSdict begin 125 124 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.125) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(125)p Black 75 399 a(and)1357 544 y Fu(r)20 b Fo(=)1518 416 y Fc(\032)1627 488 y Fq(n)13 b Fv(\000)g FK(3)g Fo(+)1920 452 y Fr(2)p 1920 467 34 4 v 1920 519 a Fm(n)1963 488 y Fp(;)147 b FK(if)23 b Fq(r)g Fo(=)d FK(2)1627 601 y Fq(n)13 b Fv(\000)g Fq(r)i Fv(\000)e FK(1)p Fp(;)146 b FK(if)24 b Fq(r)e Fv(\025)e FK(3)p Fp(:)p 75 776 1648 4 v 1764 781 a FF(Example)p 2102 776 V 75 800 4 25 v 3747 800 V 75 900 4 100 v 188 870 a(gap>)44 b(C:=RandomLinearCode\(1)q(0,5)q(,GF)q(\(2)q(\)\);)p 3747 900 V 75 1000 V 188 970 a(a)85 b([10,5,?])45 b(randomly)g (generated)g(code)f(over)g(GF\(2\))p 3747 1000 V 75 1099 V 188 1069 a(gap>)g(Size\(C\);)p 3747 1099 V 75 1199 V 188 1169 a(32)p 3747 1199 V 75 1299 V 188 1269 a(gap>)g (CoveringRadius\(C\);)p 3747 1299 V 75 1398 V 188 1368 a(3)p 3747 1398 V 75 1498 V 188 1468 a(gap>)g(LowerBoundCoveringRad)q (ius)q(Cou)q(nt)q(ing)q(Exc)q(ess)q(\(10)q(,32)q(,fa)q(lse)q(\);)p 3747 1498 V 75 1597 V 188 1568 a(0)p 3747 1597 V 75 1697 V 188 1667 a(gap>)g(LowerBoundCoveringRad)q(ius)q(Cou)q(nt)q(ing)q(Exc) q(ess)q(\(10)q(,3,)q(tru)q(e\);)p 3747 1697 V 75 1797 V 188 1767 a(7)p 3747 1797 V 75 1896 V 3747 1896 V 75 1921 4 25 v 3747 1921 V 75 1924 3675 4 v 75 2053 a SDict begin H.S end 75 2053 a 75 2053 a SDict begin 13.6 H.A end 75 2053 a 75 2053 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.10) cvn H.B /DEST pdfmark end 75 2053 a 117 x FJ(7.2.10)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Lo)o(werBoundCo)o(v)o (eringRadiusEmbedded1)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2344 a Fs(\006)22 b Ft(LowerBoundCoverin)q(gRa)q(diu)q(sEm)q(be)q (dde)q(d1\()53 b(n,)47 b(M,)g(false)h(\))1101 b Fr(\(function\))p Black 216 2570 a FK(This)68 b(command)g(can)g(also)h(be)e(called)i (with)f Ft(LowerBoundCoveringR)q(adi)q(us)q(Emb)q(edd)q(ed1)q(\()53 b(n,)47 b(r)75 2683 y([,true])i(\))p FK(.)k(If)32 b(the)g(last)h(ar)n (gument)h(of)e Ft(LowerBoundCoveringRa)q(di)q(usE)q(mbe)q(dde)q(d1)38 b FK(is)31 b('f)o(alse',)36 b(then)c(it)g(re-)75 2795 y(turns)c(a)g(lo)n(wer)f(bound)i(for)f(the)f(co)o(v)o(ering)i(radius)g (of)f(a)f(code)h(of)f(size)h Ft(M)f FK(and)h(length)h Ft(n)q FK(.)39 b(Otherwise,)29 b(it)f(returns)h(a)75 2908 y(lo)n(wer)23 b(bound)i(for)f(the)g(size)g(of)g(a)f(code)h(of)f (length)i Ft(n)f FK(and)g(co)o(v)o(ering)h(radius)g Ft(r)p FK(.)216 3021 y(This)e(bound)i(only)g(w)o(orks)f(for)g(binary)h(codes.) k(It)24 b(is)f(based)i(on)e(the)h(follo)n(wing)h(inequality:)1007 3247 y Fq(M)16 b Fv(\001)1137 3119 y Fc(\022)1198 3247 y Fq(V)1249 3261 y Fr(2)1287 3247 y Fo(\()p Fq(n)p Fp(;)10 b Fq(r)r Fo(\))j Fv(\000)1571 3119 y Fc(\022)1639 3185 y FK(2)p Fq(r)1662 3309 y(r)1722 3119 y Fc(\023\023)1876 3247 y Fv(\025)20 b FK(2)2012 3209 y Fm(n)2062 3247 y Fv(\000)13 b Fq(A)p Fo(\()p Fq(n)p Fp(;)d FK(2)p Fq(r)15 b Fo(+)e FK(1)p Fo(\))2576 3119 y Fc(\022)2643 3185 y FK(2)p Fq(r)2666 3309 y(r)2726 3119 y Fc(\023)2793 3247 y Fp(;)75 3475 y FK(where)27 b Fq(A)p Fo(\()p Fq(n)p Fp(;)10 b Fq(d)5 b Fo(\))27 b FK(denotes)h(the)f(maximal)h(cardinality) h(of)e(a)f(\(binary\))j(code)e(of)g(length)h Fq(n)e FK(and)i(minimum)e (distance)75 3588 y Fq(d)5 b FK(.)28 b(The)23 b(function)j Ft(UpperBound)g FK(is)e(used)g(to)f(compute)i(this)f(v)n(alue.)216 3701 y(Sometimes)295 b Ft(LowerBoundCovering)q(Rad)q(ius)q(Em)q(bed)q (ded)q(1)300 b FK(is)295 b(better)g(than)75 3814 y Ft (LowerBoundCovering)q(Rad)q(ius)q(Emb)q(ed)q(ded)q(2)p FK(,)28 b(sometimes)d(it)e(is)h(the)g(other)g(w)o(ay)f(around.)p 75 3911 1648 4 v 1764 3916 a FF(Example)p 2102 3911 V 75 3936 4 25 v 3747 3936 V 75 4036 4 100 v 188 4006 a(gap>)44 b(C:=RandomLinearCode\(1)q(0,5)q(,GF)q(\(2)q(\)\);)p 3747 4036 V 75 4135 V 188 4105 a(a)85 b([10,5,?])45 b(randomly)g (generated)g(code)f(over)g(GF\(2\))p 3747 4135 V 75 4235 V 188 4205 a(gap>)g(Size\(C\);)p 3747 4235 V 75 4335 V 188 4305 a(32)p 3747 4335 V 75 4434 V 188 4404 a(gap>)g (CoveringRadius\(C\);)p 3747 4434 V 75 4534 V 188 4504 a(3)p 3747 4534 V 75 4633 V 188 4604 a(gap>)g(LowerBoundCoveringRad)q (ius)q(Emb)q(ed)q(ded)q(1\(1)q(0,3)q(2,f)q(als)q(e\);)p 3747 4633 V 75 4733 V 188 4703 a(2)p 3747 4733 V 75 4833 V 188 4803 a(gap>)g(LowerBoundCoveringRad)q(ius)q(Emb)q(ed)q(ded)q (1\(1)q(0,3)q(,tr)q(ue\))q(;)p 3747 4833 V 75 4932 V 188 4902 a(7)p 3747 4932 V 75 5032 V 3747 5032 V 75 5057 4 25 v 3747 5057 V 75 5060 3675 4 v 75 5189 a SDict begin H.S end 75 5189 a 75 5189 a SDict begin 13.6 H.A end 75 5189 a 75 5189 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.11) cvn H.B /DEST pdfmark end 75 5189 a 116 x FJ(7.2.11)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Lo)o(werBoundCo)o(v)o (eringRadiusEmbedded2)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5479 a Fs(\006)22 b Ft(LowerBoundCoverin)q(gRa)q(diu)q(sEm)q(be)q (dde)q(d2\()53 b(n,)47 b(M,)g(false)h(\))1101 b Fr(\(function\))p Black Black Black eop end end %%Page: 126 126 TeXDict begin HPSdict begin 126 125 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.126) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(126)p Black 216 399 a(This)68 b(command)g(can)g(also)h (be)e(called)i(with)f Ft(LowerBoundCoveringR)q(adi)q(us)q(Emb)q(edd)q (ed2)q(\()53 b(n,)47 b(r)75 511 y([,true])i(\))p FK(.)k(If)32 b(the)g(last)h(ar)n(gument)h(of)e Ft(LowerBoundCoveringRa)q(di)q(usE)q (mbe)q(dde)q(d2)38 b FK(is)31 b('f)o(alse',)36 b(then)c(it)g(re-)75 624 y(turns)c(a)g(lo)n(wer)f(bound)i(for)f(the)f(co)o(v)o(ering)i (radius)g(of)f(a)f(code)h(of)f(size)h Ft(M)f FK(and)h(length)h Ft(n)q FK(.)39 b(Otherwise,)29 b(it)f(returns)h(a)75 737 y(lo)n(wer)23 b(bound)i(for)f(the)g(size)g(of)g(a)f(code)h(of)f (length)i Ft(n)f FK(and)g(co)o(v)o(ering)h(radius)g Ft(r)p FK(.)216 850 y(This)e(bound)i(only)g(w)o(orks)f(for)g(binary)h(codes.)k (It)24 b(is)f(based)i(on)e(the)h(follo)n(wing)h(inequality:)951 1101 y Fq(M)16 b Fv(\001)1081 973 y Fc(\022)1143 1101 y Fq(V)1194 1115 y Fr(2)1232 1101 y Fo(\()p Fq(n)p Fp(;)10 b Fq(r)r Fo(\))j Fv(\000)1526 1040 y FK(3)p 1526 1080 46 4 v 1526 1164 a(2)1582 973 y Fc(\022)1649 1040 y FK(2)p Fq(r)1671 1164 y(r)1732 973 y Fc(\023\023)1886 1101 y Fv(\025)20 b FK(2)2022 1064 y Fm(n)2072 1101 y Fv(\000)13 b FK(2)p Fq(A)p Fo(\()p Fq(n)p Fp(;)d FK(2)p Fq(r)15 b Fo(+)e FK(1)p Fo(\))2631 973 y Fc(\022)2699 1040 y FK(2)p Fq(r)2721 1164 y(r)2782 973 y Fc(\023)2848 1101 y Fp(;)75 1355 y FK(where)27 b Fq(A)p Fo(\()p Fq(n)p Fp(;)10 b Fq(d)5 b Fo(\))27 b FK(denotes)h(the)f(maximal)h(cardinality) h(of)e(a)f(\(binary\))j(code)e(of)g(length)h Fq(n)e FK(and)i(minimum)e (distance)75 1468 y Fq(d)5 b FK(.)28 b(The)23 b(function)j Ft(UpperBound)g FK(is)e(used)g(to)f(compute)i(this)f(v)n(alue.)216 1581 y(Sometimes)295 b Ft(LowerBoundCovering)q(Rad)q(ius)q(Em)q(bed)q (ded)q(1)300 b FK(is)295 b(better)g(than)75 1694 y Ft (LowerBoundCovering)q(Rad)q(ius)q(Emb)q(ed)q(ded)q(2)p FK(,)28 b(sometimes)d(it)e(is)h(the)g(other)g(w)o(ay)f(around.)p 75 1817 1648 4 v 1764 1822 a FF(Example)p 2102 1817 V 75 1842 4 25 v 3747 1842 V 75 1941 4 100 v 188 1911 a(gap>)44 b(C:=RandomLinearCode\(1)q(5,5)q(,GF)q(\(2)q(\)\);)p 3747 1941 V 75 2041 V 188 2011 a(a)85 b([15,5,?])45 b(randomly)g (generated)g(code)f(over)g(GF\(2\))p 3747 2041 V 75 2140 V 188 2111 a(gap>)g(Size\(C\);)p 3747 2140 V 75 2240 V 188 2210 a(32)p 3747 2240 V 75 2340 V 188 2310 a(gap>)g (CoveringRadius\(C\);)p 3747 2340 V 75 2439 V 188 2409 a(6)p 3747 2439 V 75 2539 V 188 2509 a(gap>)g(LowerBoundCoveringRad)q (ius)q(Emb)q(ed)q(ded)q(2\(1)q(0,3)q(2,f)q(als)q(e\);)p 3747 2539 V 75 2639 V 188 2609 a(2)p 3747 2639 V 75 2738 V 188 2708 a(gap>)g(LowerBoundCoveringRad)q(ius)q(Emb)q(ed)q(ded)q (2\(1)q(0,3)q(,tr)q(ue\))q(;)p 3747 2738 V 75 2838 V 188 2808 a(7)p 3747 2838 V 75 2938 V 3747 2938 V 75 2962 4 25 v 3747 2962 V 75 2965 3675 4 v 75 3099 a SDict begin H.S end 75 3099 a 75 3099 a SDict begin 13.6 H.A end 75 3099 a 75 3099 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.12) cvn H.B /DEST pdfmark end 75 3099 a 116 x FJ(7.2.12)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Lo)o(werBoundCo)o(v)o (eringRadiusInduction)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3389 a Fs(\006)22 b Ft(LowerBoundCoverin)q(gRa)q(diu)q(sIn)q(du)q (cti)q(on\()53 b(n,)47 b(r)g(\))1425 b Fr(\(function\))p Black 216 3615 a Ft(LowerBoundCovering)q(Rad)q(ius)q(In)q(duc)q(tio)q (n)26 b FK(returns)d(a)e(lo)n(wer)g(bound)i(for)e(the)g(size)h(of)f(a)g (code)h(with)f(length)75 3728 y Ft(n)i FK(and)h(co)o(v)o(ering)h (radius)g Ft(r)p FK(.)216 3841 y(If)e Fq(n)e Fo(=)f FK(2)p Fq(r)15 b Fo(+)e FK(2)23 b(and)h Fq(r)f Fv(\025)c FK(1,)k(the)h (returned)i(v)n(alue)e(is)f(4.)216 3954 y(If)g Fq(n)e Fo(=)f FK(2)p Fq(r)15 b Fo(+)e FK(3)23 b(and)h Fq(r)f Fv(\025)c FK(1,)k(the)h(returned)i(v)n(alue)e(is)f(7.)216 4067 y(If)g Fq(n)e Fo(=)f FK(2)p Fq(r)15 b Fo(+)e FK(4)23 b(and)h Fq(r)f Fv(\025)c FK(4,)k(the)h(returned)i(v)n(alue)e(is)f(8.) 216 4180 y(Otherwise,)h(0)f(is)h(returned.)p 75 4295 1648 4 v 1764 4300 a FF(Example)p 2102 4295 V 75 4320 4 25 v 3747 4320 V 75 4420 4 100 v 188 4390 a(gap>)44 b(C:=RandomLinearCode\(1)q(5,5)q(,GF)q(\(2)q(\)\);)p 3747 4420 V 75 4519 V 188 4490 a(a)85 b([15,5,?])45 b(randomly)g (generated)g(code)f(over)g(GF\(2\))p 3747 4519 V 75 4619 V 188 4589 a(gap>)g(CoveringRadius\(C\);)p 3747 4619 V 75 4719 V 188 4689 a(5)p 3747 4719 V 75 4818 V 188 4788 a(gap>)g(LowerBoundCoveringRad)q(ius)q(Ind)q(uc)q(tio)q(n\(1)q (5,6)q(\);)p 3747 4818 V 75 4918 V 188 4888 a(7)p 3747 4918 V 75 5018 V 3747 5018 V 75 5043 4 25 v 3747 5043 V 75 5046 3675 4 v 75 5179 a SDict begin H.S end 75 5179 a 75 5179 a SDict begin 13.6 H.A end 75 5179 a 75 5179 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.13) cvn H.B /DEST pdfmark end 75 5179 a 116 x FJ(7.2.13)p 0.0 0.0 1.0 TeXcolorrgb 99 w(UpperBoundCo)o(v)o(eringRadiusRedundancy)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5469 a Fs(\006)22 b Ft(UpperBoundCoverin)q (gRa)q(diu)q(sRe)q(du)q(nda)q(ncy)q(\()52 b(C)47 b(\))1518 b Fr(\(function\))p Black Black Black eop end end %%Page: 127 127 TeXDict begin HPSdict begin 127 126 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.127) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(127)p Black 216 399 a Ft(UpperBoundCovering)q(Rad)q(ius)q (Re)q(dun)q(dan)q(cy)28 b FK(returns)c(the)e(redundanc)o(y)k(of)c Ft(C)g FK(as)g(an)g(upper)i(bound)f(for)g(the)75 511 y(co)o(v)o(ering)i(radius)g(of)e Ft(C)q FK(.)28 b Ft(C)23 b FK(must)g(be)h(a)f(linear)i(code.)p 75 634 1648 4 v 1764 639 a FF(Example)p 2102 634 V 75 659 4 25 v 3747 659 V 75 759 4 100 v 188 729 a(gap>)44 b(C:=RandomLinearCode\(1)q(5,5)q (,GF)q(\(2)q(\)\);)p 3747 759 V 75 858 V 188 828 a(a)85 b([15,5,?])45 b(randomly)g(generated)g(code)f(over)g(GF\(2\))p 3747 858 V 75 958 V 188 928 a(gap>)g(CoveringRadius\(C\);)p 3747 958 V 75 1057 V 188 1028 a(5)p 3747 1057 V 75 1157 V 188 1127 a(gap>)g(UpperBoundCoveringRad)q(ius)q(Red)q(un)q(dan)q (cy\()q(C\);)p 3747 1157 V 75 1257 V 188 1227 a(10)p 3747 1257 V 75 1356 V 3747 1356 V 75 1381 4 25 v 3747 1381 V 75 1384 3675 4 v 75 1518 a SDict begin H.S end 75 1518 a 75 1518 a SDict begin 13.6 H.A end 75 1518 a 75 1518 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.14) cvn H.B /DEST pdfmark end 75 1518 a 116 x FJ(7.2.14)p 0.0 0.0 1.0 TeXcolorrgb 99 w(UpperBoundCo)o(v)o(eringRadiusDelsarte)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1808 a Fs(\006)22 b Ft(UpperBoundCoverin)q(gRa)q(diu)q(sDe)q(ls)q(art)q(e\()53 b(C)46 b(\))1611 b Fr(\(function\))p Black 216 2034 a Ft(UpperBoundCovering)q(Rad)q(ius)q(De)q(lsa)q(rte)26 b FK(returns)21 b(an)f(upper)h(bound)g(for)f(the)g(co)o(v)o(ering)i (radius)f(of)e Ft(C)q FK(.)26 b(This)75 2147 y(upper)g(bound)g(is)e (equal)h(to)g(the)f(e)o(xternal)i(distance)h(of)d Ft(C)q FK(,)f(this)i(is)g(the)f(minimum)g(distance)j(of)d(the)h(dual)g(code,)g (if)g Ft(C)75 2260 y FK(is)e(a)g(linear)i(code.)216 2373 y(This)e(is)h(described)i(in)d(Theorem)h(11.3.3)g(of)g([)p 0.0236 0.6179 0.0894 TeXcolorrgb 1678 2374 a SDict begin H.S end 1678 2374 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(HP03)p 0.0236 0.6179 0.0894 TeXcolorrgb 1885 2311 a SDict begin H.R end 1885 2311 a 1885 2373 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.HP03) cvn H.B /ANN pdfmark end 1885 2373 a Black FK(].)p 75 2490 1648 4 v 1764 2495 a FF(Example)p 2102 2490 V 75 2515 4 25 v 3747 2515 V 75 2614 4 100 v 188 2584 a(gap>)44 b(C:=RandomLinearCode\(1)q(5,5)q(,GF)q(\(2)q (\)\);)p 3747 2614 V 75 2714 V 188 2684 a(a)85 b([15,5,?])45 b(randomly)g(generated)g(code)f(over)g(GF\(2\))p 3747 2714 V 75 2813 V 188 2784 a(gap>)g(CoveringRadius\(C\);)p 3747 2813 V 75 2913 V 188 2883 a(5)p 3747 2913 V 75 3013 V 188 2983 a(gap>)g(UpperBoundCoveringRad)q(ius)q(Del)q(sa)q(rte)q (\(C\))q(;)p 3747 3013 V 75 3112 V 188 3082 a(13)p 3747 3112 V 75 3137 4 25 v 3747 3137 V 75 3140 3675 4 v 75 3274 a SDict begin H.S end 75 3274 a 75 3274 a SDict begin 13.6 H.A end 75 3274 a 75 3274 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.15) cvn H.B /DEST pdfmark end 75 3274 a 116 x FJ(7.2.15)p 0.0 0.0 1.0 TeXcolorrgb 99 w(UpperBoundCo)o(v)o (eringRadiusStr)n(ength)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3564 a Fs(\006)22 b Ft(UpperBoundCoverin)q(gRa)q(diu)q(sSt)q(re)q (ngt)q(h\()53 b(C)46 b(\))1611 b Fr(\(function\))p Black 216 3790 a Ft(UpperBoundCovering)q(Rad)q(ius)q(St)q(ren)q(gth)29 b FK(returns)d(an)d(upper)i(bound)g(for)f(the)f(co)o(v)o(ering)j (radius)e(of)g Ft(C)p FK(.)216 3903 y(First)h(the)g(code)g(is)f (punctured)k(at)c(the)h(zero)g(coordinates)j(\(i.e.)k(the)25 b(coordinates)j(where)c(all)h(code)n(w)o(ords)i(ha)n(v)o(e)75 4016 y(a)f(zero\).)38 b(If)26 b(the)g(remaining)i(code)f(has)g Fq(str)m(ength)h FK(1)e(\(i.e.)37 b(each)27 b(coordinate)i(contains)f (each)f(element)h(of)e(the)g(\002eld)75 4129 y(an)c(equal)i(number)f (of)f(times\),)h(then)g(it)f(returns)1602 4087 y Fm(q)p Fh(\000)p Fr(1)p 1602 4108 119 4 v 1645 4160 a Fm(q)1730 4129 y Fq(m)11 b Fo(+)g(\()p Fq(n)g Fv(\000)g Fq(m)p Fo(\))23 b FK(\(where)g Fq(q)f FK(is)g(the)g(size)h(of)f(the)h(\002eld) f(and)h Fq(m)e FK(is)h(the)75 4242 y(length)j(of)e(punctured)k(code\),) d(otherwise)h(it)f(returns)h Fq(n)p FK(.)j(This)23 b(bound)i(w)o(orks)f (for)g(all)g(codes.)p 75 4364 1648 4 v 1764 4369 a FF(Example)p 2102 4364 V 75 4389 4 25 v 3747 4389 V 75 4489 4 100 v 188 4459 a(gap>)44 b(C:=RandomLinearCode\(1)q(5,5)q(,GF)q(\(2)q (\)\);)p 3747 4489 V 75 4588 V 188 4558 a(a)85 b([15,5,?])45 b(randomly)g(generated)g(code)f(over)g(GF\(2\))p 3747 4588 V 75 4688 V 188 4658 a(gap>)g(CoveringRadius\(C\);)p 3747 4688 V 75 4788 V 188 4758 a(5)p 3747 4788 V 75 4887 V 188 4857 a(gap>)g(UpperBoundCoveringRad)q(ius)q(Str)q(en)q(gth)q (\(C\))q(;)p 3747 4887 V 75 4987 V 188 4957 a(7)p 3747 4987 V 75 5012 4 25 v 3747 5012 V 75 5015 3675 4 v 75 5148 a SDict begin H.S end 75 5148 a 75 5148 a SDict begin 13.6 H.A end 75 5148 a 75 5148 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.16) cvn H.B /DEST pdfmark end 75 5148 a 116 x FJ(7.2.16)p 0.0 0.0 1.0 TeXcolorrgb 99 w(UpperBoundCo)o(v)o (eringRadiusGriesmerLik)o(e)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5438 a Fs(\006)22 b Ft(UpperBoundCoverin)q(gRa)q(diu)q(sGr)q(ie)q (sme)q(rLi)q(ke\()53 b(C)47 b(\))1425 b Fr(\(function\))p Black Black Black eop end end %%Page: 128 128 TeXDict begin HPSdict begin 128 127 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.128) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(128)p Black 216 399 a(This)34 b(function)j(returns)f(an)e (upper)i(bound)f(for)g(the)g(co)o(v)o(ering)g(radius)h(of)e Ft(C)q FK(,)i(which)e(must)h(be)f(linear)l(,)k(in)d(a)75 511 y(Griesmer)n(-lik)o(e)26 b(f)o(ashion.)31 b(It)23 b(returns)1688 673 y Fq(n)13 b Fv(\000)1866 576 y Fm(k)1834 692 y Fa(\345)1830 766 y Fm(i)p Fk(=)p Fr(1)1943 545 y Fc(\030)2015 611 y Fq(d)p 2006 652 69 4 v 2006 735 a(q)2051 709 y Fm(i)2084 545 y Fc(\031)p 75 943 1648 4 v 1764 948 a FF(Example)p 2102 943 V 75 968 4 25 v 3747 968 V 75 1067 4 100 v 188 1037 a(gap>)44 b(C:=RandomLinearCode\(1) q(5,5)q(,GF)q(\(2)q(\)\);)p 3747 1067 V 75 1167 V 188 1137 a(a)85 b([15,5,?])45 b(randomly)g(generated)g(code)f(over)g (GF\(2\))p 3747 1167 V 75 1267 V 188 1237 a(gap>)g (CoveringRadius\(C\);)p 3747 1267 V 75 1366 V 188 1336 a(5)p 3747 1366 V 75 1466 V 188 1436 a(gap>)g(UpperBoundCoveringRad)q (ius)q(Gri)q(es)q(mer)q(Lik)q(e\(C)q(\);)p 3747 1466 V 75 1565 V 188 1536 a(9)p 3747 1565 V 75 1665 V 3747 1665 V 75 1690 4 25 v 3747 1690 V 75 1693 3675 4 v 75 1826 a SDict begin H.S end 75 1826 a 75 1826 a SDict begin 13.6 H.A end 75 1826 a 75 1826 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.2.17) cvn H.B /DEST pdfmark end 75 1826 a 116 x FJ(7.2.17)p 0.0 0.0 1.0 TeXcolorrgb 99 w(UpperBoundCo)o(v)o (eringRadiusCyclicCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2117 a Fs(\006)22 b Ft(UpperBoundCoverin)q(gRa)q(diu)q(sCy)q(cl)q (icC)q(ode)q(\()52 b(C)47 b(\))1518 b Fr(\(function\))p Black 216 2343 a FK(This)23 b(function)i(returns)g(an)e(upper)h(bound)h (for)e(the)g(co)o(v)o(ering)i(radius)f(of)f Ft(C)q FK(,)f(which)h(must) g(be)g(a)g(c)o(yclic)h(code.)29 b(It)75 2455 y(returns)1478 2597 y Fq(n)13 b Fv(\000)g Fq(k)h Fo(+)f FK(1)g Fv(\000)1900 2468 y Fc(\030)1961 2535 y Fq(w)p Fo(\()p Fq(g)p Fo(\()p Fq(x)p Fo(\)\))p 1961 2576 288 4 v 2082 2659 a FK(2)2259 2468 y Fc(\031)2322 2597 y Fp(;)75 2813 y FK(where)24 b Fq(g)p Fo(\()p Fq(x)p Fo(\))g FK(is)g(the)f(generator)j(polynomial)g (of)e Ft(C)p FK(.)p 75 2939 1648 4 v 1764 2944 a FF(Example)p 2102 2939 V 75 2964 4 25 v 3747 2964 V 75 3064 4 100 v 188 3034 a(gap>)44 b(C:=CyclicCodes\(15,GF\()q(2\)\))q([3])q(;)p 3747 3064 V 75 3163 V 188 3133 a(a)f(cyclic)h([15,12,1..2]1..3)k (enumerated)e(code)d(over)h(GF\(2\))p 3747 3163 V 75 3263 V 188 3233 a(gap>)g(CoveringRadius\(C\);)p 3747 3263 V 75 3362 V 188 3333 a(3)p 3747 3362 V 75 3462 V 188 3432 a(gap>)g(UpperBoundCoveringRad)q(ius)q(Cyc)q(li)q(cCo)q(de\()q (C\);)p 3747 3462 V 75 3562 V 188 3532 a(3)p 3747 3562 V 75 3661 V 3747 3661 V 75 3686 4 25 v 3747 3686 V 75 3689 3675 4 v 75 3833 a SDict begin H.S end 75 3833 a 75 3833 a SDict begin 13.6 H.A end 75 3833 a 75 3833 a SDict begin [ /View [/XYZ H.V] /Dest (section.7.3) cvn H.B /DEST pdfmark end 75 3833 a 149 x FM(7.3)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Special)31 b(matrices)e(in)i FL(GU)-5 b(A)c(V)g(A)p Black 75 4189 a FK(This)23 b(section)j(e)o(xplains)f(functions)h(that)e (w)o(ork)g(with)f(special)i(matrices)g Fy(GU)m(A)-6 b(V)f(A)22 b FK(needs)i(for)g(se)n(v)o(eral)h(codes.)216 4302 y(Firstly)-6 b(,)42 b(we)c(describe)i(some)e(matrix)h(generating)i(functions)g (\(see)d Ft(KrawtchoukMat)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3149 4303 a SDict begin H.S end 3149 4303 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 3330 4240 a SDict begin H.R end 3330 4240 a 3330 4302 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.1) cvn H.B /ANN pdfmark end 3330 4302 a Black FK(\),)g Ft(GrayMat)75 4415 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 4416 a SDict begin H.S end 105 4416 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 286 4353 a SDict begin H.R end 286 4353 a 286 4415 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.2) cvn H.B /ANN pdfmark end 286 4415 a Black FK(\),)24 b Ft(SylvesterMat)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 972 4416 a SDict begin H.S end 972 4416 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 1153 4353 a SDict begin H.R end 1153 4353 a 1153 4415 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.3) cvn H.B /ANN pdfmark end 1153 4415 a Black FK(\),)d Ft(HadamardMat)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1792 4416 a SDict begin H.S end 1792 4416 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 1973 4353 a SDict begin H.R end 1973 4353 a 1973 4415 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.4) cvn H.B /ANN pdfmark end 1973 4415 a Black FK(\))f(and)f Ft(MOLS)g FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2420 4416 a SDict begin H.S end 2420 4416 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3.11)p 0.0236 0.0894 0.6179 TeXcolorrgb 2646 4353 a SDict begin H.R end 2646 4353 a 2646 4415 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.11) cvn H.B /ANN pdfmark end 2646 4415 a Black FK(\)\).)216 4528 y(Ne)o(xt)32 b(we)g(describe)i(tw)o(o)e(functions)j(re)o(garding)f (a)e(standard)j(form)d(of)g(matrices)i(\(see)f Ft(PutStandardForm)75 4641 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 4642 a SDict begin H.S end 105 4642 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3.6)p 0.0236 0.0894 0.6179 TeXcolorrgb 286 4579 a SDict begin H.R end 286 4579 a 286 4641 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.6) cvn H.B /ANN pdfmark end 286 4641 a Black FK(\))24 b(and)g Ft(IsInStandardForm)29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1289 4642 a SDict begin H.S end 1289 4642 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3.7)p 0.0236 0.0894 0.6179 TeXcolorrgb 1470 4579 a SDict begin H.R end 1470 4579 a 1470 4641 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.7) cvn H.B /ANN pdfmark end 1470 4641 a Black FK(\)\).)216 4754 y(Then)c(we)f (describe)j(functions)h(that)d(return)i(a)d(matrix)i(after)f(a)g (manipulation)j(\(see)d Ft(PermutedCols)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3515 4755 a SDict begin H.S end 3515 4755 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3.8)p 0.0236 0.0894 0.6179 TeXcolorrgb 3696 4692 a SDict begin H.R end 3696 4692 a 3696 4754 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.8) cvn H.B /ANN pdfmark end 3696 4754 a Black FK(\),)75 4867 y Ft(VerticalConversion)q(Fie)q(ldM)q(at)g FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1333 4869 a SDict begin H.S end 1333 4869 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(7.3.9)p 0.0236 0.0894 0.6179 TeXcolorrgb 1514 4805 a SDict begin H.R end 1514 4805 a 1514 4867 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.9) cvn H.B /ANN pdfmark end 1514 4867 a Black FK(\))24 b(and)g Ft(HorizontalConversi) q(on)q(Fie)q(ldM)q(at)29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3073 4868 a SDict begin H.S end 3073 4868 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3.10)p 0.0236 0.0894 0.6179 TeXcolorrgb 3299 4805 a SDict begin H.R end 3299 4805 a 3299 4867 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.10) cvn H.B /ANN pdfmark end 3299 4867 a Black FK(\)\).)216 4980 y(Finally)-6 b(,)31 b(we)d(describe)j(functions)g (that)e(do)g(some)g(tests)g(on)g(matrices)h(\(see)f Ft(IsLatinSquare)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3333 4981 a SDict begin H.S end 3333 4981 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3.12)p 0.0236 0.0894 0.6179 TeXcolorrgb 3559 4918 a SDict begin H.R end 3559 4918 a 3559 4980 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.12) cvn H.B /ANN pdfmark end 3559 4980 a Black FK(\))d(and)75 5092 y Ft(AreMOLS)25 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 452 5093 a SDict begin H.S end 452 5093 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3.13)p 0.0236 0.0894 0.6179 TeXcolorrgb 678 5030 a SDict begin H.R end 678 5030 a 678 5092 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.13) cvn H.B /ANN pdfmark end 678 5092 a Black FK(\)\).)p Black Black eop end end %%Page: 129 129 TeXDict begin HPSdict begin 129 128 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.129) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(129)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.1) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(7.3.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(KrawtchoukMat)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(KrawtchoukMat\()52 b(n,)47 b(q)g(\))2352 b Fr(\(function\))p Black 216 799 a Ft(KrawtchoukMat)24 b FK(returns)d(the)f Fq(n)9 b Fo(+)g FK(1)20 b(by)g Fq(n)9 b Fo(+)g FK(1)19 b(matrix)i Fq(K)g Fo(=)16 b(\()p Fq(k)2247 813 y Fm(i)10 b(j)2300 799 y Fo(\))20 b FK(de\002ned)g(by)g Fq(k)2791 813 y Fm(i)10 b(j)2861 799 y Fo(=)16 b Fq(K)3007 813 y Fm(i)3029 799 y Fo(\()e Fq(j)r Fo(\))20 b FK(for)g Fq(i)p Fp(;)k Fq(j)19 b Fo(=)d FK(0)p Fp(;)10 b(:::;)g Fq(n)p FK(.)75 912 y Fq(K)134 926 y Fm(i)156 912 y Fo(\()k Fq(j)r Fo(\))22 b FK(is)f(the)i(Kra)o(wtchouk)g(number)f(\(see)h Ft(Krawtchouk)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1953 913 a SDict begin H.S end 1953 913 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.5.6)p 0.0236 0.0894 0.6179 TeXcolorrgb 2134 850 a SDict begin H.R end 2134 850 a 2134 912 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.5.6) cvn H.B /ANN pdfmark end 2134 912 a Black FK(\)\).)k Ft(n)21 b FK(must)h(be)g(a)f(positi)n(v)o(e)j(inte)o(ger)f(and)f Ft(q)f FK(a)h(prime)75 1024 y(po)n(wer)-5 b(.)43 b(The)27 b(Kra)o(wtchouk)j(matrix)e(is)g(used)h(in)f(the)h Fq(MacW)-5 b(illiams)29 b(identities)p FK(,)i(de\002ning)f(the)e(relation)i (between)75 1137 y(the)i(weight)g(distrib)n(ution)i(of)e(a)f(code)h(of) f(length)i Ft(n)d FK(o)o(v)o(er)i(a)f(\002eld)g(of)g(size)h Ft(q)p FK(,)g(and)g(its)f(dual)h(code.)53 b(Each)32 b(call)f(to)75 1250 y Ft(KrawtchoukMat)c FK(returns)f(a)d(ne)n(w)g(matrix,)g(so)h(it)f (is)h(safe)g(to)f(modify)i(the)e(result.)p 75 1373 1648 4 v 1764 1378 a FF(Example)p 2102 1373 V 75 1398 4 25 v 3747 1398 V 75 1497 4 100 v 188 1468 a(gap>)44 b(PrintArray\()i (KrawtchoukMat\()h(3,)c(2)g(\))f(\);)p 3747 1497 V 75 1597 V 188 1567 a([)h([)127 b(1,)h(1,)f(1,)h(1)43 b(],)p 3747 1597 V 75 1697 V 273 1667 a([)127 b(3,)h(1,)85 b(-1,)h(-3)43 b(],)p 3747 1697 V 75 1796 V 273 1766 a([)127 b(3,)85 b(-1,)h(-1,)128 b(3)43 b(],)p 3747 1796 V 75 1896 V 273 1866 a([)127 b(1,)85 b(-1,)128 b(1,)86 b(-1)43 b(])f(])p 3747 1896 V 75 1996 V 188 1966 a(gap>)i(C)e(:=)h(HammingCode\()k(3)42 b(\);;)i(a)e(:=)i(WeightDistribution\()k(C)43 b(\);)p 3747 1996 V 75 2095 V 188 2065 a([)g(1,)g(0,)g(0,)g(7,)g(7,)g(0,)g(0,)g (1)f(])p 3747 2095 V 75 2195 V 188 2165 a(gap>)i(n)e(:=)h(WordLength\() j(C)d(\);;)g(q)g(:=)g(Size\()h(LeftActingDomain\()k(C)43 b(\))g(\);;)p 3747 2195 V 75 2294 V 188 2265 a(gap>)h(k)e(:=)h (Dimension\()j(C)d(\);;)p 3747 2294 V 75 2394 V 188 2364 a(gap>)h(q\210\()f(-k)g(\))g(*)f(KrawtchoukMat\()47 b(n,)d(q)e(\))h(*)g (a;)p 3747 2394 V 75 2494 V 188 2464 a([)g(1,)g(0,)g(0,)g(0,)g(7,)g(0,) g(0,)g(0)f(])p 3747 2494 V 75 2593 V 188 2563 a(gap>)i (WeightDistribution\()k(DualCode\()e(C)d(\))f(\);)p 3747 2593 V 75 2693 V 188 2663 a([)h(1,)g(0,)g(0,)g(0,)g(7,)g(0,)g(0,)g(0)f (])p 3747 2693 V 75 2718 4 25 v 3747 2718 V 75 2721 3675 4 v 75 2954 a SDict begin H.S end 75 2954 a 75 2954 a SDict begin 13.6 H.A end 75 2954 a 75 2954 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.2) cvn H.B /DEST pdfmark end 75 2954 a 116 x FJ(7.3.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(GrayMat)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3244 a Fs(\006)22 b Ft(GrayMat\()50 b(n,)d(F)f(\))2631 b Fr(\(function\))p Black 216 3470 a Ft(GrayMat)25 b FK(returns)f(a)f(list)g(of)g(all)g (dif)n(ferent)i(v)o(ectors)f(\(see)g Fy(GAP)p FK(')-5 b(s)21 b Ft(Vectors)k FK(command\))f(of)f(length)h Ft(n)f FK(o)o(v)o(er)g(the)75 3583 y(\002eld)g Ft(F)q FK(,)f(using)j(Gray)f (ordering.)31 b Ft(n)23 b FK(must)g(be)h(a)f(positi)n(v)o(e)i(inte)o (ger)-5 b(.)30 b(This)24 b(order)g(has)g(the)g(property)i(that)e (subsequent)75 3696 y(v)o(ectors)c(dif)n(fer)f(in)g(e)o(xactly)h(one)f (coordinate.)30 b(The)18 b(\002rst)h(v)o(ector)g(is)g(al)o(w)o(ays)g (the)g(null)g(v)o(ector)-5 b(.)28 b(Each)19 b(call)g(to)f Ft(GrayMat)75 3809 y FK(returns)25 b(a)e(ne)n(w)g(matrix,)h(so)g(it)f (is)g(safe)h(to)g(modify)g(the)g(result.)p 75 3931 1648 4 v 1764 3936 a FF(Example)p 2102 3931 V 75 3956 4 25 v 3747 3956 V 75 4056 4 100 v 188 4026 a(gap>)44 b(GrayMat\(3\);)p 3747 4056 V 75 4156 V 188 4126 a([)f([)f(0*Z\(2\),)j(0*Z\(2\),)g (0*Z\(2\))f(],)f([)g(0*Z\(2\),)i(0*Z\(2\),)f(Z\(2\)\2100)h(],)p 3747 4156 V 75 4255 V 273 4225 a([)d(0*Z\(2\),)j(Z\(2\)\2100,)g (Z\(2\)\2100)f(],)f([)g(0*Z\(2\),)i(Z\(2\)\2100,)f(0*Z\(2\))h(],)p 3747 4255 V 75 4355 V 273 4325 a([)d(Z\(2\)\2100,)j(Z\(2\)\2100,)g (0*Z\(2\))f(],)f([)g(Z\(2\)\2100,)i(Z\(2\)\2100,)f(Z\(2\)\2100)h(],)p 3747 4355 V 75 4454 V 273 4425 a([)d(Z\(2\)\2100,)j(0*Z\(2\),)g (Z\(2\)\2100)f(],)f([)g(Z\(2\)\2100,)i(0*Z\(2\),)f(0*Z\(2\))h(])d(])p 3747 4454 V 75 4554 V 188 4524 a(gap>)i(G)e(:=)h(GrayMat\()i(4,)e (GF\(4\))h(\);;)g(Length\(G\);)p 3747 4554 V 75 4654 V 188 4624 a(256)424 b(#)43 b(the)g(length)i(of)e(a)f(GrayMat)j(is)e (always)i(q\210n)p 3747 4654 V 75 4753 V 188 4723 a(gap>)f(G[101])g(-)f (G[100];)p 3747 4753 V 75 4853 V 188 4823 a([)g(0*Z\(2\),)h(0*Z\(2\),)h (Z\(2\)\2100,)g(0*Z\(2\))f(])p 3747 4853 V 75 4878 4 25 v 3747 4878 V 75 4881 3675 4 v 75 5014 a SDict begin H.S end 75 5014 a 75 5014 a SDict begin 13.6 H.A end 75 5014 a 75 5014 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.3) cvn H.B /DEST pdfmark end 75 5014 a 116 x FJ(7.3.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Sylv)o(esterMat)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5305 a Fs(\006)22 b Ft(SylvesterMat\()51 b(n)c(\))2538 b Fr(\(function\))p Black Black Black eop end end %%Page: 130 130 TeXDict begin HPSdict begin 130 129 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.130) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(130)p Black 216 399 a Ft(SylvesterMat)22 b FK(returns)e(the)f Fq(n)8 b Fv(\002)g Fq(n)17 b FK(Sylv)o(ester)j (matrix)e(of)h(order)g Ft(n)p FK(.)27 b(This)18 b(is)g(a)g(special)i (case)f(of)f(the)g(Hadamard)75 511 y(matrices)35 b(\(see)g Ft(HadamardMat)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 1169 512 a SDict begin H.S end 1169 512 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 1350 449 a SDict begin H.R end 1350 449 a 1350 511 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.4) cvn H.B /ANN pdfmark end 1350 511 a Black FK(\)\).)60 b(F)o(or)33 b(this)i(construction,)40 b Ft(n)33 b FK(must)h(be)g(a)g (po)n(wer)g(of)g(2.)59 b(Each)34 b(call)g(to)75 624 y Ft(SylvesterMat)27 b FK(returns)e(a)e(ne)n(w)g(matrix,)h(so)g(it)f(is)g (safe)h(to)g(modify)g(the)g(result.)p 75 745 1648 4 v 1764 750 a FF(Example)p 2102 745 V 75 770 4 25 v 3747 770 V 75 869 4 100 v 188 840 a(gap>)44 b(PrintArray\(SylvesterM)q(at\() q(2\)\))q(;)p 3747 869 V 75 969 V 188 939 a([)f([)127 b(1,)h(1)42 b(],)p 3747 969 V 75 1069 V 273 1039 a([)127 b(1,)85 b(-1)43 b(])g(])p 3747 1069 V 75 1168 V 188 1138 a(gap>)h(PrintArray\()i(SylvesterMat\(4\))h(\);)p 3747 1168 V 75 1268 V 188 1238 a([)c([)127 b(1,)h(1,)f(1,)h(1)43 b(],)p 3747 1268 V 75 1368 V 273 1338 a([)127 b(1,)85 b(-1,)128 b(1,)86 b(-1)43 b(],)p 3747 1368 V 75 1467 V 273 1437 a([)127 b(1,)h(1,)85 b(-1,)h(-1)43 b(],)p 3747 1467 V 75 1567 V 273 1537 a([)127 b(1,)85 b(-1,)h(-1,)128 b(1)43 b(])f(])p 3747 1567 V 75 1592 4 25 v 3747 1592 V 75 1595 3675 4 v 75 1825 a SDict begin H.S end 75 1825 a 75 1825 a SDict begin 13.6 H.A end 75 1825 a 75 1825 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.4) cvn H.B /DEST pdfmark end 75 1825 a 117 x FJ(7.3.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(HadamardMat)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2116 a Fs(\006)22 b Ft(HadamardMat\()51 b(n)c(\))2584 b Fr(\(function\))p Black 216 2342 a Ft(HadamardMat)34 b FK(returns)d(a)f(Hadamard)h (matrix)g(of)f(order)i Ft(n)p FK(.)48 b(This)30 b(is)g(an)g Fq(n)15 b Fv(\002)g Fq(n)31 b FK(matrix)f(with)g(the)h(property)75 2455 y(that)f(the)f(matrix)h(multiplied)h(by)e(its)g(transpose)j (returns)f Ft(n)d FK(times)i(the)f(identity)i(matrix.)46 b(This)29 b(is)g(only)h(possible)75 2567 y(for)24 b Fq(n)d Fo(=)f FK(1)p Fp(;)10 b Fq(n)21 b Fo(=)f FK(2)j(or)h(in)f(cases)i (where)f Ft(n)f FK(is)h(a)f(multiple)i(of)f(4.)k(If)c(the)g(matrix)g (does)h(not)f(e)o(xist)g(or)f(is)h(not)g(kno)n(wn)g(\(as)75 2680 y(of)h(1998\),)h Ft(HadamardMat)i FK(returns)f(an)e(error)-5 b(.)34 b(A)24 b(lar)n(ge)i(number)g(of)f(construction)k(methods)d(is)f (kno)n(wn)g(to)g(create)75 2793 y(these)34 b(matrices)f(for)g(dif)n (ferent)i(orders.)57 b Ft(HadamardMat)35 b FK(mak)o(es)f(use)f(of)f(tw) o(o)g(construction)k(methods)e(\(among)75 2906 y(which)g(the)g(Sylv)o (ester)h(construction)i(\226)d(see)g Ft(SylvesterMat)j FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2173 2907 a SDict begin H.S end 2173 2907 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3.3)p 0.0236 0.0894 0.6179 TeXcolorrgb 2354 2844 a SDict begin H.R end 2354 2844 a 2354 2906 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.3) cvn H.B /ANN pdfmark end 2354 2906 a Black FK(\)\).)60 b(These)34 b(methods)h(co)o(v)o(er)f(most)g(of)g(the)75 3019 y(possible)28 b(Hadamard)f(matrices,)g(although)h(some)e(special)h(algorithms)h(ha)n (v)o(e)f(not)f(been)g(implemented)i(yet.)36 b(The)75 3132 y(follo)n(wing)27 b(orders)g(less)f(than)g(100)g(do)g(not)g(yet)f (ha)n(v)o(e)h(an)g(implementation)i(for)e(a)f(Hadamard)h(matrix)g(in)g Fy(GU)m(A)-6 b(V)f(A)p FK(:)75 3245 y(28)p Fp(;)10 b FK(36)p Fp(;)g FK(52)p Fp(;)g FK(76)p Fp(;)g FK(92.)p 75 3364 1648 4 v 1764 3369 a FF(Example)p 2102 3364 V 75 3388 4 25 v 3747 3388 V 75 3488 4 100 v 188 3458 a(gap>)44 b(C)e(:=)h(HadamardMat\(8\);;)48 b(PrintArray\(C\);)p 3747 3488 V 75 3588 V 188 3558 a([)43 b([)127 b(1,)h(1,)f(1,)h(1,)g(1,) f(1,)h(1,)g(1)43 b(],)p 3747 3588 V 75 3687 V 273 3657 a([)127 b(1,)85 b(-1,)128 b(1,)86 b(-1,)128 b(1,)85 b(-1,)128 b(1,)86 b(-1)43 b(],)p 3747 3687 V 75 3787 V 273 3757 a([)127 b(1,)h(1,)85 b(-1,)h(-1,)128 b(1,)f(1,)86 b(-1,)g(-1)43 b(],)p 3747 3787 V 75 3887 V 273 3857 a([)127 b(1,)85 b(-1,)h(-1,)128 b(1,)g(1,)85 b(-1,)h(-1,)128 b(1)43 b(],)p 3747 3887 V 75 3986 V 273 3956 a([)127 b(1,)h(1,)f(1,)h(1,)85 b(-1,)h(-1,)g(-1,)g(-1)43 b(],)p 3747 3986 V 75 4086 V 273 4056 a([)127 b(1,)85 b(-1,)128 b(1,)86 b(-1,)f(-1,)128 b(1,)86 b(-1,)128 b(1)43 b(],)p 3747 4086 V 75 4185 V 273 4156 a([)127 b(1,)h(1,)85 b(-1,)h(-1,)f(-1,)h(-1,)128 b(1,)g(1)43 b(],)p 3747 4185 V 75 4285 V 273 4255 a([)127 b(1,)85 b(-1,)h(-1,)128 b(1,)85 b(-1,)128 b(1,)g(1,)86 b(-1)43 b(])f(])p 3747 4285 V 75 4385 V 188 4355 a(gap>)i(C)e(*)h (TransposedMat\(C\))48 b(=)42 b(8)h(*)g(IdentityMat\()j(8,)d(8)g(\);)p 3747 4385 V 75 4484 V 188 4454 a(true)p 3747 4484 V 75 4509 4 25 v 3747 4509 V 75 4512 3675 4 v 75 4645 a SDict begin H.S end 75 4645 a 75 4645 a SDict begin 13.6 H.A end 75 4645 a 75 4645 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.5) cvn H.B /DEST pdfmark end 75 4645 a 116 x FJ(7.3.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(V)-9 b(andermondeMat)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4936 a Fs(\006)22 b Ft(VandermondeMat\()52 b(X,)47 b(a)g(\))2306 b Fr(\(function\))p Black 216 5162 a FK(The)31 b(function)j Ft(VandermondeMat)i FK(returns)d(the)f Fo(\()p Fq(a)16 b Fo(+)g FK(1)p Fo(\))g Fv(\002)f Fq(n)31 b FK(matrix)i(of)e(po)n(wers)h Fq(x)2984 5116 y Fm(j)2974 5187 y(i)3040 5162 y FK(where)g Ft(X)f FK(is)g(a)g(list)h(of)75 5274 y(elements)25 b(of)e(a)g(\002eld,)h Fq(X)k Fo(=)20 b Fv(f)p Fq(x)1050 5288 y Fr(1)1088 5274 y Fp(;)10 b(:::;)g Fq(x)1273 5288 y Fm(n)1312 5274 y Fv(g)p FK(,)23 b(and)h Ft(a)f FK(is)g(a)g(non-ne)o(gati)n(v)o(e)j(inte) o(ger)-5 b(.)p 75 5398 1648 4 v 1764 5403 a FF(Example)p 2102 5398 V 75 5423 4 25 v 3747 5423 V 75 5523 4 100 v 188 5493 a(gap>)44 b(M:=VandermondeMat\([Z\()q(5\),)q(Z\(5)q(\)\210)q (2,Z)q(\(5\))q(\2100,)q(Z\(5)q(\)\2103)q(],2)q(\);)p 3747 5523 V 75 5622 V 188 5592 a([)f([)f(Z\(5\)\2100,)j(Z\(5\),)f (Z\(5\)\2102)g(],)f([)g(Z\(5\)\2100,)i(Z\(5\)\2102,)g(Z\(5\)\2100)f(],) p 3747 5622 V Black Black eop end end %%Page: 131 131 TeXDict begin HPSdict begin 131 130 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.131) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(131)p Black 75 428 4 100 v 273 399 a FF([)42 b(Z\(5\)\2100,)j(Z\(5\)\2100,)g(Z\(5\)\2100)f(],)f([)g(Z\(5\)\2100,)i (Z\(5\)\2103,)f(Z\(5\)\2102)h(])d(])p 3747 428 V 75 528 V 188 498 a(gap>)i(Display\(M\);)p 3747 528 V 75 628 V 230 598 a(1)f(2)g(4)p 3747 628 V 75 727 V 230 697 a(1)g(4)g(1)p 3747 727 V 75 827 V 230 797 a(1)g(1)g(1)p 3747 827 V 75 927 V 230 897 a(1)g(3)g(4)p 3747 927 V 75 951 4 25 v 3747 951 V 75 954 3675 4 v 75 1169 a SDict begin H.S end 75 1169 a 75 1169 a SDict begin 13.6 H.A end 75 1169 a 75 1169 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.6) cvn H.B /DEST pdfmark end 75 1169 a 116 x FJ(7.3.6)p 0.0 0.0 1.0 TeXcolorrgb 99 w(PutStandardF)n(orm)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1459 a Fs(\006)22 b Ft(PutStandardForm\()53 b(M[,)47 b(idleft])i(\))1935 b Fr(\(function\))p Black 216 1685 a FK(W)-7 b(e)26 b(say)i(that)f(a)g Fq(k)16 b Fv(\002)e Fq(n)26 b FK(matrix)i(is)f(in)g Fq(standar)m(d)i(form)e FK(if)g(it)g(is)g(equal)h(to)f(the)g(block)i(matrix)e Fo(\()p Fq(I)32 b Fv(j)26 b Fq(A)p Fo(\))p FK(,)h(for)g(some)75 1798 y Fq(k)16 b Fv(\002)e Fo(\()p Fq(n)g Fv(\000)g Fq(k)r Fo(\))28 b FK(matrix)g Fq(A)f FK(and)h(where)g Fq(I)k FK(is)27 b(the)h Fq(k)16 b Fv(\002)e Fq(k)29 b FK(identity)h(matrix.)42 b(It)27 b(follo)n(ws)i(from)e(a)h(basis)g(result)h(in)f(linear)75 1911 y(algebra)36 b(that,)i(after)d(a)f(possible)j(permutation)g(of)d (the)h(columns,)k(using)c(elementary)i(ro)n(w)d(operations,)40 b(e)n(v)o(ery)75 2024 y(matrix)32 b(can)f(be)h(reduced)h(to)e(standard) i(form.)52 b Ft(PutStandardForm)36 b FK(puts)c(a)f(matrix)h Ft(M)e FK(in)h(standard)j(form,)f(and)75 2137 y(returns)g(the)f (permutation)i(needed)f(to)e(do)g(so.)53 b Ft(idleft)33 b FK(is)e(a)g(boolean)i(that)f(sets)g(the)g(position)h(of)f(the)f (identity)75 2250 y(matrix)25 b(in)f Ft(M)q FK(.)30 b(\(The)24 b(def)o(ault)i(for)f Ft(idleft)g FK(is)g(`true'.\))32 b(If)24 b Ft(idleft)i FK(is)e(set)h(to)f(`true',)h(the)g(identity)h (matrix)f(is)f(put)h(on)75 2362 y(the)k(left)h(side)f(of)g Ft(M)p FK(.)44 b(Otherwise,)31 b(it)e(is)g(put)g(at)g(the)g(right)h (side.)45 b(\(This)29 b(option)i(is)d(useful)j(when)e(putting)i(a)d (check)75 2475 y(matrix)d(of)g(a)f(code)h(into)g(standard)i(form.\))32 b(The)24 b(function)j Ft(BaseMat)f FK(also)g(returns)g(a)e(similar)h (standard)i(form,)e(b)n(ut)75 2588 y(does)31 b(not)f(apply)h(column)g (permutations.)51 b(The)30 b(ro)n(ws)f(of)h(the)g(matrix)h(still)f (span)h(the)f(same)g(v)o(ector)h(space)g(after)75 2701 y Ft(BaseMat)p FK(,)25 b(b)n(ut)f(after)g(calling)i Ft(PutStandardForm) p FK(,)h(this)e(is)e(not)h(necessarily)i(true.)p 75 2808 1648 4 v 1764 2813 a FF(Example)p 2102 2808 V 75 2833 4 25 v 3747 2833 V 75 2932 4 100 v 188 2902 a(gap>)44 b(M)e(:=)h(Z\(2\)*[[1,0,0,1],[0,)q(0,1)q(,1)q(]];)q(;)48 b(PrintArray\(M\);)p 3747 2932 V 75 3032 V 188 3002 a([)43 b([)169 b(Z\(2\),)87 b(0*Z\(2\),)g(0*Z\(2\),)172 b(Z\(2\))43 b(],)p 3747 3032 V 75 3132 V 273 3102 a([)85 b(0*Z\(2\),)i(0*Z\(2\),) 171 b(Z\(2\),)h(Z\(2\))43 b(])g(])p 3747 3132 V 75 3231 V 188 3201 a(gap>)h(PutStandardForm\(M\);)811 b(#)42 b(identity)j(at)e(the)h(left)f(side)p 3747 3231 V 75 3331 V 188 3301 a(\(2,3\))p 3747 3331 V 75 3430 V 188 3401 a(gap>)h(PrintArray\(M\);)p 3747 3430 V 75 3530 V 188 3500 a([)f([)169 b(Z\(2\),)87 b(0*Z\(2\),)g(0*Z\(2\),)172 b(Z\(2\))43 b(],)p 3747 3530 V 75 3630 V 273 3600 a([)85 b(0*Z\(2\),)171 b(Z\(2\),)87 b(0*Z\(2\),)172 b(Z\(2\))43 b(])g(])p 3747 3630 V 75 3729 V 188 3699 a(gap>)h(PutStandardForm\(M,)k (false\);)511 b(#)42 b(identity)j(at)e(the)h(right)g(side)p 3747 3729 V 75 3829 V 188 3799 a(\(1,4,3\))p 3747 3829 V 75 3929 V 188 3899 a(gap>)g(PrintArray\(M\);)p 3747 3929 V 75 4028 V 188 3998 a([)f([)85 b(0*Z\(2\),)171 b(Z\(2\),)g(Z\(2\),)87 b(0*Z\(2\))44 b(],)p 3747 4028 V 75 4128 V 273 4098 a([)85 b(0*Z\(2\),)171 b(Z\(2\),)87 b(0*Z\(2\),)172 b(Z\(2\))43 b(])g(])p 3747 4128 V 75 4227 V 188 4198 a(gap>)h(C)e(:=)h(BestKnownLinearCode)q(\()48 b(23,)c(12,)f(GF\(2\))h(\);)p 3747 4227 V 75 4327 V 188 4297 a(a)f(linear)h([23,12,7]3)i(punctured)f(code)p 3747 4327 V 75 4427 V 188 4397 a(gap>)f(G:=MutableCopyMat\(Gen)q(era)q(tor)q (Ma)q(t\(C)q(\)\);)q(;)p 3747 4427 V 75 4526 V 188 4496 a(gap>)g(PutStandardForm\(G\);)p 3747 4526 V 75 4626 V 188 4596 a(\(\))p 3747 4626 V 75 4726 V 188 4696 a(gap>)g (Display\(G\);)p 3747 4726 V 75 4825 V 230 4795 a(1)f(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)f(1)h(.)g(1)f(.)h(1)g(1)g(1)f(.)h(.)g(.)f(1) p 3747 4825 V 75 4925 V 230 4895 a(.)h(1)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)f(1)h(1)g(1)f(1)h(1)g(.)g(.)f(1)h(.)g(.)f(.)p 3747 4925 V 75 5024 V 230 4995 a(.)h(.)g(1)f(.)h(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)f(1)h(1)g(.)f(1)h(.)g(.)g(1)f(.)h(1)g(.)f(1)p 3747 5024 V 75 5124 V 230 5094 a(.)h(.)g(.)f(1)h(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)f(1)h(1)g(.)f(.)h(.)g(1)g(1)f(1)h(.)g(1)f(.)p 3747 5124 V 75 5224 V 230 5194 a(.)h(.)g(.)f(.)h(1)g(.)f(.)h(.)g(.)f(.) h(.)g(.)f(1)h(1)g(.)f(.)h(1)g(1)g(.)f(1)h(1)g(.)f(1)p 3747 5224 V 75 5323 V 230 5293 a(.)h(.)g(.)f(.)h(.)g(1)f(.)h(.)g(.)f(.) h(.)g(.)f(.)h(1)g(1)f(.)h(.)g(1)g(1)f(.)h(1)g(1)f(1)p 3747 5323 V 75 5423 V 230 5393 a(.)h(.)g(.)f(.)h(.)g(.)f(1)h(.)g(.)f(.) h(.)g(.)f(.)h(.)g(1)f(1)h(.)g(.)g(1)f(1)h(.)g(1)f(1)p 3747 5423 V 75 5523 V 230 5493 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(1)g(.)f(.) h(.)g(.)f(1)h(.)g(1)f(1)h(.)g(1)g(1)f(1)h(1)g(.)f(.)p 3747 5523 V 75 5622 V 230 5592 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(1)f(.) h(.)g(.)f(.)h(1)g(.)f(1)h(1)g(.)g(1)f(1)h(1)g(1)f(.)p 3747 5622 V Black Black eop end end %%Page: 132 132 TeXDict begin HPSdict begin 132 131 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.132) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(132)p Black 75 428 4 100 v 230 399 a FF(.)43 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(1)h(.)g(.)f(.)h(.)g(1)f(.)h(1)g(1)g (.)f(1)h(1)g(1)f(.)p 3747 428 V 75 528 V 230 498 a(.)h(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)f(.)h(1)g(.)f(1)h(.)g(1)f(1)h(1)g(.)g(.)f(.)h(1)g(1)f(1) p 3747 528 V 75 628 V 230 598 a(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h (.)g(1)f(.)h(1)g(.)f(1)h(1)g(1)g(.)f(.)h(.)g(1)f(1)p 3747 628 V 75 727 V 3747 727 V 75 752 4 25 v 3747 752 V 75 755 3675 4 v 75 886 a SDict begin H.S end 75 886 a 75 886 a SDict begin 13.6 H.A end 75 886 a 75 886 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.7) cvn H.B /DEST pdfmark end 75 886 a 117 x FJ(7.3.7)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsInStandardF)n(orm)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1177 a Fs(\006)22 b Ft(IsInStandardForm\()53 b(M[,)47 b(idleft])i(\))1889 b Fr(\(function\))p Black 216 1403 a Ft(IsInStandardForm)44 b FK(determines)c(if)f Ft(M)f FK(is)g(in)g(standard)j(form.)74 b Ft(idleft)40 b FK(is)e(a)g(boolean)j (that)e(indicates)75 1516 y(the)c(position)j(of)d(the)g(identity)j (matrix)d(in)h Ft(M)p FK(,)h(as)e(in)g Ft(PutStandardForm)40 b FK(\(see)c Ft(PutStandardForm)k FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3485 1517 a SDict begin H.S end 3485 1517 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3.6)p 0.0236 0.0894 0.6179 TeXcolorrgb 3666 1454 a SDict begin H.R end 3666 1454 a 3666 1516 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.6) cvn H.B /ANN pdfmark end 3666 1516 a Black FK(\)\).)75 1629 y Ft(IsInStandardForm)31 b FK(checks)d(if)e(the)h (identity)h(matrix)f(is)f(at)g(the)h(left)g(side)g(of)f Ft(M)p FK(,)g(otherwise)i(if)e(it)g(is)h(at)f(the)g(right)75 1741 y(side.)j(The)23 b(elements)i(of)f Ft(M)f FK(may)g(be)h(elements)h (of)e(an)o(y)h(\002eld.)p 75 1852 1648 4 v 1764 1857 a FF(Example)p 2102 1852 V 75 1877 4 25 v 3747 1877 V 75 1976 4 100 v 188 1946 a(gap>)44 b(IsInStandardForm\(Iden)q(tit)q (yMa)q(t\()q(7,)49 b(GF\(2\)\)\);)p 3747 1976 V 75 2076 V 188 2046 a(true)p 3747 2076 V 75 2175 V 188 2145 a(gap>)44 b(IsInStandardForm\([[1,)49 b(1,)43 b(0],)h([1,)f(0,)g(1]],)h(false\);) p 3747 2175 V 75 2275 V 188 2245 a(true)p 3747 2275 V 75 2375 V 188 2345 a(gap>)g(IsInStandardForm\([[1,)49 b(3,)43 b(2,)g(7]]\);)p 3747 2375 V 75 2474 V 188 2444 a(true)p 3747 2474 V 75 2574 V 188 2544 a(gap>)h (IsInStandardForm\(Hada)q(mar)q(dMa)q(t\()q(4\)\))q(;)p 3747 2574 V 75 2674 V 188 2644 a(false)p 3747 2674 V 75 2698 4 25 v 3747 2698 V 75 2701 3675 4 v 75 2833 a SDict begin H.S end 75 2833 a 75 2833 a SDict begin 13.6 H.A end 75 2833 a 75 2833 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.8) cvn H.B /DEST pdfmark end 75 2833 a 116 x FJ(7.3.8)p 0.0 0.0 1.0 TeXcolorrgb 99 w(P)n(ermutedCols)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3123 a Fs(\006)22 b Ft(PermutedCols\()51 b(M,)d(P)e(\))2399 b Fr(\(function\))p Black 216 3349 a Ft(PermutedCols)27 b FK(returns)e(a)e(matrix)i Ft(M)e FK(with)g(a)g(permutation)j Ft(P)d FK(applied)j(to)d(its)h (columns.)p 75 3459 1648 4 v 1764 3464 a FF(Example)p 2102 3459 V 75 3484 4 25 v 3747 3484 V 75 3584 4 100 v 188 3554 a(gap>)44 b(M)e(:=)h([[1,2,3,4],[1,2,3,4)q(]];)q(;)49 b(PrintArray\(M\);)p 3747 3584 V 75 3683 V 188 3653 a([)43 b([)85 b(1,)g(2,)g(3,)h(4)42 b(],)p 3747 3683 V 75 3783 V 273 3753 a([)85 b(1,)g(2,)g(3,)h(4)42 b(])h(])p 3747 3783 V 75 3883 V 188 3853 a(gap>)h(PrintArray\(PermutedCo)q(ls\()q(M,) 49 b(\(1,2,3\)\)\);)p 3747 3883 V 75 3982 V 188 3952 a([)43 b([)85 b(3,)g(1,)g(2,)h(4)42 b(],)p 3747 3982 V 75 4082 V 273 4052 a([)85 b(3,)g(1,)g(2,)h(4)42 b(])h(])p 3747 4082 V 75 4107 4 25 v 3747 4107 V 75 4110 3675 4 v 75 4241 a SDict begin H.S end 75 4241 a 75 4241 a SDict begin 13.6 H.A end 75 4241 a 75 4241 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.9) cvn H.B /DEST pdfmark end 75 4241 a 116 x FJ(7.3.9)p 0.0 0.0 1.0 TeXcolorrgb 99 w(V)-10 b(erticalCon)l(v)o(ersionFieldMat)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4531 a Fs(\006)22 b Ft(VerticalConversio)q(nFi)q(eld)q (Mat)q(\()53 b(M,)47 b(F)f(\))1750 b Fr(\(function\))p Black 216 4757 a Ft(VerticalConversion)q(Fie)q(ldM)q(at)41 b FK(returns)c(the)e(matrix)h Ft(M)f FK(with)g(its)g(elements)i(con)l (v)o(erted)h(from)d(a)f(\002eld)75 4870 y Fq(F)28 b Fo(=)19 b Fq(GF)7 b Fo(\()p Fq(q)458 4837 y Fm(m)511 4870 y Fo(\))p FK(,)23 b Fq(q)h FK(prime,)f(to)h(a)g(\002eld)f Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(.)30 b(Each)23 b(element)i(is)f(replaced)i (by)d(its)h(representation)k(o)o(v)o(er)c(the)g(latter)75 4983 y(\002eld,)f(placed)i(v)o(ertically)h(in)d(the)h(matrix,)g(using)h (the)e Fq(GF)7 b Fo(\()g Fq(p)p Fo(\))p FK(-v)o(ector)26 b(space)f(isomorphism)1464 5175 y Fo([)p Fp(:::)p Fo(])c FK(:)g Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))21 b Fv(!)f Fq(GF)7 b Fo(\()g Fq(p)p Fo(\))2283 5137 y Fm(m)2336 5175 y Fp(;)75 5367 y FK(with)23 b Fq(q)e Fo(=)27 b Fq(p)468 5334 y Fm(m)520 5367 y FK(.)216 5479 y(If)34 b Ft(M)g FK(is)g(a)f Fq(k)j FK(by)e Fq(n)g FK(matrix,)j(the)d(result)i(is)e(a)f Fq(k)19 b Fv(\001)e Fq(m)f Fv(\002)g Fq(n)34 b FK(matrix,)j(since)e (each)g(element)g(of)f Fq(GF)7 b Fo(\()p Fq(q)3383 5446 y Fm(m)3436 5479 y Fo(\))34 b FK(can)g(be)75 5592 y(represented)27 b(in)c Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))24 b FK(using)g Fq(m)f FK(elements.)p Black Black eop end end %%Page: 133 133 TeXDict begin HPSdict begin 133 132 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.133) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(133)p Black 75 399 1648 4 v 1764 404 a FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188 493 a(gap>)44 b(M)e(:=)h(Z\(9\)*[[1,2],[2,1]];)q(;)48 b(PrintArray\(M\);)p 3747 523 V 75 623 V 188 593 a([)43 b([)169 b(Z\(3\2102\),)87 b(Z\(3\2102\)\2105)45 b(],)p 3747 623 V 75 722 V 273 692 a([)85 b(Z\(3\2102\)\2105,)172 b(Z\(3\2102\))44 b(])f(])p 3747 722 V 75 822 V 188 792 a(gap>)h(DefaultField\()i(Flat\(M\))f(\);)p 3747 822 V 75 922 V 188 892 a(GF\(3\2102\))p 3747 922 V 75 1021 V 188 991 a(gap>)f(VCFM)f(:=)g(VerticalConversionF)q(ie)q(ldM)q(at\()49 b(M,)43 b(GF\(9\))h(\);;)f(PrintArray\(VCFM\);)p 3747 1021 V 75 1121 V 188 1091 a([)g([)85 b(0*Z\(3\),)i(0*Z\(3\))44 b(],)p 3747 1121 V 75 1220 V 273 1191 a([)85 b(Z\(3\)\2100,)171 b(Z\(3\))44 b(],)p 3747 1220 V 75 1320 V 273 1290 a([)85 b(0*Z\(3\),)i(0*Z\(3\))44 b(],)p 3747 1320 V 75 1420 V 273 1390 a([)169 b(Z\(3\),)87 b(Z\(3\)\2100)44 b(])f(])p 3747 1420 V 75 1519 V 188 1489 a(gap>)h(DefaultField\()i(Flat\(VCFM\))g (\);)p 3747 1519 V 75 1619 V 188 1589 a(GF\(3\))p 3747 1619 V 75 1644 4 25 v 3747 1644 V 75 1647 3675 4 v 75 1811 a FK(A)41 b(similar)j(function)g(is)f Ft(HorizontalConversio)q (nFi)q(el)q(dMa)q(t)48 b FK(\(see)43 b Ft(HorizontalConversio)q(nFi)q (el)q(dMa)q(t)75 1924 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 1925 a SDict begin H.S end 105 1925 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3.10)p 0.0236 0.0894 0.6179 TeXcolorrgb 331 1862 a SDict begin H.R end 331 1862 a 331 1924 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.10) cvn H.B /ANN pdfmark end 331 1924 a Black FK(\)\).)75 2065 y SDict begin H.S end 75 2065 a 75 2065 a SDict begin 13.6 H.A end 75 2065 a 75 2065 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.10) cvn H.B /DEST pdfmark end 75 2065 a 100 x FJ(7.3.10)p 0.0 0.0 1.0 TeXcolorrgb 99 w(HorizontalCon)l(v)o (ersionFieldMat)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2339 a Fs(\006)22 b Ft(HorizontalConvers)q(ion)q(Fie)q(ldM)q(at)q(\()52 b(M,)47 b(F)g(\))1657 b Fr(\(function\))p Black 216 2565 a Ft(HorizontalConversi)q(onF)q(iel)q(dM)q(at)32 b FK(returns)d(the)e (matrix)g Ft(M)f FK(with)h(its)g(elements)h(con)l(v)o(erted)h(from)e(a) f(\002eld)75 2678 y Fq(F)i Fo(=)19 b Fq(GF)7 b Fo(\()p Fq(q)458 2645 y Fm(m)511 2678 y Fo(\))p FK(,)23 b Fq(q)h FK(prime,)f(to)h(a)g(\002eld)f Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))p FK(.)30 b(Each)23 b(element)i(is)f(replaced)i(by)d(its)h (representation)k(o)o(v)o(er)c(the)g(latter)75 2791 y(\002eld,)f (placed)i(horizontally)i(in)d(the)f(matrix.)216 2904 y(If)e Ft(M)f FK(is)h(a)f Fq(k)12 b Fv(\002)e Fq(n)20 b FK(matrix,)i(the)f(result)h(is)e(a)h Fq(k)12 b Fv(\002)e Fq(m)g Fv(\002)g Fq(n)g Fv(\001)g Fq(m)19 b FK(matrix.)29 b(The)20 b(ne)n(w)g(w)o(ord)h(length)h(of)f(the)g(resulting)i(code)75 3017 y(is)e(equal)h(to)g Fq(n)11 b Fv(\001)g Fq(m)p FK(,)20 b(because)j(each)f(element)g(of)f Fq(GF)7 b Fo(\()p Fq(q)1774 2984 y Fm(m)1827 3017 y Fo(\))21 b FK(can)g(be)h(represented)i(in)d Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))22 b FK(using)g Fq(m)e FK(elements.)30 b(The)75 3130 y(ne)n(w)f(dimension)j(is)d(equal)i(to)e Fq(k)17 b Fv(\002)e Fq(m)28 b FK(because)j(the)f(ne)n(w)f(matrix)h (should)h(be)f(a)f(basis)i(for)e(the)h(same)g(number)g(of)75 3243 y(v)o(ectors)25 b(as)e(the)h(old)g(one.)216 3355 y Ft(ConversionFieldCod)q(e)f FK(uses)c(horizontal)i(con)l(v)o(ersion)h (to)c(con)l(v)o(ert)i(a)d(code)i(\(see)g Ft(ConversionFieldCod)q(e)75 3468 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 3469 a SDict begin H.S end 105 3469 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(6.1.14)p 0.0236 0.0894 0.6179 TeXcolorrgb 331 3406 a SDict begin H.R end 331 3406 a 331 3468 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.6.1.14) cvn H.B /ANN pdfmark end 331 3468 a Black FK(\)\).)p 75 3539 1648 4 v 1764 3544 a FF(Example)p 2102 3539 V 75 3564 4 25 v 3747 3564 V 75 3663 4 100 v 188 3633 a(gap>)44 b(M)e(:=)h (Z\(9\)*[[1,2],[2,1]];)q(;)48 b(PrintArray\(M\);)p 3747 3663 V 75 3763 V 188 3733 a([)43 b([)169 b(Z\(3\2102\),)87 b(Z\(3\2102\)\2105)45 b(],)p 3747 3763 V 75 3862 V 273 3833 a([)85 b(Z\(3\2102\)\2105,)172 b(Z\(3\2102\))44 b(])f(])p 3747 3862 V 75 3962 V 188 3932 a(gap>)h(DefaultField\()i (Flat\(M\))f(\);)p 3747 3962 V 75 4062 V 188 4032 a(GF\(3\2102\))p 3747 4062 V 75 4161 V 188 4131 a(gap>)f(HCFM)f(:=)g (HorizontalConversio)q(nF)q(iel)q(dMa)q(t\(M)q(,)48 b(GF\(9\)\);;)d (PrintArray\(HCFM\);)p 3747 4161 V 75 4261 V 188 4231 a([)e([)85 b(0*Z\(3\),)i(Z\(3\)\2100,)g(0*Z\(3\),)172 b(Z\(3\))43 b(],)p 3747 4261 V 75 4361 V 273 4331 a([)85 b(Z\(3\)\2100,)i(Z\(3\)\2100,)171 b(Z\(3\),)h(Z\(3\))43 b(],)p 3747 4361 V 75 4460 V 273 4430 a([)85 b(0*Z\(3\),)171 b(Z\(3\),)87 b(0*Z\(3\),)g(Z\(3\)\2100)44 b(],)p 3747 4460 V 75 4560 V 273 4530 a([)169 b(Z\(3\),)i(Z\(3\),)87 b(Z\(3\)\2100,)g(Z\(3\)\2100)44 b(])f(])p 3747 4560 V 75 4659 V 188 4630 a(gap>)h(DefaultField\()i(Flat\(HCFM\))g(\);)p 3747 4659 V 75 4759 V 188 4729 a(GF\(3\))p 3747 4759 V 75 4784 4 25 v 3747 4784 V 75 4787 3675 4 v 75 4951 a FK(A)20 b(similar)h(function)i(is)e Ft(VerticalConversion)q(Fie)q (ldM)q(at)27 b FK(\(see)21 b Ft(VerticalConversion)q(Fie)q(ldM)q(at)27 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3485 4953 a SDict begin H.S end 3485 4953 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(7.3.9)p 0.0236 0.0894 0.6179 TeXcolorrgb 3666 4889 a SDict begin H.R end 3666 4889 a 3666 4951 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.9) cvn H.B /ANN pdfmark end 3666 4951 a Black FK(\)\).)75 5189 y SDict begin H.S end 75 5189 a 75 5189 a SDict begin 13.6 H.A end 75 5189 a 75 5189 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.11) cvn H.B /DEST pdfmark end 75 5189 a 116 x FJ(7.3.11)p 0.0 0.0 1.0 TeXcolorrgb 99 w(MOLS)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5479 a Fs(\006)22 b Ft(MOLS\()49 b(q[,)e(n])g(\))2677 b Fr(\(function\))p Black Black Black eop end end %%Page: 134 134 TeXDict begin HPSdict begin 134 133 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.134) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(134)p Black 216 399 a Ft(MOLS)24 b FK(returns)g(a)f(list) g(of)g Ft(n)g Fq(Mutually)h(Ortho)o(gonal)i(Latin)d(Squar)m(es)i FK(\(MOLS\).)c(A)g Fq(Latin)j(squar)m(e)g FK(of)f(order)h Ft(q)e FK(is)75 511 y(a)i Fq(q)13 b Fv(\002)g Fq(q)25 b FK(matrix)g(whose)g(entries)h(are)f(from)f(a)g(set)h Fq(F)1705 525 y Fm(q)1766 511 y FK(of)f Ft(q)g FK(distinct)j(symbols)f (\()p Fy(GU)m(A)-6 b(V)f(A)23 b FK(uses)i(the)g(inte)o(gers)h(from)f(0) 75 624 y(to)e Ft(q)q FK(\))g(such)h(that)g(each)h(ro)n(w)d(and)i(each)h (column)f(of)g(the)f(matrix)h(contains)i(each)e(symbol)h(e)o(xactly)g (once.)216 737 y(A)j(set)g(of)h(Latin)g(squares)h(is)f(a)f(set)h(of)f (MOLS)f(if)h(and)h(only)h(if)e(for)h(each)g(pair)h(of)e(Latin)h (squares)h(in)f(this)g(set,)75 850 y(e)n(v)o(ery)24 b(ordered)h(pair)f (of)g(elements)h(that)f(are)g(in)f(the)h(same)f(position)j(in)e(these)g (matrices)h(occurs)g(e)o(xactly)g(once.)216 963 y Ft(n)g FK(must)g(be)f(less)i(than)g Ft(q)p FK(.)32 b(If)25 b Ft(n)f FK(is)h(omitted,)h(tw)o(o)e(MOLS)f(are)i(returned.)35 b(If)25 b Ft(q)f FK(is)h(not)g(a)g(prime)g(po)n(wer)l(,)g(at)g(most)75 1076 y(2)e(MOLS)e(can)j(be)g(created.)30 b(F)o(or)23 b(all)g(v)n(alues)i(of)e Ft(q)g FK(with)h Fq(q)c Fp(>)g FK(2)j(and)h Fq(q)d Fv(6)p Fo(=)e FK(6,)k(a)g(list)h(of)g(MOLS)d(can)j (be)f(constructed.)75 1189 y(Ho)n(we)n(v)o(er)l(,)i Fy(GU)m(A)-6 b(V)f(A)22 b FK(does)k(not)f(yet)g(construct)i(MOLS)c(for)i Fq(q)c Fv(\021)g FK(2)91 b Fo(\()p FK(mod)21 b(4)p Fo(\))p FK(.)32 b(If)25 b(it)f(is)h(not)g(possible)i(to)e(construct)75 1302 y Ft(n)e FK(MOLS,)e(the)j(function)i(returns)f(`f)o(alse'.)216 1415 y(MOLS)c(are)j(used)g(to)g(create)h Ft(q)p FK(-ary)f(codes)h (\(see)f Ft(MOLSCode)i FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 2186 1416 a SDict begin H.S end 2186 1416 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(5.1.4)p 0.0236 0.0894 0.6179 TeXcolorrgb 2367 1353 a SDict begin H.R end 2367 1353 a 2367 1415 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.5.1.4) cvn H.B /ANN pdfmark end 2367 1415 a Black FK(\)\).)p 75 1537 1648 4 v 1764 1542 a FF(Example)p 2102 1537 V 75 1562 4 25 v 3747 1562 V 75 1662 4 100 v 188 1632 a(gap>)44 b(M)e(:=)h(MOLS\()h(4,)f(3)g(\);;PrintArray\()k(M[1])d(\);)p 3747 1662 V 75 1761 V 188 1732 a([)f([)85 b(0,)g(1,)g(2,)h(3)42 b(],)p 3747 1761 V 75 1861 V 273 1831 a([)85 b(1,)g(0,)g(3,)h(2)42 b(],)p 3747 1861 V 75 1961 V 273 1931 a([)85 b(2,)g(3,)g(0,)h(1)42 b(],)p 3747 1961 V 75 2060 V 273 2030 a([)85 b(3,)g(2,)g(1,)h(0)42 b(])h(])p 3747 2060 V 75 2160 V 188 2130 a(gap>)h(PrintArray\()i(M[2])d (\);)p 3747 2160 V 75 2260 V 188 2230 a([)g([)85 b(0,)g(2,)g(3,)h(1)42 b(],)p 3747 2260 V 75 2359 V 273 2329 a([)85 b(1,)g(3,)g(2,)h(0)42 b(],)p 3747 2359 V 75 2459 V 273 2429 a([)85 b(2,)g(0,)g(1,)h(3)42 b(],)p 3747 2459 V 75 2558 V 273 2529 a([)85 b(3,)g(1,)g(0,)h(2)42 b(])h(])p 3747 2558 V 75 2658 V 188 2628 a(gap>)h(PrintArray\()i(M[3])d (\);)p 3747 2658 V 75 2758 V 188 2728 a([)g([)85 b(0,)g(3,)g(1,)h(2)42 b(],)p 3747 2758 V 75 2857 V 273 2827 a([)85 b(1,)g(2,)g(0,)h(3)42 b(],)p 3747 2857 V 75 2957 V 273 2927 a([)85 b(2,)g(1,)g(3,)h(0)42 b(],)p 3747 2957 V 75 3057 V 273 3027 a([)85 b(3,)g(0,)g(2,)h(1)42 b(])h(])p 3747 3057 V 75 3156 V 188 3126 a(gap>)h(MOLS\()g(12,)f(3)g (\);)p 3747 3156 V 75 3256 V 188 3226 a(false)p 3747 3256 V 75 3281 4 25 v 3747 3281 V 75 3284 3675 4 v 75 3417 a SDict begin H.S end 75 3417 a 75 3417 a SDict begin 13.6 H.A end 75 3417 a 75 3417 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.12) cvn H.B /DEST pdfmark end 75 3417 a 116 x FJ(7.3.12)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsLatinSquar)n(e)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3708 a Fs(\006)22 b Ft(IsLatinSquare\()52 b(M)47 b(\))2491 b Fr(\(function\))p Black 216 3933 a Ft(IsLatinSquare)29 b FK(determines)d(if)f(a)f(matrix) h Ft(M)f FK(is)g(a)g(Latin)h(square.)33 b(F)o(or)24 b(a)g(Latin)h (square)h(of)e(size)h Fq(n)13 b Fv(\002)g Fq(n)p FK(,)24 b(each)75 4046 y(ro)n(w)f(and)h(each)g(column)h(contains)g(all)f(the)g (inte)o(gers)h(1)p Fp(;)10 b(:)g(:)g(:)h(;)f Fq(n)24 b FK(e)o(xactly)h(once.)p 75 4169 1648 4 v 1764 4174 a FF(Example)p 2102 4169 V 75 4194 4 25 v 3747 4194 V 75 4293 4 100 v 188 4264 a(gap>)44 b(IsLatinSquare\([[1,2],)q([2,)q (1]])q(\);)p 3747 4293 V 75 4393 V 188 4363 a(true)p 3747 4393 V 75 4493 V 188 4463 a(gap>)g(IsLatinSquare\([[1,2,3)q(],[)q (2,3)q(,1)q(],[)q(1,3)q(,2])q(]\);)p 3747 4493 V 75 4592 V 188 4562 a(false)p 3747 4592 V 75 4617 4 25 v 3747 4617 V 75 4620 3675 4 v 75 4754 a SDict begin H.S end 75 4754 a 75 4754 a SDict begin 13.6 H.A end 75 4754 a 75 4754 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.3.13) cvn H.B /DEST pdfmark end 75 4754 a 116 x FJ(7.3.13)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Ar)n(eMOLS)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5044 a Fs(\006)22 b Ft(AreMOLS\()50 b(L)c(\))2770 b Fr(\(function\))p Black 216 5270 a Ft(AreMOLS)27 b FK(determines)h(if)d Ft(L)g FK(is)g(a)g(list)h(of)g(mutually)h (orthogonal)h(Latin)e(squares)h(\(MOLS\).)c(F)o(or)i(each)h(pair)g(of) 75 5383 y(Latin)32 b(squares)h(in)f(this)g(list,)i(the)e(function)h (checks)h(if)d(each)h(ordered)i(pair)e(of)g(elements)h(that)f(are)g(in) f(the)h(same)75 5496 y(position)23 b(in)e(these)h(matrices)g(occurs)g (e)o(xactly)h(once.)28 b(The)21 b(function)i Ft(MOLS)f FK(creates)g(MOLS)d(\(see)i Ft(MOLS)h FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 3412 5497 a SDict begin H.S end 3412 5497 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3.11)p 0.0236 0.0894 0.6179 TeXcolorrgb 3638 5434 a SDict begin H.R end 3638 5434 a 3638 5496 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.11) cvn H.B /ANN pdfmark end 3638 5496 a Black FK(\)\).)p Black Black eop end end %%Page: 135 135 TeXDict begin HPSdict begin 135 134 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.135) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(135)p Black 75 399 1648 4 v 1764 404 a FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188 493 a(gap>)44 b(M)e(:=)h(MOLS\(4,2\);)p 3747 523 V 75 623 V 188 593 a([)g([)f([)h(0,)g(1,)g(2,)g(3)g(],)g([)f(1,)h (0,)g(3,)g(2)g(],)g([)g(2,)g(3,)g(0,)g(1)g(],)g([)f(3,)h(2,)g(1,)g(0)g (])g(],)p 3747 623 V 75 722 V 273 692 a([)f([)h(0,)g(2,)g(3,)g(1)g(],)g ([)f(1,)h(3,)g(2,)g(0)g(],)g([)g(2,)g(0,)g(1,)g(3)g(],)g([)f(3,)h(1,)g (0,)g(2)g(])g(])f(])p 3747 722 V 75 822 V 188 792 a(gap>)i (AreMOLS\(M\);)p 3747 822 V 75 922 V 188 892 a(true)p 3747 922 V 75 946 4 25 v 3747 946 V 75 949 3675 4 v 75 1091 a SDict begin H.S end 75 1091 a 75 1091 a SDict begin 13.6 H.A end 75 1091 a 75 1091 a SDict begin [ /View [/XYZ H.V] /Dest (section.7.4) cvn H.B /DEST pdfmark end 75 1091 a 150 x FM(7.4)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Some)30 b(functions)g(r)n(elated)h(to)e(the)h(norm)g(of)g(a)f(code)p Black 75 1448 a FK(In)g(this)h(section,)j(some)d(functions)i(that)e (can)g(be)f(used)h(to)g(compute)h(the)e(norm)h(of)f(a)g(code)i(and)f (to)f(decide)i(upon)75 1561 y(its)24 b(normality)i(are)e(discussed.)32 b(T)-7 b(ypically)h(,)25 b(these)g(are)f(applied)i(to)d(binary)j (linear)f(codes.)31 b(The)23 b(de\002nitions)j(of)e(this)75 1674 y(section)h(were)f(introduced)i(in)e(Graham)f(and)h(Sloane)g([)p 0.0236 0.6179 0.0894 TeXcolorrgb 1829 1675 a SDict begin H.S end 1829 1675 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(GS85)p 0.0236 0.6179 0.0894 TeXcolorrgb 2036 1612 a SDict begin H.R end 2036 1612 a 2036 1674 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.GS85) cvn H.B /ANN pdfmark end 2036 1674 a Black 1 w FK(].)75 1819 y SDict begin H.S end 75 1819 a 75 1819 a SDict begin 13.6 H.A end 75 1819 a 75 1819 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.4.1) cvn H.B /DEST pdfmark end 75 1819 a 102 x FJ(7.4.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(CoordinateNorm)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2096 a Fs(\006)e Ft(CoordinateNorm\()52 b(C,)47 b(coord)h(\))2121 b Fr(\(function\))p Black 216 2321 a Ft(CoordinateNorm)24 b FK(returns)d(the)f(norm)g(of)g Ft(C)f FK(with)g(respect)i(to)f (coordinate)j Ft(coord)q FK(.)k(If)14 b Fq(C)3019 2335 y Fm(a)3073 2321 y Fo(=)i Fv(f)p Fq(c)i Fv(2)11 b Fq(C)21 b Fv(j)e Fq(c)3501 2335 y Fm(coor)o(d)3679 2321 y Fo(=)75 2434 y Fq(a)p Fv(g)p FK(,)k(then)i(the)e(norm)h(of)g Ft(C)f FK(with)g(respect)i(to)f Ft(coord)g FK(is)g(de\002ned)g(as)1609 2688 y(max)1546 2754 y Fm(v)p Fh(2)p Fm(GF)6 b Fk(\()p Fm(q)p Fk(\))1799 2735 y Ff(n)1880 2585 y Fm(q)1850 2707 y Fa(\345)1838 2781 y Fm(a)p Fk(=)p Fr(1)1966 2688 y Fq(d)f Fo(\()p Fq(x)p Fp(;)g Fq(C)2180 2702 y Fm(a)2218 2688 y Fo(\))p Fp(;)75 2949 y FK(with)23 b(the)h(con)l(v)o(ention)j (that)d Fq(d)5 b Fo(\()p Fq(x)p Fp(;)g Fq(C)1188 2963 y Fm(a)1227 2949 y Fo(\))20 b(=)g Fq(n)j FK(if)18 b Fq(C)1573 2963 y Fm(a)1633 2949 y FK(is)24 b(empty)-6 b(.)p 75 3066 1648 4 v 1764 3071 a FF(Example)p 2102 3066 V 75 3091 4 25 v 3747 3091 V 75 3190 4 100 v 188 3160 a(gap>)44 b(CoordinateNorm\()j(HammingCode\()g(3,)c(GF\(2\))h(\),)f(3)f(\);)p 3747 3190 V 75 3290 V 188 3260 a(3)p 3747 3290 V 75 3315 4 25 v 3747 3315 V 75 3318 3675 4 v 75 3540 a SDict begin H.S end 75 3540 a 75 3540 a SDict begin 13.6 H.A end 75 3540 a 75 3540 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.4.2) cvn H.B /DEST pdfmark end 75 3540 a 116 x FJ(7.4.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(CodeNorm)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3830 a Fs(\006)22 b Ft(CodeNorm\()50 b(C)d(\))2723 b Fr(\(function\))p Black 216 4056 a Ft(CodeNorm)27 b FK(returns)e(the)g(norm)f(of)h Ft(C)p FK(.)30 b(The)24 b Fq(norm)g FK(of)g(a)g(code)h(is)g(de\002ned)g(as)f(the)g(minimum)h (of)f(the)g(norms)h(for)75 4169 y(the)h(respecti)n(v)o(e)i(coordinates) h(of)c(the)h(code.)36 b(In)26 b(ef)n(fect,)g(for)g(each)h(coordinate)h Ft(CoordinateNorm)i FK(is)c(called,)h(and)75 4282 y(the)d(minimum)f(of) h(the)f(calculated)k(numbers)e(is)e(returned.)p 75 4376 1648 4 v 1764 4381 a FF(Example)p 2102 4376 V 75 4401 4 25 v 3747 4401 V 75 4501 4 100 v 188 4471 a(gap>)44 b(CodeNorm\()h(HammingCode\()h(3,)d(GF\(2\))i(\))d(\);)p 3747 4501 V 75 4600 V 188 4571 a(3)p 3747 4600 V 75 4625 4 25 v 3747 4625 V 75 4628 3675 4 v 75 4850 a SDict begin H.S end 75 4850 a 75 4850 a SDict begin 13.6 H.A end 75 4850 a 75 4850 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.4.3) cvn H.B /DEST pdfmark end 75 4850 a 116 x FJ(7.4.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsCoordinateAcceptable)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5141 a Fs(\006)22 b Ft(IsCoordinateAccep)q(tab)q(le\()53 b(C,)47 b(coord)h(\))1750 b Fr(\(function\))p Black 216 5367 a Ft(IsCoordinateAccept)q(abl)q(e)30 b FK(returns)c(`true')f(if)f(coordinate)j Ft(coord)f FK(of)e Ft(C)g FK(is)g(acceptable.)34 b(A)23 b(coordinate)k(is)75 5479 y(called)i Fq(acceptable)i FK(if)c(the)h(norm)g(of)g(the)g(code)g (with)g(respect)h(to)f(that)g(coordinate)j(is)c(not)h(more)g(than)h(tw) o(o)e(times)75 5592 y(the)d(co)o(v)o(ering)h(radius)g(of)e(the)h(code)g (plus)h(one.)p Black Black eop end end %%Page: 136 136 TeXDict begin HPSdict begin 136 135 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.136) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(136)p Black 75 399 1648 4 v 1764 404 a FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188 493 a(gap>)44 b(IsCoordinateAcceptabl)q(e\()49 b(HammingCode\()d(3,)d(GF\(2\))h(\),)f(3)g(\);)p 3747 523 V 75 623 V 188 593 a(true)p 3747 623 V 75 648 4 25 v 3747 648 V 75 651 3675 4 v 75 869 a SDict begin H.S end 75 869 a 75 869 a SDict begin 13.6 H.A end 75 869 a 75 869 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.4.4) cvn H.B /DEST pdfmark end 75 869 a 116 x FJ(7.4.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(GeneralizedCodeNorm)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1160 a Fs(\006)22 b Ft(GeneralizedCodeNo)q(rm\()53 b(C,)47 b(subcode1,)j(subscode2,)g(...,)e(subcodek)h(\))544 b Fr(\(function\))p Black 216 1386 a Ft(GeneralizedCodeNor)q(m)29 b FK(returns)c(the)f Ft(k)p FK(-norm)g(of)f Ft(C)h FK(with)f(respect)i (to)f Ft(k)f FK(subcodes.)p 75 1496 1648 4 v 1764 1501 a FF(Example)p 2102 1496 V 75 1521 4 25 v 3747 1521 V 75 1621 4 100 v 188 1591 a(gap>)44 b(c)e(:=)h(RepetitionCode\()48 b(7,)43 b(GF\(2\))h(\);;)p 3747 1621 V 75 1720 V 188 1690 a(gap>)g(ham)f(:=)g(HammingCode\()j(3,)d(GF\(2\))i(\);;)p 3747 1720 V 75 1820 V 188 1790 a(gap>)f(d)e(:=)h(EvenWeightSubcode\()49 b(ham)43 b(\);;)p 3747 1820 V 75 1919 V 188 1890 a(gap>)h(e)e(:=)h (ConstantWeightSubco)q(de\()49 b(ham,)44 b(3)f(\);;)p 3747 1919 V 75 2019 V 188 1989 a(gap>)h(GeneralizedCodeNorm\()49 b(ham,)43 b(c,)h(d,)f(e)f(\);)p 3747 2019 V 75 2119 V 188 2089 a(4)p 3747 2119 V 75 2144 4 25 v 3747 2144 V 75 2147 3675 4 v 75 2365 a SDict begin H.S end 75 2365 a 75 2365 a SDict begin 13.6 H.A end 75 2365 a 75 2365 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.4.5) cvn H.B /DEST pdfmark end 75 2365 a 117 x FJ(7.4.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(IsNormalCode)p Black 1.0 0.0 0.0 TeXcolorrgb 75 2656 a Fs(\006)22 b Ft(IsNormalCode\()51 b(C)c(\))2538 b Fr(\(function\))p Black 216 2882 a Ft(IsNormalCode)26 b FK(returns)d(`true')g(if)f Ft(C)g FK(is)f(normal.)29 b(A)21 b(code)i(is)f(called)h Fq(normal)g FK(if)f(the)g(norm)g(of)g (the)g(code)h(is)f(not)75 2995 y(more)j(than)h(tw)o(o)f(times)g(the)h (co)o(v)o(ering)g(radius)h(of)e(the)g(code)h(plus)g(one.)34 b(Almost)25 b(all)g(codes)i(are)e(normal,)h(ho)n(we)n(v)o(er)75 3107 y(some)e(\(non-linear\))j(abnormal)e(codes)f(ha)n(v)o(e)h(been)f (found.)216 3220 y(Often,)f(it)f(is)g(dif)n(\002cult)h(to)f(\002nd)g (out)h(whether)g(a)f(code)h(is)f(normal,)h(because)i(it)d(in)l(v)n(olv) o(es)i(computing)h(the)d(co)o(v)o(er)n(-)75 3333 y(ing)f(radius.)28 b(Ho)n(we)n(v)o(er)l(,)21 b Ft(IsNormalCode)j FK(uses)c(much)h (information)h(from)e(the)h(literature)h(\(in)f(particular)l(,)i([)p 0.0236 0.6179 0.0894 TeXcolorrgb 3482 3334 a SDict begin H.S end 3482 3334 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(GS85)p 0.0236 0.6179 0.0894 TeXcolorrgb 3689 3271 a SDict begin H.R end 3689 3271 a 3689 3333 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.GS85) cvn H.B /ANN pdfmark end 3689 3333 a Black FK(]\))75 3446 y(about)i(normality)g(for)f(certain)h(code) f(parameters.)p 75 3557 1648 4 v 1764 3562 a FF(Example)p 2102 3557 V 75 3581 4 25 v 3747 3581 V 75 3681 4 100 v 188 3651 a(gap>)44 b(IsNormalCode\()i(HammingCode\()h(3,)c(GF\(2\))h (\))f(\);)p 3747 3681 V 75 3781 V 188 3751 a(true)p 3747 3781 V 75 3806 4 25 v 3747 3806 V 75 3809 3675 4 v 75 3950 a SDict begin H.S end 75 3950 a 75 3950 a SDict begin 13.6 H.A end 75 3950 a 75 3950 a SDict begin [ /View [/XYZ H.V] /Dest (section.7.5) cvn H.B /DEST pdfmark end 75 3950 a 150 x FM(7.5)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Miscellaneous)30 b(functions)p Black 75 4307 a FK(In)25 b(this)i(section)g(we)e (describe)i(se)n(v)o(eral)g(v)o(ector)f(space)h(functions)h Fy(GU)m(A)-6 b(V)f(A)24 b FK(uses)i(for)g(constructing)j(codes)e(or)e (per)n(-)75 4420 y(forming)g(calculations)i(with)c(codes.)216 4532 y(In)29 b(this)g(section,)i(some)d(ne)n(w)g(miscellaneous)k (functions)f(are)e(described,)j(including)f(weight)e(enumerators,)75 4645 y(the)24 b(MacW)l(illiams-transform)k(and)c(af)n(\002nity)g(and)g (almost)g(af)n(\002nity)g(of)f(codes.)75 4796 y SDict begin H.S end 75 4796 a 75 4796 a SDict begin 13.6 H.A end 75 4796 a 75 4796 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.1) cvn H.B /DEST pdfmark end 75 4796 a 97 x FJ(7.5.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(CodeW)-6 b(eightEnumerator)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5067 a Fs(\006)22 b Ft(CodeWeightEnumera)q(tor)q(\()52 b(C)47 b(\))2167 b Fr(\(function\))p Black 216 5293 a Ft(CodeWeightEnumerat)q(or)29 b FK(returns)c(a)e(polynomial)j(of)e(the)g(follo)n(wing)h(form:)1649 5535 y Fq(f)13 b Fo(\()p Fq(x)p Fo(\))22 b(=)1945 5438 y Fm(n)1915 5554 y Fa(\345)1910 5628 y Fm(i)p Fk(=)p Fr(0)2023 5535 y Fq(A)2079 5549 y Fm(i)2101 5535 y Fq(x)2141 5497 y Fm(i)2165 5535 y Fp(;)p Black Black eop end end %%Page: 137 137 TeXDict begin HPSdict begin 137 136 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.137) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(137)p Black 75 399 a(where)24 b Fq(A)376 413 y Fm(i)421 399 y FK(is)f(the)h(number)g(of)g(code)n(w)o(ords)h(in)f Ft(C)f FK(with)g(weight)h Fq(i)p FK(.)p 75 482 1648 4 v 1764 487 a FF(Example)p 2102 482 V 75 507 4 25 v 3747 507 V 75 607 4 100 v 188 577 a(gap>)44 b(CodeWeightEnumerator\()49 b(ElementsCode\()e([)c([)f(0,0,0)i(],)f([)g(0,0,1)h(],)p 3747 607 V 75 706 V 188 676 a(>)f([)f(0,1,1)i(],)f([)g(1,1,1)h(])f(],)g (GF\(2\))h(\))f(\);)p 3747 706 V 75 806 V 188 776 a(x\2103)g(+)g (x\2102)g(+)g(x)g(+)f(1)p 3747 806 V 75 906 V 188 876 a(gap>)i(CodeWeightEnumerator\()49 b(HammingCode\()e(3,)c(GF\(2\))h(\)) e(\);)p 3747 906 V 75 1005 V 188 975 a(x\2107)h(+)g(7*x\2104)h(+)f (7*x\2103)h(+)e(1)p 3747 1005 V 75 1030 4 25 v 3747 1030 V 75 1033 3675 4 v 75 1160 a SDict begin H.S end 75 1160 a 75 1160 a SDict begin 13.6 H.A end 75 1160 a 75 1160 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.2) cvn H.B /DEST pdfmark end 75 1160 a 116 x FJ(7.5.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(CodeDistanceEnumerator)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1450 a Fs(\006)22 b Ft(CodeDistanceEnume)q(rat)q(or\()53 b(C,)47 b(w)g(\))1935 b Fr(\(function\))p Black 216 1676 a Ft(CodeDistanceEnumer)q(ato)q(r)29 b FK(returns)c(a)e(polynomial)j (of)d(the)h(follo)n(wing)h(form:)1649 1892 y Fq(f)13 b Fo(\()p Fq(x)p Fo(\))22 b(=)1945 1795 y Fm(n)1915 1911 y Fa(\345)1910 1985 y Fm(i)p Fk(=)p Fr(0)2023 1892 y Fq(B)2079 1906 y Fm(i)2101 1892 y Fq(x)2141 1854 y Fm(i)2165 1892 y Fp(;)75 2118 y FK(where)i Fq(B)376 2132 y Fm(i)421 2118 y FK(is)f(the)h(number)g(of)g(code)n(w)o(ords)h(with)f(distance)h Fq(i)e FK(to)h Ft(w)p FK(.)216 2231 y(If)66 b Ft(w)g FK(is)g(a)g(code)n(w)o(ord,)78 b(then)67 b Ft(CodeDistanceEnumer)q(at)q (or)72 b FK(returns)c(the)e(same)h(polynomial)h(as)75 2343 y Ft(CodeWeightEnumerat)q(or)p FK(.)p 75 2421 1648 4 v 1764 2426 a FF(Example)p 2102 2421 V 75 2446 4 25 v 3747 2446 V 75 2546 4 100 v 188 2516 a(gap>)44 b (CodeDistanceEnumerato)q(r\()49 b(HammingCode\()d(3,)d(GF\(2\))h (\),[0,0,0,0,0,0,1])k(\);)p 3747 2546 V 75 2646 V 188 2616 a(x\2106)43 b(+)g(3*x\2105)h(+)f(4*x\2104)h(+)e(4*x\2103)i(+)f (3*x\2102)h(+)f(x)p 3747 2646 V 75 2745 V 188 2715 a(gap>)h (CodeDistanceEnumerato)q(r\()49 b(HammingCode\()d(3,)d(GF\(2\))h (\),[1,1,1,1,1,1,1])k(\);)p 3747 2745 V 75 2845 V 188 2815 a(x\2107)43 b(+)g(7*x\2104)h(+)f(7*x\2103)h(+)e(1)h(#)g (`[1,1,1,1,1,1,1]')48 b($\\in$)c(`HammingCode\()j(3,)c(GF\(2)g(\))g (\)')p 3747 2845 V 75 2870 4 25 v 3747 2870 V 75 2873 3675 4 v 75 3060 a SDict begin H.S end 75 3060 a 75 3060 a SDict begin 13.6 H.A end 75 3060 a 75 3060 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.3) cvn H.B /DEST pdfmark end 75 3060 a 117 x FJ(7.5.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(CodeMacW)n(illiamsT)-7 b(ransf)n(orm)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3351 a Fs(\006)22 b Ft(CodeMacWilliamsTr)q(ans)q(for)q (m\()53 b(C)47 b(\))1981 b Fr(\(function\))p Black 216 3577 a Ft(CodeMacWilliamsTra)q(nsf)q(orm)30 b FK(returns)25 b(a)e(polynomial)j(of)d(the)h(follo)n(wing)h(form:)1650 3792 y Fq(f)13 b Fo(\()p Fq(x)p Fo(\))22 b(=)1946 3695 y Fm(n)1916 3811 y Fa(\345)1911 3885 y Fm(i)p Fk(=)p Fr(0)2019 3792 y Fq(C)2078 3806 y Fm(i)2100 3792 y Fq(x)2140 3754 y Fm(i)2164 3792 y Fp(;)75 4018 y FK(where)d Fq(C)374 4032 y Fm(i)419 4018 y FK(is)k(the)h(number)h(of)e(code)n(w)o(ords)i (with)f(weight)g Fq(i)f FK(in)g(the)h Fq(dual)h FK(code)f(of)f Ft(C)q FK(.)p 75 4102 1648 4 v 1764 4107 a FF(Example)p 2102 4102 V 75 4127 4 25 v 3747 4127 V 75 4226 4 100 v 188 4196 a(gap>)44 b(CodeMacWilliamsTransf)q(orm)q(\()k (HammingCode\()f(3,)c(GF\(2\))h(\))f(\);)p 3747 4226 V 75 4326 V 188 4296 a(7*x\2104)h(+)f(1)p 3747 4326 V 75 4351 4 25 v 3747 4351 V 75 4354 3675 4 v 75 4541 a SDict begin H.S end 75 4541 a 75 4541 a SDict begin 13.6 H.A end 75 4541 a 75 4541 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.4) cvn H.B /DEST pdfmark end 75 4541 a 117 x FJ(7.5.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(CodeDensity)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4832 a Fs(\006)22 b Ft(CodeDensity\()51 b(C)c(\))2584 b Fr(\(function\))p Black 216 5058 a Ft(CodeDensity)27 b FK(returns)e(the)f Fq(density)h FK(of)f Ft(C)p FK(.)k(The)23 b(density)i(of)f(a)f(code)h (is)g(de\002ned)g(as)1703 5206 y Fq(M)16 b Fv(\001)8 b Fq(V)1879 5220 y Fm(q)1916 5206 y Fo(\()p Fq(n)p Fp(;)g Fq(t)e Fo(\))p 1703 5248 395 4 v 1859 5332 a Fq(q)1904 5305 y Fm(n)2107 5269 y Fp(;)75 5479 y FK(where)27 b Fq(M)j FK(is)c(the)h(size)h(of)f(the)g(code,)c Fq(V)1326 5493 y Fm(q)1364 5479 y Fo(\()p Fq(n)p Fp(;)8 b Fq(t)e Fo(\))27 b FK(is)g(the)g(size)g(of)g(a)g(sphere)h(of)f(radius)f Fq(t)32 b FK(in)27 b Fq(GF)7 b Fo(\()p Fq(q)3104 5446 y Fm(n)3142 5479 y Fo(\))26 b FK(\(which)i(may)e(be)75 5592 y(computed)e(using)f Ft(SphereContent)p FK(\),)h Fq(t)k FK(is)21 b(the)i(co)o(v)o(ering)g(radius)h(of)e(the)g(code)h (and)f Fq(n)g FK(is)g(the)g(length)i(of)e(the)g(code.)p Black Black eop end end %%Page: 138 138 TeXDict begin HPSdict begin 138 137 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.138) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(138)p Black 75 399 1648 4 v 1764 404 a FF(Example)p 2102 399 V 75 423 4 25 v 3747 423 V 75 523 4 100 v 188 493 a(gap>)44 b(CodeDensity\()i(HammingCode\()g(3,)e (GF\(2\))g(\))e(\);)p 3747 523 V 75 623 V 188 593 a(1)p 3747 623 V 75 722 V 188 692 a(gap>)i(CodeDensity\()i(ReedMullerCode\()i (1,)43 b(4)f(\))h(\);)p 3747 722 V 75 822 V 188 792 a(14893/2048)p 3747 822 V 75 847 4 25 v 3747 847 V 75 850 3675 4 v 75 1069 a SDict begin H.S end 75 1069 a 75 1069 a SDict begin 13.6 H.A end 75 1069 a 75 1069 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.5) cvn H.B /DEST pdfmark end 75 1069 a 117 x FJ(7.5.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Spher)n(eContent)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1360 a Fs(\006)22 b Ft(SphereContent\()52 b(n,)47 b(t,)g(F)g(\))2213 b Fr(\(function\))p Black 216 1586 a Ft(SphereContent)43 b FK(returns)e(the)f(content)h(of) e(a)g(ball)h(of)f(radius)i Ft(t)e FK(around)i(an)e(arbitrary)i(element) g(of)e(the)75 1699 y(v)o(ectorspace)h Fq(F)602 1666 y Fm(n)640 1699 y FK(.)69 b(This)37 b(is)g(the)h(cardinality)i(of)e(the)f (set)h(of)f(all)h(elements)g(of)g Fq(F)2773 1666 y Fm(n)2847 1699 y FK(that)f(are)h(at)f(distance)j(\(see)75 1812 y Ft(DistanceCodeword)29 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 870 1813 a SDict begin H.S end 870 1813 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(3.6.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 1051 1750 a SDict begin H.R end 1051 1750 a 1051 1812 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.3.6.2) cvn H.B /ANN pdfmark end 1051 1812 a Black FK(\))24 b(less)g(than)g(or)f(equal)i(to)f Ft(t)f FK(from)g(an)h (element)g(of)g Fq(F)2704 1779 y Fm(n)2741 1812 y FK(.)216 1924 y(In)29 b(the)g(conte)o(xt)h(of)e(codes,)j(the)e(function)i(is)d (used)i(to)f(determine)h(if)e(a)h(code)g(is)f(perfect.)46 b(A)28 b(code)h(is)g Fq(perfect)75 2037 y FK(if)g(spheres)i(of)d (radius)h Fq(t)34 b FK(around)d(all)e(code)n(w)o(ords)i(partition)g (the)e(whole)h(ambient)g(v)o(ector)g(space,)h(where)e Fq(t)h FK(is)f(the)75 2150 y(number)24 b(of)g(errors)h(the)e(code)i (can)f(correct.)p 75 2243 1648 4 v 1764 2248 a FF(Example)p 2102 2243 V 75 2268 4 25 v 3747 2268 V 75 2367 4 100 v 188 2338 a(gap>)44 b(SphereContent\()j(15,)c(0,)g(GF\(2\))h(\);)p 3747 2367 V 75 2467 V 188 2437 a(1)170 b(#)42 b(Only)i(one)f(word)h (with)g(distance)h(0,)e(which)h(is)f(the)g(word)h(itself)p 3747 2467 V 75 2567 V 188 2537 a(gap>)g(SphereContent\()j(11,)c(3,)g (GF\(4\))h(\);)p 3747 2567 V 75 2666 V 188 2636 a(4984)p 3747 2666 V 75 2766 V 188 2736 a(gap>)g(C)e(:=)h(HammingCode\(5\);)p 3747 2766 V 75 2866 V 188 2836 a(a)g(linear)h([31,26,3]1)i(Hamming)e (\(5,2\))h(code)e(over)h(GF\(2\))p 3747 2866 V 75 2965 V 188 2935 a(#the)g(minimum)g(distance)h(is)e(3,)g(so)g(the)h(code)g (can)f(correct)i(one)e(error)p 3747 2965 V 75 3065 V 188 3035 a(gap>)h(\()e(SphereContent\()47 b(31,)d(1,)f(GF\(2\))h(\))f (*)f(Size\(C\))j(\))e(=)f(2)h(\210)g(31;)p 3747 3065 V 75 3164 V 188 3135 a(true)p 3747 3164 V 75 3189 4 25 v 3747 3189 V 75 3192 3675 4 v 75 3324 a SDict begin H.S end 75 3324 a 75 3324 a SDict begin 13.6 H.A end 75 3324 a 75 3324 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.6) cvn H.B /DEST pdfmark end 75 3324 a 116 x FJ(7.5.6)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Krawtchouk)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3614 a Fs(\006)22 b Ft(Krawtchouk\()51 b(k,)c(i,)g(n,)g(q)g(\))2213 b Fr(\(function\))p Black 216 3840 a Ft(Krawtchouk)24 b FK(returns)f(the)e(Kra)o(wtchouk)h (number)g Fq(K)1929 3854 y Fm(k)1963 3840 y Fo(\()p Fq(i)p Fo(\))p FK(.)28 b Ft(q)20 b FK(must)h(be)g(a)g(prime)g(po)n(wer)l(,)h Ft(n)e FK(must)h(be)g(a)g(positi)n(v)o(e)75 3953 y(inte)o(ger)l(,)41 b Ft(k)35 b FK(must)h(be)g(a)g(non-ne)o(gati)n(v)o(e)i(inte)o(ger)f (less)g(then)g(or)f(equal)h(to)f Ft(n)f FK(and)i Ft(i)e FK(can)i(be)f(an)o(y)g(inte)o(ger)-5 b(.)67 b(\(See)75 4066 y Ft(KrawtchoukMat)27 b FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 730 4067 a SDict begin H.S end 730 4067 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(7.3.1)p 0.0236 0.0894 0.6179 TeXcolorrgb 911 4004 a SDict begin H.R end 911 4004 a 911 4066 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.7.3.1) cvn H.B /ANN pdfmark end 911 4066 a Black FK(\)\).)j(This)23 b(number)i(is)e(the)h(v)n(alue)g(at)g Fq(x)d Fo(=)e Fq(i)k FK(of)h(the)g(polynomial)984 4309 y Fq(K)1050 4263 y Fm(n)p Fl(;)p Fm(q)1043 4337 y(k)1139 4309 y Fo(\()p Fq(x)p Fo(\))d(=)1402 4212 y Fm(n)1372 4328 y Fa(\345)1371 4402 y Fm(j)r Fk(=)p Fr(0)1476 4309 y Fo(\()p Fv(\000)p FK(1)p Fo(\))1672 4271 y Fm(j)1697 4309 y Fo(\()p Fq(q)13 b Fv(\000)g FK(1)p Fo(\))1954 4271 y Fm(k)q Fh(\000)d Fm(j)2070 4309 y Fq(b)p Fo(\()p Fq(x)p Fp(;)24 b Fq(j)r Fo(\))p Fq(b)p Fo(\()p Fq(n)13 b Fv(\000)g Fq(x)p Fp(;)d Fq(k)k Fv(\000)27 b Fq(j)r Fo(\))p Fp(;)75 4581 y FK(where)f Fq(b)p Fo(\()p Fq(v)-7 b Fp(;)10 b Fq(u)p Fo(\))24 b(=)d Fq(u)p FK(!)p Fp(=)p Fo(\()p Fq(v)p FK(!)p Fo(\()p Fq(v)14 b Fv(\000)g Fq(u)p Fo(\))p FK(!)p Fo(\))28 b FK(is)e(the)g(binomial)i (coef)n(\002cient)f(if)f Fq(u)p Fp(;)10 b Fq(v)27 b FK(are)f(inte)o (gers.)37 b(F)o(or)26 b(more)g(properties)i(of)75 4694 y(these)d(polynomials,)h(see)d([)p 0.0236 0.6179 0.0894 TeXcolorrgb 948 4695 a SDict begin H.S end 948 4695 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(MS83)p 0.0236 0.6179 0.0894 TeXcolorrgb 1170 4632 a SDict begin H.R end 1170 4632 a 1170 4694 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.MS83) cvn H.B /ANN pdfmark end 1170 4694 a Black 1 w FK(].)p 75 4805 1648 4 v 1764 4810 a FF(Example)p 2102 4805 V 75 4830 4 25 v 3747 4830 V 75 4930 4 100 v 188 4900 a(gap>)44 b(Krawtchouk\()i(2,)d(0,)g(3,)g(2\);)p 3747 4930 V 75 5030 V 188 5000 a(3)p 3747 5030 V 75 5055 4 25 v 3747 5055 V 75 5058 3675 4 v 75 5189 a SDict begin H.S end 75 5189 a 75 5189 a SDict begin 13.6 H.A end 75 5189 a 75 5189 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.7) cvn H.B /DEST pdfmark end 75 5189 a 116 x FJ(7.5.7)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Primiti)o(v)o(eUnityRoot)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5479 a Fs(\006)22 b Ft(PrimitiveUnityRoo)q(t\()53 b(F,)47 b(n)f(\))2121 b Fr(\(function\))p Black Black Black eop end end %%Page: 139 139 TeXDict begin HPSdict begin 139 138 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.139) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(139)p Black 216 399 a Ft(PrimitiveUnityRoot)34 b FK(returns)29 b(a)f(primiti)n(v)o(e)h Ft(n)p FK(-th)f(root)h(of)e (unity)i(in)f(an)g(e)o(xtension)i(\002eld)e(of)g Ft(F)p FK(.)41 b(This)28 b(is)g(a)75 511 y(\002nite)22 b(\002eld)h(element)g Fq(a)f FK(with)g(the)h(property)h Fq(a)1533 478 y Fm(n)1590 511 y Fo(=)19 b FK(1)j(in)g Ft(F)q FK(,)f(and)i Ft(n)f FK(is)g(the)h(smallest)g(inte)o(ger)h(such)f(that)g(this)g(equality)75 624 y(holds.)p 75 728 1648 4 v 1764 733 a FF(Example)p 2102 728 V 75 753 4 25 v 3747 753 V 75 853 4 100 v 188 823 a(gap>)44 b(PrimitiveUnityRoot\()k(GF\(2\),)d(15)e(\);)p 3747 853 V 75 952 V 188 923 a(Z\(2\2104\))p 3747 952 V 75 1052 V 188 1022 a(gap>)h(last\21015;)p 3747 1052 V 75 1152 V 188 1122 a(Z\(2\)\2100)p 3747 1152 V 75 1251 V 188 1221 a(gap>)g(PrimitiveUnityRoot\()k(GF\(8\),)d(21)e(\);)p 3747 1251 V 75 1351 V 188 1321 a(Z\(2\2106\)\2103)p 3747 1351 V 75 1376 4 25 v 3747 1376 V 75 1379 3675 4 v 75 1512 a SDict begin H.S end 75 1512 a 75 1512 a SDict begin 13.6 H.A end 75 1512 a 75 1512 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.8) cvn H.B /DEST pdfmark end 75 1512 a 116 x FJ(7.5.8)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Primiti)o(v)o(eP)n (olynomialsNr)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1803 a Fs(\006)22 b Ft(PrimitivePolynomi)q(als)q(Nr\()53 b(n,)47 b(F)g(\))1935 b Fr(\(function\))p Black 216 2028 a Ft (PrimitivePolynomia)q(lsN)q(r)38 b FK(returns)d(the)e(number)h(of)f (irreducible)j(polynomials)g(o)o(v)o(er)d Fq(F)f Fo(=)25 b Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))33 b FK(of)75 2141 y(de)o(gree)24 b Ft(n)f FK(with)g(\(maximum\))h(period)g Fq(q)1342 2108 y Fm(n)1392 2141 y Fv(\000)12 b FK(1.)29 b(\(According)c(to)e(a)g (theorem)h(of)f(S.)f(Golomb,)h(this)h(is)f Fu(f)p Fo(\()7 b Fq(p)3392 2108 y Fm(n)3442 2141 y Fv(\000)12 b FK(1)p Fo(\))p Fp(=)p Fq(n)p FK(.\))216 2254 y(See)54 b(also)h(the)f Fy(GAP)f FK(function)j Ft(RandomPrimitivePol)q(yno)q(mia)q(l)p FK(,)67 b Ft(RandomPrimitivePoly)q(no)q(mia)q(l)75 2367 y FK(\()p 0.0236 0.0894 0.6179 TeXcolorrgb 105 2368 a SDict begin H.S end 105 2368 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(2.2.2)p 0.0236 0.0894 0.6179 TeXcolorrgb 286 2305 a SDict begin H.R end 286 2305 a 286 2367 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (subsection.2.2.2) cvn H.B /ANN pdfmark end 286 2367 a Black FK(\).)p 75 2486 1648 4 v 1764 2491 a FF(Example)p 2102 2486 V 75 2511 4 25 v 3747 2511 V 75 2611 4 100 v 188 2581 a(gap>)44 b(PrimitivePolynomialsN) q(r\(3)q(,4\))q(;)p 3747 2611 V 75 2710 V 188 2681 a(12)p 3747 2710 V 75 2810 V 3747 2810 V 75 2835 4 25 v 3747 2835 V 75 2838 3675 4 v 75 2971 a SDict begin H.S end 75 2971 a 75 2971 a SDict begin 13.6 H.A end 75 2971 a 75 2971 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.9) cvn H.B /DEST pdfmark end 75 2971 a 116 x FJ(7.5.9)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Irr)n(educibleP)n(olynomialsNr)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3262 a Fs(\006)22 b Ft(IrreduciblePolyno)q (mia)q(lsN)q(r\()53 b(n,)47 b(F)g(\))1842 b Fr(\(function\))p Black 216 3488 a Ft(PrimitivePolynomia)q(lsN)q(r)38 b FK(returns)d(the)e(number)h(of)f(irreducible)j(polynomials)g(o)o(v)o (er)d Fq(F)f Fo(=)25 b Fq(GF)7 b Fo(\()p Fq(q)p Fo(\))33 b FK(of)75 3601 y(de)o(gree)25 b Ft(n)p FK(.)p 75 3723 1648 4 v 1764 3728 a FF(Example)p 2102 3723 V 75 3748 4 25 v 3747 3748 V 75 3848 4 100 v 188 3818 a(gap>)44 b(IrreduciblePolynomial)q(sNr)q(\(3,)q(4\))q(;)p 3747 3848 V 75 3947 V 188 3917 a(20)p 3747 3947 V 75 4047 V 3747 4047 V 75 4072 4 25 v 3747 4072 V 75 4075 3675 4 v 75 4208 a SDict begin H.S end 75 4208 a 75 4208 a SDict begin 13.6 H.A end 75 4208 a 75 4208 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.10) cvn H.B /DEST pdfmark end 75 4208 a 116 x FJ(7.5.10)p 0.0 0.0 1.0 TeXcolorrgb 99 w(MatrixRepr)n(esentationOfElement)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4499 a Fs(\006)22 b Ft(MatrixRepresentat)q(ion)q(OfE)q (lem)q(en)q(t\()53 b(a,)47 b(F)f(\))1611 b Fr(\(function\))p Black 216 4724 a FK(Here)33 b Ft(F)g FK(is)g(either)h(a)e(\002nite)i(e) o(xtension)h(of)e(the)g(\223base)i(\002eld\224)e Fq(GF)7 b Fo(\()g Fq(p)p Fo(\))33 b FK(or)g(of)g(the)g(rationals)i Fi(Q)p FK(,)g(and)e Fq(a)26 b Fv(2)f Fq(F)7 b FK(.)75 4837 y(The)21 b(command)i Ft(MatrixRepresentati)q(onO)q(fEl)q(em)q(ent) 28 b FK(returns)23 b(a)f(matrix)g(representation)k(of)c Ft(a)f FK(o)o(v)o(er)h(the)g(base)75 4950 y(\002eld.)216 5063 y(If)h(the)h(element)h Ft(a)e FK(is)g(de\002ned)i(o)o(v)o(er)e (the)h(base)g(\002eld)g(then)g(it)f(returns)i(the)f(corresponding)k(1) 13 b Fv(\002)g FK(1)22 b(matrix.)p 75 5186 1648 4 v 1764 5191 a FF(Example)p 2102 5186 V 75 5211 4 25 v 3747 5211 V 75 5310 4 100 v 188 5280 a(gap>)44 b(a:=Random\(GF\(4\)\);)p 3747 5310 V 75 5410 V 188 5380 a(0*Z\(2\))p 3747 5410 V 75 5510 V 188 5480 a(gap>)g(M:=MatrixRepresentati)q(onO)q(fEl)q(em)q (ent)q(\(a,)q(GF\()q(4\)\))q(;;)49 b(Display\(M\);)p 3747 5510 V 75 5609 V 230 5579 a(.)p 3747 5609 V Black Black eop end end %%Page: 140 140 TeXDict begin HPSdict begin 140 139 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.140) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(140)p Black 75 428 4 100 v 188 399 a FF(gap>)44 b(a:=Random\(GF\(4\)\);)p 3747 428 V 75 528 V 188 498 a(Z\(2\2102\))p 3747 528 V 75 628 V 188 598 a(gap>)g (M:=MatrixRepresentati)q(onO)q(fEl)q(em)q(ent)q(\(a,)q(GF\()q(4\)\))q (;;)49 b(Display\(M\);)p 3747 628 V 75 727 V 230 697 a(.)43 b(1)p 3747 727 V 75 827 V 230 797 a(1)g(1)p 3747 827 V 75 927 V 188 897 a(gap>)p 3747 927 V 75 1026 V 3747 1026 V 75 1051 4 25 v 3747 1051 V 75 1054 3675 4 v 75 1287 a SDict begin H.S end 75 1287 a 75 1287 a SDict begin 13.6 H.A end 75 1287 a 75 1287 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.11) cvn H.B /DEST pdfmark end 75 1287 a 116 x FJ(7.5.11)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Recipr)n(ocalP)n (olynomial)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1577 a Fs(\006)22 b Ft(ReciprocalPolynom)q(ial)q(\()52 b(P)47 b(\))2167 b Fr(\(function\))p Black 216 1803 a Ft(ReciprocalPolynomi)q (al)35 b FK(returns)c(the)e Fq(r)m(ecipr)l(ocal)j FK(of)d(polynomial)j Ft(P)p FK(.)45 b(This)29 b(is)g(a)g(polynomial)j(with)d(co-)75 1916 y(ef)n(\002cients)36 b(of)e Ft(P)g FK(in)h(the)f(re)n(v)o(erse)i (order)-5 b(.)62 b(So)34 b(if)g Fq(P)26 b Fo(=)g Fq(a)1884 1930 y Fr(0)1938 1916 y Fo(+)17 b Fq(a)2071 1930 y Fr(1)2109 1916 y Fq(X)24 b Fo(+)17 b Fp(:::)g Fo(+)f Fq(a)2501 1930 y Fm(n)2539 1916 y Fq(X)2604 1883 y Fm(n)2640 1916 y FK(,)37 b(the)d(reciprocal)k(polynomial)e(is)75 2029 y Fq(P)131 1996 y Fh(0)173 2029 y Fo(=)20 b Fq(a)309 2043 y Fm(n)359 2029 y Fo(+)13 b Fq(a)488 2043 y Fm(n)p Fh(\000)p Fr(1)610 2029 y Fq(X)21 b Fo(+)13 b Fp(:::)g Fo(+)g Fq(a)988 2043 y Fr(0)1025 2029 y Fq(X)1090 1996 y Fm(n)1126 2029 y FK(.)216 2142 y(This)28 b(command)h(can)g(also)g(be) g(called)g(using)h(the)e(syntax)i Ft(ReciprocalPolynom)q(ial)q(\()52 b(P)47 b(,)g(n)g(\))p FK(.)42 b(In)29 b(this)75 2255 y(form,)20 b(the)g(number)h(of)f(coef)n(\002cients)h(of)f Ft(P)f FK(is)h(assumed)h(to)f(be)f(less)i(than)f(or)g(equal)h(to)e Fq(n)9 b Fo(+)g FK(1)20 b(\(with)g(zero)g(coef)n(\002cients)75 2368 y(added)36 b(in)f(the)g(highest)h(de)o(grees,)j(if)34 b(necessary\).)65 b(Therefore,)39 b(the)c(reciprocal)j(polynomial)f (also)e(has)g(de)o(gree)75 2481 y Fq(n)13 b Fo(+)g FK(1.)p 75 2591 1648 4 v 1764 2596 a FF(Example)p 2102 2591 V 75 2616 4 25 v 3747 2616 V 75 2716 4 100 v 188 2686 a(gap>)44 b(P)e(:=)h(UnivariatePolynomia)q(l\()49 b(GF\(3\),)44 b(Z\(3\)\2100)h(*)d([1,0,1,2])k(\);)p 3747 2716 V 75 2815 V 188 2785 a(Z\(3\)\2100+x_1\2102-x_1\2103)p 3747 2815 V 75 2915 V 188 2885 a(gap>)e(RecP)f(:=)g(ReciprocalPolynomia)q (l\()49 b(P)43 b(\);)p 3747 2915 V 75 3015 V 188 2985 a(-Z\(3\)\2100+x_1+x_1\2103)p 3747 3015 V 75 3114 V 188 3084 a(gap>)h(ReciprocalPolynomial\()49 b(RecP)44 b(\))f(=)f(P;)p 3747 3114 V 75 3214 V 188 3184 a(true)p 3747 3214 V 75 3313 V 188 3284 a(gap>)i(P)e(:=)h(UnivariatePolynomia)q(l\()49 b(GF\(3\),)44 b(Z\(3\)\2100)h(*)d([1,0,1,2])k(\);)p 3747 3313 V 75 3413 V 188 3383 a(Z\(3\)\2100+x_1\2102-x_1\2103)p 3747 3413 V 75 3513 V 188 3483 a(gap>)e(ReciprocalPolynomial\()49 b(P,)43 b(6)g(\);)p 3747 3513 V 75 3612 V 188 3582 a (-x_1\2103+x_1\2104+x_1\2106)p 3747 3612 V 75 3637 4 25 v 3747 3637 V 75 3640 3675 4 v 75 3773 a SDict begin H.S end 75 3773 a 75 3773 a SDict begin 13.6 H.A end 75 3773 a 75 3773 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.12) cvn H.B /DEST pdfmark end 75 3773 a 117 x FJ(7.5.12)p 0.0 0.0 1.0 TeXcolorrgb 99 w(CyclotomicCosets)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4064 a Fs(\006)22 b Ft(CyclotomicCosets\()53 b(q,)47 b(n)g(\))2213 b Fr(\(function\))p Black 216 4290 a Ft(CyclotomicCosets)41 b FK(returns)c(the)e(c)o(yclotomic)j(cosets)e (of)g Fq(q)91 b Fo(\()p FK(mod)21 b Fq(n)p Fo(\))p FK(.)65 b Ft(q)35 b FK(and)g Ft(n)g FK(must)h(be)f(relati)n(v)o(ely)75 4403 y(prime.)55 b(Each)31 b(of)h(the)h(elements)g(of)f(the)g(returned) j(list)d(is)g(a)g(list)g(of)g(inte)o(gers)i(that)e(belong)i(to)e(one)g (c)o(yclotomic)75 4516 y(coset.)47 b(A)29 b Fq(q)p FK(-c)o(yclotomic)j (coset)e(of)f Fq(s)92 b Fo(\()p FK(mod)21 b Fq(n)p Fo(\))29 b FK(is)g(a)g(set)h(of)f(the)h(form)f Fv(f)p Fq(s)p Fp(;)10 b Fq(sq)p Fp(;)g Fq(sq)2751 4483 y Fr(2)2791 4516 y Fp(;)g(:::;)g Fq(sq)3016 4483 y Fm(r)r Fh(\000)p Fr(1)3135 4516 y Fv(g)p FK(,)30 b(where)g Fq(r)h FK(is)e(the)75 4629 y(smallest)36 b(positi)n(v)o(e)h(inte)o(ger)g(such)f(that)g Fq(sq)1464 4596 y Fm(r)1513 4629 y Fv(\000)17 b Fq(s)35 b FK(is)g(0)91 b Fo(\()p FK(mod)21 b Fq(n)p Fo(\))p FK(.)64 b(In)35 b(other)i(w)o(ords,)h(each)e(coset)h(contains)g(all)75 4741 y(multiplications)f(of)c(the)g(coset)h(representati)n(v)o(e)j(by)c Fq(q)91 b Fo(\()p FK(mod)21 b Fq(n)p Fo(\))p FK(.)55 b(The)31 b(coset)i(representati)n(v)o(e)j(is)c(the)g(smallest)75 4854 y(inte)o(ger)25 b(that)f(isn')n(t)h(in)e(the)h(pre)n(vious)h (cosets.)p 75 4977 1648 4 v 1764 4982 a FF(Example)p 2102 4977 V 75 5002 4 25 v 3747 5002 V 75 5101 4 100 v 188 5072 a(gap>)44 b(CyclotomicCosets\()k(2,)43 b(15)g(\);)p 3747 5101 V 75 5201 V 188 5171 a([)g([)f(0)h(],)g([)g(1,)g(2,)g(4,)g(8) f(],)h([)g(3,)g(6,)g(12,)h(9)e(],)h([)g(5,)g(10)g(],)p 3747 5201 V 75 5301 V 273 5271 a([)f(7,)h(14,)h(13,)f(11)g(])g(])p 3747 5301 V 75 5400 V 188 5370 a(gap>)h(CyclotomicCosets\()k(7,)43 b(6)f(\);)p 3747 5400 V 75 5500 V 188 5470 a([)h([)f(0)h(],)g([)g(1)f (],)h([)g(2)g(],)g([)f(3)h(],)g([)g(4)g(],)g([)f(5)h(])g(])p 3747 5500 V 75 5525 4 25 v 3747 5525 V 75 5528 3675 4 v Black Black eop end end %%Page: 141 141 TeXDict begin HPSdict begin 141 140 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.141) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(141)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.13) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(7.5.13)p 0.0 0.0 1.0 TeXcolorrgb 99 w(W)-6 b(eightHistogram)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(WeightHistogram\()53 b(C[,)47 b(h])g(\))2167 b Fr(\(function\))p Black 216 799 a FK(The)24 b(function)i Ft(WeightHistogram)i FK(plots)d(a)f (histogram)i(of)d(weights)i(in)f(code)h Ft(C)p FK(.)30 b(The)23 b(maximum)h(length)h(of)75 912 y(a)e(column)i(is)f Ft(h)p FK(.)29 b(Def)o(ault)c(v)n(alue)g(for)f Ft(h)g FK(is)f(1)p Fp(=)p FK(3)i(of)f(the)g(size)g(of)g(the)g(screen.)31 b(The)24 b(number)h(that)f(appears)i(at)e(the)g(top)75 1024 y(of)f(the)h(histogram)i(is)d(the)h(maximum)f(v)n(alue)i(of)e(the) h(list)g(of)f(weights.)p 75 1147 1648 4 v 1764 1152 a FF(Example)p 2102 1147 V 75 1172 4 25 v 3747 1172 V 75 1272 4 100 v 188 1242 a(gap>)44 b(H)e(:=)h(HammingCode\(2,)k (GF\(5\)\);)p 3747 1272 V 75 1371 V 188 1341 a(a)c(linear)h([6,4,3]1)h (Hamming)g(\(2,5\))f(code)g(over)f(GF\(5\))p 3747 1371 V 75 1471 V 188 1441 a(gap>)h(WeightDistribution\(H\))q(;)p 3747 1471 V 75 1570 V 188 1541 a([)f(1,)g(0,)g(0,)g(80,)g(120,)h(264,)f (160)h(])p 3747 1570 V 75 1670 V 188 1640 a(gap>)g (WeightHistogram\(H\);)p 3747 1670 V 75 1770 V 188 1740 a(264----------------)p 3747 1770 V 75 1869 V 823 1839 a(*)p 3747 1869 V 75 1969 V 823 1939 a(*)p 3747 1969 V 75 2069 V 823 2039 a(*)p 3747 2069 V 75 2168 V 823 2138 a(*)p 3747 2168 V 75 2268 V 823 2238 a(*)85 b(*)p 3747 2268 V 75 2367 V 696 2338 a(*)g(*)g(*)p 3747 2367 V 75 2467 V 569 2437 a(*)g(*)g(*)g(*)p 3747 2467 V 75 2567 V 569 2537 a(*)g(*)g(*)g(*)p 3747 2567 V 75 2666 V 188 2636 a(+--------+--+--+--+-)q(-)p 3747 2666 V 75 2766 V 188 2736 a(0)g(1)g(2)g(3)g(4)g(5)g(6)p 3747 2766 V 75 2791 4 25 v 3747 2791 V 75 2794 3675 4 v 75 2927 a SDict begin H.S end 75 2927 a 75 2927 a SDict begin 13.6 H.A end 75 2927 a 75 2927 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.14) cvn H.B /DEST pdfmark end 75 2927 a 116 x FJ(7.5.14)p 0.0 0.0 1.0 TeXcolorrgb 99 w(MultiplicityInList)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3218 a Fs(\006)22 b Ft(MultiplicityInLis)q(t\()53 b(L,)47 b(a)f(\))2121 b Fr(\(function\))p Black 216 3443 a FK(This)26 b(is)f(a)g(v)o(ery)h (simple)g(list)g(command)h(which)f(returns)h(ho)n(w)e(man)o(y)h(times)f (a)h(occurs)h(in)e(L.)f(It)i(returns)h(0)e(if)h(a)75 3556 y(is)d(not)h(in)g(L.)e(\(The)h Fy(GAP)f FK(command)i Ft(Collected)i FK(does)e(not)g(quite)h(handle)g(this)f(\223e)o (xtreme\224)h(case.\))p 75 3679 1648 4 v 1764 3684 a FF(Example)p 2102 3679 V 75 3704 4 25 v 3747 3704 V 75 3804 4 100 v 188 3774 a(gap>)44 b(L:=[1,2,3,4,3,2,1,5,4)q(,3,)q(2,1)q (];)q(;)p 3747 3804 V 75 3903 V 188 3873 a(gap>)g (MultiplicityInList\(L,)q(1\);)p 3747 3903 V 75 4003 V 188 3973 a(3)p 3747 4003 V 75 4102 V 188 4073 a(gap>)g (MultiplicityInList\(L,)q(6\);)p 3747 4102 V 75 4202 V 188 4172 a(0)p 3747 4202 V 75 4227 4 25 v 3747 4227 V 75 4230 3675 4 v 75 4363 a SDict begin H.S end 75 4363 a 75 4363 a SDict begin 13.6 H.A end 75 4363 a 75 4363 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.15) cvn H.B /DEST pdfmark end 75 4363 a 116 x FJ(7.5.15)p 0.0 0.0 1.0 TeXcolorrgb 99 w(MostCommonInList)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4654 a Fs(\006)22 b Ft(MostCommonInList\()53 b(L)47 b(\))2352 b Fr(\(function\))p Black 216 4880 a FK(Input:)30 b(a)24 b(list)f(L)216 4992 y(Output:)30 b(an)24 b(a)f(in)g(L)f(which)i (occurs)h(at)f(least)g(as)g(much)f(as)h(an)o(y)f(other)i(in)e(L)p 75 5115 1648 4 v 1764 5120 a FF(Example)p 2102 5115 V 75 5140 4 25 v 3747 5140 V 75 5240 4 100 v 188 5210 a(gap>)44 b(L:=[1,2,3,4,3,2,1,5,4)q(,3,)q(2,1)q(];)q(;)p 3747 5240 V 75 5339 V 188 5309 a(gap>)g(MostCommonInList\(L\);)p 3747 5339 V 75 5439 V 188 5409 a(1)p 3747 5439 V 75 5464 4 25 v 3747 5464 V 75 5467 3675 4 v Black Black eop end end %%Page: 142 142 TeXDict begin HPSdict begin 142 141 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.142) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(142)p Black 75 307 a SDict begin H.S end 75 307 a 75 307 a SDict begin 13.6 H.A end 75 307 a 75 307 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.16) cvn H.B /DEST pdfmark end 75 307 a 92 x FJ(7.5.16)p 0.0 0.0 1.0 TeXcolorrgb 99 w(RotateList)p Black 1.0 0.0 0.0 TeXcolorrgb 75 573 a Fs(\006)22 b Ft(RotateList\()51 b(L)46 b(\))2631 b Fr(\(function\))p Black 216 799 a FK(Input:)30 b(a)24 b(list)f(L)216 912 y(Output:)30 b(a)23 b(list)h(L)-8 b(')22 b(which)i(is)g(the)f(c)o(yclic)i(rotation)g(of)f(L)e(\(to)i(the) g(right\))p 75 1032 1648 4 v 1764 1037 a FF(Example)p 2102 1032 V 75 1057 4 25 v 3747 1057 V 75 1156 4 100 v 188 1126 a(gap>)44 b(L:=[1,2,3,4];;)p 3747 1156 V 75 1256 V 188 1226 a(gap>)g(RotateList\(L\);)p 3747 1256 V 75 1355 V 188 1326 a([2,3,4,1])p 3747 1355 V 75 1380 4 25 v 3747 1380 V 75 1383 3675 4 v 75 1516 a SDict begin H.S end 75 1516 a 75 1516 a SDict begin 13.6 H.A end 75 1516 a 75 1516 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.5.17) cvn H.B /DEST pdfmark end 75 1516 a 116 x FJ(7.5.17)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Cir)n(culantMatrix)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1807 a Fs(\006)22 b Ft(CirculantMatrix\()53 b(k,)47 b(L)f(\))2260 b Fr(\(function\))p Black 216 2033 a FK(Input:)30 b(inte)o(ger)25 b(k,)e(a)g(list)h(L)e(of)i(length)h(n) 216 2145 y(Output:)30 b(kxn)24 b(matrix)g(whose)g(ro)n(ws)f(are)h(c)o (yclic)h(rotations)h(of)d(the)h(list)g(L)p 75 2266 1648 4 v 1764 2271 a FF(Example)p 2102 2266 V 75 2290 4 25 v 3747 2290 V 75 2390 4 100 v 188 2360 a(gap>)44 b(k:=3;)g (L:=[1,2,3,4];;)p 3747 2390 V 75 2490 V 188 2460 a(gap>)g (M:=CirculantMatrix\(k,)q(L\);)q(;)p 3747 2490 V 75 2589 V 188 2559 a(gap>)g(Display\(M\);)p 3747 2589 V 75 2614 4 25 v 3747 2614 V 75 2617 3675 4 v 75 2760 a SDict begin H.S end 75 2760 a 75 2760 a SDict begin 13.6 H.A end 75 2760 a 75 2760 a SDict begin [ /View [/XYZ H.V] /Dest (section.7.6) cvn H.B /DEST pdfmark end 75 2760 a 150 x FM(7.6)p 0.0 0.0 1.0 TeXcolorrgb 119 w(Miscellaneous)30 b(polynomial)g (functions)p Black 75 3117 a FK(In)23 b(this)h(section)h(we)d(describe) j(se)n(v)o(eral)f(multi)n(v)n(ariate)i(polynomial)f Fy(GAP)c FK(functions)26 b Fy(GU)m(A)-6 b(V)f(A)21 b FK(uses)j(for)f(construct-) 75 3230 y(ing)h(codes)h(or)e(performing)j(calculations)h(with)c(codes.) 75 3382 y SDict begin H.S end 75 3382 a 75 3382 a SDict begin 13.6 H.A end 75 3382 a 75 3382 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.6.1) cvn H.B /DEST pdfmark end 75 3382 a 96 x FJ(7.6.1)p 0.0 0.0 1.0 TeXcolorrgb 99 w(MatrixT)-7 b(ransf)n(ormationOnMulti)o(v)o(ariateP)n(olynomial)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3653 a Fs(\006)22 b Ft(MatrixTransformat)q(ion)q(OnM)q(ult)q(iv)q(ari)q(ate)q(Pol)q(yn)q (omi)q(al)53 b(\()46 b(A,)i(f,)f(R)f(\))730 b Fr(\(function\))p Black 216 3879 a Ft(A)21 b FK(is)h(an)g Fq(n)11 b Fv(\002)g Fq(n)22 b FK(matrix)g(with)g(entries)h(in)f(a)f(\002eld)h Fq(F)7 b FK(,)21 b Ft(R)g FK(is)h(a)f(polynomial)j(ring)f(of)f Fq(n)f FK(v)n(ariables,)j(say)e Fq(F)7 b Fo([)p Fq(x)3440 3893 y Fr(1)3478 3879 y Fp(;)j(:::;)g Fq(x)3663 3893 y Fm(n)3702 3879 y Fo(])p FK(,)75 3991 y(and)24 b Ft(f)f FK(is)g(a)h(polynomial)h(in)f Ft(R)p FK(.)k(Returns)d(the)f (composition)40 b Fq(f)26 b Fv(\016)13 b Fq(A)p FK(.)75 4144 y SDict begin H.S end 75 4144 a 75 4144 a SDict begin 13.6 H.A end 75 4144 a 75 4144 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.6.2) cvn H.B /DEST pdfmark end 75 4144 a 96 x FJ(7.6.2)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Degr)n(eeMulti)o(v)o (ariateP)n(olynomial)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4415 a Fs(\006)22 b Ft(DegreeMultivariat)q(ePo)q(lyn)q(omi)q(al)q (\()52 b(f,)47 b(R)g(\))1657 b Fr(\(function\))p Black 216 4640 a FK(This)27 b(command)h(tak)o(es)h(tw)o(o)e(ar)n(guments,)j Ft(f)p FK(,)d(a)g(multi)n(v)n(ariate)j(polynomial,)g(and)e Ft(R)f FK(a)g(polynomial)i(ring)f(o)o(v)o(er)75 4753 y(a)d(\002eld)g Fq(F)32 b FK(containing)c Ft(f)p FK(,)d(say)g Fq(R)c Fo(=)g Fq(F)7 b Fo([)p Fq(x)1358 4767 y Fr(1)1396 4753 y Fp(;)j Fq(x)1471 4767 y Fr(2)1509 4753 y Fp(;)g(:::;)g Fq(x)1694 4767 y Fm(n)1733 4753 y Fo(])p FK(.)33 b(The)25 b(output)i(is)e(simply)h(the)f(maximum)h(de)o(grees)g(of)g(all)f(the)75 4866 y(monomials)g(occurring)h(in)d Ft(f)q FK(.)216 4979 y(This)g(command)i(can)f(be)f(used)i(to)e(compute)i(the)f(de)o(gree)g (of)g(an)f(af)n(\002ne)h(plane)g(curv)o(e.)p 75 5099 1648 4 v 1764 5104 a FF(Example)p 2102 5099 V 75 5124 4 25 v 3747 5124 V 75 5224 4 100 v 188 5194 a(gap>)44 b(F:=GF\(11\);;)p 3747 5224 V 75 5323 V 188 5293 a(gap>)g (R2:=PolynomialRing\(F,)q(2\);)p 3747 5323 V 75 5423 V 188 5393 a(PolynomialRing\(...,)49 b([)42 b(x_1,)i(x_2)f(]\))p 3747 5423 V 75 5523 V 188 5493 a(gap>)h(vars:=IndeterminatesO)q(fPo)q (lyn)q(om)q(ial)q(Rin)q(g\(R)q(2\);)q(;)p 3747 5523 V 75 5622 V 188 5592 a(gap>)g(x:=vars[1];;)i(y:=vars[2];;)p 3747 5622 V Black Black eop end end %%Page: 143 143 TeXDict begin HPSdict begin 143 142 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.143) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(143)p Black 75 428 4 100 v 188 399 a FF(gap>)44 b(poly:=y\2102-x*\(x\2102-1\);;)p 3747 428 V 75 528 V 188 498 a(gap>)g(DegreeMultivariatePol)q(yno)q(mia)q(l\()q(pol)q(y,R)q (2\);)p 3747 528 V 75 628 V 188 598 a(3)p 3747 628 V 75 727 V 3747 727 V 75 752 4 25 v 3747 752 V 75 755 3675 4 v 75 887 a SDict begin H.S end 75 887 a 75 887 a SDict begin 13.6 H.A end 75 887 a 75 887 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.6.3) cvn H.B /DEST pdfmark end 75 887 a 116 x FJ(7.6.3)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Degr)n(eesMulti)o(v)o (ariateP)n(olynomial)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1178 a Fs(\006)22 b Ft(DegreesMultivaria)q(teP)q(oly)q(nom)q(ia)q (l\()53 b(f,)47 b(R)f(\))1611 b Fr(\(function\))p Black 216 1404 a FK(Returns)32 b(a)e(list)i(of)f(information)i(about)f(the)f (multi)n(v)n(ariate)i(polynomial)g Ft(f)q FK(.)50 b(Nice)30 b(for)h(other)h(programs)h(b)n(ut)75 1516 y(mostly)24 b(unreadable)j(by)c Fy(GAP)f FK(users.)p 75 1632 1648 4 v 1764 1637 a FF(Example)p 2102 1632 V 75 1657 4 25 v 3747 1657 V 75 1756 4 100 v 188 1726 a(gap>)44 b(F:=GF\(11\);;)p 3747 1756 V 75 1856 V 188 1826 a(gap>)g(R2:=PolynomialRing\(F,)q(2\);)p 3747 1856 V 75 1956 V 188 1926 a(PolynomialRing\(...,)49 b([)42 b(x_1,)i(x_2)f(]\))p 3747 1956 V 75 2055 V 188 2025 a(gap>)h(vars:=IndeterminatesO)q(fPo)q(lyn)q(om)q(ial)q(Rin)q (g\(R)q(2\);)q(;)p 3747 2055 V 75 2155 V 188 2125 a(gap>)g (x:=vars[1];;)i(y:=vars[2];;)p 3747 2155 V 75 2254 V 188 2225 a(gap>)e(poly:=y\2102-x*\(x\2102-1\);;)p 3747 2254 V 75 2354 V 188 2324 a(gap>)g(DegreesMultivariatePo)q(lyn)q(omi)q (al)q(\(po)q(ly,)q(R2\))q(;)p 3747 2354 V 75 2454 V 188 2424 a([)f([)f([)h(x_1,)h(x_1,)f(1)g(],)g([)g(x_1,)g(x_2,)h(0)f(])g(],) g([)f([)h(x_2\2102,)h(x_1,)g(0)f(],)g([)f(x_2\2102,)j(x_2,)e(2)g(])g (],)p 3747 2454 V 75 2553 V 273 2523 a([)f([)h(x_1\2103,)h(x_1,)g(3)f (],)g([)f(x_1\2103,)j(x_2,)f(0)e(])h(])g(])p 3747 2553 V 75 2653 V 188 2623 a(gap>)p 3747 2653 V 75 2753 V 3747 2753 V 75 2777 4 25 v 3747 2777 V 75 2780 3675 4 v 75 2913 a SDict begin H.S end 75 2913 a 75 2913 a SDict begin 13.6 H.A end 75 2913 a 75 2913 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.6.4) cvn H.B /DEST pdfmark end 75 2913 a 116 x FJ(7.6.4)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Coef\002cientMulti)o(v) o(ariateP)n(olynomial)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3203 a Fs(\006)22 b Ft(CoefficientMultiv)q(ari)q(ate)q(Pol)q(yn)q (omi)q(al\()53 b(f,)47 b(var,)h(power,)h(R)d(\))869 b Fr(\(function\))p Black 216 3429 a FK(The)38 b(command)h Ft(CoefficientMultiv)q(ari)q(ate)q(Pol)q(yn)q(omi)q(al)44 b FK(tak)o(es)c(four)f(ar)n(guments:)61 b(a)38 b(multi)n(v)n(ariant)75 3542 y(polynomial)e Ft(f)p FK(,)f(a)e(v)n(ariable)i(name)f Ft(var)q FK(,)g(an)g(inte)o(ger)h Ft(power)q FK(,)g(and)f(a)f (polynomial)j(ring)e Ft(R)f FK(containing)j Ft(f)q FK(.)57 b(F)o(or)75 3655 y(e)o(xample,)26 b(if)f Ft(f)g FK(is)g(a)g(multi)n(v)n (ariate)i(polynomial)h(in)d Fq(R)f FK(=)h Fq(F)7 b FK([)p Fq(x)2012 3669 y Fr(1)2050 3655 y Fp(;)j Fq(x)2125 3669 y Fr(2)2163 3655 y Fp(;)g(:::;)g Fq(x)2348 3669 y Fm(n)2387 3655 y FK(])25 b(then)h Ft(var)f FK(must)h(be)f(one)h(of)f(the)g Fq(x)3529 3669 y Fm(i)3552 3655 y FK(.)34 b(The)75 3768 y(output)25 b(is)e(the)h(coef)n(\002cient)h(of)f Fq(x)1095 3722 y Fm(power)1090 3793 y(i)1290 3768 y FK(in)f Ft(f)q FK(.)216 3880 y(\(Not)g(sure)i(if)e Fq(F)30 b FK(needs)25 b(to)e(be)h(a)f(\002eld)g(in)g(f)o(act)i(...\))216 3993 y(Related)g(to)e(the)h Fy(GAP)d FK(command)k Ft(PolynomialCoefficie)q (nts)q(Pol)q(yno)q(mi)q(al)p FK(.)p 75 4103 1648 4 v 1764 4108 a FF(Example)p 2102 4103 V 75 4128 4 25 v 3747 4128 V 75 4227 4 100 v 188 4198 a(gap>)44 b(F:=GF\(11\);;)p 3747 4227 V 75 4327 V 188 4297 a(gap>)g(R2:=PolynomialRing\(F,)q(2\);)p 3747 4327 V 75 4427 V 188 4397 a(PolynomialRing\(...,)49 b([)42 b(x_1,)i(x_2)f(]\))p 3747 4427 V 75 4526 V 188 4496 a(gap>)h(vars:=IndeterminatesO)q(fPo)q(lyn)q(om)q(ial)q(Rin)q (g\(R)q(2\);)q(;)p 3747 4526 V 75 4626 V 188 4596 a(gap>)g (x:=vars[1];;)i(y:=vars[2];;)p 3747 4626 V 75 4726 V 188 4696 a(gap>)e(poly:=y\2102-x*\(x\2102-1\);;)p 3747 4726 V 75 4825 V 188 4795 a(gap>)g(PolynomialCoefficient)q(sOf)q(Pol)q (yn)q(omi)q(al\()q(pol)q(y,x)q(\);)p 3747 4825 V 75 4925 V 188 4895 a([)f(x_2\2102,)h(Z\(11\)\2100,)h(0*Z\(11\),)g (-Z\(11\)\2100)g(])p 3747 4925 V 75 5024 V 188 4995 a(gap>)f (PolynomialCoefficient)q(sOf)q(Pol)q(yn)q(omi)q(al\()q(pol)q(y,y)q(\);) p 3747 5024 V 75 5124 V 188 5094 a([)f(-x_1\2103+x_1,)j(0*Z\(11\),)f (Z\(11\)\2100)f(])p 3747 5124 V 75 5224 V 188 5194 a(gap>)g (CoefficientMultivaria)q(teP)q(oly)q(no)q(mia)q(l\(p)q(oly)q(,y,)q(0,R) q(2\);)p 3747 5224 V 75 5323 V 188 5293 a(-x_1\2103+x_1)p 3747 5323 V 75 5423 V 188 5393 a(gap>)g(CoefficientMultivaria)q(teP)q (oly)q(no)q(mia)q(l\(p)q(oly)q(,y,)q(1,R)q(2\);)p 3747 5423 V 75 5523 V 188 5493 a(0*Z\(11\))p 3747 5523 V 75 5622 V 188 5592 a(gap>)g(CoefficientMultivaria)q(teP)q(oly)q(no)q(mia)q (l\(p)q(oly)q(,y,)q(2,R)q(2\);)p 3747 5622 V Black Black eop end end %%Page: 144 144 TeXDict begin HPSdict begin 144 143 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.144) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(144)p Black 75 428 4 100 v 188 399 a FF(Z\(11\)\2100)p 3747 428 V 75 528 V 188 498 a(gap>)44 b(CoefficientMultivaria)q(teP)q (oly)q(no)q(mia)q(l\(p)q(oly)q(,x,)q(0,R)q(2\);)p 3747 528 V 75 628 V 188 598 a(x_2\2102)p 3747 628 V 75 727 V 188 697 a(gap>)g(CoefficientMultivaria)q(teP)q(oly)q(no)q(mia)q(l\(p) q(oly)q(,x,)q(1,R)q(2\);)p 3747 727 V 75 827 V 188 797 a(Z\(11\)\2100)p 3747 827 V 75 927 V 188 897 a(gap>)g (CoefficientMultivaria)q(teP)q(oly)q(no)q(mia)q(l\(p)q(oly)q(,x,)q(2,R) q(2\);)p 3747 927 V 75 1026 V 188 996 a(0*Z\(11\))p 3747 1026 V 75 1126 V 188 1096 a(gap>)g(CoefficientMultivaria)q(teP)q(oly)q (no)q(mia)q(l\(p)q(oly)q(,x,)q(3,R)q(2\);)p 3747 1126 V 75 1225 V 188 1196 a(-Z\(11\)\2100)p 3747 1225 V 75 1325 V 3747 1325 V 75 1350 4 25 v 3747 1350 V 75 1353 3675 4 v 75 1486 a SDict begin H.S end 75 1486 a 75 1486 a SDict begin 13.6 H.A end 75 1486 a 75 1486 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.6.5) cvn H.B /DEST pdfmark end 75 1486 a 116 x FJ(7.6.5)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Solv)o(eLinearSystem)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1777 a Fs(\006)22 b Ft(SolveLinearSystem)q(\()52 b(L,)47 b(vars)h(\))2028 b Fr(\(function\))p Black 216 2003 a FK(Input:)30 b Ft(L)24 b FK(is)f(a)g(list)h(of)f(linear)i(forms)f(in)f (the)h(v)n(ariables)i Ft(vars)q FK(.)216 2115 y(Output:)k(the)24 b(solution)i(of)d(the)h(system,)g(if)f(its)h(unique.)216 2228 y(The)h(procedure)j(is)e(straightforw)o(ard:)37 b(Find)25 b(the)h(associated)j(matrix)d Fq(A)p FK(,)e(\002nd)h(the)h (\224constant)i(v)o(ector\224)f Fq(b)p FK(,)f(and)75 2341 y(solv)o(e)e Fq(A)13 b Fv(\003)g Fq(v)20 b Fo(=)g Fq(b)p FK(.)28 b(No)23 b(error)h(checking)i(is)e(performed.)216 2454 y(Related)h(to)e(the)h Fy(GAP)d FK(command)k Ft(SolutionMat\()50 b(A,)d(b)g(\))p FK(.)p 75 2567 1648 4 v 1764 2572 a FF(Example)p 2102 2567 V 75 2592 4 25 v 3747 2592 V 75 2692 4 100 v 188 2662 a(gap>)d(F:=GF\(11\);;)p 3747 2692 V 75 2791 V 188 2761 a(gap>)g(R2:=PolynomialRing\(F,)q(2\);)p 3747 2791 V 75 2891 V 188 2861 a(PolynomialRing\(...,)49 b([)42 b(x_1,)i(x_2)f(]\))p 3747 2891 V 75 2991 V 188 2961 a(gap>)h (vars:=IndeterminatesO)q(fPo)q(lyn)q(om)q(ial)q(Rin)q(g\(R)q(2\);)q(;)p 3747 2991 V 75 3090 V 188 3060 a(gap>)g(x:=vars[1];;)i(y:=vars[2];;)p 3747 3090 V 75 3190 V 188 3160 a(gap>)e(f:=3*y-3*x+1;;)j (g:=-5*y+2*x-7;;)p 3747 3190 V 75 3289 V 188 3260 a(gap>)d (soln:=SolveLinearSyst)q(em\()q([f,)q(g])q(,[x)q(,y])q(\);)p 3747 3289 V 75 3389 V 188 3359 a([)f(Z\(11\)\2103,)i(Z\(11\)\2102)f(])p 3747 3389 V 75 3489 V 188 3459 a(gap>)g(Value\(f,[x,y],soln\);)49 b(#)42 b(checking)k(okay)p 3747 3489 V 75 3588 V 188 3558 a(0*Z\(11\))p 3747 3588 V 75 3688 V 188 3658 a(gap>)e (Value\(g,[x,y],col\);)k(#)43 b(checking)i(okay)p 3747 3688 V 75 3788 V 188 3758 a(0*Z\(11\))p 3747 3788 V 75 3887 V 3747 3887 V 75 3912 4 25 v 3747 3912 V 75 3915 3675 4 v 75 4048 a SDict begin H.S end 75 4048 a 75 4048 a SDict begin 13.6 H.A end 75 4048 a 75 4048 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.6.6) cvn H.B /DEST pdfmark end 75 4048 a 117 x FJ(7.6.6)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Gua)n(v)o(aV)-10 b(ersion)p Black 1.0 0.0 0.0 TeXcolorrgb 75 4339 a Fs(\006)22 b Ft(GuavaVersion\()51 b(\))2631 b Fr(\(function\))p Black 216 4565 a FK(Returns)25 b(the)e(current)j(v) o(ersion)f(of)e(Gua)n(v)n(a.)29 b(Same)23 b(as)g Ft(guava)p 2165 4565 28 4 v 35 w(version\(\))p FK(.)p 75 4682 1648 4 v 1764 4687 a FF(Example)p 2102 4682 V 75 4707 4 25 v 3747 4707 V 75 4806 4 100 v 188 4776 a(gap>)44 b(GuavaVersion\(\);)p 3747 4806 V 75 4906 V 188 4876 a("2.7")p 3747 4906 V 75 5005 V 3747 5005 V 75 5030 4 25 v 3747 5030 V 75 5033 3675 4 v 75 5167 a SDict begin H.S end 75 5167 a 75 5167 a SDict begin 13.6 H.A end 75 5167 a 75 5167 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.6.7) cvn H.B /DEST pdfmark end 75 5167 a 116 x FJ(7.6.7)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Coef\002cientT)-9 b(oP)n(olynomial)p Black 1.0 0.0 0.0 TeXcolorrgb 75 5457 a Fs(\006)22 b Ft(CoefficientToPoly)q(nom)q(ial)q (\()52 b(x,)c(b,)f(F)f(\))1750 b Fr(\(function\))p Black Black Black eop end end %%Page: 145 145 TeXDict begin HPSdict begin 145 144 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.145) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(145)p Black 216 399 a(Returns)24 b(the)e(Zech)h(log)g(of) f(x)g(to)h(base)g(b,)f(ie)h(the)f(i)g(such)i(that)f Fq(x)12 b Fo(+)g FK(1)19 b Fo(=)g Fq(b)2473 366 y Fm(i)2496 399 y FK(,)j(so)g Fq(y)12 b Fo(+)g Fq(z)19 b Fo(=)g Fq(y)p Fo(\()p FK(1)12 b Fo(+)g Fq(z)p Fp(=)p Fq(y)p Fo(\))21 b(=)e Fq(b)3448 366 y Fm(k)3483 399 y FK(,)j(where)75 511 y(k=Log\(y)-6 b(,b\)+ZechLog\(z/y)g(,b\))29 b(and)24 b(b)f(must)g(be)h(a)f(primiti)n(v)o(e)h(element)h(of)e(F)-7 b(.)p 75 631 1648 4 v 1764 636 a FF(Example)p 2102 631 V 75 656 4 25 v 3747 656 V 75 756 4 100 v 188 726 a(gap>)44 b(F:=GF\(11\);;)i(l)c(:=)h(One\(F\);;)p 3747 756 V 75 856 V 188 826 a(gap>)h(ZechLog\(2*l,8*l,F\);)p 3747 856 V 75 955 V 188 925 a(-24)p 3747 955 V 75 1055 V 188 1025 a(gap>)g(8*l+l;\(2*l\)\210\(-24\);)p 3747 1055 V 75 1154 V 188 1125 a(Z\(11\)\2106)p 3747 1154 V 75 1254 V 188 1224 a(Z\(11\)\2106)p 3747 1254 V 75 1354 V 3747 1354 V 75 1379 4 25 v 3747 1379 V 75 1382 3675 4 v 75 1514 a SDict begin H.S end 75 1514 a 75 1514 a SDict begin 13.6 H.A end 75 1514 a 75 1514 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.6.8) cvn H.B /DEST pdfmark end 75 1514 a 117 x FJ(7.6.8)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Coef\002cientT)-9 b(oP)n(olynomial)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1805 a Fs(\006)22 b Ft(CoefficientToPoly)q(nom)q(ial)q(\()52 b(coeffs,)d(R)e(\))1657 b Fr(\(function\))p Black 216 2031 a FK(The)31 b(function)j Ft(CoefficientToPolyno)q(mi)q(al)j FK(returns)c(the)f(de)o(gree)h Fq(d)20 b Fv(\000)c FK(1)31 b(polynomial)j Fq(c)3229 2045 y Fr(0)3282 2031 y Fo(+)15 b Fq(c)3408 2045 y Fr(1)3446 2031 y Fq(x)h Fo(+)f Fp(:::)h Fo(+)75 2144 y Fq(c)115 2158 y Fm(d)s Fh(\000)p Fr(1)241 2144 y Fq(x)281 2111 y Fm(d)s Fh(\000)p Fr(1)407 2144 y FK(,)25 b(where)g Ft(coeffs)i FK(is)e(a)f(list)i(of)f(elements)h(of)f (a)g(\002eld,)g Fq(coe)14 b(f)25 b(f)13 b(s)23 b Fo(=)e Fv(f)p Fq(c)2572 2158 y Fr(0)2610 2144 y Fp(;)10 b(:::;)g Fq(c)2795 2158 y Fm(d)s Fh(\000)p Fr(1)2922 2144 y Fv(g)p FK(,)25 b(and)h Ft(R)e FK(is)h(a)g(uni)n(v)n(ariate)75 2257 y(polynomial)h(ring.)p 75 2376 1648 4 v 1764 2381 a FF(Example)p 2102 2376 V 75 2401 4 25 v 3747 2401 V 75 2501 4 100 v 188 2471 a(gap>)44 b(F:=GF\(11\);)p 3747 2501 V 75 2601 V 188 2571 a(GF\(11\))p 3747 2601 V 75 2700 V 188 2670 a(gap>)g(R1:=PolynomialRing\(F,)q(["a)q("]\))q(;;)p 3747 2700 V 75 2800 V 188 2770 a(gap>)g(var1:=IndeterminatesO)q(fPo)q (lyn)q(om)q(ial)q(Rin)q(g\(R)q(1\);)q(;)k(a:=var1[1];;)p 3747 2800 V 75 2900 V 188 2870 a(gap>)c(coeffs:=Z\(11\)\2100*[1,2,)q (3,4)q(];)p 3747 2900 V 75 2999 V 188 2969 a([)f(Z\(11\)\2100,)i (Z\(11\),)f(Z\(11\)\2108,)h(Z\(11\)\2102)g(])p 3747 2999 V 75 3099 V 188 3069 a(gap>)f(CoefficientToPolynomi)q(al\()q(coe)q(ff)q (s,R)q(1\);)p 3747 3099 V 75 3198 V 188 3169 a (Z\(11\)\2102*a\2103+Z\(11\)\2108*)q(a\2102)q(+Z\()q(11\))q(*a+)q(Z\()q (11\))q(\2100)p 3747 3198 V 75 3223 4 25 v 3747 3223 V 75 3226 3675 4 v 75 3359 a SDict begin H.S end 75 3359 a 75 3359 a SDict begin 13.6 H.A end 75 3359 a 75 3359 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.6.9) cvn H.B /DEST pdfmark end 75 3359 a 116 x FJ(7.6.9)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Degr)n(eesMonomialT)-9 b(erm)p Black 1.0 0.0 0.0 TeXcolorrgb 75 3650 a Fs(\006)22 b Ft(DegreesMonomialTe)q(rm\()53 b(m,)47 b(R)g(\))2074 b Fr(\(function\))p Black 216 3875 a FK(The)35 b(function)j Ft(DegreesMonomialTerm)j FK(returns)c(the)f (list)g(of)f(de)o(grees)i(to)e(which)h(each)g(v)n(ariable)i(in)d(the)75 3988 y(multi)n(v)n(ariate)g(polynomial)g(ring)f Ft(R)e FK(occurs)j(in)e(the)g(monomial)h Ft(m)p FK(,)g(where)g Ft(coeffs)g FK(is)f(a)f(list)i(of)e(elements)j(of)e(a)75 4101 y(\002eld.)p 75 4203 1648 4 v 1764 4208 a FF(Example)p 2102 4203 V 75 4227 4 25 v 3747 4227 V 75 4327 4 100 v 188 4297 a(gap>)44 b(F:=GF\(11\);)p 3747 4327 V 75 4427 V 188 4397 a(GF\(11\))p 3747 4427 V 75 4526 V 188 4496 a(gap>)g(R1:=PolynomialRing\(F,)q(["a)q("]\))q(;;)p 3747 4526 V 75 4626 V 188 4596 a(gap>)g(var1:=IndeterminatesO)q(fPo)q (lyn)q(om)q(ial)q(Rin)q(g\(R)q(1\);)q(;)k(a:=var1[1];;)p 3747 4626 V 75 4726 V 188 4696 a(gap>)c(b:=X\(F,"b",var1\);)p 3747 4726 V 75 4825 V 188 4795 a(b)p 3747 4825 V 75 4925 V 188 4895 a(gap>)g(var2:=Concatenation\(v)q(ar1)q(,[b)q(]\))q(;)p 3747 4925 V 75 5024 V 188 4995 a([)f(a,)g(b)f(])p 3747 5024 V 75 5124 V 188 5094 a(gap>)i(R2:=PolynomialRing\(F,)q(var)q(2\);) p 3747 5124 V 75 5224 V 188 5194 a(PolynomialRing\(...,)49 b([)42 b(a,)h(b)g(]\))p 3747 5224 V 75 5323 V 188 5293 a(gap>)h(c:=X\(F,"c",var2\);)p 3747 5323 V 75 5423 V 188 5393 a(c)p 3747 5423 V 75 5523 V 188 5493 a(gap>)g (var3:=Concatenation\(v)q(ar2)q(,[c)q(]\))q(;)p 3747 5523 V 75 5622 V 188 5592 a([)f(a,)g(b,)g(c)f(])p 3747 5622 V Black Black eop end end %%Page: 146 146 TeXDict begin HPSdict begin 146 145 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.146) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(146)p Black 75 428 4 100 v 188 399 a FF(gap>)44 b(R3:=PolynomialRing\(F,)q(var)q(3\);)p 3747 428 V 75 528 V 188 498 a(PolynomialRing\(...,)49 b([)42 b(a,)h(b,)g(c)g(]\))p 3747 528 V 75 628 V 188 598 a(gap>)h(m:=b\2103*c\2107;)p 3747 628 V 75 727 V 188 697 a(b\2103*c\2107)p 3747 727 V 75 827 V 188 797 a(gap>)g(DegreesMonomialTerm\(m)q(,R3)q(\);)p 3747 827 V 75 927 V 188 897 a([)f(0,)g(3,)g(7)f(])p 3747 927 V 75 951 4 25 v 3747 951 V 75 954 3675 4 v 75 1088 a SDict begin H.S end 75 1088 a 75 1088 a SDict begin 13.6 H.A end 75 1088 a 75 1088 a SDict begin [ /View [/XYZ H.V] /Dest (subsection.7.6.10) cvn H.B /DEST pdfmark end 75 1088 a 116 x FJ(7.6.10)p 0.0 0.0 1.0 TeXcolorrgb 99 w(Di)o(visorsMulti)o(v)o (ariateP)n(olynomial)p Black 1.0 0.0 0.0 TeXcolorrgb 75 1378 a Fs(\006)22 b Ft(DivisorsMultivari)q(ate)q(Pol)q(yno)q(mi)q (al\()53 b(f,)47 b(R)g(\))1564 b Fr(\(function\))p Black 216 1604 a FK(The)33 b(function)j Ft(DivisorsMultivariat)q(ePo)q(lyn)q (om)q(ial)j FK(returns)c(the)f(list)g(of)f(polynomial)j(di)n(visors)f (of)f Ft(f)75 1717 y FK(in)g(the)g(multi)n(v)n(ariate)i(polynomial)g (ring)e Ft(R)g FK(with)f(coef)n(\002cients)j(in)e(a)f(\002eld.)60 b(This)33 b(program)i(uses)g(a)e(simple)i(b)n(ut)75 1830 y(slo)n(w)25 b(algorithm)i(\(see)f(Joachim)h(v)n(on)f(zur)f(Gathen,)i (J)8 b(\250)-38 b(ur)n(gen)27 b(Gerhard,)f([)p 0.0236 0.6179 0.0894 TeXcolorrgb 2396 1831 a SDict begin H.S end 2396 1831 a 0.0236 0.6179 0.0894 TeXcolorrgb -1 x FK(vzGG03)p 0.0236 0.6179 0.0894 TeXcolorrgb 2703 1768 a SDict begin H.R end 2703 1768 a 2703 1830 a SDict begin [ /Color [0 1 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (cite.GG03) cvn H.B /ANN pdfmark end 2703 1830 a Black 2 w FK(],)f(e)o(x)o(ercise)h(16.10\))h(which)f(\002rst)75 1943 y(con)l(v)o(erts)k(the)f(multi)n(v)n(ariate)h(polynomial)g Ft(f)e FK(to)g(an)g(associated)j(uni)n(v)n(ariate)g(polynomial)44 b Fq(f)3013 1910 y Fh(\003)3051 1943 y FK(,)28 b(then)h Ft(Factors)44 b Fq(f)3690 1910 y Fh(\003)3727 1943 y FK(,)75 2056 y(and)26 b(\002nally)f(con)l(v)o(erts)j(these)e(uni)n(v)n (ariate)h(f)o(actors)g(back)f(into)g(the)f(multi)n(v)n(ariate)i (polynomial)h(f)o(actors)f(of)e Ft(f)p FK(.)33 b(Since)75 2169 y Ft(Factors)25 b FK(is)f(non-deterministic,)j Ft (DivisorsMultivari)q(ate)q(Pol)q(yn)q(omi)q(al)i FK(is)23 b(non-deterministic)29 b(as)23 b(well.)p 75 2286 1648 4 v 1764 2291 a FF(Example)p 2102 2286 V 75 2310 4 25 v 3747 2310 V 75 2410 4 100 v 188 2380 a(gap>)44 b (R2:=PolynomialRing\(GF)q(\(3\))q(,[")q(x1)q(",")q(x2")q(]\);)p 3747 2410 V 75 2510 V 188 2480 a(PolynomialRing\(...,)49 b([)42 b(x1,)i(x2)f(]\))p 3747 2510 V 75 2609 V 188 2579 a(gap>)h(vars:=IndeterminatesO)q(fPo)q(lyn)q(om)q(ial)q(Rin)q(g\(R)q (2\);)p 3747 2609 V 75 2709 V 188 2679 a([)f(x1,)g(x2)g(])p 3747 2709 V 75 2809 V 188 2779 a(gap>)h(x2:=vars[2];)p 3747 2809 V 75 2908 V 188 2878 a(x2)p 3747 2908 V 75 3008 V 188 2978 a(gap>)g(x1:=vars[1];)p 3747 3008 V 75 3107 V 188 3078 a(x1)p 3747 3107 V 75 3207 V 188 3177 a(gap>)g(f:=x1\2103+x2\2103;;)p 3747 3207 V 75 3307 V 188 3277 a(gap>)g(DivisorsMultivariateP)q(oly)q(nom)q(ia)q(l\(f)q(,R2)q (\);)p 3747 3307 V 75 3406 V 188 3376 a([)f(x1+x2,)h(x1+x2,)g(x1+x2)g (])p 3747 3406 V 75 3431 4 25 v 3747 3431 V 75 3434 3675 4 v Black Black eop end end %%Page: 147 147 TeXDict begin HPSdict begin 147 146 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.147) cvn H.B /DEST pdfmark end 75 100 a Black Black 963 x FA(Refer)l(ences)75 1398 y SDict begin H.S end 75 1398 a 75 1398 a SDict begin 13.6 H.A end 75 1398 a 75 1398 a SDict begin [ /View [/XYZ H.V] /Dest (chapter*.4) cvn H.B /DEST pdfmark end 75 1398 a Black 75 1508 a SDict begin H.S end 75 1508 a FK([BMIT])363 1508 y SDict begin 13.6 H.A end 363 1508 a 363 1508 a SDict begin [ /View [/XYZ H.V] /Dest (cite.BM03) cvn H.B /DEST pdfmark end 363 1508 a Black 126 w FK(L.)18 b(Bazzi)h(and)h(S.)e(K.)g(Mitter)-5 b(.)24 b(Some)19 b(constructions)k(of)c(codes)i(from)e(group)i(actions.)k(preprint)d (March)489 1621 y(2003)j(\(submitted)g(to)f(IEEE)d(IT\).)p 0.0236 0.0894 0.6179 TeXcolorrgb 1590 1623 a SDict begin H.S end 1590 1623 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(79)p 0.0236 0.0894 0.6179 TeXcolorrgb 1680 1559 a SDict begin H.R end 1680 1559 a 1680 1621 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.79) cvn H.B /ANN pdfmark end 1680 1621 a Black Black 75 1805 a SDict begin H.S end 75 1805 a FK([Bro06])361 1805 y SDict begin 13.6 H.A end 361 1805 a 361 1805 a SDict begin [ /View [/XYZ H.V] /Dest (cite.Br) cvn H.B /DEST pdfmark end 361 1805 a Black 128 w FK(A.)27 b(E.)f(Brouwer)-5 b(.)48 b Fq(Bounds)29 b(on)f(the)g(minimum)g (distance)i(of)e(linear)i(codes)p FK(.)48 b(On)28 b(the)g(internet)i (at)e(the)489 1917 y(URL:)22 b(http:)g Fp(==)p FK(www)-6 b(.win.tue.nl)p Fp(=)-15 b FK(\230)g(aeb)p Fp(=)p FK(v)n(oorlinco)q (d.ht)q(ml,)28 b(1997-2006.)p 0.0236 0.0894 0.6179 TeXcolorrgb 2867 1917 a SDict begin H.S end 2867 1917 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(114)p 0.0236 0.0894 0.6179 TeXcolorrgb 3002 1855 a SDict begin H.R end 3002 1855 a 3002 1917 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.114) cvn H.B /ANN pdfmark end 3002 1917 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3049 1919 a SDict begin H.S end 3049 1919 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(119)p 0.0236 0.0894 0.6179 TeXcolorrgb 3184 1855 a SDict begin H.R end 3184 1855 a 3184 1917 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.119) cvn H.B /ANN pdfmark end 3184 1917 a Black Black 75 2101 a SDict begin H.S end 75 2101 a FK([Gao03])376 2101 y SDict begin 13.6 H.A end 376 2101 a 376 2101 a SDict begin [ /View [/XYZ H.V] /Dest (cite.Gao03) cvn H.B /DEST pdfmark end 376 2101 a Black 113 w FK(S.)18 b(Gao.)25 b(A)19 b(ne)n(w)g(algorithm)j(for)e(decoding)i(reed-solomon)h(codes.)k Fq(Communications,)c(Information)489 2214 y(and)31 b(Network)f (Security)i(\(V)-12 b(.)29 b(Bhar)m(gava,)k(H.)c(V)-12 b(.)29 b(P)-7 b(oor)d(,)31 b(V)-12 b(.)29 b(T)-8 b(ar)l(okh)31 b(and)f(S.)g(Y)-8 b(oon,)31 b(Eds.\))p FK(,)g(pages)g(pp.)489 2327 y(55\22668,)25 b(2003.)p 0.0236 0.0894 0.6179 TeXcolorrgb 999 2328 a SDict begin H.S end 999 2328 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(53)p 0.0236 0.0894 0.6179 TeXcolorrgb 1089 2265 a SDict begin H.R end 1089 2265 a 1089 2327 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.53) cvn H.B /ANN pdfmark end 1089 2327 a Black Black 75 2511 a SDict begin H.S end 75 2511 a FK([GDT91])413 2511 y SDict begin 13.6 H.A end 413 2511 a 413 2511 a SDict begin [ /View [/XYZ H.V] /Dest (cite.GDT91) cvn H.B /DEST pdfmark end 413 2511 a Black 76 w FK(E.)d(Gabidulin,)j(A.)d(Da)n(vydo)o(v)-6 b(,)24 b(and)g(L.)e(T)-7 b(ombak.)33 b(Linear)24 b(codes)g(with)g(co)o (v)o(ering)h(radius)f(2)f(and)h(other)489 2624 y(ne)n(w)f(co)o(v)o (ering)i(codes.)34 b Fq(IEEE)22 b(T)-5 b(r)o(ans.)23 b(Inform.)h(Theory)p FK(,)g(37\(1\):219\226224,)k(1991.)p 0.0236 0.0894 0.6179 TeXcolorrgb 3151 2625 a SDict begin H.S end 3151 2625 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(72)p 0.0236 0.0894 0.6179 TeXcolorrgb 3241 2562 a SDict begin H.R end 3241 2562 a 3241 2624 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.72) cvn H.B /ANN pdfmark end 3241 2624 a Black Black 75 2808 a SDict begin H.S end 75 2808 a FK([GS85])342 2808 y SDict begin 13.6 H.A end 342 2808 a 342 2808 a SDict begin [ /View [/XYZ H.V] /Dest (cite.GS85) cvn H.B /DEST pdfmark end 342 2808 a Black 147 w FK(R.)23 b(Graham)h(and)h(N.)e(Sloane.)37 b(On)23 b(the)i(co)o(v)o(ering)h (radius)g(of)e(codes.)37 b Fq(IEEE)23 b(T)-5 b(r)o(ans.)24 b(Inform.)h(Theory)p FK(,)489 2921 y(31\(1\):385\226401,)j(1985.)p 0.0236 0.0894 0.6179 TeXcolorrgb 1312 2921 a SDict begin H.S end 1312 2921 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(111)p 0.0236 0.0894 0.6179 TeXcolorrgb 1447 2859 a SDict begin H.R end 1447 2859 a 1447 2921 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.111) cvn H.B /ANN pdfmark end 1447 2921 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1494 2922 a SDict begin H.S end 1494 2922 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(135)p 0.0236 0.0894 0.6179 TeXcolorrgb 1629 2859 a SDict begin H.R end 1629 2859 a 1629 2921 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.135) cvn H.B /ANN pdfmark end 1629 2921 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1676 2922 a SDict begin H.S end 1676 2922 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(136)p 0.0236 0.0894 0.6179 TeXcolorrgb 1811 2859 a SDict begin H.R end 1811 2859 a 1811 2921 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.136) cvn H.B /ANN pdfmark end 1811 2921 a Black Black 75 3105 a SDict begin H.S end 75 3105 a FK([Han99])376 3105 y SDict begin 13.6 H.A end 376 3105 a 376 3105 a SDict begin [ /View [/XYZ H.V] /Dest (cite.Han99) cvn H.B /DEST pdfmark end 376 3105 a Black 113 w FK(J.)22 b(P)-10 b(.)22 b(Hansen.)33 b(T)-7 b(oric)23 b(surf)o(aces)i(and)e(error)n (-correcting)28 b(codes.)34 b Fq(Coding)24 b(theory)-5 b(,)24 b(crypto)o(gr)o(aphy)-5 b(,)27 b(and)489 3218 y(r)m(elated)e(ar)m(eas)f(\(ed.,)g(Bac)o(hmann)g(et)f(al\))h(Spring)o (er)n(-V)-10 b(erla)o(g)p FK(,)27 b(1999.)p 0.0236 0.0894 0.6179 TeXcolorrgb 2659 3219 a SDict begin H.S end 2659 3219 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(84)p 0.0236 0.0894 0.6179 TeXcolorrgb 2749 3156 a SDict begin H.R end 2749 3156 a 2749 3218 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.84) cvn H.B /ANN pdfmark end 2749 3218 a Black Black 75 3402 a SDict begin H.S end 75 3402 a FK([Hel72])356 3402 y SDict begin 13.6 H.A end 356 3402 a 356 3402 a SDict begin [ /View [/XYZ H.V] /Dest (cite.He72) cvn H.B /DEST pdfmark end 356 3402 a Black 133 w FK(Hermann)g(J.)g(Helgert.)45 b(Sri)n(v)n(asta)n(v)n(a)28 b(codes.)46 b Fq(IEEE)25 b(T)-5 b(r)o(ans.)27 b(Inform.)g(Theory)p FK(,)i(18:292\226297,)i (March)489 3515 y(1972.)p 0.0236 0.0894 0.6179 TeXcolorrgb 726 3516 a SDict begin H.S end 726 3516 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(68)p 0.0236 0.0894 0.6179 TeXcolorrgb 816 3453 a SDict begin H.R end 816 3453 a 816 3515 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.68) cvn H.B /ANN pdfmark end 816 3515 a Black Black 75 3698 a SDict begin H.S end 75 3698 a FK([HP03])342 3698 y SDict begin 13.6 H.A end 342 3698 a 342 3698 a SDict begin [ /View [/XYZ H.V] /Dest (cite.HP03) cvn H.B /DEST pdfmark end 342 3698 a Black 147 w FK(W)-8 b(.)25 b(C.)h(Huf)n(fman)h(and)g(V)-12 b(.)26 b(Pless.)44 b Fq(Fundamentals)29 b(of)e(err)l(or)n(-corr)m (ecting)k(codes)p FK(.)46 b(Cambridge)28 b(Uni)n(v)-6 b(.)489 3811 y(Press,)23 b(2003.)p 0.0236 0.0894 0.6179 TeXcolorrgb 964 3811 a SDict begin H.S end 964 3811 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(11)p 0.0236 0.0894 0.6179 TeXcolorrgb 1054 3749 a SDict begin H.R end 1054 3749 a 1054 3811 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.11) cvn H.B /ANN pdfmark end 1054 3811 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1100 3812 a SDict begin H.S end 1100 3812 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(33)p 0.0236 0.0894 0.6179 TeXcolorrgb 1190 3749 a SDict begin H.R end 1190 3749 a 1190 3811 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.33) cvn H.B /ANN pdfmark end 1190 3811 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1236 3812 a SDict begin H.S end 1236 3812 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(51)p 0.0236 0.0894 0.6179 TeXcolorrgb 1326 3749 a SDict begin H.R end 1326 3749 a 1326 3811 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.51) cvn H.B /ANN pdfmark end 1326 3811 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1373 3812 a SDict begin H.S end 1373 3812 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(52)p 0.0236 0.0894 0.6179 TeXcolorrgb 1463 3749 a SDict begin H.R end 1463 3749 a 1463 3811 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.52) cvn H.B /ANN pdfmark end 1463 3811 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1509 3812 a SDict begin H.S end 1509 3812 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(58)p 0.0236 0.0894 0.6179 TeXcolorrgb 1599 3749 a SDict begin H.R end 1599 3749 a 1599 3811 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.58) cvn H.B /ANN pdfmark end 1599 3811 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1645 3812 a SDict begin H.S end 1645 3812 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(66)p 0.0236 0.0894 0.6179 TeXcolorrgb 1735 3749 a SDict begin H.R end 1735 3749 a 1735 3811 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.66) cvn H.B /ANN pdfmark end 1735 3811 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1782 3812 a SDict begin H.S end 1782 3812 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(67)p 0.0236 0.0894 0.6179 TeXcolorrgb 1872 3749 a SDict begin H.R end 1872 3749 a 1872 3811 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.67) cvn H.B /ANN pdfmark end 1872 3811 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1918 3812 a SDict begin H.S end 1918 3812 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(127)p 0.0236 0.0894 0.6179 TeXcolorrgb 2053 3749 a SDict begin H.R end 2053 3749 a 2053 3811 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.127) cvn H.B /ANN pdfmark end 2053 3811 a Black Black 75 3995 a SDict begin H.S end 75 3995 a FK([JH04])326 3995 y SDict begin 13.6 H.A end 326 3995 a 326 3995 a SDict begin [ /View [/XYZ H.V] /Dest (cite.JH04) cvn H.B /DEST pdfmark end 326 3995 a Black 163 w FK(J.)k(Justesen)k(and)d(T)-7 b(.)27 b(Hoholdt.)49 b Fq(A)26 b(cour)o(se)k(in)e(err)l(or)n(-corr)m(ecting)33 b(codes)p FK(.)49 b(European)29 b(Mathematical)489 4108 y(Society)-6 b(,)24 b(2004.)p 0.0236 0.0894 0.6179 TeXcolorrgb 1039 4109 a SDict begin H.S end 1039 4109 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(52)p 0.0236 0.0894 0.6179 TeXcolorrgb 1129 4046 a SDict begin H.R end 1129 4046 a 1129 4108 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.52) cvn H.B /ANN pdfmark end 1129 4108 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1175 4109 a SDict begin H.S end 1175 4109 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(54)p 0.0236 0.0894 0.6179 TeXcolorrgb 1265 4046 a SDict begin H.R end 1265 4046 a 1265 4108 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.54) cvn H.B /ANN pdfmark end 1265 4108 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1311 4109 a SDict begin H.S end 1311 4109 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(55)p 0.0236 0.0894 0.6179 TeXcolorrgb 1401 4046 a SDict begin H.R end 1401 4046 a 1401 4108 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.55) cvn H.B /ANN pdfmark end 1401 4108 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1448 4109 a SDict begin H.S end 1448 4109 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(83)p 0.0236 0.0894 0.6179 TeXcolorrgb 1538 4046 a SDict begin H.R end 1538 4046 a 1538 4108 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.83) cvn H.B /ANN pdfmark end 1538 4108 a Black Black 75 4292 a SDict begin H.S end 75 4292 a FK([Jo)o(y04])349 4292 y SDict begin 13.6 H.A end 349 4292 a 349 4292 a SDict begin [ /View [/XYZ H.V] /Dest (cite.Jo04) cvn H.B /DEST pdfmark end 349 4292 a Black 140 w FK(D.)d(Jo)o(yner)-5 b(.)32 b(T)-7 b(oric)23 b(codes)g(o)o(v)o(er)g(\002nite)f(\002elds.)31 b Fq(Applicable)25 b(Alg)o(ebr)o(a)e(in)f(Engineering)o(,)j(Communica-) 489 4405 y(tion)f(and)g(Computing)p FK(,)h(15:63\22679,)h(2004.)p 0.0236 0.0894 0.6179 TeXcolorrgb 1888 4406 a SDict begin H.S end 1888 4406 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(84)p 0.0236 0.0894 0.6179 TeXcolorrgb 1978 4343 a SDict begin H.R end 1978 4343 a 1978 4405 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.84) cvn H.B /ANN pdfmark end 1978 4405 a Black Black 75 4589 a SDict begin H.S end 75 4589 a FK([Leo82])366 4589 y SDict begin 13.6 H.A end 366 4589 a 366 4589 a SDict begin [ /View [/XYZ H.V] /Dest (cite.Leon82) cvn H.B /DEST pdfmark end 366 4589 a Black 123 w FK(Jef)n(fre)o(y)e (S.)e(Leon.)32 b(Computing)25 b(automorphism)g(groups)g(of)e(error)n (-correcting)28 b(codes.)34 b Fq(IEEE)21 b(T)-5 b(r)o(ans.)489 4702 y(Inform.)24 b(Theory)p FK(,)g(28:496\226511,)j(May)c(1982.)p 0.0236 0.0894 0.6179 TeXcolorrgb 1991 4703 a SDict begin H.S end 1991 4703 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(37)p 0.0236 0.0894 0.6179 TeXcolorrgb 2081 4640 a SDict begin H.R end 2081 4640 a 2081 4702 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.37) cvn H.B /ANN pdfmark end 2081 4702 a Black Black 75 4886 a SDict begin H.S end 75 4886 a FK([Leo88])366 4886 y SDict begin 13.6 H.A end 366 4886 a 366 4886 a SDict begin [ /View [/XYZ H.V] /Dest (cite.Leon88) cvn H.B /DEST pdfmark end 366 4886 a Black 123 w FK(Jef)n(fre)o(y)g (S.)e(Leon.)30 b(A)21 b(probabilistic)k(algorithm)f(for)e(computing)j (minimum)c(weights)j(of)e(lar)n(ge)h(error)n(-)489 4999 y(correcting)j(codes.)35 b Fq(IEEE)21 b(T)-5 b(r)o(ans.)24 b(Inform.)g(Theory)p FK(,)g(34:1354\2261359,)j(September)e(1988.)p 0.0236 0.0894 0.6179 TeXcolorrgb 3429 5000 a SDict begin H.S end 3429 5000 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(45)p 0.0236 0.0894 0.6179 TeXcolorrgb 3519 4937 a SDict begin H.R end 3519 4937 a 3519 4999 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.45) cvn H.B /ANN pdfmark end 3519 4999 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3565 5000 a SDict begin H.S end 3565 5000 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(46)p 0.0236 0.0894 0.6179 TeXcolorrgb 3655 4937 a SDict begin H.R end 3655 4937 a 3655 4999 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.46) cvn H.B /ANN pdfmark end 3655 4999 a Black Black 75 5183 a SDict begin H.S end 75 5183 a FK([Leo91])366 5183 y SDict begin 13.6 H.A end 366 5183 a 366 5183 a SDict begin [ /View [/XYZ H.V] /Dest (cite.Leon91) cvn H.B /DEST pdfmark end 366 5183 a Black 123 w FK(Jef)n(fre)o(y)34 b(S.)d(Leon.)62 b(Permutation)34 b(group)g(algorithms)h(based)f(on)e(partitions,)38 b(I:)32 b(theory)i(and)f(algo-)489 5296 y(rithms.)h Fq(J)n(.)22 b(Symbolic)j(Comput.)p FK(,)e(12:533\226583,)k(1991.)p 0.0236 0.0894 0.6179 TeXcolorrgb 2290 5296 a SDict begin H.S end 2290 5296 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(11)p 0.0236 0.0894 0.6179 TeXcolorrgb 2380 5234 a SDict begin H.R end 2380 5234 a 2380 5296 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.11) cvn H.B /ANN pdfmark end 2380 5296 a Black Black 75 5479 a SDict begin H.S end 75 5479 a FK([MS83])357 5479 y SDict begin 13.6 H.A end 357 5479 a 357 5479 a SDict begin [ /View [/XYZ H.V] /Dest (cite.MS83) cvn H.B /DEST pdfmark end 357 5479 a Black 132 w FK(F)-7 b(.)21 b(J.)g(MacW)l(illiams)j(and)f(N.)e(J.)h(A.)f(Sloane.)32 b Fq(The)22 b(theory)i(of)e(err)l(or)n(-corr)m(ecting)27 b(codes)p FK(.)33 b(Amsterdam:)489 5592 y(North-Holland,)26 b(1983.)p 0.0236 0.0894 0.6179 TeXcolorrgb 1307 5592 a SDict begin H.S end 1307 5592 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(11)p 0.0236 0.0894 0.6179 TeXcolorrgb 1397 5530 a SDict begin H.R end 1397 5530 a 1397 5592 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.11) cvn H.B /ANN pdfmark end 1397 5592 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1443 5593 a SDict begin H.S end 1443 5593 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(67)p 0.0236 0.0894 0.6179 TeXcolorrgb 1533 5530 a SDict begin H.R end 1533 5530 a 1533 5592 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.67) cvn H.B /ANN pdfmark end 1533 5592 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1580 5593 a SDict begin H.S end 1580 5593 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(73)p 0.0236 0.0894 0.6179 TeXcolorrgb 1670 5530 a SDict begin H.R end 1670 5530 a 1670 5592 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.73) cvn H.B /ANN pdfmark end 1670 5592 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1716 5593 a SDict begin H.S end 1716 5593 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(83)p 0.0236 0.0894 0.6179 TeXcolorrgb 1806 5530 a SDict begin H.R end 1806 5530 a 1806 5592 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.83) cvn H.B /ANN pdfmark end 1806 5592 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1852 5593 a SDict begin H.S end 1852 5593 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(138)p 0.0236 0.0894 0.6179 TeXcolorrgb 1987 5530 a SDict begin H.R end 1987 5530 a 1987 5592 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.138) cvn H.B /ANN pdfmark end 1987 5592 a Black Black 1844 5841 a FK(147)p Black eop end end %%Page: 148 148 TeXDict begin HPSdict begin 148 147 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.148) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(148)p Black Black 75 399 a SDict begin H.S end 75 399 a FK([Sti93])326 399 y SDict begin 13.6 H.A end 326 399 a 326 399 a SDict begin [ /View [/XYZ H.V] /Dest (cite.St93) cvn H.B /DEST pdfmark end 326 399 a Black 163 w FK(H.)22 b(Stichtenoth.)36 b Fq(Alg)o(ebr)o(aic)25 b(function)g(\002elds)g(and)f (codes)p FK(.)35 b(Springer)n(-V)-10 b(erlag,)26 b(1993.)p 0.0236 0.0894 0.6179 TeXcolorrgb 3267 401 a SDict begin H.S end 3267 401 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(97)p 0.0236 0.0894 0.6179 TeXcolorrgb 3357 337 a SDict begin H.R end 3357 337 a 3357 399 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.97) cvn H.B /ANN pdfmark end 3357 399 a Black Black 75 586 a SDict begin H.S end 75 586 a FK([vzGG03])442 586 y SDict begin 13.6 H.A end 442 586 a 442 586 a SDict begin [ /View [/XYZ H.V] /Dest (cite.GG03) cvn H.B /DEST pdfmark end 442 586 a Black 47 w FK(J.)31 b(v)n(on)i(zur)f (Gathen)h(and)f(J.)f(Gerhard.)61 b Fq(Modern)33 b(computer)h(alg)o(ebr) o(a)p FK(.)62 b(Cambridge)33 b(Uni)n(v)-6 b(.)31 b(Press,)489 699 y(2003.)p 0.0236 0.0894 0.6179 TeXcolorrgb 726 700 a SDict begin H.S end 726 700 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(146)p 0.0236 0.0894 0.6179 TeXcolorrgb 861 637 a SDict begin H.R end 861 637 a 861 699 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.146) cvn H.B /ANN pdfmark end 861 699 a Black Black Black eop end end %%Page: 149 149 TeXDict begin HPSdict begin 149 148 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.149) cvn H.B /DEST pdfmark end 75 100 a Black Black Black 761 x FA(Index)p Black 75 1288 a Fq(A)p Fo(\()p Fq(n)p Fp(;)10 b Fq(d)5 b Fo(\))p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 377 1289 a SDict begin H.S end 377 1289 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(117)p 0.0236 0.0894 0.6179 TeXcolorrgb 512 1226 a SDict begin H.R end 512 1226 a 512 1288 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.117) cvn H.B /ANN pdfmark end 512 1288 a Black 75 1400 a Fq(GF)i Fo(\()g Fq(p)p Fo(\))p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 372 1401 a SDict begin H.S end 372 1401 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(16)p 0.0236 0.0894 0.6179 TeXcolorrgb 462 1338 a SDict begin H.R end 462 1338 a 462 1400 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.16) cvn H.B /ANN pdfmark end 462 1400 a Black 75 1513 a Fq(GF)g Fo(\()p Fq(q)p Fo(\))p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 365 1514 a SDict begin H.S end 365 1514 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(16)p 0.0236 0.0894 0.6179 TeXcolorrgb 455 1451 a SDict begin H.R end 455 1451 a 455 1513 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.16) cvn H.B /ANN pdfmark end 455 1513 a Black 73 1626 a Fq(t)f Fo(\()p Fq(n)p Fp(;)k Fq(k)r Fo(\))p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 343 1627 a SDict begin H.S end 343 1627 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(48)p 0.0236 0.0894 0.6179 TeXcolorrgb 433 1564 a SDict begin H.R end 433 1564 a 433 1626 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.48) cvn H.B /ANN pdfmark end 433 1626 a Black 75 1739 a Ft(*)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 167 1740 a SDict begin H.S end 167 1740 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(30)p 0.0236 0.0894 0.6179 TeXcolorrgb 257 1677 a SDict begin H.R end 257 1677 a 257 1739 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.30) cvn H.B /ANN pdfmark end 257 1739 a Black 75 1852 a Ft(+)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 167 1852 a SDict begin H.S end 167 1852 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(22)p 0.0236 0.0894 0.6179 TeXcolorrgb 257 1790 a SDict begin H.R end 257 1790 a 257 1852 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.22) cvn H.B /ANN pdfmark end 257 1852 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 303 1853 a SDict begin H.S end 303 1853 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(30)p 0.0236 0.0894 0.6179 TeXcolorrgb 393 1790 a SDict begin H.R end 393 1790 a 393 1852 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.30) cvn H.B /ANN pdfmark end 393 1852 a Black 75 1965 a Ft(-)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 167 1965 a SDict begin H.S end 167 1965 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(22)p 0.0236 0.0894 0.6179 TeXcolorrgb 257 1903 a SDict begin H.R end 257 1903 a 257 1965 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.22) cvn H.B /ANN pdfmark end 257 1965 a Black 75 2078 a Ft(=)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 167 2078 a SDict begin H.S end 167 2078 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(21)p 0.0236 0.0894 0.6179 TeXcolorrgb 257 2016 a SDict begin H.R end 257 2016 a 257 2078 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.21) cvn H.B /ANN pdfmark end 257 2078 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 303 2080 a SDict begin H.S end 303 2080 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(29)p 0.0236 0.0894 0.6179 TeXcolorrgb 393 2016 a SDict begin H.R end 393 2016 a 393 2078 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.29) cvn H.B /ANN pdfmark end 393 2078 a Black 75 2191 a Fp(<)22 b(>)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 285 2191 a SDict begin H.S end 285 2191 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(21)p 0.0236 0.0894 0.6179 TeXcolorrgb 375 2129 a SDict begin H.R end 375 2129 a 375 2191 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.21) cvn H.B /ANN pdfmark end 375 2191 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 421 2193 a SDict begin H.S end 421 2193 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(29)p 0.0236 0.0894 0.6179 TeXcolorrgb 511 2129 a SDict begin H.R end 511 2129 a 511 2191 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.29) cvn H.B /ANN pdfmark end 511 2191 a Black 75 2387 a FK(acceptable)k(coordinate,)p 0.0236 0.0894 0.6179 TeXcolorrgb 911 2388 a SDict begin H.S end 911 2388 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(135)p 0.0236 0.0894 0.6179 TeXcolorrgb 1046 2325 a SDict begin H.R end 1046 2325 a 1046 2387 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.135) cvn H.B /ANN pdfmark end 1046 2387 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1092 2388 a SDict begin H.S end 1092 2388 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(136)p 0.0236 0.0894 0.6179 TeXcolorrgb 1227 2325 a SDict begin H.R end 1227 2325 a 1227 2387 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.136) cvn H.B /ANN pdfmark end 1227 2387 a Black 75 2500 a Ft(AClosestVectorComb)q(..M)q(atF)q(FEV)q(ec)q(FFE)q(Coo)q(rds)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 407 2613 a SDict begin H.S end 407 2613 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(14)p 0.0236 0.0894 0.6179 TeXcolorrgb 497 2551 a SDict begin H.R end 497 2551 a 497 2613 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.14) cvn H.B /ANN pdfmark end 497 2613 a Black 75 2725 a Ft(AClosestVectorComb)q(ina)q(tio)q(nsM)q(at)q(FFE)q (Vec)q(FFE)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 407 2839 a SDict begin H.S end 407 2839 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(13)p 0.0236 0.0894 0.6179 TeXcolorrgb 497 2776 a SDict begin H.R end 497 2776 a 497 2838 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.13) cvn H.B /ANN pdfmark end 497 2838 a Black 75 2951 a Ft (ActionMoebiusTrans)q(for)q(mat)q(ion)q(On)q(Div)q(iso)q(rP1)407 3064 y FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 453 3066 a SDict begin H.S end 453 3066 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(93)p 0.0236 0.0894 0.6179 TeXcolorrgb 543 3002 a SDict begin H.R end 543 3002 a 543 3064 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.93) cvn H.B /ANN pdfmark end 543 3064 a Black 75 3177 a Ft(ActionMoebiusTrans)q(for)q (mat)q(ion)q(On)q(Fun)q(cti)q(on)53 b FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 407 3292 a SDict begin H.S end 407 3292 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(93)p 0.0236 0.0894 0.6179 TeXcolorrgb 497 3228 a SDict begin H.R end 497 3228 a 497 3290 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.93) cvn H.B /ANN pdfmark end 497 3290 a Black 75 3403 a Ft(AddedElementsCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 909 3404 a SDict begin H.S end 909 3404 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(103)p 0.0236 0.0894 0.6179 TeXcolorrgb 1044 3341 a SDict begin H.R end 1044 3341 a 1044 3403 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.103) cvn H.B /ANN pdfmark end 1044 3403 a Black 75 3516 a FK(af)n(\002ne)23 b(code,)p 0.0236 0.0894 0.6179 TeXcolorrgb 520 3517 a SDict begin H.S end 520 3517 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(35)p 0.0236 0.0894 0.6179 TeXcolorrgb 610 3454 a SDict begin H.R end 610 3454 a 610 3516 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.35) cvn H.B /ANN pdfmark end 610 3516 a Black 75 3629 a Ft(AffineCurve)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 630 3630 a SDict begin H.S end 630 3630 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(84)p 0.0236 0.0894 0.6179 TeXcolorrgb 720 3567 a SDict begin H.R end 720 3567 a 720 3629 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.84) cvn H.B /ANN pdfmark end 720 3629 a Black 75 3742 a Ft (AffinePointsOnCurv)q(e)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1001 3743 a SDict begin H.S end 1001 3743 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(85)p 0.0236 0.0894 0.6179 TeXcolorrgb 1091 3680 a SDict begin H.R end 1091 3680 a 1091 3742 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.85) cvn H.B /ANN pdfmark end 1091 3742 a Black 75 3855 a Ft(AlternantCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 723 3856 a SDict begin H.S end 723 3856 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(66)p 0.0236 0.0894 0.6179 TeXcolorrgb 813 3793 a SDict begin H.R end 813 3793 a 813 3855 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.66) cvn H.B /ANN pdfmark end 813 3855 a Black 75 3967 a Ft(AmalgamatedDirectS)q(umC)q(ode)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1233 3967 a SDict begin H.S end 1233 3967 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(112)p 0.0236 0.0894 0.6179 TeXcolorrgb 1368 3905 a SDict begin H.R end 1368 3905 a 1368 3967 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.112) cvn H.B /ANN pdfmark end 1368 3967 a Black 75 4080 a Ft(AreMOLS)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 445 4081 a SDict begin H.S end 445 4081 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(134)p 0.0236 0.0894 0.6179 TeXcolorrgb 580 4018 a SDict begin H.R end 580 4018 a 580 4080 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.134) cvn H.B /ANN pdfmark end 580 4080 a Black 75 4193 a Ft(AsSSortedList)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 723 4195 a SDict begin H.S end 723 4195 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(39)p 0.0236 0.0894 0.6179 TeXcolorrgb 813 4131 a SDict begin H.R end 813 4131 a 813 4193 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.39) cvn H.B /ANN pdfmark end 813 4193 a Black 75 4306 a Ft(AugmentedCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 723 4307 a SDict begin H.S end 723 4307 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(102)p 0.0236 0.0894 0.6179 TeXcolorrgb 858 4244 a SDict begin H.R end 858 4244 a 858 4306 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.102) cvn H.B /ANN pdfmark end 858 4306 a Black 75 4419 a Ft(AutomorphismGroup)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 909 4420 a SDict begin H.S end 909 4420 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(36)p 0.0236 0.0894 0.6179 TeXcolorrgb 999 4357 a SDict begin H.R end 999 4357 a 999 4419 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.36) cvn H.B /ANN pdfmark end 999 4419 a Black 75 4615 a Ft(BCHCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 445 4616 a SDict begin H.S end 445 4616 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(77)p 0.0236 0.0894 0.6179 TeXcolorrgb 535 4554 a SDict begin H.R end 535 4554 a 535 4615 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.77) cvn H.B /ANN pdfmark end 535 4615 a Black 75 4728 a Ft(BestKnownLinearCod)q(e)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1001 4729 a SDict begin H.S end 1001 4729 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(70)p 0.0236 0.0894 0.6179 TeXcolorrgb 1091 4666 a SDict begin H.R end 1091 4666 a 1091 4728 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.70) cvn H.B /ANN pdfmark end 1091 4728 a Black 75 4841 a Ft(BinaryGolayCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 816 4842 a SDict begin H.S end 816 4842 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(73)p 0.0236 0.0894 0.6179 TeXcolorrgb 906 4779 a SDict begin H.R end 906 4779 a 906 4841 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.73) cvn H.B /ANN pdfmark end 906 4841 a Black 75 4954 a Ft(BitFlipDecoder)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 770 4955 a SDict begin H.S end 770 4955 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(54)p 0.0236 0.0894 0.6179 TeXcolorrgb 860 4892 a SDict begin H.R end 860 4892 a 860 4954 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.54) cvn H.B /ANN pdfmark end 860 4954 a Black 75 5067 a Ft(BlockwiseDirectSum)q(Cod)q (e)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1140 5067 a SDict begin H.S end 1140 5067 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(112)p 0.0236 0.0894 0.6179 TeXcolorrgb 1275 5005 a SDict begin H.R end 1275 5005 a 1275 5067 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.112) cvn H.B /ANN pdfmark end 1275 5067 a Black 75 5180 a FK(Bose)h(distance,)p 0.0236 0.0894 0.6179 TeXcolorrgb 623 5181 a SDict begin H.S end 623 5181 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(77)p 0.0236 0.0894 0.6179 TeXcolorrgb 713 5119 a SDict begin H.R end 713 5119 a 713 5180 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.77) cvn H.B /ANN pdfmark end 713 5180 a Black 75 5292 a FK(bound,)h(Gilbert-V)-10 b(arshamo)o(v)26 b(lo)n(wer)l(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1312 5293 a SDict begin H.S end 1312 5293 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(118)p 0.0236 0.0894 0.6179 TeXcolorrgb 1447 5230 a SDict begin H.R end 1447 5230 a 1447 5292 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.118) cvn H.B /ANN pdfmark end 1447 5292 a Black 75 5405 a FK(bound,)f(sphere)g(packing)g(lo)n(wer)l(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1165 5406 a SDict begin H.S end 1165 5406 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(118)p 0.0236 0.0894 0.6179 TeXcolorrgb 1300 5343 a SDict begin H.R end 1300 5343 a 1300 5405 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.118) cvn H.B /ANN pdfmark end 1300 5405 a Black 75 5518 a FK(bounds,)g(Elias,)p 0.0236 0.0894 0.6179 TeXcolorrgb 610 5519 a SDict begin H.S end 610 5519 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(116)p 0.0236 0.0894 0.6179 TeXcolorrgb 745 5456 a SDict begin H.R end 745 5456 a 745 5518 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.116) cvn H.B /ANN pdfmark end 745 5518 a Black Black Black 1954 1288 a FK(bounds,)g(Griesmer)l(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2642 1289 a SDict begin H.S end 2642 1289 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(116)p 0.0236 0.0894 0.6179 TeXcolorrgb 2777 1226 a SDict begin H.R end 2777 1226 a 2777 1288 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.116) cvn H.B /ANN pdfmark end 2777 1288 a Black 1954 1400 a FK(bounds,)g(Hamming,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2671 1401 a SDict begin H.S end 2671 1401 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(115)p 0.0236 0.0894 0.6179 TeXcolorrgb 2806 1338 a SDict begin H.R end 2806 1338 a 2806 1400 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.115) cvn H.B /ANN pdfmark end 2806 1400 a Black 1954 1513 a FK(bounds,)g(Johnson,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2606 1514 a SDict begin H.S end 2606 1514 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(115)p 0.0236 0.0894 0.6179 TeXcolorrgb 2741 1451 a SDict begin H.R end 2741 1451 a 2741 1513 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.115) cvn H.B /ANN pdfmark end 2741 1513 a Black 1954 1626 a FK(bounds,)g(Plotkin,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2570 1627 a SDict begin H.S end 2570 1627 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(116)p 0.0236 0.0894 0.6179 TeXcolorrgb 2705 1564 a SDict begin H.R end 2705 1564 a 2705 1626 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.116) cvn H.B /ANN pdfmark end 2705 1626 a Black 1954 1739 a FK(bounds,)g(Singleton,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2656 1739 a SDict begin H.S end 2656 1739 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(114)p 0.0236 0.0894 0.6179 TeXcolorrgb 2791 1677 a SDict begin H.R end 2791 1677 a 2791 1739 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.114) cvn H.B /ANN pdfmark end 2791 1739 a Black 1954 1852 a FK(bounds,)g(sphere)g(packing)h(bound,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3105 1853 a SDict begin H.S end 3105 1853 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(115)p 0.0236 0.0894 0.6179 TeXcolorrgb 3240 1790 a SDict begin H.R end 3240 1790 a 3240 1852 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.115) cvn H.B /ANN pdfmark end 3240 1852 a Black 1954 1965 a Ft(BoundsCoveringRadi)q(us)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2927 1966 a SDict begin H.S end 2927 1966 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(120)p 0.0236 0.0894 0.6179 TeXcolorrgb 3062 1903 a SDict begin H.R end 3062 1903 a 3062 1965 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.120) cvn H.B /ANN pdfmark end 3062 1965 a Black 1954 2078 a Ft(BoundsMinimumDista)q (nce)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2973 2080 a SDict begin H.S end 2973 2080 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(119)p 0.0236 0.0894 0.6179 TeXcolorrgb 3108 2016 a SDict begin H.R end 3108 2016 a 3108 2078 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.119) cvn H.B /ANN pdfmark end 3108 2078 a Black 1954 2274 a FK(check)f(polynomial,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2648 2275 a SDict begin H.S end 2648 2275 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(28)p 0.0236 0.0894 0.6179 TeXcolorrgb 2738 2212 a SDict begin H.R end 2738 2212 a 2738 2274 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.28) cvn H.B /ANN pdfmark end 2738 2274 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2785 2275 a SDict begin H.S end 2785 2275 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(75)p 0.0236 0.0894 0.6179 TeXcolorrgb 2875 2212 a SDict begin H.R end 2875 2212 a 2875 2274 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.75) cvn H.B /ANN pdfmark end 2875 2274 a Black 1954 2387 a Ft(CheckMat)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2370 2387 a SDict begin H.S end 2370 2387 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(42)p 0.0236 0.0894 0.6179 TeXcolorrgb 2460 2325 a SDict begin H.R end 2460 2325 a 2460 2387 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.42) cvn H.B /ANN pdfmark end 2460 2387 a Black 1954 2500 a Ft(CheckMatCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2556 2501 a SDict begin H.S end 2556 2501 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(65)p 0.0236 0.0894 0.6179 TeXcolorrgb 2646 2438 a SDict begin H.R end 2646 2438 a 2646 2500 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.65) cvn H.B /ANN pdfmark end 2646 2500 a Black 1954 2613 a Ft(CheckMatCodeMutabl)q(e)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2880 2614 a SDict begin H.S end 2880 2614 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(65)p 0.0236 0.0894 0.6179 TeXcolorrgb 2970 2551 a SDict begin H.R end 2970 2551 a 2970 2613 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.65) cvn H.B /ANN pdfmark end 2970 2613 a Black 1954 2725 a Ft(CheckPol)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2370 2726 a SDict begin H.S end 2370 2726 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(43)p 0.0236 0.0894 0.6179 TeXcolorrgb 2460 2663 a SDict begin H.R end 2460 2663 a 2460 2725 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.43) cvn H.B /ANN pdfmark end 2460 2725 a Black 1954 2838 a Ft(CheckPolCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2556 2839 a SDict begin H.S end 2556 2839 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(76)p 0.0236 0.0894 0.6179 TeXcolorrgb 2646 2776 a SDict begin H.R end 2646 2776 a 2646 2838 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.76) cvn H.B /ANN pdfmark end 2646 2838 a Black 1954 2951 a Ft(CirculantMatrix)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2695 2951 a SDict begin H.S end 2695 2951 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(142)p 0.0236 0.0894 0.6179 TeXcolorrgb 2830 2889 a SDict begin H.R end 2830 2889 a 2830 2951 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.142) cvn H.B /ANN pdfmark end 2830 2951 a Black 1954 3064 a FK(code,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2171 3065 a SDict begin H.S end 2171 3065 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(27)p 0.0236 0.0894 0.6179 TeXcolorrgb 2261 3002 a SDict begin H.R end 2261 3002 a 2261 3064 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.27) cvn H.B /ANN pdfmark end 2261 3064 a Black 1954 3177 a FK(code,)f Fo(\()p Fq(n)p Fp(;)10 b Fq(M)t Fp(;)g Fq(d)5 b Fo(\))p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2533 3178 a SDict begin H.S end 2533 3178 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(27)p 0.0236 0.0894 0.6179 TeXcolorrgb 2623 3115 a SDict begin H.R end 2623 3115 a 2623 3177 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.27) cvn H.B /ANN pdfmark end 2623 3177 a Black 1954 3290 a FK(code,)24 b Fo([)p Fq(n)p Fp(;)10 b Fq(k)r Fp(;)g Fq(d)5 b Fo(])p Fq(r)r FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2512 3291 a SDict begin H.S end 2512 3291 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(28)p 0.0236 0.0894 0.6179 TeXcolorrgb 2602 3228 a SDict begin H.R end 2602 3228 a 2602 3290 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.28) cvn H.B /ANN pdfmark end 2602 3290 a Black 1954 3403 a FK(code,)24 b(A)l(G,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2344 3404 a SDict begin H.S end 2344 3404 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(84)p 0.0236 0.0894 0.6179 TeXcolorrgb 2434 3341 a SDict begin H.R end 2434 3341 a 2434 3403 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.84) cvn H.B /ANN pdfmark end 2434 3403 a Black 1954 3516 a FK(code,)g(alternant,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2535 3517 a SDict begin H.S end 2535 3517 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(66)p 0.0236 0.0894 0.6179 TeXcolorrgb 2625 3454 a SDict begin H.R end 2625 3454 a 2625 3516 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.66) cvn H.B /ANN pdfmark end 2625 3516 a Black 1954 3629 a FK(code,)g(Bose-Chaudhuri-Hock)o(eng)q(hem,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3327 3630 a SDict begin H.S end 3327 3630 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(77)p 0.0236 0.0894 0.6179 TeXcolorrgb 3417 3568 a SDict begin H.R end 3417 3568 a 3417 3629 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.77) cvn H.B /ANN pdfmark end 3417 3629 a Black 1954 3742 a FK(code,)g(conference,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2615 3743 a SDict begin H.S end 2615 3743 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(61)p 0.0236 0.0894 0.6179 TeXcolorrgb 2705 3680 a SDict begin H.R end 2705 3680 a 2705 3742 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.61) cvn H.B /ANN pdfmark end 2705 3742 a Black 1954 3855 a FK(code,)g(Cordaro-W)-7 b(agner)l(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2822 3856 a SDict begin H.S end 2822 3856 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(68)p 0.0236 0.0894 0.6179 TeXcolorrgb 2912 3793 a SDict begin H.R end 2912 3793 a 2912 3855 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.68) cvn H.B /ANN pdfmark end 2912 3855 a Black 1954 3967 a FK(code,)24 b(c)o(yclic,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2432 3968 a SDict begin H.S end 2432 3968 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(28)p 0.0236 0.0894 0.6179 TeXcolorrgb 2522 3905 a SDict begin H.R end 2522 3905 a 2522 3967 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.28) cvn H.B /ANN pdfmark end 2522 3967 a Black 1954 4080 a FK(code,)g(Da)n(vydo)o(v)-6 b(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2541 4081 a SDict begin H.S end 2541 4081 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(72)p 0.0236 0.0894 0.6179 TeXcolorrgb 2631 4018 a SDict begin H.R end 2631 4018 a 2631 4080 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.72) cvn H.B /ANN pdfmark end 2631 4080 a Black 1954 4193 a FK(code,)24 b(element)h(test,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2653 4194 a SDict begin H.S end 2653 4194 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(31)p 0.0236 0.0894 0.6179 TeXcolorrgb 2743 4131 a SDict begin H.R end 2743 4131 a 2743 4193 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.31) cvn H.B /ANN pdfmark end 2743 4193 a Black 1954 4306 a FK(code,)f(elements)h(of,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2638 4307 a SDict begin H.S end 2638 4307 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(27)p 0.0236 0.0894 0.6179 TeXcolorrgb 2728 4244 a SDict begin H.R end 2728 4244 a 2728 4306 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.27) cvn H.B /ANN pdfmark end 2728 4306 a Black 1954 4419 a FK(code,)f(e)n(v)n(aluation,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2591 4420 a SDict begin H.S end 2591 4420 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(82)p 0.0236 0.0894 0.6179 TeXcolorrgb 2681 4357 a SDict begin H.R end 2681 4357 a 2681 4419 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.82) cvn H.B /ANN pdfmark end 2681 4419 a Black 1954 4532 a FK(code,)g(Fire,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2363 4534 a SDict begin H.S end 2363 4534 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(79)p 0.0236 0.0894 0.6179 TeXcolorrgb 2453 4470 a SDict begin H.R end 2453 4470 a 2453 4532 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.79) cvn H.B /ANN pdfmark end 2453 4532 a Black 1954 4645 a FK(code,)g(Gabidulin,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2580 4646 a SDict begin H.S end 2580 4646 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(72)p 0.0236 0.0894 0.6179 TeXcolorrgb 2670 4583 a SDict begin H.R end 2670 4583 a 2670 4645 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.72) cvn H.B /ANN pdfmark end 2670 4645 a Black 1954 4758 a FK(code,)g(Golay)g(\(binary\),)p 0.0236 0.0894 0.6179 TeXcolorrgb 2754 4759 a SDict begin H.S end 2754 4759 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(73)p 0.0236 0.0894 0.6179 TeXcolorrgb 2844 4696 a SDict begin H.R end 2844 4696 a 2844 4758 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.73) cvn H.B /ANN pdfmark end 2844 4758 a Black 1954 4871 a FK(code,)g(Golay)g(\(ternary\),)p 0.0236 0.0894 0.6179 TeXcolorrgb 2779 4872 a SDict begin H.S end 2779 4872 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(74)p 0.0236 0.0894 0.6179 TeXcolorrgb 2869 4809 a SDict begin H.R end 2869 4809 a 2869 4871 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.74) cvn H.B /ANN pdfmark end 2869 4871 a Black 1954 4984 a FK(code,)g(Goppa)g(\(classical\),)p 0.0236 0.0894 0.6179 TeXcolorrgb 2850 4985 a SDict begin H.S end 2850 4985 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(66)p 0.0236 0.0894 0.6179 TeXcolorrgb 2940 4922 a SDict begin H.R end 2940 4922 a 2940 4984 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.66) cvn H.B /ANN pdfmark end 2940 4984 a Black 1954 5097 a FK(code,)g(greedy)-6 b(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2458 5098 a SDict begin H.S end 2458 5098 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(63)p 0.0236 0.0894 0.6179 TeXcolorrgb 2548 5035 a SDict begin H.R end 2548 5035 a 2548 5097 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.63) cvn H.B /ANN pdfmark end 2548 5097 a Black 1954 5209 a FK(code,)24 b(Hadamard,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2595 5210 a SDict begin H.S end 2595 5210 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(61)p 0.0236 0.0894 0.6179 TeXcolorrgb 2685 5147 a SDict begin H.R end 2685 5147 a 2685 5209 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.61) cvn H.B /ANN pdfmark end 2685 5209 a Black 1954 5322 a FK(code,)g(Hamming,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2580 5323 a SDict begin H.S end 2580 5323 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(65)p 0.0236 0.0894 0.6179 TeXcolorrgb 2670 5260 a SDict begin H.R end 2670 5260 a 2670 5322 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.65) cvn H.B /ANN pdfmark end 2670 5322 a Black 1954 5435 a FK(code,)g(linear)l(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2420 5436 a SDict begin H.S end 2420 5436 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(27)p 0.0236 0.0894 0.6179 TeXcolorrgb 2510 5373 a SDict begin H.R end 2510 5373 a 2510 5435 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.27) cvn H.B /ANN pdfmark end 2510 5435 a Black 1954 5548 a FK(code,)g(maximum)g(distance)h(separable,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3272 5549 a SDict begin H.S end 3272 5549 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(34)p 0.0236 0.0894 0.6179 TeXcolorrgb 3362 5486 a SDict begin H.R end 3362 5486 a 3362 5548 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.34) cvn H.B /ANN pdfmark end 3362 5548 a Black Black 1844 5841 a FK(149)p Black eop end end %%Page: 150 150 TeXDict begin HPSdict begin 150 149 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.150) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(150)p Black 75 399 a(code,)24 b(Nordstrom-Robinson,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1110 400 a SDict begin H.S end 1110 400 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(63)p 0.0236 0.0894 0.6179 TeXcolorrgb 1200 337 a SDict begin H.R end 1200 337 a 1200 399 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.63) cvn H.B /ANN pdfmark end 1200 399 a Black 75 511 a FK(code,)g(perfect,)p 0.0236 0.0894 0.6179 TeXcolorrgb 590 512 a SDict begin H.S end 590 512 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(33)p 0.0236 0.0894 0.6179 TeXcolorrgb 680 449 a SDict begin H.R end 680 449 a 680 511 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.33) cvn H.B /ANN pdfmark end 680 511 a Black 75 624 a FK(code,)g(Reed-Muller)l(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 798 625 a SDict begin H.S end 798 625 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(66)p 0.0236 0.0894 0.6179 TeXcolorrgb 888 562 a SDict begin H.R end 888 562 a 888 624 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.66) cvn H.B /ANN pdfmark end 888 624 a Black 75 737 a FK(code,)g (Reed-Solomon,)p 0.0236 0.0894 0.6179 TeXcolorrgb 883 738 a SDict begin H.S end 883 738 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(77)p 0.0236 0.0894 0.6179 TeXcolorrgb 973 677 a SDict begin H.R end 973 677 a 973 737 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.77) cvn H.B /ANN pdfmark end 973 737 a Black 75 850 a FK(code,)g(self-dual,)p 0.0236 0.0894 0.6179 TeXcolorrgb 656 851 a SDict begin H.S end 656 851 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(34)p 0.0236 0.0894 0.6179 TeXcolorrgb 746 788 a SDict begin H.R end 746 788 a 746 850 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.34) cvn H.B /ANN pdfmark end 746 850 a Black 75 963 a FK(code,)g(self-orthogonal,)p 0.0236 0.0894 0.6179 TeXcolorrgb 893 964 a SDict begin H.S end 893 964 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(34)p 0.0236 0.0894 0.6179 TeXcolorrgb 983 901 a SDict begin H.R end 983 901 a 983 963 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.34) cvn H.B /ANN pdfmark end 983 963 a Black 75 1076 a FK(code,)g(Sri)n(v)n(asta)n(v)n(a,)p 0.0236 0.0894 0.6179 TeXcolorrgb 708 1077 a SDict begin H.S end 708 1077 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(67)p 0.0236 0.0894 0.6179 TeXcolorrgb 798 1014 a SDict begin H.R end 798 1014 a 798 1076 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.67) cvn H.B /ANN pdfmark end 798 1076 a Black 75 1189 a FK(code,)g(subcode,)p 0.0236 0.0894 0.6179 TeXcolorrgb 635 1190 a SDict begin H.S end 635 1190 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(32)p 0.0236 0.0894 0.6179 TeXcolorrgb 725 1127 a SDict begin H.R end 725 1127 a 725 1189 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.32) cvn H.B /ANN pdfmark end 725 1189 a Black 75 1302 a FK(code,)g(T)-7 b(ombak,)p 0.0236 0.0894 0.6179 TeXcolorrgb 633 1303 a SDict begin H.S end 633 1303 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(72)p 0.0236 0.0894 0.6179 TeXcolorrgb 723 1240 a SDict begin H.R end 723 1240 a 723 1302 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.72) cvn H.B /ANN pdfmark end 723 1302 a Black 75 1415 a FK(code,)24 b(toric,)p 0.0236 0.0894 0.6179 TeXcolorrgb 504 1416 a SDict begin H.S end 504 1416 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(84)p 0.0236 0.0894 0.6179 TeXcolorrgb 594 1353 a SDict begin H.R end 594 1353 a 594 1415 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.84) cvn H.B /ANN pdfmark end 594 1415 a Black 75 1528 a FK(code,)g(unrestricted,)p 0.0236 0.0894 0.6179 TeXcolorrgb 767 1529 a SDict begin H.S end 767 1529 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(27)p 0.0236 0.0894 0.6179 TeXcolorrgb 857 1466 a SDict begin H.R end 857 1466 a 857 1528 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.27) cvn H.B /ANN pdfmark end 857 1528 a Black 75 1641 a Ft(CodeDensity)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 630 1642 a SDict begin H.S end 630 1642 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(137)p 0.0236 0.0894 0.6179 TeXcolorrgb 765 1579 a SDict begin H.R end 765 1579 a 765 1641 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.137) cvn H.B /ANN pdfmark end 765 1641 a Black 75 1753 a Ft (CodeDistanceEnumer)q(ato)q(r)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1140 1754 a SDict begin H.S end 1140 1754 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(137)p 0.0236 0.0894 0.6179 TeXcolorrgb 1275 1691 a SDict begin H.R end 1275 1691 a 1275 1753 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.137) cvn H.B /ANN pdfmark end 1275 1753 a Black 75 1866 a Ft(CodeIsomorphism)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 816 1867 a SDict begin H.S end 816 1867 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(36)p 0.0236 0.0894 0.6179 TeXcolorrgb 906 1804 a SDict begin H.R end 906 1804 a 906 1866 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.36) cvn H.B /ANN pdfmark end 906 1866 a Black 75 1979 a Ft(CodeMacWilliamsTra)q(nsf)q(orm)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1233 1980 a SDict begin H.S end 1233 1980 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(137)p 0.0236 0.0894 0.6179 TeXcolorrgb 1368 1917 a SDict begin H.R end 1368 1917 a 1368 1979 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.137) cvn H.B /ANN pdfmark end 1368 1979 a Black 75 2092 a Ft(CodeNorm)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 491 2093 a SDict begin H.S end 491 2093 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(135)p 0.0236 0.0894 0.6179 TeXcolorrgb 626 2030 a SDict begin H.R end 626 2030 a 626 2092 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.135) cvn H.B /ANN pdfmark end 626 2092 a Black 75 2205 a FK(codes,)g (addition,)p 0.0236 0.0894 0.6179 TeXcolorrgb 671 2206 a SDict begin H.S end 671 2206 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(30)p 0.0236 0.0894 0.6179 TeXcolorrgb 761 2143 a SDict begin H.R end 761 2143 a 761 2205 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.30) cvn H.B /ANN pdfmark end 761 2205 a Black 75 2318 a FK(codes,)g(decoding,)p 0.0236 0.0894 0.6179 TeXcolorrgb 706 2319 a SDict begin H.S end 706 2319 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(31)p 0.0236 0.0894 0.6179 TeXcolorrgb 796 2256 a SDict begin H.R end 796 2256 a 796 2318 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.31) cvn H.B /ANN pdfmark end 796 2318 a Black 75 2431 a FK(codes,)g(direct)h(sum,)p 0.0236 0.0894 0.6179 TeXcolorrgb 754 2432 a SDict begin H.S end 754 2432 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(30)p 0.0236 0.0894 0.6179 TeXcolorrgb 844 2369 a SDict begin H.R end 844 2369 a 844 2431 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.30) cvn H.B /ANN pdfmark end 844 2431 a Black 75 2544 a FK(codes,)f(encoding,)p 0.0236 0.0894 0.6179 TeXcolorrgb 706 2545 a SDict begin H.S end 706 2545 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(30)p 0.0236 0.0894 0.6179 TeXcolorrgb 796 2482 a SDict begin H.R end 796 2482 a 796 2544 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.30) cvn H.B /ANN pdfmark end 796 2544 a Black 75 2657 a FK(codes,)g (product,)p 0.0236 0.0894 0.6179 TeXcolorrgb 651 2658 a SDict begin H.S end 651 2658 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(30)p 0.0236 0.0894 0.6179 TeXcolorrgb 741 2595 a SDict begin H.R end 741 2595 a 741 2657 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.30) cvn H.B /ANN pdfmark end 741 2657 a Black 75 2770 a Ft(CodeWeightEnumerat)q(or)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1048 2771 a SDict begin H.S end 1048 2771 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(136)p 0.0236 0.0894 0.6179 TeXcolorrgb 1183 2708 a SDict begin H.R end 1183 2708 a 1183 2770 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.136) cvn H.B /ANN pdfmark end 1183 2770 a Black 75 2883 a Ft(Codeword)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 491 2885 a SDict begin H.S end 491 2885 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(19)p 0.0236 0.0894 0.6179 TeXcolorrgb 581 2821 a SDict begin H.R end 581 2821 a 581 2883 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.19) cvn H.B /ANN pdfmark end 581 2883 a Black 75 2995 a Ft(CodewordNr)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 584 2996 a SDict begin H.S end 584 2996 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(20)p 0.0236 0.0894 0.6179 TeXcolorrgb 674 2933 a SDict begin H.R end 674 2933 a 674 2995 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.20) cvn H.B /ANN pdfmark end 674 2995 a Black 75 3108 a FK(code)n(w)o(ords,)h (addition,)p 0.0236 0.0894 0.6179 TeXcolorrgb 855 3108 a SDict begin H.S end 855 3108 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(22)p 0.0236 0.0894 0.6179 TeXcolorrgb 945 3046 a SDict begin H.R end 945 3046 a 945 3108 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.22) cvn H.B /ANN pdfmark end 945 3108 a Black 75 3221 a FK(code)n(w)o(ords,)g(cosets,)p 0.0236 0.0894 0.6179 TeXcolorrgb 779 3221 a SDict begin H.S end 779 3221 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(22)p 0.0236 0.0894 0.6179 TeXcolorrgb 869 3159 a SDict begin H.R end 869 3159 a 869 3221 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.22) cvn H.B /ANN pdfmark end 869 3221 a Black 75 3334 a FK(code)n(w)o(ords,)g(subtraction,)p 0.0236 0.0894 0.6179 TeXcolorrgb 961 3334 a SDict begin H.S end 961 3334 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(22)p 0.0236 0.0894 0.6179 TeXcolorrgb 1051 3272 a SDict begin H.R end 1051 3272 a 1051 3334 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.22) cvn H.B /ANN pdfmark end 1051 3334 a Black 75 3447 a Ft(CoefficientMultiva)q(ria)q(teP)q(oly)q(no)q (mia)q(l)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1650 3448 a SDict begin H.S end 1650 3448 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(143)p 0.0236 0.0894 0.6179 TeXcolorrgb 1785 3385 a SDict begin H.R end 1785 3385 a 1785 3447 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.143) cvn H.B /ANN pdfmark end 1785 3447 a Black 75 3560 a Ft(CoefficientToPolyn)q(omi)q(al)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1187 3560 a SDict begin H.S end 1187 3560 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(144)p 0.0236 0.0894 0.6179 TeXcolorrgb 1322 3498 a SDict begin H.R end 1322 3498 a 1322 3560 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.144) cvn H.B /ANN pdfmark end 1322 3560 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1369 3561 a SDict begin H.S end 1369 3561 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(145)p 0.0236 0.0894 0.6179 TeXcolorrgb 1504 3498 a SDict begin H.R end 1504 3498 a 1504 3560 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.145) cvn H.B /ANN pdfmark end 1504 3560 a Black 75 3673 a FK(conference)h(matrix,)p 0.0236 0.0894 0.6179 TeXcolorrgb 779 3674 a SDict begin H.S end 779 3674 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(62)p 0.0236 0.0894 0.6179 TeXcolorrgb 869 3611 a SDict begin H.R end 869 3611 a 869 3673 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.62) cvn H.B /ANN pdfmark end 869 3673 a Black 75 3786 a Ft(ConferenceCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 770 3787 a SDict begin H.S end 770 3787 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(61)p 0.0236 0.0894 0.6179 TeXcolorrgb 860 3724 a SDict begin H.R end 860 3724 a 860 3786 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.61) cvn H.B /ANN pdfmark end 860 3786 a Black 75 3899 a Ft(ConstantWeightSubc)q(ode)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1094 3900 a SDict begin H.S end 1094 3900 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(107)p 0.0236 0.0894 0.6179 TeXcolorrgb 1229 3837 a SDict begin H.R end 1229 3837 a 1229 3899 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.107) cvn H.B /ANN pdfmark end 1229 3899 a Black 75 4012 a Ft(ConstructionBCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 909 4013 a SDict begin H.S end 909 4013 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(105)p 0.0236 0.0894 0.6179 TeXcolorrgb 1044 3950 a SDict begin H.R end 1044 3950 a 1044 4012 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.105) cvn H.B /ANN pdfmark end 1044 4012 a Black 75 4125 a Ft(ConversionFieldCod)q(e)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1001 4126 a SDict begin H.S end 1001 4126 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(106)p 0.0236 0.0894 0.6179 TeXcolorrgb 1136 4063 a SDict begin H.R end 1136 4063 a 1136 4125 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.106) cvn H.B /ANN pdfmark end 1136 4125 a Black 75 4237 a Ft(ConwayPolynomial)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 862 4238 a SDict begin H.S end 862 4238 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(16)p 0.0236 0.0894 0.6179 TeXcolorrgb 952 4175 a SDict begin H.R end 952 4175 a 952 4237 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.16) cvn H.B /ANN pdfmark end 952 4237 a Black 75 4350 a Ft(CoordinateNorm)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 770 4351 a SDict begin H.S end 770 4351 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(135)p 0.0236 0.0894 0.6179 TeXcolorrgb 905 4288 a SDict begin H.R end 905 4288 a 905 4350 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.135) cvn H.B /ANN pdfmark end 905 4350 a Black 75 4463 a Ft(CordaroWagnerCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 909 4464 a SDict begin H.S end 909 4464 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(68)p 0.0236 0.0894 0.6179 TeXcolorrgb 999 4401 a SDict begin H.R end 999 4401 a 999 4463 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.68) cvn H.B /ANN pdfmark end 999 4463 a Black 75 4576 a FK(coset,)p 0.0236 0.0894 0.6179 TeXcolorrgb 307 4576 a SDict begin H.S end 307 4576 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(22)p 0.0236 0.0894 0.6179 TeXcolorrgb 397 4514 a SDict begin H.R end 397 4514 a 397 4576 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.22) cvn H.B /ANN pdfmark end 397 4576 a Black 75 4689 a Ft(CosetCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 538 4690 a SDict begin H.S end 538 4690 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(107)p 0.0236 0.0894 0.6179 TeXcolorrgb 673 4627 a SDict begin H.R end 673 4627 a 673 4689 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.107) cvn H.B /ANN pdfmark end 673 4689 a Black 75 4802 a FK(co)o(v)o(ering)f(code,)p 0.0236 0.0894 0.6179 TeXcolorrgb 630 4803 a SDict begin H.S end 630 4803 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(48)p 0.0236 0.0894 0.6179 TeXcolorrgb 720 4740 a SDict begin H.R end 720 4740 a 720 4802 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.48) cvn H.B /ANN pdfmark end 720 4802 a Black 75 4915 a Ft(CoveringRadius)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 770 4916 a SDict begin H.S end 770 4916 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(48)p 0.0236 0.0894 0.6179 TeXcolorrgb 860 4853 a SDict begin H.R end 860 4853 a 860 4915 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.48) cvn H.B /ANN pdfmark end 860 4915 a Black 75 5028 a Ft(CyclicCodes)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 630 5029 a SDict begin H.S end 630 5029 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(81)p 0.0236 0.0894 0.6179 TeXcolorrgb 720 4966 a SDict begin H.R end 720 4966 a 720 5028 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.81) cvn H.B /ANN pdfmark end 720 5028 a Black 75 5141 a Ft(CyclotomicCosets) p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 862 5142 a SDict begin H.S end 862 5142 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(140)p 0.0236 0.0894 0.6179 TeXcolorrgb 997 5079 a SDict begin H.R end 997 5079 a 997 5141 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.140) cvn H.B /ANN pdfmark end 997 5141 a Black 75 5337 a Ft(DavydovCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 630 5338 a SDict begin H.S end 630 5338 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(72)p 0.0236 0.0894 0.6179 TeXcolorrgb 720 5275 a SDict begin H.R end 720 5275 a 720 5337 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.72) cvn H.B /ANN pdfmark end 720 5337 a Black 75 5450 a Ft(Decode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 399 5451 a SDict begin H.S end 399 5451 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(51)p 0.0236 0.0894 0.6179 TeXcolorrgb 489 5388 a SDict begin H.R end 489 5388 a 489 5450 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.51) cvn H.B /ANN pdfmark end 489 5450 a Black 75 5562 a Ft(Decodeword)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 584 5563 a SDict begin H.S end 584 5563 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(52)p 0.0236 0.0894 0.6179 TeXcolorrgb 674 5500 a SDict begin H.R end 674 5500 a 674 5562 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.52) cvn H.B /ANN pdfmark end 674 5562 a Black Black Black 1954 399 a Ft(DecreaseMinimumDis)q(tan)q(ceU)q(ppe)q(rB)q(oun)q (d)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3529 400 a SDict begin H.S end 3529 400 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(46)p 0.0236 0.0894 0.6179 TeXcolorrgb 3619 337 a SDict begin H.R end 3619 337 a 3619 399 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.46) cvn H.B /ANN pdfmark end 3619 399 a Black 1954 511 a FK(de\002ning)g(polynomial,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2734 512 a SDict begin H.S end 2734 512 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(16)p 0.0236 0.0894 0.6179 TeXcolorrgb 2824 449 a SDict begin H.R end 2824 449 a 2824 511 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.16) cvn H.B /ANN pdfmark end 2824 511 a Black 1954 624 a FK(de)o(gree,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2240 625 a SDict begin H.S end 2240 625 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(88)p 0.0236 0.0894 0.6179 TeXcolorrgb 2330 562 a SDict begin H.R end 2330 562 a 2330 624 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.88) cvn H.B /ANN pdfmark end 2330 624 a Black 1954 737 a Ft(DegreeMultivariate)q(Pol)q(yno)q(mia)q(l)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3298 737 a SDict begin H.S end 3298 737 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(142)p 0.0236 0.0894 0.6179 TeXcolorrgb 3433 675 a SDict begin H.R end 3433 675 a 3433 737 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.142) cvn H.B /ANN pdfmark end 3433 737 a Black 1954 850 a Ft(DegreesMonomialTer)q(m)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2880 851 a SDict begin H.S end 2880 851 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(145)p 0.0236 0.0894 0.6179 TeXcolorrgb 3015 788 a SDict begin H.R end 3015 788 a 3015 850 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.145) cvn H.B /ANN pdfmark end 3015 850 a Black 1954 963 a Ft(DegreesMultivariat)q(ePo)q(lyn)q(omi)q(al)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3344 964 a SDict begin H.S end 3344 964 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(143)p 0.0236 0.0894 0.6179 TeXcolorrgb 3479 901 a SDict begin H.R end 3479 901 a 3479 963 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.143) cvn H.B /ANN pdfmark end 3479 963 a Black 1954 1076 a FK(density)g(of)f(a)f(code,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2618 1077 a SDict begin H.S end 2618 1077 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(137)p 0.0236 0.0894 0.6179 TeXcolorrgb 2753 1014 a SDict begin H.R end 2753 1014 a 2753 1076 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.137) cvn H.B /ANN pdfmark end 2753 1076 a Black 1954 1189 a Ft(Dimension)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2417 1190 a SDict begin H.S end 2417 1190 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(38)p 0.0236 0.0894 0.6179 TeXcolorrgb 2507 1127 a SDict begin H.R end 2507 1127 a 2507 1189 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.38) cvn H.B /ANN pdfmark end 2507 1189 a Black 1954 1302 a Ft(DirectProductCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2788 1303 a SDict begin H.S end 2788 1303 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(110)p 0.0236 0.0894 0.6179 TeXcolorrgb 2923 1240 a SDict begin H.R end 2923 1240 a 2923 1302 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.110) cvn H.B /ANN pdfmark end 2923 1302 a Black 1954 1415 a Ft(DirectSumCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2602 1417 a SDict begin H.S end 2602 1417 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(109)p 0.0236 0.0894 0.6179 TeXcolorrgb 2737 1353 a SDict begin H.R end 2737 1353 a 2737 1415 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.109) cvn H.B /ANN pdfmark end 2737 1415 a Black 1954 1528 a Ft(Display)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2324 1529 a SDict begin H.S end 2324 1529 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(40)p 0.0236 0.0894 0.6179 TeXcolorrgb 2414 1466 a SDict begin H.R end 2414 1466 a 2414 1528 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.40) cvn H.B /ANN pdfmark end 2414 1528 a Black 1954 1641 a Ft(DisplayBoundsInfo)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2788 1641 a SDict begin H.S end 2788 1641 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(41)p 0.0236 0.0894 0.6179 TeXcolorrgb 2878 1579 a SDict begin H.R end 2878 1579 a 2878 1641 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.41) cvn H.B /ANN pdfmark end 2878 1641 a Black 1954 1753 a FK(distance,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2297 1754 a SDict begin H.S end 2297 1754 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(50)p 0.0236 0.0894 0.6179 TeXcolorrgb 2387 1691 a SDict begin H.R end 2387 1691 a 2387 1753 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.50) cvn H.B /ANN pdfmark end 2387 1753 a Black 1954 1866 a Ft(DistanceCodeword)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2741 1867 a SDict begin H.S end 2741 1867 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(25)p 0.0236 0.0894 0.6179 TeXcolorrgb 2831 1804 a SDict begin H.R end 2831 1804 a 2831 1866 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.25) cvn H.B /ANN pdfmark end 2831 1866 a Black 1954 1979 a Ft(DistancesDistribut)q(ion)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2973 1980 a SDict begin H.S end 2973 1980 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(50)p 0.0236 0.0894 0.6179 TeXcolorrgb 3063 1917 a SDict begin H.R end 3063 1917 a 3063 1979 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.50) cvn H.B /ANN pdfmark end 3063 1979 a Black 1954 2092 a Ft(DistancesDistribut)q(ion)q(Mat)q(FFE)q(Ve)q(cFF)q(E)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3529 2092 a SDict begin H.S end 3529 2092 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(14)p 0.0236 0.0894 0.6179 TeXcolorrgb 3619 2030 a SDict begin H.R end 3619 2030 a 3619 2092 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.14) cvn H.B /ANN pdfmark end 3619 2092 a Black 1954 2205 a Ft(DistancesDistribut)q(ion)q(Vec)q(FFE)q(sV)q (ecF)q(FE)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3576 2206 a SDict begin H.S end 3576 2206 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(15)p 0.0236 0.0894 0.6179 TeXcolorrgb 3666 2143 a SDict begin H.R end 3666 2143 a 3666 2205 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.15) cvn H.B /ANN pdfmark end 3666 2205 a Black 1954 2318 a Ft(DistanceVecFFE)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2649 2319 a SDict begin H.S end 2649 2319 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(15)p 0.0236 0.0894 0.6179 TeXcolorrgb 2739 2256 a SDict begin H.R end 2739 2256 a 2739 2318 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.15) cvn H.B /ANN pdfmark end 2739 2318 a Black 1954 2431 a FK(di)n(visor)l(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2246 2432 a SDict begin H.S end 2246 2432 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(87)p 0.0236 0.0894 0.6179 TeXcolorrgb 2336 2369 a SDict begin H.R end 2336 2369 a 2336 2431 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.87) cvn H.B /ANN pdfmark end 2336 2431 a Black 1954 2544 a Ft(DivisorAddition)52 b FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2741 2545 a SDict begin H.S end 2741 2545 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(88)p 0.0236 0.0894 0.6179 TeXcolorrgb 2831 2482 a SDict begin H.R end 2831 2482 a 2831 2544 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.88) cvn H.B /ANN pdfmark end 2831 2544 a Black 1954 2657 a Ft(DivisorAutomorphis)q(mGr)q(oup)q(P1)h FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3251 2659 a SDict begin H.S end 3251 2659 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(94)p 0.0236 0.0894 0.6179 TeXcolorrgb 3341 2595 a SDict begin H.R end 3341 2595 a 3341 2657 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.94) cvn H.B /ANN pdfmark end 3341 2657 a Black 1954 2770 a Ft(DivisorDegree)e FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2649 2771 a SDict begin H.S end 2649 2771 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(88)p 0.0236 0.0894 0.6179 TeXcolorrgb 2739 2708 a SDict begin H.R end 2739 2708 a 2739 2770 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.88) cvn H.B /ANN pdfmark end 2739 2770 a Black 1954 2883 a Ft(DivisorGCD)f FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2509 2885 a SDict begin H.S end 2509 2885 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(89)p 0.0236 0.0894 0.6179 TeXcolorrgb 2599 2821 a SDict begin H.R end 2599 2821 a 2599 2883 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.89) cvn H.B /ANN pdfmark end 2599 2883 a Black 1954 2995 a Ft(DivisorIsZero)h FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2649 2996 a SDict begin H.S end 2649 2996 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(88)p 0.0236 0.0894 0.6179 TeXcolorrgb 2739 2933 a SDict begin H.R end 2739 2933 a 2739 2995 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.88) cvn H.B /ANN pdfmark end 2739 2995 a Black 1954 3108 a Ft(DivisorLCM)f FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2509 3110 a SDict begin H.S end 2509 3110 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(89)p 0.0236 0.0894 0.6179 TeXcolorrgb 2599 3046 a SDict begin H.R end 2599 3046 a 2599 3108 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.89) cvn H.B /ANN pdfmark end 2599 3108 a Black 1954 3221 a Ft(DivisorNegate)h FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2649 3222 a SDict begin H.S end 2649 3222 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(88)p 0.0236 0.0894 0.6179 TeXcolorrgb 2739 3159 a SDict begin H.R end 2739 3159 a 2739 3221 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.88) cvn H.B /ANN pdfmark end 2739 3221 a Black 1954 3334 a Ft(DivisorOfRationalF)q (unc)q(tio)q(nP1)i FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3298 3336 a SDict begin H.S end 3298 3336 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(91)p 0.0236 0.0894 0.6179 TeXcolorrgb 3388 3272 a SDict begin H.R end 3388 3272 a 3388 3334 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.91) cvn H.B /ANN pdfmark end 3388 3334 a Black 1954 3447 a Ft(DivisorOnAffineCur)q(ve)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2927 3448 a SDict begin H.S end 2927 3448 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(87)p 0.0236 0.0894 0.6179 TeXcolorrgb 3017 3385 a SDict begin H.R end 3017 3385 a 3017 3447 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.87) cvn H.B /ANN pdfmark end 3017 3447 a Black 1954 3560 a Ft(DivisorsEqual)e FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2649 3562 a SDict begin H.S end 2649 3562 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(89)p 0.0236 0.0894 0.6179 TeXcolorrgb 2739 3498 a SDict begin H.R end 2739 3498 a 2739 3560 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.89) cvn H.B /ANN pdfmark end 2739 3560 a Black 1954 3673 a Ft(DivisorsMultivaria)q(teP)q(oly)q(nom)q(ia)q(l)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3390 3674 a SDict begin H.S end 3390 3674 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(146)p 0.0236 0.0894 0.6179 TeXcolorrgb 3525 3611 a SDict begin H.R end 3525 3611 a 3525 3673 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.146) cvn H.B /ANN pdfmark end 3525 3673 a Black 1954 3786 a Ft(DualCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2370 3787 a SDict begin H.S end 2370 3787 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(105)p 0.0236 0.0894 0.6179 TeXcolorrgb 2505 3724 a SDict begin H.R end 2505 3724 a 2505 3786 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.105) cvn H.B /ANN pdfmark end 2505 3786 a Black 1954 3982 a Ft(ElementsCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2556 3983 a SDict begin H.S end 2556 3983 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(60)p 0.0236 0.0894 0.6179 TeXcolorrgb 2646 3920 a SDict begin H.R end 2646 3920 a 2646 3982 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.60) cvn H.B /ANN pdfmark end 2646 3982 a Black 1954 4095 a FK(encoder)25 b(map,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2466 4096 a SDict begin H.S end 2466 4096 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(30)p 0.0236 0.0894 0.6179 TeXcolorrgb 2556 4033 a SDict begin H.R end 2556 4033 a 2556 4095 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.30) cvn H.B /ANN pdfmark end 2556 4095 a Black 1954 4208 a Ft(EnlargedGabidulinC)q (ode)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2973 4209 a SDict begin H.S end 2973 4209 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(72)p 0.0236 0.0894 0.6179 TeXcolorrgb 3063 4146 a SDict begin H.R end 3063 4146 a 3063 4208 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.72) cvn H.B /ANN pdfmark end 3063 4208 a Black 1954 4320 a Ft(EnlargedTombakCode)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2834 4321 a SDict begin H.S end 2834 4321 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(72)p 0.0236 0.0894 0.6179 TeXcolorrgb 2924 4258 a SDict begin H.R end 2924 4258 a 2924 4320 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.72) cvn H.B /ANN pdfmark end 2924 4320 a Black 1954 4433 a FK(equi)n(v)n(alent)h (codes,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2603 4434 a SDict begin H.S end 2603 4434 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(36)p 0.0236 0.0894 0.6179 TeXcolorrgb 2693 4371 a SDict begin H.R end 2693 4371 a 2693 4433 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.36) cvn H.B /ANN pdfmark end 2693 4433 a Black 1954 4546 a Ft(EvaluationBivariat)q (eCo)q(de)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3066 4548 a SDict begin H.S end 3066 4548 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(96)p 0.0236 0.0894 0.6179 TeXcolorrgb 3156 4484 a SDict begin H.R end 3156 4484 a 3156 4546 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.96) cvn H.B /ANN pdfmark end 3156 4546 a Black 1954 4659 a Ft(EvaluationBivariat)q(eCo)q(deN)q(C)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3159 4661 a SDict begin H.S end 3159 4661 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(96)p 0.0236 0.0894 0.6179 TeXcolorrgb 3249 4597 a SDict begin H.R end 3249 4597 a 3249 4659 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.96) cvn H.B /ANN pdfmark end 3249 4659 a Black 1954 4772 a Ft(EvaluationCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2649 4773 a SDict begin H.S end 2649 4773 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(82)p 0.0236 0.0894 0.6179 TeXcolorrgb 2739 4710 a SDict begin H.R end 2739 4710 a 2739 4772 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.82) cvn H.B /ANN pdfmark end 2739 4772 a Black 1954 4885 a Ft(EvenWeightSubcode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2788 4886 a SDict begin H.S end 2788 4886 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(100)p 0.0236 0.0894 0.6179 TeXcolorrgb 2923 4823 a SDict begin H.R end 2923 4823 a 2923 4885 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.100) cvn H.B /ANN pdfmark end 2923 4885 a Black 1954 4998 a Ft(ExhaustiveSearchCo)q(ver)q(ing)q(Rad)q(iu)q(s)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3390 4998 a SDict begin H.S end 3390 4998 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(121)p 0.0236 0.0894 0.6179 TeXcolorrgb 3525 4936 a SDict begin H.R end 3525 4936 a 3525 4998 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.121) cvn H.B /ANN pdfmark end 3525 4998 a Black 1954 5111 a Ft(ExpurgatedCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2649 5112 a SDict begin H.S end 2649 5112 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(101)p 0.0236 0.0894 0.6179 TeXcolorrgb 2784 5049 a SDict begin H.R end 2784 5049 a 2784 5111 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.101) cvn H.B /ANN pdfmark end 2784 5111 a Black 1954 5224 a Ft(ExtendedBinaryGola)q(yCo)q(de)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3066 5225 a SDict begin H.S end 3066 5225 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(73)p 0.0236 0.0894 0.6179 TeXcolorrgb 3156 5162 a SDict begin H.R end 3156 5162 a 3156 5224 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.73) cvn H.B /ANN pdfmark end 3156 5224 a Black 1954 5337 a Ft(ExtendedCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2556 5339 a SDict begin H.S end 2556 5339 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(99)p 0.0236 0.0894 0.6179 TeXcolorrgb 2646 5275 a SDict begin H.R end 2646 5275 a 2646 5337 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.99) cvn H.B /ANN pdfmark end 2646 5337 a Black 1954 5450 a Ft(ExtendedDirectSumC)q(ode)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2973 5450 a SDict begin H.S end 2973 5450 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(111)p 0.0236 0.0894 0.6179 TeXcolorrgb 3108 5388 a SDict begin H.R end 3108 5388 a 3108 5450 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.111) cvn H.B /ANN pdfmark end 3108 5450 a Black 1954 5562 a Ft(ExtendedTernaryGol)q(ayC)q(ode)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3112 5563 a SDict begin H.S end 3112 5563 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(74)p 0.0236 0.0894 0.6179 TeXcolorrgb 3202 5500 a SDict begin H.R end 3202 5500 a 3202 5562 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.74) cvn H.B /ANN pdfmark end 3202 5562 a Black Black Black eop end end %%Page: 151 151 TeXDict begin HPSdict begin 151 150 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.151) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(151)p Black 75 399 a(e)o(xternal)25 b(distance,)p 0.0236 0.0894 0.6179 TeXcolorrgb 733 400 a SDict begin H.S end 733 400 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(127)p 0.0236 0.0894 0.6179 TeXcolorrgb 868 337 a SDict begin H.R end 868 337 a 868 399 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.127) cvn H.B /ANN pdfmark end 868 399 a Black 75 594 a Ft(FerreroDesignCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 909 595 a SDict begin H.S end 909 595 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(68)p 0.0236 0.0894 0.6179 TeXcolorrgb 999 532 a SDict begin H.R end 999 532 a 999 594 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.68) cvn H.B /ANN pdfmark end 999 594 a Black 75 707 a Ft(FireCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 491 709 a SDict begin H.S end 491 709 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(79)p 0.0236 0.0894 0.6179 TeXcolorrgb 581 645 a SDict begin H.R end 581 645 a 581 707 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.79) cvn H.B /ANN pdfmark end 581 707 a Black 75 903 a Ft(GabidulinCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 723 904 a SDict begin H.S end 723 904 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(72)p 0.0236 0.0894 0.6179 TeXcolorrgb 813 841 a SDict begin H.R end 813 841 a 813 903 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.72) cvn H.B /ANN pdfmark end 813 903 a Black 75 1016 a FK(Gary)e(code,)p 0.0236 0.0894 0.6179 TeXcolorrgb 497 1018 a SDict begin H.S end 497 1018 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(129)p 0.0236 0.0894 0.6179 TeXcolorrgb 632 954 a SDict begin H.R end 632 954 a 632 1016 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.129) cvn H.B /ANN pdfmark end 632 1016 a Black 75 1129 a Ft (GeneralizedCodeNor)q(m)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1001 1130 a SDict begin H.S end 1001 1130 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(136)p 0.0236 0.0894 0.6179 TeXcolorrgb 1136 1067 a SDict begin H.R end 1136 1067 a 1136 1129 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.136) cvn H.B /ANN pdfmark end 1136 1129 a Black 75 1242 a Ft(GeneralizedReedMul)q(ler)q(Cod)q(e)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1280 1243 a SDict begin H.S end 1280 1243 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(83)p 0.0236 0.0894 0.6179 TeXcolorrgb 1370 1180 a SDict begin H.R end 1370 1180 a 1370 1242 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.83) cvn H.B /ANN pdfmark end 1370 1242 a Black 75 1355 a Ft(GeneralizedReedSol)q(omo)q(nCo)q(de)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1326 1356 a SDict begin H.S end 1326 1356 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(82)p 0.0236 0.0894 0.6179 TeXcolorrgb 1416 1293 a SDict begin H.R end 1416 1293 a 1416 1355 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.82) cvn H.B /ANN pdfmark end 1416 1355 a Black 75 1468 a Ft(GeneralizedReedSol)q(omo)q (nDe)q(cod)q(er)q(Gao)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1604 1469 a SDict begin H.S end 1604 1469 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(53)p 0.0236 0.0894 0.6179 TeXcolorrgb 1694 1406 a SDict begin H.R end 1694 1406 a 1694 1468 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.53) cvn H.B /ANN pdfmark end 1694 1468 a Black 75 1581 a Ft(GeneralizedReedSol)q(omo)q(nLi)q(stD)q(ec)q(ode)q(r)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1650 1582 a SDict begin H.S end 1650 1582 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(54)p 0.0236 0.0894 0.6179 TeXcolorrgb 1740 1519 a SDict begin H.R end 1740 1519 a 1740 1581 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.54) cvn H.B /ANN pdfmark end 1740 1581 a Black 75 1694 a Ft(GeneralizedSrivast)q(ava)q (Cod)q(e)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1280 1695 a SDict begin H.S end 1280 1695 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(67)p 0.0236 0.0894 0.6179 TeXcolorrgb 1370 1632 a SDict begin H.R end 1370 1632 a 1370 1694 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.67) cvn H.B /ANN pdfmark end 1370 1694 a Black 75 1807 a Ft(GeneralLowerBoundC)q(ove)q(rin)q(gRa)q(di)q(us)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1558 1807 a SDict begin H.S end 1558 1807 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(122)p 0.0236 0.0894 0.6179 TeXcolorrgb 1693 1745 a SDict begin H.R end 1693 1745 a 1693 1807 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.122) cvn H.B /ANN pdfmark end 1693 1807 a Black 75 1919 a Ft(GeneralUpperBoundC)q(ove)q(rin)q(gRa)q(di)q (us)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1558 1919 a SDict begin H.S end 1558 1919 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(122)p 0.0236 0.0894 0.6179 TeXcolorrgb 1693 1857 a SDict begin H.R end 1693 1857 a 1693 1919 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.122) cvn H.B /ANN pdfmark end 1693 1919 a Black 75 2032 a FK(generator)j(polynomial,)p 0.0236 0.0894 0.6179 TeXcolorrgb 901 2033 a SDict begin H.S end 901 2033 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(28)p 0.0236 0.0894 0.6179 TeXcolorrgb 991 1970 a SDict begin H.R end 991 1970 a 991 2032 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.28) cvn H.B /ANN pdfmark end 991 2032 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1037 2033 a SDict begin H.S end 1037 2033 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(75)p 0.0236 0.0894 0.6179 TeXcolorrgb 1127 1970 a SDict begin H.R end 1127 1970 a 1127 2032 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.75) cvn H.B /ANN pdfmark end 1127 2032 a Black 75 2145 a Ft(GeneratorMat)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 677 2145 a SDict begin H.S end 677 2145 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(41)p 0.0236 0.0894 0.6179 TeXcolorrgb 767 2083 a SDict begin H.R end 767 2083 a 767 2145 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.41) cvn H.B /ANN pdfmark end 767 2145 a Black 75 2258 a Ft(GeneratorMatCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 862 2259 a SDict begin H.S end 862 2259 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(64)p 0.0236 0.0894 0.6179 TeXcolorrgb 952 2196 a SDict begin H.R end 952 2196 a 952 2258 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.64) cvn H.B /ANN pdfmark end 952 2258 a Black 75 2371 a Ft(GeneratorPol)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 677 2371 a SDict begin H.S end 677 2371 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(42)p 0.0236 0.0894 0.6179 TeXcolorrgb 767 2309 a SDict begin H.R end 767 2309 a 767 2371 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.42) cvn H.B /ANN pdfmark end 767 2371 a Black 75 2484 a Ft(GeneratorPolCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 862 2485 a SDict begin H.S end 862 2485 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(75)p 0.0236 0.0894 0.6179 TeXcolorrgb 952 2422 a SDict begin H.R end 952 2422 a 952 2484 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.75) cvn H.B /ANN pdfmark end 952 2484 a Black 75 2597 a Ft(GenusCurve)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 584 2598 a SDict begin H.S end 584 2598 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(86)p 0.0236 0.0894 0.6179 TeXcolorrgb 674 2535 a SDict begin H.R end 674 2535 a 674 2597 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.86) cvn H.B /ANN pdfmark end 674 2597 a Black 75 2710 a Ft(GoppaCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 538 2711 a SDict begin H.S end 538 2711 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(67)p 0.0236 0.0894 0.6179 TeXcolorrgb 628 2648 a SDict begin H.R end 628 2648 a 628 2710 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.67) cvn H.B /ANN pdfmark end 628 2710 a Black 75 2823 a Ft(GoppaCodeClassical)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 955 2825 a SDict begin H.S end 955 2825 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(95)p 0.0236 0.0894 0.6179 TeXcolorrgb 1045 2761 a SDict begin H.R end 1045 2761 a 1045 2823 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.95) cvn H.B /ANN pdfmark end 1045 2823 a Black 75 2936 a Ft(GOrbitPoint)50 b FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 677 2937 a SDict begin H.S end 677 2937 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(86)p 0.0236 0.0894 0.6179 TeXcolorrgb 767 2874 a SDict begin H.R end 767 2874 a 767 2936 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.86) cvn H.B /ANN pdfmark end 767 2936 a Black 75 3049 a Ft(GrayMat)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 445 3051 a SDict begin H.S end 445 3051 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(129)p 0.0236 0.0894 0.6179 TeXcolorrgb 580 2987 a SDict begin H.R end 580 2987 a 580 3049 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.129) cvn H.B /ANN pdfmark end 580 3049 a Black 75 3161 a FK(greatest)25 b(common)f(di)n(visor)l(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1013 3163 a SDict begin H.S end 1013 3163 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(89)p 0.0236 0.0894 0.6179 TeXcolorrgb 1103 3099 a SDict begin H.R end 1103 3099 a 1103 3161 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.89) cvn H.B /ANN pdfmark end 1103 3161 a Black 75 3274 a Ft(GreedyCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 584 3275 a SDict begin H.S end 584 3275 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(63)p 0.0236 0.0894 0.6179 TeXcolorrgb 674 3212 a SDict begin H.R end 674 3212 a 674 3274 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.63) cvn H.B /ANN pdfmark end 674 3274 a Black 75 3387 a FK(Griesmer)g(code,) p 0.0236 0.0894 0.6179 TeXcolorrgb 653 3388 a SDict begin H.S end 653 3388 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(117)p 0.0236 0.0894 0.6179 TeXcolorrgb 788 3325 a SDict begin H.R end 788 3325 a 788 3387 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.117) cvn H.B /ANN pdfmark end 788 3387 a Black 75 3500 a Ft(GuavaVersion)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 677 3500 a SDict begin H.S end 677 3500 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(144)p 0.0236 0.0894 0.6179 TeXcolorrgb 812 3438 a SDict begin H.R end 812 3438 a 812 3500 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.144) cvn H.B /ANN pdfmark end 812 3500 a Black 75 3696 a FK(Hadamard)g(matrix,)p 0.0236 0.0894 0.6179 TeXcolorrgb 759 3697 a SDict begin H.S end 759 3697 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(61)p 0.0236 0.0894 0.6179 TeXcolorrgb 849 3634 a SDict begin H.R end 849 3634 a 849 3696 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.61) cvn H.B /ANN pdfmark end 849 3696 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 896 3697 a SDict begin H.S end 896 3697 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(130)p 0.0236 0.0894 0.6179 TeXcolorrgb 1031 3634 a SDict begin H.R end 1031 3634 a 1031 3696 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.130) cvn H.B /ANN pdfmark end 1031 3696 a Black 75 3809 a Ft(HadamardCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 677 3810 a SDict begin H.S end 677 3810 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(61)p 0.0236 0.0894 0.6179 TeXcolorrgb 767 3747 a SDict begin H.R end 767 3747 a 767 3809 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.61) cvn H.B /ANN pdfmark end 767 3809 a Black 75 3922 a Ft(HadamardMat)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 630 3923 a SDict begin H.S end 630 3923 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(130)p 0.0236 0.0894 0.6179 TeXcolorrgb 765 3860 a SDict begin H.R end 765 3860 a 765 3922 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.130) cvn H.B /ANN pdfmark end 765 3922 a Black 75 4035 a FK(Hamming)f (metric,)p 0.0236 0.0894 0.6179 TeXcolorrgb 739 4036 a SDict begin H.S end 739 4036 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(15)p 0.0236 0.0894 0.6179 TeXcolorrgb 829 3973 a SDict begin H.R end 829 3973 a 829 4035 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.15) cvn H.B /ANN pdfmark end 829 4035 a Black 75 4148 a Ft(HammingCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 630 4149 a SDict begin H.S end 630 4149 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(66)p 0.0236 0.0894 0.6179 TeXcolorrgb 720 4086 a SDict begin H.R end 720 4086 a 720 4148 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.66) cvn H.B /ANN pdfmark end 720 4148 a Black 75 4261 a Ft(HorizontalConversi)q(onF)q (iel)q(dMa)q(t)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1419 4262 a SDict begin H.S end 1419 4262 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(133)p 0.0236 0.0894 0.6179 TeXcolorrgb 1554 4199 a SDict begin H.R end 1554 4199 a 1554 4261 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.133) cvn H.B /ANN pdfmark end 1554 4261 a Black 75 4374 a FK(hull,)p 0.0236 0.0894 0.6179 TeXcolorrgb 262 4375 a SDict begin H.S end 262 4375 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(110)p 0.0236 0.0894 0.6179 TeXcolorrgb 397 4312 a SDict begin H.R end 397 4312 a 397 4374 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.110) cvn H.B /ANN pdfmark end 397 4374 a Black 75 4570 a Ft(in)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 213 4571 a SDict begin H.S end 213 4571 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(31)p 0.0236 0.0894 0.6179 TeXcolorrgb 303 4508 a SDict begin H.R end 303 4508 a 303 4570 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.31) cvn H.B /ANN pdfmark end 303 4570 a Black 75 4682 a Ft(IncreaseCoveringRa)q(diu)q(sLo)q(wer)q(Bo)q(und)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1604 4683 a SDict begin H.S end 1604 4683 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(120)p 0.0236 0.0894 0.6179 TeXcolorrgb 1739 4620 a SDict begin H.R end 1739 4620 a 1739 4682 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.120) cvn H.B /ANN pdfmark end 1739 4682 a Black 75 4795 a FK(information)j(bits,)p 0.0236 0.0894 0.6179 TeXcolorrgb 704 4796 a SDict begin H.S end 704 4796 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(31)p 0.0236 0.0894 0.6179 TeXcolorrgb 794 4733 a SDict begin H.R end 794 4733 a 794 4795 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.31) cvn H.B /ANN pdfmark end 794 4795 a Black 75 4908 a Ft(InformationWord)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 816 4909 a SDict begin H.S end 816 4909 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(31)p 0.0236 0.0894 0.6179 TeXcolorrgb 906 4846 a SDict begin H.R end 906 4846 a 906 4908 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.31) cvn H.B /ANN pdfmark end 906 4908 a Black 75 5021 a Ft(InnerDistribution)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 909 5022 a SDict begin H.S end 909 5022 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(50)p 0.0236 0.0894 0.6179 TeXcolorrgb 999 4959 a SDict begin H.R end 999 4959 a 999 5021 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.50) cvn H.B /ANN pdfmark end 999 5021 a Black 75 5134 a Ft(IntersectionCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 862 5135 a SDict begin H.S end 862 5135 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(110)p 0.0236 0.0894 0.6179 TeXcolorrgb 997 5072 a SDict begin H.R end 997 5072 a 997 5134 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.110) cvn H.B /ANN pdfmark end 997 5134 a Black 75 5247 a Ft(IrreduciblePolynom)q(ial)q(sNr)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1233 5249 a SDict begin H.S end 1233 5249 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(139)p 0.0236 0.0894 0.6179 TeXcolorrgb 1368 5185 a SDict begin H.R end 1368 5185 a 1368 5247 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.139) cvn H.B /ANN pdfmark end 1368 5247 a Black 75 5360 a Ft(IsActionMoebiusTra)q(nsf)q(orm)q(ati)q(on)q(OnD)q(ivi)q (sor)q(De)q(fin)q(edP)q(1)407 5473 y FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 453 5475 a SDict begin H.S end 453 5475 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(93)p 0.0236 0.0894 0.6179 TeXcolorrgb 543 5411 a SDict begin H.R end 543 5411 a 543 5473 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.93) cvn H.B /ANN pdfmark end 543 5473 a Black 75 5586 a Ft(IsAffineCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 677 5587 a SDict begin H.S end 677 5587 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(35)p 0.0236 0.0894 0.6179 TeXcolorrgb 767 5524 a SDict begin H.R end 767 5524 a 767 5586 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.35) cvn H.B /ANN pdfmark end 767 5586 a Black Black Black 1954 399 a Ft(IsAlmostAffineCode)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2834 400 a SDict begin H.S end 2834 400 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(35)p 0.0236 0.0894 0.6179 TeXcolorrgb 2924 337 a SDict begin H.R end 2924 337 a 2924 399 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.35) cvn H.B /ANN pdfmark end 2924 399 a Black 1954 511 a FK(IsCheapConw)o(ayPolynomial,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3019 512 a SDict begin H.S end 3019 512 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(16)p 0.0236 0.0894 0.6179 TeXcolorrgb 3109 449 a SDict begin H.R end 3109 449 a 3109 511 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.16) cvn H.B /ANN pdfmark end 3109 511 a Black 1954 624 a Ft(IsCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2278 625 a SDict begin H.S end 2278 625 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(32)p 0.0236 0.0894 0.6179 TeXcolorrgb 2368 562 a SDict begin H.R end 2368 562 a 2368 624 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.32) cvn H.B /ANN pdfmark end 2368 624 a Black 1954 737 a Ft(IsCodeword)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2463 737 a SDict begin H.S end 2463 737 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(21)p 0.0236 0.0894 0.6179 TeXcolorrgb 2553 675 a SDict begin H.R end 2553 675 a 2553 737 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.21) cvn H.B /ANN pdfmark end 2553 737 a Black 1954 850 a Ft(IsCoordinateAccept)q(abl)q(e)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3019 851 a SDict begin H.S end 3019 851 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(135)p 0.0236 0.0894 0.6179 TeXcolorrgb 3154 788 a SDict begin H.R end 3154 788 a 3154 850 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.135) cvn H.B /ANN pdfmark end 3154 850 a Black 1954 963 a Ft(IsCyclicCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2556 964 a SDict begin H.S end 2556 964 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(32)p 0.0236 0.0894 0.6179 TeXcolorrgb 2646 901 a SDict begin H.R end 2646 901 a 2646 963 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.32) cvn H.B /ANN pdfmark end 2646 963 a Black 1954 1076 a Ft(IsEquivalent)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2556 1077 a SDict begin H.S end 2556 1077 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(36)p 0.0236 0.0894 0.6179 TeXcolorrgb 2646 1014 a SDict begin H.R end 2646 1014 a 2646 1076 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.36) cvn H.B /ANN pdfmark end 2646 1076 a Black 1954 1189 a Ft(IsFinite)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2370 1190 a SDict begin H.S end 2370 1190 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(38)p 0.0236 0.0894 0.6179 TeXcolorrgb 2460 1127 a SDict begin H.R end 2460 1127 a 2460 1189 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.38) cvn H.B /ANN pdfmark end 2460 1189 a Black 1954 1302 a Ft(IsGriesmerCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2649 1303 a SDict begin H.S end 2649 1303 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(117)p 0.0236 0.0894 0.6179 TeXcolorrgb 2784 1240 a SDict begin H.R end 2784 1240 a 2784 1302 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.117) cvn H.B /ANN pdfmark end 2784 1302 a Black 1954 1415 a Ft(IsInStandardForm)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2741 1416 a SDict begin H.S end 2741 1416 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(132)p 0.0236 0.0894 0.6179 TeXcolorrgb 2876 1353 a SDict begin H.R end 2876 1353 a 2876 1415 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.132) cvn H.B /ANN pdfmark end 2876 1415 a Black 1954 1528 a Ft(IsLatinSquare)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2602 1529 a SDict begin H.S end 2602 1529 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(134)p 0.0236 0.0894 0.6179 TeXcolorrgb 2737 1466 a SDict begin H.R end 2737 1466 a 2737 1528 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.134) cvn H.B /ANN pdfmark end 2737 1528 a Black 1954 1641 a Ft(IsLinearCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2556 1642 a SDict begin H.S end 2556 1642 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(32)p 0.0236 0.0894 0.6179 TeXcolorrgb 2646 1579 a SDict begin H.R end 2646 1579 a 2646 1641 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.32) cvn H.B /ANN pdfmark end 2646 1641 a Black 1954 1753 a Ft(IsMDSCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2417 1754 a SDict begin H.S end 2417 1754 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(33)p 0.0236 0.0894 0.6179 TeXcolorrgb 2507 1691 a SDict begin H.R end 2507 1691 a 2507 1753 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.33) cvn H.B /ANN pdfmark end 2507 1753 a Black 1954 1866 a Ft(IsNormalCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2556 1867 a SDict begin H.S end 2556 1867 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(136)p 0.0236 0.0894 0.6179 TeXcolorrgb 2691 1804 a SDict begin H.R end 2691 1804 a 2691 1866 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.136) cvn H.B /ANN pdfmark end 2691 1866 a Black 1954 1979 a Ft(IsPerfectCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2602 1980 a SDict begin H.S end 2602 1980 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(33)p 0.0236 0.0894 0.6179 TeXcolorrgb 2692 1917 a SDict begin H.R end 2692 1917 a 2692 1979 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.33) cvn H.B /ANN pdfmark end 2692 1979 a Black 1954 2092 a FK(IsPrimiti)n(v)o(ePolynomial,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2819 2093 a SDict begin H.S end 2819 2093 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(17)p 0.0236 0.0894 0.6179 TeXcolorrgb 2909 2030 a SDict begin H.R end 2909 2030 a 2909 2092 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.17) cvn H.B /ANN pdfmark end 2909 2092 a Black 1954 2205 a Ft(IsSelfComplementar)q(yCo)q(de)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3066 2206 a SDict begin H.S end 3066 2206 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(34)p 0.0236 0.0894 0.6179 TeXcolorrgb 3156 2143 a SDict begin H.R end 3156 2143 a 3156 2205 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.34) cvn H.B /ANN pdfmark end 3156 2205 a Black 1954 2318 a Ft(IsSelfDualCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2649 2319 a SDict begin H.S end 2649 2319 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(34)p 0.0236 0.0894 0.6179 TeXcolorrgb 2739 2256 a SDict begin H.R end 2739 2256 a 2739 2318 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.34) cvn H.B /ANN pdfmark end 2739 2318 a Black 1954 2431 a Ft(IsSelfOrthogonalCo)q(de)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2927 2432 a SDict begin H.S end 2927 2432 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(34)p 0.0236 0.0894 0.6179 TeXcolorrgb 3017 2369 a SDict begin H.R end 3017 2369 a 3017 2431 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.34) cvn H.B /ANN pdfmark end 3017 2431 a Black 1954 2544 a Ft(IsSubset)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2370 2545 a SDict begin H.S end 2370 2545 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(32)p 0.0236 0.0894 0.6179 TeXcolorrgb 2460 2482 a SDict begin H.R end 2460 2482 a 2460 2544 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.32) cvn H.B /ANN pdfmark end 2460 2544 a Black 1954 2732 a Ft(Krawtchouk)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2463 2733 a SDict begin H.S end 2463 2733 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(138)p 0.0236 0.0894 0.6179 TeXcolorrgb 2598 2670 a SDict begin H.R end 2598 2670 a 2598 2732 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.138) cvn H.B /ANN pdfmark end 2598 2732 a Black 1954 2845 a Ft(KrawtchoukMat)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2602 2847 a SDict begin H.S end 2602 2847 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(129)p 0.0236 0.0894 0.6179 TeXcolorrgb 2737 2783 a SDict begin H.R end 2737 2783 a 2737 2845 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.129) cvn H.B /ANN pdfmark end 2737 2845 a Black 1954 3033 a FK(Latin)e(square,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2451 3034 a SDict begin H.S end 2451 3034 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(133)p 0.0236 0.0894 0.6179 TeXcolorrgb 2586 2971 a SDict begin H.R end 2586 2971 a 2586 3033 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.133) cvn H.B /ANN pdfmark end 2586 3033 a Black 1954 3146 a FK(least)g(common)g(multiple,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2833 3148 a SDict begin H.S end 2833 3148 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(89)p 0.0236 0.0894 0.6179 TeXcolorrgb 2923 3084 a SDict begin H.R end 2923 3084 a 2923 3146 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.89) cvn H.B /ANN pdfmark end 2923 3146 a Black 1954 3259 a Ft(LeftActingDomain)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2741 3260 a SDict begin H.S end 2741 3260 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(38)p 0.0236 0.0894 0.6179 TeXcolorrgb 2831 3197 a SDict begin H.R end 2831 3197 a 2831 3259 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.38) cvn H.B /ANN pdfmark end 2831 3259 a Black 1954 3372 a FK(length,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2227 3373 a SDict begin H.S end 2227 3373 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(27)p 0.0236 0.0894 0.6179 TeXcolorrgb 2317 3310 a SDict begin H.R end 2317 3310 a 2317 3372 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.27) cvn H.B /ANN pdfmark end 2317 3372 a Black 1954 3485 a Ft(LengthenedCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2649 3486 a SDict begin H.S end 2649 3486 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(104)p 0.0236 0.0894 0.6179 TeXcolorrgb 2784 3423 a SDict begin H.R end 2784 3423 a 2784 3485 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.104) cvn H.B /ANN pdfmark end 2784 3485 a Black 1954 3598 a Ft(LexiCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2370 3599 a SDict begin H.S end 2370 3599 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(64)p 0.0236 0.0894 0.6179 TeXcolorrgb 2460 3536 a SDict begin H.R end 2460 3536 a 2460 3598 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.64) cvn H.B /ANN pdfmark end 2460 3598 a Black 1954 3711 a FK(linear)h(code,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2401 3712 a SDict begin H.S end 2401 3712 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(18)p 0.0236 0.0894 0.6179 TeXcolorrgb 2491 3649 a SDict begin H.R end 2491 3649 a 2491 3711 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.18) cvn H.B /ANN pdfmark end 2491 3711 a Black 1954 3823 a Ft(LowerBoundCovering)q(Rad)q(ius)q(Cou)q(nt)q(ing)q(Exc)q(ess)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2286 3936 a SDict begin H.S end 2286 3936 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(124)p 0.0236 0.0894 0.6179 TeXcolorrgb 2421 3874 a SDict begin H.R end 2421 3874 a 2421 3936 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.124) cvn H.B /ANN pdfmark end 2421 3936 a Black 1954 4049 a Ft(LowerBoundCovering)q(Rad)q(ius)q(Emb)q(ed)q (ded)q(1)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3529 4050 a SDict begin H.S end 3529 4050 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(125)p 0.0236 0.0894 0.6179 TeXcolorrgb 3664 3987 a SDict begin H.R end 3664 3987 a 3664 4049 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.125) cvn H.B /ANN pdfmark end 3664 4049 a Black 1954 4162 a Ft(LowerBoundCovering)q(Rad)q(ius)q(Emb)q(ed)q(ded)q(2)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3529 4163 a SDict begin H.S end 3529 4163 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(125)p 0.0236 0.0894 0.6179 TeXcolorrgb 3664 4100 a SDict begin H.R end 3664 4100 a 3664 4162 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.125) cvn H.B /ANN pdfmark end 3664 4162 a Black 1954 4275 a Ft(LowerBoundCovering)q (Rad)q(ius)q(Ind)q(uc)q(tio)q(n)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3529 4276 a SDict begin H.S end 3529 4276 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(126)p 0.0236 0.0894 0.6179 TeXcolorrgb 3664 4213 a SDict begin H.R end 3664 4213 a 3664 4275 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.126) cvn H.B /ANN pdfmark end 3664 4275 a Black 1954 4388 a Ft(LowerBoundCovering)q(Rad)q(ius)q(Sph)q(er)q(eCo)q(ver)q (ing)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2286 4502 a SDict begin H.S end 2286 4502 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(123)p 0.0236 0.0894 0.6179 TeXcolorrgb 2421 4439 a SDict begin H.R end 2421 4439 a 2421 4501 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.123) cvn H.B /ANN pdfmark end 2421 4501 a Black 1954 4614 a Ft(LowerBoundCovering)q (Rad)q(ius)q(Van)q(We)q(e1)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3437 4615 a SDict begin H.S end 3437 4615 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(123)p 0.0236 0.0894 0.6179 TeXcolorrgb 3572 4552 a SDict begin H.R end 3572 4552 a 3572 4614 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.123) cvn H.B /ANN pdfmark end 3572 4614 a Black 1954 4727 a Ft(LowerBoundCovering)q(Rad)q(ius)q(Van)q(We)q(e2)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3437 4727 a SDict begin H.S end 3437 4727 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(124)p 0.0236 0.0894 0.6179 TeXcolorrgb 3572 4665 a SDict begin H.R end 3572 4665 a 3572 4727 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.124) cvn H.B /ANN pdfmark end 3572 4727 a Black 1954 4840 a Ft(LowerBoundGilbertV)q(ars)q(ham)q(ov)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3205 4841 a SDict begin H.S end 3205 4841 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(118)p 0.0236 0.0894 0.6179 TeXcolorrgb 3340 4778 a SDict begin H.R end 3340 4778 a 3340 4840 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.118) cvn H.B /ANN pdfmark end 3340 4840 a Black 1954 4953 a Ft(LowerBoundMinimumD)q (ist)q(anc)q(e)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3159 4954 a SDict begin H.S end 3159 4954 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(118)p 0.0236 0.0894 0.6179 TeXcolorrgb 3294 4891 a SDict begin H.R end 3294 4891 a 3294 4953 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.118) cvn H.B /ANN pdfmark end 3294 4953 a Black 1954 5065 a Ft(LowerBoundSpherePa)q(cki)q(ng)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3066 5066 a SDict begin H.S end 3066 5066 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(118)p 0.0236 0.0894 0.6179 TeXcolorrgb 3201 5003 a SDict begin H.R end 3201 5003 a 3201 5065 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.118) cvn H.B /ANN pdfmark end 3201 5065 a Black 1954 5254 a FK(MacW)l(illiams)g(transform,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2867 5255 a SDict begin H.S end 2867 5255 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(137)p 0.0236 0.0894 0.6179 TeXcolorrgb 3002 5192 a SDict begin H.R end 3002 5192 a 3002 5254 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.137) cvn H.B /ANN pdfmark end 3002 5254 a Black 1954 5367 a Ft(MatrixRepresentati)q(onO)q(fEl)q(eme)q(nt)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3344 5369 a SDict begin H.S end 3344 5369 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(139)p 0.0236 0.0894 0.6179 TeXcolorrgb 3479 5305 a SDict begin H.R end 3479 5305 a 3479 5367 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.139) cvn H.B /ANN pdfmark end 3479 5367 a Black 1954 5479 a Ft(MatrixRepresentati)q (onO)q(nRi)q(ema)q(nn)q(Roc)q(hSp)q(ace)q(P1)2286 5592 y FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2332 5594 a SDict begin H.S end 2332 5594 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(94)p 0.0236 0.0894 0.6179 TeXcolorrgb 2422 5530 a SDict begin H.R end 2422 5530 a 2422 5592 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.94) cvn H.B /ANN pdfmark end 2422 5592 a Black Black Black eop end end %%Page: 152 152 TeXDict begin HPSdict begin 152 151 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.152) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(152)p Black 75 399 a Ft(MatrixTransformati)q(onO)q(nMu)q (lti)q(va)q(ria)q(teP)q(oly)q(no)q(mia)q(l)407 511 y FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 453 511 a SDict begin H.S end 453 511 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(142)p 0.0236 0.0894 0.6179 TeXcolorrgb 588 449 a SDict begin H.R end 588 449 a 588 511 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.142) cvn H.B /ANN pdfmark end 588 511 a Black 75 624 a FK(maximum)23 b(distance)j(separable,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1176 625 a SDict begin H.S end 1176 625 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(115)p 0.0236 0.0894 0.6179 TeXcolorrgb 1311 562 a SDict begin H.R end 1311 562 a 1311 624 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.115) cvn H.B /ANN pdfmark end 1311 624 a Black 75 737 a FK(MDS,)p 0.0236 0.0894 0.6179 TeXcolorrgb 317 738 a SDict begin H.S end 317 738 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(34)p 0.0236 0.0894 0.6179 TeXcolorrgb 407 675 a SDict begin H.R end 407 675 a 407 737 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.34) cvn H.B /ANN pdfmark end 407 737 a Black 75 850 a FK(minimum)d(distance,)p 0.0236 0.0894 0.6179 TeXcolorrgb 795 851 a SDict begin H.S end 795 851 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(27)p 0.0236 0.0894 0.6179 TeXcolorrgb 885 788 a SDict begin H.R end 885 788 a 885 850 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.27) cvn H.B /ANN pdfmark end 885 850 a Black 75 963 a Ft(MinimumDistance)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 816 963 a SDict begin H.S end 816 963 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(44)p 0.0236 0.0894 0.6179 TeXcolorrgb 906 901 a SDict begin H.R end 906 901 a 906 963 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.44) cvn H.B /ANN pdfmark end 906 963 a Black 75 1076 a Ft(MinimumDistanceLeo)q(n)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1001 1077 a SDict begin H.S end 1001 1077 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(45)p 0.0236 0.0894 0.6179 TeXcolorrgb 1091 1014 a SDict begin H.R end 1091 1014 a 1091 1076 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.45) cvn H.B /ANN pdfmark end 1091 1076 a Black 75 1189 a Ft(MinimumDistanceRan)q(dom)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1094 1190 a SDict begin H.S end 1094 1190 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(46)p 0.0236 0.0894 0.6179 TeXcolorrgb 1184 1127 a SDict begin H.R end 1184 1127 a 1184 1189 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.46) cvn H.B /ANN pdfmark end 1184 1189 a Black 75 1302 a Ft(MinimumWeightWords)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 955 1304 a SDict begin H.S end 955 1304 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(49)p 0.0236 0.0894 0.6179 TeXcolorrgb 1045 1240 a SDict begin H.R end 1045 1240 a 1045 1302 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.49) cvn H.B /ANN pdfmark end 1045 1302 a Black 75 1415 a Ft(MoebiusTransformat)q(ion)53 b FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1140 1417 a SDict begin H.S end 1140 1417 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(92)p 0.0236 0.0894 0.6179 TeXcolorrgb 1230 1353 a SDict begin H.R end 1230 1353 a 1230 1415 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.92) cvn H.B /ANN pdfmark end 1230 1415 a Black 75 1528 a Ft(MOLS)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 306 1529 a SDict begin H.S end 306 1529 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(133)p 0.0236 0.0894 0.6179 TeXcolorrgb 441 1466 a SDict begin H.R end 441 1466 a 441 1528 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.133) cvn H.B /ANN pdfmark end 441 1528 a Black 75 1641 a Ft(MOLSCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 491 1642 a SDict begin H.S end 491 1642 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(62)p 0.0236 0.0894 0.6179 TeXcolorrgb 581 1579 a SDict begin H.R end 581 1579 a 581 1641 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.62) cvn H.B /ANN pdfmark end 581 1641 a Black 75 1753 a Ft(MostCommonInList)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 862 1753 a SDict begin H.S end 862 1753 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(141)p 0.0236 0.0894 0.6179 TeXcolorrgb 997 1691 a SDict begin H.R end 997 1691 a 997 1753 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.141) cvn H.B /ANN pdfmark end 997 1753 a Black 75 1866 a Ft(MultiplicityInList)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 955 1866 a SDict begin H.S end 955 1866 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(141)p 0.0236 0.0894 0.6179 TeXcolorrgb 1090 1804 a SDict begin H.R end 1090 1804 a 1090 1866 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.141) cvn H.B /ANN pdfmark end 1090 1866 a Black 75 1979 a FK(mutually)25 b(orthogonal)i(Latin)c(squares,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1370 1980 a SDict begin H.S end 1370 1980 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(133)p 0.0236 0.0894 0.6179 TeXcolorrgb 1505 1917 a SDict begin H.R end 1505 1917 a 1505 1979 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.133) cvn H.B /ANN pdfmark end 1505 1979 a Black 75 2167 a Ft(NearestNeighborDec)q(ode)q(wor)q(ds)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1326 2168 a SDict begin H.S end 1326 2168 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(56)p 0.0236 0.0894 0.6179 TeXcolorrgb 1416 2105 a SDict begin H.R end 1416 2105 a 1416 2167 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.56) cvn H.B /ANN pdfmark end 1416 2167 a Black 75 2280 a Ft(NearestNeighborGRS)q(Dec)q (ode)q(wor)q(ds)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1465 2281 a SDict begin H.S end 1465 2281 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(55)p 0.0236 0.0894 0.6179 TeXcolorrgb 1555 2218 a SDict begin H.R end 1555 2218 a 1555 2280 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.55) cvn H.B /ANN pdfmark end 1555 2280 a Black 75 2393 a Ft(NordstromRobinsonC)q(ode)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1094 2394 a SDict begin H.S end 1094 2394 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(63)p 0.0236 0.0894 0.6179 TeXcolorrgb 1184 2331 a SDict begin H.R end 1184 2331 a 1184 2393 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.63) cvn H.B /ANN pdfmark end 1184 2393 a Black 75 2506 a FK(norm)h(of)f(a)g(code,)p 0.0236 0.0894 0.6179 TeXcolorrgb 668 2507 a SDict begin H.S end 668 2507 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(135)p 0.0236 0.0894 0.6179 TeXcolorrgb 803 2444 a SDict begin H.R end 803 2444 a 803 2506 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.135) cvn H.B /ANN pdfmark end 803 2506 a Black 75 2619 a FK(normal)h(code,)p 0.0236 0.0894 0.6179 TeXcolorrgb 572 2620 a SDict begin H.S end 572 2620 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(136)p 0.0236 0.0894 0.6179 TeXcolorrgb 707 2557 a SDict begin H.R end 707 2557 a 707 2619 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.136) cvn H.B /ANN pdfmark end 707 2619 a Black 75 2732 a FK(not)g(=,)p 0.0236 0.0894 0.6179 TeXcolorrgb 311 2732 a SDict begin H.S end 311 2732 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(21)p 0.0236 0.0894 0.6179 TeXcolorrgb 401 2670 a SDict begin H.R end 401 2670 a 401 2732 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.21) cvn H.B /ANN pdfmark end 401 2732 a Black FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 447 2734 a SDict begin H.S end 447 2734 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(29)p 0.0236 0.0894 0.6179 TeXcolorrgb 537 2670 a SDict begin H.R end 537 2670 a 537 2732 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.29) cvn H.B /ANN pdfmark end 537 2732 a Black 75 2845 a Ft(NrCyclicCodes)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 723 2846 a SDict begin H.S end 723 2846 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(81)p 0.0236 0.0894 0.6179 TeXcolorrgb 813 2783 a SDict begin H.R end 813 2783 a 813 2845 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.81) cvn H.B /ANN pdfmark end 813 2845 a Black 75 2958 a Ft(NullCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 491 2959 a SDict begin H.S end 491 2959 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(80)p 0.0236 0.0894 0.6179 TeXcolorrgb 581 2896 a SDict begin H.R end 581 2896 a 581 2958 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.80) cvn H.B /ANN pdfmark end 581 2958 a Black 75 3071 a Ft(NullWord)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 491 3072 a SDict begin H.S end 491 3072 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(25)p 0.0236 0.0894 0.6179 TeXcolorrgb 581 3009 a SDict begin H.R end 581 3009 a 581 3071 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.25) cvn H.B /ANN pdfmark end 581 3071 a Black 75 3259 a Ft(OnePointAGCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 770 3261 a SDict begin H.S end 770 3261 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(97)p 0.0236 0.0894 0.6179 TeXcolorrgb 860 3197 a SDict begin H.R end 860 3197 a 860 3259 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.97) cvn H.B /ANN pdfmark end 860 3259 a Black 75 3372 a Ft(OptimalityCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 770 3373 a SDict begin H.S end 770 3373 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(70)p 0.0236 0.0894 0.6179 TeXcolorrgb 860 3310 a SDict begin H.R end 860 3310 a 860 3372 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.70) cvn H.B /ANN pdfmark end 860 3372 a Black 75 3485 a FK(order)h(of)e(polynomial,)p 0.0236 0.0894 0.6179 TeXcolorrgb 848 3486 a SDict begin H.S end 848 3486 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(80)p 0.0236 0.0894 0.6179 TeXcolorrgb 938 3423 a SDict begin H.R end 938 3423 a 938 3485 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.80) cvn H.B /ANN pdfmark end 938 3485 a Black 75 3598 a Ft(OuterDistribution)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 909 3599 a SDict begin H.S end 909 3599 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(51)p 0.0236 0.0894 0.6179 TeXcolorrgb 999 3536 a SDict begin H.R end 999 3536 a 999 3598 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.51) cvn H.B /ANN pdfmark end 999 3598 a Black 75 3786 a FK(P)o(arity)h(check,)p 0.0236 0.0894 0.6179 TeXcolorrgb 571 3788 a SDict begin H.S end 571 3788 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(99)p 0.0236 0.0894 0.6179 TeXcolorrgb 661 3724 a SDict begin H.R end 661 3724 a 661 3786 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.99) cvn H.B /ANN pdfmark end 661 3786 a Black 75 3899 a FK(parity)h(check)g (matrix,)p 0.0236 0.0894 0.6179 TeXcolorrgb 827 3900 a SDict begin H.S end 827 3900 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(27)p 0.0236 0.0894 0.6179 TeXcolorrgb 917 3837 a SDict begin H.R end 917 3837 a 917 3899 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.27) cvn H.B /ANN pdfmark end 917 3899 a Black 75 4012 a FK(perfect,)p 0.0236 0.0894 0.6179 TeXcolorrgb 373 4013 a SDict begin H.S end 373 4013 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(115)p 0.0236 0.0894 0.6179 TeXcolorrgb 508 3950 a SDict begin H.R end 508 3950 a 508 4012 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.115) cvn H.B /ANN pdfmark end 508 4012 a Black 75 4125 a FK(perfect)g(code,)p 0.0236 0.0894 0.6179 TeXcolorrgb 567 4126 a SDict begin H.S end 567 4126 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(138)p 0.0236 0.0894 0.6179 TeXcolorrgb 702 4063 a SDict begin H.R end 702 4063 a 702 4125 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.138) cvn H.B /ANN pdfmark end 702 4125 a Black 75 4237 a FK(permutation)h(equi)n(v)n(alent)g(codes,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1186 4238 a SDict begin H.S end 1186 4238 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(36)p 0.0236 0.0894 0.6179 TeXcolorrgb 1276 4175 a SDict begin H.R end 1276 4175 a 1276 4237 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.36) cvn H.B /ANN pdfmark end 1276 4237 a Black 75 4350 a FK(PermutationAutomorphismGroup,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1348 4351 a SDict begin H.S end 1348 4351 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(37)p 0.0236 0.0894 0.6179 TeXcolorrgb 1438 4288 a SDict begin H.R end 1438 4288 a 1438 4350 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.37) cvn H.B /ANN pdfmark end 1438 4350 a Black 75 4463 a Ft(PermutationAutomor)q(phi)q(smG)q(rou)q(p)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1419 4464 a SDict begin H.S end 1419 4464 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(37)p 0.0236 0.0894 0.6179 TeXcolorrgb 1509 4401 a SDict begin H.R end 1509 4401 a 1509 4463 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.37) cvn H.B /ANN pdfmark end 1509 4463 a Black 75 4576 a Ft(PermutationDecode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 909 4577 a SDict begin H.S end 909 4577 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(58)p 0.0236 0.0894 0.6179 TeXcolorrgb 999 4514 a SDict begin H.R end 999 4514 a 999 4576 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.58) cvn H.B /ANN pdfmark end 999 4576 a Black 75 4689 a Ft(PermutationDecodeN)q(C)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1001 4691 a SDict begin H.S end 1001 4691 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(59)p 0.0236 0.0894 0.6179 TeXcolorrgb 1091 4627 a SDict begin H.R end 1091 4627 a 1091 4689 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.59) cvn H.B /ANN pdfmark end 1091 4689 a Black 75 4802 a Ft(PermutedCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 677 4803 a SDict begin H.S end 677 4803 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(101)p 0.0236 0.0894 0.6179 TeXcolorrgb 812 4740 a SDict begin H.R end 812 4740 a 812 4802 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.101) cvn H.B /ANN pdfmark end 812 4802 a Black 75 4915 a Ft(PermutedCols)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 677 4916 a SDict begin H.S end 677 4916 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(132)p 0.0236 0.0894 0.6179 TeXcolorrgb 812 4853 a SDict begin H.R end 812 4853 a 812 4915 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.132) cvn H.B /ANN pdfmark end 812 4915 a Black 75 5028 a Ft(PiecewiseConstantC)q(ode)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1094 5029 a SDict begin H.S end 1094 5029 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(108)p 0.0236 0.0894 0.6179 TeXcolorrgb 1229 4966 a SDict begin H.R end 1229 4966 a 1229 5028 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.108) cvn H.B /ANN pdfmark end 1229 5028 a Black 75 5141 a FK(point,)p 0.0236 0.0894 0.6179 TeXcolorrgb 307 5142 a SDict begin H.S end 307 5142 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(85)p 0.0236 0.0894 0.6179 TeXcolorrgb 397 5079 a SDict begin H.R end 397 5079 a 397 5141 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.85) cvn H.B /ANN pdfmark end 397 5141 a Black 75 5254 a Ft(PolyCodeword)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 677 5255 a SDict begin H.S end 677 5255 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(23)p 0.0236 0.0894 0.6179 TeXcolorrgb 767 5192 a SDict begin H.R end 767 5192 a 767 5254 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.23) cvn H.B /ANN pdfmark end 767 5254 a Black 75 5367 a FK(primiti)n(v)o(e)e(element,)p 0.0236 0.0894 0.6179 TeXcolorrgb 761 5368 a SDict begin H.S end 761 5368 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(16)p 0.0236 0.0894 0.6179 TeXcolorrgb 851 5305 a SDict begin H.R end 851 5305 a 851 5367 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.16) cvn H.B /ANN pdfmark end 851 5367 a Black 75 5479 a Ft(PrimitivePolynomia)q(lsN)q(r)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1140 5481 a SDict begin H.S end 1140 5481 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(139)p 0.0236 0.0894 0.6179 TeXcolorrgb 1275 5417 a SDict begin H.R end 1275 5417 a 1275 5479 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.139) cvn H.B /ANN pdfmark end 1275 5479 a Black 75 5592 a Ft(PrimitiveUnityRoot)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 955 5593 a SDict begin H.S end 955 5593 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(138)p 0.0236 0.0894 0.6179 TeXcolorrgb 1090 5530 a SDict begin H.R end 1090 5530 a 1090 5592 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.138) cvn H.B /ANN pdfmark end 1090 5592 a Black Black Black 1954 399 a Ft(Print)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2231 401 a SDict begin H.S end 2231 401 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(39)p 0.0236 0.0894 0.6179 TeXcolorrgb 2321 337 a SDict begin H.R end 2321 337 a 2321 399 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.39) cvn H.B /ANN pdfmark end 2321 399 a Black 1954 511 a Ft(PuncturedCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2602 512 a SDict begin H.S end 2602 512 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(100)p 0.0236 0.0894 0.6179 TeXcolorrgb 2737 449 a SDict begin H.R end 2737 449 a 2737 511 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.100) cvn H.B /ANN pdfmark end 2737 511 a Black 1954 624 a Ft(PutStandardForm)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2695 625 a SDict begin H.S end 2695 625 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(131)p 0.0236 0.0894 0.6179 TeXcolorrgb 2830 562 a SDict begin H.R end 2830 562 a 2830 624 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.131) cvn H.B /ANN pdfmark end 2830 624 a Black 1954 820 a Ft(QQRCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2324 822 a SDict begin H.S end 2324 822 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(79)p 0.0236 0.0894 0.6179 TeXcolorrgb 2414 758 a SDict begin H.R end 2414 758 a 2414 820 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.79) cvn H.B /ANN pdfmark end 2414 820 a Black 1954 933 a Ft(QQRCodeNC)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2417 935 a SDict begin H.S end 2417 935 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(79)p 0.0236 0.0894 0.6179 TeXcolorrgb 2507 871 a SDict begin H.R end 2507 871 a 2507 933 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.79) cvn H.B /ANN pdfmark end 2507 933 a Black 1954 1046 a Ft(QRCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2278 1047 a SDict begin H.S end 2278 1047 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(78)p 0.0236 0.0894 0.6179 TeXcolorrgb 2368 984 a SDict begin H.R end 2368 984 a 2368 1046 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.78) cvn H.B /ANN pdfmark end 2368 1046 a Black 1954 1242 a Ft(RandomCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2463 1243 a SDict begin H.S end 2463 1243 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(63)p 0.0236 0.0894 0.6179 TeXcolorrgb 2553 1180 a SDict begin H.R end 2553 1180 a 2553 1242 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.63) cvn H.B /ANN pdfmark end 2553 1242 a Black 1954 1355 a Ft(RandomLinearCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2741 1357 a SDict begin H.S end 2741 1357 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(69)p 0.0236 0.0894 0.6179 TeXcolorrgb 2831 1293 a SDict begin H.R end 2831 1293 a 2831 1355 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.69) cvn H.B /ANN pdfmark end 2831 1355 a Black 1954 1468 a Ft(RandomPrimitivePol)q(yno)q(mia)q(l)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3159 1469 a SDict begin H.S end 3159 1469 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(17)p 0.0236 0.0894 0.6179 TeXcolorrgb 3249 1406 a SDict begin H.R end 3249 1406 a 3249 1468 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.17) cvn H.B /ANN pdfmark end 3249 1468 a Black 1954 1581 a FK(reciprocal)i(polynomial,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2800 1582 a SDict begin H.S end 2800 1582 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(140)p 0.0236 0.0894 0.6179 TeXcolorrgb 2935 1519 a SDict begin H.R end 2935 1519 a 2935 1581 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.140) cvn H.B /ANN pdfmark end 2935 1581 a Black 1954 1694 a Ft(ReciprocalPolynomi)q(al)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2927 1695 a SDict begin H.S end 2927 1695 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(140)p 0.0236 0.0894 0.6179 TeXcolorrgb 3062 1632 a SDict begin H.R end 3062 1632 a 3062 1694 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.140) cvn H.B /ANN pdfmark end 3062 1694 a Black 1954 1807 a Ft(Redundancy)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2463 1807 a SDict begin H.S end 2463 1807 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(44)p 0.0236 0.0894 0.6179 TeXcolorrgb 2553 1745 a SDict begin H.R end 2553 1745 a 2553 1807 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.44) cvn H.B /ANN pdfmark end 2553 1807 a Black 1954 1919 a Ft(ReedMullerCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2649 1920 a SDict begin H.S end 2649 1920 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(66)p 0.0236 0.0894 0.6179 TeXcolorrgb 2739 1857 a SDict begin H.R end 2739 1857 a 2739 1919 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.66) cvn H.B /ANN pdfmark end 2739 1919 a Black 1954 2032 a Ft(ReedSolomonCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2695 2033 a SDict begin H.S end 2695 2033 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(78)p 0.0236 0.0894 0.6179 TeXcolorrgb 2785 1970 a SDict begin H.R end 2785 1970 a 2785 2032 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.78) cvn H.B /ANN pdfmark end 2785 2032 a Black 1954 2145 a Ft(RemovedElementsCod)q(e)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2880 2146 a SDict begin H.S end 2880 2146 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(102)p 0.0236 0.0894 0.6179 TeXcolorrgb 3015 2083 a SDict begin H.R end 3015 2083 a 3015 2145 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.102) cvn H.B /ANN pdfmark end 3015 2145 a Black 1954 2258 a Ft(RepetitionCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2649 2259 a SDict begin H.S end 2649 2259 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(80)p 0.0236 0.0894 0.6179 TeXcolorrgb 2739 2196 a SDict begin H.R end 2739 2196 a 2739 2258 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.80) cvn H.B /ANN pdfmark end 2739 2258 a Black 1954 2371 a Ft(ResidueCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2509 2372 a SDict begin H.S end 2509 2372 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(105)p 0.0236 0.0894 0.6179 TeXcolorrgb 2644 2309 a SDict begin H.R end 2644 2309 a 2644 2371 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.105) cvn H.B /ANN pdfmark end 2644 2371 a Black 1954 2484 a Ft(RiemannRochSpaceBa)q(sis)q(Fun)q(cti)q(on)q(P1)53 b FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3483 2486 a SDict begin H.S end 3483 2486 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(90)p 0.0236 0.0894 0.6179 TeXcolorrgb 3573 2422 a SDict begin H.R end 3573 2422 a 3573 2484 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.90) cvn H.B /ANN pdfmark end 3573 2484 a Black 1954 2597 a Ft(RiemannRochSpaceBa)q (sis)q(P1)g FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 3112 2599 a SDict begin H.S end 3112 2599 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(91)p 0.0236 0.0894 0.6179 TeXcolorrgb 3202 2535 a SDict begin H.R end 3202 2535 a 3202 2597 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.91) cvn H.B /ANN pdfmark end 3202 2597 a Black 1954 2710 a Ft(RootsCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2417 2711 a SDict begin H.S end 2417 2711 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(76)p 0.0236 0.0894 0.6179 TeXcolorrgb 2507 2648 a SDict begin H.R end 2507 2648 a 2507 2710 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.76) cvn H.B /ANN pdfmark end 2507 2710 a Black 1954 2823 a Ft(RootsOfCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2509 2824 a SDict begin H.S end 2509 2824 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(43)p 0.0236 0.0894 0.6179 TeXcolorrgb 2599 2761 a SDict begin H.R end 2599 2761 a 2599 2823 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.43) cvn H.B /ANN pdfmark end 2599 2823 a Black 1954 2936 a Ft(RotateList)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2463 2936 a SDict begin H.S end 2463 2936 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(142)p 0.0236 0.0894 0.6179 TeXcolorrgb 2598 2874 a SDict begin H.R end 2598 2874 a 2598 2936 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.142) cvn H.B /ANN pdfmark end 2598 2936 a Black 1954 3132 a FK(self)24 b(complementary)i(code,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2913 3133 a SDict begin H.S end 2913 3133 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(34)p 0.0236 0.0894 0.6179 TeXcolorrgb 3003 3070 a SDict begin H.R end 3003 3070 a 3003 3132 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.34) cvn H.B /ANN pdfmark end 3003 3132 a Black 1954 3245 a FK(self-dual,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2318 3246 a SDict begin H.S end 2318 3246 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(106)p 0.0236 0.0894 0.6179 TeXcolorrgb 2453 3183 a SDict begin H.R end 2453 3183 a 2453 3245 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.106) cvn H.B /ANN pdfmark end 2453 3245 a Black 1954 3357 a FK(self-orthogonal,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2555 3358 a SDict begin H.S end 2555 3358 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(34)p 0.0236 0.0894 0.6179 TeXcolorrgb 2645 3295 a SDict begin H.R end 2645 3295 a 2645 3357 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.34) cvn H.B /ANN pdfmark end 2645 3357 a Black 1954 3470 a Ft(SetCoveringRadius)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2788 3472 a SDict begin H.S end 2788 3472 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(49)p 0.0236 0.0894 0.6179 TeXcolorrgb 2878 3408 a SDict begin H.R end 2878 3408 a 2878 3470 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.49) cvn H.B /ANN pdfmark end 2878 3470 a Black 1954 3583 a Ft(ShortenedCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2602 3584 a SDict begin H.S end 2602 3584 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(103)p 0.0236 0.0894 0.6179 TeXcolorrgb 2737 3521 a SDict begin H.R end 2737 3521 a 2737 3583 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.103) cvn H.B /ANN pdfmark end 2737 3583 a Black 1954 3696 a Ft(Size)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2185 3697 a SDict begin H.S end 2185 3697 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(38)p 0.0236 0.0894 0.6179 TeXcolorrgb 2275 3634 a SDict begin H.R end 2275 3634 a 2275 3696 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.38) cvn H.B /ANN pdfmark end 2275 3696 a Black 1954 3809 a FK(size,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2141 3810 a SDict begin H.S end 2141 3810 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(27)p 0.0236 0.0894 0.6179 TeXcolorrgb 2231 3747 a SDict begin H.R end 2231 3747 a 2231 3809 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.27) cvn H.B /ANN pdfmark end 2231 3809 a Black 1954 3922 a Ft(SolveLinearSystem)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2788 3922 a SDict begin H.S end 2788 3922 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(144)p 0.0236 0.0894 0.6179 TeXcolorrgb 2923 3860 a SDict begin H.R end 2923 3860 a 2923 3922 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.144) cvn H.B /ANN pdfmark end 2923 3922 a Black 1954 4035 a Ft(SphereContent)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2602 4036 a SDict begin H.S end 2602 4036 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(138)p 0.0236 0.0894 0.6179 TeXcolorrgb 2737 3973 a SDict begin H.R end 2737 3973 a 2737 4035 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.138) cvn H.B /ANN pdfmark end 2737 4035 a Black 1954 4148 a Ft(SrivastavaCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2649 4149 a SDict begin H.S end 2649 4149 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(68)p 0.0236 0.0894 0.6179 TeXcolorrgb 2739 4086 a SDict begin H.R end 2739 4086 a 2739 4148 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.68) cvn H.B /ANN pdfmark end 2739 4148 a Black 1954 4261 a FK(standard)g(form,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2507 4262 a SDict begin H.S end 2507 4262 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(131)p 0.0236 0.0894 0.6179 TeXcolorrgb 2642 4199 a SDict begin H.R end 2642 4199 a 2642 4261 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.131) cvn H.B /ANN pdfmark end 2642 4261 a Black 1954 4374 a Ft(StandardArray)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2602 4375 a SDict begin H.S end 2602 4375 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(58)p 0.0236 0.0894 0.6179 TeXcolorrgb 2692 4312 a SDict begin H.R end 2692 4312 a 2692 4374 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.58) cvn H.B /ANN pdfmark end 2692 4374 a Black 1954 4487 a Ft(StandardFormCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2741 4488 a SDict begin H.S end 2741 4488 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(108)p 0.0236 0.0894 0.6179 TeXcolorrgb 2876 4425 a SDict begin H.R end 2876 4425 a 2876 4487 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.108) cvn H.B /ANN pdfmark end 2876 4487 a Black 1954 4599 a FK(strength,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2292 4600 a SDict begin H.S end 2292 4600 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(127)p 0.0236 0.0894 0.6179 TeXcolorrgb 2427 4537 a SDict begin H.R end 2427 4537 a 2427 4599 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.127) cvn H.B /ANN pdfmark end 2427 4599 a Black 1954 4712 a Ft(String)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2278 4713 a SDict begin H.S end 2278 4713 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(40)p 0.0236 0.0894 0.6179 TeXcolorrgb 2368 4650 a SDict begin H.R end 2368 4650 a 2368 4712 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.40) cvn H.B /ANN pdfmark end 2368 4712 a Black 1954 4825 a Ft(Support)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2324 4826 a SDict begin H.S end 2324 4826 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(25)p 0.0236 0.0894 0.6179 TeXcolorrgb 2414 4763 a SDict begin H.R end 2414 4763 a 2414 4825 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.25) cvn H.B /ANN pdfmark end 2414 4825 a Black 1954 4938 a FK(support,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2272 4939 a SDict begin H.S end 2272 4939 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(87)p 0.0236 0.0894 0.6179 TeXcolorrgb 2362 4876 a SDict begin H.R end 2362 4876 a 2362 4938 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.87) cvn H.B /ANN pdfmark end 2362 4938 a Black 1954 5051 a Ft(SylvesterMat)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2556 5053 a SDict begin H.S end 2556 5053 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(129)p 0.0236 0.0894 0.6179 TeXcolorrgb 2691 4989 a SDict begin H.R end 2691 4989 a 2691 5051 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.129) cvn H.B /ANN pdfmark end 2691 5051 a Black 1954 5164 a Ft(Syndrome)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2370 5165 a SDict begin H.S end 2370 5165 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(57)p 0.0236 0.0894 0.6179 TeXcolorrgb 2460 5102 a SDict begin H.R end 2460 5102 a 2460 5164 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.57) cvn H.B /ANN pdfmark end 2460 5164 a Black 1954 5277 a FK(syndrome)f(table,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2557 5278 a SDict begin H.S end 2557 5278 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(57)p 0.0236 0.0894 0.6179 TeXcolorrgb 2647 5215 a SDict begin H.R end 2647 5215 a 2647 5277 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.57) cvn H.B /ANN pdfmark end 2647 5277 a Black 1954 5390 a Ft(SyndromeTable)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2602 5391 a SDict begin H.S end 2602 5391 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(57)p 0.0236 0.0894 0.6179 TeXcolorrgb 2692 5328 a SDict begin H.R end 2692 5328 a 2692 5390 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.57) cvn H.B /ANN pdfmark end 2692 5390 a Black 1954 5586 a Ft(TernaryGolayCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 2741 5587 a SDict begin H.S end 2741 5587 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(74)p 0.0236 0.0894 0.6179 TeXcolorrgb 2831 5524 a SDict begin H.R end 2831 5524 a 2831 5586 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.74) cvn H.B /ANN pdfmark end 2831 5586 a Black Black Black eop end end %%Page: 153 153 TeXDict begin HPSdict begin 153 152 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a Black 0 TeXcolorgray 75 100 a SDict begin H.S end 75 100 a 0 TeXcolorgray 0 TeXcolorgray 75 100 a SDict begin H.R end 75 100 a 75 100 a SDict begin [ /View [/XYZ H.V] /Dest (page.153) cvn H.B /DEST pdfmark end 75 100 a Black 1662 w FE(GU)n(A)l(V)-5 b(A)1678 b FK(153)p Black 75 399 a Ft(TombakCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 584 400 a SDict begin H.S end 584 400 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(72)p 0.0236 0.0894 0.6179 TeXcolorrgb 674 337 a SDict begin H.R end 674 337 a 674 399 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.72) cvn H.B /ANN pdfmark end 674 399 a Black 75 511 a Ft(ToricCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 538 512 a SDict begin H.S end 538 512 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(84)p 0.0236 0.0894 0.6179 TeXcolorrgb 628 449 a SDict begin H.R end 628 449 a 628 511 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.84) cvn H.B /ANN pdfmark end 628 511 a Black 75 624 a Ft(ToricPoints)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 630 625 a SDict begin H.S end 630 625 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(84)p 0.0236 0.0894 0.6179 TeXcolorrgb 720 562 a SDict begin H.R end 720 562 a 720 624 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.84) cvn H.B /ANN pdfmark end 720 624 a Black 75 737 a Ft(TraceCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 538 738 a SDict begin H.S end 538 738 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(106)p 0.0236 0.0894 0.6179 TeXcolorrgb 673 675 a SDict begin H.R end 673 675 a 673 737 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.106) cvn H.B /ANN pdfmark end 673 737 a Black 75 850 a Ft(TreatAsPoly)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 630 850 a SDict begin H.S end 630 850 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(24)p 0.0236 0.0894 0.6179 TeXcolorrgb 720 788 a SDict begin H.R end 720 788 a 720 850 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.24) cvn H.B /ANN pdfmark end 720 850 a Black 75 963 a Ft(TreatAsVector)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 723 963 a SDict begin H.S end 723 963 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(24)p 0.0236 0.0894 0.6179 TeXcolorrgb 813 901 a SDict begin H.R end 813 901 a 813 963 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.24) cvn H.B /ANN pdfmark end 813 963 a Black 75 1159 a Ft(UnionCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 538 1159 a SDict begin H.S end 538 1159 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(111)p 0.0236 0.0894 0.6179 TeXcolorrgb 673 1097 a SDict begin H.R end 673 1097 a 673 1159 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.111) cvn H.B /ANN pdfmark end 673 1159 a Black 75 1272 a Ft(UpperBound)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 584 1273 a SDict begin H.S end 584 1273 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(117)p 0.0236 0.0894 0.6179 TeXcolorrgb 719 1210 a SDict begin H.R end 719 1210 a 719 1272 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.117) cvn H.B /ANN pdfmark end 719 1272 a Black 75 1385 a Ft(UpperBoundCovering)q(Rad)q (ius)q(Cyc)q(li)q(cCo)q(de)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1697 1386 a SDict begin H.S end 1697 1386 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(128)p 0.0236 0.0894 0.6179 TeXcolorrgb 1832 1323 a SDict begin H.R end 1832 1323 a 1832 1385 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.128) cvn H.B /ANN pdfmark end 1832 1385 a Black 75 1498 a Ft(UpperBoundCovering)q(Rad)q(ius)q(Del)q(sa)q(rte)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1604 1499 a SDict begin H.S end 1604 1499 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(127)p 0.0236 0.0894 0.6179 TeXcolorrgb 1739 1436 a SDict begin H.R end 1739 1436 a 1739 1498 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.127) cvn H.B /ANN pdfmark end 1739 1498 a Black 75 1611 a Ft(UpperBoundCovering)q(Rad)q (ius)q(Gri)q(es)q(mer)q(Lik)q(e)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 407 1725 a SDict begin H.S end 407 1725 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(127)p 0.0236 0.0894 0.6179 TeXcolorrgb 542 1662 a SDict begin H.R end 542 1662 a 542 1724 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.127) cvn H.B /ANN pdfmark end 542 1724 a Black 75 1836 a Ft(UpperBoundCovering)q(Rad)q(ius)q(Red)q(un)q(dan)q(cy)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1697 1837 a SDict begin H.S end 1697 1837 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(126)p 0.0236 0.0894 0.6179 TeXcolorrgb 1832 1774 a SDict begin H.R end 1832 1774 a 1832 1836 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.126) cvn H.B /ANN pdfmark end 1832 1836 a Black 75 1949 a Ft(UpperBoundCovering)q(Rad)q (ius)q(Str)q(en)q(gth)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1604 1950 a SDict begin H.S end 1604 1950 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(127)p 0.0236 0.0894 0.6179 TeXcolorrgb 1739 1887 a SDict begin H.R end 1739 1887 a 1739 1949 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.127) cvn H.B /ANN pdfmark end 1739 1949 a Black 75 2062 a Ft(UpperBoundElias)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 816 2063 a SDict begin H.S end 816 2063 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(116)p 0.0236 0.0894 0.6179 TeXcolorrgb 951 2000 a SDict begin H.R end 951 2000 a 951 2062 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.116) cvn H.B /ANN pdfmark end 951 2062 a Black 75 2175 a Ft (UpperBoundGriesmer)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 955 2176 a SDict begin H.S end 955 2176 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(117)p 0.0236 0.0894 0.6179 TeXcolorrgb 1090 2113 a SDict begin H.R end 1090 2113 a 1090 2175 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.117) cvn H.B /ANN pdfmark end 1090 2175 a Black 75 2288 a Ft(UpperBoundHamming)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 909 2289 a SDict begin H.S end 909 2289 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(115)p 0.0236 0.0894 0.6179 TeXcolorrgb 1044 2226 a SDict begin H.R end 1044 2226 a 1044 2288 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.115) cvn H.B /ANN pdfmark end 1044 2288 a Black 75 2401 a Ft(UpperBoundJohnson)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 909 2402 a SDict begin H.S end 909 2402 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(115)p 0.0236 0.0894 0.6179 TeXcolorrgb 1044 2339 a SDict begin H.R end 1044 2339 a 1044 2401 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.115) cvn H.B /ANN pdfmark end 1044 2401 a Black 75 2514 a Ft(UpperBoundMinimumD)q(ist)q(anc)q(e)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1280 2516 a SDict begin H.S end 1280 2516 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(119)p 0.0236 0.0894 0.6179 TeXcolorrgb 1415 2452 a SDict begin H.R end 1415 2452 a 1415 2514 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.119) cvn H.B /ANN pdfmark end 1415 2514 a Black 75 2627 a Ft(UpperBoundPlotkin)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 909 2628 a SDict begin H.S end 909 2628 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(116)p 0.0236 0.0894 0.6179 TeXcolorrgb 1044 2565 a SDict begin H.R end 1044 2565 a 1044 2627 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.116) cvn H.B /ANN pdfmark end 1044 2627 a Black 75 2740 a Ft(UpperBoundSingleto)q(n)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1001 2741 a SDict begin H.S end 1001 2741 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(115)p 0.0236 0.0894 0.6179 TeXcolorrgb 1136 2678 a SDict begin H.R end 1136 2678 a 1136 2740 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.115) cvn H.B /ANN pdfmark end 1136 2740 a Black 75 2853 a Ft(UUVCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 445 2855 a SDict begin H.S end 445 2855 a 0.0236 0.0894 0.6179 TeXcolorrgb -2 x FK(109)p 0.0236 0.0894 0.6179 TeXcolorrgb 580 2791 a SDict begin H.R end 580 2791 a 580 2853 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.109) cvn H.B /ANN pdfmark end 580 2853 a Black 75 3049 a Ft(VandermondeMat)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 770 3050 a SDict begin H.S end 770 3050 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(130)p 0.0236 0.0894 0.6179 TeXcolorrgb 905 2987 a SDict begin H.R end 905 2987 a 905 3049 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.130) cvn H.B /ANN pdfmark end 905 3049 a Black 75 3161 a Ft(VectorCodeword)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 770 3162 a SDict begin H.S end 770 3162 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(23)p 0.0236 0.0894 0.6179 TeXcolorrgb 860 3099 a SDict begin H.R end 860 3099 a 860 3161 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.23) cvn H.B /ANN pdfmark end 860 3161 a Black 75 3274 a Ft(VerticalConversion)q(Fie)q (ldM)q(at)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1326 3275 a SDict begin H.S end 1326 3275 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(132)p 0.0236 0.0894 0.6179 TeXcolorrgb 1461 3212 a SDict begin H.R end 1461 3212 a 1461 3274 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.132) cvn H.B /ANN pdfmark end 1461 3274 a Black 75 3470 a FK(weight)24 b(enumerator)i(polynomial,)p 0.0236 0.0894 0.6179 TeXcolorrgb 1242 3471 a SDict begin H.S end 1242 3471 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(136)p 0.0236 0.0894 0.6179 TeXcolorrgb 1377 3408 a SDict begin H.R end 1377 3408 a 1377 3470 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.136) cvn H.B /ANN pdfmark end 1377 3470 a Black 75 3583 a Ft(WeightCodeword)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 770 3584 a SDict begin H.S end 770 3584 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(26)p 0.0236 0.0894 0.6179 TeXcolorrgb 860 3521 a SDict begin H.R end 860 3521 a 860 3583 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.26) cvn H.B /ANN pdfmark end 860 3583 a Black 75 3696 a Ft(WeightDistribution)q FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 955 3697 a SDict begin H.S end 955 3697 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(50)p 0.0236 0.0894 0.6179 TeXcolorrgb 1045 3634 a SDict begin H.R end 1045 3634 a 1045 3696 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.50) cvn H.B /ANN pdfmark end 1045 3696 a Black 75 3809 a Ft(WeightHistogram)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 816 3809 a SDict begin H.S end 816 3809 a 0.0236 0.0894 0.6179 TeXcolorrgb FK(141)p 0.0236 0.0894 0.6179 TeXcolorrgb 951 3747 a SDict begin H.R end 951 3747 a 951 3809 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.141) cvn H.B /ANN pdfmark end 951 3809 a Black 75 3922 a Ft(WeightVecFFE)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 677 3923 a SDict begin H.S end 677 3923 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(15)p 0.0236 0.0894 0.6179 TeXcolorrgb 767 3860 a SDict begin H.R end 767 3860 a 767 3922 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.15) cvn H.B /ANN pdfmark end 767 3922 a Black 75 4035 a Ft(WholeSpaceCode)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 770 4036 a SDict begin H.S end 770 4036 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(80)p 0.0236 0.0894 0.6179 TeXcolorrgb 860 3973 a SDict begin H.R end 860 3973 a 860 4035 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.80) cvn H.B /ANN pdfmark end 860 4035 a Black 75 4148 a Ft(WordLength)p FK(,)p 0.0236 0.0894 0.6179 TeXcolorrgb 584 4149 a SDict begin H.S end 584 4149 a 0.0236 0.0894 0.6179 TeXcolorrgb -1 x FK(43)p 0.0236 0.0894 0.6179 TeXcolorrgb 674 4086 a SDict begin H.R end 674 4086 a 674 4148 a SDict begin [ /Color [1 0 0] /H /I /Border [0 0 0] /Subtype /Link /Dest (page.43) cvn H.B /ANN pdfmark end 674 4148 a Black Black Black Black Black eop end end %%Trailer endguava-3.6/doc/chap5.html0000644017361200001450000043775411027015742015020 0ustar tabbottcrontab GAP (guava) - Chapter 5: Generating Codes
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

5. Generating Codes

5. Generating Codes

In this chapter we describe functions for generating codes.

Section 5.1 describes functions for generating unrestricted codes.

Section 5.2 describes functions for generating linear codes.

Section 5.3 describes functions for constructing certain covering codes, such as the Gabidulin codes.

Section 5.4 describes functions for constructing the Golay codes.

Section 5.5 describes functions for generating cyclic codes.

Section 5.6 describes functions for generating codes as the image of an evaluation map applied to a space of functions. For example, generalized Reed-Solomon codes and toric codes are described there.

Section 5.7 describes functions for generating algebraic geometry codes.

Section 5.8 describes functions for constructing low-density parity-check (LDPC) codes.

5.1 Generating Unrestricted Codes

In this section we start with functions that creating code from user defined matrices or special matrices (see ElementsCode (5.1-1), HadamardCode (5.1-2), ConferenceCode (5.1-3) and MOLSCode (5.1-4)). These codes are unrestricted codes; they may later be discovered to be linear or cyclic.

The next functions generate random codes (see RandomCode (5.1-5)) and the Nordstrom-Robinson code (see NordstromRobinsonCode (5.1-6)), respectively.

Finally, we describe two functions for generating Greedy codes. These are codes that contructed by gathering codewords from a space (see GreedyCode (5.1-7) and LexiCode (5.1-8)).

5.1-1 ElementsCode
> ElementsCode( L[, name], F )( function )

ElementsCode creates an unrestricted code of the list of elements L, in the field F. L must be a list of vectors, strings, polynomials or codewords. name can contain a short description of the code.

If L contains a codeword more than once, it is removed from the list and a GAP set is returned.

gap> M := Z(3)^0 * [ [1, 0, 1, 1], [2, 2, 0, 0], [0, 1, 2, 2] ];;
gap> C := ElementsCode( M, "example code", GF(3) );
a (4,3,1..4)2 example code over GF(3)
gap> MinimumDistance( C );
4
gap> AsSSortedList( C );
[ [ 0 1 2 2 ], [ 1 0 1 1 ], [ 2 2 0 0 ] ]

5.1-2 HadamardCode
> HadamardCode( H[, t] )( function )

The four forms this command can take are HadamardCode(H,t), HadamardCode(H), HadamardCode(n,t), and HadamardCode(n).

In the case when the arguments H and t are both given, HadamardCode returns a Hadamard code of the t^th kind from the Hadamard matrix H In case only H is given, t = 3 is used.

By definition, a Hadamard matrix is a square matrix H with H* H^T = -n* I_n, where n is the size of H. The entries of H are either 1 or -1.

The matrix H is first transformed into a binary matrix A_n by replacing the 1's by 0's and the -1's by 1s).

The Hadamard matrix of the first kind (t=1) is created by using the rows of A_n as elements, after deleting the first column. This is a (n-1, n, n/2) code. We use this code for creating the Hadamard code of the second kind (t=2), by adding all the complements of the already existing codewords. This results in a (n-1, 2n, n/2 -1) code. The third kind (t=3) is created by using the rows of A_n (without cutting a column) and their complements as elements. This way, we have an (n, 2n, n/2)-code. The returned code is generally an unrestricted code, but for n = 2^r, the code is linear.

The command HadamardCode(n,t) returns a Hadamard code with parameter n of the t^th kind. For the command HadamardCode(n), t=3 is used.

When called in these forms, HadamardCode first creates a Hadamard matrix (see HadamardMat (7.3-4)), of size n and then follows the same procedure as described above. Therefore the same restrictions with respect to n as for Hadamard matrices hold.

gap> H4 := [[1,1,1,1],[1,-1,1,-1],[1,1,-1,-1],[1,-1,-1,1]];;
gap> HadamardCode( H4, 1 );
a (3,4,2)1 Hadamard code of order 4 over GF(2)
gap> HadamardCode( H4, 2 );
a (3,8,1)0 Hadamard code of order 4 over GF(2)
gap> HadamardCode( H4 );
a (4,8,2)1 Hadamard code of order 4 over GF(2) 
gap> H4 := [[1,1,1,1],[1,-1,1,-1],[1,1,-1,-1],[1,-1,-1,1]];;
gap> C := HadamardCode( 4 );
a (4,8,2)1 Hadamard code of order 4 over GF(2)
gap> C = HadamardCode( H4 );
true 

5.1-3 ConferenceCode
> ConferenceCode( H )( function )

ConferenceCode returns a code of length n-1 constructed from a symmetric 'conference matrix' H. A conference matrix H is a symmetric matrix of order n, which satisfies H* H^T = ((n-1)* I, with n = 2 mod 4. The rows of frac12(H+I+J), frac12(-H+I+J), plus the zero and all-ones vectors form the elements of a binary non-linear (n-1, 2n, (n-2)/2) code.

GUAVA constructs a symmetric conference matrix of order n+1 (n= 1 mod 4) and uses the rows of that matrix, plus the zero and all-ones vectors, to construct a binary non-linear (n, 2(n+1), (n-1)/2)-code.

gap> H6 := [[0,1,1,1,1,1],[1,0,1,-1,-1,1],[1,1,0,1,-1,-1],
> [1,-1,1,0,1,-1],[1,-1,-1,1,0,1],[1,1,-1,-1,1,0]];;
gap> C1 := ConferenceCode( H6 );
a (5,12,2)1..4 conference code over GF(2)
gap> IsLinearCode( C1 );
false 
gap> C2 := ConferenceCode( 5 );
a (5,12,2)1..4 conference code over GF(2)
gap> AsSSortedList( C2 );
[ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 1 1 ], [ 0 1 1 0 1 ], [ 0 1 1 1 0 ], 
  [ 1 0 0 1 1 ], [ 1 0 1 0 1 ], [ 1 0 1 1 0 ], [ 1 1 0 0 1 ], [ 1 1 0 1 0 ], 
  [ 1 1 1 0 0 ], [ 1 1 1 1 1 ] ]

5.1-4 MOLSCode
> MOLSCode( [n][,]q )( function )

MOLSCode returns an (n, q^2, n-1) code over GF(q). The code is created from n-2 'Mutually Orthogonal Latin Squares' (MOLS) of size q x q. The default for n is 4. GUAVA can construct a MOLS code for n-2 <= q. Here q must be a prime power, q > 2. If there are no n-2 MOLS, an error is signalled.

Since each of the n-2 MOLS is a qx q matrix, we can create a code of size q^2 by listing in each code element the entries that are in the same position in each of the MOLS. We precede each of these lists with the two coordinates that specify this position, making the word length become n.

The MOLS codes are MDS codes (see IsMDSCode (4.3-7)).

gap> C1 := MOLSCode( 6, 5 );
a (6,25,5)3..4 code generated by 4 MOLS of order 5 over GF(5)
gap> mols := List( [1 .. WordLength(C1) - 2 ], function( nr )
>       local ls, el;
>       ls := NullMat( Size(LeftActingDomain(C1)), Size(LeftActingDomain(C1)) );
>       for el in VectorCodeword( AsSSortedList( C1 ) ) do
>          ls[IntFFE(el[1])+1][IntFFE(el[2])+1] := el[nr + 2];
>       od;
>       return ls;
>    end );;
gap> AreMOLS( mols );
true
gap> C2 := MOLSCode( 11 );
a (4,121,3)2 code generated by 2 MOLS of order 11 over GF(11) 

5.1-5 RandomCode
> RandomCode( n, M, F )( function )

RandomCode returns a random unrestricted code of size M with word length n over F. M must be less than or equal to the number of elements in the space GF(q)^n.

The function RandomLinearCode returns a random linear code (see RandomLinearCode (5.2-12)).

gap> C1 := RandomCode( 6, 10, GF(8) );
a (6,10,1..6)4..6 random unrestricted code over GF(8)
gap> MinimumDistance(C1);
3
gap> C2 := RandomCode( 6, 10, GF(8) );
a (6,10,1..6)4..6 random unrestricted code over GF(8)
gap> C1 = C2;
false 

5.1-6 NordstromRobinsonCode
> NordstromRobinsonCode( )( function )

NordstromRobinsonCode returns a Nordstrom-Robinson code, the best code with word length n=16 and minimum distance d=6 over GF(2). This is a non-linear (16, 256, 6) code.

gap> C := NordstromRobinsonCode();
a (16,256,6)4 Nordstrom-Robinson code over GF(2)
gap> OptimalityCode( C );
0 

5.1-7 GreedyCode
> GreedyCode( L, d, F )( function )

GreedyCode returns a Greedy code with design distance d over the finite field F. The code is constructed using the greedy algorithm on the list of vectors L. (The greedy algorithm checks each vector in L and adds it to the code if its distance to the current code is greater than or equal to d. It is obvious that the resulting code has a minimum distance of at least d.

Greedy codes are often linear codes.

The function LexiCode creates a greedy code from a basis instead of an enumerated list (see LexiCode (5.1-8)).

gap> C1 := GreedyCode( Tuples( AsSSortedList( GF(2) ), 5 ), 3, GF(2) );
a (5,4,3..5)2 Greedy code, user defined basis over GF(2)
gap> C2 := GreedyCode( Permuted( Tuples( AsSSortedList( GF(2) ), 5 ),
>                         (1,4) ), 3, GF(2) );
a (5,4,3..5)2 Greedy code, user defined basis over GF(2)
gap> C1 = C2;
false 

5.1-8 LexiCode
> LexiCode( n, d, F )( function )

In this format, Lexicode returns a lexicode with word length n, design distance d over F. The code is constructed using the greedy algorithm on the lexicographically ordered list of all vectors of length n over F. Every time a vector is found that has a distance to the current code of at least d, it is added to the code. This results, obviously, in a code with minimum distance greater than or equal to d.

Another syntax which one can use is LexiCode( B, d, F ). When called in this format, LexiCode uses the basis B instead of the standard basis. B is a matrix of vectors over F. The code is constructed using the greedy algorithm on the list of vectors spanned by B, ordered lexicographically with respect to B.

Note that binary lexicodes are always linear.

gap> C := LexiCode( 4, 3, GF(5) );
a (4,17,3..4)2..4 lexicode over GF(5) 
gap> B := [ [Z(2)^0, 0*Z(2), 0*Z(2)], [Z(2)^0, Z(2)^0, 0*Z(2)] ];;
gap> C := LexiCode( B, 2, GF(2) );
a linear [3,1,2]1..2 lexicode over GF(2) 

The function GreedyCode creates a greedy code that is not restricted to a lexicographical order (see GreedyCode (5.1-7)).

5.2 Generating Linear Codes

In this section we describe functions for constructing linear codes. A linear code always has a generator or check matrix.

The first two functions generate linear codes from the generator matrix (GeneratorMatCode (5.2-1)) or check matrix (CheckMatCode (5.2-3)). All linear codes can be constructed with these functions.

The next functions we describe generate some well-known codes, like Hamming codes (HammingCode (5.2-4)), Reed-Muller codes (ReedMullerCode (5.2-5)) and the extended Golay codes (ExtendedBinaryGolayCode (5.4-2) and ExtendedTernaryGolayCode (5.4-4)).

A large and powerful family of codes are alternant codes. They are obtained by a small modification of the parity check matrix of a BCH code (see AlternantCode (5.2-6), GoppaCode (5.2-7), GeneralizedSrivastavaCode (5.2-8) and SrivastavaCode (5.2-9)).

Finally, we describe a function for generating random linear codes (see RandomLinearCode (5.2-12)).

5.2-1 GeneratorMatCode
> GeneratorMatCode( G[, name], F )( function )

GeneratorMatCode returns a linear code with generator matrix G. G must be a matrix over finite field F. name can contain a short description of the code. The generator matrix is the basis of the elements of the code. The resulting code has word length n, dimension k if G is a k x n-matrix. If GF(q) is the field of the code, the size of the code will be q^k.

If the generator matrix does not have full row rank, the linearly dependent rows are removed. This is done by the GAP function BaseMat and results in an equal code. The generator matrix can be retrieved with the function GeneratorMat (see GeneratorMat (4.7-1)).

gap> G := Z(3)^0 * [[1,0,1,2,0],[0,1,2,1,1],[0,0,1,2,1]];;
gap> C1 := GeneratorMatCode( G, GF(3) );
a linear [5,3,1..2]1..2 code defined by generator matrix over GF(3)
gap> C2 := GeneratorMatCode( IdentityMat( 5, GF(2) ), GF(2) );
a linear [5,5,1]0 code defined by generator matrix over GF(2)
gap> GeneratorMatCode( List( AsSSortedList( NordstromRobinsonCode() ),
> x -> VectorCodeword( x ) ), GF( 2 ) );
a linear [16,11,1..4]2 code defined by generator matrix over GF(2)
# This is the smallest linear code that contains the N-R code 

5.2-2 CheckMatCodeMutable
> CheckMatCodeMutable( H[, name], F )( function )

CheckMatCodeMutable is the same as CheckMatCode except that the check matrix and generator matrix are mutable.

5.2-3 CheckMatCode
> CheckMatCode( H[, name], F )( function )

CheckMatCode returns a linear code with check matrix H. H must be a matrix over Galois field F. [name. can contain a short description of the code. The parity check matrix is the transposed of the nullmatrix of the generator matrix of the code. Therefore, c* H^T = 0 where c is an element of the code. If H is a rx n-matrix, the code has word length n, redundancy r and dimension n-r.

If the check matrix does not have full row rank, the linearly dependent rows are removed. This is done by the GAP function BaseMat. and results in an equal code. The check matrix can be retrieved with the function CheckMat (see CheckMat (4.7-2)).

gap> G := Z(3)^0 * [[1,0,1,2,0],[0,1,2,1,1],[0,0,1,2,1]];;
gap> C1 := CheckMatCode( G, GF(3) );
a linear [5,2,1..2]2..3 code defined by check matrix over GF(3)
gap> CheckMat(C1);
[ [ Z(3)^0, 0*Z(3), Z(3)^0, Z(3), 0*Z(3) ],
  [ 0*Z(3), Z(3)^0, Z(3), Z(3)^0, Z(3)^0 ],
  [ 0*Z(3), 0*Z(3), Z(3)^0, Z(3), Z(3)^0 ] ]
gap> C2 := CheckMatCode( IdentityMat( 5, GF(2) ), GF(2) );
a cyclic [5,0,5]5 code defined by check matrix over GF(2)

5.2-4 HammingCode
> HammingCode( r, F )( function )

HammingCode returns a Hamming code with redundancy r over F. A Hamming code is a single-error-correcting code. The parity check matrix of a Hamming code has all nonzero vectors of length r in its columns, except for a multiplication factor. The decoding algorithm of the Hamming code (see Decode (4.10-1)) makes use of this property.

If q is the size of its field F, the returned Hamming code is a linear [(q^r-1)/(q-1), (q^r-1)/(q-1) - r, 3] code.

gap> C1 := HammingCode( 4, GF(2) );
a linear [15,11,3]1 Hamming (4,2) code over GF(2)
gap> C2 := HammingCode( 3, GF(9) );
a linear [91,88,3]1 Hamming (3,9) code over GF(9) 

5.2-5 ReedMullerCode
> ReedMullerCode( r, k )( function )

ReedMullerCode returns a binary 'Reed-Muller code' R(r, k) with dimension k and order r. This is a code with length 2^k and minimum distance 2^k-r (see for example, section 1.10 in [HP03]). By definition, the r^th order binary Reed-Muller code of length n=2^m, for 0 <= r <= m, is the set of all vectors f, where f is a Boolean function which is a polynomial of degree at most r.

gap> ReedMullerCode( 1, 3 );
a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) 

See GeneralizedReedMullerCode (5.6-3) for a more general construction.

5.2-6 AlternantCode
> AlternantCode( r, Y[, alpha], F )( function )

AlternantCode returns an 'alternant code', with parameters r, Y and alpha (optional). F denotes the (finite) base field. Here, r is the design redundancy of the code. Y and alpha are both vectors of length n from which the parity check matrix is constructed. The check matrix has the form H=([a_i^j y_i]), where 0 <= j<= r-1, 1 <= i<= n, and where [...] is as in VerticalConversionFieldMat (7.3-9)). If no alpha is specified, the vector [1, a, a^2, .., a^n-1] is used, where a is a primitive element of a Galois field F.

gap> Y := [ 1, 1, 1, 1, 1, 1, 1];; a := PrimitiveUnityRoot( 2, 7 );;
gap> alpha := List( [0..6], i -> a^i );;
gap> C := AlternantCode( 2, Y, alpha, GF(8) );
a linear [7,3,3..4]3..4 alternant code over GF(8) 

5.2-7 GoppaCode
> GoppaCode( G, L )( function )

GoppaCode returns a Goppa code C from Goppa polynomial g, having coefficients in a Galois Field GF(q). L must be a list of elements in GF(q), that are not roots of g. The word length of the code is equal to the length of L. The parity check matrix has the form H=([a_i^j / G(a_i)])_0 <= j <= deg(g)-1, a_i in L, where a_iin L and [...] is as in VerticalConversionFieldMat (7.3-9), so H has entries in GF(q), q=p^m. It is known that d(C)>= deg(g)+1, with a better bound in the binary case provided g has no multiple roots. See Huffman and Pless [HP03] section 13.2.2, and MacWilliams and Sloane [MS83] section 12.3, for more details.

One can also call GoppaCode using the syntax GoppaCode(g,n). When called with parameter n, GUAVA constructs a list L of length n, such that no element of L is a root of g.

This is a special case of an alternant code.

gap> x:=Indeterminate(GF(8),"x");
x
gap> L:=Elements(GF(8));
[ 0*Z(2), Z(2)^0, Z(2^3), Z(2^3)^2, Z(2^3)^3, Z(2^3)^4, Z(2^3)^5, Z(2^3)^6 ]
gap> g:=x^2+x+1;
x^2+x+Z(2)^0
gap> C:=GoppaCode(g,L);
a linear [8,2,5]3 Goppa code over GF(2)
gap> xx := Indeterminate( GF(2), "xx" );; 
gap> gg := xx^2 + xx + 1;; L := AsSSortedList( GF(8) );;
gap> C1 := GoppaCode( gg, L );
a linear [8,2,5]3 Goppa code over GF(2) 
gap> y := Indeterminate( GF(2), "y" );; 
gap> h := y^2 + y + 1;;
gap> C2 := GoppaCode( h, 8 );
a linear [8,2,5]3 Goppa code over GF(2) 
gap> C1=C2;
true
gap> C=C1;
true

5.2-8 GeneralizedSrivastavaCode
> GeneralizedSrivastavaCode( a, w, z[, t], F )( function )

GeneralizedSrivastavaCode returns a generalized Srivastava code with parameters a, w, z, t. a = a_1, ..., a_n and w = w_1, ..., w_s are lists of n+s distinct elements of F=GF(q^m), z is a list of length n of nonzero elements of GF(q^m). The parameter t determines the designed distance: d >= st + 1. The check matrix of this code is the form

H=([\frac{z_i}{(a_i - w_j)^k}]),

1<= k<= t, where [...] is as in VerticalConversionFieldMat (7.3-9). We use this definition of H to define the code. The default for t is 1. The original Srivastava codes (see SrivastavaCode (5.2-9)) are a special case t=1, z_i=a_i^mu, for some mu.

gap> a := Filtered( AsSSortedList( GF(2^6) ), e -> e in GF(2^3) );;
gap> w := [ Z(2^6) ];; z := List( [1..8], e -> 1 );;
gap> C := GeneralizedSrivastavaCode( a, w, z, 1, GF(64) );
a linear [8,2,2..5]3..4 generalized Srivastava code over GF(2) 

5.2-9 SrivastavaCode
> SrivastavaCode( a, w[, mu], F )( function )

SrivastavaCode returns a Srivastava code with parameters a, w (and optionally mu). a = a_1, ..., a_n and w = w_1, ..., w_s are lists of n+s distinct elements of F=GF(q^m). The default for mu is 1. The Srivastava code is a generalized Srivastava code, in which z_i = a_i^mu for some mu and t=1.

J. N. Srivastava introduced this code in 1967, though his work was not published. See Helgert [Hel72] for more details on the properties of this code. Related reference: G. Roelofsen, On Goppa and Generalized Srivastava Codes PhD thesis, Dept. Math. and Comp. Sci., Eindhoven Univ. of Technology, the Netherlands, 1982.

gap> a := AsSSortedList( GF(11) ){[2..8]};;
gap> w := AsSSortedList( GF(11) ){[9..10]};;
gap> C := SrivastavaCode( a, w, 2, GF(11) );
a linear [7,5,3]2 Srivastava code over GF(11)
gap> IsMDSCode( C );
true    # Always true if F is a prime field 

5.2-10 CordaroWagnerCode
> CordaroWagnerCode( n )( function )

CordaroWagnerCode returns a binary Cordaro-Wagner code. This is a code of length n and dimension 2 having the best possible minimum distance d. This code is just a little bit less trivial than RepetitionCode (see RepetitionCode (5.5-13)).

gap> C := CordaroWagnerCode( 11 );
a linear [11,2,7]5 Cordaro-Wagner code over GF(2)
gap> AsSSortedList(C);                 
[ [ 0 0 0 0 0 0 0 0 0 0 0 ], [ 0 0 0 0 1 1 1 1 1 1 1 ], 
  [ 1 1 1 1 0 0 0 1 1 1 1 ], [ 1 1 1 1 1 1 1 0 0 0 0 ] ]

5.2-11 FerreroDesignCode
> FerreroDesignCode( P, m )( function )

Requires the GAP package SONATA

A group K together with a group of automorphism H of K such that the semidirect product KH is a Frobenius group with complement H is called a Ferrero pair (K, H) in SONATA. Take a Frobenius (G,+) group with kernel K and complement H. Consider the design D with point set K and block set a^H + b | a, b in K, a not= 0. Here a^H denotes the orbit of a under conjugation by elements of H. Every planar near-ring design of type "*" can be obtained in this way from groups. These designs (from a Frobenius kernel of order v and a Frobenius complement of order k) have v(v-1)/k distinct blocks and they are all of size k. Moreover each of the v points occurs in exactly v-1 distinct blocks. Hence the rows and the columns of the incidence matrix M of the design are always of constant weight.

FerreroDesignCode constructs binary linear code arising from the incdence matrix of a design associated to a "Ferrero pair" arising from a fixed-point-free (fpf) automorphism groups and Frobenius group.

INPUT: P is a list of prime powers describing an abelian group G. m > 0 is an integer such that G admits a cyclic fpf automorphism group of size m. This means that for all q = p^k in P, OrderMod(p, m) must divide q (see the SONATA documentation for FpfAutomorphismGroupsCyclic).

OUTPUT: The binary linear code whose generator matrix is the incidence matrix of a design associated to a "Ferrero pair" arising from the fixed-point-free (fpf) automorphism group of G. The pair (H,K) is called a Ferraro pair and the semidirect product KH is a Frobenius group with complement H.

AUTHORS: Peter Mayr and David Joyner

gap> G:=AbelianGroup([5,5] );
 [ pc group of size 25 with 2 generators ]
gap> FpfAutomorphismGroupsMaxSize( G );
[ 24, 2 ]
gap> L:=FpfAutomorphismGroupsCyclic( [5,5], 3 );
[ [ [ f1, f2 ] -> [ f1*f2^2, f1*f2^3 ] ],
  [ pc group of size 25 with 2 generators ] ]
gap> D := DesignFromFerreroPair( L[2], Group(L[1][1]), "*" );
 [ a 2 - ( 25, 3, 2 ) nearring generated design ]
gap> M:=IncidenceMat( D );; Length(M); Length(TransposedMat(M));
25
200
gap> C1:=GeneratorMatCode(M*Z(2),GF(2));
a linear [200,25,1..24]62..100 code defined by generator matrix over GF(2)
gap> MinimumDistance(C1);
24
gap> C2:=FerreroDesignCode( [5,5],3);
a linear [200,25,1..24]62..100 code defined by generator matrix over GF(2)
gap> C1=C2;
true

5.2-12 RandomLinearCode
> RandomLinearCode( n, k, F )( function )

RandomLinearCode returns a random linear code with word length n, dimension k over field F. The method used is to first construct a kx n matrix of the block form (I,A), where I is a kx k identity matrix and A is a kx (n-k) matrix constructed using Random(F) repeatedly. Then the columns are permuted using a randomly selected element of SymmetricGroup(n).

To create a random unrestricted code, use RandomCode (see RandomCode (5.1-5)).

gap> C := RandomLinearCode( 15, 4, GF(3) );
a  [15,4,?] randomly generated code over GF(3)
gap> Display(C);
a linear [15,4,1..6]6..10 random linear code over GF(3)

The method GUAVA chooses to output the result of a RandomLinearCode command is different than other codes. For example, the bounds on the minimum distance is not displayed. Howeer, you can use the Display command to print this information. This new display method was added in version 1.9 to speed up the command (if n is about 80 and k about 40, for example, the time it took to look up and/or calculate the bounds on the minimum distance was too long).

5.2-13 OptimalityCode
> OptimalityCode( C )( function )

OptimalityCode returns the difference between the smallest known upper bound and the actual size of the code. Note that the value of the function UpperBound is not always equal to the actual upper bound A(n,d) thus the result may not be equal to 0 even if the code is optimal!

OptimalityLinearCode is similar but applies only to linear codes.

5.2-14 BestKnownLinearCode
> BestKnownLinearCode( n, k, F )( function )

BestKnownLinearCode returns the best known (as of 11 May 2006) linear code of length n, dimension k over field F. The function uses the tables described in section BoundsMinimumDistance (7.1-13) to construct this code.

This command can also be called using the syntax BestKnownLinearCode( rec ), where rec must be a record containing the fields `lowerBound', `upperBound' and `construction'. It uses the information in this field to construct a code. This form is meant to be used together with the function BoundsMinimumDistance (see BoundsMinimumDistance (7.1-13)), if the bounds are already calculated.

gap> C1 := BestKnownLinearCode( 23, 12, GF(2) );
a linear [23,12,7]3 punctured code
gap> C1 = BinaryGolayCode();
false     # it's constructed differently
gap> C1 := BestKnownLinearCode( 23, 12, GF(2) );
a linear [23,12,7]3 punctured code
gap> G1 := MutableCopyMat(GeneratorMat(C1));;
gap> PutStandardForm(G1);
()
gap> Display(G1);
 1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1
 . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . .
 . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1
 . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 .
 . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . 1
 . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 1
 . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1
 . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . .
 . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 .
 . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 .
 . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 1
 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1
gap> C2 := BinaryGolayCode();
a cyclic [23,12,7]3 binary Golay code over GF(2)
gap> G2 := MutableCopyMat(GeneratorMat(C2));;
gap> PutStandardForm(G2);
()
gap> Display(G2);
 1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1
 . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . 1
 . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1
 . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 1
 . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . .
 . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 .
 . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1
 . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . .
 . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 .
 . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1
 . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 .
 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1
## Despite their generator matrices are different, they are equivalent codes, see below.
gap> IsEquivalent(C1,C2);
true
gap> CodeIsomorphism(C1,C2);
(4,14,6,12,5)(7,17,18,11,19)(8,22,13,21,16)(10,23,15,20)
gap> Display( BestKnownLinearCode( 81, 77, GF(4) ) );
a linear [81,77,3]2..3 shortened code of
a linear [85,81,3]1 Hamming (4,4) code over GF(4)
gap> C:=BestKnownLinearCode(174,72);
a linear [174,72,31..36]26..87 code defined by generator matrix over GF(2)
gap> bounds := BoundsMinimumDistance( 81, 77, GF(4) );
rec( n := 81, k := 77, q := 4, 
  references := rec( Ham := [ "%T this reference is unknown, for more info", 
          "%T contact A.E. Brouwer (aeb@cwi.nl)" ], 
      cap := [ "%T this reference is unknown, for more info", 
          "%T contact A.E. Brouwer (aeb@cwi.nl)" ] ), 
  construction := [ (Operation "ShortenedCode"), 
      [ [ (Operation "HammingCode"), [ 4, 4 ] ], [ 1, 2, 3, 4 ] ] ], 
  lowerBound := 3, 
  lowerBoundExplanation := [ "Lb(81,77)=3, by shortening of:", 
      "Lb(85,81)=3, reference: Ham" ], upperBound := 3, 
  upperBoundExplanation := [ "Ub(81,77)=3, by considering shortening to:", 
      "Ub(18,14)=3, reference: cap" ] )
gap> C := BestKnownLinearCode( bounds );
a linear [81,77,3]2..3 shortened code
gap> C = BestKnownLinearCode(81, 77, GF(4) );
true

5.3 Gabidulin Codes

These five binary, linear codes are derived from an article by Gabidulin, Davydov and Tombak [GDT91]. All these codes are defined by check matrices. Exact definitions can be found in the article. The Gabidulin code, the enlarged Gabidulin code, the Davydov code, the Tombak code, and the enlarged Tombak code, correspond with theorem 1, 2, 3, 4, and 5, respectively in the article.

Like the Hamming codes, these codes have fixed minimum distance and covering radius, but can be arbitrarily long.

5.3-1 GabidulinCode
> GabidulinCode( m, w1, w2 )( function )

GabidulinCode yields a code of length 5 . 2^m-2-1, redundancy 2m-1, minimum distance 3 and covering radius 2. w1 and w2 should be elements of GF(2^m-2).

5.3-2 EnlargedGabidulinCode
> EnlargedGabidulinCode( m, w1, w2, e )( function )

EnlargedGabidulinCode yields a code of length 7. 2^m-2-2, redundancy 2m, minimum distance 3 and covering radius 2. w1 and w2 are elements of GF(2^m-2). e is an element of GF(2^m).

5.3-3 DavydovCode
> DavydovCode( r, v, ei, ej )( function )

DavydovCode yields a code of length 2^v + 2^r-v - 3, redundancy r, minimum distance 4 and covering radius 2. v is an integer between 2 and r-2. ei and ej are elements of GF(2^v) and GF(2^r-v), respectively.

5.3-4 TombakCode
> TombakCode( m, e, beta, gamma, w1, w2 )( function )

TombakCode yields a code of length 15 * 2^m-3 - 3, redundancy 2m, minimum distance 4 and covering radius 2. e is an element of GF(2^m). beta and gamma are elements of GF(2^m-1). w1 and w2 are elements of GF(2^m-3).

5.3-5 EnlargedTombakCode
> EnlargedTombakCode( m, e, beta, gamma, w1, w2, u )( function )

EnlargedTombakCode yields a code of length 23 * 2^m-4 - 3, redundancy 2m-1, minimum distance 4 and covering radius 2. The parameters m, e, beta, gamma, w1 and w2 are defined as in TombakCode. u is an element of GF(2^m-1).

gap> GabidulinCode( 4, Z(4)^0, Z(4)^1 );
a linear [19,12,3]2 Gabidulin code (m=4) over GF(2)
gap> EnlargedGabidulinCode( 4, Z(4)^0, Z(4)^1, Z(16)^11 );
a linear [26,18,3]2 enlarged Gabidulin code (m=4) over GF(2)
gap> DavydovCode( 6, 3, Z(8)^1, Z(8)^5 );
a linear [13,7,4]2 Davydov code (r=6, v=3) over GF(2)
gap> TombakCode( 5, Z(32)^6, Z(16)^14, Z(16)^10, Z(4)^0, Z(4)^1 );
a linear [57,47,4]2 Tombak code (m=5) over GF(2)
gap> EnlargedTombakCode( 6, Z(32)^6, Z(16)^14, Z(16)^10,
> Z(4)^0, Z(4)^0, Z(32)^23 );
a linear [89,78,4]2 enlarged Tombak code (m=6) over GF(2)

5.4 Golay Codes

" The Golay code is probably the most important of all codes for both practical and theoretical reasons. " ([MS83], pg. 64). Though born in Switzerland, M. J. E. Golay (1902-1989) worked for the US Army Labs for most of his career. For more information on his life, see his obit in the June 1990 IEEE Information Society Newsletter.

5.4-1 BinaryGolayCode
> BinaryGolayCode( )( function )

BinaryGolayCode returns a binary Golay code. This is a perfect [23,12,7] code. It is also cyclic, and has generator polynomial g(x)=1+x^2+x^4+x^5+x^6+x^10+x^11. Extending it results in an extended Golay code (see ExtendedBinaryGolayCode (5.4-2)). There's also the ternary Golay code (see TernaryGolayCode (5.4-3)).

gap> C:=BinaryGolayCode();
a cyclic [23,12,7]3 binary Golay code over GF(2)
gap> ExtendedBinaryGolayCode() = ExtendedCode(BinaryGolayCode());
true
gap> IsPerfectCode(C);
true 
gap> IsCyclicCode(C);
true

5.4-2 ExtendedBinaryGolayCode
> ExtendedBinaryGolayCode( )( function )

ExtendedBinaryGolayCode returns an extended binary Golay code. This is a [24,12,8] code. Puncturing in the last position results in a perfect binary Golay code (see BinaryGolayCode (5.4-1)). The code is self-dual.

gap> C := ExtendedBinaryGolayCode();
a linear [24,12,8]4 extended binary Golay code over GF(2)
gap> IsSelfDualCode(C);
true
gap> P := PuncturedCode(C);
a linear [23,12,7]3 punctured code
gap> P = BinaryGolayCode();
true 
gap> IsCyclicCode(C);
false

5.4-3 TernaryGolayCode
> TernaryGolayCode( )( function )

TernaryGolayCode returns a ternary Golay code. This is a perfect [11,6,5] code. It is also cyclic, and has generator polynomial g(x)=2+x^2+2x^3+x^4+x^5. Extending it results in an extended Golay code (see ExtendedTernaryGolayCode (5.4-4)). There's also the binary Golay code (see BinaryGolayCode (5.4-1)).

gap> C:=TernaryGolayCode();
a cyclic [11,6,5]2 ternary Golay code over GF(3)
gap> ExtendedTernaryGolayCode() = ExtendedCode(TernaryGolayCode());
true 
gap> IsCyclicCode(C);
true

5.4-4 ExtendedTernaryGolayCode
> ExtendedTernaryGolayCode( )( function )

ExtendedTernaryGolayCode returns an extended ternary Golay code. This is a [12,6,6] code. Puncturing this code results in a perfect ternary Golay code (see TernaryGolayCode (5.4-3)). The code is self-dual.

gap> C := ExtendedTernaryGolayCode();
a linear [12,6,6]3 extended ternary Golay code over GF(3)
gap> IsSelfDualCode(C);
true
gap> P := PuncturedCode(C);
a linear [11,6,5]2 punctured code
gap> P = TernaryGolayCode();
true 
gap> IsCyclicCode(C);
false

5.5 Generating Cyclic Codes

The elements of a cyclic code C are all multiples of a ('generator') polynomial g(x), where calculations are carried out modulo x^n-1. Therefore, as polynomials in x, the elements always have degree less than n. A cyclic code is an ideal in the ring F[x]/(x^n-1) of polynomials modulo x^n - 1. The unique monic polynomial of least degree that generates C is called the generator polynomial of C. It is a divisor of the polynomial x^n-1.

The check polynomial is the polynomial h(x) with g(x)h(x)=x^n-1. Therefore it is also a divisor of x^n-1. The check polynomial has the property that

c(x)h(x) \equiv 0 \pmod{x^n-1},

for every codeword c(x)in C.

The first two functions described below generate cyclic codes from a given generator or check polynomial. All cyclic codes can be constructed using these functions.

Two of the Golay codes already described are cyclic (see BinaryGolayCode (5.4-1) and TernaryGolayCode (5.4-3)). For example, the GUAVA record for a binary Golay code contains the generator polynomial:

gap> C := BinaryGolayCode();
a cyclic [23,12,7]3 binary Golay code over GF(2)
gap> NamesOfComponents(C);
[ "LeftActingDomain", "GeneratorsOfLeftOperatorAdditiveGroup", "WordLength",
  "GeneratorMat", "GeneratorPol", "Dimension", "Redundancy", "Size", "name",
  "lowerBoundMinimumDistance", "upperBoundMinimumDistance", "WeightDistribution",
  "boundsCoveringRadius", "MinimumWeightOfGenerators", 
  "UpperBoundOptimalMinimumDistance" ]
gap> C!.GeneratorPol;
x_1^11+x_1^10+x_1^6+x_1^5+x_1^4+x_1^2+Z(2)^0

Then functions that generate cyclic codes from a prescribed set of roots of the generator polynomial are described, including the BCH codes (see RootsCode (5.5-3), BCHCode (5.5-4), ReedSolomonCode (5.5-5) and QRCode (5.5-7)).

Finally we describe the trivial codes (see WholeSpaceCode (5.5-11), NullCode (5.5-12), RepetitionCode (5.5-13)), and the command CyclicCodes which lists all cyclic codes (CyclicCodes (5.5-14)).

5.5-1 GeneratorPolCode
> GeneratorPolCode( g, n[, name], F )( function )

GeneratorPolCode creates a cyclic code with a generator polynomial g, word length n, over F. name can contain a short description of the code.

If g is not a divisor of x^n-1, it cannot be a generator polynomial. In that case, a code is created with generator polynomial gcd( g, x^n-1 ), i.e. the greatest common divisor of g and x^n-1. This is a valid generator polynomial that generates the ideal (g). See Generating Cyclic Codes (5.5).

gap> x:= Indeterminate( GF(2) );; P:= x^2+1;
Z(2)^0+x^2
gap> C1 := GeneratorPolCode(P, 7, GF(2));
a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2)
gap> GeneratorPol( C1 );
Z(2)^0+x
gap> C2 := GeneratorPolCode( x+1, 7, GF(2)); 
a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2)
gap> GeneratorPol( C2 );
Z(2)^0+x

5.5-2 CheckPolCode
> CheckPolCode( h, n[, name], F )( function )

CheckPolCode creates a cyclic code with a check polynomial h, word length n, over F. name can contain a short description of the code (as a string).

If h is not a divisor of x^n-1, it cannot be a check polynomial. In that case, a code is created with check polynomial gcd( h, x^n-1 ), i.e. the greatest common divisor of h and x^n-1. This is a valid check polynomial that yields the same elements as the ideal (h). See 5.5.

gap>  x:= Indeterminate( GF(3) );; P:= x^2+2;
-Z(3)^0+x_1^2
gap> H := CheckPolCode(P, 7, GF(3));
a cyclic [7,1,7]4 code defined by check polynomial over GF(3)
gap> CheckPol(H);
-Z(3)^0+x_1
gap> Gcd(P, X(GF(3))^7-1);
-Z(3)^0+x_1

5.5-3 RootsCode
> RootsCode( n, list )( function )

This is the generalization of the BCH, Reed-Solomon and quadratic residue codes (see BCHCode (5.5-4), ReedSolomonCode (5.5-5) and QRCode (5.5-7)). The user can give a length of the code n and a prescribed set of zeros. The argument list must be a valid list of primitive n^th roots of unity in a splitting field GF(q^m). The resulting code will be over the field GF(q). The function will return the largest possible cyclic code for which the list list is a subset of the roots of the code. From this list, GUAVA calculates the entire set of roots.

This command can also be called with the syntax RootsCode( n, list, q ). In this second form, the second argument is a list of integers, ranging from 0 to n-1. The resulting code will be over a field GF(q). GUAVA calculates a primitive n^th root of unity, alpha, in the extension field of GF(q). It uses the set of the powers of alpha in the list as a prescribed set of zeros.

gap> a := PrimitiveUnityRoot( 3, 14 );
Z(3^6)^52
gap> C1 := RootsCode( 14, [ a^0, a, a^3 ] );
a cyclic [14,7,3..6]3..7 code defined by roots over GF(3)
gap> MinimumDistance( C1 );
4
gap> b := PrimitiveUnityRoot( 2, 15 );
Z(2^4)
gap> C2 := RootsCode( 15, [ b, b^2, b^3, b^4 ] );
a cyclic [15,7,5]3..5 code defined by roots over GF(2)
gap> C2 = BCHCode( 15, 5, GF(2) );
true 
C3 := RootsCode( 4, [ 1, 2 ], 5 );
RootsOfCode( C3 );
C3 = ReedSolomonCode( 4, 3 );

5.5-4 BCHCode
> BCHCode( n[, b], delta, F )( function )

The function BCHCode returns a 'Bose-Chaudhuri-Hockenghem code' (or BCH code for short). This is the largest possible cyclic code of length n over field F, whose generator polynomial has zeros

a^{b},a^{b+1}, ..., a^{b+delta-2},

where a is a primitive n^th root of unity in the splitting field GF(q^m), b is an integer 0<= b<= n-delta+1 and m is the multiplicative order of q modulo n. (The integers b,...,b+delta-2 typically lie in the range 1,...,n-1.) Default value for b is 1, though the algorithm allows b=0. The length n of the code and the size q of the field must be relatively prime. The generator polynomial is equal to the least common multiple of the minimal polynomials of

a^{b}, a^{b+1}, ..., a^{b+delta-2}.

The set of zeroes of the generator polynomial is equal to the union of the sets

\{a^x\ |\ x \in C_k\},

where C_k is the k^th cyclotomic coset of q modulo n and b<= k<= b+delta-2 (see CyclotomicCosets (7.5-12)).

Special cases are b=1 (resulting codes are called 'narrow-sense' BCH codes), and n=q^m-1 (known as 'primitive' BCH codes). GUAVA calculates the largest value of d for which the BCH code with designed distance d coincides with the BCH code with designed distance delta. This distance d is called the Bose distance of the code. The true minimum distance of the code is greater than or equal to the Bose distance.

Printed are the designed distance (to be precise, the Bose distance) d, and the starting power b.

The Sugiyama decoding algorithm has been implemented for this code (see Decode (4.10-1)).

gap> C1 := BCHCode( 15, 3, 5, GF(2) );
a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
gap> DesignedDistance( C1 );
7
gap> C2 := BCHCode( 23, 2, GF(2) );
a cyclic [23,12,5..7]3 BCH code, delta=5, b=1 over GF(2)
gap> DesignedDistance( C2 );       
5
gap> MinimumDistance(C2);
7 

See RootsCode (5.5-3) for a more general construction.

5.5-5 ReedSolomonCode
> ReedSolomonCode( n, d )( function )

ReedSolomonCode returns a 'Reed-Solomon code' of length n, designed distance d. This code is a primitive narrow-sense BCH code over the field GF(q), where q=n+1. The dimension of an RS code is n-d+1. According to the Singleton bound (see UpperBoundSingleton (7.1-1)) the dimension cannot be greater than this, so the true minimum distance of an RS code is equal to d and the code is maximum distance separable (see IsMDSCode (4.3-7)).

gap> C1 := ReedSolomonCode( 3, 2 );
a cyclic [3,2,2]1 Reed-Solomon code over GF(4)
gap> IsCyclicCode(C1);
true
gap> C2 := ReedSolomonCode( 4, 3 );
a cyclic [4,2,3]2 Reed-Solomon code over GF(5)
gap> RootsOfCode( C2 );
[ Z(5), Z(5)^2 ]
gap> IsMDSCode(C2);
true 

See GeneralizedReedSolomonCode (5.6-2) for a more general construction.

5.5-6 ExtendedReedSolomonCode
> ExtendedReedSolomonCode( n, d )( function )

ExtendedReedSolomonCode creates a Reed-Solomon code of length n-1 with designed distance d-1 and then returns the code which is extended by adding an overall parity-check symbol. The motivation for creating this function is calling ExtendedCode (6.1-1) function over a Reed-Solomon code will take considerably long time.

gap> C := ExtendedReedSolomonCode(17, 13);
a linear [17,5,13]9..12 extended Reed Solomon code over GF(17)
gap> IsMDSCode(C);
true

5.5-7 QRCode
> QRCode( n, F )( function )

QRCode returns a quadratic residue code. If F is a field GF(q), then q must be a quadratic residue modulo n. That is, an x exists with x^2 = q mod n. Both n and q must be primes. Its generator polynomial is the product of the polynomials x-a^i. a is a primitive n^th root of unity, and i is an integer in the set of quadratic residues modulo n.

gap> C1 := QRCode( 7, GF(2) );
a cyclic [7,4,3]1 quadratic residue code over GF(2)
gap> IsEquivalent( C1, HammingCode( 3, GF(2) ) );
true
gap> IsCyclicCode(C1);
true
gap> IsCyclicCode(HammingCode( 3, GF(2) ));
false
gap> C2 := QRCode( 11, GF(3) );
a cyclic [11,6,4..5]2 quadratic residue code over GF(3)
gap> C2 = TernaryGolayCode();
true 
gap> Q1 := QRCode( 7, GF(2));
a cyclic [7,4,3]1 quadratic residue code over GF(2)
gap> P1:=AutomorphismGroup(Q1); IdGroup(P1);
Group([ (1,2)(5,7), (2,3)(4,7), (2,4)(5,6), (3,5)(6,7), (3,7)(5,6) ])
[ 168, 42 ]

5.5-8 QQRCodeNC
> QQRCodeNC( p )( function )

QQRCodeNC is the same as QQRCode, except that it uses GeneratorMatCodeNC instead of GeneratorMatCode.

5.5-9 QQRCode
> QQRCode( p )( function )

QQRCode returns a quasi-quadratic residue code, as defined by Proposition 2.2 in Bazzi-Mittel [BMd)]. The parameter p must be a prime. Its generator matrix has the block form G=(Q,N). Here Q is a px circulant matrix whose top row is (0,x_1,...,x_p-1), where x_i=1 if and only if i is a quadratic residue mod p, and N is a px circulant matrix whose top row is (0,y_1,...,y_p-1), where x_i+y_i=1 for all i. (In fact, this matrix can be recovered as the component DoublyCirculant of the code.)

gap> C1 := QQRCode( 7);
a linear [14,7,1..4]3..5 code defined by generator matrix over GF(2)
gap> G1:=GeneratorMat(C1);;
gap> Display(G1);
 . 1 1 . 1 . . . . . 1 . 1 1
 1 . 1 1 1 . . . . 1 1 1 . 1
 . . . 1 1 . 1 . 1 1 . . . 1
 . . 1 . 1 1 1 1 . 1 . . 1 1
 . . . . . . . 1 . . 1 1 1 .
 . . . . . . . . . 1 1 1 . 1
 . . . . . . . . 1 . . 1 1 1
gap> Display(C1!.DoublyCirculant);
 . 1 1 . 1 . . . . . 1 . 1 1
 1 1 . 1 . . . . . 1 . 1 1 .
 1 . 1 . . . 1 . 1 . 1 1 . .
 . 1 . . . 1 1 1 . 1 1 . . .
 1 . . . 1 1 . . 1 1 . . . 1
 . . . 1 1 . 1 1 1 . . . 1 .
 . . 1 1 . 1 . 1 . . . 1 . 1
gap> MinimumDistance(C1);
4
gap> C2 := QQRCode( 29); MinimumDistance(C2);
a linear [58,28,1..14]8..29 code defined by generator matrix over GF(2)
12
gap> Aut2:=AutomorphismGroup(C2); IdGroup(Aut2);
[ permutation group of size 812 with 4 generators ]
[ 812, 7 ]

5.5-10 FireCode
> FireCode( g, b )( function )

FireCode constructs a (binary) Fire code. g is a primitive polynomial of degree m, and a factor of x^r-1. b an integer 0 <= b <= m not divisible by r, that determines the burst length of a single error burst that can be corrected. The argument g can be a polynomial with base ring GF(2), or a list of coefficients in GF(2). The generator polynomial of the code is defined as the product of g and x^2b-1+1.

Here is the general definition of 'Fire code', named after P. Fire, who introduced these codes in 1959 in order to correct burst errors. First, a definition. If F=GF(q) and fin F[x] then we say f has order e if f(x)|(x^e-1). A Fire code is a cyclic code over F with generator polynomial g(x)= (x^2t-1-1)p(x), where p(x) does not divide x^2t-1-1 and satisfies deg(p(x))>= t. The length of such a code is the order of g(x). Non-binary Fire codes have not been implemented.

.

gap> x:= Indeterminate( GF(2) );; G:= x^3+x^2+1;
Z(2)^0+x^2+x^3
gap> Factors( G );
[ Z(2)^0+x^2+x^3 ]
gap> C := FireCode( G, 3 );
a cyclic [35,27,1..4]2..6 3 burst error correcting fire code over GF(2)
gap> MinimumDistance( C );
4     # Still it can correct bursts of length 3 

5.5-11 WholeSpaceCode
> WholeSpaceCode( n, F )( function )

WholeSpaceCode returns the cyclic whole space code of length n over F. This code consists of all polynomials of degree less than n and coefficients in F.

gap> C := WholeSpaceCode( 5, GF(3) );
a cyclic [5,5,1]0 whole space code over GF(3)

5.5-12 NullCode
> NullCode( n, F )( function )

NullCode returns the zero-dimensional nullcode with length n over F. This code has only one word: the all zero word. It is cyclic though!

gap> C := NullCode( 5, GF(3) );
a cyclic [5,0,5]5 nullcode over GF(3)
gap> AsSSortedList( C );
[ [ 0 0 0 0 0 ] ]

5.5-13 RepetitionCode
> RepetitionCode( n, F )( function )

RepetitionCode returns the cyclic repetition code of length n over F. The code has as many elements as F, because each codeword consists of a repetition of one of these elements.

gap> C := RepetitionCode( 3, GF(5) );
a cyclic [3,1,3]2 repetition code over GF(5)
gap> AsSSortedList( C );
[ [ 0 0 0 ], [ 1 1 1 ], [ 2 2 2 ], [ 4 4 4 ], [ 3 3 3 ] ]
gap> IsPerfectCode( C );
false
gap> IsMDSCode( C );
true 

5.5-14 CyclicCodes
> CyclicCodes( n, F )( function )

CyclicCodes returns a list of all cyclic codes of length n over F. It constructs all possible generator polynomials from the factors of x^n-1. Each combination of these factors yields a generator polynomial after multiplication.

gap> CyclicCodes(3,GF(3));
[ a cyclic [3,3,1]0 enumerated code over GF(3), 
a cyclic [3,2,1..2]1 enumerated code over GF(3), 
a cyclic [3,1,3]2 enumerated code over GF(3), 
a cyclic [3,0,3]3 enumerated code over GF(3) ]

5.5-15 NrCyclicCodes
> NrCyclicCodes( n, F )( function )

The function NrCyclicCodes calculates the number of cyclic codes of length n over field F.

gap> NrCyclicCodes( 23, GF(2) );
8
gap> codelist := CyclicCodes( 23, GF(2) );
[ a cyclic [23,23,1]0 enumerated code over GF(2), 
  a cyclic [23,22,1..2]1 enumerated code over GF(2), 
  a cyclic [23,11,1..8]4..7 enumerated code over GF(2), 
  a cyclic [23,0,23]23 enumerated code over GF(2), 
  a cyclic [23,11,1..8]4..7 enumerated code over GF(2), 
  a cyclic [23,12,1..7]3 enumerated code over GF(2), 
  a cyclic [23,1,23]11 enumerated code over GF(2), 
  a cyclic [23,12,1..7]3 enumerated code over GF(2) ]
gap> BinaryGolayCode() in codelist;
true
gap> RepetitionCode( 23, GF(2) ) in codelist;
true
gap> CordaroWagnerCode( 23 ) in codelist;
false    # This code is not cyclic 

5.5-16 QuasiCyclicCode
> QuasiCyclicCode( G, s, F )( function )

QuasiCyclicCode( G, k, F ) generates a rate 1/m quasi-cyclic code over field F. The input G is a list of univariate polynomials and m is the cardinality of this list. Note that m must be at least 2. The input s is the size of each circulant and it may not necessarily be the same as the code dimension k, i.e. k le s.

There also exists another version, QuasiCyclicCode( G, s ) which produces quasi-cyclic codes over F_2 only. Here the parameter s holds the same definition and the input G is a list of integers, where each integer is an octal representation of a binary univariate polynomial.

gap> #
gap> # This example show the case for k = s
gap> #
gap> L1 := PolyCodeword( Codeword("10000000000", GF(4)) );
Z(2)^0
gap> L2 := PolyCodeword( Codeword("12223201000", GF(4)) );
x^7+Z(2^2)*x^5+Z(2^2)^2*x^4+Z(2^2)*x^3+Z(2^2)*x^2+Z(2^2)*x+Z(2)^0
gap> L3 := PolyCodeword( Codeword("31111220110", GF(4)) );
x^9+x^8+Z(2^2)*x^6+Z(2^2)*x^5+x^4+x^3+x^2+x+Z(2^2)^2
gap> L4 := PolyCodeword( Codeword("13320333010", GF(4)) );
x^9+Z(2^2)^2*x^7+Z(2^2)^2*x^6+Z(2^2)^2*x^5+Z(2^2)*x^3+Z(2^2)^2*x^2+Z(2^2)^2*x+\
Z(2)^0
gap> L5 := PolyCodeword( Codeword("20102211100", GF(4)) );
x^8+x^7+x^6+Z(2^2)*x^5+Z(2^2)*x^4+x^2+Z(2^2)
gap> C := QuasiCyclicCode( [L1, L2, L3, L4, L5], 11, GF(4) );
a linear [55,11,1..32]24..41 quasi-cyclic code over GF(4)
gap> MinimumDistance(C);
29
gap> Display(C);
a linear [55,11,29]24..41 quasi-cyclic code over GF(4)
gap> #
gap> # This example show the case for k < s
gap> #
gap> L1 := PolyCodeword( Codeword("02212201220120211002000",GF(3)) );
-x^19+x^16+x^15-x^14-x^12+x^11-x^9-x^8+x^7-x^5-x^4+x^3-x^2-x
gap> L2 := PolyCodeword( Codeword("00221100200120220001110",GF(3)) );
x^21+x^20+x^19-x^15-x^14-x^12+x^11-x^8+x^5+x^4-x^3-x^2
gap> L3 := PolyCodeword( Codeword("22021011202221111020021",GF(3)) );
x^22-x^21-x^18+x^16+x^15+x^14+x^13-x^12-x^11-x^10-x^8+x^7+x^6+x^4-x^3-x-Z(3)^0
gap> C := QuasiCyclicCode( [L1, L2, L3], 23, GF(3) );
a linear [69,12,1..37]27..46 quasi-cyclic code over GF(3)
gap> MinimumDistance(C);
34
gap> Display(C);
a linear [69,12,34]27..46 quasi-cyclic code over GF(3)
gap> #
gap> # This example show the binary case using octal representation
gap> #
gap> L1 := 001;;   # 0 000 001
gap> L2 := 013;;   # 0 001 011
gap> L3 := 015;;   # 0 001 101
gap> L4 := 077;;   # 0 111 111
gap> C := QuasiCyclicCode( [L1, L2, L3, L4], 7 );
a linear [28,7,1..12]8..14 quasi-cyclic code over GF(2)
gap> MinimumDistance(C);
12
gap> Display(C);
a linear [28,7,12]8..14 quasi-cyclic code over GF(2)

5.5-17 CyclicMDSCode
> CyclicMDSCode( q, m, k )( function )

Given the input parameters q, m and k, this function returns a [q^m + 1, k, q^m - k + 2] cyclic MDS code over GF(q^m). If q^m is even, any value of k can be used, otherwise only odd value of k is accepted.

gap> C:=CyclicMDSCode(2,6,24);
a cyclic [65,24,42]31..41 MDS code over GF(64)
gap> IsMDSCode(C);
true
gap> C:=CyclicMDSCode(5,3,77);
a cyclic [126,77,50]35..49 MDS code over GF(125)
gap> IsMDSCode(C);
true
gap> C:=CyclicMDSCode(3,3,25);
a cyclic [28,25,4]2..3 MDS code over GF(27)
gap> GeneratorPol(C);
x^3+Z(3^3)^7*x^2+Z(3^3)^20*x-Z(3)^0
gap>

5.5-18 FourNegacirculantSelfDualCode
> FourNegacirculantSelfDualCode( ax, bx, k )( function )

A four-negacirculant self-dual code has a generator matrix G of the the following form


    -                    -
    |        |  A  |  B  |
G = |  I_2k  |-----+-----|
    |        | -B^T| A^T |
    -                    -
		

where AA^T + BB^T = -I_k and A, B and their transposed are all k x k negacirculant matrices. The generator matrix G returns a [2k, k, d]_q self-dual code over GF(q). For discussion on four-negacirculant self-dual codes, refer to [HHKK07].

The input parameters ax and bx are the defining polynomials over GF(q) of negacirculant matrices A and B respectively. The last parameter k is the dimension of the code.

gap> ax:=PolyCodeword(Codeword("1200200", GF(3)));
-x_1^4-x_1+Z(3)^0
gap> bx:=PolyCodeword(Codeword("2020221", GF(3)));
x_1^6-x_1^5-x_1^4-x_1^2-Z(3)^0
gap> C:=FourNegacirculantSelfDualCode(ax, bx, 14);;
gap> MinimumDistance(C);;
gap> CoveringRadius(C);;
gap> IsSelfDualCode(C);
true
gap> Display(C);
a linear [28,14,9]7 four-negacirculant self-dual code over GF(3)
gap> Display( GeneratorMat(C) );
 1 . . . . . . . . . . . . . 1 2 . . 2 . . 2 . 2 . 2 2 1
 . 1 . . . . . . . . . . . . . 1 2 . . 2 . 2 2 . 2 . 2 2
 . . 1 . . . . . . . . . . . . . 1 2 . . 2 1 2 2 . 2 . 2
 . . . 1 . . . . . . . . . . 1 . . 1 2 . . 1 1 2 2 . 2 .
 . . . . 1 . . . . . . . . . . 1 . . 1 2 . . 1 1 2 2 . 2
 . . . . . 1 . . . . . . . . . . 1 . . 1 2 1 . 1 1 2 2 .
 . . . . . . 1 . . . . . . . 1 . . 1 . . 1 . 1 . 1 1 2 2
 . . . . . . . 1 . . . . . . 1 1 2 2 . 2 . 1 . . 1 . . 1
 . . . . . . . . 1 . . . . . . 1 1 2 2 . 2 2 1 . . 1 . .
 . . . . . . . . . 1 . . . . 1 . 1 1 2 2 . . 2 1 . . 1 .
 . . . . . . . . . . 1 . . . . 1 . 1 1 2 2 . . 2 1 . . 1
 . . . . . . . . . . . 1 . . 1 . 1 . 1 1 2 2 . . 2 1 . .
 . . . . . . . . . . . . 1 . 1 1 . 1 . 1 1 . 2 . . 2 1 .
 . . . . . . . . . . . . . 1 2 1 1 . 1 . 1 . . 2 . . 2 1
gap> ax:=PolyCodeword(Codeword("013131000", GF(7)));
x_1^5+Z(7)*x_1^4+x_1^3+Z(7)*x_1^2+x_1
gap> bx:=PolyCodeword(Codeword("425435030", GF(7)));
Z(7)*x_1^7+Z(7)^5*x_1^5+Z(7)*x_1^4+Z(7)^4*x_1^3+Z(7)^5*x_1^2+Z(7)^2*x_1+Z(7)^4
gap> C:=FourNegacirculantSelfDualCodeNC(ax, bx, 18);
a linear [36,18,1..13]0..36 four-negacirculant self-dual code over GF(7)
gap> IsSelfDualCode(C);
true

5.5-19 FourNegacirculantSelfDualCodeNC
> FourNegacirculantSelfDualCodeNC( ax, bx, k )( function )

This function is the same as FourNegacirculantSelfDualCode, except this version is faster as it does not estimate the minimum distance and covering radius of the code.

5.6 Evaluation Codes

5.6-1 EvaluationCode
> EvaluationCode( P, L, R )( function )

Input: F is a finite field, L is a list of rational functions in R=F[x_1,...,x_r], P is a list of n points in F^r at which all of the functions in L are defined.
Output: The 'evaluation code' C, which is the image of the evalation map

Eval_P:span(L)\rightarrow F^n,

given by flongmapsto (f(p_1),...,f(p_n)), where P=p_1,...,p_n and f in L. The generator matrix of C is G=(f_i(p_j))_f_iin L,p_jin P.

This command returns a "record" object C with several extra components (type NamesOfComponents(C) to see them all): C!.EvaluationMat (not the same as the generator matrix in general), C!.points (namely P), C!.basis (namely L), and C!.ring (namely R).

gap> F:=GF(11);
GF(11)
gap> R := PolynomialRing(F,2);;
gap> indets := IndeterminatesOfPolynomialRing(R);;
gap> x:=indets[1];; y:=indets[2];;
gap> L:=[x^2*y,x*y,x^5,x^4,x^3,x^2,x,x^0];;
gap> Pts:=[ [ Z(11)^9, Z(11) ], [ Z(11)^8, Z(11) ], [ Z(11)^7, 0*Z(11) ],
   [ Z(11)^6, 0*Z(11) ], [ Z(11)^5, 0*Z(11) ], [ Z(11)^4, 0*Z(11) ],
   [ Z(11)^3, Z(11) ], [ Z(11)^2, 0*Z(11) ], [ Z(11), 0*Z(11) ], 
   [ Z(11)^0, 0*Z(11) ], [ 0*Z(11), Z(11) ] ];;
gap> C:=EvaluationCode(Pts,L,R);
a linear [11,8,1..3]2..3  evaluation code over GF(11)
gap> MinimumDistance(C);
3

5.6-2 GeneralizedReedSolomonCode
> GeneralizedReedSolomonCode( P, k, R )( function )

Input: R=F[x], where F is a finite field, k is a positive integer, P is a list of n points in F.
Output: The C which is the image of the evaluation map

Eval_P:F[x]_k\rightarrow F^n,

given by flongmapsto (f(p_1),...,f(p_n)), where P=p_1,...,p_nsubset F and f ranges over the space F[x]_k of all polynomials of degree less than k.

This command returns a "record" object C with several extra components (type NamesOfComponents(C) to see them all): C!.points (namely P), C!.degree (namely k), and C!.ring (namely R).

This code can be decoded using Decodeword, which applies the special decoder method (the interpolation method), or using GeneralizedReedSolomonDecoderGao which applies an algorithm of S. Gao (see GeneralizedReedSolomonDecoderGao (4.10-3)). This code has a special decoder record which implements the interpolation algorithm described in section 5.2 of Justesen and Hoholdt [JH04]. See Decode (4.10-1) and Decodeword (4.10-2) for more details.

The weighted version has implemented with the option GeneralizedReedSolomonCode(P,k,R,wts), where wts = [v_1, ..., v_n] is a sequence of n non-zero elements from the base field F of R. See also the generalized Reed--Solomon code GRS_k(P, V) described in [MS83], p.303.

The list-decoding algorithm of Sudan-Guraswami (described in section 12.1 of [JH04]) has been implemented for generalized Reed-Solomon codes. See GeneralizedReedSolomonListDecoder (4.10-4).

gap> R:=PolynomialRing(GF(11),["t"]);
GF(11)[t]
gap> P:=List([1,3,4,5,7],i->Z(11)^i);
[ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ]
gap> C:=GeneralizedReedSolomonCode(P,3,R);
a linear [5,3,1..3]2  generalized Reed-Solomon code over GF(11)
gap> MinimumDistance(C);
3
gap> V:=[Z(11)^0,Z(11)^0,Z(11)^0,Z(11)^0,Z(11)];
[ Z(11)^0, Z(11)^0, Z(11)^0, Z(11)^0, Z(11) ]
gap> C:=GeneralizedReedSolomonCode(P,3,R,V);
a linear [5,3,1..3]2  weighted generalized Reed-Solomon code over GF(11)
gap> MinimumDistance(C);
3

See EvaluationCode (5.6-1) for a more general construction.

5.6-3 GeneralizedReedMullerCode
> GeneralizedReedMullerCode( Pts, r, F )( function )

GeneralizedReedMullerCode returns a 'Reed-Muller code' C with length |Pts| and order r. One considers (a) a basis of monomials for the vector space over F=GF(q) of all polynomials in F[x_1,...,x_d] of degree at most r, and (b) a set Pts of points in F^d. The generator matrix of the associated Reed-Muller code C is G=(f(p))_fin B,p in Pts. This code C is constructed using the command GeneralizedReedMullerCode(Pts,r,F). When Pts is the set of all q^d points in F^d then the command GeneralizedReedMuller(d,r,F) yields the code. When Pts is the set of all (q-1)^d points with no coordinate equal to 0 then this is can be constructed using the ToricCode command (as a special case).

This command returns a "record" object C with several extra components (type NamesOfComponents(C) to see them all): C!.points (namely Pts) and C!.degree (namely r).

gap> Pts:=ToricPoints(2,GF(5));
[ [ Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5) ], [ Z(5)^0, Z(5)^2 ], [ Z(5)^0, Z(5)^3 ],
  [ Z(5), Z(5)^0 ], [ Z(5), Z(5) ], [ Z(5), Z(5)^2 ], [ Z(5), Z(5)^3 ],
  [ Z(5)^2, Z(5)^0 ], [ Z(5)^2, Z(5) ], [ Z(5)^2, Z(5)^2 ], [ Z(5)^2, Z(5)^3 ],
  [ Z(5)^3, Z(5)^0 ], [ Z(5)^3, Z(5) ], [ Z(5)^3, Z(5)^2 ], [ Z(5)^3, Z(5)^3 ] ]
gap> C:=GeneralizedReedMullerCode(Pts,2,GF(5));
a linear [16,6,1..11]6..10  generalized Reed-Muller code over GF(5)

See EvaluationCode (5.6-1) for a more general construction.

5.6-4 ToricPoints
> ToricPoints( n, F )( function )

ToricPoints(n,F) returns the points in (F^x)^n.

gap> ToricPoints(2,GF(5));
[ [ Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5) ], [ Z(5)^0, Z(5)^2 ], 
  [ Z(5)^0, Z(5)^3 ], [ Z(5), Z(5)^0 ], [ Z(5), Z(5) ], [ Z(5), Z(5)^2 ], 
  [ Z(5), Z(5)^3 ], [ Z(5)^2, Z(5)^0 ], [ Z(5)^2, Z(5) ], [ Z(5)^2, Z(5)^2 ], 
  [ Z(5)^2, Z(5)^3 ], [ Z(5)^3, Z(5)^0 ], [ Z(5)^3, Z(5) ], 
  [ Z(5)^3, Z(5)^2 ], [ Z(5)^3, Z(5)^3 ] ]

5.6-5 ToricCode
> ToricCode( L, F )( function )

This function returns the toric codes as in D. Joyner [Joy04] (see also J. P. Hansen [Han99]). This is a truncated (generalized) Reed-Muller code. Here L is a list of integral vectors and F is the finite field. The size of F must be different from 2.

This command returns a record object C with an extra component (type NamesOfComponents(C) to see them all): C!.exponents (namely L).

gap> C:=ToricCode([[1,0],[3,4]],GF(3));
a linear [4,1,4]2 toric code over GF(3)
gap> Display(GeneratorMat(C));
 1 1 2 2
gap> Elements(C);
[ [ 0 0 0 0 ], [ 1 1 2 2 ], [ 2 2 1 1 ] ]

See EvaluationCode (5.6-1) for a more general construction.

5.7 Algebraic geometric codes

Certain GUAVA functions related to algebraic geometric codes are described in this section.

5.7-1 AffineCurve
> AffineCurve( poly, ring )( function )

This function simply defines the data structure of an affine plane curve. In GUAVA, an affine curve is a record crv having two components: a polynomial poly, accessed in GUAVA by crv.polynomial, and a polynomial ring over a field F in two variables ring, accessed in GUAVA by crv.ring, containing poly. You use this function to define a curve in GUAVA.

For example, for the ring, one could take Q}[x,y], and for the polynomial one could take f(x,y)=x^2+y^2-1. For the affine line, simply taking Q}[x,y] for the ring and f(x,y)=y for the polynomial.

(Not sure if F neeeds to be a field in fact ...)

To compute its degree, simply use the DegreeMultivariatePolynomial (7.6-2) command.

gap>
gap> F:=GF(11);;
gap> R2:=PolynomialRing(F,2);
PolynomialRing(..., [ x_1, x_2 ])
gap> vars:=IndeterminatesOfPolynomialRing(R2);;
gap> x:=vars[1];; y:=vars[2];;
gap> poly:=y;; crvP1:=AffineCurve(poly,R2);
rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_2 )
gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2);
1
gap> poly:=y^2-x*(x^2-1);; ell_crv:=AffineCurve(poly,R2);
rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := -x_1^3+x_2^2+x_1 )
gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2);
3
gap> poly:=x^2+y^2-1;; circle:=AffineCurve(poly,R2);
rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_1^2+x_2^2-Z(11)^0 )
gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2);
2
gap> q:=3;;
gap> F:=GF(q^2);;
gap> R:=PolynomialRing(F,2);;
gap> vars:=IndeterminatesOfPolynomialRing(R);
[ x_1, x_2 ]
gap> x:=vars[1];
x_1
gap> y:=vars[2];
x_2
gap> crv:=AffineCurve(y^q+y-x^(q+1),R);
rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := -x_1^4+x_2^3+x_2 )
gap>

In GAP, a point on a curve defined by f(x,y)=0 is simply a list [a,b] of elements of F satisfying this polynomial equation.

5.7-2 AffinePointsOnCurve
> AffinePointsOnCurve( f, R, E )( function )

AffinePointsOnCurve(f,R,E) returns the points (x,y) in E^2 satisying f(x,y)=0, where f is an element of R=F[x,y].

gap> F:=GF(11);;
gap> R := PolynomialRing(F,["x","y"]);
PolynomialRing(..., [ x, y ])
gap> indets := IndeterminatesOfPolynomialRing(R);;
gap> x:=indets[1];; y:=indets[2];;
gap> P:=AffinePointsOnCurve(y^2-x^11+x,R,F);
[ [ Z(11)^9, 0*Z(11) ], [ Z(11)^8, 0*Z(11) ], [ Z(11)^7, 0*Z(11) ], 
  [ Z(11)^6, 0*Z(11) ], [ Z(11)^5, 0*Z(11) ], [ Z(11)^4, 0*Z(11) ], 
  [ Z(11)^3, 0*Z(11) ], [ Z(11)^2, 0*Z(11) ], [ Z(11), 0*Z(11) ], 
  [ Z(11)^0, 0*Z(11) ], [ 0*Z(11), 0*Z(11) ] ]

5.7-3 GenusCurve
> GenusCurve( crv )( function )

If crv represents f(x,y)=0, where f is a polynomial of degree d, then this function simply returns (d-1)(d-2)/2. At the present, the function does not check if the curve is singular (in which case the result may be false).

gap> q:=4;;
gap> F:=GF(q^2);;
gap> a:=X(F);;
gap> R1:=PolynomialRing(F,[a]);;
gap> var1:=IndeterminatesOfPolynomialRing(R1);;
gap> b:=X(F);;
gap> R2:=PolynomialRing(F,[a,b]);;
gap> var2:=IndeterminatesOfPolynomialRing(R2);;
gap> crv:=AffineCurve(b^q+b-a^(q+1),R2);;
gap> crv:=AffineCurve(b^q+b-a^(q+1),R2);
rec( ring := PolynomialRing(..., [ x_1, x_1 ]), polynomial := x_1^5+x_1^4+x_1 )
gap> GenusCurve(crv);
36

5.7-4 GOrbitPoint
> GOrbitPoint ( GP )( function )

P must be a point in projective space P^n(F), G must be a finite subgroup of GL(n+1,F), This function returns all (representatives of projective) points in the orbit G* P.

The example below computes the orbit of the automorphism group on the Klein quartic over the field GF(43) on the ``point at infinity''.

gap> R:= PolynomialRing( GF(43), 3 );;
gap> vars:= IndeterminatesOfPolynomialRing(R);;
gap> x:= vars[1];; y:= vars[2];; z:= vars[3];;
gap> zz:=Z(43)^6;
Z(43)^6
gap> zzz:=Z(43);
Z(43)
gap> rho1:=zz^0*[[zz^4,0,0],[0,zz^2,0],[0,0,zz]];
[ [ Z(43)^24, 0*Z(43), 0*Z(43) ], 
[ 0*Z(43), Z(43)^12, 0*Z(43) ], 
[ 0*Z(43), 0*Z(43), Z(43)^6 ] ]
gap> rho2:=zz^0*[[0,1,0],[0,0,1],[1,0,0]];
[ [ 0*Z(43), Z(43)^0, 0*Z(43) ], 
[ 0*Z(43), 0*Z(43), Z(43)^0 ], 
[ Z(43)^0, 0*Z(43), 0*Z(43) ] ]
gap> rho3:=(-1)*[[(zz-zz^6 )/zzz^7,( zz^2-zz^5 )/ zzz^7, ( zz^4-zz^3 )/ zzz^7],
>             [( zz^2-zz^5 )/ zzz^7, ( zz^4-zz^3 )/ zzz^7, ( zz-zz^6 )/ zzz^7],
>             [( zz^4-zz^3 )/ zzz^7, ( zz-zz^6 )/ zzz^7, ( zz^2-zz^5 )/ zzz^7]];
[ [ Z(43)^9, Z(43)^28, Z(43)^12 ], 
[ Z(43)^28, Z(43)^12, Z(43)^9 ], 
[ Z(43)^12, Z(43)^9, Z(43)^28 ] ]
gap> G:=Group([rho1,rho2,rho3]);; #PSL(2,7)
gap> Size(G);
168
gap> P:=[1,0,0]*zzz^0;
[ Z(43)^0, 0*Z(43), 0*Z(43) ]
gap> O:=GOrbitPoint(G,P);
[ [ Z(43)^0, 0*Z(43), 0*Z(43) ], [ 0*Z(43), Z(43)^0, 0*Z(43) ], 
[ 0*Z(43), 0*Z(43), Z(43)^0 ], [ Z(43)^0, Z(43)^39, Z(43)^16 ], 
[ Z(43)^0, Z(43)^33, Z(43)^28 ], [ Z(43)^0, Z(43)^27, Z(43)^40 ],
[ Z(43)^0, Z(43)^21, Z(43)^10 ], [ Z(43)^0, Z(43)^15, Z(43)^22 ], 
[ Z(43)^0, Z(43)^9, Z(43)^34 ], [ Z(43)^0, Z(43)^3, Z(43)^4 ], 
[ Z(43)^3, Z(43)^22, Z(43)^6 ], [ Z(43)^3, Z(43)^16, Z(43)^18 ],
[ Z(43)^3, Z(43)^10, Z(43)^30 ], [ Z(43)^3, Z(43)^4, Z(43)^0 ], 
[ Z(43)^3, Z(43)^40, Z(43)^12 ], [ Z(43)^3, Z(43)^34, Z(43)^24 ], 
[ Z(43)^3, Z(43)^28, Z(43)^36 ], [ Z(43)^4, Z(43)^30, Z(43)^27 ],
[ Z(43)^4, Z(43)^24, Z(43)^39 ], [ Z(43)^4, Z(43)^18, Z(43)^9 ], 
[ Z(43)^4, Z(43)^12, Z(43)^21 ], [ Z(43)^4, Z(43)^6, Z(43)^33 ], 
[ Z(43)^4, Z(43)^0, Z(43)^3 ], [ Z(43)^4, Z(43)^36, Z(43)^15 ] ]
gap> Length(O);
24

Informally, a divisor on a curve is a formal integer linear combination of points on the curve, D=m_1P_1+...+m_kP_k, where the m_i are integers (the ``multiplicity'' of P_i in D) and P_i are (F-rational) points on the affine plane curve. In other words, a divisor is an element of the free abelian group generated by the F-rational affine points on the curve. The support of a divisor D is simply the set of points which occurs in the sum defining D with non-zero ``multiplicity''. The data structure for a divisor on an affine plane curve is a record having the following components:

  • the coefficients (the integer weights of the points in the support),

  • the support,

  • the curve, itself a record which has components: polynomial and polynomial ring.

5.7-5 DivisorOnAffineCurve
> DivisorOnAffineCurve( cdivsdivcrv )( function )

This is the command you use to define a divisor in GUAVA. Of course, crv is the curve on which the divisor lives, cdiv is the list of coefficients (or ``multiplicities''), sdiv is the list of points on crv in the support.

gap> q:=5;
5
gap> F:=GF(q);
GF(5)
gap> R:=PolynomialRing(F,2);;
gap> vars:=IndeterminatesOfPolynomialRing(R);
[ x_1, x_2 ]
gap> x:=vars[1];
x_1
gap> y:=vars[2];
x_2
gap> crv:=AffineCurve(y^3-x^3-x-1,R);
rec( ring := PolynomialRing(..., [ x_1, x_2 ]), 
     polynomial := -x_1^3+x_2^3-x_1-Z(5)^0 )
gap> Pts:=AffinePointsOnCurve(crv,R,F);;
gap> supp:=[Pts[1],Pts[2]];
[ [ 0*Z(5), Z(5)^0 ], [ Z(5)^0, Z(5) ] ]
gap> D:=DivisorOnAffineCurve([1,-1],supp,crv);
rec( coeffs := [ 1, -1 ], 
     support := [ [ 0*Z(5), Z(5)^0 ], [ Z(5)^0, Z(5) ] ],
     curve := rec( ring := PolynomialRing(..., [ x_1, x_2 ]), 
                   polynomial := -x_1^3+x_2^3-x_1-Z(5)^0 ) )

5.7-6 DivisorAddition
> DivisorAddition ( D1D2 )( function )

If D_1=m_1P_1+...+m_kP_k and D_2=n_1P_1+...+n_kP_k are divisors then D_1+D_2=(m_1+n_1)P_1+...+(m_k+n_k)P_k.

5.7-7 DivisorDegree
> DivisorDegree ( D )( function )

If D=m_1P_1+...+m_kP_k is a divisor then the degree is m_1+...+m_k.

5.7-8 DivisorNegate
> DivisorNegate ( D )( function )

Self-explanatory.

5.7-9 DivisorIsZero
> DivisorIsZero ( D )( function )

Self-explanatory.

5.7-10 DivisorsEqual
> DivisorsEqual ( D1D2 )( function )

Self-explanatory.

5.7-11 DivisorGCD
> DivisorGCD ( D1D2 )( function )

If m=p_1^e_1...p_k^e_k and n=p_1^f_1...p_k^f_k are two integers then their greatest common divisor is GCD(m,n)=p_1^min(e_1,f_1)...p_k^min(e_k,f_k). A similar definition works for two divisors on a curve. If D_1=e_1P_1+...+e_kP_k and D_2n=f_1P_1+...+f_kP_k are two divisors on a curve then their greatest common divisor is GCD(m,n)=min(e_1,f_1)P_1+...+min(e_k,f_k)P_k. This function computes this quantity.

5.7-12 DivisorLCM
> DivisorLCM ( D1D2 )( function )

If m=p_1^e_1...p_k^e_k and n=p_1^f_1...p_k^f_k are two integers then their least common multiple is LCM(m,n)=p_1^max(e_1,f_1)...p_k^max(e_k,f_k). A similar definition works for two divisors on a curve. If D_1=e_1P_1+...+e_kP_k and D_2=f_1P_1+...+f_kP_k are two divisors on a curve then their least common multiple is LCM(m,n)=max(e_1,f_1)P_1+...+max(e_k,f_k)P_k. This function computes this quantity.

gap> F:=GF(11);
GF(11)
gap> R1:=PolynomialRing(F,["a"]);;
gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
gap> b:=X(F,"b",var1);
b
gap> var2:=Concatenation(var1,[b]);
[ a, b ]
gap> R2:=PolynomialRing(F,var2);
PolynomialRing(..., [ a, b ])
gap> crvP1:=AffineCurve(b,R2);
rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
gap> div1:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
rec( coeffs := [ 1, 2, 3, 4 ], 
     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
gap> DivisorDegree(div1);
10
gap> div2:=DivisorOnAffineCurve([1,2,3,4],[Z(11),Z(11)^2,Z(11)^3,Z(11)^4],crvP1);
rec( coeffs := [ 1, 2, 3, 4 ], 
     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4 ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
gap> DivisorDegree(div2);
10
gap> div3:=DivisorAddition(div1,div2);
rec( coeffs := [ 5, 3, 5, 4, 3 ], 
     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
gap> DivisorDegree(div3);
20
gap> DivisorIsEffective(div1);
true
gap> DivisorIsEffective(div2);
true
gap>
gap> ndiv1:=DivisorNegate(div1);
rec( coeffs := [ -1, -2, -3, -4 ], 
     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
gap> zdiv:=DivisorAddition(div1,ndiv1);
rec( coeffs := [ 0, 0, 0, 0 ], 
     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^7 ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
gap> DivisorIsZero(zdiv);
true
gap> div_gcd:=DivisorGCD(div1,div2);
rec( coeffs := [ 1, 1, 2, 0, 0 ], 
     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
gap> div_lcm:=DivisorLCM(div1,div2);
rec( coeffs := [ 4, 2, 3, 4, 3 ], 
     support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
gap> DivisorDegree(div_gcd);
4
gap> DivisorDegree(div_lcm);
16
gap> DivisorEqual(div3,DivisorAddition(div_gcd,div_lcm));
true

Let G denote a finite subgroup of PGL(2,F) and let D denote a divisor on the projective line P^1(F). If G leaves D unchanged (it may permute the points in the support of D but must preserve their sum in D) then the Riemann-Roch space L(D) is a G-module. The commands in this section help explore the G-module structure of L(D) in the case then the ground field F is finite.

5.7-13 RiemannRochSpaceBasisFunctionP1
> RiemannRochSpaceBasisFunctionP1 ( PkR2 )( function )

Input: R2 is a polynomial ring in two variables, say F[x,y]; P is an element of the base field, say F; k is an integer. Output: 1/(x-P)^k

5.7-14 DivisorOfRationalFunctionP1
> DivisorOfRationalFunctionP1 ( f, R )( function )

Here R = F[x,y] is a polynomial ring in the variables x,y and f is a rational function of x. Simply returns the principal divisor on P}^1 associated to f.


gap> F:=GF(11);
GF(11)
gap> R1:=PolynomialRing(F,["a"]);;
gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
gap> b:=X(F,"b",var1);
b
gap> var2:=Concatenation(var1,[b]);
[ a, b ]
gap> R2:=PolynomialRing(F,var2);
PolynomialRing(..., [ a, b ])
gap> pt:=Z(11);
Z(11)
gap> f:=RiemannRochSpaceBasisFunctionP1(pt,2,R2);
(Z(11)^0)/(a^2+Z(11)^7*a+Z(11)^2)
gap> Df:=DivisorOfRationalFunctionP1(f,R2);
rec( coeffs := [ -2 ], support := [ Z(11) ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := a )
   )
gap> Df.support;
[ Z(11) ]
gap> F:=GF(11);;
gap> R:=PolynomialRing(F,2);;
gap> vars:=IndeterminatesOfPolynomialRing(R);;
gap> a:=vars[1];;
gap> b:=vars[2];;
gap> f:=(a^4+Z(11)^6*a^3-a^2+Z(11)^7*a+Z(11)^0)/(a^4+Z(11)*a^2+Z(11)^7*a+Z(11));;
gap> divf:=DivisorOfRationalFunctionP1(f,R);
rec( coeffs := [ 3, 1 ], support := [ Z(11), Z(11)^7 ],
  curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := a ) )
gap> denf:=DenominatorOfRationalFunction(f); RootsOfUPol(denf);
a^4+Z(11)*a^2+Z(11)^7*a+Z(11)
[  ]
gap> numf:=NumeratorOfRationalFunction(f); RootsOfUPol(numf);
a^4+Z(11)^6*a^3-a^2+Z(11)^7*a+Z(11)^0
[ Z(11)^7, Z(11), Z(11), Z(11) ]

5.7-15 RiemannRochSpaceBasisP1
> RiemannRochSpaceBasisP1 ( D )( function )

This returns the basis of the Riemann-Roch space L(D) associated to the divisor D on the projective line P}^1.

gap> F:=GF(11);
GF(11)
gap> R1:=PolynomialRing(F,["a"]);;
gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
gap> b:=X(F,"b",var1);
b
gap> var2:=Concatenation(var1,[b]);
[ a, b ]
gap> R2:=PolynomialRing(F,var2);
PolynomialRing(..., [ a, b ])
gap> crvP1:=AffineCurve(b,R2);
rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
rec( coeffs := [ 1, 2, 3, 4 ], 
     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
gap> B:=RiemannRochSpaceBasisP1(D);
[ Z(11)^0, (Z(11)^0)/(a+Z(11)^7), (Z(11)^0)/(a+Z(11)^8), 
(Z(11)^0)/(a^2+Z(11)^9*a+Z(11)^6), (Z(11)^0)/(a+Z(11)^2), 
(Z(11)^0)/(a^2+Z(11)^3*a+Z(11)^4), (Z(11)^0)/(a^3+a^2+Z(11)^2*a+Z(11)^6),
  (Z(11)^0)/(a+Z(11)^6), (Z(11)^0)/(a^2+Z(11)^7*a+Z(11)^2), 
(Z(11)^0)/(a^3+Z(11)^4*a^2+a+Z(11)^8), 
(Z(11)^0)/(a^4+Z(11)^8*a^3+Z(11)*a^2+a+Z(11)^4) ]
gap> DivisorOfRationalFunctionP1(B[1],R2).support;
[  ]
gap> DivisorOfRationalFunctionP1(B[2],R2).support;
[ Z(11)^2 ]
gap> DivisorOfRationalFunctionP1(B[3],R2).support;
[ Z(11)^3 ]
gap> DivisorOfRationalFunctionP1(B[4],R2).support;
[ Z(11)^3 ]
gap> DivisorOfRationalFunctionP1(B[5],R2).support;
[ Z(11)^7 ]
gap> DivisorOfRationalFunctionP1(B[6],R2).support;
[ Z(11)^7 ]
gap> DivisorOfRationalFunctionP1(B[7],R2).support;
[ Z(11)^7 ]
gap> DivisorOfRationalFunctionP1(B[8],R2).support;
[ Z(11) ]
gap> DivisorOfRationalFunctionP1(B[9],R2).support;
[ Z(11) ]
gap> DivisorOfRationalFunctionP1(B[10],R2).support;
[ Z(11) ]
gap> DivisorOfRationalFunctionP1(B[11],R2).support;
[ Z(11) ]

5.7-16 MoebiusTransformation
> MoebiusTransformation ( AR )( function )

The arguments are a 2x 2 matrix A with entries in a field F and a polynomial ring Rof one variable, say F[x]. This function returns the linear fractional transformatio associated to A. These transformations can be composed with each other using GAP's Value command.

5.7-17 ActionMoebiusTransformationOnFunction
> ActionMoebiusTransformationOnFunction ( AfR2 )( function )

The arguments are a 2x 2 matrix A with entries in a field F, a rational function f of one variable, say in F(x), and a polynomial ring R2, say F[x,y]. This function simply returns the composition of the function f with the Möbius transformation of A.

5.7-18 ActionMoebiusTransformationOnDivisorP1
> ActionMoebiusTransformationOnDivisorP1 ( AD )( function )

A Möbius transformation may be regarded as an automorphism of the projective line P^1. This function simply returns the image of the divisor D under the Möbius transformation defined by A, provided that IsActionMoebiusTransformationOnDivisorDefinedP1(A,D) returns true.

5.7-19 IsActionMoebiusTransformationOnDivisorDefinedP1
> IsActionMoebiusTransformationOnDivisorDefinedP1 ( AD )( function )

Returns true of none of the points in the support of the divisor D is the pole of the Möbius transformation.

gap> F:=GF(11);
GF(11)
gap> R1:=PolynomialRing(F,["a"]);;
gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
gap> b:=X(F,"b",var1);
b
gap> var2:=Concatenation(var1,[b]);
[ a, b ]
gap> R2:=PolynomialRing(F,var2);
PolynomialRing(..., [ a, b ])
gap> crvP1:=AffineCurve(b,R2);
rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
rec( coeffs := [ 1, 2, 3, 4 ], 
     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
gap> A:=Z(11)^0*[[1,2],[1,4]];
[ [ Z(11)^0, Z(11) ], [ Z(11)^0, Z(11)^2 ] ]
gap> ActionMoebiusTransformationOnDivisorDefinedP1(A,D);
false
gap> A:=Z(11)^0*[[1,2],[3,4]];
[ [ Z(11)^0, Z(11) ], [ Z(11)^8, Z(11)^2 ] ]
gap> ActionMoebiusTransformationOnDivisorDefinedP1(A,D);
true
gap> ActionMoebiusTransformationOnDivisorP1(A,D);
rec( coeffs := [ 1, 2, 3, 4 ], 
     support := [ Z(11)^5, Z(11)^6, Z(11)^8, Z(11)^7 ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
gap> f:=MoebiusTransformation(A,R1);
(a+Z(11))/(Z(11)^8*a+Z(11)^2)
gap> ActionMoebiusTransformationOnFunction(A,f,R1);
-Z(11)^0+Z(11)^3*a^-1

5.7-20 DivisorAutomorphismGroupP1
> DivisorAutomorphismGroupP1 ( D )( function )

Input: A divisor D on P^1(F), where F is a finite field. Output: A subgroup Aut(D)subset Aut(P^1) preserving D.

Very slow.

gap> F:=GF(11);
GF(11)
gap> R1:=PolynomialRing(F,["a"]);;
gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
gap> b:=X(F,"b",var1);
b
gap> var2:=Concatenation(var1,[b]);
[ a, b ]
gap> R2:=PolynomialRing(F,var2);
PolynomialRing(..., [ a, b ])
gap> crvP1:=AffineCurve(b,R2);
rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
rec( coeffs := [ 1, 2, 3, 4 ], 
     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
gap> agp:=DivisorAutomorphismGroupP1(D);; time;
7305
gap> IdGroup(agp);
[ 10, 2 ]

5.7-21 MatrixRepresentationOnRiemannRochSpaceP1
> MatrixRepresentationOnRiemannRochSpaceP1 ( gD )( function )

Input: An element g in G, a subgroup of Aut(D)subset Aut(P^1), and a divisor D on P^1(F), where F is a finite field. Output: a dx d matrix, where d = dim, L(D), representing the action of g on L(D).

Note: g sends L(D) to r* L(D), where r is a polynomial of degree 1 depending on g and D.

Also very slow.

The GAP command BrauerCharacterValue can be used to ``lift'' the eigenvalues of this matrix to the complex numbers.

gap> F:=GF(11);
GF(11)
gap> R1:=PolynomialRing(F,["a"]);;
gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
gap> b:=X(F,"b",var1);
b
gap> var2:=Concatenation(var1,[b]);
[ a, b ]
gap> R2:=PolynomialRing(F,var2);
PolynomialRing(..., [ a, b ])
gap> crvP1:=AffineCurve(b,R2);
rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b )
gap> D:=DivisorOnAffineCurve([1,1,1,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1);
rec( coeffs := [ 1, 1, 1, 4 ],  
     support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ], 
     curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) )
gap> agp:=DivisorAutomorphismGroupP1(D);; time;
7198
gap> IdGroup(agp);
[ 20, 5 ]
gap> g:=Random(agp);
[ [ Z(11)^4, Z(11)^9 ], [ Z(11)^0, Z(11)^9 ] ]
gap> rho:=MatrixRepresentationOnRiemannRochSpaceP1(g,D);
[ [ Z(11)^0, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ], 
[ Z(11)^0, 0*Z(11), 0*Z(11), Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ],
  [ Z(11)^7, 0*Z(11), Z(11)^5, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ], 
[ Z(11)^4, Z(11)^9, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ],
  [ Z(11)^2, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^5, 0*Z(11), 0*Z(11), 0*Z(11) ], 
[ Z(11)^4, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^8, Z(11)^0, 0*Z(11), 0*Z(11) ],
  [ Z(11)^6, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^7, Z(11)^0, Z(11)^5, 0*Z(11) ], 
[ Z(11)^8, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^3, Z(11)^3, Z(11)^9, Z(11)^0 ] ]
gap> Display(rho);
  1  .  .  .  .  .  .  .
  1  .  .  2  .  .  .  .
  7  . 10  .  .  .  .  .
  5  6  .  .  .  .  .  .
  4  .  .  . 10  .  .  .
  5  .  .  .  3  1  .  .
  9  .  .  .  7  1 10  .
  3  .  .  .  8  8  6  1

5.7-22 GoppaCodeClassical
> GoppaCodeClassical( div, pts )( function )

Input: A divisor div on the projective line P}^1(F) over a finite field F and a list pts of points P_1,...,P_nsubset F disjoint from the support of div.
Output: The classical (evaluation) Goppa code associated to this data. This is the code

C=\{(f(P_1),...,f(P_n))\ |\ f\in L(D)_F\}.

gap> F:=GF(11);;
gap> R2:=PolynomialRing(F,2);;
gap> vars:=IndeterminatesOfPolynomialRing(R2);;
gap> a:=vars[1];;b:=vars[2];;
gap> cdiv:=[ 1, 2, -1, -2 ];
[ 1, 2, -1, -2 ]
gap> sdiv:=[ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ];
[ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ]
gap> crv:=rec(polynomial:=b,ring:=R2);
rec( polynomial := x_2, ring := PolynomialRing(..., [ x_1, x_2 ]) )
gap> div:=DivisorOnAffineCurve(cdiv,sdiv,crv);
rec( coeffs := [ 1, 2, -1, -2 ], support := [ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ],
  curve := rec( polynomial := x_2, ring := PolynomialRing(..., [ x_1, x_2 ]) ) )
gap> pts:=Difference(Elements(GF(11)),div.support);
[ 0*Z(11), Z(11)^0, Z(11), Z(11)^4, Z(11)^5, Z(11)^7, Z(11)^8 ]
gap> C:=GoppaCodeClassical(div,pts);
a linear [7,2,1..6]4..5 code defined by generator matrix over GF(11)
gap> MinimumDistance(C);
6

5.7-23 EvaluationBivariateCode
> EvaluationBivariateCode( pts, L, crv )( function )

Input: pts is a set of affine points on crv, L is a list of rational functions on crv.
Output: The evaluation code associated to the points in pts and functions in L, but specifically for affine plane curves and this function checks if points are "bad" (if so removes them from the list pts automatically). A point is ``bad'' if either it does not lie on the set of non-singular F-rational points (places of degree 1) on the curve.

Very similar to EvaluationCode (see EvaluationCode (5.6-1) for a more general construction).

5.7-24 EvaluationBivariateCodeNC
> EvaluationBivariateCodeNC( pts, L, crv )( function )

As in EvaluationBivariateCode but does not check if the points are ``bad''.

Input: pts is a set of affine points on crv, L is a list of rational functions on crv.
Output: The evaluation code associated to the points in pts and functions in L.

gap> q:=4;;
gap> F:=GF(q^2);;
gap> R:=PolynomialRing(F,2);;
gap> vars:=IndeterminatesOfPolynomialRing(R);;
gap> x:=vars[1];;
gap> y:=vars[2];;
gap> crv:=AffineCurve(y^q+y-x^(q+1),R);
rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_1^5+x_2^4+x_2 )
gap> L:=[ x^0, x, x^2*y^-1 ];
[ Z(2)^0, x_1, x_1^2/x_2 ]
gap> Pts:=AffinePointsOnCurve(crv.polynomial,crv.ring,F);;
gap> C1:=EvaluationBivariateCode(Pts,L,crv); time;


 Automatically removed the following 'bad' points (either a pole or not 
 on the curve):
[ [ 0*Z(2), 0*Z(2) ] ]

a linear [63,3,1..60]51..59  evaluation code over GF(16)
52
gap> P:=Difference(Pts,[[ 0*Z(2^4)^0, 0*Z(2)^0 ]]);;
gap> C2:=EvaluationBivariateCodeNC(P,L,crv); time;
a linear [63,3,1..60]51..59  evaluation code over GF(16)
48
gap> C3:=EvaluationCode(P,L,R); time;
a linear [63,3,1..56]51..59  evaluation code over GF(16)
58
gap> MinimumDistance(C1);
56
gap> MinimumDistance(C2);
56
gap> MinimumDistance(C3);
56
gap>

5.7-25 OnePointAGCode
> OnePointAGCode( f, P, m, R )( function )

Input: f is a polynomial in R=F[x,y], where F is a finite field, m is a positive integer (the multiplicity of the `point at infinity' infty on the curve f(x,y)=0), P is a list of n points on the curve over F.
Output: The C which is the image of the evaluation map

Eval_P:L(m \cdot \infty)\rightarrow F^n,

given by flongmapsto (f(p_1),...,f(p_n)), where p_i in P. Here L(m * infty) denotes the Riemann-Roch space of the divisor m * infty on the curve. This has a basis consisting of monomials x^iy^j, where (i,j) range over a polygon depending on m and f(x,y). For more details on the Riemann-Roch space of the divisor m * infty see Proposition III.10.5 in Stichtenoth [Sti93].

This command returns a "record" object C with several extra components (type NamesOfComponents(C) to see them all): C!.points (namely P), C!.multiplicity (namely m), C!.curve (namely f) and C!.ring (namely R).

gap> F:=GF(11);
GF(11)
gap> R := PolynomialRing(F,["x","y"]);
PolynomialRing(..., [ x, y ])
gap> indets := IndeterminatesOfPolynomialRing(R);
[ x, y ]
gap> x:=indets[1]; y:=indets[2];
x
y
gap> P:=AffinePointsOnCurve(y^2-x^11+x,R,F);;
gap> C:=OnePointAGCode(y^2-x^11+x,P,15,R);
a linear [11,8,1..0]2..3  one-point AG code over GF(11)
gap> MinimumDistance(C);
4
gap> Pts:=List([1,2,4,6,7,8,9,10,11],i->P[i]);;
gap> C:=OnePointAGCode(y^2-x^11+x,PT,10,R);
a linear [9,6,1..4]2..3 one-point AG code over GF(11)
gap> MinimumDistance(C);
4

See EvaluationCode (5.6-1) for a more general construction.

5.8 Low-Density Parity-Check Codes

Low-density parity-check (LDPC) codes form a class of linear block codes whose parity-check matrix--as the name implies, is sparse. LDPC codes were introduced by Robert Gallager in 1962 [Gal62] as his PhD work. Due to the decoding complexity for the technology back then, these codes were forgotten. Not until the late 1990s, these codes were rediscovered and research results have shown that LDPC codes can achieve near Shannon's capacity performance provided that their block length is long enough and soft-decision iterative decoder is employed. Note that the bit-flipping decoder (see BitFlipDecoder) is a hard-decision decoder and hence capacity achieving performance cannot be achieved despite having a large block length.

Based on the structure of their parity-check matrix, LDPC codes may be categorised into two classes:

  • Regular LDPC codes

    This class of codes has a fixed number of non zeros per column and per row in their parity-check matrix. These codes are usually denoted as (n,j,k) codes where n is the block length, j is the number of non zeros per column in their parity-check matrix and k is the number of non zeros per row in their parity-check matrix.

  • Irregular LDPC codes

    The irregular codes, on the other hand, do not have a fixed number of non zeros per column and row in their parity-check matrix. This class of codes are commonly represented by two polynomials which denote the distribution of the number of non zeros in the columns and rows respectively of their parity-check matrix.

5.8-1 QCLDPCCodeFromGroup
> QCLDPCCodeFromGroup( m, j, k )( function )

QCLDCCodeFromGroup produces an (n,j,k) regular quasi-cyclic LDPC code over GF(2) of block length n = mk. The term quasi-cyclic in the context of LDPC codes typically refers to LDPC codes whose parity-check matrix H has the following form


    -                                              -
    |  I_P(0,0)  |  I_P(0,1)  | ... |  I_P(0,k-1)  |
    |  I_P(1,0)  |  I_P(1,1)  | ... |  I_P(1,k-1)  |
H = |      .     |     .      |  .  |       .      |,
    |      .     |     .      |  .  |       .      |
    | I_P(j-1,0) | I_P(j-1,1) | ... | I_P(j-1,k-1) |
    -                                              -
		

where I_P(s,t) is an identity matrix of size m x m which has been shifted so that the 1 on the first row starts at position P(s,t).

Let F be a multiplicative group of integers modulo m. If m is a prime, F=0,1,...,m-1, otherwise F contains a set of integers which are relatively prime to m. In both cases, the order of F is equal to phi(m). Let a and b be non zeros of F such that the orders of a and b are k and j respectively. Note that the integers a and b can always be found provided that k and j respectively divide phi(m). Having obtain integers a and b, construct the following j x k matrix P so that the element at row s and column t is given by P(s,t) = a^tb^s, i.e.


    -                                             -
    |    1    |     a    | . . . |      a^{k-1}   |
    |    b    |    ab    | . . . |     a^{k-1}b   |
P = |    .    |    .     |   .   |        .       |.
    |    .    |    .     |   .   |        .       |
    | b^{j-1} | ab^{j-1} | . . . | a^{k-1}b^{j-1} |
    -                                             -
		

The parity-check matrix H of the LDPC code can be obtained by expanding each element of matrix P, i.e. P(s,t), to an identity matrix I_P(s,t) of size m x m.

The code rate R of the constructed code is given by

R \geq 1 - \frac{j}{k}

where the sign >= is due to the possible existence of some non linearly independent rows in H. For more details to the paper by Tanner et al [S}04].

gap> C := QCLDPCCodeFromGroup(7,2,3);
a linear [21,8,1..6]5..10 low-density parity-check code over GF(2)
gap> MinimumWeight(C);
[21,8] linear code over GF(2) - minimum weight evaluation
Known lower-bound: 1
There are 3 generator matrices, ranks : 8 8 5 
The weight of the minimum weight codeword satisfies 0 mod 2 congruence
Enumerating codewords with information weight 1 (w=1)
    Found new minimum weight 6
Number of matrices required for codeword enumeration 2
Completed w= 1, 24 codewords enumerated, lower-bound 4, upper-bound 6
Termination expected with information weight 2 at matrix 1
-----------------------------------------------------------------------------
Enumerating codewords with information weight 2 (w=2) using 1 matrices
Completed w= 2, 28 codewords enumerated, lower-bound 6, upper-bound 6
-----------------------------------------------------------------------------
Minimum weight: 6
6
gap> # The quasi-cyclic structure is obvious from the check matrix
gap> Display( CheckMat(C) );
 1 . . . . . . . 1 . . . . . . . . 1 . . .
 . 1 . . . . . . . 1 . . . . . . . . 1 . .
 . . 1 . . . . . . . 1 . . . . . . . . 1 .
 . . . 1 . . . . . . . 1 . . . . . . . . 1
 . . . . 1 . . . . . . . 1 . 1 . . . . . .
 . . . . . 1 . . . . . . . 1 . 1 . . . . .
 . . . . . . 1 1 . . . . . . . . 1 . . . .
 . . . . . 1 . . . . . 1 . . . . 1 . . . .
 . . . . . . 1 . . . . . 1 . . . . 1 . . .
 1 . . . . . . . . . . . . 1 . . . . 1 . .
 . 1 . . . . . 1 . . . . . . . . . . . 1 .
 . . 1 . . . . . 1 . . . . . . . . . . . 1
 . . . 1 . . . . . 1 . . . . 1 . . . . . .
 . . . . 1 . . . . . 1 . . . . 1 . . . . .
gap> # This is the famous [155,64,20] quasi-cyclic LDPC codes
gap> C := QCLDPCCodeFromGroup(31,3,5);
a linear [155,64,1..24]24..77 low-density parity-check code over GF(2)
gap> # An example using non prime m, it may take a while to construct this code
gap> C := QCLDPCCodeFromGroup(356,4,8);
a linear [2848,1436,1..120]312..1412 low-density parity-check code over GF(2)
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

generated by GAPDoc2HTML

guava-3.6/doc/guava.log0000644017361200001450000013474211027015742014727 0ustar tabbottcrontabThis is pdfTeXk, Version 3.141592-1.40.3 (Web2C 7.5.6) (format=pdflatex 2008.5.24) 20 JUN 2008 17:06 entering extended mode %&-line parsing enabled. **guava (./guava.tex LaTeX2e <2005/12/01> Babel and hyphenation patterns for english, usenglishmax, dumylang, noh yphenation, croatian, ukrainian, russian, bulgarian, czech, slovak, danish, dut ch, finnish, basque, french, german, ngerman, ibycus, greek, monogreek, ancient greek, hungarian, italian, latin, mongolian, norsk, icelandic, interlingua, tur kish, coptic, romanian, welsh, serbian, slovenian, estonian, esperanto, upperso rbian, indonesian, polish, portuguese, spanish, catalan, galician, swedish, loa ded. (/usr/share/texmf-texlive/tex/latex/base/report.cls Document Class: report 2005/09/16 v1.4f Standard LaTeX document class (/usr/share/texmf-texlive/tex/latex/base/size11.clo File: size11.clo 2005/09/16 v1.4f Standard LaTeX file (size option) ) \c@part=\count79 \c@chapter=\count80 \c@section=\count81 \c@subsection=\count82 \c@subsubsection=\count83 \c@paragraph=\count84 \c@subparagraph=\count85 \c@figure=\count86 \c@table=\count87 \abovecaptionskip=\skip41 \belowcaptionskip=\skip42 \bibindent=\dimen102 ) (/usr/share/texmf-texlive/tex/latex/ltxmisc/a4wide.sty Package: a4wide 1994/08/30 (/usr/share/texmf-texlive/tex/latex/ntgclass/a4.sty Package: a4 2004/04/15 v1.2g A4 based page layout )) (/usr/share/texmf-texlive/tex/latex/amsfonts/amssymb.sty Package: amssymb 2002/01/22 v2.2d (/usr/share/texmf-texlive/tex/latex/amsfonts/amsfonts.sty Package: amsfonts 2001/10/25 v2.2f \@emptytoks=\toks14 \symAMSa=\mathgroup4 \symAMSb=\mathgroup5 LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' (Font) U/euf/m/n --> U/euf/b/n on input line 132. )) (/usr/share/texmf-texlive/tex/latex/base/inputenc.sty Package: inputenc 2006/05/05 v1.1b Input encoding file \inpenc@prehook=\toks15 \inpenc@posthook=\toks16 (/usr/share/texmf-texlive/tex/latex/base/latin1.def File: latin1.def 2006/05/05 v1.1b Input encoding file )) (/usr/share/texmf-texlive/tex/latex/base/makeidx.sty Package: makeidx 2000/03/29 v1.0m Standard LaTeX package ) \@indexfile=\write3 \openout3 = `guava.idx'. Writing index file guava.idx (/usr/share/texmf-texlive/tex/latex/graphics/color.sty Package: color 2005/11/14 v1.0j Standard LaTeX Color (DPC) (/etc/texmf/tex/latex/config/color.cfg File: color.cfg 2007/01/18 v1.5 color configuration of teTeX/TeXLive ) Package color Info: Driver file: pdftex.def on input line 130. (/usr/share/texmf-texlive/tex/latex/pdftex-def/pdftex.def File: pdftex.def 2007/01/08 v0.04d Graphics/color for pdfTeX \Gread@gobject=\count88 )) (/usr/share/texmf-texlive/tex/latex/fancyvrb/fancyvrb.sty Package: fancyvrb 1998/07/17 Style option: `fancyvrb' v2.6, with DG/SPQR fixes <1998/07/17> (tvz) (/usr/share/texmf-texlive/tex/latex/graphics/keyval.sty Package: keyval 1999/03/16 v1.13 key=value parser (DPC) \KV@toks@=\toks17 ) \FV@CodeLineNo=\count89 \FV@InFile=\read1 \FV@TabBox=\box26 \c@FancyVerbLine=\count90 \FV@StepNumber=\count91 \FV@OutFile=\write4 No file fancyvrb.cfg. ) (/usr/share/texmf-texlive/tex/latex/pslatex/pslatex.sty Package: pslatex 1996/07/24 v1.2 pslatex emulation (DPC) LaTeX Font Info: Redeclaring symbol font `operators' on input line 65. LaTeX Font Info: Overwriting symbol font `operators' in version `normal' (Font) OT1/cmr/m/n --> OT1/ptmcm/m/n on input line 65. LaTeX Font Info: Overwriting symbol font `operators' in version `bold' (Font) OT1/cmr/bx/n --> OT1/ptmcm/m/n on input line 65. LaTeX Font Info: Redeclaring symbol font `letters' on input line 66. LaTeX Font Info: Overwriting symbol font `letters' in version `normal' (Font) OML/cmm/m/it --> OML/ptmcm/m/it on input line 66. LaTeX Font Info: Overwriting symbol font `letters' in version `bold' (Font) OML/cmm/b/it --> OML/ptmcm/m/it on input line 66. LaTeX Font Info: Redeclaring symbol font `symbols' on input line 67. LaTeX Font Info: Overwriting symbol font `symbols' in version `normal' (Font) OMS/cmsy/m/n --> OMS/pzccm/m/n on input line 67. LaTeX Font Info: Overwriting symbol font `symbols' in version `bold' (Font) OMS/cmsy/b/n --> OMS/pzccm/m/n on input line 67. LaTeX Font Info: Redeclaring symbol font `largesymbols' on input line 68. LaTeX Font Info: Overwriting symbol font `largesymbols' in version `normal' (Font) OMX/cmex/m/n --> OMX/psycm/m/n on input line 68. LaTeX Font Info: Overwriting symbol font `largesymbols' in version `bold' (Font) OMX/cmex/m/n --> OMX/psycm/m/n on input line 68. \symbold=\mathgroup6 \symitalic=\mathgroup7 LaTeX Font Info: Redeclaring math alphabet \mathbf on input line 74. LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `normal' (Font) OT1/cmr/bx/n --> OT1/ptm/bx/n on input line 74. LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `bold' (Font) OT1/cmr/bx/n --> OT1/ptm/bx/n on input line 74. LaTeX Font Info: Redeclaring math alphabet \mathit on input line 75. LaTeX Font Info: Overwriting math alphabet `\mathit' in version `normal' (Font) OT1/cmr/m/it --> OT1/ptm/m/it on input line 75. LaTeX Font Info: Overwriting math alphabet `\mathit' in version `bold' (Font) OT1/cmr/bx/it --> OT1/ptm/m/it on input line 75. ) (/usr/share/texmf-texlive/tex/latex/hyperref/hyperref.sty Package: hyperref 2007/02/07 v6.75r Hypertext links for LaTeX \@linkdim=\dimen103 \Hy@linkcounter=\count92 \Hy@pagecounter=\count93 (/usr/share/texmf-texlive/tex/latex/hyperref/pd1enc.def File: pd1enc.def 2007/02/07 v6.75r Hyperref: PDFDocEncoding definition (HO) ) (/etc/texmf/tex/latex/config/hyperref.cfg File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive ) (/usr/share/texmf-texlive/tex/latex/oberdiek/kvoptions.sty Package: kvoptions 2006/08/22 v2.4 Connects package keyval with LaTeX options ( HO) ) Package hyperref Info: Option `bookmarks' set `false' on input line 2238. Package hyperref Info: Option `colorlinks' set `true' on input line 2238. Package hyperref Info: Option `breaklinks' set `true' on input line 2238. Package hyperref Info: Hyper figures OFF on input line 2288. Package hyperref Info: Link nesting OFF on input line 2293. Package hyperref Info: Hyper index ON on input line 2296. Package hyperref Info: Plain pages OFF on input line 2303. Package hyperref Info: Backreferencing ON on input line 2306. Implicit mode ON; LaTeX internals redefined Package hyperref Info: Bookmarks OFF on input line 2450. (/usr/share/texmf-texlive/tex/latex/hyperref/backref.sty Package: backref 2006/10/06 v1.27 Bibliographical back referencing ) (/usr/share/texmf-texlive/tex/latex/ltxmisc/url.sty \Urlmuskip=\muskip10 Package: url 2005/06/27 ver 3.2 Verb mode for urls, etc. ) LaTeX Info: Redefining \url on input line 2599. \Fld@menulength=\count94 \Field@Width=\dimen104 \Fld@charsize=\dimen105 \Choice@toks=\toks18 \Field@toks=\toks19 Package hyperref Info: Hyper figures OFF on input line 3102. Package hyperref Info: Link nesting OFF on input line 3107. Package hyperref Info: Hyper index ON on input line 3110. Package hyperref Info: backreferencing ON on input line 3115. Package hyperref Info: Link coloring ON on input line 3120. \Hy@abspage=\count95 \c@Item=\count96 \c@Hfootnote=\count97 ) *hyperref using driver hpdftex* (/usr/share/texmf-texlive/tex/latex/hyperref/hpdftex.def File: hpdftex.def 2007/02/07 v6.75r Hyperref driver for pdfTeX \Fld@listcount=\count98 ) \pagenrlog=\write5 \openout5 = `guava.pnr'. (./guava.aux LaTeX Warning: Label `+' multiply defined. LaTeX Warning: Label `=' multiply defined. LaTeX Warning: Label `+' multiply defined. LaTeX Warning: Label `*' multiply defined. ) \openout1 = `guava.aux'. LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 47. LaTeX Font Info: ... okay on input line 47. LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 47. LaTeX Font Info: ... okay on input line 47. LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 47. LaTeX Font Info: ... okay on input line 47. LaTeX Font Info: Checking defaults for OMS/pzccm/m/n on input line 47. LaTeX Font Info: Try loading font information for OMS+pzccm on input line 47 . (/usr/share/texmf-texlive/tex/latex/psnfss/omspzccm.fd File: omspzccm.fd 2000/01/03 Fontinst v1.801 font definitions for OMS/pzccm. ) LaTeX Font Info: ... okay on input line 47. LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 47. LaTeX Font Info: ... okay on input line 47. LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 47. LaTeX Font Info: ... okay on input line 47. LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 47. LaTeX Font Info: ... okay on input line 47. Package hyperref Info: Link coloring ON on input line 47. (/usr/share/texmf-texlive/tex/latex/hyperref/nameref.sty Package: nameref 2006/12/27 v2.28 Cross-referencing by name of section (/usr/share/texmf-texlive/tex/latex/oberdiek/refcount.sty Package: refcount 2006/02/20 v3.0 Data extraction from references (HO) ) \c@section@level=\count99 ) LaTeX Info: Redefining \ref on input line 47. LaTeX Info: Redefining \pageref on input line 47. LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <24.88> not available (Font) Font shape `OT1/ptm/b/n' tried instead on input line 51. LaTeX Font Info: Font shape `OT1/phv/bx/n' in size <24.88> not available (Font) Font shape `OT1/phv/b/n' tried instead on input line 51. LaTeX Font Info: Font shape `OT1/phv/b/n' will be (Font) scaled to size 22.39185pt on input line 51. LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <14.4> not available (Font) Font shape `OT1/ptm/b/n' tried instead on input line 54. LaTeX Font Info: Font shape `OT1/phv/bx/n' in size <14.4> not available (Font) Font shape `OT1/phv/b/n' tried instead on input line 54. LaTeX Font Info: Font shape `OT1/phv/b/n' will be (Font) scaled to size 12.9599pt on input line 54. LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <12> not available (Font) Font shape `OT1/ptm/b/n' tried instead on input line 58. ! Package keyval Error: Lea Ruscio ; Robert L Miller undefined. See the keyval package documentation for explanation. Type H for immediate help. ... l.66 ...ai ; David Joyner (Maintainer), } Try typing to proceed. If that doesn't work, type X to quit. ! Package keyval Error: ; Tom Boothby ; Cen (``CJ'') Tjhai ; David Joyner (Main tainer) undefined. See the keyval package documentation for explanation. Type H for immediate help. ... l.66 ...ai ; David Joyner (Maintainer), } Try typing to proceed. If that doesn't work, type X to quit. LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <10> not available (Font) Font shape `OT1/ptm/b/n' tried instead on input line 71. Underfull \hbox (badness 10000) in paragraph at lines 69--78 [] [1 {/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] LaTeX Font Info: Font shape `OT1/phv/m/n' will be (Font) scaled to size 8.99994pt on input line 84. LaTeX Font Info: Font shape `OMS/ptm/m/n' in size <10> not available (Font) Font shape `OMS/pzccm/m/n' tried instead on input line 84. Underfull \hbox (badness 10000) in paragraph at lines 113--122 [] Underfull \hbox (badness 1057) in paragraph at lines 146--147 \OT1/ptm/m/n/10 Cur-rently known bugs and sug-gested \OT1/phv/m/n/10 GUAVA \OT1 /ptm/m/n/10 projects are listed on the bugs and projects web page [] LaTeX Font Info: Font shape `OT1/phv/m/sl' will be (Font) scaled to size 7.19995pt on input line 152. [2] Underfull \hbox (badness 10000) in paragraph at lines 152--153 [] [3] (./guava.toc LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <10.95> not available (Font) Font shape `OT1/ptm/b/n' tried instead on input line 1. LaTeX Font Info: Font shape `OT1/phv/m/n' will be (Font) scaled to size 9.85492pt on input line 2. LaTeX Font Info: Try loading font information for OT1+ptmcm on input line 2. (/usr/share/texmf-texlive/tex/latex/psnfss/ot1ptmcm.fd File: ot1ptmcm.fd 2000/01/03 Fontinst v1.801 font definitions for OT1/ptmcm. ) LaTeX Font Info: Try loading font information for OML+ptmcm on input line 2. (/usr/share/texmf-texlive/tex/latex/psnfss/omlptmcm.fd File: omlptmcm.fd 2000/01/03 Fontinst v1.801 font definitions for OML/ptmcm. ) LaTeX Font Info: Try loading font information for OMX+psycm on input line 2. (/usr/share/texmf-texlive/tex/latex/psnfss/omxpsycm.fd File: omxpsycm.fd 2000/01/03 Fontinst v1.801 font definitions for OMX/psycm. ) LaTeX Font Info: Try loading font information for U+msa on input line 2. (/usr/share/texmf-texlive/tex/latex/amsfonts/umsa.fd File: umsa.fd 2002/01/19 v2.2g AMS font definitions ) LaTeX Font Info: Try loading font information for U+msb on input line 2. (/usr/share/texmf-texlive/tex/latex/amsfonts/umsb.fd File: umsb.fd 2002/01/19 v2.2g AMS font definitions ) LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <8> not available (Font) Font shape `OT1/ptm/b/n' tried instead on input line 2. LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <6> not available (Font) Font shape `OT1/ptm/b/n' tried instead on input line 2. [4 ] [5] [6] [7] [8] [9] [10]) \tf@toc=\write6 \openout6 = `guava.toc'. [11] Chapter 1. LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <20.74> not available (Font) Font shape `OT1/ptm/b/n' tried instead on input line 161. LaTeX Font Info: Font shape `OMS/ptm/m/n' in size <10.95> not available (Font) Font shape `OMS/pzccm/m/n' tried instead on input line 175. [12 ] [13] Chapter 2. Underfull \hbox (badness 10000) in paragraph at lines 272--275 [] [14 ] Underfull \hbox (badness 10000) in paragraph at lines 307--310 [] Underfull \hbox (badness 10000) in paragraph at lines 333--336 [] [15] Underfull \hbox (badness 10000) in paragraph at lines 358--361 [] Underfull \hbox (badness 10000) in paragraph at lines 383--386 [] Underfull \hbox (badness 10000) in paragraph at lines 401--404 [] Underfull \hbox (badness 2150) in paragraph at lines 407--410 \OT1/ptm/m/n/10.95 This is also called the (Ham-ming) dis-tance be-tween $\OML/ ptmcm/m/it/10.95 v \OT1/ptmcm/m/n/10.95 = (\OML/ptmcm/m/it/10.95 v[]; :::; v[]\ OT1/ptmcm/m/n/10.95 )$ \OT1/ptm/m/n/10.95 and $\OML/ptmcm/m/it/10.95 w \OT1/ptm cm/m/n/10.95 = (\OML/ptmcm/m/it/10.95 w[]; :::; w[]\OT1/ptmcm/m/n/10.95 )$\OT1/ ptm/m/n/10.95 . [] [16] Underfull \hbox (badness 10000) in paragraph at lines 435--438 [] Underfull \hbox (badness 10000) in paragraph at lines 461--464 [] [17] [18] Chapter 3. [19 ] Underfull \hbox (badness 10000) in paragraph at lines 523--526 [] [20] Underfull \hbox (badness 10000) in paragraph at lines 592--595 [] [21] Underfull \hbox (badness 10000) in paragraph at lines 620--623 [] Underfull \hbox (badness 10000) in paragraph at lines 650--653 [] LaTeX Font Info: Try loading font information for OML+ptm on input line 664. (/usr/share/texmf-texlive/tex/latex/psnfss/omlptm.fd File: omlptm.fd ) LaTeX Font Info: Font shape `OML/ptm/m/n' in size <10.95> not available (Font) Font shape `OML/cmm/m/it' tried instead on input line 664. [22] Underfull \hbox (badness 10000) in paragraph at lines 700--703 [] Underfull \hbox (badness 10000) in paragraph at lines 726--729 [] Underfull \hbox (badness 10000) in paragraph at lines 738--741 [] [23pdfTeX warning (ext4): destination with the same identifier (name{L.X7F27034 17F270341}) has been already used, duplicate ignored \endgroup \set@typeset@protect l.756 ...5,?] randomly generated code over GF(2) ] ] Underfull \hbox (badness 10000) in paragraph at lines 797--800 [] Underfull \hbox (badness 10000) in paragraph at lines 816--819 [] [24] Underfull \hbox (badness 10000) in paragraph at lines 841--844 [] Underfull \hbox (badness 10000) in paragraph at lines 867--870 [] [25] Underfull \hbox (badness 10000) in paragraph at lines 903--906 [] Underfull \hbox (badness 10000) in paragraph at lines 926--929 [] Underfull \hbox (badness 10000) in paragraph at lines 950--953 [] [26] Underfull \hbox (badness 10000) in paragraph at lines 979--982 [] [27] Chapter 4. [28 ] [29]pdfTeX warning (ext4): destination with the same identifier (name{L.X8123 456781234567}) has been already used, duplicate ignored \relax l.1098 \hyperdef{L}{X8123456781234567}{} Underfull \hbox (badness 10000) in paragraph at lines 1099--1102 [] [30]pdfTeX warning (ext4): destination with the same identifier (name{L.X7F2703 417F270341}) has been already used, duplicate ignored \relax l.1139 \hyperdef{L}{X7F2703417F270341}{} Underfull \hbox (badness 10000) in paragraph at lines 1140--1143 [] pdfTeX warning (ext4): destination with the same identifier (name{L.X8123456781 234567}) has been already used, duplicate ignored \relax l.1162 \hyperdef{L}{X8123456781234567}{} Underfull \hbox (badness 10000) in paragraph at lines 1163--1166 [] pdfTeX warning (ext4): destination with the same identifier (name{L.X8123456781 234567}) has been already used, duplicate ignored \relax l.1183 \hyperdef{L}{X8123456781234567}{} Underfull \hbox (badness 10000) in paragraph at lines 1184--1187 [] [31] Underfull \hbox (badness 10000) in paragraph at lines 1209--1212 [] Underfull \hbox (badness 10000) in paragraph at lines 1248--1251 [] Underfull \hbox (badness 10000) in paragraph at lines 1269--1272 [] [32] Underfull \hbox (badness 10000) in paragraph at lines 1290--1293 [] Underfull \hbox (badness 10000) in paragraph at lines 1310--1313 [] Underfull \hbox (badness 10000) in paragraph at lines 1335--1338 [] [33] Underfull \hbox (badness 10000) in paragraph at lines 1360--1363 [] Underfull \hbox (badness 10000) in paragraph at lines 1390--1393 [] [34] Underfull \hbox (badness 10000) in paragraph at lines 1414--1417 [] Underfull \hbox (badness 10000) in paragraph at lines 1440--1443 [] Underfull \hbox (badness 10000) in paragraph at lines 1462--1465 [] [35] Underfull \hbox (badness 10000) in paragraph at lines 1491--1494 [] Underfull \hbox (badness 10000) in paragraph at lines 1517--1520 [] [36] Underfull \hbox (badness 10000) in paragraph at lines 1551--1554 [] Underfull \hbox (badness 10000) in paragraph at lines 1573--1576 [] Underfull \hbox (badness 10000) in paragraph at lines 1596--1599 [] [37] Underfull \hbox (badness 10000) in paragraph at lines 1627--1630 [] Underfull \hbox (badness 10000) in paragraph at lines 1656--1659 [] [38] Underfull \hbox (badness 10000) in paragraph at lines 1681--1684 [] Underfull \hbox (badness 10000) in paragraph at lines 1720--1723 [] [39] Underfull \hbox (badness 10000) in paragraph at lines 1752--1755 [] Underfull \hbox (badness 10000) in paragraph at lines 1769--1772 [] Underfull \hbox (badness 10000) in paragraph at lines 1789--1792 [] [40] Underfull \hbox (badness 10000) in paragraph at lines 1811--1814 [] Underfull \hbox (badness 10000) in paragraph at lines 1835--1838 [] [41] Underfull \hbox (badness 10000) in paragraph at lines 1869--1872 [] Underfull \hbox (badness 10000) in paragraph at lines 1908--1911 [] Underfull \hbox (badness 10000) in paragraph at lines 1931--1934 [] [42] Underfull \hbox (badness 10000) in paragraph at lines 1958--1961 [] Underfull \hbox (badness 10000) in paragraph at lines 1996--1999 [] [43] Underfull \hbox (badness 10000) in paragraph at lines 2031--2034 [] [44] Underfull \hbox (badness 10000) in paragraph at lines 2066--2069 [] Underfull \hbox (badness 10000) in paragraph at lines 2090--2093 [] Underfull \hbox (badness 10000) in paragraph at lines 2116--2119 [] [45] Underfull \hbox (badness 10000) in paragraph at lines 2150--2153 [] Underfull \hbox (badness 10000) in paragraph at lines 2172--2175 [] Underfull \hbox (badness 10000) in paragraph at lines 2195--2198 [] [46] LaTeX Font Info: Font shape `OT1/pcr/m/it' in size <10.95> not available (Font) Font shape `OT1/pcr/m/sl' tried instead on input line 2208. Underfull \hbox (badness 10000) in paragraph at lines 2239--2242 [] [47] Underfull \hbox (badness 10000) in paragraph at lines 2275--2278 [] [48] [49] Underfull \hbox (badness 10000) in paragraph at lines 2408--2411 [] [50] Underfull \hbox (badness 2042) in paragraph at lines 2418--2420 []\OT1/ptm/m/n/10.95 The re-sult re-turned is a record with two fields; the fir st, \OT1/pcr/m/n/10.95 mindist\OT1/ptm/m/n/10.95 , gives the low-est [] Underfull \hbox (badness 1590) in paragraph at lines 2418--2420 \OT1/ptm/m/n/10.95 rectly, so the com-mand was only found af-ter read-ing all t he \OT1/ptm/m/it/10.95 *.gi \OT1/ptm/m/n/10.95 files in the \OT1/phv/m/n/10.95 GUAVA \OT1/ptm/m/n/10.95 li- [] Underfull \hbox (badness 10000) in paragraph at lines 2442--2445 [] [51] [52] Underfull \hbox (badness 10000) in paragraph at lines 2518--2521 [] [53] Underfull \hbox (badness 10000) in paragraph at lines 2575--2578 [] Underfull \hbox (badness 10000) in paragraph at lines 2607--2610 [] Underfull \hbox (badness 10000) in paragraph at lines 2632--2635 [] [54] Underfull \hbox (badness 10000) in paragraph at lines 2657--2660 [] Underfull \hbox (badness 10000) in paragraph at lines 2680--2683 [] Underfull \hbox (badness 10000) in paragraph at lines 2703--2706 [] [55] Underfull \hbox (badness 10000) in paragraph at lines 2737--2740 [] [56] Underfull \hbox (badness 10000) in paragraph at lines 2784--2787 [] [57] Underfull \hbox (badness 10000) in paragraph at lines 2837--2840 [] Underfull \hbox (badness 1102) in paragraph at lines 2845--2847 []\OT1/ptm/m/n/10.95 For long codes, this method is faster in prac-tice than th e in-ter-po-la-tion method used in [] Underfull \hbox (badness 10000) in paragraph at lines 2870--2873 [] [58] Underfull \hbox (badness 10000) in paragraph at lines 2921--2924 [] [59] Underfull \hbox (badness 10000) in paragraph at lines 2954--2957 [] Underfull \hbox (badness 10000) in paragraph at lines 2995--2998 [] [60] Underfull \hbox (badness 10000) in paragraph at lines 3037--3040 [] Underfull \hbox (badness 10000) in paragraph at lines 3066--3069 [] [61] Underfull \hbox (badness 10000) in paragraph at lines 3100--3103 [] Underfull \hbox (badness 10000) in paragraph at lines 3124--3127 [] Underfull \hbox (badness 10000) in paragraph at lines 3132--3134 []\OT1/ptm/m/n/10.95 This uses \OT1/pcr/m/n/10.95 AutomorphismGroup \OT1/ptm/m/ n/10.95 in the bi-nary case, and (the slower) [] [62] Underfull \hbox (badness 10000) in paragraph at lines 3170--3173 [] [63] Chapter 5. Underfull \hbox (badness 10000) in paragraph at lines 3220--3223 [] [64 ] Underfull \hbox (badness 10000) in paragraph at lines 3245--3248 [] Underfull \hbox (badness 3623) in paragraph at lines 3250--3251 []\OT1/ptm/m/n/10.95 The four forms this com-mand can take are \OT1/pcr/m/n/10. 95 HadamardCode(H,t)\OT1/ptm/m/n/10.95 , \OT1/pcr/m/n/10.95 HadamardCode(H)\OT1 /ptm/m/n/10.95 , [] Underfull \hbox (badness 10000) in paragraph at lines 3287--3290 [] [65] Underfull \hbox (badness 10000) in paragraph at lines 3317--3320 [] Underfull \hbox (badness 10000) in paragraph at lines 3352--3355 [] [66] Underfull \hbox (badness 1546) in paragraph at lines 3359--3360 []\OT1/ptm/m/n/10.95 The func-tion \OT1/pcr/m/n/10.95 RandomLinearCode \OT1/ptm /m/n/10.95 re-turns a ran-dom lin-ear code (see \OT1/pcr/m/n/10.95 RandomLinear Code [] Underfull \hbox (badness 10000) in paragraph at lines 3377--3380 [] Underfull \hbox (badness 10000) in paragraph at lines 3396--3399 [] Underfull \hbox (badness 10000) in paragraph at lines 3423--3426 [] [67] Underfull \hbox (badness 1430) in paragraph at lines 3457--3459 []\OT1/ptm/m/n/10.95 The next func-tions we de-scribe gen-er-ate some well-know n codes, like Ham-ming codes [] Underfull \hbox (badness 10000) in paragraph at lines 3470--3473 [] [68] Underfull \hbox (badness 10000) in paragraph at lines 3499--3502 [] Underfull \hbox (badness 10000) in paragraph at lines 3511--3514 [] Underfull \hbox (badness 10000) in paragraph at lines 3540--3543 [] [69] Underfull \hbox (badness 10000) in paragraph at lines 3563--3566 [] Underfull \hbox (badness 10000) in paragraph at lines 3580--3583 [] Underfull \hbox (badness 10000) in paragraph at lines 3600--3603 [] [70] Underfull \hbox (badness 10000) in paragraph at lines 3639--3642 [] [71] Underfull \hbox (badness 10000) in paragraph at lines 3660--3663 [] Underfull \hbox (badness 10000) in paragraph at lines 3686--3689 [] Underfull \hbox (badness 10000) in paragraph at lines 3706--3709 [] [72] Underfull \hbox (badness 10000) in paragraph at lines 3757--3760 [] [73] Underfull \hbox (badness 10000) in paragraph at lines 3781--3784 [] Underfull \hbox (badness 10000) in paragraph at lines 3796--3799 [] [74] [75] Underfull \hbox (badness 10000) in paragraph at lines 3895--3898 [] Underfull \hbox (badness 10000) in paragraph at lines 3907--3910 [] Underfull \hbox (badness 10000) in paragraph at lines 3919--3922 [] Underfull \hbox (badness 10000) in paragraph at lines 3931--3934 [] Underfull \hbox (badness 10000) in paragraph at lines 3943--3946 [] [76] Underfull \hbox (badness 10000) in paragraph at lines 3978--3981 [] Underfull \hbox (badness 10000) in paragraph at lines 4001--4004 [] [77] Underfull \hbox (badness 10000) in paragraph at lines 4028--4031 [] Underfull \hbox (badness 10000) in paragraph at lines 4049--4052 [] [78] Underfull \hbox (badness 1194) in paragraph at lines 4101--4102 []\OT1/ptm/m/n/10.95 Finally we de-scribe the triv-ial codes (see \OT1/pcr/m/n/ 10.95 WholeSpaceCode \OT1/ptm/m/n/10.95 ([][]5.5.11[][]), \OT1/pcr/m/n/10.95 Nu llCode \OT1/ptm/m/n/10.95 ([][]5.5.12[][]), [] Underfull \hbox (badness 3668) in paragraph at lines 4101--4102 \OT1/pcr/m/n/10.95 RepetitionCode \OT1/ptm/m/n/10.95 ([][]5.5.13[][])), and the com-mand \OT1/pcr/m/n/10.95 CyclicCodes \OT1/ptm/m/n/10.95 which lists all cyc lic codes [] Underfull \hbox (badness 10000) in paragraph at lines 4106--4109 [] [79] Underfull \hbox (badness 10000) in paragraph at lines 4134--4137 [] Underfull \hbox (badness 10000) in paragraph at lines 4160--4163 [] [80] Underfull \hbox (badness 10000) in paragraph at lines 4194--4197 [] Underfull \hbox (badness 10000) in paragraph at lines 4234--4237 [] [81] Underfull \hbox (badness 10000) in paragraph at lines 4260--4263 [] Underfull \hbox (badness 10000) in paragraph at lines 4280--4283 [] [82] Underfull \hbox (badness 10000) in paragraph at lines 4312--4315 [] Underfull \hbox (badness 10000) in paragraph at lines 4324--4327 [] [83] Underfull \hbox (badness 10000) in paragraph at lines 4367--4370 [] Underfull \hbox (badness 10000) in paragraph at lines 4395--4398 [] Underfull \hbox (badness 10000) in paragraph at lines 4412--4415 [] [84] Underfull \hbox (badness 10000) in paragraph at lines 4431--4434 [] Underfull \hbox (badness 10000) in paragraph at lines 4454--4457 [] Underfull \hbox (badness 10000) in paragraph at lines 4475--4478 [] [85] Underfull \hbox (badness 10000) in paragraph at lines 4507--4510 [] [86] Underfull \hbox (badness 10000) in paragraph at lines 4574--4577 [] Underfull \hbox (badness 10000) in paragraph at lines 4602--4605 [] [87] [88] Underfull \hbox (badness 10000) in paragraph at lines 4662--4665 [] Underfull \hbox (badness 10000) in paragraph at lines 4681--4684 [] Underfull \hbox (badness 10000) in paragraph at lines 4691--4692 []\OT1/ptm/m/n/10.95 This com-mand re-turns a "record" ob-ject \OT1/pcr/m/n/10. 95 C \OT1/ptm/m/n/10.95 with sev-eral ex-tra com-po-nents (type [] Underfull \hbox (badness 10000) in paragraph at lines 4716--4719 [] [89] Underfull \hbox (badness 10000) in paragraph at lines 4726--4727 []\OT1/ptm/m/n/10.95 This com-mand re-turns a "record" ob-ject \OT1/pcr/m/n/10. 95 C \OT1/ptm/m/n/10.95 with sev-eral ex-tra com-po-nents (type [] Underfull \hbox (badness 1158) in paragraph at lines 4726--4727 \OT1/pcr/m/n/10.95 NamesOfComponents(C) \OT1/ptm/m/n/10.95 to see them all): \O T1/pcr/m/n/10.95 C!.points \OT1/ptm/m/n/10.95 (namely []), \OT1/pcr/m/n/10.95 C !.degree \OT1/ptm/m/n/10.95 (namely []), [] Underfull \hbox (badness 10000) in paragraph at lines 4732--4733 []\OT1/ptm/m/n/10.95 The weighted ver-sion has im-ple-mented with the op-tion [] Underfull \hbox (badness 10000) in paragraph at lines 4758--4761 [] [90] Underfull \hbox (badness 10000) in paragraph at lines 4765--4766 []\OT1/ptm/m/n/10.95 This com-mand re-turns a "record" ob-ject \OT1/pcr/m/n/10. 95 C \OT1/ptm/m/n/10.95 with sev-eral ex-tra com-po-nents (type [] Underfull \hbox (badness 10000) in paragraph at lines 4782--4785 [] Underfull \hbox (badness 10000) in paragraph at lines 4803--4806 [] [91] Underfull \hbox (badness 10000) in paragraph at lines 4832--4835 [] Underfull \hbox (badness 10000) in paragraph at lines 4883--4886 [] [92] Underfull \hbox (badness 10000) in paragraph at lines 4908--4911 [] Underfull \hbox (badness 10000) in paragraph at lines 4938--4941 [] [93] [94] Underfull \hbox (badness 10000) in paragraph at lines 5012--5015 [] Underfull \hbox (badness 10000) in paragraph at lines 5050--5053 [] Underfull \hbox (badness 10000) in paragraph at lines 5062--5065 [] Underfull \hbox (badness 10000) in paragraph at lines 5074--5077 [] [95] Underfull \hbox (badness 10000) in paragraph at lines 5086--5089 [] Underfull \hbox (badness 10000) in paragraph at lines 5098--5101 [] Underfull \hbox (badness 10000) in paragraph at lines 5110--5113 [] Underfull \hbox (badness 10000) in paragraph at lines 5122--5125 [] [96] Underfull \hbox (badness 10000) in paragraph at lines 5199--5202 [] [97] Underfull \hbox (badness 10000) in paragraph at lines 5211--5214 [] Underfull \hbox (badness 10000) in paragraph at lines 5263--5266 [] [98] [99] Underfull \hbox (badness 10000) in paragraph at lines 5324--5327 [] Underfull \hbox (badness 10000) in paragraph at lines 5336--5339 [] Underfull \hbox (badness 10000) in paragraph at lines 5348--5351 [] Underfull \hbox (badness 10000) in paragraph at lines 5361--5364 [] [100] Underfull \hbox (badness 10000) in paragraph at lines 5409--5412 [] Underfull \hbox (badness 10000) in paragraph at lines 5447--5450 [] [101] Underfull \hbox (badness 10000) in paragraph at lines 5511--5514 [] [102] Underfull \hbox (badness 10000) in paragraph at lines 5549--5552 [] Underfull \hbox (badness 10000) in paragraph at lines 5566--5569 [] [103] Underfull \hbox (badness 10000) in paragraph at lines 5618--5621 [] Underfull \hbox (badness 10000) in paragraph at lines 5628--5629 []\OT1/ptm/m/n/10.95 This com-mand re-turns a "record" ob-ject \OT1/pcr/m/n/10. 95 C \OT1/ptm/m/n/10.95 with sev-eral ex-tra com-po-nents (type [] [104] [105] Underfull \hbox (badness 10000) in paragraph at lines 5688--5691 [] [106] [107] Chapter 6. Underfull \hbox (badness 1127) in paragraph at lines 5789--5791 \OT1/ptm/m/n/10.95 ([][]6.1.6[][]), \OT1/pcr/m/n/10.95 RemovedElementsCode \OT1 /ptm/m/n/10.95 ([][]6.1.7[][]), \OT1/pcr/m/n/10.95 AddedElementsCode \OT1/ptm/m /n/10.95 ([][]6.1.8[][]), \OT1/pcr/m/n/10.95 ShortenedCode \OT1/ptm/m/n/10.95 ( [][]6.1.9[][]), [] Underfull \hbox (badness 3078) in paragraph at lines 5789--5791 \OT1/pcr/m/n/10.95 LengthenedCode \OT1/ptm/m/n/10.95 ([][]6.1.10[][]), \OT1/pcr /m/n/10.95 ResidueCode \OT1/ptm/m/n/10.95 ([][]6.1.12[][]), \OT1/pcr/m/n/10.95 ConstructionBCode \OT1/ptm/m/n/10.95 ([][]6.1.13[][]), \OT1/pcr/m/n/10.95 DualC ode [] Underfull \hbox (badness 10000) in paragraph at lines 5799--5802 [] [108 ] Underfull \hbox (badness 5578) in paragraph at lines 5827--5829 \OT1/ptm/m/n/10.95 To undo ex-tend-ing, call \OT1/pcr/m/n/10.95 PuncturedCode \ OT1/ptm/m/n/10.95 (see \OT1/pcr/m/n/10.95 PuncturedCode \OT1/ptm/m/n/10.95 ([][ ]6.1.2[][])). The func-tion [] Underfull \hbox (badness 10000) in paragraph at lines 5833--5836 [] Underfull \hbox (badness 10000) in paragraph at lines 5866--5869 [] [109] Underfull \hbox (badness 10000) in paragraph at lines 5894--5897 [] Underfull \hbox (badness 10000) in paragraph at lines 5923--5926 [] [110] Underfull \hbox (badness 10000) in paragraph at lines 5949--5952 [] Underfull \hbox (badness 10000) in paragraph at lines 5984--5987 [] [111] Underfull \hbox (badness 10000) in paragraph at lines 6009--6012 [] Underfull \hbox (badness 10000) in paragraph at lines 6034--6037 [] [112] Underfull \hbox (badness 10000) in paragraph at lines 6076--6079 [] Underfull \hbox (badness 10000) in paragraph at lines 6097--6100 [] [113] Underfull \hbox (badness 10000) in paragraph at lines 6127--6130 [] Underfull \hbox (badness 10000) in paragraph at lines 6151--6154 [] [114] Underfull \hbox (badness 10000) in paragraph at lines 6186--6189 [] Underfull \hbox (badness 10000) in paragraph at lines 6216--6219 [] [115] Underfull \hbox (badness 10000) in paragraph at lines 6244--6247 [] Underfull \hbox (badness 10000) in paragraph at lines 6273--6276 [] [116] Underfull \hbox (badness 10000) in paragraph at lines 6301--6304 [] Underfull \hbox (badness 10000) in paragraph at lines 6335--6338 [] [117] Underfull \hbox (badness 10000) in paragraph at lines 6371--6374 [] Underfull \hbox (badness 10000) in paragraph at lines 6409--6412 [] [118] Underfull \hbox (badness 10000) in paragraph at lines 6437--6440 [] Underfull \hbox (badness 10000) in paragraph at lines 6467--6470 [] [119] Underfull \hbox (badness 10000) in paragraph at lines 6490--6493 [] Underfull \hbox (badness 10000) in paragraph at lines 6518--6521 [] [120] Underfull \hbox (badness 10000) in paragraph at lines 6547--6550 [] Underfull \hbox (badness 10000) in paragraph at lines 6577--6580 [] [121] Underfull \hbox (badness 10000) in paragraph at lines 6614--6617 [] Underfull \hbox (badness 10000) in paragraph at lines 6642--6645 [] [122] Underfull \hbox (badness 10000) in paragraph at lines 6691--6694 [] [123] Underfull \hbox (badness 10000) in paragraph at lines 6746--6749 [] Underfull \hbox (badness 10000) in paragraph at lines 6764--6767 [] [124] [125] Chapter 7. Underfull \hbox (badness 3514) in paragraph at lines 6840--6842 []\OT1/ptm/m/n/10.95 Firstly, we de-scribe func-tions that com-pute spe-cific u p-per bounds on the code size [] Underfull \hbox (badness 10000) in paragraph at lines 6855--6858 [] [126 ] Underfull \hbox (badness 10000) in paragraph at lines 6878--6881 [] Underfull \hbox (badness 10000) in paragraph at lines 6902--6905 [] [127] Underfull \hbox (badness 10000) in paragraph at lines 6923--6926 [] Underfull \hbox (badness 10000) in paragraph at lines 6951--6954 [] Underfull \hbox (badness 10000) in paragraph at lines 6974--6977 [] [128] Underfull \hbox (badness 10000) in paragraph at lines 6999--7002 [] Underfull \hbox (badness 10000) in paragraph at lines 7020--7023 [] Underfull \hbox (badness 10000) in paragraph at lines 7040--7043 [] [129] Underfull \hbox (badness 10000) in paragraph at lines 7064--7067 [] Underfull \hbox (badness 10000) in paragraph at lines 7088--7091 [] Underfull \hbox (badness 10000) in paragraph at lines 7108--7111 [] [130] Underfull \hbox (badness 10000) in paragraph at lines 7133--7136 [] Underfull \hbox (badness 10000) in paragraph at lines 7146--7147 []\OT1/ptm/m/n/10.95 The re-sult-ing record can be used in the func-tion \OT1/p cr/m/n/10.95 BestKnownLinearCode \OT1/ptm/m/n/10.95 (see [] [131] Underfull \hbox (badness 10000) in paragraph at lines 7179--7182 [] Underfull \hbox (badness 10000) in paragraph at lines 7187--7188 []\OT1/ptm/m/n/10.95 If the cov-er-ing ra-dius of [] is known, a list of length 1 is re-turned. [] Underfull \hbox (badness 4739) in paragraph at lines 7187--7188 \OT1/pcr/m/n/10.95 BoundsCoveringRadius \OT1/ptm/m/n/10.95 makes use of the fun c-tions \OT1/pcr/m/n/10.95 GeneralLowerBoundCoveringRadius [] Underfull \hbox (badness 10000) in paragraph at lines 7201--7204 [] [132] Underfull \hbox (badness 10000) in paragraph at lines 7282--7285 [] [133] Underfull \hbox (badness 10000) in paragraph at lines 7306--7309 [] Underfull \hbox (badness 10000) in paragraph at lines 7329--7332 [] Underfull \hbox (badness 10000) in paragraph at lines 7351--7354 [] Overfull \hbox (8.54312pt too wide) in paragraph at lines 7356--7357 []\OT1/ptm/m/n/10.95 This com-mand can also be called us-ing the syn-tax \OT1/p cr/m/n/10.95 LowerBoundCoveringRadiusSphereCovering( [] [134] Underfull \hbox (badness 10000) in paragraph at lines 7381--7384 [] [135] Underfull \hbox (badness 10000) in paragraph at lines 7415--7418 [] Underfull \hbox (badness 10000) in paragraph at lines 7451--7454 [] [136] Underfull \hbox (badness 10000) in paragraph at lines 7488--7491 [] Underfull \hbox (badness 3396) in paragraph at lines 7493--7495 []\OT1/ptm/m/n/10.95 This com-mand can also be called with \OT1/pcr/m/n/10.95 L owerBoundCoveringRadiusEmbedded1( n, r [] Underfull \hbox (badness 10000) in paragraph at lines 7502--7503 []\OT1/ptm/m/n/10.95 Sometimes \OT1/pcr/m/n/10.95 LowerBoundCoveringRadiusEmbed ded1 \OT1/ptm/m/n/10.95 is bet-ter than [] Underfull \hbox (badness 10000) in paragraph at lines 7523--7526 [] Underfull \hbox (badness 3396) in paragraph at lines 7528--7530 []\OT1/ptm/m/n/10.95 This com-mand can also be called with \OT1/pcr/m/n/10.95 L owerBoundCoveringRadiusEmbedded2( n, r [] [137] Underfull \hbox (badness 10000) in paragraph at lines 7537--7538 []\OT1/ptm/m/n/10.95 Sometimes \OT1/pcr/m/n/10.95 LowerBoundCoveringRadiusEmbed ded1 \OT1/ptm/m/n/10.95 is bet-ter than [] Underfull \hbox (badness 10000) in paragraph at lines 7558--7561 [] Underfull \hbox (badness 10000) in paragraph at lines 7588--7591 [] [138] Underfull \hbox (badness 10000) in paragraph at lines 7610--7613 [] Underfull \hbox (badness 10000) in paragraph at lines 7633--7636 [] Underfull \hbox (badness 10000) in paragraph at lines 7658--7661 [] [139] Underfull \hbox (badness 10000) in paragraph at lines 7682--7685 [] Underfull \hbox (badness 10000) in paragraph at lines 7720--7723 [] [140] Underfull \hbox (badness 10000) in paragraph at lines 7748--7751 [] Underfull \hbox (badness 10000) in paragraph at lines 7774--7777 [] [141] Underfull \hbox (badness 10000) in paragraph at lines 7797--7800 [] Underfull \hbox (badness 10000) in paragraph at lines 7827--7830 [] [142] Underfull \hbox (badness 10000) in paragraph at lines 7850--7853 [] [143] Underfull \hbox (badness 10000) in paragraph at lines 7901--7904 [] Underfull \hbox (badness 10000) in paragraph at lines 7924--7927 [] Underfull \hbox (badness 10000) in paragraph at lines 7945--7948 [] [144] Underfull \hbox (badness 10000) in paragraph at lines 7977--7980 [] Underfull \hbox (badness 10000) in paragraph at lines 8010--8013 [] [145] Underfull \hbox (badness 10000) in paragraph at lines 8051--8054 [] Underfull \hbox (badness 10000) in paragraph at lines 8070--8073 [] [146] Underfull \hbox (badness 10000) in paragraph at lines 8102--8105 [] Underfull \hbox (badness 10000) in paragraph at lines 8121--8124 [] Underfull \hbox (badness 10000) in paragraph at lines 8139--8142 [] [147] Underfull \hbox (badness 10000) in paragraph at lines 8157--8160 [] Underfull \hbox (badness 10000) in paragraph at lines 8178--8181 [] Underfull \hbox (badness 10000) in paragraph at lines 8210--8213 [] [148] Underfull \hbox (badness 10000) in paragraph at lines 8232--8235 [] Underfull \hbox (badness 2762) in paragraph at lines 8241--8242 []\OT1/ptm/m/n/10.95 If [] is a code-word, then \OT1/pcr/m/n/10.95 CodeDistance Enumerator \OT1/ptm/m/n/10.95 re-turns the same poly-no-mial as [] Underfull \hbox (badness 10000) in paragraph at lines 8255--8258 [] Underfull \hbox (badness 10000) in paragraph at lines 8274--8277 [] [149] Underfull \hbox (badness 10000) in paragraph at lines 8295--8298 [] Underfull \hbox (badness 10000) in paragraph at lines 8322--8325 [] Underfull \hbox (badness 10000) in paragraph at lines 8342--8345 [] [150] Underfull \hbox (badness 10000) in paragraph at lines 8363--8366 [] Underfull \hbox (badness 10000) in paragraph at lines 8383--8386 [] Underfull \hbox (badness 10000) in paragraph at lines 8401--8404 [] [151] Underfull \hbox (badness 10000) in paragraph at lines 8429--8432 [] Underfull \hbox (badness 10000) in paragraph at lines 8457--8460 [] Underfull \hbox (badness 10000) in paragraph at lines 8480--8483 [] [152] Underfull \hbox (badness 10000) in paragraph at lines 8512--8515 [] Underfull \hbox (badness 10000) in paragraph at lines 8533--8536 [] Underfull \hbox (badness 10000) in paragraph at lines 8553--8556 [] [153] Underfull \hbox (badness 10000) in paragraph at lines 8573--8576 [] Underfull \hbox (badness 10000) in paragraph at lines 8599--8602 [] Underfull \hbox (badness 10000) in paragraph at lines 8611--8614 [] [154] Underfull \hbox (badness 10000) in paragraph at lines 8637--8640 [] Underfull \hbox (badness 10000) in paragraph at lines 8663--8666 [] [155] Underfull \hbox (badness 10000) in paragraph at lines 8707--8710 [] Underfull \hbox (badness 10000) in paragraph at lines 8741--8744 [] Underfull \hbox (badness 10000) in paragraph at lines 8759--8762 [] [156] Underfull \hbox (badness 10000) in paragraph at lines 8783--8786 [] Underfull \hbox (badness 10000) in paragraph at lines 8806--8809 [] [157] Underfull \hbox (badness 10000) in paragraph at lines 8842--8845 [] [158] [159] [160] [161] [162] (./guava.bbl (./guava.brf) \tf@brf=\write7 \openout7 = `guava.brf'. [163] ! Missing { inserted. $ l.24 A left brace was mandatory here, so I've put one in. You might want to delete and/or insert some corrections so that I will find a matching right brace soon. (If you're confused by all this, try typing `I}' now.) ! Missing } inserted. } l.24 I've inserted something that you may have forgotten. (See the above.) With luck, this will get me unwedged. But if you really didn't forget anything, try typing `2' now; then my insertion and my current dilemma will both disappear. [164 ]) (./guava.ind [165] Underfull \hbox (badness 10000) in paragraph at lines 16--18 []\OT1/pcr/m/n/10.95 AClosestVectorComb..MatFFEVecFFECoords\OT1/ptm/m/n/10.95 , [] Underfull \hbox (badness 10000) in paragraph at lines 18--20 []\OT1/pcr/m/n/10.95 AClosestVectorCombinationsMatFFEVecFFE\OT1/ptm/m/n/10.95 , [] Underfull \hbox (badness 10000) in paragraph at lines 20--22 []\OT1/pcr/m/n/10.95 ActionMoebiusTransformationOnDivisorP1 [] Underfull \hbox (badness 10000) in paragraph at lines 22--24 []\OT1/pcr/m/n/10.95 ActionMoebiusTransformationOnFunction \OT1/ptm/m/n/10.95 , [] [166 ] [167] Underfull \hbox (badness 10000) in paragraph at lines 252--254 []\OT1/pcr/m/n/10.95 IsAction\OT1/ptm/m/n/10.95 -\OT1/pcr/m/n/10.95 Moebius\OT1 /ptm/m/n/10.95 -\OT1/pcr/m/n/10.95 Transformation\OT1/ptm/m/n/10.95 -\OT1/pcr/m /n/10.95 On\OT1/ptm/m/n/10.95 -\OT1/pcr/m/n/10.95 Divisor\OT1/ptm/m/n/10.95 - [] [168] Underfull \hbox (badness 10000) in paragraph at lines 294--296 []\OT1/pcr/m/n/10.95 LowerBoundCoveringRadiusCountingExcess\OT1/ptm/m/n/10.95 , [] Underfull \hbox (badness 10000) in paragraph at lines 299--301 []\OT1/pcr/m/n/10.95 LowerBoundCoveringRadiusSphereCovering\OT1/ptm/m/n/10.95 , [] Underfull \hbox (badness 10000) in paragraph at lines 311--313 []\OT1/pcr/m/n/10.95 Matrix\OT1/ptm/m/n/10.95 -\OT1/pcr/m/n/10.95 Representatio n\OT1/ptm/m/n/10.95 -\OT1/pcr/m/n/10.95 On\OT1/ptm/m/n/10.95 -\OT1/pcr/m/n/10.9 5 Riemann\OT1/ptm/m/n/10.95 -\OT1/pcr/m/n/10.95 Roch\OT1/ptm/m/n/10.95 - [] Underfull \hbox (badness 10000) in paragraph at lines 313--315 []\OT1/pcr/m/n/10.95 Matrix\OT1/ptm/m/n/10.95 -\OT1/pcr/m/n/10.95 Transformatio n\OT1/ptm/m/n/10.95 -\OT1/pcr/m/n/10.95 On\OT1/ptm/m/n/10.95 -\OT1/pcr/m/n/10.9 5 Multivariate\OT1/ptm/m/n/10.95 - [] [169] Underfull \hbox (badness 10000) in paragraph at lines 441--443 []\OT1/pcr/m/n/10.95 UpperBoundCoveringRadiusGriesmerLike\OT1/ptm/m/n/10.95 , [] [170]) (./guava.aux) LaTeX Warning: There were multiply-defined labels. ) Here is how much of TeX's memory you used: 4773 strings out of 94101 69005 string characters out of 1165810 126273 words of memory out of 1500000 7129 multiletter control sequences out of 10000+50000 55745 words of font info for 104 fonts, out of 1200000 for 2000 637 hyphenation exceptions out of 8191 27i,7n,27p,1328b,619s stack positions out of 5000i,500n,6000p,200000b,5000s {/usr/share/texmf-texlive/fonts/enc/dvips/base/8r.enc}
Output written on guava.pdf (170 pages, 922944 bytes). PDF statistics: 2727 PDF objects out of 2984 (max. 8388607) 836 named destinations out of 1000 (max. 131072) 17 words of extra memory for PDF output out of 10000 (max. 10000000) guava-3.6/doc/manual.six0000644017361200001450000014506011027015742015116 0ustar tabbottcrontab#SIXFORMAT GapDocGAP HELPBOOKINFOSIXTMP := rec( encoding := "UTF-8", bookname := "guava", entries := [ [ "Title page", "", [ 0, 0, 0 ], 1, 1, "title page", "X7D2C85EC87DD46E5" ], [ "Copyright", "-1", [ 0, 0, 1 ], 43, 2, "copyright", "X81488B807F2A1CF1" ], [ "Acknowledgements", "-2", [ 0, 0, 2 ], 88, 2, "acknowledgements", "X82A988D47DFAFCFA" ], [ "Table of contents", "-3", [ 0, 0, 3 ], 130, 4, "table of contents", "X8537FEB07AF2BEC8" ], [ "\033[1XIntroduction\033[0X", "1.", [ 1, 0, 0 ], 1, 12, "introduction", "X7DFB63A97E67C0A1" ], [ "\033[1XIntroduction to the \033[5XGUAVA\033[0X\033[1X package\033[0X", "1.1", [ 1, 1, 0 ], 4, 12, "introduction to the guava package", "X787D826579603719" ], [ "\033[1XInstalling \033[5XGUAVA\033[0X\033[1X\033[0X", "1.2", [ 1, 2, 0 ], 37, 12, "installing guava", "X7E2CB7DF83B514A8" ], [ "\033[1XLoading \033[5XGUAVA\033[0X\033[1X\033[0X", "1.3", [ 1, 3, 0 ], 78, 13, "loading guava", "X80EAA631863F805B" ], [ "\033[1XCoding theory functions in GAP\033[0X", "2.", [ 2, 0, 0 ], 1, 14, "coding theory functions in gap", "X7A93308C82637F4F" ], [ "\033[1XDistance functions\033[0X", "2.1", [ 2, 1, 0 ], 27, 14, "distance functions", "X80F192497C008691" ], [ "\033[1XOther functions\033[0X", "2.2", [ 2, 2, 0 ], 169, 17, "other functions", "X87C3D1B984960984" ], [ "\033[1XCodewords\033[0X", "3.", [ 3, 0, 0 ], 1, 19, "codewords", "X836BAA9A7EBD08B1" ], [ "\033[1XConstruction of Codewords\033[0X", "3.1", [ 3, 1, 0 ], 68, 20, "construction of codewords", "X81B73ABB87DA8E49" ], [ "\033[1XComparisons of Codewords\033[0X", "3.2", [ 3, 2, 0 ], 204, 22, "comparisons of codewords", "X8253374284B475B6" ], [ "\033[1XArithmetic Operations for Codewords\033[0X", "3.3", [ 3, 3, 0 ], 250, 23, "arithmetic operations for codewords", "X7ADE7E95867A14E1" ], [ "\033[1XFunctions that Convert Codewords to Vectors or Polynomials\033[0X", "3.4", [ 3, 4, 0 ], 333, 24, "functions that convert codewords to vectors or polynomials", "X7BBA5DCD7A8BD60D" ], [ "\033[1XFunctions that Change the Display Form of a Codeword\033[0X", "3.5", [ 3, 5, 0 ], 363, 25, "functions that change the display form of a codeword", "X81D3230A797FE6E3" ], [ "\033[1XOther Codeword Functions\033[0X", "3.6", [ 3, 6, 0 ], 418, 26, "other codeword functions", "X805BF7147C68CACD" ], [ "\033[1XCodes\033[0X", "4.", [ 4, 0, 0 ], 1, 28, "codes", "X85FDDF0B7B7D87FB" ], [ "\033[1XComparisons of Codes\033[0X", "4.1", [ 4, 1, 0 ], 142, 30, "comparisons of codes", "X7ECE60E1873B49A6" ], [ "\033[1XOperations for Codes\033[0X", "4.2", [ 4, 2, 0 ], 181, 31, "operations for codes", "X832DA51986A3882C" ], [ "\033[1XBoolean Functions for Codes\033[0X", "4.3", [ 4, 3, 0 ], 271, 32, "boolean functions for codes", "X864091AA7D4AFE86" ], [ "\033[1XEquivalence and Isomorphism of Codes\033[0X", "4.4", [ 4, 4, 0 ], 594, 38, "equivalence and isomorphism of codes", "X86442DCD7A0B2146" ], [ "\033[1XDomain Functions for Codes\033[0X", "4.5", [ 4, 5, 0 ], 712, 40, "domain functions for codes", "X866EB39483DDAE72" ], [ "\033[1XPrinting and Displaying Codes\033[0X", "4.6", [ 4, 6, 0 ], 812, 42, "printing and displaying codes", "X823827927D6A8235" ], [ "\033[1XGenerating (Check) Matrices and Polynomials\033[0X", "4.7", [ 4, 7, 0 ], 922, 44, "generating check matrices and polynomials", "X7D0F48B685A3ECDD" ], [ "\033[1XParameters of Codes\033[0X", "4.8", [ 4, 8, 0 ], 1056, 46, "parameters of codes", "X8170B52D7C154247" ], [ "\033[1XDistributions\033[0X", "4.9", [ 4, 9, 0 ], 1543, 54, "distributions", "X806384B4815EFF2E" ], [ "\033[1XDecoding Functions\033[0X", "4.10", [ 4, 10, 0 ], 1662, 56, "decoding functions", "X7D9A39BF801948C8" ], [ "\033[1XGenerating Codes\033[0X", "5.", [ 5, 0, 0 ], 1, 64, "generating codes", "X87EB64ED831CCE99" ], [ "\033[1XGenerating Unrestricted Codes\033[0X", "5.1", [ 5, 1, 0 ], 26, 64, "generating unrestricted codes", "X86A92CB184CBD3C7" ], [ "\033[1XGenerating Linear Codes\033[0X", "5.2", [ 5, 2, 0 ], 265, 68, "generating linear codes", "X7A11F29F7BBF45BB" ], [ "\033[1XGabidulin Codes\033[0X", "5.3", [ 5, 3, 0 ], 700, 76, "gabidulin codes", "X858721967BE44000" ], [ "\033[1XGolay Codes\033[0X", "5.4", [ 5, 4, 0 ], 766, 77, "golay codes", "X81F6E4A785F368B0" ], [ "\033[1XGenerating Cyclic Codes\033[0X", "5.5", [ 5, 5, 0 ], 858, 78, "generating cyclic codes", "X8366CC3685F0BC85" ], [ "\033[1XEvaluation Codes\033[0X", "5.6", [ 5, 6, 0 ], 1457, 89, "evaluation codes", "X850A28C579137220" ], [ "\033[1XAlgebraic geometric codes\033[0X", "5.7", [ 5, 7, 0 ], 1622, 92, "algebraic geometric codes", "X7AE2B2CD7C647990" ], [ "\033[1XLow-Density Parity-Check Codes\033[0X", "5.8", [ 5, 8, 0 ], 2378, 105, "low-density parity-check codes", "X84F3673D7BBF5956" ], [ "\033[1XManipulating Codes\033[0X", "6.", [ 6, 0, 0 ], 1, 108, "manipulating codes", "X866FC1117814B64D" ], [ "\033[1XFunctions that Generate a New Code from a Given Code\033[0X", "6.1", [ 6, 1, 0 ], 31, 108, "functions that generate a new code from a given code", "X8271A4697FDA97B2" ], [ "\033[1XFunctions that Generate a New Code from Two or More Given Codes\033[0X", "6.2", [ 6, 2, 0 ], 625, 119, "functions that generate a new code from two or more given codes", "X7964BF0081CC8352" ], [ "\033[1XBounds on codes, special matrices and miscellaneous functions\033[0X", "7.", [ 7, 0, 0 ], 1, 126, "bounds on codes special matrices and miscellaneous functions", "X7A814D518460862E" ], [ "\033[1XDistance bounds on codes\033[0X", "7.1", [ 7, 1, 0 ], 10, 126, "distance bounds on codes", "X87C753EB840C34D3" ], [ "\033[1XCovering radius bounds on codes\033[0X", "7.2", [ 7, 2, 0 ], 341, 132, "covering radius bounds on codes", "X817D0A647D3331EB" ], [ "\033[1XSpecial matrices in \033[5XGUAVA\033[0X\033[1X\033[0X", "7.3", [ 7, 3, 0 ], 869, 140, "special matrices in guava", "X806EBEC77C16E657" ], [ "\033[1XSome functions related to the norm of a code\033[0X", "7.4", [ 7, 4, 0 ], 1245, 147, "some functions related to the norm of a code", "X7AB5E5CE7FDF7132" ], [ "\033[1XMiscellaneous functions\033[0X", "7.5", [ 7, 5, 0 ], 1334, 148, "miscellaneous functions", "X8308D685809A4E2F" ], [ "\033[1XMiscellaneous polynomial functions\033[0X", "7.6", [ 7, 6, 0 ], 1677, 154, "miscellaneous polynomial functions", "X7969103F7A8598F9" ], [ "\033[1XGNU Free Documentation License\033[0X", "7.7", [ 7, 7, 0 ], 1912, 158, "gnu free documentation license", "X82257DE97D1822AA" ], [ "Bibliography", "bib.", [ "Bib", 0, 0 ], 1, 164, "bibliography", "X7A6F98FD85F02BFE" ], [ "References", "bib.", [ "Bib", 0, 0 ], 1, 164, "references", "X7A6F98FD85F02BFE" ], [ "Index", "ind.", [ "Ind", 0, 0 ], 1, 166, "index", "X83A0356F839C696F" ], [ "\033[2XAClosestVectorCombinationsMatFFEVecFFE\033[0X", "2.1-1", [ 2, 1, 1 ], 30, 14, "aclosestvectorcombinationsmatffevecffe", "X82E5987E81487D18" ], [ "\033[2XAClosestVectorComb..MatFFEVecFFECoords\033[0X", "2.1-2", [ 2, 1, 2 ], 64, 15, "aclosestvectorcomb..matffevecffecoords", "X870DE258833C5AA0" ], [ "\033[2XDistancesDistributionMatFFEVecFFE\033[0X", "2.1-3", [ 2, 1, 3 ], 87, 15, "distancesdistributionmatffevecffe", "X85135CEB86E61D49" ], [ "\033[2XDistancesDistributionVecFFEsVecFFE\033[0X", "2.1-4", [ 2, 1, 4 ], 110, 16, "distancesdistributionvecffesvecffe", "X7F2F630984A9D3D6" ], [ "\033[2XWeightVecFFE\033[0X", "2.1-5", [ 2, 1, 5 ], 132, 16, "weightvecffe", "X7C9F4D657F9BA5A1" ], [ "Hamming metric", "2.1-5", [ 2, 1, 5 ], 132, 16, "hamming metric", "X7C9F4D657F9BA5A1" ], [ "\033[2XDistanceVecFFE\033[0X", "2.1-6", [ 2, 1, 6 ], 145, 16, "distancevecffe", "X85AA5C6587559C1C" ], [ "GF(p)", "2.2", [ 2, 2, 0 ], 169, 17, "gf p", "X87C3D1B984960984" ], [ "GF(q)", "2.2", [ 2, 2, 0 ], 169, 17, "gf q", "X87C3D1B984960984" ], [ "defining polynomial", "2.2", [ 2, 2, 0 ], 169, 17, "defining polynomial", "X87C3D1B984960984" ], [ "primitive element", "2.2", [ 2, 2, 0 ], 169, 17, "primitive element", "X87C3D1B984960984" ], [ "\033[2XConwayPolynomial\033[0X", "2.2-1", [ 2, 2, 1 ], 191, 17, "conwaypolynomial", "X7C2425A786F09054" ], [ "IsCheapConwayPolynomial", "2.2-1", [ 2, 2, 1 ], 191, 17, "ischeapconwaypolynomial", "X7C2425A786F09054" ], [ "\033[2XRandomPrimitivePolynomial\033[0X", "2.2-2", [ 2, 2, 2 ], 221, 18, "randomprimitivepolynomial", "X7ECC593583E68A6C" ], [ "IsPrimitivePolynomial", "2.2-2", [ 2, 2, 2 ], 221, 18, "isprimitivepolynomial", "X7ECC593583E68A6C" ], [ "linear code", "3.", [ 3, 0, 0 ], 1, 19, "linear code", "X836BAA9A7EBD08B1" ], [ "\033[2XCodeword\033[0X", "3.1-1", [ 3, 1, 1 ], 71, 20, "codeword", "X7B9E353D852851AA" ], [ "\033[2XCodewordNr\033[0X", "3.1-2", [ 3, 1, 2 ], 155, 21, "codewordnr", "X7E7ED91C79BF3EF3" ], [ "\033[2XIsCodeword\033[0X", "3.1-3", [ 3, 1, 3 ], 185, 22, "iscodeword", "X7F25479781E6E109" ], [ "\033[2X=\033[0X", "3.2-1", [ 3, 2, 1 ], 207, 22, "", "X8123456781234567" ], [ "not =", "3.2-1", [ 3, 2, 1 ], 207, 22, "not", "X8123456781234567" ], [ "< >", "3.2-1", [ 3, 2, 1 ], 207, 22, "< >", "X8123456781234567" ], [ "\033[2X+\033[0X", "3.3-1", [ 3, 3, 1 ], 253, 23, "+", "X7F2703417F270341" ], [ "codewords, addition", "3.3-1", [ 3, 3, 1 ], 253, 23, "codewords addition", "X7F2703417F270341" ], [ "\033[2X-\033[0X", "3.3-2", [ 3, 3, 2 ], 276, 23, "-", "X81B1391281B13912" ], [ "codewords, subtraction", "3.3-2", [ 3, 3, 2 ], 276, 23, "codewords subtraction", "X81B1391281B13912" ], [ "\033[2X+\033[0X", "3.3-3", [ 3, 3, 3 ], 283, 23, "+", "X7F2703417F270341" ], [ "codewords, cosets", "3.3-3", [ 3, 3, 3 ], 283, 23, "codewords cosets", "X7F2703417F270341" ], [ "coset", "3.3-3", [ 3, 3, 3 ], 283, 23, "coset", "X7F2703417F270341" ], [ "\033[2XVectorCodeword\033[0X", "3.4-1", [ 3, 4, 1 ], 336, 24, "vectorcodeword", "X87C8B0B178496F6A" ], [ "\033[2XPolyCodeword\033[0X", "3.4-2", [ 3, 4, 2 ], 349, 24, "polycodeword", "X822465E884D0F484" ], [ "\033[2XTreatAsVector\033[0X", "3.5-1", [ 3, 5, 1 ], 366, 25, "treatasvector", "X7E3E174B7954AA6B" ], [ "\033[2XTreatAsPoly\033[0X", "3.5-2", [ 3, 5, 2 ], 390, 25, "treataspoly", "X7A6828148490BD2E" ], [ "\033[2XNullWord\033[0X", "3.6-1", [ 3, 6, 1 ], 421, 26, "nullword", "X8000B6597EF0282F" ], [ "\033[2XDistanceCodeword\033[0X", "3.6-2", [ 3, 6, 2 ], 441, 26, "distancecodeword", "X7CDA1B547D55E6FB" ], [ "\033[2XSupport\033[0X", "3.6-3", [ 3, 6, 3 ], 461, 26, "support", "X7B689C0284AC4296" ], [ "\033[2XWeightCodeword\033[0X", "3.6-4", [ 3, 6, 4 ], 487, 27, "weightcodeword", "X7AD61C237D8D3849" ], [ "code", "4.", [ 4, 0, 0 ], 1, 28, "code", "X85FDDF0B7B7D87FB" ], [ "code, elements of", "4.", [ 4, 0, 0 ], 1, 28, "code elements of", "X85FDDF0B7B7D87FB" ], [ "code, unrestricted", "4.", [ 4, 0, 0 ], 1, 28, "code unrestricted", "X85FDDF0B7B7D87FB" ], [ "code, (n,M,d)", "4.", [ 4, 0, 0 ], 1, 28, "code n m d", "X85FDDF0B7B7D87FB" ], [ "minimum distance", "4.", [ 4, 0, 0 ], 1, 28, "minimum distance", "X85FDDF0B7B7D87FB" ], [ "length", "4.", [ 4, 0, 0 ], 1, 28, "length", "X85FDDF0B7B7D87FB" ], [ "size", "4.", [ 4, 0, 0 ], 1, 28, "size", "X85FDDF0B7B7D87FB" ], [ "code, linear", "4.", [ 4, 0, 0 ], 1, 28, "code linear", "X85FDDF0B7B7D87FB" ], [ "parity check matrix", "4.", [ 4, 0, 0 ], 1, 28, "parity check matrix", "X85FDDF0B7B7D87FB" ], [ "code, [n, k, d]r", "4.", [ 4, 0, 0 ], 1, 28, "code n k d r", "X85FDDF0B7B7D87FB" ], [ "code, cyclic", "4.", [ 4, 0, 0 ], 1, 28, "code cyclic", "X85FDDF0B7B7D87FB" ], [ "generator polynomial", "4.", [ 4, 0, 0 ], 1, 28, "generator polynomial", "X85FDDF0B7B7D87FB" ], [ "check polynomial", "4.", [ 4, 0, 0 ], 1, 28, "check polynomial", "X85FDDF0B7B7D87FB" ], [ "\033[2X=\033[0X", "4.1-1", [ 4, 1, 1 ], 145, 30, "", "X8123456781234567" ], [ "not =", "4.1-1", [ 4, 1, 1 ], 145, 30, "not", "X8123456781234567" ], [ "< >", "4.1-1", [ 4, 1, 1 ], 145, 30, "< >", "X8123456781234567" ], [ "\033[2X+\033[0X", "4.2-1", [ 4, 2, 1 ], 184, 31, "+", "X7F2703417F270341" ], [ "codes, addition", "4.2-1", [ 4, 2, 1 ], 184, 31, "codes addition", "X7F2703417F270341" ], [ "codes, direct sum", "4.2-1", [ 4, 2, 1 ], 184, 31, "codes direct sum", "X7F2703417F270341" ], [ "\033[2X*\033[0X", "4.2-2", [ 4, 2, 2 ], 200, 31, "", "X8123456781234567" ], [ "codes, product", "4.2-2", [ 4, 2, 2 ], 200, 31, "codes product", "X8123456781234567" ], [ "\033[2X*\033[0X", "4.2-3", [ 4, 2, 3 ], 216, 31, "", "X8123456781234567" ], [ "codes, encoding", "4.2-3", [ 4, 2, 3 ], 216, 31, "codes encoding", "X8123456781234567" ], [ "encoder map", "4.2-3", [ 4, 2, 3 ], 216, 31, "encoder map", "X8123456781234567" ], [ "\033[2XInformationWord\033[0X", "4.2-4", [ 4, 2, 4 ], 241, 32, "informationword", "X8744BA5E78BCF3F9" ], [ "codes, decoding", "4.2-4", [ 4, 2, 4 ], 241, 32, "codes decoding", "X8744BA5E78BCF3F9" ], [ "information bits", "4.2-4", [ 4, 2, 4 ], 241, 32, "information bits", "X8744BA5E78BCF3F9" ], [ "\033[2Xin\033[0X", "4.3-1", [ 4, 3, 1 ], 274, 32, "in", "X87BDB89B7AAFE8AD" ], [ "code, element test", "4.3-1", [ 4, 3, 1 ], 274, 32, "code element test", "X87BDB89B7AAFE8AD" ], [ "\033[2XIsSubset\033[0X", "4.3-2", [ 4, 3, 2 ], 291, 33, "issubset", "X79CA175481F8105F" ], [ "code, subcode", "4.3-2", [ 4, 3, 2 ], 291, 33, "code subcode", "X79CA175481F8105F" ], [ "\033[2XIsCode\033[0X", "4.3-3", [ 4, 3, 3 ], 307, 33, "iscode", "X7F71186281DEA83A" ], [ "\033[2XIsLinearCode\033[0X", "4.3-4", [ 4, 3, 4 ], 322, 33, "islinearcode", "X7B24748A7CE8D4B9" ], [ "\033[2XIsCyclicCode\033[0X", "4.3-5", [ 4, 3, 5 ], 344, 33, "iscycliccode", "X850C23D07C9A9B19" ], [ "\033[2XIsPerfectCode\033[0X", "4.3-6", [ 4, 3, 6 ], 366, 34, "isperfectcode", "X85E3BD26856424F7" ], [ "code, perfect", "4.3-6", [ 4, 3, 6 ], 366, 34, "code perfect", "X85E3BD26856424F7" ], [ "\033[2XIsMDSCode\033[0X", "4.3-7", [ 4, 3, 7 ], 396, 34, "ismdscode", "X789380D28018EC3F" ], [ "code, maximum distance separable", "4.3-7", [ 4, 3, 7 ], 396, 34, "code maximum distance separable", "X789380D28018EC3F" ], [ "MDS", "4.3-7", [ 4, 3, 7 ], 396, 34, "mds", "X789380D28018EC3F" ], [ "\033[2XIsSelfDualCode\033[0X", "4.3-8", [ 4, 3, 8 ], 420, 35, "isselfdualcode", "X80166D8D837FEB58" ], [ "code, self-dual", "4.3-8", [ 4, 3, 8 ], 420, 35, "code self-dual", "X80166D8D837FEB58" ], [ "self-orthogonal", "4.3-8", [ 4, 3, 8 ], 420, 35, "self-orthogonal", "X80166D8D837FEB58" ], [ "\033[2XIsSelfOrthogonalCode\033[0X", "4.3-9", [ 4, 3, 9 ], 443, 35, "isselforthogonalcode", "X7B2A0CC481D2366F" ] , [ "code, self-orthogonal", "4.3-9", [ 4, 3, 9 ], 443, 35, "code self-orthogonal", "X7B2A0CC481D2366F" ], [ "doubly-even", "4.3-9", [ 4, 3, 9 ], 443, 35, "doubly-even", "X7B2A0CC481D2366F" ], [ "\033[2XIsDoublyEvenCode\033[0X", "4.3-10", [ 4, 3, 10 ], 461, 35, "isdoublyevencode", "X8358D43981EBE970" ], [ "code, doubly-even", "4.3-10", [ 4, 3, 10 ], 461, 35, "code doubly-even", "X8358D43981EBE970" ], [ "singly-even", "4.3-10", [ 4, 3, 10 ], 461, 35, "singly-even", "X8358D43981EBE970" ], [ "\033[2XIsSinglyEvenCode\033[0X", "4.3-11", [ 4, 3, 11 ], 485, 36, "issinglyevencode", "X79ACAEF5865414A0" ], [ "code, singly-even", "4.3-11", [ 4, 3, 11 ], 485, 36, "code singly-even", "X79ACAEF5865414A0" ], [ "even", "4.3-11", [ 4, 3, 11 ], 485, 36, "even", "X79ACAEF5865414A0" ], [ "\033[2XIsEvenCode\033[0X", "4.3-12", [ 4, 3, 12 ], 506, 36, "isevencode", "X7CE150ED7C3DC455" ], [ "code, even", "4.3-12", [ 4, 3, 12 ], 506, 36, "code even", "X7CE150ED7C3DC455" ], [ "self complementary code", "4.3-12", [ 4, 3, 12 ], 506, 36, "self complementary code", "X7CE150ED7C3DC455" ], [ "\033[2XIsSelfComplementaryCode\033[0X", "4.3-13", [ 4, 3, 13 ], 534, 37, "isselfcomplementarycode", "X7B6DB8CC84FCAC1C" ], [ "affine code", "4.3-13", [ 4, 3, 13 ], 534, 37, "affine code", "X7B6DB8CC84FCAC1C" ], [ "\033[2XIsAffineCode\033[0X", "4.3-14", [ 4, 3, 14 ], 554, 37, "isaffinecode", "X7AFD3844859B20BF" ], [ "\033[2XIsAlmostAffineCode\033[0X", "4.3-15", [ 4, 3, 15 ], 572, 38, "isalmostaffinecode", "X861D32FB81EF0D77" ], [ "permutation equivalent codes", "4.4", [ 4, 4, 0 ], 594, 38, "permutation equivalent codes", "X86442DCD7A0B2146" ] , [ "equivalent codes", "4.4", [ 4, 4, 0 ], 594, 38, "equivalent codes", "X86442DCD7A0B2146" ], [ "\033[2XIsEquivalent\033[0X", "4.4-1", [ 4, 4, 1 ], 597, 38, "isequivalent", "X843034687D9C75B0" ], [ "\033[2XCodeIsomorphism\033[0X", "4.4-2", [ 4, 4, 2 ], 626, 38, "codeisomorphism", "X874DED8E86BC180B" ], [ "\033[2XAutomorphismGroup\033[0X", "4.4-3", [ 4, 4, 3 ], 648, 39, "automorphismgroup", "X87677B0787B4461A" ], [ "PermutationAutomorphismGroup", "4.4-3", [ 4, 4, 3 ], 648, 39, "permutationautomorphismgroup", "X87677B0787B4461A" ], [ "\033[2XPermutationAutomorphismGroup\033[0X", "4.4-4", [ 4, 4, 4 ], 686, 40, "permutationautomorphismgroup", "X79F3261F86C29F6D" ], [ "\033[2XIsFinite\033[0X", "4.5-1", [ 4, 5, 1 ], 718, 40, "isfinite", "X808A4061809A6E67" ], [ "\033[2XSize\033[0X", "4.5-2", [ 4, 5, 2 ], 730, 40, "size", "X858ADA3B7A684421" ], [ "\033[2XLeftActingDomain\033[0X", "4.5-3", [ 4, 5, 3 ], 745, 41, "leftactingdomain", "X86F070E0807DC34E" ], [ "\033[2XDimension\033[0X", "4.5-4", [ 4, 5, 4 ], 764, 41, "dimension", "X7E6926C6850E7C4E" ], [ "\033[2XAsSSortedList\033[0X", "4.5-5", [ 4, 5, 5 ], 783, 41, "asssortedlist", "X856D927378C33548" ], [ "\033[2XPrint\033[0X", "4.6-1", [ 4, 6, 1 ], 815, 42, "print", "X7AFA64D97A1F39A3" ], [ "\033[2XString\033[0X", "4.6-2", [ 4, 6, 2 ], 854, 42, "string", "X81FB5BE27903EC32" ], [ "\033[2XDisplay\033[0X", "4.6-3", [ 4, 6, 3 ], 872, 43, "display", "X83A5C59278E13248" ], [ "\033[2XDisplayBoundsInfo\033[0X", "4.6-4", [ 4, 6, 4 ], 895, 43, "displayboundsinfo", "X7CD08C8C780543C4" ], [ "\033[2XGeneratorMat\033[0X", "4.7-1", [ 4, 7, 1 ], 925, 44, "generatormat", "X817224657C9829C4" ], [ "\033[2XCheckMat\033[0X", "4.7-2", [ 4, 7, 2 ], 955, 44, "checkmat", "X85D4B26E7FB38D57" ], [ "\033[2XGeneratorPol\033[0X", "4.7-3", [ 4, 7, 3 ], 985, 45, "generatorpol", "X78E33C3A843B0261" ], [ "\033[2XCheckPol\033[0X", "4.7-4", [ 4, 7, 4 ], 1006, 45, "checkpol", "X7C45AA317BB1195F" ], [ "\033[2XRootsOfCode\033[0X", "4.7-5", [ 4, 7, 5 ], 1033, 45, "rootsofcode", "X7F4CB9DB7CD97178" ], [ "\033[2XWordLength\033[0X", "4.8-1", [ 4, 8, 1 ], 1059, 46, "wordlength", "X7A36C3C67B0062E8" ], [ "\033[2XRedundancy\033[0X", "4.8-2", [ 4, 8, 2 ], 1076, 46, "redundancy", "X7E33FD56792DBF3D" ], [ "\033[2XMinimumDistance\033[0X", "4.8-3", [ 4, 8, 3 ], 1096, 46, "minimumdistance", "X7B31613D8538BD29" ], [ "\033[2XMinimumDistanceLeon\033[0X", "4.8-4", [ 4, 8, 4 ], 1156, 47, "minimumdistanceleon", "X813F226F855590EE" ], [ "\033[2XMinimumWeight\033[0X", "4.8-5", [ 4, 8, 5 ], 1202, 48, "minimumweight", "X84EDF67B86B4154C" ], [ "\033[2XDecreaseMinimumDistanceUpperBound\033[0X", "4.8-6", [ 4, 8, 6 ], 1337, 51, "decreaseminimumdistanceupperbound", "X823B9A797EE42F6D" ], [ "\033[2XMinimumDistanceRandom\033[0X", "4.8-7", [ 4, 8, 7 ], 1373, 51, "minimumdistancerandom", "X7A679B0A7816B030" ], [ "t(n,k)", "4.8-7", [ 4, 8, 7 ], 1373, 51, "t n k", "X7A679B0A7816B030" ], [ "covering code", "4.8-7", [ 4, 8, 7 ], 1373, 51, "covering code", "X7A679B0A7816B030" ], [ "\033[2XCoveringRadius\033[0X", "4.8-8", [ 4, 8, 8 ], 1455, 53, "coveringradius", "X7A195E317D2AB7CE" ], [ "\033[2XSetCoveringRadius\033[0X", "4.8-9", [ 4, 8, 9 ], 1521, 54, "setcoveringradius", "X81004B007EC5DF58" ], [ "\033[2XMinimumWeightWords\033[0X", "4.9-1", [ 4, 9, 1 ], 1546, 54, "minimumweightwords", "X7AEE64467FB1E0B9" ], [ "\033[2XWeightDistribution\033[0X", "4.9-2", [ 4, 9, 2 ], 1567, 54, "weightdistribution", "X8728BCC9842A6E5D" ], [ "\033[2XInnerDistribution\033[0X", "4.9-3", [ 4, 9, 3 ], 1592, 55, "innerdistribution", "X871FD301820717A4" ], [ "distance", "4.9-3", [ 4, 9, 3 ], 1592, 55, "distance", "X871FD301820717A4" ], [ "\033[2XDistancesDistribution\033[0X", "4.9-4", [ 4, 9, 4 ], 1614, 55, "distancesdistribution", "X87AD54F87C5EE77E" ], [ "\033[2XOuterDistribution\033[0X", "4.9-5", [ 4, 9, 5 ], 1635, 56, "outerdistribution", "X8495870687195324" ], [ "\033[2XDecode\033[0X", "4.10-1", [ 4, 10, 1 ], 1665, 56, "decode", "X7A42FF7D87FC34AC" ], [ "\033[2XDecodeword\033[0X", "4.10-2", [ 4, 10, 2 ], 1715, 57, "decodeword", "X7D870C9387C47D9F" ], [ "\033[2XGeneralizedReedSolomonDecoderGao\033[0X", "4.10-3", [ 4, 10, 3 ], 1766, 58, "generalizedreedsolomondecodergao", "X7D48DE2A84474C6A" ], [ "\033[2XGeneralizedReedSolomonListDecoder\033[0X", "4.10-4", [ 4, 10, 4 ], 1796, 58, "generalizedreedsolomonlistdecoder", "X7CFF98D483502053" ], [ "\033[2XBitFlipDecoder\033[0X", "4.10-5", [ 4, 10, 5 ], 1844, 59, "bitflipdecoder", "X80E17FA27DCAB676" ], [ "\033[2XNearestNeighborGRSDecodewords\033[0X", "4.10-6", [ 4, 10, 6 ], 1872, 60, "nearestneighborgrsdecodewords", "X7B88DEB37F28404A" ], [ "\033[2XNearestNeighborDecodewords\033[0X", "4.10-7", [ 4, 10, 7 ], 1911, 60, "nearestneighbordecodewords", "X825E35757D778787" ], [ "\033[2XSyndrome\033[0X", "4.10-8", [ 4, 10, 8 ], 1950, 61, "syndrome", "X7D02E0FE8735D3E6" ], [ "\033[2XSyndromeTable\033[0X", "4.10-9", [ 4, 10, 9 ], 1977, 62, "syndrometable", "X7B9E71987E4294A7" ], [ "syndrome table", "4.10-9", [ 4, 10, 9 ], 1977, 62, "syndrome table", "X7B9E71987E4294A7" ], [ "\033[2XStandardArray\033[0X", "4.10-10", [ 4, 10, 10 ], 2009, 62, "standardarray", "X8642D0BD789DA9B5" ], [ "\033[2XPermutationDecode\033[0X", "4.10-11", [ 4, 10, 11 ], 2032, 62, "permutationdecode", "X83231E717CCB0247" ], [ "\033[2XPermutationDecodeNC\033[0X", "4.10-12", [ 4, 10, 12 ], 2078, 63, "permutationdecodenc", "X85B692177E2A745D" ], [ "\033[2XElementsCode\033[0X", "5.1-1", [ 5, 1, 1 ], 41, 64, "elementscode", "X81AACBDD86E89D7D" ], [ "code, Hadamard", "5.1-1", [ 5, 1, 1 ], 41, 64, "code hadamard", "X81AACBDD86E89D7D" ], [ "\033[2XHadamardCode\033[0X", "5.1-2", [ 5, 1, 2 ], 62, 65, "hadamardcode", "X86755AAC83A0AF4B" ], [ "Hadamard matrix", "5.1-2", [ 5, 1, 2 ], 62, 65, "hadamard matrix", "X86755AAC83A0AF4B" ], [ "code, conference", "5.1-2", [ 5, 1, 2 ], 62, 65, "code conference", "X86755AAC83A0AF4B" ], [ "\033[2XConferenceCode\033[0X", "5.1-3", [ 5, 1, 3 ], 111, 65, "conferencecode", "X8122BA417F705997" ], [ "conference matrix", "5.1-3", [ 5, 1, 3 ], 111, 65, "conference matrix", "X8122BA417F705997" ], [ "\033[2XMOLSCode\033[0X", "5.1-4", [ 5, 1, 4 ], 140, 66, "molscode", "X81B7EE4279398F67" ], [ "\033[2XRandomCode\033[0X", "5.1-5", [ 5, 1, 5 ], 173, 67, "randomcode", "X7D87DD6380B2CE69" ], [ "code, Nordstrom-Robinson", "5.1-5", [ 5, 1, 5 ], 173, 67, "code nordstrom-robinson", "X7D87DD6380B2CE69" ], [ "\033[2XNordstromRobinsonCode\033[0X", "5.1-6", [ 5, 1, 6 ], 195, 67, "nordstromrobinsoncode", "X816353397F25B62E" ], [ "code, greedy", "5.1-6", [ 5, 1, 6 ], 195, 67, "code greedy", "X816353397F25B62E" ], [ "\033[2XGreedyCode\033[0X", "5.1-7", [ 5, 1, 7 ], 210, 67, "greedycode", "X7880D34485C60BAF" ], [ "\033[2XLexiCode\033[0X", "5.1-8", [ 5, 1, 8 ], 235, 68, "lexicode", "X7C1B374583AFB923" ], [ "\033[2XGeneratorMatCode\033[0X", "5.2-1", [ 5, 2, 1 ], 288, 68, "generatormatcode", "X83F400A681CFC0D6" ], [ "\033[2XCheckMatCodeMutable\033[0X", "5.2-2", [ 5, 2, 2 ], 315, 69, "checkmatcodemutable", "X7CDDDFE47A10A008" ], [ "\033[2XCheckMatCode\033[0X", "5.2-3", [ 5, 2, 3 ], 322, 69, "checkmatcode", "X848D3F7B805DEB66" ], [ "code, Hamming", "5.2-3", [ 5, 2, 3 ], 322, 69, "code hamming", "X848D3F7B805DEB66" ], [ "\033[2XHammingCode\033[0X", "5.2-4", [ 5, 2, 4 ], 350, 70, "hammingcode", "X7DECB0A57C798583" ], [ "code, Reed-Muller", "5.2-4", [ 5, 2, 4 ], 350, 70, "code reed-muller", "X7DECB0A57C798583" ], [ "\033[2XReedMullerCode\033[0X", "5.2-5", [ 5, 2, 5 ], 370, 70, "reedmullercode", "X801C88D578DA6ACA" ], [ "code, alternant", "5.2-5", [ 5, 2, 5 ], 370, 70, "code alternant", "X801C88D578DA6ACA" ], [ "\033[2XAlternantCode\033[0X", "5.2-6", [ 5, 2, 6 ], 387, 70, "alternantcode", "X851592C7811D3D2A" ], [ "code, Goppa (classical)", "5.2-6", [ 5, 2, 6 ], 387, 70, "code goppa classical", "X851592C7811D3D2A" ], [ "\033[2XGoppaCode\033[0X", "5.2-7", [ 5, 2, 7 ], 407, 71, "goppacode", "X7EE808BB7D1E487A" ], [ "code, Srivastava", "5.2-7", [ 5, 2, 7 ], 407, 71, "code srivastava", "X7EE808BB7D1E487A" ], [ "\033[2XGeneralizedSrivastavaCode\033[0X", "5.2-8", [ 5, 2, 8 ], 450, 71, "generalizedsrivastavacode", "X7F9C0A727EE075B7" ], [ "\033[2XSrivastavaCode\033[0X", "5.2-9", [ 5, 2, 9 ], 476, 72, "srivastavacode", "X7A38EB3178961F3E" ], [ "code, Cordaro-Wagner", "5.2-9", [ 5, 2, 9 ], 476, 72, "code cordaro-wagner", "X7A38EB3178961F3E" ], [ "\033[2XCordaroWagnerCode\033[0X", "5.2-10", [ 5, 2, 10 ], 500, 72, "cordarowagnercode", "X87F7CB8B7A8BE624" ], [ "\033[2XFerreroDesignCode\033[0X", "5.2-11", [ 5, 2, 11 ], 517, 72, "ferrerodesigncode", "X865534267C8E902A" ], [ "\033[2XRandomLinearCode\033[0X", "5.2-12", [ 5, 2, 12 ], 576, 73, "randomlinearcode", "X7BCA10CE8660357F" ], [ "\033[2XOptimalityCode\033[0X", "5.2-13", [ 5, 2, 13 ], 604, 74, "optimalitycode", "X839CFE4C7A567D4D" ], [ "\033[2XBestKnownLinearCode\033[0X", "5.2-14", [ 5, 2, 14 ], 615, 74, "bestknownlinearcode", "X871508567CB34D96" ] , [ "code, Gabidulin", "5.3", [ 5, 3, 0 ], 700, 76, "code gabidulin", "X858721967BE44000" ], [ "\033[2XGabidulinCode\033[0X", "5.3-1", [ 5, 3, 1 ], 713, 76, "gabidulincode", "X79BE5D497CB2E59E" ], [ "\033[2XEnlargedGabidulinCode\033[0X", "5.3-2", [ 5, 3, 2 ], 720, 76, "enlargedgabidulincode", "X873950F67D4A9184" ], [ "code, Davydov", "5.3-2", [ 5, 3, 2 ], 720, 76, "code davydov", "X873950F67D4A9184" ], [ "\033[2XDavydovCode\033[0X", "5.3-3", [ 5, 3, 3 ], 728, 76, "davydovcode", "X7F5BE77B7F343182" ], [ "code, Tombak", "5.3-3", [ 5, 3, 3 ], 728, 76, "code tombak", "X7F5BE77B7F343182" ], [ "\033[2XTombakCode\033[0X", "5.3-4", [ 5, 3, 4 ], 736, 76, "tombakcode", "X845B4DBE83288D2D" ], [ "\033[2XEnlargedTombakCode\033[0X", "5.3-5", [ 5, 3, 5 ], 744, 76, "enlargedtombakcode", "X7D6583347C0D4292" ], [ "code, Golay (binary)", "5.4", [ 5, 4, 0 ], 766, 77, "code golay binary", "X81F6E4A785F368B0" ], [ "\033[2XBinaryGolayCode\033[0X", "5.4-1", [ 5, 4, 1 ], 775, 77, "binarygolaycode", "X80ED89C079CD0D09" ], [ "\033[2XExtendedBinaryGolayCode\033[0X", "5.4-2", [ 5, 4, 2 ], 796, 77, "extendedbinarygolaycode", "X84520C7983538806" ], [ "code, Golay (ternary)", "5.4-2", [ 5, 4, 2 ], 796, 77, "code golay ternary", "X84520C7983538806" ], [ "\033[2XTernaryGolayCode\033[0X", "5.4-3", [ 5, 4, 3 ], 818, 78, "ternarygolaycode", "X7E0CCCD7866ADB94" ], [ "\033[2XExtendedTernaryGolayCode\033[0X", "5.4-4", [ 5, 4, 4 ], 837, 78, "extendedternarygolaycode", "X81088A66816BCAE4" ], [ "generator polynomial", "5.5", [ 5, 5, 0 ], 858, 78, "generator polynomial", "X8366CC3685F0BC85" ], [ "check polynomial", "5.5", [ 5, 5, 0 ], 858, 78, "check polynomial", "X8366CC3685F0BC85" ], [ "\033[2XGeneratorPolCode\033[0X", "5.5-1", [ 5, 5, 1 ], 907, 79, "generatorpolcode", "X853D34A5796CEB73" ], [ "\033[2XCheckPolCode\033[0X", "5.5-2", [ 5, 5, 2 ], 932, 80, "checkpolcode", "X82440B78845F7F6E" ], [ "\033[2XRootsCode\033[0X", "5.5-3", [ 5, 5, 3 ], 955, 80, "rootscode", "X818F0E6583E01D4B" ], [ "code, Bose-Chaudhuri-Hockenghem", "5.5-3", [ 5, 5, 3 ], 955, 80, "code bose-chaudhuri-hockenghem", "X818F0E6583E01D4B" ], [ "\033[2XBCHCode\033[0X", "5.5-4", [ 5, 5, 4 ], 994, 81, "bchcode", "X7C6BB07C87853C00" ], [ "Bose distance", "5.5-4", [ 5, 5, 4 ], 994, 81, "bose distance", "X7C6BB07C87853C00" ], [ "code, Reed-Solomon", "5.5-4", [ 5, 5, 4 ], 994, 81, "code reed-solomon", "X7C6BB07C87853C00" ], [ "\033[2XReedSolomonCode\033[0X", "5.5-5", [ 5, 5, 5 ], 1056, 82, "reedsolomoncode", "X838F3CB3872CEF95" ], [ "\033[2XExtendedReedSolomonCode\033[0X", "5.5-6", [ 5, 5, 6 ], 1082, 82, "extendedreedsolomoncode", "X8730B90A862A3B3E" ], [ "\033[2XQRCode\033[0X", "5.5-7", [ 5, 5, 7 ], 1099, 82, "qrcode", "X825F42F68179D2AB" ] , [ "\033[2XQQRCodeNC\033[0X", "5.5-8", [ 5, 5, 8 ], 1129, 83, "qqrcodenc", "X8764ABCF854C695E" ], [ "\033[2XQQRCode\033[0X", "5.5-9", [ 5, 5, 9 ], 1136, 83, "qqrcode", "X7F4C3AD2795A8D7A" ], [ "code, Fire", "5.5-9", [ 5, 5, 9 ], 1136, 83, "code fire", "X7F4C3AD2795A8D7A" ], [ "\033[2XFireCode\033[0X", "5.5-10", [ 5, 5, 10 ], 1178, 84, "firecode", "X7F3B8CC8831DA0E4" ], [ "order of polynomial", "5.5-10", [ 5, 5, 10 ], 1178, 84, "order of polynomial", "X7F3B8CC8831DA0E4" ], [ "\033[2XWholeSpaceCode\033[0X", "5.5-11", [ 5, 5, 11 ], 1210, 84, "wholespacecode", "X7BC245E37EB7B23F" ], [ "\033[2XNullCode\033[0X", "5.5-12", [ 5, 5, 12 ], 1223, 85, "nullcode", "X7B4EF2017B2C61AD" ], [ "\033[2XRepetitionCode\033[0X", "5.5-13", [ 5, 5, 13 ], 1237, 85, "repetitioncode", "X83C5F8FE7827EAA7" ], [ "\033[2XCyclicCodes\033[0X", "5.5-14", [ 5, 5, 14 ], 1256, 85, "cycliccodes", "X82FA9F65854D98A6" ], [ "\033[2XNrCyclicCodes\033[0X", "5.5-15", [ 5, 5, 15 ], 1273, 85, "nrcycliccodes", "X8263CE4A790D294A" ], [ "\033[2XQuasiCyclicCode\033[0X", "5.5-16", [ 5, 5, 16 ], 1300, 86, "quasicycliccode", "X79826B16785E8BD3" ], [ "\033[2XCyclicMDSCode\033[0X", "5.5-17", [ 5, 5, 17 ], 1366, 87, "cyclicmdscode", "X7BFEDA52835A601D" ], [ "MDS", "5.5-17", [ 5, 5, 17 ], 1366, 87, "mds", "X7BFEDA52835A601D" ], [ "cyclic", "5.5-17", [ 5, 5, 17 ], 1366, 87, "cyclic", "X7BFEDA52835A601D" ], [ "\033[2XFourNegacirculantSelfDualCode\033[0X", "5.5-18", [ 5, 5, 18 ], 1390, 88, "fournegacirculantselfdualcode", "X7F40AF3B81C252DC" ], [ "self-dual", "5.5-18", [ 5, 5, 18 ], 1390, 88, "self-dual", "X7F40AF3B81C252DC" ], [ "\033[2XFourNegacirculantSelfDualCodeNC\033[0X", "5.5-19", [ 5, 5, 19 ], 1449, 89, "fournegacirculantselfdualcodenc", "X87137A257E761291" ], [ "code, evaluation", "5.6", [ 5, 6, 0 ], 1457, 89, "code evaluation", "X850A28C579137220" ], [ "\033[2XEvaluationCode\033[0X", "5.6-1", [ 5, 6, 1 ], 1460, 89, "evaluationcode", "X78E078567D19D433" ], [ "\033[2XGeneralizedReedSolomonCode\033[0X", "5.6-2", [ 5, 6, 2 ], 1499, 89, "generalizedreedsolomoncode", "X810AB3DB844FFCE9" ], [ "\033[2XGeneralizedReedMullerCode\033[0X", "5.6-3", [ 5, 6, 3 ], 1553, 90, "generalizedreedmullercode", "X85B8699680B9D786" ], [ "\033[2XToricPoints\033[0X", "5.6-4", [ 5, 6, 4 ], 1584, 91, "toricpoints", "X7EE68B58872D7E82" ], [ "code, toric", "5.6-4", [ 5, 6, 4 ], 1584, 91, "code toric", "X7EE68B58872D7E82" ], [ "\033[2XToricCode\033[0X", "5.6-5", [ 5, 6, 5 ], 1599, 91, "toriccode", "X7B24BE418010F596" ], [ "code, AG", "5.7", [ 5, 7, 0 ], 1622, 92, "code ag", "X7AE2B2CD7C647990" ], [ "\033[2XAffineCurve\033[0X", "5.7-1", [ 5, 7, 1 ], 1628, 92, "affinecurve", "X802DD9FB79A9ACA7" ], [ "point", "5.7-1", [ 5, 7, 1 ], 1628, 92, "point", "X802DD9FB79A9ACA7" ], [ "\033[2XAffinePointsOnCurve\033[0X", "5.7-2", [ 5, 7, 2 ], 1683, 93, "affinepointsoncurve", "X857EFE567C05C981" ], [ "\033[2XGenusCurve\033[0X", "5.7-3", [ 5, 7, 3 ], 1703, 93, "genuscurve", "X857E36ED814A40B8" ], [ "\033[2XGOrbitPoint \033[0X", "5.7-4", [ 5, 7, 4 ], 1728, 93, "gorbitpoint", "X8572A3037DA66F88" ], [ "divisor", "5.7-4", [ 5, 7, 4 ], 1728, 93, "divisor", "X8572A3037DA66F88" ], [ "support", "5.7-4", [ 5, 7, 4 ], 1728, 93, "support", "X8572A3037DA66F88" ], [ "\033[2XDivisorOnAffineCurve\033[0X", "5.7-5", [ 5, 7, 5 ], 1800, 95, "divisoronaffinecurve", "X79742B7183051D99" ], [ "\033[2XDivisorAddition \033[0X", "5.7-6", [ 5, 7, 6 ], 1834, 95, "divisoraddition", "X8626E2B57D01F2DC" ], [ "\033[2XDivisorDegree \033[0X", "5.7-7", [ 5, 7, 7 ], 1841, 95, "divisordegree", "X865FE28D828C1EAD" ], [ "degree", "5.7-7", [ 5, 7, 7 ], 1841, 95, "degree", "X865FE28D828C1EAD" ], [ "\033[2XDivisorNegate \033[0X", "5.7-8", [ 5, 7, 8 ], 1847, 96, "divisornegate", "X789DC358819A8F54" ], [ "\033[2XDivisorIsZero \033[0X", "5.7-9", [ 5, 7, 9 ], 1853, 96, "divisoriszero", "X8688C0E187B5C7DB" ], [ "\033[2XDivisorsEqual \033[0X", "5.7-10", [ 5, 7, 10 ], 1859, 96, "divisorsequal", "X816A07997D9A7075" ], [ "\033[2XDivisorGCD \033[0X", "5.7-11", [ 5, 7, 11 ], 1865, 96, "divisorgcd", "X857B89847A649A26" ], [ "greatest common divisor", "5.7-11", [ 5, 7, 11 ], 1865, 96, "greatest common divisor", "X857B89847A649A26" ], [ "\033[2XDivisorLCM \033[0X", "5.7-12", [ 5, 7, 12 ], 1877, 96, "divisorlcm", "X82231CF08073695F" ], [ "least common multiple", "5.7-12", [ 5, 7, 12 ], 1877, 96, "least common multiple", "X82231CF08073695F" ], [ "\033[2XRiemannRochSpaceBasisFunctionP1 \033[0X", "5.7-13", [ 5, 7, 13 ], 1958, 98, "riemannrochspacebasisfunctionp1", "X79C878697F99A10F" ], [ "\033[2XDivisorOfRationalFunctionP1 \033[0X", "5.7-14", [ 5, 7, 14 ], 1965, 98, "divisorofrationalfunctionp1", "X856DDA207EDDF256" ], [ "\033[2XRiemannRochSpaceBasisP1 \033[0X", "5.7-15", [ 5, 7, 15 ], 2013, 99, "riemannrochspacebasisp1", "X878970A17E580224" ], [ "\033[2XMoebiusTransformation \033[0X", "5.7-16", [ 5, 7, 16 ], 2069, 100, "moebiustransformation", "X807C52E67A440DEB" ], [ "\033[2XActionMoebiusTransformationOnFunction \033[0X", "5.7-17", [ 5, 7, 17 ], 2078, 100, "actionmoebiustransformationonfunction", "X85A0419580ED0391" ], [ "\033[2XActionMoebiusTransformationOnDivisorP1 \033[0X", "5.7-18", [ 5, 7, 18 ], 2087, 100, "actionmoebiustransformationondivisorp1", "X7E48F9C67E7FB7B5" ], [ "\033[2XIsActionMoebiusTransformationOnDivisorDefinedP1 \033[0X", "5.7-19", [ 5, 7, 19 ], 2096, 100, "isactionmoebiustransformationondivisordefinedp1", "X79FD980E7B24DB9C" ], [ "\033[2XDivisorAutomorphismGroupP1 \033[0X", "5.7-20", [ 5, 7, 20 ], 2139, 101, "divisorautomorphismgroupp1", "X823386037F450B0E" ], [ "\033[2XMatrixRepresentationOnRiemannRochSpaceP1 \033[0X", "5.7-21", [ 5, 7, 21 ], 2172, 102, "matrixrepresentationonriemannrochspacep1", "X80EDF3D682E7EF3F" ], [ "\033[2XGoppaCodeClassical\033[0X", "5.7-22", [ 5, 7, 22 ], 2232, 103, "goppacodeclassical", "X8777388C7885E335" ] , [ "\033[2XEvaluationBivariateCode\033[0X", "5.7-23", [ 5, 7, 23 ], 2268, 103, "evaluationbivariatecode", "X8422A310854C09B0" ], [ "\033[2XEvaluationBivariateCodeNC\033[0X", "5.7-24", [ 5, 7, 24 ], 2283, 103, "evaluationbivariatecodenc", "X7B6C2BED8319C811" ], [ "\033[2XOnePointAGCode\033[0X", "5.7-25", [ 5, 7, 25 ], 2331, 104, "onepointagcode", "X842E227E8785168E" ], [ "LDPC", "5.8", [ 5, 8, 0 ], 2378, 105, "ldpc", "X84F3673D7BBF5956" ], [ "\033[2XQCLDPCCodeFromGroup\033[0X", "5.8-1", [ 5, 8, 1 ], 2412, 106, "qcldpccodefromgroup", "X8020A9357AD0BA92" ] , [ "Parity check", "6.1", [ 6, 1, 0 ], 31, 108, "parity check", "X8271A4697FDA97B2" ], [ "\033[2XExtendedCode\033[0X", "6.1-1", [ 6, 1, 1 ], 34, 108, "extendedcode", "X794679BE7F9EB5C1" ], [ "\033[2XPuncturedCode\033[0X", "6.1-2", [ 6, 1, 2 ], 66, 109, "puncturedcode", "X7E6E4DDA79574FDB" ], [ "\033[2XEvenWeightSubcode\033[0X", "6.1-3", [ 6, 1, 3 ], 101, 109, "evenweightsubcode", "X87691AB67FF5621B" ], [ "\033[2XPermutedCode\033[0X", "6.1-4", [ 6, 1, 4 ], 130, 110, "permutedcode", "X79577EB27BE8524B" ], [ "\033[2XExpurgatedCode\033[0X", "6.1-5", [ 6, 1, 5 ], 156, 110, "expurgatedcode", "X87E5849784BC60D2" ], [ "\033[2XAugmentedCode\033[0X", "6.1-6", [ 6, 1, 6 ], 181, 111, "augmentedcode", "X8134BE2B8478BE8A" ], [ "\033[2XRemovedElementsCode\033[0X", "6.1-7", [ 6, 1, 7 ], 219, 111, "removedelementscode", "X7B0A6E1F82686B43" ], [ "\033[2XAddedElementsCode\033[0X", "6.1-8", [ 6, 1, 8 ], 244, 112, "addedelementscode", "X784E1255874FCA8A" ], [ "\033[2XShortenedCode\033[0X", "6.1-9", [ 6, 1, 9 ], 269, 112, "shortenedcode", "X81CBEAFF7B9DE6EF" ], [ "\033[2XLengthenedCode\033[0X", "6.1-10", [ 6, 1, 10 ], 318, 113, "lengthenedcode", "X7A5D5419846FC867" ], [ "\033[2XSubCode\033[0X", "6.1-11", [ 6, 1, 11 ], 339, 114, "subcode", "X7982D699803ECD0F" ], [ "\033[2XResidueCode\033[0X", "6.1-12", [ 6, 1, 12 ], 365, 114, "residuecode", "X809376187C1525AA" ], [ "\033[2XConstructionBCode\033[0X", "6.1-13", [ 6, 1, 13 ], 386, 114, "constructionbcode", "X7E92DC9581F96594" ], [ "\033[2XDualCode\033[0X", "6.1-14", [ 6, 1, 14 ], 419, 115, "dualcode", "X799B12F085ACB609" ], [ "self-dual", "6.1-14", [ 6, 1, 14 ], 419, 115, "self-dual", "X799B12F085ACB609" ], [ "\033[2XConversionFieldCode\033[0X", "6.1-15", [ 6, 1, 15 ], 448, 116, "conversionfieldcode", "X81FE1F387DFCCB22" ], [ "\033[2XTraceCode\033[0X", "6.1-16", [ 6, 1, 16 ], 474, 116, "tracecode", "X82D18907800FE3D9" ], [ "\033[2XCosetCode\033[0X", "6.1-17", [ 6, 1, 17 ], 499, 116, "cosetcode", "X8799F4BF81B0842B" ], [ "\033[2XConstantWeightSubcode\033[0X", "6.1-18", [ 6, 1, 18 ], 525, 117, "constantweightsubcode", "X873EA5EE85699832" ], [ "\033[2XStandardFormCode\033[0X", "6.1-19", [ 6, 1, 19 ], 558, 117, "standardformcode", "X7AA203A380BC4C79" ], [ "\033[2XPiecewiseConstantCode\033[0X", "6.1-20", [ 6, 1, 20 ], 592, 118, "piecewiseconstantcode", "X7EF49A257D6DB53B" ], [ "\033[2XDirectSumCode\033[0X", "6.2-1", [ 6, 2, 1 ], 628, 119, "directsumcode", "X79E00D3A8367D65A" ], [ "\033[2XUUVCode\033[0X", "6.2-2", [ 6, 2, 2 ], 655, 119, "uuvcode", "X86E9D6DE7F1A07E6" ], [ "\033[2XDirectProductCode\033[0X", "6.2-3", [ 6, 2, 3 ], 684, 119, "directproductcode", "X7BFBBA5784C293C1" ], [ "\033[2XIntersectionCode\033[0X", "6.2-4", [ 6, 2, 4 ], 705, 120, "intersectioncode", "X78F0B1BC81FB109C" ], [ "hull", "6.2-4", [ 6, 2, 4 ], 705, 120, "hull", "X78F0B1BC81FB109C" ], [ "\033[2XUnionCode\033[0X", "6.2-5", [ 6, 2, 5 ], 731, 120, "unioncode", "X8228A1F57A29B8F4" ], [ "\033[2XExtendedDirectSumCode\033[0X", "6.2-6", [ 6, 2, 6 ], 757, 121, "extendeddirectsumcode", "X7A85F8AF8154D387" ], [ "\033[2XAmalgamatedDirectSumCode\033[0X", "6.2-7", [ 6, 2, 7 ], 791, 121, "amalgamateddirectsumcode", "X7E17107686A845DB" ], [ "\033[2XBlockwiseDirectSumCode\033[0X", "6.2-8", [ 6, 2, 8 ], 831, 122, "blockwisedirectsumcode", "X7D8981AF7DFE9814" ], [ "\033[2XConstructionXCode\033[0X", "6.2-9", [ 6, 2, 9 ], 866, 122, "constructionxcode", "X7C37D467791CE99B" ], [ "\033[2XConstructionXXCode\033[0X", "6.2-10", [ 6, 2, 10 ], 915, 123, "constructionxxcode", "X7B50943B8014134F" ], [ "\033[2XBZCode\033[0X", "6.2-11", [ 6, 2, 11 ], 974, 124, "bzcode", "X790C614985BFAE16" ], [ "\033[2XBZCodeNC\033[0X", "6.2-12", [ 6, 2, 12 ], 993, 125, "bzcodenc", "X820327D6854A50B5" ], [ "bounds, Singleton", "7.1", [ 7, 1, 0 ], 10, 126, "bounds singleton", "X87C753EB840C34D3" ], [ "\033[2XUpperBoundSingleton\033[0X", "7.1-1", [ 7, 1, 1 ], 45, 127, "upperboundsingleton", "X8673277C7F6C04C3" ], [ "maximum distance separable", "7.1-1", [ 7, 1, 1 ], 45, 127, "maximum distance separable", "X8673277C7F6C04C3" ], [ "bounds, Hamming", "7.1-1", [ 7, 1, 1 ], 45, 127, "bounds hamming", "X8673277C7F6C04C3" ], [ "bounds, sphere packing bound", "7.1-1", [ 7, 1, 1 ], 45, 127, "bounds sphere packing bound", "X8673277C7F6C04C3" ], [ "perfect", "7.1-1", [ 7, 1, 1 ], 45, 127, "perfect", "X8673277C7F6C04C3" ], [ "\033[2XUpperBoundHamming\033[0X", "7.1-2", [ 7, 1, 2 ], 71, 127, "upperboundhamming", "X828095537C91FDFA" ], [ "bounds, Johnson", "7.1-2", [ 7, 1, 2 ], 71, 127, "bounds johnson", "X828095537C91FDFA" ], [ "\033[2XUpperBoundJohnson\033[0X", "7.1-3", [ 7, 1, 3 ], 100, 127, "upperboundjohnson", "X82EBFAAB7F5BFD4A" ], [ "bounds, Plotkin", "7.1-3", [ 7, 1, 3 ], 100, 127, "bounds plotkin", "X82EBFAAB7F5BFD4A" ], [ "\033[2XUpperBoundPlotkin\033[0X", "7.1-4", [ 7, 1, 4 ], 116, 128, "upperboundplotkin", "X7A26E2537DFF4409" ], [ "bounds, Elias", "7.1-4", [ 7, 1, 4 ], 116, 128, "bounds elias", "X7A26E2537DFF4409" ], [ "\033[2XUpperBoundElias\033[0X", "7.1-5", [ 7, 1, 5 ], 143, 128, "upperboundelias", "X86A5A7C67F625A40" ], [ "bounds, Griesmer", "7.1-5", [ 7, 1, 5 ], 143, 128, "bounds griesmer", "X86A5A7C67F625A40" ], [ "\033[2XUpperBoundGriesmer\033[0X", "7.1-6", [ 7, 1, 6 ], 162, 129, "upperboundgriesmer", "X82366C277E218130" ], [ "Griesmer code", "7.1-6", [ 7, 1, 6 ], 162, 129, "griesmer code", "X82366C277E218130" ], [ "\033[2XIsGriesmerCode\033[0X", "7.1-7", [ 7, 1, 7 ], 181, 129, "isgriesmercode", "X8301FA9F7C6C7445" ], [ "A(n,d)", "7.1-7", [ 7, 1, 7 ], 181, 129, "a n d", "X8301FA9F7C6C7445" ], [ "\033[2XUpperBound\033[0X", "7.1-8", [ 7, 1, 8 ], 199, 129, "upperbound", "X7A5CB74485184FEE" ], [ "\033[2XLowerBoundMinimumDistance\033[0X", "7.1-9", [ 7, 1, 9 ], 221, 130, "lowerboundminimumdistance", "X7FDF54BA81115D88" ], [ "bound, Gilbert-Varshamov lower", "7.1-9", [ 7, 1, 9 ], 221, 130, "bound gilbert-varshamov lower", "X7FDF54BA81115D88" ], [ "\033[2XLowerBoundGilbertVarshamov\033[0X", "7.1-10", [ 7, 1, 10 ], 242, 130, "lowerboundgilbertvarshamov", "X7CF15D2084499869" ], [ "bound, sphere packing lower", "7.1-10", [ 7, 1, 10 ], 242, 130, "bound sphere packing lower", "X7CF15D2084499869" ], [ "\033[2XLowerBoundSpherePacking\033[0X", "7.1-11", [ 7, 1, 11 ], 261, 130, "lowerboundspherepacking", "X8217D830871286D8" ], [ "\033[2XUpperBoundMinimumDistance\033[0X", "7.1-12", [ 7, 1, 12 ], 276, 131, "upperboundminimumdistance", "X7C6A58327BD6B685" ], [ "\033[2XBoundsMinimumDistance\033[0X", "7.1-13", [ 7, 1, 13 ], 299, 131, "boundsminimumdistance", "X7B3858B27A9E509A" ], [ "\033[2XBoundsCoveringRadius\033[0X", "7.2-1", [ 7, 2, 1 ], 344, 132, "boundscoveringradius", "X8320D1C180A1AAAD" ], [ "\033[2XIncreaseCoveringRadiusLowerBound\033[0X", "7.2-2", [ 7, 2, 2 ], 363, 132, "increasecoveringradiuslowerbound", "X7881E03E812140F4" ], [ "\033[2XExhaustiveSearchCoveringRadius\033[0X", "7.2-3", [ 7, 2, 3 ], 444, 133, "exhaustivesearchcoveringradius", "X7AD9F1D27C52BC0F" ], [ "\033[2XGeneralLowerBoundCoveringRadius\033[0X", "7.2-4", [ 7, 2, 4 ], 466, 134, "generallowerboundcoveringradius", "X85D671F4824B4B0C" ], [ "\033[2XGeneralUpperBoundCoveringRadius\033[0X", "7.2-5", [ 7, 2, 5 ], 486, 134, "generalupperboundcoveringradius" , "X8638F5A67D6E50C1" ], [ "\033[2XLowerBoundCoveringRadiusSphereCovering\033[0X", "7.2-6", [ 7, 2, 6 ], 505, 135, "lowerboundcoveringradiusspherecovering", "X7E7FBCC87D5562AB" ], [ "\033[2XLowerBoundCoveringRadiusVanWee1\033[0X", "7.2-7", [ 7, 2, 7 ], 540, 135, "lowerboundcoveringradiusvanwee1" , "X85E20C518360AB70" ], [ "\033[2XLowerBoundCoveringRadiusVanWee2\033[0X", "7.2-8", [ 7, 2, 8 ], 576, 136, "lowerboundcoveringradiusvanwee2", "X7C72994A825228E7" ], [ "\033[2XLowerBoundCoveringRadiusCountingExcess\033[0X", "7.2-9", [ 7, 2, 9 ], 616, 136, "lowerboundcoveringradiuscountingexcess", "X7F95362485759ACB" ], [ "\033[2XLowerBoundCoveringRadiusEmbedded1\033[0X", "7.2-10", [ 7, 2, 10 ], 663, 137, "lowerboundcoveringradiusembedded1", "X829C14A383B5BF59" ], [ "\033[2XLowerBoundCoveringRadiusEmbedded2\033[0X", "7.2-11", [ 7, 2, 11 ], 702, 137, "lowerboundcoveringradiusembedded2", "X7B0C81B88604C448" ], [ "\033[2XLowerBoundCoveringRadiusInduction\033[0X", "7.2-12", [ 7, 2, 12 ], 741, 138, "lowerboundcoveringradiusinduction", "X7D27F6E27B9A0D35" ], [ "\033[2XUpperBoundCoveringRadiusRedundancy\033[0X", "7.2-13", [ 7, 2, 13 ], 766, 138, "upperboundcoveringradiusredundancy", "X80F8DFAD7D67CBEC" ], [ "external distance", "7.2-13", [ 7, 2, 13 ], 766, 138, "external distance", "X80F8DFAD7D67CBEC" ], [ "\033[2XUpperBoundCoveringRadiusDelsarte\033[0X", "7.2-14", [ 7, 2, 14 ], 783, 139, "upperboundcoveringradiusdelsarte", "X832847A17FD0D142" ], [ "\033[2XUpperBoundCoveringRadiusStrength\033[0X", "7.2-15", [ 7, 2, 15 ], 802, 139, "upperboundcoveringradiusstrength", "X86F10D9E79AB8796" ], [ "strength", "7.2-15", [ 7, 2, 15 ], 802, 139, "strength", "X86F10D9E79AB8796" ], [ "\033[2XUpperBoundCoveringRadiusGriesmerLike\033[0X", "7.2-16", [ 7, 2, 16 ], 825, 139, "upperboundcoveringradiusgriesmerlike", "X8585C6A982489FC3" ], [ "\033[2XUpperBoundCoveringRadiusCyclicCode\033[0X", "7.2-17", [ 7, 2, 17 ], 846, 140, "upperboundcoveringradiuscycliccode", "X82A38F5F858CF3FC" ], [ "\033[2XKrawtchoukMat\033[0X", "7.3-1", [ 7, 3, 1 ], 889, 141, "krawtchoukmat", "X82899B64802A4BCE" ], [ "Gary code", "7.3-1", [ 7, 3, 1 ], 889, 141, "gary code", "X82899B64802A4BCE" ], [ "\033[2XGrayMat\033[0X", "7.3-2", [ 7, 3, 2 ], 917, 141, "graymat", "X87AFE2C078031CE4" ], [ "\033[2XSylvesterMat\033[0X", "7.3-3", [ 7, 3, 3 ], 939, 141, "sylvestermat", "X7E1E7C5287919CDB" ], [ "Hadamard matrix", "7.3-3", [ 7, 3, 3 ], 939, 141, "hadamard matrix", "X7E1E7C5287919CDB" ], [ "\033[2XHadamardMat\033[0X", "7.3-4", [ 7, 3, 4 ], 959, 142, "hadamardmat", "X8014A1F181ECD8AA" ], [ "\033[2XVandermondeMat\033[0X", "7.3-5", [ 7, 3, 5 ], 990, 142, "vandermondemat", "X797F43607AD8660D" ], [ "standard form", "7.3-5", [ 7, 3, 5 ], 990, 142, "standard form", "X797F43607AD8660D" ], [ "\033[2XPutStandardForm\033[0X", "7.3-6", [ 7, 3, 6 ], 1009, 143, "putstandardform", "X7B47D82485B66F1D" ], [ "\033[2XIsInStandardForm\033[0X", "7.3-7", [ 7, 3, 7 ], 1063, 144, "isinstandardform", "X7D4EDA0A854EBFEF" ], [ "\033[2XPermutedCols\033[0X", "7.3-8", [ 7, 3, 8 ], 1084, 144, "permutedcols", "X7A97AD477E7638DE" ], [ "\033[2XVerticalConversionFieldMat\033[0X", "7.3-9", [ 7, 3, 9 ], 1099, 144, "verticalconversionfieldmat", "X7B68119F85E9EC6D" ], [ "\033[2XHorizontalConversionFieldMat\033[0X", "7.3-10", [ 7, 3, 10 ], 1135, 145, "horizontalconversionfieldmat", "X8033E9A67BA155C8" ], [ "mutually orthogonal Latin squares", "7.3-10", [ 7, 3, 10 ], 1135, 145, "mutually orthogonal latin squares", "X8033E9A67BA155C8" ], [ "Latin square", "7.3-10", [ 7, 3, 10 ], 1135, 145, "latin square", "X8033E9A67BA155C8" ], [ "\033[2XMOLS\033[0X", "7.3-11", [ 7, 3, 11 ], 1171, 145, "mols", "X804AAFF2867080F7" ], [ "\033[2XIsLatinSquare\033[0X", "7.3-12", [ 7, 3, 12 ], 1212, 146, "islatinsquare", "X7F34306B81DC2776" ], [ "\033[2XAreMOLS\033[0X", "7.3-13", [ 7, 3, 13 ], 1227, 146, "aremols", "X81B9B40B7B2D97D5" ], [ "\033[2XCoordinateNorm\033[0X", "7.4-1", [ 7, 4, 1 ], 1253, 147, "coordinatenorm", "X8032E53078264ABB" ], [ "norm of a code", "7.4-1", [ 7, 4, 1 ], 1253, 147, "norm of a code", "X8032E53078264ABB" ], [ "\033[2XCodeNorm\033[0X", "7.4-2", [ 7, 4, 2 ], 1272, 147, "codenorm", "X7ED2EF368203AF47" ], [ "acceptable coordinate", "7.4-2", [ 7, 4, 2 ], 1272, 147, "acceptable coordinate", "X7ED2EF368203AF47" ], [ "\033[2XIsCoordinateAcceptable\033[0X", "7.4-3", [ 7, 4, 3 ], 1286, 147, "iscoordinateacceptable", "X7D24F8BF7F9A7BF1" ], [ "acceptable coordinate", "7.4-3", [ 7, 4, 3 ], 1286, 147, "acceptable coordinate", "X7D24F8BF7F9A7BF1" ], [ "\033[2XGeneralizedCodeNorm\033[0X", "7.4-4", [ 7, 4, 4 ], 1300, 148, "generalizedcodenorm", "X87039FD179AD3009" ], [ "normal code", "7.4-4", [ 7, 4, 4 ], 1300, 148, "normal code", "X87039FD179AD3009" ], [ "\033[2XIsNormalCode\033[0X", "7.4-5", [ 7, 4, 5 ], 1315, 148, "isnormalcode", "X80283A2F7C8101BD" ], [ "weight enumerator polynomial", "7.5", [ 7, 5, 0 ], 1334, 148, "weight enumerator polynomial", "X8308D685809A4E2F" ], [ "\033[2XCodeWeightEnumerator\033[0X", "7.5-1", [ 7, 5, 1 ], 1344, 148, "codeweightenumerator", "X871286437DE7A6A4" ], [ "\033[2XCodeDistanceEnumerator\033[0X", "7.5-2", [ 7, 5, 2 ], 1364, 149, "codedistanceenumerator", "X84DA928083B103A0" ], [ "MacWilliams transform", "7.5-2", [ 7, 5, 2 ], 1364, 149, "macwilliams transform", "X84DA928083B103A0" ], [ "\033[2XCodeMacWilliamsTransform\033[0X", "7.5-3", [ 7, 5, 3 ], 1386, 149, "codemacwilliamstransform", "X84B2BE66780EFBF9" ], [ "density of a code", "7.5-3", [ 7, 5, 3 ], 1386, 149, "density of a code", "X84B2BE66780EFBF9" ], [ "\033[2XCodeDensity\033[0X", "7.5-4", [ 7, 5, 4 ], 1403, 149, "codedensity", "X7903286078F8051B" ], [ "perfect code", "7.5-4", [ 7, 5, 4 ], 1403, 149, "perfect code", "X7903286078F8051B" ], [ "\033[2XSphereContent\033[0X", "7.5-5", [ 7, 5, 5 ], 1424, 150, "spherecontent", "X85303BAE7BD46D81" ], [ "\033[2XKrawtchouk\033[0X", "7.5-6", [ 7, 5, 6 ], 1450, 150, "krawtchouk", "X7ACDC5377CD17451" ], [ "\033[2XPrimitiveUnityRoot\033[0X", "7.5-7", [ 7, 5, 7 ], 1471, 150, "primitiveunityroot", "X827E39957A87EB51" ], [ "\033[2XPrimitivePolynomialsNr\033[0X", "7.5-8", [ 7, 5, 8 ], 1488, 151, "primitivepolynomialsnr", "X78AEA40F7AD9D541" ], [ "\033[2XIrreduciblePolynomialsNr\033[0X", "7.5-9", [ 7, 5, 9 ], 1505, 151, "irreduciblepolynomialsnr", "X7A2B54EF868AA752" ], [ "\033[2XMatrixRepresentationOfElement\033[0X", "7.5-10", [ 7, 5, 10 ], 1518, 151, "matrixrepresentationofelement", "X7B50D3417F6FD7C6" ], [ "reciprocal polynomial", "7.5-10", [ 7, 5, 10 ], 1518, 151, "reciprocal polynomial", "X7B50D3417F6FD7C6" ], [ "\033[2XReciprocalPolynomial\033[0X", "7.5-11", [ 7, 5, 11 ], 1543, 152, "reciprocalpolynomial", "X7805D2BB7CE4D455" ], [ "\033[2XCyclotomicCosets\033[0X", "7.5-12", [ 7, 5, 12 ], 1570, 152, "cyclotomiccosets", "X7AEA9F807E6FFEFF" ], [ "\033[2XWeightHistogram\033[0X", "7.5-13", [ 7, 5, 13 ], 1591, 153, "weighthistogram", "X7A4EA98D794CF410" ], [ "\033[2XMultiplicityInList\033[0X", "7.5-14", [ 7, 5, 14 ], 1619, 153, "multiplicityinlist", "X805DF25C84585FD6" ] , [ "\033[2XMostCommonInList\033[0X", "7.5-15", [ 7, 5, 15 ], 1635, 153, "mostcommoninlist", "X8072B0DA78FBE562" ] , [ "\033[2XRotateList\033[0X", "7.5-16", [ 7, 5, 16 ], 1649, 154, "rotatelist", "X7C5407EF87849857" ], [ "\033[2XCirculantMatrix\033[0X", "7.5-17", [ 7, 5, 17 ], 1663, 154, "circulantmatrix", "X85E526367878F72A" ], [ "\033[2XMatrixTransformationOnMultivariatePolynomial \033[0X", "7.6-1", [ 7, 6, 1 ], 1683, 154, "matrixtransformationonmultivariatepolynomial", "X84D51EBB784E7C5D" ], [ "\033[2XDegreeMultivariatePolynomial\033[0X", "7.6-2", [ 7, 6, 2 ], 1691, 154, "degreemultivariatepolynomial", "X80433A4B792880EF" ], [ "\033[2XDegreesMultivariatePolynomial\033[0X", "7.6-3", [ 7, 6, 3 ], 1713, 155, "degreesmultivariatepolynomial", "X83F44E397C56F2E0" ], [ "\033[2XCoefficientMultivariatePolynomial\033[0X", "7.6-4", [ 7, 6, 4 ], 1734, 155, "coefficientmultivariatepolynomial", "X7E9021697A61A60F" ], [ "\033[2XSolveLinearSystem\033[0X", "7.6-5", [ 7, 6, 5 ], 1776, 156, "solvelinearsystem", "X79E76B6F7D177E27" ], [ "\033[2XGuavaVersion\033[0X", "7.6-6", [ 7, 6, 6 ], 1805, 156, "guavaversion", "X80171AA687FFDC70" ], [ "\033[2XZechLog\033[0X", "7.6-7", [ 7, 6, 7 ], 1817, 156, "zechlog", "X7EBBE86D85CC90C0" ], [ "\033[2XCoefficientToPolynomial\033[0X", "7.6-8", [ 7, 6, 8 ], 1835, 157, "coefficienttopolynomial", "X7C8C1E6A7E3497F0" ], [ "\033[2XDegreesMonomialTerm\033[0X", "7.6-9", [ 7, 6, 9 ], 1854, 157, "degreesmonomialterm", "X8431985183B63BB7" ], [ "\033[2XDivisorsMultivariatePolynomial\033[0X", "7.6-10", [ 7, 6, 10 ], 1885, 158, "divisorsmultivariatepolynomial", "X860EF39B841380A1" ] ] ); guava-3.6/doc/manual.ilg0000644017361200001450000000064711026723452015072 0ustar tabbottcrontabThis is makeindex, version 2.14 [02-Oct-2002] (kpathsea + Thai support). Scanning style file ./manual.mst................done (16 attributes redefined, 0 ignored). Scanning input file manual.idx....done (283 entries accepted, 0 rejected). Sorting entries.....done (2383 comparisons). Generating output file manual.ind....done (280 lines written, 0 warnings). Output written in manual.ind. Transcript written in manual.ilg. guava-3.6/doc/guava.aux0000644017361200001450000024614611027015742014745 0ustar tabbottcrontab\relax \ifx\hyper@anchor\@undefined \global \let \oldcontentsline\contentsline \gdef \contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}} \global \let \oldnewlabel\newlabel \gdef \newlabel#1#2{\newlabelxx{#1}#2} \gdef \newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}} \AtEndDocument{\let \contentsline\oldcontentsline \let \newlabel\oldnewlabel} \else \global \let \hyper@last\relax \fi \citation{Leon91} \citation{MS83} \citation{HP03} \@writefile{toc}{\contentsline {chapter}{\numberline {1}\leavevmode {\color {Chapter }Introduction}}{12}{chapter.1}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \@writefile{toc}{\contentsline {section}{\numberline {1.1}\leavevmode {\color {Chapter }Introduction to the \textsf {GUAVA} package}}{12}{section.1.1}} \@writefile{brf}{\backcite{Leon91}{{12}{1.1}{section.1.1}}} \@writefile{brf}{\backcite{MS83}{{12}{1.1}{section.1.1}}} \@writefile{brf}{\backcite{HP03}{{12}{1.1}{section.1.1}}} \@writefile{toc}{\contentsline {section}{\numberline {1.2}\leavevmode {\color {Chapter }Installing \textsf {GUAVA}}}{12}{section.1.2}} \newlabel{Installing GUAVA}{{1.2}{12}{\textcolor {Chapter }{Installing \textsf {GUAVA}}\relax }{section.1.2}{}} \@writefile{toc}{\contentsline {section}{\numberline {1.3}\leavevmode {\color {Chapter }Loading \textsf {GUAVA}}}{13}{section.1.3}} \@writefile{toc}{\contentsline {chapter}{\numberline {2}\leavevmode {\color {Chapter }Coding theory functions in GAP}}{14}{chapter.2}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \newlabel{Coding theory functions in the GAP}{{2}{14}{\textcolor {Chapter }{Coding theory functions in GAP}\relax }{chapter.2}{}} \@writefile{toc}{\contentsline {section}{\numberline {2.1}\leavevmode {\color {Chapter } Distance functions }}{14}{section.2.1}} \newlabel{Distance functions}{{2.1}{14}{\textcolor {Chapter }{ Distance functions }\relax }{section.2.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.1.1}\leavevmode {\color {Chapter }AClosestVectorCombinationsMatFFEVecFFE}}{14}{subsection.2.1.1}} \newlabel{AClosestVectorCombinationsMatFFEVecFFE}{{2.1.1}{14}{\textcolor {Chapter }{AClosestVectorCombinationsMatFFEVecFFE}\relax }{subsection.2.1.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.1.2}\leavevmode {\color {Chapter }AClosestVectorComb..MatFFEVecFFECoords}}{15}{subsection.2.1.2}} \newlabel{AClosestVectorComb..MatFFEVecFFECoords}{{2.1.2}{15}{\textcolor {Chapter }{AClosestVectorComb..MatFFEVecFFECoords}\relax }{subsection.2.1.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.1.3}\leavevmode {\color {Chapter }DistancesDistributionMatFFEVecFFE}}{15}{subsection.2.1.3}} \newlabel{DistancesDistributionMatFFEVecFFE}{{2.1.3}{15}{\textcolor {Chapter }{DistancesDistributionMatFFEVecFFE}\relax }{subsection.2.1.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.1.4}\leavevmode {\color {Chapter }DistancesDistributionVecFFEsVecFFE}}{16}{subsection.2.1.4}} \newlabel{DistancesDistributionVecFFEsVecFFE}{{2.1.4}{16}{\textcolor {Chapter }{DistancesDistributionVecFFEsVecFFE}\relax }{subsection.2.1.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.1.5}\leavevmode {\color {Chapter }WeightVecFFE}}{16}{subsection.2.1.5}} \newlabel{WeightVecFFE}{{2.1.5}{16}{\textcolor {Chapter }{WeightVecFFE}\relax }{subsection.2.1.5}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.1.6}\leavevmode {\color {Chapter }DistanceVecFFE}}{16}{subsection.2.1.6}} \newlabel{DistanceVecFFE}{{2.1.6}{16}{\textcolor {Chapter }{DistanceVecFFE}\relax }{subsection.2.1.6}{}} \@writefile{toc}{\contentsline {section}{\numberline {2.2}\leavevmode {\color {Chapter } Other functions }}{17}{section.2.2}} \newlabel{Other functions}{{2.2}{17}{\textcolor {Chapter }{ Other functions }\relax }{section.2.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.2.1}\leavevmode {\color {Chapter }ConwayPolynomial}}{17}{subsection.2.2.1}} \newlabel{ConwayPolynomial}{{2.2.1}{17}{\textcolor {Chapter }{ConwayPolynomial}\relax }{subsection.2.2.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.2.2}\leavevmode {\color {Chapter }RandomPrimitivePolynomial}}{18}{subsection.2.2.2}} \newlabel{RandomPrimitivePolynomial}{{2.2.2}{18}{\textcolor {Chapter }{RandomPrimitivePolynomial}\relax }{subsection.2.2.2}{}} \@writefile{toc}{\contentsline {chapter}{\numberline {3}\leavevmode {\color {Chapter }Codewords}}{19}{chapter.3}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \newlabel{Codewords}{{3}{19}{\textcolor {Chapter }{Codewords}\relax }{chapter.3}{}} \@writefile{toc}{\contentsline {section}{\numberline {3.1}\leavevmode {\color {Chapter }Construction of Codewords}}{20}{section.3.1}} \newlabel{Construction of Codewords}{{3.1}{20}{\textcolor {Chapter }{Construction of Codewords}\relax }{section.3.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.1.1}\leavevmode {\color {Chapter }Codeword}}{20}{subsection.3.1.1}} \newlabel{Codeword}{{3.1.1}{20}{\textcolor {Chapter }{Codeword}\relax }{subsection.3.1.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.1.2}\leavevmode {\color {Chapter }CodewordNr}}{21}{subsection.3.1.2}} \newlabel{CodewordNr}{{3.1.2}{21}{\textcolor {Chapter }{CodewordNr}\relax }{subsection.3.1.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.1.3}\leavevmode {\color {Chapter }IsCodeword}}{22}{subsection.3.1.3}} \newlabel{IsCodeword}{{3.1.3}{22}{\textcolor {Chapter }{IsCodeword}\relax }{subsection.3.1.3}{}} \@writefile{toc}{\contentsline {section}{\numberline {3.2}\leavevmode {\color {Chapter }Comparisons of Codewords}}{22}{section.3.2}} \newlabel{Comparisons of Codewords}{{3.2}{22}{\textcolor {Chapter }{Comparisons of Codewords}\relax }{section.3.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.2.1}\leavevmode {\color {Chapter }=}}{22}{subsection.3.2.1}} \newlabel{=}{{3.2.1}{22}{\textcolor {Chapter }{=}\relax }{subsection.3.2.1}{}} \@writefile{toc}{\contentsline {section}{\numberline {3.3}\leavevmode {\color {Chapter }Arithmetic Operations for Codewords}}{23}{section.3.3}} \newlabel{Arithmetic Operations for Codewords}{{3.3}{23}{\textcolor {Chapter }{Arithmetic Operations for Codewords}\relax }{section.3.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.3.1}\leavevmode {\color {Chapter }+}}{23}{subsection.3.3.1}} \newlabel{+}{{3.3.1}{23}{\textcolor {Chapter }{+}\relax }{subsection.3.3.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.3.2}\leavevmode {\color {Chapter }-}}{23}{subsection.3.3.2}} \newlabel{-}{{3.3.2}{23}{\textcolor {Chapter }{-}\relax }{subsection.3.3.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.3.3}\leavevmode {\color {Chapter }+}}{23}{subsection.3.3.3}} \newlabel{+}{{3.3.3}{23}{\textcolor {Chapter }{+}\relax }{subsection.3.3.3}{}} \@writefile{toc}{\contentsline {section}{\numberline {3.4}\leavevmode {\color {Chapter } Functions that Convert Codewords to Vectors or Polynomials }}{24}{section.3.4}} \newlabel{convert Codewords to Vectors or Polynomials}{{3.4}{24}{\textcolor {Chapter }{ Functions that Convert Codewords to Vectors or Polynomials }\relax }{section.3.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.4.1}\leavevmode {\color {Chapter }VectorCodeword}}{24}{subsection.3.4.1}} \newlabel{VectorCodeword}{{3.4.1}{24}{\textcolor {Chapter }{VectorCodeword}\relax }{subsection.3.4.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.4.2}\leavevmode {\color {Chapter }PolyCodeword}}{24}{subsection.3.4.2}} \newlabel{PolyCodeword}{{3.4.2}{24}{\textcolor {Chapter }{PolyCodeword}\relax }{subsection.3.4.2}{}} \@writefile{toc}{\contentsline {section}{\numberline {3.5}\leavevmode {\color {Chapter } Functions that Change the Display Form of a Codeword }}{25}{section.3.5}} \newlabel{Functions that Change the Display Form of a Codeword}{{3.5}{25}{\textcolor {Chapter }{ Functions that Change the Display Form of a Codeword }\relax }{section.3.5}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.5.1}\leavevmode {\color {Chapter }TreatAsVector}}{25}{subsection.3.5.1}} \newlabel{TreatAsVector}{{3.5.1}{25}{\textcolor {Chapter }{TreatAsVector}\relax }{subsection.3.5.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.5.2}\leavevmode {\color {Chapter }TreatAsPoly}}{25}{subsection.3.5.2}} \newlabel{TreatAsPoly}{{3.5.2}{25}{\textcolor {Chapter }{TreatAsPoly}\relax }{subsection.3.5.2}{}} \@writefile{toc}{\contentsline {section}{\numberline {3.6}\leavevmode {\color {Chapter } Other Codeword Functions }}{26}{section.3.6}} \newlabel{Other Codeword Functions}{{3.6}{26}{\textcolor {Chapter }{ Other Codeword Functions }\relax }{section.3.6}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.6.1}\leavevmode {\color {Chapter }NullWord}}{26}{subsection.3.6.1}} \newlabel{NullWord}{{3.6.1}{26}{\textcolor {Chapter }{NullWord}\relax }{subsection.3.6.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.6.2}\leavevmode {\color {Chapter }DistanceCodeword}}{26}{subsection.3.6.2}} \newlabel{DistanceCodeword}{{3.6.2}{26}{\textcolor {Chapter }{DistanceCodeword}\relax }{subsection.3.6.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.6.3}\leavevmode {\color {Chapter }Support}}{26}{subsection.3.6.3}} \newlabel{Support}{{3.6.3}{26}{\textcolor {Chapter }{Support}\relax }{subsection.3.6.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.6.4}\leavevmode {\color {Chapter }WeightCodeword}}{27}{subsection.3.6.4}} \newlabel{WeightCodeword}{{3.6.4}{27}{\textcolor {Chapter }{WeightCodeword}\relax }{subsection.3.6.4}{}} \@writefile{toc}{\contentsline {chapter}{\numberline {4}\leavevmode {\color {Chapter }Codes}}{28}{chapter.4}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \newlabel{Codes}{{4}{28}{\textcolor {Chapter }{Codes}\relax }{chapter.4}{}} \@writefile{toc}{\contentsline {section}{\numberline {4.1}\leavevmode {\color {Chapter }Comparisons of Codes}}{30}{section.4.1}} \newlabel{Comparisons of Codes}{{4.1}{30}{\textcolor {Chapter }{Comparisons of Codes}\relax }{section.4.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.1.1}\leavevmode {\color {Chapter }=}}{30}{subsection.4.1.1}} \newlabel{=}{{4.1.1}{30}{\textcolor {Chapter }{=}\relax }{subsection.4.1.1}{}} \@writefile{toc}{\contentsline {section}{\numberline {4.2}\leavevmode {\color {Chapter } Operations for Codes }}{31}{section.4.2}} \newlabel{Operations for Codes}{{4.2}{31}{\textcolor {Chapter }{ Operations for Codes }\relax }{section.4.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.2.1}\leavevmode {\color {Chapter }+}}{31}{subsection.4.2.1}} \newlabel{+}{{4.2.1}{31}{\textcolor {Chapter }{+}\relax }{subsection.4.2.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.2.2}\leavevmode {\color {Chapter }*}}{31}{subsection.4.2.2}} \newlabel{*}{{4.2.2}{31}{\textcolor {Chapter }{*}\relax }{subsection.4.2.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.2.3}\leavevmode {\color {Chapter }*}}{31}{subsection.4.2.3}} \newlabel{*}{{4.2.3}{31}{\textcolor {Chapter }{*}\relax }{subsection.4.2.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.2.4}\leavevmode {\color {Chapter }InformationWord}}{32}{subsection.4.2.4}} \newlabel{InformationWord}{{4.2.4}{32}{\textcolor {Chapter }{InformationWord}\relax }{subsection.4.2.4}{}} \@writefile{toc}{\contentsline {section}{\numberline {4.3}\leavevmode {\color {Chapter } Boolean Functions for Codes }}{32}{section.4.3}} \newlabel{Boolean Functions for Codes}{{4.3}{32}{\textcolor {Chapter }{ Boolean Functions for Codes }\relax }{section.4.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.3.1}\leavevmode {\color {Chapter }in}}{32}{subsection.4.3.1}} \newlabel{in}{{4.3.1}{32}{\textcolor {Chapter }{in}\relax }{subsection.4.3.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.3.2}\leavevmode {\color {Chapter }IsSubset}}{33}{subsection.4.3.2}} \newlabel{IsSubset}{{4.3.2}{33}{\textcolor {Chapter }{IsSubset}\relax }{subsection.4.3.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.3.3}\leavevmode {\color {Chapter }IsCode}}{33}{subsection.4.3.3}} \newlabel{IsCode}{{4.3.3}{33}{\textcolor {Chapter }{IsCode}\relax }{subsection.4.3.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.3.4}\leavevmode {\color {Chapter }IsLinearCode}}{33}{subsection.4.3.4}} \newlabel{IsLinearCode}{{4.3.4}{33}{\textcolor {Chapter }{IsLinearCode}\relax }{subsection.4.3.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.3.5}\leavevmode {\color {Chapter }IsCyclicCode}}{33}{subsection.4.3.5}} \newlabel{IsCyclicCode}{{4.3.5}{33}{\textcolor {Chapter }{IsCyclicCode}\relax }{subsection.4.3.5}{}} \citation{HP03} \@writefile{toc}{\contentsline {subsection}{\numberline {4.3.6}\leavevmode {\color {Chapter }IsPerfectCode}}{34}{subsection.4.3.6}} \newlabel{IsPerfectCode}{{4.3.6}{34}{\textcolor {Chapter }{IsPerfectCode}\relax }{subsection.4.3.6}{}} \@writefile{brf}{\backcite{HP03}{{34}{4.3.6}{subsection.4.3.6}}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.3.7}\leavevmode {\color {Chapter }IsMDSCode}}{34}{subsection.4.3.7}} \newlabel{IsMDSCode}{{4.3.7}{34}{\textcolor {Chapter }{IsMDSCode}\relax }{subsection.4.3.7}{}} \citation{HP03} \@writefile{toc}{\contentsline {subsection}{\numberline {4.3.8}\leavevmode {\color {Chapter }IsSelfDualCode}}{35}{subsection.4.3.8}} \newlabel{IsSelfDualCode}{{4.3.8}{35}{\textcolor {Chapter }{IsSelfDualCode}\relax }{subsection.4.3.8}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.3.9}\leavevmode {\color {Chapter }IsSelfOrthogonalCode}}{35}{subsection.4.3.9}} \newlabel{IsSelfOrthogonalCode}{{4.3.9}{35}{\textcolor {Chapter }{IsSelfOrthogonalCode}\relax }{subsection.4.3.9}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.3.10}\leavevmode {\color {Chapter }IsDoublyEvenCode}}{35}{subsection.4.3.10}} \newlabel{IsDoublyEvenCode}{{4.3.10}{35}{\textcolor {Chapter }{IsDoublyEvenCode}\relax }{subsection.4.3.10}{}} \@writefile{brf}{\backcite{HP03}{{36}{4.3.10}{subsection.4.3.10}}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.3.11}\leavevmode {\color {Chapter }IsSinglyEvenCode}}{36}{subsection.4.3.11}} \newlabel{IsSinglyEvenCode}{{4.3.11}{36}{\textcolor {Chapter }{IsSinglyEvenCode}\relax }{subsection.4.3.11}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.3.12}\leavevmode {\color {Chapter }IsEvenCode}}{36}{subsection.4.3.12}} \newlabel{IsEvenCode}{{4.3.12}{36}{\textcolor {Chapter }{IsEvenCode}\relax }{subsection.4.3.12}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.3.13}\leavevmode {\color {Chapter }IsSelfComplementaryCode}}{37}{subsection.4.3.13}} \newlabel{IsSelfComplementaryCode}{{4.3.13}{37}{\textcolor {Chapter }{IsSelfComplementaryCode}\relax }{subsection.4.3.13}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.3.14}\leavevmode {\color {Chapter }IsAffineCode}}{37}{subsection.4.3.14}} \newlabel{IsAffineCode}{{4.3.14}{37}{\textcolor {Chapter }{IsAffineCode}\relax }{subsection.4.3.14}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.3.15}\leavevmode {\color {Chapter }IsAlmostAffineCode}}{38}{subsection.4.3.15}} \newlabel{IsAlmostAffineCode}{{4.3.15}{38}{\textcolor {Chapter }{IsAlmostAffineCode}\relax }{subsection.4.3.15}{}} \@writefile{toc}{\contentsline {section}{\numberline {4.4}\leavevmode {\color {Chapter } Equivalence and Isomorphism of Codes }}{38}{section.4.4}} \newlabel{Equivalence and Isomorphism of Codes}{{4.4}{38}{\textcolor {Chapter }{ Equivalence and Isomorphism of Codes }\relax }{section.4.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.4.1}\leavevmode {\color {Chapter }IsEquivalent}}{38}{subsection.4.4.1}} \newlabel{IsEquivalent}{{4.4.1}{38}{\textcolor {Chapter }{IsEquivalent}\relax }{subsection.4.4.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.4.2}\leavevmode {\color {Chapter }CodeIsomorphism}}{38}{subsection.4.4.2}} \newlabel{CodeIsomorphism}{{4.4.2}{38}{\textcolor {Chapter }{CodeIsomorphism}\relax }{subsection.4.4.2}{}} \citation{Leon82} \@writefile{toc}{\contentsline {subsection}{\numberline {4.4.3}\leavevmode {\color {Chapter }AutomorphismGroup}}{39}{subsection.4.4.3}} \newlabel{AutomorphismGroup}{{4.4.3}{39}{\textcolor {Chapter }{AutomorphismGroup}\relax }{subsection.4.4.3}{}} \@writefile{brf}{\backcite{Leon82}{{39}{4.4.3}{subsection.4.4.3}}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.4.4}\leavevmode {\color {Chapter }PermutationAutomorphismGroup}}{40}{subsection.4.4.4}} \newlabel{PermutationAutomorphismGroup}{{4.4.4}{40}{\textcolor {Chapter }{PermutationAutomorphismGroup}\relax }{subsection.4.4.4}{}} \@writefile{toc}{\contentsline {section}{\numberline {4.5}\leavevmode {\color {Chapter } Domain Functions for Codes }}{40}{section.4.5}} \newlabel{Domain Functions for Codes}{{4.5}{40}{\textcolor {Chapter }{ Domain Functions for Codes }\relax }{section.4.5}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.5.1}\leavevmode {\color {Chapter }IsFinite}}{40}{subsection.4.5.1}} \newlabel{IsFinite}{{4.5.1}{40}{\textcolor {Chapter }{IsFinite}\relax }{subsection.4.5.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.5.2}\leavevmode {\color {Chapter }Size}}{40}{subsection.4.5.2}} \newlabel{Size}{{4.5.2}{40}{\textcolor {Chapter }{Size}\relax }{subsection.4.5.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.5.3}\leavevmode {\color {Chapter }LeftActingDomain}}{41}{subsection.4.5.3}} \newlabel{LeftActingDomain}{{4.5.3}{41}{\textcolor {Chapter }{LeftActingDomain}\relax }{subsection.4.5.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.5.4}\leavevmode {\color {Chapter }Dimension}}{41}{subsection.4.5.4}} \newlabel{Dimension}{{4.5.4}{41}{\textcolor {Chapter }{Dimension}\relax }{subsection.4.5.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.5.5}\leavevmode {\color {Chapter }AsSSortedList}}{41}{subsection.4.5.5}} \newlabel{AsSSortedList}{{4.5.5}{41}{\textcolor {Chapter }{AsSSortedList}\relax }{subsection.4.5.5}{}} \@writefile{toc}{\contentsline {section}{\numberline {4.6}\leavevmode {\color {Chapter } Printing and Displaying Codes }}{42}{section.4.6}} \newlabel{Printing and Displaying Codes}{{4.6}{42}{\textcolor {Chapter }{ Printing and Displaying Codes }\relax }{section.4.6}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.6.1}\leavevmode {\color {Chapter }Print}}{42}{subsection.4.6.1}} \newlabel{Print}{{4.6.1}{42}{\textcolor {Chapter }{Print}\relax }{subsection.4.6.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.6.2}\leavevmode {\color {Chapter }String}}{42}{subsection.4.6.2}} \newlabel{String}{{4.6.2}{42}{\textcolor {Chapter }{String}\relax }{subsection.4.6.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.6.3}\leavevmode {\color {Chapter }Display}}{43}{subsection.4.6.3}} \newlabel{Display}{{4.6.3}{43}{\textcolor {Chapter }{Display}\relax }{subsection.4.6.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.6.4}\leavevmode {\color {Chapter }DisplayBoundsInfo}}{43}{subsection.4.6.4}} \newlabel{DisplayBoundsInfo}{{4.6.4}{43}{\textcolor {Chapter }{DisplayBoundsInfo}\relax }{subsection.4.6.4}{}} \@writefile{toc}{\contentsline {section}{\numberline {4.7}\leavevmode {\color {Chapter } Generating (Check) Matrices and Polynomials }}{44}{section.4.7}} \newlabel{Generating (Check) Matrices and Polynomials}{{4.7}{44}{\textcolor {Chapter }{ Generating (Check) Matrices and Polynomials }\relax }{section.4.7}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.7.1}\leavevmode {\color {Chapter }GeneratorMat}}{44}{subsection.4.7.1}} \newlabel{GeneratorMat}{{4.7.1}{44}{\textcolor {Chapter }{GeneratorMat}\relax }{subsection.4.7.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.7.2}\leavevmode {\color {Chapter }CheckMat}}{44}{subsection.4.7.2}} \newlabel{CheckMat}{{4.7.2}{44}{\textcolor {Chapter }{CheckMat}\relax }{subsection.4.7.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.7.3}\leavevmode {\color {Chapter }GeneratorPol}}{45}{subsection.4.7.3}} \newlabel{GeneratorPol}{{4.7.3}{45}{\textcolor {Chapter }{GeneratorPol}\relax }{subsection.4.7.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.7.4}\leavevmode {\color {Chapter }CheckPol}}{45}{subsection.4.7.4}} \newlabel{CheckPol}{{4.7.4}{45}{\textcolor {Chapter }{CheckPol}\relax }{subsection.4.7.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.7.5}\leavevmode {\color {Chapter }RootsOfCode}}{45}{subsection.4.7.5}} \newlabel{RootsOfCode}{{4.7.5}{45}{\textcolor {Chapter }{RootsOfCode}\relax }{subsection.4.7.5}{}} \@writefile{toc}{\contentsline {section}{\numberline {4.8}\leavevmode {\color {Chapter } Parameters of Codes }}{46}{section.4.8}} \newlabel{Parameters of Codes}{{4.8}{46}{\textcolor {Chapter }{ Parameters of Codes }\relax }{section.4.8}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.8.1}\leavevmode {\color {Chapter }WordLength}}{46}{subsection.4.8.1}} \newlabel{WordLength}{{4.8.1}{46}{\textcolor {Chapter }{WordLength}\relax }{subsection.4.8.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.8.2}\leavevmode {\color {Chapter }Redundancy}}{46}{subsection.4.8.2}} \newlabel{Redundancy}{{4.8.2}{46}{\textcolor {Chapter }{Redundancy}\relax }{subsection.4.8.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.8.3}\leavevmode {\color {Chapter }MinimumDistance}}{46}{subsection.4.8.3}} \newlabel{MinimumDistance}{{4.8.3}{46}{\textcolor {Chapter }{MinimumDistance}\relax }{subsection.4.8.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.8.4}\leavevmode {\color {Chapter }MinimumDistanceLeon}}{47}{subsection.4.8.4}} \newlabel{MinimumDistanceLeon}{{4.8.4}{47}{\textcolor {Chapter }{MinimumDistanceLeon}\relax }{subsection.4.8.4}{}} \citation{Leon88} \citation{Chen69} \citation{Zimmermann96} \@writefile{brf}{\backcite{Leon88}{{48}{4.8.4}{subsection.4.8.4}}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.8.5}\leavevmode {\color {Chapter }MinimumWeight}}{48}{subsection.4.8.5}} \newlabel{MinimumWeight}{{4.8.5}{48}{\textcolor {Chapter }{MinimumWeight}\relax }{subsection.4.8.5}{}} \@writefile{brf}{\backcite{Chen69}{{48}{4.8.5}{subsection.4.8.5}}} \@writefile{brf}{\backcite{Zimmermann96}{{48}{4.8.5}{subsection.4.8.5}}} \citation{Leon88} \@writefile{toc}{\contentsline {subsection}{\numberline {4.8.6}\leavevmode {\color {Chapter }DecreaseMinimumDistanceUpperBound}}{51}{subsection.4.8.6}} \newlabel{DecreaseMinimumDistanceUpperBound}{{4.8.6}{51}{\textcolor {Chapter }{DecreaseMinimumDistanceUpperBound}\relax }{subsection.4.8.6}{}} \@writefile{brf}{\backcite{Leon88}{{51}{4.8.6}{subsection.4.8.6}}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.8.7}\leavevmode {\color {Chapter }MinimumDistanceRandom}}{51}{subsection.4.8.7}} \newlabel{MinimumDistanceRandom}{{4.8.7}{51}{\textcolor {Chapter }{MinimumDistanceRandom}\relax }{subsection.4.8.7}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.8.8}\leavevmode {\color {Chapter }CoveringRadius}}{53}{subsection.4.8.8}} \newlabel{CoveringRadius}{{4.8.8}{53}{\textcolor {Chapter }{CoveringRadius}\relax }{subsection.4.8.8}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.8.9}\leavevmode {\color {Chapter }SetCoveringRadius}}{54}{subsection.4.8.9}} \newlabel{SetCoveringRadius}{{4.8.9}{54}{\textcolor {Chapter }{SetCoveringRadius}\relax }{subsection.4.8.9}{}} \@writefile{toc}{\contentsline {section}{\numberline {4.9}\leavevmode {\color {Chapter } Distributions }}{54}{section.4.9}} \newlabel{Distributions}{{4.9}{54}{\textcolor {Chapter }{ Distributions }\relax }{section.4.9}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.9.1}\leavevmode {\color {Chapter }MinimumWeightWords}}{54}{subsection.4.9.1}} \newlabel{MinimumWeightWords}{{4.9.1}{54}{\textcolor {Chapter }{MinimumWeightWords}\relax }{subsection.4.9.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.9.2}\leavevmode {\color {Chapter }WeightDistribution}}{54}{subsection.4.9.2}} \newlabel{WeightDistribution}{{4.9.2}{54}{\textcolor {Chapter }{WeightDistribution}\relax }{subsection.4.9.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.9.3}\leavevmode {\color {Chapter }InnerDistribution}}{55}{subsection.4.9.3}} \newlabel{InnerDistribution}{{4.9.3}{55}{\textcolor {Chapter }{InnerDistribution}\relax }{subsection.4.9.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.9.4}\leavevmode {\color {Chapter }DistancesDistribution}}{55}{subsection.4.9.4}} \newlabel{DistancesDistribution}{{4.9.4}{55}{\textcolor {Chapter }{DistancesDistribution}\relax }{subsection.4.9.4}{}} \citation{HP03} \@writefile{toc}{\contentsline {subsection}{\numberline {4.9.5}\leavevmode {\color {Chapter }OuterDistribution}}{56}{subsection.4.9.5}} \newlabel{OuterDistribution}{{4.9.5}{56}{\textcolor {Chapter }{OuterDistribution}\relax }{subsection.4.9.5}{}} \@writefile{toc}{\contentsline {section}{\numberline {4.10}\leavevmode {\color {Chapter } Decoding Functions }}{56}{section.4.10}} \newlabel{Decoding Functions}{{4.10}{56}{\textcolor {Chapter }{ Decoding Functions }\relax }{section.4.10}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.10.1}\leavevmode {\color {Chapter }Decode}}{56}{subsection.4.10.1}} \newlabel{Decode}{{4.10.1}{56}{\textcolor {Chapter }{Decode}\relax }{subsection.4.10.1}{}} \@writefile{brf}{\backcite{HP03}{{56}{4.10.1}{subsection.4.10.1}}} \citation{HP03} \citation{JH04} \@writefile{toc}{\contentsline {subsection}{\numberline {4.10.2}\leavevmode {\color {Chapter }Decodeword}}{57}{subsection.4.10.2}} \newlabel{Decodeword}{{4.10.2}{57}{\textcolor {Chapter }{Decodeword}\relax }{subsection.4.10.2}{}} \@writefile{brf}{\backcite{HP03}{{57}{4.10.2}{subsection.4.10.2}}} \@writefile{brf}{\backcite{JH04}{{57}{4.10.2}{subsection.4.10.2}}} \citation{Gao03} \citation{JH04} \@writefile{toc}{\contentsline {subsection}{\numberline {4.10.3}\leavevmode {\color {Chapter }GeneralizedReedSolomonDecoderGao}}{58}{subsection.4.10.3}} \newlabel{GeneralizedReedSolomonDecoderGao}{{4.10.3}{58}{\textcolor {Chapter }{GeneralizedReedSolomonDecoderGao}\relax }{subsection.4.10.3}{}} \@writefile{brf}{\backcite{Gao03}{{58}{4.10.3}{subsection.4.10.3}}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.10.4}\leavevmode {\color {Chapter }GeneralizedReedSolomonListDecoder}}{58}{subsection.4.10.4}} \newlabel{GeneralizedReedSolomonListDecoder}{{4.10.4}{58}{\textcolor {Chapter }{GeneralizedReedSolomonListDecoder}\relax }{subsection.4.10.4}{}} \@writefile{brf}{\backcite{JH04}{{58}{4.10.4}{subsection.4.10.4}}} \citation{JH04} \@writefile{toc}{\contentsline {subsection}{\numberline {4.10.5}\leavevmode {\color {Chapter }BitFlipDecoder}}{59}{subsection.4.10.5}} \newlabel{BitFlipDecoder}{{4.10.5}{59}{\textcolor {Chapter }{BitFlipDecoder}\relax }{subsection.4.10.5}{}} \@writefile{brf}{\backcite{JH04}{{59}{4.10.5}{subsection.4.10.5}}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.10.6}\leavevmode {\color {Chapter }NearestNeighborGRSDecodewords}}{60}{subsection.4.10.6}} \newlabel{NearestNeighborGRSDecodewords}{{4.10.6}{60}{\textcolor {Chapter }{NearestNeighborGRSDecodewords}\relax }{subsection.4.10.6}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.10.7}\leavevmode {\color {Chapter }NearestNeighborDecodewords}}{60}{subsection.4.10.7}} \newlabel{NearestNeighborDecodewords}{{4.10.7}{60}{\textcolor {Chapter }{NearestNeighborDecodewords}\relax }{subsection.4.10.7}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.10.8}\leavevmode {\color {Chapter }Syndrome}}{61}{subsection.4.10.8}} \newlabel{Syndrome}{{4.10.8}{61}{\textcolor {Chapter }{Syndrome}\relax }{subsection.4.10.8}{}} \citation{HP03} \@writefile{toc}{\contentsline {subsection}{\numberline {4.10.9}\leavevmode {\color {Chapter }SyndromeTable}}{62}{subsection.4.10.9}} \newlabel{SyndromeTable}{{4.10.9}{62}{\textcolor {Chapter }{SyndromeTable}\relax }{subsection.4.10.9}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.10.10}\leavevmode {\color {Chapter }StandardArray}}{62}{subsection.4.10.10}} \newlabel{StandardArray}{{4.10.10}{62}{\textcolor {Chapter }{StandardArray}\relax }{subsection.4.10.10}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.10.11}\leavevmode {\color {Chapter }PermutationDecode}}{62}{subsection.4.10.11}} \newlabel{PermutationDecode}{{4.10.11}{62}{\textcolor {Chapter }{PermutationDecode}\relax }{subsection.4.10.11}{}} \@writefile{brf}{\backcite{HP03}{{63}{4.10.11}{subsection.4.10.11}}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.10.12}\leavevmode {\color {Chapter }PermutationDecodeNC}}{63}{subsection.4.10.12}} \newlabel{PermutationDecodeNC}{{4.10.12}{63}{\textcolor {Chapter }{PermutationDecodeNC}\relax }{subsection.4.10.12}{}} \@writefile{toc}{\contentsline {chapter}{\numberline {5}\leavevmode {\color {Chapter }Generating Codes}}{64}{chapter.5}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \newlabel{Generating Codes}{{5}{64}{\textcolor {Chapter }{Generating Codes}\relax }{chapter.5}{}} \@writefile{toc}{\contentsline {section}{\numberline {5.1}\leavevmode {\color {Chapter } Generating Unrestricted Codes }}{64}{section.5.1}} \newlabel{Generating Unrestricted Codes}{{5.1}{64}{\textcolor {Chapter }{ Generating Unrestricted Codes }\relax }{section.5.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.1.1}\leavevmode {\color {Chapter }ElementsCode}}{64}{subsection.5.1.1}} \newlabel{ElementsCode}{{5.1.1}{64}{\textcolor {Chapter }{ElementsCode}\relax }{subsection.5.1.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.1.2}\leavevmode {\color {Chapter }HadamardCode}}{65}{subsection.5.1.2}} \newlabel{HadamardCode}{{5.1.2}{65}{\textcolor {Chapter }{HadamardCode}\relax }{subsection.5.1.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.1.3}\leavevmode {\color {Chapter }ConferenceCode}}{65}{subsection.5.1.3}} \newlabel{ConferenceCode}{{5.1.3}{65}{\textcolor {Chapter }{ConferenceCode}\relax }{subsection.5.1.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.1.4}\leavevmode {\color {Chapter }MOLSCode}}{66}{subsection.5.1.4}} \newlabel{MOLSCode}{{5.1.4}{66}{\textcolor {Chapter }{MOLSCode}\relax }{subsection.5.1.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.1.5}\leavevmode {\color {Chapter }RandomCode}}{67}{subsection.5.1.5}} \newlabel{RandomCode}{{5.1.5}{67}{\textcolor {Chapter }{RandomCode}\relax }{subsection.5.1.5}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.1.6}\leavevmode {\color {Chapter }NordstromRobinsonCode}}{67}{subsection.5.1.6}} \newlabel{NordstromRobinsonCode}{{5.1.6}{67}{\textcolor {Chapter }{NordstromRobinsonCode}\relax }{subsection.5.1.6}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.1.7}\leavevmode {\color {Chapter }GreedyCode}}{67}{subsection.5.1.7}} \newlabel{GreedyCode}{{5.1.7}{67}{\textcolor {Chapter }{GreedyCode}\relax }{subsection.5.1.7}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.1.8}\leavevmode {\color {Chapter }LexiCode}}{68}{subsection.5.1.8}} \newlabel{LexiCode}{{5.1.8}{68}{\textcolor {Chapter }{LexiCode}\relax }{subsection.5.1.8}{}} \@writefile{toc}{\contentsline {section}{\numberline {5.2}\leavevmode {\color {Chapter } Generating Linear Codes }}{68}{section.5.2}} \newlabel{Generating Linear Codes}{{5.2}{68}{\textcolor {Chapter }{ Generating Linear Codes }\relax }{section.5.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.2.1}\leavevmode {\color {Chapter }GeneratorMatCode}}{68}{subsection.5.2.1}} \newlabel{GeneratorMatCode}{{5.2.1}{68}{\textcolor {Chapter }{GeneratorMatCode}\relax }{subsection.5.2.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.2.2}\leavevmode {\color {Chapter }CheckMatCodeMutable}}{69}{subsection.5.2.2}} \newlabel{CheckMatCodeMutable}{{5.2.2}{69}{\textcolor {Chapter }{CheckMatCodeMutable}\relax }{subsection.5.2.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.2.3}\leavevmode {\color {Chapter }CheckMatCode}}{69}{subsection.5.2.3}} \newlabel{CheckMatCode}{{5.2.3}{69}{\textcolor {Chapter }{CheckMatCode}\relax }{subsection.5.2.3}{}} \citation{HP03} \@writefile{toc}{\contentsline {subsection}{\numberline {5.2.4}\leavevmode {\color {Chapter }HammingCode}}{70}{subsection.5.2.4}} \newlabel{HammingCode}{{5.2.4}{70}{\textcolor {Chapter }{HammingCode}\relax }{subsection.5.2.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.2.5}\leavevmode {\color {Chapter }ReedMullerCode}}{70}{subsection.5.2.5}} \newlabel{ReedMullerCode}{{5.2.5}{70}{\textcolor {Chapter }{ReedMullerCode}\relax }{subsection.5.2.5}{}} \@writefile{brf}{\backcite{HP03}{{70}{5.2.5}{subsection.5.2.5}}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.2.6}\leavevmode {\color {Chapter }AlternantCode}}{70}{subsection.5.2.6}} \newlabel{AlternantCode}{{5.2.6}{70}{\textcolor {Chapter }{AlternantCode}\relax }{subsection.5.2.6}{}} \citation{HP03} \citation{MS83} \@writefile{toc}{\contentsline {subsection}{\numberline {5.2.7}\leavevmode {\color {Chapter }GoppaCode}}{71}{subsection.5.2.7}} \newlabel{GoppaCode}{{5.2.7}{71}{\textcolor {Chapter }{GoppaCode}\relax }{subsection.5.2.7}{}} \@writefile{brf}{\backcite{HP03}{{71}{5.2.7}{subsection.5.2.7}}} \@writefile{brf}{\backcite{MS83}{{71}{5.2.7}{subsection.5.2.7}}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.2.8}\leavevmode {\color {Chapter }GeneralizedSrivastavaCode}}{71}{subsection.5.2.8}} \newlabel{GeneralizedSrivastavaCode}{{5.2.8}{71}{\textcolor {Chapter }{GeneralizedSrivastavaCode}\relax }{subsection.5.2.8}{}} \citation{He72} \@writefile{toc}{\contentsline {subsection}{\numberline {5.2.9}\leavevmode {\color {Chapter }SrivastavaCode}}{72}{subsection.5.2.9}} \newlabel{SrivastavaCode}{{5.2.9}{72}{\textcolor {Chapter }{SrivastavaCode}\relax }{subsection.5.2.9}{}} \@writefile{brf}{\backcite{He72}{{72}{5.2.9}{subsection.5.2.9}}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.2.10}\leavevmode {\color {Chapter }CordaroWagnerCode}}{72}{subsection.5.2.10}} \newlabel{CordaroWagnerCode}{{5.2.10}{72}{\textcolor {Chapter }{CordaroWagnerCode}\relax }{subsection.5.2.10}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.2.11}\leavevmode {\color {Chapter }FerreroDesignCode}}{72}{subsection.5.2.11}} \newlabel{FerreroDesignCode}{{5.2.11}{72}{\textcolor {Chapter }{FerreroDesignCode}\relax }{subsection.5.2.11}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.2.12}\leavevmode {\color {Chapter }RandomLinearCode}}{73}{subsection.5.2.12}} \newlabel{RandomLinearCode}{{5.2.12}{73}{\textcolor {Chapter }{RandomLinearCode}\relax }{subsection.5.2.12}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.2.13}\leavevmode {\color {Chapter }OptimalityCode}}{74}{subsection.5.2.13}} \newlabel{OptimalityCode}{{5.2.13}{74}{\textcolor {Chapter }{OptimalityCode}\relax }{subsection.5.2.13}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.2.14}\leavevmode {\color {Chapter }BestKnownLinearCode}}{74}{subsection.5.2.14}} \newlabel{BestKnownLinearCode}{{5.2.14}{74}{\textcolor {Chapter }{BestKnownLinearCode}\relax }{subsection.5.2.14}{}} \citation{GDT91} \@writefile{toc}{\contentsline {section}{\numberline {5.3}\leavevmode {\color {Chapter } Gabidulin Codes }}{76}{section.5.3}} \newlabel{Gabidulin Codes}{{5.3}{76}{\textcolor {Chapter }{ Gabidulin Codes }\relax }{section.5.3}{}} \@writefile{brf}{\backcite{GDT91}{{76}{5.3}{section.5.3}}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.3.1}\leavevmode {\color {Chapter }GabidulinCode}}{76}{subsection.5.3.1}} \newlabel{GabidulinCode}{{5.3.1}{76}{\textcolor {Chapter }{GabidulinCode}\relax }{subsection.5.3.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.3.2}\leavevmode {\color {Chapter }EnlargedGabidulinCode}}{76}{subsection.5.3.2}} \newlabel{EnlargedGabidulinCode}{{5.3.2}{76}{\textcolor {Chapter }{EnlargedGabidulinCode}\relax }{subsection.5.3.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.3.3}\leavevmode {\color {Chapter }DavydovCode}}{76}{subsection.5.3.3}} \newlabel{DavydovCode}{{5.3.3}{76}{\textcolor {Chapter }{DavydovCode}\relax }{subsection.5.3.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.3.4}\leavevmode {\color {Chapter }TombakCode}}{76}{subsection.5.3.4}} \newlabel{TombakCode}{{5.3.4}{76}{\textcolor {Chapter }{TombakCode}\relax }{subsection.5.3.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.3.5}\leavevmode {\color {Chapter }EnlargedTombakCode}}{76}{subsection.5.3.5}} \newlabel{EnlargedTombakCode}{{5.3.5}{76}{\textcolor {Chapter }{EnlargedTombakCode}\relax }{subsection.5.3.5}{}} \citation{MS83} \@writefile{toc}{\contentsline {section}{\numberline {5.4}\leavevmode {\color {Chapter } Golay Codes }}{77}{section.5.4}} \newlabel{Golay Codes}{{5.4}{77}{\textcolor {Chapter }{ Golay Codes }\relax }{section.5.4}{}} \@writefile{brf}{\backcite{MS83}{{77}{5.4}{section.5.4}}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.4.1}\leavevmode {\color {Chapter }BinaryGolayCode}}{77}{subsection.5.4.1}} \newlabel{BinaryGolayCode}{{5.4.1}{77}{\textcolor {Chapter }{BinaryGolayCode}\relax }{subsection.5.4.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.4.2}\leavevmode {\color {Chapter }ExtendedBinaryGolayCode}}{77}{subsection.5.4.2}} \newlabel{ExtendedBinaryGolayCode}{{5.4.2}{77}{\textcolor {Chapter }{ExtendedBinaryGolayCode}\relax }{subsection.5.4.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.4.3}\leavevmode {\color {Chapter }TernaryGolayCode}}{78}{subsection.5.4.3}} \newlabel{TernaryGolayCode}{{5.4.3}{78}{\textcolor {Chapter }{TernaryGolayCode}\relax }{subsection.5.4.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.4.4}\leavevmode {\color {Chapter }ExtendedTernaryGolayCode}}{78}{subsection.5.4.4}} \newlabel{ExtendedTernaryGolayCode}{{5.4.4}{78}{\textcolor {Chapter }{ExtendedTernaryGolayCode}\relax }{subsection.5.4.4}{}} \@writefile{toc}{\contentsline {section}{\numberline {5.5}\leavevmode {\color {Chapter } Generating Cyclic Codes }}{78}{section.5.5}} \newlabel{Generating Cyclic Codes}{{5.5}{78}{\textcolor {Chapter }{ Generating Cyclic Codes }\relax }{section.5.5}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.5.1}\leavevmode {\color {Chapter }GeneratorPolCode}}{79}{subsection.5.5.1}} \newlabel{GeneratorPolCode}{{5.5.1}{79}{\textcolor {Chapter }{GeneratorPolCode}\relax }{subsection.5.5.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.5.2}\leavevmode {\color {Chapter }CheckPolCode}}{80}{subsection.5.5.2}} \newlabel{CheckPolCode}{{5.5.2}{80}{\textcolor {Chapter }{CheckPolCode}\relax }{subsection.5.5.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.5.3}\leavevmode {\color {Chapter }RootsCode}}{80}{subsection.5.5.3}} \newlabel{RootsCode}{{5.5.3}{80}{\textcolor {Chapter }{RootsCode}\relax }{subsection.5.5.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.5.4}\leavevmode {\color {Chapter }BCHCode}}{81}{subsection.5.5.4}} \newlabel{BCHCode}{{5.5.4}{81}{\textcolor {Chapter }{BCHCode}\relax }{subsection.5.5.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.5.5}\leavevmode {\color {Chapter }ReedSolomonCode}}{82}{subsection.5.5.5}} \newlabel{ReedSolomonCode}{{5.5.5}{82}{\textcolor {Chapter }{ReedSolomonCode}\relax }{subsection.5.5.5}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.5.6}\leavevmode {\color {Chapter }ExtendedReedSolomonCode}}{82}{subsection.5.5.6}} \newlabel{ExtendedReedSolomonCode}{{5.5.6}{82}{\textcolor {Chapter }{ExtendedReedSolomonCode}\relax }{subsection.5.5.6}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.5.7}\leavevmode {\color {Chapter }QRCode}}{82}{subsection.5.5.7}} \newlabel{QRCode}{{5.5.7}{82}{\textcolor {Chapter }{QRCode}\relax }{subsection.5.5.7}{}} \citation{BM03} \@writefile{toc}{\contentsline {subsection}{\numberline {5.5.8}\leavevmode {\color {Chapter }QQRCodeNC}}{83}{subsection.5.5.8}} \newlabel{QQRCodeNC}{{5.5.8}{83}{\textcolor {Chapter }{QQRCodeNC}\relax }{subsection.5.5.8}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.5.9}\leavevmode {\color {Chapter }QQRCode}}{83}{subsection.5.5.9}} \newlabel{QQRCode}{{5.5.9}{83}{\textcolor {Chapter }{QQRCode}\relax }{subsection.5.5.9}{}} \@writefile{brf}{\backcite{BM03}{{83}{5.5.9}{subsection.5.5.9}}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.5.10}\leavevmode {\color {Chapter }FireCode}}{84}{subsection.5.5.10}} \newlabel{FireCode}{{5.5.10}{84}{\textcolor {Chapter }{FireCode}\relax }{subsection.5.5.10}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.5.11}\leavevmode {\color {Chapter }WholeSpaceCode}}{84}{subsection.5.5.11}} \newlabel{WholeSpaceCode}{{5.5.11}{84}{\textcolor {Chapter }{WholeSpaceCode}\relax }{subsection.5.5.11}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.5.12}\leavevmode {\color {Chapter }NullCode}}{85}{subsection.5.5.12}} \newlabel{NullCode}{{5.5.12}{85}{\textcolor {Chapter }{NullCode}\relax }{subsection.5.5.12}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.5.13}\leavevmode {\color {Chapter }RepetitionCode}}{85}{subsection.5.5.13}} \newlabel{RepetitionCode}{{5.5.13}{85}{\textcolor {Chapter }{RepetitionCode}\relax }{subsection.5.5.13}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.5.14}\leavevmode {\color {Chapter }CyclicCodes}}{85}{subsection.5.5.14}} \newlabel{CyclicCodes}{{5.5.14}{85}{\textcolor {Chapter }{CyclicCodes}\relax }{subsection.5.5.14}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.5.15}\leavevmode {\color {Chapter }NrCyclicCodes}}{85}{subsection.5.5.15}} \newlabel{NrCyclicCodes}{{5.5.15}{85}{\textcolor {Chapter }{NrCyclicCodes}\relax }{subsection.5.5.15}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.5.16}\leavevmode {\color {Chapter }QuasiCyclicCode}}{86}{subsection.5.5.16}} \newlabel{QuasiCyclicCode}{{5.5.16}{86}{\textcolor {Chapter }{QuasiCyclicCode}\relax }{subsection.5.5.16}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.5.17}\leavevmode {\color {Chapter }CyclicMDSCode}}{87}{subsection.5.5.17}} \newlabel{CyclicMDSCode}{{5.5.17}{87}{\textcolor {Chapter }{CyclicMDSCode}\relax }{subsection.5.5.17}{}} \citation{HHKK07} \@writefile{toc}{\contentsline {subsection}{\numberline {5.5.18}\leavevmode {\color {Chapter }FourNegacirculantSelfDualCode}}{88}{subsection.5.5.18}} \newlabel{FourNegacirculantSelfDualCode}{{5.5.18}{88}{\textcolor {Chapter }{FourNegacirculantSelfDualCode}\relax }{subsection.5.5.18}{}} \@writefile{brf}{\backcite{HHKK07}{{88}{5.5.18}{subsection.5.5.18}}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.5.19}\leavevmode {\color {Chapter }FourNegacirculantSelfDualCodeNC}}{89}{subsection.5.5.19}} \newlabel{FourNegacirculantSelfDualCodeNC}{{5.5.19}{89}{\textcolor {Chapter }{FourNegacirculantSelfDualCodeNC}\relax }{subsection.5.5.19}{}} \@writefile{toc}{\contentsline {section}{\numberline {5.6}\leavevmode {\color {Chapter } Evaluation Codes }}{89}{section.5.6}} \newlabel{Evaluation Codes}{{5.6}{89}{\textcolor {Chapter }{ Evaluation Codes }\relax }{section.5.6}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.6.1}\leavevmode {\color {Chapter }EvaluationCode}}{89}{subsection.5.6.1}} \newlabel{EvaluationCode}{{5.6.1}{89}{\textcolor {Chapter }{EvaluationCode}\relax }{subsection.5.6.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.6.2}\leavevmode {\color {Chapter }GeneralizedReedSolomonCode}}{89}{subsection.5.6.2}} \newlabel{GeneralizedReedSolomonCode}{{5.6.2}{89}{\textcolor {Chapter }{GeneralizedReedSolomonCode}\relax }{subsection.5.6.2}{}} \citation{JH04} \citation{MS83} \citation{JH04} \@writefile{brf}{\backcite{JH04}{{90}{5.6.2}{subsection.5.6.2}}} \@writefile{brf}{\backcite{MS83}{{90}{5.6.2}{subsection.5.6.2}}} \@writefile{brf}{\backcite{JH04}{{90}{5.6.2}{subsection.5.6.2}}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.6.3}\leavevmode {\color {Chapter }GeneralizedReedMullerCode}}{90}{subsection.5.6.3}} \newlabel{GeneralizedReedMullerCode}{{5.6.3}{90}{\textcolor {Chapter }{GeneralizedReedMullerCode}\relax }{subsection.5.6.3}{}} \citation{Jo04} \citation{Han99} \@writefile{toc}{\contentsline {subsection}{\numberline {5.6.4}\leavevmode {\color {Chapter }ToricPoints}}{91}{subsection.5.6.4}} \newlabel{ToricPoints}{{5.6.4}{91}{\textcolor {Chapter }{ToricPoints}\relax }{subsection.5.6.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.6.5}\leavevmode {\color {Chapter }ToricCode}}{91}{subsection.5.6.5}} \newlabel{ToricCode}{{5.6.5}{91}{\textcolor {Chapter }{ToricCode}\relax }{subsection.5.6.5}{}} \@writefile{brf}{\backcite{Jo04}{{91}{5.6.5}{subsection.5.6.5}}} \@writefile{brf}{\backcite{Han99}{{91}{5.6.5}{subsection.5.6.5}}} \@writefile{toc}{\contentsline {section}{\numberline {5.7}\leavevmode {\color {Chapter } Algebraic geometric codes }}{92}{section.5.7}} \newlabel{Algebraic geometric codes}{{5.7}{92}{\textcolor {Chapter }{ Algebraic geometric codes }\relax }{section.5.7}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.1}\leavevmode {\color {Chapter }AffineCurve}}{92}{subsection.5.7.1}} \newlabel{AffineCurve}{{5.7.1}{92}{\textcolor {Chapter }{AffineCurve}\relax }{subsection.5.7.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.2}\leavevmode {\color {Chapter }AffinePointsOnCurve}}{93}{subsection.5.7.2}} \newlabel{AffinePointsOnCurve}{{5.7.2}{93}{\textcolor {Chapter }{AffinePointsOnCurve}\relax }{subsection.5.7.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.3}\leavevmode {\color {Chapter }GenusCurve}}{93}{subsection.5.7.3}} \newlabel{GenusCurve}{{5.7.3}{93}{\textcolor {Chapter }{GenusCurve}\relax }{subsection.5.7.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.4}\leavevmode {\color {Chapter }GOrbitPoint }}{93}{subsection.5.7.4}} \newlabel{GOrbitPoint }{{5.7.4}{93}{\textcolor {Chapter }{GOrbitPoint }\relax }{subsection.5.7.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.5}\leavevmode {\color {Chapter }DivisorOnAffineCurve}}{95}{subsection.5.7.5}} \newlabel{DivisorOnAffineCurve}{{5.7.5}{95}{\textcolor {Chapter }{DivisorOnAffineCurve}\relax }{subsection.5.7.5}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.6}\leavevmode {\color {Chapter }DivisorAddition }}{95}{subsection.5.7.6}} \newlabel{DivisorAddition }{{5.7.6}{95}{\textcolor {Chapter }{DivisorAddition }\relax }{subsection.5.7.6}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.7}\leavevmode {\color {Chapter }DivisorDegree }}{95}{subsection.5.7.7}} \newlabel{DivisorDegree }{{5.7.7}{95}{\textcolor {Chapter }{DivisorDegree }\relax }{subsection.5.7.7}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.8}\leavevmode {\color {Chapter }DivisorNegate }}{96}{subsection.5.7.8}} \newlabel{DivisorNegate }{{5.7.8}{96}{\textcolor {Chapter }{DivisorNegate }\relax }{subsection.5.7.8}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.9}\leavevmode {\color {Chapter }DivisorIsZero }}{96}{subsection.5.7.9}} \newlabel{DivisorIsZero }{{5.7.9}{96}{\textcolor {Chapter }{DivisorIsZero }\relax }{subsection.5.7.9}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.10}\leavevmode {\color {Chapter }DivisorsEqual }}{96}{subsection.5.7.10}} \newlabel{DivisorsEqual }{{5.7.10}{96}{\textcolor {Chapter }{DivisorsEqual }\relax }{subsection.5.7.10}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.11}\leavevmode {\color {Chapter }DivisorGCD }}{96}{subsection.5.7.11}} \newlabel{DivisorGCD }{{5.7.11}{96}{\textcolor {Chapter }{DivisorGCD }\relax }{subsection.5.7.11}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.12}\leavevmode {\color {Chapter }DivisorLCM }}{96}{subsection.5.7.12}} \newlabel{DivisorLCM }{{5.7.12}{96}{\textcolor {Chapter }{DivisorLCM }\relax }{subsection.5.7.12}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.13}\leavevmode {\color {Chapter }RiemannRochSpaceBasisFunctionP1 }}{98}{subsection.5.7.13}} \newlabel{RiemannRochSpaceBasisFunctionP1 }{{5.7.13}{98}{\textcolor {Chapter }{RiemannRochSpaceBasisFunctionP1 }\relax }{subsection.5.7.13}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.14}\leavevmode {\color {Chapter }DivisorOfRationalFunctionP1 }}{98}{subsection.5.7.14}} \newlabel{DivisorOfRationalFunctionP1 }{{5.7.14}{98}{\textcolor {Chapter }{DivisorOfRationalFunctionP1 }\relax }{subsection.5.7.14}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.15}\leavevmode {\color {Chapter }RiemannRochSpaceBasisP1 }}{99}{subsection.5.7.15}} \newlabel{RiemannRochSpaceBasisP1 }{{5.7.15}{99}{\textcolor {Chapter }{RiemannRochSpaceBasisP1 }\relax }{subsection.5.7.15}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.16}\leavevmode {\color {Chapter }MoebiusTransformation }}{100}{subsection.5.7.16}} \newlabel{MoebiusTransformation }{{5.7.16}{100}{\textcolor {Chapter }{MoebiusTransformation }\relax }{subsection.5.7.16}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.17}\leavevmode {\color {Chapter }ActionMoebiusTransformationOnFunction }}{100}{subsection.5.7.17}} \newlabel{ActionMoebiusTransformationOnFunction }{{5.7.17}{100}{\textcolor {Chapter }{ActionMoebiusTransformationOnFunction }\relax }{subsection.5.7.17}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.18}\leavevmode {\color {Chapter }ActionMoebiusTransformationOnDivisorP1 }}{100}{subsection.5.7.18}} \newlabel{ActionMoebiusTransformationOnDivisorP1 }{{5.7.18}{100}{\textcolor {Chapter }{ActionMoebiusTransformationOnDivisorP1 }\relax }{subsection.5.7.18}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.19}\leavevmode {\color {Chapter }IsActionMoebiusTransformationOnDivisorDefinedP1 }}{100}{subsection.5.7.19}} \newlabel{IsActionMoebiusTransformationOnDivisorDefinedP1 }{{5.7.19}{100}{\textcolor {Chapter }{IsActionMoebiusTransformationOnDivisorDefinedP1 }\relax }{subsection.5.7.19}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.20}\leavevmode {\color {Chapter }DivisorAutomorphismGroupP1 }}{101}{subsection.5.7.20}} \newlabel{DivisorAutomorphismGroupP1 }{{5.7.20}{101}{\textcolor {Chapter }{DivisorAutomorphismGroupP1 }\relax }{subsection.5.7.20}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.21}\leavevmode {\color {Chapter }MatrixRepresentationOnRiemannRochSpaceP1 }}{102}{subsection.5.7.21}} \newlabel{MatrixRepresentationOnRiemannRochSpaceP1 }{{5.7.21}{102}{\textcolor {Chapter }{MatrixRepresentationOnRiemannRochSpaceP1 }\relax }{subsection.5.7.21}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.22}\leavevmode {\color {Chapter }GoppaCodeClassical}}{103}{subsection.5.7.22}} \newlabel{GoppaCodeClassical}{{5.7.22}{103}{\textcolor {Chapter }{GoppaCodeClassical}\relax }{subsection.5.7.22}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.23}\leavevmode {\color {Chapter }EvaluationBivariateCode}}{103}{subsection.5.7.23}} \newlabel{EvaluationBivariateCode}{{5.7.23}{103}{\textcolor {Chapter }{EvaluationBivariateCode}\relax }{subsection.5.7.23}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.24}\leavevmode {\color {Chapter }EvaluationBivariateCodeNC}}{103}{subsection.5.7.24}} \newlabel{EvaluationBivariateCodeNC}{{5.7.24}{103}{\textcolor {Chapter }{EvaluationBivariateCodeNC}\relax }{subsection.5.7.24}{}} \citation{St93} \@writefile{toc}{\contentsline {subsection}{\numberline {5.7.25}\leavevmode {\color {Chapter }OnePointAGCode}}{104}{subsection.5.7.25}} \newlabel{OnePointAGCode}{{5.7.25}{104}{\textcolor {Chapter }{OnePointAGCode}\relax }{subsection.5.7.25}{}} \@writefile{brf}{\backcite{St93}{{104}{5.7.25}{subsection.5.7.25}}} \citation{Gallager.1962} \@writefile{toc}{\contentsline {section}{\numberline {5.8}\leavevmode {\color {Chapter } Low-Density Parity-Check Codes }}{105}{section.5.8}} \newlabel{LDPC}{{5.8}{105}{\textcolor {Chapter }{ Low-Density Parity-Check Codes }\relax }{section.5.8}{}} \@writefile{brf}{\backcite{Gallager.1962}{{105}{5.8}{section.5.8}}} \citation{TSSFC04} \@writefile{toc}{\contentsline {subsection}{\numberline {5.8.1}\leavevmode {\color {Chapter }QCLDPCCodeFromGroup}}{106}{subsection.5.8.1}} \newlabel{QCLDPCCodeFromGroup}{{5.8.1}{106}{\textcolor {Chapter }{QCLDPCCodeFromGroup}\relax }{subsection.5.8.1}{}} \@writefile{brf}{\backcite{TSSFC04}{{106}{5.8.1}{subsection.5.8.1}}} \@writefile{toc}{\contentsline {chapter}{\numberline {6}\leavevmode {\color {Chapter }Manipulating Codes}}{108}{chapter.6}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \newlabel{Manipulating Codes}{{6}{108}{\textcolor {Chapter }{Manipulating Codes}\relax }{chapter.6}{}} \@writefile{toc}{\contentsline {section}{\numberline {6.1}\leavevmode {\color {Chapter } Functions that Generate a New Code from a Given Code }}{108}{section.6.1}} \newlabel{Functions that Generate a New Code from a Given Code}{{6.1}{108}{\textcolor {Chapter }{ Functions that Generate a New Code from a Given Code }\relax }{section.6.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.1.1}\leavevmode {\color {Chapter }ExtendedCode}}{108}{subsection.6.1.1}} \newlabel{ExtendedCode}{{6.1.1}{108}{\textcolor {Chapter }{ExtendedCode}\relax }{subsection.6.1.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.1.2}\leavevmode {\color {Chapter }PuncturedCode}}{109}{subsection.6.1.2}} \newlabel{PuncturedCode}{{6.1.2}{109}{\textcolor {Chapter }{PuncturedCode}\relax }{subsection.6.1.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.1.3}\leavevmode {\color {Chapter }EvenWeightSubcode}}{109}{subsection.6.1.3}} \newlabel{EvenWeightSubcode}{{6.1.3}{109}{\textcolor {Chapter }{EvenWeightSubcode}\relax }{subsection.6.1.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.1.4}\leavevmode {\color {Chapter }PermutedCode}}{110}{subsection.6.1.4}} \newlabel{PermutedCode}{{6.1.4}{110}{\textcolor {Chapter }{PermutedCode}\relax }{subsection.6.1.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.1.5}\leavevmode {\color {Chapter }ExpurgatedCode}}{110}{subsection.6.1.5}} \newlabel{ExpurgatedCode}{{6.1.5}{110}{\textcolor {Chapter }{ExpurgatedCode}\relax }{subsection.6.1.5}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.1.6}\leavevmode {\color {Chapter }AugmentedCode}}{111}{subsection.6.1.6}} \newlabel{AugmentedCode}{{6.1.6}{111}{\textcolor {Chapter }{AugmentedCode}\relax }{subsection.6.1.6}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.1.7}\leavevmode {\color {Chapter }RemovedElementsCode}}{111}{subsection.6.1.7}} \newlabel{RemovedElementsCode}{{6.1.7}{111}{\textcolor {Chapter }{RemovedElementsCode}\relax }{subsection.6.1.7}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.1.8}\leavevmode {\color {Chapter }AddedElementsCode}}{112}{subsection.6.1.8}} \newlabel{AddedElementsCode}{{6.1.8}{112}{\textcolor {Chapter }{AddedElementsCode}\relax }{subsection.6.1.8}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.1.9}\leavevmode {\color {Chapter }ShortenedCode}}{112}{subsection.6.1.9}} \newlabel{ShortenedCode}{{6.1.9}{112}{\textcolor {Chapter }{ShortenedCode}\relax }{subsection.6.1.9}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.1.10}\leavevmode {\color {Chapter }LengthenedCode}}{113}{subsection.6.1.10}} \newlabel{LengthenedCode}{{6.1.10}{113}{\textcolor {Chapter }{LengthenedCode}\relax }{subsection.6.1.10}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.1.11}\leavevmode {\color {Chapter }SubCode}}{114}{subsection.6.1.11}} \newlabel{SubCode}{{6.1.11}{114}{\textcolor {Chapter }{SubCode}\relax }{subsection.6.1.11}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.1.12}\leavevmode {\color {Chapter }ResidueCode}}{114}{subsection.6.1.12}} \newlabel{ResidueCode}{{6.1.12}{114}{\textcolor {Chapter }{ResidueCode}\relax }{subsection.6.1.12}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.1.13}\leavevmode {\color {Chapter }ConstructionBCode}}{114}{subsection.6.1.13}} \newlabel{ConstructionBCode}{{6.1.13}{114}{\textcolor {Chapter }{ConstructionBCode}\relax }{subsection.6.1.13}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.1.14}\leavevmode {\color {Chapter }DualCode}}{115}{subsection.6.1.14}} \newlabel{DualCode}{{6.1.14}{115}{\textcolor {Chapter }{DualCode}\relax }{subsection.6.1.14}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.1.15}\leavevmode {\color {Chapter }ConversionFieldCode}}{116}{subsection.6.1.15}} \newlabel{ConversionFieldCode}{{6.1.15}{116}{\textcolor {Chapter }{ConversionFieldCode}\relax }{subsection.6.1.15}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.1.16}\leavevmode {\color {Chapter }TraceCode}}{116}{subsection.6.1.16}} \newlabel{TraceCode}{{6.1.16}{116}{\textcolor {Chapter }{TraceCode}\relax }{subsection.6.1.16}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.1.17}\leavevmode {\color {Chapter }CosetCode}}{116}{subsection.6.1.17}} \newlabel{CosetCode}{{6.1.17}{116}{\textcolor {Chapter }{CosetCode}\relax }{subsection.6.1.17}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.1.18}\leavevmode {\color {Chapter }ConstantWeightSubcode}}{117}{subsection.6.1.18}} \newlabel{ConstantWeightSubcode}{{6.1.18}{117}{\textcolor {Chapter }{ConstantWeightSubcode}\relax }{subsection.6.1.18}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.1.19}\leavevmode {\color {Chapter }StandardFormCode}}{117}{subsection.6.1.19}} \newlabel{StandardFormCode}{{6.1.19}{117}{\textcolor {Chapter }{StandardFormCode}\relax }{subsection.6.1.19}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.1.20}\leavevmode {\color {Chapter }PiecewiseConstantCode}}{118}{subsection.6.1.20}} \newlabel{PiecewiseConstantCode}{{6.1.20}{118}{\textcolor {Chapter }{PiecewiseConstantCode}\relax }{subsection.6.1.20}{}} \@writefile{toc}{\contentsline {section}{\numberline {6.2}\leavevmode {\color {Chapter } Functions that Generate a New Code from Two or More Given Codes }}{119}{section.6.2}} \newlabel{Functions that Generate a New Code from Two or More Given Codes}{{6.2}{119}{\textcolor {Chapter }{ Functions that Generate a New Code from Two or More Given Codes }\relax }{section.6.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.2.1}\leavevmode {\color {Chapter }DirectSumCode}}{119}{subsection.6.2.1}} \newlabel{DirectSumCode}{{6.2.1}{119}{\textcolor {Chapter }{DirectSumCode}\relax }{subsection.6.2.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.2.2}\leavevmode {\color {Chapter }UUVCode}}{119}{subsection.6.2.2}} \newlabel{UUVCode}{{6.2.2}{119}{\textcolor {Chapter }{UUVCode}\relax }{subsection.6.2.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.2.3}\leavevmode {\color {Chapter }DirectProductCode}}{119}{subsection.6.2.3}} \newlabel{DirectProductCode}{{6.2.3}{119}{\textcolor {Chapter }{DirectProductCode}\relax }{subsection.6.2.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.2.4}\leavevmode {\color {Chapter }IntersectionCode}}{120}{subsection.6.2.4}} \newlabel{IntersectionCode}{{6.2.4}{120}{\textcolor {Chapter }{IntersectionCode}\relax }{subsection.6.2.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.2.5}\leavevmode {\color {Chapter }UnionCode}}{120}{subsection.6.2.5}} \newlabel{UnionCode}{{6.2.5}{120}{\textcolor {Chapter }{UnionCode}\relax }{subsection.6.2.5}{}} \citation{GS85} \@writefile{toc}{\contentsline {subsection}{\numberline {6.2.6}\leavevmode {\color {Chapter }ExtendedDirectSumCode}}{121}{subsection.6.2.6}} \newlabel{ExtendedDirectSumCode}{{6.2.6}{121}{\textcolor {Chapter }{ExtendedDirectSumCode}\relax }{subsection.6.2.6}{}} \@writefile{brf}{\backcite{GS85}{{121}{6.2.6}{subsection.6.2.6}}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.2.7}\leavevmode {\color {Chapter }AmalgamatedDirectSumCode}}{121}{subsection.6.2.7}} \newlabel{AmalgamatedDirectSumCode}{{6.2.7}{121}{\textcolor {Chapter }{AmalgamatedDirectSumCode}\relax }{subsection.6.2.7}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.2.8}\leavevmode {\color {Chapter }BlockwiseDirectSumCode}}{122}{subsection.6.2.8}} \newlabel{BlockwiseDirectSumCode}{{6.2.8}{122}{\textcolor {Chapter }{BlockwiseDirectSumCode}\relax }{subsection.6.2.8}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.2.9}\leavevmode {\color {Chapter }ConstructionXCode}}{122}{subsection.6.2.9}} \newlabel{ConstructionXCode}{{6.2.9}{122}{\textcolor {Chapter }{ConstructionXCode}\relax }{subsection.6.2.9}{}} \citation{Sloane72} \@writefile{brf}{\backcite{Sloane72}{{123}{6.2.9}{subsection.6.2.9}}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.2.10}\leavevmode {\color {Chapter }ConstructionXXCode}}{123}{subsection.6.2.10}} \newlabel{ConstructionXXCode}{{6.2.10}{123}{\textcolor {Chapter }{ConstructionXXCode}\relax }{subsection.6.2.10}{}} \citation{Alltop84} \citation{Brouwer98} \@writefile{brf}{\backcite{Alltop84}{{124}{6.2.10}{subsection.6.2.10}}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.2.11}\leavevmode {\color {Chapter }BZCode}}{124}{subsection.6.2.11}} \newlabel{BZCode}{{6.2.11}{124}{\textcolor {Chapter }{BZCode}\relax }{subsection.6.2.11}{}} \@writefile{brf}{\backcite{Brouwer98}{{124}{6.2.11}{subsection.6.2.11}}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.2.12}\leavevmode {\color {Chapter }BZCodeNC}}{125}{subsection.6.2.12}} \newlabel{BZCodeNC}{{6.2.12}{125}{\textcolor {Chapter }{BZCodeNC}\relax }{subsection.6.2.12}{}} \citation{Br} \@writefile{toc}{\contentsline {chapter}{\numberline {7}\leavevmode {\color {Chapter } Bounds on codes, special matrices and miscellaneous functions }}{126}{chapter.7}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \@writefile{toc}{\contentsline {section}{\numberline {7.1}\leavevmode {\color {Chapter } Distance bounds on codes }}{126}{section.7.1}} \newlabel{Distance bounds on codes}{{7.1}{126}{\textcolor {Chapter }{ Distance bounds on codes }\relax }{section.7.1}{}} \@writefile{brf}{\backcite{Br}{{126}{7.1}{section.7.1}}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.1.1}\leavevmode {\color {Chapter }UpperBoundSingleton}}{127}{subsection.7.1.1}} \newlabel{UpperBoundSingleton}{{7.1.1}{127}{\textcolor {Chapter }{UpperBoundSingleton}\relax }{subsection.7.1.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.1.2}\leavevmode {\color {Chapter }UpperBoundHamming}}{127}{subsection.7.1.2}} \newlabel{UpperBoundHamming}{{7.1.2}{127}{\textcolor {Chapter }{UpperBoundHamming}\relax }{subsection.7.1.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.1.3}\leavevmode {\color {Chapter }UpperBoundJohnson}}{127}{subsection.7.1.3}} \newlabel{UpperBoundJohnson}{{7.1.3}{127}{\textcolor {Chapter }{UpperBoundJohnson}\relax }{subsection.7.1.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.1.4}\leavevmode {\color {Chapter }UpperBoundPlotkin}}{128}{subsection.7.1.4}} \newlabel{UpperBoundPlotkin}{{7.1.4}{128}{\textcolor {Chapter }{UpperBoundPlotkin}\relax }{subsection.7.1.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.1.5}\leavevmode {\color {Chapter }UpperBoundElias}}{128}{subsection.7.1.5}} \newlabel{UpperBoundElias}{{7.1.5}{128}{\textcolor {Chapter }{UpperBoundElias}\relax }{subsection.7.1.5}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.1.6}\leavevmode {\color {Chapter }UpperBoundGriesmer}}{129}{subsection.7.1.6}} \newlabel{UpperBoundGriesmer}{{7.1.6}{129}{\textcolor {Chapter }{UpperBoundGriesmer}\relax }{subsection.7.1.6}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.1.7}\leavevmode {\color {Chapter }IsGriesmerCode}}{129}{subsection.7.1.7}} \newlabel{IsGriesmerCode}{{7.1.7}{129}{\textcolor {Chapter }{IsGriesmerCode}\relax }{subsection.7.1.7}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.1.8}\leavevmode {\color {Chapter }UpperBound}}{129}{subsection.7.1.8}} \newlabel{UpperBound}{{7.1.8}{129}{\textcolor {Chapter }{UpperBound}\relax }{subsection.7.1.8}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.1.9}\leavevmode {\color {Chapter }LowerBoundMinimumDistance}}{130}{subsection.7.1.9}} \newlabel{LowerBoundMinimumDistance}{{7.1.9}{130}{\textcolor {Chapter }{LowerBoundMinimumDistance}\relax }{subsection.7.1.9}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.1.10}\leavevmode {\color {Chapter }LowerBoundGilbertVarshamov}}{130}{subsection.7.1.10}} \newlabel{LowerBoundGilbertVarshamov}{{7.1.10}{130}{\textcolor {Chapter }{LowerBoundGilbertVarshamov}\relax }{subsection.7.1.10}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.1.11}\leavevmode {\color {Chapter }LowerBoundSpherePacking}}{130}{subsection.7.1.11}} \newlabel{LowerBoundSpherePacking}{{7.1.11}{130}{\textcolor {Chapter }{LowerBoundSpherePacking}\relax }{subsection.7.1.11}{}} \citation{Br} \@writefile{toc}{\contentsline {subsection}{\numberline {7.1.12}\leavevmode {\color {Chapter }UpperBoundMinimumDistance}}{131}{subsection.7.1.12}} \newlabel{UpperBoundMinimumDistance}{{7.1.12}{131}{\textcolor {Chapter }{UpperBoundMinimumDistance}\relax }{subsection.7.1.12}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.1.13}\leavevmode {\color {Chapter }BoundsMinimumDistance}}{131}{subsection.7.1.13}} \newlabel{BoundsMinimumDistance}{{7.1.13}{131}{\textcolor {Chapter }{BoundsMinimumDistance}\relax }{subsection.7.1.13}{}} \@writefile{brf}{\backcite{Br}{{131}{7.1.13}{subsection.7.1.13}}} \@writefile{toc}{\contentsline {section}{\numberline {7.2}\leavevmode {\color {Chapter } Covering radius bounds on codes }}{132}{section.7.2}} \newlabel{Covering radius bounds on codes}{{7.2}{132}{\textcolor {Chapter }{ Covering radius bounds on codes }\relax }{section.7.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.2.1}\leavevmode {\color {Chapter }BoundsCoveringRadius}}{132}{subsection.7.2.1}} \newlabel{BoundsCoveringRadius}{{7.2.1}{132}{\textcolor {Chapter }{BoundsCoveringRadius}\relax }{subsection.7.2.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.2.2}\leavevmode {\color {Chapter }IncreaseCoveringRadiusLowerBound}}{132}{subsection.7.2.2}} \newlabel{IncreaseCoveringRadiusLowerBound}{{7.2.2}{132}{\textcolor {Chapter }{IncreaseCoveringRadiusLowerBound}\relax }{subsection.7.2.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.2.3}\leavevmode {\color {Chapter }ExhaustiveSearchCoveringRadius}}{133}{subsection.7.2.3}} \newlabel{ExhaustiveSearchCoveringRadius}{{7.2.3}{133}{\textcolor {Chapter }{ExhaustiveSearchCoveringRadius}\relax }{subsection.7.2.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.2.4}\leavevmode {\color {Chapter }GeneralLowerBoundCoveringRadius}}{134}{subsection.7.2.4}} \newlabel{GeneralLowerBoundCoveringRadius}{{7.2.4}{134}{\textcolor {Chapter }{GeneralLowerBoundCoveringRadius}\relax }{subsection.7.2.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.2.5}\leavevmode {\color {Chapter }GeneralUpperBoundCoveringRadius}}{134}{subsection.7.2.5}} \newlabel{GeneralUpperBoundCoveringRadius}{{7.2.5}{134}{\textcolor {Chapter }{GeneralUpperBoundCoveringRadius}\relax }{subsection.7.2.5}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.2.6}\leavevmode {\color {Chapter }LowerBoundCoveringRadiusSphereCovering}}{135}{subsection.7.2.6}} \newlabel{LowerBoundCoveringRadiusSphereCovering}{{7.2.6}{135}{\textcolor {Chapter }{LowerBoundCoveringRadiusSphereCovering}\relax }{subsection.7.2.6}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.2.7}\leavevmode {\color {Chapter }LowerBoundCoveringRadiusVanWee1}}{135}{subsection.7.2.7}} \newlabel{LowerBoundCoveringRadiusVanWee1}{{7.2.7}{135}{\textcolor {Chapter }{LowerBoundCoveringRadiusVanWee1}\relax }{subsection.7.2.7}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.2.8}\leavevmode {\color {Chapter }LowerBoundCoveringRadiusVanWee2}}{136}{subsection.7.2.8}} \newlabel{LowerBoundCoveringRadiusVanWee2}{{7.2.8}{136}{\textcolor {Chapter }{LowerBoundCoveringRadiusVanWee2}\relax }{subsection.7.2.8}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.2.9}\leavevmode {\color {Chapter }LowerBoundCoveringRadiusCountingExcess}}{136}{subsection.7.2.9}} \newlabel{LowerBoundCoveringRadiusCountingExcess}{{7.2.9}{136}{\textcolor {Chapter }{LowerBoundCoveringRadiusCountingExcess}\relax }{subsection.7.2.9}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.2.10}\leavevmode {\color {Chapter }LowerBoundCoveringRadiusEmbedded1}}{137}{subsection.7.2.10}} \newlabel{LowerBoundCoveringRadiusEmbedded1}{{7.2.10}{137}{\textcolor {Chapter }{LowerBoundCoveringRadiusEmbedded1}\relax }{subsection.7.2.10}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.2.11}\leavevmode {\color {Chapter }LowerBoundCoveringRadiusEmbedded2}}{137}{subsection.7.2.11}} \newlabel{LowerBoundCoveringRadiusEmbedded2}{{7.2.11}{137}{\textcolor {Chapter }{LowerBoundCoveringRadiusEmbedded2}\relax }{subsection.7.2.11}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.2.12}\leavevmode {\color {Chapter }LowerBoundCoveringRadiusInduction}}{138}{subsection.7.2.12}} \newlabel{LowerBoundCoveringRadiusInduction}{{7.2.12}{138}{\textcolor {Chapter }{LowerBoundCoveringRadiusInduction}\relax }{subsection.7.2.12}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.2.13}\leavevmode {\color {Chapter }UpperBoundCoveringRadiusRedundancy}}{138}{subsection.7.2.13}} \newlabel{UpperBoundCoveringRadiusRedundancy}{{7.2.13}{138}{\textcolor {Chapter }{UpperBoundCoveringRadiusRedundancy}\relax }{subsection.7.2.13}{}} \citation{HP03} \@writefile{toc}{\contentsline {subsection}{\numberline {7.2.14}\leavevmode {\color {Chapter }UpperBoundCoveringRadiusDelsarte}}{139}{subsection.7.2.14}} \newlabel{UpperBoundCoveringRadiusDelsarte}{{7.2.14}{139}{\textcolor {Chapter }{UpperBoundCoveringRadiusDelsarte}\relax }{subsection.7.2.14}{}} \@writefile{brf}{\backcite{HP03}{{139}{7.2.14}{subsection.7.2.14}}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.2.15}\leavevmode {\color {Chapter }UpperBoundCoveringRadiusStrength}}{139}{subsection.7.2.15}} \newlabel{UpperBoundCoveringRadiusStrength}{{7.2.15}{139}{\textcolor {Chapter }{UpperBoundCoveringRadiusStrength}\relax }{subsection.7.2.15}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.2.16}\leavevmode {\color {Chapter }UpperBoundCoveringRadiusGriesmerLike}}{139}{subsection.7.2.16}} \newlabel{UpperBoundCoveringRadiusGriesmerLike}{{7.2.16}{139}{\textcolor {Chapter }{UpperBoundCoveringRadiusGriesmerLike}\relax }{subsection.7.2.16}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.2.17}\leavevmode {\color {Chapter }UpperBoundCoveringRadiusCyclicCode}}{140}{subsection.7.2.17}} \newlabel{UpperBoundCoveringRadiusCyclicCode}{{7.2.17}{140}{\textcolor {Chapter }{UpperBoundCoveringRadiusCyclicCode}\relax }{subsection.7.2.17}{}} \@writefile{toc}{\contentsline {section}{\numberline {7.3}\leavevmode {\color {Chapter } Special matrices in \textsf {GUAVA} }}{140}{section.7.3}} \newlabel{Special matrices in GUAVA}{{7.3}{140}{\textcolor {Chapter }{ Special matrices in \textsf {GUAVA} }\relax }{section.7.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.3.1}\leavevmode {\color {Chapter }KrawtchoukMat}}{141}{subsection.7.3.1}} \newlabel{KrawtchoukMat}{{7.3.1}{141}{\textcolor {Chapter }{KrawtchoukMat}\relax }{subsection.7.3.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.3.2}\leavevmode {\color {Chapter }GrayMat}}{141}{subsection.7.3.2}} \newlabel{GrayMat}{{7.3.2}{141}{\textcolor {Chapter }{GrayMat}\relax }{subsection.7.3.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.3.3}\leavevmode {\color {Chapter }SylvesterMat}}{141}{subsection.7.3.3}} \newlabel{SylvesterMat}{{7.3.3}{141}{\textcolor {Chapter }{SylvesterMat}\relax }{subsection.7.3.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.3.4}\leavevmode {\color {Chapter }HadamardMat}}{142}{subsection.7.3.4}} \newlabel{HadamardMat}{{7.3.4}{142}{\textcolor {Chapter }{HadamardMat}\relax }{subsection.7.3.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.3.5}\leavevmode {\color {Chapter }VandermondeMat}}{142}{subsection.7.3.5}} \newlabel{VandermondeMat}{{7.3.5}{142}{\textcolor {Chapter }{VandermondeMat}\relax }{subsection.7.3.5}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.3.6}\leavevmode {\color {Chapter }PutStandardForm}}{143}{subsection.7.3.6}} \newlabel{PutStandardForm}{{7.3.6}{143}{\textcolor {Chapter }{PutStandardForm}\relax }{subsection.7.3.6}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.3.7}\leavevmode {\color {Chapter }IsInStandardForm}}{144}{subsection.7.3.7}} \newlabel{IsInStandardForm}{{7.3.7}{144}{\textcolor {Chapter }{IsInStandardForm}\relax }{subsection.7.3.7}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.3.8}\leavevmode {\color {Chapter }PermutedCols}}{144}{subsection.7.3.8}} \newlabel{PermutedCols}{{7.3.8}{144}{\textcolor {Chapter }{PermutedCols}\relax }{subsection.7.3.8}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.3.9}\leavevmode {\color {Chapter }VerticalConversionFieldMat}}{144}{subsection.7.3.9}} \newlabel{VerticalConversionFieldMat}{{7.3.9}{144}{\textcolor {Chapter }{VerticalConversionFieldMat}\relax }{subsection.7.3.9}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.3.10}\leavevmode {\color {Chapter }HorizontalConversionFieldMat}}{145}{subsection.7.3.10}} \newlabel{HorizontalConversionFieldMat}{{7.3.10}{145}{\textcolor {Chapter }{HorizontalConversionFieldMat}\relax }{subsection.7.3.10}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.3.11}\leavevmode {\color {Chapter }MOLS}}{145}{subsection.7.3.11}} \newlabel{MOLS}{{7.3.11}{145}{\textcolor {Chapter }{MOLS}\relax }{subsection.7.3.11}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.3.12}\leavevmode {\color {Chapter }IsLatinSquare}}{146}{subsection.7.3.12}} \newlabel{IsLatinSquare}{{7.3.12}{146}{\textcolor {Chapter }{IsLatinSquare}\relax }{subsection.7.3.12}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.3.13}\leavevmode {\color {Chapter }AreMOLS}}{146}{subsection.7.3.13}} \newlabel{AreMOLS}{{7.3.13}{146}{\textcolor {Chapter }{AreMOLS}\relax }{subsection.7.3.13}{}} \citation{GS85} \@writefile{toc}{\contentsline {section}{\numberline {7.4}\leavevmode {\color {Chapter } Some functions related to the norm of a code }}{147}{section.7.4}} \newlabel{Some functions related to the norm of a code}{{7.4}{147}{\textcolor {Chapter }{ Some functions related to the norm of a code }\relax }{section.7.4}{}} \@writefile{brf}{\backcite{GS85}{{147}{7.4}{section.7.4}}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.4.1}\leavevmode {\color {Chapter }CoordinateNorm}}{147}{subsection.7.4.1}} \newlabel{CoordinateNorm}{{7.4.1}{147}{\textcolor {Chapter }{CoordinateNorm}\relax }{subsection.7.4.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.4.2}\leavevmode {\color {Chapter }CodeNorm}}{147}{subsection.7.4.2}} \newlabel{CodeNorm}{{7.4.2}{147}{\textcolor {Chapter }{CodeNorm}\relax }{subsection.7.4.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.4.3}\leavevmode {\color {Chapter }IsCoordinateAcceptable}}{147}{subsection.7.4.3}} \newlabel{IsCoordinateAcceptable}{{7.4.3}{147}{\textcolor {Chapter }{IsCoordinateAcceptable}\relax }{subsection.7.4.3}{}} \citation{GS85} \@writefile{toc}{\contentsline {subsection}{\numberline {7.4.4}\leavevmode {\color {Chapter }GeneralizedCodeNorm}}{148}{subsection.7.4.4}} \newlabel{GeneralizedCodeNorm}{{7.4.4}{148}{\textcolor {Chapter }{GeneralizedCodeNorm}\relax }{subsection.7.4.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.4.5}\leavevmode {\color {Chapter }IsNormalCode}}{148}{subsection.7.4.5}} \newlabel{IsNormalCode}{{7.4.5}{148}{\textcolor {Chapter }{IsNormalCode}\relax }{subsection.7.4.5}{}} \@writefile{brf}{\backcite{GS85}{{148}{7.4.5}{subsection.7.4.5}}} \@writefile{toc}{\contentsline {section}{\numberline {7.5}\leavevmode {\color {Chapter } Miscellaneous functions }}{148}{section.7.5}} \newlabel{Miscellaneous functions}{{7.5}{148}{\textcolor {Chapter }{ Miscellaneous functions }\relax }{section.7.5}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.5.1}\leavevmode {\color {Chapter }CodeWeightEnumerator}}{148}{subsection.7.5.1}} \newlabel{CodeWeightEnumerator}{{7.5.1}{148}{\textcolor {Chapter }{CodeWeightEnumerator}\relax }{subsection.7.5.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.5.2}\leavevmode {\color {Chapter }CodeDistanceEnumerator}}{149}{subsection.7.5.2}} \newlabel{CodeDistanceEnumerator}{{7.5.2}{149}{\textcolor {Chapter }{CodeDistanceEnumerator}\relax }{subsection.7.5.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.5.3}\leavevmode {\color {Chapter }CodeMacWilliamsTransform}}{149}{subsection.7.5.3}} \newlabel{CodeMacWilliamsTransform}{{7.5.3}{149}{\textcolor {Chapter }{CodeMacWilliamsTransform}\relax }{subsection.7.5.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.5.4}\leavevmode {\color {Chapter }CodeDensity}}{149}{subsection.7.5.4}} \newlabel{CodeDensity}{{7.5.4}{149}{\textcolor {Chapter }{CodeDensity}\relax }{subsection.7.5.4}{}} \citation{MS83} \@writefile{toc}{\contentsline {subsection}{\numberline {7.5.5}\leavevmode {\color {Chapter }SphereContent}}{150}{subsection.7.5.5}} \newlabel{SphereContent}{{7.5.5}{150}{\textcolor {Chapter }{SphereContent}\relax }{subsection.7.5.5}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.5.6}\leavevmode {\color {Chapter }Krawtchouk}}{150}{subsection.7.5.6}} \newlabel{Krawtchouk}{{7.5.6}{150}{\textcolor {Chapter }{Krawtchouk}\relax }{subsection.7.5.6}{}} \@writefile{brf}{\backcite{MS83}{{150}{7.5.6}{subsection.7.5.6}}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.5.7}\leavevmode {\color {Chapter }PrimitiveUnityRoot}}{150}{subsection.7.5.7}} \newlabel{PrimitiveUnityRoot}{{7.5.7}{150}{\textcolor {Chapter }{PrimitiveUnityRoot}\relax }{subsection.7.5.7}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.5.8}\leavevmode {\color {Chapter }PrimitivePolynomialsNr}}{151}{subsection.7.5.8}} \newlabel{PrimitivePolynomialsNr}{{7.5.8}{151}{\textcolor {Chapter }{PrimitivePolynomialsNr}\relax }{subsection.7.5.8}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.5.9}\leavevmode {\color {Chapter }IrreduciblePolynomialsNr}}{151}{subsection.7.5.9}} \newlabel{IrreduciblePolynomialsNr}{{7.5.9}{151}{\textcolor {Chapter }{IrreduciblePolynomialsNr}\relax }{subsection.7.5.9}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.5.10}\leavevmode {\color {Chapter }MatrixRepresentationOfElement}}{151}{subsection.7.5.10}} \newlabel{MatrixRepresentationOfElement}{{7.5.10}{151}{\textcolor {Chapter }{MatrixRepresentationOfElement}\relax }{subsection.7.5.10}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.5.11}\leavevmode {\color {Chapter }ReciprocalPolynomial}}{152}{subsection.7.5.11}} \newlabel{ReciprocalPolynomial}{{7.5.11}{152}{\textcolor {Chapter }{ReciprocalPolynomial}\relax }{subsection.7.5.11}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.5.12}\leavevmode {\color {Chapter }CyclotomicCosets}}{152}{subsection.7.5.12}} \newlabel{CyclotomicCosets}{{7.5.12}{152}{\textcolor {Chapter }{CyclotomicCosets}\relax }{subsection.7.5.12}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.5.13}\leavevmode {\color {Chapter }WeightHistogram}}{153}{subsection.7.5.13}} \newlabel{WeightHistogram}{{7.5.13}{153}{\textcolor {Chapter }{WeightHistogram}\relax }{subsection.7.5.13}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.5.14}\leavevmode {\color {Chapter }MultiplicityInList}}{153}{subsection.7.5.14}} \newlabel{MultiplicityInList}{{7.5.14}{153}{\textcolor {Chapter }{MultiplicityInList}\relax }{subsection.7.5.14}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.5.15}\leavevmode {\color {Chapter }MostCommonInList}}{153}{subsection.7.5.15}} \newlabel{MostCommonInList}{{7.5.15}{153}{\textcolor {Chapter }{MostCommonInList}\relax }{subsection.7.5.15}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.5.16}\leavevmode {\color {Chapter }RotateList}}{154}{subsection.7.5.16}} \newlabel{RotateList}{{7.5.16}{154}{\textcolor {Chapter }{RotateList}\relax }{subsection.7.5.16}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.5.17}\leavevmode {\color {Chapter }CirculantMatrix}}{154}{subsection.7.5.17}} \newlabel{CirculantMatrix}{{7.5.17}{154}{\textcolor {Chapter }{CirculantMatrix}\relax }{subsection.7.5.17}{}} \@writefile{toc}{\contentsline {section}{\numberline {7.6}\leavevmode {\color {Chapter } Miscellaneous polynomial functions }}{154}{section.7.6}} \newlabel{Miscellaneous polynomial functions}{{7.6}{154}{\textcolor {Chapter }{ Miscellaneous polynomial functions }\relax }{section.7.6}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.6.1}\leavevmode {\color {Chapter }MatrixTransformationOnMultivariatePolynomial }}{154}{subsection.7.6.1}} \newlabel{MatrixTransformationOnMultivariatePolynomial }{{7.6.1}{154}{\textcolor {Chapter }{MatrixTransformationOnMultivariatePolynomial }\relax }{subsection.7.6.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.6.2}\leavevmode {\color {Chapter }DegreeMultivariatePolynomial}}{154}{subsection.7.6.2}} \newlabel{DegreeMultivariatePolynomial}{{7.6.2}{154}{\textcolor {Chapter }{DegreeMultivariatePolynomial}\relax }{subsection.7.6.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.6.3}\leavevmode {\color {Chapter }DegreesMultivariatePolynomial}}{155}{subsection.7.6.3}} \newlabel{DegreesMultivariatePolynomial}{{7.6.3}{155}{\textcolor {Chapter }{DegreesMultivariatePolynomial}\relax }{subsection.7.6.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.6.4}\leavevmode {\color {Chapter }CoefficientMultivariatePolynomial}}{155}{subsection.7.6.4}} \newlabel{CoefficientMultivariatePolynomial}{{7.6.4}{155}{\textcolor {Chapter }{CoefficientMultivariatePolynomial}\relax }{subsection.7.6.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.6.5}\leavevmode {\color {Chapter }SolveLinearSystem}}{156}{subsection.7.6.5}} \newlabel{SolveLinearSystem}{{7.6.5}{156}{\textcolor {Chapter }{SolveLinearSystem}\relax }{subsection.7.6.5}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.6.6}\leavevmode {\color {Chapter }GuavaVersion}}{156}{subsection.7.6.6}} \newlabel{GuavaVersion}{{7.6.6}{156}{\textcolor {Chapter }{GuavaVersion}\relax }{subsection.7.6.6}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.6.7}\leavevmode {\color {Chapter }ZechLog}}{156}{subsection.7.6.7}} \newlabel{ZechLog}{{7.6.7}{156}{\textcolor {Chapter }{ZechLog}\relax }{subsection.7.6.7}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.6.8}\leavevmode {\color {Chapter }CoefficientToPolynomial}}{157}{subsection.7.6.8}} \newlabel{CoefficientToPolynomial}{{7.6.8}{157}{\textcolor {Chapter }{CoefficientToPolynomial}\relax }{subsection.7.6.8}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.6.9}\leavevmode {\color {Chapter }DegreesMonomialTerm}}{157}{subsection.7.6.9}} \newlabel{DegreesMonomialTerm}{{7.6.9}{157}{\textcolor {Chapter }{DegreesMonomialTerm}\relax }{subsection.7.6.9}{}} \citation{GG03} \@writefile{toc}{\contentsline {subsection}{\numberline {7.6.10}\leavevmode {\color {Chapter }DivisorsMultivariatePolynomial}}{158}{subsection.7.6.10}} \newlabel{DivisorsMultivariatePolynomial}{{7.6.10}{158}{\textcolor {Chapter }{DivisorsMultivariatePolynomial}\relax }{subsection.7.6.10}{}} \@writefile{brf}{\backcite{GG03}{{158}{7.6.10}{subsection.7.6.10}}} \@writefile{toc}{\contentsline {section}{\numberline {7.7}\leavevmode {\color {Chapter } GNU Free Documentation License }}{158}{section.7.7}} \bibstyle{alpha} \bibdata{guava} \bibcite{Alltop84}{All84} \bibcite{BM03}{BMed} \bibcite{Brouwer98}{Bro98} \bibcite{Br}{Bro06} \bibcite{Chen69}{Che69} \bibcite{Gallager.1962}{Gal62} \bibcite{Gao03}{Gao03} \bibcite{GDT91}{GDT91} \bibcite{GS85}{GS85} \bibcite{Han99}{Han99} \bibcite{He72}{Hel72} \bibcite{HHKK07}{HHKK07} \bibcite{HP03}{HP03} \bibcite{JH04}{JH04} \bibcite{Jo04}{Joy04} \bibcite{Leon82}{Leo82} \bibcite{Leon88}{Leo88} \bibcite{Leon91}{Leo91} \bibcite{MS83}{MS83} \bibcite{TSSFC04}{RTC04} \bibcite{Sloane72}{SRC72} \bibcite{St93}{Sti93} \bibcite{GG03}{vzGG03} \bibcite{Zimmermann96}{Zim96} guava-3.6/doc/manual.mst0000644017361200001450000000046411026723452015117 0ustar tabbottcrontabpreamble "" postamble "\n" group_skip "\n" headings_flag 1 heading_prefix "\\letter " numhead_positive "{}" symhead_positive "{}" item_0 "\n " item_1 "\n \\sub " item_01 "\n \\sub " item_x1 ", " item_2 "\n \\subsub " item_12 "\n \\subsub " item_x2 ", " page_compositor "--" line_max 1000 guava-3.6/doc/chapInd.html0000644017361200001450000011302611027015742015345 0ustar tabbottcrontab GAP (guava) - Index
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

Index

< > 3.2-1
< > 4.1-1
* 4.2-2
* 4.2-3
+ 3.3-1
+ 3.3-3
+ 4.2-1
- 3.3-2
= 3.2-1
= 4.1-1
A(n,d) 7.1-7
acceptable coordinate 7.4-2
acceptable coordinate 7.4-3
AClosestVectorComb..MatFFEVecFFECoords 2.1-2
AClosestVectorCombinationsMatFFEVecFFE 2.1-1
ActionMoebiusTransformationOnDivisorP1 5.7-18
ActionMoebiusTransformationOnFunction 5.7-17
AddedElementsCode 6.1-8
affine code 4.3-13
AffineCurve 5.7-1
AffinePointsOnCurve 5.7-2
AlternantCode 5.2-6
AmalgamatedDirectSumCode 6.2-7
AreMOLS 7.3-13
AsSSortedList 4.5-5
AugmentedCode 6.1-6
AutomorphismGroup 4.4-3
BCHCode 5.5-4
BestKnownLinearCode 5.2-14
BinaryGolayCode 5.4-1
BitFlipDecoder 4.10-5
BlockwiseDirectSumCode 6.2-8
Bose distance 5.5-4
bound, Gilbert-Varshamov lower 7.1-9
bound, sphere packing lower 7.1-10
bounds, Elias 7.1-4
bounds, Griesmer 7.1-5
bounds, Hamming 7.1-1
bounds, Johnson 7.1-2
bounds, Plotkin 7.1-3
bounds, Singleton 7.1
bounds, sphere packing bound 7.1-1
BoundsCoveringRadius 7.2-1
BoundsMinimumDistance 7.1-13
BZCode 6.2-11
BZCodeNC 6.2-12
check polynomial 4.
check polynomial 5.5
CheckMat 4.7-2
CheckMatCode 5.2-3
CheckMatCodeMutable 5.2-2
CheckPol 4.7-4
CheckPolCode 5.5-2
CirculantMatrix 7.5-17
code 4.
code, (n,M,d) 4.
code, [n, k, d]r 4.
code, AG 5.7
code, alternant 5.2-5
code, Bose-Chaudhuri-Hockenghem 5.5-3
code, conference 5.1-2
code, Cordaro-Wagner 5.2-9
code, cyclic 4.
code, Davydov 5.3-2
code, doubly-even 4.3-10
code, element test 4.3-1
code, elements of 4.
code, evaluation 5.6
code, even 4.3-12
code, Fire 5.5-9
code, Gabidulin 5.3
code, Golay (binary) 5.4
code, Golay (ternary) 5.4-2
code, Goppa (classical) 5.2-6
code, greedy 5.1-6
code, Hadamard 5.1-1
code, Hamming 5.2-3
code, linear 4.
code, maximum distance separable 4.3-7
code, Nordstrom-Robinson 5.1-5
code, perfect 4.3-6
code, Reed-Muller 5.2-4
code, Reed-Solomon 5.5-4
code, self-dual 4.3-8
code, self-orthogonal 4.3-9
code, singly-even 4.3-11
code, Srivastava 5.2-7
code, subcode 4.3-2
code, Tombak 5.3-3
code, toric 5.6-4
code, unrestricted 4.
CodeDensity 7.5-4
CodeDistanceEnumerator 7.5-2
CodeIsomorphism 4.4-2
CodeMacWilliamsTransform 7.5-3
CodeNorm 7.4-2
codes, addition 4.2-1
codes, decoding 4.2-4
codes, direct sum 4.2-1
codes, encoding 4.2-3
codes, product 4.2-2
CodeWeightEnumerator 7.5-1
Codeword 3.1-1
CodewordNr 3.1-2
codewords, addition 3.3-1
codewords, cosets 3.3-3
codewords, subtraction 3.3-2
CoefficientMultivariatePolynomial 7.6-4
CoefficientToPolynomial 7.6-8
conference matrix 5.1-3
ConferenceCode 5.1-3
ConstantWeightSubcode 6.1-18
ConstructionBCode 6.1-13
ConstructionXCode 6.2-9
ConstructionXXCode 6.2-10
ConversionFieldCode 6.1-15
ConwayPolynomial 2.2-1
CoordinateNorm 7.4-1
CordaroWagnerCode 5.2-10
coset 3.3-3
CosetCode 6.1-17
covering code 4.8-7
CoveringRadius 4.8-8
cyclic 5.5-17
CyclicCodes 5.5-14
CyclicMDSCode 5.5-17
CyclotomicCosets 7.5-12
DavydovCode 5.3-3
Decode 4.10-1
Decodeword 4.10-2
DecreaseMinimumDistanceUpperBound 4.8-6
defining polynomial 2.2
degree 5.7-7
DegreeMultivariatePolynomial 7.6-2
DegreesMonomialTerm 7.6-9
DegreesMultivariatePolynomial 7.6-3
density of a code 7.5-3
Dimension 4.5-4
DirectProductCode 6.2-3
DirectSumCode 6.2-1
Display 4.6-3
DisplayBoundsInfo 4.6-4
distance 4.9-3
DistanceCodeword 3.6-2
DistancesDistribution 4.9-4
DistancesDistributionMatFFEVecFFE 2.1-3
DistancesDistributionVecFFEsVecFFE 2.1-4
DistanceVecFFE 2.1-6
divisor 5.7-4
DivisorAddition 5.7-6
DivisorAutomorphismGroupP1 5.7-20
DivisorDegree 5.7-7
DivisorGCD 5.7-11
DivisorIsZero 5.7-9
DivisorLCM 5.7-12
DivisorNegate 5.7-8
DivisorOfRationalFunctionP1 5.7-14
DivisorOnAffineCurve 5.7-5
DivisorsEqual 5.7-10
DivisorsMultivariatePolynomial 7.6-10
doubly-even 4.3-9
DualCode 6.1-14
ElementsCode 5.1-1
encoder map 4.2-3
EnlargedGabidulinCode 5.3-2
EnlargedTombakCode 5.3-5
equivalent codes 4.4
EvaluationBivariateCode 5.7-23
EvaluationBivariateCodeNC 5.7-24
EvaluationCode 5.6-1
even 4.3-11
EvenWeightSubcode 6.1-3
ExhaustiveSearchCoveringRadius 7.2-3
ExpurgatedCode 6.1-5
ExtendedBinaryGolayCode 5.4-2
ExtendedCode 6.1-1
ExtendedDirectSumCode 6.2-6
ExtendedReedSolomonCode 5.5-6
ExtendedTernaryGolayCode 5.4-4
external distance 7.2-13
FerreroDesignCode 5.2-11
FireCode 5.5-10
FourNegacirculantSelfDualCode 5.5-18
FourNegacirculantSelfDualCodeNC 5.5-19
GabidulinCode 5.3-1
Gary code 7.3-1
GeneralizedCodeNorm 7.4-4
GeneralizedReedMullerCode 5.6-3
GeneralizedReedSolomonCode 5.6-2
GeneralizedReedSolomonDecoderGao 4.10-3
GeneralizedReedSolomonListDecoder 4.10-4
GeneralizedSrivastavaCode 5.2-8
GeneralLowerBoundCoveringRadius 7.2-4
GeneralUpperBoundCoveringRadius 7.2-5
generator polynomial 4.
generator polynomial 5.5
GeneratorMat 4.7-1
GeneratorMatCode 5.2-1
GeneratorPol 4.7-3
GeneratorPolCode 5.5-1
GenusCurve 5.7-3
GF(p) 2.2
GF(q) 2.2
GoppaCode 5.2-7
GoppaCodeClassical 5.7-22
GOrbitPoint 5.7-4
GrayMat 7.3-2
greatest common divisor 5.7-11
GreedyCode 5.1-7
Griesmer code 7.1-6
GuavaVersion 7.6-6
Hadamard matrix 5.1-2
Hadamard matrix 7.3-3
HadamardCode 5.1-2
HadamardMat 7.3-4
Hamming metric 2.1-5
HammingCode 5.2-4
HorizontalConversionFieldMat 7.3-10
hull 6.2-4
in 4.3-1
IncreaseCoveringRadiusLowerBound 7.2-2
information bits 4.2-4
InformationWord 4.2-4
InnerDistribution 4.9-3
IntersectionCode 6.2-4
IrreduciblePolynomialsNr 7.5-9
IsActionMoebiusTransformationOnDivisorDefinedP1 5.7-19
IsAffineCode 4.3-14
IsAlmostAffineCode 4.3-15
IsCheapConwayPolynomial 2.2-1
IsCode 4.3-3
IsCodeword 3.1-3
IsCoordinateAcceptable 7.4-3
IsCyclicCode 4.3-5
IsDoublyEvenCode 4.3-10
IsEquivalent 4.4-1
IsEvenCode 4.3-12
IsFinite 4.5-1
IsGriesmerCode 7.1-7
IsInStandardForm 7.3-7
IsLatinSquare 7.3-12
IsLinearCode 4.3-4
IsMDSCode 4.3-7
IsNormalCode 7.4-5
IsPerfectCode 4.3-6
IsPrimitivePolynomial 2.2-2
IsSelfComplementaryCode 4.3-13
IsSelfDualCode 4.3-8
IsSelfOrthogonalCode 4.3-9
IsSinglyEvenCode 4.3-11
IsSubset 4.3-2
Krawtchouk 7.5-6
KrawtchoukMat 7.3-1
Latin square 7.3-10
LDPC 5.8
least common multiple 5.7-12
LeftActingDomain 4.5-3
length 4.
LengthenedCode 6.1-10
LexiCode 5.1-8
linear code 3.
LowerBoundCoveringRadiusCountingExcess 7.2-9
LowerBoundCoveringRadiusEmbedded1 7.2-10
LowerBoundCoveringRadiusEmbedded2 7.2-11
LowerBoundCoveringRadiusInduction 7.2-12
LowerBoundCoveringRadiusSphereCovering 7.2-6
LowerBoundCoveringRadiusVanWee1 7.2-7
LowerBoundCoveringRadiusVanWee2 7.2-8
LowerBoundGilbertVarshamov 7.1-10
LowerBoundMinimumDistance 7.1-9
LowerBoundSpherePacking 7.1-11
MacWilliams transform 7.5-2
MatrixRepresentationOfElement 7.5-10
MatrixRepresentationOnRiemannRochSpaceP1 5.7-21
MatrixTransformationOnMultivariatePolynomial 7.6-1
maximum distance separable 7.1-1
MDS 4.3-7
MDS 5.5-17
minimum distance 4.
MinimumDistance 4.8-3
MinimumDistanceLeon 4.8-4
MinimumDistanceRandom 4.8-7
MinimumWeight 4.8-5
MinimumWeightWords 4.9-1
MoebiusTransformation 5.7-16
MOLS 7.3-11
MOLSCode 5.1-4
MostCommonInList 7.5-15
MultiplicityInList 7.5-14
mutually orthogonal Latin squares 7.3-10
NearestNeighborDecodewords 4.10-7
NearestNeighborGRSDecodewords 4.10-6
NordstromRobinsonCode 5.1-6
norm of a code 7.4-1
normal code 7.4-4
not = 3.2-1
not = 4.1-1
NrCyclicCodes 5.5-15
NullCode 5.5-12
NullWord 3.6-1
OnePointAGCode 5.7-25
OptimalityCode 5.2-13
order of polynomial 5.5-10
OuterDistribution 4.9-5
Parity check 6.1
parity check matrix 4.
perfect 7.1-1
perfect code 7.5-4
permutation equivalent codes 4.4
PermutationAutomorphismGroup 4.4-3
PermutationAutomorphismGroup 4.4-4
PermutationDecode 4.10-11
PermutationDecodeNC 4.10-12
PermutedCode 6.1-4
PermutedCols 7.3-8
PiecewiseConstantCode 6.1-20
point 5.7-1
PolyCodeword 3.4-2
primitive element 2.2
PrimitivePolynomialsNr 7.5-8
PrimitiveUnityRoot 7.5-7
Print 4.6-1
PuncturedCode 6.1-2
PutStandardForm 7.3-6
QCLDPCCodeFromGroup 5.8-1
QQRCode 5.5-9
QQRCodeNC 5.5-8
QRCode 5.5-7
QuasiCyclicCode 5.5-16
RandomCode 5.1-5
RandomLinearCode 5.2-12
RandomPrimitivePolynomial 2.2-2
reciprocal polynomial 7.5-10
ReciprocalPolynomial 7.5-11
Redundancy 4.8-2
ReedMullerCode 5.2-5
ReedSolomonCode 5.5-5
RemovedElementsCode 6.1-7
RepetitionCode 5.5-13
ResidueCode 6.1-12
RiemannRochSpaceBasisFunctionP1 5.7-13
RiemannRochSpaceBasisP1 5.7-15
RootsCode 5.5-3
RootsOfCode 4.7-5
RotateList 7.5-16
self complementary code 4.3-12
self-dual 5.5-18
self-dual 6.1-14
self-orthogonal 4.3-8
SetCoveringRadius 4.8-9
ShortenedCode 6.1-9
singly-even 4.3-10
size 4.
Size 4.5-2
SolveLinearSystem 7.6-5
SphereContent 7.5-5
SrivastavaCode 5.2-9
standard form 7.3-5
StandardArray 4.10-10
StandardFormCode 6.1-19
strength 7.2-15
String 4.6-2
SubCode 6.1-11
Support 3.6-3
support 5.7-4
SylvesterMat 7.3-3
Syndrome 4.10-8
syndrome table 4.10-9
SyndromeTable 4.10-9
t(n,k) 4.8-7
TernaryGolayCode 5.4-3
TombakCode 5.3-4
ToricCode 5.6-5
ToricPoints 5.6-4
TraceCode 6.1-16
TreatAsPoly 3.5-2
TreatAsVector 3.5-1
UnionCode 6.2-5
UpperBound 7.1-8
UpperBoundCoveringRadiusCyclicCode 7.2-17
UpperBoundCoveringRadiusDelsarte 7.2-14
UpperBoundCoveringRadiusGriesmerLike 7.2-16
UpperBoundCoveringRadiusRedundancy 7.2-13
UpperBoundCoveringRadiusStrength 7.2-15
UpperBoundElias 7.1-5
UpperBoundGriesmer 7.1-6
UpperBoundHamming 7.1-2
UpperBoundJohnson 7.1-3
UpperBoundMinimumDistance 7.1-12
UpperBoundPlotkin 7.1-4
UpperBoundSingleton 7.1-1
UUVCode 6.2-2
VandermondeMat 7.3-5
VectorCodeword 3.4-1
VerticalConversionFieldMat 7.3-9
weight enumerator polynomial 7.5
WeightCodeword 3.6-4
WeightDistribution 4.9-2
WeightHistogram 7.5-13
WeightVecFFE 2.1-5
WholeSpaceCode 5.5-11
WordLength 4.8-1
ZechLog 7.6-7

Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

generated by GAPDoc2HTML

guava-3.6/doc/guava.bib0000644017361200001450000001445411026723452014702 0ustar tabbottcrontab%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %A guava.bib GUAVA documentation Reinald Baart %A & Jasper Cramwinckel %A & Erik Roijackers %A & David Joyner % %H $Id: manual.bib,v 1.2 2003/02/12 03:40:23 gap Exp $ % %Y Copyright (C) 1995, Vakgroep Algemene Wiskunde, T.U. Delft, Nederland %Y Copyright (C) 2005, David Joyner % @article{BM03, AUTHOR = {L. Bazzi and S. K. Mitter}, TITLE = "Some constructions of codes from group actions", JOURNAL = {preprint}, YEAR = {March 2003 (submitted)}, } @article{GDT91, AUTHOR = {E. Gabidulin and A. Davydov and L. Tombak}, TITLE = {Linear codes with covering radius 2 and other new covering codes}, JOURNAL = {IEEE Trans. Inform. Theory}, VOLUME = {37}, YEAR = {1991}, NUMBER = {1}, PAGES = {219--224}, } @article{Gao03, author = "S. Gao", title = "A new algorithm for decoding Reed-Solomon codes", journal = {Communications, Information and Network Security (V. Bhargava, H. V. Poor, V. Tarokh and S. Yoon, Eds.)}, publisher={Kluwer Academic Publishers}, pages={pp. 55-68}, year = 2003, } @book{GG03, AUTHOR = {J. von zur Gathen and J. Gerhard,}, TITLE = {Modern computer algebra}, YEAR = {2003}, publisher = {Cambridge Univ. Press}, } @article{GS85, AUTHOR = {R. Graham and N. Sloane}, TITLE = "On the covering radius of codes", JOURNAL = {IEEE Trans. Inform. Theory}, VOLUME = {31}, YEAR = {1985}, NUMBER = {1}, PAGES = {385--401}, } @article{Han99, author = "J. P. Hansen", title = "Toric surfaces and error-correcting codes", journal = "Coding theory, cryptography, and related areas (ed., Bachmann et al) Springer-Verlag", year = 1999, } @article{He72, author = "Hermann J. Helgert", title = "Srivastava codes", journal = "IEEE Trans. Inform. Theory", volume = 18, month = "March", year = 1972, pages = "292--297", } @book{HP03, author="W. C. Huffman and V. Pless", title="Fundamentals of error-correcting codes", publisher="Cambridge Univ. Press", year=2003} @article{Jo04, author = "D. Joyner", title = "Toric codes over finite fields", journal = "Applicable Algebra in Engineering, Communication and Computing", volume = 15, year = 2004, pages = "63--79", } @book{JH04, author="J. Justesen and T. Hoholdt", title="A course in error-correcting codes", publisher="European Mathematical Society", year=2004} @article{Leon82, author = "Jeffrey S. Leon", title = "Computing automorphism groups of error-correcting codes", journal = "IEEE Trans. Inform. Theory", volume = 28, month = "May", year = 1982, pages = "496--511", } @article{Leon88, author = "Jeffrey S. Leon", title = "A probabilistic algorithm for computing minimum weights of large error-correcting codes", journal = "IEEE Trans. Inform. Theory", volume = 34, month = "September", year = 1988, pages = "1354--1359", } @article{Leon91, author = "Jeffrey S. Leon", title = "Permutation group algorithms based on partitions, {I}: theory and algorithms", journal = "J. Symbolic Comput.", volume = 12, year = 1991, pages = "533--583", } @book{MS83, author="F. J. MacWilliams and N. J. A. Sloane", title="The theory of error-correcting codes", publisher="Amsterdam: North-Holland", year=1983, } @book{St93, author="H. Stichtenoth", title="Algebraic function fields and codes", publisher="Springer-Verlag", year=1993, } @book{Br, AUTHOR = {A. E. Brouwer}, TITLE = "Bounds on the minimum distance of linear codes", publisher={On the internet at the URL: http$://$www.win.tue.nl$/\tilde$aeb$/$voorlincod.html}, Year={1997-2006} } @article{HHKK07, author = "M.~Harada and W.~Holzmann and H.~Kharaghani and M.~Khorvash", title = "Extremal Ternary Self-Dual Codes Constructed from Negacirculant Matrices", journal = "Graphs and Combinatorics", volume = 23, number = 4, year = 2007, pages = "401--417", } @article{Sloane72, author = "N.~Sloane and S.~Reddy and C.~Chen", title = "New binary codes", journal = "IEEE Trans. Inform. Theory", volume = 18, month = "Jul", year = 1972, pages = "503--510", } @article{Alltop84, author = "W.~O.~Alltop", title = "A method for extending binary linear codes", journal = "IEEE Trans. Inform. Theory", volume = 30, year = 1984, pages = "871--872", } @INCOLLECTION{Brouwer98, author = {A.~E. Brouwer}, title = {Bounds on the Size of Linear Codes}, booktitle = {Handbook of Coding Theory}, publisher = {{Elsevier, North Holland}}, year = {1998}, pages = {295--461}, editor = {V.~S. Pless and W.~C. Huffman}, } @PHDTHESIS{Chen69, author = {C.~L. Chen}, title = {Some Results on Algebraically Structured Error-Correcting Codes}, school = {{University of Hawaii}}, type = {Ph.{D} Dissertation}, address = {USA}, year = {1969}, } @TECHREPORT{Zimmermann96, author = {K.-H.~Zimmermann}, title = {Integral Hecke Modules, Integral Generalized {Reed-Muller} Codes, and Linear Codes}, institution = {Technische Universit\"at Hamburg-Harburg}, address = {Hamburg, Germany}, year = {1996}, number = {3--96}, } @ARTICLE{Gallager.1962, author = {R. Gallager}, title = {Low-Density Parity-Check Codes}, journal = {IRE Trans. Inform. Theory}, year = {1962}, month = {Jan.}, volume = {IT-8}, pages = {21--28}, } @ARTICLE{TSSFC04, author = {R. Tanner, D. Sridhara, A. Sridharan, T. Fuja and D. Costello{, Jr.}}, title = {{LDPC} Block and Convolutional Codes Based on Circulant Matrices}, journal = IEEE_J_IT, volume = {50}, number = {12}, pages = {2966--2984}, month = {Dec.}, year = {2004}, } guava-3.6/doc/guava.toc0000644017361200001450000011234511027015742014726 0ustar tabbottcrontab\contentsline {chapter}{\numberline {1}\leavevmode {\color {Chapter }Introduction}}{12}{chapter.1} \contentsline {section}{\numberline {1.1}\leavevmode {\color {Chapter }Introduction to the \textsf {GUAVA} package}}{12}{section.1.1} \contentsline {section}{\numberline {1.2}\leavevmode {\color {Chapter }Installing \textsf {GUAVA}}}{12}{section.1.2} \contentsline {section}{\numberline {1.3}\leavevmode {\color {Chapter }Loading \textsf {GUAVA}}}{13}{section.1.3} \contentsline {chapter}{\numberline {2}\leavevmode {\color {Chapter }Coding theory functions in GAP}}{14}{chapter.2} \contentsline {section}{\numberline {2.1}\leavevmode {\color {Chapter } Distance functions }}{14}{section.2.1} \contentsline {subsection}{\numberline {2.1.1}\leavevmode {\color {Chapter }AClosestVectorCombinationsMatFFEVecFFE}}{14}{subsection.2.1.1} \contentsline {subsection}{\numberline {2.1.2}\leavevmode {\color {Chapter }AClosestVectorComb..MatFFEVecFFECoords}}{15}{subsection.2.1.2} \contentsline {subsection}{\numberline {2.1.3}\leavevmode {\color {Chapter }DistancesDistributionMatFFEVecFFE}}{15}{subsection.2.1.3} \contentsline {subsection}{\numberline {2.1.4}\leavevmode {\color {Chapter }DistancesDistributionVecFFEsVecFFE}}{16}{subsection.2.1.4} \contentsline {subsection}{\numberline {2.1.5}\leavevmode {\color {Chapter }WeightVecFFE}}{16}{subsection.2.1.5} \contentsline {subsection}{\numberline {2.1.6}\leavevmode {\color {Chapter }DistanceVecFFE}}{16}{subsection.2.1.6} \contentsline {section}{\numberline {2.2}\leavevmode {\color {Chapter } Other functions }}{17}{section.2.2} \contentsline {subsection}{\numberline {2.2.1}\leavevmode {\color {Chapter }ConwayPolynomial}}{17}{subsection.2.2.1} \contentsline {subsection}{\numberline {2.2.2}\leavevmode {\color {Chapter }RandomPrimitivePolynomial}}{18}{subsection.2.2.2} \contentsline {chapter}{\numberline {3}\leavevmode {\color {Chapter }Codewords}}{19}{chapter.3} \contentsline {section}{\numberline {3.1}\leavevmode {\color {Chapter }Construction of Codewords}}{20}{section.3.1} \contentsline {subsection}{\numberline {3.1.1}\leavevmode {\color {Chapter }Codeword}}{20}{subsection.3.1.1} \contentsline {subsection}{\numberline {3.1.2}\leavevmode {\color {Chapter }CodewordNr}}{21}{subsection.3.1.2} \contentsline {subsection}{\numberline {3.1.3}\leavevmode {\color {Chapter }IsCodeword}}{22}{subsection.3.1.3} \contentsline {section}{\numberline {3.2}\leavevmode {\color {Chapter }Comparisons of Codewords}}{22}{section.3.2} \contentsline {subsection}{\numberline {3.2.1}\leavevmode {\color {Chapter }=}}{22}{subsection.3.2.1} \contentsline {section}{\numberline {3.3}\leavevmode {\color {Chapter }Arithmetic Operations for Codewords}}{23}{section.3.3} \contentsline {subsection}{\numberline {3.3.1}\leavevmode {\color {Chapter }+}}{23}{subsection.3.3.1} \contentsline {subsection}{\numberline {3.3.2}\leavevmode {\color {Chapter }-}}{23}{subsection.3.3.2} \contentsline {subsection}{\numberline {3.3.3}\leavevmode {\color {Chapter }+}}{23}{subsection.3.3.3} \contentsline {section}{\numberline {3.4}\leavevmode {\color {Chapter } Functions that Convert Codewords to Vectors or Polynomials }}{24}{section.3.4} \contentsline {subsection}{\numberline {3.4.1}\leavevmode {\color {Chapter }VectorCodeword}}{24}{subsection.3.4.1} \contentsline {subsection}{\numberline {3.4.2}\leavevmode {\color {Chapter }PolyCodeword}}{24}{subsection.3.4.2} \contentsline {section}{\numberline {3.5}\leavevmode {\color {Chapter } Functions that Change the Display Form of a Codeword }}{25}{section.3.5} \contentsline {subsection}{\numberline {3.5.1}\leavevmode {\color {Chapter }TreatAsVector}}{25}{subsection.3.5.1} \contentsline {subsection}{\numberline {3.5.2}\leavevmode {\color {Chapter }TreatAsPoly}}{25}{subsection.3.5.2} \contentsline {section}{\numberline {3.6}\leavevmode {\color {Chapter } Other Codeword Functions }}{26}{section.3.6} \contentsline {subsection}{\numberline {3.6.1}\leavevmode {\color {Chapter }NullWord}}{26}{subsection.3.6.1} \contentsline {subsection}{\numberline {3.6.2}\leavevmode {\color {Chapter }DistanceCodeword}}{26}{subsection.3.6.2} \contentsline {subsection}{\numberline {3.6.3}\leavevmode {\color {Chapter }Support}}{26}{subsection.3.6.3} \contentsline {subsection}{\numberline {3.6.4}\leavevmode {\color {Chapter }WeightCodeword}}{27}{subsection.3.6.4} \contentsline {chapter}{\numberline {4}\leavevmode {\color {Chapter }Codes}}{28}{chapter.4} \contentsline {section}{\numberline {4.1}\leavevmode {\color {Chapter }Comparisons of Codes}}{30}{section.4.1} \contentsline {subsection}{\numberline {4.1.1}\leavevmode {\color {Chapter }=}}{30}{subsection.4.1.1} \contentsline {section}{\numberline {4.2}\leavevmode {\color {Chapter } Operations for Codes }}{31}{section.4.2} \contentsline {subsection}{\numberline {4.2.1}\leavevmode {\color {Chapter }+}}{31}{subsection.4.2.1} \contentsline {subsection}{\numberline {4.2.2}\leavevmode {\color {Chapter }*}}{31}{subsection.4.2.2} \contentsline {subsection}{\numberline {4.2.3}\leavevmode {\color {Chapter }*}}{31}{subsection.4.2.3} \contentsline {subsection}{\numberline {4.2.4}\leavevmode {\color {Chapter }InformationWord}}{32}{subsection.4.2.4} \contentsline {section}{\numberline {4.3}\leavevmode {\color {Chapter } Boolean Functions for Codes }}{32}{section.4.3} \contentsline {subsection}{\numberline {4.3.1}\leavevmode {\color {Chapter }in}}{32}{subsection.4.3.1} \contentsline {subsection}{\numberline {4.3.2}\leavevmode {\color {Chapter }IsSubset}}{33}{subsection.4.3.2} \contentsline {subsection}{\numberline {4.3.3}\leavevmode {\color {Chapter }IsCode}}{33}{subsection.4.3.3} \contentsline {subsection}{\numberline {4.3.4}\leavevmode {\color {Chapter }IsLinearCode}}{33}{subsection.4.3.4} \contentsline {subsection}{\numberline {4.3.5}\leavevmode {\color {Chapter }IsCyclicCode}}{33}{subsection.4.3.5} \contentsline {subsection}{\numberline {4.3.6}\leavevmode {\color {Chapter }IsPerfectCode}}{34}{subsection.4.3.6} \contentsline {subsection}{\numberline {4.3.7}\leavevmode {\color {Chapter }IsMDSCode}}{34}{subsection.4.3.7} \contentsline {subsection}{\numberline {4.3.8}\leavevmode {\color {Chapter }IsSelfDualCode}}{35}{subsection.4.3.8} \contentsline {subsection}{\numberline {4.3.9}\leavevmode {\color {Chapter }IsSelfOrthogonalCode}}{35}{subsection.4.3.9} \contentsline {subsection}{\numberline {4.3.10}\leavevmode {\color {Chapter }IsDoublyEvenCode}}{35}{subsection.4.3.10} \contentsline {subsection}{\numberline {4.3.11}\leavevmode {\color {Chapter }IsSinglyEvenCode}}{36}{subsection.4.3.11} \contentsline {subsection}{\numberline {4.3.12}\leavevmode {\color {Chapter }IsEvenCode}}{36}{subsection.4.3.12} \contentsline {subsection}{\numberline {4.3.13}\leavevmode {\color {Chapter }IsSelfComplementaryCode}}{37}{subsection.4.3.13} \contentsline {subsection}{\numberline {4.3.14}\leavevmode {\color {Chapter }IsAffineCode}}{37}{subsection.4.3.14} \contentsline {subsection}{\numberline {4.3.15}\leavevmode {\color {Chapter }IsAlmostAffineCode}}{38}{subsection.4.3.15} \contentsline {section}{\numberline {4.4}\leavevmode {\color {Chapter } Equivalence and Isomorphism of Codes }}{38}{section.4.4} \contentsline {subsection}{\numberline {4.4.1}\leavevmode {\color {Chapter }IsEquivalent}}{38}{subsection.4.4.1} \contentsline {subsection}{\numberline {4.4.2}\leavevmode {\color {Chapter }CodeIsomorphism}}{38}{subsection.4.4.2} \contentsline {subsection}{\numberline {4.4.3}\leavevmode {\color {Chapter }AutomorphismGroup}}{39}{subsection.4.4.3} \contentsline {subsection}{\numberline {4.4.4}\leavevmode {\color {Chapter }PermutationAutomorphismGroup}}{40}{subsection.4.4.4} \contentsline {section}{\numberline {4.5}\leavevmode {\color {Chapter } Domain Functions for Codes }}{40}{section.4.5} \contentsline {subsection}{\numberline {4.5.1}\leavevmode {\color {Chapter }IsFinite}}{40}{subsection.4.5.1} \contentsline {subsection}{\numberline {4.5.2}\leavevmode {\color {Chapter }Size}}{40}{subsection.4.5.2} \contentsline {subsection}{\numberline {4.5.3}\leavevmode {\color {Chapter }LeftActingDomain}}{41}{subsection.4.5.3} \contentsline {subsection}{\numberline {4.5.4}\leavevmode {\color {Chapter }Dimension}}{41}{subsection.4.5.4} \contentsline {subsection}{\numberline {4.5.5}\leavevmode {\color {Chapter }AsSSortedList}}{41}{subsection.4.5.5} \contentsline {section}{\numberline {4.6}\leavevmode {\color {Chapter } Printing and Displaying Codes }}{42}{section.4.6} \contentsline {subsection}{\numberline {4.6.1}\leavevmode {\color {Chapter }Print}}{42}{subsection.4.6.1} \contentsline {subsection}{\numberline {4.6.2}\leavevmode {\color {Chapter }String}}{42}{subsection.4.6.2} \contentsline {subsection}{\numberline {4.6.3}\leavevmode {\color {Chapter }Display}}{43}{subsection.4.6.3} \contentsline {subsection}{\numberline {4.6.4}\leavevmode {\color {Chapter }DisplayBoundsInfo}}{43}{subsection.4.6.4} \contentsline {section}{\numberline {4.7}\leavevmode {\color {Chapter } Generating (Check) Matrices and Polynomials }}{44}{section.4.7} \contentsline {subsection}{\numberline {4.7.1}\leavevmode {\color {Chapter }GeneratorMat}}{44}{subsection.4.7.1} \contentsline {subsection}{\numberline {4.7.2}\leavevmode {\color {Chapter }CheckMat}}{44}{subsection.4.7.2} \contentsline {subsection}{\numberline {4.7.3}\leavevmode {\color {Chapter }GeneratorPol}}{45}{subsection.4.7.3} \contentsline {subsection}{\numberline {4.7.4}\leavevmode {\color {Chapter }CheckPol}}{45}{subsection.4.7.4} \contentsline {subsection}{\numberline {4.7.5}\leavevmode {\color {Chapter }RootsOfCode}}{45}{subsection.4.7.5} \contentsline {section}{\numberline {4.8}\leavevmode {\color {Chapter } Parameters of Codes }}{46}{section.4.8} \contentsline {subsection}{\numberline {4.8.1}\leavevmode {\color {Chapter }WordLength}}{46}{subsection.4.8.1} \contentsline {subsection}{\numberline {4.8.2}\leavevmode {\color {Chapter }Redundancy}}{46}{subsection.4.8.2} \contentsline {subsection}{\numberline {4.8.3}\leavevmode {\color {Chapter }MinimumDistance}}{46}{subsection.4.8.3} \contentsline {subsection}{\numberline {4.8.4}\leavevmode {\color {Chapter }MinimumDistanceLeon}}{47}{subsection.4.8.4} \contentsline {subsection}{\numberline {4.8.5}\leavevmode {\color {Chapter }MinimumWeight}}{48}{subsection.4.8.5} \contentsline {subsection}{\numberline {4.8.6}\leavevmode {\color {Chapter }DecreaseMinimumDistanceUpperBound}}{51}{subsection.4.8.6} \contentsline {subsection}{\numberline {4.8.7}\leavevmode {\color {Chapter }MinimumDistanceRandom}}{51}{subsection.4.8.7} \contentsline {subsection}{\numberline {4.8.8}\leavevmode {\color {Chapter }CoveringRadius}}{53}{subsection.4.8.8} \contentsline {subsection}{\numberline {4.8.9}\leavevmode {\color {Chapter }SetCoveringRadius}}{54}{subsection.4.8.9} \contentsline {section}{\numberline {4.9}\leavevmode {\color {Chapter } Distributions }}{54}{section.4.9} \contentsline {subsection}{\numberline {4.9.1}\leavevmode {\color {Chapter }MinimumWeightWords}}{54}{subsection.4.9.1} \contentsline {subsection}{\numberline {4.9.2}\leavevmode {\color {Chapter }WeightDistribution}}{54}{subsection.4.9.2} \contentsline {subsection}{\numberline {4.9.3}\leavevmode {\color {Chapter }InnerDistribution}}{55}{subsection.4.9.3} \contentsline {subsection}{\numberline {4.9.4}\leavevmode {\color {Chapter }DistancesDistribution}}{55}{subsection.4.9.4} \contentsline {subsection}{\numberline {4.9.5}\leavevmode {\color {Chapter }OuterDistribution}}{56}{subsection.4.9.5} \contentsline {section}{\numberline {4.10}\leavevmode {\color {Chapter } Decoding Functions }}{56}{section.4.10} \contentsline {subsection}{\numberline {4.10.1}\leavevmode {\color {Chapter }Decode}}{56}{subsection.4.10.1} \contentsline {subsection}{\numberline {4.10.2}\leavevmode {\color {Chapter }Decodeword}}{57}{subsection.4.10.2} \contentsline {subsection}{\numberline {4.10.3}\leavevmode {\color {Chapter }GeneralizedReedSolomonDecoderGao}}{58}{subsection.4.10.3} \contentsline {subsection}{\numberline {4.10.4}\leavevmode {\color {Chapter }GeneralizedReedSolomonListDecoder}}{58}{subsection.4.10.4} \contentsline {subsection}{\numberline {4.10.5}\leavevmode {\color {Chapter }BitFlipDecoder}}{59}{subsection.4.10.5} \contentsline {subsection}{\numberline {4.10.6}\leavevmode {\color {Chapter }NearestNeighborGRSDecodewords}}{60}{subsection.4.10.6} \contentsline {subsection}{\numberline {4.10.7}\leavevmode {\color {Chapter }NearestNeighborDecodewords}}{60}{subsection.4.10.7} \contentsline {subsection}{\numberline {4.10.8}\leavevmode {\color {Chapter }Syndrome}}{61}{subsection.4.10.8} \contentsline {subsection}{\numberline {4.10.9}\leavevmode {\color {Chapter }SyndromeTable}}{62}{subsection.4.10.9} \contentsline {subsection}{\numberline {4.10.10}\leavevmode {\color {Chapter }StandardArray}}{62}{subsection.4.10.10} \contentsline {subsection}{\numberline {4.10.11}\leavevmode {\color {Chapter }PermutationDecode}}{62}{subsection.4.10.11} \contentsline {subsection}{\numberline {4.10.12}\leavevmode {\color {Chapter }PermutationDecodeNC}}{63}{subsection.4.10.12} \contentsline {chapter}{\numberline {5}\leavevmode {\color {Chapter }Generating Codes}}{64}{chapter.5} \contentsline {section}{\numberline {5.1}\leavevmode {\color {Chapter } Generating Unrestricted Codes }}{64}{section.5.1} \contentsline {subsection}{\numberline {5.1.1}\leavevmode {\color {Chapter }ElementsCode}}{64}{subsection.5.1.1} \contentsline {subsection}{\numberline {5.1.2}\leavevmode {\color {Chapter }HadamardCode}}{65}{subsection.5.1.2} \contentsline {subsection}{\numberline {5.1.3}\leavevmode {\color {Chapter }ConferenceCode}}{65}{subsection.5.1.3} \contentsline {subsection}{\numberline {5.1.4}\leavevmode {\color {Chapter }MOLSCode}}{66}{subsection.5.1.4} \contentsline {subsection}{\numberline {5.1.5}\leavevmode {\color {Chapter }RandomCode}}{67}{subsection.5.1.5} \contentsline {subsection}{\numberline {5.1.6}\leavevmode {\color {Chapter }NordstromRobinsonCode}}{67}{subsection.5.1.6} \contentsline {subsection}{\numberline {5.1.7}\leavevmode {\color {Chapter }GreedyCode}}{67}{subsection.5.1.7} \contentsline {subsection}{\numberline {5.1.8}\leavevmode {\color {Chapter }LexiCode}}{68}{subsection.5.1.8} \contentsline {section}{\numberline {5.2}\leavevmode {\color {Chapter } Generating Linear Codes }}{68}{section.5.2} \contentsline {subsection}{\numberline {5.2.1}\leavevmode {\color {Chapter }GeneratorMatCode}}{68}{subsection.5.2.1} \contentsline {subsection}{\numberline {5.2.2}\leavevmode {\color {Chapter }CheckMatCodeMutable}}{69}{subsection.5.2.2} \contentsline {subsection}{\numberline {5.2.3}\leavevmode {\color {Chapter }CheckMatCode}}{69}{subsection.5.2.3} \contentsline {subsection}{\numberline {5.2.4}\leavevmode {\color {Chapter }HammingCode}}{70}{subsection.5.2.4} \contentsline {subsection}{\numberline {5.2.5}\leavevmode {\color {Chapter }ReedMullerCode}}{70}{subsection.5.2.5} \contentsline {subsection}{\numberline {5.2.6}\leavevmode {\color {Chapter }AlternantCode}}{70}{subsection.5.2.6} \contentsline {subsection}{\numberline {5.2.7}\leavevmode {\color {Chapter }GoppaCode}}{71}{subsection.5.2.7} \contentsline {subsection}{\numberline {5.2.8}\leavevmode {\color {Chapter }GeneralizedSrivastavaCode}}{71}{subsection.5.2.8} \contentsline {subsection}{\numberline {5.2.9}\leavevmode {\color {Chapter }SrivastavaCode}}{72}{subsection.5.2.9} \contentsline {subsection}{\numberline {5.2.10}\leavevmode {\color {Chapter }CordaroWagnerCode}}{72}{subsection.5.2.10} \contentsline {subsection}{\numberline {5.2.11}\leavevmode {\color {Chapter }FerreroDesignCode}}{72}{subsection.5.2.11} \contentsline {subsection}{\numberline {5.2.12}\leavevmode {\color {Chapter }RandomLinearCode}}{73}{subsection.5.2.12} \contentsline {subsection}{\numberline {5.2.13}\leavevmode {\color {Chapter }OptimalityCode}}{74}{subsection.5.2.13} \contentsline {subsection}{\numberline {5.2.14}\leavevmode {\color {Chapter }BestKnownLinearCode}}{74}{subsection.5.2.14} \contentsline {section}{\numberline {5.3}\leavevmode {\color {Chapter } Gabidulin Codes }}{76}{section.5.3} \contentsline {subsection}{\numberline {5.3.1}\leavevmode {\color {Chapter }GabidulinCode}}{76}{subsection.5.3.1} \contentsline {subsection}{\numberline {5.3.2}\leavevmode {\color {Chapter }EnlargedGabidulinCode}}{76}{subsection.5.3.2} \contentsline {subsection}{\numberline {5.3.3}\leavevmode {\color {Chapter }DavydovCode}}{76}{subsection.5.3.3} \contentsline {subsection}{\numberline {5.3.4}\leavevmode {\color {Chapter }TombakCode}}{76}{subsection.5.3.4} \contentsline {subsection}{\numberline {5.3.5}\leavevmode {\color {Chapter }EnlargedTombakCode}}{76}{subsection.5.3.5} \contentsline {section}{\numberline {5.4}\leavevmode {\color {Chapter } Golay Codes }}{77}{section.5.4} \contentsline {subsection}{\numberline {5.4.1}\leavevmode {\color {Chapter }BinaryGolayCode}}{77}{subsection.5.4.1} \contentsline {subsection}{\numberline {5.4.2}\leavevmode {\color {Chapter }ExtendedBinaryGolayCode}}{77}{subsection.5.4.2} \contentsline {subsection}{\numberline {5.4.3}\leavevmode {\color {Chapter }TernaryGolayCode}}{78}{subsection.5.4.3} \contentsline {subsection}{\numberline {5.4.4}\leavevmode {\color {Chapter }ExtendedTernaryGolayCode}}{78}{subsection.5.4.4} \contentsline {section}{\numberline {5.5}\leavevmode {\color {Chapter } Generating Cyclic Codes }}{78}{section.5.5} \contentsline {subsection}{\numberline {5.5.1}\leavevmode {\color {Chapter }GeneratorPolCode}}{79}{subsection.5.5.1} \contentsline {subsection}{\numberline {5.5.2}\leavevmode {\color {Chapter }CheckPolCode}}{80}{subsection.5.5.2} \contentsline {subsection}{\numberline {5.5.3}\leavevmode {\color {Chapter }RootsCode}}{80}{subsection.5.5.3} \contentsline {subsection}{\numberline {5.5.4}\leavevmode {\color {Chapter }BCHCode}}{81}{subsection.5.5.4} \contentsline {subsection}{\numberline {5.5.5}\leavevmode {\color {Chapter }ReedSolomonCode}}{82}{subsection.5.5.5} \contentsline {subsection}{\numberline {5.5.6}\leavevmode {\color {Chapter }ExtendedReedSolomonCode}}{82}{subsection.5.5.6} \contentsline {subsection}{\numberline {5.5.7}\leavevmode {\color {Chapter }QRCode}}{82}{subsection.5.5.7} \contentsline {subsection}{\numberline {5.5.8}\leavevmode {\color {Chapter }QQRCodeNC}}{83}{subsection.5.5.8} \contentsline {subsection}{\numberline {5.5.9}\leavevmode {\color {Chapter }QQRCode}}{83}{subsection.5.5.9} \contentsline {subsection}{\numberline {5.5.10}\leavevmode {\color {Chapter }FireCode}}{84}{subsection.5.5.10} \contentsline {subsection}{\numberline {5.5.11}\leavevmode {\color {Chapter }WholeSpaceCode}}{84}{subsection.5.5.11} \contentsline {subsection}{\numberline {5.5.12}\leavevmode {\color {Chapter }NullCode}}{85}{subsection.5.5.12} \contentsline {subsection}{\numberline {5.5.13}\leavevmode {\color {Chapter }RepetitionCode}}{85}{subsection.5.5.13} \contentsline {subsection}{\numberline {5.5.14}\leavevmode {\color {Chapter }CyclicCodes}}{85}{subsection.5.5.14} \contentsline {subsection}{\numberline {5.5.15}\leavevmode {\color {Chapter }NrCyclicCodes}}{85}{subsection.5.5.15} \contentsline {subsection}{\numberline {5.5.16}\leavevmode {\color {Chapter }QuasiCyclicCode}}{86}{subsection.5.5.16} \contentsline {subsection}{\numberline {5.5.17}\leavevmode {\color {Chapter }CyclicMDSCode}}{87}{subsection.5.5.17} \contentsline {subsection}{\numberline {5.5.18}\leavevmode {\color {Chapter }FourNegacirculantSelfDualCode}}{88}{subsection.5.5.18} \contentsline {subsection}{\numberline {5.5.19}\leavevmode {\color {Chapter }FourNegacirculantSelfDualCodeNC}}{89}{subsection.5.5.19} \contentsline {section}{\numberline {5.6}\leavevmode {\color {Chapter } Evaluation Codes }}{89}{section.5.6} \contentsline {subsection}{\numberline {5.6.1}\leavevmode {\color {Chapter }EvaluationCode}}{89}{subsection.5.6.1} \contentsline {subsection}{\numberline {5.6.2}\leavevmode {\color {Chapter }GeneralizedReedSolomonCode}}{89}{subsection.5.6.2} \contentsline {subsection}{\numberline {5.6.3}\leavevmode {\color {Chapter }GeneralizedReedMullerCode}}{90}{subsection.5.6.3} \contentsline {subsection}{\numberline {5.6.4}\leavevmode {\color {Chapter }ToricPoints}}{91}{subsection.5.6.4} \contentsline {subsection}{\numberline {5.6.5}\leavevmode {\color {Chapter }ToricCode}}{91}{subsection.5.6.5} \contentsline {section}{\numberline {5.7}\leavevmode {\color {Chapter } Algebraic geometric codes }}{92}{section.5.7} \contentsline {subsection}{\numberline {5.7.1}\leavevmode {\color {Chapter }AffineCurve}}{92}{subsection.5.7.1} \contentsline {subsection}{\numberline {5.7.2}\leavevmode {\color {Chapter }AffinePointsOnCurve}}{93}{subsection.5.7.2} \contentsline {subsection}{\numberline {5.7.3}\leavevmode {\color {Chapter }GenusCurve}}{93}{subsection.5.7.3} \contentsline {subsection}{\numberline {5.7.4}\leavevmode {\color {Chapter }GOrbitPoint }}{93}{subsection.5.7.4} \contentsline {subsection}{\numberline {5.7.5}\leavevmode {\color {Chapter }DivisorOnAffineCurve}}{95}{subsection.5.7.5} \contentsline {subsection}{\numberline {5.7.6}\leavevmode {\color {Chapter }DivisorAddition }}{95}{subsection.5.7.6} \contentsline {subsection}{\numberline {5.7.7}\leavevmode {\color {Chapter }DivisorDegree }}{95}{subsection.5.7.7} \contentsline {subsection}{\numberline {5.7.8}\leavevmode {\color {Chapter }DivisorNegate }}{96}{subsection.5.7.8} \contentsline {subsection}{\numberline {5.7.9}\leavevmode {\color {Chapter }DivisorIsZero }}{96}{subsection.5.7.9} \contentsline {subsection}{\numberline {5.7.10}\leavevmode {\color {Chapter }DivisorsEqual }}{96}{subsection.5.7.10} \contentsline {subsection}{\numberline {5.7.11}\leavevmode {\color {Chapter }DivisorGCD }}{96}{subsection.5.7.11} \contentsline {subsection}{\numberline {5.7.12}\leavevmode {\color {Chapter }DivisorLCM }}{96}{subsection.5.7.12} \contentsline {subsection}{\numberline {5.7.13}\leavevmode {\color {Chapter }RiemannRochSpaceBasisFunctionP1 }}{98}{subsection.5.7.13} \contentsline {subsection}{\numberline {5.7.14}\leavevmode {\color {Chapter }DivisorOfRationalFunctionP1 }}{98}{subsection.5.7.14} \contentsline {subsection}{\numberline {5.7.15}\leavevmode {\color {Chapter }RiemannRochSpaceBasisP1 }}{99}{subsection.5.7.15} \contentsline {subsection}{\numberline {5.7.16}\leavevmode {\color {Chapter }MoebiusTransformation }}{100}{subsection.5.7.16} \contentsline {subsection}{\numberline {5.7.17}\leavevmode {\color {Chapter }ActionMoebiusTransformationOnFunction }}{100}{subsection.5.7.17} \contentsline {subsection}{\numberline {5.7.18}\leavevmode {\color {Chapter }ActionMoebiusTransformationOnDivisorP1 }}{100}{subsection.5.7.18} \contentsline {subsection}{\numberline {5.7.19}\leavevmode {\color {Chapter }IsActionMoebiusTransformationOnDivisorDefinedP1 }}{100}{subsection.5.7.19} \contentsline {subsection}{\numberline {5.7.20}\leavevmode {\color {Chapter }DivisorAutomorphismGroupP1 }}{101}{subsection.5.7.20} \contentsline {subsection}{\numberline {5.7.21}\leavevmode {\color {Chapter }MatrixRepresentationOnRiemannRochSpaceP1 }}{102}{subsection.5.7.21} \contentsline {subsection}{\numberline {5.7.22}\leavevmode {\color {Chapter }GoppaCodeClassical}}{103}{subsection.5.7.22} \contentsline {subsection}{\numberline {5.7.23}\leavevmode {\color {Chapter }EvaluationBivariateCode}}{103}{subsection.5.7.23} \contentsline {subsection}{\numberline {5.7.24}\leavevmode {\color {Chapter }EvaluationBivariateCodeNC}}{103}{subsection.5.7.24} \contentsline {subsection}{\numberline {5.7.25}\leavevmode {\color {Chapter }OnePointAGCode}}{104}{subsection.5.7.25} \contentsline {section}{\numberline {5.8}\leavevmode {\color {Chapter } Low-Density Parity-Check Codes }}{105}{section.5.8} \contentsline {subsection}{\numberline {5.8.1}\leavevmode {\color {Chapter }QCLDPCCodeFromGroup}}{106}{subsection.5.8.1} \contentsline {chapter}{\numberline {6}\leavevmode {\color {Chapter }Manipulating Codes}}{108}{chapter.6} \contentsline {section}{\numberline {6.1}\leavevmode {\color {Chapter } Functions that Generate a New Code from a Given Code }}{108}{section.6.1} \contentsline {subsection}{\numberline {6.1.1}\leavevmode {\color {Chapter }ExtendedCode}}{108}{subsection.6.1.1} \contentsline {subsection}{\numberline {6.1.2}\leavevmode {\color {Chapter }PuncturedCode}}{109}{subsection.6.1.2} \contentsline {subsection}{\numberline {6.1.3}\leavevmode {\color {Chapter }EvenWeightSubcode}}{109}{subsection.6.1.3} \contentsline {subsection}{\numberline {6.1.4}\leavevmode {\color {Chapter }PermutedCode}}{110}{subsection.6.1.4} \contentsline {subsection}{\numberline {6.1.5}\leavevmode {\color {Chapter }ExpurgatedCode}}{110}{subsection.6.1.5} \contentsline {subsection}{\numberline {6.1.6}\leavevmode {\color {Chapter }AugmentedCode}}{111}{subsection.6.1.6} \contentsline {subsection}{\numberline {6.1.7}\leavevmode {\color {Chapter }RemovedElementsCode}}{111}{subsection.6.1.7} \contentsline {subsection}{\numberline {6.1.8}\leavevmode {\color {Chapter }AddedElementsCode}}{112}{subsection.6.1.8} \contentsline {subsection}{\numberline {6.1.9}\leavevmode {\color {Chapter }ShortenedCode}}{112}{subsection.6.1.9} \contentsline {subsection}{\numberline {6.1.10}\leavevmode {\color {Chapter }LengthenedCode}}{113}{subsection.6.1.10} \contentsline {subsection}{\numberline {6.1.11}\leavevmode {\color {Chapter }SubCode}}{114}{subsection.6.1.11} \contentsline {subsection}{\numberline {6.1.12}\leavevmode {\color {Chapter }ResidueCode}}{114}{subsection.6.1.12} \contentsline {subsection}{\numberline {6.1.13}\leavevmode {\color {Chapter }ConstructionBCode}}{114}{subsection.6.1.13} \contentsline {subsection}{\numberline {6.1.14}\leavevmode {\color {Chapter }DualCode}}{115}{subsection.6.1.14} \contentsline {subsection}{\numberline {6.1.15}\leavevmode {\color {Chapter }ConversionFieldCode}}{116}{subsection.6.1.15} \contentsline {subsection}{\numberline {6.1.16}\leavevmode {\color {Chapter }TraceCode}}{116}{subsection.6.1.16} \contentsline {subsection}{\numberline {6.1.17}\leavevmode {\color {Chapter }CosetCode}}{116}{subsection.6.1.17} \contentsline {subsection}{\numberline {6.1.18}\leavevmode {\color {Chapter }ConstantWeightSubcode}}{117}{subsection.6.1.18} \contentsline {subsection}{\numberline {6.1.19}\leavevmode {\color {Chapter }StandardFormCode}}{117}{subsection.6.1.19} \contentsline {subsection}{\numberline {6.1.20}\leavevmode {\color {Chapter }PiecewiseConstantCode}}{118}{subsection.6.1.20} \contentsline {section}{\numberline {6.2}\leavevmode {\color {Chapter } Functions that Generate a New Code from Two or More Given Codes }}{119}{section.6.2} \contentsline {subsection}{\numberline {6.2.1}\leavevmode {\color {Chapter }DirectSumCode}}{119}{subsection.6.2.1} \contentsline {subsection}{\numberline {6.2.2}\leavevmode {\color {Chapter }UUVCode}}{119}{subsection.6.2.2} \contentsline {subsection}{\numberline {6.2.3}\leavevmode {\color {Chapter }DirectProductCode}}{119}{subsection.6.2.3} \contentsline {subsection}{\numberline {6.2.4}\leavevmode {\color {Chapter }IntersectionCode}}{120}{subsection.6.2.4} \contentsline {subsection}{\numberline {6.2.5}\leavevmode {\color {Chapter }UnionCode}}{120}{subsection.6.2.5} \contentsline {subsection}{\numberline {6.2.6}\leavevmode {\color {Chapter }ExtendedDirectSumCode}}{121}{subsection.6.2.6} \contentsline {subsection}{\numberline {6.2.7}\leavevmode {\color {Chapter }AmalgamatedDirectSumCode}}{121}{subsection.6.2.7} \contentsline {subsection}{\numberline {6.2.8}\leavevmode {\color {Chapter }BlockwiseDirectSumCode}}{122}{subsection.6.2.8} \contentsline {subsection}{\numberline {6.2.9}\leavevmode {\color {Chapter }ConstructionXCode}}{122}{subsection.6.2.9} \contentsline {subsection}{\numberline {6.2.10}\leavevmode {\color {Chapter }ConstructionXXCode}}{123}{subsection.6.2.10} \contentsline {subsection}{\numberline {6.2.11}\leavevmode {\color {Chapter }BZCode}}{124}{subsection.6.2.11} \contentsline {subsection}{\numberline {6.2.12}\leavevmode {\color {Chapter }BZCodeNC}}{125}{subsection.6.2.12} \contentsline {chapter}{\numberline {7}\leavevmode {\color {Chapter } Bounds on codes, special matrices and miscellaneous functions }}{126}{chapter.7} \contentsline {section}{\numberline {7.1}\leavevmode {\color {Chapter } Distance bounds on codes }}{126}{section.7.1} \contentsline {subsection}{\numberline {7.1.1}\leavevmode {\color {Chapter }UpperBoundSingleton}}{127}{subsection.7.1.1} \contentsline {subsection}{\numberline {7.1.2}\leavevmode {\color {Chapter }UpperBoundHamming}}{127}{subsection.7.1.2} \contentsline {subsection}{\numberline {7.1.3}\leavevmode {\color {Chapter }UpperBoundJohnson}}{127}{subsection.7.1.3} \contentsline {subsection}{\numberline {7.1.4}\leavevmode {\color {Chapter }UpperBoundPlotkin}}{128}{subsection.7.1.4} \contentsline {subsection}{\numberline {7.1.5}\leavevmode {\color {Chapter }UpperBoundElias}}{128}{subsection.7.1.5} \contentsline {subsection}{\numberline {7.1.6}\leavevmode {\color {Chapter }UpperBoundGriesmer}}{129}{subsection.7.1.6} \contentsline {subsection}{\numberline {7.1.7}\leavevmode {\color {Chapter }IsGriesmerCode}}{129}{subsection.7.1.7} \contentsline {subsection}{\numberline {7.1.8}\leavevmode {\color {Chapter }UpperBound}}{129}{subsection.7.1.8} \contentsline {subsection}{\numberline {7.1.9}\leavevmode {\color {Chapter }LowerBoundMinimumDistance}}{130}{subsection.7.1.9} \contentsline {subsection}{\numberline {7.1.10}\leavevmode {\color {Chapter }LowerBoundGilbertVarshamov}}{130}{subsection.7.1.10} \contentsline {subsection}{\numberline {7.1.11}\leavevmode {\color {Chapter }LowerBoundSpherePacking}}{130}{subsection.7.1.11} \contentsline {subsection}{\numberline {7.1.12}\leavevmode {\color {Chapter }UpperBoundMinimumDistance}}{131}{subsection.7.1.12} \contentsline {subsection}{\numberline {7.1.13}\leavevmode {\color {Chapter }BoundsMinimumDistance}}{131}{subsection.7.1.13} \contentsline {section}{\numberline {7.2}\leavevmode {\color {Chapter } Covering radius bounds on codes }}{132}{section.7.2} \contentsline {subsection}{\numberline {7.2.1}\leavevmode {\color {Chapter }BoundsCoveringRadius}}{132}{subsection.7.2.1} \contentsline {subsection}{\numberline {7.2.2}\leavevmode {\color {Chapter }IncreaseCoveringRadiusLowerBound}}{132}{subsection.7.2.2} \contentsline {subsection}{\numberline {7.2.3}\leavevmode {\color {Chapter }ExhaustiveSearchCoveringRadius}}{133}{subsection.7.2.3} \contentsline {subsection}{\numberline {7.2.4}\leavevmode {\color {Chapter }GeneralLowerBoundCoveringRadius}}{134}{subsection.7.2.4} \contentsline {subsection}{\numberline {7.2.5}\leavevmode {\color {Chapter }GeneralUpperBoundCoveringRadius}}{134}{subsection.7.2.5} \contentsline {subsection}{\numberline {7.2.6}\leavevmode {\color {Chapter }LowerBoundCoveringRadiusSphereCovering}}{135}{subsection.7.2.6} \contentsline {subsection}{\numberline {7.2.7}\leavevmode {\color {Chapter }LowerBoundCoveringRadiusVanWee1}}{135}{subsection.7.2.7} \contentsline {subsection}{\numberline {7.2.8}\leavevmode {\color {Chapter }LowerBoundCoveringRadiusVanWee2}}{136}{subsection.7.2.8} \contentsline {subsection}{\numberline {7.2.9}\leavevmode {\color {Chapter }LowerBoundCoveringRadiusCountingExcess}}{136}{subsection.7.2.9} \contentsline {subsection}{\numberline {7.2.10}\leavevmode {\color {Chapter }LowerBoundCoveringRadiusEmbedded1}}{137}{subsection.7.2.10} \contentsline {subsection}{\numberline {7.2.11}\leavevmode {\color {Chapter }LowerBoundCoveringRadiusEmbedded2}}{137}{subsection.7.2.11} \contentsline {subsection}{\numberline {7.2.12}\leavevmode {\color {Chapter }LowerBoundCoveringRadiusInduction}}{138}{subsection.7.2.12} \contentsline {subsection}{\numberline {7.2.13}\leavevmode {\color {Chapter }UpperBoundCoveringRadiusRedundancy}}{138}{subsection.7.2.13} \contentsline {subsection}{\numberline {7.2.14}\leavevmode {\color {Chapter }UpperBoundCoveringRadiusDelsarte}}{139}{subsection.7.2.14} \contentsline {subsection}{\numberline {7.2.15}\leavevmode {\color {Chapter }UpperBoundCoveringRadiusStrength}}{139}{subsection.7.2.15} \contentsline {subsection}{\numberline {7.2.16}\leavevmode {\color {Chapter }UpperBoundCoveringRadiusGriesmerLike}}{139}{subsection.7.2.16} \contentsline {subsection}{\numberline {7.2.17}\leavevmode {\color {Chapter }UpperBoundCoveringRadiusCyclicCode}}{140}{subsection.7.2.17} \contentsline {section}{\numberline {7.3}\leavevmode {\color {Chapter } Special matrices in \textsf {GUAVA} }}{140}{section.7.3} \contentsline {subsection}{\numberline {7.3.1}\leavevmode {\color {Chapter }KrawtchoukMat}}{141}{subsection.7.3.1} \contentsline {subsection}{\numberline {7.3.2}\leavevmode {\color {Chapter }GrayMat}}{141}{subsection.7.3.2} \contentsline {subsection}{\numberline {7.3.3}\leavevmode {\color {Chapter }SylvesterMat}}{141}{subsection.7.3.3} \contentsline {subsection}{\numberline {7.3.4}\leavevmode {\color {Chapter }HadamardMat}}{142}{subsection.7.3.4} \contentsline {subsection}{\numberline {7.3.5}\leavevmode {\color {Chapter }VandermondeMat}}{142}{subsection.7.3.5} \contentsline {subsection}{\numberline {7.3.6}\leavevmode {\color {Chapter }PutStandardForm}}{143}{subsection.7.3.6} \contentsline {subsection}{\numberline {7.3.7}\leavevmode {\color {Chapter }IsInStandardForm}}{144}{subsection.7.3.7} \contentsline {subsection}{\numberline {7.3.8}\leavevmode {\color {Chapter }PermutedCols}}{144}{subsection.7.3.8} \contentsline {subsection}{\numberline {7.3.9}\leavevmode {\color {Chapter }VerticalConversionFieldMat}}{144}{subsection.7.3.9} \contentsline {subsection}{\numberline {7.3.10}\leavevmode {\color {Chapter }HorizontalConversionFieldMat}}{145}{subsection.7.3.10} \contentsline {subsection}{\numberline {7.3.11}\leavevmode {\color {Chapter }MOLS}}{145}{subsection.7.3.11} \contentsline {subsection}{\numberline {7.3.12}\leavevmode {\color {Chapter }IsLatinSquare}}{146}{subsection.7.3.12} \contentsline {subsection}{\numberline {7.3.13}\leavevmode {\color {Chapter }AreMOLS}}{146}{subsection.7.3.13} \contentsline {section}{\numberline {7.4}\leavevmode {\color {Chapter } Some functions related to the norm of a code }}{147}{section.7.4} \contentsline {subsection}{\numberline {7.4.1}\leavevmode {\color {Chapter }CoordinateNorm}}{147}{subsection.7.4.1} \contentsline {subsection}{\numberline {7.4.2}\leavevmode {\color {Chapter }CodeNorm}}{147}{subsection.7.4.2} \contentsline {subsection}{\numberline {7.4.3}\leavevmode {\color {Chapter }IsCoordinateAcceptable}}{147}{subsection.7.4.3} \contentsline {subsection}{\numberline {7.4.4}\leavevmode {\color {Chapter }GeneralizedCodeNorm}}{148}{subsection.7.4.4} \contentsline {subsection}{\numberline {7.4.5}\leavevmode {\color {Chapter }IsNormalCode}}{148}{subsection.7.4.5} \contentsline {section}{\numberline {7.5}\leavevmode {\color {Chapter } Miscellaneous functions }}{148}{section.7.5} \contentsline {subsection}{\numberline {7.5.1}\leavevmode {\color {Chapter }CodeWeightEnumerator}}{148}{subsection.7.5.1} \contentsline {subsection}{\numberline {7.5.2}\leavevmode {\color {Chapter }CodeDistanceEnumerator}}{149}{subsection.7.5.2} \contentsline {subsection}{\numberline {7.5.3}\leavevmode {\color {Chapter }CodeMacWilliamsTransform}}{149}{subsection.7.5.3} \contentsline {subsection}{\numberline {7.5.4}\leavevmode {\color {Chapter }CodeDensity}}{149}{subsection.7.5.4} \contentsline {subsection}{\numberline {7.5.5}\leavevmode {\color {Chapter }SphereContent}}{150}{subsection.7.5.5} \contentsline {subsection}{\numberline {7.5.6}\leavevmode {\color {Chapter }Krawtchouk}}{150}{subsection.7.5.6} \contentsline {subsection}{\numberline {7.5.7}\leavevmode {\color {Chapter }PrimitiveUnityRoot}}{150}{subsection.7.5.7} \contentsline {subsection}{\numberline {7.5.8}\leavevmode {\color {Chapter }PrimitivePolynomialsNr}}{151}{subsection.7.5.8} \contentsline {subsection}{\numberline {7.5.9}\leavevmode {\color {Chapter }IrreduciblePolynomialsNr}}{151}{subsection.7.5.9} \contentsline {subsection}{\numberline {7.5.10}\leavevmode {\color {Chapter }MatrixRepresentationOfElement}}{151}{subsection.7.5.10} \contentsline {subsection}{\numberline {7.5.11}\leavevmode {\color {Chapter }ReciprocalPolynomial}}{152}{subsection.7.5.11} \contentsline {subsection}{\numberline {7.5.12}\leavevmode {\color {Chapter }CyclotomicCosets}}{152}{subsection.7.5.12} \contentsline {subsection}{\numberline {7.5.13}\leavevmode {\color {Chapter }WeightHistogram}}{153}{subsection.7.5.13} \contentsline {subsection}{\numberline {7.5.14}\leavevmode {\color {Chapter }MultiplicityInList}}{153}{subsection.7.5.14} \contentsline {subsection}{\numberline {7.5.15}\leavevmode {\color {Chapter }MostCommonInList}}{153}{subsection.7.5.15} \contentsline {subsection}{\numberline {7.5.16}\leavevmode {\color {Chapter }RotateList}}{154}{subsection.7.5.16} \contentsline {subsection}{\numberline {7.5.17}\leavevmode {\color {Chapter }CirculantMatrix}}{154}{subsection.7.5.17} \contentsline {section}{\numberline {7.6}\leavevmode {\color {Chapter } Miscellaneous polynomial functions }}{154}{section.7.6} \contentsline {subsection}{\numberline {7.6.1}\leavevmode {\color {Chapter }MatrixTransformationOnMultivariatePolynomial }}{154}{subsection.7.6.1} \contentsline {subsection}{\numberline {7.6.2}\leavevmode {\color {Chapter }DegreeMultivariatePolynomial}}{154}{subsection.7.6.2} \contentsline {subsection}{\numberline {7.6.3}\leavevmode {\color {Chapter }DegreesMultivariatePolynomial}}{155}{subsection.7.6.3} \contentsline {subsection}{\numberline {7.6.4}\leavevmode {\color {Chapter }CoefficientMultivariatePolynomial}}{155}{subsection.7.6.4} \contentsline {subsection}{\numberline {7.6.5}\leavevmode {\color {Chapter }SolveLinearSystem}}{156}{subsection.7.6.5} \contentsline {subsection}{\numberline {7.6.6}\leavevmode {\color {Chapter }GuavaVersion}}{156}{subsection.7.6.6} \contentsline {subsection}{\numberline {7.6.7}\leavevmode {\color {Chapter }ZechLog}}{156}{subsection.7.6.7} \contentsline {subsection}{\numberline {7.6.8}\leavevmode {\color {Chapter }CoefficientToPolynomial}}{157}{subsection.7.6.8} \contentsline {subsection}{\numberline {7.6.9}\leavevmode {\color {Chapter }DegreesMonomialTerm}}{157}{subsection.7.6.9} \contentsline {subsection}{\numberline {7.6.10}\leavevmode {\color {Chapter }DivisorsMultivariatePolynomial}}{158}{subsection.7.6.10} \contentsline {section}{\numberline {7.7}\leavevmode {\color {Chapter } GNU Free Documentation License }}{158}{section.7.7} guava-3.6/doc/manual.blg0000644017361200001450000000207011026723452015053 0ustar tabbottcrontabThis is BibTeX, Version 0.99c (Web2C 7.4.5) The top-level auxiliary file: manual.aux The style file: alpha.bst I couldn't open database file ../../../doc/mrabbrev.bib ---line 2 of file manual.aux : \bibdata{./manual,../../../doc/mrabbrev : ,../../../doc/manual} I'm skipping whatever remains of this command Database file #1: ./manual.bib You've used 6 entries, 2543 wiz_defined-function locations, 597 strings with 5241 characters, and the built_in function-call counts, 2127 in all, are: = -- 209 > -- 87 < -- 3 + -- 29 - -- 27 * -- 144 := -- 368 add.period$ -- 18 call.type$ -- 6 change.case$ -- 32 chr.to.int$ -- 6 cite$ -- 6 duplicate$ -- 88 empty$ -- 161 format.name$ -- 36 if$ -- 421 int.to.chr$ -- 1 int.to.str$ -- 0 missing$ -- 8 newline$ -- 33 num.names$ -- 18 pop$ -- 33 preamble$ -- 1 purify$ -- 40 quote$ -- 0 skip$ -- 67 stack$ -- 0 substring$ -- 125 swap$ -- 6 text.length$ -- 3 text.prefix$ -- 3 top$ -- 0 type$ -- 40 warning$ -- 0 while$ -- 21 width$ -- 10 write$ -- 77 (There was 1 error message) guava-3.6/doc/chap0.html0000644017361200001450000015173011027015742014776 0ustar tabbottcrontab GAP (guava) - Contents
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

GUAVA

A GAP4 Package for computing with error-correcting codes  

Version 3.6

June 20, 2008

Jasper Cramwinckel

Erik Roijackers

Reinald Baart

Eric Minkes, Lea Ruscio

Robert L Miller,
e-mail: rlm@robertlmiller.com

Tom Boothby

Cen (``CJ'') Tjhai
e-mail: cen.tjhai@plymouth.ac.uk
WWW: http://www.plymouth.ac.uk/staff/ctjhai

David Joyner (Maintainer),
e-mail: wdjoyner@gmail.com
WWW: http://sage.math.washington.edu/home/wdj/guava/

Copyright

GUAVA: © The GUAVA Group: 1992-2003 Jasper Cramwinckel, Erik Roijackers,Reinald Baart, Eric Minkes, Lea Ruscio (for the tex version), Jeffrey Leon © 2004 David Joyner, Cen Tjhai, Jasper Cramwinckel, Erik Roijackers, Reinald Baart, Eric Minkes, Lea Ruscio. © 2007 Robert L Miller, Tom Boothby

GUAVA is released under the GNU General Public License (GPL).

GUAVA is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

GUAVA 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 GUAVA; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

For more details, see http://www.fsf.org/licenses/gpl.html.

For many years GUAVA has been released along with the ``backtracking'' C programs of J. Leon. In one of his *.c files the following statements occur: ``Copyright (C) 1992 by Jeffrey S. Leon. This software may be used freely for educational and research purposes. Any other use requires permission from the author.'' The following should now be appended: ``I, Jeffrey S. Leon, agree to license all the partition backtrack code which I have written under the GPL (www.fsf.org) as of this date, April 17, 2007.''

GUAVA documentation: © Jasper Cramwinckel, Erik Roijackers,Reinald Baart, Eric Minkes, Lea Ruscio (for the tex version), David Joyner, Cen Tjhai, Jasper Cramwinckel, Erik Roijackers, Reinald Baart, Eric Minkes, Lea Ruscio. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".

Acknowledgements

GUAVA was originally written by Jasper Cramwinckel, Erik Roijackers, and Reinald Baart in the early-to-mid 1990's as a final project during their study of Mathematics at the Delft University of Technology, Department of Pure Mathematics, under the direction of Professor Juriaan Simonis. This work was continued in Aachen, at Lehrstuhl D fur Mathematik. In version 1.3, new functions were added by Eric Minkes, also from Delft University of Technology.

JC, ER and RB would like to thank the GAP people at the RWTH Aachen for their support, A.E. Brouwer for his advice and J. Simonis for his supervision.

The GAP 4 version of GUAVA (versions 1.4 and 1.5) was created by Lea Ruscio and (since 2001, starting with version 1.6) is currently maintained by David Joyner, who (with the help of several students) has added several new functions. Starting with version 2.7, the ``best linear code'' tables have been updated. For further details, see the CHANGES file in the GUAVA directory, also available at http://sage.math.washington.edu/home/wdj/guava/CHANGES.guava.

This documentation was prepared with the GAPDoc package of Frank Lübeck and Max Neunhöffer. The conversion from TeX to GAPDoc's XML was done by David Joyner in 2004.

Please send bug reports, suggestions and other comments about GUAVA to support@gap-system.org. Currently known bugs and suggested GUAVA projects are listed on the bugs and projects web page http://sage.math.washington.edu/home/wdj/guava/guava2do.html. Older releases and further history can be found on the GUAVA web page http://sage.math.washington.edu/home/wdj/guava/.

Contributors: Other than the authors listed on the title page, the following people have contributed code to the GUAVA project: Alexander Hulpke, Steve Linton, Frank Lübeck, Aron Foster, Wayne Irons, Clifton (Clipper) Lennon, Jason McGowan, Shuhong Gao, Greg Gamble.

For documentation on Leon's programs, see the src/leon/doc subdirectory of GUAVA.

Contents

4. Codes
5. Generating Codes
7. Bounds on codes, special matrices and miscellaneous functions

Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

generated by GAPDoc2HTML

guava-3.6/doc/chap7.html0000644017361200001450000037417211027015742015014 0ustar tabbottcrontab GAP (guava) - Chapter 7: Bounds on codes, special matrices and miscellaneous functions
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

7. Bounds on codes, special matrices and miscellaneous functions

7. Bounds on codes, special matrices and miscellaneous functions

In this chapter we describe functions that determine bounds on the size and minimum distance of codes (Section 7.1), functions that determine bounds on the size and covering radius of codes (Section 7.2), functions that work with special matrices GUAVA needs for several codes (see Section 7.3), and constructing codes or performing calculations with codes (see Section 7.5).

7.1 Distance bounds on codes

This section describes the functions that calculate estimates for upper bounds on the size and minimum distance of codes. Several algorithms are known to compute a largest number of words a code can have with given length and minimum distance. It is important however to understand that in some cases the true upper bound is unknown. A code which has a size equalto the calculated upper bound may not have been found. However, codes that have a larger size do not exist.

A second way to obtain bounds is a table. In GUAVA, an extensive table is implemented for linear codes over GF(2), GF(3) and GF(4). It contains bounds on the minimum distance for given word length and dimension. It contains entries for word lengths less than or equal to 257, 243 and 256 for codes over GF(2), GF(3) and GF(4) respectively. These entries were obtained from Brouwer's tables as of 11 May 2006. For the latest information, please see A. E. Brouwer's tables [Bro06] on the internet.

Firstly, we describe functions that compute specific upper bounds on the code size (see UpperBoundSingleton (7.1-1), UpperBoundHamming (7.1-2), UpperBoundJohnson (7.1-3), UpperBoundPlotkin (7.1-4), UpperBoundElias (7.1-5) and UpperBoundGriesmer (7.1-6)).

Next we describe a function that computes GUAVA's best upper bound on the code size (see UpperBound (7.1-8)).

Then we describe two functions that compute a lower and upper bound on the minimum distance of a code (see LowerBoundMinimumDistance (7.1-9) and UpperBoundMinimumDistance (7.1-12)).

Finally, we describe a function that returns a lower and upper bound on the minimum distance with given parameters and a description of how the bounds were obtained (see BoundsMinimumDistance (7.1-13)).

7.1-1 UpperBoundSingleton
> UpperBoundSingleton( n, d, q )( function )

UpperBoundSingleton returns the Singleton bound for a code of length n, minimum distance d over a field of size q. This bound is based on the shortening of codes. By shortening an (n, M, d) code d-1 times, an (n-d+1,M,1) code results, with M <= q^n-d+1 (see ShortenedCode (6.1-9)). Thus

M \leq q^{n-d+1}.

Codes that meet this bound are called maximum distance separable (see IsMDSCode (4.3-7)).

gap> UpperBoundSingleton(4, 3, 5);
25
gap> C := ReedSolomonCode(4,3);; Size(C);
25
gap> IsMDSCode(C);
true 

7.1-2 UpperBoundHamming
> UpperBoundHamming( n, d, q )( function )

The Hamming bound (also known as the sphere packing bound) returns an upper bound on the size of a code of length n, minimum distance d, over a field of size q. The Hamming bound is obtained by dividing the contents of the entire space GF(q)^n by the contents of a ball with radius lfloor(d-1) / 2rfloor. As all these balls are disjoint, they can never contain more than the whole vector space.

M \leq {q^n \over V(n,e)},

where M is the maxmimum number of codewords and V(n,e) is equal to the contents of a ball of radius e (see SphereContent (7.5-5)). This bound is useful for small values of d. Codes for which equality holds are called perfect (see IsPerfectCode (4.3-6)).

gap> UpperBoundHamming( 15, 3, 2 );
2048
gap> C := HammingCode( 4, GF(2) );
a linear [15,11,3]1 Hamming (4,2) code over GF(2)
gap> Size( C );
2048 

7.1-3 UpperBoundJohnson
> UpperBoundJohnson( n, d )( function )

The Johnson bound is an improved version of the Hamming bound (see UpperBoundHamming (7.1-2)). In addition to the Hamming bound, it takes into account the elements of the space outside the balls of radius e around the elements of the code. The Johnson bound only works for binary codes.

gap> UpperBoundJohnson( 13, 5 );
77
gap> UpperBoundHamming( 13, 5, 2);
89   # in this case the Johnson bound is better 

7.1-4 UpperBoundPlotkin
> UpperBoundPlotkin( n, d, q )( function )

The function UpperBoundPlotkin calculates the sum of the distances of all ordered pairs of different codewords. It is based on the fact that the minimum distance is at most equal to the average distance. It is a good bound if the weights of the codewords do not differ much. It results in:

M \leq {d \over {d-(1-1/q)n}},

where M is the maximum number of codewords. In this case, d must be larger than (1-1/q)n, but by shortening the code, the case d < (1-1/q)n is covered.

gap> UpperBoundPlotkin( 15, 7, 2 );
32
gap> C := BCHCode( 15, 7, GF(2) );
a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2)
gap> Size(C);
32
gap> WeightDistribution(C);
[ 1, 0, 0, 0, 0, 0, 0, 15, 15, 0, 0, 0, 0, 0, 0, 1 ] 

7.1-5 UpperBoundElias
> UpperBoundElias( n, d, q )( function )

The Elias bound is an improvement of the Plotkin bound (see UpperBoundPlotkin (7.1-4)) for large codes. Subcodes are used to decrease the size of the code, in this case the subcode of all codewords within a certain ball. This bound is useful for large codes with relatively small minimum distances.

gap> UpperBoundPlotkin( 16, 3, 2 );
12288
gap> UpperBoundElias( 16, 3, 2 );
10280 
gap> UpperBoundElias( 20, 10, 3 );
16255

7.1-6 UpperBoundGriesmer
> UpperBoundGriesmer( n, d, q )( function )

The Griesmer bound is valid only for linear codes. It is obtained by counting the number of equal symbols in each row of the generator matrix of the code. By omitting the coordinates in which all rows have a zero, a smaller code results. The Griesmer bound is obtained by repeating this proces until a trivial code is left in the end.

gap> UpperBoundGriesmer( 13, 5, 2 );
64
gap> UpperBoundGriesmer( 18, 9, 2 );
8        # the maximum number of words for a linear code is 8
gap> Size( PuncturedCode( HadamardCode( 20, 1 ) ) );
20       # this non-linear code has 20 elements 

7.1-7 IsGriesmerCode
> IsGriesmerCode( C )( function )

IsGriesmerCode returns `true' if a linear code C is a Griesmer code, and `false' otherwise. A code is called Griesmer if its length satisfies

n = g[k,d] = \sum_{i=0}^{k-1} \lceil \frac{d}{q^i} \rceil.

gap> IsGriesmerCode( HammingCode( 3, GF(2) ) );
true
gap> IsGriesmerCode( BCHCode( 17, 2, GF(2) ) );
false 

7.1-8 UpperBound
> UpperBound( n, d, q )( function )

UpperBound returns the best known upper bound A(n,d) for the size of a code of length n, minimum distance d over a field of size q. The function UpperBound first checks for trivial cases (like d=1 or n=d), and if the value is in the built-in table. Then it calculates the minimum value of the upper bound using the methods of Singleton (see UpperBoundSingleton (7.1-1)), Hamming (see UpperBoundHamming (7.1-2)), Johnson (see UpperBoundJohnson (7.1-3)), Plotkin (see UpperBoundPlotkin (7.1-4)) and Elias (see UpperBoundElias (7.1-5)). If the code is binary, A(n, 2* ell-1) = A(n+1,2* ell), so the UpperBound takes the minimum of the values obtained from all methods for the parameters (n, 2*ell-1) and (n+1, 2* ell).

gap> UpperBound( 10, 3, 2 );
85
gap> UpperBound( 25, 9, 8 );
1211778792827540 

7.1-9 LowerBoundMinimumDistance
> LowerBoundMinimumDistance( C )( function )

In this form, LowerBoundMinimumDistance returns a lower bound for the minimum distance of code C.

This command can also be called using the syntax LowerBoundMinimumDistance( n, k, F ). In this form, LowerBoundMinimumDistance returns a lower bound for the minimum distance of the best known linear code of length n, dimension k over field F. It uses the mechanism explained in section 7.1-13.

gap> C := BCHCode( 45, 7 );
a cyclic [45,23,7..9]6..16 BCH code, delta=7, b=1 over GF(2)
gap> LowerBoundMinimumDistance( C );
7     # designed distance is lower bound for minimum distance 
gap> LowerBoundMinimumDistance( 45, 23, GF(2) );
10 

7.1-10 LowerBoundGilbertVarshamov
> LowerBoundGilbertVarshamov( n, d, q )( function )

This is the lower bound due (independently) to Gilbert and Varshamov. It says that for each n and d, there exists a linear code having length n and minimum distance d at least of size q^n-1/ SphereContent(n-1,d-2,GF(q)).

gap> LowerBoundGilbertVarshamov(3,2,2);
4
gap> LowerBoundGilbertVarshamov(3,3,2);
1
gap> LowerBoundMinimumDistance(3,3,2);
1
gap> LowerBoundMinimumDistance(3,2,2);
2

7.1-11 LowerBoundSpherePacking
> LowerBoundSpherePacking( n, d, q )( function )

This is the lower bound due (independently) to Gilbert and Varshamov. It says that for each n and r, there exists an unrestricted code at least of size q^n/ SphereContent(n,d,GF(q)) minimum distance d.

gap> LowerBoundSpherePacking(3,2,2);
2
gap> LowerBoundSpherePacking(3,3,2);
1

7.1-12 UpperBoundMinimumDistance
> UpperBoundMinimumDistance( C )( function )

In this form, UpperBoundMinimumDistance returns an upper bound for the minimum distance of code C. For unrestricted codes, it just returns the word length. For linear codes, it takes the minimum of the possibly known value from the method of construction, the weight of the generators, and the value from the table (see 7.1-13).

This command can also be called using the syntax UpperBoundMinimumDistance( n, k, F ). In this form, UpperBoundMinimumDistance returns an upper bound for the minimum distance of the best known linear code of length n, dimension k over field F. It uses the mechanism explained in section 7.1-13.

gap> C := BCHCode( 45, 7 );;
gap> UpperBoundMinimumDistance( C );
9 
gap> UpperBoundMinimumDistance( 45, 23, GF(2) );
11 

7.1-13 BoundsMinimumDistance
> BoundsMinimumDistance( n, k, F )( function )

The function BoundsMinimumDistance calculates a lower and upper bound for the minimum distance of an optimal linear code with word length n, dimension k over field F. The function returns a record with the two bounds and an explanation for each bound. The function Display can be used to show the explanations.

The values for the lower and upper bound are obtained from a table. GUAVA has tables containing lower and upper bounds for q=2 (n <= 257), 3 (n <= 243), 4 (n <= 256). (Current as of 11 May 2006.) These tables were derived from the table of Brouwer. (See [Bro06], http://www.win.tue.nl/~aeb/voorlincod.html for the most recent data.) For codes over other fields and for larger word lengths, trivial bounds are used.

The resulting record can be used in the function BestKnownLinearCode (see BestKnownLinearCode (5.2-14)) to construct a code with minimum distance equal to the lower bound.

gap> bounds := BoundsMinimumDistance( 7, 3 );; DisplayBoundsInfo( bounds );
an optimal linear [7,3,d] code over GF(2) has d=4
------------------------------------------------------------------------------
Lb(7,3)=4, by shortening of:
Lb(8,4)=4, u u+v construction of C1 and C2:
Lb(4,3)=2, dual of the repetition code
Lb(4,1)=4, repetition code
------------------------------------------------------------------------------
Ub(7,3)=4, Griesmer bound
# The lower bound is equal to the upper bound, so a code with
# these parameters is optimal.
gap> C := BestKnownLinearCode( bounds );; Display( C );
a linear [7,3,4]2..3 shortened code of
a linear [8,4,4]2 U U+V construction code of
U: a cyclic [4,3,2]1 dual code of
   a cyclic [4,1,4]2 repetition code over GF(2)
V: a cyclic [4,1,4]2 repetition code over GF(2)

7.2 Covering radius bounds on codes

7.2-1 BoundsCoveringRadius
> BoundsCoveringRadius( C )( function )

BoundsCoveringRadius returns a list of integers. The first entry of this list is the maximum of some lower bounds for the covering radius of C, the last entry the minimum of some upper bounds of C.

If the covering radius of C is known, a list of length 1 is returned. BoundsCoveringRadius makes use of the functions GeneralLowerBoundCoveringRadius and GeneralUpperBoundCoveringRadius.

gap> BoundsCoveringRadius( BCHCode( 17, 3, GF(2) ) );
[ 3 .. 4 ]
gap> BoundsCoveringRadius( HammingCode( 5, GF(2) ) );
[ 1 ] 

7.2-2 IncreaseCoveringRadiusLowerBound
> IncreaseCoveringRadiusLowerBound( C[, stopdist][, startword] )( function )

IncreaseCoveringRadiusLowerBound tries to increase the lower bound of the covering radius of C. It does this by means of a probabilistic algorithm. This algorithm takes a random word in GF(q)^n (or startword if it is specified), and, by changing random coordinates, tries to get as far from C as possible. If changing a coordinate finds a word that has a larger distance to the code than the previous one, the change is made permanent, and the algorithm starts all over again. If changing a coordinate does not find a coset leader that is further away from the code, then the change is made permanent with a chance of 1 in 100, if it gets the word closer to the code, or with a chance of 1 in 10, if the word stays at the same distance. Otherwise, the algorithm starts again with the same word as before.

If the algorithm did not allow changes that decrease the distance to the code, it might get stuck in a sub-optimal situation (the coset leader corresponding to such a situation - i.e. no coordinate of this coset leader can be changed in such a way that we get at a larger distance from the code - is called an orphan).

If the algorithm finds a word that has distance stopdist to the code, it ends and returns that word, which can be used for further investigations.

The variable InfoCoveringRadius can be set to Print to print the maximum distance reached so far every 1000 runs. The algorithm can be interrupted with ctrl-C, allowing the user to look at the word that is currently being examined (called `current'), or to change the chances that the new word is made permanent (these are called `staychance' and `downchance'). If one of these variables is i, then it corresponds with a i in 100 chance.

At the moment, the algorithm is only useful for codes with small dimension, where small means that the elements of the code fit in the memory. It works with larger codes, however, but when you use it for codes with large dimension, you should be very patient. If running the algorithm quits GAP (due to memory problems), you can change the global variable CRMemSize to a lower value. This might cause the algorithm to run slower, but without quitting GAP. The only way to find out the best value of CRMemSize is by experimenting.

gap> C:=RandomLinearCode(10,5,GF(2));
a  [10,5,?] randomly generated code over GF(2)
gap> IncreaseCoveringRadiusLowerBound(C,10);
Number of runs: 1000  best distance so far: 3
Number of runs: 2000  best distance so far: 3
Number of changes: 100
Number of runs: 3000  best distance so far: 3
Number of runs: 4000  best distance so far: 3
Number of runs: 5000  best distance so far: 3
Number of runs: 6000  best distance so far: 3
Number of runs: 7000  best distance so far: 3
Number of changes: 200
Number of runs: 8000  best distance so far: 3
Number of runs: 9000  best distance so far: 3
Number of runs: 10000  best distance so far: 3
Number of changes: 300
Number of runs: 11000  best distance so far: 3
Number of runs: 12000  best distance so far: 3
Number of runs: 13000  best distance so far: 3
Number of changes: 400
Number of runs: 14000  best distance so far: 3
user interrupt at... 
#
# used ctrl-c to break out of execution
#
... called from 
IncreaseCoveringRadiusLowerBound( code, -1, current ) called from
 function( arguments ) called from read-eval-loop
Entering break read-eval-print loop ...
you can 'quit;' to quit to outer loop, or
you can 'return;' to continue
brk> current;
[ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ]
brk>
gap> CoveringRadius(C);
3

7.2-3 ExhaustiveSearchCoveringRadius
> ExhaustiveSearchCoveringRadius( C )( function )

ExhaustiveSearchCoveringRadius does an exhaustive search to find the covering radius of C. Every time a coset leader of a coset with weight w is found, the function tries to find a coset leader of a coset with weight w+1. It does this by enumerating all words of weight w+1, and checking whether a word is a coset leader. The start weight is the current known lower bound on the covering radius.

gap> C:=RandomLinearCode(10,5,GF(2));
a  [10,5,?] randomly generated code over GF(2)
gap> ExhaustiveSearchCoveringRadius(C);
Trying 3 ...
[ 3 .. 5 ]
gap> CoveringRadius(C);
3

7.2-4 GeneralLowerBoundCoveringRadius
> GeneralLowerBoundCoveringRadius( C )( function )

GeneralLowerBoundCoveringRadius returns a lower bound on the covering radius of C. It uses as many functions which names start with LowerBoundCoveringRadius as possible to find the best known lower bound (at least that GUAVA knows of) together with tables for the covering radius of binary linear codes with length not greater than 64.

gap> C:=RandomLinearCode(10,5,GF(2));
a  [10,5,?] randomly generated code over GF(2)
gap> GeneralLowerBoundCoveringRadius(C);
2
gap> CoveringRadius(C);
3

7.2-5 GeneralUpperBoundCoveringRadius
> GeneralUpperBoundCoveringRadius( C )( function )

GeneralUpperBoundCoveringRadius returns an upper bound on the covering radius of C. It uses as many functions which names start with UpperBoundCoveringRadius as possible to find the best known upper bound (at least that GUAVA knows of).

gap> C:=RandomLinearCode(10,5,GF(2));
a  [10,5,?] randomly generated code over GF(2)
gap> GeneralUpperBoundCoveringRadius(C);
4
gap> CoveringRadius(C);
3

7.2-6 LowerBoundCoveringRadiusSphereCovering
> LowerBoundCoveringRadiusSphereCovering( n, M[, F], false )( function )

This command can also be called using the syntax LowerBoundCoveringRadiusSphereCovering( n, r, [F,] true ). If the last argument of LowerBoundCoveringRadiusSphereCovering is false, then it returns a lower bound for the covering radius of a code of size M and length n. Otherwise, it returns a lower bound for the size of a code of length n and covering radius r.

F is the field over which the code is defined. If F is omitted, it is assumed that the code is over GF(2). The bound is computed according to the sphere covering bound:

M \cdot V_q(n,r) \geq q^n

where V_q(n,r) is the size of a sphere of radius r in GF(q)^n.

gap> C:=RandomLinearCode(10,5,GF(2));
a  [10,5,?] randomly generated code over GF(2)
gap> Size(C);
32
gap> CoveringRadius(C);
3
gap> LowerBoundCoveringRadiusSphereCovering(10,32,GF(2),false);
2
gap> LowerBoundCoveringRadiusSphereCovering(10,3,GF(2),true);
6

7.2-7 LowerBoundCoveringRadiusVanWee1
> LowerBoundCoveringRadiusVanWee1( n, M[, F], false )( function )

This command can also be called using the syntax LowerBoundCoveringRadiusVanWee1( n, r, [F,] true ). If the last argument of LowerBoundCoveringRadiusVanWee1 is false, then it returns a lower bound for the covering radius of a code of size M and length n. Otherwise, it returns a lower bound for the size of a code of length n and covering radius r.

F is the field over which the code is defined. If F is omitted, it is assumed that the code is over GF(2).

The Van Wee bound is an improvement of the sphere covering bound:

M \cdot \left\{ V_q(n,r) - \frac{{n \choose r}}{\lceil\frac{n-r}{r+1}\rceil} \left(\left\lceil\frac{n+1}{r+1}\right\rceil - \frac{n+1}{r+1}\right) \right\} \geq q^n

gap> C:=RandomLinearCode(10,5,GF(2));
a  [10,5,?] randomly generated code over GF(2)
gap> Size(C);
32
gap> CoveringRadius(C);
3
gap> LowerBoundCoveringRadiusVanWee1(10,32,GF(2),false);
2
gap> LowerBoundCoveringRadiusVanWee1(10,3,GF(2),true);
6

7.2-8 LowerBoundCoveringRadiusVanWee2
> LowerBoundCoveringRadiusVanWee2( n, M, false )( function )

This command can also be called using the syntax LowerBoundCoveringRadiusVanWee2( n, r [,true] ). If the last argument of LowerBoundCoveringRadiusVanWee2 is false, then it returns a lower bound for the covering radius of a code of size M and length n. Otherwise, it returns a lower bound for the size of a code of length n and covering radius r.

This bound only works for binary codes. It is based on the following inequality:

M \cdot \frac{\left( \left( V_2(n,2) - \frac{1}{2}(r+2)(r-1) \right) V_2(n,r) + \varepsilon V_2(n,r-2) \right)} {(V_2(n,2) - \frac{1}{2}(r+2)(r-1) + \varepsilon)} \geq 2^n,

where

\varepsilon = {r+2 \choose 2} \left\lceil {n-r+1 \choose 2} / {r+2 \choose 2} \right\rceil - {n-r+1 \choose 2}.

gap> C:=RandomLinearCode(10,5,GF(2));
a  [10,5,?] randomly generated code over GF(2)
gap> Size(C);
32
gap> CoveringRadius(C);
3
gap> LowerBoundCoveringRadiusVanWee2(10,32,false);
2
gap> LowerBoundCoveringRadiusVanWee2(10,3,true);
7

7.2-9 LowerBoundCoveringRadiusCountingExcess
> LowerBoundCoveringRadiusCountingExcess( n, M, false )( function )

This command can also be called with LowerBoundCoveringRadiusCountingExcess( n, r [,true] ). If the last argument of LowerBoundCoveringRadiusCountingExcess is false, then it returns a lower bound for the covering radius of a code of size M and length n. Otherwise, it returns a lower bound for the size of a code of length n and covering radius r.

This bound only works for binary codes. It is based on the following inequality:

M \cdot \left( \rho V_2(n,r) + \varepsilon V_2(n,r-1) \right) \geq (\rho + \varepsilon) 2^n,

where

\varepsilon = (r+1) \left\lceil\frac{n+1}{r+1}\right\rceil - (n+1)

and

\rho = \left\{ \begin{array}{l} n-3+\frac{2}{n}, \ \ \ \ \ \ {\rm if}\ r = 2\\ n-r-1 , \ \ \ \ \ \ {\rm if}\ r \geq 3 . \end{array} \right.

gap> C:=RandomLinearCode(10,5,GF(2));
a  [10,5,?] randomly generated code over GF(2)
gap> Size(C);
32
gap> CoveringRadius(C);
3
gap> LowerBoundCoveringRadiusCountingExcess(10,32,false);
0
gap> LowerBoundCoveringRadiusCountingExcess(10,3,true);
7

7.2-10 LowerBoundCoveringRadiusEmbedded1
> LowerBoundCoveringRadiusEmbedded1( n, M, false )( function )

This command can also be called with LowerBoundCoveringRadiusEmbedded1( n, r [,true] ). If the last argument of LowerBoundCoveringRadiusEmbedded1 is 'false', then it returns a lower bound for the covering radius of a code of size M and length n. Otherwise, it returns a lower bound for the size of a code of length n and covering radius r.

This bound only works for binary codes. It is based on the following inequality:

M \cdot \left( V_2(n,r) - {2r \choose r} \right) \geq 2^n - A( n, 2r+1 ) {2r \choose r},

where A(n,d) denotes the maximal cardinality of a (binary) code of length n and minimum distance d. The function UpperBound is used to compute this value.

Sometimes LowerBoundCoveringRadiusEmbedded1 is better than LowerBoundCoveringRadiusEmbedded2, sometimes it is the other way around.

gap> C:=RandomLinearCode(10,5,GF(2));
a  [10,5,?] randomly generated code over GF(2)
gap> Size(C);
32
gap> CoveringRadius(C);
3
gap> LowerBoundCoveringRadiusEmbedded1(10,32,false);
2
gap> LowerBoundCoveringRadiusEmbedded1(10,3,true);
7

7.2-11 LowerBoundCoveringRadiusEmbedded2
> LowerBoundCoveringRadiusEmbedded2( n, M, false )( function )

This command can also be called with LowerBoundCoveringRadiusEmbedded2( n, r [,true] ). If the last argument of LowerBoundCoveringRadiusEmbedded2 is 'false', then it returns a lower bound for the covering radius of a code of size M and length n. Otherwise, it returns a lower bound for the size of a code of length n and covering radius r.

This bound only works for binary codes. It is based on the following inequality:

M \cdot \left( V_2(n,r) - \frac{3}{2} {2r \choose r} \right) \geq 2^n - 2A( n, 2r+1 ) {2r \choose r},

where A(n,d) denotes the maximal cardinality of a (binary) code of length n and minimum distance d. The function UpperBound is used to compute this value.

Sometimes LowerBoundCoveringRadiusEmbedded1 is better than LowerBoundCoveringRadiusEmbedded2, sometimes it is the other way around.

gap> C:=RandomLinearCode(15,5,GF(2));
a  [15,5,?] randomly generated code over GF(2)
gap> Size(C);
32
gap> CoveringRadius(C);
6
gap> LowerBoundCoveringRadiusEmbedded2(10,32,false);
2
gap> LowerBoundCoveringRadiusEmbedded2(10,3,true);
7

7.2-12 LowerBoundCoveringRadiusInduction
> LowerBoundCoveringRadiusInduction( n, r )( function )

LowerBoundCoveringRadiusInduction returns a lower bound for the size of a code with length n and covering radius r.

If n = 2r+2 and r >= 1, the returned value is 4.

If n = 2r+3 and r >= 1, the returned value is 7.

If n = 2r+4 and r >= 4, the returned value is 8.

Otherwise, 0 is returned.

gap> C:=RandomLinearCode(15,5,GF(2));
a  [15,5,?] randomly generated code over GF(2)
gap> CoveringRadius(C);
5
gap> LowerBoundCoveringRadiusInduction(15,6);
7

7.2-13 UpperBoundCoveringRadiusRedundancy
> UpperBoundCoveringRadiusRedundancy( C )( function )

UpperBoundCoveringRadiusRedundancy returns the redundancy of C as an upper bound for the covering radius of C. C must be a linear code.

gap> C:=RandomLinearCode(15,5,GF(2));
a  [15,5,?] randomly generated code over GF(2)
gap> CoveringRadius(C);
5
gap> UpperBoundCoveringRadiusRedundancy(C);
10

7.2-14 UpperBoundCoveringRadiusDelsarte
> UpperBoundCoveringRadiusDelsarte( C )( function )

UpperBoundCoveringRadiusDelsarte returns an upper bound for the covering radius of C. This upper bound is equal to the external distance of C, this is the minimum distance of the dual code, if C is a linear code.

This is described in Theorem 11.3.3 of [HP03].

gap> C:=RandomLinearCode(15,5,GF(2));
a  [15,5,?] randomly generated code over GF(2)
gap> CoveringRadius(C);
5
gap> UpperBoundCoveringRadiusDelsarte(C);
13

7.2-15 UpperBoundCoveringRadiusStrength
> UpperBoundCoveringRadiusStrength( C )( function )

UpperBoundCoveringRadiusStrength returns an upper bound for the covering radius of C.

First the code is punctured at the zero coordinates (i.e. the coordinates where all codewords have a zero). If the remaining code has strength 1 (i.e. each coordinate contains each element of the field an equal number of times), then it returns fracq-1qm + (n-m) (where q is the size of the field and m is the length of punctured code), otherwise it returns n. This bound works for all codes.

gap> C:=RandomLinearCode(15,5,GF(2));
a  [15,5,?] randomly generated code over GF(2)
gap> CoveringRadius(C);
5
gap> UpperBoundCoveringRadiusStrength(C);
7

7.2-16 UpperBoundCoveringRadiusGriesmerLike
> UpperBoundCoveringRadiusGriesmerLike( C )( function )

This function returns an upper bound for the covering radius of C, which must be linear, in a Griesmer-like fashion. It returns

n - \sum_{i=1}^k \left\lceil \frac{d}{q^i} \right\rceil

gap> C:=RandomLinearCode(15,5,GF(2));
a  [15,5,?] randomly generated code over GF(2)
gap> CoveringRadius(C);
5
gap> UpperBoundCoveringRadiusGriesmerLike(C);
9

7.2-17 UpperBoundCoveringRadiusCyclicCode
> UpperBoundCoveringRadiusCyclicCode( C )( function )

This function returns an upper bound for the covering radius of C, which must be a cyclic code. It returns

n - k + 1 - \left\lceil \frac{w(g(x))}{2} \right\rceil,

where g(x) is the generator polynomial of C.

gap> C:=CyclicCodes(15,GF(2))[3];
a cyclic [15,12,1..2]1..3 enumerated code over GF(2)
gap> CoveringRadius(C);
3
gap> UpperBoundCoveringRadiusCyclicCode(C);
3

7.3 Special matrices in GUAVA

This section explains functions that work with special matrices GUAVA needs for several codes.

Firstly, we describe some matrix generating functions (see KrawtchoukMat (7.3-1), GrayMat (7.3-2), SylvesterMat (7.3-3), HadamardMat (7.3-4) and MOLS (7.3-11)).

Next we describe two functions regarding a standard form of matrices (see PutStandardForm (7.3-6) and IsInStandardForm (7.3-7)).

Then we describe functions that return a matrix after a manipulation (see PermutedCols (7.3-8), VerticalConversionFieldMat (7.3-9) and HorizontalConversionFieldMat (7.3-10)).

Finally, we describe functions that do some tests on matrices (see IsLatinSquare (7.3-12) and AreMOLS (7.3-13)).

7.3-1 KrawtchoukMat
> KrawtchoukMat( n, q )( function )

KrawtchoukMat returns the n+1 by n+1 matrix K=(k_ij) defined by k_ij=K_i(j) for i,j=0,...,n. K_i(j) is the Krawtchouk number (see Krawtchouk (7.5-6)). n must be a positive integer and q a prime power. The Krawtchouk matrix is used in the MacWilliams identities, defining the relation between the weight distribution of a code of length n over a field of size q, and its dual code. Each call to KrawtchoukMat returns a new matrix, so it is safe to modify the result.

gap> PrintArray( KrawtchoukMat( 3, 2 ) );
[ [   1,   1,   1,   1 ],
  [   3,   1,  -1,  -3 ],
  [   3,  -1,  -1,   3 ],
  [   1,  -1,   1,  -1 ] ]
gap> C := HammingCode( 3 );; a := WeightDistribution( C );
[ 1, 0, 0, 7, 7, 0, 0, 1 ]
gap> n := WordLength( C );; q := Size( LeftActingDomain( C ) );;
gap> k := Dimension( C );;
gap> q^( -k ) * KrawtchoukMat( n, q ) * a;
[ 1, 0, 0, 0, 7, 0, 0, 0 ]
gap> WeightDistribution( DualCode( C ) );
[ 1, 0, 0, 0, 7, 0, 0, 0 ] 

7.3-2 GrayMat
> GrayMat( n, F )( function )

GrayMat returns a list of all different vectors (see GAP's Vectors command) of length n over the field F, using Gray ordering. n must be a positive integer. This order has the property that subsequent vectors differ in exactly one coordinate. The first vector is always the null vector. Each call to GrayMat returns a new matrix, so it is safe to modify the result.

gap> GrayMat(3);
[ [ 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0 ],
  [ 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2) ],
  [ Z(2)^0, Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0 ],
  [ Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2) ] ]
gap> G := GrayMat( 4, GF(4) );; Length(G);
256          # the length of a GrayMat is always q^n
gap> G[101] - G[100];
[ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ] 

7.3-3 SylvesterMat
> SylvesterMat( n )( function )

SylvesterMat returns the nx n Sylvester matrix of order n. This is a special case of the Hadamard matrices (see HadamardMat (7.3-4)). For this construction, n must be a power of 2. Each call to SylvesterMat returns a new matrix, so it is safe to modify the result.

gap> PrintArray(SylvesterMat(2));
[ [   1,   1 ],
  [   1,  -1 ] ]
gap> PrintArray( SylvesterMat(4) );
[ [   1,   1,   1,   1 ],
  [   1,  -1,   1,  -1 ],
  [   1,   1,  -1,  -1 ],
  [   1,  -1,  -1,   1 ] ] 

7.3-4 HadamardMat
> HadamardMat( n )( function )

HadamardMat returns a Hadamard matrix of order n. This is an nx n matrix with the property that the matrix multiplied by its transpose returns n times the identity matrix. This is only possible for n=1, n=2 or in cases where n is a multiple of 4. If the matrix does not exist or is not known (as of 1998), HadamardMat returns an error. A large number of construction methods is known to create these matrices for different orders. HadamardMat makes use of two construction methods (the Paley Type I and II constructions, and the Sylvester construction -- see SylvesterMat (7.3-3)). These methods cover most of the possible Hadamard matrices, although some special algorithms have not been implemented yet. The following orders less than 100 do not yet have an implementation for a Hadamard matrix in GUAVA: 52, 92.

gap> C := HadamardMat(8);; PrintArray(C);
[ [   1,   1,   1,   1,   1,   1,   1,   1 ],
  [   1,  -1,   1,  -1,   1,  -1,   1,  -1 ],
  [   1,   1,  -1,  -1,   1,   1,  -1,  -1 ],
  [   1,  -1,  -1,   1,   1,  -1,  -1,   1 ],
  [   1,   1,   1,   1,  -1,  -1,  -1,  -1 ],
  [   1,  -1,   1,  -1,  -1,   1,  -1,   1 ],
  [   1,   1,  -1,  -1,  -1,  -1,   1,   1 ],
  [   1,  -1,  -1,   1,  -1,   1,   1,  -1 ] ]
gap> C * TransposedMat(C) = 8 * IdentityMat( 8, 8 );
true 

7.3-5 VandermondeMat
> VandermondeMat( X, a )( function )

The function VandermondeMat returns the (a+1)x n matrix of powers x_i^j where X is a list of elements of a field, X= x_1,...,x_n, and a is a non-negative integer.

gap> M:=VandermondeMat([Z(5),Z(5)^2,Z(5)^0,Z(5)^3],2);
[ [ Z(5)^0, Z(5), Z(5)^2 ], [ Z(5)^0, Z(5)^2, Z(5)^0 ],
  [ Z(5)^0, Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5)^3, Z(5)^2 ] ]
gap> Display(M);
 1 2 4
 1 4 1
 1 1 1
 1 3 4

7.3-6 PutStandardForm
> PutStandardForm( M[, idleft] )( function )

We say that a kx n matrix is in standard form if it is equal to the block matrix (I | A), for some kx (n-k) matrix A and where I is the kx k identity matrix. It follows from a basis result in linear algebra that, after a possible permutation of the columns, using elementary row operations, every matrix can be reduced to standard form. PutStandardForm puts a matrix M in standard form, and returns the permutation needed to do so. idleft is a boolean that sets the position of the identity matrix in M. (The default for idleft is `true'.) If idleft is set to `true', the identity matrix is put on the left side of M. Otherwise, it is put at the right side. (This option is useful when putting a check matrix of a code into standard form.) The function BaseMat also returns a similar standard form, but does not apply column permutations. The rows of the matrix still span the same vector space after BaseMat, but after calling PutStandardForm, this is not necessarily true.

gap> M := Z(2)*[[1,0,0,1],[0,0,1,1]];; PrintArray(M);
[ [    Z(2),  0*Z(2),  0*Z(2),    Z(2) ],
  [  0*Z(2),  0*Z(2),    Z(2),    Z(2) ] ]
gap> PutStandardForm(M);                   # identity at the left side
(2,3)
gap> PrintArray(M);
[ [    Z(2),  0*Z(2),  0*Z(2),    Z(2) ],
  [  0*Z(2),    Z(2),  0*Z(2),    Z(2) ] ]
gap> PutStandardForm(M, false);            # identity at the right side
(1,4,3)
gap> PrintArray(M);
[ [  0*Z(2),    Z(2),    Z(2),  0*Z(2) ],
  [  0*Z(2),    Z(2),  0*Z(2),    Z(2) ] ]
gap> C := BestKnownLinearCode( 23, 12, GF(2) );
a linear [23,12,7]3 punctured code
gap> G:=MutableCopyMat(GeneratorMat(C));;
gap> PutStandardForm(G);
()
gap> Display(G);
 1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1
 . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . .
 . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1
 . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 .
 . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . 1
 . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 1
 . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1
 . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . .
 . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 .
 . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 .
 . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 1
 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1

7.3-7 IsInStandardForm
> IsInStandardForm( M[, idleft] )( function )

IsInStandardForm determines if M is in standard form. idleft is a boolean that indicates the position of the identity matrix in M, as in PutStandardForm (see PutStandardForm (7.3-6)). IsInStandardForm checks if the identity matrix is at the left side of M, otherwise if it is at the right side. The elements of M may be elements of any field.

gap> IsInStandardForm(IdentityMat(7, GF(2)));
true
gap> IsInStandardForm([[1, 1, 0], [1, 0, 1]], false);
true
gap> IsInStandardForm([[1, 3, 2, 7]]);
true
gap> IsInStandardForm(HadamardMat(4));
false 

7.3-8 PermutedCols
> PermutedCols( M, P )( function )

PermutedCols returns a matrix M with a permutation P applied to its columns.

gap> M := [[1,2,3,4],[1,2,3,4]];; PrintArray(M);
[ [  1,  2,  3,  4 ],
  [  1,  2,  3,  4 ] ]
gap> PrintArray(PermutedCols(M, (1,2,3)));
[ [  3,  1,  2,  4 ],
  [  3,  1,  2,  4 ] ] 

7.3-9 VerticalConversionFieldMat
> VerticalConversionFieldMat( M, F )( function )

VerticalConversionFieldMat returns the matrix M with its elements converted from a field F=GF(q^m), q prime, to a field GF(q). Each element is replaced by its representation over the latter field, placed vertically in the matrix, using the GF(p)-vector space isomorphism

[...] : GF(q)\rightarrow GF(p)^m,

with q=p^m.

If M is a k by n matrix, the result is a k* m x n matrix, since each element of GF(q^m) can be represented in GF(q) using m elements.

gap> M := Z(9)*[[1,2],[2,1]];; PrintArray(M);
[ [    Z(3^2),  Z(3^2)^5 ],
  [  Z(3^2)^5,    Z(3^2) ] ]
gap> DefaultField( Flat(M) );
GF(3^2)
gap> VCFM := VerticalConversionFieldMat( M, GF(9) );; PrintArray(VCFM);
[ [  0*Z(3),  0*Z(3) ],
  [  Z(3)^0,    Z(3) ],
  [  0*Z(3),  0*Z(3) ],
  [    Z(3),  Z(3)^0 ] ]
gap> DefaultField( Flat(VCFM) );
GF(3) 

A similar function is HorizontalConversionFieldMat (see HorizontalConversionFieldMat (7.3-10)).

7.3-10 HorizontalConversionFieldMat
> HorizontalConversionFieldMat( M, F )( function )

HorizontalConversionFieldMat returns the matrix M with its elements converted from a field F=GF(q^m), q prime, to a field GF(q). Each element is replaced by its representation over the latter field, placed horizontally in the matrix.

If M is a k x n matrix, the result is a kx mx n* m matrix. The new word length of the resulting code is equal to n* m, because each element of GF(q^m) can be represented in GF(q) using m elements. The new dimension is equal to kx m because the new matrix should be a basis for the same number of vectors as the old one.

ConversionFieldCode uses horizontal conversion to convert a code (see ConversionFieldCode (6.1-15)).

gap> M := Z(9)*[[1,2],[2,1]];; PrintArray(M);
[ [    Z(3^2),  Z(3^2)^5 ],
  [  Z(3^2)^5,    Z(3^2) ] ]
gap> DefaultField( Flat(M) );
GF(3^2)
gap> HCFM := HorizontalConversionFieldMat(M, GF(9));; PrintArray(HCFM);
[ [  0*Z(3),  Z(3)^0,  0*Z(3),    Z(3) ],
  [  Z(3)^0,  Z(3)^0,    Z(3),    Z(3) ],
  [  0*Z(3),    Z(3),  0*Z(3),  Z(3)^0 ],
  [    Z(3),    Z(3),  Z(3)^0,  Z(3)^0 ] ]
gap> DefaultField( Flat(HCFM) );
GF(3) 

A similar function is VerticalConversionFieldMat (see VerticalConversionFieldMat (7.3-9)).

7.3-11 MOLS
> MOLS( q[, n] )( function )

MOLS returns a list of n Mutually Orthogonal Latin Squares (MOLS). A Latin square of order q is a qx q matrix whose entries are from a set F_q of q distinct symbols (GUAVA uses the integers from 0 to q) such that each row and each column of the matrix contains each symbol exactly once.

A set of Latin squares is a set of MOLS if and only if for each pair of Latin squares in this set, every ordered pair of elements that are in the same position in these matrices occurs exactly once.

n must be less than q. If n is omitted, two MOLS are returned. If q is not a prime power, at most 2 MOLS can be created. For all values of q with q > 2 and q <> 6, a list of MOLS can be constructed. However, GUAVA does not yet construct MOLS for q= 2 mod 4. If it is not possible to construct n MOLS, the function returns `false'.

MOLS are used to create q-ary codes (see MOLSCode (5.1-4)).

gap> M := MOLS( 4, 3 );;PrintArray( M[1] );
[ [  0,  1,  2,  3 ],
  [  1,  0,  3,  2 ],
  [  2,  3,  0,  1 ],
  [  3,  2,  1,  0 ] ]
gap> PrintArray( M[2] );
[ [  0,  2,  3,  1 ],
  [  1,  3,  2,  0 ],
  [  2,  0,  1,  3 ],
  [  3,  1,  0,  2 ] ]
gap> PrintArray( M[3] );
[ [  0,  3,  1,  2 ],
  [  1,  2,  0,  3 ],
  [  2,  1,  3,  0 ],
  [  3,  0,  2,  1 ] ]
gap> MOLS( 12, 3 );
false 

7.3-12 IsLatinSquare
> IsLatinSquare( M )( function )

IsLatinSquare determines if a matrix M is a Latin square. For a Latin square of size nx n, each row and each column contains all the integers 1,dots,n exactly once.

gap> IsLatinSquare([[1,2],[2,1]]);
true
gap> IsLatinSquare([[1,2,3],[2,3,1],[1,3,2]]);
false 

7.3-13 AreMOLS
> AreMOLS( L )( function )

AreMOLS determines if L is a list of mutually orthogonal Latin squares (MOLS). For each pair of Latin squares in this list, the function checks if each ordered pair of elements that are in the same position in these matrices occurs exactly once. The function MOLS creates MOLS (see MOLS (7.3-11)).

gap> M := MOLS(4,2);
[ [ [ 0, 1, 2, 3 ], [ 1, 0, 3, 2 ], [ 2, 3, 0, 1 ], [ 3, 2, 1, 0 ] ],
  [ [ 0, 2, 3, 1 ], [ 1, 3, 2, 0 ], [ 2, 0, 1, 3 ], [ 3, 1, 0, 2 ] ] ]
gap> AreMOLS(M);
true 

7.4 Some functions related to the norm of a code

In this section, some functions that can be used to compute the norm of a code and to decide upon its normality are discussed. Typically, these are applied to binary linear codes. The definitions of this section were introduced in Graham and Sloane [GS85].

7.4-1 CoordinateNorm
> CoordinateNorm( C, coord )( function )

CoordinateNorm returns the norm of C with respect to coordinate coord. If C_a = c in C | c_coord = a, then the norm of C with respect to coord is defined as

\max_{v \in GF(q)^n} \sum_{a=1}^q d(x,C_a),

with the convention that d(x,C_a) = n if C_a is empty.

gap> CoordinateNorm( HammingCode( 3, GF(2) ), 3 );
3 

7.4-2 CodeNorm
> CodeNorm( C )( function )

CodeNorm returns the norm of C. The norm of a code is defined as the minimum of the norms for the respective coordinates of the code. In effect, for each coordinate CoordinateNorm is called, and the minimum of the calculated numbers is returned.

gap> CodeNorm( HammingCode( 3, GF(2) ) );
3 

7.4-3 IsCoordinateAcceptable
> IsCoordinateAcceptable( C, coord )( function )

IsCoordinateAcceptable returns `true' if coordinate coord of C is acceptable. A coordinate is called acceptable if the norm of the code with respect to that coordinate is not more than two times the covering radius of the code plus one.

gap> IsCoordinateAcceptable( HammingCode( 3, GF(2) ), 3 );
true 

7.4-4 GeneralizedCodeNorm
> GeneralizedCodeNorm( C, subcode1, subscode2, ..., subcodek )( function )

GeneralizedCodeNorm returns the k-norm of C with respect to k subcodes.

gap> c := RepetitionCode( 7, GF(2) );;
gap> ham := HammingCode( 3, GF(2) );;
gap> d := EvenWeightSubcode( ham );;
gap> e := ConstantWeightSubcode( ham, 3 );;
gap> GeneralizedCodeNorm( ham, c, d, e );
4 

7.4-5 IsNormalCode
> IsNormalCode( C )( function )

IsNormalCode returns `true' if C is normal. A code is called normal if the norm of the code is not more than two times the covering radius of the code plus one. Almost all codes are normal, however some (non-linear) abnormal codes have been found.

Often, it is difficult to find out whether a code is normal, because it involves computing the covering radius. However, IsNormalCode uses much information from the literature (in particular, [GS85]) about normality for certain code parameters.

gap> IsNormalCode( HammingCode( 3, GF(2) ) );
true 

7.5 Miscellaneous functions

In this section we describe several vector space functions GUAVA uses for constructing codes or performing calculations with codes.

In this section, some new miscellaneous functions are described, including weight enumerators, the MacWilliams-transform and affinity and almost affinity of codes.

7.5-1 CodeWeightEnumerator
> CodeWeightEnumerator( C )( function )

CodeWeightEnumerator returns a polynomial of the following form:

f(x) = \sum_{i=0}^{n} A_i x^i,

where A_i is the number of codewords in C with weight i.

gap> CodeWeightEnumerator( ElementsCode( [ [ 0,0,0 ], [ 0,0,1 ],
> [ 0,1,1 ], [ 1,1,1 ] ], GF(2) ) );
x^3 + x^2 + x + 1
gap> CodeWeightEnumerator( HammingCode( 3, GF(2) ) );
x^7 + 7*x^4 + 7*x^3 + 1 

7.5-2 CodeDistanceEnumerator
> CodeDistanceEnumerator( C, w )( function )

CodeDistanceEnumerator returns a polynomial of the following form:

f(x) = \sum_{i=0}^{n} B_i x^i,

where B_i is the number of codewords with distance i to w.

If w is a codeword, then CodeDistanceEnumerator returns the same polynomial as CodeWeightEnumerator.

gap> CodeDistanceEnumerator( HammingCode( 3, GF(2) ),[0,0,0,0,0,0,1] );
x^6 + 3*x^5 + 4*x^4 + 4*x^3 + 3*x^2 + x
gap> CodeDistanceEnumerator( HammingCode( 3, GF(2) ),[1,1,1,1,1,1,1] );
x^7 + 7*x^4 + 7*x^3 + 1 # `[1,1,1,1,1,1,1]' $\in$ `HammingCode( 3, GF(2 ) )'

7.5-3 CodeMacWilliamsTransform
> CodeMacWilliamsTransform( C )( function )

CodeMacWilliamsTransform returns a polynomial of the following form:

f(x) = \sum_{i=0}^{n} C_i x^i,

where C_i is the number of codewords with weight i in the dual code of C.

gap> CodeMacWilliamsTransform( HammingCode( 3, GF(2) ) );
7*x^4 + 1 

7.5-4 CodeDensity
> CodeDensity( C )( function )

CodeDensity returns the density of C. The density of a code is defined as

\frac{M \cdot V_q(n,t)}{q^n},

where M is the size of the code, V_q(n,t) is the size of a sphere of radius t in GF(q^n) (which may be computed using SphereContent), t is the covering radius of the code and n is the length of the code.

gap> CodeDensity( HammingCode( 3, GF(2) ) );
1
gap> CodeDensity( ReedMullerCode( 1, 4 ) );
14893/2048 

7.5-5 SphereContent
> SphereContent( n, t, F )( function )

SphereContent returns the content of a ball of radius t around an arbitrary element of the vectorspace F^n. This is the cardinality of the set of all elements of F^n that are at distance (see DistanceCodeword (3.6-2) less than or equal to t from an element of F^n.

In the context of codes, the function is used to determine if a code is perfect. A code is perfect if spheres of radius t around all codewords partition the whole ambient vector space, where t is the number of errors the code can correct.

gap> SphereContent( 15, 0, GF(2) );
1    # Only one word with distance 0, which is the word itself
gap> SphereContent( 11, 3, GF(4) );
4984
gap> C := HammingCode(5);
a linear [31,26,3]1 Hamming (5,2) code over GF(2)
#the minimum distance is 3, so the code can correct one error
gap> ( SphereContent( 31, 1, GF(2) ) * Size(C) ) = 2 ^ 31;
true 

7.5-6 Krawtchouk
> Krawtchouk( k, i, n, q )( function )

Krawtchouk returns the Krawtchouk number K_k(i). q must be a prime power, n must be a positive integer, k must be a non-negative integer less then or equal to n and i can be any integer. (See KrawtchoukMat (7.3-1)). This number is the value at x=i of the polynomial

K_k^{n,q}(x) =\sum_{j=0}^n (-1)^j(q-1)^{k-j}b(x,j)b(n-x,k-j),

where $b(v,u)=u!/(v!(v-u)!)$ is the binomial coefficient if $u,v$ are integers. For more properties of these polynomials, see [MS83].

gap> Krawtchouk( 2, 0, 3, 2);
3 

7.5-7 PrimitiveUnityRoot
> PrimitiveUnityRoot( F, n )( function )

PrimitiveUnityRoot returns a primitive n-th root of unity in an extension field of F. This is a finite field element a with the property a^n=1 in F, and n is the smallest integer such that this equality holds.

gap> PrimitiveUnityRoot( GF(2), 15 );
Z(2^4)
gap> last^15;
Z(2)^0
gap> PrimitiveUnityRoot( GF(8), 21 );
Z(2^6)^3 

7.5-8 PrimitivePolynomialsNr
> PrimitivePolynomialsNr( n, F )( function )

PrimitivePolynomialsNr returns the number of irreducible polynomials over F=GF(q) of degree n with (maximum) period q^n-1. (According to a theorem of S. Golomb, this is phi(p^n-1)/n.)

See also the GAP function RandomPrimitivePolynomial, RandomPrimitivePolynomial (2.2-2).

gap> PrimitivePolynomialsNr(3,4);
12

7.5-9 IrreduciblePolynomialsNr
> IrreduciblePolynomialsNr( n, F )( function )

PrimitivePolynomialsNr returns the number of irreducible polynomials over F=GF(q) of degree n.

gap> IrreduciblePolynomialsNr(3,4);
20

7.5-10 MatrixRepresentationOfElement
> MatrixRepresentationOfElement( a, F )( function )

Here F is either a finite extension of the ``base field'' GF(p) or of the rationals Q}, and ain F. The command MatrixRepresentationOfElement returns a matrix representation of a over the base field.

If the element a is defined over the base field then it returns the corresponding 1x 1 matrix.

gap> a:=Random(GF(4));
0*Z(2)
gap> M:=MatrixRepresentationOfElement(a,GF(4));; Display(M);
 .
gap> a:=Random(GF(4));
Z(2^2)
gap> M:=MatrixRepresentationOfElement(a,GF(4));; Display(M);
 . 1
 1 1
gap>

7.5-11 ReciprocalPolynomial
> ReciprocalPolynomial( P )( function )

ReciprocalPolynomial returns the reciprocal of polynomial P. This is a polynomial with coefficients of P in the reverse order. So if P=a_0 + a_1 X + ... + a_n X^n, the reciprocal polynomial is P'=a_n + a_n-1 X + ... + a_0 X^n.

This command can also be called using the syntax ReciprocalPolynomial( P , n ). In this form, the number of coefficients of P is assumed to be less than or equal to n+1 (with zero coefficients added in the highest degrees, if necessary). Therefore, the reciprocal polynomial also has degree n+1.

gap> P := UnivariatePolynomial( GF(3), Z(3)^0 * [1,0,1,2] );
Z(3)^0+x_1^2-x_1^3
gap> RecP := ReciprocalPolynomial( P );
-Z(3)^0+x_1+x_1^3
gap> ReciprocalPolynomial( RecP ) = P;
true 
gap> P := UnivariatePolynomial( GF(3), Z(3)^0 * [1,0,1,2] );
Z(3)^0+x_1^2-x_1^3
gap> ReciprocalPolynomial( P, 6 );
-x_1^3+x_1^4+x_1^6

7.5-12 CyclotomicCosets
> CyclotomicCosets( q, n )( function )

CyclotomicCosets returns the cyclotomic cosets of q mod n. q and n must be relatively prime. Each of the elements of the returned list is a list of integers that belong to one cyclotomic coset. A q-cyclotomic coset of s mod n is a set of the form s,sq,sq^2,...,sq^r-1, where r is the smallest positive integer such that sq^r-s is 0 mod n. In other words, each coset contains all multiplications of the coset representative by q mod n. The coset representative is the smallest integer that isn't in the previous cosets.

gap> CyclotomicCosets( 2, 15 );
[ [ 0 ], [ 1, 2, 4, 8 ], [ 3, 6, 12, 9 ], [ 5, 10 ],
  [ 7, 14, 13, 11 ] ]
gap> CyclotomicCosets( 7, 6 );
[ [ 0 ], [ 1 ], [ 2 ], [ 3 ], [ 4 ], [ 5 ] ] 

7.5-13 WeightHistogram
> WeightHistogram( C[, h] )( function )

The function WeightHistogram plots a histogram of weights in code C. The maximum length of a column is h. Default value for h is 1/3 of the size of the screen. The number that appears at the top of the histogram is the maximum value of the list of weights.

gap> H := HammingCode(2, GF(5));
a linear [6,4,3]1 Hamming (2,5) code over GF(5)
gap> WeightDistribution(H);
[ 1, 0, 0, 80, 120, 264, 160 ]
gap> WeightHistogram(H);
264----------------
               *
               *
               *
               *
               *  *
            *  *  *
         *  *  *  *
         *  *  *  *
+--------+--+--+--+--
0  1  2  3  4  5  6 

7.5-14 MultiplicityInList
> MultiplicityInList( L, a )( function )

This is a very simple list command which returns how many times a occurs in L. It returns 0 if a is not in L. (The GAP command Collected does not quite handle this "extreme" case.)

gap> L:=[1,2,3,4,3,2,1,5,4,3,2,1];;
gap> MultiplicityInList(L,1);
3
gap> MultiplicityInList(L,6);
0

7.5-15 MostCommonInList
> MostCommonInList( L )( function )

Input: a list L

Output: an a in L which occurs at least as much as any other in L

gap> L:=[1,2,3,4,3,2,1,5,4,3,2,1];;
gap> MostCommonInList(L);
1

7.5-16 RotateList
> RotateList( L )( function )

Input: a list L

Output: a list L' which is the cyclic rotation of L (to the right)

gap> L:=[1,2,3,4];;
gap> RotateList(L);
[2,3,4,1]

7.5-17 CirculantMatrix
> CirculantMatrix( k, L )( function )

Input: integer k, a list L of length n

Output: kxn matrix whose rows are cyclic rotations of the list L

gap> k:=3; L:=[1,2,3,4];;
gap> M:=CirculantMatrix(k,L);;
gap> Display(M);

7.6 Miscellaneous polynomial functions

In this section we describe several multivariate polynomial GAP functions GUAVA uses for constructing codes or performing calculations with codes.

7.6-1 MatrixTransformationOnMultivariatePolynomial
> MatrixTransformationOnMultivariatePolynomial ( AfR )( function )

A is an nx n matrix with entries in a field F, R is a polynomial ring of n variables, say F[x_1,...,x_n], and f is a polynomial in R. Returns the composition fcirc A.

7.6-2 DegreeMultivariatePolynomial
> DegreeMultivariatePolynomial( f, R )( function )

This command takes two arguments, f, a multivariate polynomial, and R a polynomial ring over a field F containing f, say R=F[x_1,x_2,...,x_n]. The output is simply the maximum degrees of all the monomials occurring in f.

This command can be used to compute the degree of an affine plane curve.

gap> F:=GF(11);;
gap> R2:=PolynomialRing(F,2);
PolynomialRing(..., [ x_1, x_2 ])
gap> vars:=IndeterminatesOfPolynomialRing(R2);;
gap> x:=vars[1];; y:=vars[2];;
gap> poly:=y^2-x*(x^2-1);;
gap> DegreeMultivariatePolynomial(poly,R2);
3

7.6-3 DegreesMultivariatePolynomial
> DegreesMultivariatePolynomial( f, R )( function )

Returns a list of information about the multivariate polynomial f. Nice for other programs but mostly unreadable by GAP users.

gap> F:=GF(11);;
gap> R2:=PolynomialRing(F,2);
PolynomialRing(..., [ x_1, x_2 ])
gap> vars:=IndeterminatesOfPolynomialRing(R2);;
gap> x:=vars[1];; y:=vars[2];;
gap> poly:=y^2-x*(x^2-1);;
gap> DegreesMultivariatePolynomial(poly,R2);
[ [ [ x_1, x_1, 1 ], [ x_1, x_2, 0 ] ], [ [ x_2^2, x_1, 0 ], [ x_2^2, x_2, 2 ] ],
  [ [ x_1^3, x_1, 3 ], [ x_1^3, x_2, 0 ] ] ]
gap>

7.6-4 CoefficientMultivariatePolynomial
> CoefficientMultivariatePolynomial( f, var, power, R )( function )

The command CoefficientMultivariatePolynomial takes four arguments: a multivariant polynomial f, a variable name var, an integer power, and a polynomial ring R containing f. For example, if f is a multivariate polynomial in R = F[x_1,x_2,...,x_n] then var must be one of the x_i. The output is the coefficient of x_i^power in f.

(Not sure if F needs to be a field in fact ...)

Related to the GAP command PolynomialCoefficientsPolynomial.

gap> F:=GF(11);;
gap> R2:=PolynomialRing(F,2);
PolynomialRing(..., [ x_1, x_2 ])
gap> vars:=IndeterminatesOfPolynomialRing(R2);;
gap> x:=vars[1];; y:=vars[2];;
gap> poly:=y^2-x*(x^2-1);;
gap> PolynomialCoefficientsOfPolynomial(poly,x);
[ x_2^2, Z(11)^0, 0*Z(11), -Z(11)^0 ]
gap> PolynomialCoefficientsOfPolynomial(poly,y);
[ -x_1^3+x_1, 0*Z(11), Z(11)^0 ]
gap> CoefficientMultivariatePolynomial(poly,y,0,R2);
-x_1^3+x_1
gap> CoefficientMultivariatePolynomial(poly,y,1,R2);
0*Z(11)
gap> CoefficientMultivariatePolynomial(poly,y,2,R2);
Z(11)^0
gap> CoefficientMultivariatePolynomial(poly,x,0,R2);
x_2^2
gap> CoefficientMultivariatePolynomial(poly,x,1,R2);
Z(11)^0
gap> CoefficientMultivariatePolynomial(poly,x,2,R2);
0*Z(11)
gap> CoefficientMultivariatePolynomial(poly,x,3,R2);
-Z(11)^0

7.6-5 SolveLinearSystem
> SolveLinearSystem( L, vars )( function )

Input: L is a list of linear forms in the variables vars.

Output: the solution of the system, if its unique.

The procedure is straightforward: Find the associated matrix A, find the "constant vector" b, and solve A*v=b. No error checking is performed.

Related to the GAP command SolutionMat( A, b ).

gap> F:=GF(11);;
gap> R2:=PolynomialRing(F,2);
PolynomialRing(..., [ x_1, x_2 ])
gap> vars:=IndeterminatesOfPolynomialRing(R2);;
gap> x:=vars[1];; y:=vars[2];;
gap> f:=3*y-3*x+1;; g:=-5*y+2*x-7;;
gap> soln:=SolveLinearSystem([f,g],[x,y]);
[ Z(11)^3, Z(11)^2 ]
gap> Value(f,[x,y],soln); # checking okay
0*Z(11)
gap> Value(g,[x,y],col); # checking okay
0*Z(11)

7.6-6 GuavaVersion
> GuavaVersion( )( function )

Returns the current version of Guava. Same as guava\_version().

gap> GuavaVersion();
"2.7"

7.6-7 ZechLog
> ZechLog( x, b, F )( function )

Returns the Zech log of x to base b, ie the i such that $x+1=b^i$, so $y+z=y(1+z/y)=b^k$, where k=Log(y,b)+ZechLog(z/y,b) and b must be a primitive element of F.

gap> F:=GF(11);; l := One(F);;
gap> ZechLog(2*l,8*l,F);
-24
gap> 8*l+l;(2*l)^(-24);
Z(11)^6
Z(11)^6

7.6-8 CoefficientToPolynomial
> CoefficientToPolynomial( coeffs, R )( function )

The function CoefficientToPolynomial returns the degree d-1 polynomial c_0+c_1x+...+c_d-1x^d-1, where coeffs is a list of elements of a field, coeffs= c_0,...,c_d-1, and R is a univariate polynomial ring.

gap> F:=GF(11);
GF(11)
gap> R1:=PolynomialRing(F,["a"]);;
gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
gap> coeffs:=Z(11)^0*[1,2,3,4];
[ Z(11)^0, Z(11), Z(11)^8, Z(11)^2 ]
gap> CoefficientToPolynomial(coeffs,R1);
Z(11)^2*a^3+Z(11)^8*a^2+Z(11)*a+Z(11)^0

7.6-9 DegreesMonomialTerm
> DegreesMonomialTerm( m, R )( function )

The function DegreesMonomialTerm returns the list of degrees to which each variable in the multivariate polynomial ring R occurs in the monomial m, where coeffs is a list of elements of a field.

gap> F:=GF(11);
GF(11)
gap> R1:=PolynomialRing(F,["a"]);;
gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];;
gap> b:=X(F,"b",var1);
b
gap> var2:=Concatenation(var1,[b]);
[ a, b ]
gap> R2:=PolynomialRing(F,var2);
PolynomialRing(..., [ a, b ])
gap> c:=X(F,"c",var2);
c
gap> var3:=Concatenation(var2,[c]);
[ a, b, c ]
gap> R3:=PolynomialRing(F,var3);
PolynomialRing(..., [ a, b, c ])
gap> m:=b^3*c^7;
b^3*c^7
gap> DegreesMonomialTerm(m,R3);
[ 0, 3, 7 ]

7.6-10 DivisorsMultivariatePolynomial
> DivisorsMultivariatePolynomial( f, R )( function )

The function DivisorsMultivariatePolynomial returns the list of polynomial divisors of f in the multivariate polynomial ring R with coefficients in a field. This program uses a simple but slow algorithm (see Joachim von zur Gathen, Jürgen Gerhard, [GG03], exercise 16.10) which first converts the multivariate polynomial f to an associated univariate polynomial f^*, then Factors f^*, and finally converts these univariate factors back into the multivariate polynomial factors of f. Since Factors is non-deterministic, DivisorsMultivariatePolynomial is non-deterministic as well.

gap> R2:=PolynomialRing(GF(3),["x1","x2"]);
PolynomialRing(..., [ x1, x2 ])
gap> vars:=IndeterminatesOfPolynomialRing(R2);
[ x1, x2 ]
gap> x2:=vars[2];
x2
gap> x1:=vars[1];
x1
gap> f:=x1^3+x2^3;;
gap> DivisorsMultivariatePolynomial(f,R2);
[ x1+x2, x1+x2, x1+x2 ]

7.7 GNU Free Documentation License

GNU Free Documentation License Version 1.2, November 2002

Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

0. PREAMBLE

The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

1. APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".

Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.

A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.

The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

2. VERBATIM COPYING

You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

You may also lend copies, under the same conditions stated above, and you may publicly display copies.

3. COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

4. MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.

B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.

C. State on the Title page the name of the publisher of the Modified Version, as the publisher.

D. Preserve all the copyright notices of the Document.

E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.

G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.

H. Include an unaltered copy of this License.

I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.

J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.

K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.

L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.

M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.

N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.

O. Preserve any Warranty Disclaimers.

If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.

You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

5. COMBINING DOCUMENTS

You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".

6. COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

7. AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.

If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

8. TRANSLATION

Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

9. TERMINATION

You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

10. FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

generated by GAPDoc2HTML

guava-3.6/doc/chap4.txt0000644017361200001450000031652011027015733014655 0ustar tabbottcrontab 4. Codes A code is a set of codewords (recall a codeword in GUAVA is simply a sequence of elements of a finite field GF(q), where q is a prime power). We call these the elements of the code. Depending on the type of code, a codeword can be interpreted as a vector or as a polynomial. This is explained in more detail in Chapter 3.. In GUAVA, codes can be a set specified by its elements (this will be called an unrestricted code), by a generator matrix listing a set of basis elements (for a linear code) or by a generator polynomial (for a cyclic code). Any code can be defined by its elements. If you like, you can give the code a name. --------------------------- Example ---------------------------- gap> C := ElementsCode(["1100", "1010", "0001"], "example code", GF(2) ); a (4,3,1..4)2..4 example code over GF(2)  ------------------------------------------------------------------ An (n,M,d) code is a code with word length n, size M and minimum distance d. If the minimum distance has not yet been calculated, the lower bound and upper bound are printed (except in the case where the code is a random linear codes, where these are not printed for efficiency reasons). So a (4,3,1..4)2..4 code over GF(2) means a binary unrestricted code of length 4, with 3 elements and the minimum distance is greater than or equal to 1 and less than or equal to 4 and the covering radius is greater than or equal to 2 and less than or equal to 4. --------------------------- Example ---------------------------- gap> C := ElementsCode(["1100", "1010", "0001"], "example code", GF(2) ); a (4,3,1..4)2..4 example code over GF(2)  gap> MinimumDistance(C); 2 gap> C; a (4,3,2)2..4 example code over GF(2)  ------------------------------------------------------------------ If the set of elements is a linear subspace of GF(q)^n, the code is called linear. If a code is linear, it can be defined by its generator matrix or parity check matrix. By definition, the rows of the generator matrix is a basis for the code (as a vector space over GF(q)). By definition, the rows of the parity check matrix is a basis for the dual space of the code, C^* = \{ v \in GF(q)^n\ |\ v\cdot c = 0,\ for \ all\ c \in C \}. --------------------------- Example ---------------------------- gap> G := GeneratorMatCode([[1,0,1],[0,1,2]], "demo code", GF(3) ); a linear [3,2,1..2]1 demo code over GF(3)  ------------------------------------------------------------------ So a linear [n, k, d]r code is a code with word length n, dimension k, minimum distance d and covering radius r. If the code is linear and all cyclic shifts of its codewords (regarded as n-tuples) are again codewords, the code is called cyclic. All elements of a cyclic code are multiples of the monic polynomial modulo a polynomial x^n -1, where n is the word length of the code. Such a polynomial is called a generator polynomial The generator polynomial must divide x^n-1 and its quotient is called a check polynomial. Multiplying a codeword in a cyclic code by the check polynomial yields zero (modulo the polynomial x^n -1). In GUAVA, a cyclic code can be defined by either its generator polynomial or check polynomial. --------------------------- Example ---------------------------- gap> G := GeneratorPolCode(Indeterminate(GF(2))+Z(2)^0, 7, GF(2) ); a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2) ------------------------------------------------------------------ It is possible that GUAVA does not know that an unrestricted code is in fact linear. This situation occurs for example when a code is generated from a list of elements with the function ElementsCode (see ElementsCode (5.1-1)). By calling the function IsLinearCode (see IsLinearCode (4.3-4)), GUAVA tests if the code can be represented by a generator matrix. If so, the code record and the operations are converted accordingly. --------------------------- Example ---------------------------- gap> L := Z(2)*[ [0,0,0], [1,0,0], [0,1,1], [1,1,1] ];; gap> C := ElementsCode( L, GF(2) ); a (3,4,1..3)1 user defined unrestricted code over GF(2) # so far, GUAVA does not know what kind of code this is gap> IsLinearCode( C ); true # it is linear gap> C; a linear [3,2,1]1 user defined unrestricted code over GF(2)  ------------------------------------------------------------------ Of course the same holds for unrestricted codes that in fact are cyclic, or codes, defined by a generator matrix, that actually are cyclic. Codes are printed simply by giving a small description of their parameters, the word length, size or dimension and perhaps the minimum distance, followed by a short description and the base field of the code. The function Display gives a more detailed description, showing the construction history of the code. GUAVA doesn't place much emphasis on the actual encoding and decoding processes; some algorithms have been included though. Encoding works simply by multiplying an information vector with a code, decoding is done by the functions Decode or Decodeword. For more information about encoding and decoding, see sections 4.2 and 4.10-1. --------------------------- Example ---------------------------- gap> R := ReedMullerCode( 1, 3 ); a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) gap> w := [ 1, 0, 1, 1 ] * R; [ 1 0 0 1 1 0 0 1 ] gap> Decode( R, w ); [ 1 0 1 1 ] gap> Decode( R, w + "10000000" ); # One error at the first position [ 1 0 1 1 ] # Corrected by Guava  ------------------------------------------------------------------ Sections 4.1 and 4.2 describe the operations that are available for codes. Section 4.3 describe the functions that tests whether an object is a code and what kind of code it is (see IsCode, IsLinearCode (4.3-4) and IsCyclicCode) and various other boolean functions for codes. Section 4.4 describe functions about equivalence and isomorphism of codes (see IsEquivalent (4.4-1), CodeIsomorphism (4.4-2) and AutomorphismGroup (4.4-3)). Section 4.5 describes functions that work on domains (see Chapter "Domains and their Elements" in the GAP Reference Manual). Section 4.6 describes functions for printing and displaying codes. Section 4.7 describes functions that return the matrices and polynomials that define a code (see GeneratorMat (4.7-1), CheckMat (4.7-2), GeneratorPol (4.7-3), CheckPol (4.7-4), RootsOfCode (4.7-5)). Section 4.8 describes functions that return the basic parameters of codes (see WordLength (4.8-1), Redundancy (4.8-2) and MinimumDistance (4.8-3)). Section 4.9 describes functions that return distance and weight distributions (see WeightDistribution (4.9-2), InnerDistribution (4.9-3), OuterDistribution (4.9-5) and DistancesDistribution (4.9-4)). Section 4.10 describes functions that are related to decoding (see Decode (4.10-1), Decodeword (4.10-2), Syndrome (4.10-8), SyndromeTable (4.10-9) and StandardArray (4.10-10)). In Chapters 5. and 6. which follow, we describe functions that generate and manipulate codes. 4.1 Comparisons of Codes 4.1-1 = > =( C1, C2 ) ______________________________________________________function The equality operator C1 = C2 evaluates to `true' if the codes C1 and C2 are equal, and to `false' otherwise. The equality operator is also denoted EQ, and Eq(C1,C2) is the same as C1 = C2. There is also an inequality operator, < >, or not EQ. Note that codes are equal if and only if their set of elements are equal. Codes can also be compared with objects of other types. Of course they are never equal. --------------------------- Example ---------------------------- gap> M := [ [0, 0], [1, 0], [0, 1], [1, 1] ];; gap> C1 := ElementsCode( M, GF(2) ); a (2,4,1..2)0 user defined unrestricted code over GF(2) gap> M = C1; false gap> C2 := GeneratorMatCode( [ [1, 0], [0, 1] ], GF(2) ); a linear [2,2,1]0 code defined by generator matrix over GF(2) gap> C1 = C2; true gap> ReedMullerCode( 1, 3 ) = HadamardCode( 8 ); true gap> WholeSpaceCode( 5, GF(4) ) = WholeSpaceCode( 5, GF(2) ); false ------------------------------------------------------------------ Another way of comparing codes is IsEquivalent, which checks if two codes are equivalent (see IsEquivalent (4.4-1)). By the way, this called CodeIsomorphism. For the current version of GUAVA, unless one of the codes is unrestricted, this calls Leon's C program (which only works for binary linear codes and only on a unix/linux computer). 4.2 Operations for Codes 4.2-1 + > +( C1, C2 ) ______________________________________________________function The operator `+' evaluates to the direct sum of the codes C1 and C2. See DirectSumCode (6.2-1). --------------------------- Example ---------------------------- gap> C1:=RandomLinearCode(10,5); a [10,5,?] randomly generated code over GF(2) gap> C2:=RandomLinearCode(9,4); a [9,4,?] randomly generated code over GF(2) gap> C1+C2; a linear [10,9,1]0..10 unknown linear code over GF(2) ------------------------------------------------------------------ 4.2-2 * > *( C1, C2 ) ______________________________________________________function The operator `*' evaluates to the direct product of the codes C1 and C2. See DirectProductCode (6.2-3). --------------------------- Example ---------------------------- gap> C1 := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) ); a linear [4,2,1]1 code defined by generator matrix over GF(2) gap> C2 := GeneratorMatCode( [ [0,0,1, 1], [0,0,0, 1] ], GF(2) ); a linear [4,2,1]1 code defined by generator matrix over GF(2) gap> C1*C2; a linear [16,4,1]4..12 direct product code ------------------------------------------------------------------ 4.2-3 * > *( m, C ) ________________________________________________________function The operator m*C evaluates to the element of C belonging to information word ('message') m. Here m may be a vector, polynomial, string or codeword or a list of those. This is the way to do encoding in GUAVA. C must be linear, because in GUAVA, encoding by multiplication is only defined for linear codes. If C is a cyclic code, this multiplication is the same as multiplying an information polynomial m by the generator polynomial of C. If C is a linear code, it is equal to the multiplication of an information vector m by a generator matrix of C. To invert this, use the function InformationWord (see InformationWord (4.2-4), which simply calls the function Decode). --------------------------- Example ---------------------------- gap> C := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) ); a linear [4,2,1]1 code defined by generator matrix over GF(2) gap> m:=Codeword("11"); [ 1 1 ] gap> m*C; [ 1 1 0 0 ] ------------------------------------------------------------------ 4.2-4 InformationWord > InformationWord( C, c ) __________________________________________function Here C is a linear code and c is a codeword in it. The command InformationWord returns the message word (or 'information digits') m satisfying c=m*C. This command simply calls Decode, provided c in C is true. Otherwise, it returns an error. To invert this, use the encoding function * (see * (4.2-3)). --------------------------- Example ---------------------------- gap> C:=HammingCode(3); a linear [7,4,3]1 Hamming (3,2) code over GF(2) gap> c:=Random(C); [ 0 0 0 1 1 1 1 ] gap> InformationWord(C,c); [ 0 1 1 1 ] gap> c:=Codeword("1111100"); [ 1 1 1 1 1 0 0 ] gap> InformationWord(C,c); "ERROR: codeword must belong to code" gap> C:=NordstromRobinsonCode(); a (16,256,6)4 Nordstrom-Robinson code over GF(2) gap> c:=Random(C); [ 0 0 0 1 0 0 0 1 0 0 1 0 1 1 0 1 ] gap> InformationWord(C,c); "ERROR: code must be linear" ------------------------------------------------------------------ 4.3 Boolean Functions for Codes 4.3-1 in > in( c, C ) _______________________________________________________function The command c in C evaluates to `true' if C contains the codeword or list of codewords specified by c. Of course, c and C must have the same word lengths and base fields. --------------------------- Example ---------------------------- gap> C:= HammingCode( 2 );; eC:= AsSSortedList( C ); [ [ 0 0 0 ], [ 1 1 1 ] ] gap> eC[2] in C; true gap> [ 0 ] in C; false  ------------------------------------------------------------------ 4.3-2 IsSubset > IsSubset( C1, C2 ) _______________________________________________function The command IsSubset(C1,C2) returns `true' if C2 is a subcode of C1, i.e. if C1 contains all the elements of C2. --------------------------- Example ---------------------------- gap> IsSubset( HammingCode(3), RepetitionCode( 7 ) ); true gap> IsSubset( RepetitionCode( 7 ), HammingCode( 3 ) ); false gap> IsSubset( WholeSpaceCode( 7 ), HammingCode( 3 ) ); true ------------------------------------------------------------------ 4.3-3 IsCode > IsCode( obj ) ____________________________________________________function IsCode returns `true' if obj, which can be an object of arbitrary type, is a code and `false' otherwise. Will cause an error if obj is an unbound variable. --------------------------- Example ---------------------------- gap> IsCode( 1 ); false gap> IsCode( ReedMullerCode( 2,3 ) ); true ------------------------------------------------------------------ 4.3-4 IsLinearCode > IsLinearCode( obj ) ______________________________________________function IsLinearCode checks if object obj (not necessarily a code) is a linear code. If a code has already been marked as linear or cyclic, the function automatically returns `true'. Otherwise, the function checks if a basis G of the elements of obj exists that generates the elements of obj. If so, G is recorded as a generator matrix of obj and the function returns `true'. If not, the function returns `false'. --------------------------- Example ---------------------------- gap> C := ElementsCode( [ [0,0,0],[1,1,1] ], GF(2) ); a (3,2,1..3)1 user defined unrestricted code over GF(2) gap> IsLinearCode( C ); true gap> IsLinearCode( ElementsCode( [ [1,1,1] ], GF(2) ) ); false gap> IsLinearCode( 1 ); false  ------------------------------------------------------------------ 4.3-5 IsCyclicCode > IsCyclicCode( obj ) ______________________________________________function IsCyclicCode checks if the object obj is a cyclic code. If a code has already been marked as cyclic, the function automatically returns `true'. Otherwise, the function checks if a polynomial g exists that generates the elements of obj. If so, g is recorded as a generator polynomial of obj and the function returns `true'. If not, the function returns `false'. --------------------------- Example ---------------------------- gap> C := ElementsCode( [ [0,0,0], [1,1,1] ], GF(2) ); a (3,2,1..3)1 user defined unrestricted code over GF(2) gap> # GUAVA does not know the code is cyclic gap> IsCyclicCode( C ); # this command tells GUAVA to find out true gap> IsCyclicCode( HammingCode( 4, GF(2) ) ); false gap> IsCyclicCode( 1 ); false  ------------------------------------------------------------------ 4.3-6 IsPerfectCode > IsPerfectCode( C ) _______________________________________________function IsPerfectCode(C) returns `true' if C is a perfect code. If Csubset GF(q)^n then, by definition, this means that for some positive integer t, the space GF(q)^n is covered by non-overlapping spheres of (Hamming) radius t centered at the codewords in C. For a code with odd minimum distance d = 2t+1, this is the case when every word of the vector space of C is at distance at most t from exactly one element of C. Codes with even minimum distance are never perfect. In fact, a code that is not "trivially perfect" (the binary repetition codes of odd length, the codes consisting of one word, and the codes consisting of the whole vector space), and does not have the parameters of a Hamming or Golay code, cannot be perfect (see section 1.12 in [HP03]). --------------------------- Example ---------------------------- gap> H := HammingCode(2); a linear [3,1,3]1 Hamming (2,2) code over GF(2) gap> IsPerfectCode( H ); true gap> IsPerfectCode( ElementsCode([[1,1,0],[0,0,1]],GF(2)) ); true gap> IsPerfectCode( ReedSolomonCode( 6, 3 ) ); false gap> IsPerfectCode( BinaryGolayCode() ); true  ------------------------------------------------------------------ 4.3-7 IsMDSCode > IsMDSCode( C ) ___________________________________________________function IsMDSCode(C) returns true if C is a maximum distance separable (MDS) code. A linear [n, k, d]-code of length n, dimension k and minimum distance d is an MDS code if k=n-d+1, in other words if C meets the Singleton bound (see UpperBoundSingleton (7.1-1)). An unrestricted (n, M, d) code is called MDS if k=n-d+1, with k equal to the largest integer less than or equal to the logarithm of M with base q, the size of the base field of C. Well-known MDS codes include the repetition codes, the whole space codes, the even weight codes (these are the only binary MDS codes) and the Reed-Solomon codes. --------------------------- Example ---------------------------- gap> C1 := ReedSolomonCode( 6, 3 ); a cyclic [6,4,3]2 Reed-Solomon code over GF(7) gap> IsMDSCode( C1 ); true # 6-3+1 = 4 gap> IsMDSCode( QRCode( 23, GF(2) ) ); false  ------------------------------------------------------------------ 4.3-8 IsSelfDualCode > IsSelfDualCode( C ) ______________________________________________function IsSelfDualCode(C) returns `true' if C is self-dual, i.e. when C is equal to its dual code (see also DualCode (6.1-14)). A code is self-dual if it contains all vectors that its elements are orthogonal to. If a code is self-dual, it automatically is self-orthogonal (see IsSelfOrthogonalCode (4.3-9)). If C is a non-linear code, it cannot be self-dual (the dual code is always linear), so `false' is returned. A linear code can only be self-dual when its dimension k is equal to the redundancy r. --------------------------- Example ---------------------------- gap> IsSelfDualCode( ExtendedBinaryGolayCode() ); true gap> C := ReedMullerCode( 1, 3 ); a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) gap> DualCode( C ) = C; true  ------------------------------------------------------------------ 4.3-9 IsSelfOrthogonalCode > IsSelfOrthogonalCode( C ) ________________________________________function IsSelfOrthogonalCode(C) returns `true' if C is self-orthogonal. A code is self-orthogonal if every element of C is orthogonal to all elements of C, including itself. (In the linear case, this simply means that the generator matrix of C multiplied with its transpose yields a null matrix.) --------------------------- Example ---------------------------- gap> R := ReedMullerCode(1,4); a linear [16,5,8]6 Reed-Muller (1,4) code over GF(2) gap> IsSelfOrthogonalCode(R); true gap> IsSelfDualCode(R); false  ------------------------------------------------------------------ 4.3-10 IsDoublyEvenCode > IsDoublyEvenCode( C ) ____________________________________________function IsDoublyEvenCode(C) returns `true' if C is a binary linear code which has codewords of weight divisible by 4 only. According to [HP03], a doubly-even code is self-orthogonal and every row in its generator matrix has weight that is divisible by 4. --------------------------- Example ---------------------------- gap> C:=BinaryGolayCode(); a cyclic [23,12,7]3 binary Golay code over GF(2) gap> WeightDistribution(C); [ 1, 0, 0, 0, 0, 0, 0, 253, 506, 0, 0, 1288, 1288, 0, 0, 506, 253, 0, 0, 0, 0, 0, 0, 1 ] gap> IsDoublyEvenCode(C);  false gap> C:=ExtendedCode(C);  a linear [24,12,8]4 extended code gap> WeightDistribution(C); [ 1, 0, 0, 0, 0, 0, 0, 0, 759, 0, 0, 0, 2576, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 1 ] gap> IsDoublyEvenCode(C);  true ------------------------------------------------------------------ 4.3-11 IsSinglyEvenCode > IsSinglyEvenCode( C ) ____________________________________________function IsSinglyEvenCode(C) returns `true' if C is a binary self-orthogonal linear code which is not doubly-even. In other words, C is a binary self-orthogonal code which has codewords of even weight. --------------------------- Example ---------------------------- gap> x:=Indeterminate(GF(2));  x_1 gap> C:=QuasiCyclicCode( [x^0, 1+x^3+x^5+x^6+x^7], 11, GF(2) ); a linear [22,11,1..6]4..7 quasi-cyclic code over GF(2) gap> IsSelfDualCode(C); # self-dual is a restriction of self-orthogonal true gap> IsDoublyEvenCode(C); false gap> IsSinglyEvenCode(C); true ------------------------------------------------------------------ 4.3-12 IsEvenCode > IsEvenCode( C ) __________________________________________________function IsEvenCode(C) returns `true' if C is a binary linear code which has codewords of even weight--regardless whether or not it is self-orthogonal. --------------------------- Example ---------------------------- gap> C:=BinaryGolayCode(); a cyclic [23,12,7]3 binary Golay code over GF(2) gap> IsSelfOrthogonalCode(C); false gap> IsEvenCode(C); false gap> C:=ExtendedCode(C); a linear [24,12,8]4 extended code gap> IsSelfOrthogonalCode(C); true gap> IsEvenCode(C); true gap> C:=ExtendedCode(QRCode(17,GF(2))); a linear [18,9,6]3..5 extended code gap> IsSelfOrthogonalCode(C); false gap> IsEvenCode(C); true ------------------------------------------------------------------ 4.3-13 IsSelfComplementaryCode > IsSelfComplementaryCode( C ) _____________________________________function IsSelfComplementaryCode returns `true' if v \in C \Rightarrow 1 - v \in C, where 1 is the all-one word of length n. --------------------------- Example ---------------------------- gap> IsSelfComplementaryCode( HammingCode( 3, GF(2) ) ); true gap> IsSelfComplementaryCode( EvenWeightSubcode( > HammingCode( 3, GF(2) ) ) ); false  ------------------------------------------------------------------ 4.3-14 IsAffineCode > IsAffineCode( C ) ________________________________________________function IsAffineCode returns `true' if C is an affine code. A code is called affine if it is an affine space. In other words, a code is affine if it is a coset of a linear code. --------------------------- Example ---------------------------- gap> IsAffineCode( HammingCode( 3, GF(2) ) ); true gap> IsAffineCode( CosetCode( HammingCode( 3, GF(2) ), > [ 1, 0, 0, 0, 0, 0, 0 ] ) ); true gap> IsAffineCode( NordstromRobinsonCode() ); false  ------------------------------------------------------------------ 4.3-15 IsAlmostAffineCode > IsAlmostAffineCode( C ) __________________________________________function IsAlmostAffineCode returns `true' if C is an almost affine code. A code is called almost affine if the size of any punctured code of C is q^r for some r, where q is the size of the alphabet of the code. Every affine code is also almost affine, and every code over GF(2) and GF(3) that is almost affine is also affine. --------------------------- Example ---------------------------- gap> code := ElementsCode( [ [0,0,0], [0,1,1], [0,2,2], [0,3,3], > [1,0,1], [1,1,0], [1,2,3], [1,3,2], > [2,0,2], [2,1,3], [2,2,0], [2,3,1], > [3,0,3], [3,1,2], [3,2,1], [3,3,0] ], > GF(4) );; gap> IsAlmostAffineCode( code ); true gap> IsAlmostAffineCode( NordstromRobinsonCode() ); false  ------------------------------------------------------------------ 4.4 Equivalence and Isomorphism of Codes 4.4-1 IsEquivalent > IsEquivalent( C1, C2 ) ___________________________________________function We say that C1 is permutation equivalent to C2 if C1 can be obtained from C2 by carrying out column permutations. IsEquivalent returns true if C1 and C2 are equivalent codes. At this time, IsEquivalent only handles binary codes. (The external unix/linux program desauto from J. S. Leon is called by IsEquivalent.) Of course, if C1 and C2 are equal, they are also equivalent. Note that the algorithm is very slow for non-linear codes. More generally, we say that C1 is equivalent to C2 if C1 can be obtained from C2 by carrying out column permutations and a permutation of the alphabet. --------------------------- Example ---------------------------- gap> x:= Indeterminate( GF(2) );; pol:= x^3+x+1;  Z(2)^0+x_1+x_1^3 gap> H := GeneratorPolCode( pol, 7, GF(2));  a cyclic [7,4,1..3]1 code defined by generator polynomial over GF(2) gap> H = HammingCode(3, GF(2)); false gap> IsEquivalent(H, HammingCode(3, GF(2))); true # H is equivalent to a Hamming code gap> CodeIsomorphism(H, HammingCode(3, GF(2))); (3,4)(5,6,7)  ------------------------------------------------------------------ 4.4-2 CodeIsomorphism > CodeIsomorphism( C1, C2 ) ________________________________________function If the two codes C1 and C2 are permutation equivalent codes (see IsEquivalent (4.4-1)), CodeIsomorphism returns the permutation that transforms C1 into C2. If the codes are not equivalent, it returns `false'. At this time, IsEquivalent only computes isomorphisms between binary codes on a linux/unix computer (since it calls Leon's C program desauto). --------------------------- Example ---------------------------- gap> x:= Indeterminate( GF(2) );; pol:= x^3+x+1;  Z(2)^0+x_1+x_1^3 gap> H := GeneratorPolCode( pol, 7, GF(2));  a cyclic [7,4,1..3]1 code defined by generator polynomial over GF(2) gap> CodeIsomorphism(H, HammingCode(3, GF(2))); (3,4)(5,6,7)  gap> PermutedCode(H, (3,4)(5,6,7)) = HammingCode(3, GF(2)); true  ------------------------------------------------------------------ 4.4-3 AutomorphismGroup > AutomorphismGroup( C ) ___________________________________________function AutomorphismGroup returns the automorphism group of a linear code C. For a binary code, the automorphism group is the largest permutation group of degree n such that each permutation applied to the columns of C again yields C. GUAVA calls the external program desauto written by J. S. Leon, if it exists, to compute the automorphism group. If Leon's program is not compiled on the system (and in the default directory) then it calls instead the much slower program PermutationAutomorphismGroup. See Leon [Leo82] for a more precise description of the method, and the guava/src/leon/doc subdirectory for for details about Leon's C programs. The function PermutedCode permutes the columns of a code (see PermutedCode (6.1-4)). --------------------------- Example ---------------------------- gap> R := RepetitionCode(7,GF(2)); a cyclic [7,1,7]3 repetition code over GF(2) gap> AutomorphismGroup(R); Sym( [ 1 .. 7 ] )  # every permutation keeps R identical gap> C := CordaroWagnerCode(7); a linear [7,2,4]3 Cordaro-Wagner code over GF(2) gap> AsSSortedList(C); [ [ 0 0 0 0 0 0 0 ], [ 0 0 1 1 1 1 1 ], [ 1 1 0 0 0 1 1 ], [ 1 1 1 1 1 0 0 ] ] gap> AutomorphismGroup(C); Group([ (3,4), (4,5), (1,6)(2,7), (1,2), (6,7) ]) gap> C2 := PermutedCode(C, (1,6)(2,7)); a linear [7,2,4]3 permuted code gap> AsSSortedList(C2); [ [ 0 0 0 0 0 0 0 ], [ 0 0 1 1 1 1 1 ], [ 1 1 0 0 0 1 1 ], [ 1 1 1 1 1 0 0 ] ] gap> C2 = C; true  ------------------------------------------------------------------ 4.4-4 PermutationAutomorphismGroup > PermutationAutomorphismGroup( C ) ________________________________function PermutationAutomorphismGroup returns the permutation automorphism group of a linear code C. This is the largest permutation group of degree n such that each permutation applied to the columns of C again yields C. It is written in GAP, so is much slower than AutomorphismGroup. When C is binary PermutationAutomorphismGroup does not call AutomorphismGroup, even though they agree mathematically in that case. This way PermutationAutomorphismGroup can be called on any platform which runs GAP. The older name for this command, PermutationGroup, will become obsolete in the next version of GAP. --------------------------- Example ---------------------------- gap> R := RepetitionCode(3,GF(3)); a cyclic [3,1,3]2 repetition code over GF(3) gap> G:=PermutationAutomorphismGroup(R); Group([ (), (1,3), (1,2,3), (2,3), (1,3,2), (1,2) ]) gap> G=SymmetricGroup(3); true ------------------------------------------------------------------ 4.5 Domain Functions for Codes These are some GAP functions that work on `Domains' in general. Their specific effect on `Codes' is explained here. 4.5-1 IsFinite > IsFinite( C ) ____________________________________________________function IsFinite is an implementation of the GAP domain function IsFinite. It returns true for a code C. --------------------------- Example ---------------------------- gap> IsFinite( RepetitionCode( 1000, GF(11) ) ); true  ------------------------------------------------------------------ 4.5-2 Size > Size( C ) ________________________________________________________function Size returns the size of C, the number of elements of the code. If the code is linear, the size of the code is equal to q^k, where q is the size of the base field of C and k is the dimension. --------------------------- Example ---------------------------- gap> Size( RepetitionCode( 1000, GF(11) ) ); 11 gap> Size( NordstromRobinsonCode() ); 256  ------------------------------------------------------------------ 4.5-3 LeftActingDomain > LeftActingDomain( C ) ____________________________________________function LeftActingDomain returns the base field of a code C. Each element of C consists of elements of this base field. If the base field is F, and the word length of the code is n, then the codewords are elements of F^n. If C is a cyclic code, its elements are interpreted as polynomials with coefficients over F. --------------------------- Example ---------------------------- gap> C1 := ElementsCode([[0,0,0], [1,0,1], [0,1,0]], GF(4)); a (3,3,1..3)2..3 user defined unrestricted code over GF(4) gap> LeftActingDomain( C1 ); GF(2^2) gap> LeftActingDomain( HammingCode( 3, GF(9) ) ); GF(3^2)  ------------------------------------------------------------------ 4.5-4 Dimension > Dimension( C ) ___________________________________________________function Dimension returns the parameter k of C, the dimension of the code, or the number of information symbols in each codeword. The dimension is not defined for non-linear codes; Dimension then returns an error. --------------------------- Example ---------------------------- gap> Dimension( NullCode( 5, GF(5) ) ); 0 gap> C := BCHCode( 15, 4, GF(4) ); a cyclic [15,9,5]3..4 BCH code, delta=5, b=1 over GF(4) gap> Dimension( C ); 9 gap> Size( C ) = Size( LeftActingDomain( C ) ) ^ Dimension( C ); true  ------------------------------------------------------------------ 4.5-5 AsSSortedList > AsSSortedList( C ) _______________________________________________function AsSSortedList (as strictly sorted list) returns an immutable, duplicate free list of the elements of C. For a finite field GF(q) generated by powers of Z(q), the ordering on GF(q)=\{ 0 , Z(q)^0, Z(q), Z(q)^2, ...Z(q)^{q-2} \} is that determined by the exponents i. These elements are of the type codeword (see Codeword (3.1-1)). Note that for large codes, generating the elements may be very time- and memory-consuming. For generating a specific element or a subset of the elements, use CodewordNr (see CodewordNr (3.1-2)). --------------------------- Example ---------------------------- gap> C := ConferenceCode( 5 ); a (5,12,2)1..4 conference code over GF(2) gap> AsSSortedList( C ); [ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 1 1 ], [ 0 1 1 0 1 ], [ 0 1 1 1 0 ],   [ 1 0 0 1 1 ], [ 1 0 1 0 1 ], [ 1 0 1 1 0 ], [ 1 1 0 0 1 ], [ 1 1 0 1 0 ],   [ 1 1 1 0 0 ], [ 1 1 1 1 1 ] ] gap> CodewordNr( C, [ 1, 2 ] ); [ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ] ] ------------------------------------------------------------------ 4.6 Printing and Displaying Codes 4.6-1 Print > Print( C ) _______________________________________________________function Print prints information about C. This is the same as typing the identifier C at the GAP-prompt. If the argument is an unrestricted code, information in the form a (n,M,d)r ... code over GF(q) is printed, where n is the word length, M the number of elements of the code, d the minimum distance and r the covering radius. If the argument is a linear code, information in the form a linear [n,k,d]r ... code over GF(q) is printed, where n is the word length, k the dimension of the code, d the minimum distance and r the covering radius. Except for codes produced by RandomLinearCode, if d is not yet known, it is displayed in the form lowerbound..upperbound and if r is not yet known, it is displayed in the same way. For certain ranges of n, the values of lowerbound and upperbound are obtained from tables. The function Display gives more information. See Display (4.6-3). --------------------------- Example ---------------------------- gap> C1 := ExtendedCode( HammingCode( 3, GF(2) ) ); a linear [8,4,4]2 extended code gap> Print( "This is ", NordstromRobinsonCode(), ". \n"); This is a (16,256,6)4 Nordstrom-Robinson code over GF(2).  ------------------------------------------------------------------ 4.6-2 String > String( C ) ______________________________________________________function String returns information about C in a string. This function is used by Print. --------------------------- Example ---------------------------- gap> x:= Indeterminate( GF(3) );; pol:= x^2+1; x_1^2+Z(3)^0 gap> Factors(pol); [ x_1^2+Z(3)^0 ] gap> H := GeneratorPolCode( pol, 8, GF(3)); a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3) gap> String(H); "a cyclic [8,6,1..2]1..2 code defined by generator polynomial over GF(3)" ------------------------------------------------------------------ 4.6-3 Display > Display( C ) _____________________________________________________function Display prints the method of construction of code C. With this history, in most cases an equal or equivalent code can be reconstructed. If C is an unmanipulated code, the result is equal to output of the function Print (see Print (4.6-1)). --------------------------- Example ---------------------------- gap> Display( RepetitionCode( 6, GF(3) ) ); a cyclic [6,1,6]4 repetition code over GF(3) gap> C1 := ExtendedCode( HammingCode(2) );; gap> C2 := PuncturedCode( ReedMullerCode( 2, 3 ) );; gap> Display( LengthenedCode( UUVCode( C1, C2 ) ) ); a linear [12,8,2]2..4 code, lengthened with 1 column(s) of a linear [11,8,1]1..2 U U+V construction code of U: a linear [4,1,4]2 extended code of  a linear [3,1,3]1 Hamming (2,2) code over GF(2) V: a linear [7,7,1]0 punctured code of  a cyclic [8,7,2]1 Reed-Muller (2,3) code over GF(2) ------------------------------------------------------------------ 4.6-4 DisplayBoundsInfo > DisplayBoundsInfo( bds ) _________________________________________function DisplayBoundsInfo prints the method of construction of the code C indicated in bds:= BoundsMinimumDistance( n, k, GF(q) ). --------------------------- Example ---------------------------- gap> bounds := BoundsMinimumDistance( 20, 17, GF(4) ); gap> DisplayBoundsInfo(bounds); an optimal linear [20,17,d] code over GF(4) has d=3 -------------------------------------------------------------------------------------------------- Lb(20,17)=3, by shortening of: Lb(21,18)=3, by applying contruction B to a [81,77,3] code Lb(81,77)=3, by shortening of: Lb(85,81)=3, reference: Ham -------------------------------------------------------------------------------------------------- Ub(20,17)=3, by considering shortening to: Ub(7,4)=3, by considering puncturing to: Ub(6,4)=2, by construction B applied to: Ub(2,1)=2, repetition code -------------------------------------------------------------------------------------------------- Reference Ham: %T this reference is unknown, for more info %T contact A.E. Brouwer (aeb@cwi.nl) ------------------------------------------------------------------ 4.7 Generating (Check) Matrices and Polynomials 4.7-1 GeneratorMat > GeneratorMat( C ) ________________________________________________function GeneratorMat returns a generator matrix of C. The code consists of all linear combinations of the rows of this matrix. If until now no generator matrix of C was determined, it is computed from either the parity check matrix, the generator polynomial, the check polynomial or the elements (if possible), whichever is available. If C is a non-linear code, the function returns an error. --------------------------- Example ---------------------------- gap> GeneratorMat( HammingCode( 3, GF(2) ) ); [ [ an immutable GF2 vector of length 7],   [ an immutable GF2 vector of length 7],   [ an immutable GF2 vector of length 7],   [ an immutable GF2 vector of length 7] ] gap> Display(last);  1 1 1 . . . .  1 . . 1 1 . .  . 1 . 1 . 1 .  1 1 . 1 . . 1 gap> GeneratorMat( RepetitionCode( 5, GF(25) ) ); [ [ Z(5)^0, Z(5)^0, Z(5)^0, Z(5)^0, Z(5)^0 ] ] gap> GeneratorMat( NullCode( 14, GF(4) ) ); [ ] ------------------------------------------------------------------ 4.7-2 CheckMat > CheckMat( C ) ____________________________________________________function CheckMat returns a parity check matrix of C. The code consists of all words orthogonal to each of the rows of this matrix. The transpose of the matrix is a right inverse of the generator matrix. The parity check matrix is computed from either the generator matrix, the generator polynomial, the check polynomial or the elements of C (if possible), whichever is available. If C is a non-linear code, the function returns an error. --------------------------- Example ---------------------------- gap> CheckMat( HammingCode(3, GF(2) ) ); [ [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ],   [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ],  [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ] ] gap> Display(last);  . . . 1 1 1 1  . 1 1 . . 1 1  1 . 1 . 1 . 1 gap> CheckMat( RepetitionCode( 5, GF(25) ) ); [ [ Z(5)^0, Z(5)^2, 0*Z(5), 0*Z(5), 0*Z(5) ],  [ 0*Z(5), Z(5)^0, Z(5)^2, 0*Z(5), 0*Z(5) ],  [ 0*Z(5), 0*Z(5), Z(5)^0, Z(5)^2, 0*Z(5) ],  [ 0*Z(5), 0*Z(5), 0*Z(5), Z(5)^0, Z(5)^2 ] ] gap> CheckMat( WholeSpaceCode( 12, GF(4) ) ); [ ]  ------------------------------------------------------------------ 4.7-3 GeneratorPol > GeneratorPol( C ) ________________________________________________function GeneratorPol returns the generator polynomial of C. The code consists of all multiples of the generator polynomial modulo x^n-1, where n is the word length of C. The generator polynomial is determined from either the check polynomial, the generator or check matrix or the elements of C (if possible), whichever is available. If C is not a cyclic code, the function returns `false'. --------------------------- Example ---------------------------- gap> GeneratorPol(GeneratorMatCode([[1, 1, 0], [0, 1, 1]], GF(2))); Z(2)^0+x_1 gap> GeneratorPol( WholeSpaceCode( 4, GF(2) ) ); Z(2)^0 gap> GeneratorPol( NullCode( 7, GF(3) ) ); -Z(3)^0+x_1^7 ------------------------------------------------------------------ 4.7-4 CheckPol > CheckPol( C ) ____________________________________________________function CheckPol returns the check polynomial of C. The code consists of all polynomials f with f\cdot h \equiv 0 \ ({\rm mod}\ x^n-1), where h is the check polynomial, and n is the word length of C. The check polynomial is computed from the generator polynomial, the generator or parity check matrix or the elements of C (if possible), whichever is available. If C if not a cyclic code, the function returns an error. --------------------------- Example ---------------------------- gap> CheckPol(GeneratorMatCode([[1, 1, 0], [0, 1, 1]], GF(2))); Z(2)^0+x_1+x_1^2 gap> CheckPol(WholeSpaceCode(4, GF(2))); Z(2)^0+x_1^4 gap> CheckPol(NullCode(7,GF(3))); Z(3)^0 ------------------------------------------------------------------ 4.7-5 RootsOfCode > RootsOfCode( C ) _________________________________________________function RootsOfCode returns a list of all zeros of the generator polynomial of a cyclic code C. These are finite field elements in the splitting field of the generator polynomial, GF(q^m), m is the multiplicative order of the size of the base field of the code, modulo the word length. The reverse process, constructing a code from a set of roots, can be carried out by the function RootsCode (see RootsCode (5.5-3)). --------------------------- Example ---------------------------- gap> C1 := ReedSolomonCode( 16, 5 ); a cyclic [16,12,5]3..4 Reed-Solomon code over GF(17) gap> RootsOfCode( C1 ); [ Z(17), Z(17)^2, Z(17)^3, Z(17)^4 ] gap> C2 := RootsCode( 16, last ); a cyclic [16,12,5]3..4 code defined by roots over GF(17) gap> C1 = C2; true  ------------------------------------------------------------------ 4.8 Parameters of Codes 4.8-1 WordLength > WordLength( C ) __________________________________________________function WordLength returns the parameter n of C, the word length of the elements. Elements of cyclic codes are polynomials of maximum degree n-1, as calculations are carried out modulo x^n-1. --------------------------- Example ---------------------------- gap> WordLength( NordstromRobinsonCode() ); 16 gap> WordLength( PuncturedCode( WholeSpaceCode(7) ) ); 6 gap> WordLength( UUVCode( WholeSpaceCode(7), RepetitionCode(7) ) ); 14  ------------------------------------------------------------------ 4.8-2 Redundancy > Redundancy( C ) __________________________________________________function Redundancy returns the redundancy r of C, which is equal to the number of check symbols in each element. If C is not a linear code the redundancy is not defined and Redundancy returns an error. If a linear code C has dimension k and word length n, it has redundancy r=n-k. --------------------------- Example ---------------------------- gap> C := TernaryGolayCode(); a cyclic [11,6,5]2 ternary Golay code over GF(3) gap> Redundancy(C); 5 gap> Redundancy( DualCode(C) ); 6  ------------------------------------------------------------------ 4.8-3 MinimumDistance > MinimumDistance( C ) _____________________________________________function MinimumDistance returns the minimum distance of C, the largest integer d with the property that every element of C has at least a Hamming distance d (see DistanceCodeword (3.6-2)) to any other element of C. For linear codes, the minimum distance is equal to the minimum weight. This means that d is also the smallest positive value with w[d+1] <> 0, where w=(w[1],w[2],...,w[n]) is the weight distribution of C (see WeightDistribution (4.9-2)). For unrestricted codes, d is the smallest positive value with w[d+1] <> 0, where w is the inner distribution of C (see InnerDistribution (4.9-3)). For codes with only one element, the minimum distance is defined to be equal to the word length. For linear codes C, the algorithm used is the following: After replacing C by a permutation equivalent C', one may assume the generator matrix has the following form G=(I_k , | , A), for some kx (n-k) matrix A. If A=0 then return d(C)=1. Next, find the minimum distance of the code spanned by the rows of A. Call this distance d(A). Note that d(A) is equal to the the Hamming distance d(v,0) where v is some proper linear combination of i distinct rows of A. Return d(C)=d(A)+i, where i is as in the previous step. This command may also be called using the syntax MinimumDistance(C, w). In this form, MinimumDistance returns the minimum distance of a codeword w to the code C, also called the distance from w to C. This is the smallest value d for which there is an element c of the code C which is at distance d from w. So d is also the minimum value for which D[d+1] <> 0, where D is the distance distribution of w to C (see DistancesDistribution (4.9-4)). Note that w must be an element of the same vector space as the elements of C. w does not necessarily belong to the code (if it does, the minimum distance is zero). --------------------------- Example ---------------------------- gap> C := MOLSCode(7);; MinimumDistance(C); 3 gap> WeightDistribution(C); [ 1, 0, 0, 24, 24 ] gap> MinimumDistance( WholeSpaceCode( 5, GF(3) ) ); 1 gap> MinimumDistance( NullCode( 4, GF(2) ) ); 4 gap> C := ConferenceCode(9);; MinimumDistance(C); 4 gap> InnerDistribution(C); [ 1, 0, 0, 0, 63/5, 9/5, 18/5, 0, 9/10, 1/10 ]  gap> C := MOLSCode(7);; w := CodewordNr( C, 17 ); [ 3 3 6 2 ] gap> MinimumDistance( C, w ); 0 gap> C := RemovedElementsCode( C, w );; MinimumDistance( C, w ); 3 # so w no longer belongs to C  ------------------------------------------------------------------ See also the GUAVA commands relating to bounds on the minimum distance in section 7.1. 4.8-4 MinimumDistanceLeon > MinimumDistanceLeon( C ) _________________________________________function MinimumDistanceLeon returns the ``probable'' minimum distance d_Leon of a linear binary code C, using an implementation of Leon's probabilistic polynomial time algorithm. Briefly: Let C be a linear code of dimension k over GF(q) as above. The algorithm has input parameters s and rho, where s is an integer between 2 and n-k, and rho is an integer between 2 and k. -- Find a generator matrix G of C. -- Randomly permute the columns of G. -- Perform Gaussian elimination on the permuted matrix to obtain a new matrix of the following form: G=(I_{k} \, | \, Z \, | \, B) with Z a kx s matrix. If (Z,B) is the zero matrix then return 1 for the minimum distance. If Z=0 but not B then either choose another permutation of the rows of C or return `method fails'. -- Search Z for at most rho rows that lead to codewords of weight less than rho. -- For these codewords, compute the weight of the whole word in C. Return this weight. (See for example J. S. Leon, [Leo88] for more details.) Sometimes (as is the case in GUAVA) this probabilistic algorithm is repeated several times and the most commonly occurring value is taken. --------------------------- Example ---------------------------- gap> C:=RandomLinearCode(50,22,GF(2)); a [50,22,?] randomly generated code over GF(2) gap> MinimumDistanceLeon(C); time; 6 211 gap> MinimumDistance(C); time; 6 1204 ------------------------------------------------------------------ 4.8-5 MinimumWeight > MinimumWeight( C ) _______________________________________________function MinimumWeight returns the minimum Hamming weight of a linear code C. At the moment, this function works for binary and ternary codes only. The MinimumWeight function relies on an external executable program which is written in C language. As a consequence, the execution time of MinimumWeight function is faster than that of MinimumDistance (4.8-3) function. The MinimumWeight function implements Chen's [Che69] algorithm if C is cyclic, and Zimmermann's [Zim96] algorithm if C is a general linear code. This function has a built-in check on the constraints of the minimum weight codewords. For example, for a self-orthogonal code over GF(3), the minimum weight codewords have weight that is divisible by 3, i.e. 0 mod 3 congruence. Similary, self-orthogonal codes over GF(2) have codeword weights that are divisible by 4 and even codes over GF(2) have codewords weights that are divisible by 2. By taking these constraints into account, in many cases, the execution time may be significantly reduced. Consider the minimum Hamming weight enumeration of the [151,45] binary cyclic code (second example below). This cyclic code is self-orthogonal, so the weight of all codewords is divisible by 4. Without considering this constraint, the computation will finish at information weight 10, rather than 9. We can see that, this 0 mod 4 constraint on the codeword weights, has allowed us to avoid enumeration of b(45,10) = 3,190,187,286 additional codewords, where b(n,k)=n!/((n-k)!k!) is the binomial coefficient of integers n and k. Note that the C source code for this minimum weight computation has not yet been optimised, especially the code for GF(3), and there are chances to improve the speed of this function. Your contributions are most welcomed. If you find any bugs on this function, please report it to ctjhai@plymouth.ac.uk. --------------------------- Example ---------------------------- gap> # Extended ternary quadratic residue code of length 48 gap> n := 47;; gap> x := Indeterminate(GF(3));; gap> F := Factors(x^n-1);; gap> v := List([1..n], i->Zero(GF(3)));; gap> v := v + MutableCopyMat(VectorCodeword( Codeword(F[2]) ));; gap> G := CirculantMatrix(24, v);; gap> for i in [1..Size(G)] do; s:=Zero(GF(3)); > for j in [1..Size(G[i])] do; s:=s+G[i][j]; od; Append(G[i], [ s ]); > od;; gap> C := GeneratorMatCodeNC(G, GF(3)); a [48,24,?] randomly generated code over GF(3) gap> MinimumWeight(C); [48,24] linear code over GF(3) - minimum weight evaluation Known lower-bound: 1 There are 2 generator matrices, ranks : 24 24  The weight of the minimum weight codeword satisfies 0 mod 3 congruence Enumerating codewords with information weight 1 (w=1)  Found new minimum weight 15 Number of matrices required for codeword enumeration 2 Completed w= 1, 48 codewords enumerated, lower-bound 6, upper-bound 15 Termination expected with information weight 6 at matrix 1 ----------------------------------------------------------------------------- Enumerating codewords with information weight 2 (w=2) using 2 matrices Completed w= 2, 1104 codewords enumerated, lower-bound 6, upper-bound 15 Termination expected with information weight 6 at matrix 1 ----------------------------------------------------------------------------- Enumerating codewords with information weight 3 (w=3) using 2 matrices Completed w= 3, 16192 codewords enumerated, lower-bound 9, upper-bound 15 Termination expected with information weight 6 at matrix 1 ----------------------------------------------------------------------------- Enumerating codewords with information weight 4 (w=4) using 2 matrices Completed w= 4, 170016 codewords enumerated, lower-bound 12, upper-bound 15 Termination expected with information weight 6 at matrix 1 ----------------------------------------------------------------------------- Enumerating codewords with information weight 5 (w=5) using 2 matrices Completed w= 5, 1360128 codewords enumerated, lower-bound 12, upper-bound 15 Termination expected with information weight 6 at matrix 1 ----------------------------------------------------------------------------- Enumerating codewords with information weight 6 (w=6) using 1 matrices Completed w= 6, 4307072 codewords enumerated, lower-bound 15, upper-bound 15 ----------------------------------------------------------------------------- Minimum weight: 15 15 gap>   gap> # Binary cyclic code [151,45,36] gap> n := 151;; gap> x := Indeterminate(GF(2));; gap> F := Factors(x^n-1);; gap> C := CheckPolCode(F[2]*F[3]*F[3]*F[4], n, GF(2)); a cyclic [151,45,1..50]31..75 code defined by check polynomial over GF(2) gap> MinimumWeight(C); [151,45] cyclic code over GF(2) - minimum weight evaluation Known lower-bound: 1 The weight of the minimum weight codeword satisfies 0 mod 4 congruence Enumerating codewords with information weight 1 (w=1)  Found new minimum weight 56  Found new minimum weight 44 Number of matrices required for codeword enumeration 1 Completed w= 1, 45 codewords enumerated, lower-bound 8, upper-bound 44 Termination expected with information weight 11 ----------------------------------------------------------------------------- Enumerating codewords with information weight 2 (w=2) using 1 matrix Completed w= 2, 990 codewords enumerated, lower-bound 12, upper-bound 44 Termination expected with information weight 11 ----------------------------------------------------------------------------- Enumerating codewords with information weight 3 (w=3) using 1 matrix  Found new minimum weight 40  Found new minimum weight 36 Completed w= 3, 14190 codewords enumerated, lower-bound 16, upper-bound 36 Termination expected with information weight 9 ----------------------------------------------------------------------------- Enumerating codewords with information weight 4 (w=4) using 1 matrix Completed w= 4, 148995 codewords enumerated, lower-bound 20, upper-bound 36 Termination expected with information weight 9 ----------------------------------------------------------------------------- Enumerating codewords with information weight 5 (w=5) using 1 matrix Completed w= 5, 1221759 codewords enumerated, lower-bound 24, upper-bound 36 Termination expected with information weight 9 ----------------------------------------------------------------------------- Enumerating codewords with information weight 6 (w=6) using 1 matrix Completed w= 6, 8145060 codewords enumerated, lower-bound 24, upper-bound 36 Termination expected with information weight 9 ----------------------------------------------------------------------------- Enumerating codewords with information weight 7 (w=7) using 1 matrix Completed w= 7, 45379620 codewords enumerated, lower-bound 28, upper-bound 36 Termination expected with information weight 9 ----------------------------------------------------------------------------- Enumerating codewords with information weight 8 (w=8) using 1 matrix Completed w= 8, 215553195 codewords enumerated, lower-bound 32, upper-bound 36 Termination expected with information weight 9 ----------------------------------------------------------------------------- Enumerating codewords with information weight 9 (w=9) using 1 matrix Completed w= 9, 886163135 codewords enumerated, lower-bound 36, upper-bound 36 ----------------------------------------------------------------------------- Minimum weight: 36 36 ------------------------------------------------------------------ 4.8-6 DecreaseMinimumDistanceUpperBound > DecreaseMinimumDistanceUpperBound( C, t, m ) _____________________function DecreaseMinimumDistanceUpperBound is an implementation of the algorithm for the minimum distance of a linear binary code C by Leon [Leo88]. This algorithm tries to find codewords with small minimum weights. The parameter t is at least 1 and less than the dimension of C. The best results are obtained if it is close to the dimension of the code. The parameter m gives the number of runs that the algorithm will perform. The result returned is a record with two fields; the first, mindist, gives the lowest weight found, and word gives the corresponding codeword. (This was implemented before MinimumDistanceLeon but independently. The older manual had given the command incorrectly, so the command was only found after reading all the *.gi files in the GUAVA library. Though both MinimumDistance and MinimumDistanceLeon often run much faster than DecreaseMinimumDistanceUpperBound, DecreaseMinimumDistanceUpperBound appears to be more accurate than MinimumDistanceLeon.) --------------------------- Example ---------------------------- gap> C:=RandomLinearCode(5,2,GF(2)); a [5,2,?] randomly generated code over GF(2) gap> DecreaseMinimumDistanceUpperBound(C,1,4); rec( mindist := 3, word := [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ] ) gap> MinimumDistance(C); 3 gap> C:=RandomLinearCode(8,4,GF(2)); a [8,4,?] randomly generated code over GF(2) gap> DecreaseMinimumDistanceUpperBound(C,3,4); rec( mindist := 2,  word := [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ] ) gap> MinimumDistance(C); 2 ------------------------------------------------------------------ 4.8-7 MinimumDistanceRandom > MinimumDistanceRandom( C, num, s ) _______________________________function MinimumDistanceRandom returns an upper bound for the minimum distance d_random of a linear binary code C, using a probabilistic polynomial time algorithm. Briefly: Let C be a linear code of dimension k over GF(q) as above. The algorithm has input parameters num and s, where s is an integer between 2 and n-1, and num is an integer greater than or equal to 1. -- Find a generator matrix G of C. -- Randomly permute the columns of G, written G_p.. -- G=(A, B) with A a kx s matrix. If A is the zero matrix then return `method fails'. -- Search A for at most 5 rows that lead to codewords, in the code C_A with generator matrix A, of minimum weight. -- For these codewords, use the associated linear combination to compute the weight of the whole word in C. Return this weight and codeword. This probabilistic algorithm is repeated num times (with different random permutations of the rows of G each time) and the weight and codeword of the lowest occurring weight is taken. --------------------------- Example ---------------------------- gap> C:=RandomLinearCode(60,20,GF(2)); a [60,20,?] randomly generated code over GF(2) gap> #mindist(C);time; gap> #mindistleon(C,10,30);time; #doesn't work well gap> a:=MinimumDistanceRandom(C,10,30);time; # done 10 times -with fastest time!!   This is a probabilistic algorithm which may return the wrong answer. [ 12, [ 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0   1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 ] ] 130 gap> a[2] in C; true gap> b:=DecreaseMinimumDistanceUpperBound(C,10,1); time; #only done once! rec( mindist := 12, word := [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2),   Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2),   0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2),   Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2),   0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2),   0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2),   0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ] ) 649 gap> Codeword(b!.word) in C; true gap> MinimumDistance(C);time; 12 196 gap> c:=MinimumDistanceLeon(C);time; 12 66 gap> C:=RandomLinearCode(30,10,GF(3)); a [30,10,?] randomly generated code over GF(3) gap> a:=MinimumDistanceRandom(C,10,10);time;   This is a probabilistic algorithm which may return the wrong answer. [ 13, [ 0 0 0 1 0 0 0 0 0 0 1 0 2 2 1 1 0 2 2 0 1 0 2 1 0 0 0 1 0 2 ] ] 229 gap> a[2] in C; true gap> MinimumDistance(C);time; 9 45 gap> c:=MinimumDistanceLeon(C); Code must be binary. Quitting. 0 gap> a:=MinimumDistanceRandom(C,1,29);time;   This is a probabilistic algorithm which may return the wrong answer. [ 10, [ 0 0 1 0 2 0 2 0 1 0 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 2 2 2 0 ] ] 53 ------------------------------------------------------------------ 4.8-8 CoveringRadius > CoveringRadius( C ) ______________________________________________function CoveringRadius returns the covering radius of a linear code C. This is the smallest number r with the property that each element v of the ambient vector space of C has at most a distance r to the code C. So for each vector v there must be an element c of C with d(v,c) <= r. The smallest covering radius of any [n,k] binary linear code is denoted t(n,k). A binary linear code with reasonable small covering radius is called a covering code. If C is a perfect code (see IsPerfectCode (4.3-6)), the covering radius is equal to t, the number of errors the code can correct, where d = 2t+1, with d the minimum distance of C (see MinimumDistance (4.8-3)). If there exists a function called SpecialCoveringRadius in the `operations' field of the code, then this function will be called to compute the covering radius of the code. At the moment, no code-specific functions are implemented. If the length of BoundsCoveringRadius (see BoundsCoveringRadius (7.2-1)), is 1, then the value in C.boundsCoveringRadius is returned. Otherwise, the function C.operations.CoveringRadius is executed, unless the redundancy of C is too large. In the last case, a warning is issued. The algorithm used to compute the covering radius is the following. First, CosetLeadersMatFFE is used to compute the list of coset leaders (which returns a codeword in each coset of GF(q)^n/C of minimum weight). Then WeightVecFFE is used to compute the weight of each of these coset leaders. The program returns the maximum of these weights. --------------------------- Example ---------------------------- gap> H := RandomLinearCode(10, 5, GF(2)); a [10,5,?] randomly generated code over GF(2) gap> CoveringRadius(H); 3 gap> H := HammingCode(4, GF(2));; IsPerfectCode(H); true gap> CoveringRadius(H); 1 # Hamming codes have minimum distance 3 gap> CoveringRadius(ReedSolomonCode(7,4)); 3  gap> CoveringRadius( BCHCode( 17, 3, GF(2) ) ); 3 gap> CoveringRadius( HammingCode( 5, GF(2) ) ); 1 gap> C := ReedMullerCode( 1, 9 );; gap> CoveringRadius( C ); CoveringRadius: warning, the covering radius of this code cannot be computed straightforward. Try to use IncreaseCoveringRadiusLowerBound( code ). (see the manual for more details). The covering radius of code lies in the interval: [ 240 .. 248 ] ------------------------------------------------------------------ See also the GUAVA commands relating to bounds on the minimum distance in section 7.2. 4.8-9 SetCoveringRadius > SetCoveringRadius( C, intlist ) __________________________________function SetCoveringRadius enables the user to set the covering radius herself, instead of letting GUAVA compute it. If intlist is an integer, GUAVA will simply put it in the `boundsCoveringRadius' field. If it is a list of integers, however, it will intersect this list with the `boundsCoveringRadius' field, thus taking the best of both lists. If this would leave an empty list, the field is set to intlist. Because some other computations use the covering radius of the code, it is important that the entered value is not wrong, otherwise new results may be invalid. --------------------------- Example ---------------------------- gap> C := BCHCode( 17, 3, GF(2) );; gap> BoundsCoveringRadius( C ); [ 3 .. 4 ] gap> SetCoveringRadius( C, [ 2 .. 3 ] ); gap> BoundsCoveringRadius( C ); [ [ 2 .. 3 ] ] ------------------------------------------------------------------ 4.9 Distributions 4.9-1 MinimumWeightWords > MinimumWeightWords( C ) __________________________________________function MinimumWeightWords returns the list of minimum weight codewords of C. This algorithm is written in GAP is slow, so is only suitable for small codes. This does not call the very fast function MinimumWeight (see MinimumWeight (4.8-5)). --------------------------- Example ---------------------------- gap> C:=HammingCode(3,GF(2)); a linear [7,4,3]1 Hamming (3,2) code over GF(2) gap> MinimumWeightWords(C); [ [ 1 0 0 0 0 1 1 ], [ 0 1 0 1 0 1 0 ], [ 0 1 0 0 1 0 1 ], [ 1 0 0 1 1 0 0 ], [ 0 0 1 0 1 1 0 ],  [ 0 0 1 1 0 0 1 ], [ 1 1 1 0 0 0 0 ] ]  ------------------------------------------------------------------ 4.9-2 WeightDistribution > WeightDistribution( C ) __________________________________________function WeightDistribution returns the weight distribution of C, as a vector. The i^th element of this vector contains the number of elements of C with weight i-1. For linear codes, the weight distribution is equal to the inner distribution (see InnerDistribution (4.9-3)). If w is the weight distribution of a linear code C, it must have the zero codeword, so w[1] = 1 (one word of weight 0). Some codes, such as the Hamming codes, have precomputed weight distributions. For others, the program WeightDistribution calls the GAP program DistancesDistributionMatFFEVecFFE, which is written in C. See also CodeWeightEnumerator. --------------------------- Example ---------------------------- gap> WeightDistribution( ConferenceCode(9) ); [ 1, 0, 0, 0, 0, 18, 0, 0, 0, 1 ] gap> WeightDistribution( RepetitionCode( 7, GF(4) ) ); [ 1, 0, 0, 0, 0, 0, 0, 3 ] gap> WeightDistribution( WholeSpaceCode( 5, GF(2) ) ); [ 1, 5, 10, 10, 5, 1 ]  ------------------------------------------------------------------ 4.9-3 InnerDistribution > InnerDistribution( C ) ___________________________________________function InnerDistribution returns the inner distribution of C. The i^th element of the vector contains the average number of elements of C at distance i-1 to an element of C. For linear codes, the inner distribution is equal to the weight distribution (see WeightDistribution (4.9-2)). Suppose w is the inner distribution of C. Then w[1] = 1, because each element of C has exactly one element at distance zero (the element itself). The minimum distance of C is the smallest value d > 0 with w[d+1] <> 0, because a distance between zero and d never occurs. See MinimumDistance (4.8-3). --------------------------- Example ---------------------------- gap> InnerDistribution( ConferenceCode(9) ); [ 1, 0, 0, 0, 63/5, 9/5, 18/5, 0, 9/10, 1/10 ] gap> InnerDistribution( RepetitionCode( 7, GF(4) ) ); [ 1, 0, 0, 0, 0, 0, 0, 3 ]  ------------------------------------------------------------------ 4.9-4 DistancesDistribution > DistancesDistribution( C, w ) ____________________________________function DistancesDistribution returns the distribution of the distances of all elements of C to a codeword w in the same vector space. The i^th element of the distance distribution is the number of codewords of C that have distance i-1 to w. The smallest value d with w[d+1] <> 0, is defined as the distance to C (see MinimumDistance (4.8-3)). --------------------------- Example ---------------------------- gap> H := HadamardCode(20); a (20,40,10)6..8 Hadamard code of order 20 over GF(2) gap> c := Codeword("10110101101010010101", H); [ 1 0 1 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 ] gap> DistancesDistribution(H, c); [ 0, 0, 0, 0, 0, 1, 0, 7, 0, 12, 0, 12, 0, 7, 0, 1, 0, 0, 0, 0, 0 ] gap> MinimumDistance(H, c); 5 # distance to H  ------------------------------------------------------------------ 4.9-5 OuterDistribution > OuterDistribution( C ) ___________________________________________function The function OuterDistribution returns a list of length q^n, where q is the size of the base field of C and n is the word length. The elements of the list consist of pairs, the first coordinate being an element of GF(q)^n (this is a codeword type) and the second coordinate being a distribution of distances to the code (a list of integers). This table is very large, and for n > 20 it will not fit in the memory of most computers. The function DistancesDistribution (see DistancesDistribution (4.9-4)) can be used to calculate one entry of the list. --------------------------- Example ---------------------------- gap> C := RepetitionCode( 3, GF(2) ); a cyclic [3,1,3]1 repetition code over GF(2) gap> OD := OuterDistribution(C); [ [ [ 0 0 0 ], [ 1, 0, 0, 1 ] ], [ [ 1 1 1 ], [ 1, 0, 0, 1 ] ],  [ [ 0 0 1 ], [ 0, 1, 1, 0 ] ], [ [ 1 1 0 ], [ 0, 1, 1, 0 ] ],  [ [ 1 0 0 ], [ 0, 1, 1, 0 ] ], [ [ 0 1 1 ], [ 0, 1, 1, 0 ] ],  [ [ 0 1 0 ], [ 0, 1, 1, 0 ] ], [ [ 1 0 1 ], [ 0, 1, 1, 0 ] ] ] gap> WeightDistribution(C) = OD[1][2]; true gap> DistancesDistribution( C, Codeword("110") ) = OD[4][2]; true  ------------------------------------------------------------------ 4.10 Decoding Functions 4.10-1 Decode > Decode( C, r ) ___________________________________________________function Decode decodes r (a 'received word') with respect to code C and returns the `message word' (i.e., the information digits associated to the codeword c in C closest to r). Here r can be a GUAVA codeword or a list of codewords. First, possible errors in r are corrected, then the codeword is decoded to an information codeword m (and not an element of C). If the code record has a field `specialDecoder', this special algorithm is used to decode the vector. Hamming codes, BCH codes, cyclic codes, and generalized Reed-Solomon have such a special algorithm. (The algorithm used for BCH codes is the Sugiyama algorithm described, for example, in section 5.4.3 of [HP03]. A special decoder has also being written for the generalized Reed-Solomon code using the interpolation algorithm. For cyclic codes, the error-trapping algorithm is used.) If C is linear and no special decoder field has been set then syndrome decoding is used. Otherwise (when C is non-linear), the nearest neighbor decoding algorithm is used (which is very slow). A special decoder can be created by defining a function C!.SpecialDecoder := function(C, r) ... end; The function uses the arguments C (the code record itself) and r (a vector of the codeword type) to decode r to an information vector. A normal decoder would take a codeword r of the same word length and field as C, and would return an information vector of length k, the dimension of C. The user is not restricted to these normal demands though, and can for instance define a decoder for non-linear codes. Encoding is done by multiplying the information vector with the code (see 4.2). --------------------------- Example ---------------------------- gap> C := HammingCode(3); a linear [7,4,3]1 Hamming (3,2) code over GF(2) gap> c := "1010"*C; # encoding [ 1 0 1 1 0 1 0 ] gap> Decode(C, c); # decoding [ 1 0 1 0 ] gap> Decode(C, Codeword("0010101")); [ 1 1 0 1 ] # one error corrected gap> C!.SpecialDecoder := function(C, c) > return NullWord(Dimension(C)); > end; function ( C, c ) ... end gap> Decode(C, c); [ 0 0 0 0 ] # new decoder always returns null word  ------------------------------------------------------------------ 4.10-2 Decodeword > Decodeword( C, r ) _______________________________________________function Decodeword decodes r (a 'received word') with respect to code C and returns the codeword c in C closest to r. Here r can be a GUAVA codeword or a list of codewords. If the code record has a field `specialDecoder', this special algorithm is used to decode the vector. Hamming codes, generalized Reed-Solomon codes, and BCH codes have such a special algorithm. (The algorithm used for BCH codes is the Sugiyama algorithm described, for example, in section 5.4.3 of [HP03]. The algorithm used for generalized Reed-Solomon codes is the ``interpolation algorithm'' described for example in chapter 5 of [JH04].) If C is linear and no special decoder field has been set then syndrome decoding is used. Otherwise, when C is non-linear, the nearest neighbor algorithm has been implemented (which should only be used for small-sized codes). --------------------------- Example ---------------------------- gap> C := HammingCode(3); a linear [7,4,3]1 Hamming (3,2) code over GF(2) gap> c := "1010"*C; # encoding [ 1 0 1 1 0 1 0 ] gap> Decodeword(C, c); # decoding [ 1 0 1 1 0 1 0 ] gap> gap> R:=PolynomialRing(GF(11),["t"]); GF(11)[t] gap> P:=List([1,3,4,5,7],i->Z(11)^i); [ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ] gap> C:=GeneralizedReedSolomonCode(P,3,R); a linear [5,3,1..3]2 generalized Reed-Solomon code over GF(11) gap> MinimumDistance(C); 3 gap> c:=Random(C); [ 0 9 6 2 1 ] gap> v:=Codeword("09620"); [ 0 9 6 2 0 ] gap> GeneralizedReedSolomonDecoderGao(C,v); [ 0 9 6 2 1 ] gap> Decodeword(C,v); # calls the special interpolation decoder [ 0 9 6 2 1 ] gap> G:=GeneratorMat(C); [ [ Z(11)^0, 0*Z(11), 0*Z(11), Z(11)^8, Z(11)^9 ],  [ 0*Z(11), Z(11)^0, 0*Z(11), Z(11)^0, Z(11)^8 ],  [ 0*Z(11), 0*Z(11), Z(11)^0, Z(11)^3, Z(11)^8 ] ] gap> C1:=GeneratorMatCode(G,GF(11)); a linear [5,3,1..3]2 code defined by generator matrix over GF(11) gap> Decodeword(C,v); # calls syndrome decoding [ 0 9 6 2 1 ] ------------------------------------------------------------------ 4.10-3 GeneralizedReedSolomonDecoderGao > GeneralizedReedSolomonDecoderGao( C, r ) _________________________function GeneralizedReedSolomonDecoderGao decodes r (a 'received word') to a codeword c in C in a generalized Reed-Solomon code C (see GeneralizedReedSolomonCode (5.6-2)), closest to r. Here r must be a GUAVA codeword. If the code record does not have name `generalized Reed-Solomon code' then an error is returned. Otherwise, the Gao decoder [Gao03] is used to compute c. For long codes, this method is faster in practice than the interpolation method used in Decodeword. --------------------------- Example ---------------------------- gap> R:=PolynomialRing(GF(11),["t"]); GF(11)[t] gap> P:=List([1,3,4,5,7],i->Z(11)^i); [ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ] gap> C:=GeneralizedReedSolomonCode(P,3,R); a linear [5,3,1..3]2 generalized Reed-Solomon code over GF(11) gap> MinimumDistance(C); 3 gap> c:=Random(C); [ 0 9 6 2 1 ] gap> v:=Codeword("09620"); [ 0 9 6 2 0 ] gap> GeneralizedReedSolomonDecoderGao(C,v);  [ 0 9 6 2 1 ] ------------------------------------------------------------------ 4.10-4 GeneralizedReedSolomonListDecoder > GeneralizedReedSolomonListDecoder( C, r, tau ) ___________________function GeneralizedReedSolomonListDecoder implements Sudans list-decoding algorithm (see section 12.1 of [JH04]) for ``low rate'' Reed-Solomon codes. It returns the list of all codewords in C which are a distance of at most tau from r (a 'received word'). C must be a generalized Reed-Solomon code C (see GeneralizedReedSolomonCode (5.6-2)) and r must be a GUAVA codeword. --------------------------- Example ---------------------------- gap> F:=GF(16); GF(2^4) gap> gap> a:=PrimitiveRoot(F);; b:=a^7;; b^4+b^3+1;  0*Z(2) gap> Pts:=List([0..14],i->b^i); [ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12, Z(2^4)^4,  Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4), Z(2^4)^8 ] gap> x:=X(F);; gap> R1:=PolynomialRing(F,[x]);; gap> vars:=IndeterminatesOfPolynomialRing(R1);; gap> y:=X(F,vars);; gap> R2:=PolynomialRing(F,[x,y]);; gap> C:=GeneralizedReedSolomonCode(Pts,3,R1);  a linear [15,3,1..13]10..12 generalized Reed-Solomon code over GF(16) gap> MinimumDistance(C); ## 6 error correcting 13 gap> z:=Zero(F);; gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];;  gap> r:=Codeword(r); [ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ] gap> cs:=GeneralizedReedSolomonListDecoder(C,r,2); time; [ [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ],  [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] ] 250 gap> c1:=cs[1]; c1 in C; [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ] true gap> c2:=cs[2]; c2 in C; [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] true gap> WeightCodeword(c1-r); 7 gap> WeightCodeword(c2-r); 7 ------------------------------------------------------------------ 4.10-5 BitFlipDecoder > BitFlipDecoder( C, r ) ___________________________________________function The iterative decoding method BitFlipDecoder must only be applied to LDPC codes. For more information on LDPC codes, refer to Section 5.8. For these codes, BitFlipDecoder decodes very quickly. (Warning: it can give wildly wrong results for arbitrary binary linear codes.) The bit flipping algorithm is described for example in Chapter 13 of [JH04]. --------------------------- Example ---------------------------- gap> C:=HammingCode(4,GF(2)); a linear [15,11,3]1 Hamming (4,2) code over GF(2) gap> c:=Random(C); [ 0 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ] gap> v:=List(c); [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2),  Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ] gap> v[1]:=Z(2)+v[1]; # flip 1st bit of c to create an error Z(2)^0 gap> v:=Codeword(v); [ 1 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ] gap> BitFlipDecoder(C,v); [ 0 0 0 1 0 0 1 0 0 1 1 0 1 0 1 ]   ------------------------------------------------------------------ 4.10-6 NearestNeighborGRSDecodewords > NearestNeighborGRSDecodewords( C, v, dist ) ______________________function NearestNeighborGRSDecodewords finds all generalized Reed-Solomon codewords within distance dist from v and the associated polynomial, using ``brute force''. Input: v is a received vector (a GUAVA codeword), C is a GRS code, dist > 0 is the distance from v to search in C. Output: a list of pairs [c,f(x)], where wt(c-v)<= dist-1 and c = (f(x_1),...,f(x_n)). --------------------------- Example ---------------------------- gap> F:=GF(16); GF(2^4) gap> a:=PrimitiveRoot(F);; b:=a^7; b^4+b^3+1; Z(2^4)^7 0*Z(2) gap> Pts:=List([0..14],i->b^i); [ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12,  Z(2^4)^4, Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4),  Z(2^4)^8 ] gap> x:=X(F);; gap> R1:=PolynomialRing(F,[x]);; gap> vars:=IndeterminatesOfPolynomialRing(R1);; gap> y:=X(F,vars);; gap> R2:=PolynomialRing(F,[x,y]);; gap> C:=GeneralizedReedSolomonCode(Pts,3,R1); a linear [15,3,1..13]10..12 generalized Reed-Solomon code over GF(16) gap> MinimumDistance(C); # 6 error correcting 13 gap> z:=Zero(F); 0*Z(2) gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];; # 7 errors gap> r:=Codeword(r); [ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ] gap> cs:=NearestNeighborGRSDecodewords(C,r,7); [ [ [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ], 0*Z(2) ],  [ [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ], x_1+Z(2)^0 ] ] ------------------------------------------------------------------ 4.10-7 NearestNeighborDecodewords > NearestNeighborDecodewords( C, v, dist ) _________________________function NearestNeighborDecodewords finds all codewords in a linear code C within distance dist from v, using ``brute force''. Input: v is a received vector (a GUAVA codeword), C is a linear code, dist > 0 is the distance from v to search in C. Output: a list of c in C, where wt(c-v)<= dist-1. --------------------------- Example ---------------------------- gap> F:=GF(16); GF(2^4) gap> a:=PrimitiveRoot(F);; b:=a^7; b^4+b^3+1; Z(2^4)^7 0*Z(2) gap> Pts:=List([0..14],i->b^i); [ Z(2)^0, Z(2^4)^7, Z(2^4)^14, Z(2^4)^6, Z(2^4)^13, Z(2^2), Z(2^4)^12,  Z(2^4)^4, Z(2^4)^11, Z(2^4)^3, Z(2^2)^2, Z(2^4)^2, Z(2^4)^9, Z(2^4),  Z(2^4)^8 ] gap> x:=X(F);; gap> R1:=PolynomialRing(F,[x]);; gap> vars:=IndeterminatesOfPolynomialRing(R1);; gap> y:=X(F,vars);; gap> R2:=PolynomialRing(F,[x,y]);; gap> C:=GeneralizedReedSolomonCode(Pts,3,R1); a linear [15,3,1..13]10..12 generalized Reed-Solomon code over GF(16) gap> MinimumDistance(C); 13 gap> z:=Zero(F); 0*Z(2) gap> r:=[z,z,z,z,z,z,z,z,b^6,b^2,b^5,b^14,b,b^7,b^11];; gap> r:=Codeword(r); [ 0 0 0 0 0 0 0 0 a^12 a^14 a^5 a^8 a^7 a^4 a^2 ] gap> cs:=NearestNeighborDecodewords(C,r,7); [ [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ],   [ 0 a^9 a^3 a^13 a^6 a^10 a^11 a a^12 a^14 a^5 a^8 a^7 a^4 a^2 ] ]  ------------------------------------------------------------------ 4.10-8 Syndrome > Syndrome( C, v ) _________________________________________________function Syndrome returns the syndrome of word v with respect to a linear code C. v is a codeword in the ambient vector space of C. If v is an element of C, the syndrome is a zero vector. The syndrome can be used for looking up an error vector in the syndrome table (see SyndromeTable (4.10-9)) that is needed to correct an error in v. A syndrome is not defined for non-linear codes. Syndrome then returns an error. --------------------------- Example ---------------------------- gap> C := HammingCode(4); a linear [15,11,3]1 Hamming (4,2) code over GF(2) gap> v := CodewordNr( C, 7 ); [ 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 ] gap> Syndrome( C, v ); [ 0 0 0 0 ] gap> Syndrome( C, Codeword( "000000001100111" ) ); [ 1 1 1 1 ] gap> Syndrome( C, Codeword( "000000000000001" ) ); [ 1 1 1 1 ] # the same syndrome: both codewords are in the same  # coset of C  ------------------------------------------------------------------ 4.10-9 SyndromeTable > SyndromeTable( C ) _______________________________________________function SyndromeTable returns a syndrome table of a linear code C, consisting of two columns. The first column consists of the error vectors that correspond to the syndrome vectors in the second column. These vectors both are of the codeword type. After calculating the syndrome of a word v with Syndrome (see Syndrome (4.10-8)), the error vector needed to correct v can be found in the syndrome table. Subtracting this vector from v yields an element of C. To make the search for the syndrome as fast as possible, the syndrome table is sorted according to the syndrome vectors. --------------------------- Example ---------------------------- gap> H := HammingCode(2); a linear [3,1,3]1 Hamming (2,2) code over GF(2) gap> SyndromeTable(H); [ [ [ 0 0 0 ], [ 0 0 ] ], [ [ 1 0 0 ], [ 0 1 ] ],  [ [ 0 1 0 ], [ 1 0 ] ], [ [ 0 0 1 ], [ 1 1 ] ] ] gap> c := Codeword("101"); [ 1 0 1 ] gap> c in H; false # c is not an element of H gap> Syndrome(H,c); [ 1 0 ] # according to the syndrome table,  # the error vector [ 0 1 0 ] belongs to this syndrome gap> c - Codeword("010") in H; true # so the corrected codeword is  # [ 1 0 1 ] - [ 0 1 0 ] = [ 1 1 1 ],  # this is an element of H  ------------------------------------------------------------------ 4.10-10 StandardArray > StandardArray( C ) _______________________________________________function StandardArray returns the standard array of a code C. This is a matrix with elements of the codeword type. It has q^r rows and q^k columns, where q is the size of the base field of C, r=n-k is the redundancy of C, and k is the dimension of C. The first row contains all the elements of C. Each other row contains words that do not belong to the code, with in the first column their syndrome vector (see Syndrome (4.10-8)). A non-linear code does not have a standard array. StandardArray then returns an error. Note that calculating a standard array can be very time- and memory- consuming. --------------------------- Example ---------------------------- gap> StandardArray(RepetitionCode(3));  [ [ [ 0 0 0 ], [ 1 1 1 ] ], [ [ 0 0 1 ], [ 1 1 0 ] ],   [ [ 0 1 0 ], [ 1 0 1 ] ], [ [ 1 0 0 ], [ 0 1 1 ] ] ] ------------------------------------------------------------------ 4.10-11 PermutationDecode > PermutationDecode( C, v ) ________________________________________function PermutationDecode performs permutation decoding when possible and returns original vector and prints 'fail' when not possible. This uses AutomorphismGroup in the binary case, and (the slower) PermutationAutomorphismGroup otherwise, to compute the permutation automorphism group P of C. The algorithm runs through the elements p of P checking if the weight of H(p* v) is less than (d-1)/2. If it is then the vector p* v is used to decode v: assuming C is in standard form then c=p^-1Em is the decoded word, where m is the information digits part of p* v. If no such p exists then ``fail'' is returned. See, for example, section 10.2 of Huffman and Pless [HP03] for more details. --------------------------- Example ---------------------------- gap> C0:=HammingCode(3,GF(2)); a linear [7,4,3]1 Hamming (3,2) code over GF(2) gap> G0:=GeneratorMat(C0);; gap> G := List(G0, ShallowCopy);; gap> PutStandardForm(G); () gap> Display(G);  1 . . . . 1 1  . 1 . . 1 . 1  . . 1 . 1 1 .  . . . 1 1 1 1 gap> H0:=CheckMat(C0);; gap> Display(H0);  . . . 1 1 1 1  . 1 1 . . 1 1  1 . 1 . 1 . 1 gap> c0:=Random(C0); [ 0 0 0 1 1 1 1 ] gap> v01:=c0[1]+Z(2)^2;; gap> v1:=List(c0, ShallowCopy);; gap> v1[1]:=v01;; gap> v1:=Codeword(v1); [ 1 0 0 1 1 1 1 ] gap> c1:=PermutationDecode(C0,v1); [ 0 0 0 1 1 1 1 ] gap> c1=c0; true ------------------------------------------------------------------ 4.10-12 PermutationDecodeNC > PermutationDecodeNC( C, v, P ) ___________________________________function Same as PermutationDecode except that one may enter the permutation automorphism group P in as an argument, saving time. Here P is a subgroup of the symmetric group on n letters, where n is the word length of C. guava-3.6/doc/chapInd.txt0000644017361200001450000003112011027015733015212 0ustar tabbottcrontab Index * 4.2-2 * 4.2-3 + 3.3-1 + 3.3-3 + 4.2-1 - 3.3-2 < > 3.2-1 < > 4.1-1 = 3.2-1 = 4.1-1 A(n,d) 7.1-7 acceptable coordinate 7.4-2 acceptable coordinate 7.4-3 AClosestVectorComb..MatFFEVecFFECoords 2.1-2 AClosestVectorCombinationsMatFFEVecFFE 2.1-1 ActionMoebiusTransformationOnDivisorP1  5.7-18 ActionMoebiusTransformationOnFunction  5.7-17 AddedElementsCode 6.1-8 affine code 4.3-13 AffineCurve 5.7-1 AffinePointsOnCurve 5.7-2 AlternantCode 5.2-6 AmalgamatedDirectSumCode 6.2-7 AreMOLS 7.3-13 AsSSortedList 4.5-5 AugmentedCode 6.1-6 AutomorphismGroup 4.4-3 BCHCode 5.5-4 BestKnownLinearCode 5.2-14 BinaryGolayCode 5.4-1 BitFlipDecoder 4.10-5 BlockwiseDirectSumCode 6.2-8 Bose distance 5.5-4 bound, Gilbert-Varshamov lower 7.1-9 bound, sphere packing lower 7.1-10 bounds, Elias 7.1-4 bounds, Griesmer 7.1-5 bounds, Hamming 7.1-1 bounds, Johnson 7.1-2 bounds, Plotkin 7.1-3 bounds, Singleton 7.1 bounds, sphere packing bound 7.1-1 BoundsCoveringRadius 7.2-1 BoundsMinimumDistance 7.1-13 BZCode 6.2-11 BZCodeNC 6.2-12 check polynomial 4. check polynomial 5.5 CheckMat 4.7-2 CheckMatCode 5.2-3 CheckMatCodeMutable 5.2-2 CheckPol 4.7-4 CheckPolCode 5.5-2 CirculantMatrix 7.5-17 code 4. code, (n,M,d) 4. code, [n, k, d]r 4. code, AG 5.7 code, alternant 5.2-5 code, Bose-Chaudhuri-Hockenghem 5.5-3 code, conference 5.1-2 code, Cordaro-Wagner 5.2-9 code, cyclic 4. code, Davydov 5.3-2 code, doubly-even 4.3-10 code, element test 4.3-1 code, elements of 4. code, evaluation 5.6 code, even 4.3-12 code, Fire 5.5-9 code, Gabidulin 5.3 code, Golay (binary) 5.4 code, Golay (ternary) 5.4-2 code, Goppa (classical) 5.2-6 code, greedy 5.1-6 code, Hadamard 5.1-1 code, Hamming 5.2-3 code, linear 4. code, maximum distance separable 4.3-7 code, Nordstrom-Robinson 5.1-5 code, perfect 4.3-6 code, Reed-Muller 5.2-4 code, Reed-Solomon 5.5-4 code, self-dual 4.3-8 code, self-orthogonal 4.3-9 code, singly-even 4.3-11 code, Srivastava 5.2-7 code, subcode 4.3-2 code, Tombak 5.3-3 code, toric 5.6-4 code, unrestricted 4. CodeDensity 7.5-4 CodeDistanceEnumerator 7.5-2 CodeIsomorphism 4.4-2 CodeMacWilliamsTransform 7.5-3 CodeNorm 7.4-2 codes, addition 4.2-1 codes, decoding 4.2-4 codes, direct sum 4.2-1 codes, encoding 4.2-3 codes, product 4.2-2 CodeWeightEnumerator 7.5-1 Codeword 3.1-1 CodewordNr 3.1-2 codewords, addition 3.3-1 codewords, cosets 3.3-3 codewords, subtraction 3.3-2 CoefficientMultivariatePolynomial 7.6-4 CoefficientToPolynomial 7.6-8 conference matrix 5.1-3 ConferenceCode 5.1-3 ConstantWeightSubcode 6.1-18 ConstructionBCode 6.1-13 ConstructionXCode 6.2-9 ConstructionXXCode 6.2-10 ConversionFieldCode 6.1-15 ConwayPolynomial 2.2-1 CoordinateNorm 7.4-1 CordaroWagnerCode 5.2-10 coset 3.3-3 CosetCode 6.1-17 covering code 4.8-7 CoveringRadius 4.8-8 cyclic 5.5-17 CyclicCodes 5.5-14 CyclicMDSCode 5.5-17 CyclotomicCosets 7.5-12 DavydovCode 5.3-3 Decode 4.10-1 Decodeword 4.10-2 DecreaseMinimumDistanceUpperBound 4.8-6 defining polynomial 2.2 degree 5.7-7 DegreeMultivariatePolynomial 7.6-2 DegreesMonomialTerm 7.6-9 DegreesMultivariatePolynomial 7.6-3 density of a code 7.5-3 Dimension 4.5-4 DirectProductCode 6.2-3 DirectSumCode 6.2-1 Display 4.6-3 DisplayBoundsInfo 4.6-4 distance 4.9-3 DistanceCodeword 3.6-2 DistancesDistribution 4.9-4 DistancesDistributionMatFFEVecFFE 2.1-3 DistancesDistributionVecFFEsVecFFE 2.1-4 DistanceVecFFE 2.1-6 divisor 5.7-4 DivisorAddition  5.7-6 DivisorAutomorphismGroupP1  5.7-20 DivisorDegree  5.7-7 DivisorGCD  5.7-11 DivisorIsZero  5.7-9 DivisorLCM  5.7-12 DivisorNegate  5.7-8 DivisorOfRationalFunctionP1  5.7-14 DivisorOnAffineCurve 5.7-5 DivisorsEqual  5.7-10 DivisorsMultivariatePolynomial 7.6-10 doubly-even 4.3-9 DualCode 6.1-14 ElementsCode 5.1-1 encoder map 4.2-3 EnlargedGabidulinCode 5.3-2 EnlargedTombakCode 5.3-5 equivalent codes 4.4 EvaluationBivariateCode 5.7-23 EvaluationBivariateCodeNC 5.7-24 EvaluationCode 5.6-1 even 4.3-11 EvenWeightSubcode 6.1-3 ExhaustiveSearchCoveringRadius 7.2-3 ExpurgatedCode 6.1-5 ExtendedBinaryGolayCode 5.4-2 ExtendedCode 6.1-1 ExtendedDirectSumCode 6.2-6 ExtendedReedSolomonCode 5.5-6 ExtendedTernaryGolayCode 5.4-4 external distance 7.2-13 FerreroDesignCode 5.2-11 FireCode 5.5-10 FourNegacirculantSelfDualCode 5.5-18 FourNegacirculantSelfDualCodeNC 5.5-19 GabidulinCode 5.3-1 Gary code 7.3-1 GeneralizedCodeNorm 7.4-4 GeneralizedReedMullerCode 5.6-3 GeneralizedReedSolomonCode 5.6-2 GeneralizedReedSolomonDecoderGao 4.10-3 GeneralizedReedSolomonListDecoder 4.10-4 GeneralizedSrivastavaCode 5.2-8 GeneralLowerBoundCoveringRadius 7.2-4 GeneralUpperBoundCoveringRadius 7.2-5 generator polynomial 4. generator polynomial 5.5 GeneratorMat 4.7-1 GeneratorMatCode 5.2-1 GeneratorPol 4.7-3 GeneratorPolCode 5.5-1 GenusCurve 5.7-3 GF(p) 2.2 GF(q) 2.2 GoppaCode 5.2-7 GoppaCodeClassical 5.7-22 GOrbitPoint  5.7-4 GrayMat 7.3-2 greatest common divisor 5.7-11 GreedyCode 5.1-7 Griesmer code 7.1-6 GuavaVersion 7.6-6 Hadamard matrix 5.1-2 Hadamard matrix 7.3-3 HadamardCode 5.1-2 HadamardMat 7.3-4 Hamming metric 2.1-5 HammingCode 5.2-4 HorizontalConversionFieldMat 7.3-10 hull 6.2-4 in 4.3-1 IncreaseCoveringRadiusLowerBound 7.2-2 information bits 4.2-4 InformationWord 4.2-4 InnerDistribution 4.9-3 IntersectionCode 6.2-4 IrreduciblePolynomialsNr 7.5-9 IsActionMoebiusTransformationOnDivisorDefinedP1  5.7-19 IsAffineCode 4.3-14 IsAlmostAffineCode 4.3-15 IsCheapConwayPolynomial 2.2-1 IsCode 4.3-3 IsCodeword 3.1-3 IsCoordinateAcceptable 7.4-3 IsCyclicCode 4.3-5 IsDoublyEvenCode 4.3-10 IsEquivalent 4.4-1 IsEvenCode 4.3-12 IsFinite 4.5-1 IsGriesmerCode 7.1-7 IsInStandardForm 7.3-7 IsLatinSquare 7.3-12 IsLinearCode 4.3-4 IsMDSCode 4.3-7 IsNormalCode 7.4-5 IsPerfectCode 4.3-6 IsPrimitivePolynomial 2.2-2 IsSelfComplementaryCode 4.3-13 IsSelfDualCode 4.3-8 IsSelfOrthogonalCode 4.3-9 IsSinglyEvenCode 4.3-11 IsSubset 4.3-2 Krawtchouk 7.5-6 KrawtchoukMat 7.3-1 Latin square 7.3-10 LDPC 5.8 least common multiple 5.7-12 LeftActingDomain 4.5-3 length 4. LengthenedCode 6.1-10 LexiCode 5.1-8 linear code 3. LowerBoundCoveringRadiusCountingExcess 7.2-9 LowerBoundCoveringRadiusEmbedded1 7.2-10 LowerBoundCoveringRadiusEmbedded2 7.2-11 LowerBoundCoveringRadiusInduction 7.2-12 LowerBoundCoveringRadiusSphereCovering 7.2-6 LowerBoundCoveringRadiusVanWee1 7.2-7 LowerBoundCoveringRadiusVanWee2 7.2-8 LowerBoundGilbertVarshamov 7.1-10 LowerBoundMinimumDistance 7.1-9 LowerBoundSpherePacking 7.1-11 MacWilliams transform 7.5-2 MatrixRepresentationOfElement 7.5-10 MatrixRepresentationOnRiemannRochSpaceP1  5.7-21 MatrixTransformationOnMultivariatePolynomial  7.6-1 maximum distance separable 7.1-1 MDS 4.3-7 MDS 5.5-17 minimum distance 4. MinimumDistance 4.8-3 MinimumDistanceLeon 4.8-4 MinimumDistanceRandom 4.8-7 MinimumWeight 4.8-5 MinimumWeightWords 4.9-1 MoebiusTransformation  5.7-16 MOLS 7.3-11 MOLSCode 5.1-4 MostCommonInList 7.5-15 MultiplicityInList 7.5-14 mutually orthogonal Latin squares 7.3-10 NearestNeighborDecodewords 4.10-7 NearestNeighborGRSDecodewords 4.10-6 NordstromRobinsonCode 5.1-6 norm of a code 7.4-1 normal code 7.4-4 not = 3.2-1 not = 4.1-1 NrCyclicCodes 5.5-15 NullCode 5.5-12 NullWord 3.6-1 OnePointAGCode 5.7-25 OptimalityCode 5.2-13 order of polynomial 5.5-10 OuterDistribution 4.9-5 Parity check 6.1 parity check matrix 4. perfect 7.1-1 perfect code 7.5-4 permutation equivalent codes 4.4 PermutationAutomorphismGroup 4.4-3 PermutationAutomorphismGroup 4.4-4 PermutationDecode 4.10-11 PermutationDecodeNC 4.10-12 PermutedCode 6.1-4 PermutedCols 7.3-8 PiecewiseConstantCode 6.1-20 point 5.7-1 PolyCodeword 3.4-2 primitive element 2.2 PrimitivePolynomialsNr 7.5-8 PrimitiveUnityRoot 7.5-7 Print 4.6-1 PuncturedCode 6.1-2 PutStandardForm 7.3-6 QCLDPCCodeFromGroup 5.8-1 QQRCode 5.5-9 QQRCodeNC 5.5-8 QRCode 5.5-7 QuasiCyclicCode 5.5-16 RandomCode 5.1-5 RandomLinearCode 5.2-12 RandomPrimitivePolynomial 2.2-2 reciprocal polynomial 7.5-10 ReciprocalPolynomial 7.5-11 Redundancy 4.8-2 ReedMullerCode 5.2-5 ReedSolomonCode 5.5-5 RemovedElementsCode 6.1-7 RepetitionCode 5.5-13 ResidueCode 6.1-12 RiemannRochSpaceBasisFunctionP1  5.7-13 RiemannRochSpaceBasisP1  5.7-15 RootsCode 5.5-3 RootsOfCode 4.7-5 RotateList 7.5-16 self complementary code 4.3-12 self-dual 5.5-18 self-dual 6.1-14 self-orthogonal 4.3-8 SetCoveringRadius 4.8-9 ShortenedCode 6.1-9 singly-even 4.3-10 size 4. Size 4.5-2 SolveLinearSystem 7.6-5 SphereContent 7.5-5 SrivastavaCode 5.2-9 standard form 7.3-5 StandardArray 4.10-10 StandardFormCode 6.1-19 strength 7.2-15 String 4.6-2 SubCode 6.1-11 Support 3.6-3 support 5.7-4 SylvesterMat 7.3-3 Syndrome 4.10-8 syndrome table 4.10-9 SyndromeTable 4.10-9 t(n,k) 4.8-7 TernaryGolayCode 5.4-3 TombakCode 5.3-4 ToricCode 5.6-5 ToricPoints 5.6-4 TraceCode 6.1-16 TreatAsPoly 3.5-2 TreatAsVector 3.5-1 UnionCode 6.2-5 UpperBound 7.1-8 UpperBoundCoveringRadiusCyclicCode 7.2-17 UpperBoundCoveringRadiusDelsarte 7.2-14 UpperBoundCoveringRadiusGriesmerLike 7.2-16 UpperBoundCoveringRadiusRedundancy 7.2-13 UpperBoundCoveringRadiusStrength 7.2-15 UpperBoundElias 7.1-5 UpperBoundGriesmer 7.1-6 UpperBoundHamming 7.1-2 UpperBoundJohnson 7.1-3 UpperBoundMinimumDistance 7.1-12 UpperBoundPlotkin 7.1-4 UpperBoundSingleton 7.1-1 UUVCode 6.2-2 VandermondeMat 7.3-5 VectorCodeword 3.4-1 VerticalConversionFieldMat 7.3-9 weight enumerator polynomial 7.5 WeightCodeword 3.6-4 WeightDistribution 4.9-2 WeightHistogram 7.5-13 WeightVecFFE 2.1-5 WholeSpaceCode 5.5-11 WordLength 4.8-1 ZechLog 7.6-7 ------------------------------------------------------- guava-3.6/doc/chap6.txt0000644017361200001450000015562411027015733014665 0ustar tabbottcrontab 6. Manipulating Codes In this chapter we describe several functions GUAVA uses to manipulate codes. Some of the best codes are obtained by starting with for example a BCH code, and manipulating it. In some cases, it is faster to perform calculations with a manipulated code than to use the original code. For example, if the dimension of the code is larger than half the word length, it is generally faster to compute the weight distribution by first calculating the weight distribution of the dual code than by directly calculating the weight distribution of the original code. The size of the dual code is smaller in these cases. Because GUAVA keeps all information in a code record, in some cases the information can be preserved after manipulations. Therefore, computations do not always have to start from scratch. In Section 6.1, we describe functions that take a code with certain parameters, modify it in some way and return a different code (see ExtendedCode (6.1-1), PuncturedCode (6.1-2), EvenWeightSubcode (6.1-3), PermutedCode (6.1-4), ExpurgatedCode (6.1-5), AugmentedCode (6.1-6), RemovedElementsCode (6.1-7), AddedElementsCode (6.1-8), ShortenedCode (6.1-9), LengthenedCode (6.1-10), ResidueCode (6.1-12), ConstructionBCode (6.1-13), DualCode (6.1-14), ConversionFieldCode (6.1-15), ConstantWeightSubcode (6.1-18), StandardFormCode (6.1-19) and CosetCode (6.1-17)). In Section 6.2, we describe functions that generate a new code out of two codes (see DirectSumCode (6.2-1), UUVCode (6.2-2), DirectProductCode (6.2-3), IntersectionCode (6.2-4) and UnionCode (6.2-5)). 6.1 Functions that Generate a New Code from a Given Code 6.1-1 ExtendedCode > ExtendedCode( C[, i] ) ___________________________________________function ExtendedCode extends the code C i times and returns the result. i is equal to 1 by default. Extending is done by adding a parity check bit after the last coordinate. The coordinates of all codewords now add up to zero. In the binary case, each codeword has even weight. The word length increases by i. The size of the code remains the same. In the binary case, the minimum distance increases by one if it was odd. In other cases, that is not always true. A cyclic code in general is no longer cyclic after extending. --------------------------- Example ---------------------------- gap> C1 := HammingCode( 3, GF(2) ); a linear [7,4,3]1 Hamming (3,2) code over GF(2) gap> C2 := ExtendedCode( C1 ); a linear [8,4,4]2 extended code gap> IsEquivalent( C2, ReedMullerCode( 1, 3 ) ); true gap> List( AsSSortedList( C2 ), WeightCodeword ); [ 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8 ] gap> C3 := EvenWeightSubcode( C1 ); a linear [7,3,4]2..3 even weight subcode  ------------------------------------------------------------------ To undo extending, call PuncturedCode (see PuncturedCode (6.1-2)). The function EvenWeightSubcode (see EvenWeightSubcode (6.1-3)) also returns a related code with only even weights, but without changing its word length. 6.1-2 PuncturedCode > PuncturedCode( C ) _______________________________________________function PuncturedCode punctures C in the last column, and returns the result. Puncturing is done simply by cutting off the last column from each codeword. This means the word length decreases by one. The minimum distance in general also decrease by one. This command can also be called with the syntax PuncturedCode( C, L ). In this case, PuncturedCode punctures C in the columns specified by L, a list of integers. All columns specified by L are omitted from each codeword. If l is the length of L (so the number of removed columns), the word length decreases by l. The minimum distance can also decrease by l or less. Puncturing a cyclic code in general results in a non-cyclic code. If the code is punctured in all the columns where a word of minimal weight is unequal to zero, the dimension of the resulting code decreases. --------------------------- Example ---------------------------- gap> C1 := BCHCode( 15, 5, GF(2) ); a cyclic [15,7,5]3..5 BCH code, delta=5, b=1 over GF(2) gap> C2 := PuncturedCode( C1 ); a linear [14,7,4]3..5 punctured code gap> ExtendedCode( C2 ) = C1; false gap> PuncturedCode( C1, [1,2,3,4,5,6,7] ); a linear [8,7,1]1 punctured code gap> PuncturedCode( WholeSpaceCode( 4, GF(5) ) ); a linear [3,3,1]0 punctured code # The dimension decreased from 4 to 3  ------------------------------------------------------------------ ExtendedCode extends the code again (see ExtendedCode (6.1-1)), although in general this does not result in the old code. 6.1-3 EvenWeightSubcode > EvenWeightSubcode( C ) ___________________________________________function EvenWeightSubcode returns the even weight subcode of C, consisting of all codewords of C with even weight. If C is a linear code and contains words of odd weight, the resulting code has a dimension of one less. The minimum distance always increases with one if it was odd. If C is a binary cyclic code, and g(x) is its generator polynomial, the even weight subcode either has generator polynomial g(x) (if g(x) is divisible by x-1) or g(x)* (x-1) (if no factor x-1 was present in g(x)). So the even weight subcode is again cyclic. Of course, if all codewords of C are already of even weight, the returned code is equal to C. --------------------------- Example ---------------------------- gap> C1 := EvenWeightSubcode( BCHCode( 8, 4, GF(3) ) ); an (8,33,4..8)3..8 even weight subcode gap> List( AsSSortedList( C1 ), WeightCodeword ); [ 0, 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, 6, 4, 4, 6, 4, 4, 8, 6, 4, 6, 8, 4, 4,   4, 6, 4, 6, 8, 4, 6, 8 ] gap> EvenWeightSubcode( ReedMullerCode( 1, 3 ) ); a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)  ------------------------------------------------------------------ ExtendedCode also returns a related code of only even weights, but without reducing its dimension (see ExtendedCode (6.1-1)). 6.1-4 PermutedCode > PermutedCode( C, L ) _____________________________________________function PermutedCode returns C after column permutations. L (in GAP disjoint cycle notation) is the permutation to be executed on the columns of C. If C is cyclic, the result in general is no longer cyclic. If a permutation results in the same code as C, this permutation belongs to the automorphism group of C (see AutomorphismGroup (4.4-3)). In any case, the returned code is equivalent to C (see IsEquivalent (4.4-1)). --------------------------- Example ---------------------------- gap> C1 := PuncturedCode( ReedMullerCode( 1, 4 ) ); a linear [15,5,7]5 punctured code gap> C2 := BCHCode( 15, 7, GF(2) ); a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2) gap> C2 = C1; false gap> p := CodeIsomorphism( C1, C2 ); ( 2, 4,14, 9,13, 7,11,10, 6, 8,12, 5) gap> C3 := PermutedCode( C1, p ); a linear [15,5,7]5 permuted code gap> C2 = C3; true  ------------------------------------------------------------------ 6.1-5 ExpurgatedCode > ExpurgatedCode( C, L ) ___________________________________________function ExpurgatedCode expurgates the code C> by throwing away codewords in list L. C must be a linear code. L must be a list of codeword input. The generator matrix of the new code no longer is a basis for the codewords specified by L. Since the returned code is still linear, it is very likely that, besides the words of L, more codewords of C are no longer in the new code. --------------------------- Example ---------------------------- gap> C1 := HammingCode( 4 );; WeightDistribution( C1 ); [ 1, 0, 0, 35, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ] gap> L := Filtered( AsSSortedList(C1), i -> WeightCodeword(i) = 3 );; gap> C2 := ExpurgatedCode( C1, L ); a linear [15,4,3..4]5..11 code, expurgated with 7 word(s) gap> WeightDistribution( C2 ); [ 1, 0, 0, 0, 14, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 ]  ------------------------------------------------------------------ This function does not work on non-linear codes. For removing words from a non-linear code, use RemovedElementsCode (see RemovedElementsCode (6.1-7)). For expurgating a code of all words of odd weight, use `EvenWeightSubcode' (see EvenWeightSubcode (6.1-3)). 6.1-6 AugmentedCode > AugmentedCode( C, L ) ____________________________________________function AugmentedCode returns C after augmenting. C must be a linear code, L must be a list of codeword inputs. The generator matrix of the new code is a basis for the codewords specified by L as well as the words that were already in code C. Note that the new code in general will consist of more words than only the codewords of C and the words L. The returned code is also a linear code. This command can also be called with the syntax AugmentedCode(C). When called without a list of codewords, AugmentedCode returns C after adding the all-ones vector to the generator matrix. C must be a linear code. If the all-ones vector was already in the code, nothing happens and a copy of the argument is returned. If C is a binary code which does not contain the all-ones vector, the complement of all codewords is added. --------------------------- Example ---------------------------- gap> C31 := ReedMullerCode( 1, 3 ); a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) gap> C32 := AugmentedCode(C31,["00000011","00000101","00010001"]); a linear [8,7,1..2]1 code, augmented with 3 word(s) gap> C32 = ReedMullerCode( 2, 3 ); true  gap> C1 := CordaroWagnerCode(6); a linear [6,2,4]2..3 Cordaro-Wagner code over GF(2) gap> Codeword( [0,0,1,1,1,1] ) in C1; true gap> C2 := AugmentedCode( C1 ); a linear [6,3,1..2]2..3 code, augmented with 1 word(s) gap> Codeword( [1,1,0,0,0,0] ) in C2; true ------------------------------------------------------------------ The function AddedElementsCode adds elements to the codewords instead of adding them to the basis (see AddedElementsCode (6.1-8)). 6.1-7 RemovedElementsCode > RemovedElementsCode( C, L ) ______________________________________function RemovedElementsCode returns code C after removing a list of codewords L from its elements. L must be a list of codeword input. The result is an unrestricted code. --------------------------- Example ---------------------------- gap> C1 := HammingCode( 4 );; WeightDistribution( C1 ); [ 1, 0, 0, 35, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ] gap> L := Filtered( AsSSortedList(C1), i -> WeightCodeword(i) = 3 );; gap> C2 := RemovedElementsCode( C1, L ); a (15,2013,3..15)2..15 code with 35 word(s) removed gap> WeightDistribution( C2 ); [ 1, 0, 0, 0, 105, 168, 280, 435, 435, 280, 168, 105, 35, 0, 0, 1 ] gap> MinimumDistance( C2 ); 3 # C2 is not linear, so the minimum weight does not have to  # be equal to the minimum distance  ------------------------------------------------------------------ Adding elements to a code is done by the function AddedElementsCode (see AddedElementsCode (6.1-8)). To remove codewords from the base of a linear code, use ExpurgatedCode (see ExpurgatedCode (6.1-5)). 6.1-8 AddedElementsCode > AddedElementsCode( C, L ) ________________________________________function AddedElementsCode returns code C after adding a list of codewords L to its elements. L must be a list of codeword input. The result is an unrestricted code. --------------------------- Example ---------------------------- gap> C1 := NullCode( 6, GF(2) ); a cyclic [6,0,6]6 nullcode over GF(2) gap> C2 := AddedElementsCode( C1, [ "111111" ] ); a (6,2,1..6)3 code with 1 word(s) added gap> IsCyclicCode( C2 ); true gap> C3 := AddedElementsCode( C2, [ "101010", "010101" ] ); a (6,4,1..6)2 code with 2 word(s) added gap> IsCyclicCode( C3 ); true  ------------------------------------------------------------------ To remove elements from a code, use RemovedElementsCode (see RemovedElementsCode (6.1-7)). To add elements to the base of a linear code, use AugmentedCode (see AugmentedCode (6.1-6)). 6.1-9 ShortenedCode > ShortenedCode( C[, L] ) __________________________________________function ShortenedCode( C ) returns the code C shortened by taking a cross section. If C is a linear code, this is done by removing all codewords that start with a non-zero entry, after which the first column is cut off. If C was a [n,k,d] code, the shortened code generally is a [n-1,k-1,d] code. It is possible that the dimension remains the same; it is also possible that the minimum distance increases. If C is a non-linear code, ShortenedCode first checks which finite field element occurs most often in the first column of the codewords. The codewords not starting with this element are removed from the code, after which the first column is cut off. The resulting shortened code has at least the same minimum distance as C. This command can also be called using the syntax ShortenedCode(C,L). When called in this format, ShortenedCode repeats the shortening process on each of the columns specified by L. L therefore is a list of integers. The column numbers in L are the numbers as they are before the shortening process. If L has l entries, the returned code has a word length of l positions shorter than C. --------------------------- Example ---------------------------- gap> C1 := HammingCode( 4 ); a linear [15,11,3]1 Hamming (4,2) code over GF(2) gap> C2 := ShortenedCode( C1 ); a linear [14,10,3]2 shortened code gap> C3 := ElementsCode( ["1000", "1101", "0011" ], GF(2) ); a (4,3,1..4)2 user defined unrestricted code over GF(2) gap> MinimumDistance( C3 ); 2 gap> C4 := ShortenedCode( C3 ); a (3,2,2..3)1..2 shortened code gap> AsSSortedList( C4 ); [ [ 0 0 0 ], [ 1 0 1 ] ] gap> C5 := HammingCode( 5, GF(2) ); a linear [31,26,3]1 Hamming (5,2) code over GF(2) gap> C6 := ShortenedCode( C5, [ 1, 2, 3 ] ); a linear [28,23,3]2 shortened code gap> OptimalityLinearCode( C6 ); 0 ------------------------------------------------------------------ The function LengthenedCode lengthens the code again (only for linear codes), see LengthenedCode (6.1-10). In general, this is not exactly the inverse function. 6.1-10 LengthenedCode > LengthenedCode( C[, i] ) _________________________________________function LengthenedCode( C ) returns the code C lengthened. C must be a linear code. First, the all-ones vector is added to the generator matrix (see AugmentedCode (6.1-6)). If the all-ones vector was already a codeword, nothing happens to the code. Then, the code is extended i times (see ExtendedCode (6.1-1)). i is equal to 1 by default. If C was an [n,k] code, the new code generally is a [n+i,k+1] code. --------------------------- Example ---------------------------- gap> C1 := CordaroWagnerCode( 5 ); a linear [5,2,3]2 Cordaro-Wagner code over GF(2) gap> C2 := LengthenedCode( C1 ); a linear [6,3,2]2..3 code, lengthened with 1 column(s)  ------------------------------------------------------------------ ShortenedCode' shortens the code, see ShortenedCode (6.1-9). In general, this is not exactly the inverse function. 6.1-11 SubCode > SubCode( C[, s] ) ________________________________________________function This function SubCode returns a subcode of C by taking the first k - s rows of the generator matrix of C, where k is the dimension of C. The interger s may be omitted and in this case it is assumed as 1. --------------------------- Example ---------------------------- gap> C := BCHCode(31,11); a cyclic [31,11,11]7..11 BCH code, delta=11, b=1 over GF(2) gap> S1:= SubCode(C); a linear [31,10,11]7..13 subcode gap> WeightDistribution(S1); [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 190, 0, 0, 272, 255, 0, 0, 120, 66,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] gap> S2:= SubCode(C, 8); a linear [31,3,11]14..20 subcode gap> History(S2); [ "a linear [31,3,11]14..20 subcode of",  "a cyclic [31,11,11]7..11 BCH code, delta=11, b=1 over GF(2)" ] gap> WeightDistribution(S2); [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0 ] ------------------------------------------------------------------ 6.1-12 ResidueCode > ResidueCode( C[, c] ) ____________________________________________function The function ResidueCode takes a codeword c of C (if c is omitted, a codeword of minimal weight is used). It removes this word and all its linear combinations from the code and then punctures the code in the coordinates where c is unequal to zero. The resulting code is an [n-w, k-1, d-lfloor w*(q-1)/q rfloor ] code. C must be a linear code and c must be non-zero. If c is not in  then no change is made to C. --------------------------- Example ---------------------------- gap> C1 := BCHCode( 15, 7 ); a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2) gap> C2 := ResidueCode( C1 ); a linear [8,4,4]2 residue code gap> c := Codeword( [ 0,0,0,1,0,0,1,1,0,1,0,1,1,1,1 ], C1);; gap> C3 := ResidueCode( C1, c ); a linear [7,4,3]1 residue code  ------------------------------------------------------------------ 6.1-13 ConstructionBCode > ConstructionBCode( C ) ___________________________________________function The function ConstructionBCode takes a binary linear code C and calculates the minimum distance of the dual of C (see DualCode (6.1-14)). It then removes the columns of the parity check matrix of C where a codeword of the dual code of minimal weight has coordinates unequal to zero. The resulting matrix is a parity check matrix for an [n-dd, k-dd+1, >= d] code, where dd is the minimum distance of the dual of C. --------------------------- Example ---------------------------- gap> C1 := ReedMullerCode( 2, 5 ); a linear [32,16,8]6 Reed-Muller (2,5) code over GF(2) gap> C2 := ConstructionBCode( C1 ); a linear [24,9,8]5..10 Construction B (8 coordinates) gap> BoundsMinimumDistance( 24, 9, GF(2) ); rec( n := 24, k := 9, q := 2, references := rec( ),   construction := [ [ Operation "UUVCode" ],   [ [ [ Operation "UUVCode" ], [ [ [ Operation "DualCode" ],   [ [ [ Operation "RepetitionCode" ], [ 6, 2 ] ] ] ],   [ [ Operation "CordaroWagnerCode" ], [ 6 ] ] ] ],   [ [ Operation "CordaroWagnerCode" ], [ 12 ] ] ] ], lowerBound := 8,   lowerBoundExplanation := [ "Lb(24,9)=8, u u+v construction of C1 and C2:",   "Lb(12,7)=4, u u+v construction of C1 and C2:",   "Lb(6,5)=2, dual of the repetition code",   "Lb(6,2)=4, Cordaro-Wagner code", "Lb(12,2)=8, Cordaro-Wagner code" ],   upperBound := 8,   upperBoundExplanation := [ "Ub(24,9)=8, otherwise construction B would   contradict:", "Ub(18,4)=8, Griesmer bound" ] ) # so C2 is optimal ------------------------------------------------------------------ 6.1-14 DualCode > DualCode( C ) ____________________________________________________function DualCode returns the dual code of C. The dual code consists of all codewords that are orthogonal to the codewords of C. If C is a linear code with generator matrix G, the dual code has parity check matrix G (or if C has parity check matrix H, the dual code has generator matrix H). So if C is a linear [n, k] code, the dual code of C is a linear [n, n-k] code. If C is a cyclic code with generator polynomial g(x), the dual code has the reciprocal polynomial of g(x) as check polynomial. The dual code is always a linear code, even if C is non-linear. If a code C is equal to its dual code, it is called self-dual. --------------------------- Example ---------------------------- gap> R := ReedMullerCode( 1, 3 ); a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) gap> RD := DualCode( R ); a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2) gap> R = RD; true gap> N := WholeSpaceCode( 7, GF(4) ); a cyclic [7,7,1]0 whole space code over GF(4) gap> DualCode( N ) = NullCode( 7, GF(4) ); true  ------------------------------------------------------------------ 6.1-15 ConversionFieldCode > ConversionFieldCode( C ) _________________________________________function ConversionFieldCode returns the code obtained from C after converting its field. If the field of C is GF(q^m), the returned code has field GF(q). Each symbol of every codeword is replaced by a concatenation of m symbols from GF(q). If C is an (n, M, d_1) code, the returned code is a (n* m, M, d_2) code, where d_2 > d_1. See also HorizontalConversionFieldMat (7.3-10). --------------------------- Example ---------------------------- gap> R := RepetitionCode( 4, GF(4) ); a cyclic [4,1,4]3 repetition code over GF(4) gap> R2 := ConversionFieldCode( R ); a linear [8,2,4]3..4 code, converted to basefield GF(2) gap> Size( R ) = Size( R2 ); true gap> GeneratorMat( R ); [ [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ] ] gap> GeneratorMat( R2 ); [ [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ],  [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ] ]  ------------------------------------------------------------------ 6.1-16 TraceCode > TraceCode( C ) ___________________________________________________function Input: C is a linear code defined over an extension E of F (F is the ``base field'') Output: The linear code generated by Tr_E/F(c), for all c in C. TraceCode returns the image of the code C under the trace map. If the field of C is GF(q^m), the returned code has field GF(q). Very slow. It does not seem to be easy to related the parameters of the trace code to the original except in the ``Galois closed'' case. --------------------------- Example ---------------------------- gap> C:=RandomLinearCode(10,4,GF(4)); MinimumDistance(C); a [10,4,?] randomly generated code over GF(4) 5 gap> trC:=TraceCode(C,GF(2)); MinimumDistance(trC); a linear [10,7,1]1..3 user defined unrestricted code over GF(2) 1  ------------------------------------------------------------------ 6.1-17 CosetCode > CosetCode( C, w ) ________________________________________________function CosetCode returns the coset of a code C with respect to word w. w must be of the codeword type. Then, w is added to each codeword of C, yielding the elements of the new code. If C is linear and w is an element of C, the new code is equal to C, otherwise the new code is an unrestricted code. Generating a coset is also possible by simply adding the word w to C. See 4.2. --------------------------- Example ---------------------------- gap> H := HammingCode(3, GF(2)); a linear [7,4,3]1 Hamming (3,2) code over GF(2) gap> c := Codeword("1011011");; c in H; false gap> C := CosetCode(H, c); a (7,16,3)1 coset code gap> List(AsSSortedList(C), el-> Syndrome(H, el)); [ [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ],  [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ],  [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ], [ 1 1 1 ] ] # All elements of the coset have the same syndrome in H  ------------------------------------------------------------------ 6.1-18 ConstantWeightSubcode > ConstantWeightSubcode( C, w ) ____________________________________function ConstantWeightSubcode returns the subcode of C that only has codewords of weight w. The resulting code is a non-linear code, because it does not contain the all-zero vector. This command also can be called with the syntax ConstantWeightSubcode(C) In this format, ConstantWeightSubcode returns the subcode of C consisting of all minimum weight codewords of C. ConstantWeightSubcode first checks if Leon's binary wtdist exists on your computer (in the default directory). If it does, then this program is called. Otherwise, the constant weight subcode is computed using a GAP program which checks each codeword in C to see if it is of the desired weight. --------------------------- Example ---------------------------- gap> N := NordstromRobinsonCode();; WeightDistribution(N); [ 1, 0, 0, 0, 0, 0, 112, 0, 30, 0, 112, 0, 0, 0, 0, 0, 1 ] gap> C := ConstantWeightSubcode(N, 8); a (16,30,6..16)5..8 code with codewords of weight 8 gap> WeightDistribution(C); [ 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0 ]  gap> eg := ExtendedTernaryGolayCode();; WeightDistribution(eg); [ 1, 0, 0, 0, 0, 0, 264, 0, 0, 440, 0, 0, 24 ] gap> C := ConstantWeightSubcode(eg); a (12,264,6..12)3..6 code with codewords of weight 6 gap> WeightDistribution(C); [ 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0 ]  ------------------------------------------------------------------ 6.1-19 StandardFormCode > StandardFormCode( C ) ____________________________________________function StandardFormCode returns C after putting it in standard form. If C is a non-linear code, this means the elements are organized using lexicographical order. This means they form a legal GAP `Set'. If C is a linear code, the generator matrix and parity check matrix are put in standard form. The generator matrix then has an identity matrix in its left part, the parity check matrix has an identity matrix in its right part. Although GUAVA always puts both matrices in a standard form using BaseMat, this never alters the code. StandardFormCode even applies column permutations if unavoidable, and thereby changes the code. The column permutations are recorded in the construction history of the new code (see Display (4.6-3)). C and the new code are of course equivalent. If C is a cyclic code, its generator matrix cannot be put in the usual upper triangular form, because then it would be inconsistent with the generator polynomial. The reason is that generating the elements from the generator matrix would result in a different order than generating the elements from the generator polynomial. This is an unwanted effect, and therefore StandardFormCode just returns a copy of C for cyclic codes. --------------------------- Example ---------------------------- gap> G := GeneratorMatCode( Z(2) * [ [0,1,1,0], [0,1,0,1], [0,0,1,1] ],   "random form code", GF(2) ); a linear [4,2,1..2]1..2 random form code over GF(2) gap> Codeword( GeneratorMat( G ) ); [ [ 0 1 0 1 ], [ 0 0 1 1 ] ] gap> Codeword( GeneratorMat( StandardFormCode( G ) ) ); [ [ 1 0 0 1 ], [ 0 1 0 1 ] ]  ------------------------------------------------------------------ 6.1-20 PiecewiseConstantCode > PiecewiseConstantCode( part, wts[, F] ) __________________________function PiecewiseConstantCode returns a code with length n = sum n_i, where part=[ n_1, dots, n_k ]. wts is a list of constraints w=(w_1,...,w_k), each of length k, where 0 <= w_i <= n_i. The default field is GF(2). A constraint is a list of integers, and a word c = ( c_1, dots, c_k ) (according to part, i.e., each c_i is a subword of length n_i) is in the resulting code if and only if, for some constraint w in wts, |c_i| = w_i for all 1 <= i <= k, where | ...| denotes the Hamming weight. An example might make things clearer: --------------------------- Example ---------------------------- gap> PiecewiseConstantCode( [ 2, 3 ],  [ [ 0, 0 ], [ 0, 3 ], [ 1, 0 ], [ 2, 2 ] ],GF(2) ); the C code programs are compiled, so using Leon's binary.... the C code programs are compiled, so using Leon's binary.... the C code programs are compiled, so using Leon's binary.... the C code programs are compiled, so using Leon's binary.... a (5,7,1..5)1..5 piecewise constant code over GF(2) gap> AsSSortedList(last); [ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 0 0 ], [ 1 0 0 0 0 ],   [ 1 1 0 1 1 ], [ 1 1 1 0 1 ], [ 1 1 1 1 0 ] ] gap>  ------------------------------------------------------------------ The first constraint is satisfied by codeword 1, the second by codeword 2, the third by codewords 3 and 4, and the fourth by codewords 5, 6 and 7. 6.2 Functions that Generate a New Code from Two or More Given Codes 6.2-1 DirectSumCode > DirectSumCode( C1, C2 ) __________________________________________function DirectSumCode returns the direct sum of codes C1 and C2. The direct sum code consists of every codeword of C1 concatenated by every codeword of C2. Therefore, if Ci was a (n_i,M_i,d_i) code, the result is a (n_1+n_2,M_1*M_2,min(d_1,d_2)) code. If both C1 and C2 are linear codes, the result is also a linear code. If one of them is non-linear, the direct sum is non-linear too. In general, a direct sum code is not cyclic. Performing a direct sum can also be done by adding two codes (see Section 4.2). Another often used method is the `u, u+v'-construction, described in UUVCode (6.2-2). --------------------------- Example ---------------------------- gap> C1 := ElementsCode( [ [1,0], [4,5] ], GF(7) );; gap> C2 := ElementsCode( [ [0,0,0], [3,3,3] ], GF(7) );; gap> D := DirectSumCode(C1, C2);; gap> AsSSortedList(D); [ [ 1 0 0 0 0 ], [ 1 0 3 3 3 ], [ 4 5 0 0 0 ], [ 4 5 3 3 3 ] ] gap> D = C1 + C2; # addition = direct sum true  ------------------------------------------------------------------ 6.2-2 UUVCode > UUVCode( C1, C2 ) ________________________________________________function UUVCode returns the so-called (u|u+v) construction applied to C1 and C2. The resulting code consists of every codeword u of C1 concatenated by the sum of u and every codeword v of C2. If C1 and C2 have different word lengths, sufficient zeros are added to the shorter code to make this sum possible. If Ci is a (n_i,M_i,d_i) code, the result is an (n_1+max(n_1,n_2),M_1* M_2,min(2* d_1,d_2)) code. If both C1 and C2 are linear codes, the result is also a linear code. If one of them is non-linear, the UUV sum is non-linear too. In general, a UUV sum code is not cyclic. The function DirectSumCode returns another sum of codes (see DirectSumCode (6.2-1)). --------------------------- Example ---------------------------- gap> C1 := EvenWeightSubcode(WholeSpaceCode(4, GF(2))); a cyclic [4,3,2]1 even weight subcode gap> C2 := RepetitionCode(4, GF(2)); a cyclic [4,1,4]2 repetition code over GF(2) gap> R := UUVCode(C1, C2); a linear [8,4,4]2 U U+V construction code gap> R = ReedMullerCode(1,3); true  ------------------------------------------------------------------ 6.2-3 DirectProductCode > DirectProductCode( C1, C2 ) ______________________________________function DirectProductCode returns the direct product of codes C1 and C2. Both must be linear codes. Suppose Ci has generator matrix G_i. The direct product of C1 and C2 then has the Kronecker product of G_1 and G_2 as the generator matrix (see the GAP command KroneckerProduct). If Ci is a [n_i, k_i, d_i] code, the direct product then is an [n_1* n_2,k_1* k_2,d_1* d_2] code. --------------------------- Example ---------------------------- gap> L1 := LexiCode(10, 4, GF(2)); a linear [10,5,4]2..4 lexicode over GF(2) gap> L2 := LexiCode(8, 3, GF(2)); a linear [8,4,3]2..3 lexicode over GF(2) gap> D := DirectProductCode(L1, L2); a linear [80,20,12]20..45 direct product code  ------------------------------------------------------------------ 6.2-4 IntersectionCode > IntersectionCode( C1, C2 ) _______________________________________function IntersectionCode returns the intersection of codes C1 and C2. This code consists of all codewords that are both in C1 and C2. If both codes are linear, the result is also linear. If both are cyclic, the result is also cyclic. --------------------------- Example ---------------------------- gap> C := CyclicCodes(7, GF(2)); [ a cyclic [7,7,1]0 enumerated code over GF(2),  a cyclic [7,6,1..2]1 enumerated code over GF(2),  a cyclic [7,3,1..4]2..3 enumerated code over GF(2),  a cyclic [7,0,7]7 enumerated code over GF(2),  a cyclic [7,3,1..4]2..3 enumerated code over GF(2),  a cyclic [7,4,1..3]1 enumerated code over GF(2),  a cyclic [7,1,7]3 enumerated code over GF(2),  a cyclic [7,4,1..3]1 enumerated code over GF(2) ] gap> IntersectionCode(C[6], C[8]) = C[7]; true  ------------------------------------------------------------------ The hull of a linear code is the intersection of the code with its dual code. In other words, the hull of C is IntersectionCode(C, DualCode(C)). 6.2-5 UnionCode > UnionCode( C1, C2 ) ______________________________________________function UnionCode returns the union of codes C1 and C2. This code consists of the union of all codewords of C1 and C2 and all linear combinations. Therefore this function works only for linear codes. The function AddedElementsCode can be used for non-linear codes, or if the resulting code should not include linear combinations. See AddedElementsCode (6.1-8). If both arguments are cyclic, the result is also cyclic. --------------------------- Example ---------------------------- gap> G := GeneratorMatCode([[1,0,1],[0,1,1]]*Z(2)^0, GF(2)); a linear [3,2,1..2]1 code defined by generator matrix over GF(2) gap> H := GeneratorMatCode([[1,1,1]]*Z(2)^0, GF(2)); a linear [3,1,3]1 code defined by generator matrix over GF(2) gap> U := UnionCode(G, H); a linear [3,3,1]0 union code gap> c := Codeword("010");; c in G; false gap> c in H; false gap> c in U; true  ------------------------------------------------------------------ 6.2-6 ExtendedDirectSumCode > ExtendedDirectSumCode( L, B, m ) _________________________________function The extended direct sum construction is described in section V of Graham and Sloane [GS85]. The resulting code consists of m copies of L, extended by repeating the codewords of B m times. Suppose L is an [n_L, k_L]r_L code, and B is an [n_L, k_B]r_B code (non-linear codes are also permitted). The length of B must be equal to the length of L. The length of the new code is n = m n_L, the dimension (in the case of linear codes) is k <= m k_L + k_B, and the covering radius is r <= lfloor m Psi( L, B ) rfloor, with \Psi( L, B ) = \max_{u \in F_2^{n_L}} \frac{1}{2^{k_B}} \sum_{v \in B} {\rm d}( L, v + u ). However, this computation will not be executed, because it may be too time consuming for large codes. If L subseteq B, and L and B are linear codes, the last copy of L is omitted. In this case the dimension is k = m k_L + (k_B - k_L). --------------------------- Example ---------------------------- gap> c := HammingCode( 3, GF(2) ); a linear [7,4,3]1 Hamming (3,2) code over GF(2) gap> d := WholeSpaceCode( 7, GF(2) ); a cyclic [7,7,1]0 whole space code over GF(2) gap> e := ExtendedDirectSumCode( c, d, 3 ); a linear [21,15,1..3]2 3-fold extended direct sum code ------------------------------------------------------------------ 6.2-7 AmalgamatedDirectSumCode > AmalgamatedDirectSumCode( c1, c2[, check] ) ______________________function AmalgamatedDirectSumCode returns the amalgamated direct sum of the codes c1 and c2. The amalgamated direct sum code consists of all codewords of the form (u , | ,0 , | , v) if (u , | , 0) in c_1 and (0 , | , v) in c_2 and all codewords of the form (u , | , 1 , | , v) if (u , | , 1) in c_1 and (1 , | , v) in c_2. The result is a code with length n = n_1 + n_2 - 1 and size M <= M_1 * M_2 / 2. If both codes are linear, they will first be standardized, with information symbols in the last and first coordinates of the first and second code, respectively. If c1 is a normal code (see IsNormalCode (7.4-5)) with the last coordinate acceptable (see IsCoordinateAcceptable (7.4-3)), and c2 is a normal code with the first coordinate acceptable, then the covering radius of the new code is r <= r_1 + r_2. However, checking whether a code is normal or not is a lot of work, and almost all codes seem to be normal. Therefore, an option check can be supplied. If check is true, then the codes will be checked for normality. If check is false or omitted, then the codes will not be checked. In this case it is assumed that they are normal. Acceptability of the last and first coordinate of the first and second code, respectively, is in the last case also assumed to be done by the user. --------------------------- Example ---------------------------- gap> c := HammingCode( 3, GF(2) ); a linear [7,4,3]1 Hamming (3,2) code over GF(2) gap> d := ReedMullerCode( 1, 4 ); a linear [16,5,8]6 Reed-Muller (1,4) code over GF(2) gap> e := DirectSumCode( c, d ); a linear [23,9,3]7 direct sum code gap> f := AmalgamatedDirectSumCode( c, d );; gap> MinimumDistance( f );; gap> CoveringRadius( f );;  gap> f; a linear [22,8,3]7 amalgamated direct sum code ------------------------------------------------------------------ 6.2-8 BlockwiseDirectSumCode > BlockwiseDirectSumCode( C1, L1, C2, L2 ) _________________________function BlockwiseDirectSumCode returns a subcode of the direct sum of C1 and C2. The fields of C1 and C2 must be same. The lists L1 and L2 are two equally long with elements from the ambient vector spaces of C1 and C2, respectively, or L1 and L2 are two equally long lists containing codes. The union of the codes in L1 and L2 must be C1 and C2, respectively. In the first case, the blockwise direct sum code is defined as bds = \bigcup_{1 \leq i \leq \ell} ( C_1 + (L_1)_i ) \oplus ( C_2 + (L_2)_i ), where ell is the length of L1 and L2, and oplus is the direct sum. In the second case, it is defined as bds = \bigcup_{1 \leq i \leq \ell} ( (L_1)_i \oplus (L_2)_i ). The length of the new code is n = n_1 + n_2. --------------------------- Example ---------------------------- gap> C1 := HammingCode( 3, GF(2) );; gap> C2 := EvenWeightSubcode( WholeSpaceCode( 6, GF(2) ) );; gap> BlockwiseDirectSumCode( C1, [[ 0,0,0,0,0,0,0 ],[ 1,0,1,0,1,0,0 ]], > C2, [[ 0,0,0,0,0,0 ],[ 1,0,1,0,1,0 ]] ); a (13,1024,1..13)1..2 blockwise direct sum code ------------------------------------------------------------------ 6.2-9 ConstructionXCode > ConstructionXCode( C, A ) ________________________________________function Consider a list of j linear codes of the same length N over the same field F, C = C_1, C_2, ..., C_j, where the parameter of the ith code is C_i = [N, K_i, D_i] and C_j subset C_j-1 subset ... subset C_2 subset C_1. Consider a list of j-1 auxiliary linear codes of the same field F, A = A_1, A_2, ..., A_j-1 where the parameter of the ith code A_i is [n_i, k_i=(K_i-K_i+1), d_i], an [n, K_1, d] linear code over field F can be constructed where n = N + sum_i=1^j-1 n_i, and d = min D_j, D_j-1 + d_j-1, D_j-2 + d_j-2 + d_j-1, ..., D_1 + sum_i=1^j-1 d_i. For more information on Construction X, refer to [SRC72]. --------------------------- Example ---------------------------- gap> C1 := BCHCode(127, 43); a cyclic [127,29,43]31..59 BCH code, delta=43, b=1 over GF(2) gap> C2 := BCHCode(127, 47); a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2) gap> C3 := BCHCode(127, 55); a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2) gap> G1 := ShallowCopy( GeneratorMat(C2) );; gap> Append(G1, [ GeneratorMat(C1)[23] ]);; gap> C1 := GeneratorMatCode(G1, GF(2)); a linear [127,23,1..43]35..63 code defined by generator matrix over GF(2) gap> MinimumDistance(C1); 43 gap> C := [ C1, C2, C3 ]; [ a linear [127,23,43]35..63 code defined by generator matrix over GF(2),   a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2),   a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2) ] gap> IsSubset(C[1], C[2]); true gap> IsSubset(C[2], C[3]); true gap> A := [ RepetitionCode(4, GF(2)), EvenWeightSubcode( QRCode(17, GF(2)) ) ]; [ a cyclic [4,1,4]2 repetition code over GF(2), a cyclic [17,8,6]3..6 even weight subcode ] gap> CX := ConstructionXCode(C, A); a linear [148,23,53]43..74 Construction X code gap> History(CX); [ "a linear [148,23,53]43..74 Construction X code of",   "Base codes: [ a cyclic [127,15,55]41..62 BCH code, delta=55, b=1 over GF(2)\ , a cyclic [127,22,47..51]36..63 BCH code, delta=47, b=1 over GF(2), a linear \ [127,23,43]35..63 code defined by generator matrix over GF(2) ]",   "Auxiliary codes: [ a cyclic [4,1,4]2 repetition code over GF(2), a cyclic [\ 17,8,6]3..6 even weight subcode ]" ] ------------------------------------------------------------------ 6.2-10 ConstructionXXCode > ConstructionXXCode( C1, C2, C3, A1, A2 ) _________________________function Consider a set of linear codes over field F of the same length, n, C_1=[n, k_1, d_1], C_2=[n, k_2, d_2] and C_3=[n, k_3, d_3] such that C_2 subset C_1, C_3 subset C_1 and C_4 = C_2 cap C_3. Given two auxiliary codes A_1=[n_1, k_1-k_2, e_1] and A_2=[n_2, k_1-k_3, e_2] over the same field F, there exists an [n+n_1+n_2, k_1, d] linear code C_XX over field F, where d = mind_4, d_3 + e_1, d_2 + e_2, d_1 + e_1 + e_2. The codewords of C_XX can be partitioned into three sections ( v;|;a;|;b ) where v has length n, a has length n_1 and b has length n_2. A codeword from Construction XX takes the following form: -- ( v ; | ; 0 ; | ; 0 ) if v in C_4 -- ( v ; | ; a_1 ; | ; 0 ) if v in C_3 backslash C_4 -- ( v ; | ; 0 ; | ; a_2 ) if v in C_2 backslash C_4 -- ( v ; | ; a_1 ; | ; a_2 ) otherwise For more information on Construction XX, refer to [All84]. --------------------------- Example ---------------------------- gap> a := PrimitiveRoot(GF(32)); Z(2^5) gap> f0 := MinimalPolynomial( GF(2), a^0 ); x_1+Z(2)^0 gap> f1 := MinimalPolynomial( GF(2), a^1 ); x_1^5+x_1^2+Z(2)^0 gap> f5 := MinimalPolynomial( GF(2), a^5 ); x_1^5+x_1^4+x_1^2+x_1+Z(2)^0 gap> C2 := CheckPolCode( f0 * f1, 31, GF(2) );; MinimumDistance(C2);; Display(C2); a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2) gap> C3 := CheckPolCode( f0 * f5, 31, GF(2) );; MinimumDistance(C3);; Display(C3); a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2) gap> C1 := UnionCode(C2, C3);; MinimumDistance(C1);; Display(C1); a linear [31,11,11]7..11 union code of U: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2) V: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2) gap> A1 := BestKnownLinearCode( 10, 5, GF(2) ); a linear [10,5,4]2..4 shortened code gap> A2 := DualCode( RepetitionCode(6, GF(2)) ); a cyclic [6,5,2]1 dual code gap> CXX:= ConstructionXXCode(C1, C2, C3, A1, A2 ); a linear [47,11,15..17]13..23 Construction XX code gap> MinimumDistance(CXX); 17 gap> History(CXX);  [ "a linear [47,11,17]13..23 Construction XX code of",   "C1: a cyclic [31,11,11]7..11 union code",   "C2: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)",   "C3: a cyclic [31,6,15]10..13 code defined by check polynomial over GF(2)",   "A1: a linear [10,5,4]2..4 shortened code",   "A2: a cyclic [6,5,2]1 dual code" ] ------------------------------------------------------------------ 6.2-11 BZCode > BZCode( O, I ) ___________________________________________________function Given a set of outer codes of the same length O_i = [N, K_i, D_i] over GF(q^e_i), where i=1,2,...,t and a set of inner codes of the same length I_i = [n, k_i, d_i] over GF(q), BZCode returns a Blokh-Zyablov multilevel concatenated code with parameter [ n x N, sum_i=1^t e_i x K_i, min_i=1,...,td_i x D_i ] over GF(q). Note that the set of inner codes must satisfy chain condition, i.e. I_1 = [n, k_1, d_1] subset I_2=[n, k_2, d_2] subset ... subset I_t=[n, k_t, d_t] where 0=k_0 < k_1 < k_2 < ... < k_t. The dimension of the inner codes must satisfy the condition e_i = k_i - k_i-1, where GF(q^e_i) is the field of the ith outer code. For more information on Blokh-Zyablov multilevel concatenated code, refer to [Bro98]. 6.2-12 BZCodeNC > BZCodeNC( O, I ) _________________________________________________function This function is the same as BZCode, except this version is faster as it does not estimate the covering radius of the code. Users are encouraged to use this version unless you are working on very small codes. --------------------------- Example ---------------------------- gap> # gap> # Binary code gap> # gap> O := [ CyclicMDSCode(2,3,7), BestKnownLinearCode(9,5,GF(2)), CyclicMDSCode(2,3,4) ]; [ a cyclic [9,7,3]1 MDS code over GF(8), a linear [9,5,3]2..3 shortened code,   a cyclic [9,4,6]4..5 MDS code over GF(8) ] gap> A := ExtendedCode( HammingCode(3,GF(2)) );; gap> I := [ SubCode(A), A, DualCode( RepetitionCode(8, GF(2)) ) ]; [ a linear [8,3,4]3..4 subcode, a linear [8,4,4]2 extended code, a cyclic [8,7,2]1 dual code ] gap> C := BZCodeNC(O, I); a linear [72,38,12]0..72 Blokh Zyablov concatenated code gap> # gap> # Non binary code gap> # gap> O2 := ExtendedCode(GoppaCode(ConwayPolynomial(5,2), Elements(GF(5))));; gap> O3 := ExtendedCode(GoppaCode(ConwayPolynomial(5,3), Elements(GF(5))));; gap> O1 := DualCode( O3 );; gap> MinimumDistance(O1);; MinimumDistance(O2);; MinimumDistance(O3);; gap> Cy := CyclicCodes(5, GF(5));; gap> for i in [4, 5] do; MinimumDistance(Cy[i]);; od; gap> O := [ O1, O2, O3 ]; [ a linear [6,4,3]1 dual code, a linear [6,3,4]2..3 extended code,  a linear [6,2,5]3..4 extended code ] gap> I := [ Cy[5], Cy[4], Cy[3] ]; [ a cyclic [5,1,5]3..4 enumerated code over GF(5),  a cyclic [5,2,4]2..3 enumerated code over GF(5),  a cyclic [5,3,1..3]2 enumerated code over GF(5) ] gap> C := BZCodeNC( O, I ); a linear [30,9,5..15]0..30 Blokh Zyablov concatenated code gap> MinimumDistance(C); 15 gap> History(C); [ "a linear [30,9,15]0..30 Blokh Zyablov concatenated code of",  "Inner codes: [ a cyclic [5,1,5]3..4 enumerated code over GF(5), a cyclic [5\ ,2,4]2..3 enumerated code over GF(5), a cyclic [5,3,1..3]2 enumerated code ove\ r GF(5) ]",  "Outer codes: [ a linear [6,4,3]1 dual code, a linear [6,3,4]2..3 extended c\ ode, a linear [6,2,5]3..4 extended code ]" ] ------------------------------------------------------------------ guava-3.6/doc/guava.ilg0000644017361200001450000000051111027015740014701 0ustar tabbottcrontabThis is makeindex, version 2.14 [02-Oct-2002] (kpathsea + Thai support). Scanning input file guava.idx....done (403 entries accepted, 0 rejected). Sorting entries......done (3827 comparisons). Generating output file guava.ind....done (474 lines written, 0 warnings). Output written in guava.ind. Transcript written in guava.ilg. guava-3.6/doc/chap3.txt0000644017361200001450000006135311027015733014655 0ustar tabbottcrontab 3. Codewords Let GF(q) denote a finite field with q (a prime power) elements. A code is a subset C of some finite-dimensional vector space V over GF(q). The length of C is the dimension of V. Usually, V=GF(q)^n and the length is the number of coordinate entries. When C is itself a vector space over GF(q) then it is called a linear code and the dimension of C is its dimension as a vector space over GF(q). In GUAVA, a `codeword' is a GAP record, with one of its components being an element in V. Likewise, a `code' is a GAP record, with one of its components being a subset (or subspace with given basis, if C is linear) of V. --------------------------- Example ----------------------------  gap> C:=RandomLinearCode(20,10,GF(4));  a [20,10,?] randomly generated code over GF(4)  gap> c:=Random(C);  [ 1 a 0 0 0 1 1 a^2 0 0 a 1 1 1 a 1 1 a a 0 ]  gap> NamesOfComponents(C);  [ "LeftActingDomain", "GeneratorsOfLeftOperatorAdditiveGroup", "WordLength",  "GeneratorMat", "name", "Basis", "NiceFreeLeftModule", "Dimension",   "Representative", "ZeroImmutable" ]  gap> NamesOfComponents(c);  [ "VectorCodeword", "WordLength", "treatAsPoly" ]  gap> c!.VectorCodeword;  [ immutable compressed vector length 20 over GF(4) ]   gap> Display(last);  [ Z(2^2), Z(2^2), Z(2^2), Z(2)^0, Z(2^2), Z(2^2)^2, 0*Z(2), Z(2^2), Z(2^2),  Z(2)^0, Z(2^2)^2, 0*Z(2), 0*Z(2), Z(2^2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2^2)^2,  Z(2)^0, 0*Z(2) ]  gap> C!.Dimension;  10 ------------------------------------------------------------------ Mathematically, a `codeword' is an element of a code C, but in GUAVA the Codeword and VectorCodeword commands have implementations which do not check if the codeword belongs to C (i.e., are independent of the code itself). They exist primarily to make it easier for the user to construct a the associated GAP record. Using these commands, one can enter into a GAP both a codeword c (belonging to C) and a received word r (not belonging to C) using the same command. The user can input codewords in different formats (as strings, vectors, and polynomials), and output information is formatted in a readable way. A codeword c in a linear code C arises in practice by an initial encoding of a 'block' message m, adding enough redundancy to recover m after c is transmitted via a 'noisy' communication medium. In GUAVA, for linear codes, the map mlongmapsto c is computed using the command c:=m*C and recovering m from c is obtained by the command InformationWord(C,c). These commands are explained more below. Many operations are available on codewords themselves, although codewords also work together with codes (see chapter 4. on Codes). The first section describes how codewords are constructed (see Codeword (3.1-1) and IsCodeword (3.1-3)). Sections 3.2 and 3.3 describe the arithmetic operations applicable to codewords. Section 3.4 describe functions that convert codewords back to vectors or polynomials (see VectorCodeword (3.4-1) and PolyCodeword (3.4-2)). Section ???Functions that Change the Display Form of a Codeword??? describe functions that change the way a codeword is displayed (see TreatAsVector (3.5-1) and TreatAsPoly (3.5-2)). Finally, Section 3.6 describes a function to generate a null word (see NullWord (3.6-1)) and some functions for extracting properties of codewords (see DistanceCodeword (3.6-2), Support (3.6-3) and WeightCodeword (3.6-4)). 3.1 Construction of Codewords 3.1-1 Codeword > Codeword( obj[, n][, F] ) ________________________________________function Codeword returns a codeword or a list of codewords constructed from obj. The object obj can be a vector, a string, a polynomial or a codeword. It may also be a list of those (even a mixed list). If a number n is specified, all constructed codewords have length n. This is the only way to make sure that all elements of obj are converted to codewords of the same length. Elements of obj that are longer than n are reduced in length by cutting of the last positions. Elements of obj that are shorter than n are lengthened by adding zeros at the end. If no n is specified, each constructed codeword is handled individually. If a Galois field F is specified, all codewords are constructed over this field. This is the only way to make sure that all elements of obj are converted to the same field F (otherwise they are converted one by one). Note that all elements of obj must have elements over F or over `Integers'. Converting from one Galois field to another is not allowed. If no F is specified, vectors or strings with integer elements will be converted to the smallest Galois field possible. Note that a significant speed increase is achieved if F is specified, even when all elements of obj already have elements over F. Every vector in obj can be a finite field vector over F or a vector over `Integers'. In the last case, it is converted to F or, if omitted, to the smallest Galois field possible. Every string in obj must be a string of numbers, without spaces, commas or any other characters. These numbers must be from 0 to 9. The string is converted to a codeword over F or, if F is omitted, over the smallest Galois field possible. Note that since all numbers in the string are interpreted as one-digit numbers, Galois fields of size larger than 10 are not properly represented when using strings. In fact, no finite field of size larger than 11 arises in this fashion at all. Every polynomial in obj is converted to a codeword of length n or, if omitted, of a length dictated by the degree of the polynomial. If F is specified, a polynomial in obj must be over F. Every element of obj that is already a codeword is changed to a codeword of length n. If no n was specified, the codeword doesn't change. If F is specified, the codeword must have base field F. --------------------------- Example ---------------------------- gap> c := Codeword([0,1,1,1,0]); [ 0 1 1 1 0 ] gap> VectorCodeword( c );  [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ] gap> c2 := Codeword([0,1,1,1,0], GF(3)); [ 0 1 1 1 0 ] gap> VectorCodeword( c2 ); [ 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0, 0*Z(3) ] gap> Codeword([c, c2, "0110"]); [ [ 0 1 1 1 0 ], [ 0 1 1 1 0 ], [ 0 1 1 0 ] ] gap> p := UnivariatePolynomial(GF(2), [Z(2)^0, 0*Z(2), Z(2)^0]); Z(2)^0+x_1^2 gap> Codeword(p); x^2 + 1  ------------------------------------------------------------------ This command can also be called using the syntax Codeword(obj,C). In this format, the elements of obj are converted to elements of the same ambient vector space as the elements of a code C. The command Codeword(c,C) is the same as calling Codeword(c,n,F), where n is the word length of C and the F is the ground field of C. --------------------------- Example ---------------------------- gap> C := WholeSpaceCode(7,GF(5)); a cyclic [7,7,1]0 whole space code over GF(5) gap> Codeword(["0220110", [1,1,1]], C); [ [ 0 2 2 0 1 1 0 ], [ 1 1 1 0 0 0 0 ] ] gap> Codeword(["0220110", [1,1,1]], 7, GF(5)); [ [ 0 2 2 0 1 1 0 ], [ 1 1 1 0 0 0 0 ] ]  gap> C:=RandomLinearCode(10,5,GF(3)); a linear [10,5,1..3]3..5 random linear code over GF(3) gap> Codeword("1000000000",C); [ 1 0 0 0 0 0 0 0 0 0 ] gap> Codeword("1000000000",10,GF(3)); [ 1 0 0 0 0 0 0 0 0 0 ] ------------------------------------------------------------------ 3.1-2 CodewordNr > CodewordNr( C, list ) ____________________________________________function CodewordNr returns a list of codewords of C. list may be a list of integers or a single integer. For each integer of list, the corresponding codeword of C is returned. The correspondence of a number i with a codeword is determined as follows: if a list of elements of C is available, the i^th element is taken. Otherwise, it is calculated by multiplication of the i^th information vector by the generator matrix or generator polynomial, where the information vectors are ordered lexicographically. In particular, the returned codeword(s) could be a vector or a polynomial. So CodewordNr(C, i) is equal to AsSSortedList(C)[i], described in the next chapter. The latter function first calculates the set of all the elements of C and then returns the i^th element of that set, whereas the former only calculates the i^th codeword. --------------------------- Example ---------------------------- gap> B := BinaryGolayCode(); a cyclic [23,12,7]3 binary Golay code over GF(2) gap> c := CodewordNr(B, 4); x^22 + x^20 + x^17 + x^14 + x^13 + x^12 + x^11 + x^10 gap> R := ReedSolomonCode(2,2); a cyclic [2,1,2]1 Reed-Solomon code over GF(3) gap> AsSSortedList(R); [ [ 0 0 ], [ 1 1 ], [ 2 2 ] ] gap> CodewordNr(R, [1,3]); [ [ 0 0 ], [ 2 2 ] ] ------------------------------------------------------------------ 3.1-3 IsCodeword > IsCodeword( obj ) ________________________________________________function IsCodeword returns `true' if obj, which can be an object of arbitrary type, is of the codeword type and `false' otherwise. The function will signal an error if obj is an unbound variable. --------------------------- Example ---------------------------- gap> IsCodeword(1); false gap> IsCodeword(ReedMullerCode(2,3)); false gap> IsCodeword("11111"); false gap> IsCodeword(Codeword("11111")); true  ------------------------------------------------------------------ 3.2 Comparisons of Codewords 3.2-1 = > =( c1, c2 ) ______________________________________________________function The equality operator c1 = c2 evaluates to `true' if the codewords c1 and c2 are equal, and to `false' otherwise. Note that codewords are equal if and only if their base vectors are equal. Whether they are represented as a vector or polynomial has nothing to do with the comparison. Comparing codewords with objects of other types is not recommended, although it is possible. If c2 is the codeword, the other object c1 is first converted to a codeword, after which comparison is possible. This way, a codeword can be compared with a vector, polynomial, or string. If c1 is the codeword, then problems may arise if c2 is a polynomial. In that case, the comparison always yields a `false', because the polynomial comparison is called. The equality operator is also denoted EQ, and EQ(c1,c2) is the same as c1 = c2. There is also an inequality operator, < >, or not EQ. --------------------------- Example ---------------------------- gap> P := UnivariatePolynomial(GF(2), Z(2)*[1,0,0,1]); Z(2)^0+x_1^3 gap> c := Codeword(P, GF(2)); x^3 + 1 gap> P = c; # codeword operation true gap> c2 := Codeword("1001", GF(2)); [ 1 0 0 1 ] gap> c = c2; true  gap> C:=HammingCode(3); a linear [7,4,3]1 Hamming (3,2) code over GF(2) gap> c1:=Random(C); [ 1 0 0 1 1 0 0 ] gap> c2:=Random(C); [ 0 1 0 0 1 0 1 ] gap> EQ(c1,c2); false gap> not EQ(c1,c2); true ------------------------------------------------------------------ 3.3 Arithmetic Operations for Codewords 3.3-1 + > +( c1, c2 ) ______________________________________________________function The following operations are always available for codewords. The operands must have a common base field, and must have the same length. No implicit conversions are performed. The operator + evaluates to the sum of the codewords c1 and c2. --------------------------- Example ---------------------------- gap> C:=RandomLinearCode(10,5,GF(3)); a linear [10,5,1..3]3..5 random linear code over GF(3) gap> c:=Random(C); [ 1 0 2 2 2 2 1 0 2 0 ] gap> Codeword(c+"2000000000"); [ 0 0 2 2 2 2 1 0 2 0 ] gap> Codeword(c+"1000000000"); ------------------------------------------------------------------ The last command returns a GAP ERROR since the `codeword' which GUAVA associates to "1000000000" belongs to GF(2) and not GF(3). 3.3-2 - > -( c1, c2 ) ______________________________________________________function Similar to addition: the operator - evaluates to the difference of the codewords c1 and c2. 3.3-3 + > +( v, C ) ________________________________________________________function The operator v+C evaluates to the coset code of code C after adding a `codeword' v to all codewords in C. Note that if c in C then mathematically c+C=C but GUAVA only sees them equal as sets. See CosetCode (6.1-17). Note that the command C+v returns the same output as the command v+C. --------------------------- Example ---------------------------- gap> C:=RandomLinearCode(10,5); a [10,5,?] randomly generated code over GF(2) gap> c:=Random(C); [ 0 0 0 0 0 0 0 0 0 0 ] gap> c+C; [ add. coset of a [10,5,?] randomly generated code over GF(2) ] gap> c+C=C; true gap> IsLinearCode(c+C); false gap> v:=Codeword("100000000"); [ 1 0 0 0 0 0 0 0 0 ] gap> v+C; [ add. coset of a [10,5,?] randomly generated code over GF(2) ] gap> C=v+C; false gap> C := GeneratorMatCode( [ [1, 0,0,0], [0, 1,0,0] ], GF(2) ); a linear [4,2,1]1 code defined by generator matrix over GF(2) gap> Elements(C); [ [ 0 0 0 0 ], [ 0 1 0 0 ], [ 1 0 0 0 ], [ 1 1 0 0 ] ] gap> v:=Codeword("0011"); [ 0 0 1 1 ] gap> C+v; [ add. coset of a linear [4,2,4]1 code defined by generator matrix over GF(2) ] gap> Elements(C+v); [ [ 0 0 1 1 ], [ 0 1 1 1 ], [ 1 0 1 1 ], [ 1 1 1 1 ] ] ------------------------------------------------------------------ In general, the operations just described can also be performed on codewords expressed as vectors, strings or polynomials, although this is not recommended. The vector, string or polynomial is first converted to a codeword, after which the normal operation is performed. For this to go right, make sure that at least one of the operands is a codeword. Further more, it will not work when the right operand is a polynomial. In that case, the polynomial operations (FiniteFieldPolynomialOps) are called, instead of the codeword operations (CodewordOps). Some other code-oriented operations with codewords are described in 4.2. 3.4 Functions that Convert Codewords to Vectors or Polynomials 3.4-1 VectorCodeword > VectorCodeword( obj ) ____________________________________________function Here obj can be a code word or a list of code words. This function returns the corresponding vectors over a finite field. --------------------------- Example ---------------------------- gap> a := Codeword("011011");;  gap> VectorCodeword(a); [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ] ------------------------------------------------------------------ 3.4-2 PolyCodeword > PolyCodeword( obj ) ______________________________________________function PolyCodeword returns a polynomial or a list of polynomials over a Galois field, converted from obj. The object obj can be a codeword, or a list of codewords. --------------------------- Example ---------------------------- gap> a := Codeword("011011");;  gap> PolyCodeword(a); x_1+x_1^2+x_1^4+x_1^5 ------------------------------------------------------------------ 3.5 Functions that Change the Display Form of a Codeword 3.5-1 TreatAsVector > TreatAsVector( obj ) _____________________________________________function TreatAsVector adapts the codewords in obj to make sure they are printed as vectors. obj may be a codeword or a list of codewords. Elements of obj that are not codewords are ignored. After this function is called, the codewords will be treated as vectors. The vector representation is obtained by using the coefficient list of the polynomial. Note that this only changes the way a codeword is printed. TreatAsVector returns nothing, it is called only for its side effect. The function VectorCodeword converts codewords to vectors (see VectorCodeword (3.4-1)). --------------------------- Example ---------------------------- gap> B := BinaryGolayCode(); a cyclic [23,12,7]3 binary Golay code over GF(2) gap> c := CodewordNr(B, 4); x^22 + x^20 + x^17 + x^14 + x^13 + x^12 + x^11 + x^10 gap> TreatAsVector(c); gap> c; [ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 0 0 1 0 1 ]  ------------------------------------------------------------------ 3.5-2 TreatAsPoly > TreatAsPoly( obj ) _______________________________________________function TreatAsPoly adapts the codewords in obj to make sure they are printed as polynomials. obj may be a codeword or a list of codewords. Elements of obj that are not codewords are ignored. After this function is called, the codewords will be treated as polynomials. The finite field vector that defines the codeword is used as a coefficient list of the polynomial representation, where the first element of the vector is the coefficient of degree zero, the second element is the coefficient of degree one, etc, until the last element, which is the coefficient of highest degree. Note that this only changes the way a codeword is printed. TreatAsPoly returns nothing, it is called only for its side effect. The function PolyCodeword converts codewords to polynomials (see PolyCodeword (3.4-2)). --------------------------- Example ---------------------------- gap> a := Codeword("00001",GF(2)); [ 0 0 0 0 1 ] gap> TreatAsPoly(a); a; x^4 gap> b := NullWord(6,GF(4)); [ 0 0 0 0 0 0 ] gap> TreatAsPoly(b); b; 0  ------------------------------------------------------------------ 3.6 Other Codeword Functions 3.6-1 NullWord > NullWord( n, F ) _________________________________________________function Other uses: NullWord( n ) (default F=GF(2)) and NullWord( C ). NullWord returns a codeword of length n over the field F of only zeros. The integer n must be greater then zero. If only a code C is specified, NullWord will return a null word with both the word length and the Galois field of C. --------------------------- Example ---------------------------- gap> NullWord(8); [ 0 0 0 0 0 0 0 0 ] gap> Codeword("0000") = NullWord(4); true gap> NullWord(5,GF(16)); [ 0 0 0 0 0 ] gap> NullWord(ExtendedTernaryGolayCode()); [ 0 0 0 0 0 0 0 0 0 0 0 0 ]  ------------------------------------------------------------------ 3.6-2 DistanceCodeword > DistanceCodeword( c1, c2 ) _______________________________________function DistanceCodeword returns the Hamming distance from c1 to c2. Both variables must be codewords with equal word length over the same Galois field. The Hamming distance between two words is the number of places in which they differ. As a result, DistanceCodeword always returns an integer between zero and the word length of the codewords. --------------------------- Example ---------------------------- gap> a := Codeword([0, 1, 2, 0, 1, 2]);; b := NullWord(6, GF(3));; gap> DistanceCodeword(a, b); 4 gap> DistanceCodeword(b, a); 4 gap> DistanceCodeword(a, a); 0  ------------------------------------------------------------------ 3.6-3 Support > Support( c ) _____________________________________________________function Support returns a set of integers indicating the positions of the non-zero entries in a codeword c. --------------------------- Example ---------------------------- gap> a := Codeword("012320023002");; Support(a); [ 2, 3, 4, 5, 8, 9, 12 ] gap> Support(NullWord(7)); [ ]  ------------------------------------------------------------------ The support of a list with codewords can be calculated by taking the union of the individual supports. The weight of the support is the length of the set. --------------------------- Example ---------------------------- gap> L := Codeword(["000000", "101010", "222000"], GF(3));; gap> S := Union(List(L, i -> Support(i))); [ 1, 2, 3, 5 ] gap> Length(S); 4  ------------------------------------------------------------------ 3.6-4 WeightCodeword > WeightCodeword( c ) ______________________________________________function WeightCodeword returns the weight of a codeword c, the number of non-zero entries in c. As a result, WeightCodeword always returns an integer between zero and the word length of the codeword. --------------------------- Example ---------------------------- gap> WeightCodeword(Codeword("22222")); 5 gap> WeightCodeword(NullWord(3)); 0 gap> C := HammingCode(3); a linear [7,4,3]1 Hamming (3,2) code over GF(2) gap> Minimum(List(AsSSortedList(C){[2..Size(C)]}, WeightCodeword ) ); 3  ------------------------------------------------------------------ guava-3.6/doc/chap5.txt0000644017361200001450000036441011027015733014657 0ustar tabbottcrontab 5. Generating Codes In this chapter we describe functions for generating codes. Section 5.1 describes functions for generating unrestricted codes. Section 5.2 describes functions for generating linear codes. Section 5.3 describes functions for constructing certain covering codes, such as the Gabidulin codes. Section 5.4 describes functions for constructing the Golay codes. Section 5.5 describes functions for generating cyclic codes. Section 5.6 describes functions for generating codes as the image of an evaluation map applied to a space of functions. For example, generalized Reed-Solomon codes and toric codes are described there. Section 5.7 describes functions for generating algebraic geometry codes. Section 5.8 describes functions for constructing low-density parity-check (LDPC) codes. 5.1 Generating Unrestricted Codes In this section we start with functions that creating code from user defined matrices or special matrices (see ElementsCode (5.1-1), HadamardCode (5.1-2), ConferenceCode (5.1-3) and MOLSCode (5.1-4)). These codes are unrestricted codes; they may later be discovered to be linear or cyclic. The next functions generate random codes (see RandomCode (5.1-5)) and the Nordstrom-Robinson code (see NordstromRobinsonCode (5.1-6)), respectively. Finally, we describe two functions for generating Greedy codes. These are codes that contructed by gathering codewords from a space (see GreedyCode (5.1-7) and LexiCode (5.1-8)). 5.1-1 ElementsCode > ElementsCode( L[, name], F ) _____________________________________function ElementsCode creates an unrestricted code of the list of elements L, in the field F. L must be a list of vectors, strings, polynomials or codewords. name can contain a short description of the code. If L contains a codeword more than once, it is removed from the list and a GAP set is returned. --------------------------- Example ---------------------------- gap> M := Z(3)^0 * [ [1, 0, 1, 1], [2, 2, 0, 0], [0, 1, 2, 2] ];; gap> C := ElementsCode( M, "example code", GF(3) ); a (4,3,1..4)2 example code over GF(3) gap> MinimumDistance( C ); 4 gap> AsSSortedList( C ); [ [ 0 1 2 2 ], [ 1 0 1 1 ], [ 2 2 0 0 ] ] ------------------------------------------------------------------ 5.1-2 HadamardCode > HadamardCode( H[, t] ) ___________________________________________function The four forms this command can take are HadamardCode(H,t), HadamardCode(H), HadamardCode(n,t), and HadamardCode(n). In the case when the arguments H and t are both given, HadamardCode returns a Hadamard code of the t^th kind from the Hadamard matrix H In case only H is given, t = 3 is used. By definition, a Hadamard matrix is a square matrix H with H* H^T = -n* I_n, where n is the size of H. The entries of H are either 1 or -1. The matrix H is first transformed into a binary matrix A_n by replacing the 1's by 0's and the -1's by 1s). The Hadamard matrix of the first kind (t=1) is created by using the rows of A_n as elements, after deleting the first column. This is a (n-1, n, n/2) code. We use this code for creating the Hadamard code of the second kind (t=2), by adding all the complements of the already existing codewords. This results in a (n-1, 2n, n/2 -1) code. The third kind (t=3) is created by using the rows of A_n (without cutting a column) and their complements as elements. This way, we have an (n, 2n, n/2)-code. The returned code is generally an unrestricted code, but for n = 2^r, the code is linear. The command HadamardCode(n,t) returns a Hadamard code with parameter n of the t^th kind. For the command HadamardCode(n), t=3 is used. When called in these forms, HadamardCode first creates a Hadamard matrix (see HadamardMat (7.3-4)), of size n and then follows the same procedure as described above. Therefore the same restrictions with respect to n as for Hadamard matrices hold. --------------------------- Example ---------------------------- gap> H4 := [[1,1,1,1],[1,-1,1,-1],[1,1,-1,-1],[1,-1,-1,1]];; gap> HadamardCode( H4, 1 ); a (3,4,2)1 Hadamard code of order 4 over GF(2) gap> HadamardCode( H4, 2 ); a (3,8,1)0 Hadamard code of order 4 over GF(2) gap> HadamardCode( H4 ); a (4,8,2)1 Hadamard code of order 4 over GF(2)  gap> H4 := [[1,1,1,1],[1,-1,1,-1],[1,1,-1,-1],[1,-1,-1,1]];; gap> C := HadamardCode( 4 ); a (4,8,2)1 Hadamard code of order 4 over GF(2) gap> C = HadamardCode( H4 ); true  ------------------------------------------------------------------ 5.1-3 ConferenceCode > ConferenceCode( H ) ______________________________________________function ConferenceCode returns a code of length n-1 constructed from a symmetric 'conference matrix' H. A conference matrix H is a symmetric matrix of order n, which satisfies H* H^T = ((n-1)* I, with n = 2 mod 4. The rows of frac12(H+I+J), frac12(-H+I+J), plus the zero and all-ones vectors form the elements of a binary non-linear (n-1, 2n, (n-2)/2) code. GUAVA constructs a symmetric conference matrix of order n+1 (n= 1 mod 4) and uses the rows of that matrix, plus the zero and all-ones vectors, to construct a binary non-linear (n, 2(n+1), (n-1)/2)-code. --------------------------- Example ---------------------------- gap> H6 := [[0,1,1,1,1,1],[1,0,1,-1,-1,1],[1,1,0,1,-1,-1], > [1,-1,1,0,1,-1],[1,-1,-1,1,0,1],[1,1,-1,-1,1,0]];; gap> C1 := ConferenceCode( H6 ); a (5,12,2)1..4 conference code over GF(2) gap> IsLinearCode( C1 ); false  gap> C2 := ConferenceCode( 5 ); a (5,12,2)1..4 conference code over GF(2) gap> AsSSortedList( C2 ); [ [ 0 0 0 0 0 ], [ 0 0 1 1 1 ], [ 0 1 0 1 1 ], [ 0 1 1 0 1 ], [ 0 1 1 1 0 ],   [ 1 0 0 1 1 ], [ 1 0 1 0 1 ], [ 1 0 1 1 0 ], [ 1 1 0 0 1 ], [ 1 1 0 1 0 ],   [ 1 1 1 0 0 ], [ 1 1 1 1 1 ] ] ------------------------------------------------------------------ 5.1-4 MOLSCode > MOLSCode( [n][,]q ) ______________________________________________function MOLSCode returns an (n, q^2, n-1) code over GF(q). The code is created from n-2 'Mutually Orthogonal Latin Squares' (MOLS) of size q x q. The default for n is 4. GUAVA can construct a MOLS code for n-2 <= q. Here q must be a prime power, q > 2. If there are no n-2 MOLS, an error is signalled. Since each of the n-2 MOLS is a qx q matrix, we can create a code of size q^2 by listing in each code element the entries that are in the same position in each of the MOLS. We precede each of these lists with the two coordinates that specify this position, making the word length become n. The MOLS codes are MDS codes (see IsMDSCode (4.3-7)). --------------------------- Example ---------------------------- gap> C1 := MOLSCode( 6, 5 ); a (6,25,5)3..4 code generated by 4 MOLS of order 5 over GF(5) gap> mols := List( [1 .. WordLength(C1) - 2 ], function( nr ) > local ls, el; > ls := NullMat( Size(LeftActingDomain(C1)), Size(LeftActingDomain(C1)) ); > for el in VectorCodeword( AsSSortedList( C1 ) ) do > ls[IntFFE(el[1])+1][IntFFE(el[2])+1] := el[nr + 2]; > od; > return ls; > end );; gap> AreMOLS( mols ); true gap> C2 := MOLSCode( 11 ); a (4,121,3)2 code generated by 2 MOLS of order 11 over GF(11)  ------------------------------------------------------------------ 5.1-5 RandomCode > RandomCode( n, M, F ) ____________________________________________function RandomCode returns a random unrestricted code of size M with word length n over F. M must be less than or equal to the number of elements in the space GF(q)^n. The function RandomLinearCode returns a random linear code (see RandomLinearCode (5.2-12)). --------------------------- Example ---------------------------- gap> C1 := RandomCode( 6, 10, GF(8) ); a (6,10,1..6)4..6 random unrestricted code over GF(8) gap> MinimumDistance(C1); 3 gap> C2 := RandomCode( 6, 10, GF(8) ); a (6,10,1..6)4..6 random unrestricted code over GF(8) gap> C1 = C2; false  ------------------------------------------------------------------ 5.1-6 NordstromRobinsonCode > NordstromRobinsonCode(  ) ________________________________________function NordstromRobinsonCode returns a Nordstrom-Robinson code, the best code with word length n=16 and minimum distance d=6 over GF(2). This is a non-linear (16, 256, 6) code. --------------------------- Example ---------------------------- gap> C := NordstromRobinsonCode(); a (16,256,6)4 Nordstrom-Robinson code over GF(2) gap> OptimalityCode( C ); 0  ------------------------------------------------------------------ 5.1-7 GreedyCode > GreedyCode( L, d, F ) ____________________________________________function GreedyCode returns a Greedy code with design distance d over the finite field F. The code is constructed using the greedy algorithm on the list of vectors L. (The greedy algorithm checks each vector in L and adds it to the code if its distance to the current code is greater than or equal to d. It is obvious that the resulting code has a minimum distance of at least d. Greedy codes are often linear codes. The function LexiCode creates a greedy code from a basis instead of an enumerated list (see LexiCode (5.1-8)). --------------------------- Example ---------------------------- gap> C1 := GreedyCode( Tuples( AsSSortedList( GF(2) ), 5 ), 3, GF(2) ); a (5,4,3..5)2 Greedy code, user defined basis over GF(2) gap> C2 := GreedyCode( Permuted( Tuples( AsSSortedList( GF(2) ), 5 ), > (1,4) ), 3, GF(2) ); a (5,4,3..5)2 Greedy code, user defined basis over GF(2) gap> C1 = C2; false  ------------------------------------------------------------------ 5.1-8 LexiCode > LexiCode( n, d, F ) ______________________________________________function In this format, Lexicode returns a lexicode with word length n, design distance d over F. The code is constructed using the greedy algorithm on the lexicographically ordered list of all vectors of length n over F. Every time a vector is found that has a distance to the current code of at least d, it is added to the code. This results, obviously, in a code with minimum distance greater than or equal to d. Another syntax which one can use is LexiCode( B, d, F ). When called in this format, LexiCode uses the basis B instead of the standard basis. B is a matrix of vectors over F. The code is constructed using the greedy algorithm on the list of vectors spanned by B, ordered lexicographically with respect to B. Note that binary lexicodes are always linear. --------------------------- Example ---------------------------- gap> C := LexiCode( 4, 3, GF(5) ); a (4,17,3..4)2..4 lexicode over GF(5)  gap> B := [ [Z(2)^0, 0*Z(2), 0*Z(2)], [Z(2)^0, Z(2)^0, 0*Z(2)] ];; gap> C := LexiCode( B, 2, GF(2) ); a linear [3,1,2]1..2 lexicode over GF(2)  ------------------------------------------------------------------ The function GreedyCode creates a greedy code that is not restricted to a lexicographical order (see GreedyCode (5.1-7)). 5.2 Generating Linear Codes In this section we describe functions for constructing linear codes. A linear code always has a generator or check matrix. The first two functions generate linear codes from the generator matrix (GeneratorMatCode (5.2-1)) or check matrix (CheckMatCode (5.2-3)). All linear codes can be constructed with these functions. The next functions we describe generate some well-known codes, like Hamming codes (HammingCode (5.2-4)), Reed-Muller codes (ReedMullerCode (5.2-5)) and the extended Golay codes (ExtendedBinaryGolayCode (5.4-2) and ExtendedTernaryGolayCode (5.4-4)). A large and powerful family of codes are alternant codes. They are obtained by a small modification of the parity check matrix of a BCH code (see AlternantCode (5.2-6), GoppaCode (5.2-7), GeneralizedSrivastavaCode (5.2-8) and SrivastavaCode (5.2-9)). Finally, we describe a function for generating random linear codes (see RandomLinearCode (5.2-12)). 5.2-1 GeneratorMatCode > GeneratorMatCode( G[, name], F ) _________________________________function GeneratorMatCode returns a linear code with generator matrix G. G must be a matrix over finite field F. name can contain a short description of the code. The generator matrix is the basis of the elements of the code. The resulting code has word length n, dimension k if G is a k x n-matrix. If GF(q) is the field of the code, the size of the code will be q^k. If the generator matrix does not have full row rank, the linearly dependent rows are removed. This is done by the GAP function BaseMat and results in an equal code. The generator matrix can be retrieved with the function GeneratorMat (see GeneratorMat (4.7-1)). --------------------------- Example ---------------------------- gap> G := Z(3)^0 * [[1,0,1,2,0],[0,1,2,1,1],[0,0,1,2,1]];; gap> C1 := GeneratorMatCode( G, GF(3) ); a linear [5,3,1..2]1..2 code defined by generator matrix over GF(3) gap> C2 := GeneratorMatCode( IdentityMat( 5, GF(2) ), GF(2) ); a linear [5,5,1]0 code defined by generator matrix over GF(2) gap> GeneratorMatCode( List( AsSSortedList( NordstromRobinsonCode() ), > x -> VectorCodeword( x ) ), GF( 2 ) ); a linear [16,11,1..4]2 code defined by generator matrix over GF(2) # This is the smallest linear code that contains the N-R code  ------------------------------------------------------------------ 5.2-2 CheckMatCodeMutable > CheckMatCodeMutable( H[, name], F ) ______________________________function CheckMatCodeMutable is the same as CheckMatCode except that the check matrix and generator matrix are mutable. 5.2-3 CheckMatCode > CheckMatCode( H[, name], F ) _____________________________________function CheckMatCode returns a linear code with check matrix H. H must be a matrix over Galois field F. [name. can contain a short description of the code. The parity check matrix is the transposed of the nullmatrix of the generator matrix of the code. Therefore, c* H^T = 0 where c is an element of the code. If H is a rx n-matrix, the code has word length n, redundancy r and dimension n-r. If the check matrix does not have full row rank, the linearly dependent rows are removed. This is done by the GAP function BaseMat. and results in an equal code. The check matrix can be retrieved with the function CheckMat (see CheckMat (4.7-2)). --------------------------- Example ---------------------------- gap> G := Z(3)^0 * [[1,0,1,2,0],[0,1,2,1,1],[0,0,1,2,1]];; gap> C1 := CheckMatCode( G, GF(3) ); a linear [5,2,1..2]2..3 code defined by check matrix over GF(3) gap> CheckMat(C1); [ [ Z(3)^0, 0*Z(3), Z(3)^0, Z(3), 0*Z(3) ],  [ 0*Z(3), Z(3)^0, Z(3), Z(3)^0, Z(3)^0 ],  [ 0*Z(3), 0*Z(3), Z(3)^0, Z(3), Z(3)^0 ] ] gap> C2 := CheckMatCode( IdentityMat( 5, GF(2) ), GF(2) ); a cyclic [5,0,5]5 code defined by check matrix over GF(2) ------------------------------------------------------------------ 5.2-4 HammingCode > HammingCode( r, F ) ______________________________________________function HammingCode returns a Hamming code with redundancy r over F. A Hamming code is a single-error-correcting code. The parity check matrix of a Hamming code has all nonzero vectors of length r in its columns, except for a multiplication factor. The decoding algorithm of the Hamming code (see Decode (4.10-1)) makes use of this property. If q is the size of its field F, the returned Hamming code is a linear [(q^r-1)/(q-1), (q^r-1)/(q-1) - r, 3] code. --------------------------- Example ---------------------------- gap> C1 := HammingCode( 4, GF(2) ); a linear [15,11,3]1 Hamming (4,2) code over GF(2) gap> C2 := HammingCode( 3, GF(9) ); a linear [91,88,3]1 Hamming (3,9) code over GF(9)  ------------------------------------------------------------------ 5.2-5 ReedMullerCode > ReedMullerCode( r, k ) ___________________________________________function ReedMullerCode returns a binary 'Reed-Muller code' R(r, k) with dimension k and order r. This is a code with length 2^k and minimum distance 2^k-r (see for example, section 1.10 in [HP03]). By definition, the r^th order binary Reed-Muller code of length n=2^m, for 0 <= r <= m, is the set of all vectors f, where f is a Boolean function which is a polynomial of degree at most r. --------------------------- Example ---------------------------- gap> ReedMullerCode( 1, 3 ); a linear [8,4,4]2 Reed-Muller (1,3) code over GF(2)  ------------------------------------------------------------------ See GeneralizedReedMullerCode (5.6-3) for a more general construction. 5.2-6 AlternantCode > AlternantCode( r, Y[, alpha], F ) ________________________________function AlternantCode returns an 'alternant code', with parameters r, Y and alpha (optional). F denotes the (finite) base field. Here, r is the design redundancy of the code. Y and alpha are both vectors of length n from which the parity check matrix is constructed. The check matrix has the form H=([a_i^j y_i]), where 0 <= j<= r-1, 1 <= i<= n, and where [...] is as in VerticalConversionFieldMat (7.3-9)). If no alpha is specified, the vector [1, a, a^2, .., a^n-1] is used, where a is a primitive element of a Galois field F. --------------------------- Example ---------------------------- gap> Y := [ 1, 1, 1, 1, 1, 1, 1];; a := PrimitiveUnityRoot( 2, 7 );; gap> alpha := List( [0..6], i -> a^i );; gap> C := AlternantCode( 2, Y, alpha, GF(8) ); a linear [7,3,3..4]3..4 alternant code over GF(8)  ------------------------------------------------------------------ 5.2-7 GoppaCode > GoppaCode( G, L ) ________________________________________________function GoppaCode returns a Goppa code C from Goppa polynomial g, having coefficients in a Galois Field GF(q). L must be a list of elements in GF(q), that are not roots of g. The word length of the code is equal to the length of L. The parity check matrix has the form H=([a_i^j / G(a_i)])_0 <= j <= deg(g)-1, a_i in L, where a_iin L and [...] is as in VerticalConversionFieldMat (7.3-9), so H has entries in GF(q), q=p^m. It is known that d(C)>= deg(g)+1, with a better bound in the binary case provided g has no multiple roots. See Huffman and Pless [HP03] section 13.2.2, and MacWilliams and Sloane [MS83] section 12.3, for more details. One can also call GoppaCode using the syntax GoppaCode(g,n). When called with parameter n, GUAVA constructs a list L of length n, such that no element of L is a root of g. This is a special case of an alternant code. --------------------------- Example ---------------------------- gap> x:=Indeterminate(GF(8),"x"); x gap> L:=Elements(GF(8)); [ 0*Z(2), Z(2)^0, Z(2^3), Z(2^3)^2, Z(2^3)^3, Z(2^3)^4, Z(2^3)^5, Z(2^3)^6 ] gap> g:=x^2+x+1; x^2+x+Z(2)^0 gap> C:=GoppaCode(g,L); a linear [8,2,5]3 Goppa code over GF(2) gap> xx := Indeterminate( GF(2), "xx" );;  gap> gg := xx^2 + xx + 1;; L := AsSSortedList( GF(8) );; gap> C1 := GoppaCode( gg, L ); a linear [8,2,5]3 Goppa code over GF(2)  gap> y := Indeterminate( GF(2), "y" );;  gap> h := y^2 + y + 1;; gap> C2 := GoppaCode( h, 8 ); a linear [8,2,5]3 Goppa code over GF(2)  gap> C1=C2; true gap> C=C1; true ------------------------------------------------------------------ 5.2-8 GeneralizedSrivastavaCode > GeneralizedSrivastavaCode( a, w, z[, t], F ) _____________________function GeneralizedSrivastavaCode returns a generalized Srivastava code with parameters a, w, z, t. a = a_1, ..., a_n and w = w_1, ..., w_s are lists of n+s distinct elements of F=GF(q^m), z is a list of length n of nonzero elements of GF(q^m). The parameter t determines the designed distance: d >= st + 1. The check matrix of this code is the form H=([\frac{z_i}{(a_i - w_j)^k}]), 1<= k<= t, where [...] is as in VerticalConversionFieldMat (7.3-9). We use this definition of H to define the code. The default for t is 1. The original Srivastava codes (see SrivastavaCode (5.2-9)) are a special case t=1, z_i=a_i^mu, for some mu. --------------------------- Example ---------------------------- gap> a := Filtered( AsSSortedList( GF(2^6) ), e -> e in GF(2^3) );; gap> w := [ Z(2^6) ];; z := List( [1..8], e -> 1 );; gap> C := GeneralizedSrivastavaCode( a, w, z, 1, GF(64) ); a linear [8,2,2..5]3..4 generalized Srivastava code over GF(2)  ------------------------------------------------------------------ 5.2-9 SrivastavaCode > SrivastavaCode( a, w[, mu], F ) __________________________________function SrivastavaCode returns a Srivastava code with parameters a, w (and optionally mu). a = a_1, ..., a_n and w = w_1, ..., w_s are lists of n+s distinct elements of F=GF(q^m). The default for mu is 1. The Srivastava code is a generalized Srivastava code, in which z_i = a_i^mu for some mu and t=1. J. N. Srivastava introduced this code in 1967, though his work was not published. See Helgert [Hel72] for more details on the properties of this code. Related reference: G. Roelofsen, On Goppa and Generalized Srivastava Codes PhD thesis, Dept. Math. and Comp. Sci., Eindhoven Univ. of Technology, the Netherlands, 1982. --------------------------- Example ---------------------------- gap> a := AsSSortedList( GF(11) ){[2..8]};; gap> w := AsSSortedList( GF(11) ){[9..10]};; gap> C := SrivastavaCode( a, w, 2, GF(11) ); a linear [7,5,3]2 Srivastava code over GF(11) gap> IsMDSCode( C ); true # Always true if F is a prime field  ------------------------------------------------------------------ 5.2-10 CordaroWagnerCode > CordaroWagnerCode( n ) ___________________________________________function CordaroWagnerCode returns a binary Cordaro-Wagner code. This is a code of length n and dimension 2 having the best possible minimum distance d. This code is just a little bit less trivial than RepetitionCode (see RepetitionCode (5.5-13)). --------------------------- Example ---------------------------- gap> C := CordaroWagnerCode( 11 ); a linear [11,2,7]5 Cordaro-Wagner code over GF(2) gap> AsSSortedList(C);  [ [ 0 0 0 0 0 0 0 0 0 0 0 ], [ 0 0 0 0 1 1 1 1 1 1 1 ],   [ 1 1 1 1 0 0 0 1 1 1 1 ], [ 1 1 1 1 1 1 1 0 0 0 0 ] ] ------------------------------------------------------------------ 5.2-11 FerreroDesignCode > FerreroDesignCode( P, m ) ________________________________________function Requires the GAP package SONATA A group K together with a group of automorphism H of K such that the semidirect product KH is a Frobenius group with complement H is called a Ferrero pair (K, H) in SONATA. Take a Frobenius (G,+) group with kernel K and complement H. Consider the design D with point set K and block set a^H + b | a, b in K, a not= 0. Here a^H denotes the orbit of a under conjugation by elements of H. Every planar near-ring design of type "*" can be obtained in this way from groups. These designs (from a Frobenius kernel of order v and a Frobenius complement of order k) have v(v-1)/k distinct blocks and they are all of size k. Moreover each of the v points occurs in exactly v-1 distinct blocks. Hence the rows and the columns of the incidence matrix M of the design are always of constant weight. FerreroDesignCode constructs binary linear code arising from the incdence matrix of a design associated to a "Ferrero pair" arising from a fixed-point-free (fpf) automorphism groups and Frobenius group. INPUT: P is a list of prime powers describing an abelian group G. m > 0 is an integer such that G admits a cyclic fpf automorphism group of size m. This means that for all q = p^k in P, OrderMod(p, m) must divide q (see the SONATA documentation for FpfAutomorphismGroupsCyclic). OUTPUT: The binary linear code whose generator matrix is the incidence matrix of a design associated to a "Ferrero pair" arising from the fixed-point-free (fpf) automorphism group of G. The pair (H,K) is called a Ferraro pair and the semidirect product KH is a Frobenius group with complement H. AUTHORS: Peter Mayr and David Joyner --------------------------- Example ---------------------------- gap> G:=AbelianGroup([5,5] );  [ pc group of size 25 with 2 generators ] gap> FpfAutomorphismGroupsMaxSize( G ); [ 24, 2 ] gap> L:=FpfAutomorphismGroupsCyclic( [5,5], 3 ); [ [ [ f1, f2 ] -> [ f1*f2^2, f1*f2^3 ] ],  [ pc group of size 25 with 2 generators ] ] gap> D := DesignFromFerreroPair( L[2], Group(L[1][1]), "*" );  [ a 2 - ( 25, 3, 2 ) nearring generated design ] gap> M:=IncidenceMat( D );; Length(M); Length(TransposedMat(M)); 25 200 gap> C1:=GeneratorMatCode(M*Z(2),GF(2)); a linear [200,25,1..24]62..100 code defined by generator matrix over GF(2) gap> MinimumDistance(C1); 24 gap> C2:=FerreroDesignCode( [5,5],3); a linear [200,25,1..24]62..100 code defined by generator matrix over GF(2) gap> C1=C2; true  ------------------------------------------------------------------ 5.2-12 RandomLinearCode > RandomLinearCode( n, k, F ) ______________________________________function RandomLinearCode returns a random linear code with word length n, dimension k over field F. The method used is to first construct a kx n matrix of the block form (I,A), where I is a kx k identity matrix and A is a kx (n-k) matrix constructed using Random(F) repeatedly. Then the columns are permuted using a randomly selected element of SymmetricGroup(n). To create a random unrestricted code, use RandomCode (see RandomCode (5.1-5)). --------------------------- Example ---------------------------- gap> C := RandomLinearCode( 15, 4, GF(3) ); a [15,4,?] randomly generated code over GF(3) gap> Display(C); a linear [15,4,1..6]6..10 random linear code over GF(3) ------------------------------------------------------------------ The method GUAVA chooses to output the result of a RandomLinearCode command is different than other codes. For example, the bounds on the minimum distance is not displayed. Howeer, you can use the Display command to print this information. This new display method was added in version 1.9 to speed up the command (if n is about 80 and k about 40, for example, the time it took to look up and/or calculate the bounds on the minimum distance was too long). 5.2-13 OptimalityCode > OptimalityCode( C ) ______________________________________________function OptimalityCode returns the difference between the smallest known upper bound and the actual size of the code. Note that the value of the function UpperBound is not always equal to the actual upper bound A(n,d) thus the result may not be equal to 0 even if the code is optimal! OptimalityLinearCode is similar but applies only to linear codes. 5.2-14 BestKnownLinearCode > BestKnownLinearCode( n, k, F ) ___________________________________function BestKnownLinearCode returns the best known (as of 11 May 2006) linear code of length n, dimension k over field F. The function uses the tables described in section BoundsMinimumDistance (7.1-13) to construct this code. This command can also be called using the syntax BestKnownLinearCode( rec ), where rec must be a record containing the fields `lowerBound', `upperBound' and `construction'. It uses the information in this field to construct a code. This form is meant to be used together with the function BoundsMinimumDistance (see BoundsMinimumDistance (7.1-13)), if the bounds are already calculated. --------------------------- Example ---------------------------- gap> C1 := BestKnownLinearCode( 23, 12, GF(2) ); a linear [23,12,7]3 punctured code gap> C1 = BinaryGolayCode(); false # it's constructed differently gap> C1 := BestKnownLinearCode( 23, 12, GF(2) ); a linear [23,12,7]3 punctured code gap> G1 := MutableCopyMat(GeneratorMat(C1));; gap> PutStandardForm(G1); () gap> Display(G1);  1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1  . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . .  . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1  . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 .  . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . 1  . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 1  . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1  . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . .  . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 .  . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 .  . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 1  . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 gap> C2 := BinaryGolayCode(); a cyclic [23,12,7]3 binary Golay code over GF(2) gap> G2 := MutableCopyMat(GeneratorMat(C2));; gap> PutStandardForm(G2); () gap> Display(G2);  1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1  . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . 1  . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1  . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 1  . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . .  . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 .  . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1  . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . .  . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 .  . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1  . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 .  . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 ## Despite their generator matrices are different, they are equivalent codes, see below. gap> IsEquivalent(C1,C2); true gap> CodeIsomorphism(C1,C2); (4,14,6,12,5)(7,17,18,11,19)(8,22,13,21,16)(10,23,15,20) gap> Display( BestKnownLinearCode( 81, 77, GF(4) ) ); a linear [81,77,3]2..3 shortened code of a linear [85,81,3]1 Hamming (4,4) code over GF(4) gap> C:=BestKnownLinearCode(174,72); a linear [174,72,31..36]26..87 code defined by generator matrix over GF(2) gap> bounds := BoundsMinimumDistance( 81, 77, GF(4) ); rec( n := 81, k := 77, q := 4,   references := rec( Ham := [ "%T this reference is unknown, for more info",   "%T contact A.E. Brouwer (aeb@cwi.nl)" ],   cap := [ "%T this reference is unknown, for more info",   "%T contact A.E. Brouwer (aeb@cwi.nl)" ] ),   construction := [ (Operation "ShortenedCode"),   [ [ (Operation "HammingCode"), [ 4, 4 ] ], [ 1, 2, 3, 4 ] ] ],   lowerBound := 3,   lowerBoundExplanation := [ "Lb(81,77)=3, by shortening of:",   "Lb(85,81)=3, reference: Ham" ], upperBound := 3,   upperBoundExplanation := [ "Ub(81,77)=3, by considering shortening to:",   "Ub(18,14)=3, reference: cap" ] ) gap> C := BestKnownLinearCode( bounds ); a linear [81,77,3]2..3 shortened code gap> C = BestKnownLinearCode(81, 77, GF(4) ); true ------------------------------------------------------------------ 5.3 Gabidulin Codes These five binary, linear codes are derived from an article by Gabidulin, Davydov and Tombak [GDT91]. All these codes are defined by check matrices. Exact definitions can be found in the article. The Gabidulin code, the enlarged Gabidulin code, the Davydov code, the Tombak code, and the enlarged Tombak code, correspond with theorem 1, 2, 3, 4, and 5, respectively in the article. Like the Hamming codes, these codes have fixed minimum distance and covering radius, but can be arbitrarily long. 5.3-1 GabidulinCode > GabidulinCode( m, w1, w2 ) _______________________________________function GabidulinCode yields a code of length 5 . 2^m-2-1, redundancy 2m-1, minimum distance 3 and covering radius 2. w1 and w2 should be elements of GF(2^m-2). 5.3-2 EnlargedGabidulinCode > EnlargedGabidulinCode( m, w1, w2, e ) ____________________________function EnlargedGabidulinCode yields a code of length 7. 2^m-2-2, redundancy 2m, minimum distance 3 and covering radius 2. w1 and w2 are elements of GF(2^m-2). e is an element of GF(2^m). 5.3-3 DavydovCode > DavydovCode( r, v, ei, ej ) ______________________________________function DavydovCode yields a code of length 2^v + 2^r-v - 3, redundancy r, minimum distance 4 and covering radius 2. v is an integer between 2 and r-2. ei and ej are elements of GF(2^v) and GF(2^r-v), respectively. 5.3-4 TombakCode > TombakCode( m, e, beta, gamma, w1, w2 ) __________________________function TombakCode yields a code of length 15 * 2^m-3 - 3, redundancy 2m, minimum distance 4 and covering radius 2. e is an element of GF(2^m). beta and gamma are elements of GF(2^m-1). w1 and w2 are elements of GF(2^m-3). 5.3-5 EnlargedTombakCode > EnlargedTombakCode( m, e, beta, gamma, w1, w2, u ) _______________function EnlargedTombakCode yields a code of length 23 * 2^m-4 - 3, redundancy 2m-1, minimum distance 4 and covering radius 2. The parameters m, e, beta, gamma, w1 and w2 are defined as in TombakCode. u is an element of GF(2^m-1). --------------------------- Example ---------------------------- gap> GabidulinCode( 4, Z(4)^0, Z(4)^1 ); a linear [19,12,3]2 Gabidulin code (m=4) over GF(2) gap> EnlargedGabidulinCode( 4, Z(4)^0, Z(4)^1, Z(16)^11 ); a linear [26,18,3]2 enlarged Gabidulin code (m=4) over GF(2) gap> DavydovCode( 6, 3, Z(8)^1, Z(8)^5 ); a linear [13,7,4]2 Davydov code (r=6, v=3) over GF(2) gap> TombakCode( 5, Z(32)^6, Z(16)^14, Z(16)^10, Z(4)^0, Z(4)^1 ); a linear [57,47,4]2 Tombak code (m=5) over GF(2) gap> EnlargedTombakCode( 6, Z(32)^6, Z(16)^14, Z(16)^10, > Z(4)^0, Z(4)^0, Z(32)^23 ); a linear [89,78,4]2 enlarged Tombak code (m=6) over GF(2) ------------------------------------------------------------------ 5.4 Golay Codes " The Golay code is probably the most important of all codes for both practical and theoretical reasons. " ([MS83], pg. 64). Though born in Switzerland, M. J. E. Golay (1902-1989) worked for the US Army Labs for most of his career. For more information on his life, see his obit in the June 1990 IEEE Information Society Newsletter. 5.4-1 BinaryGolayCode > BinaryGolayCode(  ) ______________________________________________function BinaryGolayCode returns a binary Golay code. This is a perfect [23,12,7] code. It is also cyclic, and has generator polynomial g(x)=1+x^2+x^4+x^5+x^6+x^10+x^11. Extending it results in an extended Golay code (see ExtendedBinaryGolayCode (5.4-2)). There's also the ternary Golay code (see TernaryGolayCode (5.4-3)). --------------------------- Example ---------------------------- gap> C:=BinaryGolayCode(); a cyclic [23,12,7]3 binary Golay code over GF(2) gap> ExtendedBinaryGolayCode() = ExtendedCode(BinaryGolayCode()); true gap> IsPerfectCode(C); true  gap> IsCyclicCode(C); true ------------------------------------------------------------------ 5.4-2 ExtendedBinaryGolayCode > ExtendedBinaryGolayCode(  ) ______________________________________function ExtendedBinaryGolayCode returns an extended binary Golay code. This is a [24,12,8] code. Puncturing in the last position results in a perfect binary Golay code (see BinaryGolayCode (5.4-1)). The code is self-dual. --------------------------- Example ---------------------------- gap> C := ExtendedBinaryGolayCode(); a linear [24,12,8]4 extended binary Golay code over GF(2) gap> IsSelfDualCode(C); true gap> P := PuncturedCode(C); a linear [23,12,7]3 punctured code gap> P = BinaryGolayCode(); true  gap> IsCyclicCode(C); false  ------------------------------------------------------------------ 5.4-3 TernaryGolayCode > TernaryGolayCode(  ) _____________________________________________function TernaryGolayCode returns a ternary Golay code. This is a perfect [11,6,5] code. It is also cyclic, and has generator polynomial g(x)=2+x^2+2x^3+x^4+x^5. Extending it results in an extended Golay code (see ExtendedTernaryGolayCode (5.4-4)). There's also the binary Golay code (see BinaryGolayCode (5.4-1)). --------------------------- Example ---------------------------- gap> C:=TernaryGolayCode(); a cyclic [11,6,5]2 ternary Golay code over GF(3) gap> ExtendedTernaryGolayCode() = ExtendedCode(TernaryGolayCode()); true  gap> IsCyclicCode(C); true ------------------------------------------------------------------ 5.4-4 ExtendedTernaryGolayCode > ExtendedTernaryGolayCode(  ) _____________________________________function ExtendedTernaryGolayCode returns an extended ternary Golay code. This is a [12,6,6] code. Puncturing this code results in a perfect ternary Golay code (see TernaryGolayCode (5.4-3)). The code is self-dual. --------------------------- Example ---------------------------- gap> C := ExtendedTernaryGolayCode(); a linear [12,6,6]3 extended ternary Golay code over GF(3) gap> IsSelfDualCode(C); true gap> P := PuncturedCode(C); a linear [11,6,5]2 punctured code gap> P = TernaryGolayCode(); true  gap> IsCyclicCode(C); false ------------------------------------------------------------------ 5.5 Generating Cyclic Codes The elements of a cyclic code C are all multiples of a ('generator') polynomial g(x), where calculations are carried out modulo x^n-1. Therefore, as polynomials in x, the elements always have degree less than n. A cyclic code is an ideal in the ring F[x]/(x^n-1) of polynomials modulo x^n - 1. The unique monic polynomial of least degree that generates C is called the generator polynomial of C. It is a divisor of the polynomial x^n-1. The check polynomial is the polynomial h(x) with g(x)h(x)=x^n-1. Therefore it is also a divisor of x^n-1. The check polynomial has the property that c(x)h(x) \equiv 0 \pmod{x^n-1}, for every codeword c(x)in C. The first two functions described below generate cyclic codes from a given generator or check polynomial. All cyclic codes can be constructed using these functions. Two of the Golay codes already described are cyclic (see BinaryGolayCode (5.4-1) and TernaryGolayCode (5.4-3)). For example, the GUAVA record for a binary Golay code contains the generator polynomial: --------------------------- Example ---------------------------- gap> C := BinaryGolayCode(); a cyclic [23,12,7]3 binary Golay code over GF(2) gap> NamesOfComponents(C); [ "LeftActingDomain", "GeneratorsOfLeftOperatorAdditiveGroup", "WordLength",  "GeneratorMat", "GeneratorPol", "Dimension", "Redundancy", "Size", "name",  "lowerBoundMinimumDistance", "upperBoundMinimumDistance", "WeightDistribution",  "boundsCoveringRadius", "MinimumWeightOfGenerators",   "UpperBoundOptimalMinimumDistance" ] gap> C!.GeneratorPol; x_1^11+x_1^10+x_1^6+x_1^5+x_1^4+x_1^2+Z(2)^0 ------------------------------------------------------------------ Then functions that generate cyclic codes from a prescribed set of roots of the generator polynomial are described, including the BCH codes (see RootsCode (5.5-3), BCHCode (5.5-4), ReedSolomonCode (5.5-5) and QRCode (5.5-7)). Finally we describe the trivial codes (see WholeSpaceCode (5.5-11), NullCode (5.5-12), RepetitionCode (5.5-13)), and the command CyclicCodes which lists all cyclic codes (CyclicCodes (5.5-14)). 5.5-1 GeneratorPolCode > GeneratorPolCode( g, n[, name], F ) ______________________________function GeneratorPolCode creates a cyclic code with a generator polynomial g, word length n, over F. name can contain a short description of the code. If g is not a divisor of x^n-1, it cannot be a generator polynomial. In that case, a code is created with generator polynomial gcd( g, x^n-1 ), i.e. the greatest common divisor of g and x^n-1. This is a valid generator polynomial that generates the ideal (g). See Generating Cyclic Codes (5.5). --------------------------- Example ---------------------------- gap> x:= Indeterminate( GF(2) );; P:= x^2+1; Z(2)^0+x^2 gap> C1 := GeneratorPolCode(P, 7, GF(2)); a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2) gap> GeneratorPol( C1 ); Z(2)^0+x gap> C2 := GeneratorPolCode( x+1, 7, GF(2));  a cyclic [7,6,1..2]1 code defined by generator polynomial over GF(2) gap> GeneratorPol( C2 ); Z(2)^0+x ------------------------------------------------------------------ 5.5-2 CheckPolCode > CheckPolCode( h, n[, name], F ) __________________________________function CheckPolCode creates a cyclic code with a check polynomial h, word length n, over F. name can contain a short description of the code (as a string). If h is not a divisor of x^n-1, it cannot be a check polynomial. In that case, a code is created with check polynomial gcd( h, x^n-1 ), i.e. the greatest common divisor of h and x^n-1. This is a valid check polynomial that yields the same elements as the ideal (h). See 5.5. --------------------------- Example ---------------------------- gap> x:= Indeterminate( GF(3) );; P:= x^2+2; -Z(3)^0+x_1^2 gap> H := CheckPolCode(P, 7, GF(3)); a cyclic [7,1,7]4 code defined by check polynomial over GF(3) gap> CheckPol(H); -Z(3)^0+x_1 gap> Gcd(P, X(GF(3))^7-1); -Z(3)^0+x_1 ------------------------------------------------------------------ 5.5-3 RootsCode > RootsCode( n, list ) _____________________________________________function This is the generalization of the BCH, Reed-Solomon and quadratic residue codes (see BCHCode (5.5-4), ReedSolomonCode (5.5-5) and QRCode (5.5-7)). The user can give a length of the code n and a prescribed set of zeros. The argument list must be a valid list of primitive n^th roots of unity in a splitting field GF(q^m). The resulting code will be over the field GF(q). The function will return the largest possible cyclic code for which the list list is a subset of the roots of the code. From this list, GUAVA calculates the entire set of roots. This command can also be called with the syntax RootsCode( n, list, q ). In this second form, the second argument is a list of integers, ranging from 0 to n-1. The resulting code will be over a field GF(q). GUAVA calculates a primitive n^th root of unity, alpha, in the extension field of GF(q). It uses the set of the powers of alpha in the list as a prescribed set of zeros. --------------------------- Example ---------------------------- gap> a := PrimitiveUnityRoot( 3, 14 ); Z(3^6)^52 gap> C1 := RootsCode( 14, [ a^0, a, a^3 ] ); a cyclic [14,7,3..6]3..7 code defined by roots over GF(3) gap> MinimumDistance( C1 ); 4 gap> b := PrimitiveUnityRoot( 2, 15 ); Z(2^4) gap> C2 := RootsCode( 15, [ b, b^2, b^3, b^4 ] ); a cyclic [15,7,5]3..5 code defined by roots over GF(2) gap> C2 = BCHCode( 15, 5, GF(2) ); true  C3 := RootsCode( 4, [ 1, 2 ], 5 ); RootsOfCode( C3 ); C3 = ReedSolomonCode( 4, 3 );  ------------------------------------------------------------------ 5.5-4 BCHCode > BCHCode( n[, b], delta, F ) ______________________________________function The function BCHCode returns a 'Bose-Chaudhuri-Hockenghem code' (or BCH code for short). This is the largest possible cyclic code of length n over field F, whose generator polynomial has zeros a^{b},a^{b+1}, ..., a^{b+delta-2}, where a is a primitive n^th root of unity in the splitting field GF(q^m), b is an integer 0<= b<= n-delta+1 and m is the multiplicative order of q modulo n. (The integers b,...,b+delta-2 typically lie in the range 1,...,n-1.) Default value for b is 1, though the algorithm allows b=0. The length n of the code and the size q of the field must be relatively prime. The generator polynomial is equal to the least common multiple of the minimal polynomials of a^{b}, a^{b+1}, ..., a^{b+delta-2}. The set of zeroes of the generator polynomial is equal to the union of the sets \{a^x\ |\ x \in C_k\}, where C_k is the k^th cyclotomic coset of q modulo n and b<= k<= b+delta-2 (see CyclotomicCosets (7.5-12)). Special cases are b=1 (resulting codes are called 'narrow-sense' BCH codes), and n=q^m-1 (known as 'primitive' BCH codes). GUAVA calculates the largest value of d for which the BCH code with designed distance d coincides with the BCH code with designed distance delta. This distance d is called the Bose distance of the code. The true minimum distance of the code is greater than or equal to the Bose distance. Printed are the designed distance (to be precise, the Bose distance) d, and the starting power b. The Sugiyama decoding algorithm has been implemented for this code (see Decode (4.10-1)). --------------------------- Example ---------------------------- gap> C1 := BCHCode( 15, 3, 5, GF(2) ); a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2) gap> DesignedDistance( C1 ); 7 gap> C2 := BCHCode( 23, 2, GF(2) ); a cyclic [23,12,5..7]3 BCH code, delta=5, b=1 over GF(2) gap> DesignedDistance( C2 );  5 gap> MinimumDistance(C2); 7  ------------------------------------------------------------------ See RootsCode (5.5-3) for a more general construction. 5.5-5 ReedSolomonCode > ReedSolomonCode( n, d ) __________________________________________function ReedSolomonCode returns a 'Reed-Solomon code' of length n, designed distance d. This code is a primitive narrow-sense BCH code over the field GF(q), where q=n+1. The dimension of an RS code is n-d+1. According to the Singleton bound (see UpperBoundSingleton (7.1-1)) the dimension cannot be greater than this, so the true minimum distance of an RS code is equal to d and the code is maximum distance separable (see IsMDSCode (4.3-7)). --------------------------- Example ---------------------------- gap> C1 := ReedSolomonCode( 3, 2 ); a cyclic [3,2,2]1 Reed-Solomon code over GF(4) gap> IsCyclicCode(C1); true gap> C2 := ReedSolomonCode( 4, 3 ); a cyclic [4,2,3]2 Reed-Solomon code over GF(5) gap> RootsOfCode( C2 ); [ Z(5), Z(5)^2 ] gap> IsMDSCode(C2); true  ------------------------------------------------------------------ See GeneralizedReedSolomonCode (5.6-2) for a more general construction. 5.5-6 ExtendedReedSolomonCode > ExtendedReedSolomonCode( n, d ) __________________________________function ExtendedReedSolomonCode creates a Reed-Solomon code of length n-1 with designed distance d-1 and then returns the code which is extended by adding an overall parity-check symbol. The motivation for creating this function is calling ExtendedCode (6.1-1) function over a Reed-Solomon code will take considerably long time. --------------------------- Example ---------------------------- gap> C := ExtendedReedSolomonCode(17, 13); a linear [17,5,13]9..12 extended Reed Solomon code over GF(17) gap> IsMDSCode(C); true ------------------------------------------------------------------ 5.5-7 QRCode > QRCode( n, F ) ___________________________________________________function QRCode returns a quadratic residue code. If F is a field GF(q), then q must be a quadratic residue modulo n. That is, an x exists with x^2 = q mod n. Both n and q must be primes. Its generator polynomial is the product of the polynomials x-a^i. a is a primitive n^th root of unity, and i is an integer in the set of quadratic residues modulo n. --------------------------- Example ---------------------------- gap> C1 := QRCode( 7, GF(2) ); a cyclic [7,4,3]1 quadratic residue code over GF(2) gap> IsEquivalent( C1, HammingCode( 3, GF(2) ) ); true gap> IsCyclicCode(C1); true gap> IsCyclicCode(HammingCode( 3, GF(2) )); false gap> C2 := QRCode( 11, GF(3) ); a cyclic [11,6,4..5]2 quadratic residue code over GF(3) gap> C2 = TernaryGolayCode(); true  gap> Q1 := QRCode( 7, GF(2)); a cyclic [7,4,3]1 quadratic residue code over GF(2) gap> P1:=AutomorphismGroup(Q1); IdGroup(P1); Group([ (1,2)(5,7), (2,3)(4,7), (2,4)(5,6), (3,5)(6,7), (3,7)(5,6) ]) [ 168, 42 ] ------------------------------------------------------------------ 5.5-8 QQRCodeNC > QQRCodeNC( p ) ___________________________________________________function QQRCodeNC is the same as QQRCode, except that it uses GeneratorMatCodeNC instead of GeneratorMatCode. 5.5-9 QQRCode > QQRCode( p ) _____________________________________________________function QQRCode returns a quasi-quadratic residue code, as defined by Proposition 2.2 in Bazzi-Mittel [BMd)]. The parameter p must be a prime. Its generator matrix has the block form G=(Q,N). Here Q is a px circulant matrix whose top row is (0,x_1,...,x_p-1), where x_i=1 if and only if i is a quadratic residue mod p, and N is a px circulant matrix whose top row is (0,y_1,...,y_p-1), where x_i+y_i=1 for all i. (In fact, this matrix can be recovered as the component DoublyCirculant of the code.) --------------------------- Example ---------------------------- gap> C1 := QQRCode( 7); a linear [14,7,1..4]3..5 code defined by generator matrix over GF(2) gap> G1:=GeneratorMat(C1);; gap> Display(G1);  . 1 1 . 1 . . . . . 1 . 1 1  1 . 1 1 1 . . . . 1 1 1 . 1  . . . 1 1 . 1 . 1 1 . . . 1  . . 1 . 1 1 1 1 . 1 . . 1 1  . . . . . . . 1 . . 1 1 1 .  . . . . . . . . . 1 1 1 . 1  . . . . . . . . 1 . . 1 1 1 gap> Display(C1!.DoublyCirculant);  . 1 1 . 1 . . . . . 1 . 1 1  1 1 . 1 . . . . . 1 . 1 1 .  1 . 1 . . . 1 . 1 . 1 1 . .  . 1 . . . 1 1 1 . 1 1 . . .  1 . . . 1 1 . . 1 1 . . . 1  . . . 1 1 . 1 1 1 . . . 1 .  . . 1 1 . 1 . 1 . . . 1 . 1 gap> MinimumDistance(C1); 4 gap> C2 := QQRCode( 29); MinimumDistance(C2); a linear [58,28,1..14]8..29 code defined by generator matrix over GF(2) 12 gap> Aut2:=AutomorphismGroup(C2); IdGroup(Aut2); [ permutation group of size 812 with 4 generators ] [ 812, 7 ] ------------------------------------------------------------------ 5.5-10 FireCode > FireCode( g, b ) _________________________________________________function FireCode constructs a (binary) Fire code. g is a primitive polynomial of degree m, and a factor of x^r-1. b an integer 0 <= b <= m not divisible by r, that determines the burst length of a single error burst that can be corrected. The argument g can be a polynomial with base ring GF(2), or a list of coefficients in GF(2). The generator polynomial of the code is defined as the product of g and x^2b-1+1. Here is the general definition of 'Fire code', named after P. Fire, who introduced these codes in 1959 in order to correct burst errors. First, a definition. If F=GF(q) and fin F[x] then we say f has order e if f(x)|(x^e-1). A Fire code is a cyclic code over F with generator polynomial g(x)= (x^2t-1-1)p(x), where p(x) does not divide x^2t-1-1 and satisfies deg(p(x))>= t. The length of such a code is the order of g(x). Non-binary Fire codes have not been implemented. . --------------------------- Example ---------------------------- gap> x:= Indeterminate( GF(2) );; G:= x^3+x^2+1; Z(2)^0+x^2+x^3 gap> Factors( G ); [ Z(2)^0+x^2+x^3 ] gap> C := FireCode( G, 3 ); a cyclic [35,27,1..4]2..6 3 burst error correcting fire code over GF(2) gap> MinimumDistance( C ); 4 # Still it can correct bursts of length 3  ------------------------------------------------------------------ 5.5-11 WholeSpaceCode > WholeSpaceCode( n, F ) ___________________________________________function WholeSpaceCode returns the cyclic whole space code of length n over F. This code consists of all polynomials of degree less than n and coefficients in F. --------------------------- Example ---------------------------- gap> C := WholeSpaceCode( 5, GF(3) ); a cyclic [5,5,1]0 whole space code over GF(3) ------------------------------------------------------------------ 5.5-12 NullCode > NullCode( n, F ) _________________________________________________function NullCode returns the zero-dimensional nullcode with length n over F. This code has only one word: the all zero word. It is cyclic though! --------------------------- Example ---------------------------- gap> C := NullCode( 5, GF(3) ); a cyclic [5,0,5]5 nullcode over GF(3) gap> AsSSortedList( C ); [ [ 0 0 0 0 0 ] ] ------------------------------------------------------------------ 5.5-13 RepetitionCode > RepetitionCode( n, F ) ___________________________________________function RepetitionCode returns the cyclic repetition code of length n over F. The code has as many elements as F, because each codeword consists of a repetition of one of these elements. --------------------------- Example ---------------------------- gap> C := RepetitionCode( 3, GF(5) ); a cyclic [3,1,3]2 repetition code over GF(5) gap> AsSSortedList( C ); [ [ 0 0 0 ], [ 1 1 1 ], [ 2 2 2 ], [ 4 4 4 ], [ 3 3 3 ] ] gap> IsPerfectCode( C ); false gap> IsMDSCode( C ); true  ------------------------------------------------------------------ 5.5-14 CyclicCodes > CyclicCodes( n, F ) ______________________________________________function CyclicCodes returns a list of all cyclic codes of length n over F. It constructs all possible generator polynomials from the factors of x^n-1. Each combination of these factors yields a generator polynomial after multiplication. --------------------------- Example ---------------------------- gap> CyclicCodes(3,GF(3)); [ a cyclic [3,3,1]0 enumerated code over GF(3),  a cyclic [3,2,1..2]1 enumerated code over GF(3),  a cyclic [3,1,3]2 enumerated code over GF(3),  a cyclic [3,0,3]3 enumerated code over GF(3) ] ------------------------------------------------------------------ 5.5-15 NrCyclicCodes > NrCyclicCodes( n, F ) ____________________________________________function The function NrCyclicCodes calculates the number of cyclic codes of length n over field F. --------------------------- Example ---------------------------- gap> NrCyclicCodes( 23, GF(2) ); 8 gap> codelist := CyclicCodes( 23, GF(2) ); [ a cyclic [23,23,1]0 enumerated code over GF(2),   a cyclic [23,22,1..2]1 enumerated code over GF(2),   a cyclic [23,11,1..8]4..7 enumerated code over GF(2),   a cyclic [23,0,23]23 enumerated code over GF(2),   a cyclic [23,11,1..8]4..7 enumerated code over GF(2),   a cyclic [23,12,1..7]3 enumerated code over GF(2),   a cyclic [23,1,23]11 enumerated code over GF(2),   a cyclic [23,12,1..7]3 enumerated code over GF(2) ] gap> BinaryGolayCode() in codelist; true gap> RepetitionCode( 23, GF(2) ) in codelist; true gap> CordaroWagnerCode( 23 ) in codelist; false # This code is not cyclic  ------------------------------------------------------------------ 5.5-16 QuasiCyclicCode > QuasiCyclicCode( G, s, F ) _______________________________________function QuasiCyclicCode( G, k, F ) generates a rate 1/m quasi-cyclic code over field F. The input G is a list of univariate polynomials and m is the cardinality of this list. Note that m must be at least 2. The input s is the size of each circulant and it may not necessarily be the same as the code dimension k, i.e. k le s. There also exists another version, QuasiCyclicCode( G, s ) which produces quasi-cyclic codes over F_2 only. Here the parameter s holds the same definition and the input G is a list of integers, where each integer is an octal representation of a binary univariate polynomial. --------------------------- Example ---------------------------- gap> # gap> # This example show the case for k = s gap> # gap> L1 := PolyCodeword( Codeword("10000000000", GF(4)) ); Z(2)^0 gap> L2 := PolyCodeword( Codeword("12223201000", GF(4)) ); x^7+Z(2^2)*x^5+Z(2^2)^2*x^4+Z(2^2)*x^3+Z(2^2)*x^2+Z(2^2)*x+Z(2)^0 gap> L3 := PolyCodeword( Codeword("31111220110", GF(4)) ); x^9+x^8+Z(2^2)*x^6+Z(2^2)*x^5+x^4+x^3+x^2+x+Z(2^2)^2 gap> L4 := PolyCodeword( Codeword("13320333010", GF(4)) ); x^9+Z(2^2)^2*x^7+Z(2^2)^2*x^6+Z(2^2)^2*x^5+Z(2^2)*x^3+Z(2^2)^2*x^2+Z(2^2)^2*x+\ Z(2)^0 gap> L5 := PolyCodeword( Codeword("20102211100", GF(4)) ); x^8+x^7+x^6+Z(2^2)*x^5+Z(2^2)*x^4+x^2+Z(2^2) gap> C := QuasiCyclicCode( [L1, L2, L3, L4, L5], 11, GF(4) ); a linear [55,11,1..32]24..41 quasi-cyclic code over GF(4) gap> MinimumDistance(C); 29 gap> Display(C); a linear [55,11,29]24..41 quasi-cyclic code over GF(4) gap> # gap> # This example show the case for k < s gap> # gap> L1 := PolyCodeword( Codeword("02212201220120211002000",GF(3)) ); -x^19+x^16+x^15-x^14-x^12+x^11-x^9-x^8+x^7-x^5-x^4+x^3-x^2-x gap> L2 := PolyCodeword( Codeword("00221100200120220001110",GF(3)) ); x^21+x^20+x^19-x^15-x^14-x^12+x^11-x^8+x^5+x^4-x^3-x^2 gap> L3 := PolyCodeword( Codeword("22021011202221111020021",GF(3)) ); x^22-x^21-x^18+x^16+x^15+x^14+x^13-x^12-x^11-x^10-x^8+x^7+x^6+x^4-x^3-x-Z(3)^0 gap> C := QuasiCyclicCode( [L1, L2, L3], 23, GF(3) ); a linear [69,12,1..37]27..46 quasi-cyclic code over GF(3) gap> MinimumDistance(C); 34 gap> Display(C); a linear [69,12,34]27..46 quasi-cyclic code over GF(3) gap> # gap> # This example show the binary case using octal representation gap> # gap> L1 := 001;; # 0 000 001 gap> L2 := 013;; # 0 001 011 gap> L3 := 015;; # 0 001 101 gap> L4 := 077;; # 0 111 111 gap> C := QuasiCyclicCode( [L1, L2, L3, L4], 7 ); a linear [28,7,1..12]8..14 quasi-cyclic code over GF(2) gap> MinimumDistance(C); 12 gap> Display(C); a linear [28,7,12]8..14 quasi-cyclic code over GF(2) ------------------------------------------------------------------ 5.5-17 CyclicMDSCode > CyclicMDSCode( q, m, k ) _________________________________________function Given the input parameters q, m and k, this function returns a [q^m + 1, k, q^m - k + 2] cyclic MDS code over GF(q^m). If q^m is even, any value of k can be used, otherwise only odd value of k is accepted. --------------------------- Example ---------------------------- gap> C:=CyclicMDSCode(2,6,24); a cyclic [65,24,42]31..41 MDS code over GF(64) gap> IsMDSCode(C); true gap> C:=CyclicMDSCode(5,3,77); a cyclic [126,77,50]35..49 MDS code over GF(125) gap> IsMDSCode(C); true gap> C:=CyclicMDSCode(3,3,25); a cyclic [28,25,4]2..3 MDS code over GF(27) gap> GeneratorPol(C); x^3+Z(3^3)^7*x^2+Z(3^3)^20*x-Z(3)^0 gap> ------------------------------------------------------------------ 5.5-18 FourNegacirculantSelfDualCode > FourNegacirculantSelfDualCode( ax, bx, k ) _______________________function A four-negacirculant self-dual code has a generator matrix G of the the following form - - | | A | B | G = | I_2k |-----+-----| | | -B^T| A^T | - - where AA^T + BB^T = -I_k and A, B and their transposed are all k x k negacirculant matrices. The generator matrix G returns a [2k, k, d]_q self-dual code over GF(q). For discussion on four-negacirculant self-dual codes, refer to [HHKK07]. The input parameters ax and bx are the defining polynomials over GF(q) of negacirculant matrices A and B respectively. The last parameter k is the dimension of the code. --------------------------- Example ---------------------------- gap> ax:=PolyCodeword(Codeword("1200200", GF(3))); -x_1^4-x_1+Z(3)^0 gap> bx:=PolyCodeword(Codeword("2020221", GF(3))); x_1^6-x_1^5-x_1^4-x_1^2-Z(3)^0 gap> C:=FourNegacirculantSelfDualCode(ax, bx, 14);; gap> MinimumDistance(C);; gap> CoveringRadius(C);; gap> IsSelfDualCode(C); true gap> Display(C); a linear [28,14,9]7 four-negacirculant self-dual code over GF(3) gap> Display( GeneratorMat(C) );  1 . . . . . . . . . . . . . 1 2 . . 2 . . 2 . 2 . 2 2 1  . 1 . . . . . . . . . . . . . 1 2 . . 2 . 2 2 . 2 . 2 2  . . 1 . . . . . . . . . . . . . 1 2 . . 2 1 2 2 . 2 . 2  . . . 1 . . . . . . . . . . 1 . . 1 2 . . 1 1 2 2 . 2 .  . . . . 1 . . . . . . . . . . 1 . . 1 2 . . 1 1 2 2 . 2  . . . . . 1 . . . . . . . . . . 1 . . 1 2 1 . 1 1 2 2 .  . . . . . . 1 . . . . . . . 1 . . 1 . . 1 . 1 . 1 1 2 2  . . . . . . . 1 . . . . . . 1 1 2 2 . 2 . 1 . . 1 . . 1  . . . . . . . . 1 . . . . . . 1 1 2 2 . 2 2 1 . . 1 . .  . . . . . . . . . 1 . . . . 1 . 1 1 2 2 . . 2 1 . . 1 .  . . . . . . . . . . 1 . . . . 1 . 1 1 2 2 . . 2 1 . . 1  . . . . . . . . . . . 1 . . 1 . 1 . 1 1 2 2 . . 2 1 . .  . . . . . . . . . . . . 1 . 1 1 . 1 . 1 1 . 2 . . 2 1 .  . . . . . . . . . . . . . 1 2 1 1 . 1 . 1 . . 2 . . 2 1 gap> ax:=PolyCodeword(Codeword("013131000", GF(7))); x_1^5+Z(7)*x_1^4+x_1^3+Z(7)*x_1^2+x_1 gap> bx:=PolyCodeword(Codeword("425435030", GF(7))); Z(7)*x_1^7+Z(7)^5*x_1^5+Z(7)*x_1^4+Z(7)^4*x_1^3+Z(7)^5*x_1^2+Z(7)^2*x_1+Z(7)^4 gap> C:=FourNegacirculantSelfDualCodeNC(ax, bx, 18); a linear [36,18,1..13]0..36 four-negacirculant self-dual code over GF(7) gap> IsSelfDualCode(C); true ------------------------------------------------------------------ 5.5-19 FourNegacirculantSelfDualCodeNC > FourNegacirculantSelfDualCodeNC( ax, bx, k ) _____________________function This function is the same as FourNegacirculantSelfDualCode, except this version is faster as it does not estimate the minimum distance and covering radius of the code. 5.6 Evaluation Codes 5.6-1 EvaluationCode > EvaluationCode( P, L, R ) ________________________________________function Input: F is a finite field, L is a list of rational functions in R=F[x_1,...,x_r], P is a list of n points in F^r at which all of the functions in L are defined. Output: The 'evaluation code' C, which is the image of the evalation map Eval_P:span(L)\rightarrow F^n, given by flongmapsto (f(p_1),...,f(p_n)), where P=p_1,...,p_n and f in L. The generator matrix of C is G=(f_i(p_j))_f_iin L,p_jin P. This command returns a "record" object C with several extra components (type NamesOfComponents(C) to see them all): C!.EvaluationMat (not the same as the generator matrix in general), C!.points (namely P), C!.basis (namely L), and C!.ring (namely R). --------------------------- Example ---------------------------- gap> F:=GF(11); GF(11) gap> R := PolynomialRing(F,2);; gap> indets := IndeterminatesOfPolynomialRing(R);; gap> x:=indets[1];; y:=indets[2];; gap> L:=[x^2*y,x*y,x^5,x^4,x^3,x^2,x,x^0];; gap> Pts:=[ [ Z(11)^9, Z(11) ], [ Z(11)^8, Z(11) ], [ Z(11)^7, 0*Z(11) ],  [ Z(11)^6, 0*Z(11) ], [ Z(11)^5, 0*Z(11) ], [ Z(11)^4, 0*Z(11) ],  [ Z(11)^3, Z(11) ], [ Z(11)^2, 0*Z(11) ], [ Z(11), 0*Z(11) ],   [ Z(11)^0, 0*Z(11) ], [ 0*Z(11), Z(11) ] ];; gap> C:=EvaluationCode(Pts,L,R); a linear [11,8,1..3]2..3 evaluation code over GF(11) gap> MinimumDistance(C); 3  ------------------------------------------------------------------ 5.6-2 GeneralizedReedSolomonCode > GeneralizedReedSolomonCode( P, k, R ) ____________________________function Input: R=F[x], where F is a finite field, k is a positive integer, P is a list of n points in F. Output: The C which is the image of the evaluation map Eval_P:F[x]_k\rightarrow F^n, given by flongmapsto (f(p_1),...,f(p_n)), where P=p_1,...,p_nsubset F and f ranges over the space F[x]_k of all polynomials of degree less than k. This command returns a "record" object C with several extra components (type NamesOfComponents(C) to see them all): C!.points (namely P), C!.degree (namely k), and C!.ring (namely R). This code can be decoded using Decodeword, which applies the special decoder method (the interpolation method), or using GeneralizedReedSolomonDecoderGao which applies an algorithm of S. Gao (see GeneralizedReedSolomonDecoderGao (4.10-3)). This code has a special decoder record which implements the interpolation algorithm described in section 5.2 of Justesen and Hoholdt [JH04]. See Decode (4.10-1) and Decodeword (4.10-2) for more details. The weighted version has implemented with the option GeneralizedReedSolomonCode(P,k,R,wts), where wts = [v_1, ..., v_n] is a sequence of n non-zero elements from the base field F of R. See also the generalized Reed--Solomon code GRS_k(P, V) described in [MS83], p.303. The list-decoding algorithm of Sudan-Guraswami (described in section 12.1 of [JH04]) has been implemented for generalized Reed-Solomon codes. See GeneralizedReedSolomonListDecoder (4.10-4). --------------------------- Example ---------------------------- gap> R:=PolynomialRing(GF(11),["t"]); GF(11)[t] gap> P:=List([1,3,4,5,7],i->Z(11)^i); [ Z(11), Z(11)^3, Z(11)^4, Z(11)^5, Z(11)^7 ] gap> C:=GeneralizedReedSolomonCode(P,3,R); a linear [5,3,1..3]2 generalized Reed-Solomon code over GF(11) gap> MinimumDistance(C); 3 gap> V:=[Z(11)^0,Z(11)^0,Z(11)^0,Z(11)^0,Z(11)]; [ Z(11)^0, Z(11)^0, Z(11)^0, Z(11)^0, Z(11) ] gap> C:=GeneralizedReedSolomonCode(P,3,R,V); a linear [5,3,1..3]2 weighted generalized Reed-Solomon code over GF(11) gap> MinimumDistance(C); 3 ------------------------------------------------------------------ See EvaluationCode (5.6-1) for a more general construction. 5.6-3 GeneralizedReedMullerCode > GeneralizedReedMullerCode( Pts, r, F ) ___________________________function GeneralizedReedMullerCode returns a 'Reed-Muller code' C with length |Pts| and order r. One considers (a) a basis of monomials for the vector space over F=GF(q) of all polynomials in F[x_1,...,x_d] of degree at most r, and (b) a set Pts of points in F^d. The generator matrix of the associated Reed-Muller code C is G=(f(p))_fin B,p in Pts. This code C is constructed using the command GeneralizedReedMullerCode(Pts,r,F). When Pts is the set of all q^d points in F^d then the command GeneralizedReedMuller(d,r,F) yields the code. When Pts is the set of all (q-1)^d points with no coordinate equal to 0 then this is can be constructed using the ToricCode command (as a special case). This command returns a "record" object C with several extra components (type NamesOfComponents(C) to see them all): C!.points (namely Pts) and C!.degree (namely r). --------------------------- Example ---------------------------- gap> Pts:=ToricPoints(2,GF(5)); [ [ Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5) ], [ Z(5)^0, Z(5)^2 ], [ Z(5)^0, Z(5)^3 ],  [ Z(5), Z(5)^0 ], [ Z(5), Z(5) ], [ Z(5), Z(5)^2 ], [ Z(5), Z(5)^3 ],  [ Z(5)^2, Z(5)^0 ], [ Z(5)^2, Z(5) ], [ Z(5)^2, Z(5)^2 ], [ Z(5)^2, Z(5)^3 ],  [ Z(5)^3, Z(5)^0 ], [ Z(5)^3, Z(5) ], [ Z(5)^3, Z(5)^2 ], [ Z(5)^3, Z(5)^3 ] ] gap> C:=GeneralizedReedMullerCode(Pts,2,GF(5)); a linear [16,6,1..11]6..10 generalized Reed-Muller code over GF(5) ------------------------------------------------------------------ See EvaluationCode (5.6-1) for a more general construction. 5.6-4 ToricPoints > ToricPoints( n, F ) ______________________________________________function ToricPoints(n,F) returns the points in (F^x)^n. --------------------------- Example ---------------------------- gap> ToricPoints(2,GF(5)); [ [ Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5) ], [ Z(5)^0, Z(5)^2 ],   [ Z(5)^0, Z(5)^3 ], [ Z(5), Z(5)^0 ], [ Z(5), Z(5) ], [ Z(5), Z(5)^2 ],   [ Z(5), Z(5)^3 ], [ Z(5)^2, Z(5)^0 ], [ Z(5)^2, Z(5) ], [ Z(5)^2, Z(5)^2 ],   [ Z(5)^2, Z(5)^3 ], [ Z(5)^3, Z(5)^0 ], [ Z(5)^3, Z(5) ],   [ Z(5)^3, Z(5)^2 ], [ Z(5)^3, Z(5)^3 ] ] ------------------------------------------------------------------ 5.6-5 ToricCode > ToricCode( L, F ) ________________________________________________function This function returns the toric codes as in D. Joyner [Joy04] (see also J. P. Hansen [Han99]). This is a truncated (generalized) Reed-Muller code. Here L is a list of integral vectors and F is the finite field. The size of F must be different from 2. This command returns a record object C with an extra component (type NamesOfComponents(C) to see them all): C!.exponents (namely L). --------------------------- Example ---------------------------- gap> C:=ToricCode([[1,0],[3,4]],GF(3)); a linear [4,1,4]2 toric code over GF(3) gap> Display(GeneratorMat(C));  1 1 2 2 gap> Elements(C); [ [ 0 0 0 0 ], [ 1 1 2 2 ], [ 2 2 1 1 ] ] ------------------------------------------------------------------ See EvaluationCode (5.6-1) for a more general construction. 5.7 Algebraic geometric codes Certain GUAVA functions related to algebraic geometric codes are described in this section. 5.7-1 AffineCurve > AffineCurve( poly, ring ) ________________________________________function This function simply defines the data structure of an affine plane curve. In GUAVA, an affine curve is a record crv having two components: a polynomial poly, accessed in GUAVA by crv.polynomial, and a polynomial ring over a field F in two variables ring, accessed in GUAVA by crv.ring, containing poly. You use this function to define a curve in GUAVA. For example, for the ring, one could take Q}[x,y], and for the polynomial one could take f(x,y)=x^2+y^2-1. For the affine line, simply taking Q}[x,y] for the ring and f(x,y)=y for the polynomial. (Not sure if F neeeds to be a field in fact ...) To compute its degree, simply use the DegreeMultivariatePolynomial (7.6-2) command. --------------------------- Example ---------------------------- gap> gap> F:=GF(11);; gap> R2:=PolynomialRing(F,2); PolynomialRing(..., [ x_1, x_2 ]) gap> vars:=IndeterminatesOfPolynomialRing(R2);; gap> x:=vars[1];; y:=vars[2];; gap> poly:=y;; crvP1:=AffineCurve(poly,R2); rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_2 ) gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2); 1 gap> poly:=y^2-x*(x^2-1);; ell_crv:=AffineCurve(poly,R2); rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := -x_1^3+x_2^2+x_1 ) gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2); 3 gap> poly:=x^2+y^2-1;; circle:=AffineCurve(poly,R2); rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_1^2+x_2^2-Z(11)^0 ) gap> degree_crv:=DegreeMultivariatePolynomial(poly,R2); 2 gap> q:=3;; gap> F:=GF(q^2);; gap> R:=PolynomialRing(F,2);; gap> vars:=IndeterminatesOfPolynomialRing(R); [ x_1, x_2 ] gap> x:=vars[1]; x_1 gap> y:=vars[2]; x_2 gap> crv:=AffineCurve(y^q+y-x^(q+1),R); rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := -x_1^4+x_2^3+x_2 ) gap> ------------------------------------------------------------------ In GAP, a point on a curve defined by f(x,y)=0 is simply a list [a,b] of elements of F satisfying this polynomial equation. 5.7-2 AffinePointsOnCurve > AffinePointsOnCurve( f, R, E ) ___________________________________function AffinePointsOnCurve(f,R,E) returns the points (x,y) in E^2 satisying f(x,y)=0, where f is an element of R=F[x,y]. --------------------------- Example ---------------------------- gap> F:=GF(11);; gap> R := PolynomialRing(F,["x","y"]); PolynomialRing(..., [ x, y ]) gap> indets := IndeterminatesOfPolynomialRing(R);; gap> x:=indets[1];; y:=indets[2];; gap> P:=AffinePointsOnCurve(y^2-x^11+x,R,F); [ [ Z(11)^9, 0*Z(11) ], [ Z(11)^8, 0*Z(11) ], [ Z(11)^7, 0*Z(11) ],   [ Z(11)^6, 0*Z(11) ], [ Z(11)^5, 0*Z(11) ], [ Z(11)^4, 0*Z(11) ],   [ Z(11)^3, 0*Z(11) ], [ Z(11)^2, 0*Z(11) ], [ Z(11), 0*Z(11) ],   [ Z(11)^0, 0*Z(11) ], [ 0*Z(11), 0*Z(11) ] ] ------------------------------------------------------------------ 5.7-3 GenusCurve > GenusCurve( crv ) ________________________________________________function If crv represents f(x,y)=0, where f is a polynomial of degree d, then this function simply returns (d-1)(d-2)/2. At the present, the function does not check if the curve is singular (in which case the result may be false). --------------------------- Example ---------------------------- gap> q:=4;; gap> F:=GF(q^2);; gap> a:=X(F);; gap> R1:=PolynomialRing(F,[a]);; gap> var1:=IndeterminatesOfPolynomialRing(R1);; gap> b:=X(F);; gap> R2:=PolynomialRing(F,[a,b]);; gap> var2:=IndeterminatesOfPolynomialRing(R2);; gap> crv:=AffineCurve(b^q+b-a^(q+1),R2);; gap> crv:=AffineCurve(b^q+b-a^(q+1),R2); rec( ring := PolynomialRing(..., [ x_1, x_1 ]), polynomial := x_1^5+x_1^4+x_1 ) gap> GenusCurve(crv); 36  ------------------------------------------------------------------ 5.7-4 GOrbitPoint  > GOrbitPoint ( GP ) _______________________________________________function P must be a point in projective space P^n(F), G must be a finite subgroup of GL(n+1,F), This function returns all (representatives of projective) points in the orbit G* P. The example below computes the orbit of the automorphism group on the Klein quartic over the field GF(43) on the ``point at infinity''. --------------------------- Example ---------------------------- gap> R:= PolynomialRing( GF(43), 3 );; gap> vars:= IndeterminatesOfPolynomialRing(R);; gap> x:= vars[1];; y:= vars[2];; z:= vars[3];; gap> zz:=Z(43)^6; Z(43)^6 gap> zzz:=Z(43); Z(43) gap> rho1:=zz^0*[[zz^4,0,0],[0,zz^2,0],[0,0,zz]]; [ [ Z(43)^24, 0*Z(43), 0*Z(43) ],  [ 0*Z(43), Z(43)^12, 0*Z(43) ],  [ 0*Z(43), 0*Z(43), Z(43)^6 ] ] gap> rho2:=zz^0*[[0,1,0],[0,0,1],[1,0,0]]; [ [ 0*Z(43), Z(43)^0, 0*Z(43) ],  [ 0*Z(43), 0*Z(43), Z(43)^0 ],  [ Z(43)^0, 0*Z(43), 0*Z(43) ] ] gap> rho3:=(-1)*[[(zz-zz^6 )/zzz^7,( zz^2-zz^5 )/ zzz^7, ( zz^4-zz^3 )/ zzz^7], > [( zz^2-zz^5 )/ zzz^7, ( zz^4-zz^3 )/ zzz^7, ( zz-zz^6 )/ zzz^7], > [( zz^4-zz^3 )/ zzz^7, ( zz-zz^6 )/ zzz^7, ( zz^2-zz^5 )/ zzz^7]]; [ [ Z(43)^9, Z(43)^28, Z(43)^12 ],  [ Z(43)^28, Z(43)^12, Z(43)^9 ],  [ Z(43)^12, Z(43)^9, Z(43)^28 ] ] gap> G:=Group([rho1,rho2,rho3]);; #PSL(2,7) gap> Size(G); 168 gap> P:=[1,0,0]*zzz^0; [ Z(43)^0, 0*Z(43), 0*Z(43) ] gap> O:=GOrbitPoint(G,P); [ [ Z(43)^0, 0*Z(43), 0*Z(43) ], [ 0*Z(43), Z(43)^0, 0*Z(43) ],  [ 0*Z(43), 0*Z(43), Z(43)^0 ], [ Z(43)^0, Z(43)^39, Z(43)^16 ],  [ Z(43)^0, Z(43)^33, Z(43)^28 ], [ Z(43)^0, Z(43)^27, Z(43)^40 ], [ Z(43)^0, Z(43)^21, Z(43)^10 ], [ Z(43)^0, Z(43)^15, Z(43)^22 ],  [ Z(43)^0, Z(43)^9, Z(43)^34 ], [ Z(43)^0, Z(43)^3, Z(43)^4 ],  [ Z(43)^3, Z(43)^22, Z(43)^6 ], [ Z(43)^3, Z(43)^16, Z(43)^18 ], [ Z(43)^3, Z(43)^10, Z(43)^30 ], [ Z(43)^3, Z(43)^4, Z(43)^0 ],  [ Z(43)^3, Z(43)^40, Z(43)^12 ], [ Z(43)^3, Z(43)^34, Z(43)^24 ],  [ Z(43)^3, Z(43)^28, Z(43)^36 ], [ Z(43)^4, Z(43)^30, Z(43)^27 ], [ Z(43)^4, Z(43)^24, Z(43)^39 ], [ Z(43)^4, Z(43)^18, Z(43)^9 ],  [ Z(43)^4, Z(43)^12, Z(43)^21 ], [ Z(43)^4, Z(43)^6, Z(43)^33 ],  [ Z(43)^4, Z(43)^0, Z(43)^3 ], [ Z(43)^4, Z(43)^36, Z(43)^15 ] ] gap> Length(O); 24  ------------------------------------------------------------------ Informally, a divisor on a curve is a formal integer linear combination of points on the curve, D=m_1P_1+...+m_kP_k, where the m_i are integers (the ``multiplicity'' of P_i in D) and P_i are (F-rational) points on the affine plane curve. In other words, a divisor is an element of the free abelian group generated by the F-rational affine points on the curve. The support of a divisor D is simply the set of points which occurs in the sum defining D with non-zero ``multiplicity''. The data structure for a divisor on an affine plane curve is a record having the following components: -- the coefficients (the integer weights of the points in the support), -- the support, -- the curve, itself a record which has components: polynomial and polynomial ring. 5.7-5 DivisorOnAffineCurve > DivisorOnAffineCurve( cdivsdivcrv ) ______________________________function This is the command you use to define a divisor in GUAVA. Of course, crv is the curve on which the divisor lives, cdiv is the list of coefficients (or ``multiplicities''), sdiv is the list of points on crv in the support. --------------------------- Example ---------------------------- gap> q:=5; 5 gap> F:=GF(q); GF(5) gap> R:=PolynomialRing(F,2);; gap> vars:=IndeterminatesOfPolynomialRing(R); [ x_1, x_2 ] gap> x:=vars[1]; x_1 gap> y:=vars[2]; x_2 gap> crv:=AffineCurve(y^3-x^3-x-1,R); rec( ring := PolynomialRing(..., [ x_1, x_2 ]),   polynomial := -x_1^3+x_2^3-x_1-Z(5)^0 ) gap> Pts:=AffinePointsOnCurve(crv,R,F);; gap> supp:=[Pts[1],Pts[2]]; [ [ 0*Z(5), Z(5)^0 ], [ Z(5)^0, Z(5) ] ] gap> D:=DivisorOnAffineCurve([1,-1],supp,crv); rec( coeffs := [ 1, -1 ],   support := [ [ 0*Z(5), Z(5)^0 ], [ Z(5)^0, Z(5) ] ],  curve := rec( ring := PolynomialRing(..., [ x_1, x_2 ]),   polynomial := -x_1^3+x_2^3-x_1-Z(5)^0 ) )  ------------------------------------------------------------------ 5.7-6 DivisorAddition  > DivisorAddition ( D1D2 ) _________________________________________function If D_1=m_1P_1+...+m_kP_k and D_2=n_1P_1+...+n_kP_k are divisors then D_1+D_2=(m_1+n_1)P_1+...+(m_k+n_k)P_k. 5.7-7 DivisorDegree  > DivisorDegree ( D ) ______________________________________________function If D=m_1P_1+...+m_kP_k is a divisor then the degree is m_1+...+m_k. 5.7-8 DivisorNegate  > DivisorNegate ( D ) ______________________________________________function Self-explanatory. 5.7-9 DivisorIsZero  > DivisorIsZero ( D ) ______________________________________________function Self-explanatory. 5.7-10 DivisorsEqual  > DivisorsEqual ( D1D2 ) ___________________________________________function Self-explanatory. 5.7-11 DivisorGCD  > DivisorGCD ( D1D2 ) ______________________________________________function If m=p_1^e_1...p_k^e_k and n=p_1^f_1...p_k^f_k are two integers then their greatest common divisor is GCD(m,n)=p_1^min(e_1,f_1)...p_k^min(e_k,f_k). A similar definition works for two divisors on a curve. If D_1=e_1P_1+...+e_kP_k and D_2n=f_1P_1+...+f_kP_k are two divisors on a curve then their greatest common divisor is GCD(m,n)=min(e_1,f_1)P_1+...+min(e_k,f_k)P_k. This function computes this quantity. 5.7-12 DivisorLCM  > DivisorLCM ( D1D2 ) ______________________________________________function If m=p_1^e_1...p_k^e_k and n=p_1^f_1...p_k^f_k are two integers then their least common multiple is LCM(m,n)=p_1^max(e_1,f_1)...p_k^max(e_k,f_k). A similar definition works for two divisors on a curve. If D_1=e_1P_1+...+e_kP_k and D_2=f_1P_1+...+f_kP_k are two divisors on a curve then their least common multiple is LCM(m,n)=max(e_1,f_1)P_1+...+max(e_k,f_k)P_k. This function computes this quantity. --------------------------- Example ---------------------------- gap> F:=GF(11); GF(11) gap> R1:=PolynomialRing(F,["a"]);; gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];; gap> b:=X(F,"b",var1); b gap> var2:=Concatenation(var1,[b]); [ a, b ] gap> R2:=PolynomialRing(F,var2); PolynomialRing(..., [ a, b ]) gap> crvP1:=AffineCurve(b,R2); rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) gap> div1:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1); rec( coeffs := [ 1, 2, 3, 4 ],   support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ],   curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) ) gap> DivisorDegree(div1); 10 gap> div2:=DivisorOnAffineCurve([1,2,3,4],[Z(11),Z(11)^2,Z(11)^3,Z(11)^4],crvP1); rec( coeffs := [ 1, 2, 3, 4 ],   support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4 ],   curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) ) gap> DivisorDegree(div2); 10 gap> div3:=DivisorAddition(div1,div2); rec( coeffs := [ 5, 3, 5, 4, 3 ],   support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ],   curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) ) gap> DivisorDegree(div3); 20 gap> DivisorIsEffective(div1); true gap> DivisorIsEffective(div2); true gap> gap> ndiv1:=DivisorNegate(div1); rec( coeffs := [ -1, -2, -3, -4 ],   support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ],   curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) ) gap> zdiv:=DivisorAddition(div1,ndiv1); rec( coeffs := [ 0, 0, 0, 0 ],   support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^7 ],   curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) ) gap> DivisorIsZero(zdiv); true gap> div_gcd:=DivisorGCD(div1,div2); rec( coeffs := [ 1, 1, 2, 0, 0 ],   support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ],   curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) ) gap> div_lcm:=DivisorLCM(div1,div2); rec( coeffs := [ 4, 2, 3, 4, 3 ],   support := [ Z(11), Z(11)^2, Z(11)^3, Z(11)^4, Z(11)^7 ],   curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) ) gap> DivisorDegree(div_gcd); 4 gap> DivisorDegree(div_lcm); 16 gap> DivisorEqual(div3,DivisorAddition(div_gcd,div_lcm)); true  ------------------------------------------------------------------ Let G denote a finite subgroup of PGL(2,F) and let D denote a divisor on the projective line P^1(F). If G leaves D unchanged (it may permute the points in the support of D but must preserve their sum in D) then the Riemann-Roch space L(D) is a G-module. The commands in this section help explore the G-module structure of L(D) in the case then the ground field F is finite. 5.7-13 RiemannRochSpaceBasisFunctionP1  > RiemannRochSpaceBasisFunctionP1 ( PkR2 ) _________________________function Input: R2 is a polynomial ring in two variables, say F[x,y]; P is an element of the base field, say F; k is an integer. Output: 1/(x-P)^k 5.7-14 DivisorOfRationalFunctionP1  > DivisorOfRationalFunctionP1 ( f, R ) _____________________________function Here R = F[x,y] is a polynomial ring in the variables x,y and f is a rational function of x. Simply returns the principal divisor on P}^1 associated to f. --------------------------- Example ----------------------------  gap> F:=GF(11); GF(11) gap> R1:=PolynomialRing(F,["a"]);; gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];; gap> b:=X(F,"b",var1); b gap> var2:=Concatenation(var1,[b]); [ a, b ] gap> R2:=PolynomialRing(F,var2); PolynomialRing(..., [ a, b ]) gap> pt:=Z(11); Z(11) gap> f:=RiemannRochSpaceBasisFunctionP1(pt,2,R2); (Z(11)^0)/(a^2+Z(11)^7*a+Z(11)^2) gap> Df:=DivisorOfRationalFunctionP1(f,R2); rec( coeffs := [ -2 ], support := [ Z(11) ],   curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := a )  ) gap> Df.support; [ Z(11) ] gap> F:=GF(11);; gap> R:=PolynomialRing(F,2);; gap> vars:=IndeterminatesOfPolynomialRing(R);; gap> a:=vars[1];; gap> b:=vars[2];; gap> f:=(a^4+Z(11)^6*a^3-a^2+Z(11)^7*a+Z(11)^0)/(a^4+Z(11)*a^2+Z(11)^7*a+Z(11));; gap> divf:=DivisorOfRationalFunctionP1(f,R); rec( coeffs := [ 3, 1 ], support := [ Z(11), Z(11)^7 ],  curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := a ) ) gap> denf:=DenominatorOfRationalFunction(f); RootsOfUPol(denf); a^4+Z(11)*a^2+Z(11)^7*a+Z(11) [ ] gap> numf:=NumeratorOfRationalFunction(f); RootsOfUPol(numf); a^4+Z(11)^6*a^3-a^2+Z(11)^7*a+Z(11)^0 [ Z(11)^7, Z(11), Z(11), Z(11) ]  ------------------------------------------------------------------ 5.7-15 RiemannRochSpaceBasisP1  > RiemannRochSpaceBasisP1 ( D ) ____________________________________function This returns the basis of the Riemann-Roch space L(D) associated to the divisor D on the projective line P}^1. --------------------------- Example ---------------------------- gap> F:=GF(11); GF(11) gap> R1:=PolynomialRing(F,["a"]);; gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];; gap> b:=X(F,"b",var1); b gap> var2:=Concatenation(var1,[b]); [ a, b ] gap> R2:=PolynomialRing(F,var2); PolynomialRing(..., [ a, b ]) gap> crvP1:=AffineCurve(b,R2); rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1); rec( coeffs := [ 1, 2, 3, 4 ],   support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ],   curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) ) gap> B:=RiemannRochSpaceBasisP1(D); [ Z(11)^0, (Z(11)^0)/(a+Z(11)^7), (Z(11)^0)/(a+Z(11)^8),  (Z(11)^0)/(a^2+Z(11)^9*a+Z(11)^6), (Z(11)^0)/(a+Z(11)^2),  (Z(11)^0)/(a^2+Z(11)^3*a+Z(11)^4), (Z(11)^0)/(a^3+a^2+Z(11)^2*a+Z(11)^6),  (Z(11)^0)/(a+Z(11)^6), (Z(11)^0)/(a^2+Z(11)^7*a+Z(11)^2),  (Z(11)^0)/(a^3+Z(11)^4*a^2+a+Z(11)^8),  (Z(11)^0)/(a^4+Z(11)^8*a^3+Z(11)*a^2+a+Z(11)^4) ] gap> DivisorOfRationalFunctionP1(B[1],R2).support; [ ] gap> DivisorOfRationalFunctionP1(B[2],R2).support; [ Z(11)^2 ] gap> DivisorOfRationalFunctionP1(B[3],R2).support; [ Z(11)^3 ] gap> DivisorOfRationalFunctionP1(B[4],R2).support; [ Z(11)^3 ] gap> DivisorOfRationalFunctionP1(B[5],R2).support; [ Z(11)^7 ] gap> DivisorOfRationalFunctionP1(B[6],R2).support; [ Z(11)^7 ] gap> DivisorOfRationalFunctionP1(B[7],R2).support; [ Z(11)^7 ] gap> DivisorOfRationalFunctionP1(B[8],R2).support; [ Z(11) ] gap> DivisorOfRationalFunctionP1(B[9],R2).support; [ Z(11) ] gap> DivisorOfRationalFunctionP1(B[10],R2).support; [ Z(11) ] gap> DivisorOfRationalFunctionP1(B[11],R2).support; [ Z(11) ]  ------------------------------------------------------------------ 5.7-16 MoebiusTransformation  > MoebiusTransformation ( AR ) _____________________________________function The arguments are a 2x 2 matrix A with entries in a field F and a polynomial ring Rof one variable, say F[x]. This function returns the linear fractional transformatio associated to A. These transformations can be composed with each other using GAP's Value command. 5.7-17 ActionMoebiusTransformationOnFunction  > ActionMoebiusTransformationOnFunction ( AfR2 ) ___________________function The arguments are a 2x 2 matrix A with entries in a field F, a rational function f of one variable, say in F(x), and a polynomial ring R2, say F[x,y]. This function simply returns the composition of the function f with the Möbius transformation of A. 5.7-18 ActionMoebiusTransformationOnDivisorP1  > ActionMoebiusTransformationOnDivisorP1 ( AD ) ____________________function A Möbius transformation may be regarded as an automorphism of the projective line P^1. This function simply returns the image of the divisor D under the Möbius transformation defined by A, provided that IsActionMoebiusTransformationOnDivisorDefinedP1(A,D) returns true. 5.7-19 IsActionMoebiusTransformationOnDivisorDefinedP1  > IsActionMoebiusTransformationOnDivisorDefinedP1 ( AD ) ___________function Returns true of none of the points in the support of the divisor D is the pole of the Möbius transformation. --------------------------- Example ---------------------------- gap> F:=GF(11); GF(11) gap> R1:=PolynomialRing(F,["a"]);; gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];; gap> b:=X(F,"b",var1); b gap> var2:=Concatenation(var1,[b]); [ a, b ] gap> R2:=PolynomialRing(F,var2); PolynomialRing(..., [ a, b ]) gap> crvP1:=AffineCurve(b,R2); rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1); rec( coeffs := [ 1, 2, 3, 4 ],   support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ],   curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) ) gap> A:=Z(11)^0*[[1,2],[1,4]]; [ [ Z(11)^0, Z(11) ], [ Z(11)^0, Z(11)^2 ] ] gap> ActionMoebiusTransformationOnDivisorDefinedP1(A,D); false gap> A:=Z(11)^0*[[1,2],[3,4]]; [ [ Z(11)^0, Z(11) ], [ Z(11)^8, Z(11)^2 ] ] gap> ActionMoebiusTransformationOnDivisorDefinedP1(A,D); true gap> ActionMoebiusTransformationOnDivisorP1(A,D); rec( coeffs := [ 1, 2, 3, 4 ],   support := [ Z(11)^5, Z(11)^6, Z(11)^8, Z(11)^7 ],   curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) ) gap> f:=MoebiusTransformation(A,R1); (a+Z(11))/(Z(11)^8*a+Z(11)^2) gap> ActionMoebiusTransformationOnFunction(A,f,R1); -Z(11)^0+Z(11)^3*a^-1  ------------------------------------------------------------------ 5.7-20 DivisorAutomorphismGroupP1  > DivisorAutomorphismGroupP1 ( D ) _________________________________function Input: A divisor D on P^1(F), where F is a finite field. Output: A subgroup Aut(D)subset Aut(P^1) preserving D. Very slow. --------------------------- Example ---------------------------- gap> F:=GF(11); GF(11) gap> R1:=PolynomialRing(F,["a"]);; gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];; gap> b:=X(F,"b",var1); b gap> var2:=Concatenation(var1,[b]); [ a, b ] gap> R2:=PolynomialRing(F,var2); PolynomialRing(..., [ a, b ]) gap> crvP1:=AffineCurve(b,R2); rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) gap> D:=DivisorOnAffineCurve([1,2,3,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1); rec( coeffs := [ 1, 2, 3, 4 ],   support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ],   curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) ) gap> agp:=DivisorAutomorphismGroupP1(D);; time; 7305 gap> IdGroup(agp); [ 10, 2 ]  ------------------------------------------------------------------ 5.7-21 MatrixRepresentationOnRiemannRochSpaceP1  > MatrixRepresentationOnRiemannRochSpaceP1 ( gD ) __________________function Input: An element g in G, a subgroup of Aut(D)subset Aut(P^1), and a divisor D on P^1(F), where F is a finite field. Output: a dx d matrix, where d = dim, L(D), representing the action of g on L(D). Note: g sends L(D) to r* L(D), where r is a polynomial of degree 1 depending on g and D. Also very slow. The GAP command BrauerCharacterValue can be used to ``lift'' the eigenvalues of this matrix to the complex numbers. --------------------------- Example ---------------------------- gap> F:=GF(11); GF(11) gap> R1:=PolynomialRing(F,["a"]);; gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];; gap> b:=X(F,"b",var1); b gap> var2:=Concatenation(var1,[b]); [ a, b ] gap> R2:=PolynomialRing(F,var2); PolynomialRing(..., [ a, b ]) gap> crvP1:=AffineCurve(b,R2); rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) gap> D:=DivisorOnAffineCurve([1,1,1,4],[Z(11)^2,Z(11)^3,Z(11)^7,Z(11)],crvP1); rec( coeffs := [ 1, 1, 1, 4 ],   support := [ Z(11)^2, Z(11)^3, Z(11)^7, Z(11) ],   curve := rec( ring := PolynomialRing(..., [ a, b ]), polynomial := b ) ) gap> agp:=DivisorAutomorphismGroupP1(D);; time; 7198 gap> IdGroup(agp); [ 20, 5 ] gap> g:=Random(agp); [ [ Z(11)^4, Z(11)^9 ], [ Z(11)^0, Z(11)^9 ] ] gap> rho:=MatrixRepresentationOnRiemannRochSpaceP1(g,D); [ [ Z(11)^0, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ],  [ Z(11)^0, 0*Z(11), 0*Z(11), Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ],  [ Z(11)^7, 0*Z(11), Z(11)^5, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ],  [ Z(11)^4, Z(11)^9, 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11), 0*Z(11) ],  [ Z(11)^2, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^5, 0*Z(11), 0*Z(11), 0*Z(11) ],  [ Z(11)^4, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^8, Z(11)^0, 0*Z(11), 0*Z(11) ],  [ Z(11)^6, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^7, Z(11)^0, Z(11)^5, 0*Z(11) ],  [ Z(11)^8, 0*Z(11), 0*Z(11), 0*Z(11), Z(11)^3, Z(11)^3, Z(11)^9, Z(11)^0 ] ] gap> Display(rho);  1 . . . . . . .  1 . . 2 . . . .  7 . 10 . . . . .  5 6 . . . . . .  4 . . . 10 . . .  5 . . . 3 1 . .  9 . . . 7 1 10 .  3 . . . 8 8 6 1  ------------------------------------------------------------------ 5.7-22 GoppaCodeClassical > GoppaCodeClassical( div, pts ) ___________________________________function Input: A divisor div on the projective line P}^1(F) over a finite field F and a list pts of points P_1,...,P_nsubset F disjoint from the support of div. Output: The classical (evaluation) Goppa code associated to this data. This is the code C=\{(f(P_1),...,f(P_n))\ |\ f\in L(D)_F\}. --------------------------- Example ---------------------------- gap> F:=GF(11);; gap> R2:=PolynomialRing(F,2);; gap> vars:=IndeterminatesOfPolynomialRing(R2);; gap> a:=vars[1];;b:=vars[2];; gap> cdiv:=[ 1, 2, -1, -2 ]; [ 1, 2, -1, -2 ] gap> sdiv:=[ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ]; [ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ] gap> crv:=rec(polynomial:=b,ring:=R2); rec( polynomial := x_2, ring := PolynomialRing(..., [ x_1, x_2 ]) ) gap> div:=DivisorOnAffineCurve(cdiv,sdiv,crv); rec( coeffs := [ 1, 2, -1, -2 ], support := [ Z(11)^2, Z(11)^3, Z(11)^6, Z(11)^9 ],  curve := rec( polynomial := x_2, ring := PolynomialRing(..., [ x_1, x_2 ]) ) ) gap> pts:=Difference(Elements(GF(11)),div.support); [ 0*Z(11), Z(11)^0, Z(11), Z(11)^4, Z(11)^5, Z(11)^7, Z(11)^8 ] gap> C:=GoppaCodeClassical(div,pts); a linear [7,2,1..6]4..5 code defined by generator matrix over GF(11) gap> MinimumDistance(C); 6 ------------------------------------------------------------------ 5.7-23 EvaluationBivariateCode > EvaluationBivariateCode( pts, L, crv ) ___________________________function Input: pts is a set of affine points on crv, L is a list of rational functions on crv. Output: The evaluation code associated to the points in pts and functions in L, but specifically for affine plane curves and this function checks if points are "bad" (if so removes them from the list pts automatically). A point is ``bad'' if either it does not lie on the set of non-singular F-rational points (places of degree 1) on the curve. Very similar to EvaluationCode (see EvaluationCode (5.6-1) for a more general construction). 5.7-24 EvaluationBivariateCodeNC > EvaluationBivariateCodeNC( pts, L, crv ) _________________________function As in EvaluationBivariateCode but does not check if the points are ``bad''. Input: pts is a set of affine points on crv, L is a list of rational functions on crv. Output: The evaluation code associated to the points in pts and functions in L. --------------------------- Example ---------------------------- gap> q:=4;; gap> F:=GF(q^2);; gap> R:=PolynomialRing(F,2);; gap> vars:=IndeterminatesOfPolynomialRing(R);; gap> x:=vars[1];; gap> y:=vars[2];; gap> crv:=AffineCurve(y^q+y-x^(q+1),R); rec( ring := PolynomialRing(..., [ x_1, x_2 ]), polynomial := x_1^5+x_2^4+x_2 ) gap> L:=[ x^0, x, x^2*y^-1 ]; [ Z(2)^0, x_1, x_1^2/x_2 ] gap> Pts:=AffinePointsOnCurve(crv.polynomial,crv.ring,F);; gap> C1:=EvaluationBivariateCode(Pts,L,crv); time;    Automatically removed the following 'bad' points (either a pole or not   on the curve): [ [ 0*Z(2), 0*Z(2) ] ]  a linear [63,3,1..60]51..59 evaluation code over GF(16) 52 gap> P:=Difference(Pts,[[ 0*Z(2^4)^0, 0*Z(2)^0 ]]);; gap> C2:=EvaluationBivariateCodeNC(P,L,crv); time; a linear [63,3,1..60]51..59 evaluation code over GF(16) 48 gap> C3:=EvaluationCode(P,L,R); time; a linear [63,3,1..56]51..59 evaluation code over GF(16) 58 gap> MinimumDistance(C1); 56 gap> MinimumDistance(C2); 56 gap> MinimumDistance(C3); 56 gap> ------------------------------------------------------------------ 5.7-25 OnePointAGCode > OnePointAGCode( f, P, m, R ) _____________________________________function Input: f is a polynomial in R=F[x,y], where F is a finite field, m is a positive integer (the multiplicity of the `point at infinity' infty on the curve f(x,y)=0), P is a list of n points on the curve over F. Output: The C which is the image of the evaluation map Eval_P:L(m \cdot \infty)\rightarrow F^n, given by flongmapsto (f(p_1),...,f(p_n)), where p_i in P. Here L(m * infty) denotes the Riemann-Roch space of the divisor m * infty on the curve. This has a basis consisting of monomials x^iy^j, where (i,j) range over a polygon depending on m and f(x,y). For more details on the Riemann-Roch space of the divisor m * infty see Proposition III.10.5 in Stichtenoth [Sti93]. This command returns a "record" object C with several extra components (type NamesOfComponents(C) to see them all): C!.points (namely P), C!.multiplicity (namely m), C!.curve (namely f) and C!.ring (namely R). --------------------------- Example ---------------------------- gap> F:=GF(11); GF(11) gap> R := PolynomialRing(F,["x","y"]); PolynomialRing(..., [ x, y ]) gap> indets := IndeterminatesOfPolynomialRing(R); [ x, y ] gap> x:=indets[1]; y:=indets[2]; x y gap> P:=AffinePointsOnCurve(y^2-x^11+x,R,F);; gap> C:=OnePointAGCode(y^2-x^11+x,P,15,R); a linear [11,8,1..0]2..3 one-point AG code over GF(11) gap> MinimumDistance(C); 4 gap> Pts:=List([1,2,4,6,7,8,9,10,11],i->P[i]);; gap> C:=OnePointAGCode(y^2-x^11+x,PT,10,R); a linear [9,6,1..4]2..3 one-point AG code over GF(11) gap> MinimumDistance(C); 4 ------------------------------------------------------------------ See EvaluationCode (5.6-1) for a more general construction. 5.8 Low-Density Parity-Check Codes Low-density parity-check (LDPC) codes form a class of linear block codes whose parity-check matrix--as the name implies, is sparse. LDPC codes were introduced by Robert Gallager in 1962 [Gal62] as his PhD work. Due to the decoding complexity for the technology back then, these codes were forgotten. Not until the late 1990s, these codes were rediscovered and research results have shown that LDPC codes can achieve near Shannon's capacity performance provided that their block length is long enough and soft-decision iterative decoder is employed. Note that the bit-flipping decoder (see BitFlipDecoder) is a hard-decision decoder and hence capacity achieving performance cannot be achieved despite having a large block length. Based on the structure of their parity-check matrix, LDPC codes may be categorised into two classes: -- Regular LDPC codes This class of codes has a fixed number of non zeros per column and per row in their parity-check matrix. These codes are usually denoted as (n,j,k) codes where n is the block length, j is the number of non zeros per column in their parity-check matrix and k is the number of non zeros per row in their parity-check matrix. -- Irregular LDPC codes The irregular codes, on the other hand, do not have a fixed number of non zeros per column and row in their parity-check matrix. This class of codes are commonly represented by two polynomials which denote the distribution of the number of non zeros in the columns and rows respectively of their parity-check matrix. 5.8-1 QCLDPCCodeFromGroup > QCLDPCCodeFromGroup( m, j, k ) ___________________________________function QCLDCCodeFromGroup produces an (n,j,k) regular quasi-cyclic LDPC code over GF(2) of block length n = mk. The term quasi-cyclic in the context of LDPC codes typically refers to LDPC codes whose parity-check matrix H has the following form - - | I_P(0,0) | I_P(0,1) | ... | I_P(0,k-1) | | I_P(1,0) | I_P(1,1) | ... | I_P(1,k-1) | H = | . | . | . | . |, | . | . | . | . | | I_P(j-1,0) | I_P(j-1,1) | ... | I_P(j-1,k-1) | - - where I_P(s,t) is an identity matrix of size m x m which has been shifted so that the 1 on the first row starts at position P(s,t). Let F be a multiplicative group of integers modulo m. If m is a prime, F=0,1,...,m-1, otherwise F contains a set of integers which are relatively prime to m. In both cases, the order of F is equal to phi(m). Let a and b be non zeros of F such that the orders of a and b are k and j respectively. Note that the integers a and b can always be found provided that k and j respectively divide phi(m). Having obtain integers a and b, construct the following j x k matrix P so that the element at row s and column t is given by P(s,t) = a^tb^s, i.e. - - | 1 | a | . . . | a^{k-1} | | b | ab | . . . | a^{k-1}b | P = | . | . | . | . |. | . | . | . | . | | b^{j-1} | ab^{j-1} | . . . | a^{k-1}b^{j-1} | - - The parity-check matrix H of the LDPC code can be obtained by expanding each element of matrix P, i.e. P(s,t), to an identity matrix I_P(s,t) of size m x m. The code rate R of the constructed code is given by R \geq 1 - \frac{j}{k} where the sign >= is due to the possible existence of some non linearly independent rows in H. For more details to the paper by Tanner et al [S}04]. --------------------------- Example ---------------------------- gap> C := QCLDPCCodeFromGroup(7,2,3); a linear [21,8,1..6]5..10 low-density parity-check code over GF(2) gap> MinimumWeight(C); [21,8] linear code over GF(2) - minimum weight evaluation Known lower-bound: 1 There are 3 generator matrices, ranks : 8 8 5  The weight of the minimum weight codeword satisfies 0 mod 2 congruence Enumerating codewords with information weight 1 (w=1)  Found new minimum weight 6 Number of matrices required for codeword enumeration 2 Completed w= 1, 24 codewords enumerated, lower-bound 4, upper-bound 6 Termination expected with information weight 2 at matrix 1 ----------------------------------------------------------------------------- Enumerating codewords with information weight 2 (w=2) using 1 matrices Completed w= 2, 28 codewords enumerated, lower-bound 6, upper-bound 6 ----------------------------------------------------------------------------- Minimum weight: 6 6 gap> # The quasi-cyclic structure is obvious from the check matrix gap> Display( CheckMat(C) );  1 . . . . . . . 1 . . . . . . . . 1 . . .  . 1 . . . . . . . 1 . . . . . . . . 1 . .  . . 1 . . . . . . . 1 . . . . . . . . 1 .  . . . 1 . . . . . . . 1 . . . . . . . . 1  . . . . 1 . . . . . . . 1 . 1 . . . . . .  . . . . . 1 . . . . . . . 1 . 1 . . . . .  . . . . . . 1 1 . . . . . . . . 1 . . . .  . . . . . 1 . . . . . 1 . . . . 1 . . . .  . . . . . . 1 . . . . . 1 . . . . 1 . . .  1 . . . . . . . . . . . . 1 . . . . 1 . .  . 1 . . . . . 1 . . . . . . . . . . . 1 .  . . 1 . . . . . 1 . . . . . . . . . . . 1  . . . 1 . . . . . 1 . . . . 1 . . . . . .  . . . . 1 . . . . . 1 . . . . 1 . . . . . gap> # This is the famous [155,64,20] quasi-cyclic LDPC codes gap> C := QCLDPCCodeFromGroup(31,3,5); a linear [155,64,1..24]24..77 low-density parity-check code over GF(2) gap> # An example using non prime m, it may take a while to construct this code gap> C := QCLDPCCodeFromGroup(356,4,8); a linear [2848,1436,1..120]312..1412 low-density parity-check code over GF(2) ------------------------------------------------------------------ guava-3.6/doc/guava.blg0000644017361200001450000000370011027015737014703 0ustar tabbottcrontabThis is BibTeX, Version 0.99c (Web2C 7.5.6) The top-level auxiliary file: guava.aux The style file: alpha.bst Database file #1: guava.bib Warning--string name "ieee_j_it" is undefined --line 220 of file guava.bib Too many commas in name 1 of "R. Tanner, D. Sridhara, A. Sridharan, T. Fuja and D. Costello{, Jr.}" for entry TSSFC04 while executing---line 1185 of file alpha.bst Too many commas in name 1 of "R. Tanner, D. Sridhara, A. Sridharan, T. Fuja and D. Costello{, Jr.}" for entry TSSFC04 while executing---line 1185 of file alpha.bst Name 2 in "J. von zur Gathen and J. Gerhard," has a comma at the end for entry GG03 while executing---line 1185 of file alpha.bst Name 2 in "J. von zur Gathen and J. Gerhard," has a comma at the end for entry GG03 while executing---line 1185 of file alpha.bst Name 2 in "J. von zur Gathen and J. Gerhard," has a comma at the end for entry GG03 while executing---line 1185 of file alpha.bst Too many commas in name 1 of "R. Tanner, D. Sridhara, A. Sridharan, T. Fuja and D. Costello{, Jr.}" for entry TSSFC04 while executing---line 1250 of file alpha.bst Warning--empty journal in TSSFC04 Name 2 in "J. von zur Gathen and J. Gerhard," has a comma at the end for entry GG03 while executing---line 1250 of file alpha.bst You've used 24 entries, 2543 wiz_defined-function locations, 720 strings with 7312 characters, and the built_in function-call counts, 8729 in all, are: = -- 887 > -- 334 < -- 17 + -- 107 - -- 102 * -- 587 := -- 1439 add.period$ -- 73 call.type$ -- 24 change.case$ -- 128 chr.to.int$ -- 24 cite$ -- 25 duplicate$ -- 378 empty$ -- 663 format.name$ -- 140 if$ -- 1772 int.to.chr$ -- 1 int.to.str$ -- 0 missing$ -- 28 newline$ -- 123 num.names$ -- 74 pop$ -- 126 preamble$ -- 1 purify$ -- 158 quote$ -- 0 skip$ -- 303 stack$ -- 0 substring$ -- 545 swap$ -- 47 text.length$ -- 17 text.prefix$ -- 14 top$ -- 0 type$ -- 168 warning$ -- 1 while$ -- 88 width$ -- 27 write$ -- 308 (There were 7 error messages) guava-3.6/doc/manual.toc0000644017361200001450000000000011026723452015063 0ustar tabbottcrontabguava-3.6/doc/chap7.txt0000644017361200001450000032416011027015733014657 0ustar tabbottcrontab 7. Bounds on codes, special matrices and miscellaneous functions In this chapter we describe functions that determine bounds on the size and minimum distance of codes (Section 7.1), functions that determine bounds on the size and covering radius of codes (Section 7.2), functions that work with special matrices GUAVA needs for several codes (see Section 7.3), and constructing codes or performing calculations with codes (see Section 7.5). 7.1 Distance bounds on codes This section describes the functions that calculate estimates for upper bounds on the size and minimum distance of codes. Several algorithms are known to compute a largest number of words a code can have with given length and minimum distance. It is important however to understand that in some cases the true upper bound is unknown. A code which has a size equalto the calculated upper bound may not have been found. However, codes that have a larger size do not exist. A second way to obtain bounds is a table. In GUAVA, an extensive table is implemented for linear codes over GF(2), GF(3) and GF(4). It contains bounds on the minimum distance for given word length and dimension. It contains entries for word lengths less than or equal to 257, 243 and 256 for codes over GF(2), GF(3) and GF(4) respectively. These entries were obtained from Brouwer's tables as of 11 May 2006. For the latest information, please see A. E. Brouwer's tables [Bro06] on the internet. Firstly, we describe functions that compute specific upper bounds on the code size (see UpperBoundSingleton (7.1-1), UpperBoundHamming (7.1-2), UpperBoundJohnson (7.1-3), UpperBoundPlotkin (7.1-4), UpperBoundElias (7.1-5) and UpperBoundGriesmer (7.1-6)). Next we describe a function that computes GUAVA's best upper bound on the code size (see UpperBound (7.1-8)). Then we describe two functions that compute a lower and upper bound on the minimum distance of a code (see LowerBoundMinimumDistance (7.1-9) and UpperBoundMinimumDistance (7.1-12)). Finally, we describe a function that returns a lower and upper bound on the minimum distance with given parameters and a description of how the bounds were obtained (see BoundsMinimumDistance (7.1-13)). 7.1-1 UpperBoundSingleton > UpperBoundSingleton( n, d, q ) ___________________________________function UpperBoundSingleton returns the Singleton bound for a code of length n, minimum distance d over a field of size q. This bound is based on the shortening of codes. By shortening an (n, M, d) code d-1 times, an (n-d+1,M,1) code results, with M <= q^n-d+1 (see ShortenedCode (6.1-9)). Thus M \leq q^{n-d+1}. Codes that meet this bound are called maximum distance separable (see IsMDSCode (4.3-7)). --------------------------- Example ---------------------------- gap> UpperBoundSingleton(4, 3, 5); 25 gap> C := ReedSolomonCode(4,3);; Size(C); 25 gap> IsMDSCode(C); true  ------------------------------------------------------------------ 7.1-2 UpperBoundHamming > UpperBoundHamming( n, d, q ) _____________________________________function The Hamming bound (also known as the sphere packing bound) returns an upper bound on the size of a code of length n, minimum distance d, over a field of size q. The Hamming bound is obtained by dividing the contents of the entire space GF(q)^n by the contents of a ball with radius lfloor(d-1) / 2rfloor. As all these balls are disjoint, they can never contain more than the whole vector space. M \leq {q^n \over V(n,e)}, where M is the maxmimum number of codewords and V(n,e) is equal to the contents of a ball of radius e (see SphereContent (7.5-5)). This bound is useful for small values of d. Codes for which equality holds are called perfect (see IsPerfectCode (4.3-6)). --------------------------- Example ---------------------------- gap> UpperBoundHamming( 15, 3, 2 ); 2048 gap> C := HammingCode( 4, GF(2) ); a linear [15,11,3]1 Hamming (4,2) code over GF(2) gap> Size( C ); 2048  ------------------------------------------------------------------ 7.1-3 UpperBoundJohnson > UpperBoundJohnson( n, d ) ________________________________________function The Johnson bound is an improved version of the Hamming bound (see UpperBoundHamming (7.1-2)). In addition to the Hamming bound, it takes into account the elements of the space outside the balls of radius e around the elements of the code. The Johnson bound only works for binary codes. --------------------------- Example ---------------------------- gap> UpperBoundJohnson( 13, 5 ); 77 gap> UpperBoundHamming( 13, 5, 2); 89 # in this case the Johnson bound is better  ------------------------------------------------------------------ 7.1-4 UpperBoundPlotkin > UpperBoundPlotkin( n, d, q ) _____________________________________function The function UpperBoundPlotkin calculates the sum of the distances of all ordered pairs of different codewords. It is based on the fact that the minimum distance is at most equal to the average distance. It is a good bound if the weights of the codewords do not differ much. It results in: M \leq {d \over {d-(1-1/q)n}}, where M is the maximum number of codewords. In this case, d must be larger than (1-1/q)n, but by shortening the code, the case d < (1-1/q)n is covered. --------------------------- Example ---------------------------- gap> UpperBoundPlotkin( 15, 7, 2 ); 32 gap> C := BCHCode( 15, 7, GF(2) ); a cyclic [15,5,7]5 BCH code, delta=7, b=1 over GF(2) gap> Size(C); 32 gap> WeightDistribution(C); [ 1, 0, 0, 0, 0, 0, 0, 15, 15, 0, 0, 0, 0, 0, 0, 1 ]  ------------------------------------------------------------------ 7.1-5 UpperBoundElias > UpperBoundElias( n, d, q ) _______________________________________function The Elias bound is an improvement of the Plotkin bound (see UpperBoundPlotkin (7.1-4)) for large codes. Subcodes are used to decrease the size of the code, in this case the subcode of all codewords within a certain ball. This bound is useful for large codes with relatively small minimum distances. --------------------------- Example ---------------------------- gap> UpperBoundPlotkin( 16, 3, 2 ); 12288 gap> UpperBoundElias( 16, 3, 2 ); 10280  gap> UpperBoundElias( 20, 10, 3 ); 16255 ------------------------------------------------------------------ 7.1-6 UpperBoundGriesmer > UpperBoundGriesmer( n, d, q ) ____________________________________function The Griesmer bound is valid only for linear codes. It is obtained by counting the number of equal symbols in each row of the generator matrix of the code. By omitting the coordinates in which all rows have a zero, a smaller code results. The Griesmer bound is obtained by repeating this proces until a trivial code is left in the end. --------------------------- Example ---------------------------- gap> UpperBoundGriesmer( 13, 5, 2 ); 64 gap> UpperBoundGriesmer( 18, 9, 2 ); 8 # the maximum number of words for a linear code is 8 gap> Size( PuncturedCode( HadamardCode( 20, 1 ) ) ); 20 # this non-linear code has 20 elements  ------------------------------------------------------------------ 7.1-7 IsGriesmerCode > IsGriesmerCode( C ) ______________________________________________function IsGriesmerCode returns `true' if a linear code C is a Griesmer code, and `false' otherwise. A code is called Griesmer if its length satisfies n = g[k,d] = \sum_{i=0}^{k-1} \lceil \frac{d}{q^i} \rceil. --------------------------- Example ---------------------------- gap> IsGriesmerCode( HammingCode( 3, GF(2) ) ); true gap> IsGriesmerCode( BCHCode( 17, 2, GF(2) ) ); false  ------------------------------------------------------------------ 7.1-8 UpperBound > UpperBound( n, d, q ) ____________________________________________function UpperBound returns the best known upper bound A(n,d) for the size of a code of length n, minimum distance d over a field of size q. The function UpperBound first checks for trivial cases (like d=1 or n=d), and if the value is in the built-in table. Then it calculates the minimum value of the upper bound using the methods of Singleton (see UpperBoundSingleton (7.1-1)), Hamming (see UpperBoundHamming (7.1-2)), Johnson (see UpperBoundJohnson (7.1-3)), Plotkin (see UpperBoundPlotkin (7.1-4)) and Elias (see UpperBoundElias (7.1-5)). If the code is binary, A(n, 2* ell-1) = A(n+1,2* ell), so the UpperBound takes the minimum of the values obtained from all methods for the parameters (n, 2*ell-1) and (n+1, 2* ell). --------------------------- Example ---------------------------- gap> UpperBound( 10, 3, 2 ); 85 gap> UpperBound( 25, 9, 8 ); 1211778792827540  ------------------------------------------------------------------ 7.1-9 LowerBoundMinimumDistance > LowerBoundMinimumDistance( C ) ___________________________________function In this form, LowerBoundMinimumDistance returns a lower bound for the minimum distance of code C. This command can also be called using the syntax LowerBoundMinimumDistance( n, k, F ). In this form, LowerBoundMinimumDistance returns a lower bound for the minimum distance of the best known linear code of length n, dimension k over field F. It uses the mechanism explained in section 7.1-13. --------------------------- Example ---------------------------- gap> C := BCHCode( 45, 7 ); a cyclic [45,23,7..9]6..16 BCH code, delta=7, b=1 over GF(2) gap> LowerBoundMinimumDistance( C ); 7 # designed distance is lower bound for minimum distance  gap> LowerBoundMinimumDistance( 45, 23, GF(2) ); 10  ------------------------------------------------------------------ 7.1-10 LowerBoundGilbertVarshamov > LowerBoundGilbertVarshamov( n, d, q ) ____________________________function This is the lower bound due (independently) to Gilbert and Varshamov. It says that for each n and d, there exists a linear code having length n and minimum distance d at least of size q^n-1/ SphereContent(n-1,d-2,GF(q)). --------------------------- Example ---------------------------- gap> LowerBoundGilbertVarshamov(3,2,2); 4 gap> LowerBoundGilbertVarshamov(3,3,2); 1 gap> LowerBoundMinimumDistance(3,3,2); 1 gap> LowerBoundMinimumDistance(3,2,2); 2 ------------------------------------------------------------------ 7.1-11 LowerBoundSpherePacking > LowerBoundSpherePacking( n, d, q ) _______________________________function This is the lower bound due (independently) to Gilbert and Varshamov. It says that for each n and r, there exists an unrestricted code at least of size q^n/ SphereContent(n,d,GF(q)) minimum distance d. --------------------------- Example ---------------------------- gap> LowerBoundSpherePacking(3,2,2); 2 gap> LowerBoundSpherePacking(3,3,2); 1 ------------------------------------------------------------------ 7.1-12 UpperBoundMinimumDistance > UpperBoundMinimumDistance( C ) ___________________________________function In this form, UpperBoundMinimumDistance returns an upper bound for the minimum distance of code C. For unrestricted codes, it just returns the word length. For linear codes, it takes the minimum of the possibly known value from the method of construction, the weight of the generators, and the value from the table (see 7.1-13). This command can also be called using the syntax UpperBoundMinimumDistance( n, k, F ). In this form, UpperBoundMinimumDistance returns an upper bound for the minimum distance of the best known linear code of length n, dimension k over field F. It uses the mechanism explained in section 7.1-13. --------------------------- Example ---------------------------- gap> C := BCHCode( 45, 7 );; gap> UpperBoundMinimumDistance( C ); 9  gap> UpperBoundMinimumDistance( 45, 23, GF(2) ); 11  ------------------------------------------------------------------ 7.1-13 BoundsMinimumDistance > BoundsMinimumDistance( n, k, F ) _________________________________function The function BoundsMinimumDistance calculates a lower and upper bound for the minimum distance of an optimal linear code with word length n, dimension k over field F. The function returns a record with the two bounds and an explanation for each bound. The function Display can be used to show the explanations. The values for the lower and upper bound are obtained from a table. GUAVA has tables containing lower and upper bounds for q=2 (n <= 257), 3 (n <= 243), 4 (n <= 256). (Current as of 11 May 2006.) These tables were derived from the table of Brouwer. (See [Bro06], http://www.win.tue.nl/~aeb/voorlincod.html for the most recent data.) For codes over other fields and for larger word lengths, trivial bounds are used. The resulting record can be used in the function BestKnownLinearCode (see BestKnownLinearCode (5.2-14)) to construct a code with minimum distance equal to the lower bound. --------------------------- Example ---------------------------- gap> bounds := BoundsMinimumDistance( 7, 3 );; DisplayBoundsInfo( bounds ); an optimal linear [7,3,d] code over GF(2) has d=4 ------------------------------------------------------------------------------ Lb(7,3)=4, by shortening of: Lb(8,4)=4, u u+v construction of C1 and C2: Lb(4,3)=2, dual of the repetition code Lb(4,1)=4, repetition code ------------------------------------------------------------------------------ Ub(7,3)=4, Griesmer bound # The lower bound is equal to the upper bound, so a code with # these parameters is optimal. gap> C := BestKnownLinearCode( bounds );; Display( C ); a linear [7,3,4]2..3 shortened code of a linear [8,4,4]2 U U+V construction code of U: a cyclic [4,3,2]1 dual code of  a cyclic [4,1,4]2 repetition code over GF(2) V: a cyclic [4,1,4]2 repetition code over GF(2) ------------------------------------------------------------------ 7.2 Covering radius bounds on codes 7.2-1 BoundsCoveringRadius > BoundsCoveringRadius( C ) ________________________________________function BoundsCoveringRadius returns a list of integers. The first entry of this list is the maximum of some lower bounds for the covering radius of C, the last entry the minimum of some upper bounds of C. If the covering radius of C is known, a list of length 1 is returned. BoundsCoveringRadius makes use of the functions GeneralLowerBoundCoveringRadius and GeneralUpperBoundCoveringRadius. --------------------------- Example ---------------------------- gap> BoundsCoveringRadius( BCHCode( 17, 3, GF(2) ) ); [ 3 .. 4 ] gap> BoundsCoveringRadius( HammingCode( 5, GF(2) ) ); [ 1 ]  ------------------------------------------------------------------ 7.2-2 IncreaseCoveringRadiusLowerBound > IncreaseCoveringRadiusLowerBound( C[, stopdist][, startword] ) ___function IncreaseCoveringRadiusLowerBound tries to increase the lower bound of the covering radius of C. It does this by means of a probabilistic algorithm. This algorithm takes a random word in GF(q)^n (or startword if it is specified), and, by changing random coordinates, tries to get as far from C as possible. If changing a coordinate finds a word that has a larger distance to the code than the previous one, the change is made permanent, and the algorithm starts all over again. If changing a coordinate does not find a coset leader that is further away from the code, then the change is made permanent with a chance of 1 in 100, if it gets the word closer to the code, or with a chance of 1 in 10, if the word stays at the same distance. Otherwise, the algorithm starts again with the same word as before. If the algorithm did not allow changes that decrease the distance to the code, it might get stuck in a sub-optimal situation (the coset leader corresponding to such a situation - i.e. no coordinate of this coset leader can be changed in such a way that we get at a larger distance from the code - is called an orphan). If the algorithm finds a word that has distance stopdist to the code, it ends and returns that word, which can be used for further investigations. The variable InfoCoveringRadius can be set to Print to print the maximum distance reached so far every 1000 runs. The algorithm can be interrupted with ctrl-C, allowing the user to look at the word that is currently being examined (called `current'), or to change the chances that the new word is made permanent (these are called `staychance' and `downchance'). If one of these variables is i, then it corresponds with a i in 100 chance. At the moment, the algorithm is only useful for codes with small dimension, where small means that the elements of the code fit in the memory. It works with larger codes, however, but when you use it for codes with large dimension, you should be very patient. If running the algorithm quits GAP (due to memory problems), you can change the global variable CRMemSize to a lower value. This might cause the algorithm to run slower, but without quitting GAP. The only way to find out the best value of CRMemSize is by experimenting. --------------------------- Example ---------------------------- gap> C:=RandomLinearCode(10,5,GF(2)); a [10,5,?] randomly generated code over GF(2) gap> IncreaseCoveringRadiusLowerBound(C,10); Number of runs: 1000 best distance so far: 3 Number of runs: 2000 best distance so far: 3 Number of changes: 100 Number of runs: 3000 best distance so far: 3 Number of runs: 4000 best distance so far: 3 Number of runs: 5000 best distance so far: 3 Number of runs: 6000 best distance so far: 3 Number of runs: 7000 best distance so far: 3 Number of changes: 200 Number of runs: 8000 best distance so far: 3 Number of runs: 9000 best distance so far: 3 Number of runs: 10000 best distance so far: 3 Number of changes: 300 Number of runs: 11000 best distance so far: 3 Number of runs: 12000 best distance so far: 3 Number of runs: 13000 best distance so far: 3 Number of changes: 400 Number of runs: 14000 best distance so far: 3 user interrupt at...  # # used ctrl-c to break out of execution # ... called from  IncreaseCoveringRadiusLowerBound( code, -1, current ) called from  function( arguments ) called from read-eval-loop Entering break read-eval-print loop ... you can 'quit;' to quit to outer loop, or you can 'return;' to continue brk> current; [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ] brk> gap> CoveringRadius(C); 3  ------------------------------------------------------------------ 7.2-3 ExhaustiveSearchCoveringRadius > ExhaustiveSearchCoveringRadius( C ) ______________________________function ExhaustiveSearchCoveringRadius does an exhaustive search to find the covering radius of C. Every time a coset leader of a coset with weight w is found, the function tries to find a coset leader of a coset with weight w+1. It does this by enumerating all words of weight w+1, and checking whether a word is a coset leader. The start weight is the current known lower bound on the covering radius. --------------------------- Example ---------------------------- gap> C:=RandomLinearCode(10,5,GF(2)); a [10,5,?] randomly generated code over GF(2) gap> ExhaustiveSearchCoveringRadius(C); Trying 3 ... [ 3 .. 5 ] gap> CoveringRadius(C); 3  ------------------------------------------------------------------ 7.2-4 GeneralLowerBoundCoveringRadius > GeneralLowerBoundCoveringRadius( C ) _____________________________function GeneralLowerBoundCoveringRadius returns a lower bound on the covering radius of C. It uses as many functions which names start with LowerBoundCoveringRadius as possible to find the best known lower bound (at least that GUAVA knows of) together with tables for the covering radius of binary linear codes with length not greater than 64. --------------------------- Example ---------------------------- gap> C:=RandomLinearCode(10,5,GF(2)); a [10,5,?] randomly generated code over GF(2) gap> GeneralLowerBoundCoveringRadius(C); 2 gap> CoveringRadius(C); 3  ------------------------------------------------------------------ 7.2-5 GeneralUpperBoundCoveringRadius > GeneralUpperBoundCoveringRadius( C ) _____________________________function GeneralUpperBoundCoveringRadius returns an upper bound on the covering radius of C. It uses as many functions which names start with UpperBoundCoveringRadius as possible to find the best known upper bound (at least that GUAVA knows of). --------------------------- Example ---------------------------- gap> C:=RandomLinearCode(10,5,GF(2)); a [10,5,?] randomly generated code over GF(2) gap> GeneralUpperBoundCoveringRadius(C); 4 gap> CoveringRadius(C); 3  ------------------------------------------------------------------ 7.2-6 LowerBoundCoveringRadiusSphereCovering > LowerBoundCoveringRadiusSphereCovering( n, M[, F], false ) _______function This command can also be called using the syntax LowerBoundCoveringRadiusSphereCovering( n, r, [F,] true ). If the last argument of LowerBoundCoveringRadiusSphereCovering is false, then it returns a lower bound for the covering radius of a code of size M and length n. Otherwise, it returns a lower bound for the size of a code of length n and covering radius r. F is the field over which the code is defined. If F is omitted, it is assumed that the code is over GF(2). The bound is computed according to the sphere covering bound: M \cdot V_q(n,r) \geq q^n where V_q(n,r) is the size of a sphere of radius r in GF(q)^n. --------------------------- Example ---------------------------- gap> C:=RandomLinearCode(10,5,GF(2)); a [10,5,?] randomly generated code over GF(2) gap> Size(C); 32 gap> CoveringRadius(C); 3 gap> LowerBoundCoveringRadiusSphereCovering(10,32,GF(2),false); 2 gap> LowerBoundCoveringRadiusSphereCovering(10,3,GF(2),true); 6  ------------------------------------------------------------------ 7.2-7 LowerBoundCoveringRadiusVanWee1 > LowerBoundCoveringRadiusVanWee1( n, M[, F], false ) ______________function This command can also be called using the syntax LowerBoundCoveringRadiusVanWee1( n, r, [F,] true ). If the last argument of LowerBoundCoveringRadiusVanWee1 is false, then it returns a lower bound for the covering radius of a code of size M and length n. Otherwise, it returns a lower bound for the size of a code of length n and covering radius r. F is the field over which the code is defined. If F is omitted, it is assumed that the code is over GF(2). The Van Wee bound is an improvement of the sphere covering bound: M \cdot \left\{ V_q(n,r) - \frac{{n \choose r}}{\lceil\frac{n-r}{r+1}\rceil} \left(\left\lceil\frac{n+1}{r+1}\right\rceil - \frac{n+1}{r+1}\right) \right\} \geq q^n --------------------------- Example ---------------------------- gap> C:=RandomLinearCode(10,5,GF(2)); a [10,5,?] randomly generated code over GF(2) gap> Size(C); 32 gap> CoveringRadius(C); 3 gap> LowerBoundCoveringRadiusVanWee1(10,32,GF(2),false); 2 gap> LowerBoundCoveringRadiusVanWee1(10,3,GF(2),true); 6  ------------------------------------------------------------------ 7.2-8 LowerBoundCoveringRadiusVanWee2 > LowerBoundCoveringRadiusVanWee2( n, M, false ) ___________________function This command can also be called using the syntax LowerBoundCoveringRadiusVanWee2( n, r [,true] ). If the last argument of LowerBoundCoveringRadiusVanWee2 is false, then it returns a lower bound for the covering radius of a code of size M and length n. Otherwise, it returns a lower bound for the size of a code of length n and covering radius r. This bound only works for binary codes. It is based on the following inequality: M \cdot \frac{\left( \left( V_2(n,2) - \frac{1}{2}(r+2)(r-1) \right) V_2(n,r) + \varepsilon V_2(n,r-2) \right)} {(V_2(n,2) - \frac{1}{2}(r+2)(r-1) + \varepsilon)} \geq 2^n, where \varepsilon = {r+2 \choose 2} \left\lceil {n-r+1 \choose 2} / {r+2 \choose 2} \right\rceil - {n-r+1 \choose 2}. --------------------------- Example ---------------------------- gap> C:=RandomLinearCode(10,5,GF(2)); a [10,5,?] randomly generated code over GF(2) gap> Size(C); 32 gap> CoveringRadius(C); 3 gap> LowerBoundCoveringRadiusVanWee2(10,32,false); 2 gap> LowerBoundCoveringRadiusVanWee2(10,3,true); 7  ------------------------------------------------------------------ 7.2-9 LowerBoundCoveringRadiusCountingExcess > LowerBoundCoveringRadiusCountingExcess( n, M, false ) ____________function This command can also be called with LowerBoundCoveringRadiusCountingExcess( n, r [,true] ). If the last argument of LowerBoundCoveringRadiusCountingExcess is false, then it returns a lower bound for the covering radius of a code of size M and length n. Otherwise, it returns a lower bound for the size of a code of length n and covering radius r. This bound only works for binary codes. It is based on the following inequality: M \cdot \left( \rho V_2(n,r) + \varepsilon V_2(n,r-1) \right) \geq (\rho + \varepsilon) 2^n, where \varepsilon = (r+1) \left\lceil\frac{n+1}{r+1}\right\rceil - (n+1) and \rho = \left\{ \begin{array}{l} n-3+\frac{2}{n}, \ \ \ \ \ \ {\rm if}\ r = 2\\ n-r-1 , \ \ \ \ \ \ {\rm if}\ r \geq 3 . \end{array} \right. --------------------------- Example ---------------------------- gap> C:=RandomLinearCode(10,5,GF(2)); a [10,5,?] randomly generated code over GF(2) gap> Size(C); 32 gap> CoveringRadius(C); 3 gap> LowerBoundCoveringRadiusCountingExcess(10,32,false); 0 gap> LowerBoundCoveringRadiusCountingExcess(10,3,true); 7  ------------------------------------------------------------------ 7.2-10 LowerBoundCoveringRadiusEmbedded1 > LowerBoundCoveringRadiusEmbedded1( n, M, false ) _________________function This command can also be called with LowerBoundCoveringRadiusEmbedded1( n, r [,true] ). If the last argument of LowerBoundCoveringRadiusEmbedded1 is 'false', then it returns a lower bound for the covering radius of a code of size M and length n. Otherwise, it returns a lower bound for the size of a code of length n and covering radius r. This bound only works for binary codes. It is based on the following inequality: M \cdot \left( V_2(n,r) - {2r \choose r} \right) \geq 2^n - A( n, 2r+1 ) {2r \choose r}, where A(n,d) denotes the maximal cardinality of a (binary) code of length n and minimum distance d. The function UpperBound is used to compute this value. Sometimes LowerBoundCoveringRadiusEmbedded1 is better than LowerBoundCoveringRadiusEmbedded2, sometimes it is the other way around. --------------------------- Example ---------------------------- gap> C:=RandomLinearCode(10,5,GF(2)); a [10,5,?] randomly generated code over GF(2) gap> Size(C); 32 gap> CoveringRadius(C); 3 gap> LowerBoundCoveringRadiusEmbedded1(10,32,false); 2 gap> LowerBoundCoveringRadiusEmbedded1(10,3,true); 7  ------------------------------------------------------------------ 7.2-11 LowerBoundCoveringRadiusEmbedded2 > LowerBoundCoveringRadiusEmbedded2( n, M, false ) _________________function This command can also be called with LowerBoundCoveringRadiusEmbedded2( n, r [,true] ). If the last argument of LowerBoundCoveringRadiusEmbedded2 is 'false', then it returns a lower bound for the covering radius of a code of size M and length n. Otherwise, it returns a lower bound for the size of a code of length n and covering radius r. This bound only works for binary codes. It is based on the following inequality: M \cdot \left( V_2(n,r) - \frac{3}{2} {2r \choose r} \right) \geq 2^n - 2A( n, 2r+1 ) {2r \choose r}, where A(n,d) denotes the maximal cardinality of a (binary) code of length n and minimum distance d. The function UpperBound is used to compute this value. Sometimes LowerBoundCoveringRadiusEmbedded1 is better than LowerBoundCoveringRadiusEmbedded2, sometimes it is the other way around. --------------------------- Example ---------------------------- gap> C:=RandomLinearCode(15,5,GF(2)); a [15,5,?] randomly generated code over GF(2) gap> Size(C); 32 gap> CoveringRadius(C); 6 gap> LowerBoundCoveringRadiusEmbedded2(10,32,false); 2 gap> LowerBoundCoveringRadiusEmbedded2(10,3,true); 7  ------------------------------------------------------------------ 7.2-12 LowerBoundCoveringRadiusInduction > LowerBoundCoveringRadiusInduction( n, r ) ________________________function LowerBoundCoveringRadiusInduction returns a lower bound for the size of a code with length n and covering radius r. If n = 2r+2 and r >= 1, the returned value is 4. If n = 2r+3 and r >= 1, the returned value is 7. If n = 2r+4 and r >= 4, the returned value is 8. Otherwise, 0 is returned. --------------------------- Example ---------------------------- gap> C:=RandomLinearCode(15,5,GF(2)); a [15,5,?] randomly generated code over GF(2) gap> CoveringRadius(C); 5 gap> LowerBoundCoveringRadiusInduction(15,6); 7  ------------------------------------------------------------------ 7.2-13 UpperBoundCoveringRadiusRedundancy > UpperBoundCoveringRadiusRedundancy( C ) __________________________function UpperBoundCoveringRadiusRedundancy returns the redundancy of C as an upper bound for the covering radius of C. C must be a linear code. --------------------------- Example ---------------------------- gap> C:=RandomLinearCode(15,5,GF(2)); a [15,5,?] randomly generated code over GF(2) gap> CoveringRadius(C); 5 gap> UpperBoundCoveringRadiusRedundancy(C); 10  ------------------------------------------------------------------ 7.2-14 UpperBoundCoveringRadiusDelsarte > UpperBoundCoveringRadiusDelsarte( C ) ____________________________function UpperBoundCoveringRadiusDelsarte returns an upper bound for the covering radius of C. This upper bound is equal to the external distance of C, this is the minimum distance of the dual code, if C is a linear code. This is described in Theorem 11.3.3 of [HP03]. --------------------------- Example ---------------------------- gap> C:=RandomLinearCode(15,5,GF(2)); a [15,5,?] randomly generated code over GF(2) gap> CoveringRadius(C); 5 gap> UpperBoundCoveringRadiusDelsarte(C); 13 ------------------------------------------------------------------ 7.2-15 UpperBoundCoveringRadiusStrength > UpperBoundCoveringRadiusStrength( C ) ____________________________function UpperBoundCoveringRadiusStrength returns an upper bound for the covering radius of C. First the code is punctured at the zero coordinates (i.e. the coordinates where all codewords have a zero). If the remaining code has strength 1 (i.e. each coordinate contains each element of the field an equal number of times), then it returns fracq-1qm + (n-m) (where q is the size of the field and m is the length of punctured code), otherwise it returns n. This bound works for all codes. --------------------------- Example ---------------------------- gap> C:=RandomLinearCode(15,5,GF(2)); a [15,5,?] randomly generated code over GF(2) gap> CoveringRadius(C); 5 gap> UpperBoundCoveringRadiusStrength(C); 7 ------------------------------------------------------------------ 7.2-16 UpperBoundCoveringRadiusGriesmerLike > UpperBoundCoveringRadiusGriesmerLike( C ) ________________________function This function returns an upper bound for the covering radius of C, which must be linear, in a Griesmer-like fashion. It returns n - \sum_{i=1}^k \left\lceil \frac{d}{q^i} \right\rceil --------------------------- Example ---------------------------- gap> C:=RandomLinearCode(15,5,GF(2)); a [15,5,?] randomly generated code over GF(2) gap> CoveringRadius(C); 5 gap> UpperBoundCoveringRadiusGriesmerLike(C); 9  ------------------------------------------------------------------ 7.2-17 UpperBoundCoveringRadiusCyclicCode > UpperBoundCoveringRadiusCyclicCode( C ) __________________________function This function returns an upper bound for the covering radius of C, which must be a cyclic code. It returns n - k + 1 - \left\lceil \frac{w(g(x))}{2} \right\rceil, where g(x) is the generator polynomial of C. --------------------------- Example ---------------------------- gap> C:=CyclicCodes(15,GF(2))[3]; a cyclic [15,12,1..2]1..3 enumerated code over GF(2) gap> CoveringRadius(C); 3 gap> UpperBoundCoveringRadiusCyclicCode(C); 3  ------------------------------------------------------------------ 7.3 Special matrices in GUAVA This section explains functions that work with special matrices GUAVA needs for several codes. Firstly, we describe some matrix generating functions (see KrawtchoukMat (7.3-1), GrayMat (7.3-2), SylvesterMat (7.3-3), HadamardMat (7.3-4) and MOLS (7.3-11)). Next we describe two functions regarding a standard form of matrices (see PutStandardForm (7.3-6) and IsInStandardForm (7.3-7)). Then we describe functions that return a matrix after a manipulation (see PermutedCols (7.3-8), VerticalConversionFieldMat (7.3-9) and HorizontalConversionFieldMat (7.3-10)). Finally, we describe functions that do some tests on matrices (see IsLatinSquare (7.3-12) and AreMOLS (7.3-13)). 7.3-1 KrawtchoukMat > KrawtchoukMat( n, q ) ____________________________________________function KrawtchoukMat returns the n+1 by n+1 matrix K=(k_ij) defined by k_ij=K_i(j) for i,j=0,...,n. K_i(j) is the Krawtchouk number (see Krawtchouk (7.5-6)). n must be a positive integer and q a prime power. The Krawtchouk matrix is used in the MacWilliams identities, defining the relation between the weight distribution of a code of length n over a field of size q, and its dual code. Each call to KrawtchoukMat returns a new matrix, so it is safe to modify the result. --------------------------- Example ---------------------------- gap> PrintArray( KrawtchoukMat( 3, 2 ) ); [ [ 1, 1, 1, 1 ],  [ 3, 1, -1, -3 ],  [ 3, -1, -1, 3 ],  [ 1, -1, 1, -1 ] ] gap> C := HammingCode( 3 );; a := WeightDistribution( C ); [ 1, 0, 0, 7, 7, 0, 0, 1 ] gap> n := WordLength( C );; q := Size( LeftActingDomain( C ) );; gap> k := Dimension( C );; gap> q^( -k ) * KrawtchoukMat( n, q ) * a; [ 1, 0, 0, 0, 7, 0, 0, 0 ] gap> WeightDistribution( DualCode( C ) ); [ 1, 0, 0, 0, 7, 0, 0, 0 ]  ------------------------------------------------------------------ 7.3-2 GrayMat > GrayMat( n, F ) __________________________________________________function GrayMat returns a list of all different vectors (see GAP's Vectors command) of length n over the field F, using Gray ordering. n must be a positive integer. This order has the property that subsequent vectors differ in exactly one coordinate. The first vector is always the null vector. Each call to GrayMat returns a new matrix, so it is safe to modify the result. --------------------------- Example ---------------------------- gap> GrayMat(3); [ [ 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0 ],  [ 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2) ],  [ Z(2)^0, Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0 ],  [ Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2) ] ] gap> G := GrayMat( 4, GF(4) );; Length(G); 256 # the length of a GrayMat is always q^n gap> G[101] - G[100]; [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ]  ------------------------------------------------------------------ 7.3-3 SylvesterMat > SylvesterMat( n ) ________________________________________________function SylvesterMat returns the nx n Sylvester matrix of order n. This is a special case of the Hadamard matrices (see HadamardMat (7.3-4)). For this construction, n must be a power of 2. Each call to SylvesterMat returns a new matrix, so it is safe to modify the result. --------------------------- Example ---------------------------- gap> PrintArray(SylvesterMat(2)); [ [ 1, 1 ],  [ 1, -1 ] ] gap> PrintArray( SylvesterMat(4) ); [ [ 1, 1, 1, 1 ],  [ 1, -1, 1, -1 ],  [ 1, 1, -1, -1 ],  [ 1, -1, -1, 1 ] ]  ------------------------------------------------------------------ 7.3-4 HadamardMat > HadamardMat( n ) _________________________________________________function HadamardMat returns a Hadamard matrix of order n. This is an nx n matrix with the property that the matrix multiplied by its transpose returns n times the identity matrix. This is only possible for n=1, n=2 or in cases where n is a multiple of 4. If the matrix does not exist or is not known (as of 1998), HadamardMat returns an error. A large number of construction methods is known to create these matrices for different orders. HadamardMat makes use of two construction methods (the Paley Type I and II constructions, and the Sylvester construction -- see SylvesterMat (7.3-3)). These methods cover most of the possible Hadamard matrices, although some special algorithms have not been implemented yet. The following orders less than 100 do not yet have an implementation for a Hadamard matrix in GUAVA: 52, 92. --------------------------- Example ---------------------------- gap> C := HadamardMat(8);; PrintArray(C); [ [ 1, 1, 1, 1, 1, 1, 1, 1 ],  [ 1, -1, 1, -1, 1, -1, 1, -1 ],  [ 1, 1, -1, -1, 1, 1, -1, -1 ],  [ 1, -1, -1, 1, 1, -1, -1, 1 ],  [ 1, 1, 1, 1, -1, -1, -1, -1 ],  [ 1, -1, 1, -1, -1, 1, -1, 1 ],  [ 1, 1, -1, -1, -1, -1, 1, 1 ],  [ 1, -1, -1, 1, -1, 1, 1, -1 ] ] gap> C * TransposedMat(C) = 8 * IdentityMat( 8, 8 ); true  ------------------------------------------------------------------ 7.3-5 VandermondeMat > VandermondeMat( X, a ) ___________________________________________function The function VandermondeMat returns the (a+1)x n matrix of powers x_i^j where X is a list of elements of a field, X= x_1,...,x_n, and a is a non-negative integer. --------------------------- Example ---------------------------- gap> M:=VandermondeMat([Z(5),Z(5)^2,Z(5)^0,Z(5)^3],2); [ [ Z(5)^0, Z(5), Z(5)^2 ], [ Z(5)^0, Z(5)^2, Z(5)^0 ],  [ Z(5)^0, Z(5)^0, Z(5)^0 ], [ Z(5)^0, Z(5)^3, Z(5)^2 ] ] gap> Display(M);  1 2 4  1 4 1  1 1 1  1 3 4 ------------------------------------------------------------------ 7.3-6 PutStandardForm > PutStandardForm( M[, idleft] ) ___________________________________function We say that a kx n matrix is in standard form if it is equal to the block matrix (I | A), for some kx (n-k) matrix A and where I is the kx k identity matrix. It follows from a basis result in linear algebra that, after a possible permutation of the columns, using elementary row operations, every matrix can be reduced to standard form. PutStandardForm puts a matrix M in standard form, and returns the permutation needed to do so. idleft is a boolean that sets the position of the identity matrix in M. (The default for idleft is `true'.) If idleft is set to `true', the identity matrix is put on the left side of M. Otherwise, it is put at the right side. (This option is useful when putting a check matrix of a code into standard form.) The function BaseMat also returns a similar standard form, but does not apply column permutations. The rows of the matrix still span the same vector space after BaseMat, but after calling PutStandardForm, this is not necessarily true. --------------------------- Example ---------------------------- gap> M := Z(2)*[[1,0,0,1],[0,0,1,1]];; PrintArray(M); [ [ Z(2), 0*Z(2), 0*Z(2), Z(2) ],  [ 0*Z(2), 0*Z(2), Z(2), Z(2) ] ] gap> PutStandardForm(M); # identity at the left side (2,3) gap> PrintArray(M); [ [ Z(2), 0*Z(2), 0*Z(2), Z(2) ],  [ 0*Z(2), Z(2), 0*Z(2), Z(2) ] ] gap> PutStandardForm(M, false); # identity at the right side (1,4,3) gap> PrintArray(M); [ [ 0*Z(2), Z(2), Z(2), 0*Z(2) ],  [ 0*Z(2), Z(2), 0*Z(2), Z(2) ] ] gap> C := BestKnownLinearCode( 23, 12, GF(2) ); a linear [23,12,7]3 punctured code gap> G:=MutableCopyMat(GeneratorMat(C));; gap> PutStandardForm(G); () gap> Display(G);  1 . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1  . 1 . . . . . . . . . . 1 1 1 1 1 . . 1 . . .  . . 1 . . . . . . . . . 1 1 . 1 . . 1 . 1 . 1  . . . 1 . . . . . . . . 1 1 . . . 1 1 1 . 1 .  . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 . 1  . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1 1  . . . . . . 1 . . . . . . . 1 1 . . 1 1 . 1 1  . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 . .  . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 1 .  . . . . . . . . . 1 . . . . 1 . 1 1 . 1 1 1 .  . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1 1  . . . . . . . . . . . 1 . 1 . 1 1 1 . . . 1 1  ------------------------------------------------------------------ 7.3-7 IsInStandardForm > IsInStandardForm( M[, idleft] ) __________________________________function IsInStandardForm determines if M is in standard form. idleft is a boolean that indicates the position of the identity matrix in M, as in PutStandardForm (see PutStandardForm (7.3-6)). IsInStandardForm checks if the identity matrix is at the left side of M, otherwise if it is at the right side. The elements of M may be elements of any field. --------------------------- Example ---------------------------- gap> IsInStandardForm(IdentityMat(7, GF(2))); true gap> IsInStandardForm([[1, 1, 0], [1, 0, 1]], false); true gap> IsInStandardForm([[1, 3, 2, 7]]); true gap> IsInStandardForm(HadamardMat(4)); false  ------------------------------------------------------------------ 7.3-8 PermutedCols > PermutedCols( M, P ) _____________________________________________function PermutedCols returns a matrix M with a permutation P applied to its columns. --------------------------- Example ---------------------------- gap> M := [[1,2,3,4],[1,2,3,4]];; PrintArray(M); [ [ 1, 2, 3, 4 ],  [ 1, 2, 3, 4 ] ] gap> PrintArray(PermutedCols(M, (1,2,3))); [ [ 3, 1, 2, 4 ],  [ 3, 1, 2, 4 ] ]  ------------------------------------------------------------------ 7.3-9 VerticalConversionFieldMat > VerticalConversionFieldMat( M, F ) _______________________________function VerticalConversionFieldMat returns the matrix M with its elements converted from a field F=GF(q^m), q prime, to a field GF(q). Each element is replaced by its representation over the latter field, placed vertically in the matrix, using the GF(p)-vector space isomorphism [...] : GF(q)\rightarrow GF(p)^m, with q=p^m. If M is a k by n matrix, the result is a k* m x n matrix, since each element of GF(q^m) can be represented in GF(q) using m elements. --------------------------- Example ---------------------------- gap> M := Z(9)*[[1,2],[2,1]];; PrintArray(M); [ [ Z(3^2), Z(3^2)^5 ],  [ Z(3^2)^5, Z(3^2) ] ] gap> DefaultField( Flat(M) ); GF(3^2) gap> VCFM := VerticalConversionFieldMat( M, GF(9) );; PrintArray(VCFM); [ [ 0*Z(3), 0*Z(3) ],  [ Z(3)^0, Z(3) ],  [ 0*Z(3), 0*Z(3) ],  [ Z(3), Z(3)^0 ] ] gap> DefaultField( Flat(VCFM) ); GF(3)  ------------------------------------------------------------------ A similar function is HorizontalConversionFieldMat (see HorizontalConversionFieldMat (7.3-10)). 7.3-10 HorizontalConversionFieldMat > HorizontalConversionFieldMat( M, F ) _____________________________function HorizontalConversionFieldMat returns the matrix M with its elements converted from a field F=GF(q^m), q prime, to a field GF(q). Each element is replaced by its representation over the latter field, placed horizontally in the matrix. If M is a k x n matrix, the result is a kx mx n* m matrix. The new word length of the resulting code is equal to n* m, because each element of GF(q^m) can be represented in GF(q) using m elements. The new dimension is equal to kx m because the new matrix should be a basis for the same number of vectors as the old one. ConversionFieldCode uses horizontal conversion to convert a code (see ConversionFieldCode (6.1-15)). --------------------------- Example ---------------------------- gap> M := Z(9)*[[1,2],[2,1]];; PrintArray(M); [ [ Z(3^2), Z(3^2)^5 ],  [ Z(3^2)^5, Z(3^2) ] ] gap> DefaultField( Flat(M) ); GF(3^2) gap> HCFM := HorizontalConversionFieldMat(M, GF(9));; PrintArray(HCFM); [ [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3) ],  [ Z(3)^0, Z(3)^0, Z(3), Z(3) ],  [ 0*Z(3), Z(3), 0*Z(3), Z(3)^0 ],  [ Z(3), Z(3), Z(3)^0, Z(3)^0 ] ] gap> DefaultField( Flat(HCFM) ); GF(3)  ------------------------------------------------------------------ A similar function is VerticalConversionFieldMat (see VerticalConversionFieldMat (7.3-9)). 7.3-11 MOLS > MOLS( q[, n] ) ___________________________________________________function MOLS returns a list of n Mutually Orthogonal Latin Squares (MOLS). A Latin square of order q is a qx q matrix whose entries are from a set F_q of q distinct symbols (GUAVA uses the integers from 0 to q) such that each row and each column of the matrix contains each symbol exactly once. A set of Latin squares is a set of MOLS if and only if for each pair of Latin squares in this set, every ordered pair of elements that are in the same position in these matrices occurs exactly once. n must be less than q. If n is omitted, two MOLS are returned. If q is not a prime power, at most 2 MOLS can be created. For all values of q with q > 2 and q <> 6, a list of MOLS can be constructed. However, GUAVA does not yet construct MOLS for q= 2 mod 4. If it is not possible to construct n MOLS, the function returns `false'. MOLS are used to create q-ary codes (see MOLSCode (5.1-4)). --------------------------- Example ---------------------------- gap> M := MOLS( 4, 3 );;PrintArray( M[1] ); [ [ 0, 1, 2, 3 ],  [ 1, 0, 3, 2 ],  [ 2, 3, 0, 1 ],  [ 3, 2, 1, 0 ] ] gap> PrintArray( M[2] ); [ [ 0, 2, 3, 1 ],  [ 1, 3, 2, 0 ],  [ 2, 0, 1, 3 ],  [ 3, 1, 0, 2 ] ] gap> PrintArray( M[3] ); [ [ 0, 3, 1, 2 ],  [ 1, 2, 0, 3 ],  [ 2, 1, 3, 0 ],  [ 3, 0, 2, 1 ] ] gap> MOLS( 12, 3 ); false  ------------------------------------------------------------------ 7.3-12 IsLatinSquare > IsLatinSquare( M ) _______________________________________________function IsLatinSquare determines if a matrix M is a Latin square. For a Latin square of size nx n, each row and each column contains all the integers 1,dots,n exactly once. --------------------------- Example ---------------------------- gap> IsLatinSquare([[1,2],[2,1]]); true gap> IsLatinSquare([[1,2,3],[2,3,1],[1,3,2]]); false  ------------------------------------------------------------------ 7.3-13 AreMOLS > AreMOLS( L ) _____________________________________________________function AreMOLS determines if L is a list of mutually orthogonal Latin squares (MOLS). For each pair of Latin squares in this list, the function checks if each ordered pair of elements that are in the same position in these matrices occurs exactly once. The function MOLS creates MOLS (see MOLS (7.3-11)). --------------------------- Example ---------------------------- gap> M := MOLS(4,2); [ [ [ 0, 1, 2, 3 ], [ 1, 0, 3, 2 ], [ 2, 3, 0, 1 ], [ 3, 2, 1, 0 ] ],  [ [ 0, 2, 3, 1 ], [ 1, 3, 2, 0 ], [ 2, 0, 1, 3 ], [ 3, 1, 0, 2 ] ] ] gap> AreMOLS(M); true  ------------------------------------------------------------------ 7.4 Some functions related to the norm of a code In this section, some functions that can be used to compute the norm of a code and to decide upon its normality are discussed. Typically, these are applied to binary linear codes. The definitions of this section were introduced in Graham and Sloane [GS85]. 7.4-1 CoordinateNorm > CoordinateNorm( C, coord ) _______________________________________function CoordinateNorm returns the norm of C with respect to coordinate coord. If C_a = c in C | c_coord = a, then the norm of C with respect to coord is defined as \max_{v \in GF(q)^n} \sum_{a=1}^q d(x,C_a), with the convention that d(x,C_a) = n if C_a is empty. --------------------------- Example ---------------------------- gap> CoordinateNorm( HammingCode( 3, GF(2) ), 3 ); 3  ------------------------------------------------------------------ 7.4-2 CodeNorm > CodeNorm( C ) ____________________________________________________function CodeNorm returns the norm of C. The norm of a code is defined as the minimum of the norms for the respective coordinates of the code. In effect, for each coordinate CoordinateNorm is called, and the minimum of the calculated numbers is returned. --------------------------- Example ---------------------------- gap> CodeNorm( HammingCode( 3, GF(2) ) ); 3  ------------------------------------------------------------------ 7.4-3 IsCoordinateAcceptable > IsCoordinateAcceptable( C, coord ) _______________________________function IsCoordinateAcceptable returns `true' if coordinate coord of C is acceptable. A coordinate is called acceptable if the norm of the code with respect to that coordinate is not more than two times the covering radius of the code plus one. --------------------------- Example ---------------------------- gap> IsCoordinateAcceptable( HammingCode( 3, GF(2) ), 3 ); true  ------------------------------------------------------------------ 7.4-4 GeneralizedCodeNorm > GeneralizedCodeNorm( C, subcode1, subscode2, ..., subcodek ) _____function GeneralizedCodeNorm returns the k-norm of C with respect to k subcodes. --------------------------- Example ---------------------------- gap> c := RepetitionCode( 7, GF(2) );; gap> ham := HammingCode( 3, GF(2) );; gap> d := EvenWeightSubcode( ham );; gap> e := ConstantWeightSubcode( ham, 3 );; gap> GeneralizedCodeNorm( ham, c, d, e ); 4  ------------------------------------------------------------------ 7.4-5 IsNormalCode > IsNormalCode( C ) ________________________________________________function IsNormalCode returns `true' if C is normal. A code is called normal if the norm of the code is not more than two times the covering radius of the code plus one. Almost all codes are normal, however some (non-linear) abnormal codes have been found. Often, it is difficult to find out whether a code is normal, because it involves computing the covering radius. However, IsNormalCode uses much information from the literature (in particular, [GS85]) about normality for certain code parameters. --------------------------- Example ---------------------------- gap> IsNormalCode( HammingCode( 3, GF(2) ) ); true  ------------------------------------------------------------------ 7.5 Miscellaneous functions In this section we describe several vector space functions GUAVA uses for constructing codes or performing calculations with codes. In this section, some new miscellaneous functions are described, including weight enumerators, the MacWilliams-transform and affinity and almost affinity of codes. 7.5-1 CodeWeightEnumerator > CodeWeightEnumerator( C ) ________________________________________function CodeWeightEnumerator returns a polynomial of the following form: f(x) = \sum_{i=0}^{n} A_i x^i, where A_i is the number of codewords in C with weight i. --------------------------- Example ---------------------------- gap> CodeWeightEnumerator( ElementsCode( [ [ 0,0,0 ], [ 0,0,1 ], > [ 0,1,1 ], [ 1,1,1 ] ], GF(2) ) ); x^3 + x^2 + x + 1 gap> CodeWeightEnumerator( HammingCode( 3, GF(2) ) ); x^7 + 7*x^4 + 7*x^3 + 1  ------------------------------------------------------------------ 7.5-2 CodeDistanceEnumerator > CodeDistanceEnumerator( C, w ) ___________________________________function CodeDistanceEnumerator returns a polynomial of the following form: f(x) = \sum_{i=0}^{n} B_i x^i, where B_i is the number of codewords with distance i to w. If w is a codeword, then CodeDistanceEnumerator returns the same polynomial as CodeWeightEnumerator. --------------------------- Example ---------------------------- gap> CodeDistanceEnumerator( HammingCode( 3, GF(2) ),[0,0,0,0,0,0,1] ); x^6 + 3*x^5 + 4*x^4 + 4*x^3 + 3*x^2 + x gap> CodeDistanceEnumerator( HammingCode( 3, GF(2) ),[1,1,1,1,1,1,1] ); x^7 + 7*x^4 + 7*x^3 + 1 # `[1,1,1,1,1,1,1]' $\in$ `HammingCode( 3, GF(2 ) )' ------------------------------------------------------------------ 7.5-3 CodeMacWilliamsTransform > CodeMacWilliamsTransform( C ) ____________________________________function CodeMacWilliamsTransform returns a polynomial of the following form: f(x) = \sum_{i=0}^{n} C_i x^i, where C_i is the number of codewords with weight i in the dual code of C. --------------------------- Example ---------------------------- gap> CodeMacWilliamsTransform( HammingCode( 3, GF(2) ) ); 7*x^4 + 1  ------------------------------------------------------------------ 7.5-4 CodeDensity > CodeDensity( C ) _________________________________________________function CodeDensity returns the density of C. The density of a code is defined as \frac{M \cdot V_q(n,t)}{q^n}, where M is the size of the code, V_q(n,t) is the size of a sphere of radius t in GF(q^n) (which may be computed using SphereContent), t is the covering radius of the code and n is the length of the code. --------------------------- Example ---------------------------- gap> CodeDensity( HammingCode( 3, GF(2) ) ); 1 gap> CodeDensity( ReedMullerCode( 1, 4 ) ); 14893/2048  ------------------------------------------------------------------ 7.5-5 SphereContent > SphereContent( n, t, F ) _________________________________________function SphereContent returns the content of a ball of radius t around an arbitrary element of the vectorspace F^n. This is the cardinality of the set of all elements of F^n that are at distance (see DistanceCodeword (3.6-2) less than or equal to t from an element of F^n. In the context of codes, the function is used to determine if a code is perfect. A code is perfect if spheres of radius t around all codewords partition the whole ambient vector space, where t is the number of errors the code can correct. --------------------------- Example ---------------------------- gap> SphereContent( 15, 0, GF(2) ); 1 # Only one word with distance 0, which is the word itself gap> SphereContent( 11, 3, GF(4) ); 4984 gap> C := HammingCode(5); a linear [31,26,3]1 Hamming (5,2) code over GF(2) #the minimum distance is 3, so the code can correct one error gap> ( SphereContent( 31, 1, GF(2) ) * Size(C) ) = 2 ^ 31; true  ------------------------------------------------------------------ 7.5-6 Krawtchouk > Krawtchouk( k, i, n, q ) _________________________________________function Krawtchouk returns the Krawtchouk number K_k(i). q must be a prime power, n must be a positive integer, k must be a non-negative integer less then or equal to n and i can be any integer. (See KrawtchoukMat (7.3-1)). This number is the value at x=i of the polynomial K_k^{n,q}(x) =\sum_{j=0}^n (-1)^j(q-1)^{k-j}b(x,j)b(n-x,k-j), where $b(v,u)=u!/(v!(v-u)!)$ is the binomial coefficient if $u,v$ are integers. For more properties of these polynomials, see [MS83]. --------------------------- Example ---------------------------- gap> Krawtchouk( 2, 0, 3, 2); 3  ------------------------------------------------------------------ 7.5-7 PrimitiveUnityRoot > PrimitiveUnityRoot( F, n ) _______________________________________function PrimitiveUnityRoot returns a primitive n-th root of unity in an extension field of F. This is a finite field element a with the property a^n=1 in F, and n is the smallest integer such that this equality holds. --------------------------- Example ---------------------------- gap> PrimitiveUnityRoot( GF(2), 15 ); Z(2^4) gap> last^15; Z(2)^0 gap> PrimitiveUnityRoot( GF(8), 21 ); Z(2^6)^3  ------------------------------------------------------------------ 7.5-8 PrimitivePolynomialsNr > PrimitivePolynomialsNr( n, F ) ___________________________________function PrimitivePolynomialsNr returns the number of irreducible polynomials over F=GF(q) of degree n with (maximum) period q^n-1. (According to a theorem of S. Golomb, this is phi(p^n-1)/n.) See also the GAP function RandomPrimitivePolynomial, RandomPrimitivePolynomial (2.2-2). --------------------------- Example ---------------------------- gap> PrimitivePolynomialsNr(3,4); 12  ------------------------------------------------------------------ 7.5-9 IrreduciblePolynomialsNr > IrreduciblePolynomialsNr( n, F ) _________________________________function PrimitivePolynomialsNr returns the number of irreducible polynomials over F=GF(q) of degree n. --------------------------- Example ---------------------------- gap> IrreduciblePolynomialsNr(3,4); 20  ------------------------------------------------------------------ 7.5-10 MatrixRepresentationOfElement > MatrixRepresentationOfElement( a, F ) ____________________________function Here F is either a finite extension of the ``base field'' GF(p) or of the rationals Q}, and ain F. The command MatrixRepresentationOfElement returns a matrix representation of a over the base field. If the element a is defined over the base field then it returns the corresponding 1x 1 matrix. --------------------------- Example ---------------------------- gap> a:=Random(GF(4)); 0*Z(2) gap> M:=MatrixRepresentationOfElement(a,GF(4));; Display(M);  . gap> a:=Random(GF(4)); Z(2^2) gap> M:=MatrixRepresentationOfElement(a,GF(4));; Display(M);  . 1  1 1 gap>  ------------------------------------------------------------------ 7.5-11 ReciprocalPolynomial > ReciprocalPolynomial( P ) ________________________________________function ReciprocalPolynomial returns the reciprocal of polynomial P. This is a polynomial with coefficients of P in the reverse order. So if P=a_0 + a_1 X + ... + a_n X^n, the reciprocal polynomial is P'=a_n + a_n-1 X + ... + a_0 X^n. This command can also be called using the syntax ReciprocalPolynomial( P , n ). In this form, the number of coefficients of P is assumed to be less than or equal to n+1 (with zero coefficients added in the highest degrees, if necessary). Therefore, the reciprocal polynomial also has degree n+1. --------------------------- Example ---------------------------- gap> P := UnivariatePolynomial( GF(3), Z(3)^0 * [1,0,1,2] ); Z(3)^0+x_1^2-x_1^3 gap> RecP := ReciprocalPolynomial( P ); -Z(3)^0+x_1+x_1^3 gap> ReciprocalPolynomial( RecP ) = P; true  gap> P := UnivariatePolynomial( GF(3), Z(3)^0 * [1,0,1,2] ); Z(3)^0+x_1^2-x_1^3 gap> ReciprocalPolynomial( P, 6 ); -x_1^3+x_1^4+x_1^6 ------------------------------------------------------------------ 7.5-12 CyclotomicCosets > CyclotomicCosets( q, n ) _________________________________________function CyclotomicCosets returns the cyclotomic cosets of q mod n. q and n must be relatively prime. Each of the elements of the returned list is a list of integers that belong to one cyclotomic coset. A q-cyclotomic coset of s mod n is a set of the form s,sq,sq^2,...,sq^r-1, where r is the smallest positive integer such that sq^r-s is 0 mod n. In other words, each coset contains all multiplications of the coset representative by q mod n. The coset representative is the smallest integer that isn't in the previous cosets. --------------------------- Example ---------------------------- gap> CyclotomicCosets( 2, 15 ); [ [ 0 ], [ 1, 2, 4, 8 ], [ 3, 6, 12, 9 ], [ 5, 10 ],  [ 7, 14, 13, 11 ] ] gap> CyclotomicCosets( 7, 6 ); [ [ 0 ], [ 1 ], [ 2 ], [ 3 ], [ 4 ], [ 5 ] ]  ------------------------------------------------------------------ 7.5-13 WeightHistogram > WeightHistogram( C[, h] ) ________________________________________function The function WeightHistogram plots a histogram of weights in code C. The maximum length of a column is h. Default value for h is 1/3 of the size of the screen. The number that appears at the top of the histogram is the maximum value of the list of weights. --------------------------- Example ---------------------------- gap> H := HammingCode(2, GF(5)); a linear [6,4,3]1 Hamming (2,5) code over GF(5) gap> WeightDistribution(H); [ 1, 0, 0, 80, 120, 264, 160 ] gap> WeightHistogram(H); 264----------------  *  *  *  *  * *  * * *  * * * *  * * * * +--------+--+--+--+-- 0 1 2 3 4 5 6  ------------------------------------------------------------------ 7.5-14 MultiplicityInList > MultiplicityInList( L, a ) _______________________________________function This is a very simple list command which returns how many times a occurs in L. It returns 0 if a is not in L. (The GAP command Collected does not quite handle this "extreme" case.) --------------------------- Example ---------------------------- gap> L:=[1,2,3,4,3,2,1,5,4,3,2,1];; gap> MultiplicityInList(L,1); 3 gap> MultiplicityInList(L,6); 0 ------------------------------------------------------------------ 7.5-15 MostCommonInList > MostCommonInList( L ) ____________________________________________function Input: a list L Output: an a in L which occurs at least as much as any other in L --------------------------- Example ---------------------------- gap> L:=[1,2,3,4,3,2,1,5,4,3,2,1];; gap> MostCommonInList(L); 1 ------------------------------------------------------------------ 7.5-16 RotateList > RotateList( L ) __________________________________________________function Input: a list L Output: a list L' which is the cyclic rotation of L (to the right) --------------------------- Example ---------------------------- gap> L:=[1,2,3,4];; gap> RotateList(L); [2,3,4,1] ------------------------------------------------------------------ 7.5-17 CirculantMatrix > CirculantMatrix( k, L ) __________________________________________function Input: integer k, a list L of length n Output: kxn matrix whose rows are cyclic rotations of the list L --------------------------- Example ---------------------------- gap> k:=3; L:=[1,2,3,4];; gap> M:=CirculantMatrix(k,L);; gap> Display(M); ------------------------------------------------------------------ 7.6 Miscellaneous polynomial functions In this section we describe several multivariate polynomial GAP functions GUAVA uses for constructing codes or performing calculations with codes. 7.6-1 MatrixTransformationOnMultivariatePolynomial  > MatrixTransformationOnMultivariatePolynomial ( AfR ) _____________function A is an nx n matrix with entries in a field F, R is a polynomial ring of n variables, say F[x_1,...,x_n], and f is a polynomial in R. Returns the composition fcirc A. 7.6-2 DegreeMultivariatePolynomial > DegreeMultivariatePolynomial( f, R ) _____________________________function This command takes two arguments, f, a multivariate polynomial, and R a polynomial ring over a field F containing f, say R=F[x_1,x_2,...,x_n]. The output is simply the maximum degrees of all the monomials occurring in f. This command can be used to compute the degree of an affine plane curve. --------------------------- Example ---------------------------- gap> F:=GF(11);; gap> R2:=PolynomialRing(F,2); PolynomialRing(..., [ x_1, x_2 ]) gap> vars:=IndeterminatesOfPolynomialRing(R2);; gap> x:=vars[1];; y:=vars[2];; gap> poly:=y^2-x*(x^2-1);; gap> DegreeMultivariatePolynomial(poly,R2); 3  ------------------------------------------------------------------ 7.6-3 DegreesMultivariatePolynomial > DegreesMultivariatePolynomial( f, R ) ____________________________function Returns a list of information about the multivariate polynomial f. Nice for other programs but mostly unreadable by GAP users. --------------------------- Example ---------------------------- gap> F:=GF(11);; gap> R2:=PolynomialRing(F,2); PolynomialRing(..., [ x_1, x_2 ]) gap> vars:=IndeterminatesOfPolynomialRing(R2);; gap> x:=vars[1];; y:=vars[2];; gap> poly:=y^2-x*(x^2-1);; gap> DegreesMultivariatePolynomial(poly,R2); [ [ [ x_1, x_1, 1 ], [ x_1, x_2, 0 ] ], [ [ x_2^2, x_1, 0 ], [ x_2^2, x_2, 2 ] ],  [ [ x_1^3, x_1, 3 ], [ x_1^3, x_2, 0 ] ] ] gap>  ------------------------------------------------------------------ 7.6-4 CoefficientMultivariatePolynomial > CoefficientMultivariatePolynomial( f, var, power, R ) ____________function The command CoefficientMultivariatePolynomial takes four arguments: a multivariant polynomial f, a variable name var, an integer power, and a polynomial ring R containing f. For example, if f is a multivariate polynomial in R = F[x_1,x_2,...,x_n] then var must be one of the x_i. The output is the coefficient of x_i^power in f. (Not sure if F needs to be a field in fact ...) Related to the GAP command PolynomialCoefficientsPolynomial. --------------------------- Example ---------------------------- gap> F:=GF(11);; gap> R2:=PolynomialRing(F,2); PolynomialRing(..., [ x_1, x_2 ]) gap> vars:=IndeterminatesOfPolynomialRing(R2);; gap> x:=vars[1];; y:=vars[2];; gap> poly:=y^2-x*(x^2-1);; gap> PolynomialCoefficientsOfPolynomial(poly,x); [ x_2^2, Z(11)^0, 0*Z(11), -Z(11)^0 ] gap> PolynomialCoefficientsOfPolynomial(poly,y); [ -x_1^3+x_1, 0*Z(11), Z(11)^0 ] gap> CoefficientMultivariatePolynomial(poly,y,0,R2); -x_1^3+x_1 gap> CoefficientMultivariatePolynomial(poly,y,1,R2); 0*Z(11) gap> CoefficientMultivariatePolynomial(poly,y,2,R2); Z(11)^0 gap> CoefficientMultivariatePolynomial(poly,x,0,R2); x_2^2 gap> CoefficientMultivariatePolynomial(poly,x,1,R2); Z(11)^0 gap> CoefficientMultivariatePolynomial(poly,x,2,R2); 0*Z(11) gap> CoefficientMultivariatePolynomial(poly,x,3,R2); -Z(11)^0  ------------------------------------------------------------------ 7.6-5 SolveLinearSystem > SolveLinearSystem( L, vars ) _____________________________________function Input: L is a list of linear forms in the variables vars. Output: the solution of the system, if its unique. The procedure is straightforward: Find the associated matrix A, find the "constant vector" b, and solve A*v=b. No error checking is performed. Related to the GAP command SolutionMat( A, b ). --------------------------- Example ---------------------------- gap> F:=GF(11);; gap> R2:=PolynomialRing(F,2); PolynomialRing(..., [ x_1, x_2 ]) gap> vars:=IndeterminatesOfPolynomialRing(R2);; gap> x:=vars[1];; y:=vars[2];; gap> f:=3*y-3*x+1;; g:=-5*y+2*x-7;; gap> soln:=SolveLinearSystem([f,g],[x,y]); [ Z(11)^3, Z(11)^2 ] gap> Value(f,[x,y],soln); # checking okay 0*Z(11) gap> Value(g,[x,y],col); # checking okay 0*Z(11)  ------------------------------------------------------------------ 7.6-6 GuavaVersion > GuavaVersion(  ) _________________________________________________function Returns the current version of Guava. Same as guava\_version(). --------------------------- Example ---------------------------- gap> GuavaVersion(); "2.7"  ------------------------------------------------------------------ 7.6-7 ZechLog > ZechLog( x, b, F ) _______________________________________________function Returns the Zech log of x to base b, ie the i such that $x+1=b^i$, so $y+z=y(1+z/y)=b^k$, where k=Log(y,b)+ZechLog(z/y,b) and b must be a primitive element of F. --------------------------- Example ---------------------------- gap> F:=GF(11);; l := One(F);; gap> ZechLog(2*l,8*l,F); -24 gap> 8*l+l;(2*l)^(-24); Z(11)^6 Z(11)^6  ------------------------------------------------------------------ 7.6-8 CoefficientToPolynomial > CoefficientToPolynomial( coeffs, R ) _____________________________function The function CoefficientToPolynomial returns the degree d-1 polynomial c_0+c_1x+...+c_d-1x^d-1, where coeffs is a list of elements of a field, coeffs= c_0,...,c_d-1, and R is a univariate polynomial ring. --------------------------- Example ---------------------------- gap> F:=GF(11); GF(11) gap> R1:=PolynomialRing(F,["a"]);; gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];; gap> coeffs:=Z(11)^0*[1,2,3,4]; [ Z(11)^0, Z(11), Z(11)^8, Z(11)^2 ] gap> CoefficientToPolynomial(coeffs,R1); Z(11)^2*a^3+Z(11)^8*a^2+Z(11)*a+Z(11)^0 ------------------------------------------------------------------ 7.6-9 DegreesMonomialTerm > DegreesMonomialTerm( m, R ) ______________________________________function The function DegreesMonomialTerm returns the list of degrees to which each variable in the multivariate polynomial ring R occurs in the monomial m, where coeffs is a list of elements of a field. --------------------------- Example ---------------------------- gap> F:=GF(11); GF(11) gap> R1:=PolynomialRing(F,["a"]);; gap> var1:=IndeterminatesOfPolynomialRing(R1);; a:=var1[1];; gap> b:=X(F,"b",var1); b gap> var2:=Concatenation(var1,[b]); [ a, b ] gap> R2:=PolynomialRing(F,var2); PolynomialRing(..., [ a, b ]) gap> c:=X(F,"c",var2); c gap> var3:=Concatenation(var2,[c]); [ a, b, c ] gap> R3:=PolynomialRing(F,var3); PolynomialRing(..., [ a, b, c ]) gap> m:=b^3*c^7; b^3*c^7 gap> DegreesMonomialTerm(m,R3); [ 0, 3, 7 ] ------------------------------------------------------------------ 7.6-10 DivisorsMultivariatePolynomial > DivisorsMultivariatePolynomial( f, R ) ___________________________function The function DivisorsMultivariatePolynomial returns the list of polynomial divisors of f in the multivariate polynomial ring R with coefficients in a field. This program uses a simple but slow algorithm (see Joachim von zur Gathen, Jürgen Gerhard, [GG03], exercise 16.10) which first converts the multivariate polynomial f to an associated univariate polynomial f^*, then Factors f^*, and finally converts these univariate factors back into the multivariate polynomial factors of f. Since Factors is non-deterministic, DivisorsMultivariatePolynomial is non-deterministic as well. --------------------------- Example ---------------------------- gap> R2:=PolynomialRing(GF(3),["x1","x2"]); PolynomialRing(..., [ x1, x2 ]) gap> vars:=IndeterminatesOfPolynomialRing(R2); [ x1, x2 ] gap> x2:=vars[2]; x2 gap> x1:=vars[1]; x1 gap> f:=x1^3+x2^3;; gap> DivisorsMultivariatePolynomial(f,R2); [ x1+x2, x1+x2, x1+x2 ] ------------------------------------------------------------------ 7.7 GNU Free Documentation License GNU Free Documentation License Version 1.2, November 2002 Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements". 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. guava-3.6/doc/chapBib.html0000644017361200001450000002764211027015742015337 0ustar tabbottcrontab GAP (guava) - References
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

References

[All84] Alltop, W. O. A method for extending binary linear codes, IEEE Trans. Inform. Theory, 30, (1984), p. 871--872

[BMd)] Bazzi, L. and Mitter, S. K. Some constructions of codes from group actions, preprint, (March 2003 (submitted))

[Bro06] Brouwer, A. E. Bounds on the minimum distance of linear codes, On the internet at the URL: http$://$www.win.tue.nl$/\tilde$aeb$/$voorlincod.html, (1997-2006)

[Bro98] Brouwer, A. E. (Pless, V. S. and Huffman, W. C., Ed.)Bounds on the Size of Linear Codes in , Handbook of Coding Theory, {Elsevier, North Holland}, (1998), p. 295--461

[Che69] Chen, C. L. Some Results on Algebraically Structured Error-Correcting Codes, {University of Hawaii}, USA, (1969)

[GDT91] Gabidulin, E., Davydov, A. and Tombak, L. Linear codes with covering radius 2 and other new covering codes, IEEE Trans. Inform. Theory, 37 (1), (1991), p. 219--224

[Gal62] Gallager, R. Low-Density Parity-Check Codes, IRE Trans. Inform. Theory, IT-8, (1962), p. 21--28

[Gao03] Gao, S. A new algorithm for decoding Reed-Solomon codes, Communications, Information and Network Security (V. Bhargava, H. V. Poor, V. Tarokh and S. Yoon, Eds.), Kluwer Academic Publishers, (2003), p. pp. 55-68

[GS85] Graham, R. and Sloane, N. On the covering radius of codes, IEEE Trans. Inform. Theory, 31 (1), (1985), p. 385--401

[Han99] Hansen, J. P. Toric surfaces and error-correcting codes, Coding theory, cryptography, and related areas (ed., Bachmann et al) Springer-Verlag, (1999)

[HHKK07] Harada, M., Holzmann, W., Kharaghani, H. and Khorvash, M. Extremal Ternary Self-Dual Codes Constructed from Negacirculant Matrices, Graphs and Combinatorics, 23 (4), (2007), p. 401--417

[Hel72] Helgert, H. J. Srivastava codes, IEEE Trans. Inform. Theory, 18, (1972), p. 292--297

[HP03] Huffman, W. C. and Pless, V. Fundamentals of error-correcting codes, Cambridge Univ. Press, (2003)

[Joy04] Joyner, D. Toric codes over finite fields, Applicable Algebra in Engineering, Communication and Computing, 15, (2004), p. 63--79

[JH04] Justesen, J. and Hoholdt, T. A course in error-correcting codes, European Mathematical Society, (2004)

[Leo88] Leon, J. S. A probabilistic algorithm for computing minimum weights of large error-correcting codes, IEEE Trans. Inform. Theory, 34, (1988), p. 1354--1359

[Leo82] Leon, J. S. Computing automorphism groups of error-correcting codes, IEEE Trans. Inform. Theory, 28, (1982), p. 496--511

[Leo91] Leon, J. S. Permutation group algorithms based on partitions, I: theory and algorithms, J. Symbolic Comput., 12, (1991), p. 533--583

[MS83] MacWilliams, F. J. and Sloane, N. J. A. The theory of error-correcting codes, Amsterdam: North-Holland, (1983)

[S}04] R. Tanner D. Sridhara A. Sridharan, T. F. and }, D. C. LDPC Block and Convolutional Codes Based on Circulant Matrices, STRING-NOT-KNOWN: ieee_j_it, 50 (12), (2004), p. 2966--2984

[SRC72] Sloane, N., Reddy, S. and Chen, C. New binary codes, IEEE Trans. Inform. Theory, 18, (1972), p. 503--510

[Sti93] Stichtenoth, H. Algebraic function fields and codes, Springer-Verlag, (1993)

[GG03] von zur Gathen, J. and J. Gerhard, Modern computer algebra, Cambridge Univ. Press, (2003)

[Zim96] Zimmermann, K. -.H. Integral Hecke Modules, Integral Generalized Reed-Muller Codes, and Linear Codes (3--96), Hamburg, Germany, (1996)

Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

generated by GAPDoc2HTML

guava-3.6/README.guava0000644017361200001450000001274711027430344014335 0ustar tabbottcrontab The GUAVA Coding Theory Package ------------------------------- GUAVA is a package that implements coding theory algorithms in GAP. With GUAVA, codes can be created and manipulated and information about codes can be calculated. GUAVA consists of various files written in the GAP language, and an external program from J.S. Leon for dealing with automorphism groups of codes and isomorphism testing functions. Several algorithms that need the speed are integrated in the GAP kernel. Please send your bug reports to support@gap-system.org. See the section "Bug reports" below. GUAVA was originally written in GAP 3 by Jasper Cramwinckel, Erik Roijackers, and Reinald Baart as a final project during their study of Mathematics at the Delft University of Technology, Department of Pure Mathematics, and in Aachen, at Lehrstuhl D fuer Mathematik. In version 1.3 (still GAP 3), new functions were added by Eric Minkes, also from Delft University of Technology. Version 1.4 (the first GAP 4 version) of GUAVA was created by Lea Ruscio who maintained it through to version 1.5. Versions of GUAVA since 1.6 have been maintained by David Joyner. Starting with Versions 2.5/2.6, GUAVA was forked: the "odd versions" (e.g., 2.5) include the code of J. S. Leon mentioned above (which is not licensed under the GPL at the time). The "even versions" (e.g., 2.6) were entirely GPL'd, but were otherwise are basically the same as the previous "odd version" (i.e., "2.6 = 2.5 - non-GPL'd code"). Starting with Versions 2.7/2.8, Cen Tjhai, a PhD student in the School of Computing, Communications & Electronics at the University of Plymouth, was added as an author. He completely updated the tables, which have not been updated since 1998, and added some new functions. Starting with Versions 3.0, Robert Miller, a PhD student in the Department of Mathematics at the University of Washington in Seattle, and Tom Boothby, and undergraduate in the same department, were added as authors. They will be revising Leon's code, which was GPL'd on April 17th, 2007: I, Jeffrey S. Leon, agree to license all the partition backtrack code which I have written under the GPL (www.fsf.org) as of this date, April 17, 2007. The ``even''/``odd'' forks of the GUAVA code are now united. The current version is 3.6. Installing GUAVA ---------------- To install GUAVA (as a GAP4 Package) unpack the archive file in a directory in the `pkg' hierarchy of your version of GAP4. (This might be the `pkg' directory of the GAP4 home directory; it is however also possible to keep an additional `pkg' directory in your private directories, see section "Installing GAP Packages" of the GAP4 reference manual for details on how to do this.) After unpacking GUAVA the GAP-only part of GUAVA is installed. The parts of GUAVA depending on J. Leon's backtrack programs package (for computing automorphism groups) are only available in a UNIX environment, where you should proceed as follows: Go to the newly created `guava' directory and call `./configure ' where is the path to the GAP home directory. So for example, if you install the package in the main `pkg' directory call ./configure ../.. (For rpm-based 64-bit linux machines, such as suse or redhat, you may need "./configure ../.. --enable-libsuffix=64" instead.) This will fetch the architecture type for which GAP has been compiled last and create a `Makefile'. Now call make to compile the binary and to install it in the appropriate place. This completes the installation of GUAVA for a single architecture. If you use this installation of GUAVA on different hardware platforms you will have to compile the binaries for each platform separately. This is done by calling `configure' and `make' for the package anew immediately after compiling GAP itself for the respective architecture. If your version of GAP is already compiled (and has last been compiled on the same architecture) you do not need to compile GAP again; it is sufficient to call the `configure' script in the GAP home directory. Loading GUAVA ------------- After starting up GAP, the GUAVA package needs to be loaded. Load GUAVA by typing at the GAP prompt: gap> LoadPackage( "guava" ); If GUAVA isn't already in memory, it is loaded and its beautiful banner is displayed. You may wish to test the installation by reading in the Guava test file: gap> Read("full-path/guava.tst"); If you are a frequent user of GUAVA, you might consider putting this line in your `.gaprc' file. Bug reports ----------- When sending a bug report to support@gap-system.org, remember we will need to be able to reproduce the problem; so please include: * The version of GAP you are using; either look at the header when you start up GAP, or at the gap> prompt type: VERSION; * The operating system you are using e.g. Linux, SunOS 5.8 = Solaris 2.8, IRIX 6.5, Windows, ... * The compiler (if any) you used to compile the binaries and the options you used. Type: gcc -v or: cc -version. * A script that demonstrates the bug, along with a description of why it's a bug (e.g. by adding comments to the script - recall comments in GAP begin with a #). - David Joyner (wdjoyner@gmail.com) Junee 22, 2008 guava-3.6/tbl/0000755017361200001450000000000011026723452013125 5ustar tabbottcrontabguava-3.6/tbl/bdtable4.g0000644017361200001450000120156411026723452014767 0ustar tabbottcrontab#A BOUNDS FOR q = 4 ## ## Each entry [n][k] of one of the tables below contains ## a bound (the first table contains lowerbounds, the ## second upperbounds) for a code with wordlength n and ## dimension k. Each entry contains one of the following ## items: ## ## FOR LOWER- AND UPPERBOUNDSTABLE ## [ 0, , ] from Brouwers table ## ## FOR LOWERBOUNDSTABLE ## empty k= 0, 1, n or d= 2 or (k= 2 and q= 2) ## 1 shortening a [ n + 1, k + 1 ] code ## 2 puncturing a [ n + 1, k ] code ## 3 extending a [ n - 1, k ] code ## [ 4,