

#include "BUILTIN.h"

#include "Nat.h"
extern OBJ __ASeq_6;
extern OBJ _ASeq_23(OBJ,OBJ);extern OBJ __ASeq_23;
extern OBJ _AISeq_3(OBJ);OBJ __AISeq_3; /* gen */
extern OBJ _AISeq_4(OBJ);OBJ __AISeq_4; /* repeat */
extern OBJ _AISeq_5(OBJ,OBJ);OBJ __AISeq_5; /* :: */
extern OBJ _AISeq_6(OBJ,OBJ);OBJ __AISeq_6; /* cons */
extern OBJ _AISeq_7(OBJ,OBJ);OBJ __AISeq_7; /* +% */
extern OBJ _AISeq_8(OBJ,OBJ);OBJ __AISeq_8; /* .. */
extern OBJ _AISeq_9(OBJ,OBJ);OBJ __AISeq_9; /* iter */
extern OBJ _AISeq_10(OBJ,OBJ);OBJ __AISeq_10; /* ++ */
extern OBJ _AISeq_11(OBJ,OBJ);OBJ __AISeq_11; /* ++,1 */
extern OBJ _AISeq_12(OBJ,OBJ,OBJ);OBJ __AISeq_12; /* +/+ */
extern OBJ _AISeq_13(OBJ,OBJ,OBJ);OBJ __AISeq_13; /* +/+,1 */
extern OBJ _AISeq_14(OBJ,OBJ,OBJ);OBJ __AISeq_14; /* +%+ */
extern OBJ _AISeq_15(OBJ,OBJ,OBJ);OBJ __AISeq_15; /* +%+,1 */
extern OBJ _AISeq_16(OBJ,OBJ);OBJ __AISeq_16; /* take */
extern OBJ _AISeq_17(OBJ,OBJ);OBJ __AISeq_17; /* drop */
extern TUP2 _AISeq_18(OBJ,OBJ);OBJ __AISeq_18; /* split */
extern OBJ _AISeq_19(OBJ);OBJ __AISeq_19; /* rt */
extern OBJ _AISeq_20(OBJ);OBJ __AISeq_20; /* ft */
extern OBJ _AISeq_21(OBJ,OBJ);OBJ __AISeq_21; /* find? */
extern OBJ _AISeq_22(OBJ,OBJ);OBJ __AISeq_22; /* find?,1 */
extern OBJ _AISeq_23(OBJ,OBJ);OBJ __AISeq_23; /* ::,1 */
extern OBJ _AISeq_25(OBJ);OBJ __AISeq_25; /* ::? */
extern OBJ _AISeq_26(OBJ);OBJ __AISeq_26; /* rt,1 */
extern OBJ _AISeq_27(OBJ);OBJ __AISeq_27; /* ft,1 */
extern OBJ _AISeq_28(OBJ,OBJ);OBJ __AISeq_28; /* gen'28 */
extern OBJ _AISeq_29(OBJ,OBJ);OBJ __AISeq_29; /* gen'29 */
extern OBJ _AISeq_30(OBJ,OBJ);OBJ __AISeq_30; /* repeat'30 */
extern OBJ _AISeq_31(OBJ,OBJ,OBJ);OBJ __AISeq_31; /* repeat'31 */
extern OBJ _AISeq_32(OBJ,OBJ);OBJ __AISeq_32; /* ::'32 */
extern OBJ _AISeq_33(OBJ,OBJ);OBJ __AISeq_33; /* ::'33 */
extern OBJ _AISeq_34(OBJ,OBJ,OBJ);OBJ __AISeq_34; /* ..'34 */
extern OBJ _AISeq_35(OBJ,OBJ,OBJ);OBJ __AISeq_35; /* ..'35 */
extern OBJ _AISeq_36(OBJ,OBJ);OBJ __AISeq_36; /* iter'36 */
extern OBJ _AISeq_37(OBJ,OBJ,OBJ);OBJ __AISeq_37; /* iter'37 */
extern OBJ _AISeq_38(OBJ,OBJ);OBJ __AISeq_38; /* ++'38 */
extern OBJ _AISeq_39(OBJ,OBJ,OBJ);OBJ __AISeq_39; /* ++'39 */

extern OBJ _AISeq_3(OBJ x1) /* gen */
{OBJ r;
 CPCLS(__AISeq_28,1);
 CPCLS(__AISeq_29,1);
 COPY(x1,1);
 {OBJ x2;OBJ x3;
  x2=(*(OBJ(*)(OBJ,OBJ))METHOD(__AISeq_28,1))(__AISeq_28,x1);
  x3=(*(OBJ(*)(OBJ,OBJ))METHOD(__AISeq_29,1))(__AISeq_29,x1);
  PRD1(2,r);FLD1(r,1)=x2;FLD1(r,2)=x3;}
 return r;}

