public static Keyword absoluteValueSpecialist(ControlFrame frame, Keyword lastmove) {
    { Proposition proposition = frame.proposition;
      Stella_Object mainarg = (proposition.arguments.theArray)[0];
      Stella_Object mainargvalue = Logic.argumentBoundTo(mainarg);
      Stella_Object absarg = (proposition.arguments.theArray)[1];
      Stella_Object absargvalue = Logic.argumentBoundTo(absarg);
      Iterator iterator = ((Iterator)(KeyValueList.dynamicSlotValue(frame.dynamicSlots, Logic.SYM_STELLA_ITERATOR, null)));
      Cons collection = Stella.NIL;

      lastmove = lastmove;
      if (iterator == null) {
        if (absargvalue == null) {
          if (mainargvalue == null) {
            return (Logic.KWD_TERMINAL_FAILURE);
          }
          else {
            if (Stella_Object.isaP(mainargvalue, Logic.SGT_STELLA_NUMBER_WRAPPER)) {
              if (((Boolean)(Logic.$REVERSEPOLARITYp$.get())).booleanValue()) {
                return (Logic.KWD_FAILURE);
              }
              else {
                return (Logic.selectProofResult(Logic.bindArgumentToValueP(absarg, PlKernelKb.absComputation(((NumberWrapper)(mainargvalue))), true), false, true));
              }
            }
            else {
              return (Logic.KWD_TERMINAL_FAILURE);
            }
          }
        }
        else {
          if (Stella_Object.isaP(absargvalue, Logic.SGT_STELLA_NUMBER_WRAPPER)) {
            if (PlKernelKb.arithmeticLessTest(((NumberWrapper)(absargvalue)), IntegerWrapper.wrapInteger(0))) {
              return (Logic.KWD_TERMINAL_FAILURE);
            }
            else {
              if (((Boolean)(Logic.$REVERSEPOLARITYp$.get())).booleanValue()) {
                return (Logic.KWD_FAILURE);
              }
              else {
                collection = Cons.consList(Cons.cons(absargvalue, Cons.cons(PlKernelKb.negateComputation(((NumberWrapper)(absargvalue))), Stella.NIL)));
              }
            }
          }
          else {
            return (Logic.KWD_TERMINAL_FAILURE);
          }
        }
      }
      if (mainargvalue != null) {
        return (Logic.selectTestResult(PlKernelKb.arithmeticEqualTest(((NumberWrapper)(mainargvalue)), ((NumberWrapper)(collection.value))) ||
            PlKernelKb.arithmeticEqualTest(((NumberWrapper)(mainargvalue)), ((NumberWrapper)(collection.rest.value))), true, frame));
      }
      if (iterator == null) {
        iterator = collection.allocateIterator();
        KeyValueList.setDynamicSlotValue(frame.dynamicSlots, Logic.SYM_STELLA_ITERATOR, iterator, null);
      }
      if (iterator.nextP() &&
          Logic.bindArgumentToValueP(mainarg, iterator.value, true)) {
        return (Logic.KWD_CONTINUING_SUCCESS);
      }
      else {
        return (Logic.KWD_TERMINAL_FAILURE);
      }
    }
  }