/* Generated with C2C (Cedar To C)*/
/* Copyright (C) 1992 by Xerox Corporation.  All rights reserved. */
/* time: February 21, 1992 11:09:51 pm PST */
/* C2C version: October 16, 1990 (native) */
/* ref-counting: off */
/* file: RedBlackTreeImpl, module: RedBlackTreeImpl */ 
/* switches: bcfhklnouw */ 
#include <cedar/InstallationSupport.h>
#include <cedar/CedarExtra.h>
static char versionStamp[] = "@(#)mob←version [1624683341,2573725874] RedBlackTreeImpl";
typedef unsigned word, *ptr;
typedef unsigned char byte, *bPt;
typedef unsigned short half, *hPt;
typedef struct {word f0, f1, f2, f3, f4, f5, f6;} W7;
typedef word (*fPt)();
typedef struct {word f0, f1;} W2;
typedef struct {word f0, f1, f2, f3, f4, f5, f6, f7;} W8;
typedef struct {W8 f; word r;} W9;
typedef struct {W8 f; W2 r;} W10;
typedef struct {word f0, f1, f2, f3, f4, f5;} W6;
typedef struct {word f0, f1, f2;} W3;
typedef struct {W8 f; W3 r;} W11;
#define SOURCE(p, l) /* source p, l */
static void NoName←Q2316();
static void RedBlackTreeImpl←P0();
static void DoInner←P60();
static word NoName←Q2376();
static word Create←P120();
static word Size←P180();
static void inner←P1188();
static void Insert←P240();
static void InsertNode←P300();
static void inner←P1248();
static word Delete←P360();
static void inner←P1308();
static word LookupNode←P420();
static void inner←P1368();
static word Lookup←P480();
static void inner←P1428();
static void Lookup3←P540();
static void inner←P1488();
static word LookupSmallest←P600();
static void inner←P1548();
static word LookupNextLarger←P660();
static void inner←P1608();
static word LookupLargest←P720();
static void inner←P1668();
static word LookupNextSmaller←P780();
static void inner←P1728();
static void DestroyTable←P840();
static void inner←P1788();
static void EnumerateIncreasing←P900();
static void inner←P1848();
static word VisitSubtree←P1908();
static void EnumerateDecreasing←P960();
static void inner←P1968();
static word VisitSubtree←P2028();
static void CheckTable←P1020();
static void inner←P2088();
static void Assert←P2148();
static void Check1←P2208();
static word Balance←P1080();
static void NoName←Q2436();
static struct {unsigned f; char r[16];} string1 = {851984, "\257\300\140\326\263\115\300\231\147\360\262\100\200\000\000"};
static struct {unsigned f; char r[4];} string2 = {131074, "\004\030\000"};
static struct {unsigned f; char r[16];} string3 = {851984, "\257\300\312\362\073\257\300\141\275\076\344\100\164\000\000"};
static struct {unsigned f; char r[4];} string4 = {131074, "\004\013\000"};
static struct {unsigned f; char r[16];} string5 = {851984, "\257\300\312\362\073\257\300\141\275\076\344\100\200\000\000"};
static struct {unsigned f; char r[4];} string6 = {131074, "\0040\000"};
static struct {unsigned f; char r[16];} string7 = {851984, "\257\300\140\326\263\115\300\231\147\360\262\100\164\000\000"};
static struct {unsigned f; char r[16];} string8 = {851984, "\257\300\312\362\073\257\300\141\275\076\344\100\150\000\000"};
static struct {
   word f0[10]; word f10; word f11; word f12; 
   word f13; word f14; word f15; word f16; 
   word f17; word f18; word f19; word f20; 
   word f21; word f22; word f23; word f24; 
   word f25; word f26; word f27; word f28; 
   word f29; word f30; word f31; word f32; 
   word f33; word f34; word f35; word f36; 
   word f37; word f38; word f39; word f40; 
   word f41; word f42; word f43; word f44; 
   word f45; word f46; word f47[2]; 
   } globalframe = {
   {0}, (word) Balance←P1080, 0, (word) CheckTable←P1020, 
   0, (word) EnumerateDecreasing←P960, 0, (word) EnumerateIncreasing←P900, 
   0, (word) DestroyTable←P840, 0, (word) LookupNextSmaller←P780, 
   0, (word) LookupLargest←P720, 0, (word) LookupNextLarger←P660, 
   0, (word) LookupSmallest←P600, 0, (word) Lookup3←P540, 
   0, (word) Lookup←P480, 0, (word) LookupNode←P420, 
   0, (word) Delete←P360, 0, (word) InsertNode←P300, 
   0, (word) Insert←P240, 0, (word) Size←P180, 
   0, (word) Create←P120, 0, (word) DoInner←P60, 
   0, (word) RedBlackTreeImpl←P0, {0}
   };

static void NoName←Q2316()
   {
   register ptr gf←c0227 =  (ptr) &globalframe;
   word var←c13656;
   (* (( (ptr) gf←c0227)+4) ) = (word) XR←GetTypeIndex((word) &string1, 0, (word) &string2);
   (* (( (ptr) gf←c0227)+5) ) = (word) XR←GetTypeIndex((word) &string3, 0, (word) &string4);
   (* (( (ptr) gf←c0227)+7) ) = (word) XR←GetTypeIndex((word) &string5, 0, (word) &string6);
   (void) XR←DeclareGlobalFrame((word) "RedBlackTreeImpl", &globalframe, (word) XR←GetTypeIndexS((word) (&string7)), (word) (
         ( (bPt) gf←c0227)+184)/* var←c12216 */ );
   var←c13656 = (word) XR←ExportInterface((word) "RedBlackTree", (word) XR←GetTypeIndexS((word) (&string8)), 18);
   (* (( (ptr) gf←c0227)+48)/* var←c13624 */  ) = var←c13656;
   (void) XR←ExportVar(var←c13656, 0, (word) (( (bPt) gf←c0227)+36));
   (void) XR←ExportProcS(var←c13656, (word) (( (bPt) gf←c0227)+168)/* var←c12152 */ , 67633410);
   (void) XR←ExportProcS(var←c13656, (word) (( (bPt) gf←c0227)+72)/* var←c11768 */ , 262657);
   (void) XR←ExportProcS(var←c13656, (word) (( (bPt) gf←c0227)+160)/* var←c12120 */ , 67371777);
   (void) XR←ExportProcS(var←c13656, (word) (( (bPt) gf←c0227)+152)/* var←c12088 */ , 787459);
   (void) XR←ExportProcS(var←c13656, (word) (( (bPt) gf←c0227)+144)/* var←c12056 */ , 787715);
   (void) XR←ExportVar(var←c13656, 6, (word) (( (bPt) gf←c0227)+32));
   (void) XR←ExportProcS(var←c13656, (word) (( (bPt) gf←c0227)+136)/* var←c12024 */ , 67634946);
   (void) XR←ExportProcS(var←c13656, (word) (( (bPt) gf←c0227)+128)/* var←c11992 */ , 67635202);
   (void) XR←ExportProcS(var←c13656, (word) (( (bPt) gf←c0227)+120)/* var←c11960 */ , 67635458);
   (void) XR←ExportProcS(var←c13656, (word) (( (bPt) gf←c0227)+96)/* var←c11864 */ , 67635714);
   (void) XR←ExportProcS(var←c13656, (word) (( (bPt) gf←c0227)+80)/* var←c11800 */ , 67635970);
   (void) XR←ExportProcS(var←c13656, (word) (( (bPt) gf←c0227)+104)/* var←c11896 */ , 67374081);
   (void) XR←ExportProcS(var←c13656, (word) (( (bPt) gf←c0227)+88)/* var←c11832 */ , 67374337);
   (void) XR←ExportProcS(var←c13656, (word) (( (bPt) gf←c0227)+112)/* var←c11928 */ , 201854466);
   (void) XR←ExportProcS(var←c13656, (word) (( (bPt) gf←c0227)+64)/* var←c11736 */ , 528130);
   (void) XR←ExportProcS(var←c13656, (word) (( (bPt) gf←c0227)+56)/* var←c11704 */ , 528386);
   (void) XR←ExportProcS(var←c13656, (word) (( (bPt) gf←c0227)+48)/* var←c11672 */ , 266497);
   }

static void RedBlackTreeImpl←P0(formal←c026, formal←c025)
   word formal←c026;
   word formal←c025;
   {
   /* RedBlackTreeImpl: */ 
   }

static void DoInner←P60(formal←c0289, formal←c0290)
   word formal←c0289;
   word formal←c0290;
   {
   W7 var←c13688;
   /* declaration of self←v3644 skipped */ 
   /* declaration of inner←v3672 skipped */ 
   /* declaration of var←c12248 skipped */ 
   var←c13688.f4/* self←v3644 */  = formal←c0289;
   var←c13688.f5/* inner←v3672 */  = formal←c0290;
   /* DoInner: */ 
SOURCE(697, 265)
   (void) (XR←MonitorEntry(var←c13688.f4/* self←v3644 */ ));
SOURCE(761, 201)
   {
      word var←c01;
      {
         word var←c0252;
         var←c0252 = (word) &var←c13688;
         var←c01 = (word) XR←Enable(( ((word)  (fPt) NoName←Q2376) ), ( ((word)  (fPt) NoName←Q2436) ), var←c0252);
         };
      if ((var←c01 == 2)) {
         goto lab←L100002;
         };
      };
SOURCE(697, 265)
   (void) (XR←MonitorExit(var←c13688.f4/* self←v3644 */ ));
   return;
   /* c2c skipped dead code */ 
   lab←L100002: ;
SOURCE(892, 26)
   (void) XR←RaiseError(var←c13688.f6/* var←c12248 */ , 0);
   }