extern OBJ _AISeq_4(OBJ x1) /* repeat */
{OBJ r;
 if(ISPRM(x1)){
  HLT("repeat\'ISeq: cannot repeat empty sequence");
 }else{
  {OBJ x21=FLD1(x1,1);OBJ x22=FLD1(x1,2);
   if(EXPRD(x1,1)){
    COPY(x21,1);
    CPCLS(__AISeq_30,1);
    CPCLS(__AISeq_31,1);
    {OBJ x24;OBJ x25;
     x24=(*(OBJ(*)(OBJ,OBJ))METHOD(__AISeq_30,1))(__AISeq_30,x21);
     x25=(*(OBJ(*)(OBJ,OBJ,OBJ))METHOD(__AISeq_31,2))(__AISeq_31,x21,x22);
     RSOME(x1,r);FLD1(r,1)=x24;FLD1(r,2)=x25;}
   }else{
    COPY(x21,2);COPY(x22,1);
    CPCLS(__AISeq_30,1);
    CPCLS(__AISeq_31,1);
    {OBJ x24;OBJ x25;
     x24=(*(OBJ(*)(OBJ,OBJ))METHOD(__AISeq_30,1))(__AISeq_30,x21);
     x25=(*(OBJ(*)(OBJ,OBJ,OBJ))METHOD(__AISeq_31,2))(__AISeq_31,x21,x22);
     FRPRD(x1,1);PRD1(2,r);FLD1(r,1)=x24;FLD1(r,2)=x25;}}}}
 return r;}

extern OBJ _AISeq_5(OBJ x1,OBJ x2) /* :: */
{OBJ r;
 CPCLS(__AISeq_32,1);
 CPCLS(__AISeq_33,1);
 {OBJ x3;OBJ x4;
  x3=(*(OBJ(*)(OBJ,OBJ))METHOD(__AISeq_32,1))(__AISeq_32,x1);
  x4=(*(OBJ(*)(OBJ,OBJ))METHOD(__AISeq_33,1))(__AISeq_33,x2);
  PRD1(2,r);FLD1(r,1)=x3;FLD1(r,2)=x4;}
 return r;}

extern OBJ _AISeq_6(OBJ x1,OBJ x2) /* cons */
{OBJ r;
 r=_AISeq_5(x1,x2);
 return r;}

extern OBJ _AISeq_7(OBJ x1,OBJ x2) /* +% */
{OBJ r;
 FREE(x2,1);
 r=x1;
 return r;}

extern OBJ _AISeq_8(OBJ x1,OBJ x2) /* .. */
{OBJ r;
 CPCLS(__AISeq_34,1);
 CPCLS(__AISeq_35,1);
 CPCLS(x2,1);
 {OBJ x3;OBJ x4;
  x3=(*(OBJ(*)(OBJ,OBJ,OBJ))METHOD(__AISeq_34,2))(__AISeq_34,x1,x2);
  x4=(*(OBJ(*)(OBJ,OBJ,OBJ))METHOD(__AISeq_35,2))(__AISeq_35,x1,x2);
  PRD1(2,r);FLD1(r,1)=x3;FLD1(r,2)=x4;}
 return r;}

extern OBJ _AISeq_9(OBJ x1,OBJ x2) /* iter */
{OBJ r;
 CPCLS(__AISeq_36,1);
 CPCLS(__AISeq_37,1);
 COPY(x1,1);
 {OBJ x3;OBJ x4;
  x3=(*(OBJ(*)(OBJ,OBJ))METHOD(__AISeq_36,1))(__AISeq_36,x1);
  x4=(*(OBJ(*)(OBJ,OBJ,OBJ))METHOD(__AISeq_37,2))(__AISeq_37,x1,x2);
  PRD1(2,r);FLD1(r,1)=x3;FLD1(r,2)=x4;}
 return r;}

