Web Inspector: add RemoteObject.fetchProperties and some basic tests for RemoteObject API
[WebKit-https.git] / JSTests / exceptionFuzz / earley-boyer.js
1 var enableExceptionFuzz = $vm.enableExceptionFuzz;
2
3 try {
4 // This file is automatically generated by scheme2js, except for the
5 // benchmark harness code at the beginning and end of the file.
6
7 /************* GENERATED FILE - DO NOT EDIT *************/
8 /************* GENERATED FILE - DO NOT EDIT *************/
9 /************* GENERATED FILE - DO NOT EDIT *************/
10 /************* GENERATED FILE - DO NOT EDIT *************/
11 /************* GENERATED FILE - DO NOT EDIT *************/
12 /************* GENERATED FILE - DO NOT EDIT *************/
13 /************* GENERATED FILE - DO NOT EDIT *************/
14 /************* GENERATED FILE - DO NOT EDIT *************/
15 /*
16  * To use write/prints/... the default-output port has to be set first.
17  * Simply setting SC_DEFAULT_OUT and SC_ERROR_OUT to the desired values
18  * should do the trick.
19  * In the following example the std-out and error-port are redirected to
20  * a DIV.
21 function initRuntime() {
22     function escapeHTML(s) {
23         var tmp = s;
24         tmp = tmp.replace(/&/g, "&");
25         tmp = tmp.replace(/</g, "&lt;");
26         tmp = tmp.replace(/>/g, "&gt;");
27         tmp = tmp.replace(/ /g, "&nbsp;");
28         tmp = tmp.replace(/\n/g, "<br />");
29         tmp = tmp.replace(/\t/g, "&nbsp;&nbsp;&nbsp;&nbsp");
30         return tmp;
31         
32     }
33
34     document.write("<div id='stdout'></div>");
35     SC_DEFAULT_OUT = new sc_GenericOutputPort(
36         function(s) {
37             var stdout = document.getElementById('stdout');
38             stdout.innerHTML = stdout.innerHTML + escapeHTML(s);
39         });
40     SC_ERROR_OUT = SC_DEFAULT_OUT;
41 }
42 */
43
44 enableExceptionFuzz();
45
46
47 function sc_print_debug() {
48     sc_print.apply(null, arguments);
49 }
50 /*** META ((export *js*)) */
51 var sc_JS_GLOBALS = this;
52
53 var __sc_LINE=-1;
54 var __sc_FILE="";
55
56 /*** META ((export #t)) */
57 function sc_alert() {
58    var len = arguments.length;
59    var s = "";
60    var i;
61
62    for( i = 0; i < len; i++ ) {
63        s += sc_toDisplayString(arguments[ i ]);
64    }
65
66    return alert( s );
67 }
68
69 /*** META ((export #t)) */
70 function sc_typeof( x ) {
71    return typeof x;
72 }
73
74 /*** META ((export #t)) */
75 function sc_error() {
76     var a = [sc_jsstring2symbol("*error*")];
77     for (var i = 0; i < arguments.length; i++) {
78         a[i+1] = arguments[i];
79     }
80     throw a;
81 }
82
83 /*** META ((export #t)
84            (peephole (prefix "throw ")))
85 */
86 function sc_raise(obj) {
87     throw obj;
88 }
89
90 /*** META ((export with-handler-lambda)) */
91 function sc_withHandlerLambda(handler, body) {
92     try {
93         return body();
94     } catch(e) {
95         if (!e._internalException)
96             return handler(e);
97         else
98             throw e;
99     }
100 }
101
102 var sc_properties = new Object();
103
104 /*** META ((export #t)) */
105 function sc_putpropBang(sym, key, val) {
106     var ht = sc_properties[sym];
107     if (!ht) {
108         ht = new Object();
109         sc_properties[sym] = ht;
110     }
111     ht[key] = val;
112 }
113
114 /*** META ((export #t)) */
115 function sc_getprop(sym, key) {
116     var ht = sc_properties[sym];
117     if (ht) {
118         if (key in ht)
119             return ht[key];
120         else
121             return false;
122     } else
123         return false;
124 }
125
126 /*** META ((export #t)) */
127 function sc_rempropBang(sym, key) {
128     var ht = sc_properties[sym];
129     if (ht)
130         delete ht[key];
131 }
132
133 /*** META ((export #t)) */
134 function sc_any2String(o) {
135     return jsstring2string(sc_toDisplayString(o));
136 }    
137
138 /*** META ((export #t)
139            (peephole (infix 2 2 "==="))
140            (type bool))
141 */
142 function sc_isEqv(o1, o2) {
143     return (o1 === o2);
144 }
145
146 /*** META ((export #t)
147            (peephole (infix 2 2 "==="))
148            (type bool))
149 */
150 function sc_isEq(o1, o2) {
151     return (o1 === o2);
152 }
153
154 /*** META ((export #t)
155            (type bool))
156 */
157 function sc_isNumber(n) {
158     return (typeof n === "number");
159 }
160
161 /*** META ((export #t)
162            (type bool))
163 */
164 function sc_isComplex(n) {
165     return sc_isNumber(n);
166 }
167
168 /*** META ((export #t)
169            (type bool))
170 */
171 function sc_isReal(n) {
172     return sc_isNumber(n);
173 }
174
175 /*** META ((export #t)
176            (type bool))
177 */
178 function sc_isRational(n) {
179     return sc_isReal(n);
180 }
181
182 /*** META ((export #t)
183            (type bool))
184 */
185 function sc_isInteger(n) {
186     return (parseInt(n) === n);
187 }
188
189 /*** META ((export #t)
190            (type bool)
191            (peephole (postfix ", false")))
192 */
193 // we don't have exact numbers...
194 function sc_isExact(n) {
195     return false;
196 }
197
198 /*** META ((export #t)
199            (peephole (postfix ", true"))
200            (type bool))
201 */
202 function sc_isInexact(n) {
203     return true;
204 }
205
206 /*** META ((export = =fx =fl)
207            (type bool)
208            (peephole (infix 2 2 "===")))
209 */
210 function sc_equal(x) {
211     for (var i = 1; i < arguments.length; i++)
212         if (x !== arguments[i])
213             return false;
214     return true;
215 }
216
217 /*** META ((export < <fx <fl)
218            (type bool)
219            (peephole (infix 2 2 "<")))
220 */
221 function sc_less(x) {
222     for (var i = 1; i < arguments.length; i++) {
223         if (x >= arguments[i])
224             return false;
225         x = arguments[i];
226     }
227     return true;
228 }
229
230 /*** META ((export > >fx >fl)
231            (type bool)
232            (peephole (infix 2 2 ">")))
233 */
234 function sc_greater(x, y) {
235     for (var i = 1; i < arguments.length; i++) {
236         if (x <= arguments[i])
237             return false;
238         x = arguments[i];
239     }
240     return true;
241 }
242
243 /*** META ((export <= <=fx <=fl)
244            (type bool)
245            (peephole (infix 2 2 "<=")))
246 */
247 function sc_lessEqual(x, y) {
248     for (var i = 1; i < arguments.length; i++) {
249         if (x > arguments[i])
250             return false;
251         x = arguments[i];
252     }
253     return true;
254 }
255
256 /*** META ((export >= >=fl >=fx)
257            (type bool)
258            (peephole (infix 2 2 ">=")))
259 */
260 function sc_greaterEqual(x, y) {
261     for (var i = 1; i < arguments.length; i++) {
262         if (x < arguments[i])
263             return false;
264         x = arguments[i];
265     }
266     return true;
267 }
268
269 /*** META ((export #t)
270            (type bool)
271            (peephole (postfix "=== 0")))
272 */
273 function sc_isZero(x) {
274     return (x === 0);
275 }
276
277 /*** META ((export #t)
278            (type bool)
279            (peephole (postfix "> 0")))
280 */
281 function sc_isPositive(x) {
282     return (x > 0);
283 }
284
285 /*** META ((export #t)
286            (type bool)
287            (peephole (postfix "< 0")))
288 */
289 function sc_isNegative(x) {
290     return (x < 0);
291 }
292
293 /*** META ((export #t)
294            (type bool)
295            (peephole (postfix "%2===1")))
296 */
297 function sc_isOdd(x) {
298     return (x % 2 === 1);
299 }
300
301 /*** META ((export #t)
302            (type bool)
303            (peephole (postfix "%2===0")))
304 */
305 function sc_isEven(x) {
306     return (x % 2 === 0);
307 }
308
309 /*** META ((export #t)) */
310 var sc_max = Math.max;
311 /*** META ((export #t)) */
312 var sc_min = Math.min;
313
314 /*** META ((export + +fx +fl)
315            (peephole (infix 0 #f "+" "0")))
316 */
317 function sc_plus() {
318     var sum = 0;
319     for (var i = 0; i < arguments.length; i++)
320         sum += arguments[i];
321     return sum;
322 }
323
324 /*** META ((export * *fx *fl)
325            (peephole (infix 0 #f "*" "1")))
326 */
327 function sc_multi() {
328     var product = 1;
329     for (var i = 0; i < arguments.length; i++)
330         product *= arguments[i];
331     return product;
332 }
333
334 /*** META ((export - -fx -fl)
335            (peephole (minus)))
336 */
337 function sc_minus(x) {
338     if (arguments.length === 1)
339         return -x;
340     else {
341         var res = x;
342         for (var i = 1; i < arguments.length; i++)
343             res -= arguments[i];
344         return res;
345     }
346 }
347
348 /*** META ((export / /fl)
349            (peephole (div)))
350 */
351 function sc_div(x) {
352     if (arguments.length === 1)
353         return 1/x;
354     else {
355         var res = x;
356         for (var i = 1; i < arguments.length; i++)
357             res /= arguments[i];
358         return res;
359     }
360 }
361
362 /*** META ((export #t)) */
363 var sc_abs = Math.abs;
364
365 /*** META ((export quotient /fx)
366            (peephole (hole 2 "parseInt(" x "/" y ")")))
367 */
368 function sc_quotient(x, y) {
369     return parseInt(x / y);
370 }
371
372 /*** META ((export #t)
373            (peephole (infix 2 2 "%")))
374 */
375 function sc_remainder(x, y) {
376     return x % y;
377 }
378
379 /*** META ((export #t)
380            (peephole (modulo)))
381 */
382 function sc_modulo(x, y) {
383     var remainder = x % y;
384     // if they don't have the same sign
385     if ((remainder * y) < 0)
386         return remainder + y;
387     else
388         return remainder;
389 }
390
391 function sc_euclid_gcd(a, b) {
392     var temp;
393     if (a === 0) return b;
394     if (b === 0) return a;
395     if (a < 0) {a = -a;};
396     if (b < 0) {b = -b;};
397     if (b > a) {temp = a; a = b; b = temp;};
398     while (true) {
399         a %= b;
400         if(a === 0) {return b;};
401         b %= a;
402         if(b === 0) {return a;};
403     };
404     return b;
405 }
406
407 /*** META ((export #t)) */
408 function sc_gcd() {
409     var gcd = 0;
410     for (var i = 0; i < arguments.length; i++)
411         gcd = sc_euclid_gcd(gcd, arguments[i]);
412     return gcd;
413 }
414
415 /*** META ((export #t)) */
416 function sc_lcm() {
417     var lcm = 1;
418     for (var i = 0; i < arguments.length; i++) {
419         var f = Math.round(arguments[i] / sc_euclid_gcd(arguments[i], lcm));
420         lcm *= Math.abs(f);
421     }
422     return lcm;
423 }
424
425 // LIMITATION: numerator and denominator don't make sense in floating point world.
426 //var SC_MAX_DECIMALS = 1000000
427 //
428 // function sc_numerator(x) {
429 //     var rounded = Math.round(x * SC_MAX_DECIMALS);
430 //     return Math.round(rounded / sc_euclid_gcd(rounded, SC_MAX_DECIMALS));
431 // }
432
433 // function sc_denominator(x) {
434 //     var rounded = Math.round(x * SC_MAX_DECIMALS);
435 //     return Math.round(SC_MAX_DECIMALS / sc_euclid_gcd(rounded, SC_MAX_DECIMALS));
436 // }
437
438 /*** META ((export #t)) */
439 var sc_floor = Math.floor;
440 /*** META ((export #t)) */
441 var sc_ceiling = Math.ceil;
442 /*** META ((export #t)) */
443 var sc_truncate = parseInt;
444 /*** META ((export #t)) */
445 var sc_round = Math.round;
446
447 // LIMITATION: sc_rationalize doesn't make sense in a floating point world.
448
449 /*** META ((export #t)) */
450 var sc_exp = Math.exp;
451 /*** META ((export #t)) */
452 var sc_log = Math.log;
453 /*** META ((export #t)) */
454 var sc_sin = Math.sin;
455 /*** META ((export #t)) */
456 var sc_cos = Math.cos;
457 /*** META ((export #t)) */
458 var sc_tan = Math.tan;
459 /*** META ((export #t)) */
460 var sc_asin = Math.asin;
461 /*** META ((export #t)) */
462 var sc_acos = Math.acos;
463 /*** META ((export #t)) */
464 var sc_atan = Math.atan;
465
466 /*** META ((export #t)) */
467 var sc_sqrt = Math.sqrt;
468 /*** META ((export #t)) */
469 var sc_expt = Math.pow;
470
471 // LIMITATION: we don't have complex numbers.
472 // LIMITATION: the following functions are hence not implemented.
473 // LIMITATION: make-rectangular, make-polar, real-part, imag-part, magnitude, angle
474 // LIMITATION: 2 argument atan
475
476 /*** META ((export #t)
477            (peephole (id)))
478 */
479 function sc_exact2inexact(x) {
480     return x;
481 }
482
483 /*** META ((export #t)
484            (peephole (id)))
485 */
486 function sc_inexact2exact(x) {
487     return x;
488 }
489
490 function sc_number2jsstring(x, radix) {
491     if (radix)
492         return x.toString(radix);
493     else
494         return x.toString();
495 }
496
497 function sc_jsstring2number(s, radix) {
498     if (s === "") return false;
499
500     if (radix) {
501         var t = parseInt(s, radix);
502         if (!t && t !== 0) return false;
503         // verify that each char is in range. (parseInt ignores leading
504         // white and trailing chars)
505         var allowedChars = "01234567890abcdefghijklmnopqrstuvwxyz".substring(0, radix+1);
506         if ((new RegExp("^["+allowedChars+"]*$", "i")).test(s))
507             return t;
508         else return false;
509     } else {
510         var t = +s; // does not ignore trailing chars.
511         if (!t && t !== 0) return false;
512         // simply verify that first char is not whitespace.
513         var c = s.charAt(0);
514         // if +c is 0, but the char is not "0", then we have a whitespace.
515         if (+c === 0 && c !== "0") return false;
516         return t;
517     }
518 }
519
520 /*** META ((export #t)
521            (type bool)
522            (peephole (not)))
523 */
524 function sc_not(b) {
525     return b === false;
526 }
527
528 /*** META ((export #t)
529            (type bool))
530 */
531 function sc_isBoolean(b) {
532     return (b === true) || (b === false);
533 }
534
535 function sc_Pair(car, cdr) {
536     this.car = car;
537     this.cdr = cdr;
538 }
539
540 sc_Pair.prototype.toString = function() {
541     return sc_toDisplayString(this);
542 };
543 sc_Pair.prototype.sc_toWriteOrDisplayString = function(writeOrDisplay) {
544     var current = this;
545
546     var res = "(";
547
548     while(true) {
549         res += writeOrDisplay(current.car);
550         if (sc_isPair(current.cdr)) {
551             res += " ";
552             current = current.cdr;
553         } else if (current.cdr !== null) {
554             res += " . " + writeOrDisplay(current.cdr);
555             break;
556         } else // current.cdr == null
557             break;
558     }
559         
560     res += ")";
561
562     return res;
563 };
564 sc_Pair.prototype.sc_toDisplayString = function() {
565     return this.sc_toWriteOrDisplayString(sc_toDisplayString);
566 };
567 sc_Pair.prototype.sc_toWriteString = function() {
568     return this.sc_toWriteOrDisplayString(sc_toWriteString);
569 };
570 // sc_Pair.prototype.sc_toWriteCircleString in IO.js
571
572 /*** META ((export #t)
573            (type bool)
574            (peephole (postfix " instanceof sc_Pair")))
575 */
576 function sc_isPair(p) {
577     return (p instanceof sc_Pair);
578 }
579
580 function sc_isPairEqual(p1, p2, comp) {
581     return (comp(p1.car, p2.car) && comp(p1.cdr, p2.cdr));
582 }
583
584 /*** META ((export #t)
585            (peephole (hole 2 "new sc_Pair(" car ", " cdr ")")))
586 */
587 function sc_cons(car, cdr) {
588     return new sc_Pair(car, cdr);
589 }
590
591 /*** META ((export cons*)) */
592 function sc_consStar() {
593     var res = arguments[arguments.length - 1];
594     for (var i = arguments.length-2; i >= 0; i--)
595         res = new sc_Pair(arguments[i], res);
596     return res;
597 }
598
599 /*** META ((export #t)
600            (peephole (postfix ".car")))
601 */
602 function sc_car(p) {
603     return p.car;
604 }
605
606 /*** META ((export #t)
607            (peephole (postfix ".cdr")))
608 */
609 function sc_cdr(p) {
610     return p.cdr;
611 }
612
613 /*** META ((export #t)
614            (peephole (hole 2 p ".car = " val)))
615 */
616 function sc_setCarBang(p, val) {
617     p.car = val;
618 }
619
620 /*** META ((export #t)
621            (peephole (hole 2 p ".cdr = " val)))
622 */
623 function sc_setCdrBang(p, val) {
624     p.cdr = val;
625 }
626
627 /*** META ((export #t)
628            (peephole (postfix ".car.car")))
629 */
630 function sc_caar(p) { return p.car.car; }
631 /*** META ((export #t)
632            (peephole (postfix ".cdr.car")))
633 */
634 function sc_cadr(p) { return p.cdr.car; }
635 /*** META ((export #t)
636            (peephole (postfix ".car.cdr")))
637 */
638 function sc_cdar(p) { return p.car.cdr; }
639 /*** META ((export #t)
640            (peephole (postfix ".cdr.cdr")))
641 */
642 function sc_cddr(p) { return p.cdr.cdr; }
643 /*** META ((export #t)
644            (peephole (postfix ".car.car.car")))
645 */
646 function sc_caaar(p) { return p.car.car.car; }
647 /*** META ((export #t)
648            (peephole (postfix ".car.cdr.car")))
649 */
650 function sc_cadar(p) { return p.car.cdr.car; }
651 /*** META ((export #t)
652            (peephole (postfix ".cdr.car.car")))
653 */
654 function sc_caadr(p) { return p.cdr.car.car; }
655 /*** META ((export #t)
656            (peephole (postfix ".cdr.cdr.car")))
657 */
658 function sc_caddr(p) { return p.cdr.cdr.car; }
659 /*** META ((export #t)
660            (peephole (postfix ".car.car.cdr")))
661 */
662 function sc_cdaar(p) { return p.car.car.cdr; }
663 /*** META ((export #t)
664            (peephole (postfix ".cdr.car.cdr")))
665 */
666 function sc_cdadr(p) { return p.cdr.car.cdr; }
667 /*** META ((export #t)
668            (peephole (postfix ".car.cdr.cdr")))
669 */
670 function sc_cddar(p) { return p.car.cdr.cdr; }
671 /*** META ((export #t)
672            (peephole (postfix ".cdr.cdr.cdr")))
673 */
674 function sc_cdddr(p) { return p.cdr.cdr.cdr; }
675 /*** META ((export #t)
676            (peephole (postfix ".car.car.car.car")))
677 */
678 function sc_caaaar(p) { return p.car.car.car.car; }
679 /*** META ((export #t)
680            (peephole (postfix ".car.cdr.car.car")))
681 */
682 function sc_caadar(p) { return p.car.cdr.car.car; }
683 /*** META ((export #t)
684            (peephole (postfix ".cdr.car.car.car")))
685 */
686 function sc_caaadr(p) { return p.cdr.car.car.car; }
687 /*** META ((export #t)
688            (peephole (postfix ".cdr.cdr.car.car")))
689 */
690 function sc_caaddr(p) { return p.cdr.cdr.car.car; }
691 /*** META ((export #t)
692            (peephole (postfix ".car.car.car.cdr")))
693 */
694 function sc_cdaaar(p) { return p.car.car.car.cdr; }
695 /*** META ((export #t)
696            (peephole (postfix ".car.cdr.car.cdr")))
697 */
698 function sc_cdadar(p) { return p.car.cdr.car.cdr; }
699 /*** META ((export #t)
700            (peephole (postfix ".cdr.car.car.cdr")))
701 */
702 function sc_cdaadr(p) { return p.cdr.car.car.cdr; }
703 /*** META ((export #t)
704            (peephole (postfix ".cdr.cdr.car.cdr")))
705 */
706 function sc_cdaddr(p) { return p.cdr.cdr.car.cdr; }
707 /*** META ((export #t)
708            (peephole (postfix ".car.car.cdr.car")))
709 */
710 function sc_cadaar(p) { return p.car.car.cdr.car; }
711 /*** META ((export #t)
712            (peephole (postfix ".car.cdr.cdr.car")))
713 */
714 function sc_caddar(p) { return p.car.cdr.cdr.car; }
715 /*** META ((export #t)
716            (peephole (postfix ".cdr.car.cdr.car")))
717 */
718 function sc_cadadr(p) { return p.cdr.car.cdr.car; }
719 /*** META ((export #t)
720            (peephole (postfix ".cdr.cdr.cdr.car")))
721 */
722 function sc_cadddr(p) { return p.cdr.cdr.cdr.car; }
723 /*** META ((export #t)
724            (peephole (postfix ".car.car.cdr.cdr")))
725 */
726 function sc_cddaar(p) { return p.car.car.cdr.cdr; }
727 /*** META ((export #t)
728            (peephole (postfix ".car.cdr.cdr.cdr")))
729 */
730 function sc_cdddar(p) { return p.car.cdr.cdr.cdr; }
731 /*** META ((export #t)
732            (peephole (postfix ".cdr.car.cdr.cdr")))
733 */
734 function sc_cddadr(p) { return p.cdr.car.cdr.cdr; }
735 /*** META ((export #t)
736            (peephole (postfix ".cdr.cdr.cdr.cdr")))
737 */
738 function sc_cddddr(p) { return p.cdr.cdr.cdr.cdr; }
739
740 /*** META ((export #t)) */
741 function sc_lastPair(l) {
742     if (!sc_isPair(l)) sc_error("sc_lastPair: pair expected");
743     var res = l;
744     var cdr = l.cdr;
745     while (sc_isPair(cdr)) {
746         res = cdr;
747         cdr = res.cdr;
748     }
749     return res;
750 }
751
752 /*** META ((export #t)
753            (type bool)
754            (peephole (postfix " === null")))
755 */
756 function sc_isNull(o) {
757     return (o === null);
758 }
759
760 /*** META ((export #t)
761            (type bool))
762 */
763 function sc_isList(o) {
764     var rabbit;
765     var turtle;
766
767     var rabbit = o;
768     var turtle = o;
769     while (true) {
770         if (rabbit === null ||
771             (rabbit instanceof sc_Pair && rabbit.cdr === null))
772             return true;  // end of list
773         else if ((rabbit instanceof sc_Pair) &&
774                  (rabbit.cdr instanceof sc_Pair)) {
775             rabbit = rabbit.cdr.cdr;
776             turtle = turtle.cdr;
777             if (rabbit === turtle) return false; // cycle
778         } else
779             return false; // not pair
780     }
781 }
782
783 /*** META ((export #t)) */
784 function sc_list() {
785     var res = null;
786     var a = arguments;
787     for (var i = a.length-1; i >= 0; i--)
788         res = new sc_Pair(a[i], res);
789     return res;
790 }
791
792 /*** META ((export #t)) */
793 function sc_iota(num, init) {
794    var res = null;
795    if (!init) init = 0;
796    for (var i = num - 1; i >= 0; i--)
797       res = new sc_Pair(i + init, res);
798    return res;
799 }
800
801 /*** META ((export #t)) */
802 function sc_makeList(nbEls, fill) {
803     var res = null;
804     for (var i = 0; i < nbEls; i++)
805         res = new sc_Pair(fill, res);
806     return res;
807 }
808
809 /*** META ((export #t)) */
810 function sc_length(l) {
811     var res = 0;
812     while (l !== null) {
813         res++;
814         l = l.cdr;
815     }
816     return res;
817 }
818
819 /*** META ((export #t)) */
820 function sc_remq(o, l) {
821     var dummy = { cdr : null };
822     var tail = dummy;
823     while (l !== null) {
824         if (l.car !== o) {
825             tail.cdr = sc_cons(l.car, null);
826             tail = tail.cdr;
827         }
828         l = l.cdr;
829     }
830     return dummy.cdr;
831 }
832
833 /*** META ((export #t)) */
834 function sc_remqBang(o, l) {
835     var dummy = { cdr : null };
836     var tail = dummy;
837     var needsAssig = true;
838     while (l !== null) {
839         if (l.car === o) {
840             needsAssig = true;
841         } else {
842             if (needsAssig) {
843                 tail.cdr = l;
844                 needsAssig = false;
845             }
846             tail = l;
847         }
848         l = l.cdr;
849     }
850     tail.cdr = null;
851     return dummy.cdr;
852 }
853
854 /*** META ((export #t)) */
855 function sc_delete(o, l) {
856     var dummy = { cdr : null };
857     var tail = dummy;
858     while (l !== null) {
859         if (!sc_isEqual(l.car, o)) {
860             tail.cdr = sc_cons(l.car, null);
861             tail = tail.cdr;
862         }
863         l = l.cdr;
864     }
865     return dummy.cdr;
866 }
867
868 /*** META ((export #t)) */
869 function sc_deleteBang(o, l) {
870     var dummy = { cdr : null };
871     var tail = dummy;
872     var needsAssig = true;
873     while (l !== null) {
874         if (sc_isEqual(l.car, o)) {
875             needsAssig = true;
876         } else {
877             if (needsAssig) {
878                 tail.cdr = l;
879                 needsAssig = false;
880             }
881             tail = l;
882         }
883         l = l.cdr;
884     }
885     tail.cdr = null;
886     return dummy.cdr;
887 }
888
889 function sc_reverseAppendBang(l1, l2) {
890     var res = l2;
891     while (l1 !== null) {
892         var tmp = res;
893         res = l1;
894         l1 = l1.cdr;
895         res.cdr = tmp;
896     }
897     return res;
898 }
899         
900 function sc_dualAppend(l1, l2) {
901     if (l1 === null) return l2;
902     if (l2 === null) return l1;
903     var rev = sc_reverse(l1);
904     return sc_reverseAppendBang(rev, l2);
905 }
906
907 /*** META ((export #t)) */
908 function sc_append() {
909     if (arguments.length === 0)
910         return null;
911     var res = arguments[arguments.length - 1];
912     for (var i = arguments.length - 2; i >= 0; i--)
913         res = sc_dualAppend(arguments[i], res);
914     return res;
915 }
916
917 function sc_dualAppendBang(l1, l2) {
918     if (l1 === null) return l2;
919     if (l2 === null) return l1;
920     var tmp = l1;
921     while (tmp.cdr !== null) tmp=tmp.cdr;
922     tmp.cdr = l2;
923     return l1;
924 }
925     
926 /*** META ((export #t)) */
927 function sc_appendBang() {
928     var res = null;
929     for (var i = 0; i < arguments.length; i++)
930         res = sc_dualAppendBang(res, arguments[i]);
931     return res;
932 }
933
934 /*** META ((export #t)) */
935 function sc_reverse(l1) {
936     var res = null;
937     while (l1 !== null) {
938         res = sc_cons(l1.car, res);
939         l1 = l1.cdr;
940     }
941     return res;
942 }
943
944 /*** META ((export #t)) */
945 function sc_reverseBang(l) {
946     return sc_reverseAppendBang(l, null);
947 }
948
949 /*** META ((export #t)) */
950 function sc_listTail(l, k) {
951     var res = l;
952     for (var i = 0; i < k; i++) {
953         res = res.cdr;
954     }
955     return res;
956 }
957
958 /*** META ((export #t)) */
959 function sc_listRef(l, k) {
960     return sc_listTail(l, k).car;
961 }
962
963 /* // unoptimized generic versions
964 function sc_memX(o, l, comp) {
965     while (l != null) {
966         if (comp(l.car, o))
967             return l;
968         l = l.cdr;
969     }
970     return false;
971 }
972 function sc_memq(o, l) { return sc_memX(o, l, sc_isEq); }
973 function sc_memv(o, l) { return sc_memX(o, l, sc_isEqv); }
974 function sc_member(o, l) { return sc_memX(o, l, sc_isEqual); }
975 */
976
977 /* optimized versions */
978 /*** META ((export #t)) */
979 function sc_memq(o, l) {
980     while (l !== null) {
981         if (l.car === o)
982             return l;
983         l = l.cdr;
984     }
985     return false;
986 }
987 /*** META ((export #t)) */
988 function sc_memv(o, l) {
989     while (l !== null) {
990         if (l.car === o)
991             return l;
992         l = l.cdr;
993     }
994     return false;
995 }
996 /*** META ((export #t)) */
997 function sc_member(o, l) {
998     while (l !== null) {
999         if (sc_isEqual(l.car,o))
1000             return l;
1001         l = l.cdr;
1002     }
1003     return false;
1004 }
1005
1006 /* // generic unoptimized versions
1007 function sc_assX(o, al, comp) {
1008     while (al != null) {
1009         if (comp(al.car.car, o))
1010             return al.car;
1011         al = al.cdr;
1012     }
1013     return false;
1014 }
1015 function sc_assq(o, al) { return sc_assX(o, al, sc_isEq); }
1016 function sc_assv(o, al) { return sc_assX(o, al, sc_isEqv); }
1017 function sc_assoc(o, al) { return sc_assX(o, al, sc_isEqual); }
1018 */
1019 // optimized versions
1020 /*** META ((export #t)) */
1021 function sc_assq(o, al) {
1022     while (al !== null) {
1023         if (al.car.car === o)
1024             return al.car;
1025         al = al.cdr;
1026     }
1027     return false;
1028 }
1029 /*** META ((export #t)) */
1030 function sc_assv(o, al) {
1031     while (al !== null) {
1032         if (al.car.car === o)
1033             return al.car;
1034         al = al.cdr;
1035     }
1036     return false;
1037 }
1038 /*** META ((export #t)) */
1039 function sc_assoc(o, al) {
1040     while (al !== null) {
1041         if (sc_isEqual(al.car.car, o))
1042             return al.car;
1043         al = al.cdr;
1044     }
1045     return false;
1046 }
1047
1048 /* can be used for mutable strings and characters */
1049 function sc_isCharStringEqual(cs1, cs2) { return cs1.val === cs2.val; }
1050 function sc_isCharStringLess(cs1, cs2) { return cs1.val < cs2.val; }
1051 function sc_isCharStringGreater(cs1, cs2) { return cs1.val > cs2.val; }
1052 function sc_isCharStringLessEqual(cs1, cs2) { return cs1.val <= cs2.val; }
1053 function sc_isCharStringGreaterEqual(cs1, cs2) { return cs1.val >= cs2.val; }
1054 function sc_isCharStringCIEqual(cs1, cs2)
1055     { return cs1.val.toLowerCase() === cs2.val.toLowerCase(); }
1056 function sc_isCharStringCILess(cs1, cs2)
1057     { return cs1.val.toLowerCase() < cs2.val.toLowerCase(); }
1058 function sc_isCharStringCIGreater(cs1, cs2)
1059     { return cs1.val.toLowerCase() > cs2.val.toLowerCase(); }
1060 function sc_isCharStringCILessEqual(cs1, cs2)
1061     { return cs1.val.toLowerCase() <= cs2.val.toLowerCase(); }
1062 function sc_isCharStringCIGreaterEqual(cs1, cs2)
1063     { return cs1.val.toLowerCase() >= cs2.val.toLowerCase(); }
1064
1065
1066
1067
1068 function sc_Char(c) {
1069     var cached = sc_Char.lazy[c];
1070     if (cached)
1071         return cached;
1072     this.val = c;
1073     sc_Char.lazy[c] = this;
1074     // add return, so FF does not complain.
1075     return undefined;
1076 }
1077 sc_Char.lazy = new Object();
1078 // thanks to Eric
1079 sc_Char.char2readable = {
1080     "\000": "#\\null",
1081     "\007": "#\\bell",
1082     "\010": "#\\backspace",
1083     "\011": "#\\tab",
1084     "\012": "#\\newline",
1085     "\014": "#\\page",
1086     "\015": "#\\return",
1087     "\033": "#\\escape",
1088     "\040": "#\\space",
1089     "\177": "#\\delete",
1090
1091   /* poeticless names */
1092     "\001": "#\\soh",
1093     "\002": "#\\stx",
1094     "\003": "#\\etx",
1095     "\004": "#\\eot",
1096     "\005": "#\\enq",
1097     "\006": "#\\ack",
1098
1099     "\013": "#\\vt",
1100     "\016": "#\\so",
1101     "\017": "#\\si",
1102
1103     "\020": "#\\dle",
1104     "\021": "#\\dc1",
1105     "\022": "#\\dc2",
1106     "\023": "#\\dc3",
1107     "\024": "#\\dc4",
1108     "\025": "#\\nak",
1109     "\026": "#\\syn",
1110     "\027": "#\\etb",
1111
1112     "\030": "#\\can",
1113     "\031": "#\\em",
1114     "\032": "#\\sub",
1115     "\033": "#\\esc",
1116     "\034": "#\\fs",
1117     "\035": "#\\gs",
1118     "\036": "#\\rs",
1119     "\037": "#\\us"};
1120
1121 sc_Char.readable2char = {
1122     "null": "\000",
1123     "bell": "\007",
1124     "backspace": "\010",
1125     "tab": "\011",
1126     "newline": "\012",
1127     "page": "\014",
1128     "return": "\015",
1129     "escape": "\033",
1130     "space": "\040",
1131     "delete": "\000",
1132     "soh": "\001",
1133     "stx": "\002",
1134     "etx": "\003",
1135     "eot": "\004",
1136     "enq": "\005",
1137     "ack": "\006",
1138     "bel": "\007",
1139     "bs": "\010",
1140     "ht": "\011",
1141     "nl": "\012",
1142     "vt": "\013",
1143     "np": "\014",
1144     "cr": "\015",
1145     "so": "\016",
1146     "si": "\017",
1147     "dle": "\020",
1148     "dc1": "\021",
1149     "dc2": "\022",
1150     "dc3": "\023",
1151     "dc4": "\024",
1152     "nak": "\025",
1153     "syn": "\026",
1154     "etb": "\027",
1155     "can": "\030",
1156     "em": "\031",
1157     "sub": "\032",
1158     "esc": "\033",
1159     "fs": "\034",
1160     "gs": "\035",
1161     "rs": "\036",
1162     "us": "\037",
1163     "sp": "\040",
1164     "del": "\177"};
1165     
1166 sc_Char.prototype.toString = function() {
1167     return this.val;
1168 };
1169 // sc_toDisplayString == toString
1170 sc_Char.prototype.sc_toWriteString = function() {
1171     var entry = sc_Char.char2readable[this.val];
1172     if (entry)
1173         return entry;
1174     else
1175         return "#\\" + this.val;
1176 };
1177
1178 /*** META ((export #t)
1179            (type bool)
1180            (peephole (postfix "instanceof sc_Char")))
1181 */
1182 function sc_isChar(c) {
1183     return (c instanceof sc_Char);
1184 }
1185
1186 /*** META ((export char=?)
1187            (type bool)
1188            (peephole (hole 2 c1 ".val === " c2 ".val")))
1189 */
1190 var sc_isCharEqual = sc_isCharStringEqual;
1191 /*** META ((export char<?)
1192            (type bool)
1193            (peephole (hole 2 c1 ".val < " c2 ".val")))
1194 */
1195 var sc_isCharLess = sc_isCharStringLess;
1196 /*** META ((export char>?)
1197            (type bool)
1198            (peephole (hole 2 c1 ".val > " c2 ".val")))
1199 */
1200 var sc_isCharGreater = sc_isCharStringGreater;
1201 /*** META ((export char<=?)
1202            (type bool)
1203            (peephole (hole 2 c1 ".val <= " c2 ".val")))
1204 */
1205 var sc_isCharLessEqual = sc_isCharStringLessEqual;
1206 /*** META ((export char>=?)
1207            (type bool)
1208            (peephole (hole 2 c1 ".val >= " c2 ".val")))
1209 */
1210 var sc_isCharGreaterEqual = sc_isCharStringGreaterEqual;
1211 /*** META ((export char-ci=?)
1212            (type bool)
1213            (peephole (hole 2 c1 ".val.toLowerCase() === " c2 ".val.toLowerCase()")))
1214 */
1215 var sc_isCharCIEqual = sc_isCharStringCIEqual;
1216 /*** META ((export char-ci<?)
1217            (type bool)
1218            (peephole (hole 2 c1 ".val.toLowerCase() < " c2 ".val.toLowerCase()")))
1219 */
1220 var sc_isCharCILess = sc_isCharStringCILess;
1221 /*** META ((export char-ci>?)
1222            (type bool)
1223            (peephole (hole 2 c1 ".val.toLowerCase() > " c2 ".val.toLowerCase()")))
1224 */
1225 var sc_isCharCIGreater = sc_isCharStringCIGreater;
1226 /*** META ((export char-ci<=?)
1227            (type bool)
1228            (peephole (hole 2 c1 ".val.toLowerCase() <= " c2 ".val.toLowerCase()")))
1229 */
1230 var sc_isCharCILessEqual = sc_isCharStringCILessEqual;
1231 /*** META ((export char-ci>=?)
1232            (type bool)
1233            (peephole (hole 2 c1 ".val.toLowerCase() >= " c2 ".val.toLowerCase()")))
1234 */
1235 var sc_isCharCIGreaterEqual = sc_isCharStringCIGreaterEqual;
1236
1237 var SC_NUMBER_CLASS = "0123456789";
1238 var SC_WHITESPACE_CLASS = ' \r\n\t\f';
1239 var SC_LOWER_CLASS = 'abcdefghijklmnopqrstuvwxyz';
1240 var SC_UPPER_CLASS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
1241
1242 function sc_isCharOfClass(c, cl) { return (cl.indexOf(c) != -1); }
1243 /*** META ((export #t)
1244            (type bool))
1245 */
1246 function sc_isCharAlphabetic(c)
1247     { return sc_isCharOfClass(c.val, SC_LOWER_CLASS) ||
1248           sc_isCharOfClass(c.val, SC_UPPER_CLASS); }
1249 /*** META ((export #t)
1250            (type bool)
1251            (peephole (hole 1 "SC_NUMBER_CLASS.indexOf(" c ".val) != -1")))
1252 */
1253 function sc_isCharNumeric(c)
1254     { return sc_isCharOfClass(c.val, SC_NUMBER_CLASS); }
1255 /*** META ((export #t)
1256            (type bool))
1257 */
1258 function sc_isCharWhitespace(c) {
1259     var tmp = c.val;
1260     return tmp === " " || tmp === "\r" || tmp === "\n" || tmp === "\t" || tmp === "\f";
1261 }
1262 /*** META ((export #t)
1263            (type bool)
1264            (peephole (hole 1 "SC_UPPER_CLASS.indexOf(" c ".val) != -1")))
1265 */
1266 function sc_isCharUpperCase(c)
1267     { return sc_isCharOfClass(c.val, SC_UPPER_CLASS); }
1268 /*** META ((export #t)
1269            (type bool)
1270            (peephole (hole 1 "SC_LOWER_CLASS.indexOf(" c ".val) != -1")))
1271 */
1272 function sc_isCharLowerCase(c)
1273     { return sc_isCharOfClass(c.val, SC_LOWER_CLASS); }
1274
1275 /*** META ((export #t)
1276            (peephole (postfix ".val.charCodeAt(0)")))
1277 */
1278 function sc_char2integer(c)
1279     { return c.val.charCodeAt(0); }
1280 /*** META ((export #t)
1281            (peephole (hole 1 "new sc_Char(String.fromCharCode(" n "))")))
1282 */
1283 function sc_integer2char(n)
1284     { return new sc_Char(String.fromCharCode(n)); }
1285
1286 /*** META ((export #t)
1287            (peephole (hole 1 "new sc_Char(" c ".val.toUpperCase())")))
1288 */
1289 function sc_charUpcase(c)
1290     { return new sc_Char(c.val.toUpperCase()); }
1291 /*** META ((export #t)
1292            (peephole (hole 1 "new sc_Char(" c ".val.toLowerCase())")))
1293 */
1294 function sc_charDowncase(c)
1295     { return new sc_Char(c.val.toLowerCase()); }
1296
1297 function sc_makeJSStringOfLength(k, c) {
1298     var fill;
1299     if (c === undefined)
1300         fill = " ";
1301     else
1302         fill = c;
1303     var res = "";
1304     var len = 1;
1305     // every round doubles the size of fill.
1306     while (k >= len) {
1307         if (k & len)
1308             res = res.concat(fill);
1309         fill = fill.concat(fill);
1310         len *= 2;
1311     }
1312     return res;
1313 }
1314
1315 function sc_makejsString(k, c) {
1316     var fill;
1317     if (c)
1318         fill = c.val;
1319     else
1320         fill = " ";
1321     return sc_makeJSStringOfLength(k, fill);
1322 }
1323
1324 function sc_jsstring2list(s) {
1325     var res = null;
1326     for (var i = s.length - 1; i >= 0; i--)
1327         res = sc_cons(new sc_Char(s.charAt(i)), res);
1328     return res;
1329 }
1330
1331 function sc_list2jsstring(l) {
1332     var a = new Array();
1333     while(l !== null) {
1334         a.push(l.car.val);
1335         l = l.cdr;
1336     }
1337     return "".concat.apply("", a);
1338 }
1339
1340 var sc_Vector = Array;
1341
1342 sc_Vector.prototype.sc_toWriteOrDisplayString = function(writeOrDisplay) {
1343     if (this.length === 0) return "#()";
1344
1345     var res = "#(" + writeOrDisplay(this[0]);
1346     for (var i = 1; i < this.length; i++)
1347         res += " " + writeOrDisplay(this[i]);
1348     res += ")";
1349     return res;
1350 };
1351 sc_Vector.prototype.sc_toDisplayString = function() {
1352     return this.sc_toWriteOrDisplayString(sc_toDisplayString);
1353 };
1354 sc_Vector.prototype.sc_toWriteString = function() {
1355     return this.sc_toWriteOrDisplayString(sc_toWriteString);
1356 };
1357
1358 /*** META ((export vector? array?)
1359            (type bool)
1360            (peephole (postfix " instanceof sc_Vector")))
1361 */
1362 function sc_isVector(v) {
1363     return (v instanceof sc_Vector);
1364 }
1365
1366 // only applies to vectors
1367 function sc_isVectorEqual(v1, v2, comp) {
1368     if (v1.length !== v2.length) return false;
1369     for (var i = 0; i < v1.length; i++)
1370         if (!comp(v1[i], v2[i])) return false;
1371     return true;
1372 }
1373
1374 /*** META ((export make-vector make-array)) */
1375 function sc_makeVector(size, fill) {
1376     var a = new sc_Vector(size);
1377     if (fill !== undefined)
1378         sc_vectorFillBang(a, fill);
1379     return a;
1380 }
1381
1382 /*** META ((export vector array)
1383            (peephole (vector)))
1384 */
1385 function sc_vector() {
1386     var a = new sc_Vector();
1387     for (var i = 0; i < arguments.length; i++)
1388         a.push(arguments[i]);
1389     return a;
1390 }
1391
1392 /*** META ((export vector-length array-length)
1393            (peephole (postfix ".length")))
1394 */
1395 function sc_vectorLength(v) {
1396     return v.length;
1397 }
1398
1399 /*** META ((export vector-ref array-ref)
1400            (peephole (hole 2 v "[" pos "]")))
1401 */
1402 function sc_vectorRef(v, pos) {
1403     return v[pos];
1404 }
1405
1406 /*** META ((export vector-set! array-set!)
1407            (peephole (hole 3 v "[" pos "] = " val)))
1408 */
1409 function sc_vectorSetBang(v, pos, val) {
1410     v[pos] = val;
1411 }
1412
1413 /*** META ((export vector->list array->list)) */
1414 function sc_vector2list(a) {
1415     var res = null;
1416     for (var i = a.length-1; i >= 0; i--)
1417         res = sc_cons(a[i], res);
1418     return res;
1419 }
1420
1421 /*** META ((export list->vector list->array)) */
1422 function sc_list2vector(l) {
1423     var a = new sc_Vector();
1424     while(l !== null) {
1425         a.push(l.car);
1426         l = l.cdr;
1427     }
1428     return a;
1429 }
1430
1431 /*** META ((export vector-fill! array-fill!)) */
1432 function sc_vectorFillBang(a, fill) {
1433     for (var i = 0; i < a.length; i++)
1434         a[i] = fill;
1435 }
1436
1437
1438 /*** META ((export #t)) */
1439 function sc_copyVector(a, len) {
1440     if (len <= a.length)
1441         return a.slice(0, len);
1442     else {
1443         var tmp = a.concat();
1444         tmp.length = len;
1445         return tmp;
1446     }
1447 }
1448
1449 /*** META ((export #t)
1450            (peephole (hole 3 a ".slice(" start "," end ")")))
1451 */
1452 function sc_vectorCopy(a, start, end) {
1453     return a.slice(start, end);
1454 }
1455
1456 /*** META ((export #t)) */
1457 function sc_vectorCopyBang(target, tstart, source, sstart, send) {
1458     if (!sstart) sstart = 0;
1459     if (!send) send = source.length;
1460
1461     // if target == source we don't want to overwrite not yet copied elements.
1462     if (tstart <= sstart) {
1463         for (var i = tstart, j = sstart; j < send; i++, j++) {
1464             target[i] = source[j];
1465         }
1466     } else {
1467         var diff = send - sstart;
1468         for (var i = tstart + diff - 1, j = send - 1;
1469              j >= sstart;
1470              i--, j--) {
1471             target[i] = source[j];
1472         }
1473     }
1474     return target;
1475 }
1476
1477 /*** META ((export #t)
1478            (type bool)
1479            (peephole (hole 1 "typeof " o " === 'function'")))
1480 */
1481 function sc_isProcedure(o) {
1482     return (typeof o === "function");
1483 }
1484
1485 /*** META ((export #t)) */
1486 function sc_apply(proc) {
1487     var args = new Array();
1488     // first part of arguments are not in list-form.
1489     for (var i = 1; i < arguments.length - 1; i++)
1490         args.push(arguments[i]);
1491     var l = arguments[arguments.length - 1];
1492     while (l !== null) {
1493         args.push(l.car);
1494         l = l.cdr;
1495     }
1496     return proc.apply(null, args);
1497 }
1498
1499 /*** META ((export #t)) */
1500 function sc_map(proc, l1) {
1501     if (l1 === undefined)
1502         return null;
1503     // else
1504     var nbApplyArgs = arguments.length - 1;
1505     var applyArgs = new Array(nbApplyArgs);
1506     var revres = null;
1507     while (l1 !== null) {
1508         for (var i = 0; i < nbApplyArgs; i++) {
1509             applyArgs[i] = arguments[i + 1].car;
1510             arguments[i + 1] = arguments[i + 1].cdr;
1511         }
1512         revres = sc_cons(proc.apply(null, applyArgs), revres);
1513     }
1514     return sc_reverseAppendBang(revres, null);
1515 }
1516
1517 /*** META ((export #t)) */
1518 function sc_mapBang(proc, l1) {
1519     if (l1 === undefined)
1520         return null;
1521     // else
1522     var l1_orig = l1;
1523     var nbApplyArgs = arguments.length - 1;
1524     var applyArgs = new Array(nbApplyArgs);
1525     while (l1 !== null) {
1526         var tmp = l1;
1527         for (var i = 0; i < nbApplyArgs; i++) {
1528             applyArgs[i] = arguments[i + 1].car;
1529             arguments[i + 1] = arguments[i + 1].cdr;
1530         }
1531         tmp.car = proc.apply(null, applyArgs);
1532     }
1533     return l1_orig;
1534 }
1535      
1536 /*** META ((export #t)) */
1537 function sc_forEach(proc, l1) {
1538     if (l1 === undefined)
1539         return undefined;
1540     // else
1541     var nbApplyArgs = arguments.length - 1;
1542     var applyArgs = new Array(nbApplyArgs);
1543     while (l1 !== null) {
1544         for (var i = 0; i < nbApplyArgs; i++) {
1545             applyArgs[i] = arguments[i + 1].car;
1546             arguments[i + 1] = arguments[i + 1].cdr;
1547         }
1548         proc.apply(null, applyArgs);
1549     }
1550     // add return so FF does not complain.
1551     return undefined;
1552 }
1553
1554 /*** META ((export #t)) */
1555 function sc_filter(proc, l1) {
1556     var dummy = { cdr : null };
1557     var tail = dummy;
1558     while (l1 !== null) {
1559         if (proc(l1.car) !== false) {
1560             tail.cdr = sc_cons(l1.car, null);
1561             tail = tail.cdr;
1562         }
1563         l1 = l1.cdr;
1564     }
1565     return dummy.cdr;
1566 }
1567
1568 /*** META ((export #t)) */
1569 function sc_filterBang(proc, l1) {
1570     var head = sc_cons("dummy", l1);
1571     var it = head;
1572     var next = l1;
1573     while (next !== null) {
1574         if (proc(next.car) !== false) {
1575             it.cdr = next
1576             it = next;
1577         }
1578         next = next.cdr;
1579     }
1580     it.cdr = null;
1581     return head.cdr;
1582 }
1583
1584 function sc_filterMap1(proc, l1) {
1585     var revres = null;
1586     while (l1 !== null) {
1587         var tmp = proc(l1.car)
1588         if (tmp !== false) revres = sc_cons(tmp, revres);
1589         l1 = l1.cdr;
1590     }
1591     return sc_reverseAppendBang(revres, null);
1592 }
1593 function sc_filterMap2(proc, l1, l2) {
1594     var revres = null;
1595     while (l1 !== null) {
1596         var tmp = proc(l1.car, l2.car);
1597         if(tmp !== false) revres = sc_cons(tmp, revres);
1598         l1 = l1.cdr;
1599         l2 = l2.cdr
1600     }
1601     return sc_reverseAppendBang(revres, null);
1602 }
1603
1604 /*** META ((export #t)) */
1605 function sc_filterMap(proc, l1, l2, l3) {
1606     if (l2 === undefined)
1607         return sc_filterMap1(proc, l1);
1608     else if (l3 === undefined)
1609         return sc_filterMap2(proc, l1, l2);
1610     // else
1611     var nbApplyArgs = arguments.length - 1;
1612     var applyArgs = new Array(nbApplyArgs);
1613     var revres = null;
1614     while (l1 !== null) {
1615         for (var i = 0; i < nbApplyArgs; i++) {
1616             applyArgs[i] = arguments[i + 1].car;
1617             arguments[i + 1] = arguments[i + 1].cdr;
1618         }
1619         var tmp = proc.apply(null, applyArgs);
1620         if(tmp !== false) revres = sc_cons(tmp, revres);
1621     }
1622     return sc_reverseAppendBang(revres, null);
1623 }
1624
1625 /*** META ((export #t)) */
1626 function sc_any(proc, l) {
1627     var revres = null;
1628     while (l !== null) {
1629         var tmp = proc(l.car);
1630         if(tmp !== false) return tmp;
1631         l = l.cdr;
1632     }
1633     return false;
1634 }
1635
1636 /*** META ((export any?)
1637            (peephole (hole 2 "sc_any(" proc "," l ") !== false")))
1638 */
1639 function sc_anyPred(proc, l) {
1640     return sc_any(proc, l)!== false;
1641 }
1642
1643 /*** META ((export #t)) */
1644 function sc_every(proc, l) {
1645     var revres = null;
1646     var tmp = true;
1647     while (l !== null) {
1648         tmp = proc(l.car);
1649         if (tmp === false) return false;
1650         l = l.cdr;
1651     }
1652     return tmp;
1653 }
1654
1655 /*** META ((export every?)
1656            (peephole (hole 2 "sc_every(" proc "," l ") !== false")))
1657 */
1658 function sc_everyPred(proc, l) {
1659     var tmp = sc_every(proc, l);
1660     if (tmp !== false) return true;
1661     return false;
1662 }
1663
1664 /*** META ((export #t)
1665            (peephole (postfix "()")))
1666 */
1667 function sc_force(o) {
1668     return o();
1669 }
1670
1671 /*** META ((export #t)) */
1672 function sc_makePromise(proc) {
1673     var isResultReady = false;
1674     var result = undefined;
1675     return function() {
1676         if (!isResultReady) {
1677             var tmp = proc();
1678             if (!isResultReady) {
1679                 isResultReady = true;
1680                 result = tmp;
1681             }
1682         }
1683         return result;
1684     };
1685 }
1686
1687 function sc_Values(values) {
1688     this.values = values;
1689 }
1690
1691 /*** META ((export #t)
1692            (peephole (values)))
1693 */
1694 function sc_values() {
1695     if (arguments.length === 1)
1696         return arguments[0];
1697     else
1698         return new sc_Values(arguments);
1699 }
1700
1701 /*** META ((export #t)) */
1702 function sc_callWithValues(producer, consumer) {
1703     var produced = producer();
1704     if (produced instanceof sc_Values)
1705         return consumer.apply(null, produced.values);
1706     else
1707         return consumer(produced);
1708 }
1709
1710 /*** META ((export #t)) */
1711 function sc_dynamicWind(before, thunk, after) {
1712     before();
1713     try {
1714         var res = thunk();
1715         return res;
1716     } finally {
1717         after();
1718     }
1719 }
1720
1721
1722 // TODO: eval/scheme-report-environment/null-environment/interaction-environment
1723
1724 // LIMITATION: 'load' doesn't exist without files.
1725 // LIMITATION: transcript-on/transcript-off doesn't exist without files.
1726
1727
1728 function sc_Struct(name) {
1729     this.name = name;
1730 }
1731 sc_Struct.prototype.sc_toDisplayString = function() {
1732     return "#<struct" + sc_hash(this) + ">";
1733 };
1734 sc_Struct.prototype.sc_toWriteString = sc_Struct.prototype.sc_toDisplayString;
1735
1736 /*** META ((export #t)
1737            (peephole (hole 1 "new sc_Struct(" name ")")))
1738 */
1739 function sc_makeStruct(name) {
1740     return new sc_Struct(name);
1741 }
1742
1743 /*** META ((export #t)
1744            (type bool)
1745            (peephole (postfix " instanceof sc_Struct")))
1746 */
1747 function sc_isStruct(o) {
1748     return (o instanceof sc_Struct);
1749 }
1750
1751 /*** META ((export #t)
1752            (type bool)
1753            (peephole (hole 2 "(" 1 " instanceof sc_Struct) && ( " 1 ".name === " 0 ")")))
1754 */
1755 function sc_isStructNamed(name, s) {
1756     return ((s instanceof sc_Struct) && (s.name === name));
1757 }
1758
1759 /*** META ((export struct-field)
1760            (peephole (hole 3 0 "[" 2 "]")))
1761 */
1762 function sc_getStructField(s, name, field) {
1763     return s[field];
1764 }
1765
1766 /*** META ((export struct-field-set!)
1767            (peephole (hole 4 0 "[" 2 "] = " 3)))
1768 */
1769 function sc_setStructFieldBang(s, name, field, val) {
1770     s[field] = val;
1771 }
1772
1773 /*** META ((export #t)
1774            (peephole (prefix "~")))
1775 */
1776 function sc_bitNot(x) {
1777     return ~x;
1778 }
1779
1780 /*** META ((export #t)
1781            (peephole (infix 2 2 "&")))
1782 */
1783 function sc_bitAnd(x, y) {
1784     return x & y;
1785 }
1786
1787 /*** META ((export #t)
1788            (peephole (infix 2 2 "|")))
1789 */
1790 function sc_bitOr(x, y) {
1791     return x | y;
1792 }
1793
1794 /*** META ((export #t)
1795            (peephole (infix 2 2 "^")))
1796 */
1797 function sc_bitXor(x, y) {
1798     return x ^ y;
1799 }
1800
1801 /*** META ((export #t)
1802            (peephole (infix 2 2 "<<")))
1803 */
1804 function sc_bitLsh(x, y) {
1805     return x << y;
1806 }
1807
1808 /*** META ((export #t)
1809            (peephole (infix 2 2 ">>")))
1810 */
1811 function sc_bitRsh(x, y) {
1812     return x >> y;
1813 }
1814
1815 /*** META ((export #t)
1816            (peephole (infix 2 2 ">>>")))
1817 */
1818 function sc_bitUrsh(x, y) {
1819     return x >>> y;
1820 }
1821
1822 /*** META ((export js-field js-property)
1823            (peephole (hole 2 o "[" field "]")))
1824 */
1825 function sc_jsField(o, field) {
1826     return o[field];
1827 }
1828
1829 /*** META ((export js-field-set! js-property-set!)
1830            (peephole (hole 3 o "[" field "] = " val)))
1831 */
1832 function sc_setJsFieldBang(o, field, val) {
1833     return o[field] = val;
1834 }
1835
1836 /*** META ((export js-field-delete! js-property-delete!)
1837            (peephole (hole 2 "delete" o "[" field "]")))
1838 */
1839 function sc_deleteJsFieldBang(o, field) {
1840     delete o[field];
1841 }
1842
1843 /*** META ((export #t)
1844            (peephole (jsCall)))
1845 */
1846 function sc_jsCall(o, fun) {
1847     var args = new Array();
1848     for (var i = 2; i < arguments.length; i++)
1849         args[i-2] = arguments[i];
1850     return fun.apply(o, args);
1851 }
1852
1853 /*** META ((export #t)
1854            (peephole (jsMethodCall)))
1855 */
1856 function sc_jsMethodCall(o, field) {
1857     var args = new Array();
1858     for (var i = 2; i < arguments.length; i++)
1859         args[i-2] = arguments[i];
1860     return o[field].apply(o, args);
1861 }
1862
1863 /*** META ((export new js-new)
1864            (peephole (jsNew)))
1865 */
1866 function sc_jsNew(c) {
1867     var evalStr = "new c(";
1868     evalStr +=arguments.length > 1? "arguments[1]": "";
1869     for (var i = 2; i < arguments.length; i++)
1870         evalStr += ", arguments[" + i + "]";
1871     evalStr +=")";
1872     return eval(evalStr);
1873 }    
1874
1875 // ======================== RegExp ====================
1876 /*** META ((export #t)) */
1877 function sc_pregexp(re) {
1878     return new RegExp(sc_string2jsstring(re));
1879 }
1880
1881 /*** META ((export #t)) */
1882 function sc_pregexpMatch(re, s) {
1883     var reg = (re instanceof RegExp) ? re : sc_pregexp(re);
1884     var tmp = reg.exec(sc_string2jsstring(s));
1885     
1886     if (tmp == null) return false;
1887     
1888     var res = null;
1889     for (var i = tmp.length-1; i >= 0; i--) {
1890         if (tmp[i] !== null) {
1891             res = sc_cons(sc_jsstring2string(tmp[i]), res);
1892         } else {
1893             res = sc_cons(false, res);
1894         }
1895     }
1896     return res;
1897 }
1898    
1899 /*** META ((export #t)) */
1900 function sc_pregexpReplace(re, s1, s2) {
1901    var reg;
1902    var jss1 = sc_string2jsstring(s1);
1903    var jss2 = sc_string2jsstring(s2);
1904
1905    if (re instanceof RegExp) {
1906        if (re.global)
1907            reg = re;
1908        else
1909            reg = new RegExp(re.source);
1910    } else {
1911        reg = new RegExp(sc_string2jsstring(re));
1912    }
1913
1914    return jss1.replace(reg, jss2);
1915 }
1916    
1917 /*** META ((export pregexp-replace*)) */
1918 function sc_pregexpReplaceAll(re, s1, s2) {
1919    var reg;
1920    var jss1 = sc_string2jsstring(s1);
1921    var jss2 = sc_string2jsstring(s2);
1922
1923    if (re instanceof RegExp) {
1924       if (re.global)
1925           reg = re;
1926       else
1927           reg = new RegExp(re.source, "g");
1928    } else {
1929        reg = new RegExp(sc_string2jsstring(re), "g");
1930    }
1931
1932    return jss1.replace(reg, jss2);
1933 }
1934
1935 /*** META ((export #t)) */
1936 function sc_pregexpSplit(re, s) {
1937    var reg = ((re instanceof RegExp) ?
1938               re :
1939               new RegExp(sc_string2jsstring(re)));
1940    var jss = sc_string2jsstring(s);
1941    var tmp = jss.split(reg);
1942
1943    if (tmp == null) return false;
1944
1945    return sc_vector2list(tmp);
1946 }
1947    
1948
1949 /* =========================================================================== */
1950 /* Other library stuff */
1951 /* =========================================================================== */
1952
1953 /*** META ((export #t)
1954            (peephole (hole 1 "Math.floor(Math.random()*" 'n ")")))
1955 */
1956 function sc_random(n) {
1957     return Math.floor(Math.random()*n);
1958 }
1959
1960 /*** META ((export current-date)
1961            (peephole (hole 0 "new Date()")))
1962 */
1963 function sc_currentDate() {
1964    return new Date();
1965 }
1966
1967 function sc_Hashtable() {
1968 }
1969 sc_Hashtable.prototype.toString = function() {
1970     return "#{%hashtable}";
1971 };
1972 // sc_toWriteString == sc_toDisplayString == toString
1973
1974 function sc_HashtableElement(key, val) {
1975     this.key = key;
1976     this.val = val;
1977 }
1978
1979 /*** META ((export #t)
1980            (peephole (hole 0 "new sc_Hashtable()")))
1981 */
1982 function sc_makeHashtable() {
1983     return new sc_Hashtable();
1984 }
1985
1986 /*** META ((export #t)) */
1987 function sc_hashtablePutBang(ht, key, val) {
1988     var hash = sc_hash(key);
1989     ht[hash] = new sc_HashtableElement(key, val);
1990 }
1991
1992 /*** META ((export #t)) */
1993 function sc_hashtableGet(ht, key) {
1994     var hash = sc_hash(key);
1995     if (hash in ht)
1996         return ht[hash].val;
1997     else
1998         return false;
1999 }
2000
2001 /*** META ((export #t)) */
2002 function sc_hashtableForEach(ht, f) {
2003     for (var v in ht) {
2004         if (ht[v] instanceof sc_HashtableElement)
2005             f(ht[v].key, ht[v].val);
2006     }
2007 }
2008
2009 /*** META ((export hashtable-contains?)
2010            (peephole (hole 2 "sc_hash(" 1 ") in " 0)))
2011 */
2012 function sc_hashtableContains(ht, key) {
2013     var hash = sc_hash(key);
2014     if (hash in ht)
2015         return true;
2016     else
2017         return false;
2018 }
2019
2020 var SC_HASH_COUNTER = 0;
2021
2022 function sc_hash(o) {
2023     if (o === null)
2024         return "null";
2025     else if (o === undefined)
2026         return "undefined";
2027     else if (o === true)
2028         return "true";
2029     else if (o === false)
2030         return "false";
2031     else if (typeof o === "number")
2032         return "num-" + o;
2033     else if (typeof o === "string")
2034         return "jsstr-" + o;
2035     else if (o.sc_getHash)
2036         return o.sc_getHash();
2037     else
2038         return sc_counterHash.call(o);
2039 }
2040 function sc_counterHash() {
2041     if (!this.sc_hash) {
2042         this.sc_hash = "hash-" + SC_HASH_COUNTER;
2043         SC_HASH_COUNTER++;
2044     }
2045     return this.sc_hash;
2046 }
2047
2048 function sc_Trampoline(args, maxTailCalls) {
2049     this['__trampoline return__'] = true;
2050     this.args = args;
2051     this.MAX_TAIL_CALLs = maxTailCalls;
2052 }
2053 // TODO: call/cc stuff
2054 sc_Trampoline.prototype.restart = function() {
2055     var o = this;
2056     while (true) {
2057         // set both globals.
2058         SC_TAIL_OBJECT.calls = o.MAX_TAIL_CALLs-1;
2059         var fun = o.args.callee;
2060         var res = fun.apply(SC_TAIL_OBJECT, o.args);
2061         if (res instanceof sc_Trampoline)
2062             o = res;
2063         else
2064             return res;
2065     }
2066 }
2067
2068 /*** META ((export bind-exit-lambda)) */
2069 function sc_bindExitLambda(proc) {
2070     var escape_obj = new sc_BindExitException();
2071     var escape = function(res) {
2072         escape_obj.res = res;
2073         throw escape_obj;
2074     };
2075     try {
2076         return proc(escape);
2077     } catch(e) {
2078         if (e === escape_obj) {
2079             return e.res;
2080         }
2081         throw e;
2082     }
2083 }
2084 function sc_BindExitException() {
2085     this._internalException = true;
2086 }
2087
2088 var SC_SCM2JS_GLOBALS = new Object();
2089
2090 // default tail-call depth.
2091 // normally the program should set it again. but just in case...
2092 var SC_TAIL_OBJECT = new Object();
2093 SC_SCM2JS_GLOBALS.TAIL_OBJECT = SC_TAIL_OBJECT;
2094 // ======================== I/O =======================
2095
2096 /*------------------------------------------------------------------*/
2097
2098 function sc_EOF() {
2099 }
2100 var SC_EOF_OBJECT = new sc_EOF();
2101
2102 function sc_Port() {
2103 }
2104
2105 /* --------------- Input ports -------------------------------------*/
2106
2107 function sc_InputPort() {
2108 }
2109 sc_InputPort.prototype = new sc_Port();
2110
2111 sc_InputPort.prototype.peekChar = function() {
2112     if (!("peeked" in this))
2113         this.peeked = this.getNextChar();
2114     return this.peeked;
2115 }
2116 sc_InputPort.prototype.readChar = function() {
2117     var tmp = this.peekChar();
2118     delete this.peeked;
2119     return tmp;
2120 }
2121 sc_InputPort.prototype.isCharReady = function() {
2122     return true;
2123 }
2124 sc_InputPort.prototype.close = function() {
2125     // do nothing
2126 }
2127
2128 /* .............. String port ..........................*/
2129 function sc_ErrorInputPort() {
2130 };
2131 sc_ErrorInputPort.prototype = new sc_InputPort();
2132 sc_ErrorInputPort.prototype.getNextChar = function() {
2133     throw "can't read from error-port.";
2134 };
2135 sc_ErrorInputPort.prototype.isCharReady = function() {
2136     return false;
2137 };
2138     
2139
2140 /* .............. String port ..........................*/
2141
2142 function sc_StringInputPort(jsStr) {
2143     // we are going to do some charAts on the str.
2144     // instead of recreating all the time a String-object, we
2145     // create one in the beginning. (not sure, if this is really an optim)
2146     this.str = new String(jsStr);
2147     this.pos = 0;
2148 }
2149 sc_StringInputPort.prototype = new sc_InputPort();
2150 sc_StringInputPort.prototype.getNextChar = function() {
2151     if (this.pos >= this.str.length)
2152         return SC_EOF_OBJECT;
2153     return this.str.charAt(this.pos++);
2154 };
2155
2156 /* ------------- Read and other lib-funs  -------------------------------*/
2157 function sc_Token(type, val, pos) {
2158     this.type = type;
2159     this.val = val;
2160     this.pos = pos;
2161 }
2162 sc_Token.EOF = 0/*EOF*/;
2163 sc_Token.OPEN_PAR = 1/*OPEN_PAR*/;
2164 sc_Token.CLOSE_PAR = 2/*CLOSE_PAR*/;
2165 sc_Token.OPEN_BRACE = 3/*OPEN_BRACE*/;
2166 sc_Token.CLOSE_BRACE = 4/*CLOSE_BRACE*/;
2167 sc_Token.OPEN_BRACKET = 5/*OPEN_BRACKET*/;
2168 sc_Token.CLOSE_BRACKET = 6/*CLOSE_BRACKET*/;
2169 sc_Token.WHITESPACE = 7/*WHITESPACE*/;
2170 sc_Token.QUOTE = 8/*QUOTE*/;
2171 sc_Token.ID = 9/*ID*/;
2172 sc_Token.DOT = 10/*DOT*/;
2173 sc_Token.STRING = 11/*STRING*/;
2174 sc_Token.NUMBER = 12/*NUMBER*/;
2175 sc_Token.ERROR = 13/*ERROR*/;
2176 sc_Token.VECTOR_BEGIN = 14/*VECTOR_BEGIN*/;
2177 sc_Token.TRUE = 15/*TRUE*/;
2178 sc_Token.FALSE = 16/*FALSE*/;
2179 sc_Token.UNSPECIFIED = 17/*UNSPECIFIED*/;
2180 sc_Token.REFERENCE = 18/*REFERENCE*/;
2181 sc_Token.STORE = 19/*STORE*/;
2182 sc_Token.CHAR = 20/*CHAR*/;
2183
2184 var SC_ID_CLASS = SC_LOWER_CLASS + SC_UPPER_CLASS + "!$%*+-./:<=>?@^_~";
2185 function sc_Tokenizer(port) {
2186     this.port = port;
2187 }
2188 sc_Tokenizer.prototype.peekToken = function() {
2189     if (this.peeked)
2190         return this.peeked;
2191     var newToken = this.nextToken();
2192     this.peeked = newToken;
2193     return newToken;
2194 };
2195 sc_Tokenizer.prototype.readToken = function() {
2196     var tmp = this.peekToken();
2197     delete this.peeked;
2198     return tmp;
2199 };
2200 sc_Tokenizer.prototype.nextToken = function() {
2201     var port = this.port;
2202     
2203     function isNumberChar(c) {
2204         return (c >= "0" && c <= "9");
2205     };
2206     function isIdOrNumberChar(c) {
2207         return SC_ID_CLASS.indexOf(c) != -1 || // ID-char
2208             (c >= "0" && c <= "9");
2209     }
2210     function isWhitespace(c) {
2211         return c === " " || c === "\r" || c === "\n" || c === "\t" || c === "\f";
2212     };
2213     function isWhitespaceOrEOF(c) {
2214         return isWhitespace(c) || c === SC_EOF_OBJECT;
2215     };
2216
2217     function readString() {
2218         res = "";
2219         while (true) {
2220             var c = port.readChar();
2221             switch (c) {
2222             case '"':
2223                 return new sc_Token(11/*STRING*/, res);
2224             case "\\":
2225                 var tmp = port.readChar();
2226                 switch (tmp) {
2227                 case '0': res += "\0"; break;
2228                 case 'a': res += "\a"; break;
2229                 case 'b': res += "\b"; break;
2230                 case 'f': res += "\f"; break;
2231                 case 'n': res += "\n"; break;
2232                 case 'r': res += "\r"; break;
2233                 case 't': res += "\t"; break;
2234                 case 'v': res += "\v"; break;
2235                 case '"': res += '"'; break;
2236                 case '\\': res += '\\'; break;
2237                 case 'x':
2238                     /* hexa-number */
2239                     var nb = 0;
2240                     while (true) {
2241                         var hexC = port.peekChar();
2242                         if (hexC >= '0' && hexC <= '9') {
2243                             port.readChar();
2244                             nb = nb * 16 + hexC.charCodeAt(0) - '0'.charCodeAt(0);
2245                         } else if (hexC >= 'a' && hexC <= 'f') {
2246                             port.readChar();
2247                             nb = nb * 16 + hexC.charCodeAt(0) - 'a'.charCodeAt(0);
2248                         } else if (hexC >= 'A' && hexC <= 'F') {
2249                             port.readChar();
2250                             nb = nb * 16 + hexC.charCodeAt(0) - 'A'.charCodeAt(0);
2251                         } else {
2252                             // next char isn't part of hex.
2253                             res += String.fromCharCode(nb);
2254                             break;
2255                         }
2256                     }
2257                     break;
2258                 default:
2259                     if (tmp === SC_EOF_OBJECT) {
2260                         return new sc_Token(13/*ERROR*/, "unclosed string-literal" + res);
2261                     }
2262                     res += tmp;
2263                 }
2264                 break;
2265             default:
2266                 if (c === SC_EOF_OBJECT) {
2267                     return new sc_Token(13/*ERROR*/, "unclosed string-literal" + res);
2268                 }
2269                 res += c;
2270             }
2271         }
2272     };
2273     function readIdOrNumber(firstChar) {
2274         var res = firstChar;
2275         while (isIdOrNumberChar(port.peekChar()))
2276             res += port.readChar();
2277         if (isNaN(res))
2278             return new sc_Token(9/*ID*/, res);
2279         else
2280             return new sc_Token(12/*NUMBER*/, res - 0);
2281     };
2282     
2283     function skipWhitespaceAndComments() {
2284         var done = false;
2285         while (!done) {
2286             done = true;
2287             while (isWhitespace(port.peekChar()))
2288                 port.readChar();
2289             if (port.peekChar() === ';') {
2290                 port.readChar();
2291                 done = false;
2292                 while (true) {
2293                     curChar = port.readChar();
2294                     if (curChar === SC_EOF_OBJECT ||
2295                         curChar === '\n')
2296                         break;
2297                 }
2298             }
2299         }
2300     };
2301     
2302     function readDot() {
2303         if (isWhitespace(port.peekChar()))
2304             return new sc_Token(10/*DOT*/);
2305         else
2306             return readIdOrNumber(".");
2307     };
2308
2309     function readSharp() {
2310         var c = port.readChar();
2311         if (isWhitespace(c))
2312             return new sc_Token(13/*ERROR*/, "bad #-pattern0.");
2313
2314         // reference
2315         if (isNumberChar(c)) {
2316             var nb = c - 0;
2317             while (isNumberChar(port.peekChar()))
2318                 nb = nb*10 + (port.readChar() - 0);
2319             switch (port.readChar()) {
2320             case '#':
2321                 return new sc_Token(18/*REFERENCE*/, nb);
2322             case '=':
2323                 return new sc_Token(19/*STORE*/, nb);
2324             default:
2325                 return new sc_Token(13/*ERROR*/, "bad #-pattern1." + nb);
2326             }
2327         }
2328
2329         if (c === "(")
2330             return new sc_Token(14/*VECTOR_BEGIN*/);
2331         
2332         if (c === "\\") { // character
2333             var tmp = ""
2334             while (!isWhitespaceOrEOF(port.peekChar()))
2335                 tmp += port.readChar();
2336             switch (tmp.length) {
2337             case 0: // it's escaping a whitespace char:
2338                 if (sc_isEOFObject(port.peekChar))
2339                     return new sc_Token(13/*ERROR*/, "bad #-pattern2.");
2340                 else
2341                     return new sc_Token(20/*CHAR*/, port.readChar());
2342             case 1:
2343                 return new sc_Token(20/*CHAR*/, tmp);
2344             default:
2345                 var entry = sc_Char.readable2char[tmp.toLowerCase()];
2346                 if (entry)
2347                     return new sc_Token(20/*CHAR*/, entry);
2348                 else
2349                     return new sc_Token(13/*ERROR*/, "unknown character description: #\\" + tmp);
2350             }
2351         }
2352
2353         // some constants (#t, #f, #unspecified)
2354         var res;
2355         var needing;
2356         switch (c) {
2357         case 't': res = new sc_Token(15/*TRUE*/, true); needing = ""; break;
2358         case 'f': res = new sc_Token(16/*FALSE*/, false); needing = ""; break;
2359         case 'u': res = new sc_Token(17/*UNSPECIFIED*/, undefined); needing = "nspecified"; break;
2360         default:
2361             return new sc_Token(13/*ERROR*/, "bad #-pattern3: " + c);
2362         }
2363         while(true) {
2364             c = port.peekChar();
2365             if ((isWhitespaceOrEOF(c) || c === ')') &&
2366                 needing == "")
2367                 return res;
2368             else if (isWhitespace(c) || needing == "")
2369                 return new sc_Token(13/*ERROR*/, "bad #-pattern4 " + c + " " + needing);
2370             else if (needing.charAt(0) == c) {
2371                 port.readChar(); // consume
2372                 needing = needing.slice(1);
2373             } else
2374                 return new sc_Token(13/*ERROR*/, "bad #-pattern5");
2375         }
2376         
2377     };
2378
2379     skipWhitespaceAndComments();
2380     var curChar = port.readChar();
2381     if (curChar === SC_EOF_OBJECT)
2382         return new sc_Token(0/*EOF*/, curChar);
2383     switch (curChar)
2384     {
2385     case " ":
2386     case "\n":
2387     case "\t":
2388         return readWhitespace();
2389     case "(":
2390         return new sc_Token(1/*OPEN_PAR*/);
2391     case ")":
2392         return new sc_Token(2/*CLOSE_PAR*/);
2393     case "{":
2394         return new sc_Token(3/*OPEN_BRACE*/);
2395     case "}":
2396         return new sc_Token(4/*CLOSE_BRACE*/);
2397     case "[":
2398         return new sc_Token(5/*OPEN_BRACKET*/);
2399     case "]":
2400         return new sc_Token(6/*CLOSE_BRACKET*/);
2401     case "'":
2402         return new sc_Token(8/*QUOTE*/);
2403     case "#":
2404         return readSharp();
2405     case ".":
2406         return readDot();
2407     case '"':
2408         return readString();
2409     default:
2410         if (isIdOrNumberChar(curChar))
2411             return readIdOrNumber(curChar);
2412         throw "unexpected character: " + curChar;
2413     }
2414 };
2415
2416 function sc_Reader(tokenizer) {
2417     this.tokenizer = tokenizer;
2418     this.backref = new Array();
2419 }
2420 sc_Reader.prototype.read = function() {
2421     function readList(listBeginType) {
2422         function matchesPeer(open, close) {
2423             return open === 1/*OPEN_PAR*/ && close === 2/*CLOSE_PAR*/
2424                 || open === 3/*OPEN_BRACE*/ && close === 4/*CLOSE_BRACE*/
2425                 || open === 5/*OPEN_BRACKET*/ && close === 6/*CLOSE_BRACKET*/;
2426         };
2427         var res = null;
2428
2429         while (true) {
2430             var token = tokenizer.peekToken();
2431             
2432             switch (token.type) {
2433             case 2/*CLOSE_PAR*/:
2434             case 4/*CLOSE_BRACE*/:
2435             case 6/*CLOSE_BRACKET*/:
2436                 if (matchesPeer(listBeginType, token.type)) {
2437                     tokenizer.readToken(); // consume token
2438                     return sc_reverseBang(res);
2439                 } else
2440                     throw "closing par doesn't match: " + listBeginType
2441                         + " " + listEndType;
2442
2443             case 0/*EOF*/:
2444                 throw "unexpected end of file";
2445
2446             case 10/*DOT*/:
2447                 tokenizer.readToken(); // consume token
2448                 var cdr = this.read();
2449                 var par = tokenizer.readToken();
2450                 if (!matchesPeer(listBeginType, par.type))
2451                     throw "closing par doesn't match: " + listBeginType
2452                         + " " + par.type;
2453                 else
2454                     return sc_reverseAppendBang(res, cdr);
2455                 
2456
2457             default:
2458                 res = sc_cons(this.read(), res);
2459             }
2460         }
2461     };
2462     function readQuote() {
2463         return sc_cons("quote", sc_cons(this.read(), null));
2464     };
2465     function readVector() {
2466         // opening-parenthesis is already consumed
2467         var a = new Array();
2468         while (true) {
2469             var token = tokenizer.peekToken();
2470             switch (token.type) {
2471             case 2/*CLOSE_PAR*/:
2472                 tokenizer.readToken();
2473                 return a;
2474                 
2475             default:
2476                 a.push(this.read());
2477             }
2478         }
2479     };
2480
2481     function storeRefence(nb) {
2482         var tmp = this.read();
2483         this.backref[nb] = tmp;
2484         return tmp;
2485     };
2486         
2487     function readReference(nb) {
2488         if (nb in this.backref)
2489             return this.backref[nb];
2490         else
2491             throw "bad reference: " + nb;
2492     };
2493     
2494     var tokenizer = this.tokenizer;
2495
2496     var token = tokenizer.readToken();
2497
2498     // handle error
2499     if (token.type === 13/*ERROR*/)
2500         throw token.val;
2501     
2502     switch (token.type) {
2503     case 1/*OPEN_PAR*/:
2504     case 3/*OPEN_BRACE*/:
2505     case 5/*OPEN_BRACKET*/:
2506         return readList.call(this, token.type);
2507     case 8/*QUOTE*/:
2508         return readQuote.call(this);
2509     case 11/*STRING*/:
2510         return sc_jsstring2string(token.val);
2511     case 20/*CHAR*/:
2512         return new sc_Char(token.val);
2513     case 14/*VECTOR_BEGIN*/:
2514         return readVector.call(this);
2515     case 18/*REFERENCE*/:
2516         return readReference.call(this, token.val);
2517     case 19/*STORE*/:
2518         return storeRefence.call(this, token.val);
2519     case 9/*ID*/:
2520         return sc_jsstring2symbol(token.val);
2521     case 0/*EOF*/:
2522     case 12/*NUMBER*/:
2523     case 15/*TRUE*/:
2524     case 16/*FALSE*/:
2525     case 17/*UNSPECIFIED*/:
2526         return token.val;
2527     default:
2528         throw "unexpected token " + token.type + " " + token.val;
2529     }
2530 };
2531
2532 /*** META ((export #t)) */
2533 function sc_read(port) {
2534     if (port === undefined) // we assume the port hasn't been given.
2535         port = SC_DEFAULT_IN; // THREAD: shared var...
2536     var reader = new sc_Reader(new sc_Tokenizer(port));
2537     return reader.read();
2538 }
2539 /*** META ((export #t)) */
2540 function sc_readChar(port) {
2541     if (port === undefined) // we assume the port hasn't been given.
2542         port = SC_DEFAULT_IN; // THREAD: shared var...
2543     var t = port.readChar();
2544     return t === SC_EOF_OBJECT? t: new sc_Char(t);
2545 }
2546 /*** META ((export #t)) */
2547 function sc_peekChar(port) {
2548     if (port === undefined) // we assume the port hasn't been given.
2549         port = SC_DEFAULT_IN; // THREAD: shared var...
2550     var t = port.peekChar();
2551     return t === SC_EOF_OBJECT? t: new sc_Char(t);
2552 }    
2553 /*** META ((export #t)
2554            (type bool))
2555 */
2556 function sc_isCharReady(port) {
2557     if (port === undefined) // we assume the port hasn't been given.
2558         port = SC_DEFAULT_IN; // THREAD: shared var...
2559     return port.isCharReady();
2560 }
2561 /*** META ((export #t)
2562            (peephole (postfix ".close()")))
2563 */
2564 function sc_closeInputPort(p) {
2565     return p.close();
2566 }
2567
2568 /*** META ((export #t)
2569            (type bool)
2570            (peephole (postfix " instanceof sc_InputPort")))
2571 */
2572 function sc_isInputPort(o) {
2573     return (o instanceof sc_InputPort);
2574 }
2575
2576 /*** META ((export eof-object?)
2577            (type bool)
2578            (peephole (postfix " === SC_EOF_OBJECT")))
2579 */
2580 function sc_isEOFObject(o) {
2581     return o === SC_EOF_OBJECT;
2582 }
2583
2584 /*** META ((export #t)
2585            (peephole (hole 0 "SC_DEFAULT_IN")))
2586 */
2587 function sc_currentInputPort() {
2588     return SC_DEFAULT_IN;
2589 }
2590
2591 /* ------------ file operations are not supported -----------*/
2592 /*** META ((export #t)) */
2593 function sc_callWithInputFile(s, proc) {
2594     throw "can't open " + s;
2595 }
2596
2597 /*** META ((export #t)) */
2598 function sc_callWithOutputFile(s, proc) {
2599     throw "can't open " + s;
2600 }
2601
2602 /*** META ((export #t)) */
2603 function sc_withInputFromFile(s, thunk) {
2604     throw "can't open " + s;
2605 }
2606
2607 /*** META ((export #t)) */
2608 function sc_withOutputToFile(s, thunk) {
2609     throw "can't open " + s;
2610 }
2611
2612 /*** META ((export #t)) */
2613 function sc_openInputFile(s) {
2614     throw "can't open " + s;
2615 }
2616
2617 /*** META ((export #t)) */
2618 function sc_openOutputFile(s) {
2619     throw "can't open " + s;
2620 }
2621
2622 /* ----------------------------------------------------------------------------*/
2623 /*** META ((export #t)) */
2624 function sc_basename(p) {
2625    var i = p.lastIndexOf('/');
2626
2627    if(i >= 0)
2628       return p.substring(i + 1, p.length);
2629    else
2630       return '';
2631 }
2632
2633 /*** META ((export #t)) */
2634 function sc_dirname(p) {
2635    var i = p.lastIndexOf('/');
2636
2637    if(i >= 0)
2638       return p.substring(0, i);
2639    else
2640       return '';
2641 }
2642
2643 /* ----------------------------------------------------------------------------*/
2644
2645 /*** META ((export #t)) */
2646 function sc_withInputFromPort(p, thunk) {
2647     try {
2648         var tmp = SC_DEFAULT_IN; // THREAD: shared var.
2649         SC_DEFAULT_IN = p;
2650         return thunk();
2651     } finally {
2652         SC_DEFAULT_IN = tmp;
2653     }
2654 }
2655
2656 /*** META ((export #t)) */
2657 function sc_withInputFromString(s, thunk) {
2658     return sc_withInputFromPort(new sc_StringInputPort(sc_string2jsstring(s)), thunk);
2659 }
2660
2661 /*** META ((export #t)) */
2662 function sc_withOutputToPort(p, thunk) {
2663     try {
2664         var tmp = SC_DEFAULT_OUT; // THREAD: shared var.
2665         SC_DEFAULT_OUT = p;
2666         return thunk();
2667     } finally {
2668         SC_DEFAULT_OUT = tmp;
2669     }
2670 }
2671
2672 /*** META ((export #t)) */
2673 function sc_withOutputToString(thunk) {
2674     var p = new sc_StringOutputPort();
2675     sc_withOutputToPort(p, thunk);
2676     return p.close();
2677 }
2678
2679 /*** META ((export #t)) */
2680 function sc_withOutputToProcedure(proc, thunk) {
2681     var t = function(s) { proc(sc_jsstring2string(s)); };
2682     return sc_withOutputToPort(new sc_GenericOutputPort(t), thunk);
2683 }
2684
2685 /*** META ((export #t)
2686            (peephole (hole 0 "new sc_StringOutputPort()")))
2687 */
2688 function sc_openOutputString() {
2689     return new sc_StringOutputPort();
2690 }
2691
2692 /*** META ((export #t)) */
2693 function sc_openInputString(str) {
2694     return new sc_StringInputPort(sc_string2jsstring(str));
2695 }
2696
2697 /* ----------------------------------------------------------------------------*/
2698
2699 function sc_OutputPort() {
2700 }
2701 sc_OutputPort.prototype = new sc_Port();
2702 sc_OutputPort.prototype.appendJSString = function(obj) {
2703     /* do nothing */
2704 }
2705 sc_OutputPort.prototype.close = function() {
2706     /* do nothing */
2707 }
2708
2709 function sc_StringOutputPort() {
2710     this.res = "";
2711 }
2712 sc_StringOutputPort.prototype = new sc_OutputPort();
2713 sc_StringOutputPort.prototype.appendJSString = function(s) {
2714     this.res += s;
2715 }
2716 sc_StringOutputPort.prototype.close = function() {
2717     return sc_jsstring2string(this.res);
2718 }
2719
2720 /*** META ((export #t)) */
2721 function sc_getOutputString(sp) {
2722     return sc_jsstring2string(sp.res);
2723 }
2724     
2725
2726 function sc_ErrorOutputPort() {
2727 }
2728 sc_ErrorOutputPort.prototype = new sc_OutputPort();
2729 sc_ErrorOutputPort.prototype.appendJSString = function(s) {
2730     throw "don't write on ErrorPort!";
2731 }
2732 sc_ErrorOutputPort.prototype.close = function() {
2733     /* do nothing */
2734 }
2735
2736 function sc_GenericOutputPort(appendJSString, close) {
2737     this.appendJSString = appendJSString;
2738     if (close)
2739         this.close = close;
2740 }
2741 sc_GenericOutputPort.prototype = new sc_OutputPort();
2742
2743 /*** META ((export #t)
2744            (type bool)
2745            (peephole (postfix " instanceof sc_OutputPort")))
2746 */
2747 function sc_isOutputPort(o) {
2748     return (o instanceof sc_OutputPort);
2749 }
2750
2751 /*** META ((export #t)
2752            (peephole (postfix ".close()")))
2753 */
2754 function sc_closeOutputPort(p) {
2755     return p.close();
2756 }
2757
2758 /* ------------------ write ---------------------------------------------------*/
2759
2760 /*** META ((export #t)) */
2761 function sc_write(o, p) {
2762     if (p === undefined) // we assume not given
2763         p = SC_DEFAULT_OUT;
2764     p.appendJSString(sc_toWriteString(o));
2765 }
2766
2767 function sc_toWriteString(o) {
2768     if (o === null)
2769         return "()";
2770     else if (o === true)
2771         return "#t";
2772     else if (o === false)
2773         return "#f";
2774     else if (o === undefined)
2775         return "#unspecified";
2776     else if (typeof o === 'function')
2777         return "#<procedure " + sc_hash(o) + ">";
2778     else if (o.sc_toWriteString)
2779         return o.sc_toWriteString();
2780     else
2781         return o.toString();
2782 }
2783
2784 function sc_escapeWriteString(s) {
2785     var res = "";
2786     var j = 0;
2787     for (i = 0; i < s.length; i++) {
2788         switch (s.charAt(i)) {
2789         case "\0": res += s.substring(j, i) + "\\0"; j = i + 1; break;
2790         case "\b": res += s.substring(j, i) + "\\b"; j = i + 1; break;
2791         case "\f": res += s.substring(j, i) + "\\f"; j = i + 1; break;
2792         case "\n": res += s.substring(j, i) + "\\n"; j = i + 1; break;
2793         case "\r": res += s.substring(j, i) + "\\r"; j = i + 1; break;
2794         case "\t": res += s.substring(j, i) + "\\t"; j = i + 1; break;
2795         case "\v": res += s.substring(j, i) + "\\v"; j = i + 1; break;
2796         case '"': res += s.substring(j, i) + '\\"'; j = i + 1; break;
2797         case "\\": res += s.substring(j, i) + "\\\\"; j = i + 1; break;
2798         default:
2799             var c = s.charAt(i);
2800             if ("\a" !== "a" && c == "\a") {
2801                 res += s.substring(j, i) + "\\a"; j = i + 1; continue;
2802             }
2803             if ("\v" !== "v" && c == "\v") {
2804                 res += s.substring(j, i) + "\\v"; j = i + 1; continue;
2805             }
2806             //if (s.charAt(i) < ' ' || s.charCodeAt(i) > 127) {
2807             // CARE: Manuel is this OK with HOP?
2808             if (s.charAt(i) < ' ') {
2809                 /* non printable character and special chars */
2810                 res += s.substring(j, i) + "\\x" + s.charCodeAt(i).toString(16);
2811                 j = i + 1;
2812             }
2813             // else just let i increase...
2814         }
2815     }
2816     res += s.substring(j, i);
2817     return res;
2818 }
2819
2820 /* ------------------ display ---------------------------------------------------*/
2821
2822 /*** META ((export #t)) */
2823 function sc_display(o, p) {
2824     if (p === undefined) // we assume not given
2825         p = SC_DEFAULT_OUT;
2826     p.appendJSString(sc_toDisplayString(o));
2827 }
2828
2829 function sc_toDisplayString(o) {
2830     if (o === null)
2831         return "()";
2832     else if (o === true)
2833         return "#t";
2834     else if (o === false)
2835         return "#f";
2836     else if (o === undefined)
2837         return "#unspecified";
2838     else if (typeof o === 'function')
2839         return "#<procedure " + sc_hash(o) + ">";
2840     else if (o.sc_toDisplayString)
2841         return o.sc_toDisplayString();
2842     else
2843         return o.toString();
2844 }
2845
2846 /* ------------------ newline ---------------------------------------------------*/
2847
2848 /*** META ((export #t)) */
2849 function sc_newline(p) {
2850     if (p === undefined) // we assume not given
2851         p = SC_DEFAULT_OUT;
2852     p.appendJSString("\n");
2853 }
2854     
2855 /* ------------------ write-char ---------------------------------------------------*/
2856
2857 /*** META ((export #t)) */
2858 function sc_writeChar(c, p) {
2859     if (p === undefined) // we assume not given
2860         p = SC_DEFAULT_OUT;
2861     p.appendJSString(c.val);
2862 }
2863
2864 /* ------------------ write-circle ---------------------------------------------------*/
2865
2866 /*** META ((export #t)) */
2867 function sc_writeCircle(o, p) {
2868     if (p === undefined) // we assume not given
2869         p = SC_DEFAULT_OUT;
2870     p.appendJSString(sc_toWriteCircleString(o));
2871 }
2872
2873 function sc_toWriteCircleString(o) {
2874     var symb = sc_gensym("writeCircle");
2875     var nbPointer = new Object();
2876     nbPointer.nb = 0;
2877     sc_prepWriteCircle(o, symb, nbPointer);
2878     return sc_genToWriteCircleString(o, symb);
2879 }
2880
2881 function sc_prepWriteCircle(o, symb, nbPointer) {
2882     // TODO sc_Struct
2883     if (o instanceof sc_Pair ||
2884         o instanceof sc_Vector) {
2885         if (o[symb] !== undefined) {
2886             // not the first visit.
2887             o[symb]++;
2888             // unless there is already a number, assign one.
2889             if (!o[symb + "nb"]) o[symb + "nb"] = nbPointer.nb++;
2890             return;
2891         }
2892         o[symb] = 0;
2893         if (o instanceof sc_Pair) {
2894             sc_prepWriteCircle(o.car, symb, nbPointer);
2895             sc_prepWriteCircle(o.cdr, symb, nbPointer);
2896         } else {
2897             for (var i = 0; i < o.length; i++)
2898                 sc_prepWriteCircle(o[i], symb, nbPointer);
2899         }
2900     }
2901 }
2902
2903 function sc_genToWriteCircleString(o, symb) {
2904     if (!(o instanceof sc_Pair ||
2905           o instanceof sc_Vector))
2906         return sc_toWriteString(o);
2907     return o.sc_toWriteCircleString(symb);
2908 }
2909 sc_Pair.prototype.sc_toWriteCircleString = function(symb, inList) {
2910     if (this[symb + "use"]) { // use-flag is set. Just use it.
2911         var nb = this[symb + "nb"];
2912         if (this[symb]-- === 0) { // if we are the last use. remove all fields.
2913             delete this[symb];
2914             delete this[symb + "nb"];
2915             delete this[symb + "use"];
2916         }
2917         if (inList)
2918             return '. #' + nb + '#';
2919         else
2920             return '#' + nb + '#';
2921     }
2922     if (this[symb]-- === 0) { // if we are the last use. remove all fields.
2923         delete this[symb];
2924         delete this[symb + "nb"];
2925         delete this[symb + "use"];
2926     }
2927
2928     var res = "";
2929     
2930     if (this[symb] !== undefined) { // implies > 0
2931         this[symb + "use"] = true;
2932         if (inList)
2933             res += '. #' + this[symb + "nb"] + '=';
2934         else
2935             res += '#' + this[symb + "nb"] + '=';
2936         inList = false;
2937     }
2938
2939     if (!inList)
2940         res += "(";
2941     
2942     // print car
2943     res += sc_genToWriteCircleString(this.car, symb);
2944     
2945     if (sc_isPair(this.cdr)) {
2946         res += " " + this.cdr.sc_toWriteCircleString(symb, true);
2947     } else if (this.cdr !== null) {
2948         res += " . " + sc_genToWriteCircleString(this.cdr, symb);
2949     }
2950     if (!inList)
2951         res += ")";
2952     return res;
2953 };
2954 sc_Vector.prototype.sc_toWriteCircleString = function(symb) {
2955     if (this[symb + "use"]) { // use-flag is set. Just use it.
2956         var nb = this[symb + "nb"];
2957         if (this[symb]-- === 0) { // if we are the last use. remove all fields.
2958             delete this[symb];
2959             delete this[symb + "nb"];
2960             delete this[symb + "use"];
2961         }
2962         return '#' + nb + '#';
2963     }
2964     if (this[symb]-- === 0) { // if we are the last use. remove all fields.
2965         delete this[symb];
2966         delete this[symb + "nb"];
2967         delete this[symb + "use"];
2968     }
2969
2970     var res = "";
2971     if (this[symb] !== undefined) { // implies > 0
2972         this[symb + "use"] = true;
2973         res += '#' + this[symb + "nb"] + '=';
2974     }
2975     res += "#(";
2976     for (var i = 0; i < this.length; i++) {
2977         res += sc_genToWriteCircleString(this[i], symb);
2978         if (i < this.length - 1) res += " ";
2979     }
2980     res += ")";
2981     return res;
2982 };
2983
2984
2985 /* ------------------ print ---------------------------------------------------*/
2986
2987 /*** META ((export #t)) */
2988 function sc_print(s) {
2989     if (arguments.length === 1) {
2990         sc_display(s);
2991         sc_newline();
2992     }
2993     else {
2994         for (var i = 0; i < arguments.length; i++)
2995             sc_display(arguments[i]);
2996         sc_newline();
2997     }
2998 }
2999
3000 /* ------------------ format ---------------------------------------------------*/
3001 /*** META ((export #t)) */
3002 function sc_format(s, args) {
3003    var len = s.length;
3004    var p = new sc_StringOutputPort();
3005    var i = 0, j = 1;
3006
3007    while( i < len ) {
3008       var i2 = s.indexOf("~", i);
3009
3010       if (i2 == -1) {
3011           p.appendJSString( s.substring( i, len ) );
3012           return p.close();
3013       } else {
3014          if (i2 > i) {
3015             if (i2 == (len - 1)) {
3016                 p.appendJSString(s.substring(i, len));
3017                 return p.close();
3018             } else {
3019                p.appendJSString(s.substring(i, i2));
3020                i = i2;
3021             }
3022          }
3023
3024          switch(s.charCodeAt(i2 + 1)) {
3025             case 65:
3026             case 97:
3027                // a
3028                sc_display(arguments[j], p);
3029                i += 2; j++;
3030                break;
3031
3032             case 83:
3033             case 115:
3034                // s
3035                sc_write(arguments[j], p);
3036                i += 2; j++;
3037                break;
3038
3039             case 86:
3040             case 118:
3041                // v
3042                sc_display(arguments[j], p);
3043                p.appendJSString("\n");
3044                i += 2; j++;
3045                break;
3046
3047             case 67:
3048             case 99:
3049                // c
3050                p.appendJSString(String.fromCharCode(arguments[j]));
3051                i += 2; j++;
3052                break;
3053
3054             case 88:
3055             case 120:
3056                // x
3057                p.appendJSString(arguments[j].toString(6));
3058                i += 2; j++;
3059                break;
3060
3061             case 79:
3062             case 111:
3063                // o
3064                p.appendJSString(arguments[j].toString(8));
3065                i += 2; j++;
3066                break;
3067
3068             case 66:
3069             case 98:
3070                // b
3071                p.appendJSString(arguments[j].toString(2));
3072                i += 2; j++;
3073                break;
3074                
3075             case 37:
3076             case 110:
3077                // %, n
3078                p.appendJSString("\n");
3079                i += 2; break;
3080
3081             case 114:
3082                // r
3083                p.appendJSString("\r");
3084                i += 2; break;
3085
3086             case 126:
3087                // ~
3088                p.appendJSString("~");
3089                i += 2; break;
3090
3091             default:
3092                sc_error( "format: illegal ~"
3093                          + String.fromCharCode(s.charCodeAt(i2 + 1))
3094                          + " sequence" );
3095                return "";
3096          }
3097       }
3098    }
3099
3100    return p.close();
3101 }
3102
3103 /* ------------------ global ports ---------------------------------------------------*/
3104
3105 var SC_DEFAULT_IN = new sc_ErrorInputPort();
3106 var SC_DEFAULT_OUT = new sc_ErrorOutputPort();
3107 var SC_ERROR_OUT = new sc_ErrorOutputPort();
3108
3109 var sc_SYMBOL_PREFIX = "\u1E9C";
3110 var sc_KEYWORD_PREFIX = "\u1E9D";
3111
3112 /*** META ((export #t)
3113            (peephole (id))) */
3114 function sc_jsstring2string(s) {
3115     return s;
3116 }
3117
3118 /*** META ((export #t)
3119            (peephole (prefix "'\\u1E9C' +")))
3120 */
3121 function sc_jsstring2symbol(s) {
3122     return sc_SYMBOL_PREFIX + s;
3123 }
3124
3125 /*** META ((export #t)
3126            (peephole (id)))
3127 */
3128 function sc_string2jsstring(s) {
3129     return s;
3130 }
3131
3132 /*** META ((export #t)
3133            (peephole (symbol2jsstring_immutable)))
3134 */
3135 function sc_symbol2jsstring(s) {
3136     return s.slice(1);
3137 }
3138
3139 /*** META ((export #t)
3140            (peephole (postfix ".slice(1)")))
3141 */
3142 function sc_keyword2jsstring(k) {
3143     return k.slice(1);
3144 }
3145
3146 /*** META ((export #t)
3147            (peephole (prefix "'\\u1E9D' +")))
3148 */
3149 function sc_jsstring2keyword(s) {
3150     return sc_KEYWORD_PREFIX + s;
3151 }
3152
3153 /*** META ((export #t)
3154            (type bool))
3155 */
3156 function sc_isKeyword(s) {
3157     return (typeof s === "string") &&
3158         (s.charAt(0) === sc_KEYWORD_PREFIX);
3159 }
3160
3161
3162 /*** META ((export #t)) */
3163 var sc_gensym = function() {
3164     var counter = 1000;
3165     return function(sym) {
3166         counter++;
3167         if (!sym) sym = sc_SYMBOL_PREFIX;
3168         return sym + "s" + counter + "~" + "^sC-GeNsYm ";
3169     };
3170 }();
3171
3172
3173 /*** META ((export #t)
3174            (type bool))
3175 */
3176 function sc_isEqual(o1, o2) {
3177     return ((o1 === o2) ||
3178             (sc_isPair(o1) && sc_isPair(o2)
3179              && sc_isPairEqual(o1, o2, sc_isEqual)) ||
3180             (sc_isVector(o1) && sc_isVector(o2)
3181              && sc_isVectorEqual(o1, o2, sc_isEqual)));
3182 }
3183
3184 /*** META ((export number->symbol integer->symbol)) */
3185 function sc_number2symbol(x, radix) {
3186     return sc_SYMBOL_PREFIX + sc_number2jsstring(x, radix);
3187 }
3188     
3189 /*** META ((export number->string integer->string)) */
3190 var sc_number2string = sc_number2jsstring;
3191
3192 /*** META ((export #t)) */
3193 function sc_symbol2number(s, radix) {
3194     return sc_jsstring2number(s.slice(1), radix);
3195 }
3196
3197 /*** META ((export #t)) */
3198 var sc_string2number = sc_jsstring2number;
3199
3200 /*** META ((export #t)
3201            (peephole (prefix "+" s)))
3202            ;; peephole will only apply if no radix is given.
3203 */
3204 function sc_string2integer(s, radix) {
3205     if (!radix) return +s;
3206     return parseInt(s, radix);
3207 }
3208
3209 /*** META ((export #t)
3210            (peephole (prefix "+")))
3211 */
3212 function sc_string2real(s) {
3213     return +s;
3214 }
3215
3216
3217 /*** META ((export #t)
3218            (type bool))
3219 */
3220 function sc_isSymbol(s) {
3221     return (typeof s === "string") &&
3222         (s.charAt(0) === sc_SYMBOL_PREFIX);
3223 }
3224
3225 /*** META ((export #t)
3226            (peephole (symbol2string_immutable)))
3227 */
3228 function sc_symbol2string(s) {
3229     return s.slice(1);
3230 }
3231
3232 /*** META ((export #t)
3233            (peephole (prefix "'\\u1E9C' +")))
3234 */
3235 function sc_string2symbol(s) {
3236     return sc_SYMBOL_PREFIX + s;
3237 }
3238
3239 /*** META ((export symbol-append)
3240            (peephole (symbolAppend_immutable)))
3241 */
3242 function sc_symbolAppend() {
3243     var res = sc_SYMBOL_PREFIX;
3244     for (var i = 0; i < arguments.length; i++)
3245         res += arguments[i].slice(1);
3246     return res;
3247 }
3248
3249 /*** META ((export #t)
3250            (peephole (postfix ".val")))
3251 */
3252 function sc_char2string(c) { return c.val; }
3253
3254 /*** META ((export #t)
3255            (peephole (hole 1 "'\\u1E9C' + " c ".val")))
3256 */
3257 function sc_char2symbol(c) { return sc_SYMBOL_PREFIX + c.val; }
3258
3259 /*** META ((export #t)
3260            (type bool))
3261 */
3262 function sc_isString(s) {
3263     return (typeof s === "string") &&
3264         (s.charAt(0) !== sc_SYMBOL_PREFIX);
3265 }
3266
3267 /*** META ((export #t)) */
3268 var sc_makeString = sc_makejsString;
3269
3270
3271 /*** META ((export #t)) */
3272 function sc_string() {
3273     for (var i = 0; i < arguments.length; i++)
3274         arguments[i] = arguments[i].val;
3275     return "".concat.apply("", arguments);
3276 }
3277
3278 /*** META ((export #t)
3279            (peephole (postfix ".length")))
3280 */
3281 function sc_stringLength(s) { return s.length; }
3282
3283 /*** META ((export #t)) */
3284 function sc_stringRef(s, k) {
3285     return new sc_Char(s.charAt(k));
3286 }
3287
3288 /* there's no stringSet in the immutable version
3289 function sc_stringSet(s, k, c)
3290 */
3291
3292
3293 /*** META ((export string=?)
3294            (type bool)
3295            (peephole (hole 2 str1 " === " str2)))
3296 */
3297 function sc_isStringEqual(s1, s2) {
3298     return s1 === s2;
3299 }
3300 /*** META ((export string<?)
3301            (type bool)
3302            (peephole (hole 2 str1 " < " str2)))
3303 */
3304 function sc_isStringLess(s1, s2) {
3305     return s1 < s2;
3306 }
3307 /*** META ((export string>?)
3308            (type bool)
3309            (peephole (hole 2 str1 " > " str2)))
3310 */
3311 function sc_isStringGreater(s1, s2) {
3312     return s1 > s2;
3313 }
3314 /*** META ((export string<=?)
3315            (type bool)
3316            (peephole (hole 2 str1 " <= " str2)))
3317 */
3318 function sc_isStringLessEqual(s1, s2) {
3319     return s1 <= s2;
3320 }
3321 /*** META ((export string>=?)
3322            (type bool)
3323            (peephole (hole 2 str1 " >= " str2)))
3324 */
3325 function sc_isStringGreaterEqual(s1, s2) {
3326     return s1 >= s2;
3327 }
3328 /*** META ((export string-ci=?)
3329            (type bool)
3330            (peephole (hole 2 str1 ".toLowerCase() === " str2 ".toLowerCase()")))
3331 */
3332 function sc_isStringCIEqual(s1, s2) {
3333     return s1.toLowerCase() === s2.toLowerCase();
3334 }
3335 /*** META ((export string-ci<?)
3336            (type bool)
3337            (peephole (hole 2 str1 ".toLowerCase() < " str2 ".toLowerCase()")))
3338 */
3339 function sc_isStringCILess(s1, s2) {
3340     return s1.toLowerCase() < s2.toLowerCase();
3341 }
3342 /*** META ((export string-ci>?)
3343            (type bool)
3344            (peephole (hole 2 str1 ".toLowerCase() > " str2 ".toLowerCase()")))
3345 */
3346 function sc_isStringCIGreater(s1, s2) {
3347     return s1.toLowerCase() > s2.toLowerCase();
3348 }
3349 /*** META ((export string-ci<=?)
3350            (type bool)
3351            (peephole (hole 2 str1 ".toLowerCase() <= " str2 ".toLowerCase()")))
3352 */
3353 function sc_isStringCILessEqual(s1, s2) {
3354     return s1.toLowerCase() <= s2.toLowerCase();
3355 }
3356 /*** META ((export string-ci>=?)
3357            (type bool)
3358            (peephole (hole 2 str1 ".toLowerCase() >= " str2 ".toLowerCase()")))
3359 */
3360 function sc_isStringCIGreaterEqual(s1, s2) {
3361     return s1.toLowerCase() >= s2.toLowerCase();
3362 }
3363
3364 /*** META ((export #t)
3365            (peephole (hole 3 s ".substring(" start ", " end ")")))
3366 */
3367 function sc_substring(s, start, end) {
3368     return s.substring(start, end);
3369 }
3370
3371 /*** META ((export #t))
3372 */
3373 function sc_isSubstring_at(s1, s2, i) {
3374     return s2 == s1.substring(i, i+ s2.length);
3375 }
3376
3377 /*** META ((export #t)
3378            (peephole (infix 0 #f "+" "''")))
3379 */
3380 function sc_stringAppend() {
3381     return "".concat.apply("", arguments);
3382 }
3383
3384 /*** META ((export #t)) */
3385 var sc_string2list = sc_jsstring2list;
3386
3387 /*** META ((export #t)) */
3388 var sc_list2string = sc_list2jsstring;
3389
3390 /*** META ((export #t)
3391            (peephole (id)))
3392 */
3393 function sc_stringCopy(s) {
3394     return s;
3395 }
3396
3397 /* there's no string-fill in the immutable version
3398 function sc_stringFill(s, c)
3399 */
3400
3401 /*** META ((export #t)
3402            (peephole (postfix ".slice(1)")))
3403 */
3404 function sc_keyword2string(o) {
3405     return o.slice(1);
3406 }
3407
3408 /*** META ((export #t)
3409            (peephole (prefix "'\\u1E9D' +")))
3410 */
3411 function sc_string2keyword(o) {
3412     return sc_KEYWORD_PREFIX + o;
3413 }
3414
3415 String.prototype.sc_toDisplayString = function() {
3416     if (this.charAt(0) === sc_SYMBOL_PREFIX)
3417         // TODO: care for symbols with spaces (escape-chars symbols).
3418         return this.slice(1);
3419     else if (this.charAt(0) === sc_KEYWORD_PREFIX)
3420         return ":" + this.slice(1);
3421     else
3422         return this.toString();
3423 };
3424
3425 String.prototype.sc_toWriteString = function() {
3426     if (this.charAt(0) === sc_SYMBOL_PREFIX)
3427         // TODO: care for symbols with spaces (escape-chars symbols).
3428         return this.slice(1);
3429     else if (this.charAt(0) === sc_KEYWORD_PREFIX)
3430         return ":" + this.slice(1);
3431     else
3432         return '"' + sc_escapeWriteString(this) + '"';
3433 };
3434 /* Exported Variables */
3435 var BgL_testzd2boyerzd2;
3436 var BgL_nboyerzd2benchmarkzd2;
3437 var BgL_setupzd2boyerzd2;
3438 /* End Exports */
3439
3440 var translate_term_nboyer;
3441 var translate_args_nboyer;
3442 var untranslate_term_nboyer;
3443 var BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer;
3444 var BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer;
3445 var translate_alist_nboyer;
3446 var apply_subst_nboyer;
3447 var apply_subst_lst_nboyer;
3448 var tautologyp_nboyer;
3449 var if_constructor_nboyer;
3450 var rewrite_count_nboyer;
3451 var rewrite_nboyer;
3452 var rewrite_args_nboyer;
3453 var unify_subst_nboyer;
3454 var one_way_unify1_nboyer;
3455 var false_term_nboyer;
3456 var true_term_nboyer;
3457 var trans_of_implies1_nboyer;
3458 var is_term_equal_nboyer;
3459 var is_term_member_nboyer;
3460 var const_nboyer;
3461 var sc_const_3_nboyer;
3462 var sc_const_4_nboyer;
3463 {
3464     (sc_const_4_nboyer = (new sc_Pair("\u1E9Cimplies",(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cu",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cu",(new sc_Pair("\u1E9Cw",null)))))),null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cw",null)))))),null)))))));
3465     (sc_const_3_nboyer = sc_list((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccompile",(new sc_Pair("\u1E9Cform",null)))),(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair((new sc_Pair("\u1E9Ccodegen",(new sc_Pair((new sc_Pair("\u1E9Coptimize",(new sc_Pair("\u1E9Cform",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ceqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreaterp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clesseqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatereqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cboolean",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ciff",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ceven1",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Codd",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccountps-",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Cpred",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccountps-loop",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Cpred",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfact-",(new sc_Pair("\u1E9Ci",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfact-loop",(new sc_Pair("\u1E9Ci",(new sc_Pair((1),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse-",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Creverse-loop",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdivides",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cassume-true",(new sc_Pair("\u1E9Cvar",(new sc_Pair("\u1E9Calist",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cvar",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))),(new sc_Pair("\u1E9Calist",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cassume-false",(new sc_Pair("\u1E9Cvar",(new sc_Pair("\u1E9Calist",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cvar",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))),(new sc_Pair("\u1E9Calist",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctautology-checker",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ctautologyp",(new sc_Pair((new sc_Pair("\u1E9Cnormalize",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfalsify",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfalsify1",(new sc_Pair((new sc_Pair("\u1E9Cnormalize",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cprime",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))),null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cprime1",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Cx",null)))),null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair("\u1E9Cp",(new sc_Pair("\u1E9Cq",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cq",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair("\u1E9Cp",(new sc_Pair("\u1E9Cq",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cq",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair("\u1E9Cp",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cp",(new sc_Pair("\u1E9Cq",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cq",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))))),(new sc_Pair("\u1E9Cd",(new sc_Pair("\u1E9Ce",null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cd",(new sc_Pair("\u1E9Ce",null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cd",(new sc_Pair("\u1E9Ce",null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Ca",null)))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cb",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cc",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair("\u1E9Ca",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair((new sc_Pair("\u1E9Cplus-fringe",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Ca",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cexec",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cpds",(new sc_Pair("\u1E9Cenvrn",null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cexec",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cexec",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cpds",(new sc_Pair("\u1E9Cenvrn",null)))))))),(new sc_Pair("\u1E9Cenvrn",null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmc-flatten",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Cy",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cb",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cy",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Cintersect",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Ck",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Ck",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Ck",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),(new sc_Pair("\u1E9Ck",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse-loop",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Cy",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse-loop",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccount-list",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Csort-lp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Ccount-list",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccount-list",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cbig-plus1",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair("\u1E9Ci",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cbig-plus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cbase",null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Ci",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cj",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cj",(new sc_Pair((1),null)))))),null)))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cpower-rep",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Ci",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cbig-plus",(new sc_Pair((new sc_Pair("\u1E9Cpower-rep",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cpower-rep",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair("\u1E9Cbase",null)))))))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair("\u1E9Cb",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Ca",null)))),null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cy",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cy",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cw",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cw",(new sc_Pair("\u1E9Cx",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cb",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cy",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cz",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cvalue",(new sc_Pair((new sc_Pair("\u1E9Cnormalize",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cvalue",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnlistp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair((new sc_Pair("\u1E9Cgopher",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csamefringe",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatest-factor",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatest-factor",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((1),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((1),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair((new sc_Pair("\u1E9Cgreatest-factor",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes-list",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Ctimes-list",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ctimes-list",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cprime-list",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cprime-list",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cprime-list",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cw",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cz",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cw",(new sc_Pair((1),null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatereqp",(new sc_Pair("\u1