static word NoName←Q2376(formal←c0229)
   word formal←c0229;
   {
   register ptr gf←c0228 =  (ptr) &globalframe;
SOURCE(784, 41)
   {
      word private←v5708;
      word root←v5736;
SOURCE(784, 41)
      private←v5708 = (* (( (ptr) (* (( (ptr) formal←c0229)+4) ))+5) );
SOURCE(827, 22)
      root←v5736 = (* (( (ptr) (* (( (ptr) formal←c0229)+4) ))+4) );
SOURCE(851, 67)
      if ((root←v5736 == 0) || ((*  (ptr) root←v5736 ) != 0)) {
SOURCE(892, 26)
         (* (( (ptr) formal←c0229)+6) ) = (word) (( (bPt) gf←c0228)+36);
         (void) (XR←MonitorExit(* (( (ptr) formal←c0229)+4) ));
         return(2);
         };
SOURCE(920, 42)
      {
         word pd9;
         pd9 = (* (( (ptr) formal←c0229)+5) );
         (void) ( *( (fPt) ((*  (ptr) pd9 ))))(private←v5708, (* (( (ptr) private←v5708)+3) ), (* (( (ptr) private←v5708)+4) ), root←v5736, pd9)
         ;
         };
      };
   return(0);
   }

static word Create←P120(getKey←v3732, compare←v3760)
   word getKey←v3732;
   word compare←v3760;
   {
   register ptr gf←c13720 =  (ptr) &globalframe;
   word table←v3804;
   word private←v5780;
   word root←v5808;
   word y←v5836;
   word z←v5864;
   /* Create: */ 
SOURCE(969, 484)
SOURCE(969, 484)
   table←v3804 = 0;
SOURCE(1051, 114)
   {
      word var←c12280;
      word var←c12344;
      word var←c12408;
      var←c12280 = XR←NewObject(16, (* (( (ptr) gf←c13720)+5) ));
      var←c12344 = XR←NewObject(16, (* (( (ptr) gf←c13720)+5) ));
      var←c12408 = XR←NewObject(20, (* (( (ptr) gf←c13720)+4) ));
      (* (( (ptr) var←c12408)+1) ) = XR←CheckProc(getKey←v3732);
      (* (( (ptr) var←c12408)+2) ) = XR←CheckProc(compare←v3760);
      (* (( (ptr) var←c12408)+3) ) = var←c12280;
      (* (( (ptr) var←c12408)+4) ) = var←c12344;
      private←v5780 = var←c12408;
      };
SOURCE(1167, 25)
   root←v5808 = XR←NewObject(16, (* (( (ptr) gf←c13720)+5) ));
SOURCE(1194, 19)
   y←v5836 = (* (( (ptr) private←v5780)+3) );
SOURCE(1215, 19)
   z←v5864 = (* (( (ptr) private←v5780)+4) );
SOURCE(1236, 21)
   table←v3804 = XR←NewObject(24, (* (( (ptr) gf←c13720)+7) ));
SOURCE(1259, 17)
   (* (( (ptr) table←v3804)+4) ) = root←v5808;
SOURCE(1278, 23)
   (* (( (ptr) table←v3804)+5) ) = private←v5780;
SOURCE(1303, 20)
   (* (( (ptr) root←v5808)+2) ) = 0;
SOURCE(1325, 18)
   (*  (ptr) root←v5808 ) = 0;
SOURCE(1345, 16)
   (* (( (ptr) root←v5808)+1) ) = z←v5864;
SOURCE(1363, 15)
   (* (( (ptr) y←v5836)+2) ) = 1;
SOURCE(1380, 27)
   (* (( (ptr) y←v5836)+1) ) = 0;
   (*  (ptr) y←v5836 ) = 0;
SOURCE(1409, 17)
   (* (( (ptr) z←v5864)+2) ) = 0;
SOURCE(1428, 25)
   (*  (ptr) z←v5864 ) = y←v5836;
   (* (( (ptr) z←v5864)+1) ) = y←v5836;
SOURCE(969, 484)
   return(table←v3804);
   }

static word Size←P180(self←v3864)
   word self←v3864;
   {
   W7 var←c13752;
   /* declaration of size←v3908 skipped */ 
   /* declaration of var←c12536 skipped */ 
   /* Size: */ 
SOURCE(1459, 144)
   {
      word tmpAddr10;
      tmpAddr10 = (word) (( (ptr) &var←c13752)+5)/* var←c12536 */ ;
      (*  (ptr) tmpAddr10 ) = ( ((word)  (fPt) inner←P1188) );
      (* (( (ptr) tmpAddr10) + 1) ) = 1;
      };
SOURCE(1459, 144)
   var←c13752.f4/* size←v3908 */  = 0;
SOURCE(1564, 39)
   if ((self←v3864 != 0)) {
SOURCE(1583, 20)
      (void) DoInner←P60(self←v3864, (word) (( (bPt) &var←c13752)+20)/* var←c12536 */ );
      };
SOURCE(1459, 144)
   return(var←c13752.f4/* size←v3908 */ );
   }

static void inner←P1188(private←v9444, y←v9472, z←v9500, root←v9528, formal←c13784)
   word private←v9444;
   word y←v9472;
   word z←v9500;
   word root←v9528;
   word formal←c13784;
   {
   formal←c13784 = (formal←c13784 - 20);
   /* inner: */ 
SOURCE(1519, 40)
SOURCE(1540, 19)
   (* (( (ptr) formal←c13784)+4) ) = (*  (ptr) private←v9444 );
   }

static void Insert←P240(self←v3968, dataToInsert←v3996, insertKey←v4024)
   word self←v3968;
   word dataToInsert←v3996;
   word insertKey←v4024;
   {
   register ptr gf←c13816 =  (ptr) &globalframe;
   word node←v5952;
   /* Insert: */ 
SOURCE(1609, 161)
SOURCE(1687, 48)
   node←v5952 = XR←NewObject(16, (* (( (ptr) gf←c13816)+5) ));
   (* (( (ptr) node←v5952)+3) ) = dataToInsert←v3996;
SOURCE(1737, 33)
   (void) InsertNode←P300(self←v3968, node←v5952, insertKey←v4024);
   }

static void InsertNode←P300(self←v4084, formal←c0291, formal←c0292)
   word self←v4084;
   word formal←c0291;
   word formal←c0292;
   {
   W9 var←c13848;
   /* declaration of nodeToInsert←v4112 skipped */ 
   /* declaration of insertKey←v4140 skipped */ 
   register ptr gf←c13880 =  (ptr) &globalframe;
   /* declaration of var←c12600 skipped */ 
   /* declaration of keyAlreadyPresent←v5996 skipped */ 
   (* (( (ptr) &var←c13848)+4)/* nodeToInsert←v4112 */  ) = formal←c0291;
   (* (( (ptr) &var←c13848)+5)/* insertKey←v4140 */  ) = formal←c0292;
   /* InsertNode: */ 
SOURCE(1776, 1078)
   {
      word tmpAddr11;
      tmpAddr11 = (word) (( (ptr) &var←c13848)+6)/* var←c12600 */ ;
      (*  (ptr) tmpAddr11 ) = ( ((word)  (fPt) inner←P1248) );
      (* (( (ptr) tmpAddr11) + 1) ) = 1;
      };
SOURCE(1854, 31)
   (* (( (ptr) &var←c13848)+8)/* keyAlreadyPresent←v5996 */  ) = 0;
SOURCE(2788, 20)
   (void) DoInner←P60(self←v4084, (word) (( (bPt) &var←c13848)+24)/* var←c12600 */ );
SOURCE(2810, 44)
   if ((0 != (* (( (ptr) &var←c13848)+8)/* keyAlreadyPresent←v5996 */  ))) {
SOURCE(2836, 18)
      (void) XR←RaiseError((word) (( (bPt) gf←c13880)+32), 0);
      };
   }