extern OBJ _AISeq_10(OBJ x1,OBJ x2) /* ++ */
{OBJ r;
 if(ISPRM(x1)){
  r=x2;
 }else{
  {OBJ x22=FLD1(x1,1);OBJ x23=FLD1(x1,2);
   if(EXPRD(x1,1)){
    CPCLS(__AISeq_38,1);
    CPCLS(__AISeq_39,1);
    {OBJ x25;OBJ x26;
     x25=(*(OBJ(*)(OBJ,OBJ))METHOD(__AISeq_38,1))(__AISeq_38,x22);
     x26=(*(OBJ(*)(OBJ,OBJ,OBJ))METHOD(__AISeq_39,2))(__AISeq_39,x2,x23);
     RSOME(x1,r);FLD1(r,1)=x25;FLD1(r,2)=x26;}
   }else{
    COPY(x22,1);COPY(x23,1);
    CPCLS(__AISeq_38,1);
    CPCLS(__AISeq_39,1);
    {OBJ x25;OBJ x26;
     x25=(*(OBJ(*)(OBJ,OBJ))METHOD(__AISeq_38,1))(__AISeq_38,x22);
     x26=(*(OBJ(*)(OBJ,OBJ,OBJ))METHOD(__AISeq_39,2))(__AISeq_39,x2,x23);
     FRPRD(x1,1);PRD1(2,r);FLD1(r,1)=x25;FLD1(r,2)=x26;}}}}
 return r;}

extern OBJ _AISeq_11(OBJ x1,OBJ x2) /* ++,1 */
{OBJ r;
 FRPRD(x2,1);
 r=x1;
 return r;}

extern OBJ _AISeq_12(OBJ x1,OBJ x2,OBJ x3) /* +/+ */
{OBJ r;
 if(ISPRM(x2)){
  FREE(x1,1);
  r=x3;
 }else{
  {OBJ x10;
   x10=_AISeq_5(x1,x3);
   r=_AISeq_10(x2,x10);}}
 return r;}

extern OBJ _AISeq_13(OBJ x1,OBJ x2,OBJ x3) /* +/+,1 */
{OBJ r;
 if(ISPRM(x2)){
  FREE(x1,1);
  r=x3;
 }else{
  {OBJ x10;
   x10=_AISeq_10(x1,x3);
   r=_AISeq_10(x2,x10);}}
 return r;}

extern OBJ _AISeq_14(OBJ x1,OBJ x2,OBJ x3) /* +%+ */
{OBJ r;
 {OBJ x4;
  x4=_AISeq_5(x1,x3);
  r=_AISeq_10(x2,x4);}
 return r;}

extern OBJ _AISeq_15(OBJ x1,OBJ x2,OBJ x3) /* +%+,1 */
{OBJ r;
 {OBJ x4;
  x4=_AISeq_10(x1,x3);
  r=_AISeq_10(x2,x4);}
 return r;}

extern OBJ _AISeq_16(register OBJ x1,register OBJ x2) /* take */
{OBJ r;OBJ* p1=&r;
 for(;;){
  {OBJ x3;
   ANat_6(x1,x3);
   if(ISTGPRM(x3,1)){
    FRPRD(x2,1);
    *p1=__ASeq_6;
   }else{
    {OBJ x4;
     ANat_3(x1,x4);
     if(ISTGPRM(x4,1)){
      CPPRD(x2,1);
      CPCLS(__AISeq_26,1);
      CPCLS(__AISeq_27,1);
      {OBJ x5;OBJ x6;OBJ x7;
       ANat_4(x1,x5);
       x6=(*(OBJ(*)(OBJ,OBJ,OBJ))METHOD(__AISeq_27,2))(__AISeq_27,x2,__ABUILTIN_20);
       x7=(*(OBJ(*)(OBJ,OBJ,OBJ))METHOD(__AISeq_26,2))(__AISeq_26,x2,__ABUILTIN_20);
       PRD1(2,*p1);FLD1(*p1,1)=x6;
       x1=x5;x2=x7;p1=&FLD1(*p1,2);continue;}
     }else{
      HLT("ISeq at <unknown> : missing else in take\'ISeq:nat**iseq->seq");}}}}
  break;}
 return r;}

extern OBJ _AISeq_17(register OBJ x1,register OBJ x2) /* drop */
{OBJ r;
 for(;;){
  {OBJ x3;
   ANat_6(x1,x3);
   if(ISTGPRM(x3,1)){
    r=x2;
   }else{
    {OBJ x4;
     ANat_3(x1,x4);
     if(ISTGPRM(x4,1)){
      CPCLS(__AISeq_26,1);
      {OBJ x5;OBJ x6;
       ANat_4(x1,x5);
       x6=(*(OBJ(*)(OBJ,OBJ,OBJ))METHOD(__AISeq_26,2))(__AISeq_26,x2,__ABUILTIN_20);
       x1=x5;x2=x6;continue;}
     }else{
      HLT("ISeq at <unknown> : missing else in drop\'ISeq:nat**iseq->iseq");}}}}
  break;}
 return r;}

