w = DIGIT(a, max - 1) * d;
w = (mp_word)DIGIT(a, max - 1) * d;
mp_err   s_mp_mul_d(mp_int *a, mp_digit d){  mp_word w, k = 0;  mp_size ix, max;  mp_err  res;  /*    Single-digit multiplication will increase the precision of the    output by at most one digit.  However, we can detect when this    will happen -- if the high-order digit of a, times d, gives a    two-digit result, then the precision of the result will increase;    otherwise it won't.  We use this fact to avoid calling s_mp_pad()    unless absolutely necessary.   */  max = USED(a);  w = DIGIT(a, max - 1) * d;  if(CARRYOUT(w) != 0) {    if((res = s_mp_pad(a, max + 1)) != MP_OKAY)      return res;  }  for(ix = 0; ix < max; ix++) {    w = (DIGIT(a, ix) * d) + k;    DIGIT(a, ix) = ACCUM(w);    k = CARRYOUT(w);  }  /* If there is a precision increase, take care of it here; the above     test guarantees we have enough storage to do this safely.   */  if(k)    DIGIT(a, max) = k;  s_mp_clamp(a);  return MP_OKAY;  } /* end s_mp_mul_d() */