static void inner←P1248(private←v9588, y←v9616, z←v9644, root←v9672, formal←c13912)
   word private←v9588;
   word y←v9616;
   word z←v9644;
   word root←v9672;
   word formal←c13912;
   {
   word x←v6068 = 0;
   word gg←v6096 = 0;
   word g←v6124 = 0;
   word f←v6152 = 0;
   word c←v6180 = 2;
   formal←c13912 = (formal←c13912 - 24);
   /* inner: */ 
SOURCE(1887, 873)
SOURCE(2012, 8)
   f←v6152 = root←v9672;
SOURCE(2022, 13)
   x←v6068 = (* (( (ptr) f←v6152)+1) );
SOURCE(2037, 684)
   lab←L100006: ;
SOURCE(2040, 402)
   if ( ( ((* (( (ptr) (*  (ptr) x←v6068 ))+2) ) == 1) ? ((* (( (ptr) (* (( (ptr) x←v6068)+1) ))+2) ) == 1) : 0 ) ) {
SOURCE(2102, 209)
      if ((x←v6068 == z←v9644)) {
SOURCE(2118, 43)
         if ((c←v6180 == 1)) {
SOURCE(2137, 24)
            (* (( (ptr) formal←c13912)+8) ) = 1;
SOURCE(2163, 4)
            goto lab←L100005;
            };
SOURCE(2170, 16)
         x←v6068 = (* (( (ptr) formal←c13912)+4) );
SOURCE(2188, 13)
         (*  (ptr) x←v6068 ) = z←v9644;
SOURCE(2203, 13)
         (* (( (ptr) x←v6068)+1) ) = z←v9644;
SOURCE(2218, 49)
         if ((c←v6180 == 0)) {
SOURCE(2235, 19)
            (*  (ptr) f←v6152 ) = x←v6068;
            }
         else {
SOURCE(2254, 13)
            (* (( (ptr) f←v6152)+1) ) = x←v6068;
            };
SOURCE(2269, 9)
         c←v6180 = 1;
SOURCE(2280, 31)
         (*  (ptr) private←v9588 ) = ((*  (ptr) private←v9588 ) + 1);
         };
SOURCE(2316, 25)
      (* (( (ptr) (*  (ptr) x←v6068 ))+2) ) = 0;
SOURCE(2343, 25)
      (* (( (ptr) (* (( (ptr) x←v6068)+1) ))+2) ) = 0;
SOURCE(2370, 15)
      (* (( (ptr) x←v6068)+2) ) = 1;
SOURCE(2387, 55)
      if (((* (( (ptr) f←v6152)+2) ) == 1)) {
SOURCE(2411, 24)
         g←v6124 = (word) Balance←P1080(gg←v6096, g←v6124, f←v6152, x←v6068);
SOURCE(2437, 5)
         x←v6068 = g←v6124;
         };
      };
SOURCE(2450, 18)
   if ((c←v6180 == 1)) {
SOURCE(2468, 4)
      goto lab←L100005;
      };
SOURCE(2474, 6)
   gg←v6096 = g←v6124;
SOURCE(2482, 5)
   g←v6124 = f←v6152;
SOURCE(2489, 5)
   f←v6152 = x←v6068;
SOURCE(2584, 38)
   {
      word pd12;
      pd12 = (* (( (ptr) private←v9588)+2) );
      c←v6180 = (word) ( *( (fPt) ((*  (ptr) pd12 ))))((* (( (ptr) formal←c13912)+5) ), (* (( (ptr) x←v6068)+3) ), pd12);
      };
SOURCE(2624, 43)
   if ((c←v6180 == 1)) {
SOURCE(2643, 24)
      (* (( (ptr) formal←c13912)+8) ) = 1;
SOURCE(2669, 4)
      goto lab←L100005;
      };
SOURCE(2676, 45)
   if ((c←v6180 == 0)) {
      x←v6068 = (*  (ptr) x←v6068 );
      }
   else {
      x←v6068 = (* (( (ptr) x←v6068)+1) );
      };
   goto lab←L100006;
   lab←L100005: ;
SOURCE(2732, 28)
   (* (( (ptr) (* (( (ptr) root←v9672)+1) ))+2) ) = 0;
   }

static word Delete←P360(self←v4200, formal←c0293)
   word self←v4200;
   word formal←c0293;
   {
   W8 var←c13944;
   /* declaration of deleteKey←v4228 skipped */ 
   /* declaration of deletedNode←v4272 skipped */ 
   /* declaration of var←c12632 skipped */ 
   var←c13944.f4/* deleteKey←v4228 */  = formal←c0293;
   /* Delete: */ 
SOURCE(2860, 1894)
   {
      word tmpAddr13;
      tmpAddr13 = (word) (( (ptr) &var←c13944)+6)/* var←c12632 */ ;
      (*  (ptr) tmpAddr13 ) = ( ((word)  (fPt) inner←P1308) );
      (* (( (ptr) tmpAddr13) + 1) ) = 1;
      };
SOURCE(2860, 1894)
   var←c13944.f5/* deletedNode←v4272 */  = 0;
SOURCE(4734, 20)
   (void) DoInner←P60(self←v4200, (word) (( (bPt) &var←c13944)+24)/* var←c12632 */ );
SOURCE(2860, 1894)
   return(var←c13944.f5/* deletedNode←v4272 */ );
   }

static void inner←P1308(private←v9828, y←v9856, z←v9884, root←v9912, formal←c13976)
   word private←v9828;
   word y←v9856;
   word z←v9884;
   word root←v9912;
   word formal←c13976;
   {
   word f←v6268 = 0;
   word result←v6296 = 0;
   word parentOfResult←v6324 = 0;
   word x←v6352 = 0;
   word g←v6380 = 0;
   word b←v6408 = 0;
   word c←v6436;
   formal←c13976 = (formal←c13976 - 24);
   /* inner: */ 
SOURCE(2948, 1781)
SOURCE(3032, 12)
   result←v6296 = 0;
SOURCE(3046, 8)
   f←v6268 = root←v9912;
SOURCE(3056, 13)
   x←v6352 = (* (( (ptr) f←v6268)+1) );
SOURCE(3071, 20)
   if ((x←v6352 == z←v9884)) {
SOURCE(3085, 6)
      return;
      };
SOURCE(3093, 17)
   (* (( (ptr) y←v9856)+2) ) = 0;
SOURCE(3183, 83)
   if ( ( ((* (( (ptr) (*  (ptr) x←v6352 ))+2) ) == 0) ? ((* (( (ptr) (* (( (ptr) x←v6352)+1) ))+2) ) == 0) : 0 ) ) {
SOURCE(3251, 15)
      (* (( (ptr) x←v6352)+2) ) = 1;
      };
SOURCE(3268, 89)
   {
      word pd14;
      pd14 = (* (( (ptr) private←v9828)+2) );
      c←v6436 = (word) ( *( (fPt) ((*  (ptr) pd14 ))))((* (( (ptr) formal←c13976)+4) ), (* (( (ptr) x←v6352)+3) ), pd14);
      };
   if ((c←v6436 == 1)) {
SOURCE(3327, 10)
      result←v6296 = x←v6352;
SOURCE(3339, 18)
      parentOfResult←v6324 = f←v6268;
      };
SOURCE(3362, 924)
   lab←L100009: ;
SOURCE(3365, 921)
SOURCE(3367, 5)
   g←v6380 = f←v6268;
SOURCE(3374, 5)
   f←v6268 = x←v6352;
SOURCE(3381, 82)
   if ((c←v6436 == 0)) {
SOURCE(3399, 13)
      b←v6408 = (* (( (ptr) x←v6352)+1) );
SOURCE(3414, 13)
      x←v6352 = (*  (ptr) x←v6352 );
      }
   else {
SOURCE(3435, 13)
      b←v6408 = (*  (ptr) x←v6352 );
SOURCE(3450, 13)
      x←v6352 = (* (( (ptr) x←v6352)+1) );
      };
SOURCE(3466, 99)
   {
      word tc15;
      if ((x←v6352 != z←v9884)) {
         {
            word pd16;
            pd16 = (* (( (ptr) private←v9828)+2) );
            c←v6436 = (word) ( *( (fPt) ((*  (ptr) pd16 ))))((* (( (ptr) formal←c13976)+4) ), (* (( (ptr) x←v6352)+3) ), pd16);
            };
         tc15 =  (word) (c←v6436 == 1);
         }
      else {
         tc15 =  (word) 0;
         };
      if (tc15) {
SOURCE(3535, 10)
         result←v6296 = x←v6352;
SOURCE(3547, 18)
         parentOfResult←v6324 = f←v6268;
         };
      };
SOURCE(3570, 72)
   if ((((* (( (ptr) x←v6352)+2) ) == 1) || ((* (( (ptr) (*  (ptr) x←v6352 ))+2) ) == 1)) || ((* (( (ptr) (* (( (ptr) x←v6352)+1)
       ))+2) ) == 1)) {
SOURCE(3642, 4)
      goto lab←L100009;
      };
SOURCE(3648, 236)
   if (((* (( (ptr) b←v6408)+2) ) == 1)) {
SOURCE(3672, 109)
      if ((b←v6408 == (*  (ptr) f←v6268 ))) {
SOURCE(3696, 21)
         (*  (ptr) f←v6268 ) = (* (( (ptr) b←v6408)+1) );
SOURCE(3720, 13)
         (* (( (ptr) b←v6408)+1) ) = f←v6268;
         }
      else {
SOURCE(3744, 21)
         (* (( (ptr) f←v6268)+1) ) = (*  (ptr) b←v6408 );
SOURCE(3768, 13)
         (*  (ptr) b←v6408 ) = f←v6268;
         };
SOURCE(3786, 15)
      (* (( (ptr) f←v6268)+2) ) = 1;
SOURCE(3804, 17)
      (* (( (ptr) b←v6408)+2) ) = 0;
SOURCE(3823, 54)
      if ((f←v6268 == (*  (ptr) g←v6380 ))) {
SOURCE(3845, 19)
         (*  (ptr) g←v6380 ) = b←v6408;
         }
      else {
SOURCE(3864, 13)
         (* (( (ptr) g←v6380)+1) ) = b←v6408;
         };
SOURCE(3879, 5)
      x←v6352 = b←v6408;
SOURCE(3887, 15)
      goto lab←L100010;
      };
SOURCE(3925, 14)
   if ((x←v6352 == z←v9884)) {
SOURCE(3939, 4)
      goto lab←L100008;
      };
SOURCE(3945, 15)
   (* (( (ptr) x←v6352)+2) ) = 1;
SOURCE(3962, 92)
   if (((* (( (ptr) (*  (ptr) b←v6408 ))+2) ) == 1)) {
SOURCE(3996, 25)
      (* (( (ptr) (*  (ptr) b←v6408 ))+2) ) = 0;
SOURCE(4023, 31)
      x←v6352 = (word) Balance←P1080(g←v6380, f←v6268, b←v6408, (*  (ptr) b←v6408 ));
SOURCE(4056, 15)
      goto lab←L100010;
      };
SOURCE(4076, 92)
   if (((* (( (ptr) (* (( (ptr) b←v6408)+1) ))+2) ) == 1)) {
SOURCE(4110, 25)
      (* (( (ptr) (* (( (ptr) b←v6408)+1) ))+2) ) = 0;
SOURCE(4137, 31)
      x←v6352 = (word) Balance←P1080(g←v6380, f←v6268, b←v6408, (* (( (ptr) b←v6408)+1) ));
SOURCE(4170, 15)
      goto lab←L100010;
      };
SOURCE(4190, 17)
   (* (( (ptr) f←v6268)+2) ) = 0;
SOURCE(4209, 15)
   (* (( (ptr) b←v6408)+2) ) = 1;
   goto lab←L100011;
   lab←L100010: ;
SOURCE(4246, 38)
   {
      word pd17;
      pd17 = (* (( (ptr) private←v9828)+2) );
      c←v6436 = (word) ( *( (fPt) ((*  (ptr) pd17 ))))((* (( (ptr) formal←c13976)+4) ), (* (( (ptr) x←v6352)+3) ), pd17);
      };
   lab←L100011: ;
   goto lab←L100009;
   lab←L100008: ;
SOURCE(4298, 28)
   (* (( (ptr) (* (( (ptr) root←v9912)+1) ))+2) ) = 0;
SOURCE(4328, 17)
   (* (( (ptr) z←v9884)+2) ) = 0;
SOURCE(4347, 15)
   (* (( (ptr) y←v9856)+2) ) = 1;
SOURCE(4385, 319)
   if ((result←v6296 != 0)) {
SOURCE(4408, 54)
      if (((*  (ptr) g←v6380 ) == f←v6268)) {
SOURCE(4430, 19)
         (*  (ptr) g←v6380 ) = z←v9884;
         }
      else {
SOURCE(4449, 13)
         (* (( (ptr) g←v6380)+1) ) = z←v9884;
         };
SOURCE(4464, 204)
      if ((f←v6268 != result←v6296)) {
SOURCE(4485, 98)
         if (((*  (ptr) parentOfResult←v6324 ) == result←v6296)) {
SOURCE(4525, 32)
            (*  (ptr) parentOfResult←v6324 ) = f←v6268;
            }
         else {
SOURCE(4557, 26)
            (* (( (ptr) parentOfResult←v6324)+1) ) = f←v6268;
            };
SOURCE(4585, 26)
         (*  (ptr) f←v6268 ) = (*  (ptr) result←v6296 );
SOURCE(4614, 26)
         (* (( (ptr) f←v6268)+1) ) = (* (( (ptr) result←v6296)+1) );
SOURCE(4642, 26)
         (* (( (ptr) f←v6268)+2) ) = (* (( (ptr) result←v6296)+2) );
         };
SOURCE(4673, 31)
      (*  (ptr) private←v9828 ) = ((*  (ptr) private←v9828 ) - 1);
      };
SOURCE(4709, 20)
   (* (( (ptr) formal←c13976)+5) ) = result←v6296;
   }