extern TUP2 _AISeq_18(OBJ x1,OBJ x2) /* split */
{TUP2 r;
 CPPRD(x2,1);
 r.c1=_AISeq_16(x1,x2);
 r.c2=_AISeq_17(x1,x2);
 return r;}
extern OBJ _AISeq_18_c(OBJ x1,OBJ x2) /* split */
{OBJ r;
 {TUP2 t=_AISeq_18(x1,x2);
  PRD1(2,r);
  FLD1(r,1)=t.c1;
  FLD1(r,2)=t.c2;}
 return r;}

extern OBJ _AISeq_19(OBJ x1) /* rt */
{OBJ r;
 CPCLS(__AISeq_26,1);
 r=(*(OBJ(*)(OBJ,OBJ,OBJ))METHOD(__AISeq_26,2))(__AISeq_26,x1,__ABUILTIN_20);
 return r;}

extern OBJ _AISeq_20(OBJ x1) /* ft */
{OBJ r;
 CPCLS(__AISeq_27,1);
 r=(*(OBJ(*)(OBJ,OBJ,OBJ))METHOD(__AISeq_27,2))(__AISeq_27,x1,__ABUILTIN_20);
 return r;}

extern OBJ _AISeq_21(register OBJ x1,register OBJ x2) /* find? */
{OBJ r;
 for(;;){
  CPCLS(__AISeq_27,1);
  CPCLS(x1,1);
  CPPRD(x2,1);
  {OBJ x3;OBJ x4;
   x3=(*(OBJ(*)(OBJ,OBJ,OBJ))METHOD(__AISeq_27,2))(__AISeq_27,x2,__ABUILTIN_20);
   COPY(x3,1);
   x4=(*(OBJ(*)(OBJ,OBJ))METHOD(x1,1))(x1,x3);
   if(ISTGPRM(x4,1)){
    r=x3;
    FRCLS(x1,1);
    FRPRD(x2,1);
   }else{
    FREE(x3,1);
    CPCLS(__AISeq_26,1);
    {OBJ x5;
     x5=(*(OBJ(*)(OBJ,OBJ,OBJ))METHOD(__AISeq_26,2))(__AISeq_26,x2,__ABUILTIN_20);
     x2=x5;continue;}}}
  break;}
 return r;}

extern OBJ _AISeq_22(OBJ x1,OBJ x2) /* find?,1 */
{OBJ r;
 {
  PRD1(1,r);
  FLD1(r,1)=_AISeq_21(x1,x2);}
 return r;}

extern OBJ _AISeq_23(OBJ x1,OBJ x2) /* ::,1 */
{OBJ r;
 PRD1(2,r);FLD1(r,1)=x1;FLD1(r,2)=x2;
 return r;}

extern OBJ _AISeq_25(OBJ x1) /* ::? */
{OBJ r;
 FRPRD(x1,1);
 r=__ABUILTIN_5;
 return r;}

extern OBJ _AISeq_26(OBJ x1) /* rt,1 */
{OBJ r;
 {OBJ x3=FLD1(x1,2);
  if(EXPRD(x1,1)){
   r=x3;
   FRCLS(FLD1(x1,1),1);DSPRDF(x1);
  }else{
   CPCLS(x3,1);
   r=x3;
   FRPRD(x1,1);}}
 return r;}

extern OBJ _AISeq_27(OBJ x1) /* ft,1 */
{OBJ r;
 {OBJ x2=FLD1(x1,1);
  if(EXPRD(x1,1)){
   r=x2;
   FRCLS(FLD1(x1,2),1);DSPRDF(x1);
  }else{
   CPCLS(x2,1);
   r=x2;
   FRPRD(x1,1);}}
 return r;}

extern OBJ _AISeq_28(OBJ x1,OBJ x2) /* gen'28 */
{OBJ r;
 r=x1;
 return r;}

extern OBJ _AISeq_29(OBJ x1,OBJ x2) /* gen'29 */
{OBJ r;
 r=_AISeq_3(x1);
 return r;}

extern OBJ _AISeq_30(OBJ x1,OBJ x2) /* repeat'30 */
{OBJ r;
 r=x1;
 return r;}

extern OBJ _AISeq_31(OBJ x1,OBJ x2,OBJ x3) /* repeat'31 */
{OBJ r;
 {OBJ x4;
  x4=_ASeq_23(x2,x1);
  r=_AISeq_4(x4);}
 return r;}

