
(/VERSIONCHECK 2) 

(DEFUN |MULTFACT;factor;PF;1| (|p| $)
  (SEQ (COND
         ((|domainEqual| (QREFELT $ 8) (|Fraction| (|Integer|)))
          (SPADCALL |p| (QREFELT $ 12)))
         ((|domainEqual| (QREFELT $ 8)
              (|Fraction| (|Complex| (|Integer|))))
          (SPADCALL |p| (QREFELT $ 14)))
         ('T
          (SEQ (COND
                 ((|domainEqual| (QREFELT $ 8)
                      (|Fraction| (|Polynomial| (|Integer|))))
                  (COND
                    ((|HasSignature| (QREFELT $ 6)
                         (LIST '|convert| (LIST '(|Symbol|) '$)))
                     (EXIT (SPADCALL |p| (QREFELT $ 16)))))))
               (EXIT (SPADCALL |p| (ELT $ 20) (QREFELT $ 23)))))))) 

(DEFUN |MULTFACT;factor;SupF;2| (|up| $)
  (SPADCALL |up| (ELT $ 20) (QREFELT $ 27))) 

(DEFUN |MultivariateFactorize| (&REST #0=#:G1820)
  (PROG ()
    (RETURN
      (PROG (#1=#:G1821)
        (RETURN
          (COND
            ((LETT #1#
                   (|lassocShiftWithFunction| (|devaluateList| #0#)
                       (HGET |$ConstructorCache|
                             '|MultivariateFactorize|)
                       '|domainEqualList|)
                   . #2=(|MultivariateFactorize|))
             (|CDRwithIncrement| #1#))
            ('T
             (UNWIND-PROTECT
               (PROG1 (APPLY (|function| |MultivariateFactorize;|) #0#)
                 (LETT #1# T . #2#))
               (COND
                 ((NOT #1#)
                  (HREM |$ConstructorCache| '|MultivariateFactorize|))))))))))) 

(DEFUN |MultivariateFactorize;| (|#1| |#2| |#3| |#4|)
  (PROG (DV$1 DV$2 DV$3 DV$4 |dv$| $ |pv$|)
    (RETURN
      (PROGN
        (LETT DV$1 (|devaluate| |#1|) . #0=(|MultivariateFactorize|))
        (LETT DV$2 (|devaluate| |#2|) . #0#)
        (LETT DV$3 (|devaluate| |#3|) . #0#)
        (LETT DV$4 (|devaluate| |#4|) . #0#)
        (LETT |dv$|
              (LIST '|MultivariateFactorize| DV$1 DV$2 DV$3 DV$4) . #0#)
        (LETT $ (GETREFV 29) . #0#)
        (QSETREFV $ 0 |dv$|)
        (QSETREFV $ 3 (LETT |pv$| (|buildPredVector| 0 0 NIL) . #0#))
        (|haddProp| |$ConstructorCache| '|MultivariateFactorize|
            (LIST DV$1 DV$2 DV$3 DV$4) (CONS 1 $))
        (|stuffDomainSlots| $)
        (QSETREFV $ 6 |#1|)
        (QSETREFV $ 7 |#2|)
        (QSETREFV $ 8 |#3|)
        (QSETREFV $ 9 |#4|)
        $)))) 

(MAKEPROP '|MultivariateFactorize| '|infovec|
    (LIST '#(NIL NIL NIL NIL NIL NIL (|local| |#1|) (|local| |#2|)
             (|local| |#3|) (|local| |#4|) (|Factored| 9)
             (|MRationalFactorize| 7 6 (|Integer|) 9) (0 . |factor|)
             (|MRationalFactorize| 7 6 (|Complex| (|Integer|)) 9)
             (5 . |factor|)
             (|MPolyCatRationalFunctionFactorizer| 7 6 (|Integer|) 9)
             (10 . |factor|) (|Factored| 18)
             (|SparseUnivariatePolynomial| 8) (|GenUFactorize| 8)
             (15 . |factor|) (|Mapping| 17 18)
             (|InnerMultFact| 6 7 8 9) (20 . |factor|)
             |MULTFACT;factor;PF;1| (|Factored| 26)
             (|SparseUnivariatePolynomial| 9) (26 . |factor|)
             |MULTFACT;factor;SupF;2|)
          '#(|factor| 32) 'NIL
          (CONS (|makeByteWordVec2| 1 'NIL)
                (CONS '#()
                      (CONS '#()
                            (|makeByteWordVec2| 28
                                '(1 11 10 9 12 1 13 10 9 14 1 15 10 9
                                  16 1 19 17 18 20 2 22 10 9 21 23 2 22
                                  25 26 21 27 1 0 25 26 28 1 0 10 9 24)))))
          '|lookupComplete|)) 