static word LookupNode←P420(self←v4332, formal←c0294)
   word self←v4332;
   word formal←c0294;
   {
   W8 var←c14008;
   /* declaration of lookupKey←v4360 skipped */ 
   /* declaration of node←v4404 skipped */ 
   /* declaration of var←c12664 skipped */ 
   var←c14008.f4/* lookupKey←v4360 */  = formal←c0294;
   /* LookupNode: */ 
SOURCE(4760, 343)
   {
      word tmpAddr18;
      tmpAddr18 = (word) (( (ptr) &var←c14008)+6)/* var←c12664 */ ;
      (*  (ptr) tmpAddr18 ) = ( ((word)  (fPt) inner←P1368) );
      (* (( (ptr) tmpAddr18) + 1) ) = 1;
      };
SOURCE(4760, 343)
   var←c14008.f5/* node←v4404 */  = 0;
SOURCE(5083, 20)
   (void) DoInner←P60(self←v4332, (word) (( (bPt) &var←c14008)+24)/* var←c12664 */ );
SOURCE(4760, 343)
   return(var←c14008.f5/* node←v4404 */ );
   }

static void inner←P1368(private←v9972, y←v10000, z←v10028, root←v10056, formal←c14040)
   word private←v9972;
   word y←v10000;
   word z←v10028;
   word root←v10056;
   word formal←c14040;
   {
   formal←c14040 = (formal←c14040 - 24);
   /* inner: */ 
SOURCE(4845, 206)
SOURCE(4866, 19)
   (* (( (ptr) formal←c14040)+5) ) = (* (( (ptr) root←v10056)+1) );
SOURCE(4887, 164)
   lab←L100014: ;
SOURCE(4890, 28)
   if (((* (( (ptr) formal←c14040)+5) ) == z←v10028)) {
SOURCE(4908, 10)
      (* (( (ptr) formal←c14040)+5) ) = 0;
SOURCE(4920, 4)
      goto lab←L100013;
      };
SOURCE(4927, 124)
   {
      word var←c12696;
      {
         word pd19;
         pd19 = (* (( (ptr) private←v9972)+2) );
         var←c12696 = (word) ( *( (fPt) ((*  (ptr) pd19 ))))((* (( (ptr) formal←c14040)+4) ), (* (( (ptr) (* (( (ptr) formal←c14040)+5)
                ))+3) ), pd19);
         };
      switch (var←c12696) {
         case 1: 
SOURCE(4986, 4)
            goto lab←L100013;
         case 0: 
SOURCE(5000, 19)
            (* (( (ptr) formal←c14040)+5) ) = (*  (ptr) (* (( (ptr) formal←c14040)+5) ) );
            break;
         case 2: 
SOURCE(5032, 19)
            (* (( (ptr) formal←c14040)+5) ) = (* (( (ptr) (* (( (ptr) formal←c14040)+5) ))+1) );
            break;
         default: 
SOURCE(5064, 5)
            (void) XR←RaiseUnnamedError();
            break;
         };
      };
   goto lab←L100014;
   lab←L100013: ;
   }

static word Lookup←P480(self←v4464, formal←c0295)
   word self←v4464;
   word formal←c0295;
   {
   W8 var←c14072;
   /* declaration of lookupKey←v4492 skipped */ 
   /* declaration of data←v4536 skipped */ 
   /* declaration of var←c12728 skipped */ 
   var←c14072.f4/* lookupKey←v4492 */  = formal←c0295;
   /* Lookup: */ 
SOURCE(5109, 395)
   {
      word tmpAddr20;
      tmpAddr20 = (word) (( (ptr) &var←c14072)+6)/* var←c12728 */ ;
      (*  (ptr) tmpAddr20 ) = ( ((word)  (fPt) inner←P1428) );
      (* (( (ptr) tmpAddr20) + 1) ) = 1;
      };
SOURCE(5109, 395)
   var←c14072.f5/* data←v4536 */  = 0;
SOURCE(5484, 20)
   (void) DoInner←P60(self←v4464, (word) (( (bPt) &var←c14072)+24)/* var←c12728 */ );
SOURCE(5109, 395)
   return(var←c14072.f5/* data←v4536 */ );
   }

static void inner←P1428(private←v10116, y←v10144, z←v10172, root←v10200, formal←c14104)
   word private←v10116;
   word y←v10144;
   word z←v10172;
   word root←v10200;
   word formal←c14104;
   {
   word equalNode←v6568;
   formal←c14104 = (formal←c14104 - 24);
   /* inner: */ 
SOURCE(5194, 285)
SOURCE(5215, 30)
   equalNode←v6568 = (* (( (ptr) root←v10200)+1) );
SOURCE(5247, 182)
   lab←L100017: ;
SOURCE(5250, 28)
   if ((equalNode←v6568 == z←v10172)) {
SOURCE(5272, 6)
      return;
      };
SOURCE(5280, 149)
   {
      word var←c12760;
      {
         word pd21;
         pd21 = (* (( (ptr) private←v10116)+2) );
         var←c12760 = (word) ( *( (fPt) ((*  (ptr) pd21 ))))((* (( (ptr) formal←c14104)+4) ), (* (( (ptr) equalNode←v6568)+3) ), pd21)
         ;
         };
      switch (var←c12760) {
         case 1: 
SOURCE(5344, 4)
            goto lab←L100016;
         case 0: 
SOURCE(5358, 29)
            equalNode←v6568 = (*  (ptr) equalNode←v6568 );
            break;
         case 2: 
SOURCE(5400, 29)
            equalNode←v6568 = (* (( (ptr) equalNode←v6568)+1) );
            break;
         default: 
SOURCE(5442, 5)
            (void) XR←RaiseUnnamedError();
            break;
         };
      };
   goto lab←L100017;
   lab←L100016: ;
SOURCE(5458, 21)
   (* (( (ptr) formal←c14104)+5) ) = (* (( (ptr) equalNode←v6568)+3) );
   }