extern OBJ _AISeq_32(OBJ x1,OBJ x2) /* ::'32 */
{OBJ r;
 r=x1;
 return r;}

extern OBJ _AISeq_33(OBJ x1,OBJ x2) /* ::'33 */
{OBJ r;
 r=x1;
 return r;}

extern OBJ _AISeq_34(OBJ x1,OBJ x2,OBJ x3) /* ..'34 */
{OBJ r;
 r=(*(OBJ(*)(OBJ,OBJ))METHOD(x2,1))(x2,x1);
 return r;}

extern OBJ _AISeq_35(OBJ x1,OBJ x2,OBJ x3) /* ..'35 */
{OBJ r;
 {OBJ x4;
  ANat_2(x1,x4);
  r=_AISeq_8(x4,x2);}
 return r;}

extern OBJ _AISeq_36(OBJ x1,OBJ x2) /* iter'36 */
{OBJ r;
 r=x1;
 return r;}

extern OBJ _AISeq_37(OBJ x1,OBJ x2,OBJ x3) /* iter'37 */
{OBJ r;
 CPCLS(x2,1);
 {OBJ x4;
  x4=(*(OBJ(*)(OBJ,OBJ))METHOD(x2,1))(x2,x1);
  r=_AISeq_9(x4,x2);}
 return r;}

extern OBJ _AISeq_38(OBJ x1,OBJ x2) /* ++'38 */
{OBJ r;
 r=x1;
 return r;}

extern OBJ _AISeq_39(OBJ x1,OBJ x2,OBJ x3) /* ++'39 */
{OBJ r;
 r=_AISeq_10(x2,x1);
 return r;}

static OBJ _mt_1_0_2(OBJ t,OBJ t1,OBJ t2) 
{OBJ r;
 {OBJ t3;
  DCCLS(t,1);
  t3=(*(OBJ(*)(OBJ))ENTRY(t))(t1);
  r=(*(OBJ(*)(OBJ,OBJ))METHOD(t3,1))(t3,t2);}
 return r;}

init_AISeq()
{
 static int visited=0; if(visited) return; visited=1;
 init_ANat();
 init_AOption();
 init_ASeq();
 LCLS(3,_AISeq_31,__AISeq_31);
 LCLS(2,_AISeq_30,__AISeq_30);
 LCLS(2,_AISeq_29,__AISeq_29);
 LCLS(2,_AISeq_28,__AISeq_28);
 CLS(1,_AISeq_27,__AISeq_27);
 CLS(1,_AISeq_26,__AISeq_26);
 CLS(1,_AISeq_25,__AISeq_25);
 CLS(2,_AISeq_23,__AISeq_23);
 CLS(2,_AISeq_22,__AISeq_22);
 CLS(2,_AISeq_21,__AISeq_21);
 CLS(1,_AISeq_20,__AISeq_20);
 CLS(1,_AISeq_19,__AISeq_19);
 CLS(2,_AISeq_18_c,__AISeq_18);
 CLS(2,_AISeq_17,__AISeq_17);
 CLS(2,_AISeq_16,__AISeq_16);
 CLS(3,_AISeq_15,__AISeq_15);
 CLS(3,_AISeq_14,__AISeq_14);
 CLS(3,_AISeq_13,__AISeq_13);
 CLS(3,_AISeq_12,__AISeq_12);
 CLS(2,_AISeq_11,__AISeq_11);
 CLS(2,_AISeq_10,__AISeq_10);
 CLS(2,_AISeq_9,__AISeq_9);
 CLS(2,_AISeq_8,__AISeq_8);
 LCLS(3,_AISeq_39,__AISeq_39);
 CLS(2,_AISeq_7,__AISeq_7);
 LCLS(2,_AISeq_38,__AISeq_38);
 CLS(2,_AISeq_6,__AISeq_6);
 LCLS(3,_AISeq_37,__AISeq_37);
 CLS(2,_AISeq_5,__AISeq_5);
 LCLS(2,_AISeq_36,__AISeq_36);
 CLS(1,_AISeq_4,__AISeq_4);
 LCLS(3,_AISeq_35,__AISeq_35);
 CLS(1,_AISeq_3,__AISeq_3);
 LCLS(3,_AISeq_34,__AISeq_34);
 LCLS(2,_AISeq_33,__AISeq_33);
 LCLS(2,_AISeq_32,__AISeq_32);
 MTH(1,0,2,_mt_1_0_2);LZYMTH(1,0,2,_mt_1_0_2);}

