{ parameter (or (or int int) unit) ;
  storage int ;
  code { DUP ;
         CAR ;
         DIP { DUP } ;
         SWAP ;
         CDR ;
         DIP { DUP } ;
         SWAP ;
         IF_LEFT
           { DUP ;
             IF_LEFT
               { DUP ;
                 DIP { DIP { DIP { DUP } ; SWAP } ; SWAP } ;
                 SWAP ;
                 DIP { DUP } ;
                 SUB ;
                 SWAP ;
                 DROP ;
                 SWAP ;
                 DROP }
               { DUP ;
                 DIP { DIP { DIP { DUP } ; SWAP } ; SWAP } ;
                 SWAP ;
                 DIP { DUP } ;
                 ADD ;
                 SWAP ;
                 DROP ;
                 SWAP ;
                 DROP } ;
             SWAP ;
             DROP }
           { DROP ; PUSH int 0 } ;
         NIL operation ;
         PAIR ;
         SWAP ;
         DROP ;
         SWAP ;
         DROP ;
         SWAP ;
         DROP } }