static void Lookup3←P540(formal←c0108, self←v4596, formal←c0296)
   word formal←c0108;
   word self←v4596;
   word formal←c0296;
   {
   W10 var←c14136;
   /* declaration of lookupKey←v4624 skipped */ 
   /* declaration of leftData←v4668 skipped */ 
   /* declaration of equalData←v4696 skipped */ 
   /* declaration of rightData←v4724 skipped */ 
   /* declaration of var←c12792 skipped */ 
   (* (( (ptr) &var←c14136)+4)/* lookupKey←v4624 */  ) = formal←c0296;
   /* Lookup3: */ 
SOURCE(5510, 937)
   {
      word tmpAddr22;
      tmpAddr22 = (word) (( (ptr) &var←c14136)+8)/* var←c12792 */ ;
      (*  (ptr) tmpAddr22 ) = ( ((word)  (fPt) inner←P1488) );
      (* (( (ptr) tmpAddr22) + 1) ) = 1;
      };
SOURCE(5510, 937)
   (* (( (ptr) &var←c14136)+5)/* leftData←v4668 */  ) = 0;
SOURCE(5510, 937)
   (* (( (ptr) &var←c14136)+6)/* equalData←v4696 */  ) = 0;
SOURCE(5510, 937)
   (* (( (ptr) &var←c14136)+7)/* rightData←v4724 */  ) = 0;
SOURCE(6427, 20)
   (void) DoInner←P60(self←v4596, (word) (( (bPt) &var←c14136)+32)/* var←c12792 */ );
   /* removed tail goto */ 
   (*  (ptr) formal←c0108 ) = (* (( (ptr) &var←c14136)+5)/* leftData←v4668 */  );
   (* (( (ptr) formal←c0108)+1) ) = (* (( (ptr) &var←c14136)+6)/* equalData←v4696 */  );
   (* (( (ptr) formal←c0108)+2) ) = (* (( (ptr) &var←c14136)+7)/* rightData←v4724 */  );
   return;
   }

static void inner←P1488(private←v10260, y←v10288, z←v10316, root←v10344, formal←c14168)
   word private←v10260;
   word y←v10288;
   word z←v10316;
   word root←v10344;
   word formal←c14168;
   {
   word equalNode←v6656;
   word leftNode←v6684 = 0;
   word rightNode←v6712 = 0;
   formal←c14168 = (formal←c14168 - 32);
   /* inner: */ 
SOURCE(5622, 800)
SOURCE(5643, 30)
   equalNode←v6656 = (* (( (ptr) root←v10344)+1) );
SOURCE(5720, 520)
   lab←L100021: ;
SOURCE(5723, 38)
   if ((equalNode←v6656 == z←v10316)) {
SOURCE(5746, 15)
      equalNode←v6656 = 0;
SOURCE(5763, 4)
      goto lab←L100020;
      };
SOURCE(5770, 470)
   {
      word var←c12824;
      {
         word pd23;
         pd23 = (* (( (ptr) private←v10260)+2) );
         var←c12824 = (word) ( *( (fPt) ((*  (ptr) pd23 ))))((* (( (ptr) formal←c14168)+4) ), (* (( (ptr) equalNode←v6656)+3) ), pd23)
         ;
         };
      switch (var←c12824) {
         case 1: 
SOURCE(5836, 127)
            if (((*  (ptr) equalNode←v6656 ) != z←v10316)) {
SOURCE(5868, 28)
               leftNode←v6684 = (*  (ptr) equalNode←v6656 );
SOURCE(5898, 65)
               lab←L100024: ;
               if (((* (( (ptr) leftNode←v6684)+1) ) != z←v10316)) {
                  }
               else {
                  goto lab←L100022;
                  };
SOURCE(5928, 35)
               leftNode←v6684 = (* (( (ptr) leftNode←v6684)+1) );
               goto lab←L100024;
               lab←L100022: ;
               };
SOURCE(5968, 131)
            if (((* (( (ptr) equalNode←v6656)+1) ) != z←v10316)) {
SOURCE(6000, 29)
               rightNode←v6712 = (* (( (ptr) equalNode←v6656)+1) );
SOURCE(6031, 68)
               lab←L100027: ;
               if (((*  (ptr) rightNode←v6712 ) != z←v10316)) {
                  }
               else {
                  goto lab←L100025;
                  };
SOURCE(6062, 37)
               rightNode←v6712 = (*  (ptr) rightNode←v6712 );
               goto lab←L100027;
               lab←L100025: ;
               };
SOURCE(6104, 4)
            goto lab←L100020;
         case 0: 
SOURCE(6122, 21)
            rightNode←v6712 = equalNode←v6656;
SOURCE(6145, 29)
            equalNode←v6656 = (*  (ptr) equalNode←v6656 );
            break;
         case 2: 
SOURCE(6189, 20)
            leftNode←v6684 = equalNode←v6656;
SOURCE(6211, 29)
            equalNode←v6656 = (* (( (ptr) equalNode←v6656)+1) );
            break;
         default: 
SOURCE(6255, 5)
            (void) XR←RaiseUnnamedError();
            break;
         };
      };
   goto lab←L100021;
   lab←L100020: ;
SOURCE(6271, 50)
   if ((equalNode←v6656 != 0)) {
SOURCE(6295, 26)
      (* (( (ptr) formal←c14168)+6) ) = (* (( (ptr) equalNode←v6656)+3) );
      };
SOURCE(6323, 47)
   if ((leftNode←v6684 != 0)) {
SOURCE(6346, 24)
      (* (( (ptr) formal←c14168)+5) ) = (* (( (ptr) leftNode←v6684)+3) );
      };
SOURCE(6372, 50)
   if ((rightNode←v6712 != 0)) {
SOURCE(6396, 26)
      (* (( (ptr) formal←c14168)+7) ) = (* (( (ptr) rightNode←v6712)+3) );
      };
   }

static word LookupSmallest←P600(self←v4784)
   word self←v4784;
   {
   W7 var←c14200;
   /* declaration of data←v4828 skipped */ 
   /* declaration of var←c12856 skipped */ 
   /* LookupSmallest: */ 
SOURCE(6453, 290)
   {
      word tmpAddr24;
      tmpAddr24 = (word) (( (ptr) &var←c14200)+5)/* var←c12856 */ ;
      (*  (ptr) tmpAddr24 ) = ( ((word)  (fPt) inner←P1548) );
      (* (( (ptr) tmpAddr24) + 1) ) = 1;
      };
SOURCE(6453, 290)
   var←c14200.f4/* data←v4828 */  = 0;
SOURCE(6723, 20)
   (void) DoInner←P60(self←v4784, (word) (( (bPt) &var←c14200)+20)/* var←c12856 */ );
SOURCE(6453, 290)
   return(var←c14200.f4/* data←v4828 */ );
   }

static void inner←P1548(private←v10404, y←v10432, z←v10460, root←v10488, formal←c14232)
   word private←v10404;
   word y←v10432;
   word z←v10460;
   word root←v10488;
   word formal←c14232;
   {
   word smallestNode←v6800;
   formal←c14232 = (formal←c14232 - 20);
   /* inner: */ 
SOURCE(6530, 188)
SOURCE(6551, 33)
   smallestNode←v6800 = (* (( (ptr) root←v10488)+1) );
SOURCE(6586, 29)
   if ((smallestNode←v6800 == z←v10460)) {
SOURCE(6609, 6)
      return;
      };
SOURCE(6617, 75)
   lab←L100030: ;
   if (((*  (ptr) smallestNode←v6800 ) != z←v10460)) {
      }
   else {
      goto lab←L100028;
      };
SOURCE(6649, 43)
   smallestNode←v6800 = (*  (ptr) smallestNode←v6800 );
   goto lab←L100030;
   lab←L100028: ;
SOURCE(6694, 24)
   (* (( (ptr) formal←c14232)+4) ) = (* (( (ptr) smallestNode←v6800)+3) );
   }

static word LookupNextLarger←P660(self←v4888, formal←c0297)
   word self←v4888;
   word formal←c0297;
   {
   W8 var←c14264;
   /* declaration of lookupKey←v4916 skipped */ 
   /* declaration of data←v4960 skipped */ 
   /* declaration of var←c12888 skipped */ 
   var←c14264.f4/* lookupKey←v4916 */  = formal←c0297;
   /* LookupNextLarger: */ 
SOURCE(6749, 360)
   {
      word tmpAddr25;
      tmpAddr25 = (word) (( (ptr) &var←c14264)+6)/* var←c12888 */ ;
      (*  (ptr) tmpAddr25 ) = ( ((word)  (fPt) inner←P1608) );
      (* (( (ptr) tmpAddr25) + 1) ) = 1;
      };
SOURCE(6749, 360)
   var←c14264.f5/* data←v4960 */  = 0;
SOURCE(7089, 20)
   (void) DoInner←P60(self←v4888, (word) (( (bPt) &var←c14264)+24)/* var←c12888 */ );
SOURCE(6749, 360)
   return(var←c14264.f5/* data←v4960 */ );
   }

static void inner←P1608(private←v10548, y←v10576, z←v10604, root←v10632, formal←c14296)
   word private←v10548;
   word y←v10576;
   word z←v10604;
   word root←v10632;
   word formal←c14296;
   {
   word largerNode←v6888 = 0;
   word x←v6916;
   formal←c14296 = (formal←c14296 - 24);
   /* inner: */ 
SOURCE(6844, 240)
SOURCE(6889, 22)
   x←v6916 = (* (( (ptr) root←v10632)+1) );
SOURCE(6913, 113)
   lab←L100033: ;
   if ((x←v6916 != z←v10604)) {
      }
   else {
      goto lab←L100031;
      };
SOURCE(6926, 100)
   {
      word pd26;
      pd26 = (* (( (ptr) private←v10548)+2) );
      if (((word) ( *( (fPt) ((*  (ptr) pd26 ))))((* (( (ptr) formal←c14296)+4) ), (* (( (ptr) x←v6916)+3) ), pd26) == 0)) {
SOURCE(6977, 14)
         largerNode←v6888 = x←v6916;
SOURCE(6993, 13)
         x←v6916 = (*  (ptr) x←v6916 );
         }
      else {
SOURCE(7013, 13)
         x←v6916 = (* (( (ptr) x←v6916)+1) );
         };
      };
   goto lab←L100033;
   lab←L100031: ;
SOURCE(7037, 47)
   if ((largerNode←v6888 != 0)) {
SOURCE(7062, 22)
      (* (( (ptr) formal←c14296)+5) ) = (* (( (ptr) largerNode←v6888)+3) );
      };
   }

static word LookupLargest←P720(self←v5020)
   word self←v5020;
   {
   W7 var←c14328;
   /* declaration of data←v5064 skipped */ 
   /* declaration of var←c12920 skipped */ 
   /* LookupLargest: */ 
SOURCE(7115, 304)
   {
      word tmpAddr27;
      tmpAddr27 = (word) (( (ptr) &var←c14328)+5)/* var←c12920 */ ;
      (*  (ptr) tmpAddr27 ) = ( ((word)  (fPt) inner←P1668) );
      (* (( (ptr) tmpAddr27) + 1) ) = 1;
      };
SOURCE(7115, 304)
   var←c14328.f4/* data←v5064 */  = 0;
SOURCE(7399, 20)
   (void) DoInner←P60(self←v5020, (word) (( (bPt) &var←c14328)+20)/* var←c12920 */ );
SOURCE(7115, 304)
   return(var←c14328.f4/* data←v5064 */ );
   }

static void inner←P1668(private←v10692, y←v10720, z←v10748, root←v10776, formal←c14360)
   word private←v10692;
   word y←v10720;
   word z←v10748;
   word root←v10776;
   word formal←c14360;
   {
   word largestNode←v7004;
   formal←c14360 = (formal←c14360 - 20);
   /* inner: */ 
SOURCE(7191, 203)
SOURCE(7212, 32)
   largestNode←v7004 = (* (( (ptr) root←v10776)+1) );
SOURCE(7246, 48)
   if ((largestNode←v7004 == z←v10748)) {
SOURCE(7269, 17)
      largestNode←v7004 = 0;
SOURCE(7288, 6)
      return;
      };
SOURCE(7297, 72)
   lab←L100036: ;
   if (((* (( (ptr) largestNode←v7004)+1) ) != z←v10748)) {
      }
   else {
      goto lab←L100034;
      };
SOURCE(7328, 41)
   largestNode←v7004 = (* (( (ptr) largestNode←v7004)+1) );
   goto lab←L100036;
   lab←L100034: ;
SOURCE(7371, 23)
   (* (( (ptr) formal←c14360)+4) ) = (* (( (ptr) largestNode←v7004)+3) );
   }

static word LookupNextSmaller←P780(self←v5124, formal←c0298)
   word self←v5124;
   word formal←c0298;
   {
   W8 var←c14392;
   /* declaration of lookupKey←v5152 skipped */ 
   /* declaration of data←v5196 skipped */ 
   /* declaration of var←c12952 skipped */ 
   var←c14392.f4/* lookupKey←v5152 */  = formal←c0298;
   /* LookupNextSmaller: */ 
SOURCE(7425, 370)
   {
      word tmpAddr28;
      tmpAddr28 = (word) (( (ptr) &var←c14392)+6)/* var←c12952 */ ;
      (*  (ptr) tmpAddr28 ) = ( ((word)  (fPt) inner←P1728) );
      (* (( (ptr) tmpAddr28) + 1) ) = 1;
      };
SOURCE(7425, 370)
   var←c14392.f5/* data←v5196 */  = 0;
SOURCE(7775, 20)
   (void) DoInner←P60(self←v5124, (word) (( (bPt) &var←c14392)+24)/* var←c12952 */ );
SOURCE(7425, 370)
   return(var←c14392.f5/* data←v5196 */ );
   }

static void inner←P1728(private←v10836, y←v10864, z←v10892, root←v10920, formal←c14424)
   word private←v10836;
   word y←v10864;
   word z←v10892;
   word root←v10920;
   word formal←c14424;
   {
   word smallerNode←v7092 = 0;
   word x←v7120;
   formal←c14424 = (formal←c14424 - 24);
   /* inner: */ 
SOURCE(7521, 249)
SOURCE(7567, 22)
   x←v7120 = (* (( (ptr) root←v10920)+1) );
SOURCE(7591, 119)
   lab←L100039: ;
   if ((x←v7120 != z←v10892)) {
      }
   else {
      goto lab←L100037;
      };
SOURCE(7604, 106)
   {
      word pd29;
      pd29 = (* (( (ptr) private←v10836)+2) );
      if (((word) ( *( (fPt) ((*  (ptr) pd29 ))))((* (( (ptr) formal←c14424)+4) ), (* (( (ptr) x←v7120)+3) ), pd29) == 2)) {
SOURCE(7659, 15)
         smallerNode←v7092 = x←v7120;
SOURCE(7676, 14)
         x←v7120 = (* (( (ptr) x←v7120)+1) );
         }
      else {
SOURCE(7697, 13)
         x←v7120 = (*  (ptr) x←v7120 );
         };
      };
   goto lab←L100039;
   lab←L100037: ;
SOURCE(7721, 49)
   if ((smallerNode←v7092 != 0)) {
SOURCE(7747, 23)
      (* (( (ptr) formal←c14424)+5) ) = (* (( (ptr) smallerNode←v7092)+3) );
      };
   }

static void DestroyTable←P840(formal←c0299)
   word formal←c0299;
   {
   W7 var←c14456;
   /* declaration of self←v5256 skipped */ 
   /* declaration of var←c12984 skipped */ 
   var←c14456.f4/* self←v5256 */  = formal←c0299;
   /* DestroyTable: */ 
SOURCE(7801, 192)
   {
      word tmpAddr30;
      tmpAddr30 = (word) (( (ptr) &var←c14456)+5)/* var←c12984 */ ;
      (*  (ptr) tmpAddr30 ) = ( ((word)  (fPt) inner←P1788) );
      (* (( (ptr) tmpAddr30) + 1) ) = 1;
      };
SOURCE(7973, 20)
   (void) DoInner←P60(var←c14456.f4/* self←v5256 */ , (word) (( (bPt) &var←c14456)+20)/* var←c12984 */ );
   }

static void inner←P1788(private←v10980, y←v11008, z←v11036, root←v11064, formal←c14488)
   word private←v10980;
   word y←v11008;
   word z←v11036;
   word root←v11064;
   word formal←c14488;
   {
   word new←v7208;
   formal←c14488 = (formal←c14488 - 20);
   /* inner: */ 
SOURCE(7845, 123)
SOURCE(7866, 52)
   new←v7208 = (word) Create←P120((* (( (ptr) private←v10980)+1) ), (* (( (ptr) private←v10980)+2) ));
SOURCE(7920, 26)
   (* (( (ptr) (* (( (ptr) formal←c14488)+4) ))+5) ) = (* (( (ptr) new←v7208)+5) );
SOURCE(7948, 20)
   (* (( (ptr) (* (( (ptr) formal←c14488)+4) ))+4) ) = (* (( (ptr) new←v7208)+4) );
   }

static void EnumerateIncreasing←P900(self←v5316, formal←c0300)
   word self←v5316;
   word formal←c0300;
   {
   W7 var←c14520;
   /* declaration of procToApply←v5344 skipped */ 
   /* declaration of var←c13016 skipped */ 
   var←c14520.f4/* procToApply←v5344 */  = formal←c0300;
   /* EnumerateIncreasing: */ 
SOURCE(7999, 461)
   {
      word tmpAddr31;
      tmpAddr31 = (word) (( (ptr) &var←c14520)+5)/* var←c13016 */ ;
      (*  (ptr) tmpAddr31 ) = ( ((word)  (fPt) inner←P1848) );
      (* (( (ptr) tmpAddr31) + 1) ) = 1;
      };
SOURCE(8440, 20)
   (void) DoInner←P60(self←v5316, (word) (( (bPt) &var←c14520)+20)/* var←c13016 */ );
   }

static void inner←P1848(private←v11124, y←v11152, formal←c0301, root←v11208, formal←c14584)
   word private←v11124;
   word y←v11152;
   word formal←c0301;
   word root←v11208;
   word formal←c14584;
   {
   W7 var←c14552;
   /* declaration of z←v11180 skipped */ 
   /* declaration of var←c13048 skipped */ 
   formal←c14584 = (formal←c14584 - 20);
   var←c14552.f4/* z←v11180 */  = formal←c0301;
   var←c14552.f0 = formal←c14584;
   /* inner: */ 
SOURCE(8073, 362)
   {
      word tmpAddr32;
      tmpAddr32 = (word) (( (ptr) &var←c14552)+5)/* var←c13048 */ ;
      (*  (ptr) tmpAddr32 ) = ( ((word)  (fPt) VisitSubtree←P1908) );
      (* (( (ptr) tmpAddr32) + 1) ) = 1;
      };
SOURCE(8357, 45)
   if ((root←v11208 == 0) || ((* (( (ptr) root←v11208)+1) ) == var←c14552.f4/* z←v11180 */ )) {
SOURCE(8396, 6)
      return;
      };
SOURCE(8404, 31)
   {
      word var←c13080;
      var←c13080 = (word) VisitSubtree←P1908((* (( (ptr) root←v11208)+1) ), (word) (( (bPt) &var←c14552)+20)/* var←c13048 */ );
      };
   }

static word VisitSubtree←P1908(node←v7372, formal←c14616)
   word node←v7372;
   word formal←c14616;
   {
   word stop←v7416;
   word link←v7444;
   formal←c14616 = (formal←c14616 - 20);
   /* VisitSubtree: */ 
SOURCE(8094, 258)
SOURCE(8094, 258)
   stop←v7416 = 0;
SOURCE(8159, 25)
   link←v7444 = (*  (ptr) node←v7372 );
SOURCE(8186, 53)
   if ( ( (link←v7444 != (* (( (ptr) formal←c14616)+4) )) ? (0 != (word) VisitSubtree←P1908(link←v7444, (word) (( (bPt) formal←c14616)+20)
      )) : 0 ) ) {
SOURCE(8226, 13)
      return(1);
      };
SOURCE(8241, 44)
   {
      word pd33;
      pd33 = (* (( (ptr) (*  (ptr) formal←c14616 ))+4) );
      if ((0 != (word) ( *( (fPt) ((*  (ptr) pd33 ))))((* ((( (ptr) node←v7372)+3)) ), pd33))) {
SOURCE(8272, 13)
         return(1);
         };
      };
SOURCE(8287, 19)
   link←v7444 = (* (( (ptr) node←v7372)+1) );
SOURCE(8308, 44)
   if ((link←v7444 != (* (( (ptr) formal←c14616)+4) ))) {
SOURCE(8325, 27)
      return((word) VisitSubtree←P1908(link←v7444, (word) (( (bPt) formal←c14616)+20)));
      };
SOURCE(8094, 258)
   return(stop←v7416);
   }

static void EnumerateDecreasing←P960(self←v5404, formal←c0302)
   word self←v5404;
   word formal←c0302;
   {
   W7 var←c14648;
   /* declaration of procToApply←v5432 skipped */ 
   /* declaration of var←c13144 skipped */ 
   var←c14648.f4/* procToApply←v5432 */  = formal←c0302;
   /* EnumerateDecreasing: */ 
SOURCE(8466, 461)
   {
      word tmpAddr34;
      tmpAddr34 = (word) (( (ptr) &var←c14648)+5)/* var←c13144 */ ;
      (*  (ptr) tmpAddr34 ) = ( ((word)  (fPt) inner←P1968) );
      (* (( (ptr) tmpAddr34) + 1) ) = 1;
      };
SOURCE(8907, 20)
   (void) DoInner←P60(self←v5404, (word) (( (bPt) &var←c14648)+20)/* var←c13144 */ );
   }

static void inner←P1968(private←v11268, y←v11296, formal←c0303, root←v11352, formal←c14712)
   word private←v11268;
   word y←v11296;
   word formal←c0303;
   word root←v11352;
   word formal←c14712;
   {
   W7 var←c14680;
   /* declaration of z←v11324 skipped */ 
   /* declaration of var←c13176 skipped */ 
   formal←c14712 = (formal←c14712 - 20);
   var←c14680.f4/* z←v11324 */  = formal←c0303;
   var←c14680.f0 = formal←c14712;
   /* inner: */ 
SOURCE(8540, 362)
   {
      word tmpAddr35;
      tmpAddr35 = (word) (( (ptr) &var←c14680)+5)/* var←c13176 */ ;
      (*  (ptr) tmpAddr35 ) = ( ((word)  (fPt) VisitSubtree←P2028) );
      (* (( (ptr) tmpAddr35) + 1) ) = 1;
      };
SOURCE(8824, 45)
   if ((root←v11352 == 0) || ((* (( (ptr) root←v11352)+1) ) == var←c14680.f4/* z←v11324 */ )) {
SOURCE(8863, 6)
      return;
      };
SOURCE(8871, 31)
   {
      word var←c13208;
      var←c13208 = (word) VisitSubtree←P2028((* (( (ptr) root←v11352)+1) ), (word) (( (bPt) &var←c14680)+20)/* var←c13176 */ );
      };
   }

static word VisitSubtree←P2028(node←v7608, formal←c14744)
   word node←v7608;
   word formal←c14744;
   {
   word stop←v7652;
   word link←v7680;
   formal←c14744 = (formal←c14744 - 20);
   /* VisitSubtree: */ 
SOURCE(8561, 258)
SOURCE(8561, 258)
   stop←v7652 = 0;
SOURCE(8626, 25)
   link←v7680 = (* (( (ptr) node←v7608)+1) );
SOURCE(8653, 53)
   if ( ( (link←v7680 != (* (( (ptr) formal←c14744)+4) )) ? (0 != (word) VisitSubtree←P2028(link←v7680, (word) (( (bPt) formal←c14744)+20)
      )) : 0 ) ) {
SOURCE(8693, 13)
      return(1);
      };
SOURCE(8708, 44)
   {
      word pd36;
      pd36 = (* (( (ptr) (*  (ptr) formal←c14744 ))+4) );
      if ((0 != (word) ( *( (fPt) ((*  (ptr) pd36 ))))((* ((( (ptr) node←v7608)+3)) ), pd36))) {
SOURCE(8739, 13)
         return(1);
         };
      };
SOURCE(8754, 19)
   link←v7680 = (*  (ptr) node←v7608 );
SOURCE(8775, 44)
   if ((link←v7680 != (* (( (ptr) formal←c14744)+4) ))) {
SOURCE(8792, 27)
      return((word) VisitSubtree←P2028(link←v7680, (word) (( (bPt) formal←c14744)+20)));
      };
SOURCE(8561, 258)
   return(stop←v7652);
   }

static void CheckTable←P1020(self←v5492)
   word self←v5492;
   {
   W6 var←c14776;
   /* declaration of var←c13272 skipped */ 
   /* CheckTable: */ 
SOURCE(8933, 919)
   {
      word tmpAddr37;
      tmpAddr37 = (word) (( (ptr) &var←c14776)+4)/* var←c13272 */ ;
      (*  (ptr) tmpAddr37 ) = ( ((word)  (fPt) inner←P2088) );
      (* (( (ptr) tmpAddr37) + 1) ) = 1;
      };
SOURCE(9832, 20)
   (void) DoInner←P60(self←v5492, (word) (( (bPt) &var←c14776)+16)/* var←c13272 */ );
   }

static void inner←P2088(formal←c0304, y←v11440, formal←c0305, root←v11496, formal←c14840)
   word formal←c0304;
   word y←v11440;
   word formal←c0305;
   word root←v11496;
   word formal←c14840;
   {
   W11 var←c14808;
   /* declaration of private←v11412 skipped */ 
   /* declaration of z←v11468 skipped */ 
   /* declaration of var←c13304 skipped */ 
   /* declaration of var←c13336 skipped */ 
   /* declaration of count←v7824 skipped */ 
   formal←c14840 = (formal←c14840 - 16);
   (* (( (ptr) &var←c14808)+4)/* private←v11412 */  ) = formal←c0304;
   (* (( (ptr) &var←c14808)+5)/* z←v11468 */  ) = formal←c0305;
   (*  (ptr) &var←c14808 ) = formal←c14840;
   /* inner: */ 
SOURCE(8976, 848)
   {
      word tmpAddr38;
      tmpAddr38 = (word) (( (ptr) &var←c14808)+6)/* var←c13304 */ ;
      (*  (ptr) tmpAddr38 ) = ( ((word)  (fPt) Check1←P2208) );
      (* (( (ptr) tmpAddr38) + 1) ) = 1;
      };
   {
      word tmpAddr39;
      tmpAddr39 = (word) (( (ptr) &var←c14808)+8)/* var←c13336 */ ;
      (*  (ptr) tmpAddr39 ) = ( ((word)  (fPt) Assert←P2148) );
      (* (( (ptr) tmpAddr39) + 1) ) = 1;
      };
SOURCE(9584, 14)
   (* (( (ptr) &var←c14808)+10)/* count←v7824 */  ) = 0;
SOURCE(9600, 19)
   (void) Assert←P2148(((*  (ptr) (* (( (ptr) &var←c14808)+5)/* z←v11468 */  ) ) == y←v11440), (word) (( (bPt) &var←c14808)+32)
      /* var←c13336 */ );
SOURCE(9621, 19)
   (void) Assert←P2148(((* (( (ptr) (* (( (ptr) &var←c14808)+5)/* z←v11468 */  ))+1) ) == y←v11440), (word) (( (bPt) &var←c14808)+32)
      /* var←c13336 */ );
SOURCE(9643, 181)
   if (((* (( (ptr) root←v11496)+1) ) != (* (( (ptr) &var←c14808)+5)/* z←v11468 */  ))) {
SOURCE(9668, 158)
      {
         word smallest←v8116;
SOURCE(9670, 29)
         smallest←v8116 = (* (( (ptr) root←v11496)+1) );
SOURCE(9701, 65)
         lab←L100042: ;
         if (((*  (ptr) smallest←v8116 ) != (* (( (ptr) &var←c14808)+5)/* z←v11468 */  ))) {
            }
         else {
            goto lab←L100040;
            };
SOURCE(9731, 35)
         smallest←v8116 = (*  (ptr) smallest←v8116 );
         goto lab←L100042;
         lab←L100040: ;
SOURCE(9768, 56)
         {
            W3 var←c13400;
            {
               word var←c13368;
               {
                  word pd40;
                  pd40 = (* (( (ptr) (* (( (ptr) &var←c14808)+4)/* private←v11412 */  ))+1) );
                  var←c13368 = (word) ( *( (fPt) ((*  (ptr) pd40 ))))((* ((( (ptr) smallest←v8116)+3)) ), pd40);
                  };
               (void) Check1←P2208((word) &var←c13400, (* (( (ptr) root←v11496)+1) ), var←c13368, (word) (( (bPt) &var←c14808)+24)/* var←c13304 */ )
               ;
               };
            };
         };
      };
   }

static void Assert←P2148(p←v7900, formal←c14904)
   word p←v7900;
   word formal←c14904;
   {
   register ptr gf←c14872 =  (ptr) &globalframe;
   formal←c14904 = (formal←c14904 - 32);
   /* Assert: */ 
SOURCE(8997, 55)
SOURCE(9023, 29)
   if ((0 == p←v7900)) {
SOURCE(9037, 15)
      (void) XR←RaiseError((word) (( (bPt) gf←c14872)+36), 0);
      };
   }

static void Check1←P2208(formal←c0214, x←v7960, maxKey←v7988, formal←c14936)
   word formal←c0214;
   word x←v7960;
   word maxKey←v7988;
   word formal←c14936;
   {
   word var←c8032;
   word var←c8060;
   word var←c8088;
   word dl←v8160;
   word dr←v8188;
   word redChild←v8216;
   formal←c14936 = (formal←c14936 - 24);
   /* Check1: */ 
SOURCE(9055, 524)
SOURCE(9157, 39)
   if ((x←v7960 == (* (( (ptr) formal←c14936)+5) ))) {
SOURCE(9171, 25)
      var←c8032 = maxKey←v7988;
      var←c8060 = 0;
      var←c8088 = 0;
      goto lab←L100043;
      };
SOURCE(9198, 50)
   {
      W3 var←c13432;
      (void) Check1←P2208((word) &var←c13432, (*  (ptr) x←v7960 ), maxKey←v7988, (word) (( (bPt) formal←c14936)+24));
      redChild←v8216 = var←c13432.f2;
      dl←v8160 = var←c13432.f1;
      maxKey←v7988 = var←c13432.f0;
      };
SOURCE(9250, 39)
   (void) Assert←P2148( ( (0 == redChild←v8216) ? 1 : ((* (( (ptr) x←v7960)+2) ) != 1) ) , (word) (( (bPt) formal←c14936)+32)
      );
SOURCE(9291, 74)
   {
      word var←c13464;
      {
         word pd41;
         pd41 = (* (( (ptr) (* (( (ptr) formal←c14936)+4) ))+2) );
         var←c13464 = ((word) ( *( (fPt) ((*  (ptr) pd41 ))))(maxKey←v7988, (* (( (ptr) x←v7960)+3) ), pd41) ==  ( ( (int)(* (( (ptr) formal←c14936)+10)
          ) ==  (int)0) ? 1 : 0 ) );
         };
      (void) Assert←P2148(var←c13464, (word) (( (bPt) formal←c14936)+32));
      };
SOURCE(9367, 17)
   (* (( (ptr) formal←c14936)+10) ) = ((* (( (ptr) formal←c14936)+10) ) + 1);
SOURCE(9386, 66)
   {
      W3 var←c13528;
      {
         word var←c13496;
         {
            word pd42;
            pd42 = (* (( (ptr) (* (( (ptr) formal←c14936)+4) ))+1) );
            var←c13496 = (word) ( *( (fPt) ((*  (ptr) pd42 ))))((* ((( (ptr) x←v7960)+3)) ), pd42);
            };
         (void) Check1←P2208((word) &var←c13528, (* (( (ptr) x←v7960)+1) ), var←c13496, (word) (( (bPt) formal←c14936)+24));
         };
      redChild←v8216 = var←c13528.f2;
      dr←v8188 = var←c13528.f1;
      maxKey←v7988 = var←c13528.f0;
      };
SOURCE(9454, 39)
   (void) Assert←P2148( ( (0 == redChild←v8216) ? 1 : ((* (( (ptr) x←v7960)+2) ) != 1) ) , (word) (( (bPt) formal←c14936)+32)
      );
SOURCE(9495, 13)
   (void) Assert←P2148(( (int)dl←v8160 ==  (int)dr←v8188), (word) (( (bPt) formal←c14936)+32));
SOURCE(9510, 69)
   {
      word var←c13560;
      var←c13560 = (dl←v8160 +  ( ((* (( (ptr) x←v7960)+2) ) == 0) ? 1 : 0 ) );
      var←c8088 = ((* (( (ptr) x←v7960)+2) ) == 1);
      var←c8032 = maxKey←v7988;
      var←c8060 = var←c13560;
      /* removed tail goto */ 
      };
   lab←L100043: ;
   (*  (ptr) formal←c0214 ) = var←c8032;
   (* (( (ptr) formal←c0214)+1) ) = var←c8060;
   (* (( (ptr) formal←c0214)+2) ) = var←c8088;
   return;
   }

static word Balance←P1080(gg←v5552, g←v5580, f←v5608, x←v5636)
   word gg←v5552;
   word g←v5580;
   word f←v5608;
   word x←v5636;
   {
   word var←c5680;
   word t←v8260 = 0;
   word tc←v8288;
   /* Balance: */ 
SOURCE(9859, 520)
SOURCE(9936, 196)
   if ((f←v5608 == (*  (ptr) g←v5580 ))) {
SOURCE(9958, 80)
      if ((x←v5636 == (* (( (ptr) f←v5608)+1) ))) {
SOURCE(9980, 21)
         (* (( (ptr) f←v5608)+1) ) = (*  (ptr) x←v5636 );
SOURCE(10004, 13)
         (*  (ptr) x←v5636 ) = f←v5608;
SOURCE(10019, 5)
         t←v8260 = f←v5608;
SOURCE(10026, 5)
         f←v5608 = x←v5636;
SOURCE(10033, 5)
         x←v5636 = t←v8260;
         };
      }
   else {
SOURCE(10052, 80)
      if ((x←v5636 == (*  (ptr) f←v5608 ))) {
SOURCE(10074, 21)
         (*  (ptr) f←v5608 ) = (* (( (ptr) x←v5636)+1) );
SOURCE(10098, 13)
         (* (( (ptr) x←v5636)+1) ) = f←v5608;
SOURCE(10113, 5)
         t←v8260 = f←v5608;
SOURCE(10120, 5)
         f←v5608 = x←v5636;
SOURCE(10127, 5)
         x←v5636 = t←v8260;
         };
      };
SOURCE(10140, 107)
   if ((x←v5636 == (*  (ptr) f←v5608 ))) {
SOURCE(10162, 21)
      (*  (ptr) g←v5580 ) = (* (( (ptr) f←v5608)+1) );
SOURCE(10186, 13)
      (* (( (ptr) f←v5608)+1) ) = g←v5580;
      }
   else {
SOURCE(10210, 21)
      (* (( (ptr) g←v5580)+1) ) = (*  (ptr) f←v5608 );
SOURCE(10234, 13)
      (*  (ptr) f←v5608 ) = g←v5580;
      };
SOURCE(10252, 57)
   if ((g←v5580 == (* (( (ptr) gg←v5552)+1) ))) {
SOURCE(10275, 20)
      (* (( (ptr) gg←v5552)+1) ) = f←v5608;
      }
   else {
SOURCE(10295, 14)
      (*  (ptr) gg←v5552 ) = f←v5608;
      };
SOURCE(10311, 14)
   tc←v8288 = (* (( (ptr) g←v5580)+2) );
SOURCE(10328, 21)
   (* (( (ptr) g←v5580)+2) ) = (* (( (ptr) f←v5608)+2) );
SOURCE(10352, 14)
   (* (( (ptr) f←v5608)+2) ) = tc←v8288;
SOURCE(10368, 11)
   return(f←v5608);
   }

static void NoName←Q2436(formal←c0226, formal←c200000, formal←c200001, formal←c200002, formal←c200003)
   word formal←c0226;
   word formal←c200000;
   word formal←c200001;
   word formal←c200002;
   word formal←c200003;
   {
   if ((formal←c200001 == XR←Unwind)) {
      (void) (XR←MonitorExit(* (( (ptr) formal←c200000)+4) ));
      };
   (*  (ptr) formal←c0226 ) = 0;
   (* (( (ptr) formal←c0226)+1) ) = 0;
   return;
   }

/* file: RedBlackTreeImpl, module: RedBlackTreeImpl, compiled at: February 21, 1992 11:09:50 pm PST */ 
extern void XR←install←RedBlackTreeImpl() {
   NoName←Q2316();
   }
extern void XR←run←RedBlackTreeImpl() { XR←Start(&globalframe); }